(self.webpackChunkflow_os=self.webpackChunkflow_os||[]).push([[501],{5501:(e,t,i)=>{!function(){var e=function(){return this}();e||"undefined"==typeof window||(e=window);var t=function(e,i,n){"string"==typeof e?(2==arguments.length&&(n=i),t.modules[e]||(t.payloads[e]=n,t.modules[e]=null)):t.original?t.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace())};t.modules={},t.payloads={};var i,n,s=function(e,t,i){if("string"==typeof t){var n=a(e,t);if(null!=n)return i&&i(),n}else if("[object Array]"===Object.prototype.toString.call(t)){for(var s=[],r=0,l=t.length;r1&&function(e,t,i){if(Array.prototype.indexOf)return e.indexOf("",i);for(var n=0;n-1&&(i=RegExp(this.source,s.replace.call(((n=this).global?"g":"")+(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.extended?"x":"")+(n.sticky?"y":""),"g","")),s.replace.call(e.slice(a.index),i,(function(){for(var e=1;ea.index&&this.lastIndex--}return a},r||(RegExp.prototype.test=function(e){var t=s.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t}))})),ace.define("ace/lib/es5-shim",["require","exports","module"],(function(e,t,i){function n(){}Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if("function"!=typeof t)throw new TypeError("Function.prototype.bind called on incompatible "+t);var i=d.call(arguments,1),s=function(){if(this instanceof s){var n=t.apply(this,i.concat(d.call(arguments)));return Object(n)===n?n:this}return t.apply(e,i.concat(d.call(arguments)))};return t.prototype&&(n.prototype=t.prototype,s.prototype=new n,n.prototype=null),s});var s,o,r,a,l,h=Function.prototype.call,c=Array.prototype,u=Object.prototype,d=c.slice,g=h.bind(u.toString),f=h.bind(u.hasOwnProperty);if((l=f(u,"__defineGetter__"))&&(s=h.bind(u.__defineGetter__),o=h.bind(u.__defineSetter__),r=h.bind(u.__lookupGetter__),a=h.bind(u.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t,i=[];if(i.splice.apply(i,e(20)),i.splice.apply(i,e(26)),t=i.length,i.splice(5,0,"XXX"),i.length,t+1==i.length)return!0}()){var m=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?m.apply(this,[void 0===e?0:e,void 0===t?this.length-e:t].concat(d.call(arguments,2))):[]}}else Array.prototype.splice=function(e,t){var i=this.length;e>0?e>i&&(e=i):null==e?e=0:e<0&&(e=Math.max(i+e,0)),e+ta)for(u=h;u--;)this[l+u]=this[a+u];if(o&&e===c)this.length=c,this.push.apply(this,s);else for(this.length=c+o,u=0;u>>0;if("[object Function]"!=g(e))throw new TypeError;for(;++s>>0,s=Array(n),o=arguments[1];if("[object Function]"!=g(e))throw new TypeError(e+" is not a function");for(var r=0;r>>0,o=[],r=arguments[1];if("[object Function]"!=g(e))throw new TypeError(e+" is not a function");for(var a=0;a>>0,s=arguments[1];if("[object Function]"!=g(e))throw new TypeError(e+" is not a function");for(var o=0;o>>0,s=arguments[1];if("[object Function]"!=g(e))throw new TypeError(e+" is not a function");for(var o=0;o>>0;if("[object Function]"!=g(e))throw new TypeError(e+" is not a function");if(!n&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var s,o=0;if(arguments.length>=2)s=arguments[1];else for(;;){if(o in i){s=i[o++];break}if(++o>=n)throw new TypeError("reduce of empty array with no initial value")}for(;o>>0;if("[object Function]"!=g(e))throw new TypeError(e+" is not a function");if(!n&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var s,o=n-1;if(arguments.length>=2)s=arguments[1];else for(;;){if(o in i){s=i[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}do{o in this&&(s=e.call(void 0,s,i[o],o,t))}while(o--);return s}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(e){var t=F&&"[object String]"==g(this)?this.split(""):R(this),i=t.length>>>0;if(!i)return-1;var n=0;for(arguments.length>1&&(n=L(arguments[1])),n=n>=0?n:Math.max(0,i+n);n>>0;if(!i)return-1;var n=i-1;for(arguments.length>1&&(n=Math.min(n,L(arguments[1]))),n=n>=0?n:i-Math.abs(n);n>=0;n--)if(n in t&&e===t[n])return n;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(e){return e.__proto__||(e.constructor?e.constructor.prototype:u)}),Object.getOwnPropertyDescriptor||(Object.getOwnPropertyDescriptor=function(e,t){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.getOwnPropertyDescriptor called on a non-object: "+e);if(f(e,t)){var i;if(i={enumerable:!0,configurable:!0},l){var n=e.__proto__;e.__proto__=u;var s=r(e,t),o=a(e,t);if(e.__proto__=n,s||o)return s&&(i.get=s),o&&(i.set=o),i}return i.value=e[t],i}}),Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(e){return Object.keys(e)}),Object.create||(p=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(e,t){var i;if(null===e)i=p();else{if("object"!=typeof e)throw new TypeError("typeof prototype["+typeof e+"] != 'object'");var n=function(){};n.prototype=e,(i=new n).__proto__=e}return void 0!==t&&Object.defineProperties(i,t),i}),Object.defineProperty){var v=w({}),E="undefined"==typeof document||w(document.createElement("div"));if(!v||!E)var b=Object.defineProperty}Object.defineProperty&&!b||(Object.defineProperty=function(e,t,i){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.defineProperty called on non-object: "+e);if("object"!=typeof i&&"function"!=typeof i||null===i)throw new TypeError("Property description must be an object: "+i);if(b)try{return b.call(Object,e,t,i)}catch(e){}if(f(i,"value"))if(l&&(r(e,t)||a(e,t))){var n=e.__proto__;e.__proto__=u,delete e[t],e[t]=i.value,e.__proto__=n}else e[t]=i.value;else{if(!l)throw new TypeError("getters & setters can not be defined on this javascript engine");f(i,"get")&&s(e,t,i.get),f(i,"set")&&o(e,t,i.set)}return e}),Object.defineProperties||(Object.defineProperties=function(e,t){for(var i in t)f(t,i)&&Object.defineProperty(e,i,t[i]);return e}),Object.seal||(Object.seal=function(e){return e}),Object.freeze||(Object.freeze=function(e){return e});try{Object.freeze((function(){}))}catch(e){Object.freeze=(A=Object.freeze,function(e){return"function"==typeof e?e:A(e)})}if(Object.preventExtensions||(Object.preventExtensions=function(e){return e}),Object.isSealed||(Object.isSealed=function(e){return!1}),Object.isFrozen||(Object.isFrozen=function(e){return!1}),Object.isExtensible||(Object.isExtensible=function(e){if(Object(e)===e)throw new TypeError;for(var t="";f(e,t);)t+="?";e[t]=!0;var i=f(e,t);return delete e[t],i}),!Object.keys){var $=!0,y=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],B=y.length;for(var D in{toString:null})$=!1;Object.keys=function(e){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.keys called on a non-object");var t=[];for(var i in e)f(e,i)&&t.push(i);if($)for(var n=0,s=B;n0||-1)*Math.floor(Math.abs(e))),e}var R=function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return Object(e)}})),ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],(function(e,t,i){"use strict";e("./regexp"),e("./es5-shim")})),ace.define("ace/lib/dom",["require","exports","module"],(function(e,t,i){"use strict";t.getDocumentHead=function(e){return e||(e=document),e.head||e.getElementsByTagName("head")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||"http://www.w3.org/1999/xhtml",e):document.createElement(e)},t.hasCssClass=function(e,t){return-1!==(e.className+"").split(/\s+/g).indexOf(t)},t.addCssClass=function(e,i){t.hasCssClass(e,i)||(e.className+=" "+i)},t.removeCssClass=function(e,t){for(var i=e.className.split(/\s+/g);;){var n=i.indexOf(t);if(-1==n)break;i.splice(n,1)}e.className=i.join(" ")},t.toggleCssClass=function(e,t){for(var i=e.className.split(/\s+/g),n=!0;;){var s=i.indexOf(t);if(-1==s)break;n=!1,i.splice(s,1)}return n&&i.push(t),e.className=i.join(" "),n},t.setCssClass=function(e,i,n){n?t.addCssClass(e,i):t.removeCssClass(e,i)},t.hasCssString=function(e,t){var i,n=0;if((t=t||document).createStyleSheet&&(i=t.styleSheets)){for(;n=0?parseFloat((s.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((s.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&"Gecko"===window.navigator.product,t.isOldGecko=t.isGecko&&parseInt((s.match(/rv:(\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&"[object Opera]"==Object.prototype.toString.call(window.opera),t.isWebKit=parseFloat(s.split("WebKit/")[1])||void 0,t.isChrome=parseFloat(s.split(" Chrome/")[1])||void 0,t.isAIR=s.indexOf("AdobeAIR")>=0,t.isIPad=s.indexOf("iPad")>=0,t.isChromeOS=s.indexOf(" CrOS ")>=0,t.isIOS=/iPad|iPhone|iPod/.test(s)&&!window.MSStream,t.isIOS&&(t.isMac=!0)}})),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,i){"use strict";var n=e("./keys"),s=e("./useragent"),o=null,r=0;t.addListener=function(e,t,i){if(e.addEventListener)return e.addEventListener(t,i,!1);if(e.attachEvent){var n=function(){i.call(e,window.event)};i._wrapper=n,e.attachEvent("on"+t,n)}},t.removeListener=function(e,t,i){if(e.removeEventListener)return e.removeEventListener(t,i,!1);e.detachEvent&&e.detachEvent("on"+t,i._wrapper||i)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return"dblclick"==e.type?0:"contextmenu"==e.type||s.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,i,n){function s(e){i&&i(e),n&&n(e),t.removeListener(document,"mousemove",i,!0),t.removeListener(document,"mouseup",s,!0),t.removeListener(document,"dragstart",s,!0)}return t.addListener(document,"mousemove",i,!0),t.addListener(document,"mouseup",s,!0),t.addListener(document,"dragstart",s,!0),s},t.addTouchMoveListener=function(e,i){var n,s;t.addListener(e,"touchstart",(function(e){var t=e.touches[0];n=t.clientX,s=t.clientY})),t.addListener(e,"touchmove",(function(e){var t=e.touches;if(!(t.length>1)){var o=t[0];e.wheelX=n-o.clientX,e.wheelY=s-o.clientY,n=o.clientX,s=o.clientY,i(e)}}))},t.addMouseWheelListener=function(e,i){"onmousewheel"in e?t.addListener(e,"mousewheel",(function(e){void 0!==e.wheelDeltaX?(e.wheelX=-e.wheelDeltaX/8,e.wheelY=-e.wheelDeltaY/8):(e.wheelX=0,e.wheelY=-e.wheelDelta/8),i(e)})):"onwheel"in e?t.addListener(e,"wheel",(function(e){switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=.35*e.deltaX||0,e.wheelY=.35*e.deltaY||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=5*(e.deltaX||0),e.wheelY=5*(e.deltaY||0)}i(e)})):t.addListener(e,"DOMMouseScroll",(function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=5*(e.detail||0),e.wheelY=0):(e.wheelX=0,e.wheelY=5*(e.detail||0)),i(e)}))},t.addMultiMouseDownListener=function(e,i,n,o){var r,a,l,h=0,c={2:"dblclick",3:"tripleclick",4:"quadclick"};function u(e){if(0!==t.getButton(e)?h=0:e.detail>1?++h>4&&(h=1):h=1,s.isIE){var u=Math.abs(e.clientX-r)>5||Math.abs(e.clientY-a)>5;l&&!u||(h=1),l&&clearTimeout(l),l=setTimeout((function(){l=null}),i[h-1]||600),1==h&&(r=e.clientX,a=e.clientY)}if(e._clicks=h,n[o]("mousedown",e),h>4)h=0;else if(h>1)return n[o](c[h],e)}function d(e){h=2,l&&clearTimeout(l),l=setTimeout((function(){l=null}),i[h-1]||600),n[o]("mousedown",e),n[o](c[h],e)}Array.isArray(e)||(e=[e]),e.forEach((function(e){t.addListener(e,"mousedown",u),s.isOldIE&&t.addListener(e,"dblclick",d)}))};var a=s.isMac&&s.isOpera&&!("KeyboardEvent"in window)?function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)}:function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)};function l(e,t,i){var l=a(t);if(!s.isMac&&o){if(t.getModifierState&&(t.getModifierState("OS")||t.getModifierState("Win"))&&(l|=8),o.altGr){if(3==(3&l))return;o.altGr=0}if(18===i||17===i){var h="location"in t?t.location:t.keyLocation;17===i&&1===h?1==o[i]&&(r=t.timeStamp):18===i&&3===l&&2===h&&t.timeStamp-r<50&&(o.altGr=!0)}}if(i in n.MODIFIER_KEYS&&(i=-1),8&l&&i>=91&&i<=93&&(i=-1),l||13!==i||3!==(h="location"in t?t.location:t.keyLocation)||(e(t,l,-i),!t.defaultPrevented)){if(s.isChromeOS&&8&l){if(e(t,l,i),t.defaultPrevented)return;l&=-9}return!!(l||i in n.FUNCTION_KEYS||i in n.PRINTABLE_KEYS)&&e(t,l,i)}}function h(){o=Object.create(null)}t.getModifierString=function(e){return n.KEY_MODS[a(e)]},t.addCommandKeyListener=function(e,i){var n=t.addListener;if(s.isOldGecko||s.isOpera&&!("KeyboardEvent"in window)){var r=null;n(e,"keydown",(function(e){r=e.keyCode})),n(e,"keypress",(function(e){return l(i,e,r)}))}else{var a=null;n(e,"keydown",(function(e){o[e.keyCode]=(o[e.keyCode]||0)+1;var t=l(i,e,e.keyCode);return a=e.defaultPrevented,t})),n(e,"keypress",(function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)})),n(e,"keyup",(function(e){o[e.keyCode]=null})),o||(h(),n(window,"focus",h))}},"object"==typeof window&&window.postMessage&&!s.isOldIE&&(t.nextTick=function(e,i){i=i||window;var n="zero-timeout-message-1";t.addListener(i,"message",(function s(o){o.data==n&&(t.stopPropagation(o),t.removeListener(i,"message",s),e())})),i.postMessage(n,"*")}),t.nextFrame="object"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}})),ace.define("ace/lib/lang",["require","exports","module"],(function(e,t,i){"use strict";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){for(var i="";t>0;)1&t&&(i+=e),(t>>=1)&&(e+=e);return i};var n=/^\s\s*/,s=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(n,"")},t.stringTrimRight=function(e){return e.replace(s,"")},t.copyObject=function(e){var t={};for(var i in e)t[i]=e[i];return t},t.copyArray=function(e){for(var t=[],i=0,n=e.length;i9?e=e.substr(9):e.substr(0,4)==u.substr(0,4)?e=e.substr(4,e.length-9+1):e.charAt(e.length-1)==u.charAt(0)&&(e=e.slice(0,-1)),e==u.charAt(0)||e.charAt(e.length-1)==u.charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),d&&(d=!1),$&&($=!1))},B=function(e){if(!m){var t=i.value;y(t),E()}},D=function(e,t,i){var n=e.clipboardData||window.clipboardData;if(n&&!h){var s=c||i?"Text":"text/plain";try{return t?!1!==n.setData(s,t):n.getData(s)}catch(e){if(!i)return D(e,t,!0)}}},S=function(e,o){var r=t.getCopyText();if(!r)return n.preventDefault(e);D(e,r)?(s.isIOS&&(g=o,i.value="\n aa"+r+"a a\n",i.setSelectionRange(4,4+r.length),d={value:r}),o?t.onCut():t.onCopy(),s.isIOS||n.preventDefault(e)):(d=!0,i.value=r,i.select(),setTimeout((function(){d=!1,E(),v(),o?t.onCut():t.onCopy()})))};n.addCommandKeyListener(i,t.onCommandKey.bind(t)),n.addListener(i,"select",(function(e){!function(e){return 0===e.selectionStart&&e.selectionEnd===e.value.length}(i)?b&&v(t.selection.isEmpty()):(t.selectAll(),v())})),n.addListener(i,"input",B),n.addListener(i,"cut",(function(e){S(e,!0)})),n.addListener(i,"copy",(function(e){S(e,!1)})),n.addListener(i,"paste",(function(e){var o=D(e);"string"==typeof o?(o&&t.onPaste(o,e),s.isIE&&setTimeout(v),n.preventDefault(e)):(i.value="",f=!0)}));var x,k=function(){if(m&&t.onCompositionUpdate&&!t.$readOnly){var e=i.value.replace(/\x01/g,"");if(m.lastValue!==e&&(t.onCompositionUpdate(e),m.lastValue&&t.undo(),m.canUndo&&(m.lastValue=e),m.lastValue)){var n=t.selection.getRange();t.insert(m.lastValue),t.session.markUndoGroup(),m.range=t.selection.getRange(),t.selection.setRange(n),t.selection.clearSelection()}}},L=function(e){if(t.onCompositionEnd&&!t.$readOnly){var n=m;m=!1;var o=setTimeout((function(){o=null;var e=i.value.replace(/\x01/g,"");m||(e==n.lastValue?E():!n.lastValue&&e&&(E(),y(e)))}));b=function(e){return o&&clearTimeout(o),(e=e.replace(/\x01/g,""))==n.lastValue?"":(n.lastValue&&o&&t.undo(),e)},t.onCompositionEnd(),t.removeListener("mousedown",L),"compositionend"==e.type&&n.range&&t.selection.setRange(n.range),(s.isChrome&&s.isChrome>=53||s.isWebKit&&s.isWebKit>=603)&&B()}},R=r.delayedCall(k,50);function M(){clearTimeout(x),x=setTimeout((function(){p&&(i.style.cssText=p,p=""),null==t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())}),0)}n.addListener(i,"compositionstart",(function(e){m||!t.onCompositionStart||t.$readOnly||((m={}).canUndo=t.session.$undoManager,t.onCompositionStart(),setTimeout(k,0),t.on("mousedown",L),m.canUndo&&!t.selection.isEmpty()&&(t.insert(""),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup())})),s.isGecko?n.addListener(i,"text",(function(){R.schedule()})):(n.addListener(i,"keyup",(function(){R.schedule()})),n.addListener(i,"keydown",(function(){R.schedule()}))),n.addListener(i,"compositionend",L),this.getElement=function(){return i},this.setReadOnly=function(e){i.readOnly=e},this.onContextMenu=function(e){$=!0,v(t.selection.isEmpty()),t._emit("nativecontextmenu",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,r){p||(p=i.style.cssText),i.style.cssText=(r?"z-index:100000;":"")+"height:"+i.style.height+";"+(s.isIE?"opacity:0.1;":"");var a=t.container.getBoundingClientRect(),l=o.computedStyle(t.container),h=a.top+(parseInt(l.borderTopWidth)||0),c=a.left+(parseInt(a.borderLeftWidth)||0),u=a.bottom-h-i.clientHeight-2,d=function(e){i.style.left=e.clientX-c-2+"px",i.style.top=Math.min(e.clientY-h-2,u)+"px"};d(e),"mousedown"==e.type&&(t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(x),s.isWin&&n.capture(t.container,d,M))},this.onContextMenuClose=M;var T=function(e){t.textInput.onContextMenu(e),M()};if(n.addListener(i,"mouseup",T),n.addListener(i,"mousedown",(function(e){e.preventDefault(),M()})),n.addListener(t.renderer.scroller,"contextmenu",T),n.addListener(i,"contextmenu",T),s.isIOS){var _=null,O=!1;e.addEventListener("keydown",(function(e){_&&clearTimeout(_),O=!0})),e.addEventListener("keyup",(function(e){_=setTimeout((function(){O=!1}),100)}));var I=function(e){if(document.activeElement===i&&!O){if(g)return setTimeout((function(){g=!1}),100);var n=i.selectionStart,s=i.selectionEnd;if(i.setSelectionRange(4,5),n==s)switch(n){case 0:t.onCommandKey(null,0,a.up);break;case 1:t.onCommandKey(null,0,a.home);break;case 2:t.onCommandKey(null,l.option,a.left);break;case 4:t.onCommandKey(null,0,a.left);break;case 5:t.onCommandKey(null,0,a.right);break;case 7:t.onCommandKey(null,l.option,a.right);break;case 8:t.onCommandKey(null,0,a.end);break;case 9:t.onCommandKey(null,0,a.down)}else{switch(s){case 6:t.onCommandKey(null,l.shift,a.right);break;case 7:t.onCommandKey(null,l.shift|l.option,a.right);break;case 8:t.onCommandKey(null,l.shift,a.end);break;case 9:t.onCommandKey(null,l.shift,a.down)}switch(n){case 0:t.onCommandKey(null,l.shift,a.up);break;case 1:t.onCommandKey(null,l.shift,a.home);break;case 2:t.onCommandKey(null,l.shift|l.option,a.left);break;case 3:t.onCommandKey(null,l.shift,a.left)}}}};document.addEventListener("selectionchange",I),t.on("destroy",(function(){document.removeEventListener("selectionchange",I)}))}}})),ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom","ace/lib/lang","ace/keyboard/textinput_ios"],(function(e,t,i){"use strict";var n=e("../lib/event"),s=e("../lib/useragent"),o=e("../lib/dom"),r=e("../lib/lang"),a=s.isChrome<18,l=s.isIE,h=e("./textinput_ios").TextInput;t.TextInput=function(e,t){if(s.isIOS)return h.call(this,e,t);var i=o.createElement("textarea");i.className="ace_text-input",i.setAttribute("wrap","off"),i.setAttribute("autocorrect","off"),i.setAttribute("autocapitalize","off"),i.setAttribute("spellcheck",!1),i.style.opacity="0",e.insertBefore(i,e.firstChild);var c="\u2028\u2028",u=!1,d=!1,g=!1,f="",m=!0;try{var p=document.activeElement===i}catch(e){}n.addListener(i,"blur",(function(e){t.onBlur(e),p=!1})),n.addListener(i,"focus",(function(e){p=!0,t.onFocus(e),F()})),this.focus=function(){if(f)return i.focus();var e=i.style.top;i.style.position="fixed",i.style.top="0px",i.focus(),setTimeout((function(){i.style.position="","0px"==i.style.top&&(i.style.top=e)}),0)},this.blur=function(){i.blur()},this.isFocused=function(){return p};var A=r.delayedCall((function(){p&&F(m)})),C=r.delayedCall((function(){g||(i.value=c,p&&F())}));function F(e){if(!g){if(g=!0,v)var t=0,n=e?0:i.value.length-1;else t=e?2:1,n=2;try{i.setSelectionRange(t,n)}catch(e){}g=!1}}function w(){g||(i.value=c,s.isWebKit&&C.schedule())}s.isWebKit||t.addEventListener("changeSelection",(function(){t.selection.isEmpty()!=m&&(m=!m,A.schedule())})),w(),p&&t.onFocus();var v=null;this.setInputHandler=function(e){v=e},this.getInputHandler=function(){return v};var E=!1,b=function(e){v&&(e=v(e),v=null),d?(F(),e&&t.onPaste(e),d=!1):e==c.charAt(0)?E?t.execCommand("del",{source:"ace"}):t.execCommand("backspace",{source:"ace"}):(e.substring(0,2)==c?e=e.substr(2):e.charAt(0)==c.charAt(0)?e=e.substr(1):e.charAt(e.length-1)==c.charAt(0)&&(e=e.slice(0,-1)),e.charAt(e.length-1)==c.charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),E&&(E=!1)},$=function(e){if(!g){var t=i.value;b(t),w()}},y=function(e,t,i){var n=e.clipboardData||window.clipboardData;if(n&&!a){var s=l||i?"Text":"text/plain";try{return t?!1!==n.setData(s,t):n.getData(s)}catch(e){if(!i)return y(e,t,!0)}}},B=function(e,s){var o=t.getCopyText();if(!o)return n.preventDefault(e);y(e,o)?(s?t.onCut():t.onCopy(),n.preventDefault(e)):(u=!0,i.value=o,i.select(),setTimeout((function(){u=!1,w(),F(),s?t.onCut():t.onCopy()})))},D=function(e){B(e,!0)},S=function(e){B(e,!1)},x=function(e){var o=y(e);"string"==typeof o?(o&&t.onPaste(o,e),s.isIE&&setTimeout(F),n.preventDefault(e)):(i.value="",d=!0)};n.addCommandKeyListener(i,t.onCommandKey.bind(t)),n.addListener(i,"select",(function(e){u?u=!1:function(e){return 0===e.selectionStart&&e.selectionEnd===e.value.length}(i)?(t.selectAll(),F()):v&&F(t.selection.isEmpty())})),n.addListener(i,"input",$),n.addListener(i,"cut",D),n.addListener(i,"copy",S),n.addListener(i,"paste",x),"oncut"in i&&"oncopy"in i&&"onpaste"in i||n.addListener(e,"keydown",(function(e){if((!s.isMac||e.metaKey)&&e.ctrlKey)switch(e.keyCode){case 67:S(e);break;case 86:x(e);break;case 88:D(e)}}));var k,L=function(){if(g&&t.onCompositionUpdate&&!t.$readOnly){var e=i.value.replace(/\u2028/g,"");if(g.lastValue!==e&&(t.onCompositionUpdate(e),g.lastValue&&t.undo(),g.canUndo&&(g.lastValue=e),g.lastValue)){var n=t.selection.getRange();t.insert(g.lastValue),t.session.markUndoGroup(),g.range=t.selection.getRange(),t.selection.setRange(n),t.selection.clearSelection()}}},R=function(e){if(t.onCompositionEnd&&!t.$readOnly){var n=g;g=!1;var o=setTimeout((function(){o=null;var e=i.value.replace(/\u2028/g,"");g||(e==n.lastValue?w():!n.lastValue&&e&&(w(),b(e)))}));v=function(e){return o&&clearTimeout(o),(e=e.replace(/\u2028/g,""))==n.lastValue?"":(n.lastValue&&o&&t.undo(),e)},t.onCompositionEnd(),t.removeListener("mousedown",R),"compositionend"==e.type&&n.range&&t.selection.setRange(n.range),(s.isChrome&&s.isChrome>=53||s.isWebKit&&s.isWebKit>=603)&&$()}},M=r.delayedCall(L,50);function T(){clearTimeout(k),k=setTimeout((function(){f&&(i.style.cssText=f,f=""),null==t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())}),0)}n.addListener(i,"compositionstart",(function(e){g||!t.onCompositionStart||t.$readOnly||((g={}).canUndo=t.session.$undoManager,t.onCompositionStart(),setTimeout(L,0),t.on("mousedown",R),g.canUndo&&!t.selection.isEmpty()&&(t.insert(""),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup())})),s.isGecko?n.addListener(i,"text",(function(){M.schedule()})):(n.addListener(i,"keyup",(function(){M.schedule()})),n.addListener(i,"keydown",(function(){M.schedule()}))),n.addListener(i,"compositionend",R),this.getElement=function(){return i},this.setReadOnly=function(e){i.readOnly=e},this.onContextMenu=function(e){E=!0,F(t.selection.isEmpty()),t._emit("nativecontextmenu",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,r){f||(f=i.style.cssText),i.style.cssText=(r?"z-index:100000;":"")+"height:"+i.style.height+";"+(s.isIE?"opacity:0.1;":"");var a=t.container.getBoundingClientRect(),l=o.computedStyle(t.container),h=a.top+(parseInt(l.borderTopWidth)||0),c=a.left+(parseInt(a.borderLeftWidth)||0),u=a.bottom-h-i.clientHeight-2,d=function(e){i.style.left=e.clientX-c-2+"px",i.style.top=Math.min(e.clientY-h-2,u)+"px"};d(e),"mousedown"==e.type&&(t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(k),s.isWin&&n.capture(t.container,d,T))},this.onContextMenuClose=T;var _=function(e){t.textInput.onContextMenu(e),T()};n.addListener(i,"mouseup",_),n.addListener(i,"mousedown",(function(e){e.preventDefault(),T()})),n.addListener(t.renderer.scroller,"contextmenu",_),n.addListener(i,"contextmenu",_)}})),ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(e,t,i){"use strict";e("../lib/dom"),e("../lib/event");var n=e("../lib/useragent");function s(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler("mousedown",this.onMouseDown.bind(e)),t.setDefaultHandler("dblclick",this.onDoubleClick.bind(e)),t.setDefaultHandler("tripleclick",this.onTripleClick.bind(e)),t.setDefaultHandler("quadclick",this.onQuadClick.bind(e)),t.setDefaultHandler("mousewheel",this.onMouseWheel.bind(e)),t.setDefaultHandler("touchmove",this.onTouchMove.bind(e)),["select","startSelect","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","dragWait","dragWaitEnd","focusWait"].forEach((function(t){e[t]=this[t]}),this),e.selectByLines=this.extendSelectionBy.bind(e,"getLineRange"),e.selectByWords=this.extendSelectionBy.bind(e,"getWordRange")}function o(e,t){if(e.start.row==e.end.row)var i=2*t.column-e.start.column-e.end.column;else if(e.start.row!=e.end.row-1||e.start.column||e.end.column)i=2*t.row-e.start.row-e.end.row;else i=t.column-4;return i<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}(function(){this.onMouseDown=function(e){var t=e.inSelection(),i=e.getDocumentPosition();this.mousedownEvent=e;var s=this.editor,o=e.getButton();if(0!==o){var r=s.getSelectionRange().isEmpty();return s.$blockScrolling++,(r||1==o)&&s.selection.moveToPosition(i),s.$blockScrolling--,void(2==o&&(s.textInput.onContextMenu(e.domEvent),n.isMozilla||e.preventDefault()))}return this.mousedownEvent.time=Date.now(),!t||s.isFocused()||(s.focus(),!this.$focusTimout||this.$clickSelection||s.inMultiSelectMode)?(this.captureMouse(e),this.startSelect(i,e.domEvent._clicks>1),e.preventDefault()):(this.setState("focusWait"),void this.captureMouse(e))},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var i=this.editor;i.$blockScrolling++,this.mousedownEvent.getShiftKey()?i.selection.selectToPosition(e):t||i.selection.moveToPosition(e),t||this.select(),i.renderer.scroller.setCapture&&i.renderer.scroller.setCapture(),i.setStyle("ace_selecting"),this.setState("select"),i.$blockScrolling--},this.select=function(){var e,t=this.editor,i=t.renderer.screenToTextCoordinates(this.x,this.y);if(t.$blockScrolling++,this.$clickSelection){var n=this.$clickSelection.comparePoint(i);if(-1==n)e=this.$clickSelection.end;else if(1==n)e=this.$clickSelection.start;else{var s=o(this.$clickSelection,i);i=s.cursor,e=s.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(i),t.$blockScrolling--,t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,i=this.editor,n=i.renderer.screenToTextCoordinates(this.x,this.y),s=i.selection[e](n.row,n.column);if(i.$blockScrolling++,this.$clickSelection){var r=this.$clickSelection.comparePoint(s.start),a=this.$clickSelection.comparePoint(s.end);if(-1==r&&a<=0)t=this.$clickSelection.end,s.end.row==n.row&&s.end.column==n.column||(n=s.start);else if(1==a&&r>=0)t=this.$clickSelection.start,s.start.row==n.row&&s.start.column==n.column||(n=s.end);else if(-1==r&&1==a)n=s.end,t=s.start;else{var l=o(this.$clickSelection,n);n=l.cursor,t=l.anchor}i.selection.setSelectionAnchor(t.row,t.column)}i.selection.selectToPosition(n),i.$blockScrolling--,i.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e,t,i,n,s=(e=this.mousedownEvent.x,t=this.mousedownEvent.y,i=this.x,n=this.y,Math.sqrt(Math.pow(i-e,2)+Math.pow(n-t,2))),o=Date.now();(s>0||o-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),i=this.editor,n=i.session.getBracketRange(t);n?(n.isEmpty()&&(n.start.column--,n.end.column++),this.setState("select")):(n=i.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=n,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),i=this.editor;this.setState("selectByLines");var n=i.getSelectionRange();n.isMultiLine()&&n.contains(t.row,t.column)?(this.$clickSelection=i.selection.getLineRange(n.start.row),this.$clickSelection.end=i.selection.getLineRange(n.end.row).end):this.$clickSelection=i.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(!e.getAccelKey()){e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var i=this.$lastScroll,n=e.domEvent.timeStamp,s=n-i.t,o=e.wheelX/s,r=e.wheelY/s;s<250&&(o=(o+i.vx)/2,r=(r+i.vy)/2);var a=Math.abs(o/r),l=!1;return a>=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(l=!0),a<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(l=!0),l?i.allowed=n:n-i.allowed<250&&(Math.abs(o)<=1.1*Math.abs(i.vx)&&Math.abs(r)<=1.1*Math.abs(i.vy)?(l=!0,i.allowed=n):i.allowed=0),i.t=n,i.vx=o,i.vy=r,l?(t.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()):void 0}},this.onTouchMove=function(e){this.editor._emit("mousewheel",e)}}).call(s.prototype),t.DefaultHandlers=s})),ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],(function(e,t,i){"use strict";e("./lib/oop");var n=e("./lib/dom");function s(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}(function(){this.$init=function(){return this.$element=n.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){n.setInnerText(this.getElement(),e)},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+"px",this.getElement().style.top=t+"px"},this.setClassName=function(e){n.addCssClass(this.getElement(),e)},this.show=function(e,t,i){null!=e&&this.setText(e),null!=t&&null!=i&&this.setPosition(t,i),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth},this.destroy=function(){this.isOpen=!1,this.$element&&this.$element.parentNode&&this.$element.parentNode.removeChild(this.$element)}}).call(s.prototype),t.Tooltip=s})),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],(function(e,t,i){"use strict";var n=e("../lib/dom"),s=e("../lib/oop"),o=e("../lib/event"),r=e("../tooltip").Tooltip;function a(e){r.call(this,e)}s.inherits(a,r),function(){this.setPosition=function(e,t){var i=window.innerWidth||document.documentElement.clientWidth,n=window.innerHeight||document.documentElement.clientHeight,s=this.getWidth(),o=this.getHeight();(e+=15)+s>i&&(e-=e+s-i),(t+=15)+o>n&&(t-=20+o),r.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=function(e){var t,i,s,r=e.editor,l=r.renderer.$gutterLayer,h=new a(r.container);function c(){t&&(t=clearTimeout(t)),s&&(h.hide(),s=null,r._signal("hideGutterTooltip",h),r.removeEventListener("mousewheel",c))}function u(e){h.setPosition(e.x,e.y)}e.editor.setDefaultHandler("guttermousedown",(function(t){if(r.isFocused()&&0==t.getButton()&&"foldWidgets"!=l.getRegion(t)){var i=t.getDocumentPosition().row,n=r.session.selection;if(t.getShiftKey())n.selectTo(i,0);else{if(2==t.domEvent.detail)return r.selectAll(),t.preventDefault();e.$clickSelection=r.selection.getLineRange(i)}return e.setState("selectByLines"),e.captureMouse(t),t.preventDefault()}})),e.editor.setDefaultHandler("guttermousemove",(function(o){var a=o.domEvent.target||o.domEvent.srcElement;if(n.hasCssClass(a,"ace_fold-widget"))return c();s&&e.$tooltipFollowsMouse&&u(o),i=o,t||(t=setTimeout((function(){t=null,i&&!e.isMousePressed?function(){var t=i.getDocumentPosition().row,n=l.$annotations[t];if(!n)return c();if(t==r.session.getLength()){var o=r.renderer.pixelToScreenCoordinates(0,i.y).row,a=i.$pos;if(o>r.session.documentToScreenRow(a.row,a.column))return c()}if(s!=n)if(s=n.text.join("
"),h.setHtml(s),h.show(),r._signal("showGutterTooltip",h),r.on("mousewheel",c),e.$tooltipFollowsMouse)u(i);else{var d=i.domEvent.target.getBoundingClientRect(),g=h.getElement().style;g.left=d.right+"px",g.top=d.bottom+"px"}}():c()}),50))})),o.addListener(r.renderer.$gutter,"mouseout",(function(e){i=null,s&&!t&&(t=setTimeout((function(){t=null,c()}),50))})),r.on("changeSession",c)}})),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],(function(e,t,i){"use strict";var n=e("../lib/event"),s=e("../lib/useragent"),o=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){n.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){n.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var e=this.editor.getSelectionRange();if(e.isEmpty())this.$inSelection=!1;else{var t=this.getDocumentPosition();this.$inSelection=e.contains(t.row,t.column)}return this.$inSelection},this.getButton=function(){return n.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=s.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(o.prototype)})),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(e,t,i){"use strict";var n=e("../lib/dom"),s=e("../lib/event"),o=e("../lib/useragent");function r(e){var t=e.editor,i=n.createElement("img");i.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",o.isOpera&&(i.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;"),["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"].forEach((function(t){e[t]=this[t]}),this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var r,l,h,c,u,d,g,f,m,p,A,C=t.container,F=0;function w(){var e=d;(function(e,i){var n=Date.now(),s=!i||e.row!=i.row,o=!i||e.column!=i.column;!p||s||o?(t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,p=n,A={x:l,y:h}):a(A.x,A.y,l,h)>5?p=null:n-p>=200&&(t.renderer.scrollCursorIntoView(),p=null)})(d=t.renderer.screenToTextCoordinates(l,h),e),function(e,i){var n=Date.now(),s=t.renderer.layerConfig.lineHeight,o=t.renderer.layerConfig.characterWidth,r=t.renderer.scroller.getBoundingClientRect(),a={x:{left:l-r.left,right:r.right-l},y:{top:h-r.top,bottom:r.bottom-h}},c=Math.min(a.x.left,a.x.right),u=Math.min(a.y.top,a.y.bottom),d={row:e.row,column:e.column};c/o<=2&&(d.column+=a.x.left=200&&t.renderer.scrollCursorIntoView(d):m=n:m=null}(d,e)}function v(){u=t.selection.toOrientedRange(),r=t.session.addMarker(u,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(c),w(),c=setInterval(w,20),F=0,s.addListener(document,"mousemove",$)}function E(){clearInterval(c),t.session.removeMarker(r),r=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(u),t.$blockScrolling-=1,t.isFocused()&&!f&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),u=null,d=null,F=0,m=null,p=null,s.removeListener(document,"mousemove",$)}this.onDragStart=function(e){if(this.cancelDrag||!C.draggable){var n=this;return setTimeout((function(){n.startSelect(),n.captureMouse(e)}),0),e.preventDefault()}u=t.getSelectionRange();var s=e.dataTransfer;s.effectAllowed=t.getReadOnly()?"copy":"copyMove",o.isOpera&&(t.container.appendChild(i),i.scrollTop=0),s.setDragImage&&s.setDragImage(i,0,0),o.isOpera&&t.container.removeChild(i),s.clearData(),s.setData("Text",t.session.getTextRange()),f=!0,this.setState("drag")},this.onDragEnd=function(e){if(C.draggable=!1,f=!1,this.setState(null),!t.getReadOnly()){var i=e.dataTransfer.dropEffect;g||"move"!=i||t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(e){if(!t.getReadOnly()&&y(e.dataTransfer))return l=e.clientX,h=e.clientY,r||v(),F++,e.dataTransfer.dropEffect=g=B(e),s.preventDefault(e)},this.onDragOver=function(e){if(!t.getReadOnly()&&y(e.dataTransfer))return l=e.clientX,h=e.clientY,r||(v(),F++),null!==b&&(b=null),e.dataTransfer.dropEffect=g=B(e),s.preventDefault(e)},this.onDragLeave=function(e){if(--F<=0&&r)return E(),g=null,s.preventDefault(e)},this.onDrop=function(e){if(d){var i=e.dataTransfer;if(f)switch(g){case"move":u=u.contains(d.row,d.column)?{start:d,end:d}:t.moveText(u,d);break;case"copy":u=t.moveText(u,d,!0)}else{var n=i.getData("Text");u={start:d,end:t.session.insert(d,n)},t.focus(),g=null}return E(),s.preventDefault(e)}},s.addListener(C,"dragstart",this.onDragStart.bind(e)),s.addListener(C,"dragend",this.onDragEnd.bind(e)),s.addListener(C,"dragenter",this.onDragEnter.bind(e)),s.addListener(C,"dragover",this.onDragOver.bind(e)),s.addListener(C,"dragleave",this.onDragLeave.bind(e)),s.addListener(C,"drop",this.onDrop.bind(e));var b=null;function $(){null==b&&(b=setTimeout((function(){null!=b&&r&&E()}),20))}function y(e){var t=e.types;return!t||Array.prototype.some.call(t,(function(e){return"text/plain"==e||"Text"==e}))}function B(e){var t=["copy","copymove","all","uninitialized"],i=o.isMac?e.altKey:e.ctrlKey,n="uninitialized";try{n=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var s="none";return i&&t.indexOf(n)>=0?s="copy":["move","copymove","linkmove","all","uninitialized"].indexOf(n)>=0?s="move":t.indexOf(n)>=0&&(s="copy"),s}}function a(e,t,i,n){return Math.sqrt(Math.pow(i-e,2)+Math.pow(n-t,2))}(function(){this.dragWait=function(){Date.now()-this.mousedownEvent.time>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){this.editor.container.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor;e.container.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var t=o.isWin?"default":"move";e.renderer.setCursorStyle(t),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;o.isIE&&"dragReady"==this.state&&a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>3&&t.dragDrop(),"dragWait"===this.state&&a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))},this.onMouseDown=function(e){if(this.$dragEnabled){this.mousedownEvent=e;var t=this.editor,i=e.inSelection(),n=e.getButton();if(1===(e.domEvent.detail||1)&&0===n&&i){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var s=e.domEvent.target||e.domEvent.srcElement;"unselectable"in s&&(s.unselectable="on"),t.getDragDelay()?(o.isWebKit&&(this.cancelDrag=!0,t.container.draggable=!0),this.setState("dragWait")):this.startDrag(),this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}}).call(r.prototype),t.DragdropHandler=r})),ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"],(function(e,t,i){"use strict";var n=e("./dom");t.get=function(e,t){var i=new XMLHttpRequest;i.open("GET",e,!0),i.onreadystatechange=function(){4===i.readyState&&t(i.responseText)},i.send(null)},t.loadScript=function(e,t){var i=n.getDocumentHead(),s=document.createElement("script");s.src=e,i.appendChild(s),s.onload=s.onreadystatechange=function(e,i){!i&&s.readyState&&"loaded"!=s.readyState&&"complete"!=s.readyState||(s=s.onload=s.onreadystatechange=null,i||t())}},t.qualifyURL=function(e){var t=document.createElement("a");return t.href=e,t.href}})),ace.define("ace/lib/event_emitter",["require","exports","module"],(function(e,t,i){"use strict";var n={},s=function(){this.propagationStopped=!0},o=function(){this.defaultPrevented=!0};n._emit=n._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var i=this._eventRegistry[e]||[],n=this._defaultHandlers[e];if(i.length||n){"object"==typeof t&&t||(t={}),t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=s),t.preventDefault||(t.preventDefault=o),i=i.slice();for(var r=0;r1&&(s=i[i.length-2]);var r=l[t+"Path"];return null==r?r=l.basePath:"/"==n&&(t=n=""),r&&"/"!=r.slice(-1)&&(r+="/"),r+t+n+s+this.get("suffix")},t.setModuleUrl=function(e,t){return l.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(i,n){var s,r;Array.isArray(i)&&(r=i[0],i=i[1]);try{s=e(i)}catch(e){}if(s&&!t.$loading[i])return n&&n(s);if(t.$loading[i]||(t.$loading[i]=[]),t.$loading[i].push(n),!(t.$loading[i].length>1)){var a=function(){e([i],(function(e){t._emit("load.module",{name:i,module:e});var n=t.$loading[i];t.$loading[i]=null,n.forEach((function(t){t&&t(e)}))}))};if(!t.get("packaged"))return a();o.loadScript(t.moduleUrl(i,r),a)}},h(!0),t.init=h})),ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"],(function(e,t,i){"use strict";var n=e("../lib/event"),s=e("../lib/useragent"),o=e("./default_handlers").DefaultHandlers,r=e("./default_gutter_handler").GutterHandler,a=e("./mouse_event").MouseEvent,l=e("./dragdrop_handler").DragdropHandler,h=e("../config"),c=function(e){var t=this;this.editor=e,new o(this),new r(this),new l(this);var i=function(t){(!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement()))&&window.focus(),e.focus()},a=e.renderer.getMouseEventTarget();n.addListener(a,"click",this.onMouseEvent.bind(this,"click")),n.addListener(a,"mousemove",this.onMouseMove.bind(this,"mousemove")),n.addMultiMouseDownListener([a,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,"onMouseEvent"),n.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,"mousewheel")),n.addTouchMoveListener(e.container,this.onTouchMove.bind(this,"touchmove"));var h=e.renderer.$gutter;n.addListener(h,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),n.addListener(h,"click",this.onMouseEvent.bind(this,"gutterclick")),n.addListener(h,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),n.addListener(h,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),n.addListener(a,"mousedown",i),n.addListener(h,"mousedown",i),s.isIE&&e.renderer.scrollBarV&&(n.addListener(e.renderer.scrollBarV.element,"mousedown",i),n.addListener(e.renderer.scrollBarH.element,"mousedown",i)),e.on("mousemove",(function(i){if(!t.state&&!t.$dragDelay&&t.$dragEnabled){var n=e.renderer.screenToTextCoordinates(i.x,i.y),s=e.session.selection.getRange(),o=e.renderer;!s.isEmpty()&&s.insideStart(n.row,n.column)?o.setCursorStyle("default"):o.setCursorStyle("")}}))};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new a(t,this.editor))},this.onMouseMove=function(e,t){var i=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;i&&i.length&&this.editor._emit(e,new a(t,this.editor))},this.onMouseWheel=function(e,t){var i=new a(t,this.editor);i.speed=2*this.$scrollSpeed,i.wheelX=t.wheelX,i.wheelY=t.wheelY,this.editor._emit(e,i)},this.onTouchMove=function(e,t){var i=new a(t,this.editor);i.speed=1,i.wheelX=t.wheelX,i.wheelY=t.wheelY,this.editor._emit(e,i)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var i=this.editor.renderer;i.$keepTextAreaAtCursor&&(i.$keepTextAreaAtCursor=null);var o=this,r=function(e){if(e){if(s.isWebKit&&!e.which&&o.releaseMouse)return o.releaseMouse();o.x=e.clientX,o.y=e.clientY,t&&t(e),o.mouseEvent=new a(e,o.editor),o.$mouseMoved=!0}},l=function(e){clearInterval(c),h(),o[o.state+"End"]&&o[o.state+"End"](e),o.state="",null==i.$keepTextAreaAtCursor&&(i.$keepTextAreaAtCursor=!0,i.$moveTextAreaToCursor()),o.isMousePressed=!1,o.$onCaptureMouseMove=o.releaseMouse=null,e&&o.onMouseEvent("mouseup",e)},h=function(){o[o.state]&&o[o.state](),o.$mouseMoved=!1};if(s.isOldIE&&"dblclick"==e.domEvent.type)return setTimeout((function(){l(e)}));o.$onCaptureMouseMove=r,o.releaseMouse=n.capture(this.editor.container,r,l);var c=setInterval(h,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){t&&t.domEvent&&"contextmenu"!=t.domEvent.type||(this.editor.off("nativecontextmenu",e),t&&t.domEvent&&n.stopEvent(t.domEvent))}.bind(this);setTimeout(e,10),this.editor.on("nativecontextmenu",e)}}).call(c.prototype),h.defineOptions(c.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:s.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=c})),ace.define("ace/mouse/fold_handler",["require","exports","module"],(function(e,t,i){"use strict";t.FoldHandler=function(e){e.on("click",(function(t){var i=t.getDocumentPosition(),n=e.session,s=n.getFoldAt(i.row,i.column,1);s&&(t.getAccelKey()?n.removeFold(s):n.expandFold(s),t.stop())})),e.on("gutterclick",(function(t){if("foldWidgets"==e.renderer.$gutterLayer.getRegion(t)){var i=t.getDocumentPosition().row,n=e.session;n.foldWidgets&&n.foldWidgets[i]&&e.session.onFoldWidgetClick(i,t),e.isFocused()||e.focus(),t.stop()}})),e.on("gutterdblclick",(function(t){if("foldWidgets"==e.renderer.$gutterLayer.getRegion(t)){var i=t.getDocumentPosition().row,n=e.session,s=n.getParentFoldRangeData(i,!0),o=s.range||s.firstRange;if(o){i=o.start.row;var r=n.getFoldAt(i,n.getLine(i).length,1);r?n.removeFold(r):(n.addFold("...",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}}))}})),ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],(function(e,t,i){"use strict";var n=e("../lib/keys"),s=e("../lib/event"),o=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]!=e){for(;t[t.length-1]&&t[t.length-1]!=this.$defaultHandler;)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)}},this.addKeyboardHandler=function(e,t){if(e){"function"!=typeof e||e.handleKeyboard||(e.handleKeyboard=e);var i=this.$handlers.indexOf(e);-1!=i&&this.$handlers.splice(i,1),null==t?this.$handlers.push(e):this.$handlers.splice(t,0,e),-1==i&&e.attach&&e.attach(this.$editor)}},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return-1!=t&&(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map((function(i){return i.getStatusText&&i.getStatusText(t,e)||""})).filter(Boolean).join(" ")},this.$callKeyboardHandlers=function(e,t,i,n){for(var o,r=!1,a=this.$editor.commands,l=this.$handlers.length;l--&&!((o=this.$handlers[l].handleKeyboard(this.$data,e,t,i,n))&&o.command&&((r="null"==o.command||a.exec(o.command,this.$editor,o.args,n))&&n&&-1!=e&&1!=o.passEvent&&1!=o.command.passEvent&&s.stopEvent(n),r)););return r||-1!=e||(o={command:"insertstring"},r=a.exec("insertstring",this.$editor,t)),r&&this.$editor._signal&&this.$editor._signal("keyboardActivity",o),r},this.onCommandKey=function(e,t,i){var s=n.keyCodeToString(i);this.$callKeyboardHandlers(t,s,i,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(o.prototype),t.KeyBinding=o})),ace.define("ace/lib/bidiutil",["require","exports","module"],(function(e,t,i){"use strict";var n=0,s=0,o=!1,r=!1,a=!1,l=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],h=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],c=11,u=18,d=[u,u,u,u,u,u,u,u,u,6,5,6,8,5,u,u,u,u,u,u,u,u,u,u,u,u,u,u,5,5,5,6,8,4,4,c,c,c,4,4,4,4,4,10,9,10,9,9,2,2,2,2,2,2,2,2,2,2,9,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,u,u,u,u,u,u,5,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,9,4,c,c,c,c,4,4,4,4,0,4,4,u,4,4,c,c,2,2,4,0,4,4,4,2,0,4,4,4,4,4],g=[8,8,8,8,8,8,8,8,8,8,8,u,u,u,0,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,5,13,14,15,16,17,9,c,c,c,c,c,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,9,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8];function f(e,t,i){if(!(s=e){for(o=u+1;o=e;)o++;for(a=u,l=o-1;a=t.length||2!=(l=i[s-1])&&3!=l||2!=(h=t[s+1])&&3!=h?4:(o&&(h=3),h==l?h:4);case 10:return 2==(l=s>0?i[s-1]:5)&&s+10&&2==i[s-1])return 2;if(o)return 4;for(g=s+1,d=t.length;g=1425&&m<=2303||64286==m;if(l=t[g],p&&(1==l||7==l))return 1}return s<1||5==(l=t[s-1])?4:i[s-1];case 5:return o=!1,r=!0,n;case 6:return a=!0,4;case 13:case 14:case 16:case 17:case 15:o=!1;case u:return 4}}function p(e){var t=e.charCodeAt(0),i=t>>8;return 0==i?t>191?0:d[t]:5==i?/[\u0591-\u05f4]/.test(e)?1:0:6==i?/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(e)?12:/[\u0660-\u0669\u066b-\u066c]/.test(e)?3:1642==t?c:/[\u06f0-\u06f9]/.test(e)?2:7:32==i&&t<=8287?g[255&t]:254==i&&t>=65136?7:4}t.L=0,t.R=1,t.EN=2,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.DOT="·",t.doBidiReorder=function(e,i,c){if(e.length<2)return{};var d=e.split(""),g=new Array(d.length),A=new Array(d.length),C=[];n=c?1:0,function(e,t,i,c){var u=n?h:l,d=null,g=null,f=null,A=0,C=null,F=-1,w=null,v=null,E=[];if(!c)for(w=0,c=[];w0)if(16==C){for(w=F;w-1){for(w=F;w=0&&8==c[b];b--)t[b]=n}}(d,C,d.length,i);for(var F=0;F7&&i[F]<13||4===i[F]||i[F]===u)?C[F]=t.ON_R:F>0&&"ل"===d[F-1]&&/\u0622|\u0623|\u0625|\u0627/.test(d[F])&&(C[F-1]=C[F]=t.R_H,F++);for(d[d.length-1]===t.DOT&&(C[d.length-1]=t.B),F=0;F=0&&(e=this.session.$docRowCache[i])}return e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length)for(var i,n=this.session.$getRowCacheIndex(t,this.currentRow);this.currentRow-e>0&&(i=this.session.$getRowCacheIndex(t,this.currentRow-e-1))===n;)n=i,e++;return e},this.updateRowLine=function(e,t){if(void 0===e&&(e=this.getDocumentRow()),this.wrapIndent=0,this.isLastRow=e===this.session.getLength()-1,this.line=this.session.getLine(e),this.session.$useWrapMode){var i=this.session.$wrapData[e];i&&(void 0===t&&(t=this.getSplitIndex()),t>0&&i.length?(this.wrapIndent=i.indent,this.line=t0?e-1:0,this.bidiMap),i=this.bidiMap.bidiLevels,s=0;0===e&&i[t]%2!=0&&t++;for(var o=0;o=h&&si+r/2;){if(i+=r,s===o.length-1){r=0;break}r=this.charWidths[o[++s]]}return s>0&&o[s-1]%2!=0&&o[s]%2==0?(e0&&o[s-1]%2==0&&o[s]%2!=0?t=1+(e>i?this.bidiMap.logicalFromVisual[s]:this.bidiMap.logicalFromVisual[s-1]):this.isRtlDir&&s===o.length-1&&0===r&&o[s-1]%2==0||!this.isRtlDir&&0===s&&o[s]%2!=0?t=1+this.bidiMap.logicalFromVisual[s]:(s>0&&o[s-1]%2!=0&&0!==r&&s--,t=this.bidiMap.logicalFromVisual[s]),t+this.wrapIndent}}).call(a.prototype),t.BidiHandler=a})),ace.define("ace/range",["require","exports","module"],(function(e,t,i){"use strict";var n=function(e,t,i,n){this.start={row:e,column:t},this.end={row:i,column:n}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return 0==this.compare(e,t)},this.compareRange=function(e){var t,i=e.end,n=e.start;return 1==(t=this.compare(i.row,i.column))?1==(t=this.compare(n.row,n.column))?2:0==t?1:0:-1==t?-2:-1==(t=this.compare(n.row,n.column))?-1:1==t?42:0},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return 0==this.comparePoint(e.start)&&0==this.comparePoint(e.end)},this.intersects=function(e){var t=this.compareRange(e);return-1==t||0==t||1==t},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){"object"==typeof e?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){"object"==typeof e?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)&&!this.isStart(e,t)},this.insideStart=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)},this.insideEnd=function(e,t){return 0==this.compare(e,t)&&!this.isStart(e,t)},this.compare=function(e,t){return this.isMultiLine()||e!==this.start.row?ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0:tthis.end.column?1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var i={row:t+1,column:0};else this.end.rowt)var s={row:t+1,column:0};else this.start.rowt.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?r.fromPoints(t,t):this.isBackwards()?r.fromPoints(t,e):r.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection((function(){this.moveCursorTo(e,t)}))},this.selectToPosition=function(e){this.$moveSelection((function(){this.moveCursorToPosition(e)}))},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(void 0===t){var i=e||this.lead;e=i.row,t=i.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var i,n="number"==typeof e?e:this.lead.row,s=this.session.getFoldLine(n);return s?(n=s.start.row,i=s.end.row):i=n,!0===t?new r(n,0,i,this.session.getLine(i).length):new r(n,0,i+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,i){var n=e.column,s=e.column+t;return i<0&&(n=e.column-t,s=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(n,s).split(" ").length-1==t},this.moveCursorLeft=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,-1))this.moveCursorTo(e.start.row,e.start.column);else if(0===t.column)t.row>0&&this.moveCursorTo(t.row-1,this.doc.getLine(t.row-1).length);else{var i=this.session.getTabSize();this.wouldMoveIntoSoftTab(t,i,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-i):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,1))this.moveCursorTo(e.end.row,e.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(t.column=n)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,i=this.doc.getLine(e),n=i.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var s=this.session.getFoldAt(e,t,1);if(s)this.moveCursorTo(s.end.row,s.end.column);else{if(this.session.nonTokenRe.exec(n)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,n=i.substring(t)),t>=i.length)return this.moveCursorTo(e,i.length),this.moveCursorRight(),void(e0&&this.moveCursorWordLeft());this.session.tokenRe.exec(o)&&(i-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(t,i)}},this.$shortWordEndIndex=function(e){var t,i=0,n=/\s/,s=this.session.tokenRe;if(s.lastIndex=0,this.session.tokenRe.exec(e))i=this.session.tokenRe.lastIndex;else{for(;(t=e[i])&&n.test(t);)i++;if(i<1)for(s.lastIndex=0;(t=e[i])&&!s.test(t);)if(s.lastIndex=0,i++,n.test(t)){if(i>2){i--;break}for(;(t=e[i])&&n.test(t);)i++;if(i>2)break}}return s.lastIndex=0,i},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,i=this.doc.getLine(e),n=i.substring(t),s=this.session.getFoldAt(e,t,1);if(s)return this.moveCursorTo(s.end.row,s.end.column);if(t==i.length){var o=this.doc.getLength();do{e++,n=this.doc.getLine(e)}while(e0&&/^\s*$/.test(n));i=n.length,/\s+$/.test(n)||(n="")}var o=s.stringReverse(n),r=this.$shortWordEndIndex(o);return this.moveCursorTo(t,i-r)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var i,n=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===t&&(0!==e&&(this.session.$bidiHandler.isBidiRow(n.row,this.lead.row)?(i=this.session.$bidiHandler.getPosLeft(n.column),n.column=Math.round(i/this.session.$bidiHandler.charWidths[0])):i=n.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var s=this.session.screenToDocumentPosition(n.row+e,n.column,i);0!==e&&0===t&&s.row===this.lead.row&&s.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[s.row]&&(s.row>0||e>0)&&s.row++,this.moveCursorTo(s.row,s.column+t,0===t)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,i){var n=this.session.getFoldAt(e,t,1);n&&(e=n.start.row,t=n.start.column),this.$keepDesiredColumnOnChange=!0;var s=this.session.getLine(e);/[\uDC00-\uDFFF]/.test(s.charAt(t))&&s.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,i||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,i){var n=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(n.row,n.column,i)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var i=this.getCursor();return r.fromPoints(t,i)}catch(e){return r.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map((function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t}));else(e=this.getRange()).isBackwards=this.isBackwards();return e},this.fromJSON=function(e){if(null==e.start){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var i=r.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(i.cursor=i.start),this.addRange(i,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(a.prototype),t.Selection=a})),ace.define("ace/tokenizer",["require","exports","module","ace/config"],(function(e,t,i){"use strict";var n=e("./config"),s=2e3,o=function(e){for(var t in this.states=e,this.regExps={},this.matchMappings={},this.states){for(var i=this.states[t],n=[],s=0,o=this.matchMappings[t]={defaultToken:"text"},r="g",a=[],l=0;l1?this.$applyToken:h.token),u>1&&(/\\\d/.test(h.regex)?c=h.regex.replace(/\\([0-9]+)/g,(function(e,t){return"\\"+(parseInt(t,10)+s+1)})):(u=1,c=this.removeCapturingGroups(h.regex)),h.splitRegex||"string"==typeof h.token||a.push(h)),o[s]=l,s+=u,n.push(c),h.onMatch||(h.onMatch=null)}}n.length||(o[0]=0,n.push("$")),a.forEach((function(e){e.splitRegex=this.createSplitterRegexp(e.regex,r)}),this),this.regExps[t]=new RegExp("("+n.join(")|(")+")|($)",r)}};(function(){this.$setMaxTokenCount=function(e){s=0|e},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),i=this.token.apply(this,t);if("string"==typeof i)return[{type:i,value:e}];for(var n=[],s=0,o=i.length;sc){var A=e.substring(c,p-m.length);d.type==g?d.value+=A:(d.type&&h.push(d),d={type:g,value:A})}for(var C=0;Cs){for(u>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});c1&&i[0]!==n&&i.unshift("#tmp",n),{tokens:h,state:i.length?i:n}},this.reportError=n.reportError}).call(o.prototype),t.Tokenizer=o})),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],(function(e,t,i){"use strict";var n=e("../lib/lang"),s=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(t)for(var i in e){for(var n=e[i],s=0;s=this.$rowTokens.length;){if(this.$row+=1,e||(e=this.$session.getLength()),this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,i=e[t].start;if(void 0!==i)return i;for(i=0;t>0;)i+=e[t-=1].value.length;return i},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new n(this.$row,t,this.$row,t+e.value.length)}}).call(s.prototype),t.TokenIterator=s})),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],(function(e,t,i){"use strict";var n,s=e("../../lib/oop"),o=e("../behaviour").Behaviour,r=e("../../token_iterator").TokenIterator,a=e("../../lib/lang"),l=["text","paren.rparen","punctuation.operator"],h=["text","paren.rparen","punctuation.operator","comment"],c={},u={'"':'"',"'":"'"},d=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,c.rangeCount!=e.multiSelect.rangeCount&&(c={rangeCount:e.multiSelect.rangeCount})),c[t])return n=c[t];n=c[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},g=function(e,t,i,n){var s=e.end.row-e.start.row;return{text:i+t+n,selection:[0,e.start.column+1,s,e.end.column+(s?0:1)]}},f=function(e){this.add("braces","insertion",(function(t,i,s,o,r){var l=s.getCursorPosition(),h=o.doc.getLine(l.row);if("{"==r){d(s);var c=s.getSelectionRange(),u=o.doc.getTextRange(c);if(""!==u&&"{"!==u&&s.getWrapBehavioursEnabled())return g(c,u,"{","}");if(f.isSaneInsertion(s,o))return/[\]\}\)]/.test(h[l.column])||s.inMultiSelectMode||e&&e.braces?(f.recordAutoInsert(s,o,"}"),{text:"{}",selection:[1,1]}):(f.recordMaybeInsert(s,o,"{"),{text:"{",selection:[1,1]})}else if("}"==r){if(d(s),"}"==h.substring(l.column,l.column+1)&&null!==o.$findOpeningBracket("}",{column:l.column+1,row:l.row})&&f.isAutoInsertedClosing(l,h,r))return f.popAutoInsertedClosing(),{text:"",selection:[1,1]}}else{if("\n"==r||"\r\n"==r){d(s);var m="";if(f.isMaybeInsertedClosing(l,h)&&(m=a.stringRepeat("}",n.maybeInsertedBrackets),f.clearMaybeInsertedClosing()),"}"===h.substring(l.column,l.column+1)){var p=o.findMatchingBracket({row:l.row,column:l.column+1},"}");if(!p)return null;var A=this.$getIndent(o.getLine(p.row))}else{if(!m)return void f.clearMaybeInsertedClosing();A=this.$getIndent(h)}var C=A+o.getTabString();return{text:"\n"+C+"\n"+A+m,selection:[1,C.length,1,C.length]}}f.clearMaybeInsertedClosing()}})),this.add("braces","deletion",(function(e,t,i,s,o){var r=s.doc.getTextRange(o);if(!o.isMultiLine()&&"{"==r){if(d(i),"}"==s.doc.getLine(o.start.row).substring(o.end.column,o.end.column+1))return o.end.column++,o;n.maybeInsertedBrackets--}})),this.add("parens","insertion",(function(e,t,i,n,s){if("("==s){d(i);var o=i.getSelectionRange(),r=n.doc.getTextRange(o);if(""!==r&&i.getWrapBehavioursEnabled())return g(o,r,"(",")");if(f.isSaneInsertion(i,n))return f.recordAutoInsert(i,n,")"),{text:"()",selection:[1,1]}}else if(")"==s){d(i);var a=i.getCursorPosition(),l=n.doc.getLine(a.row);if(")"==l.substring(a.column,a.column+1)&&null!==n.$findOpeningBracket(")",{column:a.column+1,row:a.row})&&f.isAutoInsertedClosing(a,l,s))return f.popAutoInsertedClosing(),{text:"",selection:[1,1]}}})),this.add("parens","deletion",(function(e,t,i,n,s){var o=n.doc.getTextRange(s);if(!s.isMultiLine()&&"("==o&&(d(i),")"==n.doc.getLine(s.start.row).substring(s.start.column+1,s.start.column+2)))return s.end.column++,s})),this.add("brackets","insertion",(function(e,t,i,n,s){if("["==s){d(i);var o=i.getSelectionRange(),r=n.doc.getTextRange(o);if(""!==r&&i.getWrapBehavioursEnabled())return g(o,r,"[","]");if(f.isSaneInsertion(i,n))return f.recordAutoInsert(i,n,"]"),{text:"[]",selection:[1,1]}}else if("]"==s){d(i);var a=i.getCursorPosition(),l=n.doc.getLine(a.row);if("]"==l.substring(a.column,a.column+1)&&null!==n.$findOpeningBracket("]",{column:a.column+1,row:a.row})&&f.isAutoInsertedClosing(a,l,s))return f.popAutoInsertedClosing(),{text:"",selection:[1,1]}}})),this.add("brackets","deletion",(function(e,t,i,n,s){var o=n.doc.getTextRange(s);if(!s.isMultiLine()&&"["==o&&(d(i),"]"==n.doc.getLine(s.start.row).substring(s.start.column+1,s.start.column+2)))return s.end.column++,s})),this.add("string_dquotes","insertion",(function(e,t,i,n,s){var o=n.$mode.$quotes||u;if(1==s.length&&o[s]){if(this.lineCommentStart&&-1!=this.lineCommentStart.indexOf(s))return;d(i);var r=s,a=i.getSelectionRange(),l=n.doc.getTextRange(a);if(!(""===l||1==l.length&&o[l])&&i.getWrapBehavioursEnabled())return g(a,l,r,r);if(!l){var h=i.getCursorPosition(),c=n.doc.getLine(h.row),f=c.substring(h.column-1,h.column),m=c.substring(h.column,h.column+1),p=n.getTokenAt(h.row,h.column),A=n.getTokenAt(h.row,h.column+1);if("\\"==f&&p&&/escape/.test(p.type))return null;var C,F=p&&/string|escape/.test(p.type),w=!A||/string|escape/.test(A.type);if(m==r)(C=F!==w)&&/string\.end/.test(A.type)&&(C=!1);else{if(F&&!w)return null;if(F&&w)return null;var v=n.$mode.tokenRe;v.lastIndex=0;var E=v.test(f);v.lastIndex=0;var b=v.test(f);if(E||b)return null;if(m&&!/[\s;,.})\]\\]/.test(m))return null;C=!0}return{text:C?r+r:"",selection:[1,1]}}}})),this.add("string_dquotes","deletion",(function(e,t,i,n,s){var o=n.doc.getTextRange(s);if(!s.isMultiLine()&&('"'==o||"'"==o)&&(d(i),n.doc.getLine(s.start.row).substring(s.start.column+1,s.start.column+2)==o))return s.end.column++,s}))};f.isSaneInsertion=function(e,t){var i=e.getCursorPosition(),n=new r(t,i.row,i.column);if(!this.$matchTokenType(n.getCurrentToken()||"text",l)){var s=new r(t,i.row,i.column+1);if(!this.$matchTokenType(s.getCurrentToken()||"text",l))return!1}return n.stepForward(),n.getCurrentTokenRow()!==i.row||this.$matchTokenType(n.getCurrentToken()||"text",h)},f.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},f.recordAutoInsert=function(e,t,i){var s=e.getCursorPosition(),o=t.doc.getLine(s.row);this.isAutoInsertedClosing(s,o,n.autoInsertedLineEnd[0])||(n.autoInsertedBrackets=0),n.autoInsertedRow=s.row,n.autoInsertedLineEnd=i+o.substr(s.column),n.autoInsertedBrackets++},f.recordMaybeInsert=function(e,t,i){var s=e.getCursorPosition(),o=t.doc.getLine(s.row);this.isMaybeInsertedClosing(s,o)||(n.maybeInsertedBrackets=0),n.maybeInsertedRow=s.row,n.maybeInsertedLineStart=o.substr(0,s.column)+i,n.maybeInsertedLineEnd=o.substr(s.column),n.maybeInsertedBrackets++},f.isAutoInsertedClosing=function(e,t,i){return n.autoInsertedBrackets>0&&e.row===n.autoInsertedRow&&i===n.autoInsertedLineEnd[0]&&t.substr(e.column)===n.autoInsertedLineEnd},f.isMaybeInsertedClosing=function(e,t){return n.maybeInsertedBrackets>0&&e.row===n.maybeInsertedRow&&t.substr(e.column)===n.maybeInsertedLineEnd&&t.substr(0,e.column)==n.maybeInsertedLineStart},f.popAutoInsertedClosing=function(){n.autoInsertedLineEnd=n.autoInsertedLineEnd.substr(1),n.autoInsertedBrackets--},f.clearMaybeInsertedClosing=function(){n&&(n.maybeInsertedBrackets=0,n.maybeInsertedRow=-1)},s.inherits(f,o),t.CstyleBehaviour=f})),ace.define("ace/unicode",["require","exports","module"],(function(e,t,i){"use strict";t.packages={},function(e){var i=/\w{4}/g;for(var n in e)t.packages[n]=e[n].replace(i,"\\u$&")}({L:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Ll:"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A",Lu:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A",Lt:"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",Lm:"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F",Lo:"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",M:"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",Mn:"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",Mc:"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC",Me:"0488048906DE20DD-20E020E2-20E4A670-A672",N:"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nd:"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nl:"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",No:"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835",P:"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",Pd:"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",Ps:"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",Pe:"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",Pi:"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",Pf:"00BB2019201D203A2E032E052E0A2E0D2E1D2E21",Pc:"005F203F20402054FE33FE34FE4D-FE4FFF3F",Po:"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",S:"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",Sm:"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",Sc:"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6",Sk:"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3",So:"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",Z:"002000A01680180E2000-200A20282029202F205F3000",Zs:"002000A01680180E2000-200A202F205F3000",Zl:"2028",Zp:"2029",C:"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",Cc:"0000-001F007F-009F",Cf:"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",Co:"E000-F8FF",Cs:"D800-DFFF",Cn:"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"})})),ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour/cstyle","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"],(function(e,t,i){"use strict";var n=e("../tokenizer").Tokenizer,s=e("./text_highlight_rules").TextHighlightRules,o=e("./behaviour/cstyle").CstyleBehaviour,r=e("../unicode"),a=e("../lib/lang"),l=e("../token_iterator").TokenIterator,h=e("../range").Range,c=function(){this.HighlightRules=s};(function(){this.$defaultBehaviour=new o,this.tokenRe=new RegExp("^["+r.packages.L+r.packages.Mn+r.packages.Mc+r.packages.Nd+r.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+r.packages.L+r.packages.Mn+r.packages.Mc+r.packages.Nd+r.packages.Pc+"\\$_]|\\s])+","g"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules(this.$highlightRuleConfig),this.$tokenizer=new n(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart="",this.blockComment="",this.toggleCommentLines=function(e,t,i,n){var s=t.doc,o=!0,r=!0,l=1/0,h=t.getTabSize(),c=!1;if(this.lineCommentStart){Array.isArray(this.lineCommentStart)?(m=this.lineCommentStart.map(a.escapeRegExp).join("|"),g=this.lineCommentStart[0]):(m=a.escapeRegExp(this.lineCommentStart),g=this.lineCommentStart),m=new RegExp("^(\\s*)(?:"+m+") ?"),c=t.getUseSoftTabs(),C=function(e,t){var i=e.match(m);if(i){var n=i[1].length,o=i[0].length;d(e,n,o)||" "!=i[0][o-1]||o--,s.removeInLine(t,n,o)}};var u=g+" ",d=(A=function(e,t){o&&!/\S/.test(e)||(d(e,l,l)?s.insertInLine({row:t,column:l},u):s.insertInLine({row:t,column:l},g))},F=function(e,t){return m.test(e)},function(e,t,i){for(var n=0;t--&&" "==e.charAt(t);)n++;if(n%h!=0)return!1;for(n=0;" "==e.charAt(i++);)n++;return h>2?n%h!=h-1:n%h==0})}else{if(!this.blockComment)return!1;var g=this.blockComment.start,f=this.blockComment.end,m=new RegExp("^(\\s*)(?:"+a.escapeRegExp(g)+")"),p=new RegExp("(?:"+a.escapeRegExp(f)+")\\s*$"),A=function(e,t){F(e,t)||o&&!/\S/.test(e)||(s.insertInLine({row:t,column:e.length},f),s.insertInLine({row:t,column:l},g))},C=function(e,t){var i;(i=e.match(p))&&s.removeInLine(t,e.length-i[0].length,e.length),(i=e.match(m))&&s.removeInLine(t,i[1].length,i[0].length)},F=function(e,i){if(m.test(e))return!0;for(var n=t.getTokens(i),s=0;se.length&&(v=e.length)})),l==1/0&&(l=v,o=!1,r=!1),c&&l%h!=0&&(l=Math.floor(l/h)*h),w(r?C:A)},this.toggleBlockComment=function(e,t,i,n){var s=this.blockComment;if(s){!s.start&&s[0]&&(s=s[0]);var o,r,a=(m=new l(t,n.row,n.column)).getCurrentToken(),c=(t.selection,t.selection.toOrientedRange());if(a&&/comment/.test(a.type)){for(var u,d;a&&/comment/.test(a.type);){if(-1!=(p=a.value.indexOf(s.start))){var g=m.getCurrentTokenRow(),f=m.getCurrentTokenColumn()+p;u=new h(g,f,g,f+s.start.length);break}a=m.stepBackward()}var m;for(a=(m=new l(t,n.row,n.column)).getCurrentToken();a&&/comment/.test(a.type);){var p;if(-1!=(p=a.value.indexOf(s.end))){g=m.getCurrentTokenRow(),f=m.getCurrentTokenColumn()+p,d=new h(g,f,g,f+s.end.length);break}a=m.stepForward()}d&&t.remove(d),u&&(t.remove(u),o=u.start.row,r=-s.start.length)}else r=s.start.length,o=i.start.row,t.insert(i.end,s.end),t.insert(i.start,s.start);c.start.row==o&&(c.start.column+=r),c.end.row==o&&(c.end.column+=r),t.selection.fromOrientedRange(c)}},this.getNextLineIndent=function(e,t,i){return this.$getIndent(t)},this.checkOutdent=function(e,t,i){return!1},this.autoOutdent=function(e,t,i){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){for(var t in this.$embeds=[],this.$modes={},e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var i=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(t=0;tthis.row)){var i=function(t,i,n){var s="insert"==t.action,o=(s?1:-1)*(t.end.row-t.start.row),r=(s?1:-1)*(t.end.column-t.start.column),a=t.start,l=s?a:t.end;return e(i,a,n)?{row:i.row,column:i.column}:e(l,i,!n)?{row:i.row+o,column:i.column+(i.row==l.row?r:0)}:{row:a.row,column:a.column}}(t,{row:this.row,column:this.column},this.$insertRight);this.setPosition(i.row,i.column,!0)}},this.setPosition=function(e,t,i){var n;if(n=i?{row:e,column:t}:this.$clipPositionToDocument(e,t),this.row!=n.row||this.column!=n.column){var s={row:this.row,column:this.column};this.row=n.row,this.column=n.column,this._signal("change",{old:s,value:n})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var i={};return e>=this.document.getLength()?(i.row=Math.max(0,this.document.getLength()-1),i.column=this.document.getLine(i.row).length):e<0?(i.row=0,i.column=0):(i.row=e,i.column=Math.min(this.document.getLine(i.row).length,Math.max(0,t))),t<0&&(i.column=0),i}}).call(o.prototype)})),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],(function(e,t,i){"use strict";var n=e("./lib/oop"),s=e("./apply_delta").applyDelta,o=e("./lib/event_emitter").EventEmitter,r=e("./range").Range,a=e("./anchor").Anchor,l=function(e){this.$lines=[""],0===e.length?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){n.implement(this,o),this.setValue=function(e){var t=this.getLength()-1;this.remove(new r(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new a(this,e,t)},0==="aaa".split(/a/).length?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){this.$newLineMode!==e&&(this.$newLineMode=e,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return"\r\n"==e||"\r"==e||"\n"==e},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{(t=this.getLines(e.start.row,e.end.row))[0]=(t[0]||"").substring(e.start.column);var i=t.length-1;e.end.row-e.start.row==i&&(t[i]=t[i].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var i=this.clippedPos(e.row,e.column),n=this.pos(e.row,e.column+t.length);return this.applyDelta({start:i,end:n,action:"insert",lines:[t]},!0),this.clonePos(n)},this.clippedPos=function(e,t){var i=this.getLength();void 0===e?e=i:e<0?e=0:e>=i&&(e=i-1,t=void 0);var n=this.getLine(e);return null==t&&(t=n.length),{row:e,column:t=Math.min(Math.max(t,0),n.length)}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){var i=0;(e=Math.min(Math.max(e,0),this.getLength()))0,n=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){return e instanceof r||(e=r.fromPoints(e.start,e.end)),0===t.length&&e.isEmpty()?e.start:t==this.getTextRange(e)?e.end:(this.remove(e),t?this.insert(e.start,t):e.start)},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var i="insert"==e.action;(i?e.lines.length<=1&&!e.lines[0]:!r.comparePoints(e.start,e.end))||(i&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),s(this.$lines,e,t),this._signal("change",e))},this.$splitAndapplyLargeDelta=function(e,t){for(var i=e.lines,n=i.length,s=e.start.row,o=e.start.column,r=0,a=0;;){r=a,a+=t-1;var l=i.slice(r,a);if(a>n){e.lines=l,e.start.row=s+r,e.start.column=o;break}l.push(""),this.applyDelta({start:this.pos(s+r,o),end:this.pos(s+a,o=0),action:e.action,lines:l},!0)}},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:"insert"==e.action?"remove":"insert",lines:e.lines.slice()})},this.indexToPosition=function(e,t){for(var i=this.$lines||this.getAllLines(),n=this.getNewLineCharacter().length,s=t||0,o=i.length;s20){i.running=setTimeout(i.$worker,20);break}}i.currentLine=t,-1==n&&(n=t),o<=n&&i.fireUpdateEvent(o,n)}}};(function(){n.implement(this,s),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var i={first:e,last:t};this._signal("update",{data:i})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,i=e.end.row-t;if(0===i)this.lines[t]=null;else if("remove"==e.action)this.lines.splice(t,i+1,null),this.states.splice(t,i+1,null);else{var n=Array(i+1);n.unshift(t,1),this.lines.splice.apply(this.lines,n),this.states.splice.apply(this.states,n)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),i=this.states[e-1],n=this.tokenizer.getLineTokens(t,i,e);return this.states[e]+""!=n.state+""?(this.states[e]=n.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=n.tokens}}).call(o.prototype),t.BackgroundTokenizer=o})),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,i){"use strict";var n=e("./lib/lang"),s=(e("./lib/oop"),e("./range").Range),o=function(e,t,i){this.setRegexp(e),this.clazz=t,this.type=i||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){this.regExp+""!=e+""&&(this.regExp=e,this.cache=[])},this.update=function(e,t,i,o){if(this.regExp)for(var r=o.firstRow,a=o.lastRow,l=r;l<=a;l++){var h=this.cache[l];null==h&&((h=n.getMatchOffsets(i.getLine(l),this.regExp)).length>this.MAX_RANGES&&(h=h.slice(0,this.MAX_RANGES)),h=h.map((function(e){return new s(l,e.offset,l,e.offset+e.length)})),this.cache[l]=h.length?h:"");for(var c=h.length;c--;)t.drawSingleLineMarker(e,h[c].toScreenRange(i),this.clazz,o)}}}).call(o.prototype),t.SearchHighlight=o})),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],(function(e,t,i){"use strict";var n=e("../range").Range;function s(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var i=t[t.length-1];this.range=new n(t[0].start.row,t[0].start.column,i.end.row,i.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach((function(e){e.setFoldLine(this)}),this)}(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach((function(t){t.start.row+=e,t.end.row+=e}))},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort((function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)})),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,i){var n,s,o=0,r=this.folds,a=!0;null==t&&(t=this.end.row,i=this.end.column);for(var l=0;l0)){var l=n(e,r.start);return 0===a?t&&0!==l?-o-2:o:l>0||0===l&&!t?o:-o-1}}return-o-1},this.add=function(e){var t=!e.isEmpty(),i=this.pointIndex(e.start,t);i<0&&(i=-i-1);var n=this.pointIndex(e.end,t,i);return n<0?n=-n-1:n++,this.ranges.splice(i,n-i,e)},this.addList=function(e){for(var t=[],i=e.length;i--;)t.push.apply(t,this.add(e[i]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){for(var e,t=[],i=this.ranges,s=(i=i.sort((function(e,t){return n(e.start,t.start)})))[0],o=1;o=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var i=this.ranges;if(i[0].start.row>t||i[i.length-1].start.rown)break;if(h.start.row==n&&h.start.column>=t.column&&(h.start.column==t.column&&this.$insertRight||(h.start.column+=o,h.start.row+=s)),h.end.row==n&&h.end.column>=t.column){if(h.end.column==t.column&&this.$insertRight)continue;h.end.column==t.column&&o>0&&ah.start.column&&h.end.column==r[a+1].start.column&&(h.end.column-=o),h.end.column+=o,h.end.row+=s}}if(0!=s&&a=e)return s;if(s.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var i=this.$foldData,n=0;for(t&&(n=i.indexOf(t)),-1==n&&(n=0);n=e)return s}return null},this.getFoldedRowCount=function(e,t){for(var i=this.$foldData,n=t-e+1,s=0;s=t){a=e?n-=t-a:n=0);break}r>=e&&(n-=a>=e?r-a:r-e+1)}return n},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort((function(e,t){return e.start.row-t.start.row})),e},this.addFold=function(e,t){var i,n=this.$foldData,r=!1;e instanceof o?i=e:(i=new o(t,e)).collapseChildren=t.collapseChildren,this.$clipRangeToDocument(i.range);var a=i.start.row,l=i.start.column,h=i.end.row,c=i.end.column;if(!(a0&&(this.removeFolds(g),g.forEach((function(e){i.addSubFold(e)})));for(var f=0;f0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach((function(e){this.expandFold(e)}),this)},this.unfold=function(e,t){var i,s;if(null==e?(i=new n(0,0,this.getLength(),0),t=!0):i="number"==typeof e?new n(e,0,e,this.getLine(e).length):"row"in e?n.fromPoints(e,e):e,s=this.getFoldsInRangeList(i),t)this.removeFolds(s);else for(var o=s;o.length;)this.expandFolds(o),o=this.getFoldsInRangeList(i);if(s.length)return s},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var i=this.getFoldLine(e,t);return i?i.end.row:e},this.getRowFoldStart=function(e,t){var i=this.getFoldLine(e,t);return i?i.start.row:e},this.getFoldDisplayLine=function(e,t,i,n,s){null==n&&(n=e.start.row),null==s&&(s=0),null==t&&(t=e.end.row),null==i&&(i=this.getLine(t).length);var o=this.doc,r="";return e.walk((function(e,t,i,a){if(!(tc)break}while(o&&l.test(o.type));o=s.stepBackward()}else o=s.getCurrentToken();return h.end.row=s.getCurrentTokenRow(),h.end.column=s.getCurrentTokenColumn()+o.value.length-2,h}},this.foldAll=function(e,t,i){null==i&&(i=1e5);var n=this.foldWidgets;if(n){t=t||this.getLength();for(var s=e=e||0;s=e){s=o.end.row;try{var r=this.addFold("...",o);r&&(r.collapseChildren=i)}catch(e){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle!=e){this.$foldStyle=e,"manual"==e&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)}},this.$setFolding=function(e){this.$foldMode!=e&&(this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation"),e&&"manual"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(e,t){var i=this.foldWidgets;if(!i||t&&i[e])return{};for(var n,s=e-1;s>=0;){var o=i[s];if(null==o&&(o=i[s]=this.getFoldWidget(s)),"start"==o){var r=this.getFoldWidgetRange(s);if(n||(n=r),r&&r.end.row>=e)break}s--}return{range:-1!==s&&r,firstRange:n}},this.onFoldWidgetClick=function(e,t){var i={children:(t=t.domEvent).shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey};if(!this.$toggleFoldWidget(e,i)){var n=t.target||t.srcElement;n&&/ace_fold-widget/.test(n.className)&&(n.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(this.getFoldWidget){var i=this.getFoldWidget(e),n=this.getLine(e),s="end"===i?-1:1,o=this.getFoldAt(e,-1===s?0:n.length,s);if(o)return t.children||t.all?this.removeFold(o):this.expandFold(o),o;var r=this.getFoldWidgetRange(e,!0);if(r&&!r.isMultiLine()&&(o=this.getFoldAt(r.start.row,r.start.column,1))&&r.isEqual(o.range))return this.removeFold(o),o;if(t.siblings){var a=this.getParentFoldRangeData(e);if(a.range)var l=a.range.start.row+1,h=a.range.end.row;this.foldAll(l,h,t.all?1e4:0)}else t.children?(h=r?r.end.row:this.getLength(),this.foldAll(e+1,h,t.all?1e4:0)):r&&(t.all&&(r.collapseChildren=1e4),this.addFold("...",r));return r}},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var i=this.$toggleFoldWidget(t,{});if(!i){var n=this.getParentFoldRangeData(t,!0);if(i=n.range||n.firstRange){t=i.start.row;var s=this.getFoldAt(t,this.getLine(t).length,1);s?this.removeFold(s):this.addFold("...",i)}}},this.updateFoldWidgets=function(e){var t=e.start.row,i=e.end.row-t;if(0===i)this.foldWidgets[t]=null;else if("remove"==e.action)this.foldWidgets.splice(t,i+1,null);else{var n=Array(i+1);n.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,n)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}})),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],(function(e,t,i){"use strict";var n=e("../token_iterator").TokenIterator,s=e("../range").Range;t.BracketMatch=function(){this.findMatchingBracket=function(e,t){if(0==e.column)return null;var i=t||this.getLine(e.row).charAt(e.column-1);if(""==i)return null;var n=i.match(/([\(\[\{])|([\)\]\}])/);return n?n[1]?this.$findClosingBracket(n[1],e):this.$findOpeningBracket(n[2],e):null},this.getBracketRange=function(e){var t,i=this.getLine(e.row),n=!0,o=i.charAt(e.column-1),r=o&&o.match(/([\(\[\{])|([\)\]\}])/);if(r||(o=i.charAt(e.column),e={row:e.row,column:e.column+1},r=o&&o.match(/([\(\[\{])|([\)\]\}])/),n=!1),!r)return null;if(r[1]){if(!(a=this.$findClosingBracket(r[1],e)))return null;t=s.fromPoints(e,a),n||(t.end.column++,t.start.column--),t.cursor=t.end}else{var a;if(!(a=this.$findOpeningBracket(r[2],e)))return null;t=s.fromPoints(a,e),n||(t.start.column++,t.end.column--),t.cursor=t.start}return t},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(e,t,i){var s=this.$brackets[e],o=1,r=new n(this,t.row,t.column),a=r.getCurrentToken();if(a||(a=r.stepForward()),a){i||(i=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));for(var l=t.column-r.getCurrentTokenColumn()-2,h=a.value;;){for(;l>=0;){var c=h.charAt(l);if(c==s){if(0==(o-=1))return{row:r.getCurrentTokenRow(),column:l+r.getCurrentTokenColumn()}}else c==e&&(o+=1);l-=1}do{a=r.stepBackward()}while(a&&!i.test(a.type));if(null==a)break;l=(h=a.value).length-1}return null}},this.$findClosingBracket=function(e,t,i){var s=this.$brackets[e],o=1,r=new n(this,t.row,t.column),a=r.getCurrentToken();if(a||(a=r.stepForward()),a){i||(i=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));for(var l=t.column-r.getCurrentTokenColumn();;){for(var h=a.value,c=h.length;li&&(this.$docRowCache.splice(i,t),this.$screenRowCache.splice(i,t))},this.$getRowCacheIndex=function(e,t){for(var i=0,n=e.length-1;i<=n;){var s=i+n>>1,o=e[s];if(t>o)i=s+1;else{if(!(t=t);o++);return(i=n[o])?(i.index=o,i.start=s-i.value.length,i):null},this.setUndoManager=function(e){if(this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel(),e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:"fold",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:"doc",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:"aceupdate",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=s.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?s.stringRepeat(" ",this.getTabSize()):"\t"},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize==0},this.setNavigateWithinSoftTabs=function(e){this.setOption("navigateWithinSoftTabs",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t0&&(n=!!i.charAt(t-1).match(this.tokenRe)),n||(n=!!i.charAt(t).match(this.tokenRe)),n)var s=this.tokenRe;else s=/^\s+$/.test(i.slice(t-1,t+1))?/\s/:this.nonTokenRe;var o=t;if(o>0){do{o--}while(o>=0&&i.charAt(o).match(s));o++}for(var r=t;re&&(e=t.screenWidth)})),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var t=this.doc.getAllLines(),i=this.$rowLengthCache,n=0,s=0,o=this.$foldData[s],r=o?o.start.row:1/0,a=t.length,l=0;lr){if((l=o.end.row+1)>=a)break;r=(o=this.$foldData[s++])?o.start.row:1/0}null==i[l]&&(i[l]=this.$getStringScreenWidth(t[l])[0]),i[l]>n&&(n=i[l])}this.screenWidth=n}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var i=null,n=e.length-1;-1!=n;n--){var s=e[n];"doc"==s.group?(this.doc.revertDeltas(s.deltas),i=this.$getUndoSelection(s.deltas,!0,i)):s.deltas.forEach((function(e){this.addFolds(e.folds)}),this)}return this.$fromUndo=!1,i&&this.$undoSelect&&!t&&this.selection.setSelectionRange(i),i}},this.redoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var i=null,n=0;ne.end.column&&(o.start.column+=h),o.end.row==e.end.row&&o.end.column>e.end.column&&(o.end.column+=h)),r&&o.start.row>=e.end.row&&(o.start.row+=r,o.end.row+=r)}if(o.end=this.insert(o.start,n),s.length){var a=e.start,l=o.start,h=(r=l.row-a.row,l.column-a.column);this.addFolds(s.map((function(e){return(e=e.clone()).start.row==a.row&&(e.start.column+=h),e.end.row==a.row&&(e.end.column+=h),e.start.row+=r,e.end.row+=r,e})))}return o},this.indentRows=function(e,t,i){i=i.replace(/\t/g,this.getTabString());for(var n=e;n<=t;n++)this.doc.insertInLine({row:n,column:0},i)},this.outdentRows=function(e){for(var t=e.collapseRows(),i=new c(0,0,0,0),n=this.getTabSize(),s=t.start.row;s<=t.end.row;++s){var o=this.getLine(s);i.start.row=s,i.end.row=s;for(var r=0;r0){var s;if((s=this.getRowFoldEnd(t+i))>this.doc.getLength()-1)return 0;n=s-t}else e=this.$clipRowToDocument(e),n=(t=this.$clipRowToDocument(t))-e+1;var o=new c(e,0,t,Number.MAX_VALUE),r=this.getFoldsInRange(o).map((function(e){return(e=e.clone()).start.row+=n,e.end.row+=n,e})),a=0==i?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+n,a),r.length&&this.addFolds(r),n},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){if(t=Math.max(0,t),e<0)e=0,t=0;else{var i=this.doc.getLength();e>=i?(e=i-1,t=this.doc.getLine(i-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){if(this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0),e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){this.$wrapLimitRange.min===e&&this.$wrapLimitRange.max===t||(this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal("changeWrapMode"))},this.adjustWrapLimit=function(e,t){var i=this.$wrapLimitRange;i.max<0&&(i={min:t,max:t});var n=this.$constrainWrapLimit(e,i.min,i.max);return n!=this.$wrapLimit&&n>1&&(this.$wrapLimit=n,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0)},this.$constrainWrapLimit=function(e,t,i){return t&&(e=Math.max(t,e)),i&&(e=Math.min(i,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,i=e.action,n=e.start,s=e.end,o=n.row,r=s.row,a=r-o,l=null;if(this.$updating=!0,0!=a)if("remove"===i){this[t?"$wrapData":"$rowLengthCache"].splice(o,a);var h=this.$foldData;l=this.getFoldsInRange(e),this.removeFolds(l);var c=0;if(m=this.getFoldLine(s.row)){m.addRemoveChars(s.row,s.column,n.column-s.column),m.shiftRow(-a);var u=this.getFoldLine(o);u&&u!==m&&(u.merge(m),m=u),c=h.indexOf(m)+1}for(;c=s.row&&m.shiftRow(-a);r=o}else{var d=Array(a);d.unshift(o,0);var g=t?this.$wrapData:this.$rowLengthCache;if(g.splice.apply(g,d),h=this.$foldData,c=0,m=this.getFoldLine(o)){var f=m.range.compareInside(n.row,n.column);0==f?(m=m.split(n.row,n.column))&&(m.shiftRow(a),m.addRemoveChars(r,0,s.column-n.column)):-1==f&&(m.addRemoveChars(o,0,s.column-n.column),m.shiftRow(a)),c=h.indexOf(m)+1}for(;c=o&&m.shiftRow(a)}}else a=Math.abs(e.start.column-e.end.column),"remove"===i&&(l=this.getFoldsInRange(e),this.removeFolds(l),a=-a),(m=this.getFoldLine(o))&&m.addRemoveChars(o,n.column,a);return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(o,r):this.$updateRowLengthCache(o,r),l},this.$updateRowLengthCache=function(e,t,i){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(i,n){var s,o,r=this.doc.getAllLines(),a=this.getTabSize(),l=this.$wrapData,h=this.$wrapLimit,c=i;for(n=Math.min(n,r.length-1);c<=n;)(o=this.getFoldLine(c,o))?(s=[],o.walk(function(i,n,o,a){var l;if(null!=i){(l=this.$getDisplayTokens(i,s.length))[0]=e;for(var h=1;h=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510)}this.$computeWrapSplits=function(i,n,s){if(0==i.length)return[];var o=[],r=i.length,a=0,l=0,h=this.$wrapAsCode,c=this.$indentedSoftWrap,u=n<=Math.max(2*s,8)||!1===c?0:Math.floor(n/2);function d(e){var t=i.slice(a,e),n=t.length;t.join("").replace(/12/g,(function(){n-=1})).replace(/2/g,(function(){n-=1})),o.length||(g=function(){var e=0;if(0===u)return e;if(c)for(var t=0;tn-g;){var f=a+n-g;if(i[f-1]>=10&&i[f]>=10)d(f);else if(i[f]!=e&&i[f]!=t){for(var m=Math.max(f-(n-(n>>2)),a-1);f>m&&i[f]m&&i[f]m&&9==i[f];)f--}else for(;f>m&&i[f]<10;)f--;f>m?d(++f):(2==i[f=a+n]&&f--,d(f-g))}else{for(;f!=a-1&&i[f]!=e;f--);if(f>a){d(f);continue}for(f=a+n;f39&&r<48||r>57&&r<64?s.push(9):r>=4352&&i(r)?s.push(1,2):s.push(1)}return s},this.$getStringScreenWidth=function(e,t,n){if(0==t)return[0,0];var s,o;for(null==t&&(t=1/0),n=n||0,o=0;o=4352&&i(s)?n+=2:n+=1,!(n>t));o++);return[n,o]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.getRowLineCount=function(e){return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1:1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),i=this.$wrapData[t.row];return i.length&&i[0]=0){a=h[c],o=this.$docRowCache[c];var d=e>h[u-1]}else d=!u;for(var g=this.getLength()-1,f=this.getNextFoldLine(o),m=f?f.start.row:1/0;a<=e&&!(a+(l=this.getRowLength(o))>e||o>=g);)a+=l,++o>m&&(o=f.end.row+1,m=(f=this.getNextFoldLine(o,f))?f.start.row:1/0),d&&(this.$docRowCache.push(o),this.$screenRowCache.push(a));if(f&&f.start.row<=o)n=this.getFoldDisplayLine(f),o=f.start.row;else{if(a+l<=e||o>g)return{row:g,column:this.getLine(g).length};n=this.getLine(o),f=null}var p=0,A=Math.floor(e-a);if(this.$useWrapMode){var C=this.$wrapData[o];C&&(s=C[A],A>0&&C.length&&(p=C.indent,r=C[A-1]||C[C.length-1],n=n.substring(r)))}return void 0!==i&&this.$bidiHandler.isBidiRow(a+A,o,A)&&(t=this.$bidiHandler.offsetToCol(i)),r+=this.$getStringScreenWidth(n,t-p)[1],this.$useWrapMode&&r>=s&&(r=s-1),f?f.idxToPosition(r):{row:o,column:r}},this.documentToScreenPosition=function(e,t){if(void 0===t)var i=this.$clipPositionToDocument(e.row,e.column);else i=this.$clipPositionToDocument(e,t);e=i.row,t=i.column;var n,s=0,o=null;(n=this.getFoldAt(e,t,1))&&(e=n.start.row,t=n.start.column);var r,a=0,l=this.$docRowCache,h=this.$getRowCacheIndex(l,e),c=l.length;if(c&&h>=0){a=l[h],s=this.$screenRowCache[h];var u=e>l[c-1]}else u=!c;for(var d=this.getNextFoldLine(a),g=d?d.start.row:1/0;a=g){if((r=d.end.row+1)>e)break;g=(d=this.getNextFoldLine(r,d))?d.start.row:1/0}else r=a+1;s+=this.getRowLength(a),a=r,u&&(this.$docRowCache.push(a),this.$screenRowCache.push(s))}var f="";d&&a>=g?(f=this.getFoldDisplayLine(d,e,t),o=d.start.row):(f=this.getLine(e).substring(0,t),o=e);var m=0;if(this.$useWrapMode){var p=this.$wrapData[o];if(p){for(var A=0;f.length>=p[A];)s++,A++;f=f.substring(p[A-1]||0,f.length),m=A>0?p.indent:0}}return{row:s,column:m+this.$getStringScreenWidth(f)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(this.$useWrapMode)for(var i=this.$wrapData.length,n=0,s=(a=0,(t=this.$foldData[a++])?t.start.row:1/0);ns&&(n=t.end.row+1,s=(t=this.$foldData[a++])?t.start.row:1/0)}else{e=this.getLength();for(var r=this.$foldData,a=0;ai);o++);return[n,o]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=i}.call(f.prototype),e("./edit_session/folding").Folding.call(f.prototype),e("./edit_session/bracket_match").BracketMatch.call(f.prototype),r.defineOptions(f.prototype,"session",{wrap:{set:function(e){if(e&&"off"!=e?"free"==e?e=!0:"printMargin"==e?e=-1:"string"==typeof e&&(e=parseInt(e,10)||!1):e=!1,this.$wrap!=e)if(this.$wrap=e,e){var t="number"==typeof e?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){(e="auto"==e?"text"!=this.$mode.type:"text"!=e)!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:"auto"},indentedSoftWrap:{initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){isNaN(e)||this.$tabSize===e||(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize"))},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=f})),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,i){"use strict";var n=e("./lib/lang"),s=e("./lib/oop"),o=e("./range").Range,r=function(){this.$options={}};(function(){this.set=function(e){return s.mixin(this.$options,e),this},this.getOptions=function(){return n.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,i=this.$matchIterator(e,t);if(!i)return!1;var n=null;return i.forEach((function(e,i,s,r){return n=new o(e,i,s,r),!(i==r&&t.start&&t.start.start&&0!=t.skipCurrent&&n.isEqual(t.start)&&(n=null,1))})),n},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var i=t.range,s=i?e.getLines(i.start.row,i.end.row):e.doc.getAllLines(),r=[],a=t.re;if(t.$isMultiLine){var l,h=a.length,c=s.length-h;e:for(var u=a.offset||0;u<=c;u++){for(var d=0;dm||(r.push(l=new o(u,m,u+h-1,p)),h>2&&(u=u+h-2))}}else for(var A=0;Av&&r[d].end.row==i.end.row;)d--;for(r=r.slice(A,d+1),A=0,d=r.length;A=a;i--)if(u(i,Number.MAX_VALUE,e))return;if(0!=t.wrap)for(i=l,a=r.row;i>=a;i--)if(u(i,Number.MAX_VALUE,e))return}};else h=function(e){var i=r.row;if(!u(i,r.column,e)){for(i+=1;i<=l;i++)if(u(i,0,e))return;if(0!=t.wrap)for(i=a,l=r.row;i<=l;i++)if(u(i,0,e))return}};if(t.$isMultiLine)var c=i.length,u=function(t,s,o){var r=n?t-c+1:t;if(!(r<0)){var a=e.getLine(r),l=a.search(i[0]);if(!(!n&&ls))return!!o(r,l,r+c-1,u)||void 0}}};else u=n?function(t,n,s){var o,r=e.getLine(t),a=[],l=0;for(i.lastIndex=0;o=i.exec(r);){var h=o[0].length;if(l=o.index,!h){if(l>=r.length)break;i.lastIndex=l+=1}if(o.index+h>n)break;a.push(o.index,h)}for(var c=a.length-1;c>=0;c-=2){var u=a[c-1];if(s(t,u,t,u+(h=a[c])))return!0}}:function(t,n,s){var o,r=e.getLine(t),a=n;for(i.lastIndex=n;o=i.exec(r);){var l=o[0].length;if(s(t,a=o.index,t,a+l))return!0;if(!l&&(i.lastIndex=a+=1,a>=r.length))return!1}};return{forEach:h}}}).call(r.prototype),t.Search=r})),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,i){"use strict";var n=e("../lib/keys"),s=e("../lib/useragent"),o=n.KEY_MODS;function r(e,t){this.platform=t||(s.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function a(e,t){r.call(this,e,t),this.$singleCommand=!1}a.prototype=r.prototype,function(){function e(e){return"object"==typeof e&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var i=e&&("string"==typeof e?e:e.name);e=this.commands[i],t||delete this.commands[i];var n=this.commandKeyBinding;for(var s in n){var o=n[s];if(o==e)delete n[s];else if(Array.isArray(o)){var r=o.indexOf(e);-1!=r&&(o.splice(r,1),1==o.length&&(n[s]=o[0]))}}},this.bindKey=function(e,t,i){if("object"==typeof e&&e&&(null==i&&(i=e.position),e=e[this.platform]),e)return"function"==typeof t?this.addCommand({exec:t,bindKey:e,name:t.name||e}):void e.split("|").forEach((function(e){var n="";if(-1!=e.indexOf(" ")){var s=e.split(/\s+/);e=s.pop(),s.forEach((function(e){var t=this.parseKeys(e),i=o[t.hashId]+t.key;n+=(n?" ":"")+i,this._addCommandToBinding(n,"chainKeys")}),this),n+=" "}var r=this.parseKeys(e),a=o[r.hashId]+r.key;this._addCommandToBinding(n+a,t,i)}),this)},this._addCommandToBinding=function(t,i,n){var s,o=this.commandKeyBinding;if(i)if(!o[t]||this.$singleCommand)o[t]=i;else{Array.isArray(o[t])?-1!=(s=o[t].indexOf(i))&&o[t].splice(s,1):o[t]=[o[t]],"number"!=typeof n&&(n=e(i));var r=o[t];for(s=0;sn);s++);r.splice(s,0,i)}else delete o[t]},this.addCommands=function(e){e&&Object.keys(e).forEach((function(t){var i=e[t];if(i){if("string"==typeof i)return this.bindKey(i,t);"function"==typeof i&&(i={exec:i}),"object"==typeof i&&(i.name||(i.name=t),this.addCommand(i))}}),this)},this.removeCommands=function(e){Object.keys(e).forEach((function(t){this.removeCommand(e[t])}),this)},this.bindKeys=function(e){Object.keys(e).forEach((function(t){this.bindKey(t,e[t])}),this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter((function(e){return e})),i=t.pop(),s=n[i];if(n.FUNCTION_KEYS[s])i=n.FUNCTION_KEYS[s].toLowerCase();else{if(!t.length)return{key:i,hashId:-1};if(1==t.length&&"shift"==t[0])return{key:i.toUpperCase(),hashId:-1}}for(var o=0,r=t.length;r--;){var a=n.KEY_MODS[t[r]];if(null==a)return"undefined"!=typeof console&&console.error("invalid modifier "+t[r]+" in "+e),!1;o|=a}return{key:i,hashId:o}},this.findKeyCommand=function(e,t){var i=o[e]+t;return this.commandKeyBinding[i]},this.handleKeyboard=function(e,t,i,n){if(!(n<0)){var s=o[t]+i,r=this.commandKeyBinding[s];return e.$keyChain&&(e.$keyChain+=" "+s,r=this.commandKeyBinding[e.$keyChain]||r),!r||"chainKeys"!=r&&"chainKeys"!=r[r.length-1]?(e.$keyChain&&(t&&4!=t||1!=i.length?(-1==t||n>0)&&(e.$keyChain=""):e.$keyChain=e.$keyChain.slice(0,-s.length-1)),{command:r}):(e.$keyChain=e.$keyChain||s,{command:"null"})}},this.getStatusText=function(e,t){return t.$keyChain||""}}.call(r.prototype),t.HashHandler=r,t.MultiHashHandler=a})),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],(function(e,t,i){"use strict";var n=e("../lib/oop"),s=e("../keyboard/hash_handler").MultiHashHandler,o=e("../lib/event_emitter").EventEmitter,r=function(e,t){s.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",(function(e){return e.command.exec(e.editor,e.args||{})}))};n.inherits(r,s),function(){n.implement(this,o),this.exec=function(e,t,i){if(Array.isArray(e)){for(var n=e.length;n--;)if(this.exec(e[n],t,i))return!0;return!1}if("string"==typeof e&&(e=this.commands[e]),!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(e.isAvailable&&!e.isAvailable(t))return!1;var s={editor:t,command:e,args:i};return s.returnValue=this._emit("exec",s),this._signal("afterExec",s),!1!==s.returnValue},this.toggleRecording=function(e){if(!this.$inReplay)return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach((function(t){"string"==typeof t?this.exec(t,e):this.exec(t[0],e,t[1])}),this)}finally{this.$inReplay=!1}}},this.trimMacro=function(e){return e.map((function(e){return"string"!=typeof e[0]&&(e[0]=e[0].name),e[1]||(e=e[0]),e}))}}.call(r.prototype),t.CommandManager=r})),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],(function(e,t,i){"use strict";var n=e("../lib/lang"),s=e("../config"),o=e("../range").Range;function r(e,t){return{win:e,mac:t}}t.commands=[{name:"showSettingsMenu",bindKey:r("Ctrl-,","Command-,"),exec:function(e){s.loadModule("ace/ext/settings_menu",(function(t){t.init(e),e.showSettingsMenu()}))},readOnly:!0},{name:"goToNextError",bindKey:r("Alt-E","F4"),exec:function(e){s.loadModule("ace/ext/error_marker",(function(t){t.showErrorMarker(e,1)}))},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:r("Alt-Shift-E","Shift-F4"),exec:function(e){s.loadModule("ace/ext/error_marker",(function(t){t.showErrorMarker(e,-1)}))},scrollIntoView:"animate",readOnly:!0},{name:"selectall",bindKey:r("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",bindKey:r(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:r("Ctrl-L","Command-L"),exec:function(e){var t=parseInt(prompt("Enter line number:"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:"fold",bindKey:r("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:r("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:r("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:r("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",bindKey:r(null,"Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",bindKey:r("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",bindKey:r("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",bindKey:r("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",bindKey:r("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",bindKey:r("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",bindKey:r("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",bindKey:r("Ctrl-F","Command-F"),exec:function(e){s.loadModule("ace/ext/searchbox",(function(t){t.Search(e)}))},readOnly:!0},{name:"overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:r("Ctrl-Shift-Home","Command-Shift-Home|Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",bindKey:r("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",bindKey:r("Shift-Up","Shift-Up|Ctrl-Shift-P"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",bindKey:r("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",bindKey:r("Ctrl-Shift-End","Command-Shift-End|Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",bindKey:r("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",bindKey:r("Shift-Down","Shift-Down|Ctrl-Shift-N"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",bindKey:r("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",bindKey:r("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",bindKey:r("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",bindKey:r("Alt-Shift-Left","Command-Shift-Left|Ctrl-Shift-A"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",bindKey:r("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",bindKey:r("Shift-Left","Shift-Left|Ctrl-Shift-B"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",bindKey:r("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",bindKey:r("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",bindKey:r("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",bindKey:r("Alt-Shift-Right","Command-Shift-Right|Shift-End|Ctrl-Shift-E"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",bindKey:r("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",bindKey:r("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",bindKey:r("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:r(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:r("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:r(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",bindKey:r("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",bindKey:r("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",bindKey:r("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",bindKey:r("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",bindKey:r("Ctrl-P","Ctrl-P"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",bindKey:r("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",bindKey:r("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",bindKey:r(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",exec:function(e){},readOnly:!0},{name:"cut",exec:function(e){var t=e.getSelectionRange();e._emit("cut",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:"cursor"},{name:"removeline",bindKey:r("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",bindKey:r("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",bindKey:r("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",bindKey:r("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",bindKey:r("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",bindKey:r("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",bindKey:r("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",bindKey:r("Ctrl-H","Command-Option-F"),exec:function(e){s.loadModule("ace/ext/searchbox",(function(t){t.Search(e,!0)}))}},{name:"undo",bindKey:r("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",bindKey:r("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",bindKey:r("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",bindKey:r("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",bindKey:r("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",bindKey:r("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",bindKey:r("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",bindKey:r("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",bindKey:r("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",bindKey:r("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",bindKey:r("Alt-Delete","Ctrl-K|Command-Delete"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestarthard",bindKey:r("Ctrl-Shift-Backspace",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineendhard",bindKey:r("Ctrl-Shift-Delete",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",bindKey:r("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",bindKey:r("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",bindKey:r("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",bindKey:r("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",bindKey:r("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",bindKey:r("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",exec:function(e,t){e.insert(n.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",bindKey:r(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",bindKey:r("Alt-Shift-X","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",bindKey:r("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",bindKey:r("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",bindKey:r("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",bindKey:r(null,null),exec:function(e){for(var t=e.selection.isBackwards(),i=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),s=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),r=e.session.doc.getLine(i.row).length,a=e.session.doc.getTextRange(e.selection.getRange()).replace(/\n\s*/," ").length,l=e.session.doc.getLine(i.row),h=i.row+1;h<=s.row+1;h++){var c=n.stringTrimLeft(n.stringTrimRight(e.session.doc.getLine(h)));0!==c.length&&(c=" "+c),l+=c}s.row+10?(e.selection.moveCursorTo(i.row,i.column),e.selection.selectTo(i.row,i.column+a)):(r=e.session.doc.getLine(i.row).length>r?r+1:r,e.selection.moveCursorTo(i.row,r))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",bindKey:r(null,null),exec:function(e){var t=e.session.doc.getLength()-1,i=e.session.doc.getLine(t).length,n=e.selection.rangeList.ranges,s=[];n.length<1&&(n=[e.selection.getRange()]);for(var r=0;r0&&this.$blockScrolling--;var i=t&&t.scrollIntoView;if(i){switch(i){case"center-animate":i="animate";case"center":this.renderer.scrollCursorIntoView(null,.5);break;case"animate":case"cursor":this.renderer.scrollCursorIntoView();break;case"selectionPart":var n=this.selection.getRange(),s=this.renderer.layerConfig;(n.start.row>=s.lastRow||n.end.row<=s.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead)}"animate"==i&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(this.$mergeUndoDeltas){var t=this.prevOp,i=this.$mergeableCommands,n=t.command&&e.command.name==t.command.name;if("insertstring"==e.command.name){var s=e.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),n=n&&this.mergeNextCommand&&(!/\s/.test(s)||/\s/.test(t.args)),this.mergeNextCommand=!0}else n=n&&-1!==i.indexOf(e.command.name);"always"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(n=!1),n?this.session.mergeUndoDeltas=!0:-1!==i.indexOf(e.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(e,t){if(e&&"string"==typeof e){this.$keybindingId=e;var i=this;A.loadModule(["keybinding",e],(function(n){i.$keybindingId==e&&i.keyBinding.setKeyboardHandler(n&&n.handler),t&&t()}))}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session!=e){this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var i=this.session.getSelection();i.off("changeCursor",this.$onCursorChange),i.off("changeSelection",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal("changeSession",{session:e,oldSession:t}),this.curOp=null,t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart()}},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?1==t?this.navigateFileEnd():-1==t&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||s.computedStyle(this.container,"fontSize")},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var e=this;this.$highlightPending=!0,setTimeout((function(){e.$highlightPending=!1;var t=e.session;if(t&&t.bgTokenizer){var i=t.findMatchingBracket(e.getCursorPosition());if(i)var n=new g(i.row,i.column,i.row,i.column+1);else t.$mode.getMatching&&(n=t.$mode.getMatching(e.session));n&&(t.$bracketHighlight=t.addMarker(n,"ace_bracket","text"))}}),50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var e=this;this.$highlightTagPending=!0,setTimeout((function(){e.$highlightTagPending=!1;var t=e.session;if(t&&t.bgTokenizer){var i=e.getCursorPosition(),n=new C(e.session,i.row,i.column),s=n.getCurrentToken();if(!s||!/\b(?:tag-open|tag-name)/.test(s.type))return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);if(-1==s.type.indexOf("tag-open")||(s=n.stepForward())){var o=s.value,r=0,a=n.stepBackward();if("<"==a.value)do{a=s,(s=n.stepForward())&&s.value===o&&-1!==s.type.indexOf("tag-name")&&("<"===a.value?r++:"=0);else{do{s=a,a=n.stepBackward(),s&&s.value===o&&-1!==s.type.indexOf("tag-name")&&("<"===a.value?r++:"1||(e=!1)),t.$highlightLineMarker&&!e)t.removeMarker(t.$highlightLineMarker.id),t.$highlightLineMarker=null;else if(!t.$highlightLineMarker&&e){var i=new g(e.row,e.column,e.row,1/0);i.id=t.addMarker(i,"ace_active-line","screenLine"),t.$highlightLineMarker=i}else e&&(t.$highlightLineMarker.start.row=e.row,t.$highlightLineMarker.end.row=e.row,t.$highlightLineMarker.start.column=e.column,t._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;if(t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var i=this.selection.getRange(),n=this.getSelectionStyle();t.$selectionMarker=t.addMarker(i,"ace_selection",n)}var s=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(s),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(!t.isEmpty()&&!t.isMultiLine()){var i=t.start.column-1,n=t.end.column+1,s=e.getLine(t.start.row),o=s.length,r=s.substring(Math.max(i,0),Math.min(n,o));if(!(i>=0&&/^[\w\d]/.test(r)||n<=o&&/[\w\d]$/.test(r))&&(r=s.substring(t.start.column,t.end.column),/^[\w\d]+$/.test(r)))return this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:r})}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal("copy",e),e},this.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(e,t){var i={text:e,event:t};this.commands.exec("paste",this,i)},this.$handlePaste=function(e){"string"==typeof e&&(e={text:e}),this._signal("paste",e);var t=e.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(t);else{var i=t.split(/\r\n|\r|\n/),n=this.selection.rangeList.ranges;if(i.length>n.length||i.length<2||!i[1])return this.commands.exec("insertstring",this,t);for(var s=n.length;s--;){var o=n[s];o.isEmpty()||this.session.remove(o),this.session.insert(o.start,i[s])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var i=this.session,n=i.getMode(),s=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var o=n.transformAction(i.getState(s.row),"insertion",this,i,e);o&&(e!==o.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=o.text)}if("\t"==e&&(e=this.session.getTabString()),this.selection.isEmpty())this.session.getOverwrite()&&-1==e.indexOf("\n")&&((r=new g.fromPoints(s,s)).end.column+=e.length,this.session.remove(r));else{var r=this.getSelectionRange();s=this.session.remove(r),this.clearSelection()}if("\n"==e||"\r\n"==e){var a=i.getLine(s.row);if(s.column>a.search(/\S|$/)){var l=a.substr(s.column).search(/\S|$/);i.doc.removeInLine(s.row,s.column,s.column+l)}}this.clearSelection();var h=s.column,c=i.getState(s.row),u=(a=i.getLine(s.row),n.checkOutdent(c,a,e));if(i.insert(s,e),o&&o.selection&&(2==o.selection.length?this.selection.setSelectionRange(new g(s.row,h+o.selection[0],s.row,h+o.selection[1])):this.selection.setSelectionRange(new g(s.row+o.selection[0],o.selection[1],s.row+o.selection[2],o.selection[3]))),i.getDocument().isNewLine(e)){var d=n.getNextLineIndent(c,a.slice(0,s.column),i.getTabString());i.insert({row:s.row+1,column:0},d)}u&&n.autoOutdent(c,i,s.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,i){this.keyBinding.onCommandKey(e,t,i)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&("left"==e?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var i=this.session,n=i.getState(t.start.row),s=i.getMode().transformAction(n,"deletion",this,i,t);if(0===t.end.column){var o=i.getTextRange(t);if("\n"==o[o.length-1]){var r=i.getLine(t.end.row);/^\s+$/.test(r)&&(t.end.column=r.length)}}s&&(t=s)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(this.selection.isEmpty()){var e=this.getCursorPosition(),t=e.column;if(0!==t){var i,n,s=this.session.getLine(e.row);tt.toLowerCase()?1:0}));var s=new g(0,0,0,0);for(n=e.first;n<=e.last;n++){var o=t.getLine(n);s.start.row=n,s.end.row=n,s.end.column=o.length,t.replace(s,i[n-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),i=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,i,e)},this.getNumberAt=function(e,t){var i=/[\-]?[0-9]+(?:\.[0-9]+)?/g;i.lastIndex=0;for(var n=this.session.getLine(e);i.lastIndex=t)return{value:s[0],start:s.index,end:s.index+s[0].length}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,i=this.selection.getCursor().column,n=new g(t,i-1,t,i),s=this.session.getTextRange(n);if(!isNaN(parseFloat(s))&&isFinite(s)){var o=this.getNumberAt(t,i);if(o){var r=o.value.indexOf(".")>=0?o.start+o.value.indexOf(".")+1:o.end,a=o.start+o.value.length-r,l=parseFloat(o.value);l*=Math.pow(10,a),r!==o.end&&ig+1)break;g=f.last}for(c--,a=this.session.$moveLines(d,g,t?0:e),t&&-1==e&&(u=c+1);u<=c;)r[u].moveBy(a,0),u++;t||(a=0),l+=a}s.fromOrientedRange(s.ranges[0]),s.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var i=this.renderer,n=this.renderer.layerConfig,s=e*Math.floor(n.height/n.lineHeight);this.$blockScrolling++,!0===t?this.selection.$moveSelection((function(){this.moveCursorBy(s,0)})):!1===t&&(this.selection.moveCursorBy(s,0),this.selection.clearSelection()),this.$blockScrolling--;var o=i.scrollTop;i.scrollBy(0,s*n.lineHeight),null!=t&&i.scrollCursorIntoView(null,.5),i.animateScrolling(o)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,i,n){this.renderer.scrollToLine(e,t,i,n)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var i=this.getCursorPosition(),n=new C(this.session,i.row,i.column),s=n.getCurrentToken(),o=s||n.stepForward();if(o){var r,a,l=!1,h={},c=i.column-o.start,u={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(o.value.match(/[{}()\[\]]/g)){for(;c=0;--o)this.$tryReplace(i[o],e)&&n++;return this.selection.setSelectionRange(s),this.$blockScrolling-=1,n},this.$tryReplace=function(e,t){var i=this.session.getTextRange(e);return null!==(t=this.$search.replace(i,t))?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,i){t||(t={}),"string"==typeof e||e instanceof RegExp?t.needle=e:"object"==typeof e&&n.mixin(t,e);var s=this.selection.getRange();null==t.needle&&((e=this.session.getTextRange(s)||this.$search.$options.needle)||(s=this.session.getWordRange(s.start.row,s.start.column),e=this.session.getTextRange(s)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:s});var o=this.$search.find(this.session);return t.preventScroll?o:o?(this.revealRange(o,i),o):(t.backwards?s.start=s.end:s.end=s.start,void this.selection.setRange(s))},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var i=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),!1!==t&&this.renderer.animateScrolling(i)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(e){var t,i=this,n=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var s=this.$scrollAnchor;s.style.cssText="position:absolute",this.container.insertBefore(s,this.container.firstChild);var o=this.on("changeSelection",(function(){n=!0})),r=this.renderer.on("beforeRender",(function(){n&&(t=i.renderer.container.getBoundingClientRect())})),a=this.renderer.on("afterRender",(function(){if(n&&t&&(i.isFocused()||i.searchBox&&i.searchBox.isFocused())){var e=i.renderer,o=e.$cursorLayer.$pixelPos,r=e.layerConfig,a=o.top-r.offset;null!=(n=o.top>=0&&a+t.top<0||!(o.topwindow.innerHeight)&&null)&&(s.style.top=a+"px",s.style.left=o.left+"px",s.style.height=r.lineHeight+"px",s.scrollIntoView(n)),n=t=null}}));this.setAutoScrollEditorIntoView=function(e){e||(delete this.setAutoScrollEditorIntoView,this.off("changeSelection",o),this.renderer.off("afterRender",a),this.renderer.off("beforeRender",r))}}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;t&&(t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&"wide"!=e,s.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e)))}}.call(F.prototype),A.defineOptions(F.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.keybindingId},handlesSet:!0},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",showLineNumbers:"renderer",showGutter:"renderer",displayIndentGuides:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"}),t.Editor=F})),ace.define("ace/undomanager",["require","exports","module"],(function(e,t,i){"use strict";var n=function(){this.reset()};(function(){function e(e){return{action:e.action,start:e.start,end:e.end,lines:1==e.lines.length?null:e.lines,text:1==e.lines.length?e.lines[0]:null}}function t(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines||[e.text]}}function i(e,t){for(var i=new Array(e.length),n=0;n0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return 0===this.dirtyCounter},this.$serializeDeltas=function(t){return i(t,e)},this.$deserializeDeltas=function(e){return i(e,t)}}).call(n.prototype),t.UndoManager=n})),ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"],(function(e,t,i){"use strict";var n=e("../lib/dom"),s=e("../lib/oop"),o=e("../lib/lang"),r=e("../lib/event_emitter").EventEmitter,a=function(e){this.element=n.createElement("div"),this.element.className="ace_layer ace_gutter-layer",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){s.implement(this,r),this.setSession=function(e){this.session&&this.session.removeEventListener("change",this.$updateAnnotations),this.session=e,e&&e.on("change",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.addGutterDecoration"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.removeGutterDecoration"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;tr&&(m=o.end.row+1,r=(o=t.getNextFoldLine(m,o))?o.start.row:1/0),m>s){for(;this.$cells.length>f+1;)g=this.$cells.pop(),this.element.removeChild(g.element);break}(g=this.$cells[++f])||((g={element:null,textNode:null,foldWidget:null}).element=n.createElement("div"),g.textNode=document.createTextNode(""),g.element.appendChild(g.textNode),this.element.appendChild(g.element),this.$cells[f]=g);var p="ace_gutter-cell ";if(l[m]&&(p+=l[m]),h[m]&&(p+=h[m]),this.$annotations[m]&&(p+=this.$annotations[m].className),g.element.className!=p&&(g.element.className=p),(C=t.getRowLength(m)*e.lineHeight+"px")!=g.element.style.height&&(g.element.style.height=C),a){var A=a[m];null==A&&(A=a[m]=t.getFoldWidget(m))}if(A){g.foldWidget||(g.foldWidget=n.createElement("span"),g.element.appendChild(g.foldWidget)),p="ace_fold-widget ace_"+A,"start"==A&&m==r&&mi.right-t.right?"foldWidgets":void 0}}).call(a.prototype),t.Gutter=a})),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],(function(e,t,i){"use strict";var n=e("../range").Range,s=e("../lib/dom"),o=function(e){this.element=s.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){if(e){this.config=e;var t=[];for(var i in this.markers){var n=this.markers[i];if(n.range){var s=n.range.clipRows(e.firstRow,e.lastRow);if(!s.isEmpty())if(s=s.toScreenRange(this.session),n.renderer){var o=this.$getTop(s.start.row,e),r=this.$padding+(this.session.$bidiHandler.isBidiRow(s.start.row)?this.session.$bidiHandler.getPosLeft(s.start.column):s.start.column*e.characterWidth);n.renderer(t,s,r,o,e)}else"fullLine"==n.type?this.drawFullLineMarker(t,s,n.clazz,e):"screenLine"==n.type?this.drawScreenLineMarker(t,s,n.clazz,e):s.isMultiLine()?"text"==n.type?this.drawTextMarker(t,s,n.clazz,e):this.drawMultiLineMarker(t,s,n.clazz,e):this.session.$bidiHandler.isBidiRow(s.start.row)?this.drawBidiSingleLineMarker(t,s,n.clazz+" ace_start ace_br15",e):this.drawSingleLineMarker(t,s,n.clazz+" ace_start ace_br15",e)}else n.update(t,this,this.session,e)}this.element.innerHTML=t.join("")}},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(e,t,i,s,o){for(var r=this.session,a=t.start.row,l=t.end.row,h=a,c=0,u=0,d=r.getScreenLastRowColumn(h),g=null,f=new n(h,t.start.column,h,u);h<=l;h++)f.start.row=f.end.row=h,f.start.column=h==a?t.start.column:r.getRowWrapIndent(h),f.end.column=d,c=u,u=d,d=h+1d?4:0)|(h==l?8:0)),this.session.$bidiHandler.isBidiRow(h)?this.drawBidiSingleLineMarker(e,f,g,s,h==l?0:1,o):this.drawSingleLineMarker(e,f,g,s,h==l?0:1,o)},this.drawMultiLineMarker=function(e,t,i,n,s){var o,r,a,l=this.$padding;if(s=s||"",this.session.$bidiHandler.isBidiRow(t.start.row)?((h=t.clone()).end.row=h.start.row,h.end.column=this.session.getLine(h.start.row).length,this.drawBidiSingleLineMarker(e,h,i+" ace_br1 ace_start",n,null,s)):(o=n.lineHeight,r=this.$getTop(t.start.row,n),a=l+t.start.column*n.characterWidth,e.push("
")),this.session.$bidiHandler.isBidiRow(t.end.row)){var h;(h=t.clone()).start.row=h.end.row,h.start.column=0,this.drawBidiSingleLineMarker(e,h,i+" ace_br12",n,null,s)}else{var c=t.end.column*n.characterWidth;o=n.lineHeight,r=this.$getTop(t.end.row,n),e.push("
")}if(!((o=(t.end.row-t.start.row-1)*n.lineHeight)<=0)){r=this.$getTop(t.start.row+1,n);var u=(t.start.column?1:0)|(t.end.column?0:8);e.push("
")}},this.drawSingleLineMarker=function(e,t,i,n,s,o){var r=n.lineHeight,a=(t.end.column+(s||0)-t.start.column)*n.characterWidth,l=this.$getTop(t.start.row,n),h=this.$padding+t.start.column*n.characterWidth;e.push("
")},this.drawBidiSingleLineMarker=function(e,t,i,n,s,o){var r=n.lineHeight,a=this.$getTop(t.start.row,n),l=this.$padding;this.session.$bidiHandler.getSelections(t.start.column,t.end.column).forEach((function(t){e.push("
")}))},this.drawFullLineMarker=function(e,t,i,n,s){var o=this.$getTop(t.start.row,n),r=n.lineHeight;t.start.row!=t.end.row&&(r+=this.$getTop(t.end.row,n)-o),e.push("
")},this.drawScreenLineMarker=function(e,t,i,n,s){var o=this.$getTop(t.start.row,n),r=n.lineHeight;e.push("
")}}).call(o.prototype),t.Marker=o})),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(e,t,i){"use strict";var n=e("../lib/oop"),s=e("../lib/dom"),o=e("../lib/lang"),r=(e("../lib/useragent"),e("../lib/event_emitter").EventEmitter),a=function(e){this.element=s.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){n.implement(this,r),this.EOF_CHAR="¶",this.EOL_CHAR_LF="¬",this.EOL_CHAR_CRLF="¤",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="—",this.SPACE_CHAR="·",this.$padding=0,this.$updateEolChar=function(){var e="\n"==this.session.doc.getNewLineCharacter()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles!=e&&(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides!=e&&(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;for(var t=this.$tabStrings=[0],i=1;i"+o.stringRepeat(this.TAB_CHAR,i)+""):t.push(o.stringRepeat(" ",i));if(this.displayIndentGuides){this.$indentGuideRe=/\s\S| \t|\t |\s$/;var n="ace_indent-guide",s="",r="";if(this.showInvisibles){n+=" ace_invisible",s=" ace_invisible_space",r=" ace_invisible_tab";var a=o.stringRepeat(this.SPACE_CHAR,this.tabSize),l=o.stringRepeat(this.TAB_CHAR,this.tabSize)}else l=a=o.stringRepeat(" ",this.tabSize);this.$tabStrings[" "]=""+a+"",this.$tabStrings["\t"]=""+l+""}},this.updateLines=function(e,t,i){this.config.lastRow==e.lastRow&&this.config.firstRow==e.firstRow||this.scrollLines(e),this.config=e;for(var n=Math.max(t,e.firstRow),s=Math.min(i,e.lastRow),o=this.element.childNodes,r=0,a=e.firstRow;ah&&(a=l.end.row+1,h=(l=this.session.getNextFoldLine(a,l))?l.start.row:1/0),!(a>s);){var c=o[r++];if(c){var u=[];this.$renderLine(u,a,!this.$useLineGroups(),a==h&&l),c.style.height=e.lineHeight*this.session.getRowLength(a)+"px",c.innerHTML=u.join("")}a++}},this.scrollLines=function(e){var t=this.config;if(this.config=e,!t||t.lastRow0;n--)i.removeChild(i.firstChild);if(t.lastRow>e.lastRow)for(n=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);n>0;n--)i.removeChild(i.lastChild);if(e.firstRowt.lastRow&&(s=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow),i.appendChild(s))},this.$renderLinesFragment=function(e,t,i){for(var n=this.element.ownerDocument.createDocumentFragment(),o=t,r=this.session.getNextFoldLine(o),a=r?r.start.row:1/0;o>a&&(o=r.end.row+1,a=(r=this.session.getNextFoldLine(o,r))?r.start.row:1/0),!(o>i);){var l=s.createElement("div"),h=[];if(this.$renderLine(h,o,!1,o==a&&r),l.innerHTML=h.join(""),this.$useLineGroups())l.className="ace_line_group",n.appendChild(l),l.style.height=e.lineHeight*this.session.getRowLength(o)+"px";else for(;l.firstChild;)n.appendChild(l.firstChild);o++}return n},this.update=function(e){this.config=e;for(var t=[],i=e.firstRow,n=e.lastRow,s=i,o=this.session.getNextFoldLine(s),r=o?o.start.row:1/0;s>r&&(s=o.end.row+1,r=(o=this.session.getNextFoldLine(s,o))?o.start.row:1/0),!(s>n);)this.$useLineGroups()&&t.push("
"),this.$renderLine(t,s,!1,s==r&&o),this.$useLineGroups()&&t.push("
"),s++;this.element.innerHTML=t.join("")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,i,n){var s=this,r=n.replace(/\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,(function(e,i,n,r,a){if(i)return s.showInvisibles?""+o.stringRepeat(s.SPACE_CHAR,e.length)+"":e;if("&"==e)return"&";if("<"==e)return"<";if(">"==e)return">";if("\t"==e){var l=s.session.getScreenTabSize(t+r);return t+=l-1,s.$tabStrings[l]}if(" "==e){var h=s.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",c=s.showInvisibles?s.SPACE_CHAR:"";return t+=1,""+c+""}return n?""+s.SPACE_CHAR+"":(t+=1,""+e+"")}));if(this.$textToken[i.type])e.push(r);else{var a="ace_"+i.type.replace(/\./g," ace_"),l="";"fold"==i.type&&(l=" style='width:"+i.value.length*this.config.characterWidth+"px;' "),e.push("",r,"")}return t+n.length},this.renderIndentGuide=function(e,t,i){var n=t.search(this.$indentGuideRe);return n<=0||n>=i?t:" "==t[0]?(n-=n%this.tabSize,e.push(o.stringRepeat(this.$tabStrings[" "],n/this.tabSize)),t.substr(n)):"\t"==t[0]?(e.push(o.stringRepeat(this.$tabStrings["\t"],n)),t.substr(n)):t},this.$renderWrappedLine=function(e,t,i,n){for(var s=0,r=0,a=i[0],l=0,h=0;h=a;)l=this.$renderToken(e,l,c,u.substring(0,a-s)),u=u.substring(a-s),s=a,n||e.push("","
"),e.push(o.stringRepeat(" ",i.indent)),l=0,a=i[++r]||Number.MAX_VALUE;0!=u.length&&(s+=u.length,l=this.$renderToken(e,l,c,u))}}},this.$renderSimpleLine=function(e,t){var i=0,n=t[0],s=n.value;this.displayIndentGuides&&(s=this.renderIndentGuide(e,s)),s&&(i=this.$renderToken(e,i,n,s));for(var o=1;o"),s.length){var o=this.session.getRowSplitData(t);o&&o.length?this.$renderWrappedLine(e,s,o,i):this.$renderSimpleLine(e,s)}this.showInvisibles&&(n&&(t=n.end.row),e.push("",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,"")),i||e.push("
")},this.$getFoldLineTokens=function(e,t){var i=this.session,n=[],s=i.getTokens(e);return t.walk((function(e,t,o,r,a){null!=e?n.push({type:"fold",value:e}):(a&&(s=i.getTokens(t)),s.length&&function(e,t,i){for(var s=0,o=0;o+e[s].value.lengthi-t&&(r=r.substring(0,i-t)),n.push({type:e[s].type,value:r}),o=t+r.length,s+=1);oi?n.push({type:e[s].type,value:r.substring(0,i-o)}):n.push(e[s]),o+=r.length,s+=1}}(s,r,o))}),t.end.row,this.session.getLine(t.end.row).length),n},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(a.prototype),t.Text=a})),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],(function(e,t,i){"use strict";var n,s=e("../lib/dom"),o=function(e){this.element=s.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),void 0===n&&(n=!("opacity"in this.element.style)),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),s.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=(n?this.$updateVisibility:this.$updateOpacity).bind(this)};(function(){this.$updateVisibility=function(e){for(var t=this.cursors,i=t.length;i--;)t[i].style.visibility=e?"":"hidden"},this.$updateOpacity=function(e){for(var t=this.cursors,i=t.length;i--;)t[i].style.opacity=e?"":"0"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e==this.smoothBlinking||n||(this.smoothBlinking=e,s.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.$updateCursors=this.$updateOpacity.bind(this),this.restartTimer())},this.addCursor=function(){var e=s.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,s.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,s.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&s.removeCssClass(this.element,"ace_smooth-blinking"),e(!0),this.isBlinking&&this.blinkInterval&&this.isVisible){this.smoothBlinking&&setTimeout(function(){s.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));var t=function(){this.timeoutId=setTimeout((function(){e(!1)}),.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval((function(){e(!0),t()}),this.blinkInterval),t()}},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var i=this.session.documentToScreenPosition(e);return{left:this.$padding+(this.session.$bidiHandler.isBidiRow(i.row,e.row)?this.session.$bidiHandler.getPosLeft(i.column):i.column*this.config.characterWidth),top:(i.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,i=0,n=0;void 0!==t&&0!==t.length||(t=[{cursor:null}]),i=0;for(var s=t.length;ie.height+e.offset||o.top<0)&&i>1)){var r=(this.cursors[n++]||this.addCursor()).style;this.drawCursor?this.drawCursor(r,o,e,t[i],this.session):(r.left=o.left+"px",r.top=o.top+"px",r.width=e.characterWidth+"px",r.height=e.lineHeight+"px")}}for(;this.cursors.length>n;)this.removeCursor();var a=this.session.getOverwrite();this.$setOverwrite(a),this.$pixelPos=o,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?s.addCssClass(this.element,"ace_overwrite-cursors"):s.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(o.prototype),t.Cursor=o})),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],(function(e,t,i){"use strict";var n=e("./lib/oop"),s=e("./lib/dom"),o=e("./lib/event"),r=e("./lib/event_emitter").EventEmitter,a=32768,l=function(e){this.element=s.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=s.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,o.addListener(this.element,"scroll",this.onScroll.bind(this)),o.addListener(this.element,"mousedown",o.preventDefault)};(function(){n.implement(this,r),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e,this.coeff=1}}).call(l.prototype);var h=function(e,t){l.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=s.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px",this.$minWidth=0};n.inherits(h,l),function(){this.classSuffix="-v",this.onScroll=function(){if(!this.skipEvent){if(this.scrollTop=this.element.scrollTop,1!=this.coeff){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit("scroll",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>a?(this.coeff=a/e,e=a):1!=this.coeff&&(this.coeff=1),this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(h.prototype);var c=function(e,t){l.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};n.inherits(c,l),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(c.prototype),t.ScrollBar=h,t.ScrollBarV=h,t.ScrollBarH=c,t.VScrollBar=h,t.HScrollBar=c})),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],(function(e,t,i){"use strict";var n=e("./lib/event"),s=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){if(this.changes=this.changes|e,!this.pending&&this.changes){this.pending=!0;var t=this;n.nextFrame((function(){var e;for(t.pending=!1;e=t.changes;)t.changes=0,t.onRender(e)}),this.window)}}}).call(s.prototype),t.RenderLoop=s})),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(e,t,i){var n=e("../lib/oop"),s=e("../lib/dom"),o=e("../lib/lang"),r=e("../lib/useragent"),a=e("../lib/event_emitter").EventEmitter,l=0,h=t.FontMetrics=function(e){this.el=s.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=s.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=s.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),l||this.$testFractionalRect(),this.$measureNode.innerHTML=o.stringRepeat("X",l),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){n.implement(this,a),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=s.createElement("div");this.$setMeasureNodeStyles(e.style),e.style.width="0.2px",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;l=t>0&&t<1?50:100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",r.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval((function(){e.checkForSizeChanges()}),500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(){if(50===l){var e=null;try{e=this.$measureNode.getBoundingClientRect()}catch(t){e={width:0,height:0}}var t={height:e.height,width:e.width/l}}else t={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/l};return 0===t.width||0===t.height?null:t},this.$measureCharWidth=function(e){return this.$main.innerHTML=o.stringRepeat(e,l),this.$main.getBoundingClientRect().width/l},this.getCharacterWidth=function(e){var t=this.charSizes[e];return void 0===t&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(h.prototype)})),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"],(function(e,t,i){"use strict";var n=e("./lib/oop"),s=e("./lib/dom"),o=e("./config"),r=e("./lib/useragent"),a=e("./layer/gutter").Gutter,l=e("./layer/marker").Marker,h=e("./layer/text").Text,c=e("./layer/cursor").Cursor,u=e("./scrollbar").HScrollBar,d=e("./scrollbar").VScrollBar,g=e("./renderloop").RenderLoop,f=e("./layer/font_metrics").FontMetrics,m=e("./lib/event_emitter").EventEmitter;s.importCssString('.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;min-width: 100%;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;text-indent: -1em;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: inherit;color: inherit;z-index: 1000;opacity: 1;text-indent: 0;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-webkit-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-webkit-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-webkit-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_text-input-ios {position: absolute !important;top: -100000px !important;left: -100000px !important;}',"ace_editor.css");var p=function(e,t){var i=this;this.container=e||s.createElement("div"),this.$keepTextAreaAtCursor=!r.isOldIE,s.addCssClass(this.container,"ace_editor"),this.setTheme(t),this.$gutter=s.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.$gutter.setAttribute("aria-hidden",!0),this.scroller=s.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=s.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new a(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new l(this.content);var n=this.$textLayer=new h(this.content);this.canvas=n.element,this.$markerFront=new l(this.content),this.$cursorLayer=new c(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new d(this.container,this),this.scrollBarH=new u(this.container,this),this.scrollBarV.addEventListener("scroll",(function(e){i.$scrollAnimation||i.session.setScrollTop(e.data-i.scrollMargin.top)})),this.scrollBarH.addEventListener("scroll",(function(e){i.$scrollAnimation||i.session.setScrollLeft(e.data-i.scrollMargin.left)})),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new f(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",(function(e){i.updateCharacterSize(),i.onResize(!0,i.gutterWidth,i.$size.width,i.$size.height),i._signal("changeCharacterSize",e)})),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new g(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),o.resetOptions(this),o._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,n.implement(this,m),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),e&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode))},this.updateLines=function(e,t,i){if(void 0===t&&(t=1/0),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,i,n){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=e?1:0;var s=this.container;n||(n=s.clientHeight||s.scrollHeight),i||(i=s.clientWidth||s.scrollWidth);var o=this.$updateCachedSize(e,t,i,n);if(!this.$size.scrollerHeight||!i&&!n)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(o|this.$changes,!0):this.$loop.schedule(o|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(e,t,i,n){n-=this.$extraHeight||0;var s=0,o=this.$size,r={width:o.width,height:o.height,scrollerHeight:o.scrollerHeight,scrollerWidth:o.scrollerWidth};return n&&(e||o.height!=n)&&(o.height=n,s|=this.CHANGE_SIZE,o.scrollerHeight=o.height,this.$horizScroll&&(o.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",s|=this.CHANGE_SCROLL),i&&(e||o.width!=i)&&(s|=this.CHANGE_SIZE,o.width=i,null==t&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+"px",o.scrollerWidth=Math.max(0,i-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+"px",this.scroller.style.bottom=this.scrollBarH.getHeight()+"px",(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)&&(s|=this.CHANGE_FULL)),o.$dirty=!i||!n,s&&this._signal("resize",r),s},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-2*this.$padding,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var i=this.session.selection.getCursor();i.column=0,e=this.$cursorLayer.getPixelPosition(i,!0),t*=this.session.getRowLength(i.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+"px",this.$gutterLineHighlight.style.height=t+"px"},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var e=s.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=s.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(this.$keepTextAreaAtCursor){var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,i=this.$cursorLayer.$pixelPos.left;t-=e.offset;var n=this.textarea.style,s=this.lineHeight;if(t<0||t>e.height-s)n.top=n.left="0";else{var o=this.characterWidth;if(this.$composition){var r=this.textarea.value.replace(/^\x01+/,"");o*=this.session.$getStringScreenWidth(r)[0]+2,s+=2}(i-=this.scrollLeft)>this.$size.scrollerWidth-o&&(i=this.$size.scrollerWidth-o),i+=this.gutterWidth,n.height=s+"px",n.width=o+"px",n.left=Math.min(i,this.$size.scrollerWidth-o)+"px",n.top=Math.min(t,this.$size.height-s)+"px"}}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow;return this.session.documentToScreenRow(t,0)*e.lineHeight-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,i,n){var s=this.scrollMargin;s.top=0|e,s.bottom=0|t,s.right=0|n,s.left=0|i,s.v=s.top+s.bottom,s.h=s.left+s.right,s.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-s.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){if(this.$changes&&(e|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(e||t)){if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var i=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){if(e|=this.$computeLayerConfig(),i.firstRow!=this.layerConfig.firstRow&&i.firstRowScreen==this.layerConfig.firstRowScreen){var n=this.scrollTop+(i.firstRow-this.layerConfig.firstRow)*this.lineHeight;n>0&&(this.scrollTop=n,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig())}i=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-i.offset+"px",this.content.style.marginTop=-i.offset+"px",this.content.style.width=i.width+2*this.$padding+"px",this.content.style.height=i.minHeight+"px"}if(e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+"px",this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left"),e&this.CHANGE_FULL)return this.$textLayer.update(i),this.$showGutter&&this.$gutterLayer.update(i),this.$markerBack.update(i),this.$markerFront.update(i),this.$cursorLayer.update(i),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),void this._signal("afterRender");if(e&this.CHANGE_SCROLL)return e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(i):this.$textLayer.scrollLines(i),this.$showGutter&&this.$gutterLayer.update(i),this.$markerBack.update(i),this.$markerFront.update(i),this.$cursorLayer.update(i),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),void this._signal("afterRender");e&this.CHANGE_TEXT?(this.$textLayer.update(i),this.$showGutter&&this.$gutterLayer.update(i)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(i):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(i),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(i),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(i),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(i),this._signal("afterRender")}else this.$changes|=e},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,i=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(i+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&i>this.$maxPixelHeight&&(i=this.$maxPixelHeight);var n=e>t;if(i!=this.desiredHeight||this.$size.height!=this.desiredHeight||n!=this.$vScroll){n!=this.$vScroll&&(this.$vScroll=n,this.scrollBarV.setVisible(n));var s=this.container.clientWidth;this.container.style.height=i+"px",this.$updateCachedSize(!0,this.$gutterWidth,s,i),this.desiredHeight=i,this._signal("autosize")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,i=t.height<=2*this.lineHeight,n=this.session.getScreenLength()*this.lineHeight,s=this.$getLongestLine(),o=!i&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-s-2*this.$padding<0),r=this.$horizScroll!==o;r&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var l=this.scrollTop%this.lineHeight,h=t.scrollerHeight+this.lineHeight,c=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;n+=c;var u=this.scrollMargin;this.session.setScrollTop(Math.max(-u.top,Math.min(this.scrollTop,n-t.scrollerHeight+u.bottom))),this.session.setScrollLeft(Math.max(-u.left,Math.min(this.scrollLeft,s+2*this.$padding-t.scrollerWidth+u.right)));var d=!i&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-n+c<0||this.scrollTop>u.top),g=a!==d;g&&(this.$vScroll=d,this.scrollBarV.setVisible(d));var f,m,p=Math.ceil(h/this.lineHeight)-1,A=Math.max(0,Math.round((this.scrollTop-l)/this.lineHeight)),C=A+p,F=this.lineHeight;A=e.screenToDocumentRow(A,0);var w=e.getFoldLine(A);w&&(A=w.start.row),f=e.documentToScreenRow(A,0),m=e.getRowLength(A)*F,C=Math.min(e.screenToDocumentRow(C,0),e.getLength()-1),h=t.scrollerHeight+e.getRowLength(C)*F+m,l=this.scrollTop-f*F;var v=0;return this.layerConfig.width!=s&&(v=this.CHANGE_H_SCROLL),(r||g)&&(v=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),g&&(s=this.$getLongestLine())),this.layerConfig={width:s,padding:this.$padding,firstRow:A,firstRowScreen:f,lastRow:C,lineHeight:F,characterWidth:this.characterWidth,minHeight:h,maxHeight:n,offset:l,gutterOffset:F?Math.max(0,Math.ceil((l+t.height-t.scrollerHeight)/F)):0,height:this.$size.scrollerHeight},v},this.$updateLines=function(){if(this.$changedLines){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var i=this.layerConfig;if(!(e>i.lastRow+1||to?(t&&l+r>o+this.lineHeight&&(o-=t*this.$size.scrollerHeight),0===o&&(o=-this.scrollMargin.top),this.session.setScrollTop(o)):l+this.$size.scrollerHeight-as?(s=1-this.scrollMargin.top||t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0},this.pixelToScreenCoordinates=function(e,t){var i=this.scroller.getBoundingClientRect(),n=e+this.scrollLeft-i.left-this.$padding,s=n/this.characterWidth,o=Math.floor((t+this.scrollTop-i.top)/this.lineHeight),r=Math.round(s);return{row:o,column:r,side:s-r>0?1:-1,offsetX:n}},this.screenToTextCoordinates=function(e,t){var i=this.scroller.getBoundingClientRect(),n=e+this.scrollLeft-i.left-this.$padding,s=Math.round(n/this.characterWidth),o=(t+this.scrollTop-i.top)/this.lineHeight;return this.session.screenToDocumentPosition(o,Math.max(s,0),n)},this.textToScreenCoordinates=function(e,t){var i=this.scroller.getBoundingClientRect(),n=this.session.documentToScreenPosition(e,t),s=this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e)?this.session.$bidiHandler.getPosLeft(n.column):Math.round(n.column*this.characterWidth)),o=n.row*this.lineHeight;return{pageX:i.left+s-this.scrollLeft,pageY:i.top+o-this.scrollTop}},this.visualizeFocus=function(){s.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){s.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,s.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(s.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null)},this.setTheme=function(e,t){var i=this;if(this.$themeId=e,i._dispatchEvent("themeChange",{theme:e}),e&&"string"!=typeof e)r(e);else{var n=e||this.$options.theme.initialValue;o.loadModule(["theme",n],r)}function r(n){if(i.$themeId!=e)return t&&t();if(!n||!n.cssClass)throw new Error("couldn't load module "+e+" or it didn't call define");s.importCssString(n.cssText,n.cssClass,i.container.ownerDocument),i.theme&&s.removeCssClass(i.container,i.theme.cssClass);var o="padding"in n?n.padding:"padding"in(i.theme||{})?4:i.$padding;i.$padding&&o!=i.$padding&&i.setPadding(o),i.$theme=n.cssClass,i.theme=n,s.addCssClass(i.container,n.cssClass),s.setCssClass(i.container,"ace_dark",n.isDark),i.$size&&(i.$size.width=0,i.$updateSizeAsync()),i._dispatchEvent("themeLoaded",{theme:n}),t&&t()}},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){s.setCssClass(this.container,e,!1!==t)},this.unsetStyle=function(e){s.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.scroller.style.cursor!=e&&(this.scroller.style.cursor=e)},this.setMouseCursor=function(e){this.scroller.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(p.prototype),o.defineOptions(p.prototype,"renderer",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){"number"==typeof e&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?"block":"none",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){s.setCssClass(this.$gutter,"ace_fade-fold-widgets",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight)return this.$gutterLineHighlight=s.createElement("div"),this.$gutterLineHighlight.className="ace_gutter-active-line",void this.$gutter.appendChild(this.$gutterLineHighlight);this.$gutterLineHighlight.style.display=e?"":"none",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){this.$hScrollBarAlwaysVisible&&this.$horizScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){this.$vScrollBarAlwaysVisible&&this.$vScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){"number"==typeof e&&(e+="px"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},maxPixelHeight:{set:function(e){this.updateFull()},initialValue:0},scrollPastEnd:{set:function(e){e=+e||0,this.$scrollPastEnd!=e&&(this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL))},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:"./theme/textmate",handlesSet:!0}}),t.VirtualRenderer=p})),ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"],(function(e,t,i){"use strict";var n=e("../lib/oop"),s=e("../lib/net"),o=e("../lib/event_emitter").EventEmitter,r=e("../config");function a(e,t){var i=function(e,t){var i=t.src;s.qualifyURL(e);try{return new Blob([i],{type:"application/javascript"})}catch(e){var n=new(window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder);return n.append(i),n.getBlob("application/javascript")}}(e,t),n=(window.URL||window.webkitURL).createObjectURL(i);return new Worker(n)}var l=function(t,i,n,s,o){if(this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl),r.get("packaged")||!e.toUrl)s=s||r.moduleUrl(i.id,"worker");else{var l=this.$normalizePath;s=s||l(e.toUrl("ace/worker/worker.js",null,"_"));var h={};t.forEach((function(t){h[t]=l(e.toUrl(t,null,"_").replace(/(\.js)?(\?.*)?$/,""))}))}this.$worker=a(s,i),o&&this.send("importScripts",o),this.$worker.postMessage({init:!0,tlns:h,module:i.id,classname:n}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){n.implement(this,o),this.onMessage=function(e){var t=e.data;switch(t.type){case"event":this._signal(t.name,{data:t.data});break;case"call":var i=this.callbacks[t.id];i&&(i(t.data),delete this.callbacks[t.id]);break;case"error":this.reportError(t.data);break;case"log":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return s.qualifyURL(e)},this.terminate=function(){this._signal("terminate",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off("change",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,i){if(i){var n=this.callbackId++;this.callbacks[n]=i,t.push(n)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(e){console.error(e.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call("setValue",[e.getValue()]),e.on("change",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),"insert"==e.action?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;e&&(this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e}))}}).call(l.prototype);var h=function(e,t,i){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var n=null,s=!1,a=Object.create(o),l=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){l.messageBuffer.push(e),n&&(s?setTimeout(h):h())},this.setEmitSync=function(e){s=e};var h=function(){var e=l.messageBuffer.shift();e.command?n[e.command].apply(n,e.args):e.event&&a._signal(e.event,e.data)};a.postMessage=function(e){l.onMessage({data:e})},a.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},a.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},r.loadModule(["worker",t],(function(e){for(n=new e[i](a);l.messageBuffer.length;)h()}))};h.prototype=l.prototype,t.UIWorkerClient=h,t.WorkerClient=l,t.createWorker=a})),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],(function(e,t,i){"use strict";var n=e("./range").Range,s=e("./lib/event_emitter").EventEmitter,o=e("./lib/oop"),r=function(e,t,i,n,s,o){var r=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=s,this.othersClass=o,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=n,this.$onCursorChange=function(){setTimeout((function(){r.onCursorChange()}))},this.$pos=i;var a=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=a.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){o.implement(this,s),this.setup=function(){var e=this,t=this.doc,i=this.session;this.selectionBefore=i.selection.toJSON(),i.selection.inMultiSelectMode&&i.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var s=this.pos;s.$insertRight=!0,s.detach(),s.markerId=i.addMarker(new n(s.row,s.column,s.row,s.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach((function(i){var n=t.createAnchor(i.row,i.column);n.$insertRight=!0,n.detach(),e.others.push(n)})),i.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var e=this.session,t=this;this.othersActive=!0,this.others.forEach((function(i){i.markerId=e.addMarker(new n(i.row,i.column,i.row,i.column+t.length),t.othersClass,null,!1)}))}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var e=0;e=this.pos.column&&t.start.column<=this.pos.column+this.length+1,o=t.start.column-this.pos.column;if(this.updateAnchors(e),s&&(this.length+=i),s&&!this.session.$fromUndo)if("insert"===e.action)for(var r=this.others.length-1;r>=0;r--){var a={row:(l=this.others[r]).row,column:l.column+o};this.doc.insertMergedLines(a,e.lines)}else if("remove"===e.action)for(r=this.others.length-1;r>=0;r--){var l;a={row:(l=this.others[r]).row,column:l.column+o},this.doc.remove(new n(a.row,a.column,a.row,a.column-i))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var e=this,t=this.session,i=function(i,s){t.removeMarker(i.markerId),i.markerId=t.addMarker(new n(i.row,i.column,i.row,i.column+e.length),s,null,!1)};i(this.pos,this.mainClass);for(var s=this.others.length;s--;)i(this.others[s],this.othersClass)}},this.onCursorChange=function(e){if(!this.$updating&&this.session){var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth,i=0;i1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)}},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var i=e.length;i--;){var n=this.ranges.indexOf(e[i]);this.ranges.splice(n,1)}this._signal("removeRange",{ranges:e}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),(t=t||this.ranges[0])&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new n,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],i=s.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(i,t.cursor==t.start)}else{i=this.getRange();var n=this.isBackwards(),o=i.start.row,r=i.end.row;if(o==r){if(n)var a=i.end,l=i.start;else a=i.start,l=i.end;return this.addRange(s.fromPoints(l,l)),void this.addRange(s.fromPoints(a,a))}var h=[],c=this.getLineRange(o,!0);c.start.column=i.start.column,h.push(c);for(var u=o+1;u1){var e=this.rangeList.ranges,t=e[e.length-1],i=s.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(i,t.cursor==t.start)}else{var n=this.session.documentToScreenPosition(this.selectionLead),o=this.session.documentToScreenPosition(this.selectionAnchor);this.rectangularRangeBlock(n,o).forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,i){var n=[],o=e.column0;)C--;if(C>0)for(var F=0;n[F].isEmpty();)F++;for(var w=C;w>=F;w--)n[w].isEmpty()&&n.splice(w,1)}return n}}.call(o.prototype);var d=e("./editor").Editor;function g(e){e.$multiselectOnSessionChange||(e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on("changeSession",e.$multiselectOnSessionChange),e.on("mousedown",r),e.commands.addCommands(h.defaultCommands),function(e){var t=e.textInput.getElement(),i=!1;function n(t){i&&(e.renderer.setMouseCursor(""),i=!1)}a.addListener(t,"keydown",(function(t){var s=18==t.keyCode&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&s?i||(e.renderer.setMouseCursor("crosshair"),i=!0):i&&n()})),a.addListener(t,"keyup",n),a.addListener(t,"blur",n)}(e))}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(e.marker){this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);-1!=t&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(e){for(var t=this.session.$selectionMarkers,i=e.length;i--;){var n=e[i];if(n.marker){this.session.removeMarker(n.marker);var s=t.indexOf(n);-1!=s&&t.splice(s,1)}}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(h.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(e){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(h.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection"))},this.$onMultiSelectExec=function(e){var t=e.command,i=e.editor;if(i.multiSelect){if(t.multiSelectAction)"forEach"==t.multiSelectAction?n=i.forEachSelection(t,e.args):"forEachLine"==t.multiSelectAction?n=i.forEachSelection(t,e.args,!0):"single"==t.multiSelectAction?(i.exitMultiSelectMode(),n=t.exec(i,e.args||{})):n=t.multiSelectAction(i,e.args||{});else{var n=t.exec(i,e.args||{});i.multiSelect.addRange(i.multiSelect.toOrientedRange()),i.multiSelect.mergeOverlappingRanges()}return n}},this.forEachSelection=function(e,t,i){if(!this.inVirtualSelectionMode){var n,s=i&&i.keepOrder,r=1==i||i&&i.$byLines,a=this.session,l=this.selection,h=l.rangeList,c=(s?l:h).ranges;if(!c.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var u=l._eventRegistry;l._eventRegistry={};var d=new o(a);this.inVirtualSelectionMode=!0;for(var g=c.length;g--;){if(r)for(;g>0&&c[g].start.row==c[g-1].end.row;)g--;d.fromOrientedRange(c[g]),d.index=g,this.selection=a.selection=d;var f=e.exec?e.exec(this,t||{}):e(this,t||{});n||void 0===f||(n=f),d.toOrientedRange(c[g])}d.detach(),this.selection=a.selection=l,this.inVirtualSelectionMode=!1,l._eventRegistry=u,l.mergeOverlappingRanges();var m=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),m&&m.from==m.to&&this.renderer.animateScrolling(m.from),n}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var t=this.multiSelect.rangeList.ranges,i=[],n=0;nr&&(r=i.column),nc?e.insert(n,l.stringRepeat(" ",o-c)):e.remove(new s(n.row,n.column,n.row,n.column-o+c)),t.start.column=t.end.column=r,t.start.row=t.end.row=n.row,t.cursor=t.end})),t.fromOrientedRange(i[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var c=this.selection.getRange(),u=c.start.row,d=c.end.row,g=u==d;if(g){var f,m=this.session.getLength();do{f=this.session.getLine(d)}while(/[=:]/.test(f)&&++d0);u<0&&(u=0),d>=m&&(d=m-1)}var p=this.session.removeFullLines(u,d);p=this.$reAlignText(p,g),this.session.insert({row:u,column:0},p.join("\n")+"\n"),g||(c.start.column=0,c.end.column=p[p.length-1].length),this.selection.setRange(c)}},this.$reAlignText=function(e,t){var i,n,s,o=!0,r=!0;return e.map((function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?null==i?(i=t[1].length,n=t[2].length,s=t[3].length,t):(i+n+s!=t[1].length+t[2].length+t[3].length&&(r=!1),i!=t[1].length&&(o=!1),i>t[1].length&&(i=t[1].length),nt[3].length&&(s=t[3].length),t):[e]})).map(t?h:o?r?function(e){return e[2]?a(i+n-e[2].length)+e[2]+a(s)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}:h:function(e){return e[2]?a(i)+e[2]+a(s)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]});function a(e){return l.stringRepeat(" ",e)}function h(e){return e[2]?a(i)+e[2]+a(n-e[2].length+s)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var i=e.oldSession;i&&(i.multiSelect.off("addRange",this.$onAddRange),i.multiSelect.off("removeRange",this.$onRemoveRange),i.multiSelect.off("multiSelect",this.$onMultiSelect),i.multiSelect.off("singleSelect",this.$onSingleSelect),i.multiSelect.lead.off("change",this.$checkMultiselectChange),i.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=g,e("./config").defineOptions(d.prototype,"editor",{enableMultiselect:{set:function(e){g(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",r)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",r))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})})),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],(function(e,t,i){"use strict";var n=e("../../range").Range,s=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,i){var n=e.getLine(i);return this.foldingStartMarker.test(n)?"start":"markbeginend"==t&&this.foldingStopMarker&&this.foldingStopMarker.test(n)?"end":""},this.getFoldWidgetRange=function(e,t,i){return null},this.indentationBlock=function(e,t,i){var s=/\S/,o=e.getLine(t),r=o.search(s);if(-1!=r){for(var a=i||o.length,l=e.getLength(),h=t,c=t;++th){var d=e.getLine(c).length;return new n(h,a,c,d)}}},this.openingBracketBlock=function(e,t,i,s,o){var r={row:i,column:s+1},a=e.$findClosingBracket(t,r,o);if(a){var l=e.foldWidgets[a.row];return null==l&&(l=e.getFoldWidget(a.row)),"start"==l&&a.row>r.row&&(a.row--,a.column=e.getLine(a.row).length),n.fromPoints(r,a)}},this.closingBracketBlock=function(e,t,i,s,o){var r={row:i,column:s},a=e.$findOpeningBracket(t,r);if(a)return a.column++,r.column--,n.fromPoints(a,r)}}).call(s.prototype)})),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],(function(e,t,i){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}',e("../lib/dom").importCssString(t.cssText,t.cssClass)})),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],(function(e,t,i){"use strict";e("./lib/oop");var n=e("./lib/dom");function s(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}e("./range").Range,function(){this.getRowLength=function(e){var t;return t=this.lineWidgets&&this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0,this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach((function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)})),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach(),this.editor!=e&&(this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets)))},this.detach=function(e){var t=this.editor;if(t){this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var i=this.session.lineWidgets;i&&i.forEach((function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))}))}},this.updateOnFold=function(e,t){var i=t.lineWidgets;if(i&&e.action){for(var n=e.data,s=n.start.row,o=n.end.row,r="add"==e.action,a=s+1;a0&&!n[s];)s--;this.firstRow=i.firstRow,this.lastRow=i.lastRow,t.$cursorLayer.config=i;for(var r=s;r<=o;r++){var a=n[r];if(a&&a.el)if(a.hidden)a.el.style.top=-100-(a.pixelHeight||0)+"px";else{a._inDocument||(a._inDocument=!0,t.container.appendChild(a.el));var l=t.$cursorLayer.getPixelPosition({row:r,column:0},!0).top;a.coverLine||(l+=i.lineHeight*this.session.getRowLineCount(a.row)),a.el.style.top=l-i.offset+"px";var h=a.coverGutter?0:t.gutterWidth;a.fixedWidth||(h-=t.scrollLeft),a.el.style.left=h+"px",a.fullWidth&&a.screenWidth&&(a.el.style.minWidth=i.width+2*i.padding+"px"),a.fixedWidth?a.el.style.right=t.scrollBar.getWidth()+"px":a.el.style.right=""}}}}}.call(s.prototype),t.LineWidgets=s})),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],(function(e,t,i){"use strict";var n=e("../line_widgets").LineWidgets,s=e("../lib/dom"),o=e("../range").Range;t.showErrorMarker=function(e,t){var i=e.session;i.widgetManager||(i.widgetManager=new n(i),i.widgetManager.attach(e));var r=e.getCursorPosition(),a=r.row,l=i.widgetManager.getWidgetsAtRow(a).filter((function(e){return"errorMarker"==e.type}))[0];l?l.destroy():a-=t;var h,c=function(e,t,i){var n=e.getAnnotations().sort(o.comparePoints);if(n.length){var s=function(e,t,i){for(var n=0,s=e.length-1;n<=s;){var o=n+s>>1,r=i(t,e[o]);if(r>0)n=o+1;else{if(!(r<0))return o;s=o-1}}return-(n+1)}(n,{row:t,column:-1},o.comparePoints);s<0&&(s=-s-1),s>=n.length?s=i>0?0:n.length-1:0===s&&i<0&&(s=n.length-1);var r=n[s];if(r&&i){if(r.row===t){do{r=n[s+=i]}while(r&&r.row===t);if(!r)return n.slice()}var a=[];t=r.row;do{a[i<0?"unshift":"push"](r),r=n[s+=i]}while(r&&r.row==t);return a.length&&a}}}(i,a,t);if(c){var u=c[0];r.column=(u.pos&&"number"!=typeof u.column?u.pos.sc:u.column)||0,r.row=u.row,h=e.renderer.$gutterLayer.$annotations[r.row]}else{if(l)return;h={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(r.row),e.selection.moveToPosition(r);var d={row:r.row,fixedWidth:!0,coverGutter:!0,el:s.createElement("div"),type:"errorMarker"},g=d.el.appendChild(s.createElement("div")),f=d.el.appendChild(s.createElement("div"));f.className="error_widget_arrow "+h.className;var m=e.renderer.$cursorLayer.getPixelPosition(r).left;f.style.left=m+e.renderer.gutterWidth-5+"px",d.el.className="error_widget_wrapper",g.className="error_widget "+h.className,g.innerHTML=h.text.join("
"),g.appendChild(s.createElement("div"));var p=function(e,t,i){if(0===t&&("esc"===i||"return"===i))return d.destroy(),{command:"null"}};d.destroy=function(){e.$mouseHandler.isMousePressed||(e.keyBinding.removeKeyboardHandler(p),i.widgetManager.removeLineWidget(d),e.off("changeSelection",d.destroy),e.off("changeSession",d.destroy),e.off("mouseup",d.destroy),e.off("change",d.destroy))},e.keyBinding.addKeyboardHandler(p),e.on("changeSelection",d.destroy),e.on("changeSession",d.destroy),e.on("mouseup",d.destroy),e.on("change",d.destroy),e.session.widgetManager.addLineWidget(d),d.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:d.el.offsetHeight})},s.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")})),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],(function(e,t,n){"use strict";e("./lib/fixoldbrowsers");var s=e("./lib/dom"),o=e("./lib/event"),r=e("./editor").Editor,a=e("./edit_session").EditSession,l=e("./undomanager").UndoManager,h=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.acequire=e,t.define=i.amdD,t.edit=function(e){if("string"==typeof e){var i=e;if(!(e=document.getElementById(i)))throw new Error("ace.edit can't find div #"+i)}if(e&&e.env&&e.env.editor instanceof r)return e.env.editor;var n="";if(e&&/input|textarea/i.test(e.tagName)){var a=e;n=a.value,e=s.createElement("pre"),a.parentNode.replaceChild(e,a)}else e&&(n=s.getInnerText(e),e.innerHTML="");var l=t.createEditSession(n),c=new r(new h(e));c.setSession(l);var u={document:l,editor:c,onResize:c.resize.bind(c,null)};return a&&(u.textarea=a),o.addListener(window,"resize",u.onResize),c.on("destroy",(function(){o.removeListener(window,"resize",u.onResize),u.editor.container.env=null})),c.container.env=c.env=u,c},t.createEditSession=function(e,t){var i=new a(e,t);return i.setUndoManager(new l),i},t.EditSession=a,t.UndoManager=l,t.version="1.2.9"})),ace.acequire(["ace/ace"],(function(e){for(var t in e&&(e.config.init(!0),e.define=ace.define),window.ace||(window.ace=e),e)e.hasOwnProperty(t)&&(window.ace[t]=e[t])})),e.exports=window.ace.acequire("ace/ace")}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFNBQVMsQ0FBQyxZQUFZLFNBQVN1RSxHQU8vQixJQUFLLElBQUlrRixLQU5MbEYsSUFDQUEsRUFBRXF3QixPQUFPOUIsTUFBSyxHQUNkdnVCLEVBQUVuRyxPQUFTOEMsSUFBSTlDLFFBRWRELE9BQU8rQyxNQUNSL0MsT0FBTytDLElBQU1xRCxHQUNEQSxFQUFPQSxFQUFFUCxlQUFleUYsS0FDcEN0TCxPQUFPK0MsSUFBSXVJLEdBQU9sRixFQUFFa0YsR0FDNUIsSUFHaEJwTCxFQUFPd0MsUUFBVTFDLE9BQU8rQyxJQUFJbEIsU0FBUyxVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9icmFjZS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqXG4gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2U6XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEwLCBBamF4Lm9yZyBCLlYuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFqYXgub3JnIEIuVi4gbm9yIHRoZVxuICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHNcbiAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFKQVguT1JHIEIuVi4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKlxuICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi9cblxuLyoqXG4gKiBEZWZpbmUgYSBtb2R1bGUgYWxvbmcgd2l0aCBhIHBheWxvYWRcbiAqIEBwYXJhbSBtb2R1bGUgYSBuYW1lIGZvciB0aGUgcGF5bG9hZFxuICogQHBhcmFtIHBheWxvYWQgYSBmdW5jdGlvbiB0byBjYWxsIHdpdGggKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHBhcmFtc1xuICovXG5cbihmdW5jdGlvbigpIHtcblxudmFyIEFDRV9OQU1FU1BBQ0UgPSBcImFjZVwiO1xuXG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSkoKTtcbmlmICghZ2xvYmFsICYmIHR5cGVvZiB3aW5kb3cgIT0gXCJ1bmRlZmluZWRcIikgZ2xvYmFsID0gd2luZG93OyAvLyBzdHJpY3QgbW9kZVxuXG5cbmlmICghQUNFX05BTUVTUEFDRSAmJiB0eXBlb2YgYWNlcXVpcmVqcyAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICByZXR1cm47XG5cblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uKG1vZHVsZSwgZGVwcywgcGF5bG9hZCkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmIChkZWZpbmUub3JpZ2luYWwpXG4gICAgICAgICAgICBkZWZpbmUub3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZHJvcHBpbmcgbW9kdWxlIGJlY2F1c2UgZGVmaW5lIHdhc25cXCd0IGEgc3RyaW5nLlwiKTtcbiAgICAgICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpXG4gICAgICAgIHBheWxvYWQgPSBkZXBzO1xuICAgIGlmICghZGVmaW5lLm1vZHVsZXNbbW9kdWxlXSkge1xuICAgICAgICBkZWZpbmUucGF5bG9hZHNbbW9kdWxlXSA9IHBheWxvYWQ7XG4gICAgICAgIGRlZmluZS5tb2R1bGVzW21vZHVsZV0gPSBudWxsO1xuICAgIH1cbn07XG5cbmRlZmluZS5tb2R1bGVzID0ge307XG5kZWZpbmUucGF5bG9hZHMgPSB7fTtcblxuLyoqXG4gKiBHZXQgYXQgZnVuY3Rpb25hbGl0eSBkZWZpbmUoKWVkIHVzaW5nIHRoZSBmdW5jdGlvbiBhYm92ZVxuICovXG52YXIgX2FjZXF1aXJlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB2YXIgcGF5bG9hZCA9IGxvb2t1cChwYXJlbnRJZCwgbW9kdWxlKTtcbiAgICAgICAgaWYgKHBheWxvYWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtb2R1bGUpID09PSBcIltvYmplY3QgQXJyYXldXCIpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG1vZHVsZS5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBkZXAgPSBsb29rdXAocGFyZW50SWQsIG1vZHVsZVtpXSk7XG4gICAgICAgICAgICBpZiAoZGVwID09IHVuZGVmaW5lZCAmJiBhY2VxdWlyZS5vcmlnaW5hbClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBwYXJhbXMucHVzaChkZXApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsYmFjayAmJiBjYWxsYmFjay5hcHBseShudWxsLCBwYXJhbXMpIHx8IHRydWU7XG4gICAgfVxufTtcblxudmFyIGFjZXF1aXJlID0gZnVuY3Rpb24obW9kdWxlLCBjYWxsYmFjaykge1xuICAgIHZhciBwYWNrYWdlZE1vZHVsZSA9IF9hY2VxdWlyZShcIlwiLCBtb2R1bGUsIGNhbGxiYWNrKTtcbiAgICBpZiAocGFja2FnZWRNb2R1bGUgPT0gdW5kZWZpbmVkICYmIGFjZXF1aXJlLm9yaWdpbmFsKVxuICAgICAgICByZXR1cm4gYWNlcXVpcmUub3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gcGFja2FnZWRNb2R1bGU7XG59O1xuXG52YXIgbm9ybWFsaXplTW9kdWxlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZU5hbWUpIHtcbiAgICAvLyBub3JtYWxpemUgcGx1Z2luIGFjZXF1aXJlc1xuICAgIGlmIChtb2R1bGVOYW1lLmluZGV4T2YoXCIhXCIpICE9PSAtMSkge1xuICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5zcGxpdChcIiFcIik7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIGNodW5rc1swXSkgKyBcIiFcIiArIG5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzFdKTtcbiAgICB9XG4gICAgLy8gbm9ybWFsaXplIHJlbGF0aXZlIGFjZXF1aXJlc1xuICAgIGlmIChtb2R1bGVOYW1lLmNoYXJBdCgwKSA9PSBcIi5cIikge1xuICAgICAgICB2YXIgYmFzZSA9IHBhcmVudElkLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSkuam9pbihcIi9cIik7XG4gICAgICAgIG1vZHVsZU5hbWUgPSBiYXNlICsgXCIvXCIgKyBtb2R1bGVOYW1lO1xuXG4gICAgICAgIHdoaWxlKG1vZHVsZU5hbWUuaW5kZXhPZihcIi5cIikgIT09IC0xICYmIHByZXZpb3VzICE9IG1vZHVsZU5hbWUpIHtcbiAgICAgICAgICAgIHZhciBwcmV2aW91cyA9IG1vZHVsZU5hbWU7XG4gICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9cXC9cXC5cXC8vLCBcIi9cIikucmVwbGFjZSgvW15cXC9dK1xcL1xcLlxcLlxcLy8sIFwiXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2R1bGVOYW1lO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBsb29rdXAgbW9kdWxlTmFtZXMgYW5kIHJlc29sdmUgdGhlbSBieSBjYWxsaW5nIHRoZVxuICogZGVmaW5pdGlvbiBmdW5jdGlvbiBpZiBuZWVkZWQuXG4gKi9cbnZhciBsb29rdXAgPSBmdW5jdGlvbihwYXJlbnRJZCwgbW9kdWxlTmFtZSkge1xuICAgIG1vZHVsZU5hbWUgPSBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIG1vZHVsZU5hbWUpO1xuXG4gICAgdmFyIG1vZHVsZSA9IGRlZmluZS5tb2R1bGVzW21vZHVsZU5hbWVdO1xuICAgIGlmICghbW9kdWxlKSB7XG4gICAgICAgIG1vZHVsZSA9IGRlZmluZS5wYXlsb2Fkc1ttb2R1bGVOYW1lXTtcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBleHBvcnRzID0ge307XG4gICAgICAgICAgICB2YXIgbW9kID0ge1xuICAgICAgICAgICAgICAgIGlkOiBtb2R1bGVOYW1lLFxuICAgICAgICAgICAgICAgIHVyaTogJycsXG4gICAgICAgICAgICAgICAgZXhwb3J0czogZXhwb3J0cyxcbiAgICAgICAgICAgICAgICBwYWNrYWdlZDogdHJ1ZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIHJlcSA9IGZ1bmN0aW9uKG1vZHVsZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2FjZXF1aXJlKG1vZHVsZU5hbWUsIG1vZHVsZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIHJldHVyblZhbHVlID0gbW9kdWxlKHJlcSwgZXhwb3J0cywgbW9kKTtcbiAgICAgICAgICAgIGV4cG9ydHMgPSByZXR1cm5WYWx1ZSB8fCBtb2QuZXhwb3J0cztcbiAgICAgICAgICAgIGRlZmluZS5tb2R1bGVzW21vZHVsZU5hbWVdID0gZXhwb3J0cztcbiAgICAgICAgICAgIGRlbGV0ZSBkZWZpbmUucGF5bG9hZHNbbW9kdWxlTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgbW9kdWxlID0gZGVmaW5lLm1vZHVsZXNbbW9kdWxlTmFtZV0gPSBleHBvcnRzIHx8IG1vZHVsZTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZHVsZTtcbn07XG5cbmZ1bmN0aW9uIGV4cG9ydEFjZShucykge1xuICAgIHZhciByb290ID0gZ2xvYmFsO1xuICAgIGlmIChucykge1xuICAgICAgICBpZiAoIWdsb2JhbFtuc10pXG4gICAgICAgICAgICBnbG9iYWxbbnNdID0ge307XG4gICAgICAgIHJvb3QgPSBnbG9iYWxbbnNdO1xuICAgIH1cblxuICAgIGlmICghcm9vdC5kZWZpbmUgfHwgIXJvb3QuZGVmaW5lLnBhY2thZ2VkKSB7XG4gICAgICAgIGRlZmluZS5vcmlnaW5hbCA9IHJvb3QuZGVmaW5lO1xuICAgICAgICByb290LmRlZmluZSA9IGRlZmluZTtcbiAgICAgICAgcm9vdC5kZWZpbmUucGFja2FnZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghcm9vdC5hY2VxdWlyZSB8fCAhcm9vdC5hY2VxdWlyZS5wYWNrYWdlZCkge1xuICAgICAgICBhY2VxdWlyZS5vcmlnaW5hbCA9IHJvb3QuYWNlcXVpcmU7XG4gICAgICAgIHJvb3QuYWNlcXVpcmUgPSBhY2VxdWlyZTtcbiAgICAgICAgcm9vdC5hY2VxdWlyZS5wYWNrYWdlZCA9IHRydWU7XG4gICAgfVxufVxuXG5leHBvcnRBY2UoQUNFX05BTUVTUEFDRSk7XG5cbn0pKCk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGliL3JlZ2V4cFwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICB2YXIgcmVhbCA9IHtcbiAgICAgICAgICAgIGV4ZWM6IFJlZ0V4cC5wcm90b3R5cGUuZXhlYyxcbiAgICAgICAgICAgIHRlc3Q6IFJlZ0V4cC5wcm90b3R5cGUudGVzdCxcbiAgICAgICAgICAgIG1hdGNoOiBTdHJpbmcucHJvdG90eXBlLm1hdGNoLFxuICAgICAgICAgICAgcmVwbGFjZTogU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLFxuICAgICAgICAgICAgc3BsaXQ6IFN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxpYW50RXhlY05wY2cgPSByZWFsLmV4ZWMuY2FsbCgvKCk/Py8sIFwiXCIpWzFdID09PSB1bmRlZmluZWQsIC8vIGNoZWNrIGBleGVjYCBoYW5kbGluZyBvZiBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cHNcbiAgICAgICAgY29tcGxpYW50TGFzdEluZGV4SW5jcmVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHggPSAvXi9nO1xuICAgICAgICAgICAgcmVhbC50ZXN0LmNhbGwoeCwgXCJcIik7XG4gICAgICAgICAgICByZXR1cm4gIXgubGFzdEluZGV4O1xuICAgICAgICB9KCk7XG5cbiAgICBpZiAoY29tcGxpYW50TGFzdEluZGV4SW5jcmVtZW50ICYmIGNvbXBsaWFudEV4ZWNOcGNnKVxuICAgICAgICByZXR1cm47XG4gICAgUmVnRXhwLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICB2YXIgbWF0Y2ggPSByZWFsLmV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgICAgIG5hbWUsIHIyO1xuICAgICAgICBpZiAoIHR5cGVvZihzdHIpID09ICdzdHJpbmcnICYmIG1hdGNoKSB7XG4gICAgICAgICAgICBpZiAoIWNvbXBsaWFudEV4ZWNOcGNnICYmIG1hdGNoLmxlbmd0aCA+IDEgJiYgaW5kZXhPZihtYXRjaCwgXCJcIikgPiAtMSkge1xuICAgICAgICAgICAgICAgIHIyID0gUmVnRXhwKHRoaXMuc291cmNlLCByZWFsLnJlcGxhY2UuY2FsbChnZXROYXRpdmVGbGFncyh0aGlzKSwgXCJnXCIsIFwiXCIpKTtcbiAgICAgICAgICAgICAgICByZWFsLnJlcGxhY2UuY2FsbChzdHIuc2xpY2UobWF0Y2guaW5kZXgpLCByMiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3hyZWdleHAgJiYgdGhpcy5feHJlZ2V4cC5jYXB0dXJlTmFtZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG1hdGNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLl94cmVnZXhwLmNhcHR1cmVOYW1lc1tpIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFtuYW1lXSA9IG1hdGNoW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY29tcGxpYW50TGFzdEluZGV4SW5jcmVtZW50ICYmIHRoaXMuZ2xvYmFsICYmICFtYXRjaFswXS5sZW5ndGggJiYgKHRoaXMubGFzdEluZGV4ID4gbWF0Y2guaW5kZXgpKVxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEluZGV4LS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH07XG4gICAgaWYgKCFjb21wbGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQpIHtcbiAgICAgICAgUmVnRXhwLnByb3RvdHlwZS50ZXN0ID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICAgICAgdmFyIG1hdGNoID0gcmVhbC5leGVjLmNhbGwodGhpcywgc3RyKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCAmJiB0aGlzLmdsb2JhbCAmJiAhbWF0Y2hbMF0ubGVuZ3RoICYmICh0aGlzLmxhc3RJbmRleCA+IG1hdGNoLmluZGV4KSlcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RJbmRleC0tO1xuICAgICAgICAgICAgcmV0dXJuICEhbWF0Y2g7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0TmF0aXZlRmxhZ3MgKHJlZ2V4KSB7XG4gICAgICAgIHJldHVybiAocmVnZXguZ2xvYmFsICAgICA/IFwiZ1wiIDogXCJcIikgK1xuICAgICAgICAgICAgICAgKHJlZ2V4Lmlnbm9yZUNhc2UgPyBcImlcIiA6IFwiXCIpICtcbiAgICAgICAgICAgICAgIChyZWdleC5tdWx0aWxpbmUgID8gXCJtXCIgOiBcIlwiKSArXG4gICAgICAgICAgICAgICAocmVnZXguZXh0ZW5kZWQgICA/IFwieFwiIDogXCJcIikgKyAvLyBQcm9wb3NlZCBmb3IgRVM0OyBpbmNsdWRlZCBpbiBBUzNcbiAgICAgICAgICAgICAgIChyZWdleC5zdGlja3kgICAgID8gXCJ5XCIgOiBcIlwiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbmRleE9mIChhcnJheSwgaXRlbSwgZnJvbSkge1xuICAgICAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIC8vIFVzZSB0aGUgbmF0aXZlIGFycmF5IG1ldGhvZCBpZiBhdmFpbGFibGVcbiAgICAgICAgICAgIHJldHVybiBhcnJheS5pbmRleE9mKGl0ZW0sIGZyb20pO1xuICAgICAgICBmb3IgKHZhciBpID0gZnJvbSB8fCAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJheVtpXSA9PT0gaXRlbSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9saWIvZXM1LXNoaW1cIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxuZnVuY3Rpb24gRW1wdHkoKSB7fVxuXG5pZiAoIUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKSB7XG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHsgLy8gLmxlbmd0aCBpcyAxXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzO1xuICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlIFwiICsgdGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsgLy8gZm9yIG5vcm1hbCBjYWxsXG4gICAgICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICAgICAgdGhhdCxcbiAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9O1xuICAgICAgICBpZih0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuICAgICAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBib3VuZDtcbiAgICB9O1xufVxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbnZhciBwcm90b3R5cGVPZkFycmF5ID0gQXJyYXkucHJvdG90eXBlO1xudmFyIHByb3RvdHlwZU9mT2JqZWN0ID0gT2JqZWN0LnByb3RvdHlwZTtcbnZhciBzbGljZSA9IHByb3RvdHlwZU9mQXJyYXkuc2xpY2U7XG52YXIgX3RvU3RyaW5nID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0LnRvU3RyaW5nKTtcbnZhciBvd25zID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTtcbnZhciBkZWZpbmVHZXR0ZXI7XG52YXIgZGVmaW5lU2V0dGVyO1xudmFyIGxvb2t1cEdldHRlcjtcbnZhciBsb29rdXBTZXR0ZXI7XG52YXIgc3VwcG9ydHNBY2Nlc3NvcnM7XG5pZiAoKHN1cHBvcnRzQWNjZXNzb3JzID0gb3ducyhwcm90b3R5cGVPZk9iamVjdCwgXCJfX2RlZmluZUdldHRlcl9fXCIpKSkge1xuICAgIGRlZmluZUdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZUdldHRlcl9fKTtcbiAgICBkZWZpbmVTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVTZXR0ZXJfXyk7XG4gICAgbG9va3VwR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVyX18pO1xuICAgIGxvb2t1cFNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cFNldHRlcl9fKTtcbn1cbmlmIChbMSwyXS5zcGxpY2UoMCkubGVuZ3RoICE9IDIpIHtcbiAgICBpZihmdW5jdGlvbigpIHsgLy8gdGVzdCBJRSA8IDkgdG8gc3BsaWNlIGJ1ZyAtIHNlZSBpc3N1ZSAjMTM4XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VBcnJheShsKSB7XG4gICAgICAgICAgICB2YXIgYSA9IG5ldyBBcnJheShsKzIpO1xuICAgICAgICAgICAgYVswXSA9IGFbMV0gPSAwO1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFycmF5ID0gW10sIGxlbmd0aEJlZm9yZTtcbiAgICAgICAgXG4gICAgICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDIwKSk7XG4gICAgICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDI2KSk7XG5cbiAgICAgICAgbGVuZ3RoQmVmb3JlID0gYXJyYXkubGVuZ3RoOyAvLzQ2XG4gICAgICAgIGFycmF5LnNwbGljZSg1LCAwLCBcIlhYWFwiKTsgLy8gYWRkIG9uZSBlbGVtZW50XG5cbiAgICAgICAgbGVuZ3RoQmVmb3JlICsgMSA9PSBhcnJheS5sZW5ndGhcblxuICAgICAgICBpZiAobGVuZ3RoQmVmb3JlICsgMSA9PSBhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlOy8vIGhhcyByaWdodCBzcGxpY2UgaW1wbGVtZW50YXRpb24gd2l0aG91dCBidWdzXG4gICAgICAgIH1cbiAgICB9KCkpIHsvL0lFIDYvN1xuICAgICAgICB2YXIgYXJyYXlfc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBkZWxldGVDb3VudCkge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlfc3BsaWNlLmFwcGx5KHRoaXMsIFtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPT09IHZvaWQgMCA/IDAgOiBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPT09IHZvaWQgMCA/ICh0aGlzLmxlbmd0aCAtIHN0YXJ0KSA6IGRlbGV0ZUNvdW50XG4gICAgICAgICAgICAgICAgXS5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9IGVsc2Ugey8vSUU4XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbihwb3MsIHJlbW92ZUNvdW50KXtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChwb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBvcyA+IGxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgcG9zID0gbGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgcG9zID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zIDwgMCkge1xuICAgICAgICAgICAgICAgIHBvcyA9IE1hdGgubWF4KGxlbmd0aCArIHBvcywgMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghKHBvcytyZW1vdmVDb3VudCA8IGxlbmd0aCkpXG4gICAgICAgICAgICAgICAgcmVtb3ZlQ291bnQgPSBsZW5ndGggLSBwb3M7XG5cbiAgICAgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5zbGljZShwb3MsIHBvcytyZW1vdmVDb3VudCk7XG4gICAgICAgICAgICB2YXIgaW5zZXJ0ID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgdmFyIGFkZCA9IGluc2VydC5sZW5ndGg7ICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAocG9zID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWRkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaC5hcHBseSh0aGlzLCBpbnNlcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZSA9IE1hdGgubWluKHJlbW92ZUNvdW50LCBsZW5ndGggLSBwb3MpO1xuICAgICAgICAgICAgICAgIHZhciB0YWlsT2xkUG9zID0gcG9zICsgcmVtb3ZlO1xuICAgICAgICAgICAgICAgIHZhciB0YWlsTmV3UG9zID0gdGFpbE9sZFBvcyArIGFkZCAtIHJlbW92ZTtcbiAgICAgICAgICAgICAgICB2YXIgdGFpbENvdW50ID0gbGVuZ3RoIC0gdGFpbE9sZFBvcztcbiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoQWZ0ZXJSZW1vdmUgPSBsZW5ndGggLSByZW1vdmU7XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbE5ld1BvcyA8IHRhaWxPbGRQb3MpIHsgLy8gY2FzZSBBXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFpbENvdW50OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbdGFpbE5ld1BvcytpXSA9IHRoaXNbdGFpbE9sZFBvcytpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFpbE5ld1BvcyA+IHRhaWxPbGRQb3MpIHsgLy8gY2FzZSBCXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHRhaWxDb3VudDsgaS0tOyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbdGFpbE5ld1BvcytpXSA9IHRoaXNbdGFpbE9sZFBvcytpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gZWxzZSwgYWRkID09IHJlbW92ZSAobm90aGluZyB0byBkbylcblxuICAgICAgICAgICAgICAgIGlmIChhZGQgJiYgcG9zID09PSBsZW5ndGhBZnRlclJlbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aEFmdGVyUmVtb3ZlOyAvLyB0cnVuY2F0ZSBhcnJheVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2guYXBwbHkodGhpcywgaW5zZXJ0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aEFmdGVyUmVtb3ZlICsgYWRkOyAvLyByZXNlcnZlcyBzcGFjZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYWRkOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbcG9zK2ldID0gaW5zZXJ0W2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgICAgIH07XG4gICAgfVxufVxuaWYgKCFBcnJheS5pc0FycmF5KSB7XG4gICAgQXJyYXkuaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcob2JqKSA9PSBcIltvYmplY3QgQXJyYXldXCI7XG4gICAgfTtcbn1cbnZhciBib3hlZFN0cmluZyA9IE9iamVjdChcImFcIiksXG4gICAgc3BsaXRTdHJpbmcgPSBib3hlZFN0cmluZ1swXSAhPSBcImFcIiB8fCAhKDAgaW4gYm94ZWRTdHJpbmcpO1xuXG5pZiAoIUFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZ1biAvKiwgdGhpc3AqLykge1xuICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksXG4gICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09IFwiW29iamVjdCBTdHJpbmddXCIgP1xuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoXCJcIikgOlxuICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdLFxuICAgICAgICAgICAgaSA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7XG4gICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSBcIltvYmplY3QgRnVuY3Rpb25dXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlXG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoKytpIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7XG4gICAgICAgICAgICAgICAgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuaWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIG1hcChmdW4gLyosIHRoaXNwKi8pIHtcbiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLFxuICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSBcIltvYmplY3QgU3RyaW5nXVwiID9cbiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KFwiXCIpIDpcbiAgICAgICAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9IFwiW29iamVjdCBGdW5jdGlvbl1cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpXG4gICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xufVxuaWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNwICovKSB7XG4gICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSxcbiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gXCJbb2JqZWN0IFN0cmluZ11cIiA/XG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpdChcIlwiKSA6XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLFxuICAgICAgICAgICAgcmVzdWx0ID0gW10sXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdO1xuICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZltpXTtcbiAgICAgICAgICAgICAgICBpZiAoZnVuLmNhbGwodGhpc3AsIHZhbHVlLCBpLCBvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xufVxuaWYgKCFBcnJheS5wcm90b3R5cGUuZXZlcnkpIHtcbiAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgPSBmdW5jdGlvbiBldmVyeShmdW4gLyosIHRoaXNwICovKSB7XG4gICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSxcbiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gXCJbb2JqZWN0IFN0cmluZ11cIiA/XG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpdChcIlwiKSA6XG4gICAgICAgICAgICAgICAgb2JqZWN0LFxuICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9IFwiW29iamVjdCBGdW5jdGlvbl1cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgIWZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG59XG5pZiAoIUFycmF5LnByb3RvdHlwZS5zb21lKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLnNvbWUgPSBmdW5jdGlvbiBzb21lKGZ1biAvKiwgdGhpc3AgKi8pIHtcbiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLFxuICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSBcIltvYmplY3QgU3RyaW5nXVwiID9cbiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KFwiXCIpIDpcbiAgICAgICAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdO1xuICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xufVxuaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZSA9IGZ1bmN0aW9uIHJlZHVjZShmdW4gLyosIGluaXRpYWwqLykge1xuICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksXG4gICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09IFwiW29iamVjdCBTdHJpbmddXCIgP1xuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoXCJcIikgOlxuICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwO1xuICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWVcIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGZbaSsrXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgrK2kgPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xufVxuaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQpIHtcbiAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiByZWR1Y2VSaWdodChmdW4gLyosIGluaXRpYWwqLykge1xuICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksXG4gICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09IFwiW29iamVjdCBTdHJpbmddXCIgP1xuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoXCJcIikgOlxuICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwO1xuICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHQsIGkgPSBsZW5ndGggLSAxO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2ktLV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoLS1pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKGkgaW4gdGhpcykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChpLS0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbn1cbmlmICghQXJyYXkucHJvdG90eXBlLmluZGV4T2YgfHwgKFswLCAxXS5pbmRleE9mKDEsIDIpICE9IC0xKSkge1xuICAgIEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLyApIHtcbiAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gXCJbb2JqZWN0IFN0cmluZ11cIiA/XG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpdChcIlwiKSA6XG4gICAgICAgICAgICAgICAgdG9PYmplY3QodGhpcyksXG4gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDtcblxuICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGkgPSB0b0ludGVnZXIoYXJndW1lbnRzWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBpID0gaSA+PSAwID8gaSA6IE1hdGgubWF4KDAsIGxlbmd0aCArIGkpO1xuICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNlbGZbaV0gPT09IHNvdWdodCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9O1xufVxuaWYgKCFBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgfHwgKFswLCAxXS5sYXN0SW5kZXhPZigwLCAtMykgIT0gLTEpKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc291Z2h0IC8qLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gXCJbb2JqZWN0IFN0cmluZ11cIiA/XG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpdChcIlwiKSA6XG4gICAgICAgICAgICAgICAgdG9PYmplY3QodGhpcyksXG4gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDtcblxuICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpID0gbGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBpID0gTWF0aC5taW4oaSwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICAgICAgICB9XG4gICAgICAgIGkgPSBpID49IDAgPyBpIDogbGVuZ3RoIC0gTWF0aC5hYnMoaSk7XG4gICAgICAgIGZvciAoOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzb3VnaHQgPT09IHNlbGZbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfTtcbn1cbmlmICghT2JqZWN0LmdldFByb3RvdHlwZU9mKSB7XG4gICAgT2JqZWN0LmdldFByb3RvdHlwZU9mID0gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBvYmplY3QuX19wcm90b19fIHx8IChcbiAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3RvciA/XG4gICAgICAgICAgICBvYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlIDpcbiAgICAgICAgICAgIHByb3RvdHlwZU9mT2JqZWN0XG4gICAgICAgICk7XG4gICAgfTtcbn1cbmlmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgIHZhciBFUlJfTk9OX09CSkVDVCA9IFwiT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBjYWxsZWQgb24gYSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgXCJub24tb2JqZWN0OiBcIjtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iamVjdCAhPSBcImZ1bmN0aW9uXCIpIHx8IG9iamVjdCA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1QgKyBvYmplY3QpO1xuICAgICAgICBpZiAoIW93bnMob2JqZWN0LCBwcm9wZXJ0eSkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdmFyIGRlc2NyaXB0b3IsIGdldHRlciwgc2V0dGVyO1xuICAgICAgICBkZXNjcmlwdG9yID0gIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH07XG4gICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycykge1xuICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187XG4gICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7XG5cbiAgICAgICAgICAgIHZhciBnZXR0ZXIgPSBsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICB2YXIgc2V0dGVyID0gbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcblxuICAgICAgICAgICAgaWYgKGdldHRlciB8fCBzZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyKSBkZXNjcmlwdG9yLmdldCA9IGdldHRlcjtcbiAgICAgICAgICAgICAgICBpZiAoc2V0dGVyKSBkZXNjcmlwdG9yLnNldCA9IHNldHRlcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfTtcbn1cbmlmICghT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpO1xuICAgIH07XG59XG5pZiAoIU9iamVjdC5jcmVhdGUpIHtcbiAgICB2YXIgY3JlYXRlRW1wdHk7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuX19wcm90b19fID09PSBudWxsKSB7XG4gICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgXCJfX3Byb3RvX19cIjogbnVsbCB9O1xuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVtcHR5ID0ge307XG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGVtcHR5KVxuICAgICAgICAgICAgICAgIGVtcHR5W2ldID0gbnVsbDtcbiAgICAgICAgICAgIGVtcHR5LmNvbnN0cnVjdG9yID1cbiAgICAgICAgICAgIGVtcHR5Lmhhc093blByb3BlcnR5ID1cbiAgICAgICAgICAgIGVtcHR5LnByb3BlcnR5SXNFbnVtZXJhYmxlID1cbiAgICAgICAgICAgIGVtcHR5LmlzUHJvdG90eXBlT2YgPVxuICAgICAgICAgICAgZW1wdHkudG9Mb2NhbGVTdHJpbmcgPVxuICAgICAgICAgICAgZW1wdHkudG9TdHJpbmcgPVxuICAgICAgICAgICAgZW1wdHkudmFsdWVPZiA9XG4gICAgICAgICAgICBlbXB0eS5fX3Byb3RvX18gPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgT2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgdmFyIG9iamVjdDtcbiAgICAgICAgaWYgKHByb3RvdHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgb2JqZWN0ID0gY3JlYXRlRW1wdHkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInR5cGVvZiBwcm90b3R5cGVbXCIrKHR5cGVvZiBwcm90b3R5cGUpK1wiXSAhPSAnb2JqZWN0J1wiKTtcbiAgICAgICAgICAgIHZhciBUeXBlID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBUeXBlLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICAgICAgICAgIG9iamVjdCA9IG5ldyBUeXBlKCk7XG4gICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzICE9PSB2b2lkIDApXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpO1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsob2JqZWN0KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgXCJzZW50aW5lbFwiLCB7fSk7XG4gICAgICAgIHJldHVybiBcInNlbnRpbmVsXCIgaW4gb2JqZWN0O1xuICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgIH1cbn1cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0ID0gZG9lc0RlZmluZVByb3BlcnR5V29yayh7fSk7XG4gICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbkRvbSA9IHR5cGVvZiBkb2N1bWVudCA9PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAgIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgaWYgKCFkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgfHwgIWRlZmluZVByb3BlcnR5V29ya3NPbkRvbSkge1xuICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHlGYWxsYmFjayA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbiAgICB9XG59XG5cbmlmICghT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHtcbiAgICB2YXIgRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiA9IFwiUHJvcGVydHkgZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6IFwiO1xuICAgIHZhciBFUlJfTk9OX09CSkVDVF9UQVJHRVQgPSBcIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsZWQgb24gbm9uLW9iamVjdDogXCJcbiAgICB2YXIgRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEID0gXCJnZXR0ZXJzICYgc2V0dGVycyBjYW4gbm90IGJlIGRlZmluZWQgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmVcIjtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpIHtcbiAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iamVjdCAhPSBcImZ1bmN0aW9uXCIpIHx8IG9iamVjdCA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfVEFSR0VUICsgb2JqZWN0KTtcbiAgICAgICAgaWYgKCh0eXBlb2YgZGVzY3JpcHRvciAhPSBcIm9iamVjdFwiICYmIHR5cGVvZiBkZXNjcmlwdG9yICE9IFwiZnVuY3Rpb25cIikgfHwgZGVzY3JpcHRvciA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiArIGRlc2NyaXB0b3IpO1xuICAgICAgICBpZiAoZGVmaW5lUHJvcGVydHlGYWxsYmFjaykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlGYWxsYmFjay5jYWxsKE9iamVjdCwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCBcInZhbHVlXCIpKSB7XG5cbiAgICAgICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycyAmJiAobG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cFNldHRlcihvYmplY3QsIHByb3BlcnR5KSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187XG4gICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0O1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFzdXBwb3J0c0FjY2Vzc29ycylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCk7XG4gICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCBcImdldFwiKSlcbiAgICAgICAgICAgICAgICBkZWZpbmVHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvci5nZXQpO1xuICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgXCJzZXRcIikpXG4gICAgICAgICAgICAgICAgZGVmaW5lU2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3Iuc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfTtcbn1cbmlmICghT2JqZWN0LmRlZmluZVByb3BlcnRpZXMpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChvd25zKHByb3BlcnRpZXMsIHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgcHJvcGVydGllc1twcm9wZXJ0eV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfTtcbn1cbmlmICghT2JqZWN0LnNlYWwpIHtcbiAgICBPYmplY3Quc2VhbCA9IGZ1bmN0aW9uIHNlYWwob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfTtcbn1cbmlmICghT2JqZWN0LmZyZWV6ZSkge1xuICAgIE9iamVjdC5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfTtcbn1cbnRyeSB7XG4gICAgT2JqZWN0LmZyZWV6ZShmdW5jdGlvbiAoKSB7fSk7XG59IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICBPYmplY3QuZnJlZXplID0gKGZ1bmN0aW9uIGZyZWV6ZShmcmVlemVPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShvYmplY3QpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmcmVlemVPYmplY3Qob2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KShPYmplY3QuZnJlZXplKTtcbn1cbmlmICghT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7XG4gICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID0gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfTtcbn1cbmlmICghT2JqZWN0LmlzU2VhbGVkKSB7XG4gICAgT2JqZWN0LmlzU2VhbGVkID0gZnVuY3Rpb24gaXNTZWFsZWQob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xufVxuaWYgKCFPYmplY3QuaXNGcm96ZW4pIHtcbiAgICBPYmplY3QuaXNGcm96ZW4gPSBmdW5jdGlvbiBpc0Zyb3plbihvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG59XG5pZiAoIU9iamVjdC5pc0V4dGVuc2libGUpIHtcbiAgICBPYmplY3QuaXNFeHRlbnNpYmxlID0gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKG9iamVjdCkge1xuICAgICAgICBpZiAoT2JqZWN0KG9iamVjdCkgPT09IG9iamVjdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9ICcnO1xuICAgICAgICB3aGlsZSAob3ducyhvYmplY3QsIG5hbWUpKSB7XG4gICAgICAgICAgICBuYW1lICs9ICc/JztcbiAgICAgICAgfVxuICAgICAgICBvYmplY3RbbmFtZV0gPSB0cnVlO1xuICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSBvd25zKG9iamVjdCwgbmFtZSk7XG4gICAgICAgIGRlbGV0ZSBvYmplY3RbbmFtZV07XG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9O1xufVxuaWYgKCFPYmplY3Qua2V5cykge1xuICAgIHZhciBoYXNEb250RW51bUJ1ZyA9IHRydWUsXG4gICAgICAgIGRvbnRFbnVtcyA9IFtcbiAgICAgICAgICAgIFwidG9TdHJpbmdcIixcbiAgICAgICAgICAgIFwidG9Mb2NhbGVTdHJpbmdcIixcbiAgICAgICAgICAgIFwidmFsdWVPZlwiLFxuICAgICAgICAgICAgXCJoYXNPd25Qcm9wZXJ0eVwiLFxuICAgICAgICAgICAgXCJpc1Byb3RvdHlwZU9mXCIsXG4gICAgICAgICAgICBcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsXG4gICAgICAgICAgICBcImNvbnN0cnVjdG9yXCJcbiAgICAgICAgXSxcbiAgICAgICAgZG9udEVudW1zTGVuZ3RoID0gZG9udEVudW1zLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGtleSBpbiB7XCJ0b1N0cmluZ1wiOiBudWxsfSkge1xuICAgICAgICBoYXNEb250RW51bUJ1ZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAodHlwZW9mIG9iamVjdCAhPSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmplY3QgIT0gXCJmdW5jdGlvblwiKSB8fFxuICAgICAgICAgICAgb2JqZWN0ID09PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3RcIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIga2V5cyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iamVjdCkge1xuICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBuYW1lKSkge1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNEb250RW51bUJ1Zykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZG9udEVudW1zTGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBkb250RW51bSA9IGRvbnRFbnVtc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIGRvbnRFbnVtKSkge1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9O1xuXG59XG5pZiAoIURhdGUubm93KSB7XG4gICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xufVxudmFyIHdzID0gXCJcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1wiICtcbiAgICBcIlxcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XCIgK1xuICAgIFwiXFx1MjAyOVxcdUZFRkZcIjtcbmlmICghU3RyaW5nLnByb3RvdHlwZS50cmltIHx8IHdzLnRyaW0oKSkge1xuICAgIHdzID0gXCJbXCIgKyB3cyArIFwiXVwiO1xuICAgIHZhciB0cmltQmVnaW5SZWdleHAgPSBuZXcgUmVnRXhwKFwiXlwiICsgd3MgKyB3cyArIFwiKlwiKSxcbiAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAod3MgKyB3cyArIFwiKiRcIik7XG4gICAgU3RyaW5nLnByb3RvdHlwZS50cmltID0gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwgXCJcIikucmVwbGFjZSh0cmltRW5kUmVnZXhwLCBcIlwiKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiB0b0ludGVnZXIobikge1xuICAgIG4gPSArbjtcbiAgICBpZiAobiAhPT0gbikgeyAvLyBpc05hTlxuICAgICAgICBuID0gMDtcbiAgICB9IGVsc2UgaWYgKG4gIT09IDAgJiYgbiAhPT0gKDEvMCkgJiYgbiAhPT0gLSgxLzApKSB7XG4gICAgICAgIG4gPSAobiA+IDAgfHwgLTEpICogTWF0aC5mbG9vcihNYXRoLmFicyhuKSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xufVxuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShpbnB1dCkge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIGlucHV0O1xuICAgIHJldHVybiAoXG4gICAgICAgIGlucHV0ID09PSBudWxsIHx8XG4gICAgICAgIHR5cGUgPT09IFwidW5kZWZpbmVkXCIgfHxcbiAgICAgICAgdHlwZSA9PT0gXCJib29sZWFuXCIgfHxcbiAgICAgICAgdHlwZSA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICB0eXBlID09PSBcInN0cmluZ1wiXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gdG9QcmltaXRpdmUoaW5wdXQpIHtcbiAgICB2YXIgdmFsLCB2YWx1ZU9mLCB0b1N0cmluZztcbiAgICBpZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgdmFsdWVPZiA9IGlucHV0LnZhbHVlT2Y7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZU9mID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdmFsID0gdmFsdWVPZi5jYWxsKGlucHV0KTtcbiAgICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9TdHJpbmcgPSBpbnB1dC50b1N0cmluZztcbiAgICBpZiAodHlwZW9mIHRvU3RyaW5nID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdmFsID0gdG9TdHJpbmcuY2FsbChpbnB1dCk7XG4gICAgICAgIGlmIChpc1ByaW1pdGl2ZSh2YWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbn1cbnZhciB0b09iamVjdCA9IGZ1bmN0aW9uIChvKSB7XG4gICAgaWYgKG8gPT0gbnVsbCkgeyAvLyB0aGlzIG1hdGNoZXMgYm90aCBudWxsIGFuZCB1bmRlZmluZWRcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbid0IGNvbnZlcnQgXCIrbytcIiB0byBvYmplY3RcIik7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qobyk7XG59O1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9saWIvZml4b2xkYnJvd3NlcnNcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvcmVnZXhwXCIsXCJhY2UvbGliL2VzNS1zaGltXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuYWNlcXVpcmUoXCIuL3JlZ2V4cFwiKTtcbmFjZXF1aXJlKFwiLi9lczUtc2hpbVwiKTtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGliL2RvbVwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBYSFRNTF9OUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5leHBvcnRzLmdldERvY3VtZW50SGVhZCA9IGZ1bmN0aW9uKGRvYykge1xuICAgIGlmICghZG9jKVxuICAgICAgICBkb2MgPSBkb2N1bWVudDtcbiAgICByZXR1cm4gZG9jLmhlYWQgfHwgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xufTtcblxuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24odGFnLCBucykge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgP1xuICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMgfHwgWEhUTUxfTlMsIHRhZykgOlxuICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG59O1xuXG5leHBvcnRzLmhhc0Nzc0NsYXNzID0gZnVuY3Rpb24oZWwsIG5hbWUpIHtcbiAgICB2YXIgY2xhc3NlcyA9IChlbC5jbGFzc05hbWUgKyBcIlwiKS5zcGxpdCgvXFxzKy9nKTtcbiAgICByZXR1cm4gY2xhc3Nlcy5pbmRleE9mKG5hbWUpICE9PSAtMTtcbn07XG5leHBvcnRzLmFkZENzc0NsYXNzID0gZnVuY3Rpb24oZWwsIG5hbWUpIHtcbiAgICBpZiAoIWV4cG9ydHMuaGFzQ3NzQ2xhc3MoZWwsIG5hbWUpKSB7XG4gICAgICAgIGVsLmNsYXNzTmFtZSArPSBcIiBcIiArIG5hbWU7XG4gICAgfVxufTtcbmV4cG9ydHMucmVtb3ZlQ3NzQ2xhc3MgPSBmdW5jdGlvbihlbCwgbmFtZSkge1xuICAgIHZhciBjbGFzc2VzID0gZWwuY2xhc3NOYW1lLnNwbGl0KC9cXHMrL2cpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNsYXNzZXMuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjbGFzc2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIGVsLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbihcIiBcIik7XG59O1xuXG5leHBvcnRzLnRvZ2dsZUNzc0NsYXNzID0gZnVuY3Rpb24oZWwsIG5hbWUpIHtcbiAgICB2YXIgY2xhc3NlcyA9IGVsLmNsYXNzTmFtZS5zcGxpdCgvXFxzKy9nKSwgYWRkID0gdHJ1ZTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjbGFzc2VzLmluZGV4T2YobmFtZSk7XG4gICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgYWRkID0gZmFsc2U7XG4gICAgICAgIGNsYXNzZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgaWYgKGFkZClcbiAgICAgICAgY2xhc3Nlcy5wdXNoKG5hbWUpO1xuXG4gICAgZWwuY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICByZXR1cm4gYWRkO1xufTtcbmV4cG9ydHMuc2V0Q3NzQ2xhc3MgPSBmdW5jdGlvbihub2RlLCBjbGFzc05hbWUsIGluY2x1ZGUpIHtcbiAgICBpZiAoaW5jbHVkZSkge1xuICAgICAgICBleHBvcnRzLmFkZENzc0NsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXhwb3J0cy5yZW1vdmVDc3NDbGFzcyhub2RlLCBjbGFzc05hbWUpO1xuICAgIH1cbn07XG5cbmV4cG9ydHMuaGFzQ3NzU3RyaW5nID0gZnVuY3Rpb24oaWQsIGRvYykge1xuICAgIHZhciBpbmRleCA9IDAsIHNoZWV0cztcbiAgICBkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG5cbiAgICBpZiAoZG9jLmNyZWF0ZVN0eWxlU2hlZXQgJiYgKHNoZWV0cyA9IGRvYy5zdHlsZVNoZWV0cykpIHtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgc2hlZXRzLmxlbmd0aClcbiAgICAgICAgICAgIGlmIChzaGVldHNbaW5kZXgrK10ub3duaW5nRWxlbWVudC5pZCA9PT0gaWQpIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoKHNoZWV0cyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInN0eWxlXCIpKSkge1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBzaGVldHMubGVuZ3RoKVxuICAgICAgICAgICAgaWYgKHNoZWV0c1tpbmRleCsrXS5pZCA9PT0gaWQpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydHMuaW1wb3J0Q3NzU3RyaW5nID0gZnVuY3Rpb24gaW1wb3J0Q3NzU3RyaW5nKGNzc1RleHQsIGlkLCBkb2MpIHtcbiAgICBkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG4gICAgaWYgKGlkICYmIGV4cG9ydHMuaGFzQ3NzU3RyaW5nKGlkLCBkb2MpKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBcbiAgICB2YXIgc3R5bGU7XG4gICAgXG4gICAgaWYgKGlkKVxuICAgICAgICBjc3NUZXh0ICs9IFwiXFxuLyojIHNvdXJjZVVSTD1hY2UvY3NzL1wiICsgaWQgKyBcIiAqL1wiO1xuICAgIFxuICAgIGlmIChkb2MuY3JlYXRlU3R5bGVTaGVldCkge1xuICAgICAgICBzdHlsZSA9IGRvYy5jcmVhdGVTdHlsZVNoZWV0KCk7XG4gICAgICAgIHN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xuICAgICAgICBpZiAoaWQpXG4gICAgICAgICAgICBzdHlsZS5vd25pbmdFbGVtZW50LmlkID0gaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUgPSBleHBvcnRzLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKGNzc1RleHQpKTtcbiAgICAgICAgaWYgKGlkKVxuICAgICAgICAgICAgc3R5bGUuaWQgPSBpZDtcblxuICAgICAgICBleHBvcnRzLmdldERvY3VtZW50SGVhZChkb2MpLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG59O1xuXG5leHBvcnRzLmltcG9ydENzc1N0eWxzaGVldCA9IGZ1bmN0aW9uKHVyaSwgZG9jKSB7XG4gICAgaWYgKGRvYy5jcmVhdGVTdHlsZVNoZWV0KSB7XG4gICAgICAgIGRvYy5jcmVhdGVTdHlsZVNoZWV0KHVyaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGxpbmsgPSBleHBvcnRzLmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICAgIGxpbmsuaHJlZiA9IHVyaTtcblxuICAgICAgICBleHBvcnRzLmdldERvY3VtZW50SGVhZChkb2MpLmFwcGVuZENoaWxkKGxpbmspO1xuICAgIH1cbn07XG5cbmV4cG9ydHMuZ2V0SW5uZXJXaWR0aCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBwYXJzZUludChleHBvcnRzLmNvbXB1dGVkU3R5bGUoZWxlbWVudCwgXCJwYWRkaW5nTGVmdFwiKSwgMTApICtcbiAgICAgICAgcGFyc2VJbnQoZXhwb3J0cy5jb21wdXRlZFN0eWxlKGVsZW1lbnQsIFwicGFkZGluZ1JpZ2h0XCIpLCAxMCkgKyBcbiAgICAgICAgZWxlbWVudC5jbGllbnRXaWR0aFxuICAgICk7XG59O1xuXG5leHBvcnRzLmdldElubmVySGVpZ2h0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIHBhcnNlSW50KGV4cG9ydHMuY29tcHV0ZWRTdHlsZShlbGVtZW50LCBcInBhZGRpbmdUb3BcIiksIDEwKSArXG4gICAgICAgIHBhcnNlSW50KGV4cG9ydHMuY29tcHV0ZWRTdHlsZShlbGVtZW50LCBcInBhZGRpbmdCb3R0b21cIiksIDEwKSArXG4gICAgICAgIGVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgKTtcbn07XG5cbmV4cG9ydHMuc2Nyb2xsYmFyV2lkdGggPSBmdW5jdGlvbihkb2N1bWVudCkge1xuICAgIHZhciBpbm5lciA9IGV4cG9ydHMuY3JlYXRlRWxlbWVudChcImFjZV9pbm5lclwiKTtcbiAgICBpbm5lci5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIGlubmVyLnN0eWxlLm1pbldpZHRoID0gXCIwcHhcIjtcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSBcIjIwMHB4XCI7XG4gICAgaW5uZXIuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuICAgIHZhciBvdXRlciA9IGV4cG9ydHMuY3JlYXRlRWxlbWVudChcImFjZV9vdXRlclwiKTtcbiAgICB2YXIgc3R5bGUgPSBvdXRlci5zdHlsZTtcblxuICAgIHN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgIHN0eWxlLmxlZnQgPSBcIi0xMDAwMHB4XCI7XG4gICAgc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuICAgIHN0eWxlLndpZHRoID0gXCIyMDBweFwiO1xuICAgIHN0eWxlLm1pbldpZHRoID0gXCIwcHhcIjtcbiAgICBzdHlsZS5oZWlnaHQgPSBcIjE1MHB4XCI7XG4gICAgc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuICAgIG91dGVyLmFwcGVuZENoaWxkKGlubmVyKTtcblxuICAgIHZhciBib2R5ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGJvZHkuYXBwZW5kQ2hpbGQob3V0ZXIpO1xuXG4gICAgdmFyIG5vU2Nyb2xsYmFyID0gaW5uZXIub2Zmc2V0V2lkdGg7XG5cbiAgICBzdHlsZS5vdmVyZmxvdyA9IFwic2Nyb2xsXCI7XG4gICAgdmFyIHdpdGhTY3JvbGxiYXIgPSBpbm5lci5vZmZzZXRXaWR0aDtcblxuICAgIGlmIChub1Njcm9sbGJhciA9PSB3aXRoU2Nyb2xsYmFyKSB7XG4gICAgICAgIHdpdGhTY3JvbGxiYXIgPSBvdXRlci5jbGllbnRXaWR0aDtcbiAgICB9XG5cbiAgICBib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcblxuICAgIHJldHVybiBub1Njcm9sbGJhci13aXRoU2Nyb2xsYmFyO1xufTtcblxuaWYgKHR5cGVvZiBkb2N1bWVudCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgZXhwb3J0cy5pbXBvcnRDc3NTdHJpbmcgPSBmdW5jdGlvbigpIHt9O1xuICAgIHJldHVybjtcbn1cblxuaWYgKHdpbmRvdy5wYWdlWU9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXhwb3J0cy5nZXRQYWdlU2Nyb2xsVG9wID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgfTtcblxuICAgIGV4cG9ydHMuZ2V0UGFnZVNjcm9sbExlZnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldDtcbiAgICB9O1xufVxuZWxzZSB7XG4gICAgZXhwb3J0cy5nZXRQYWdlU2Nyb2xsVG9wID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDtcbiAgICB9O1xuXG4gICAgZXhwb3J0cy5nZXRQYWdlU2Nyb2xsTGVmdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0O1xuICAgIH07XG59XG5cbmlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSlcbiAgICBleHBvcnRzLmNvbXB1dGVkU3R5bGUgPSBmdW5jdGlvbihlbGVtZW50LCBzdHlsZSkge1xuICAgICAgICBpZiAoc3R5bGUpXG4gICAgICAgICAgICByZXR1cm4gKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIFwiXCIpIHx8IHt9KVtzdHlsZV0gfHwgXCJcIjtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIFwiXCIpIHx8IHt9O1xuICAgIH07XG5lbHNlXG4gICAgZXhwb3J0cy5jb21wdXRlZFN0eWxlID0gZnVuY3Rpb24oZWxlbWVudCwgc3R5bGUpIHtcbiAgICAgICAgaWYgKHN0eWxlKVxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY3VycmVudFN0eWxlW3N0eWxlXTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY3VycmVudFN0eWxlO1xuICAgIH07XG5leHBvcnRzLnNldElubmVySHRtbCA9IGZ1bmN0aW9uKGVsLCBpbm5lckh0bWwpIHtcbiAgICB2YXIgZWxlbWVudCA9IGVsLmNsb25lTm9kZShmYWxzZSk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gaW5uZXJIdG1sO1xuICAgIGVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGVsZW1lbnQsIGVsKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbn07XG5cbmlmIChcInRleHRDb250ZW50XCIgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgZXhwb3J0cy5zZXRJbm5lclRleHQgPSBmdW5jdGlvbihlbCwgaW5uZXJUZXh0KSB7XG4gICAgICAgIGVsLnRleHRDb250ZW50ID0gaW5uZXJUZXh0O1xuICAgIH07XG5cbiAgICBleHBvcnRzLmdldElubmVyVGV4dCA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgIHJldHVybiBlbC50ZXh0Q29udGVudDtcbiAgICB9O1xufVxuZWxzZSB7XG4gICAgZXhwb3J0cy5zZXRJbm5lclRleHQgPSBmdW5jdGlvbihlbCwgaW5uZXJUZXh0KSB7XG4gICAgICAgIGVsLmlubmVyVGV4dCA9IGlubmVyVGV4dDtcbiAgICB9O1xuXG4gICAgZXhwb3J0cy5nZXRJbm5lclRleHQgPSBmdW5jdGlvbihlbCkge1xuICAgICAgICByZXR1cm4gZWwuaW5uZXJUZXh0O1xuICAgIH07XG59XG5cbmV4cG9ydHMuZ2V0UGFyZW50V2luZG93ID0gZnVuY3Rpb24oZG9jdW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgZG9jdW1lbnQucGFyZW50V2luZG93O1xufTtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGliL29vcFwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBmdW5jdGlvbihjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvcjtcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbmV4cG9ydHMubWl4aW4gPSBmdW5jdGlvbihvYmosIG1peGluKSB7XG4gICAgZm9yICh2YXIga2V5IGluIG1peGluKSB7XG4gICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn07XG5cbmV4cG9ydHMuaW1wbGVtZW50ID0gZnVuY3Rpb24ocHJvdG8sIG1peGluKSB7XG4gICAgZXhwb3J0cy5taXhpbihwcm90bywgbWl4aW4pO1xufTtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGliL2tleXNcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvZml4b2xkYnJvd3NlcnNcIixcImFjZS9saWIvb29wXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuYWNlcXVpcmUoXCIuL2ZpeG9sZGJyb3dzZXJzXCIpO1xuXG52YXIgb29wID0gYWNlcXVpcmUoXCIuL29vcFwiKTtcbnZhciBLZXlzID0gKGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXQgPSB7XG4gICAgICAgIE1PRElGSUVSX0tFWVM6IHtcbiAgICAgICAgICAgIDE2OiAnU2hpZnQnLCAxNzogJ0N0cmwnLCAxODogJ0FsdCcsIDIyNDogJ01ldGEnXG4gICAgICAgIH0sXG5cbiAgICAgICAgS0VZX01PRFM6IHtcbiAgICAgICAgICAgIFwiY3RybFwiOiAxLCBcImFsdFwiOiAyLCBcIm9wdGlvblwiIDogMiwgXCJzaGlmdFwiOiA0LFxuICAgICAgICAgICAgXCJzdXBlclwiOiA4LCBcIm1ldGFcIjogOCwgXCJjb21tYW5kXCI6IDgsIFwiY21kXCI6IDhcbiAgICAgICAgfSxcblxuICAgICAgICBGVU5DVElPTl9LRVlTIDoge1xuICAgICAgICAgICAgOCAgOiBcIkJhY2tzcGFjZVwiLFxuICAgICAgICAgICAgOSAgOiBcIlRhYlwiLFxuICAgICAgICAgICAgMTMgOiBcIlJldHVyblwiLFxuICAgICAgICAgICAgMTkgOiBcIlBhdXNlXCIsXG4gICAgICAgICAgICAyNyA6IFwiRXNjXCIsXG4gICAgICAgICAgICAzMiA6IFwiU3BhY2VcIixcbiAgICAgICAgICAgIDMzIDogXCJQYWdlVXBcIixcbiAgICAgICAgICAgIDM0IDogXCJQYWdlRG93blwiLFxuICAgICAgICAgICAgMzUgOiBcIkVuZFwiLFxuICAgICAgICAgICAgMzYgOiBcIkhvbWVcIixcbiAgICAgICAgICAgIDM3IDogXCJMZWZ0XCIsXG4gICAgICAgICAgICAzOCA6IFwiVXBcIixcbiAgICAgICAgICAgIDM5IDogXCJSaWdodFwiLFxuICAgICAgICAgICAgNDAgOiBcIkRvd25cIixcbiAgICAgICAgICAgIDQ0IDogXCJQcmludFwiLFxuICAgICAgICAgICAgNDUgOiBcIkluc2VydFwiLFxuICAgICAgICAgICAgNDYgOiBcIkRlbGV0ZVwiLFxuICAgICAgICAgICAgOTYgOiBcIk51bXBhZDBcIixcbiAgICAgICAgICAgIDk3IDogXCJOdW1wYWQxXCIsXG4gICAgICAgICAgICA5OCA6IFwiTnVtcGFkMlwiLFxuICAgICAgICAgICAgOTkgOiBcIk51bXBhZDNcIixcbiAgICAgICAgICAgIDEwMDogXCJOdW1wYWQ0XCIsXG4gICAgICAgICAgICAxMDE6IFwiTnVtcGFkNVwiLFxuICAgICAgICAgICAgMTAyOiBcIk51bXBhZDZcIixcbiAgICAgICAgICAgIDEwMzogXCJOdW1wYWQ3XCIsXG4gICAgICAgICAgICAxMDQ6IFwiTnVtcGFkOFwiLFxuICAgICAgICAgICAgMTA1OiBcIk51bXBhZDlcIixcbiAgICAgICAgICAgICctMTMnOiBcIk51bXBhZEVudGVyXCIsXG4gICAgICAgICAgICAxMTI6IFwiRjFcIixcbiAgICAgICAgICAgIDExMzogXCJGMlwiLFxuICAgICAgICAgICAgMTE0OiBcIkYzXCIsXG4gICAgICAgICAgICAxMTU6IFwiRjRcIixcbiAgICAgICAgICAgIDExNjogXCJGNVwiLFxuICAgICAgICAgICAgMTE3OiBcIkY2XCIsXG4gICAgICAgICAgICAxMTg6IFwiRjdcIixcbiAgICAgICAgICAgIDExOTogXCJGOFwiLFxuICAgICAgICAgICAgMTIwOiBcIkY5XCIsXG4gICAgICAgICAgICAxMjE6IFwiRjEwXCIsXG4gICAgICAgICAgICAxMjI6IFwiRjExXCIsXG4gICAgICAgICAgICAxMjM6IFwiRjEyXCIsXG4gICAgICAgICAgICAxNDQ6IFwiTnVtbG9ja1wiLFxuICAgICAgICAgICAgMTQ1OiBcIlNjcm9sbGxvY2tcIlxuICAgICAgICB9LFxuXG4gICAgICAgIFBSSU5UQUJMRV9LRVlTOiB7XG4gICAgICAgICAgIDMyOiAnICcsICA0ODogJzAnLCAgNDk6ICcxJywgIDUwOiAnMicsICA1MTogJzMnLCAgNTI6ICc0JywgNTM6ICAnNScsXG4gICAgICAgICAgIDU0OiAnNicsICA1NTogJzcnLCAgNTY6ICc4JywgIDU3OiAnOScsICA1OTogJzsnLCAgNjE6ICc9JywgNjU6ICAnYScsXG4gICAgICAgICAgIDY2OiAnYicsICA2NzogJ2MnLCAgNjg6ICdkJywgIDY5OiAnZScsICA3MDogJ2YnLCAgNzE6ICdnJywgNzI6ICAnaCcsXG4gICAgICAgICAgIDczOiAnaScsICA3NDogJ2onLCAgNzU6ICdrJywgIDc2OiAnbCcsICA3NzogJ20nLCAgNzg6ICduJywgNzk6ICAnbycsXG4gICAgICAgICAgIDgwOiAncCcsICA4MTogJ3EnLCAgODI6ICdyJywgIDgzOiAncycsICA4NDogJ3QnLCAgODU6ICd1JywgODY6ICAndicsXG4gICAgICAgICAgIDg3OiAndycsICA4ODogJ3gnLCAgODk6ICd5JywgIDkwOiAneicsIDEwNzogJysnLCAxMDk6ICctJywgMTEwOiAnLicsXG4gICAgICAgICAgMTg2OiAnOycsIDE4NzogJz0nLCAxODg6ICcsJywgMTg5OiAnLScsIDE5MDogJy4nLCAxOTE6ICcvJywgMTkyOiAnYCcsXG4gICAgICAgICAgMjE5OiAnWycsIDIyMDogJ1xcXFwnLDIyMTogJ10nLCAyMjI6IFwiJ1wiLCAxMTE6ICcvJywgMTA2OiAnKidcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIG5hbWUsIGk7XG4gICAgZm9yIChpIGluIHJldC5GVU5DVElPTl9LRVlTKSB7XG4gICAgICAgIG5hbWUgPSByZXQuRlVOQ1RJT05fS0VZU1tpXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXRbbmFtZV0gPSBwYXJzZUludChpLCAxMCk7XG4gICAgfVxuICAgIGZvciAoaSBpbiByZXQuUFJJTlRBQkxFX0tFWVMpIHtcbiAgICAgICAgbmFtZSA9IHJldC5QUklOVEFCTEVfS0VZU1tpXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXRbbmFtZV0gPSBwYXJzZUludChpLCAxMCk7XG4gICAgfVxuICAgIG9vcC5taXhpbihyZXQsIHJldC5NT0RJRklFUl9LRVlTKTtcbiAgICBvb3AubWl4aW4ocmV0LCByZXQuUFJJTlRBQkxFX0tFWVMpO1xuICAgIG9vcC5taXhpbihyZXQsIHJldC5GVU5DVElPTl9LRVlTKTtcbiAgICByZXQuZW50ZXIgPSByZXRbXCJyZXR1cm5cIl07XG4gICAgcmV0LmVzY2FwZSA9IHJldC5lc2M7XG4gICAgcmV0LmRlbCA9IHJldFtcImRlbGV0ZVwiXTtcbiAgICByZXRbMTczXSA9ICctJztcbiAgICBcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBtb2RzID0gW1wiY21kXCIsIFwiY3RybFwiLCBcImFsdFwiLCBcInNoaWZ0XCJdO1xuICAgICAgICBmb3IgKHZhciBpID0gTWF0aC5wb3coMiwgbW9kcy5sZW5ndGgpOyBpLS07KSB7ICAgICAgICAgICAgXG4gICAgICAgICAgICByZXQuS0VZX01PRFNbaV0gPSBtb2RzLmZpbHRlcihmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgJiByZXQuS0VZX01PRFNbeF07XG4gICAgICAgICAgICB9KS5qb2luKFwiLVwiKSArIFwiLVwiO1xuICAgICAgICB9XG4gICAgfSkoKTtcblxuICAgIHJldC5LRVlfTU9EU1swXSA9IFwiXCI7XG4gICAgcmV0LktFWV9NT0RTWy0xXSA9IFwiaW5wdXQtXCI7XG5cbiAgICByZXR1cm4gcmV0O1xufSkoKTtcbm9vcC5taXhpbihleHBvcnRzLCBLZXlzKTtcblxuZXhwb3J0cy5rZXlDb2RlVG9TdHJpbmcgPSBmdW5jdGlvbihrZXlDb2RlKSB7XG4gICAgdmFyIGtleVN0cmluZyA9IEtleXNba2V5Q29kZV07XG4gICAgaWYgKHR5cGVvZiBrZXlTdHJpbmcgIT0gXCJzdHJpbmdcIilcbiAgICAgICAga2V5U3RyaW5nID0gU3RyaW5nLmZyb21DaGFyQ29kZShrZXlDb2RlKTtcbiAgICByZXR1cm4ga2V5U3RyaW5nLnRvTG93ZXJDYXNlKCk7XG59O1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9saWIvdXNlcmFnZW50XCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuT1MgPSB7XG4gICAgTElOVVg6IFwiTElOVVhcIixcbiAgICBNQUM6IFwiTUFDXCIsXG4gICAgV0lORE9XUzogXCJXSU5ET1dTXCJcbn07XG5leHBvcnRzLmdldE9TID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGV4cG9ydHMuaXNNYWMpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuT1MuTUFDO1xuICAgIH0gZWxzZSBpZiAoZXhwb3J0cy5pc0xpbnV4KSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLk9TLkxJTlVYO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLk9TLldJTkRPV1M7XG4gICAgfVxufTtcbmlmICh0eXBlb2YgbmF2aWdhdG9yICE9IFwib2JqZWN0XCIpXG4gICAgcmV0dXJuO1xuXG52YXIgb3MgPSAobmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKC9tYWN8d2lufGxpbnV4L2kpIHx8IFtcIm90aGVyXCJdKVswXS50b0xvd2VyQ2FzZSgpO1xudmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbmV4cG9ydHMuaXNXaW4gPSAob3MgPT0gXCJ3aW5cIik7XG5leHBvcnRzLmlzTWFjID0gKG9zID09IFwibWFjXCIpO1xuZXhwb3J0cy5pc0xpbnV4ID0gKG9zID09IFwibGludXhcIik7XG5leHBvcnRzLmlzSUUgPSBcbiAgICAobmF2aWdhdG9yLmFwcE5hbWUgPT0gXCJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXJcIiB8fCBuYXZpZ2F0b3IuYXBwTmFtZS5pbmRleE9mKFwiTVNBcHBIb3N0XCIpID49IDApXG4gICAgPyBwYXJzZUZsb2F0KCh1YS5tYXRjaCgvKD86TVNJRSB8VHJpZGVudFxcL1swLTldK1tcXC4wLTldKzsuKnJ2OikoWzAtOV0rW1xcLjAtOV0rKS8pfHxbXSlbMV0pXG4gICAgOiBwYXJzZUZsb2F0KCh1YS5tYXRjaCgvKD86VHJpZGVudFxcL1swLTldK1tcXC4wLTldKzsuKnJ2OikoWzAtOV0rW1xcLjAtOV0rKS8pfHxbXSlbMV0pOyAvLyBmb3IgaWVcbiAgICBcbmV4cG9ydHMuaXNPbGRJRSA9IGV4cG9ydHMuaXNJRSAmJiBleHBvcnRzLmlzSUUgPCA5O1xuZXhwb3J0cy5pc0dlY2tvID0gZXhwb3J0cy5pc01vemlsbGEgPSAod2luZG93LkNvbnRyb2xsZXJzIHx8IHdpbmRvdy5jb250cm9sbGVycykgJiYgd2luZG93Lm5hdmlnYXRvci5wcm9kdWN0ID09PSBcIkdlY2tvXCI7XG5leHBvcnRzLmlzT2xkR2Vja28gPSBleHBvcnRzLmlzR2Vja28gJiYgcGFyc2VJbnQoKHVhLm1hdGNoKC9ydjooXFxkKykvKXx8W10pWzFdLCAxMCkgPCA0O1xuZXhwb3J0cy5pc09wZXJhID0gd2luZG93Lm9wZXJhICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3aW5kb3cub3BlcmEpID09IFwiW29iamVjdCBPcGVyYV1cIjtcbmV4cG9ydHMuaXNXZWJLaXQgPSBwYXJzZUZsb2F0KHVhLnNwbGl0KFwiV2ViS2l0L1wiKVsxXSkgfHwgdW5kZWZpbmVkO1xuXG5leHBvcnRzLmlzQ2hyb21lID0gcGFyc2VGbG9hdCh1YS5zcGxpdChcIiBDaHJvbWUvXCIpWzFdKSB8fCB1bmRlZmluZWQ7XG5cbmV4cG9ydHMuaXNBSVIgPSB1YS5pbmRleE9mKFwiQWRvYmVBSVJcIikgPj0gMDtcblxuZXhwb3J0cy5pc0lQYWQgPSB1YS5pbmRleE9mKFwiaVBhZFwiKSA+PSAwO1xuXG5leHBvcnRzLmlzQ2hyb21lT1MgPSB1YS5pbmRleE9mKFwiIENyT1MgXCIpID49IDA7XG5cbmV4cG9ydHMuaXNJT1MgPSAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdCh1YSkgJiYgIXdpbmRvdy5NU1N0cmVhbTtcblxuaWYgKGV4cG9ydHMuaXNJT1MpIGV4cG9ydHMuaXNNYWMgPSB0cnVlO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9saWIvZXZlbnRcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIva2V5c1wiLFwiYWNlL2xpYi91c2VyYWdlbnRcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIga2V5cyA9IGFjZXF1aXJlKFwiLi9rZXlzXCIpO1xudmFyIHVzZXJhZ2VudCA9IGFjZXF1aXJlKFwiLi91c2VyYWdlbnRcIik7XG5cbnZhciBwcmVzc2VkS2V5cyA9IG51bGw7XG52YXIgdHMgPSAwO1xuXG5leHBvcnRzLmFkZExpc3RlbmVyID0gZnVuY3Rpb24oZWxlbSwgdHlwZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoZWxlbS5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHJldHVybiBlbGVtLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKGVsZW0uYXR0YWNoRXZlbnQpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoZWxlbSwgd2luZG93LmV2ZW50KTtcbiAgICAgICAgfTtcbiAgICAgICAgY2FsbGJhY2suX3dyYXBwZXIgPSB3cmFwcGVyO1xuICAgICAgICBlbGVtLmF0dGFjaEV2ZW50KFwib25cIiArIHR5cGUsIHdyYXBwZXIpO1xuICAgIH1cbn07XG5cbmV4cG9ydHMucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbihlbGVtLCB0eXBlLCBjYWxsYmFjaykge1xuICAgIGlmIChlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgcmV0dXJuIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoZWxlbS5kZXRhY2hFdmVudCkge1xuICAgICAgICBlbGVtLmRldGFjaEV2ZW50KFwib25cIiArIHR5cGUsIGNhbGxiYWNrLl93cmFwcGVyIHx8IGNhbGxiYWNrKTtcbiAgICB9XG59O1xuZXhwb3J0cy5zdG9wRXZlbnQgPSBmdW5jdGlvbihlKSB7XG4gICAgZXhwb3J0cy5zdG9wUHJvcGFnYXRpb24oZSk7XG4gICAgZXhwb3J0cy5wcmV2ZW50RGVmYXVsdChlKTtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnRzLnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZWxzZVxuICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7XG59O1xuXG5leHBvcnRzLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oZSkge1xuICAgIGlmIChlLnByZXZlbnREZWZhdWx0KVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZWxzZVxuICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7XG59O1xuZXhwb3J0cy5nZXRCdXR0b24gPSBmdW5jdGlvbihlKSB7XG4gICAgaWYgKGUudHlwZSA9PSBcImRibGNsaWNrXCIpXG4gICAgICAgIHJldHVybiAwO1xuICAgIGlmIChlLnR5cGUgPT0gXCJjb250ZXh0bWVudVwiIHx8ICh1c2VyYWdlbnQuaXNNYWMgJiYgKGUuY3RybEtleSAmJiAhZS5hbHRLZXkgJiYgIWUuc2hpZnRLZXkpKSlcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgcmV0dXJuIGUuYnV0dG9uO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsxOjAsIDI6MiwgNDoxfVtlLmJ1dHRvbl07XG4gICAgfVxufTtcblxuZXhwb3J0cy5jYXB0dXJlID0gZnVuY3Rpb24oZWwsIGV2ZW50SGFuZGxlciwgcmVsZWFzZUNhcHR1cmVIYW5kbGVyKSB7XG4gICAgZnVuY3Rpb24gb25Nb3VzZVVwKGUpIHtcbiAgICAgICAgZXZlbnRIYW5kbGVyICYmIGV2ZW50SGFuZGxlcihlKTtcbiAgICAgICAgcmVsZWFzZUNhcHR1cmVIYW5kbGVyICYmIHJlbGVhc2VDYXB0dXJlSGFuZGxlcihlKTtcblxuICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKGRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBldmVudEhhbmRsZXIsIHRydWUpO1xuICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKGRvY3VtZW50LCBcIm1vdXNldXBcIiwgb25Nb3VzZVVwLCB0cnVlKTtcbiAgICAgICAgZXhwb3J0cy5yZW1vdmVMaXN0ZW5lcihkb2N1bWVudCwgXCJkcmFnc3RhcnRcIiwgb25Nb3VzZVVwLCB0cnVlKTtcbiAgICB9XG5cbiAgICBleHBvcnRzLmFkZExpc3RlbmVyKGRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBldmVudEhhbmRsZXIsIHRydWUpO1xuICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZG9jdW1lbnQsIFwibW91c2V1cFwiLCBvbk1vdXNlVXAsIHRydWUpO1xuICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZG9jdW1lbnQsIFwiZHJhZ3N0YXJ0XCIsIG9uTW91c2VVcCwgdHJ1ZSk7XG4gICAgXG4gICAgcmV0dXJuIG9uTW91c2VVcDtcbn07XG5cbmV4cG9ydHMuYWRkVG91Y2hNb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiAoZWwsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHN0YXJ0eCwgc3RhcnR5O1xuICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsIFwidG91Y2hzdGFydFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgdG91Y2hlcyA9IGUudG91Y2hlcztcbiAgICAgICAgdmFyIHRvdWNoT2JqID0gdG91Y2hlc1swXTtcbiAgICAgICAgc3RhcnR4ID0gdG91Y2hPYmouY2xpZW50WDtcbiAgICAgICAgc3RhcnR5ID0gdG91Y2hPYmouY2xpZW50WTtcbiAgICB9KTtcbiAgICBleHBvcnRzLmFkZExpc3RlbmVyKGVsLCBcInRvdWNobW92ZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgdG91Y2hlcyA9IGUudG91Y2hlcztcbiAgICAgICAgaWYgKHRvdWNoZXMubGVuZ3RoID4gMSkgcmV0dXJuO1xuXG4gICAgICAgIHZhciB0b3VjaE9iaiA9IHRvdWNoZXNbMF07XG5cbiAgICAgICAgZS53aGVlbFggPSBzdGFydHggLSB0b3VjaE9iai5jbGllbnRYO1xuICAgICAgICBlLndoZWVsWSA9IHN0YXJ0eSAtIHRvdWNoT2JqLmNsaWVudFk7XG5cbiAgICAgICAgc3RhcnR4ID0gdG91Y2hPYmouY2xpZW50WDtcbiAgICAgICAgc3RhcnR5ID0gdG91Y2hPYmouY2xpZW50WTtcblxuICAgICAgICBjYWxsYmFjayhlKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydHMuYWRkTW91c2VXaGVlbExpc3RlbmVyID0gZnVuY3Rpb24oZWwsIGNhbGxiYWNrKSB7XG4gICAgaWYgKFwib25tb3VzZXdoZWVsXCIgaW4gZWwpIHtcbiAgICAgICAgZXhwb3J0cy5hZGRMaXN0ZW5lcihlbCwgXCJtb3VzZXdoZWVsXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHZhciBmYWN0b3IgPSA4O1xuICAgICAgICAgICAgaWYgKGUud2hlZWxEZWx0YVggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGUud2hlZWxYID0gLWUud2hlZWxEZWx0YVggLyBmYWN0b3I7XG4gICAgICAgICAgICAgICAgZS53aGVlbFkgPSAtZS53aGVlbERlbHRhWSAvIGZhY3RvcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZS53aGVlbFggPSAwO1xuICAgICAgICAgICAgICAgIGUud2hlZWxZID0gLWUud2hlZWxEZWx0YSAvIGZhY3RvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKFwib253aGVlbFwiIGluIGVsKSB7XG4gICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsIFwid2hlZWxcIiwgIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHZhciBmYWN0b3IgPSAwLjM1O1xuICAgICAgICAgICAgc3dpdGNoIChlLmRlbHRhTW9kZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgZS5ET01fREVMVEFfUElYRUw6XG4gICAgICAgICAgICAgICAgICAgIGUud2hlZWxYID0gZS5kZWx0YVggKiBmYWN0b3IgfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgZS53aGVlbFkgPSBlLmRlbHRhWSAqIGZhY3RvciB8fCAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIGUuRE9NX0RFTFRBX0xJTkU6XG4gICAgICAgICAgICAgICAgY2FzZSBlLkRPTV9ERUxUQV9QQUdFOlxuICAgICAgICAgICAgICAgICAgICBlLndoZWVsWCA9IChlLmRlbHRhWCB8fCAwKSAqIDU7XG4gICAgICAgICAgICAgICAgICAgIGUud2hlZWxZID0gKGUuZGVsdGFZIHx8IDApICogNTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBleHBvcnRzLmFkZExpc3RlbmVyKGVsLCBcIkRPTU1vdXNlU2Nyb2xsXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmF4aXMgJiYgZS5heGlzID09IGUuSE9SSVpPTlRBTF9BWElTKSB7XG4gICAgICAgICAgICAgICAgZS53aGVlbFggPSAoZS5kZXRhaWwgfHwgMCkgKiA1O1xuICAgICAgICAgICAgICAgIGUud2hlZWxZID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZS53aGVlbFggPSAwO1xuICAgICAgICAgICAgICAgIGUud2hlZWxZID0gKGUuZGV0YWlsIHx8IDApICogNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5leHBvcnRzLmFkZE11bHRpTW91c2VEb3duTGlzdGVuZXIgPSBmdW5jdGlvbihlbGVtZW50cywgdGltZW91dHMsIGV2ZW50SGFuZGxlciwgY2FsbGJhY2tOYW1lKSB7XG4gICAgdmFyIGNsaWNrcyA9IDA7XG4gICAgdmFyIHN0YXJ0WCwgc3RhcnRZLCB0aW1lcjsgXG4gICAgdmFyIGV2ZW50TmFtZXMgPSB7XG4gICAgICAgIDI6IFwiZGJsY2xpY2tcIixcbiAgICAgICAgMzogXCJ0cmlwbGVjbGlja1wiLFxuICAgICAgICA0OiBcInF1YWRjbGlja1wiXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9uTW91c2Vkb3duKGUpIHtcbiAgICAgICAgaWYgKGV4cG9ydHMuZ2V0QnV0dG9uKGUpICE9PSAwKSB7XG4gICAgICAgICAgICBjbGlja3MgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGUuZGV0YWlsID4gMSkge1xuICAgICAgICAgICAgY2xpY2tzKys7XG4gICAgICAgICAgICBpZiAoY2xpY2tzID4gNClcbiAgICAgICAgICAgICAgICBjbGlja3MgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xpY2tzID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlcmFnZW50LmlzSUUpIHtcbiAgICAgICAgICAgIHZhciBpc05ld0NsaWNrID0gTWF0aC5hYnMoZS5jbGllbnRYIC0gc3RhcnRYKSA+IDUgfHwgTWF0aC5hYnMoZS5jbGllbnRZIC0gc3RhcnRZKSA+IDU7XG4gICAgICAgICAgICBpZiAoIXRpbWVyIHx8IGlzTmV3Q2xpY2spXG4gICAgICAgICAgICAgICAgY2xpY2tzID0gMTtcbiAgICAgICAgICAgIGlmICh0aW1lcilcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3RpbWVyID0gbnVsbDt9LCB0aW1lb3V0c1tjbGlja3MgLSAxXSB8fCA2MDApO1xuXG4gICAgICAgICAgICBpZiAoY2xpY2tzID09IDEpIHtcbiAgICAgICAgICAgICAgICBzdGFydFggPSBlLmNsaWVudFg7XG4gICAgICAgICAgICAgICAgc3RhcnRZID0gZS5jbGllbnRZO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBlLl9jbGlja3MgPSBjbGlja3M7XG5cbiAgICAgICAgZXZlbnRIYW5kbGVyW2NhbGxiYWNrTmFtZV0oXCJtb3VzZWRvd25cIiwgZSk7XG5cbiAgICAgICAgaWYgKGNsaWNrcyA+IDQpXG4gICAgICAgICAgICBjbGlja3MgPSAwO1xuICAgICAgICBlbHNlIGlmIChjbGlja3MgPiAxKVxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcltjYWxsYmFja05hbWVdKGV2ZW50TmFtZXNbY2xpY2tzXSwgZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uRGJsY2xpY2soZSkge1xuICAgICAgICBjbGlja3MgPSAyO1xuICAgICAgICBpZiAodGltZXIpXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7dGltZXIgPSBudWxsO30sIHRpbWVvdXRzW2NsaWNrcyAtIDFdIHx8IDYwMCk7XG4gICAgICAgIGV2ZW50SGFuZGxlcltjYWxsYmFja05hbWVdKFwibW91c2Vkb3duXCIsIGUpO1xuICAgICAgICBldmVudEhhbmRsZXJbY2FsbGJhY2tOYW1lXShldmVudE5hbWVzW2NsaWNrc10sIGUpO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWxlbWVudHMpKVxuICAgICAgICBlbGVtZW50cyA9IFtlbGVtZW50c107XG4gICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbCkge1xuICAgICAgICBleHBvcnRzLmFkZExpc3RlbmVyKGVsLCBcIm1vdXNlZG93blwiLCBvbk1vdXNlZG93bik7XG4gICAgICAgIGlmICh1c2VyYWdlbnQuaXNPbGRJRSlcbiAgICAgICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsIFwiZGJsY2xpY2tcIiwgb25EYmxjbGljayk7XG4gICAgfSk7XG59O1xuXG52YXIgZ2V0TW9kaWZpZXJIYXNoID0gdXNlcmFnZW50LmlzTWFjICYmIHVzZXJhZ2VudC5pc09wZXJhICYmICEoXCJLZXlib2FyZEV2ZW50XCIgaW4gd2luZG93KVxuICAgID8gZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gMCB8IChlLm1ldGFLZXkgPyAxIDogMCkgfCAoZS5hbHRLZXkgPyAyIDogMCkgfCAoZS5zaGlmdEtleSA/IDQgOiAwKSB8IChlLmN0cmxLZXkgPyA4IDogMCk7XG4gICAgfVxuICAgIDogZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gMCB8IChlLmN0cmxLZXkgPyAxIDogMCkgfCAoZS5hbHRLZXkgPyAyIDogMCkgfCAoZS5zaGlmdEtleSA/IDQgOiAwKSB8IChlLm1ldGFLZXkgPyA4IDogMCk7XG4gICAgfTtcblxuZXhwb3J0cy5nZXRNb2RpZmllclN0cmluZyA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4ga2V5cy5LRVlfTU9EU1tnZXRNb2RpZmllckhhc2goZSldO1xufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWFuZEtleXMoY2FsbGJhY2ssIGUsIGtleUNvZGUpIHtcbiAgICB2YXIgaGFzaElkID0gZ2V0TW9kaWZpZXJIYXNoKGUpO1xuXG4gICAgaWYgKCF1c2VyYWdlbnQuaXNNYWMgJiYgcHJlc3NlZEtleXMpIHtcbiAgICAgICAgaWYgKGUuZ2V0TW9kaWZpZXJTdGF0ZSAmJiAoZS5nZXRNb2RpZmllclN0YXRlKFwiT1NcIikgfHwgZS5nZXRNb2RpZmllclN0YXRlKFwiV2luXCIpKSlcbiAgICAgICAgICAgIGhhc2hJZCB8PSA4O1xuICAgICAgICBpZiAocHJlc3NlZEtleXMuYWx0R3IpIHtcbiAgICAgICAgICAgIGlmICgoMyAmIGhhc2hJZCkgIT0gMylcbiAgICAgICAgICAgICAgICBwcmVzc2VkS2V5cy5hbHRHciA9IDA7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXlDb2RlID09PSAxOCB8fCBrZXlDb2RlID09PSAxNykge1xuICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gXCJsb2NhdGlvblwiIGluIGUgPyBlLmxvY2F0aW9uIDogZS5rZXlMb2NhdGlvbjtcbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSAxNyAmJiBsb2NhdGlvbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChwcmVzc2VkS2V5c1trZXlDb2RlXSA9PSAxKVxuICAgICAgICAgICAgICAgICAgICB0cyA9IGUudGltZVN0YW1wO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09PSAxOCAmJiBoYXNoSWQgPT09IDMgJiYgbG9jYXRpb24gPT09IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgZHQgPSBlLnRpbWVTdGFtcCAtIHRzO1xuICAgICAgICAgICAgICAgIGlmIChkdCA8IDUwKVxuICAgICAgICAgICAgICAgICAgICBwcmVzc2VkS2V5cy5hbHRHciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgaWYgKGtleUNvZGUgaW4ga2V5cy5NT0RJRklFUl9LRVlTKSB7XG4gICAgICAgIGtleUNvZGUgPSAtMTtcbiAgICB9XG4gICAgaWYgKGhhc2hJZCAmIDggJiYgKGtleUNvZGUgPj0gOTEgJiYga2V5Q29kZSA8PSA5MykpIHtcbiAgICAgICAga2V5Q29kZSA9IC0xO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWhhc2hJZCAmJiBrZXlDb2RlID09PSAxMykge1xuICAgICAgICB2YXIgbG9jYXRpb24gPSBcImxvY2F0aW9uXCIgaW4gZSA/IGUubG9jYXRpb24gOiBlLmtleUxvY2F0aW9uO1xuICAgICAgICBpZiAobG9jYXRpb24gPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGUsIGhhc2hJZCwgLWtleUNvZGUpO1xuICAgICAgICAgICAgaWYgKGUuZGVmYXVsdFByZXZlbnRlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgaWYgKHVzZXJhZ2VudC5pc0Nocm9tZU9TICYmIGhhc2hJZCAmIDgpIHtcbiAgICAgICAgY2FsbGJhY2soZSwgaGFzaElkLCBrZXlDb2RlKTtcbiAgICAgICAgaWYgKGUuZGVmYXVsdFByZXZlbnRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaGFzaElkICY9IH44O1xuICAgIH1cbiAgICBpZiAoIWhhc2hJZCAmJiAhKGtleUNvZGUgaW4ga2V5cy5GVU5DVElPTl9LRVlTKSAmJiAhKGtleUNvZGUgaW4ga2V5cy5QUklOVEFCTEVfS0VZUykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2FsbGJhY2soZSwgaGFzaElkLCBrZXlDb2RlKTtcbn1cblxuXG5leHBvcnRzLmFkZENvbW1hbmRLZXlMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsLCBjYWxsYmFjaykge1xuICAgIHZhciBhZGRMaXN0ZW5lciA9IGV4cG9ydHMuYWRkTGlzdGVuZXI7XG4gICAgaWYgKHVzZXJhZ2VudC5pc09sZEdlY2tvIHx8ICh1c2VyYWdlbnQuaXNPcGVyYSAmJiAhKFwiS2V5Ym9hcmRFdmVudFwiIGluIHdpbmRvdykpKSB7XG4gICAgICAgIHZhciBsYXN0S2V5RG93bktleUNvZGUgPSBudWxsO1xuICAgICAgICBhZGRMaXN0ZW5lcihlbCwgXCJrZXlkb3duXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGxhc3RLZXlEb3duS2V5Q29kZSA9IGUua2V5Q29kZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFkZExpc3RlbmVyKGVsLCBcImtleXByZXNzXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVDb21tYW5kS2V5cyhjYWxsYmFjaywgZSwgbGFzdEtleURvd25LZXlDb2RlKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGxhc3REZWZhdWx0UHJldmVudGVkID0gbnVsbDtcblxuICAgICAgICBhZGRMaXN0ZW5lcihlbCwgXCJrZXlkb3duXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHByZXNzZWRLZXlzW2Uua2V5Q29kZV0gPSAocHJlc3NlZEtleXNbZS5rZXlDb2RlXSB8fCAwKSArIDE7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbm9ybWFsaXplQ29tbWFuZEtleXMoY2FsbGJhY2ssIGUsIGUua2V5Q29kZSk7XG4gICAgICAgICAgICBsYXN0RGVmYXVsdFByZXZlbnRlZCA9IGUuZGVmYXVsdFByZXZlbnRlZDtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFkZExpc3RlbmVyKGVsLCBcImtleXByZXNzXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChsYXN0RGVmYXVsdFByZXZlbnRlZCAmJiAoZS5jdHJsS2V5IHx8IGUuYWx0S2V5IHx8IGUuc2hpZnRLZXkgfHwgZS5tZXRhS2V5KSkge1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuc3RvcEV2ZW50KGUpO1xuICAgICAgICAgICAgICAgIGxhc3REZWZhdWx0UHJldmVudGVkID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZWwsIFwia2V5dXBcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcHJlc3NlZEtleXNbZS5rZXlDb2RlXSA9IG51bGw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghcHJlc3NlZEtleXMpIHtcbiAgICAgICAgICAgIHJlc2V0UHJlc3NlZEtleXMoKTtcbiAgICAgICAgICAgIGFkZExpc3RlbmVyKHdpbmRvdywgXCJmb2N1c1wiLCByZXNldFByZXNzZWRLZXlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5mdW5jdGlvbiByZXNldFByZXNzZWRLZXlzKCkge1xuICAgIHByZXNzZWRLZXlzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgPT0gXCJvYmplY3RcIiAmJiB3aW5kb3cucG9zdE1lc3NhZ2UgJiYgIXVzZXJhZ2VudC5pc09sZElFKSB7XG4gICAgdmFyIHBvc3RNZXNzYWdlSWQgPSAxO1xuICAgIGV4cG9ydHMubmV4dFRpY2sgPSBmdW5jdGlvbihjYWxsYmFjaywgd2luKSB7XG4gICAgICAgIHdpbiA9IHdpbiB8fCB3aW5kb3c7XG4gICAgICAgIHZhciBtZXNzYWdlTmFtZSA9IFwiemVyby10aW1lb3V0LW1lc3NhZ2UtXCIgKyBwb3N0TWVzc2FnZUlkO1xuICAgICAgICBleHBvcnRzLmFkZExpc3RlbmVyKHdpbiwgXCJtZXNzYWdlXCIsIGZ1bmN0aW9uIGxpc3RlbmVyKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmRhdGEgPT0gbWVzc2FnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnN0b3BQcm9wYWdhdGlvbihlKTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKHdpbiwgXCJtZXNzYWdlXCIsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgd2luLnBvc3RNZXNzYWdlKG1lc3NhZ2VOYW1lLCBcIipcIik7XG4gICAgfTtcbn1cblxuXG5leHBvcnRzLm5leHRGcmFtZSA9IHR5cGVvZiB3aW5kb3cgPT0gXCJvYmplY3RcIiAmJiAod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgIHx8IHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICB8fCB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgfHwgd2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgfHwgd2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUpO1xuXG5pZiAoZXhwb3J0cy5uZXh0RnJhbWUpXG4gICAgZXhwb3J0cy5uZXh0RnJhbWUgPSBleHBvcnRzLm5leHRGcmFtZS5iaW5kKHdpbmRvdyk7XG5lbHNlXG4gICAgZXhwb3J0cy5uZXh0RnJhbWUgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICBzZXRUaW1lb3V0KGNhbGxiYWNrLCAxNyk7XG4gICAgfTtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2xpYi9sYW5nXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5sYXN0ID0gZnVuY3Rpb24oYSkge1xuICAgIHJldHVybiBhW2EubGVuZ3RoIC0gMV07XG59O1xuXG5leHBvcnRzLnN0cmluZ1JldmVyc2UgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnNwbGl0KFwiXCIpLnJldmVyc2UoKS5qb2luKFwiXCIpO1xufTtcblxuZXhwb3J0cy5zdHJpbmdSZXBlYXQgPSBmdW5jdGlvbiAoc3RyaW5nLCBjb3VudCkge1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB3aGlsZSAoY291bnQgPiAwKSB7XG4gICAgICAgIGlmIChjb3VudCAmIDEpXG4gICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5nO1xuXG4gICAgICAgIGlmIChjb3VudCA+Pj0gMSlcbiAgICAgICAgICAgIHN0cmluZyArPSBzdHJpbmc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgdHJpbUJlZ2luUmVnZXhwID0gL15cXHNcXHMqLztcbnZhciB0cmltRW5kUmVnZXhwID0gL1xcc1xccyokLztcblxuZXhwb3J0cy5zdHJpbmdUcmltTGVmdCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7XG59O1xuXG5leHBvcnRzLnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUVuZFJlZ2V4cCwgJycpO1xufTtcblxuZXhwb3J0cy5jb3B5T2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGNvcHkgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGNvcHlba2V5XSA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gY29weTtcbn07XG5cbmV4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpe1xuICAgIHZhciBjb3B5ID0gW107XG4gICAgZm9yICh2YXIgaT0wLCBsPWFycmF5Lmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgY29weVtpXSA9IHRoaXMuY29weU9iamVjdChhcnJheVtpXSk7XG4gICAgICAgIGVsc2UgXG4gICAgICAgICAgICBjb3B5W2ldID0gYXJyYXlbaV07XG4gICAgfVxuICAgIHJldHVybiBjb3B5O1xufTtcblxuZXhwb3J0cy5kZWVwQ29weSA9IGZ1bmN0aW9uIGRlZXBDb3B5KG9iaikge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopXG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgdmFyIGNvcHk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBjb3B5ID0gW107XG4gICAgICAgIGZvciAodmFyIGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtleSsrKSB7XG4gICAgICAgICAgICBjb3B5W2tleV0gPSBkZWVwQ29weShvYmpba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIilcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICBcbiAgICBjb3B5ID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIG9iailcbiAgICAgICAgY29weVtrZXldID0gZGVlcENvcHkob2JqW2tleV0pO1xuICAgIHJldHVybiBjb3B5O1xufTtcblxuZXhwb3J0cy5hcnJheVRvTWFwID0gZnVuY3Rpb24oYXJyKSB7XG4gICAgdmFyIG1hcCA9IHt9O1xuICAgIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFwW2FycltpXV0gPSAxO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuXG59O1xuXG5leHBvcnRzLmNyZWF0ZU1hcCA9IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yICh2YXIgaSBpbiBwcm9wcykge1xuICAgICAgICBtYXBbaV0gPSBwcm9wc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbn07XG5leHBvcnRzLmFycmF5UmVtb3ZlID0gZnVuY3Rpb24oYXJyYXksIHZhbHVlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHZhbHVlID09PSBhcnJheVtpXSkge1xuICAgICAgYXJyYXkuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0cy5lc2NhcGVSZWdFeHAgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLiorP14ke30oKXxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcbn07XG5cbmV4cG9ydHMuZXNjYXBlSFRNTCA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvJi9nLCBcIiYjMzg7XCIpLnJlcGxhY2UoL1wiL2csIFwiJiMzNDtcIikucmVwbGFjZSgvJy9nLCBcIiYjMzk7XCIpLnJlcGxhY2UoLzwvZywgXCImIzYwO1wiKTtcbn07XG5cbmV4cG9ydHMuZ2V0TWF0Y2hPZmZzZXRzID0gZnVuY3Rpb24oc3RyaW5nLCByZWdFeHApIHtcbiAgICB2YXIgbWF0Y2hlcyA9IFtdO1xuXG4gICAgc3RyaW5nLnJlcGxhY2UocmVnRXhwLCBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgbWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIG9mZnNldDogYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMl0sXG4gICAgICAgICAgICBsZW5ndGg6IHN0ci5sZW5ndGhcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbn07XG5leHBvcnRzLmRlZmVycmVkQ2FsbCA9IGZ1bmN0aW9uKGZjbikge1xuICAgIHZhciB0aW1lciA9IG51bGw7XG4gICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgZmNuKCk7XG4gICAgfTtcblxuICAgIHZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcbiAgICAgICAgZGVmZXJyZWQuY2FuY2VsKCk7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCB8fCAwKTtcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH07XG5cbiAgICBkZWZlcnJlZC5zY2hlZHVsZSA9IGRlZmVycmVkO1xuXG4gICAgZGVmZXJyZWQuY2FsbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICBmY24oKTtcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH07XG5cbiAgICBkZWZlcnJlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICByZXR1cm4gZGVmZXJyZWQ7XG4gICAgfTtcbiAgICBcbiAgICBkZWZlcnJlZC5pc1BlbmRpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVmZXJyZWQ7XG59O1xuXG5cbmV4cG9ydHMuZGVsYXllZENhbGwgPSBmdW5jdGlvbihmY24sIGRlZmF1bHRUaW1lb3V0KSB7XG4gICAgdmFyIHRpbWVyID0gbnVsbDtcbiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICBmY24oKTtcbiAgICB9O1xuXG4gICAgdmFyIF9zZWxmID0gZnVuY3Rpb24odGltZW91dCkge1xuICAgICAgICBpZiAodGltZXIgPT0gbnVsbClcbiAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCB8fCBkZWZhdWx0VGltZW91dCk7XG4gICAgfTtcblxuICAgIF9zZWxmLmRlbGF5ID0gZnVuY3Rpb24odGltZW91dCkge1xuICAgICAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpO1xuICAgIH07XG4gICAgX3NlbGYuc2NoZWR1bGUgPSBfc2VsZjtcblxuICAgIF9zZWxmLmNhbGwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgICAgZmNuKCk7XG4gICAgfTtcblxuICAgIF9zZWxmLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgfTtcblxuICAgIF9zZWxmLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfTtcblxuICAgIHJldHVybiBfc2VsZjtcbn07XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9rZXlib2FyZC90ZXh0aW5wdXRfaW9zXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2V2ZW50XCIsXCJhY2UvbGliL3VzZXJhZ2VudFwiLFwiYWNlL2xpYi9kb21cIixcImFjZS9saWIvbGFuZ1wiLFwiYWNlL2xpYi9rZXlzXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGV2ZW50ID0gYWNlcXVpcmUoXCIuLi9saWIvZXZlbnRcIik7XG52YXIgdXNlcmFnZW50ID0gYWNlcXVpcmUoXCIuLi9saWIvdXNlcmFnZW50XCIpO1xudmFyIGRvbSA9IGFjZXF1aXJlKFwiLi4vbGliL2RvbVwiKTtcbnZhciBsYW5nID0gYWNlcXVpcmUoXCIuLi9saWIvbGFuZ1wiKTtcbnZhciBLRVlTID0gYWNlcXVpcmUoXCIuLi9saWIva2V5c1wiKTtcbnZhciBNT0RTID0gS0VZUy5LRVlfTU9EUztcbnZhciBCUk9LRU5fU0VUREFUQSA9IHVzZXJhZ2VudC5pc0Nocm9tZSA8IDE4O1xudmFyIFVTRV9JRV9NSU1FX1RZUEUgPSAgdXNlcmFnZW50LmlzSUU7XG5cbnZhciBUZXh0SW5wdXQgPSBmdW5jdGlvbihwYXJlbnROb2RlLCBob3N0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciB0ZXh0ID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICB0ZXh0LmNsYXNzTmFtZSA9IHVzZXJhZ2VudC5pc0lPUyA/IFwiYWNlX3RleHQtaW5wdXQgYWNlX3RleHQtaW5wdXQtaW9zXCIgOiBcImFjZV90ZXh0LWlucHV0XCI7XG5cbiAgICBpZiAodXNlcmFnZW50LmlzVG91Y2hQYWQpXG4gICAgICAgIHRleHQuc2V0QXR0cmlidXRlKFwieC1wYWxtLWRpc2FibGUtYXV0by1jYXBcIiwgdHJ1ZSk7XG5cbiAgICB0ZXh0LnNldEF0dHJpYnV0ZShcIndyYXBcIiwgXCJvZmZcIik7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoXCJhdXRvY29ycmVjdFwiLCBcIm9mZlwiKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZShcImF1dG9jYXBpdGFsaXplXCIsIFwib2ZmXCIpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKFwic3BlbGxjaGVja1wiLCBmYWxzZSk7XG5cbiAgICB0ZXh0LnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZXh0LCBwYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xuXG4gICAgdmFyIFBMQUNFSE9MREVSID0gXCJcXG4gYWFhYSBhXFxuXCI7XG5cbiAgICB2YXIgY29waWVkID0gZmFsc2U7XG4gICAgdmFyIGN1dCA9IGZhbHNlO1xuICAgIHZhciBwYXN0ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5Db21wb3NpdGlvbiA9IGZhbHNlO1xuICAgIHZhciB0ZW1wU3R5bGUgPSAnJztcbiAgICB2YXIgaXNTZWxlY3Rpb25FbXB0eSA9IHRydWU7XG4gICAgdHJ5IHsgdmFyIGlzRm9jdXNlZCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRleHQ7IH0gY2F0Y2goZSkge31cblxuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwiYmx1clwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGhvc3Qub25CbHVyKGUpO1xuICAgICAgICBpc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcImZvY3VzXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgaG9zdC5vbkZvY3VzKGUpO1xuICAgICAgICByZXNldFNlbGVjdGlvbigpO1xuICAgIH0pO1xuICAgIHRoaXMuZm9jdXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRlbXBTdHlsZSkgcmV0dXJuIHRleHQuZm9jdXMoKTtcbiAgICAgICAgdGV4dC5zdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgICAgICAgdGV4dC5mb2N1cygpO1xuICAgIH07XG4gICAgdGhpcy5ibHVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRleHQuYmx1cigpO1xuICAgIH07XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzRm9jdXNlZDtcbiAgICB9O1xuICAgIHZhciBzeW5jU2VsZWN0aW9uID0gbGFuZy5kZWxheWVkQ2FsbChmdW5jdGlvbigpIHtcbiAgICAgICAgaXNGb2N1c2VkICYmIHJlc2V0U2VsZWN0aW9uKGlzU2VsZWN0aW9uRW1wdHkpO1xuICAgIH0pO1xuICAgIHZhciBzeW5jVmFsdWUgPSBsYW5nLmRlbGF5ZWRDYWxsKGZ1bmN0aW9uKCkge1xuICAgICAgICAgaWYgKCFpbkNvbXBvc2l0aW9uKSB7XG4gICAgICAgICAgICB0ZXh0LnZhbHVlID0gUExBQ0VIT0xERVI7XG4gICAgICAgICAgICBpc0ZvY3VzZWQgJiYgcmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHJlc2V0U2VsZWN0aW9uKGlzRW1wdHkpIHtcbiAgICAgICAgaWYgKGluQ29tcG9zaXRpb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGluQ29tcG9zaXRpb24gPSB0cnVlO1xuXG4gICAgICAgIGlmIChpbnB1dEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gMDtcbiAgICAgICAgICAgIHNlbGVjdGlvbkVuZCA9IGlzRW1wdHkgPyAwIDogdGV4dC52YWx1ZS5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGlvblN0YXJ0ID0gNDtcbiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25FbmQgPSA1O1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0ZXh0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuICAgICAgICB9IGNhdGNoKGUpIHt9XG5cbiAgICAgICAgaW5Db21wb3NpdGlvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2V0VmFsdWUoKSB7XG4gICAgICAgIGlmIChpbkNvbXBvc2l0aW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0ZXh0LnZhbHVlID0gUExBQ0VIT0xERVI7XG4gICAgICAgIGlmICh1c2VyYWdlbnQuaXNXZWJLaXQpXG4gICAgICAgICAgICBzeW5jVmFsdWUuc2NoZWR1bGUoKTtcbiAgICB9XG5cbiAgICB1c2VyYWdlbnQuaXNXZWJLaXQgfHwgaG9zdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2VTZWxlY3Rpb24nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKGhvc3Quc2VsZWN0aW9uLmlzRW1wdHkoKSAhPSBpc1NlbGVjdGlvbkVtcHR5KSB7XG4gICAgICAgICAgICBpc1NlbGVjdGlvbkVtcHR5ID0gIWlzU2VsZWN0aW9uRW1wdHk7XG4gICAgICAgICAgICBzeW5jU2VsZWN0aW9uLnNjaGVkdWxlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlc2V0VmFsdWUoKTtcbiAgICBpZiAoaXNGb2N1c2VkKVxuICAgICAgICBob3N0Lm9uRm9jdXMoKTtcblxuXG4gICAgdmFyIGlzQWxsU2VsZWN0ZWQgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0ZXh0LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmIHRleHQuc2VsZWN0aW9uRW5kID09PSB0ZXh0LnZhbHVlLmxlbmd0aDtcbiAgICB9O1xuXG4gICAgdmFyIG9uU2VsZWN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoaXNBbGxTZWxlY3RlZCh0ZXh0KSkge1xuICAgICAgICAgICAgaG9zdC5zZWxlY3RBbGwoKTtcbiAgICAgICAgICAgIHJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXRIYW5kbGVyKSB7XG4gICAgICAgICAgICByZXNldFNlbGVjdGlvbihob3N0LnNlbGVjdGlvbi5pc0VtcHR5KCkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBpbnB1dEhhbmRsZXIgPSBudWxsO1xuICAgIHRoaXMuc2V0SW5wdXRIYW5kbGVyID0gZnVuY3Rpb24oY2IpIHtpbnB1dEhhbmRsZXIgPSBjYjt9O1xuICAgIHRoaXMuZ2V0SW5wdXRIYW5kbGVyID0gZnVuY3Rpb24oKSB7cmV0dXJuIGlucHV0SGFuZGxlcjt9O1xuICAgIHZhciBhZnRlckNvbnRleHRNZW51ID0gZmFsc2U7XG5cbiAgICB2YXIgc2VuZFRleHQgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgIGlmICh0ZXh0LnNlbGVjdGlvblN0YXJ0ID09PSA0ICYmIHRleHQuc2VsZWN0aW9uRW5kID09PSA1KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dEhhbmRsZXIpIHtcbiAgICAgICAgICAgIGRhdGEgPSBpbnB1dEhhbmRsZXIoZGF0YSk7XG4gICAgICAgICAgICBpbnB1dEhhbmRsZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXN0ZWQpIHtcbiAgICAgICAgICAgIHJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBpZiAoZGF0YSlcbiAgICAgICAgICAgICAgICBob3N0Lm9uUGFzdGUoZGF0YSk7XG4gICAgICAgICAgICBwYXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09IFBMQUNFSE9MREVSLnN1YnN0cigwKSAmJiB0ZXh0LnNlbGVjdGlvblN0YXJ0ID09PSA0KSB7XG4gICAgICAgICAgICBpZiAoYWZ0ZXJDb250ZXh0TWVudSlcbiAgICAgICAgICAgICAgICBob3N0LmV4ZWNDb21tYW5kKFwiZGVsXCIsIHtzb3VyY2U6IFwiYWNlXCJ9KTtcbiAgICAgICAgICAgIGVsc2UgLy8gc29tZSB2ZXJzaW9ucyBvZiBhbmRyb2lkIGRvIG5vdCBmaXJlIGtleWRvd24gd2hlbiBwcmVzc2luZyBiYWNrc3BhY2VcbiAgICAgICAgICAgICAgICBob3N0LmV4ZWNDb21tYW5kKFwiYmFja3NwYWNlXCIsIHtzb3VyY2U6IFwiYWNlXCJ9KTtcbiAgICAgICAgfSBlbHNlIGlmICghY29waWVkKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5zdWJzdHJpbmcoMCwgOSkgPT0gUExBQ0VIT0xERVIgJiYgZGF0YS5sZW5ndGggPiBQTEFDRUhPTERFUi5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuc3Vic3RyKDkpO1xuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS5zdWJzdHIoMCwgNCkgPT0gUExBQ0VIT0xERVIuc3Vic3RyKDAsIDQpKVxuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnN1YnN0cig0LCBkYXRhLmxlbmd0aCAtIFBMQUNFSE9MREVSLmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS5jaGFyQXQoZGF0YS5sZW5ndGggLSAxKSA9PSBQTEFDRUhPTERFUi5jaGFyQXQoMCkpXG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgaWYgKGRhdGEgPT0gUExBQ0VIT0xERVIuY2hhckF0KDApKSB7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuY2hhckF0KGRhdGEubGVuZ3RoIC0gMSkgPT0gUExBQ0VIT0xERVIuY2hhckF0KDApKVxuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIC0xKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEpXG4gICAgICAgICAgICAgICAgaG9zdC5vblRleHRJbnB1dChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29waWVkKSB7XG4gICAgICAgICAgY29waWVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFmdGVyQ29udGV4dE1lbnUpXG4gICAgICAgICAgICBhZnRlckNvbnRleHRNZW51ID0gZmFsc2U7XG4gICAgfTtcbiAgICB2YXIgb25JbnB1dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKGluQ29tcG9zaXRpb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBkYXRhID0gdGV4dC52YWx1ZTtcbiAgICAgICAgc2VuZFRleHQoZGF0YSk7XG4gICAgICAgIHJlc2V0VmFsdWUoKTtcbiAgICB9O1xuXG4gICAgdmFyIGhhbmRsZUNsaXBib2FyZERhdGEgPSBmdW5jdGlvbihlLCBkYXRhLCBmb3JjZUlFTWltZSkge1xuICAgICAgICB2YXIgY2xpcGJvYXJkRGF0YSA9IGUuY2xpcGJvYXJkRGF0YSB8fCB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgICAgICAgaWYgKCFjbGlwYm9hcmREYXRhIHx8IEJST0tFTl9TRVREQVRBKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgbWltZSA9IFVTRV9JRV9NSU1FX1RZUEUgfHwgZm9yY2VJRU1pbWUgPyBcIlRleHRcIiA6IFwidGV4dC9wbGFpblwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xpcGJvYXJkRGF0YS5zZXREYXRhKG1pbWUsIGRhdGEpICE9PSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsaXBib2FyZERhdGEuZ2V0RGF0YShtaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICBpZiAoIWZvcmNlSUVNaW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVDbGlwYm9hcmREYXRhKGUsIGRhdGEsIHRydWUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBkb0NvcHkgPSBmdW5jdGlvbihlLCBpc0N1dCkge1xuICAgICAgICB2YXIgZGF0YSA9IGhvc3QuZ2V0Q29weVRleHQoKTtcbiAgICAgICAgaWYgKCFkYXRhKVxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpO1xuXG4gICAgICAgIGlmIChoYW5kbGVDbGlwYm9hcmREYXRhKGUsIGRhdGEpKSB7XG4gICAgICAgICAgICBpZiAodXNlcmFnZW50LmlzSU9TKSB7XG4gICAgICAgICAgICAgICAgY3V0ID0gaXNDdXQ7XG4gICAgICAgICAgICAgICAgdGV4dC52YWx1ZSA9IFwiXFxuIGFhXCIgKyBkYXRhICsgXCJhIGFcXG5cIjtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFNlbGVjdGlvblJhbmdlKDQsIDQgKyBkYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgY29waWVkID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZGF0YVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc0N1dCA/IGhvc3Qub25DdXQoKSA6IGhvc3Qub25Db3B5KCk7XG4gICAgICAgICAgICBpZiAoIXVzZXJhZ2VudC5pc0lPUykgZXZlbnQucHJldmVudERlZmF1bHQoZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb3BpZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGV4dC52YWx1ZSA9IGRhdGE7XG4gICAgICAgICAgICB0ZXh0LnNlbGVjdCgpO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIGNvcGllZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlc2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICByZXNldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIGlzQ3V0ID8gaG9zdC5vbkN1dCgpIDogaG9zdC5vbkNvcHkoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBvbkN1dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZG9Db3B5KGUsIHRydWUpO1xuICAgIH07XG5cbiAgICB2YXIgb25Db3B5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBkb0NvcHkoZSwgZmFsc2UpO1xuICAgIH07XG5cbiAgICB2YXIgb25QYXN0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBoYW5kbGVDbGlwYm9hcmREYXRhKGUpO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKGRhdGEpXG4gICAgICAgICAgICAgICAgaG9zdC5vblBhc3RlKGRhdGEsIGUpO1xuICAgICAgICAgICAgaWYgKHVzZXJhZ2VudC5pc0lFKVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocmVzZXRTZWxlY3Rpb24pO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0ZXh0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIHBhc3RlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZXZlbnQuYWRkQ29tbWFuZEtleUxpc3RlbmVyKHRleHQsIGhvc3Qub25Db21tYW5kS2V5LmJpbmQoaG9zdCkpO1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJzZWxlY3RcIiwgb25TZWxlY3QpO1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJpbnB1dFwiLCBvbklucHV0KTtcblxuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwiY3V0XCIsIG9uQ3V0KTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcImNvcHlcIiwgb25Db3B5KTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcInBhc3RlXCIsIG9uUGFzdGUpO1xuICAgIHZhciBvbkNvbXBvc2l0aW9uU3RhcnQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChpbkNvbXBvc2l0aW9uIHx8ICFob3N0Lm9uQ29tcG9zaXRpb25TdGFydCB8fCBob3N0LiRyZWFkT25seSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaW5Db21wb3NpdGlvbiA9IHt9O1xuICAgICAgICBpbkNvbXBvc2l0aW9uLmNhblVuZG8gPSBob3N0LnNlc3Npb24uJHVuZG9NYW5hZ2VyO1xuICAgICAgICBob3N0Lm9uQ29tcG9zaXRpb25TdGFydCgpO1xuICAgICAgICBzZXRUaW1lb3V0KG9uQ29tcG9zaXRpb25VcGRhdGUsIDApO1xuICAgICAgICBob3N0Lm9uKFwibW91c2Vkb3duXCIsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICBpZiAoaW5Db21wb3NpdGlvbi5jYW5VbmRvICYmICFob3N0LnNlbGVjdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGhvc3QuaW5zZXJ0KFwiXCIpO1xuICAgICAgICAgICAgaG9zdC5zZXNzaW9uLm1hcmtVbmRvR3JvdXAoKTtcbiAgICAgICAgICAgIGhvc3Quc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaG9zdC5zZXNzaW9uLm1hcmtVbmRvR3JvdXAoKTtcbiAgICB9O1xuXG4gICAgdmFyIG9uQ29tcG9zaXRpb25VcGRhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCFpbkNvbXBvc2l0aW9uIHx8ICFob3N0Lm9uQ29tcG9zaXRpb25VcGRhdGUgfHwgaG9zdC4kcmVhZE9ubHkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciB2YWwgPSB0ZXh0LnZhbHVlLnJlcGxhY2UoL1xceDAxL2csIFwiXCIpO1xuICAgICAgICBpZiAoaW5Db21wb3NpdGlvbi5sYXN0VmFsdWUgPT09IHZhbCkgcmV0dXJuO1xuXG4gICAgICAgIGhvc3Qub25Db21wb3NpdGlvblVwZGF0ZSh2YWwpO1xuICAgICAgICBpZiAoaW5Db21wb3NpdGlvbi5sYXN0VmFsdWUpXG4gICAgICAgICAgICBob3N0LnVuZG8oKTtcbiAgICAgICAgaWYgKGluQ29tcG9zaXRpb24uY2FuVW5kbylcbiAgICAgICAgICAgIGluQ29tcG9zaXRpb24ubGFzdFZhbHVlID0gdmFsO1xuICAgICAgICBpZiAoaW5Db21wb3NpdGlvbi5sYXN0VmFsdWUpIHtcbiAgICAgICAgICAgIHZhciByID0gaG9zdC5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTtcbiAgICAgICAgICAgIGhvc3QuaW5zZXJ0KGluQ29tcG9zaXRpb24ubGFzdFZhbHVlKTtcbiAgICAgICAgICAgIGhvc3Quc2Vzc2lvbi5tYXJrVW5kb0dyb3VwKCk7XG4gICAgICAgICAgICBpbkNvbXBvc2l0aW9uLnJhbmdlID0gaG9zdC5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTtcbiAgICAgICAgICAgIGhvc3Quc2VsZWN0aW9uLnNldFJhbmdlKHIpO1xuICAgICAgICAgICAgaG9zdC5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgb25Db21wb3NpdGlvbkVuZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKCFob3N0Lm9uQ29tcG9zaXRpb25FbmQgfHwgaG9zdC4kcmVhZE9ubHkpIHJldHVybjtcbiAgICAgICAgdmFyIGMgPSBpbkNvbXBvc2l0aW9uO1xuICAgICAgICBpbkNvbXBvc2l0aW9uID0gZmFsc2U7XG4gICAgICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgICB2YXIgc3RyID0gdGV4dC52YWx1ZS5yZXBsYWNlKC9cXHgwMS9nLCBcIlwiKTtcbiAgICAgICAgICAgIGlmIChpbkNvbXBvc2l0aW9uKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHN0ciA9PSBjLmxhc3RWYWx1ZSlcbiAgICAgICAgICAgICAgICByZXNldFZhbHVlKCk7XG4gICAgICAgICAgICBlbHNlIGlmICghYy5sYXN0VmFsdWUgJiYgc3RyKSB7XG4gICAgICAgICAgICAgICAgcmVzZXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHNlbmRUZXh0KHN0cik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpbnB1dEhhbmRsZXIgPSBmdW5jdGlvbiBjb21wb3NpdGlvbklucHV0SGFuZGxlcihzdHIpIHtcbiAgICAgICAgICAgIGlmICh0aW1lcilcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xceDAxL2csIFwiXCIpO1xuICAgICAgICAgICAgaWYgKHN0ciA9PSBjLmxhc3RWYWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIGlmIChjLmxhc3RWYWx1ZSAmJiB0aW1lcilcbiAgICAgICAgICAgICAgICBob3N0LnVuZG8oKTtcbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgIH07XG4gICAgICAgIGhvc3Qub25Db21wb3NpdGlvbkVuZCgpO1xuICAgICAgICBob3N0LnJlbW92ZUxpc3RlbmVyKFwibW91c2Vkb3duXCIsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICBpZiAoZS50eXBlID09IFwiY29tcG9zaXRpb25lbmRcIiAmJiBjLnJhbmdlKSB7XG4gICAgICAgICAgICBob3N0LnNlbGVjdGlvbi5zZXRSYW5nZShjLnJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmVlZHNPbklucHV0ID1cbiAgICAgICAgICAgICghIXVzZXJhZ2VudC5pc0Nocm9tZSAmJiB1c2VyYWdlbnQuaXNDaHJvbWUgPj0gNTMpIHx8XG4gICAgICAgICAgICAoISF1c2VyYWdlbnQuaXNXZWJLaXQgJiYgdXNlcmFnZW50LmlzV2ViS2l0ID49IDYwMyk7XG5cbiAgICAgICAgaWYgKG5lZWRzT25JbnB1dCkge1xuICAgICAgICAgIG9uSW5wdXQoKTtcbiAgICAgICAgfVxuICAgIH07XG5cblxuXG4gICAgdmFyIHN5bmNDb21wb3NpdGlvbiA9IGxhbmcuZGVsYXllZENhbGwob25Db21wb3NpdGlvblVwZGF0ZSwgNTApO1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJjb21wb3NpdGlvbnN0YXJ0XCIsIG9uQ29tcG9zaXRpb25TdGFydCk7XG4gICAgaWYgKHVzZXJhZ2VudC5pc0dlY2tvKSB7XG4gICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwidGV4dFwiLCBmdW5jdGlvbigpe3N5bmNDb21wb3NpdGlvbi5zY2hlZHVsZSgpO30pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwia2V5dXBcIiwgZnVuY3Rpb24oKXtzeW5jQ29tcG9zaXRpb24uc2NoZWR1bGUoKTt9KTtcbiAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJrZXlkb3duXCIsIGZ1bmN0aW9uKCl7c3luY0NvbXBvc2l0aW9uLnNjaGVkdWxlKCk7fSk7XG4gICAgfVxuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwiY29tcG9zaXRpb25lbmRcIiwgb25Db21wb3NpdGlvbkVuZCk7XG5cbiAgICB0aGlzLmdldEVsZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0UmVhZE9ubHkgPSBmdW5jdGlvbihyZWFkT25seSkge1xuICAgICAgIHRleHQucmVhZE9ubHkgPSByZWFkT25seTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkNvbnRleHRNZW51ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBhZnRlckNvbnRleHRNZW51ID0gdHJ1ZTtcbiAgICAgICAgcmVzZXRTZWxlY3Rpb24oaG9zdC5zZWxlY3Rpb24uaXNFbXB0eSgpKTtcbiAgICAgICAgaG9zdC5fZW1pdChcIm5hdGl2ZWNvbnRleHRtZW51XCIsIHt0YXJnZXQ6IGhvc3QsIGRvbUV2ZW50OiBlfSk7XG4gICAgICAgIHRoaXMubW92ZVRvTW91c2UoZSwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIHRoaXMubW92ZVRvTW91c2UgPSBmdW5jdGlvbihlLCBicmluZ1RvRnJvbnQpIHtcbiAgICAgICAgaWYgKCF0ZW1wU3R5bGUpXG4gICAgICAgICAgICB0ZW1wU3R5bGUgPSB0ZXh0LnN0eWxlLmNzc1RleHQ7XG4gICAgICAgIHRleHQuc3R5bGUuY3NzVGV4dCA9IChicmluZ1RvRnJvbnQgPyBcInotaW5kZXg6MTAwMDAwO1wiIDogXCJcIilcbiAgICAgICAgICAgICsgXCJoZWlnaHQ6XCIgKyB0ZXh0LnN0eWxlLmhlaWdodCArIFwiO1wiXG4gICAgICAgICAgICArICh1c2VyYWdlbnQuaXNJRSA/IFwib3BhY2l0eTowLjE7XCIgOiBcIlwiKTtcblxuICAgICAgICB2YXIgcmVjdCA9IGhvc3QuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB2YXIgc3R5bGUgPSBkb20uY29tcHV0ZWRTdHlsZShob3N0LmNvbnRhaW5lcik7XG4gICAgICAgIHZhciB0b3AgPSByZWN0LnRvcCArIChwYXJzZUludChzdHlsZS5ib3JkZXJUb3BXaWR0aCkgfHwgMCk7XG4gICAgICAgIHZhciBsZWZ0ID0gcmVjdC5sZWZ0ICsgKHBhcnNlSW50KHJlY3QuYm9yZGVyTGVmdFdpZHRoKSB8fCAwKTtcbiAgICAgICAgdmFyIG1heFRvcCA9IHJlY3QuYm90dG9tIC0gdG9wIC0gdGV4dC5jbGllbnRIZWlnaHQgLTI7XG4gICAgICAgIHZhciBtb3ZlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgdGV4dC5zdHlsZS5sZWZ0ID0gZS5jbGllbnRYIC0gbGVmdCAtIDIgKyBcInB4XCI7XG4gICAgICAgICAgICB0ZXh0LnN0eWxlLnRvcCA9IE1hdGgubWluKGUuY2xpZW50WSAtIHRvcCAtIDIsIG1heFRvcCkgKyBcInB4XCI7XG4gICAgICAgIH07XG4gICAgICAgIG1vdmUoZSk7XG5cbiAgICAgICAgaWYgKGUudHlwZSAhPSBcIm1vdXNlZG93blwiKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmIChob3N0LnJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvcilcbiAgICAgICAgICAgIGhvc3QucmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID0gbnVsbDtcblxuICAgICAgICBjbGVhclRpbWVvdXQoY2xvc2VUaW1lb3V0KTtcbiAgICAgICAgaWYgKHVzZXJhZ2VudC5pc1dpbilcbiAgICAgICAgICAgIGV2ZW50LmNhcHR1cmUoaG9zdC5jb250YWluZXIsIG1vdmUsIG9uQ29udGV4dE1lbnVDbG9zZSk7XG4gICAgfTtcblxuICAgIHRoaXMub25Db250ZXh0TWVudUNsb3NlID0gb25Db250ZXh0TWVudUNsb3NlO1xuICAgIHZhciBjbG9zZVRpbWVvdXQ7XG4gICAgZnVuY3Rpb24gb25Db250ZXh0TWVudUNsb3NlKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoY2xvc2VUaW1lb3V0KTtcbiAgICAgICAgY2xvc2VUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGVtcFN0eWxlKSB7XG4gICAgICAgICAgICAgICAgdGV4dC5zdHlsZS5jc3NUZXh0ID0gdGVtcFN0eWxlO1xuICAgICAgICAgICAgICAgIHRlbXBTdHlsZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhvc3QucmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBob3N0LnJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgaG9zdC5yZW5kZXJlci4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgdmFyIG9uQ29udGV4dE1lbnUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGhvc3QudGV4dElucHV0Lm9uQ29udGV4dE1lbnUoZSk7XG4gICAgICAgIG9uQ29udGV4dE1lbnVDbG9zZSgpO1xuICAgIH07XG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJtb3VzZXVwXCIsIG9uQ29udGV4dE1lbnUpO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwibW91c2Vkb3duXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvbkNvbnRleHRNZW51Q2xvc2UoKTtcbiAgICB9KTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihob3N0LnJlbmRlcmVyLnNjcm9sbGVyLCBcImNvbnRleHRtZW51XCIsIG9uQ29udGV4dE1lbnUpO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwiY29udGV4dG1lbnVcIiwgb25Db250ZXh0TWVudSk7XG5cbiAgICBpZiAodXNlcmFnZW50LmlzSU9TKSB7XG4gICAgICAgIHZhciB0eXBpbmdSZXNldFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB2YXIgdHlwaW5nID0gZmFsc2U7XG5cbiAgICAgICAgcGFyZW50Tm9kZS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgaWYgKHR5cGluZ1Jlc2V0VGltZW91dCkgY2xlYXJUaW1lb3V0KHR5cGluZ1Jlc2V0VGltZW91dCk7XG4gICAgICAgICAgICB0eXBpbmcgPSB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBwYXJlbnROb2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdHlwaW5nUmVzZXRUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHlwaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGRldGVjdEFycm93S2V5cyA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSB0ZXh0KSByZXR1cm47XG4gICAgICAgICAgICBpZiAodHlwaW5nKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChjdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1dCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSB0ZXh0LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IHRleHQuc2VsZWN0aW9uRW5kO1xuICAgICAgICAgICAgdGV4dC5zZXRTZWxlY3Rpb25SYW5nZSg0LCA1KTtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25TdGFydCA9PSBzZWxlY3Rpb25FbmQpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNlbGVjdGlvblN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogaG9zdC5vbkNvbW1hbmRLZXkobnVsbCwgMCwgS0VZUy51cCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IGhvc3Qub25Db21tYW5kS2V5KG51bGwsIDAsIEtFWVMuaG9tZSk7IGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IGhvc3Qub25Db21tYW5kS2V5KG51bGwsIE1PRFMub3B0aW9uLCBLRVlTLmxlZnQpOyBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBob3N0Lm9uQ29tbWFuZEtleShudWxsLCAwLCBLRVlTLmxlZnQpOyBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiBob3N0Lm9uQ29tbWFuZEtleShudWxsLCAwLCBLRVlTLnJpZ2h0KTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNzogaG9zdC5vbkNvbW1hbmRLZXkobnVsbCwgTU9EUy5vcHRpb24sIEtFWVMucmlnaHQpOyBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA4OiBob3N0Lm9uQ29tbWFuZEtleShudWxsLCAwLCBLRVlTLmVuZCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDk6IGhvc3Qub25Db21tYW5kS2V5KG51bGwsIDAsIEtFWVMuZG93bik7IGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChzZWxlY3Rpb25FbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiBob3N0Lm9uQ29tbWFuZEtleShudWxsLCBNT0RTLnNoaWZ0LCBLRVlTLnJpZ2h0KTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNzogaG9zdC5vbkNvbW1hbmRLZXkobnVsbCwgTU9EUy5zaGlmdCB8IE1PRFMub3B0aW9uLCBLRVlTLnJpZ2h0KTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgODogaG9zdC5vbkNvbW1hbmRLZXkobnVsbCwgTU9EUy5zaGlmdCwgS0VZUy5lbmQpOyBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA5OiBob3N0Lm9uQ29tbWFuZEtleShudWxsLCBNT0RTLnNoaWZ0LCBLRVlTLmRvd24pOyBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3dpdGNoIChzZWxlY3Rpb25TdGFydCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IGhvc3Qub25Db21tYW5kS2V5KG51bGwsIE1PRFMuc2hpZnQsIEtFWVMudXApOyBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBob3N0Lm9uQ29tbWFuZEtleShudWxsLCBNT0RTLnNoaWZ0LCBLRVlTLmhvbWUpOyBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBob3N0Lm9uQ29tbWFuZEtleShudWxsLCBNT0RTLnNoaWZ0IHwgTU9EUy5vcHRpb24sIEtFWVMubGVmdCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IGhvc3Qub25Db21tYW5kS2V5KG51bGwsIE1PRFMuc2hpZnQsIEtFWVMubGVmdCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLCBkZXRlY3RBcnJvd0tleXMpO1xuICAgICAgICBob3N0Lm9uKFwiZGVzdHJveVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgZGV0ZWN0QXJyb3dLZXlzKTtcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuZXhwb3J0cy5UZXh0SW5wdXQgPSBUZXh0SW5wdXQ7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9rZXlib2FyZC90ZXh0aW5wdXRcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvZXZlbnRcIixcImFjZS9saWIvdXNlcmFnZW50XCIsXCJhY2UvbGliL2RvbVwiLFwiYWNlL2xpYi9sYW5nXCIsXCJhY2Uva2V5Ym9hcmQvdGV4dGlucHV0X2lvc1wiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBldmVudCA9IGFjZXF1aXJlKFwiLi4vbGliL2V2ZW50XCIpO1xudmFyIHVzZXJhZ2VudCA9IGFjZXF1aXJlKFwiLi4vbGliL3VzZXJhZ2VudFwiKTtcbnZhciBkb20gPSBhY2VxdWlyZShcIi4uL2xpYi9kb21cIik7XG52YXIgbGFuZyA9IGFjZXF1aXJlKFwiLi4vbGliL2xhbmdcIik7XG52YXIgQlJPS0VOX1NFVERBVEEgPSB1c2VyYWdlbnQuaXNDaHJvbWUgPCAxODtcbnZhciBVU0VfSUVfTUlNRV9UWVBFID0gIHVzZXJhZ2VudC5pc0lFO1xuXG52YXIgVGV4dElucHV0SU9TID0gYWNlcXVpcmUoXCIuL3RleHRpbnB1dF9pb3NcIikuVGV4dElucHV0O1xudmFyIFRleHRJbnB1dCA9IGZ1bmN0aW9uKHBhcmVudE5vZGUsIGhvc3QpIHtcbiAgICBpZiAodXNlcmFnZW50LmlzSU9TKVxuICAgICAgICByZXR1cm4gVGV4dElucHV0SU9TLmNhbGwodGhpcywgcGFyZW50Tm9kZSwgaG9zdCk7XG5cbiAgICB2YXIgdGV4dCA9IGRvbS5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XG4gICAgdGV4dC5jbGFzc05hbWUgPSBcImFjZV90ZXh0LWlucHV0XCI7XG5cbiAgICB0ZXh0LnNldEF0dHJpYnV0ZShcIndyYXBcIiwgXCJvZmZcIik7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoXCJhdXRvY29ycmVjdFwiLCBcIm9mZlwiKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZShcImF1dG9jYXBpdGFsaXplXCIsIFwib2ZmXCIpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKFwic3BlbGxjaGVja1wiLCBmYWxzZSk7XG5cbiAgICB0ZXh0LnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZXh0LCBwYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xuXG4gICAgdmFyIFBMQUNFSE9MREVSID0gXCJcXHUyMDI4XFx1MjAyOFwiO1xuXG4gICAgdmFyIGNvcGllZCA9IGZhbHNlO1xuICAgIHZhciBwYXN0ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5Db21wb3NpdGlvbiA9IGZhbHNlO1xuICAgIHZhciB0ZW1wU3R5bGUgPSAnJztcbiAgICB2YXIgaXNTZWxlY3Rpb25FbXB0eSA9IHRydWU7XG4gICAgdHJ5IHsgdmFyIGlzRm9jdXNlZCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRleHQ7IH0gY2F0Y2goZSkge31cbiAgICBcbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcImJsdXJcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICBob3N0Lm9uQmx1cihlKTtcbiAgICAgICAgaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfSk7XG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJmb2N1c1wiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgIGhvc3Qub25Gb2N1cyhlKTtcbiAgICAgICAgcmVzZXRTZWxlY3Rpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLmZvY3VzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0ZW1wU3R5bGUpIHJldHVybiB0ZXh0LmZvY3VzKCk7XG4gICAgICAgIHZhciB0b3AgPSB0ZXh0LnN0eWxlLnRvcDtcbiAgICAgICAgdGV4dC5zdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgICAgICAgdGV4dC5zdHlsZS50b3AgPSBcIjBweFwiO1xuICAgICAgICB0ZXh0LmZvY3VzKCk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0ZXh0LnN0eWxlLnBvc2l0aW9uID0gXCJcIjtcbiAgICAgICAgICAgIGlmICh0ZXh0LnN0eWxlLnRvcCA9PSBcIjBweFwiKVxuICAgICAgICAgICAgICAgIHRleHQuc3R5bGUudG9wID0gdG9wO1xuICAgICAgICB9LCAwKTtcbiAgICB9O1xuICAgIHRoaXMuYmx1ciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0ZXh0LmJsdXIoKTtcbiAgICB9O1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0ZvY3VzZWQ7XG4gICAgfTtcbiAgICB2YXIgc3luY1NlbGVjdGlvbiA9IGxhbmcuZGVsYXllZENhbGwoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlzRm9jdXNlZCAmJiByZXNldFNlbGVjdGlvbihpc1NlbGVjdGlvbkVtcHR5KTtcbiAgICB9KTtcbiAgICB2YXIgc3luY1ZhbHVlID0gbGFuZy5kZWxheWVkQ2FsbChmdW5jdGlvbigpIHtcbiAgICAgICAgIGlmICghaW5Db21wb3NpdGlvbikge1xuICAgICAgICAgICAgdGV4dC52YWx1ZSA9IFBMQUNFSE9MREVSO1xuICAgICAgICAgICAgaXNGb2N1c2VkICYmIHJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiByZXNldFNlbGVjdGlvbihpc0VtcHR5KSB7XG4gICAgICAgIGlmIChpbkNvbXBvc2l0aW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpbkNvbXBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgXG4gICAgICAgIGlmIChpbnB1dEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25TdGFydCA9IDA7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uRW5kID0gaXNFbXB0eSA/IDAgOiB0ZXh0LnZhbHVlLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSBpc0VtcHR5ID8gMiA6IDE7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uRW5kID0gMjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGV4dC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcbiAgICAgICAgfSBjYXRjaChlKXt9XG4gICAgICAgIFxuICAgICAgICBpbkNvbXBvc2l0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzZXRWYWx1ZSgpIHtcbiAgICAgICAgaWYgKGluQ29tcG9zaXRpb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRleHQudmFsdWUgPSBQTEFDRUhPTERFUjtcbiAgICAgICAgaWYgKHVzZXJhZ2VudC5pc1dlYktpdClcbiAgICAgICAgICAgIHN5bmNWYWx1ZS5zY2hlZHVsZSgpO1xuICAgIH1cblxuICAgIHVzZXJhZ2VudC5pc1dlYktpdCB8fCBob3N0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZVNlbGVjdGlvbicsIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoaG9zdC5zZWxlY3Rpb24uaXNFbXB0eSgpICE9IGlzU2VsZWN0aW9uRW1wdHkpIHtcbiAgICAgICAgICAgIGlzU2VsZWN0aW9uRW1wdHkgPSAhaXNTZWxlY3Rpb25FbXB0eTtcbiAgICAgICAgICAgIHN5bmNTZWxlY3Rpb24uc2NoZWR1bGUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmVzZXRWYWx1ZSgpO1xuICAgIGlmIChpc0ZvY3VzZWQpXG4gICAgICAgIGhvc3Qub25Gb2N1cygpO1xuXG5cbiAgICB2YXIgaXNBbGxTZWxlY3RlZCA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRleHQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiYgdGV4dC5zZWxlY3Rpb25FbmQgPT09IHRleHQudmFsdWUubGVuZ3RoO1xuICAgIH07XG5cbiAgICB2YXIgb25TZWxlY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChjb3BpZWQpIHtcbiAgICAgICAgICAgIGNvcGllZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQWxsU2VsZWN0ZWQodGV4dCkpIHtcbiAgICAgICAgICAgIGhvc3Quc2VsZWN0QWxsKCk7XG4gICAgICAgICAgICByZXNldFNlbGVjdGlvbigpO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0SGFuZGxlcikge1xuICAgICAgICAgICAgcmVzZXRTZWxlY3Rpb24oaG9zdC5zZWxlY3Rpb24uaXNFbXB0eSgpKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgaW5wdXRIYW5kbGVyID0gbnVsbDtcbiAgICB0aGlzLnNldElucHV0SGFuZGxlciA9IGZ1bmN0aW9uKGNiKSB7aW5wdXRIYW5kbGVyID0gY2I7fTtcbiAgICB0aGlzLmdldElucHV0SGFuZGxlciA9IGZ1bmN0aW9uKCkge3JldHVybiBpbnB1dEhhbmRsZXI7fTtcbiAgICB2YXIgYWZ0ZXJDb250ZXh0TWVudSA9IGZhbHNlO1xuICAgIFxuICAgIHZhciBzZW5kVGV4dCA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgaWYgKGlucHV0SGFuZGxlcikge1xuICAgICAgICAgICAgZGF0YSA9IGlucHV0SGFuZGxlcihkYXRhKTtcbiAgICAgICAgICAgIGlucHV0SGFuZGxlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhc3RlZCkge1xuICAgICAgICAgICAgcmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGlmIChkYXRhKVxuICAgICAgICAgICAgICAgIGhvc3Qub25QYXN0ZShkYXRhKTtcbiAgICAgICAgICAgIHBhc3RlZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gUExBQ0VIT0xERVIuY2hhckF0KDApKSB7XG4gICAgICAgICAgICBpZiAoYWZ0ZXJDb250ZXh0TWVudSlcbiAgICAgICAgICAgICAgICBob3N0LmV4ZWNDb21tYW5kKFwiZGVsXCIsIHtzb3VyY2U6IFwiYWNlXCJ9KTtcbiAgICAgICAgICAgIGVsc2UgLy8gc29tZSB2ZXJzaW9ucyBvZiBhbmRyb2lkIGRvIG5vdCBmaXJlIGtleWRvd24gd2hlbiBwcmVzc2luZyBiYWNrc3BhY2VcbiAgICAgICAgICAgICAgICBob3N0LmV4ZWNDb21tYW5kKFwiYmFja3NwYWNlXCIsIHtzb3VyY2U6IFwiYWNlXCJ9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkYXRhLnN1YnN0cmluZygwLCAyKSA9PSBQTEFDRUhPTERFUilcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5zdWJzdHIoMik7XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLmNoYXJBdCgwKSA9PSBQTEFDRUhPTERFUi5jaGFyQXQoMCkpXG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuc3Vic3RyKDEpO1xuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS5jaGFyQXQoZGF0YS5sZW5ndGggLSAxKSA9PSBQTEFDRUhPTERFUi5jaGFyQXQoMCkpXG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgaWYgKGRhdGEuY2hhckF0KGRhdGEubGVuZ3RoIC0gMSkgPT0gUExBQ0VIT0xERVIuY2hhckF0KDApKVxuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGRhdGEpXG4gICAgICAgICAgICAgICAgaG9zdC5vblRleHRJbnB1dChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWZ0ZXJDb250ZXh0TWVudSlcbiAgICAgICAgICAgIGFmdGVyQ29udGV4dE1lbnUgPSBmYWxzZTtcbiAgICB9O1xuICAgIHZhciBvbklucHV0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoaW5Db21wb3NpdGlvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGRhdGEgPSB0ZXh0LnZhbHVlO1xuICAgICAgICBzZW5kVGV4dChkYXRhKTtcbiAgICAgICAgcmVzZXRWYWx1ZSgpO1xuICAgIH07XG4gICAgXG4gICAgdmFyIGhhbmRsZUNsaXBib2FyZERhdGEgPSBmdW5jdGlvbihlLCBkYXRhLCBmb3JjZUlFTWltZSkge1xuICAgICAgICB2YXIgY2xpcGJvYXJkRGF0YSA9IGUuY2xpcGJvYXJkRGF0YSB8fCB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgICAgICAgaWYgKCFjbGlwYm9hcmREYXRhIHx8IEJST0tFTl9TRVREQVRBKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgbWltZSA9IFVTRV9JRV9NSU1FX1RZUEUgfHwgZm9yY2VJRU1pbWUgPyBcIlRleHRcIiA6IFwidGV4dC9wbGFpblwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xpcGJvYXJkRGF0YS5zZXREYXRhKG1pbWUsIGRhdGEpICE9PSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsaXBib2FyZERhdGEuZ2V0RGF0YShtaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICBpZiAoIWZvcmNlSUVNaW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVDbGlwYm9hcmREYXRhKGUsIGRhdGEsIHRydWUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBkb0NvcHkgPSBmdW5jdGlvbihlLCBpc0N1dCkge1xuICAgICAgICB2YXIgZGF0YSA9IGhvc3QuZ2V0Q29weVRleHQoKTtcbiAgICAgICAgaWYgKCFkYXRhKVxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpO1xuXG4gICAgICAgIGlmIChoYW5kbGVDbGlwYm9hcmREYXRhKGUsIGRhdGEpKSB7XG4gICAgICAgICAgICBpc0N1dCA/IGhvc3Qub25DdXQoKSA6IGhvc3Qub25Db3B5KCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvcGllZCA9IHRydWU7XG4gICAgICAgICAgICB0ZXh0LnZhbHVlID0gZGF0YTtcbiAgICAgICAgICAgIHRleHQuc2VsZWN0KCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgY29waWVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmVzZXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgaXNDdXQgPyBob3N0Lm9uQ3V0KCkgOiBob3N0Lm9uQ29weSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHZhciBvbkN1dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZG9Db3B5KGUsIHRydWUpO1xuICAgIH07XG4gICAgXG4gICAgdmFyIG9uQ29weSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZG9Db3B5KGUsIGZhbHNlKTtcbiAgICB9O1xuICAgIFxuICAgIHZhciBvblBhc3RlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgZGF0YSA9IGhhbmRsZUNsaXBib2FyZERhdGEoZSk7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAoZGF0YSlcbiAgICAgICAgICAgICAgICBob3N0Lm9uUGFzdGUoZGF0YSwgZSk7XG4gICAgICAgICAgICBpZiAodXNlcmFnZW50LmlzSUUpXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChyZXNldFNlbGVjdGlvbik7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRleHQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgcGFzdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBldmVudC5hZGRDb21tYW5kS2V5TGlzdGVuZXIodGV4dCwgaG9zdC5vbkNvbW1hbmRLZXkuYmluZChob3N0KSk7XG5cbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcInNlbGVjdFwiLCBvblNlbGVjdCk7XG5cbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcImlucHV0XCIsIG9uSW5wdXQpO1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJjdXRcIiwgb25DdXQpO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwiY29weVwiLCBvbkNvcHkpO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwicGFzdGVcIiwgb25QYXN0ZSk7XG4gICAgaWYgKCEoJ29uY3V0JyBpbiB0ZXh0KSB8fCAhKCdvbmNvcHknIGluIHRleHQpIHx8ICEoJ29ucGFzdGUnIGluIHRleHQpKSB7XG4gICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKHBhcmVudE5vZGUsIFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoKHVzZXJhZ2VudC5pc01hYyAmJiAhZS5tZXRhS2V5KSB8fCAhZS5jdHJsS2V5KVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgc3dpdGNoIChlLmtleUNvZGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgICAgICAgICAgICBvbkNvcHkoZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgODY6XG4gICAgICAgICAgICAgICAgICAgIG9uUGFzdGUoZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgODg6XG4gICAgICAgICAgICAgICAgICAgIG9uQ3V0KGUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHZhciBvbkNvbXBvc2l0aW9uU3RhcnQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChpbkNvbXBvc2l0aW9uIHx8ICFob3N0Lm9uQ29tcG9zaXRpb25TdGFydCB8fCBob3N0LiRyZWFkT25seSkgXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGluQ29tcG9zaXRpb24gPSB7fTtcbiAgICAgICAgaW5Db21wb3NpdGlvbi5jYW5VbmRvID0gaG9zdC5zZXNzaW9uLiR1bmRvTWFuYWdlcjtcbiAgICAgICAgaG9zdC5vbkNvbXBvc2l0aW9uU3RhcnQoKTtcbiAgICAgICAgc2V0VGltZW91dChvbkNvbXBvc2l0aW9uVXBkYXRlLCAwKTtcbiAgICAgICAgaG9zdC5vbihcIm1vdXNlZG93blwiLCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgICAgaWYgKGluQ29tcG9zaXRpb24uY2FuVW5kbyAmJiAhaG9zdC5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBob3N0Lmluc2VydChcIlwiKTtcbiAgICAgICAgICAgIGhvc3Quc2Vzc2lvbi5tYXJrVW5kb0dyb3VwKCk7XG4gICAgICAgICAgICBob3N0LnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGhvc3Quc2Vzc2lvbi5tYXJrVW5kb0dyb3VwKCk7XG4gICAgfTtcblxuICAgIHZhciBvbkNvbXBvc2l0aW9uVXBkYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghaW5Db21wb3NpdGlvbiB8fCAhaG9zdC5vbkNvbXBvc2l0aW9uVXBkYXRlIHx8IGhvc3QuJHJlYWRPbmx5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgdmFsID0gdGV4dC52YWx1ZS5yZXBsYWNlKC9cXHUyMDI4L2csIFwiXCIpO1xuICAgICAgICBpZiAoaW5Db21wb3NpdGlvbi5sYXN0VmFsdWUgPT09IHZhbCkgcmV0dXJuO1xuICAgICAgICBcbiAgICAgICAgaG9zdC5vbkNvbXBvc2l0aW9uVXBkYXRlKHZhbCk7XG4gICAgICAgIGlmIChpbkNvbXBvc2l0aW9uLmxhc3RWYWx1ZSlcbiAgICAgICAgICAgIGhvc3QudW5kbygpO1xuICAgICAgICBpZiAoaW5Db21wb3NpdGlvbi5jYW5VbmRvKVxuICAgICAgICAgICAgaW5Db21wb3NpdGlvbi5sYXN0VmFsdWUgPSB2YWw7XG4gICAgICAgIGlmIChpbkNvbXBvc2l0aW9uLmxhc3RWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIHIgPSBob3N0LnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuICAgICAgICAgICAgaG9zdC5pbnNlcnQoaW5Db21wb3NpdGlvbi5sYXN0VmFsdWUpO1xuICAgICAgICAgICAgaG9zdC5zZXNzaW9uLm1hcmtVbmRvR3JvdXAoKTtcbiAgICAgICAgICAgIGluQ29tcG9zaXRpb24ucmFuZ2UgPSBob3N0LnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuICAgICAgICAgICAgaG9zdC5zZWxlY3Rpb24uc2V0UmFuZ2Uocik7XG4gICAgICAgICAgICBob3N0LnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBvbkNvbXBvc2l0aW9uRW5kID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoIWhvc3Qub25Db21wb3NpdGlvbkVuZCB8fCBob3N0LiRyZWFkT25seSkgcmV0dXJuO1xuICAgICAgICB2YXIgYyA9IGluQ29tcG9zaXRpb247XG4gICAgICAgIGluQ29tcG9zaXRpb24gPSBmYWxzZTtcbiAgICAgICAgdmFyIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgIHZhciBzdHIgPSB0ZXh0LnZhbHVlLnJlcGxhY2UoL1xcdTIwMjgvZywgXCJcIik7XG4gICAgICAgICAgICBpZiAoaW5Db21wb3NpdGlvbilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBlbHNlIGlmIChzdHIgPT0gYy5sYXN0VmFsdWUpXG4gICAgICAgICAgICAgICAgcmVzZXRWYWx1ZSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAoIWMubGFzdFZhbHVlICYmIHN0cikge1xuICAgICAgICAgICAgICAgIHJlc2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICBzZW5kVGV4dChzdHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaW5wdXRIYW5kbGVyID0gZnVuY3Rpb24gY29tcG9zaXRpb25JbnB1dEhhbmRsZXIoc3RyKSB7XG4gICAgICAgICAgICBpZiAodGltZXIpXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUyMDI4L2csIFwiXCIpO1xuICAgICAgICAgICAgaWYgKHN0ciA9PSBjLmxhc3RWYWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIGlmIChjLmxhc3RWYWx1ZSAmJiB0aW1lcilcbiAgICAgICAgICAgICAgICBob3N0LnVuZG8oKTtcbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgIH07XG4gICAgICAgIGhvc3Qub25Db21wb3NpdGlvbkVuZCgpO1xuICAgICAgICBob3N0LnJlbW92ZUxpc3RlbmVyKFwibW91c2Vkb3duXCIsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICBpZiAoZS50eXBlID09IFwiY29tcG9zaXRpb25lbmRcIiAmJiBjLnJhbmdlKSB7XG4gICAgICAgICAgICBob3N0LnNlbGVjdGlvbi5zZXRSYW5nZShjLnJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmVlZHNPbklucHV0ID1cbiAgICAgICAgICAgICghIXVzZXJhZ2VudC5pc0Nocm9tZSAmJiB1c2VyYWdlbnQuaXNDaHJvbWUgPj0gNTMpIHx8XG4gICAgICAgICAgICAoISF1c2VyYWdlbnQuaXNXZWJLaXQgJiYgdXNlcmFnZW50LmlzV2ViS2l0ID49IDYwMyk7XG5cbiAgICAgICAgaWYgKG5lZWRzT25JbnB1dCkge1xuICAgICAgICAgIG9uSW5wdXQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgXG5cbiAgICB2YXIgc3luY0NvbXBvc2l0aW9uID0gbGFuZy5kZWxheWVkQ2FsbChvbkNvbXBvc2l0aW9uVXBkYXRlLCA1MCk7XG5cbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcImNvbXBvc2l0aW9uc3RhcnRcIiwgb25Db21wb3NpdGlvblN0YXJ0KTtcbiAgICBpZiAodXNlcmFnZW50LmlzR2Vja28pIHtcbiAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJ0ZXh0XCIsIGZ1bmN0aW9uKCl7c3luY0NvbXBvc2l0aW9uLnNjaGVkdWxlKCk7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJrZXl1cFwiLCBmdW5jdGlvbigpe3N5bmNDb21wb3NpdGlvbi5zY2hlZHVsZSgpO30pO1xuICAgICAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcImtleWRvd25cIiwgZnVuY3Rpb24oKXtzeW5jQ29tcG9zaXRpb24uc2NoZWR1bGUoKTt9KTtcbiAgICB9XG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJjb21wb3NpdGlvbmVuZFwiLCBvbkNvbXBvc2l0aW9uRW5kKTtcblxuICAgIHRoaXMuZ2V0RWxlbWVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRSZWFkT25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7XG4gICAgICAgdGV4dC5yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgIH07XG5cbiAgICB0aGlzLm9uQ29udGV4dE1lbnUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGFmdGVyQ29udGV4dE1lbnUgPSB0cnVlO1xuICAgICAgICByZXNldFNlbGVjdGlvbihob3N0LnNlbGVjdGlvbi5pc0VtcHR5KCkpO1xuICAgICAgICBob3N0Ll9lbWl0KFwibmF0aXZlY29udGV4dG1lbnVcIiwge3RhcmdldDogaG9zdCwgZG9tRXZlbnQ6IGV9KTtcbiAgICAgICAgdGhpcy5tb3ZlVG9Nb3VzZShlLCB0cnVlKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMubW92ZVRvTW91c2UgPSBmdW5jdGlvbihlLCBicmluZ1RvRnJvbnQpIHtcbiAgICAgICAgaWYgKCF0ZW1wU3R5bGUpXG4gICAgICAgICAgICB0ZW1wU3R5bGUgPSB0ZXh0LnN0eWxlLmNzc1RleHQ7XG4gICAgICAgIHRleHQuc3R5bGUuY3NzVGV4dCA9IChicmluZ1RvRnJvbnQgPyBcInotaW5kZXg6MTAwMDAwO1wiIDogXCJcIilcbiAgICAgICAgICAgICsgXCJoZWlnaHQ6XCIgKyB0ZXh0LnN0eWxlLmhlaWdodCArIFwiO1wiXG4gICAgICAgICAgICArICh1c2VyYWdlbnQuaXNJRSA/IFwib3BhY2l0eTowLjE7XCIgOiBcIlwiKTtcblxuICAgICAgICB2YXIgcmVjdCA9IGhvc3QuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB2YXIgc3R5bGUgPSBkb20uY29tcHV0ZWRTdHlsZShob3N0LmNvbnRhaW5lcik7XG4gICAgICAgIHZhciB0b3AgPSByZWN0LnRvcCArIChwYXJzZUludChzdHlsZS5ib3JkZXJUb3BXaWR0aCkgfHwgMCk7XG4gICAgICAgIHZhciBsZWZ0ID0gcmVjdC5sZWZ0ICsgKHBhcnNlSW50KHJlY3QuYm9yZGVyTGVmdFdpZHRoKSB8fCAwKTtcbiAgICAgICAgdmFyIG1heFRvcCA9IHJlY3QuYm90dG9tIC0gdG9wIC0gdGV4dC5jbGllbnRIZWlnaHQgLTI7XG4gICAgICAgIHZhciBtb3ZlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgdGV4dC5zdHlsZS5sZWZ0ID0gZS5jbGllbnRYIC0gbGVmdCAtIDIgKyBcInB4XCI7XG4gICAgICAgICAgICB0ZXh0LnN0eWxlLnRvcCA9IE1hdGgubWluKGUuY2xpZW50WSAtIHRvcCAtIDIsIG1heFRvcCkgKyBcInB4XCI7XG4gICAgICAgIH07IFxuICAgICAgICBtb3ZlKGUpO1xuXG4gICAgICAgIGlmIChlLnR5cGUgIT0gXCJtb3VzZWRvd25cIilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoaG9zdC5yZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IpXG4gICAgICAgICAgICBob3N0LnJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IG51bGw7XG5cbiAgICAgICAgY2xlYXJUaW1lb3V0KGNsb3NlVGltZW91dCk7XG4gICAgICAgIGlmICh1c2VyYWdlbnQuaXNXaW4pXG4gICAgICAgICAgICBldmVudC5jYXB0dXJlKGhvc3QuY29udGFpbmVyLCBtb3ZlLCBvbkNvbnRleHRNZW51Q2xvc2UpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uQ29udGV4dE1lbnVDbG9zZSA9IG9uQ29udGV4dE1lbnVDbG9zZTtcbiAgICB2YXIgY2xvc2VUaW1lb3V0O1xuICAgIGZ1bmN0aW9uIG9uQ29udGV4dE1lbnVDbG9zZSgpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGNsb3NlVGltZW91dCk7XG4gICAgICAgIGNsb3NlVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRlbXBTdHlsZSkge1xuICAgICAgICAgICAgICAgIHRleHQuc3R5bGUuY3NzVGV4dCA9IHRlbXBTdHlsZTtcbiAgICAgICAgICAgICAgICB0ZW1wU3R5bGUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChob3N0LnJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9zdC5yZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGhvc3QucmVuZGVyZXIuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIHZhciBvbkNvbnRleHRNZW51ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBob3N0LnRleHRJbnB1dC5vbkNvbnRleHRNZW51KGUpO1xuICAgICAgICBvbkNvbnRleHRNZW51Q2xvc2UoKTtcbiAgICB9O1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwibW91c2V1cFwiLCBvbkNvbnRleHRNZW51KTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcIm1vdXNlZG93blwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25Db250ZXh0TWVudUNsb3NlKCk7XG4gICAgfSk7XG4gICAgZXZlbnQuYWRkTGlzdGVuZXIoaG9zdC5yZW5kZXJlci5zY3JvbGxlciwgXCJjb250ZXh0bWVudVwiLCBvbkNvbnRleHRNZW51KTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcImNvbnRleHRtZW51XCIsIG9uQ29udGV4dE1lbnUpO1xufTtcblxuZXhwb3J0cy5UZXh0SW5wdXQgPSBUZXh0SW5wdXQ7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9tb3VzZS9kZWZhdWx0X2hhbmRsZXJzXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2RvbVwiLFwiYWNlL2xpYi9ldmVudFwiLFwiYWNlL2xpYi91c2VyYWdlbnRcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgZG9tID0gYWNlcXVpcmUoXCIuLi9saWIvZG9tXCIpO1xudmFyIGV2ZW50ID0gYWNlcXVpcmUoXCIuLi9saWIvZXZlbnRcIik7XG52YXIgdXNlcmFnZW50ID0gYWNlcXVpcmUoXCIuLi9saWIvdXNlcmFnZW50XCIpO1xuXG52YXIgRFJBR19PRkZTRVQgPSAwOyAvLyBwaXhlbHNcbnZhciBTQ1JPTExfQ09PTERPV05fVCA9IDI1MDsgLy8gbWlsbGlzZWNvbmRzXG5cbmZ1bmN0aW9uIERlZmF1bHRIYW5kbGVycyhtb3VzZUhhbmRsZXIpIHtcbiAgICBtb3VzZUhhbmRsZXIuJGNsaWNrU2VsZWN0aW9uID0gbnVsbDtcblxuICAgIHZhciBlZGl0b3IgPSBtb3VzZUhhbmRsZXIuZWRpdG9yO1xuICAgIGVkaXRvci5zZXREZWZhdWx0SGFuZGxlcihcIm1vdXNlZG93blwiLCB0aGlzLm9uTW91c2VEb3duLmJpbmQobW91c2VIYW5kbGVyKSk7XG4gICAgZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKFwiZGJsY2xpY2tcIiwgdGhpcy5vbkRvdWJsZUNsaWNrLmJpbmQobW91c2VIYW5kbGVyKSk7XG4gICAgZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKFwidHJpcGxlY2xpY2tcIiwgdGhpcy5vblRyaXBsZUNsaWNrLmJpbmQobW91c2VIYW5kbGVyKSk7XG4gICAgZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKFwicXVhZGNsaWNrXCIsIHRoaXMub25RdWFkQ2xpY2suYmluZChtb3VzZUhhbmRsZXIpKTtcbiAgICBlZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoXCJtb3VzZXdoZWVsXCIsIHRoaXMub25Nb3VzZVdoZWVsLmJpbmQobW91c2VIYW5kbGVyKSk7XG4gICAgZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKFwidG91Y2htb3ZlXCIsIHRoaXMub25Ub3VjaE1vdmUuYmluZChtb3VzZUhhbmRsZXIpKTtcblxuICAgIHZhciBleHBvcnRzID0gW1wic2VsZWN0XCIsIFwic3RhcnRTZWxlY3RcIiwgXCJzZWxlY3RFbmRcIiwgXCJzZWxlY3RBbGxFbmRcIiwgXCJzZWxlY3RCeVdvcmRzRW5kXCIsXG4gICAgICAgIFwic2VsZWN0QnlMaW5lc0VuZFwiLCBcImRyYWdXYWl0XCIsIFwiZHJhZ1dhaXRFbmRcIiwgXCJmb2N1c1dhaXRcIl07XG5cbiAgICBleHBvcnRzLmZvckVhY2goZnVuY3Rpb24oeCkge1xuICAgICAgICBtb3VzZUhhbmRsZXJbeF0gPSB0aGlzW3hdO1xuICAgIH0sIHRoaXMpO1xuXG4gICAgbW91c2VIYW5kbGVyLnNlbGVjdEJ5TGluZXMgPSB0aGlzLmV4dGVuZFNlbGVjdGlvbkJ5LmJpbmQobW91c2VIYW5kbGVyLCBcImdldExpbmVSYW5nZVwiKTtcbiAgICBtb3VzZUhhbmRsZXIuc2VsZWN0QnlXb3JkcyA9IHRoaXMuZXh0ZW5kU2VsZWN0aW9uQnkuYmluZChtb3VzZUhhbmRsZXIsIFwiZ2V0V29yZFJhbmdlXCIpO1xufVxuXG4oZnVuY3Rpb24oKSB7XG5cbiAgICB0aGlzLm9uTW91c2VEb3duID0gZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgdmFyIGluU2VsZWN0aW9uID0gZXYuaW5TZWxlY3Rpb24oKTtcbiAgICAgICAgdmFyIHBvcyA9IGV2LmdldERvY3VtZW50UG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5tb3VzZWRvd25FdmVudCA9IGV2O1xuICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG5cbiAgICAgICAgdmFyIGJ1dHRvbiA9IGV2LmdldEJ1dHRvbigpO1xuICAgICAgICBpZiAoYnV0dG9uICE9PSAwKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvblJhbmdlLmlzRW1wdHkoKTtcbiAgICAgICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmcrKztcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25FbXB0eSB8fCBidXR0b24gPT0gMSlcbiAgICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKHBvcyk7XG4gICAgICAgICAgICBlZGl0b3IuJGJsb2NrU2Nyb2xsaW5nLS07XG4gICAgICAgICAgICBpZiAoYnV0dG9uID09IDIpIHtcbiAgICAgICAgICAgICAgICBlZGl0b3IudGV4dElucHV0Lm9uQ29udGV4dE1lbnUoZXYuZG9tRXZlbnQpO1xuICAgICAgICAgICAgICAgIGlmICghdXNlcmFnZW50LmlzTW96aWxsYSlcbiAgICAgICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubW91c2Vkb3duRXZlbnQudGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIGlmIChpblNlbGVjdGlvbiAmJiAhZWRpdG9yLmlzRm9jdXNlZCgpKSB7XG4gICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiRmb2N1c1RpbW91dCAmJiAhdGhpcy4kY2xpY2tTZWxlY3Rpb24gJiYgIWVkaXRvci5pbk11bHRpU2VsZWN0TW9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXCJmb2N1c1dhaXRcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXB0dXJlTW91c2UoZXYpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FwdHVyZU1vdXNlKGV2KTtcbiAgICAgICAgdGhpcy5zdGFydFNlbGVjdChwb3MsIGV2LmRvbUV2ZW50Ll9jbGlja3MgPiAxKTtcbiAgICAgICAgcmV0dXJuIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfTtcblxuICAgIHRoaXMuc3RhcnRTZWxlY3QgPSBmdW5jdGlvbihwb3MsIHdhaXRGb3JDbGlja1NlbGVjdGlvbikge1xuICAgICAgICBwb3MgPSBwb3MgfHwgdGhpcy5lZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXModGhpcy54LCB0aGlzLnkpO1xuICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmcrKztcbiAgICAgICAgaWYgKHRoaXMubW91c2Vkb3duRXZlbnQuZ2V0U2hpZnRLZXkoKSlcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0VG9Qb3NpdGlvbihwb3MpO1xuICAgICAgICBlbHNlIGlmICghd2FpdEZvckNsaWNrU2VsZWN0aW9uKVxuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlVG9Qb3NpdGlvbihwb3MpO1xuICAgICAgICBpZiAoIXdhaXRGb3JDbGlja1NlbGVjdGlvbilcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0KCk7XG4gICAgICAgIGlmIChlZGl0b3IucmVuZGVyZXIuc2Nyb2xsZXIuc2V0Q2FwdHVyZSkge1xuICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbGVyLnNldENhcHR1cmUoKTtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3Iuc2V0U3R5bGUoXCJhY2Vfc2VsZWN0aW5nXCIpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKFwic2VsZWN0XCIpO1xuICAgICAgICBlZGl0b3IuJGJsb2NrU2Nyb2xsaW5nLS07XG4gICAgfTtcblxuICAgIHRoaXMuc2VsZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhbmNob3IsIGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHRoaXMueCwgdGhpcy55KTtcbiAgICAgICAgZWRpdG9yLiRibG9ja1Njcm9sbGluZysrO1xuICAgICAgICBpZiAodGhpcy4kY2xpY2tTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBjbXAgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5jb21wYXJlUG9pbnQoY3Vyc29yKTtcblxuICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xuICAgICAgICAgICAgICAgIGFuY2hvciA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmVuZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDEpIHtcbiAgICAgICAgICAgICAgICBhbmNob3IgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5zdGFydDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIG9yaWVudGVkUmFuZ2UgPSBjYWxjUmFuZ2VPcmllbnRhdGlvbih0aGlzLiRjbGlja1NlbGVjdGlvbiwgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICBjdXJzb3IgPSBvcmllbnRlZFJhbmdlLmN1cnNvcjtcbiAgICAgICAgICAgICAgICBhbmNob3IgPSBvcmllbnRlZFJhbmdlLmFuY2hvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uQW5jaG9yKGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0VG9Qb3NpdGlvbihjdXJzb3IpO1xuICAgICAgICBlZGl0b3IuJGJsb2NrU2Nyb2xsaW5nLS07XG4gICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpO1xuICAgIH07XG5cbiAgICB0aGlzLmV4dGVuZFNlbGVjdGlvbkJ5ID0gZnVuY3Rpb24odW5pdE5hbWUpIHtcbiAgICAgICAgdmFyIGFuY2hvciwgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXModGhpcy54LCB0aGlzLnkpO1xuICAgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uW3VuaXROYW1lXShjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTtcbiAgICAgICAgZWRpdG9yLiRibG9ja1Njcm9sbGluZysrO1xuICAgICAgICBpZiAodGhpcy4kY2xpY2tTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBjbXBTdGFydCA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmNvbXBhcmVQb2ludChyYW5nZS5zdGFydCk7XG4gICAgICAgICAgICB2YXIgY21wRW5kID0gdGhpcy4kY2xpY2tTZWxlY3Rpb24uY29tcGFyZVBvaW50KHJhbmdlLmVuZCk7XG5cbiAgICAgICAgICAgIGlmIChjbXBTdGFydCA9PSAtMSAmJiBjbXBFbmQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGFuY2hvciA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmVuZDtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyAhPSBjdXJzb3Iucm93IHx8IHJhbmdlLmVuZC5jb2x1bW4gIT0gY3Vyc29yLmNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcEVuZCA9PSAxICYmIGNtcFN0YXJ0ID49IDApIHtcbiAgICAgICAgICAgICAgICBhbmNob3IgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5zdGFydDtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ICE9IGN1cnNvci5yb3cgfHwgcmFuZ2Uuc3RhcnQuY29sdW1uICE9IGN1cnNvci5jb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IHJhbmdlLmVuZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wU3RhcnQgPT0gLTEgJiYgY21wRW5kID09IDEpIHtcbiAgICAgICAgICAgICAgICBjdXJzb3IgPSByYW5nZS5lbmQ7XG4gICAgICAgICAgICAgICAgYW5jaG9yID0gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBvcmllbnRlZFJhbmdlID0gY2FsY1JhbmdlT3JpZW50YXRpb24odGhpcy4kY2xpY2tTZWxlY3Rpb24sIGN1cnNvcik7XG4gICAgICAgICAgICAgICAgY3Vyc29yID0gb3JpZW50ZWRSYW5nZS5jdXJzb3I7XG4gICAgICAgICAgICAgICAgYW5jaG9yID0gb3JpZW50ZWRSYW5nZS5hbmNob3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFNlbGVjdGlvbkFuY2hvcihhbmNob3Iucm93LCBhbmNob3IuY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdFRvUG9zaXRpb24oY3Vyc29yKTtcbiAgICAgICAgZWRpdG9yLiRibG9ja1Njcm9sbGluZy0tO1xuICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZWxlY3RFbmQgPVxuICAgIHRoaXMuc2VsZWN0QWxsRW5kID1cbiAgICB0aGlzLnNlbGVjdEJ5V29yZHNFbmQgPVxuICAgIHRoaXMuc2VsZWN0QnlMaW5lc0VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRjbGlja1NlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuZWRpdG9yLnVuc2V0U3R5bGUoXCJhY2Vfc2VsZWN0aW5nXCIpO1xuICAgICAgICBpZiAodGhpcy5lZGl0b3IucmVuZGVyZXIuc2Nyb2xsZXIucmVsZWFzZUNhcHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNjcm9sbGVyLnJlbGVhc2VDYXB0dXJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5mb2N1c1dhaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGRpc3RhbmNlID0gY2FsY0Rpc3RhbmNlKHRoaXMubW91c2Vkb3duRXZlbnQueCwgdGhpcy5tb3VzZWRvd25FdmVudC55LCB0aGlzLngsIHRoaXMueSk7XG4gICAgICAgIHZhciB0aW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICBpZiAoZGlzdGFuY2UgPiBEUkFHX09GRlNFVCB8fCB0aW1lIC0gdGhpcy5tb3VzZWRvd25FdmVudC50aW1lID4gdGhpcy4kZm9jdXNUaW1vdXQpXG4gICAgICAgICAgICB0aGlzLnN0YXJ0U2VsZWN0KHRoaXMubW91c2Vkb3duRXZlbnQuZ2V0RG9jdW1lbnRQb3NpdGlvbigpKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkRvdWJsZUNsaWNrID0gZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgdmFyIHBvcyA9IGV2LmdldERvY3VtZW50UG9zaXRpb24oKTtcbiAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uO1xuXG4gICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0QnJhY2tldFJhbmdlKHBvcyk7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbi0tO1xuICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXCJzZWxlY3RcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByYW5nZSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0V29yZFJhbmdlKHBvcy5yb3csIHBvcy5jb2x1bW4pO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShcInNlbGVjdEJ5V29yZHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kY2xpY2tTZWxlY3Rpb24gPSByYW5nZTtcbiAgICAgICAgdGhpcy5zZWxlY3QoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vblRyaXBsZUNsaWNrID0gZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgdmFyIHBvcyA9IGV2LmdldERvY3VtZW50UG9zaXRpb24oKTtcbiAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXCJzZWxlY3RCeUxpbmVzXCIpO1xuICAgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgaWYgKHJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgcmFuZ2UuY29udGFpbnMocG9zLnJvdywgcG9zLmNvbHVtbikpIHtcbiAgICAgICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2UocmFuZ2Uuc3RhcnQucm93KTtcbiAgICAgICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0aW9uLmVuZCA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0TGluZVJhbmdlKHJhbmdlLmVuZC5yb3cpLmVuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2UocG9zLnJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3QoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vblF1YWRDbGljayA9IGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcblxuICAgICAgICBlZGl0b3Iuc2VsZWN0QWxsKCk7XG4gICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXCJzZWxlY3RBbGxcIik7XG4gICAgfTtcblxuICAgIHRoaXMub25Nb3VzZVdoZWVsID0gZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgaWYgKGV2LmdldEFjY2VsS2V5KCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChldi5nZXRTaGlmdEtleSgpICYmIGV2LndoZWVsWSAmJiAhZXYud2hlZWxYKSB7XG4gICAgICAgICAgICBldi53aGVlbFggPSBldi53aGVlbFk7XG4gICAgICAgICAgICBldi53aGVlbFkgPSAwO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG5cbiAgICAgICAgaWYgKCF0aGlzLiRsYXN0U2Nyb2xsKVxuICAgICAgICAgICAgdGhpcy4kbGFzdFNjcm9sbCA9IHsgdDogMCwgdng6IDAsIHZ5OiAwLCBhbGxvd2VkOiAwIH07XG5cbiAgICAgICAgdmFyIHByZXZTY3JvbGwgPSB0aGlzLiRsYXN0U2Nyb2xsO1xuICAgICAgICB2YXIgdCA9IGV2LmRvbUV2ZW50LnRpbWVTdGFtcDtcbiAgICAgICAgdmFyIGR0ID0gdCAtIHByZXZTY3JvbGwudDtcbiAgICAgICAgdmFyIHZ4ID0gZXYud2hlZWxYIC8gZHQ7XG4gICAgICAgIHZhciB2eSA9IGV2LndoZWVsWSAvIGR0O1xuICAgICAgICBpZiAoZHQgPCBTQ1JPTExfQ09PTERPV05fVCkge1xuICAgICAgICAgICAgdnggPSAodnggKyBwcmV2U2Nyb2xsLnZ4KSAvIDI7XG4gICAgICAgICAgICB2eSA9ICh2eSArIHByZXZTY3JvbGwudnkpIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBNYXRoLmFicyh2eCAvIHZ5KTtcblxuICAgICAgICB2YXIgY2FuU2Nyb2xsID0gZmFsc2U7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPj0gMSAmJiBlZGl0b3IucmVuZGVyZXIuaXNTY3JvbGxhYmxlQnkoZXYud2hlZWxYICogZXYuc3BlZWQsIDApKVxuICAgICAgICAgICAgY2FuU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA8PSAxICYmIGVkaXRvci5yZW5kZXJlci5pc1Njcm9sbGFibGVCeSgwLCBldi53aGVlbFkgKiBldi5zcGVlZCkpXG4gICAgICAgICAgICBjYW5TY3JvbGwgPSB0cnVlO1xuXG4gICAgICAgIGlmIChjYW5TY3JvbGwpIHtcbiAgICAgICAgICAgIHByZXZTY3JvbGwuYWxsb3dlZCA9IHQ7XG4gICAgICAgIH0gZWxzZSBpZiAodCAtIHByZXZTY3JvbGwuYWxsb3dlZCA8IFNDUk9MTF9DT09MRE9XTl9UKSB7XG4gICAgICAgICAgICB2YXIgaXNTbG93ZXIgPSBNYXRoLmFicyh2eCkgPD0gMS4xICogTWF0aC5hYnMocHJldlNjcm9sbC52eClcbiAgICAgICAgICAgICAgICAmJiBNYXRoLmFicyh2eSkgPD0gMS4xICogTWF0aC5hYnMocHJldlNjcm9sbC52eSk7XG4gICAgICAgICAgICBpZiAoaXNTbG93ZXIpIHtcbiAgICAgICAgICAgICAgICBjYW5TY3JvbGwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByZXZTY3JvbGwuYWxsb3dlZCA9IHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcmV2U2Nyb2xsLmFsbG93ZWQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJldlNjcm9sbC50ID0gdDtcbiAgICAgICAgcHJldlNjcm9sbC52eCA9IHZ4O1xuICAgICAgICBwcmV2U2Nyb2xsLnZ5ID0gdnk7XG5cbiAgICAgICAgaWYgKGNhblNjcm9sbCkge1xuICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEJ5KGV2LndoZWVsWCAqIGV2LnNwZWVkLCBldi53aGVlbFkgKiBldi5zcGVlZCk7XG4gICAgICAgICAgICByZXR1cm4gZXYuc3RvcCgpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBmdW5jdGlvbihldikge1xuICAgICAgICB0aGlzLmVkaXRvci5fZW1pdChcIm1vdXNld2hlZWxcIiwgZXYpO1xuICAgIH07XG5cbn0pLmNhbGwoRGVmYXVsdEhhbmRsZXJzLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuRGVmYXVsdEhhbmRsZXJzID0gRGVmYXVsdEhhbmRsZXJzO1xuXG5mdW5jdGlvbiBjYWxjRGlzdGFuY2UoYXgsIGF5LCBieCwgYnkpIHtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KGJ4IC0gYXgsIDIpICsgTWF0aC5wb3coYnkgLSBheSwgMikpO1xufVxuXG5mdW5jdGlvbiBjYWxjUmFuZ2VPcmllbnRhdGlvbihyYW5nZSwgY3Vyc29yKSB7XG4gICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PSByYW5nZS5lbmQucm93KVxuICAgICAgICB2YXIgY21wID0gMiAqIGN1cnNvci5jb2x1bW4gLSByYW5nZS5zdGFydC5jb2x1bW4gLSByYW5nZS5lbmQuY29sdW1uO1xuICAgIGVsc2UgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PSByYW5nZS5lbmQucm93IC0gMSAmJiAhcmFuZ2Uuc3RhcnQuY29sdW1uICYmICFyYW5nZS5lbmQuY29sdW1uKVxuICAgICAgICB2YXIgY21wID0gY3Vyc29yLmNvbHVtbiAtIDQ7XG4gICAgZWxzZVxuICAgICAgICB2YXIgY21wID0gMiAqIGN1cnNvci5yb3cgLSByYW5nZS5zdGFydC5yb3cgLSByYW5nZS5lbmQucm93O1xuXG4gICAgaWYgKGNtcCA8IDApXG4gICAgICAgIHJldHVybiB7Y3Vyc29yOiByYW5nZS5zdGFydCwgYW5jaG9yOiByYW5nZS5lbmR9O1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHtjdXJzb3I6IHJhbmdlLmVuZCwgYW5jaG9yOiByYW5nZS5zdGFydH07XG59XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL3Rvb2x0aXBcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvb29wXCIsXCJhY2UvbGliL2RvbVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBvb3AgPSBhY2VxdWlyZShcIi4vbGliL29vcFwiKTtcbnZhciBkb20gPSBhY2VxdWlyZShcIi4vbGliL2RvbVwiKTtcbmZ1bmN0aW9uIFRvb2x0aXAgKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuJGVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuJHBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xufVxuXG4oZnVuY3Rpb24oKSB7XG4gICAgdGhpcy4kaW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRlbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuY2xhc3NOYW1lID0gXCJhY2VfdG9vbHRpcFwiO1xuICAgICAgICB0aGlzLiRlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgdGhpcy4kcGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLiRlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGVsZW1lbnQ7XG4gICAgfTtcbiAgICB0aGlzLmdldEVsZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGVsZW1lbnQgfHwgdGhpcy4kaW5pdCgpO1xuICAgIH07XG4gICAgdGhpcy5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgICBkb20uc2V0SW5uZXJUZXh0KHRoaXMuZ2V0RWxlbWVudCgpLCB0ZXh0KTtcbiAgICB9O1xuICAgIHRoaXMuc2V0SHRtbCA9IGZ1bmN0aW9uKGh0bWwpIHtcbiAgICAgICAgdGhpcy5nZXRFbGVtZW50KCkuaW5uZXJIVE1MID0gaHRtbDtcbiAgICB9O1xuICAgIHRoaXMuc2V0UG9zaXRpb24gPSBmdW5jdGlvbih4LCB5KSB7XG4gICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpLnN0eWxlLmxlZnQgPSB4ICsgXCJweFwiO1xuICAgICAgICB0aGlzLmdldEVsZW1lbnQoKS5zdHlsZS50b3AgPSB5ICsgXCJweFwiO1xuICAgIH07XG4gICAgdGhpcy5zZXRDbGFzc05hbWUgPSBmdW5jdGlvbihjbGFzc05hbWUpIHtcbiAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZ2V0RWxlbWVudCgpLCBjbGFzc05hbWUpO1xuICAgIH07XG4gICAgdGhpcy5zaG93ID0gZnVuY3Rpb24odGV4dCwgeCwgeSkge1xuICAgICAgICBpZiAodGV4dCAhPSBudWxsKVxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0KHRleHQpO1xuICAgICAgICBpZiAoeCAhPSBudWxsICYmIHkgIT0gbnVsbClcbiAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5oaWRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5nZXRFbGVtZW50KCkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRIZWlnaHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudCgpLm9mZnNldEhlaWdodDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0V2lkdGggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudCgpLm9mZnNldFdpZHRoO1xuICAgIH07XG5cbiAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnQgJiYgdGhpcy4kZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG59KS5jYWxsKFRvb2x0aXAucHJvdG90eXBlKTtcblxuZXhwb3J0cy5Ub29sdGlwID0gVG9vbHRpcDtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL21vdXNlL2RlZmF1bHRfZ3V0dGVyX2hhbmRsZXJcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvZG9tXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9ldmVudFwiLFwiYWNlL3Rvb2x0aXBcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xudmFyIGRvbSA9IGFjZXF1aXJlKFwiLi4vbGliL2RvbVwiKTtcbnZhciBvb3AgPSBhY2VxdWlyZShcIi4uL2xpYi9vb3BcIik7XG52YXIgZXZlbnQgPSBhY2VxdWlyZShcIi4uL2xpYi9ldmVudFwiKTtcbnZhciBUb29sdGlwID0gYWNlcXVpcmUoXCIuLi90b29sdGlwXCIpLlRvb2x0aXA7XG5cbmZ1bmN0aW9uIEd1dHRlckhhbmRsZXIobW91c2VIYW5kbGVyKSB7XG4gICAgdmFyIGVkaXRvciA9IG1vdXNlSGFuZGxlci5lZGl0b3I7XG4gICAgdmFyIGd1dHRlciA9IGVkaXRvci5yZW5kZXJlci4kZ3V0dGVyTGF5ZXI7XG4gICAgdmFyIHRvb2x0aXAgPSBuZXcgR3V0dGVyVG9vbHRpcChlZGl0b3IuY29udGFpbmVyKTtcblxuICAgIG1vdXNlSGFuZGxlci5lZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoXCJndXR0ZXJtb3VzZWRvd25cIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoIWVkaXRvci5pc0ZvY3VzZWQoKSB8fCBlLmdldEJ1dHRvbigpICE9IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBndXR0ZXJSZWdpb24gPSBndXR0ZXIuZ2V0UmVnaW9uKGUpO1xuXG4gICAgICAgIGlmIChndXR0ZXJSZWdpb24gPT0gXCJmb2xkV2lkZ2V0c1wiKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciByb3cgPSBlLmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7XG4gICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3Iuc2Vzc2lvbi5zZWxlY3Rpb247XG5cbiAgICAgICAgaWYgKGUuZ2V0U2hpZnRLZXkoKSlcbiAgICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3RUbyhyb3csIDApO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChlLmRvbUV2ZW50LmRldGFpbCA9PSAyKSB7XG4gICAgICAgICAgICAgICAgZWRpdG9yLnNlbGVjdEFsbCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtb3VzZUhhbmRsZXIuJGNsaWNrU2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2Uocm93KTtcbiAgICAgICAgfVxuICAgICAgICBtb3VzZUhhbmRsZXIuc2V0U3RhdGUoXCJzZWxlY3RCeUxpbmVzXCIpO1xuICAgICAgICBtb3VzZUhhbmRsZXIuY2FwdHVyZU1vdXNlKGUpO1xuICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0pO1xuXG5cbiAgICB2YXIgdG9vbHRpcFRpbWVvdXQsIG1vdXNlRXZlbnQsIHRvb2x0aXBBbm5vdGF0aW9uO1xuXG4gICAgZnVuY3Rpb24gc2hvd1Rvb2x0aXAoKSB7XG4gICAgICAgIHZhciByb3cgPSBtb3VzZUV2ZW50LmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7XG4gICAgICAgIHZhciBhbm5vdGF0aW9uID0gZ3V0dGVyLiRhbm5vdGF0aW9uc1tyb3ddO1xuICAgICAgICBpZiAoIWFubm90YXRpb24pXG4gICAgICAgICAgICByZXR1cm4gaGlkZVRvb2x0aXAoKTtcblxuICAgICAgICB2YXIgbWF4Um93ID0gZWRpdG9yLnNlc3Npb24uZ2V0TGVuZ3RoKCk7XG4gICAgICAgIGlmIChyb3cgPT0gbWF4Um93KSB7XG4gICAgICAgICAgICB2YXIgc2NyZWVuUm93ID0gZWRpdG9yLnJlbmRlcmVyLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcygwLCBtb3VzZUV2ZW50LnkpLnJvdztcbiAgICAgICAgICAgIHZhciBwb3MgPSBtb3VzZUV2ZW50LiRwb3M7XG4gICAgICAgICAgICBpZiAoc2NyZWVuUm93ID4gZWRpdG9yLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblJvdyhwb3Mucm93LCBwb3MuY29sdW1uKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaGlkZVRvb2x0aXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b29sdGlwQW5ub3RhdGlvbiA9PSBhbm5vdGF0aW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0b29sdGlwQW5ub3RhdGlvbiA9IGFubm90YXRpb24udGV4dC5qb2luKFwiPGJyLz5cIik7XG5cbiAgICAgICAgdG9vbHRpcC5zZXRIdG1sKHRvb2x0aXBBbm5vdGF0aW9uKTtcbiAgICAgICAgdG9vbHRpcC5zaG93KCk7XG4gICAgICAgIGVkaXRvci5fc2lnbmFsKFwic2hvd0d1dHRlclRvb2x0aXBcIiwgdG9vbHRpcCk7XG4gICAgICAgIGVkaXRvci5vbihcIm1vdXNld2hlZWxcIiwgaGlkZVRvb2x0aXApO1xuXG4gICAgICAgIGlmIChtb3VzZUhhbmRsZXIuJHRvb2x0aXBGb2xsb3dzTW91c2UpIHtcbiAgICAgICAgICAgIG1vdmVUb29sdGlwKG1vdXNlRXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGd1dHRlckVsZW1lbnQgPSBtb3VzZUV2ZW50LmRvbUV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgIHZhciByZWN0ID0gZ3V0dGVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHZhciBzdHlsZSA9IHRvb2x0aXAuZ2V0RWxlbWVudCgpLnN0eWxlO1xuICAgICAgICAgICAgc3R5bGUubGVmdCA9IHJlY3QucmlnaHQgKyBcInB4XCI7XG4gICAgICAgICAgICBzdHlsZS50b3AgPSByZWN0LmJvdHRvbSArIFwicHhcIjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhpZGVUb29sdGlwKCkge1xuICAgICAgICBpZiAodG9vbHRpcFRpbWVvdXQpXG4gICAgICAgICAgICB0b29sdGlwVGltZW91dCA9IGNsZWFyVGltZW91dCh0b29sdGlwVGltZW91dCk7XG4gICAgICAgIGlmICh0b29sdGlwQW5ub3RhdGlvbikge1xuICAgICAgICAgICAgdG9vbHRpcC5oaWRlKCk7XG4gICAgICAgICAgICB0b29sdGlwQW5ub3RhdGlvbiA9IG51bGw7XG4gICAgICAgICAgICBlZGl0b3IuX3NpZ25hbChcImhpZGVHdXR0ZXJUb29sdGlwXCIsIHRvb2x0aXApO1xuICAgICAgICAgICAgZWRpdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXdoZWVsXCIsIGhpZGVUb29sdGlwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdmVUb29sdGlwKGUpIHtcbiAgICAgICAgdG9vbHRpcC5zZXRQb3NpdGlvbihlLngsIGUueSk7XG4gICAgfVxuXG4gICAgbW91c2VIYW5kbGVyLmVkaXRvci5zZXREZWZhdWx0SGFuZGxlcihcImd1dHRlcm1vdXNlbW92ZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSBlLmRvbUV2ZW50LnRhcmdldCB8fCBlLmRvbUV2ZW50LnNyY0VsZW1lbnQ7XG4gICAgICAgIGlmIChkb20uaGFzQ3NzQ2xhc3ModGFyZ2V0LCBcImFjZV9mb2xkLXdpZGdldFwiKSlcbiAgICAgICAgICAgIHJldHVybiBoaWRlVG9vbHRpcCgpO1xuXG4gICAgICAgIGlmICh0b29sdGlwQW5ub3RhdGlvbiAmJiBtb3VzZUhhbmRsZXIuJHRvb2x0aXBGb2xsb3dzTW91c2UpXG4gICAgICAgICAgICBtb3ZlVG9vbHRpcChlKTtcblxuICAgICAgICBtb3VzZUV2ZW50ID0gZTtcbiAgICAgICAgaWYgKHRvb2x0aXBUaW1lb3V0KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0b29sdGlwVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0b29sdGlwVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICBpZiAobW91c2VFdmVudCAmJiAhbW91c2VIYW5kbGVyLmlzTW91c2VQcmVzc2VkKVxuICAgICAgICAgICAgICAgIHNob3dUb29sdGlwKCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgaGlkZVRvb2x0aXAoKTtcbiAgICAgICAgfSwgNTApO1xuICAgIH0pO1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIoZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXIsIFwibW91c2VvdXRcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICBtb3VzZUV2ZW50ID0gbnVsbDtcbiAgICAgICAgaWYgKCF0b29sdGlwQW5ub3RhdGlvbiB8fCB0b29sdGlwVGltZW91dClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0b29sdGlwVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0b29sdGlwVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICBoaWRlVG9vbHRpcCgpO1xuICAgICAgICB9LCA1MCk7XG4gICAgfSk7XG4gICAgXG4gICAgZWRpdG9yLm9uKFwiY2hhbmdlU2Vzc2lvblwiLCBoaWRlVG9vbHRpcCk7XG59XG5cbmZ1bmN0aW9uIEd1dHRlclRvb2x0aXAocGFyZW50Tm9kZSkge1xuICAgIFRvb2x0aXAuY2FsbCh0aGlzLCBwYXJlbnROb2RlKTtcbn1cblxub29wLmluaGVyaXRzKEd1dHRlclRvb2x0aXAsIFRvb2x0aXApO1xuXG4oZnVuY3Rpb24oKXtcbiAgICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24oeCwgeSkge1xuICAgICAgICB2YXIgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgIHZhciB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRIZWlnaHQoKTtcbiAgICAgICAgeCArPSAxNTtcbiAgICAgICAgeSArPSAxNTtcbiAgICAgICAgaWYgKHggKyB3aWR0aCA+IHdpbmRvd1dpZHRoKSB7XG4gICAgICAgICAgICB4IC09ICh4ICsgd2lkdGgpIC0gd2luZG93V2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHkgKyBoZWlnaHQgPiB3aW5kb3dIZWlnaHQpIHtcbiAgICAgICAgICAgIHkgLT0gMjAgKyBoZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgVG9vbHRpcC5wcm90b3R5cGUuc2V0UG9zaXRpb24uY2FsbCh0aGlzLCB4LCB5KTtcbiAgICB9O1xuXG59KS5jYWxsKEd1dHRlclRvb2x0aXAucHJvdG90eXBlKTtcblxuXG5cbmV4cG9ydHMuR3V0dGVySGFuZGxlciA9IEd1dHRlckhhbmRsZXI7XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL21vdXNlL21vdXNlX2V2ZW50XCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2V2ZW50XCIsXCJhY2UvbGliL3VzZXJhZ2VudFwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBldmVudCA9IGFjZXF1aXJlKFwiLi4vbGliL2V2ZW50XCIpO1xudmFyIHVzZXJhZ2VudCA9IGFjZXF1aXJlKFwiLi4vbGliL3VzZXJhZ2VudFwiKTtcbnZhciBNb3VzZUV2ZW50ID0gZXhwb3J0cy5Nb3VzZUV2ZW50ID0gZnVuY3Rpb24oZG9tRXZlbnQsIGVkaXRvcikge1xuICAgIHRoaXMuZG9tRXZlbnQgPSBkb21FdmVudDtcbiAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgICBcbiAgICB0aGlzLnggPSB0aGlzLmNsaWVudFggPSBkb21FdmVudC5jbGllbnRYO1xuICAgIHRoaXMueSA9IHRoaXMuY2xpZW50WSA9IGRvbUV2ZW50LmNsaWVudFk7XG5cbiAgICB0aGlzLiRwb3MgPSBudWxsO1xuICAgIHRoaXMuJGluU2VsZWN0aW9uID0gbnVsbDtcbiAgICBcbiAgICB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xufTtcblxuKGZ1bmN0aW9uKCkgeyAgXG4gICAgXG4gICAgdGhpcy5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKHRoaXMuZG9tRXZlbnQpO1xuICAgICAgICB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KHRoaXMuZG9tRXZlbnQpO1xuICAgICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5zdG9wID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0RG9jdW1lbnRQb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy4kcG9zKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHBvcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuJHBvcyA9IHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHRoaXMuY2xpZW50WCwgdGhpcy5jbGllbnRZKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBvcztcbiAgICB9O1xuICAgIHRoaXMuaW5TZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuJGluU2VsZWN0aW9uICE9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGluU2VsZWN0aW9uO1xuICAgICAgICAgICAgXG4gICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgXG5cbiAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb25SYW5nZS5pc0VtcHR5KCkpXG4gICAgICAgICAgICB0aGlzLiRpblNlbGVjdGlvbiA9IGZhbHNlO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwb3MgPSB0aGlzLmdldERvY3VtZW50UG9zaXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuJGluU2VsZWN0aW9uID0gc2VsZWN0aW9uUmFuZ2UuY29udGFpbnMocG9zLnJvdywgcG9zLmNvbHVtbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy4kaW5TZWxlY3Rpb247XG4gICAgfTtcbiAgICB0aGlzLmdldEJ1dHRvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZXZlbnQuZ2V0QnV0dG9uKHRoaXMuZG9tRXZlbnQpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTaGlmdEtleSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb21FdmVudC5zaGlmdEtleTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuZ2V0QWNjZWxLZXkgPSB1c2VyYWdlbnQuaXNNYWNcbiAgICAgICAgPyBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZG9tRXZlbnQubWV0YUtleTsgfVxuICAgICAgICA6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5kb21FdmVudC5jdHJsS2V5OyB9O1xuICAgIFxufSkuY2FsbChNb3VzZUV2ZW50LnByb3RvdHlwZSk7XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL21vdXNlL2RyYWdkcm9wX2hhbmRsZXJcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvZG9tXCIsXCJhY2UvbGliL2V2ZW50XCIsXCJhY2UvbGliL3VzZXJhZ2VudFwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBkb20gPSBhY2VxdWlyZShcIi4uL2xpYi9kb21cIik7XG52YXIgZXZlbnQgPSBhY2VxdWlyZShcIi4uL2xpYi9ldmVudFwiKTtcbnZhciB1c2VyYWdlbnQgPSBhY2VxdWlyZShcIi4uL2xpYi91c2VyYWdlbnRcIik7XG5cbnZhciBBVVRPU0NST0xMX0RFTEFZID0gMjAwO1xudmFyIFNDUk9MTF9DVVJTT1JfREVMQVkgPSAyMDA7XG52YXIgU0NST0xMX0NVUlNPUl9IWVNURVJFU0lTID0gNTtcblxuZnVuY3Rpb24gRHJhZ2Ryb3BIYW5kbGVyKG1vdXNlSGFuZGxlcikge1xuXG4gICAgdmFyIGVkaXRvciA9IG1vdXNlSGFuZGxlci5lZGl0b3I7XG5cbiAgICB2YXIgYmxhbmtJbWFnZSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIGJsYW5rSW1hZ2Uuc3JjID0gXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PVwiO1xuICAgIGlmICh1c2VyYWdlbnQuaXNPcGVyYSlcbiAgICAgICAgYmxhbmtJbWFnZS5zdHlsZS5jc3NUZXh0ID0gXCJ3aWR0aDoxcHg7aGVpZ2h0OjFweDtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O29wYWNpdHk6MDtcIjtcblxuICAgIHZhciBleHBvcnRzID0gW1wiZHJhZ1dhaXRcIiwgXCJkcmFnV2FpdEVuZFwiLCBcInN0YXJ0RHJhZ1wiLCBcImRyYWdSZWFkeUVuZFwiLCBcIm9uTW91c2VEcmFnXCJdO1xuXG4gICAgIGV4cG9ydHMuZm9yRWFjaChmdW5jdGlvbih4KSB7XG4gICAgICAgICBtb3VzZUhhbmRsZXJbeF0gPSB0aGlzW3hdO1xuICAgIH0sIHRoaXMpO1xuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHRoaXMub25Nb3VzZURvd24uYmluZChtb3VzZUhhbmRsZXIpKTtcblxuXG4gICAgdmFyIG1vdXNlVGFyZ2V0ID0gZWRpdG9yLmNvbnRhaW5lcjtcbiAgICB2YXIgZHJhZ1NlbGVjdGlvbk1hcmtlciwgeCwgeTtcbiAgICB2YXIgdGltZXJJZCwgcmFuZ2U7XG4gICAgdmFyIGRyYWdDdXJzb3IsIGNvdW50ZXIgPSAwO1xuICAgIHZhciBkcmFnT3BlcmF0aW9uO1xuICAgIHZhciBpc0ludGVybmFsO1xuICAgIHZhciBhdXRvU2Nyb2xsU3RhcnRUaW1lO1xuICAgIHZhciBjdXJzb3JNb3ZlZFRpbWU7XG4gICAgdmFyIGN1cnNvclBvaW50T25DYXJldE1vdmVkO1xuXG4gICAgdGhpcy5vbkRyYWdTdGFydCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsRHJhZyB8fCAhbW91c2VUYXJnZXQuZHJhZ2dhYmxlKSB7XG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgc2VsZi5zdGFydFNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIHNlbGYuY2FwdHVyZU1vdXNlKGUpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJhbmdlID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7XG5cbiAgICAgICAgdmFyIGRhdGFUcmFuc2ZlciA9IGUuZGF0YVRyYW5zZmVyO1xuICAgICAgICBkYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9IGVkaXRvci5nZXRSZWFkT25seSgpID8gXCJjb3B5XCIgOiBcImNvcHlNb3ZlXCI7XG4gICAgICAgIGlmICh1c2VyYWdlbnQuaXNPcGVyYSkge1xuICAgICAgICAgICAgZWRpdG9yLmNvbnRhaW5lci5hcHBlbmRDaGlsZChibGFua0ltYWdlKTtcbiAgICAgICAgICAgIGJsYW5rSW1hZ2Uuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgfVxuICAgICAgICBkYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlICYmIGRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoYmxhbmtJbWFnZSwgMCwgMCk7XG4gICAgICAgIGlmICh1c2VyYWdlbnQuaXNPcGVyYSkge1xuICAgICAgICAgICAgZWRpdG9yLmNvbnRhaW5lci5yZW1vdmVDaGlsZChibGFua0ltYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhVHJhbnNmZXIuY2xlYXJEYXRhKCk7XG4gICAgICAgIGRhdGFUcmFuc2Zlci5zZXREYXRhKFwiVGV4dFwiLCBlZGl0b3Iuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UoKSk7XG5cbiAgICAgICAgaXNJbnRlcm5hbCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXCJkcmFnXCIpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uRHJhZ0VuZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgbW91c2VUYXJnZXQuZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICAgIGlzSW50ZXJuYWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShudWxsKTtcbiAgICAgICAgaWYgKCFlZGl0b3IuZ2V0UmVhZE9ubHkoKSkge1xuICAgICAgICAgICAgdmFyIGRyb3BFZmZlY3QgPSBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0O1xuICAgICAgICAgICAgaWYgKCFkcmFnT3BlcmF0aW9uICYmIGRyb3BFZmZlY3QgPT0gXCJtb3ZlXCIpXG4gICAgICAgICAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTtcbiAgICAgICAgICAgIGVkaXRvci5yZW5kZXJlci4kY3Vyc29yTGF5ZXIuc2V0QmxpbmtpbmcodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3IudW5zZXRTdHlsZShcImFjZV9kcmFnZ2luZ1wiKTtcbiAgICAgICAgdGhpcy5lZGl0b3IucmVuZGVyZXIuc2V0Q3Vyc29yU3R5bGUoXCJcIik7XG4gICAgfTtcblxuICAgIHRoaXMub25EcmFnRW50ZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChlZGl0b3IuZ2V0UmVhZE9ubHkoKSB8fCAhY2FuQWNjZXB0KGUuZGF0YVRyYW5zZmVyKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgeCA9IGUuY2xpZW50WDtcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcbiAgICAgICAgaWYgKCFkcmFnU2VsZWN0aW9uTWFya2VyKVxuICAgICAgICAgICAgYWRkRHJhZ01hcmtlcigpO1xuICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBkcmFnT3BlcmF0aW9uID0gZ2V0RHJvcEVmZmVjdChlKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uRHJhZ092ZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChlZGl0b3IuZ2V0UmVhZE9ubHkoKSB8fCAhY2FuQWNjZXB0KGUuZGF0YVRyYW5zZmVyKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgeCA9IGUuY2xpZW50WDtcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcbiAgICAgICAgaWYgKCFkcmFnU2VsZWN0aW9uTWFya2VyKSB7XG4gICAgICAgICAgICBhZGREcmFnTWFya2VyKCk7XG4gICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uTW91c2VNb3ZlVGltZXIgIT09IG51bGwpXG4gICAgICAgICAgICBvbk1vdXNlTW92ZVRpbWVyID0gbnVsbDtcblxuICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gZHJhZ09wZXJhdGlvbiA9IGdldERyb3BFZmZlY3QoZSk7XG4gICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkRyYWdMZWF2ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgY291bnRlci0tO1xuICAgICAgICBpZiAoY291bnRlciA8PSAwICYmIGRyYWdTZWxlY3Rpb25NYXJrZXIpIHtcbiAgICAgICAgICAgIGNsZWFyRHJhZ01hcmtlcigpO1xuICAgICAgICAgICAgZHJhZ09wZXJhdGlvbiA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5vbkRyb3AgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICghZHJhZ0N1cnNvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGRhdGFUcmFuc2ZlciA9IGUuZGF0YVRyYW5zZmVyO1xuICAgICAgICBpZiAoaXNJbnRlcm5hbCkge1xuICAgICAgICAgICAgc3dpdGNoIChkcmFnT3BlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1vdmVcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmNvbnRhaW5zKGRyYWdDdXJzb3Iucm93LCBkcmFnQ3Vyc29yLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBkcmFnQ3Vyc29yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogZHJhZ0N1cnNvclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gZWRpdG9yLm1vdmVUZXh0KHJhbmdlLCBkcmFnQ3Vyc29yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29weVwiOlxuICAgICAgICAgICAgICAgICAgICByYW5nZSA9IGVkaXRvci5tb3ZlVGV4dChyYW5nZSwgZHJhZ0N1cnNvciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGRyb3BEYXRhID0gZGF0YVRyYW5zZmVyLmdldERhdGEoJ1RleHQnKTtcbiAgICAgICAgICAgIHJhbmdlID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBkcmFnQ3Vyc29yLFxuICAgICAgICAgICAgICAgIGVuZDogZWRpdG9yLnNlc3Npb24uaW5zZXJ0KGRyYWdDdXJzb3IsIGRyb3BEYXRhKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICAgICAgZHJhZ09wZXJhdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJEcmFnTWFya2VyKCk7XG4gICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTtcbiAgICB9O1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJnZXQsIFwiZHJhZ3N0YXJ0XCIsIHRoaXMub25EcmFnU3RhcnQuYmluZChtb3VzZUhhbmRsZXIpKTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgXCJkcmFnZW5kXCIsIHRoaXMub25EcmFnRW5kLmJpbmQobW91c2VIYW5kbGVyKSk7XG4gICAgZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJnZXQsIFwiZHJhZ2VudGVyXCIsIHRoaXMub25EcmFnRW50ZXIuYmluZChtb3VzZUhhbmRsZXIpKTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgXCJkcmFnb3ZlclwiLCB0aGlzLm9uRHJhZ092ZXIuYmluZChtb3VzZUhhbmRsZXIpKTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgXCJkcmFnbGVhdmVcIiwgdGhpcy5vbkRyYWdMZWF2ZS5iaW5kKG1vdXNlSGFuZGxlcikpO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCBcImRyb3BcIiwgdGhpcy5vbkRyb3AuYmluZChtb3VzZUhhbmRsZXIpKTtcblxuICAgIGZ1bmN0aW9uIHNjcm9sbEN1cnNvckludG9WaWV3KGN1cnNvciwgcHJldkN1cnNvcikge1xuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdmFyIHZNb3ZlbWVudCA9ICFwcmV2Q3Vyc29yIHx8IGN1cnNvci5yb3cgIT0gcHJldkN1cnNvci5yb3c7XG4gICAgICAgIHZhciBoTW92ZW1lbnQgPSAhcHJldkN1cnNvciB8fCBjdXJzb3IuY29sdW1uICE9IHByZXZDdXJzb3IuY29sdW1uO1xuICAgICAgICBpZiAoIWN1cnNvck1vdmVkVGltZSB8fCB2TW92ZW1lbnQgfHwgaE1vdmVtZW50KSB7XG4gICAgICAgICAgICBlZGl0b3IuJGJsb2NrU2Nyb2xsaW5nICs9IDE7XG4gICAgICAgICAgICBlZGl0b3IubW92ZUN1cnNvclRvUG9zaXRpb24oY3Vyc29yKTtcbiAgICAgICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmcgLT0gMTtcbiAgICAgICAgICAgIGN1cnNvck1vdmVkVGltZSA9IG5vdztcbiAgICAgICAgICAgIGN1cnNvclBvaW50T25DYXJldE1vdmVkID0ge3g6IHgsIHk6IHl9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gY2FsY0Rpc3RhbmNlKGN1cnNvclBvaW50T25DYXJldE1vdmVkLngsIGN1cnNvclBvaW50T25DYXJldE1vdmVkLnksIHgsIHkpO1xuICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gU0NST0xMX0NVUlNPUl9IWVNURVJFU0lTKSB7XG4gICAgICAgICAgICAgICAgY3Vyc29yTW92ZWRUaW1lID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobm93IC0gY3Vyc29yTW92ZWRUaW1lID49IFNDUk9MTF9DVVJTT1JfREVMQVkpIHtcbiAgICAgICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTtcbiAgICAgICAgICAgICAgICBjdXJzb3JNb3ZlZFRpbWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXV0b1Njcm9sbChjdXJzb3IsIHByZXZDdXJzb3IpIHtcbiAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIHZhciBsaW5lSGVpZ2h0ID0gZWRpdG9yLnJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQ7XG4gICAgICAgIHZhciBjaGFyYWN0ZXJXaWR0aCA9IGVkaXRvci5yZW5kZXJlci5sYXllckNvbmZpZy5jaGFyYWN0ZXJXaWR0aDtcbiAgICAgICAgdmFyIGVkaXRvclJlY3QgPSBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHZhciBvZmZzZXRzID0ge1xuICAgICAgICAgICB4OiB7XG4gICAgICAgICAgICAgICBsZWZ0OiB4IC0gZWRpdG9yUmVjdC5sZWZ0LFxuICAgICAgICAgICAgICAgcmlnaHQ6IGVkaXRvclJlY3QucmlnaHQgLSB4XG4gICAgICAgICAgIH0sXG4gICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgICAgIHRvcDogeSAtIGVkaXRvclJlY3QudG9wLFxuICAgICAgICAgICAgICAgYm90dG9tOiBlZGl0b3JSZWN0LmJvdHRvbSAtIHlcbiAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgbmVhcmVzdFhPZmZzZXQgPSBNYXRoLm1pbihvZmZzZXRzLngubGVmdCwgb2Zmc2V0cy54LnJpZ2h0KTtcbiAgICAgICAgdmFyIG5lYXJlc3RZT2Zmc2V0ID0gTWF0aC5taW4ob2Zmc2V0cy55LnRvcCwgb2Zmc2V0cy55LmJvdHRvbSk7XG4gICAgICAgIHZhciBzY3JvbGxDdXJzb3IgPSB7cm93OiBjdXJzb3Iucm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW59O1xuICAgICAgICBpZiAobmVhcmVzdFhPZmZzZXQgLyBjaGFyYWN0ZXJXaWR0aCA8PSAyKSB7XG4gICAgICAgICAgICBzY3JvbGxDdXJzb3IuY29sdW1uICs9IChvZmZzZXRzLngubGVmdCA8IG9mZnNldHMueC5yaWdodCA/IC0zIDogKzIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWFyZXN0WU9mZnNldCAvIGxpbmVIZWlnaHQgPD0gMSkge1xuICAgICAgICAgICAgc2Nyb2xsQ3Vyc29yLnJvdyArPSAob2Zmc2V0cy55LnRvcCA8IG9mZnNldHMueS5ib3R0b20gPyAtMSA6ICsxKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdlNjcm9sbCA9IGN1cnNvci5yb3cgIT0gc2Nyb2xsQ3Vyc29yLnJvdztcbiAgICAgICAgdmFyIGhTY3JvbGwgPSBjdXJzb3IuY29sdW1uICE9IHNjcm9sbEN1cnNvci5jb2x1bW47XG4gICAgICAgIHZhciB2TW92ZW1lbnQgPSAhcHJldkN1cnNvciB8fCBjdXJzb3Iucm93ICE9IHByZXZDdXJzb3Iucm93O1xuICAgICAgICBpZiAodlNjcm9sbCB8fCAoaFNjcm9sbCAmJiAhdk1vdmVtZW50KSkge1xuICAgICAgICAgICAgaWYgKCFhdXRvU2Nyb2xsU3RhcnRUaW1lKVxuICAgICAgICAgICAgICAgIGF1dG9TY3JvbGxTdGFydFRpbWUgPSBub3c7XG4gICAgICAgICAgICBlbHNlIGlmIChub3cgLSBhdXRvU2Nyb2xsU3RhcnRUaW1lID49IEFVVE9TQ1JPTExfREVMQVkpXG4gICAgICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KHNjcm9sbEN1cnNvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhdXRvU2Nyb2xsU3RhcnRUaW1lID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uRHJhZ0ludGVydmFsKCkge1xuICAgICAgICB2YXIgcHJldkN1cnNvciA9IGRyYWdDdXJzb3I7XG4gICAgICAgIGRyYWdDdXJzb3IgPSBlZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMoeCwgeSk7XG4gICAgICAgIHNjcm9sbEN1cnNvckludG9WaWV3KGRyYWdDdXJzb3IsIHByZXZDdXJzb3IpO1xuICAgICAgICBhdXRvU2Nyb2xsKGRyYWdDdXJzb3IsIHByZXZDdXJzb3IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZERyYWdNYXJrZXIoKSB7XG4gICAgICAgIHJhbmdlID0gZWRpdG9yLnNlbGVjdGlvbi50b09yaWVudGVkUmFuZ2UoKTtcbiAgICAgICAgZHJhZ1NlbGVjdGlvbk1hcmtlciA9IGVkaXRvci5zZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgXCJhY2Vfc2VsZWN0aW9uXCIsIGVkaXRvci5nZXRTZWxlY3Rpb25TdHlsZSgpKTtcbiAgICAgICAgZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIGlmIChlZGl0b3IuaXNGb2N1c2VkKCkpXG4gICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuJGN1cnNvckxheWVyLnNldEJsaW5raW5nKGZhbHNlKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTtcbiAgICAgICAgb25EcmFnSW50ZXJ2YWwoKTtcbiAgICAgICAgdGltZXJJZCA9IHNldEludGVydmFsKG9uRHJhZ0ludGVydmFsLCAyMCk7XG4gICAgICAgIGNvdW50ZXIgPSAwO1xuICAgICAgICBldmVudC5hZGRMaXN0ZW5lcihkb2N1bWVudCwgXCJtb3VzZW1vdmVcIiwgb25Nb3VzZU1vdmUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFyRHJhZ01hcmtlcigpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTtcbiAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlTWFya2VyKGRyYWdTZWxlY3Rpb25NYXJrZXIpO1xuICAgICAgICBkcmFnU2VsZWN0aW9uTWFya2VyID0gbnVsbDtcbiAgICAgICAgZWRpdG9yLiRibG9ja1Njcm9sbGluZyArPSAxO1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLmZyb21PcmllbnRlZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgZWRpdG9yLiRibG9ja1Njcm9sbGluZyAtPSAxO1xuICAgICAgICBpZiAoZWRpdG9yLmlzRm9jdXNlZCgpICYmICFpc0ludGVybmFsKVxuICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLiRjdXJzb3JMYXllci5zZXRCbGlua2luZyghZWRpdG9yLmdldFJlYWRPbmx5KCkpO1xuICAgICAgICByYW5nZSA9IG51bGw7XG4gICAgICAgIGRyYWdDdXJzb3IgPSBudWxsO1xuICAgICAgICBjb3VudGVyID0gMDtcbiAgICAgICAgYXV0b1Njcm9sbFN0YXJ0VGltZSA9IG51bGw7XG4gICAgICAgIGN1cnNvck1vdmVkVGltZSA9IG51bGw7XG4gICAgICAgIGV2ZW50LnJlbW92ZUxpc3RlbmVyKGRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBvbk1vdXNlTW92ZSk7XG4gICAgfVxuICAgIHZhciBvbk1vdXNlTW92ZVRpbWVyID0gbnVsbDtcbiAgICBmdW5jdGlvbiBvbk1vdXNlTW92ZSgpIHtcbiAgICAgICAgaWYgKG9uTW91c2VNb3ZlVGltZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgb25Nb3VzZU1vdmVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9uTW91c2VNb3ZlVGltZXIgIT0gbnVsbCAmJiBkcmFnU2VsZWN0aW9uTWFya2VyKVxuICAgICAgICAgICAgICAgICAgICBjbGVhckRyYWdNYXJrZXIoKTtcbiAgICAgICAgICAgIH0sIDIwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbkFjY2VwdChkYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgdmFyIHR5cGVzID0gZGF0YVRyYW5zZmVyLnR5cGVzO1xuICAgICAgICByZXR1cm4gIXR5cGVzIHx8IEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwodHlwZXMsIGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlID09ICd0ZXh0L3BsYWluJyB8fCB0eXBlID09ICdUZXh0JztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RHJvcEVmZmVjdChlKSB7XG4gICAgICAgIHZhciBjb3B5QWxsb3dlZCA9IFsnY29weScsICdjb3B5bW92ZScsICdhbGwnLCAndW5pbml0aWFsaXplZCddO1xuICAgICAgICB2YXIgbW92ZUFsbG93ZWQgPSBbJ21vdmUnLCAnY29weW1vdmUnLCAnbGlua21vdmUnLCAnYWxsJywgJ3VuaW5pdGlhbGl6ZWQnXTtcblxuICAgICAgICB2YXIgY29weU1vZGlmaWVyU3RhdGUgPSB1c2VyYWdlbnQuaXNNYWMgPyBlLmFsdEtleSA6IGUuY3RybEtleTtcbiAgICAgICAgdmFyIGVmZmVjdEFsbG93ZWQgPSBcInVuaW5pdGlhbGl6ZWRcIjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGVmZmVjdEFsbG93ZWQgPSBlLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIHZhciBkcm9wRWZmZWN0ID0gXCJub25lXCI7XG5cbiAgICAgICAgaWYgKGNvcHlNb2RpZmllclN0YXRlICYmIGNvcHlBbGxvd2VkLmluZGV4T2YoZWZmZWN0QWxsb3dlZCkgPj0gMClcbiAgICAgICAgICAgIGRyb3BFZmZlY3QgPSBcImNvcHlcIjtcbiAgICAgICAgZWxzZSBpZiAobW92ZUFsbG93ZWQuaW5kZXhPZihlZmZlY3RBbGxvd2VkKSA+PSAwKVxuICAgICAgICAgICAgZHJvcEVmZmVjdCA9IFwibW92ZVwiO1xuICAgICAgICBlbHNlIGlmIChjb3B5QWxsb3dlZC5pbmRleE9mKGVmZmVjdEFsbG93ZWQpID49IDApXG4gICAgICAgICAgICBkcm9wRWZmZWN0ID0gXCJjb3B5XCI7XG5cbiAgICAgICAgcmV0dXJuIGRyb3BFZmZlY3Q7XG4gICAgfVxufVxuXG4oZnVuY3Rpb24oKSB7XG5cbiAgICB0aGlzLmRyYWdXYWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpbnRlcnZhbCA9IERhdGUubm93KCkgLSB0aGlzLm1vdXNlZG93bkV2ZW50LnRpbWU7XG4gICAgICAgIGlmIChpbnRlcnZhbCA+IHRoaXMuZWRpdG9yLmdldERyYWdEZWxheSgpKVxuICAgICAgICAgICAgdGhpcy5zdGFydERyYWcoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5kcmFnV2FpdEVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5lZGl0b3IuY29udGFpbmVyO1xuICAgICAgICB0YXJnZXQuZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhcnRTZWxlY3QodGhpcy5tb3VzZWRvd25FdmVudC5nZXREb2N1bWVudFBvc2l0aW9uKCkpO1xuICAgICAgICB0aGlzLnNlbGVjdEVuZCgpO1xuICAgIH07XG5cbiAgICB0aGlzLmRyYWdSZWFkeUVuZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdGhpcy5lZGl0b3IucmVuZGVyZXIuJGN1cnNvckxheWVyLnNldEJsaW5raW5nKCF0aGlzLmVkaXRvci5nZXRSZWFkT25seSgpKTtcbiAgICAgICAgdGhpcy5lZGl0b3IudW5zZXRTdHlsZShcImFjZV9kcmFnZ2luZ1wiKTtcbiAgICAgICAgdGhpcy5lZGl0b3IucmVuZGVyZXIuc2V0Q3Vyc29yU3R5bGUoXCJcIik7XG4gICAgICAgIHRoaXMuZHJhZ1dhaXRFbmQoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zdGFydERyYWcgPSBmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmNhbmNlbERyYWcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICB2YXIgdGFyZ2V0ID0gZWRpdG9yLmNvbnRhaW5lcjtcbiAgICAgICAgdGFyZ2V0LmRyYWdnYWJsZSA9IHRydWU7XG4gICAgICAgIGVkaXRvci5yZW5kZXJlci4kY3Vyc29yTGF5ZXIuc2V0QmxpbmtpbmcoZmFsc2UpO1xuICAgICAgICBlZGl0b3Iuc2V0U3R5bGUoXCJhY2VfZHJhZ2dpbmdcIik7XG4gICAgICAgIHZhciBjdXJzb3JTdHlsZSA9IHVzZXJhZ2VudC5pc1dpbiA/IFwiZGVmYXVsdFwiIDogXCJtb3ZlXCI7XG4gICAgICAgIGVkaXRvci5yZW5kZXJlci5zZXRDdXJzb3JTdHlsZShjdXJzb3JTdHlsZSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXCJkcmFnUmVhZHlcIik7XG4gICAgfTtcblxuICAgIHRoaXMub25Nb3VzZURyYWcgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLmVkaXRvci5jb250YWluZXI7XG4gICAgICAgIGlmICh1c2VyYWdlbnQuaXNJRSAmJiB0aGlzLnN0YXRlID09IFwiZHJhZ1JlYWR5XCIpIHtcbiAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IGNhbGNEaXN0YW5jZSh0aGlzLm1vdXNlZG93bkV2ZW50LngsIHRoaXMubW91c2Vkb3duRXZlbnQueSwgdGhpcy54LCB0aGlzLnkpO1xuICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gMylcbiAgICAgICAgICAgICAgICB0YXJnZXQuZHJhZ0Ryb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gXCJkcmFnV2FpdFwiKSB7XG4gICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBjYWxjRGlzdGFuY2UodGhpcy5tb3VzZWRvd25FdmVudC54LCB0aGlzLm1vdXNlZG93bkV2ZW50LnksIHRoaXMueCwgdGhpcy55KTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IDApIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFNlbGVjdCh0aGlzLm1vdXNlZG93bkV2ZW50LmdldERvY3VtZW50UG9zaXRpb24oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLiRkcmFnRW5hYmxlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5tb3VzZWRvd25FdmVudCA9IGU7XG4gICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcblxuICAgICAgICB2YXIgaW5TZWxlY3Rpb24gPSBlLmluU2VsZWN0aW9uKCk7XG4gICAgICAgIHZhciBidXR0b24gPSBlLmdldEJ1dHRvbigpO1xuICAgICAgICB2YXIgY2xpY2tDb3VudCA9IGUuZG9tRXZlbnQuZGV0YWlsIHx8IDE7XG4gICAgICAgIGlmIChjbGlja0NvdW50ID09PSAxICYmIGJ1dHRvbiA9PT0gMCAmJiBpblNlbGVjdGlvbikge1xuICAgICAgICAgICAgaWYgKGUuZWRpdG9yLmluTXVsdGlTZWxlY3RNb2RlICYmIChlLmdldEFjY2VsS2V5KCkgfHwgZS5nZXRTaGlmdEtleSgpKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLm1vdXNlZG93bkV2ZW50LnRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgdmFyIGV2ZW50VGFyZ2V0ID0gZS5kb21FdmVudC50YXJnZXQgfHwgZS5kb21FdmVudC5zcmNFbGVtZW50O1xuICAgICAgICAgICAgaWYgKFwidW5zZWxlY3RhYmxlXCIgaW4gZXZlbnRUYXJnZXQpXG4gICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQudW5zZWxlY3RhYmxlID0gXCJvblwiO1xuICAgICAgICAgICAgaWYgKGVkaXRvci5nZXREcmFnRGVsYXkoKSkge1xuICAgICAgICAgICAgICAgIGlmICh1c2VyYWdlbnQuaXNXZWJLaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxEcmFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1vdXNlVGFyZ2V0ID0gZWRpdG9yLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgbW91c2VUYXJnZXQuZHJhZ2dhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShcImRyYWdXYWl0XCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RHJhZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jYXB0dXJlTW91c2UoZSwgdGhpcy5vbk1vdXNlRHJhZy5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIGUuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG59KS5jYWxsKERyYWdkcm9wSGFuZGxlci5wcm90b3R5cGUpO1xuXG5cbmZ1bmN0aW9uIGNhbGNEaXN0YW5jZShheCwgYXksIGJ4LCBieSkge1xuICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coYnggLSBheCwgMikgKyBNYXRoLnBvdyhieSAtIGF5LCAyKSk7XG59XG5cbmV4cG9ydHMuRHJhZ2Ryb3BIYW5kbGVyID0gRHJhZ2Ryb3BIYW5kbGVyO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9saWIvbmV0XCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2RvbVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgZG9tID0gYWNlcXVpcmUoXCIuL2RvbVwiKTtcblxuZXhwb3J0cy5nZXQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTtcbiAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB4aHIuc2VuZChudWxsKTtcbn07XG5cbmV4cG9ydHMubG9hZFNjcmlwdCA9IGZ1bmN0aW9uKHBhdGgsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGhlYWQgPSBkb20uZ2V0RG9jdW1lbnRIZWFkKCk7XG4gICAgdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblxuICAgIHMuc3JjID0gcGF0aDtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHMpO1xuXG4gICAgcy5vbmxvYWQgPSBzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKF8sIGlzQWJvcnQpIHtcbiAgICAgICAgaWYgKGlzQWJvcnQgfHwgIXMucmVhZHlTdGF0ZSB8fCBzLnJlYWR5U3RhdGUgPT0gXCJsb2FkZWRcIiB8fCBzLnJlYWR5U3RhdGUgPT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICBzID0gcy5vbmxvYWQgPSBzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIWlzQWJvcnQpXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0cy5xdWFsaWZ5VVJMID0gZnVuY3Rpb24odXJsKSB7XG4gICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgYS5ocmVmID0gdXJsO1xuICAgIHJldHVybiBhLmhyZWY7XG59O1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9saWIvZXZlbnRfZW1pdHRlclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBFdmVudEVtaXR0ZXIgPSB7fTtcbnZhciBzdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHsgdGhpcy5wcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlOyB9O1xudmFyIHByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7IHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7IH07XG5cbkV2ZW50RW1pdHRlci5fZW1pdCA9XG5FdmVudEVtaXR0ZXIuX2Rpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbihldmVudE5hbWUsIGUpIHtcbiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8ICh0aGlzLl9ldmVudFJlZ2lzdHJ5ID0ge30pO1xuICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVycyB8fCAodGhpcy5fZGVmYXVsdEhhbmRsZXJzID0ge30pO1xuXG4gICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8fCBbXTtcbiAgICB2YXIgZGVmYXVsdEhhbmRsZXIgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnNbZXZlbnROYW1lXTtcbiAgICBpZiAoIWxpc3RlbmVycy5sZW5ndGggJiYgIWRlZmF1bHRIYW5kbGVyKVxuICAgICAgICByZXR1cm47XG5cbiAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCAhZSlcbiAgICAgICAgZSA9IHt9O1xuXG4gICAgaWYgKCFlLnR5cGUpXG4gICAgICAgIGUudHlwZSA9IGV2ZW50TmFtZTtcbiAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKVxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbiA9IHN0b3BQcm9wYWdhdGlvbjtcbiAgICBpZiAoIWUucHJldmVudERlZmF1bHQpXG4gICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDtcblxuICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycy5zbGljZSgpO1xuICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGlzdGVuZXJzW2ldKGUsIHRoaXMpO1xuICAgICAgICBpZiAoZS5wcm9wYWdhdGlvblN0b3BwZWQpXG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgXG4gICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpXG4gICAgICAgIHJldHVybiBkZWZhdWx0SGFuZGxlcihlLCB0aGlzKTtcbn07XG5cblxuRXZlbnRFbWl0dGVyLl9zaWduYWwgPSBmdW5jdGlvbihldmVudE5hbWUsIGUpIHtcbiAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07XG4gICAgaWYgKCFsaXN0ZW5lcnMpXG4gICAgICAgIHJldHVybjtcbiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTtcbiAgICBmb3IgKHZhciBpPTA7IGk8bGlzdGVuZXJzLmxlbmd0aDsgaSsrKVxuICAgICAgICBsaXN0ZW5lcnNbaV0oZSwgdGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIub25jZSA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgX3NlbGYgPSB0aGlzO1xuICAgIGNhbGxiYWNrICYmIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGZ1bmN0aW9uIG5ld0NhbGxiYWNrKCkge1xuICAgICAgICBfc2VsZi5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgbmV3Q2FsbGJhY2spO1xuICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH0pO1xufTtcblxuXG5FdmVudEVtaXR0ZXIuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzO1xuICAgIGlmICghaGFuZGxlcnMpXG4gICAgICAgIGhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0ge19kaXNhYmxlZF86IHt9fTtcbiAgICBcbiAgICBpZiAoaGFuZGxlcnNbZXZlbnROYW1lXSkge1xuICAgICAgICB2YXIgb2xkID0gaGFuZGxlcnNbZXZlbnROYW1lXTtcbiAgICAgICAgdmFyIGRpc2FibGVkID0gaGFuZGxlcnMuX2Rpc2FibGVkX1tldmVudE5hbWVdO1xuICAgICAgICBpZiAoIWRpc2FibGVkKVxuICAgICAgICAgICAgaGFuZGxlcnMuX2Rpc2FibGVkX1tldmVudE5hbWVdID0gZGlzYWJsZWQgPSBbXTtcbiAgICAgICAgZGlzYWJsZWQucHVzaChvbGQpO1xuICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICBpZiAoaSAhPSAtMSkgXG4gICAgICAgICAgICBkaXNhYmxlZC5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICAgIGhhbmRsZXJzW2V2ZW50TmFtZV0gPSBjYWxsYmFjaztcbn07XG5FdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzO1xuICAgIGlmICghaGFuZGxlcnMpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgZGlzYWJsZWQgPSBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV07XG4gICAgXG4gICAgaWYgKGhhbmRsZXJzW2V2ZW50TmFtZV0gPT0gY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIG9sZCA9IGhhbmRsZXJzW2V2ZW50TmFtZV07XG4gICAgICAgIGlmIChkaXNhYmxlZClcbiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZXZlbnROYW1lLCBkaXNhYmxlZC5wb3AoKSk7XG4gICAgfSBlbHNlIGlmIChkaXNhYmxlZCkge1xuICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICBpZiAoaSAhPSAtMSlcbiAgICAgICAgICAgIGRpc2FibGVkLnNwbGljZShpLCAxKTtcbiAgICB9XG59O1xuXG5FdmVudEVtaXR0ZXIub24gPVxuRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJpbmcpIHtcbiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5ID0gdGhpcy5fZXZlbnRSZWdpc3RyeSB8fCB7fTtcblxuICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07XG4gICAgaWYgKCFsaXN0ZW5lcnMpXG4gICAgICAgIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSA9IFtdO1xuXG4gICAgaWYgKGxpc3RlbmVycy5pbmRleE9mKGNhbGxiYWNrKSA9PSAtMSlcbiAgICAgICAgbGlzdGVuZXJzW2NhcHR1cmluZyA/IFwidW5zaGlmdFwiIDogXCJwdXNoXCJdKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gY2FsbGJhY2s7XG59O1xuXG5FdmVudEVtaXR0ZXIub2ZmID1cbkV2ZW50RW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9XG5FdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5ID0gdGhpcy5fZXZlbnRSZWdpc3RyeSB8fCB7fTtcblxuICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07XG4gICAgaWYgKCFsaXN0ZW5lcnMpXG4gICAgICAgIHJldHVybjtcblxuICAgIHZhciBpbmRleCA9IGxpc3RlbmVycy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbn07XG5cbkV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHtcbiAgICBpZiAodGhpcy5fZXZlbnRSZWdpc3RyeSkgdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdID0gW107XG59O1xuXG5leHBvcnRzLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGliL2FwcF9jb25maWdcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvb29wXCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwibm8gdXNlIHN0cmljdFwiO1xuXG52YXIgb29wID0gYWNlcXVpcmUoXCIuL29vcFwiKTtcbnZhciBFdmVudEVtaXR0ZXIgPSBhY2VxdWlyZShcIi4vZXZlbnRfZW1pdHRlclwiKS5FdmVudEVtaXR0ZXI7XG5cbnZhciBvcHRpb25zUHJvdmlkZXIgPSB7XG4gICAgc2V0T3B0aW9uczogZnVuY3Rpb24ob3B0TGlzdCkge1xuICAgICAgICBPYmplY3Qua2V5cyhvcHRMaXN0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb24oa2V5LCBvcHRMaXN0W2tleV0pO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICB9LFxuICAgIGdldE9wdGlvbnM6IGZ1bmN0aW9uKG9wdGlvbk5hbWVzKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgICAgaWYgKCFvcHRpb25OYW1lcykge1xuICAgICAgICAgICAgb3B0aW9uTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLiRvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25OYW1lcykpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG9wdGlvbk5hbWVzO1xuICAgICAgICAgICAgb3B0aW9uTmFtZXMgPSBPYmplY3Qua2V5cyhyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbk5hbWVzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMuZ2V0T3B0aW9uKGtleSk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgc2V0T3B0aW9uOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpc1tcIiRcIiArIG5hbWVdID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIG9wdCA9IHRoaXMuJG9wdGlvbnNbbmFtZV07XG4gICAgICAgIGlmICghb3B0KSB7XG4gICAgICAgICAgICByZXR1cm4gd2FybignbWlzc3BlbGxlZCBvcHRpb24gXCInICsgbmFtZSArICdcIicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHQuZm9yd2FyZFRvKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXNbb3B0LmZvcndhcmRUb10gJiYgdGhpc1tvcHQuZm9yd2FyZFRvXS5zZXRPcHRpb24obmFtZSwgdmFsdWUpO1xuXG4gICAgICAgIGlmICghb3B0LmhhbmRsZXNTZXQpXG4gICAgICAgICAgICB0aGlzW1wiJFwiICsgbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgaWYgKG9wdCAmJiBvcHQuc2V0KVxuICAgICAgICAgICAgb3B0LnNldC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9LFxuICAgIGdldE9wdGlvbjogZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB2YXIgb3B0ID0gdGhpcy4kb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgaWYgKCFvcHQpIHtcbiAgICAgICAgICAgIHJldHVybiB3YXJuKCdtaXNzcGVsbGVkIG9wdGlvbiBcIicgKyBuYW1lICsgJ1wiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdC5mb3J3YXJkVG8pXG4gICAgICAgICAgICByZXR1cm4gdGhpc1tvcHQuZm9yd2FyZFRvXSAmJiB0aGlzW29wdC5mb3J3YXJkVG9dLmdldE9wdGlvbihuYW1lKTtcbiAgICAgICAgcmV0dXJuIG9wdCAmJiBvcHQuZ2V0ID8gb3B0LmdldC5jYWxsKHRoaXMpIDogdGhpc1tcIiRcIiArIG5hbWVdO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIHdhcm4obWVzc2FnZSkge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybilcbiAgICAgICAgY29uc29sZS53YXJuLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIHJlcG9ydEVycm9yKG1zZywgZGF0YSkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKG1zZyk7XG4gICAgZS5kYXRhID0gZGF0YTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT0gXCJvYmplY3RcIiAmJiBjb25zb2xlLmVycm9yKVxuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRocm93IGU7IH0pO1xufVxuXG52YXIgQXBwQ29uZmlnID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy4kZGVmYXVsdE9wdGlvbnMgPSB7fTtcbn07XG5cbihmdW5jdGlvbigpIHtcbiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7XG4gICAgdGhpcy5kZWZpbmVPcHRpb25zID0gZnVuY3Rpb24ob2JqLCBwYXRoLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICghb2JqLiRvcHRpb25zKVxuICAgICAgICAgICAgdGhpcy4kZGVmYXVsdE9wdGlvbnNbcGF0aF0gPSBvYmouJG9wdGlvbnMgPSB7fTtcblxuICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgdmFyIG9wdCA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0ID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgb3B0ID0ge2ZvcndhcmRUbzogb3B0fTtcblxuICAgICAgICAgICAgb3B0Lm5hbWUgfHwgKG9wdC5uYW1lID0ga2V5KTtcbiAgICAgICAgICAgIG9iai4kb3B0aW9uc1tvcHQubmFtZV0gPSBvcHQ7XG4gICAgICAgICAgICBpZiAoXCJpbml0aWFsVmFsdWVcIiBpbiBvcHQpXG4gICAgICAgICAgICAgICAgb2JqW1wiJFwiICsgb3B0Lm5hbWVdID0gb3B0LmluaXRpYWxWYWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9vcC5pbXBsZW1lbnQob2JqLCBvcHRpb25zUHJvdmlkZXIpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICB0aGlzLnJlc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICBPYmplY3Qua2V5cyhvYmouJG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICB2YXIgb3B0ID0gb2JqLiRvcHRpb25zW2tleV07XG4gICAgICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIG9wdClcbiAgICAgICAgICAgICAgICBvYmouc2V0T3B0aW9uKGtleSwgb3B0LnZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlID0gZnVuY3Rpb24ocGF0aCwgbmFtZSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIG9wdHMgPSB0aGlzLiRkZWZhdWx0T3B0aW9uc1twYXRoXSB8fCAodGhpcy4kZGVmYXVsdE9wdGlvbnNbcGF0aF0gPSB7fSk7XG4gICAgICAgIGlmIChvcHRzW25hbWVdKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5mb3J3YXJkVG8pXG4gICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWUob3B0cy5mb3J3YXJkVG8sIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvcHRzW25hbWVdLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zZXREZWZhdWx0VmFsdWVzID0gZnVuY3Rpb24ocGF0aCwgb3B0aW9uSGFzaCkge1xuICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25IYXNoKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWUocGF0aCwga2V5LCBvcHRpb25IYXNoW2tleV0pO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMud2FybiA9IHdhcm47XG4gICAgdGhpcy5yZXBvcnRFcnJvciA9IHJlcG9ydEVycm9yO1xuICAgIFxufSkuY2FsbChBcHBDb25maWcucHJvdG90eXBlKTtcblxuZXhwb3J0cy5BcHBDb25maWcgPSBBcHBDb25maWc7XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2NvbmZpZ1wiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9sYW5nXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9uZXRcIixcImFjZS9saWIvYXBwX2NvbmZpZ1wiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJubyB1c2Ugc3RyaWN0XCI7XG5cbnZhciBsYW5nID0gYWNlcXVpcmUoXCIuL2xpYi9sYW5nXCIpO1xudmFyIG9vcCA9IGFjZXF1aXJlKFwiLi9saWIvb29wXCIpO1xudmFyIG5ldCA9IGFjZXF1aXJlKFwiLi9saWIvbmV0XCIpO1xudmFyIEFwcENvbmZpZyA9IGFjZXF1aXJlKFwiLi9saWIvYXBwX2NvbmZpZ1wiKS5BcHBDb25maWc7XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IG5ldyBBcHBDb25maWcoKTtcblxudmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcyB8fCB0eXBlb2Ygd2luZG93ICE9IFwidW5kZWZpbmVkXCIgJiYgd2luZG93O1xufSkoKTtcblxudmFyIG9wdGlvbnMgPSB7XG4gICAgcGFja2FnZWQ6IGZhbHNlLFxuICAgIHdvcmtlclBhdGg6IG51bGwsXG4gICAgbW9kZVBhdGg6IG51bGwsXG4gICAgdGhlbWVQYXRoOiBudWxsLFxuICAgIGJhc2VQYXRoOiBcIlwiLFxuICAgIHN1ZmZpeDogXCIuanNcIixcbiAgICAkbW9kdWxlVXJsczoge31cbn07XG5cbmV4cG9ydHMuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gY29uZmlnIGtleTogXCIgKyBrZXkpO1xuXG4gICAgcmV0dXJuIG9wdGlvbnNba2V5XTtcbn07XG5cbmV4cG9ydHMuc2V0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgIGlmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGNvbmZpZyBrZXk6IFwiICsga2V5KTtcblxuICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlO1xufTtcblxuZXhwb3J0cy5hbGwgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbGFuZy5jb3B5T2JqZWN0KG9wdGlvbnMpO1xufTtcbmV4cG9ydHMubW9kdWxlVXJsID0gZnVuY3Rpb24obmFtZSwgY29tcG9uZW50KSB7XG4gICAgaWYgKG9wdGlvbnMuJG1vZHVsZVVybHNbbmFtZV0pXG4gICAgICAgIHJldHVybiBvcHRpb25zLiRtb2R1bGVVcmxzW25hbWVdO1xuXG4gICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdChcIi9cIik7XG4gICAgY29tcG9uZW50ID0gY29tcG9uZW50IHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdIHx8IFwiXCI7XG4gICAgdmFyIHNlcCA9IGNvbXBvbmVudCA9PSBcInNuaXBwZXRzXCIgPyBcIi9cIiA6IFwiLVwiO1xuICAgIHZhciBiYXNlID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgaWYgKGNvbXBvbmVudCA9PSBcIndvcmtlclwiICYmIHNlcCA9PSBcIi1cIikge1xuICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKFwiXlwiICsgY29tcG9uZW50ICsgXCJbXFxcXC1fXXxbXFxcXC1fXVwiICsgY29tcG9uZW50ICsgXCIkXCIsIFwiZ1wiKTtcbiAgICAgICAgYmFzZSA9IGJhc2UucmVwbGFjZShyZSwgXCJcIik7XG4gICAgfVxuXG4gICAgaWYgKCghYmFzZSB8fCBiYXNlID09IGNvbXBvbmVudCkgJiYgcGFydHMubGVuZ3RoID4gMSlcbiAgICAgICAgYmFzZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdO1xuICAgIHZhciBwYXRoID0gb3B0aW9uc1tjb21wb25lbnQgKyBcIlBhdGhcIl07XG4gICAgaWYgKHBhdGggPT0gbnVsbCkge1xuICAgICAgICBwYXRoID0gb3B0aW9ucy5iYXNlUGF0aDtcbiAgICB9IGVsc2UgaWYgKHNlcCA9PSBcIi9cIikge1xuICAgICAgICBjb21wb25lbnQgPSBzZXAgPSBcIlwiO1xuICAgIH1cbiAgICBpZiAocGF0aCAmJiBwYXRoLnNsaWNlKC0xKSAhPSBcIi9cIilcbiAgICAgICAgcGF0aCArPSBcIi9cIjtcbiAgICByZXR1cm4gcGF0aCArIGNvbXBvbmVudCArIHNlcCArIGJhc2UgKyB0aGlzLmdldChcInN1ZmZpeFwiKTtcbn07XG5cbmV4cG9ydHMuc2V0TW9kdWxlVXJsID0gZnVuY3Rpb24obmFtZSwgc3Vic3QpIHtcbiAgICByZXR1cm4gb3B0aW9ucy4kbW9kdWxlVXJsc1tuYW1lXSA9IHN1YnN0O1xufTtcblxuZXhwb3J0cy4kbG9hZGluZyA9IHt9O1xuZXhwb3J0cy5sb2FkTW9kdWxlID0gZnVuY3Rpb24obW9kdWxlTmFtZSwgb25Mb2FkKSB7XG4gICAgdmFyIG1vZHVsZSwgbW9kdWxlVHlwZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtb2R1bGVOYW1lKSkge1xuICAgICAgICBtb2R1bGVUeXBlID0gbW9kdWxlTmFtZVswXTtcbiAgICAgICAgbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWVbMV07XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgbW9kdWxlID0gYWNlcXVpcmUobW9kdWxlTmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICBpZiAobW9kdWxlICYmICFleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdKVxuICAgICAgICByZXR1cm4gb25Mb2FkICYmIG9uTG9hZChtb2R1bGUpO1xuXG4gICAgaWYgKCFleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdKVxuICAgICAgICBleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdID0gW107XG5cbiAgICBleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdLnB1c2gob25Mb2FkKTtcblxuICAgIGlmIChleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdLmxlbmd0aCA+IDEpXG4gICAgICAgIHJldHVybjtcblxuICAgIHZhciBhZnRlckxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgYWNlcXVpcmUoW21vZHVsZU5hbWVdLCBmdW5jdGlvbihtb2R1bGUpIHtcbiAgICAgICAgICAgIGV4cG9ydHMuX2VtaXQoXCJsb2FkLm1vZHVsZVwiLCB7bmFtZTogbW9kdWxlTmFtZSwgbW9kdWxlOiBtb2R1bGV9KTtcbiAgICAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSBleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdO1xuICAgICAgICAgICAgZXhwb3J0cy4kbG9hZGluZ1ttb2R1bGVOYW1lXSA9IG51bGw7XG4gICAgICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihvbkxvYWQpIHtcbiAgICAgICAgICAgICAgICBvbkxvYWQgJiYgb25Mb2FkKG1vZHVsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICghZXhwb3J0cy5nZXQoXCJwYWNrYWdlZFwiKSlcbiAgICAgICAgcmV0dXJuIGFmdGVyTG9hZCgpO1xuICAgIG5ldC5sb2FkU2NyaXB0KGV4cG9ydHMubW9kdWxlVXJsKG1vZHVsZU5hbWUsIG1vZHVsZVR5cGUpLCBhZnRlckxvYWQpO1xufTtcbmluaXQodHJ1ZSk7ZnVuY3Rpb24gaW5pdChwYWNrYWdlZCkge1xuXG4gICAgaWYgKCFnbG9iYWwgfHwgIWdsb2JhbC5kb2N1bWVudClcbiAgICAgICAgcmV0dXJuO1xuICAgIFxuICAgIG9wdGlvbnMucGFja2FnZWQgPSBwYWNrYWdlZCB8fCBhY2VxdWlyZS5wYWNrYWdlZCB8fCBtb2R1bGUucGFja2FnZWQgfHwgKGdsb2JhbC5kZWZpbmUgJiYgZGVmaW5lLnBhY2thZ2VkKTtcblxuICAgIHZhciBzY3JpcHRPcHRpb25zID0ge307XG4gICAgdmFyIHNjcmlwdFVybCA9IFwiXCI7XG4gICAgdmFyIGN1cnJlbnRTY3JpcHQgPSAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCB8fCBkb2N1bWVudC5fY3VycmVudFNjcmlwdCApOyAvLyBuYXRpdmUgb3IgcG9seWZpbGxcbiAgICB2YXIgY3VycmVudERvY3VtZW50ID0gY3VycmVudFNjcmlwdCAmJiBjdXJyZW50U2NyaXB0Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XG4gICAgXG4gICAgdmFyIHNjcmlwdHMgPSBjdXJyZW50RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG4gICAgZm9yICh2YXIgaT0wOyBpPHNjcmlwdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNjcmlwdCA9IHNjcmlwdHNbaV07XG5cbiAgICAgICAgdmFyIHNyYyA9IHNjcmlwdC5zcmMgfHwgc2NyaXB0LmdldEF0dHJpYnV0ZShcInNyY1wiKTtcbiAgICAgICAgaWYgKCFzcmMpXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHNjcmlwdC5hdHRyaWJ1dGVzO1xuICAgICAgICBmb3IgKHZhciBqPTAsIGw9YXR0cmlidXRlcy5sZW5ndGg7IGogPCBsOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBhdHRyID0gYXR0cmlidXRlc1tqXTtcbiAgICAgICAgICAgIGlmIChhdHRyLm5hbWUuaW5kZXhPZihcImRhdGEtYWNlLVwiKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNjcmlwdE9wdGlvbnNbZGVIeXBoZW5hdGUoYXR0ci5uYW1lLnJlcGxhY2UoL15kYXRhLWFjZS0vLCBcIlwiKSldID0gYXR0ci52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtID0gc3JjLm1hdGNoKC9eKC4qKVxcL2FjZShcXC1cXHcrKT9cXC5qcyhcXD98JCkvKTtcbiAgICAgICAgaWYgKG0pXG4gICAgICAgICAgICBzY3JpcHRVcmwgPSBtWzFdO1xuICAgIH1cblxuICAgIGlmIChzY3JpcHRVcmwpIHtcbiAgICAgICAgc2NyaXB0T3B0aW9ucy5iYXNlID0gc2NyaXB0T3B0aW9ucy5iYXNlIHx8IHNjcmlwdFVybDtcbiAgICAgICAgc2NyaXB0T3B0aW9ucy5wYWNrYWdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgc2NyaXB0T3B0aW9ucy5iYXNlUGF0aCA9IHNjcmlwdE9wdGlvbnMuYmFzZTtcbiAgICBzY3JpcHRPcHRpb25zLndvcmtlclBhdGggPSBzY3JpcHRPcHRpb25zLndvcmtlclBhdGggfHwgc2NyaXB0T3B0aW9ucy5iYXNlO1xuICAgIHNjcmlwdE9wdGlvbnMubW9kZVBhdGggPSBzY3JpcHRPcHRpb25zLm1vZGVQYXRoIHx8IHNjcmlwdE9wdGlvbnMuYmFzZTtcbiAgICBzY3JpcHRPcHRpb25zLnRoZW1lUGF0aCA9IHNjcmlwdE9wdGlvbnMudGhlbWVQYXRoIHx8IHNjcmlwdE9wdGlvbnMuYmFzZTtcbiAgICBkZWxldGUgc2NyaXB0T3B0aW9ucy5iYXNlO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNjcmlwdE9wdGlvbnMpXG4gICAgICAgIGlmICh0eXBlb2Ygc2NyaXB0T3B0aW9uc1trZXldICE9PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCBzY3JpcHRPcHRpb25zW2tleV0pO1xufVxuXG5leHBvcnRzLmluaXQgPSBpbml0O1xuXG5mdW5jdGlvbiBkZUh5cGhlbmF0ZShzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLy0oLikvZywgZnVuY3Rpb24obSwgbTEpIHsgcmV0dXJuIG0xLnRvVXBwZXJDYXNlKCk7IH0pO1xufVxuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9tb3VzZS9tb3VzZV9oYW5kbGVyXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2V2ZW50XCIsXCJhY2UvbGliL3VzZXJhZ2VudFwiLFwiYWNlL21vdXNlL2RlZmF1bHRfaGFuZGxlcnNcIixcImFjZS9tb3VzZS9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyXCIsXCJhY2UvbW91c2UvbW91c2VfZXZlbnRcIixcImFjZS9tb3VzZS9kcmFnZHJvcF9oYW5kbGVyXCIsXCJhY2UvY29uZmlnXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGV2ZW50ID0gYWNlcXVpcmUoXCIuLi9saWIvZXZlbnRcIik7XG52YXIgdXNlcmFnZW50ID0gYWNlcXVpcmUoXCIuLi9saWIvdXNlcmFnZW50XCIpO1xudmFyIERlZmF1bHRIYW5kbGVycyA9IGFjZXF1aXJlKFwiLi9kZWZhdWx0X2hhbmRsZXJzXCIpLkRlZmF1bHRIYW5kbGVycztcbnZhciBEZWZhdWx0R3V0dGVySGFuZGxlciA9IGFjZXF1aXJlKFwiLi9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyXCIpLkd1dHRlckhhbmRsZXI7XG52YXIgTW91c2VFdmVudCA9IGFjZXF1aXJlKFwiLi9tb3VzZV9ldmVudFwiKS5Nb3VzZUV2ZW50O1xudmFyIERyYWdkcm9wSGFuZGxlciA9IGFjZXF1aXJlKFwiLi9kcmFnZHJvcF9oYW5kbGVyXCIpLkRyYWdkcm9wSGFuZGxlcjtcbnZhciBjb25maWcgPSBhY2VxdWlyZShcIi4uL2NvbmZpZ1wiKTtcblxudmFyIE1vdXNlSGFuZGxlciA9IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgIHZhciBfc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG5cbiAgICBuZXcgRGVmYXVsdEhhbmRsZXJzKHRoaXMpO1xuICAgIG5ldyBEZWZhdWx0R3V0dGVySGFuZGxlcih0aGlzKTtcbiAgICBuZXcgRHJhZ2Ryb3BIYW5kbGVyKHRoaXMpO1xuXG4gICAgdmFyIGZvY3VzRWRpdG9yID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgd2luZG93Qmx1cnJlZCA9ICFkb2N1bWVudC5oYXNGb2N1cyB8fCAhZG9jdW1lbnQuaGFzRm9jdXMoKVxuICAgICAgICAgICAgfHwgIWVkaXRvci5pc0ZvY3VzZWQoKSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IChlZGl0b3IudGV4dElucHV0ICYmIGVkaXRvci50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpKTtcbiAgICAgICAgaWYgKHdpbmRvd0JsdXJyZWQpXG4gICAgICAgICAgICB3aW5kb3cuZm9jdXMoKTtcbiAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgfTtcblxuICAgIHZhciBtb3VzZVRhcmdldCA9IGVkaXRvci5yZW5kZXJlci5nZXRNb3VzZUV2ZW50VGFyZ2V0KCk7XG4gICAgZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJnZXQsIFwiY2xpY2tcIiwgdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCBcImNsaWNrXCIpKTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgXCJtb3VzZW1vdmVcIiwgdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMsIFwibW91c2Vtb3ZlXCIpKTtcbiAgICBldmVudC5hZGRNdWx0aU1vdXNlRG93bkxpc3RlbmVyKFtcbiAgICAgICAgbW91c2VUYXJnZXQsXG4gICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxCYXJWICYmIGVkaXRvci5yZW5kZXJlci5zY3JvbGxCYXJWLmlubmVyLFxuICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFySCAmJiBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFySC5pbm5lcixcbiAgICAgICAgZWRpdG9yLnRleHRJbnB1dCAmJiBlZGl0b3IudGV4dElucHV0LmdldEVsZW1lbnQoKVxuICAgIF0uZmlsdGVyKEJvb2xlYW4pLCBbNDAwLCAzMDAsIDI1MF0sIHRoaXMsIFwib25Nb3VzZUV2ZW50XCIpO1xuICAgIGV2ZW50LmFkZE1vdXNlV2hlZWxMaXN0ZW5lcihlZGl0b3IuY29udGFpbmVyLCB0aGlzLm9uTW91c2VXaGVlbC5iaW5kKHRoaXMsIFwibW91c2V3aGVlbFwiKSk7XG4gICAgZXZlbnQuYWRkVG91Y2hNb3ZlTGlzdGVuZXIoZWRpdG9yLmNvbnRhaW5lciwgdGhpcy5vblRvdWNoTW92ZS5iaW5kKHRoaXMsIFwidG91Y2htb3ZlXCIpKTtcblxuICAgIHZhciBndXR0ZXJFbCA9IGVkaXRvci5yZW5kZXJlci4kZ3V0dGVyO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKGd1dHRlckVsLCBcIm1vdXNlZG93blwiLCB0aGlzLm9uTW91c2VFdmVudC5iaW5kKHRoaXMsIFwiZ3V0dGVybW91c2Vkb3duXCIpKTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihndXR0ZXJFbCwgXCJjbGlja1wiLCB0aGlzLm9uTW91c2VFdmVudC5iaW5kKHRoaXMsIFwiZ3V0dGVyY2xpY2tcIikpO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKGd1dHRlckVsLCBcImRibGNsaWNrXCIsIHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywgXCJndXR0ZXJkYmxjbGlja1wiKSk7XG4gICAgZXZlbnQuYWRkTGlzdGVuZXIoZ3V0dGVyRWwsIFwibW91c2Vtb3ZlXCIsIHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywgXCJndXR0ZXJtb3VzZW1vdmVcIikpO1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJnZXQsIFwibW91c2Vkb3duXCIsIGZvY3VzRWRpdG9yKTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihndXR0ZXJFbCwgXCJtb3VzZWRvd25cIiwgZm9jdXNFZGl0b3IpO1xuICAgIGlmICh1c2VyYWdlbnQuaXNJRSAmJiBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFyVikge1xuICAgICAgICBldmVudC5hZGRMaXN0ZW5lcihlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFyVi5lbGVtZW50LCBcIm1vdXNlZG93blwiLCBmb2N1c0VkaXRvcik7XG4gICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKGVkaXRvci5yZW5kZXJlci5zY3JvbGxCYXJILmVsZW1lbnQsIFwibW91c2Vkb3duXCIsIGZvY3VzRWRpdG9yKTtcbiAgICB9XG5cbiAgICBlZGl0b3Iub24oXCJtb3VzZW1vdmVcIiwgZnVuY3Rpb24oZSl7XG4gICAgICAgIGlmIChfc2VsZi5zdGF0ZSB8fCBfc2VsZi4kZHJhZ0RlbGF5IHx8ICFfc2VsZi4kZHJhZ0VuYWJsZWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdmFyIGNoYXJhY3RlciA9IGVkaXRvci5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyhlLngsIGUueSk7XG4gICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5zZXNzaW9uLnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuICAgICAgICB2YXIgcmVuZGVyZXIgPSBlZGl0b3IucmVuZGVyZXI7XG5cbiAgICAgICAgaWYgKCFyYW5nZS5pc0VtcHR5KCkgJiYgcmFuZ2UuaW5zaWRlU3RhcnQoY2hhcmFjdGVyLnJvdywgY2hhcmFjdGVyLmNvbHVtbikpIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEN1cnNvclN0eWxlKFwiZGVmYXVsdFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEN1cnNvclN0eWxlKFwiXCIpO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5vbk1vdXNlRXZlbnQgPSBmdW5jdGlvbihuYW1lLCBlKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLl9lbWl0KG5hbWUsIG5ldyBNb3VzZUV2ZW50KGUsIHRoaXMuZWRpdG9yKSk7XG4gICAgfTtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBmdW5jdGlvbihuYW1lLCBlKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeSAmJiB0aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeS5tb3VzZW1vdmU7XG4gICAgICAgIGlmICghbGlzdGVuZXJzIHx8ICFsaXN0ZW5lcnMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuZWRpdG9yLl9lbWl0KG5hbWUsIG5ldyBNb3VzZUV2ZW50KGUsIHRoaXMuZWRpdG9yKSk7XG4gICAgfTtcblxuICAgIHRoaXMub25Nb3VzZVdoZWVsID0gZnVuY3Rpb24obmFtZSwgZSkge1xuICAgICAgICB2YXIgbW91c2VFdmVudCA9IG5ldyBNb3VzZUV2ZW50KGUsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgbW91c2VFdmVudC5zcGVlZCA9IHRoaXMuJHNjcm9sbFNwZWVkICogMjtcbiAgICAgICAgbW91c2VFdmVudC53aGVlbFggPSBlLndoZWVsWDtcbiAgICAgICAgbW91c2VFdmVudC53aGVlbFkgPSBlLndoZWVsWTtcblxuICAgICAgICB0aGlzLmVkaXRvci5fZW1pdChuYW1lLCBtb3VzZUV2ZW50KTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAobmFtZSwgZSkge1xuICAgICAgICB2YXIgbW91c2VFdmVudCA9IG5ldyBNb3VzZUV2ZW50KGUsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgbW91c2VFdmVudC5zcGVlZCA9IDE7Ly90aGlzLiRzY3JvbGxTcGVlZCAqIDI7XG4gICAgICAgIG1vdXNlRXZlbnQud2hlZWxYID0gZS53aGVlbFg7XG4gICAgICAgIG1vdXNlRXZlbnQud2hlZWxZID0gZS53aGVlbFk7XG4gICAgICAgIHRoaXMuZWRpdG9yLl9lbWl0KG5hbWUsIG1vdXNlRXZlbnQpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldFN0YXRlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIH07XG5cbiAgICB0aGlzLmNhcHR1cmVNb3VzZSA9IGZ1bmN0aW9uKGV2LCBtb3VzZU1vdmVIYW5kbGVyKSB7XG4gICAgICAgIHRoaXMueCA9IGV2Lng7XG4gICAgICAgIHRoaXMueSA9IGV2Lnk7XG5cbiAgICAgICAgdGhpcy5pc01vdXNlUHJlc3NlZCA9IHRydWU7XG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMuZWRpdG9yLnJlbmRlcmVyO1xuICAgICAgICBpZiAocmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yKVxuICAgICAgICAgICAgcmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID0gbnVsbDtcblxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBvbk1vdXNlTW92ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmICghZSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHVzZXJhZ2VudC5pc1dlYktpdCAmJiAhZS53aGljaCAmJiBzZWxmLnJlbGVhc2VNb3VzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWxlYXNlTW91c2UoKTtcblxuICAgICAgICAgICAgc2VsZi54ID0gZS5jbGllbnRYO1xuICAgICAgICAgICAgc2VsZi55ID0gZS5jbGllbnRZO1xuICAgICAgICAgICAgbW91c2VNb3ZlSGFuZGxlciAmJiBtb3VzZU1vdmVIYW5kbGVyKGUpO1xuICAgICAgICAgICAgc2VsZi5tb3VzZUV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoZSwgc2VsZi5lZGl0b3IpO1xuICAgICAgICAgICAgc2VsZi4kbW91c2VNb3ZlZCA9IHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIG9uQ2FwdHVyZUVuZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgICAgICBvbkNhcHR1cmVJbnRlcnZhbCgpO1xuICAgICAgICAgICAgc2VsZltzZWxmLnN0YXRlICsgXCJFbmRcIl0gJiYgc2VsZltzZWxmLnN0YXRlICsgXCJFbmRcIl0oZSk7XG4gICAgICAgICAgICBzZWxmLnN0YXRlID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChyZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmlzTW91c2VQcmVzc2VkID0gZmFsc2U7XG4gICAgICAgICAgICBzZWxmLiRvbkNhcHR1cmVNb3VzZU1vdmUgPSBzZWxmLnJlbGVhc2VNb3VzZSA9IG51bGw7XG4gICAgICAgICAgICBlICYmIHNlbGYub25Nb3VzZUV2ZW50KFwibW91c2V1cFwiLCBlKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgb25DYXB0dXJlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHNlbGZbc2VsZi5zdGF0ZV0gJiYgc2VsZltzZWxmLnN0YXRlXSgpO1xuICAgICAgICAgICAgc2VsZi4kbW91c2VNb3ZlZCA9IGZhbHNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh1c2VyYWdlbnQuaXNPbGRJRSAmJiBldi5kb21FdmVudC50eXBlID09IFwiZGJsY2xpY2tcIikge1xuICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7b25DYXB0dXJlRW5kKGV2KTt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuJG9uQ2FwdHVyZU1vdXNlTW92ZSA9IG9uTW91c2VNb3ZlO1xuICAgICAgICBzZWxmLnJlbGVhc2VNb3VzZSA9IGV2ZW50LmNhcHR1cmUodGhpcy5lZGl0b3IuY29udGFpbmVyLCBvbk1vdXNlTW92ZSwgb25DYXB0dXJlRW5kKTtcbiAgICAgICAgdmFyIHRpbWVySWQgPSBzZXRJbnRlcnZhbChvbkNhcHR1cmVJbnRlcnZhbCwgMjApO1xuICAgIH07XG4gICAgdGhpcy5yZWxlYXNlTW91c2UgPSBudWxsO1xuICAgIHRoaXMuY2FuY2VsQ29udGV4dE1lbnUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHN0b3AgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSAmJiBlLmRvbUV2ZW50ICYmIGUuZG9tRXZlbnQudHlwZSAhPSBcImNvbnRleHRtZW51XCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3Iub2ZmKFwibmF0aXZlY29udGV4dG1lbnVcIiwgc3RvcCk7XG4gICAgICAgICAgICBpZiAoZSAmJiBlLmRvbUV2ZW50KVxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BFdmVudChlLmRvbUV2ZW50KTtcbiAgICAgICAgfS5iaW5kKHRoaXMpO1xuICAgICAgICBzZXRUaW1lb3V0KHN0b3AsIDEwKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iub24oXCJuYXRpdmVjb250ZXh0bWVudVwiLCBzdG9wKTtcbiAgICB9O1xufSkuY2FsbChNb3VzZUhhbmRsZXIucHJvdG90eXBlKTtcblxuY29uZmlnLmRlZmluZU9wdGlvbnMoTW91c2VIYW5kbGVyLnByb3RvdHlwZSwgXCJtb3VzZUhhbmRsZXJcIiwge1xuICAgIHNjcm9sbFNwZWVkOiB7aW5pdGlhbFZhbHVlOiAyfSxcbiAgICBkcmFnRGVsYXk6IHtpbml0aWFsVmFsdWU6ICh1c2VyYWdlbnQuaXNNYWMgPyAxNTAgOiAwKX0sXG4gICAgZHJhZ0VuYWJsZWQ6IHtpbml0aWFsVmFsdWU6IHRydWV9LFxuICAgIGZvY3VzVGltb3V0OiB7aW5pdGlhbFZhbHVlOiAwfSxcbiAgICB0b29sdGlwRm9sbG93c01vdXNlOiB7aW5pdGlhbFZhbHVlOiB0cnVlfVxufSk7XG5cblxuZXhwb3J0cy5Nb3VzZUhhbmRsZXIgPSBNb3VzZUhhbmRsZXI7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9tb3VzZS9mb2xkX2hhbmRsZXJcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBGb2xkSGFuZGxlcihlZGl0b3IpIHtcblxuICAgIGVkaXRvci5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gZS5nZXREb2N1bWVudFBvc2l0aW9uKCk7XG4gICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247XG4gICAgICAgIHZhciBmb2xkID0gc2Vzc2lvbi5nZXRGb2xkQXQocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4sIDEpO1xuICAgICAgICBpZiAoZm9sZCkge1xuICAgICAgICAgICAgaWYgKGUuZ2V0QWNjZWxLZXkoKSlcbiAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZUZvbGQoZm9sZCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5leHBhbmRGb2xkKGZvbGQpO1xuXG4gICAgICAgICAgICBlLnN0b3AoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZWRpdG9yLm9uKFwiZ3V0dGVyY2xpY2tcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgZ3V0dGVyUmVnaW9uID0gZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXJMYXllci5nZXRSZWdpb24oZSk7XG5cbiAgICAgICAgaWYgKGd1dHRlclJlZ2lvbiA9PSBcImZvbGRXaWRnZXRzXCIpIHtcbiAgICAgICAgICAgIHZhciByb3cgPSBlLmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7XG4gICAgICAgICAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uO1xuICAgICAgICAgICAgaWYgKHNlc3Npb24uZm9sZFdpZGdldHMgJiYgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3ddKVxuICAgICAgICAgICAgICAgIGVkaXRvci5zZXNzaW9uLm9uRm9sZFdpZGdldENsaWNrKHJvdywgZSk7XG4gICAgICAgICAgICBpZiAoIWVkaXRvci5pc0ZvY3VzZWQoKSlcbiAgICAgICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgICAgIGUuc3RvcCgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBlZGl0b3Iub24oXCJndXR0ZXJkYmxjbGlja1wiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBndXR0ZXJSZWdpb24gPSBlZGl0b3IucmVuZGVyZXIuJGd1dHRlckxheWVyLmdldFJlZ2lvbihlKTtcblxuICAgICAgICBpZiAoZ3V0dGVyUmVnaW9uID09IFwiZm9sZFdpZGdldHNcIikge1xuICAgICAgICAgICAgdmFyIHJvdyA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLnJvdztcbiAgICAgICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHNlc3Npb24uZ2V0UGFyZW50Rm9sZFJhbmdlRGF0YShyb3csIHRydWUpO1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gZGF0YS5yYW5nZSB8fCBkYXRhLmZpcnN0UmFuZ2U7XG5cbiAgICAgICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgICAgIHJvdyA9IHJhbmdlLnN0YXJ0LnJvdztcbiAgICAgICAgICAgICAgICB2YXIgZm9sZCA9IHNlc3Npb24uZ2V0Rm9sZEF0KHJvdywgc2Vzc2lvbi5nZXRMaW5lKHJvdykubGVuZ3RoLCAxKTtcblxuICAgICAgICAgICAgICAgIGlmIChmb2xkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlRm9sZChmb2xkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmFkZEZvbGQoXCIuLi5cIiwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoe3JvdzogcmFuZ2Uuc3RhcnQucm93LCBjb2x1bW46IDB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLnN0b3AoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5leHBvcnRzLkZvbGRIYW5kbGVyID0gRm9sZEhhbmRsZXI7XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2tleWJvYXJkL2tleWJpbmRpbmdcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIva2V5c1wiLFwiYWNlL2xpYi9ldmVudFwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBrZXlVdGlsICA9IGFjZXF1aXJlKFwiLi4vbGliL2tleXNcIik7XG52YXIgZXZlbnQgPSBhY2VxdWlyZShcIi4uL2xpYi9ldmVudFwiKTtcblxudmFyIEtleUJpbmRpbmcgPSBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICB0aGlzLiRlZGl0b3IgPSBlZGl0b3I7XG4gICAgdGhpcy4kZGF0YSA9IHtlZGl0b3I6IGVkaXRvcn07XG4gICAgdGhpcy4kaGFuZGxlcnMgPSBbXTtcbiAgICB0aGlzLnNldERlZmF1bHRIYW5kbGVyKGVkaXRvci5jb21tYW5kcyk7XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uKGtiKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyKHRoaXMuJGRlZmF1bHRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy4kZGVmYXVsdEhhbmRsZXIgPSBrYjtcbiAgICAgICAgdGhpcy5hZGRLZXlib2FyZEhhbmRsZXIoa2IsIDApO1xuICAgIH07XG5cbiAgICB0aGlzLnNldEtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9uKGtiKSB7XG4gICAgICAgIHZhciBoID0gdGhpcy4kaGFuZGxlcnM7XG4gICAgICAgIGlmIChoW2gubGVuZ3RoIC0gMV0gPT0ga2IpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgd2hpbGUgKGhbaC5sZW5ndGggLSAxXSAmJiBoW2gubGVuZ3RoIC0gMV0gIT0gdGhpcy4kZGVmYXVsdEhhbmRsZXIpXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUtleWJvYXJkSGFuZGxlcihoW2gubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHRoaXMuYWRkS2V5Ym9hcmRIYW5kbGVyKGtiLCAxKTtcbiAgICB9O1xuXG4gICAgdGhpcy5hZGRLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbihrYiwgcG9zKSB7XG4gICAgICAgIGlmICgha2IpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0eXBlb2Yga2IgPT0gXCJmdW5jdGlvblwiICYmICFrYi5oYW5kbGVLZXlib2FyZClcbiAgICAgICAgICAgIGtiLmhhbmRsZUtleWJvYXJkID0ga2I7XG4gICAgICAgIHZhciBpID0gdGhpcy4kaGFuZGxlcnMuaW5kZXhPZihrYik7XG4gICAgICAgIGlmIChpICE9IC0xKVxuICAgICAgICAgICAgdGhpcy4kaGFuZGxlcnMuc3BsaWNlKGksIDEpO1xuXG4gICAgICAgIGlmIChwb3MgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy4kaGFuZGxlcnMucHVzaChrYik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuJGhhbmRsZXJzLnNwbGljZShwb3MsIDAsIGtiKTtcblxuICAgICAgICBpZiAoaSA9PSAtMSAmJiBrYi5hdHRhY2gpXG4gICAgICAgICAgICBrYi5hdHRhY2godGhpcy4kZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZW1vdmVLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbihrYikge1xuICAgICAgICB2YXIgaSA9IHRoaXMuJGhhbmRsZXJzLmluZGV4T2Yoa2IpO1xuICAgICAgICBpZiAoaSA9PSAtMSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy4kaGFuZGxlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICBrYi5kZXRhY2ggJiYga2IuZGV0YWNoKHRoaXMuJGVkaXRvcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlcnNbdGhpcy4kaGFuZGxlcnMubGVuZ3RoIC0gMV07XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmdldFN0YXR1c1RleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLiRkYXRhO1xuICAgICAgICB2YXIgZWRpdG9yID0gZGF0YS5lZGl0b3I7XG4gICAgICAgIHJldHVybiB0aGlzLiRoYW5kbGVycy5tYXAoZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgcmV0dXJuIGguZ2V0U3RhdHVzVGV4dCAmJiBoLmdldFN0YXR1c1RleHQoZWRpdG9yLCBkYXRhKSB8fCBcIlwiO1xuICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG4gICAgfTtcblxuICAgIHRoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJzID0gZnVuY3Rpb24oaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUsIGUpIHtcbiAgICAgICAgdmFyIHRvRXhlY3V0ZTtcbiAgICAgICAgdmFyIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdmFyIGNvbW1hbmRzID0gdGhpcy4kZWRpdG9yLmNvbW1hbmRzO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLiRoYW5kbGVycy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgIHRvRXhlY3V0ZSA9IHRoaXMuJGhhbmRsZXJzW2ldLmhhbmRsZUtleWJvYXJkKFxuICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEsIGhhc2hJZCwga2V5U3RyaW5nLCBrZXlDb2RlLCBlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCF0b0V4ZWN1dGUgfHwgIXRvRXhlY3V0ZS5jb21tYW5kKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHRvRXhlY3V0ZS5jb21tYW5kID09IFwibnVsbFwiKSB7XG4gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBjb21tYW5kcy5leGVjKHRvRXhlY3V0ZS5jb21tYW5kLCB0aGlzLiRlZGl0b3IsIHRvRXhlY3V0ZS5hcmdzLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdWNjZXNzICYmIGUgJiYgaGFzaElkICE9IC0xICYmIFxuICAgICAgICAgICAgICAgIHRvRXhlY3V0ZS5wYXNzRXZlbnQgIT0gdHJ1ZSAmJiB0b0V4ZWN1dGUuY29tbWFuZC5wYXNzRXZlbnQgIT0gdHJ1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcEV2ZW50KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICghc3VjY2VzcyAmJiBoYXNoSWQgPT0gLTEpIHtcbiAgICAgICAgICAgIHRvRXhlY3V0ZSA9IHtjb21tYW5kOiBcImluc2VydHN0cmluZ1wifTtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSBjb21tYW5kcy5leGVjKFwiaW5zZXJ0c3RyaW5nXCIsIHRoaXMuJGVkaXRvciwga2V5U3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgdGhpcy4kZWRpdG9yLl9zaWduYWwpXG4gICAgICAgICAgICB0aGlzLiRlZGl0b3IuX3NpZ25hbChcImtleWJvYXJkQWN0aXZpdHlcIiwgdG9FeGVjdXRlKTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH07XG5cbiAgICB0aGlzLm9uQ29tbWFuZEtleSA9IGZ1bmN0aW9uKGUsIGhhc2hJZCwga2V5Q29kZSkge1xuICAgICAgICB2YXIga2V5U3RyaW5nID0ga2V5VXRpbC5rZXlDb2RlVG9TdHJpbmcoa2V5Q29kZSk7XG4gICAgICAgIHRoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJzKGhhc2hJZCwga2V5U3RyaW5nLCBrZXlDb2RlLCBlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vblRleHRJbnB1dCA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgdGhpcy4kY2FsbEtleWJvYXJkSGFuZGxlcnMoLTEsIHRleHQpO1xuICAgIH07XG5cbn0pLmNhbGwoS2V5QmluZGluZy5wcm90b3R5cGUpO1xuXG5leHBvcnRzLktleUJpbmRpbmcgPSBLZXlCaW5kaW5nO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGliL2JpZGl1dGlsXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEFyYWJpY0FsZWZCZXRJbnRlcnZhbHNCZWdpbmUgPSBbJ1xcdTA2MjEnLCAnXFx1MDY0MSddO1xudmFyIEFyYWJpY0FsZWZCZXRJbnRlcnZhbHNFbmQgPSBbJ1xcdTA2M0EnLCAnXFx1MDY0YSddO1xudmFyIGRpciA9IDAsIGhpTGV2ZWwgPSAwO1xudmFyIGxhc3RBcmFiaWMgPSBmYWxzZSwgaGFzVUJBVF9BTCA9IGZhbHNlLCAgaGFzVUJBVF9CID0gZmFsc2UsICBoYXNVQkFUX1MgPSBmYWxzZSwgaGFzQmxvY2tTZXAgPSBmYWxzZSwgaGFzU2VnU2VwID0gZmFsc2U7XG5cbnZhciBpbXBUYWJfTFRSID0gW1x0W1x0MCxcdFx0MyxcdFx0MCxcdFx0MSxcdFx0MCxcdFx0MCxcdFx0MFx0XSxcdFtcdDAsXHRcdDMsXHRcdDAsXHRcdDEsXHRcdDIsXHRcdDIsXHRcdDBcdF0sXHRbXHQwLFx0XHQzLFx0XHQwLFx0XHQweDExLFx0XHQyLFx0XHQwLFx0XHQxXHRdLFx0W1x0MCxcdFx0MyxcdFx0NSxcdFx0NSxcdFx0NCxcdFx0MSxcdFx0MFx0XSxcdFtcdDAsXHRcdDMsXHRcdDB4MTUsXHRcdDB4MTUsXHRcdDQsXHRcdDAsXHRcdDFcdF0sXHRbXHQwLFx0XHQzLFx0XHQ1LFx0XHQ1LFx0XHQ0LFx0XHQyLFx0XHQwXHRdXG5dO1xuXG52YXIgaW1wVGFiX1JUTCA9IFtcdFtcdDIsXHRcdDAsXHRcdDEsXHRcdDEsXHRcdDAsXHRcdDEsXHRcdDBcdF0sXHRbXHQyLFx0XHQwLFx0XHQxLFx0XHQxLFx0XHQwLFx0XHQyLFx0XHQwXHRdLFx0W1x0MixcdFx0MCxcdFx0MixcdFx0MSxcdFx0MyxcdFx0MixcdFx0MFx0XSxcdFtcdDIsXHRcdDAsXHRcdDIsXHRcdDB4MjEsXHRcdDMsXHRcdDEsXHRcdDFcdF1cbl07XG5cbnZhciBMVFIgPSAwLCBSVEwgPSAxO1xuXG52YXIgTCA9IDA7XG52YXIgUiA9IDE7XG52YXIgRU4gPSAyO1xudmFyIEFOID0gMztcbnZhciBPTiA9IDQ7XG52YXIgQiA9IDU7XG52YXIgUyA9IDY7XG52YXIgQUwgPSA3O1xudmFyIFdTID0gODtcbnZhciBDUyA9IDk7XG52YXIgRVMgPSAxMDtcbnZhciBFVCA9IDExO1xudmFyIE5TTSA9IDEyO1xudmFyIExSRSA9IDEzO1xudmFyIFJMRSA9IDE0O1xudmFyIFBERiA9IDE1O1xudmFyIExSTyA9IDE2O1xudmFyIFJMTyA9IDE3O1xudmFyIEJOID0gMTg7XG5cbnZhciBVbmljb2RlVEJMMDAgPSBbXG5CTixCTixCTixCTixCTixCTixCTixCTixCTixTLEIsUyxXUyxCLEJOLEJOLFxuQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQixCLEIsUyxcbldTLE9OLE9OLEVULEVULEVULE9OLE9OLE9OLE9OLE9OLEVTLENTLEVTLENTLENTLFxuRU4sRU4sRU4sRU4sRU4sRU4sRU4sRU4sRU4sRU4sQ1MsT04sT04sT04sT04sT04sXG5PTixMLEwsTCxMLEwsTCxMLEwsTCxMLEwsTCxMLEwsTCxcbkwsTCxMLEwsTCxMLEwsTCxMLEwsTCxPTixPTixPTixPTixPTixcbk9OLEwsTCxMLEwsTCxMLEwsTCxMLEwsTCxMLEwsTCxMLFxuTCxMLEwsTCxMLEwsTCxMLEwsTCxMLE9OLE9OLE9OLE9OLEJOLFxuQk4sQk4sQk4sQk4sQk4sQixCTixCTixCTixCTixCTixCTixCTixCTixCTixCTixcbkJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLFxuQ1MsT04sRVQsRVQsRVQsRVQsT04sT04sT04sT04sTCxPTixPTixCTixPTixPTixcbkVULEVULEVOLEVOLE9OLEwsT04sT04sT04sRU4sTCxPTixPTixPTixPTixPTlxuXTtcblxudmFyIFVuaWNvZGVUQkwyMCA9IFtcbldTLFdTLFdTLFdTLFdTLFdTLFdTLFdTLFdTLFdTLFdTLEJOLEJOLEJOLEwsUlx0LFxuT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sXG5PTixPTixPTixPTixPTixPTixPTixPTixXUyxCLExSRSxSTEUsUERGLExSTyxSTE8sQ1MsXG5FVCxFVCxFVCxFVCxFVCxPTixPTixPTixPTixPTixPTixPTixPTixPTixPTixPTixcbk9OLE9OLE9OLE9OLENTLE9OLE9OLE9OLE9OLE9OLE9OLE9OLE9OLE9OLE9OLE9OLFxuT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sV1Ncbl07XG5cbmZ1bmN0aW9uIF9jb21wdXRlTGV2ZWxzKGNoYXJzLCBsZXZlbHMsIGxlbiwgY2hhclR5cGVzKSB7XG5cdHZhciBpbXBUYWIgPSBkaXIgPyBpbXBUYWJfUlRMIDogaW1wVGFiX0xUUlxuXHRcdCwgcHJldlN0YXRlID0gbnVsbCwgbmV3Q2xhc3MgPSBudWxsLCBuZXdMZXZlbCA9IG51bGwsIG5ld1N0YXRlID0gMFxuXHRcdCwgYWN0aW9uID0gbnVsbCwgY29uZCA9IG51bGwsIGNvbmRQb3MgPSAtMSwgaSA9IG51bGwsIGl4ID0gbnVsbCwgY2xhc3NlcyA9IFtdO1xuXG5cdGlmICghY2hhclR5cGVzKSB7XG5cdFx0Zm9yIChpID0gMCwgY2hhclR5cGVzID0gW107IGkgPCBsZW47IGkrKykge1xuXHRcdFx0Y2hhclR5cGVzW2ldID0gX2dldENoYXJhY3RlclR5cGUoY2hhcnNbaV0pO1xuXHRcdH1cblx0fVxuXHRoaUxldmVsID0gZGlyO1xuXHRsYXN0QXJhYmljID0gZmFsc2U7XG5cdGhhc1VCQVRfQUwgPSBmYWxzZTtcblx0aGFzVUJBVF9CID0gZmFsc2U7XG5cdGhhc1VCQVRfUyA9IGZhbHNlO1xuXHRmb3IgKGl4ID0gMDsgaXggPCBsZW47IGl4Kyspe1xuXHRcdHByZXZTdGF0ZSA9IG5ld1N0YXRlO1xuXHRcdGNsYXNzZXNbaXhdID0gbmV3Q2xhc3MgPSBfZ2V0Q2hhckNsYXNzKGNoYXJzLCBjaGFyVHlwZXMsIGNsYXNzZXMsIGl4KTtcblx0XHRuZXdTdGF0ZSA9IGltcFRhYltwcmV2U3RhdGVdW25ld0NsYXNzXTtcblx0XHRhY3Rpb24gPSBuZXdTdGF0ZSAmIDB4RjA7XG5cdFx0bmV3U3RhdGUgJj0gMHgwRjtcblx0XHRsZXZlbHNbaXhdID0gbmV3TGV2ZWwgPSBpbXBUYWJbbmV3U3RhdGVdWzVdO1xuXHRcdGlmIChhY3Rpb24gPiAwKXtcblx0XHRcdGlmIChhY3Rpb24gPT0gMHgxMCl7XG5cdFx0XHRcdGZvcihpID0gY29uZFBvczsgaSA8IGl4OyBpKyspe1xuXHRcdFx0XHRcdGxldmVsc1tpXSA9IDE7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uZFBvcyA9IC0xO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uZFBvcyA9IC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25kID0gaW1wVGFiW25ld1N0YXRlXVs2XTtcblx0XHRpZiAoY29uZCl7XG5cdFx0XHRpZihjb25kUG9zID09IC0xKXtcblx0XHRcdFx0Y29uZFBvcyA9IGl4O1xuXHRcdFx0fVxuXHRcdH1lbHNle1xuXHRcdFx0aWYgKGNvbmRQb3MgPiAtMSl7XG5cdFx0XHRcdGZvcihpID0gY29uZFBvczsgaSA8IGl4OyBpKyspe1xuXHRcdFx0XHRcdGxldmVsc1tpXSA9IG5ld0xldmVsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbmRQb3MgPSAtMTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGNoYXJUeXBlc1tpeF0gPT0gQil7XG5cdFx0XHRsZXZlbHNbaXhdID0gMDtcblx0XHR9XG5cdFx0aGlMZXZlbCB8PSBuZXdMZXZlbDtcblx0fVxuXHRpZiAoaGFzVUJBVF9TKXtcblx0XHRmb3IoaSA9IDA7IGkgPCBsZW47IGkrKyl7XG5cdFx0XHRpZihjaGFyVHlwZXNbaV0gPT0gUyl7XG5cdFx0XHRcdGxldmVsc1tpXSA9IGRpcjtcblx0XHRcdFx0Zm9yKHZhciBqID0gaSAtIDE7IGogPj0gMDsgai0tKXtcblx0XHRcdFx0XHRpZihjaGFyVHlwZXNbal0gPT0gV1Mpe1xuXHRcdFx0XHRcdFx0bGV2ZWxzW2pdID0gZGlyO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIF9pbnZlcnRMZXZlbChsZXYsIGxldmVscywgX2FycmF5KSB7XG5cdGlmIChoaUxldmVsIDwgbGV2KXtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKGxldiA9PSAxICYmIGRpciA9PSBSVEwgJiYgIWhhc1VCQVRfQil7XG5cdFx0X2FycmF5LnJldmVyc2UoKTtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIGxlbiA9IF9hcnJheS5sZW5ndGgsIHN0YXJ0ID0gMCwgZW5kLCBsbywgaGksIHRtcDtcblx0d2hpbGUoc3RhcnQgPCBsZW4pe1xuXHRcdGlmIChsZXZlbHNbc3RhcnRdID49IGxldil7XG5cdFx0XHRlbmQgPSBzdGFydCArIDE7XG5cdFx0d2hpbGUoZW5kIDwgbGVuICYmIGxldmVsc1tlbmRdID49IGxldil7XG5cdFx0XHRlbmQrKztcblx0XHR9XG5cdFx0Zm9yKGxvID0gc3RhcnQsIGhpID0gZW5kIC0gMSA7IGxvIDwgaGk7IGxvKyssIGhpLS0pe1xuXHRcdFx0dG1wID0gX2FycmF5W2xvXTtcblx0XHRcdF9hcnJheVtsb10gPSBfYXJyYXlbaGldO1xuXHRcdFx0X2FycmF5W2hpXSA9IHRtcDtcblx0XHR9XG5cdFx0c3RhcnQgPSBlbmQ7XG5cdH1cblx0c3RhcnQrKztcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0Q2hhckNsYXNzKGNoYXJzLCB0eXBlcywgY2xhc3NlcywgaXgpIHtcblx0dmFyIGNUeXBlID0gdHlwZXNbaXhdLCB3VHlwZSwgblR5cGUsIGxlbiwgaTtcblx0c3dpdGNoKGNUeXBlKXtcblx0XHRjYXNlIEw6XG5cdFx0Y2FzZSBSOlxuXHRcdFx0bGFzdEFyYWJpYyA9IGZhbHNlO1xuXHRcdGNhc2UgT046XG5cdFx0Y2FzZSBBTjpcblx0XHRcdHJldHVybiBjVHlwZTtcblx0XHRjYXNlIEVOOlxuXHRcdFx0cmV0dXJuIGxhc3RBcmFiaWMgPyBBTiA6IEVOO1xuXHRcdGNhc2UgQUw6XG5cdFx0XHRsYXN0QXJhYmljID0gdHJ1ZTtcblx0XHRcdGhhc1VCQVRfQUwgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIFI7XG5cdFx0Y2FzZSBXUzpcblx0XHRcdHJldHVybiBPTjtcblx0XHRjYXNlIENTOlxuXHRcdFx0aWYgKGl4IDwgMSB8fCAoaXggKyAxKSA+PSB0eXBlcy5sZW5ndGggfHxcblx0XHRcdFx0KCh3VHlwZSA9IGNsYXNzZXNbaXggLSAxXSkgIT0gRU4gJiYgd1R5cGUgIT0gQU4pIHx8XG5cdFx0XHRcdCgoblR5cGUgPSB0eXBlc1tpeCArIDFdKSAhPSBFTiAmJiBuVHlwZSAhPSBBTikpe1xuXHRcdFx0XHRyZXR1cm4gT047XG5cdFx0XHR9XG5cdFx0XHRpZiAobGFzdEFyYWJpYyl7blR5cGUgPSBBTjt9XG5cdFx0XHRyZXR1cm4gblR5cGUgPT0gd1R5cGUgPyBuVHlwZSA6IE9OO1xuXHRcdGNhc2UgRVM6XG5cdFx0XHR3VHlwZSA9IGl4ID4gMCA/IGNsYXNzZXNbaXggLSAxXSA6IEI7XG5cdFx0XHRpZiAod1R5cGUgPT0gRU4gJiYgKGl4ICsgMSkgPCB0eXBlcy5sZW5ndGggJiYgdHlwZXNbaXggKyAxXSA9PSBFTil7XG5cdFx0XHRcdHJldHVybiBFTjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBPTjtcblx0XHRjYXNlIEVUOlxuXHRcdFx0aWYgKGl4ID4gMCAmJiBjbGFzc2VzW2l4IC0gMV0gPT0gRU4pe1xuXHRcdFx0XHRyZXR1cm4gRU47XG5cdFx0XHR9XG5cdFx0XHRpZiAobGFzdEFyYWJpYyl7XG5cdFx0XHRcdHJldHVybiBPTjtcblx0XHRcdH1cblx0XHRcdGkgPSBpeCArIDE7XG5cdFx0XHRsZW4gPSB0eXBlcy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoaSA8IGxlbiAmJiB0eXBlc1tpXSA9PSBFVCl7XG5cdFx0XHRcdGkrKztcblx0XHRcdH1cblx0XHRcdGlmIChpIDwgbGVuICYmIHR5cGVzW2ldID09IEVOKXtcblx0XHRcdFx0cmV0dXJuIEVOO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIE9OO1xuXHRcdGNhc2UgTlNNOlxuXHRcdFx0bGVuID0gdHlwZXMubGVuZ3RoO1xuXHRcdFx0aSA9IGl4ICsgMTtcblx0XHRcdHdoaWxlIChpIDwgbGVuICYmIHR5cGVzW2ldID09IE5TTSl7XG5cdFx0XHRcdGkrKztcblx0XHRcdH1cblx0XHRcdGlmIChpIDwgbGVuKXtcblx0XHRcdFx0dmFyIGMgPSBjaGFyc1tpeF0sIHJ0bENhbmRpZGF0ZSA9IChjID49IDB4MDU5MSAmJiBjIDw9IDB4MDhGRikgfHwgYyA9PSAweEZCMUU7XG5cblx0XHRcdFx0d1R5cGUgPSB0eXBlc1tpXTtcblx0XHRcdFx0aWYgKHJ0bENhbmRpZGF0ZSAmJiAod1R5cGUgPT0gUiB8fCB3VHlwZSA9PSBBTCkpe1xuXHRcdFx0XHRcdHJldHVybiBSO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpeCA8IDEgfHwgKHdUeXBlID0gdHlwZXNbaXggLSAxXSkgPT0gQil7XG5cdFx0XHRcdHJldHVybiBPTjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjbGFzc2VzW2l4IC0gMV07XG5cdFx0Y2FzZSBCOlxuXHRcdFx0bGFzdEFyYWJpYyA9IGZhbHNlO1xuXHRcdFx0aGFzVUJBVF9CID0gdHJ1ZTtcblx0XHRcdHJldHVybiBkaXI7XG5cdFx0Y2FzZSBTOlxuXHRcdFx0aGFzVUJBVF9TID0gdHJ1ZTtcblx0XHRcdHJldHVybiBPTjtcblx0XHRjYXNlIExSRTpcblx0XHRjYXNlIFJMRTpcblx0XHRjYXNlIExSTzpcblx0XHRjYXNlIFJMTzpcblx0XHRjYXNlIFBERjpcblx0XHRcdGxhc3RBcmFiaWMgPSBmYWxzZTtcblx0XHRjYXNlIEJOOlxuXHRcdFx0cmV0dXJuIE9OO1xuXHR9XG59XG5cbmZ1bmN0aW9uIF9nZXRDaGFyYWN0ZXJUeXBlKCBjaCApIHtcblx0dmFyIHVjID0gY2guY2hhckNvZGVBdCgwKSwgaGkgPSB1YyA+PiA4O1xuXG5cdGlmIChoaSA9PSAwKSB7XG5cdFx0cmV0dXJuICgodWMgPiAweDAwQkYpID8gTCA6IFVuaWNvZGVUQkwwMFt1Y10pO1xuXHR9IGVsc2UgaWYgKGhpID09IDUpIHtcblx0XHRyZXR1cm4gKC9bXFx1MDU5MS1cXHUwNWY0XS8udGVzdChjaCkgPyBSIDogTCk7XG5cdH0gZWxzZSBpZiAoaGkgPT0gNikge1xuXHRcdGlmICgvW1xcdTA2MTAtXFx1MDYxYVxcdTA2NGItXFx1MDY1ZlxcdTA2ZDYtXFx1MDZlNFxcdTA2ZTctXFx1MDZlZF0vLnRlc3QoY2gpKVxuXHRcdFx0cmV0dXJuIE5TTTtcblx0XHRlbHNlIGlmICgvW1xcdTA2NjAtXFx1MDY2OVxcdTA2NmItXFx1MDY2Y10vLnRlc3QoY2gpKVxuXHRcdFx0cmV0dXJuIEFOO1xuXHRcdGVsc2UgaWYgKHVjID09IDB4MDY2QSlcblx0XHRcdHJldHVybiBFVDtcblx0XHRlbHNlIGlmICgvW1xcdTA2ZjAtXFx1MDZmOV0vLnRlc3QoY2gpKVxuXHRcdFx0cmV0dXJuIEVOO1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBBTDtcblx0fSBlbHNlIGlmIChoaSA9PSAweDIwICYmIHVjIDw9IDB4MjA1Rikge1xuXHRcdHJldHVybiBVbmljb2RlVEJMMjBbdWMgJiAweEZGXTtcblx0fSBlbHNlIGlmIChoaSA9PSAweEZFKSB7XG5cdFx0cmV0dXJuICh1YyA+PSAweEZFNzAgPyBBTCA6IE9OKTtcblx0fVxuXHRyZXR1cm4gT047XG59XG5cbmZ1bmN0aW9uIF9pc0FyYWJpY0RpYWNyaXRpY3MoIGNoICkge1xuXHRyZXR1cm4gKGNoID49ICdcXHUwNjRiJyAmJiBjaCA8PSAnXFx1MDY1NScpO1xufVxuZXhwb3J0cy5MID0gTDtcbmV4cG9ydHMuUiA9IFI7XG5leHBvcnRzLkVOID0gRU47XG5leHBvcnRzLk9OX1IgPSAzO1xuZXhwb3J0cy5BTiA9IDQ7XG5leHBvcnRzLlJfSCA9IDU7XG5leHBvcnRzLkIgPSA2O1xuXG5leHBvcnRzLkRPVCA9IFwiXFx4QjdcIjtcbmV4cG9ydHMuZG9CaWRpUmVvcmRlciA9IGZ1bmN0aW9uKHRleHQsIHRleHRDaGFyVHlwZXMsIGlzUnRsKSB7XG5cdGlmICh0ZXh0Lmxlbmd0aCA8IDIpXG5cdFx0cmV0dXJuIHt9O1xuXG5cdHZhciBjaGFycyA9IHRleHQuc3BsaXQoXCJcIiksIGxvZ2ljYWxGcm9tVmlzdWFsID0gbmV3IEFycmF5KGNoYXJzLmxlbmd0aCksXG5cdFx0YmlkaUxldmVscyA9IG5ldyBBcnJheShjaGFycy5sZW5ndGgpLCBsZXZlbHMgPSBbXTtcblxuXHRkaXIgPSBpc1J0bCA/IFJUTCA6IExUUjtcblxuXHRfY29tcHV0ZUxldmVscyhjaGFycywgbGV2ZWxzLCBjaGFycy5sZW5ndGgsIHRleHRDaGFyVHlwZXMpO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbG9naWNhbEZyb21WaXN1YWwubGVuZ3RoOyBsb2dpY2FsRnJvbVZpc3VhbFtpXSA9IGksIGkrKyk7XG5cblx0X2ludmVydExldmVsKDIsIGxldmVscywgbG9naWNhbEZyb21WaXN1YWwpO1xuXHRfaW52ZXJ0TGV2ZWwoMSwgbGV2ZWxzLCBsb2dpY2FsRnJvbVZpc3VhbCk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsb2dpY2FsRnJvbVZpc3VhbC5sZW5ndGggLSAxOyBpKyspIHsgLy9maXggbGV2ZWxzIHRvIHJlZmxlY3QgY2hhcmFjdGVyIHdpZHRoXG5cdFx0aWYgKHRleHRDaGFyVHlwZXNbaV0gPT09IEFOKSB7XG5cdFx0XHRsZXZlbHNbaV0gPSBleHBvcnRzLkFOO1xuXHRcdH0gZWxzZSBpZiAobGV2ZWxzW2ldID09PSBSICYmICgodGV4dENoYXJUeXBlc1tpXSA+IEFMICYmIHRleHRDaGFyVHlwZXNbaV0gPCBMUkUpXG5cdFx0XHR8fCB0ZXh0Q2hhclR5cGVzW2ldID09PSBPTiB8fCB0ZXh0Q2hhclR5cGVzW2ldID09PSBCTikpIHtcblx0XHRcdGxldmVsc1tpXSA9IGV4cG9ydHMuT05fUjtcblx0XHR9IGVsc2UgaWYgKChpID4gMCAmJiBjaGFyc1tpIC0gMV0gPT09ICdcXHUwNjQ0JykgJiYgL1xcdTA2MjJ8XFx1MDYyM3xcXHUwNjI1fFxcdTA2MjcvLnRlc3QoY2hhcnNbaV0pKSB7XG5cdFx0XHRsZXZlbHNbaSAtIDFdID0gbGV2ZWxzW2ldID0gZXhwb3J0cy5SX0g7XG5cdFx0XHRpKys7XG5cdFx0fVxuXHR9XG5cdGlmIChjaGFyc1tjaGFycy5sZW5ndGggLSAxXSA9PT0gZXhwb3J0cy5ET1QpXG5cdFx0bGV2ZWxzW2NoYXJzLmxlbmd0aCAtIDFdID0gZXhwb3J0cy5CO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbG9naWNhbEZyb21WaXN1YWwubGVuZ3RoOyBpKyspIHtcblx0XHRiaWRpTGV2ZWxzW2ldID0gbGV2ZWxzW2xvZ2ljYWxGcm9tVmlzdWFsW2ldXTtcblx0fVxuXG5cdHJldHVybiB7J2xvZ2ljYWxGcm9tVmlzdWFsJzogbG9naWNhbEZyb21WaXN1YWwsICdiaWRpTGV2ZWxzJzogYmlkaUxldmVsc307XG59O1xuZXhwb3J0cy5oYXNCaWRpQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKHRleHQsIHRleHRDaGFyVHlwZXMpe1xuXHR2YXIgcmV0ID0gZmFsc2U7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKyl7XG5cdFx0dGV4dENoYXJUeXBlc1tpXSA9IF9nZXRDaGFyYWN0ZXJUeXBlKHRleHQuY2hhckF0KGkpKTtcblx0XHRpZiAoIXJldCAmJiAodGV4dENoYXJUeXBlc1tpXSA9PSBSIHx8IHRleHRDaGFyVHlwZXNbaV0gPT0gQUwpKVxuXHRcdFx0cmV0ID0gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gcmV0O1xufTtcbmV4cG9ydHMuZ2V0VmlzdWFsRnJvbUxvZ2ljYWxJZHggPSBmdW5jdGlvbihsb2dJZHgsIHJvd01hcCkge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHJvd01hcC5sb2dpY2FsRnJvbVZpc3VhbC5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChyb3dNYXAubG9naWNhbEZyb21WaXN1YWxbaV0gPT0gbG9nSWR4KVxuXHRcdFx0cmV0dXJuIGk7XG5cdH1cblx0cmV0dXJuIDA7XG59O1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9iaWRpaGFuZGxlclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9iaWRpdXRpbFwiLFwiYWNlL2xpYi9sYW5nXCIsXCJhY2UvbGliL3VzZXJhZ2VudFwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBiaWRpVXRpbCA9IGFjZXF1aXJlKFwiLi9saWIvYmlkaXV0aWxcIik7XG52YXIgbGFuZyA9IGFjZXF1aXJlKFwiLi9saWIvbGFuZ1wiKTtcbnZhciB1c2VyYWdlbnQgPSBhY2VxdWlyZShcIi4vbGliL3VzZXJhZ2VudFwiKTtcbnZhciBiaWRpUkUgPSAvW1xcdTA1OTAtXFx1MDVmNFxcdTA2MDAtXFx1MDZmZlxcdTA3MDAtXFx1MDhhY10vO1xudmFyIEJpZGlIYW5kbGVyID0gZnVuY3Rpb24oc2Vzc2lvbikge1xuICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247XG4gICAgdGhpcy5iaWRpTWFwID0ge307XG4gICAgdGhpcy5jdXJyZW50Um93ID0gbnVsbDtcbiAgICB0aGlzLmJpZGlVdGlsID0gYmlkaVV0aWw7XG4gICAgdGhpcy5jaGFyV2lkdGhzID0gW107XG4gICAgdGhpcy5FT0wgPSBcIlxceEFDXCI7XG4gICAgdGhpcy5zaG93SW52aXNpYmxlcyA9IHRydWU7XG4gICAgdGhpcy5pc1J0bERpciA9IGZhbHNlO1xuICAgIHRoaXMubGluZSA9IFwiXCI7XG4gICAgdGhpcy53cmFwSW5kZW50ID0gMDtcbiAgICB0aGlzLmlzTGFzdFJvdyA9IGZhbHNlO1xuICAgIHRoaXMuRU9GID0gXCJcXHhCNlwiO1xuICAgIHRoaXMuc2VlbkJpZGkgPSBmYWxzZTtcbn07XG5cbihmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzQmlkaVJvdyA9IGZ1bmN0aW9uKHNjcmVlblJvdywgZG9jUm93LCBzcGxpdEluZGV4KSB7XG4gICAgICAgIGlmICghdGhpcy5zZWVuQmlkaSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHNjcmVlblJvdyAhPT0gdGhpcy5jdXJyZW50Um93KSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSBzY3JlZW5Sb3c7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvd0xpbmUoZG9jUm93LCBzcGxpdEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQmlkaU1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmJpZGlNYXAuYmlkaUxldmVscztcbiAgICB9O1xuXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uKGRlbHRhKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWVuQmlkaSkge1xuICAgICAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PSBcImluc2VydFwiICYmIGJpZGlSRS50ZXN0KGRlbHRhLmxpbmVzLmpvaW4oXCJcXG5cIikpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWVuQmlkaSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Um93ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFJvdyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5nZXREb2N1bWVudFJvdyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZG9jUm93ID0gMDtcbiAgICAgICAgdmFyIHJvd0NhY2hlID0gdGhpcy5zZXNzaW9uLiRzY3JlZW5Sb3dDYWNoZTtcbiAgICAgICAgaWYgKHJvd0NhY2hlLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5zZXNzaW9uLiRnZXRSb3dDYWNoZUluZGV4KHJvd0NhY2hlLCB0aGlzLmN1cnJlbnRSb3cpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApXG4gICAgICAgICAgICAgICAgZG9jUm93ID0gdGhpcy5zZXNzaW9uLiRkb2NSb3dDYWNoZVtpbmRleF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZG9jUm93O1xuICAgIH07XG5cbiAgICB0aGlzLmdldFNwbGl0SW5kZXggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHNwbGl0SW5kZXggPSAwO1xuICAgICAgICB2YXIgcm93Q2FjaGUgPSB0aGlzLnNlc3Npb24uJHNjcmVlblJvd0NhY2hlO1xuICAgICAgICBpZiAocm93Q2FjaGUubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEluZGV4LCBwcmV2SW5kZXggPSB0aGlzLnNlc3Npb24uJGdldFJvd0NhY2hlSW5kZXgocm93Q2FjaGUsIHRoaXMuY3VycmVudFJvdyk7XG4gICAgICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50Um93IC0gc3BsaXRJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXggPSB0aGlzLnNlc3Npb24uJGdldFJvd0NhY2hlSW5kZXgocm93Q2FjaGUsIHRoaXMuY3VycmVudFJvdyAtIHNwbGl0SW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ICE9PSBwcmV2SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgcHJldkluZGV4ID0gY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIHNwbGl0SW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzcGxpdEluZGV4O1xuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZVJvd0xpbmUgPSBmdW5jdGlvbihkb2NSb3csIHNwbGl0SW5kZXgpIHtcbiAgICAgICAgaWYgKGRvY1JvdyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgZG9jUm93ID0gdGhpcy5nZXREb2N1bWVudFJvdygpO1xuXG4gICAgICAgIHRoaXMud3JhcEluZGVudCA9IDA7XG4gICAgICAgIHRoaXMuaXNMYXN0Um93ID0gKGRvY1JvdyA9PT0gdGhpcy5zZXNzaW9uLmdldExlbmd0aCgpIC0gMSk7XG4gICAgICAgIHRoaXMubGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKGRvY1Jvdyk7XG4gICAgICAgIGlmICh0aGlzLnNlc3Npb24uJHVzZVdyYXBNb2RlKSB7XG4gICAgICAgICAgICB2YXIgc3BsaXRzID0gdGhpcy5zZXNzaW9uLiR3cmFwRGF0YVtkb2NSb3ddO1xuICAgICAgICAgICAgaWYgKHNwbGl0cykge1xuICAgICAgICAgICAgICAgIGlmIChzcGxpdEluZGV4ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0SW5kZXggPSB0aGlzLmdldFNwbGl0SW5kZXgoKTtcblxuICAgICAgICAgICAgICAgIGlmKHNwbGl0SW5kZXggPiAwICYmIHNwbGl0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cmFwSW5kZW50ID0gc3BsaXRzLmluZGVudDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lID0gKHNwbGl0SW5kZXggPCBzcGxpdHMubGVuZ3RoKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmUuc3Vic3RyaW5nKHNwbGl0c1tzcGxpdEluZGV4IC0gMV0sIHNwbGl0c1tzcGxpdHMubGVuZ3RoIC0gMV0pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmUuc3Vic3RyaW5nKHNwbGl0c1tzcGxpdHMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGluZSA9IHRoaXMubGluZS5zdWJzdHJpbmcoMCwgc3BsaXRzW3NwbGl0SW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb24sIHNoaWZ0ID0gMCwgc2l6ZTtcbiAgICAgICAgdGhpcy5saW5lID0gdGhpcy5saW5lLnJlcGxhY2UoL1xcdHxbXFx1MTEwMC1cXHUyMDI5LCBcXHUyMDJGLVxcdUZGRTZdL2csIGZ1bmN0aW9uKGNoLCBpKXtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcdCcgfHwgc2Vzc2lvbi5pc0Z1bGxXaWR0aChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgIHNpemUgPSAoY2ggPT09ICdcXHQnKSA/IHNlc3Npb24uZ2V0U2NyZWVuVGFiU2l6ZShpICsgc2hpZnQpIDogMjtcbiAgICAgICAgICAgICAgICBzaGlmdCArPSBzaXplIC0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFuZy5zdHJpbmdSZXBlYXQoYmlkaVV0aWwuRE9ULCBzaXplKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjaDtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlQmlkaU1hcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdGV4dENoYXJUeXBlcyA9IFtdLCBlbmRPZkxpbmUgPSB0aGlzLmlzTGFzdFJvdyA/IHRoaXMuRU9GIDogdGhpcy5FT0w7XG4gICAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lICsgKHRoaXMuc2hvd0ludmlzaWJsZXMgPyBlbmRPZkxpbmUgOiBiaWRpVXRpbC5ET1QpO1xuICAgICAgICBpZiAoYmlkaVV0aWwuaGFzQmlkaUNoYXJhY3RlcnMobGluZSwgdGV4dENoYXJUeXBlcykpIHtcbiAgICAgICAgICAgIHRoaXMuYmlkaU1hcCA9IGJpZGlVdGlsLmRvQmlkaVJlb3JkZXIobGluZSwgdGV4dENoYXJUeXBlcywgdGhpcy5pc1J0bERpcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJpZGlNYXAgPSB7fTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5tYXJrQXNEaXJ0eSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSBudWxsO1xuICAgIH07XG4gICAgdGhpcy51cGRhdGVDaGFyYWN0ZXJXaWR0aHMgPSBmdW5jdGlvbihmb250TWV0cmljcykge1xuICAgICAgICBpZiAoIXRoaXMuc2VlbkJpZGkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmNoYXJhY3RlcldpZHRoID09PSBmb250TWV0cmljcy4kY2hhcmFjdGVyU2l6ZS53aWR0aClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB2YXIgY2hhcmFjdGVyV2lkdGggPSB0aGlzLmNoYXJhY3RlcldpZHRoID0gZm9udE1ldHJpY3MuJGNoYXJhY3RlclNpemUud2lkdGg7XG4gICAgICAgIHZhciBiaWRpQ2hhcldpZHRoID0gZm9udE1ldHJpY3MuJG1lYXN1cmVDaGFyV2lkdGgoXCJcXHUwNWQ0XCIpO1xuXG4gICAgICAgIHRoaXMuY2hhcldpZHRoc1tiaWRpVXRpbC5MXSA9IHRoaXMuY2hhcldpZHRoc1tiaWRpVXRpbC5FTl0gPSB0aGlzLmNoYXJXaWR0aHNbYmlkaVV0aWwuT05fUl0gPSBjaGFyYWN0ZXJXaWR0aDtcbiAgICAgICAgdGhpcy5jaGFyV2lkdGhzW2JpZGlVdGlsLlJdID0gdGhpcy5jaGFyV2lkdGhzW2JpZGlVdGlsLkFOXSA9IGJpZGlDaGFyV2lkdGg7XG4gICAgICAgIHRoaXMuY2hhcldpZHRoc1tiaWRpVXRpbC5SX0hdID0gdXNlcmFnZW50LmlzQ2hyb21lID8gYmlkaUNoYXJXaWR0aCA6IGJpZGlDaGFyV2lkdGggKiAwLjQ1O1xuICAgICAgICB0aGlzLmNoYXJXaWR0aHNbYmlkaVV0aWwuQl0gPSAwO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFJvdyA9IG51bGw7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0ludmlzaWJsZXM7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbihzaG93SW52aXNpYmxlcykge1xuICAgICAgICB0aGlzLnNob3dJbnZpc2libGVzID0gc2hvd0ludmlzaWJsZXM7XG4gICAgICAgIHRoaXMuY3VycmVudFJvdyA9IG51bGw7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0RW9sQ2hhciA9IGZ1bmN0aW9uKGVvbENoYXIpIHtcbiAgICAgICAgdGhpcy5FT0wgPSBlb2xDaGFyO1xuICAgIH07XG5cbiAgICB0aGlzLnNldFRleHREaXIgPSBmdW5jdGlvbihpc1J0bERpcikge1xuICAgICAgICB0aGlzLmlzUnRsRGlyID0gaXNSdGxEaXI7XG4gICAgfTtcbiAgICB0aGlzLmdldFBvc0xlZnQgPSBmdW5jdGlvbihjb2wpIHtcbiAgICAgICAgY29sIC09IHRoaXMud3JhcEluZGVudDtcbiAgICAgICAgdmFyIHZpc3VhbElkeCA9IGJpZGlVdGlsLmdldFZpc3VhbEZyb21Mb2dpY2FsSWR4KGNvbCA+IDAgPyBjb2wgLSAxIDogMCwgdGhpcy5iaWRpTWFwKSxcbiAgICAgICAgICAgIGxldmVscyA9IHRoaXMuYmlkaU1hcC5iaWRpTGV2ZWxzLCBsZWZ0ID0gMDtcblxuICAgICAgICBpZiAoY29sID09PSAwICYmIGxldmVsc1t2aXN1YWxJZHhdICUgMiAhPT0gMClcbiAgICAgICAgICAgIHZpc3VhbElkeCsrO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzdWFsSWR4OyBpKyspIHtcbiAgICAgICAgICAgIGxlZnQgKz0gdGhpcy5jaGFyV2lkdGhzW2xldmVsc1tpXV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sICE9PSAwICYmIGxldmVsc1t2aXN1YWxJZHhdICUgMiA9PT0gMClcbiAgICAgICAgICAgIGxlZnQgKz0gdGhpcy5jaGFyV2lkdGhzW2xldmVsc1t2aXN1YWxJZHhdXTtcblxuICAgICAgICBpZiAodGhpcy53cmFwSW5kZW50KVxuICAgICAgICAgICAgbGVmdCArPSB0aGlzLndyYXBJbmRlbnQgKiB0aGlzLmNoYXJXaWR0aHNbYmlkaVV0aWwuTF07XG5cbiAgICAgICAgcmV0dXJuIGxlZnQ7XG4gICAgfTtcbiAgICB0aGlzLmdldFNlbGVjdGlvbnMgPSBmdW5jdGlvbihzdGFydENvbCwgZW5kQ29sKSB7XG4gICAgICAgIHZhciBtYXAgPSB0aGlzLmJpZGlNYXAsIGxldmVscyA9IG1hcC5iaWRpTGV2ZWxzLCBsZXZlbCwgb2Zmc2V0ID0gdGhpcy53cmFwSW5kZW50ICogdGhpcy5jaGFyV2lkdGhzW2JpZGlVdGlsLkxdLCBzZWxlY3Rpb25zID0gW10sXG4gICAgICAgICAgICBzZWxDb2xNaW4gPSBNYXRoLm1pbihzdGFydENvbCwgZW5kQ29sKSAtIHRoaXMud3JhcEluZGVudCwgc2VsQ29sTWF4ID0gTWF0aC5tYXgoc3RhcnRDb2wsIGVuZENvbCkgLSB0aGlzLndyYXBJbmRlbnQsXG4gICAgICAgICAgICAgICAgaXNTZWxlY3RlZCA9IGZhbHNlLCBpc1NlbGVjdGVkUHJldiA9IGZhbHNlLCBzZWxlY3Rpb25TdGFydCA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgbG9nSWR4LCB2aXNJZHggPSAwOyB2aXNJZHggPCBsZXZlbHMubGVuZ3RoOyB2aXNJZHgrKykge1xuICAgICAgICAgICAgbG9nSWR4ID0gbWFwLmxvZ2ljYWxGcm9tVmlzdWFsW3Zpc0lkeF07XG4gICAgICAgICAgICBsZXZlbCA9IGxldmVsc1t2aXNJZHhdO1xuICAgICAgICAgICAgaXNTZWxlY3RlZCA9IChsb2dJZHggPj0gc2VsQ29sTWluKSAmJiAobG9nSWR4IDwgc2VsQ29sTWF4KTtcbiAgICAgICAgICAgIGlmIChpc1NlbGVjdGVkICYmICFpc1NlbGVjdGVkUHJldikge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gb2Zmc2V0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICghaXNTZWxlY3RlZCAmJiBpc1NlbGVjdGVkUHJldikge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbnMucHVzaCh7bGVmdDogc2VsZWN0aW9uU3RhcnQsIHdpZHRoOiBvZmZzZXQgLSBzZWxlY3Rpb25TdGFydH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2Zmc2V0ICs9IHRoaXMuY2hhcldpZHRoc1tsZXZlbF07XG4gICAgICAgICAgICBpc1NlbGVjdGVkUHJldiA9IGlzU2VsZWN0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNTZWxlY3RlZCAmJiAodmlzSWR4ID09PSBsZXZlbHMubGVuZ3RoKSkge1xuICAgICAgICAgICAgc2VsZWN0aW9ucy5wdXNoKHtsZWZ0OiBzZWxlY3Rpb25TdGFydCwgd2lkdGg6IG9mZnNldCAtIHNlbGVjdGlvblN0YXJ0fSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0aW9ucztcbiAgICB9O1xuICAgIHRoaXMub2Zmc2V0VG9Db2wgPSBmdW5jdGlvbihwb3NYKSB7XG4gICAgICAgIHZhciBsb2dpY2FsSWR4ID0gMCwgcG9zWCA9IE1hdGgubWF4KHBvc1gsIDApLFxuICAgICAgICAgICAgb2Zmc2V0ID0gMCwgdmlzdWFsSWR4ID0gMCwgbGV2ZWxzID0gdGhpcy5iaWRpTWFwLmJpZGlMZXZlbHMsXG4gICAgICAgICAgICAgICAgY2hhcldpZHRoID0gdGhpcy5jaGFyV2lkdGhzW2xldmVsc1t2aXN1YWxJZHhdXTtcblxuICAgICAgICBpZiAodGhpcy53cmFwSW5kZW50KSB7XG4gICAgICAgICAgICBwb3NYIC09IHRoaXMud3JhcEluZGVudCAqIHRoaXMuY2hhcldpZHRoc1tiaWRpVXRpbC5MXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlKHBvc1ggPiBvZmZzZXQgKyBjaGFyV2lkdGgvMikge1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGNoYXJXaWR0aDtcbiAgICAgICAgICAgIGlmKHZpc3VhbElkeCA9PT0gbGV2ZWxzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBjaGFyV2lkdGggPSAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hhcldpZHRoID0gdGhpcy5jaGFyV2lkdGhzW2xldmVsc1srK3Zpc3VhbElkeF1dO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpc3VhbElkeCA+IDAgJiYgKGxldmVsc1t2aXN1YWxJZHggLSAxXSAlIDIgIT09IDApICYmIChsZXZlbHNbdmlzdWFsSWR4XSAlIDIgPT09IDApKXtcbiAgICAgICAgICAgIGlmKHBvc1ggPCBvZmZzZXQpXG4gICAgICAgICAgICAgICAgdmlzdWFsSWR4LS07XG4gICAgICAgICAgICBsb2dpY2FsSWR4ID0gdGhpcy5iaWRpTWFwLmxvZ2ljYWxGcm9tVmlzdWFsW3Zpc3VhbElkeF07XG5cbiAgICAgICAgfSBlbHNlIGlmICh2aXN1YWxJZHggPiAwICYmIChsZXZlbHNbdmlzdWFsSWR4IC0gMV0gJSAyID09PSAwKSAmJiAobGV2ZWxzW3Zpc3VhbElkeF0gJSAyICE9PSAwKSl7XG4gICAgICAgICAgICBsb2dpY2FsSWR4ID0gMSArICgocG9zWCA+IG9mZnNldCkgPyB0aGlzLmJpZGlNYXAubG9naWNhbEZyb21WaXN1YWxbdmlzdWFsSWR4XVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuYmlkaU1hcC5sb2dpY2FsRnJvbVZpc3VhbFt2aXN1YWxJZHggLSAxXSk7XG5cbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5pc1J0bERpciAmJiB2aXN1YWxJZHggPT09IGxldmVscy5sZW5ndGggLSAxICYmIGNoYXJXaWR0aCA9PT0gMCAmJiAobGV2ZWxzW3Zpc3VhbElkeCAtIDFdICUgMiA9PT0gMCkpXG4gICAgICAgICAgICAgICAgfHwgKCF0aGlzLmlzUnRsRGlyICYmIHZpc3VhbElkeCA9PT0gMCAmJiAobGV2ZWxzW3Zpc3VhbElkeF0gJSAyICE9PSAwKSkpe1xuICAgICAgICAgICAgbG9naWNhbElkeCA9IDEgKyB0aGlzLmJpZGlNYXAubG9naWNhbEZyb21WaXN1YWxbdmlzdWFsSWR4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh2aXN1YWxJZHggPiAwICYmIChsZXZlbHNbdmlzdWFsSWR4IC0gMV0gJSAyICE9PSAwKSAmJiBjaGFyV2lkdGggIT09IDApXG4gICAgICAgICAgICAgICAgdmlzdWFsSWR4LS07XG4gICAgICAgICAgICBsb2dpY2FsSWR4ID0gdGhpcy5iaWRpTWFwLmxvZ2ljYWxGcm9tVmlzdWFsW3Zpc3VhbElkeF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKGxvZ2ljYWxJZHggKyB0aGlzLndyYXBJbmRlbnQpO1xuICAgIH07XG5cbn0pLmNhbGwoQmlkaUhhbmRsZXIucHJvdG90eXBlKTtcblxuZXhwb3J0cy5CaWRpSGFuZGxlciA9IEJpZGlIYW5kbGVyO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvcmFuZ2VcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xudmFyIGNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEucm93IC0gcDIucm93IHx8IHAxLmNvbHVtbiAtIHAyLmNvbHVtbjtcbn07XG52YXIgUmFuZ2UgPSBmdW5jdGlvbihzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKSB7XG4gICAgdGhpcy5zdGFydCA9IHtcbiAgICAgICAgcm93OiBzdGFydFJvdyxcbiAgICAgICAgY29sdW1uOiBzdGFydENvbHVtblxuICAgIH07XG5cbiAgICB0aGlzLmVuZCA9IHtcbiAgICAgICAgcm93OiBlbmRSb3csXG4gICAgICAgIGNvbHVtbjogZW5kQ29sdW1uXG4gICAgfTtcbn07XG5cbihmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzRXF1YWwgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5yb3cgPT09IHJhbmdlLnN0YXJ0LnJvdyAmJlxuICAgICAgICAgICAgdGhpcy5lbmQucm93ID09PSByYW5nZS5lbmQucm93ICYmXG4gICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmXG4gICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPT09IHJhbmdlLmVuZC5jb2x1bW47XG4gICAgfTtcbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAoXCJSYW5nZTogW1wiICsgdGhpcy5zdGFydC5yb3cgKyBcIi9cIiArIHRoaXMuc3RhcnQuY29sdW1uICtcbiAgICAgICAgICAgIFwiXSAtPiBbXCIgKyB0aGlzLmVuZC5yb3cgKyBcIi9cIiArIHRoaXMuZW5kLmNvbHVtbiArIFwiXVwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy5jb250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDA7XG4gICAgfTtcbiAgICB0aGlzLmNvbXBhcmVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7XG4gICAgICAgIHZhciBjbXAsXG4gICAgICAgICAgICBlbmQgPSByYW5nZS5lbmQsXG4gICAgICAgICAgICBzdGFydCA9IHJhbmdlLnN0YXJ0O1xuXG4gICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShlbmQucm93LCBlbmQuY29sdW1uKTtcbiAgICAgICAgaWYgKGNtcCA9PSAxKSB7XG4gICAgICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoc3RhcnQucm93LCBzdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIC0yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jb21wYXJlUG9pbnQgPSBmdW5jdGlvbihwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocC5yb3csIHAuY29sdW1uKTtcbiAgICB9O1xuICAgIHRoaXMuY29udGFpbnNSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVQb2ludChyYW5nZS5zdGFydCkgPT0gMCAmJiB0aGlzLmNvbXBhcmVQb2ludChyYW5nZS5lbmQpID09IDA7XG4gICAgfTtcbiAgICB0aGlzLmludGVyc2VjdHMgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlUmFuZ2UocmFuZ2UpO1xuICAgICAgICByZXR1cm4gKGNtcCA9PSAtMSB8fCBjbXAgPT0gMCB8fCBjbXAgPT0gMSk7XG4gICAgfTtcbiAgICB0aGlzLmlzRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbjtcbiAgICB9O1xuICAgIHRoaXMuaXNTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uO1xuICAgIH07XG4gICAgdGhpcy5zZXRTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygcm93ID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93LnJvdztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93O1xuICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc2V0RW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiByb3cgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uID0gcm93LmNvbHVtbjtcbiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVuZC5yb3cgPSByb3c7XG4gICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbmQocm93LCBjb2x1bW4pIHx8IHRoaXMuaXNTdGFydChyb3csIGNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIHRoaXMuaW5zaWRlU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VuZChyb3csIGNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIHRoaXMuaW5zaWRlRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGFydChyb3csIGNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIGlmICghdGhpcy5pc011bHRpTGluZSgpKSB7XG4gICAgICAgICAgICBpZiAocm93ID09PSB0aGlzLnN0YXJ0LnJvdykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCB0aGlzLnN0YXJ0LmNvbHVtbiA/IC0xIDogKGNvbHVtbiA+IHRoaXMuZW5kLmNvbHVtbiA/IDEgOiAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyb3cgPCB0aGlzLnN0YXJ0LnJvdylcbiAgICAgICAgICAgIHJldHVybiAtMTtcblxuICAgICAgICBpZiAocm93ID4gdGhpcy5lbmQucm93KVxuICAgICAgICAgICAgcmV0dXJuIDE7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID09PSByb3cpXG4gICAgICAgICAgICByZXR1cm4gY29sdW1uID49IHRoaXMuc3RhcnQuY29sdW1uID8gMCA6IC0xO1xuXG4gICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT09IHJvdylcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPD0gdGhpcy5lbmQuY29sdW1uID8gMCA6IDE7XG5cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfTtcbiAgICB0aGlzLmNvbXBhcmVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jb21wYXJlRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jb21wYXJlSW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09IGNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuY2xpcFJvd3MgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykge1xuICAgICAgICBpZiAodGhpcy5lbmQucm93ID4gbGFzdFJvdylcbiAgICAgICAgICAgIHZhciBlbmQgPSB7cm93OiBsYXN0Um93ICsgMSwgY29sdW1uOiAwfTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5lbmQucm93IDwgZmlyc3RSb3cpXG4gICAgICAgICAgICB2YXIgZW5kID0ge3JvdzogZmlyc3RSb3csIGNvbHVtbjogMH07XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID4gbGFzdFJvdylcbiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9O1xuICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXJ0LnJvdyA8IGZpcnN0Um93KVxuICAgICAgICAgICAgdmFyIHN0YXJ0ID0ge3JvdzogZmlyc3RSb3csIGNvbHVtbjogMH07XG5cbiAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQgfHwgdGhpcy5zdGFydCwgZW5kIHx8IHRoaXMuZW5kKTtcbiAgICB9O1xuICAgIHRoaXMuZXh0ZW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7XG5cbiAgICAgICAgaWYgKGNtcCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIGVsc2UgaWYgKGNtcCA9PSAtMSlcbiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB2YXIgZW5kID0ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07XG5cbiAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQgfHwgdGhpcy5zdGFydCwgZW5kIHx8IHRoaXMuZW5kKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgPT09IHRoaXMuZW5kLnJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gdGhpcy5lbmQuY29sdW1uKTtcbiAgICB9O1xuICAgIHRoaXMuaXNNdWx0aUxpbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnN0YXJ0LnJvdyAhPT0gdGhpcy5lbmQucm93KTtcbiAgICB9O1xuICAgIHRoaXMuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGhpcy5zdGFydCwgdGhpcy5lbmQpO1xuICAgIH07XG4gICAgdGhpcy5jb2xsYXBzZVJvd3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZW5kLmNvbHVtbiA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdy0xKSwgMCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy5zdGFydC5yb3csIDAsIHRoaXMuZW5kLnJvdywgMCk7XG4gICAgfTtcbiAgICB0aGlzLnRvU2NyZWVuUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uKSB7XG4gICAgICAgIHZhciBzY3JlZW5Qb3NTdGFydCA9IHNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuc3RhcnQpO1xuICAgICAgICB2YXIgc2NyZWVuUG9zRW5kID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5lbmQpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUmFuZ2UoXG4gICAgICAgICAgICBzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBvc1N0YXJ0LmNvbHVtbixcbiAgICAgICAgICAgIHNjcmVlblBvc0VuZC5yb3csIHNjcmVlblBvc0VuZC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICB9O1xuICAgIHRoaXMubW92ZUJ5ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdGhpcy5zdGFydC5yb3cgKz0gcm93O1xuICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiArPSBjb2x1bW47XG4gICAgICAgIHRoaXMuZW5kLnJvdyArPSByb3c7XG4gICAgICAgIHRoaXMuZW5kLmNvbHVtbiArPSBjb2x1bW47XG4gICAgfTtcblxufSkuY2FsbChSYW5nZS5wcm90b3R5cGUpO1xuUmFuZ2UuZnJvbVBvaW50cyA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uLCBlbmQucm93LCBlbmQuY29sdW1uKTtcbn07XG5SYW5nZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50cztcblxuUmFuZ2UuY29tcGFyZVBvaW50cyA9IGZ1bmN0aW9uKHAxLCBwMikge1xuICAgIHJldHVybiBwMS5yb3cgLSBwMi5yb3cgfHwgcDEuY29sdW1uIC0gcDIuY29sdW1uO1xufTtcblxuXG5leHBvcnRzLlJhbmdlID0gUmFuZ2U7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9zZWxlY3Rpb25cIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvb29wXCIsXCJhY2UvbGliL2xhbmdcIixcImFjZS9saWIvZXZlbnRfZW1pdHRlclwiLFwiYWNlL3JhbmdlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIG9vcCA9IGFjZXF1aXJlKFwiLi9saWIvb29wXCIpO1xudmFyIGxhbmcgPSBhY2VxdWlyZShcIi4vbGliL2xhbmdcIik7XG52YXIgRXZlbnRFbWl0dGVyID0gYWNlcXVpcmUoXCIuL2xpYi9ldmVudF9lbWl0dGVyXCIpLkV2ZW50RW1pdHRlcjtcbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi9yYW5nZVwiKS5SYW5nZTtcbnZhciBTZWxlY3Rpb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7XG4gICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICB0aGlzLmRvYyA9IHNlc3Npb24uZ2V0RG9jdW1lbnQoKTtcblxuICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB0aGlzLmxlYWQgPSB0aGlzLnNlbGVjdGlvbkxlYWQgPSB0aGlzLmRvYy5jcmVhdGVBbmNob3IoMCwgMCk7XG4gICAgdGhpcy5hbmNob3IgPSB0aGlzLnNlbGVjdGlvbkFuY2hvciA9IHRoaXMuZG9jLmNyZWF0ZUFuY2hvcigwLCAwKTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmxlYWQub24oXCJjaGFuZ2VcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICBzZWxmLl9lbWl0KFwiY2hhbmdlQ3Vyc29yXCIpO1xuICAgICAgICBpZiAoIXNlbGYuJGlzRW1wdHkpXG4gICAgICAgICAgICBzZWxmLl9lbWl0KFwiY2hhbmdlU2VsZWN0aW9uXCIpO1xuICAgICAgICBpZiAoIXNlbGYuJGtlZXBEZXNpcmVkQ29sdW1uT25DaGFuZ2UgJiYgZS5vbGQuY29sdW1uICE9IGUudmFsdWUuY29sdW1uKVxuICAgICAgICAgICAgc2VsZi4kZGVzaXJlZENvbHVtbiA9IG51bGw7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbkFuY2hvci5vbihcImNoYW5nZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCFzZWxmLiRpc0VtcHR5KVxuICAgICAgICAgICAgc2VsZi5fZW1pdChcImNoYW5nZVNlbGVjdGlvblwiKTtcbiAgICB9KTtcbn07XG5cbihmdW5jdGlvbigpIHtcblxuICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTtcbiAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiRpc0VtcHR5IHx8IChcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yLnJvdyA9PSB0aGlzLmxlYWQucm93ICYmXG4gICAgICAgICAgICB0aGlzLmFuY2hvci5jb2x1bW4gPT0gdGhpcy5sZWFkLmNvbHVtblxuICAgICAgICApKTtcbiAgICB9O1xuICAgIHRoaXMuaXNNdWx0aUxpbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRSYW5nZSgpLmlzTXVsdGlMaW5lKCk7XG4gICAgfTtcbiAgICB0aGlzLmdldEN1cnNvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbkFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHRoaXMuYW5jaG9yLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTtcblxuICAgICAgICBpZiAodGhpcy4kaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy4kaXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fZW1pdChcImNoYW5nZVNlbGVjdGlvblwiKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRTZWxlY3Rpb25BbmNob3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuJGlzRW1wdHkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25MZWFkKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFuY2hvci5nZXRQb3NpdGlvbigpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTZWxlY3Rpb25MZWFkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlYWQuZ2V0UG9zaXRpb24oKTtcbiAgICB9O1xuICAgIHRoaXMuc2hpZnRTZWxlY3Rpb24gPSBmdW5jdGlvbihjb2x1bW5zKSB7XG4gICAgICAgIGlmICh0aGlzLiRpc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyh0aGlzLmxlYWQucm93LCB0aGlzLmxlYWQuY29sdW1uICsgY29sdW1ucyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb25BbmNob3IoKTtcbiAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmdldFNlbGVjdGlvbkxlYWQoKTtcblxuICAgICAgICB2YXIgaXNCYWNrd2FyZHMgPSB0aGlzLmlzQmFja3dhcmRzKCk7XG5cbiAgICAgICAgaWYgKCFpc0JhY2t3YXJkcyB8fCBhbmNob3IuY29sdW1uICE9PSAwKVxuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25BbmNob3IoYW5jaG9yLnJvdywgYW5jaG9yLmNvbHVtbiArIGNvbHVtbnMpO1xuXG4gICAgICAgIGlmIChpc0JhY2t3YXJkcyB8fCBsZWFkLmNvbHVtbiAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhsZWFkLnJvdywgbGVhZC5jb2x1bW4gKyBjb2x1bW5zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmlzQmFja3dhcmRzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhbmNob3IgPSB0aGlzLmFuY2hvcjtcbiAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmxlYWQ7XG4gICAgICAgIHJldHVybiAoYW5jaG9yLnJvdyA+IGxlYWQucm93IHx8IChhbmNob3Iucm93ID09IGxlYWQucm93ICYmIGFuY2hvci5jb2x1bW4gPiBsZWFkLmNvbHVtbikpO1xuICAgIH07XG4gICAgdGhpcy5nZXRSYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5hbmNob3I7XG4gICAgICAgIHZhciBsZWFkID0gdGhpcy5sZWFkO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSlcbiAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKGxlYWQsIGxlYWQpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzQmFja3dhcmRzKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKGxlYWQsIGFuY2hvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhhbmNob3IsIGxlYWQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy4kaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy4kaXNFbXB0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0KFwiY2hhbmdlU2VsZWN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdEFsbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbGFzdFJvdyA9IHRoaXMuZG9jLmdldExlbmd0aCgpIC0gMTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25BbmNob3IoMCwgMCk7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGxhc3RSb3csIHRoaXMuZG9jLmdldExpbmUobGFzdFJvdykubGVuZ3RoKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0UmFuZ2UgPVxuICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSwgcmV2ZXJzZSkge1xuICAgICAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25BbmNob3IocmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFRvKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uQW5jaG9yKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VG8ocmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ2V0UmFuZ2UoKS5pc0VtcHR5KCkpXG4gICAgICAgICAgICB0aGlzLiRpc0VtcHR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy4kZGVzaXJlZENvbHVtbiA9IG51bGw7XG4gICAgfTtcblxuICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24gPSBmdW5jdGlvbihtb3Zlcikge1xuICAgICAgICB2YXIgbGVhZCA9IHRoaXMubGVhZDtcbiAgICAgICAgaWYgKHRoaXMuJGlzRW1wdHkpXG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbkFuY2hvcihsZWFkLnJvdywgbGVhZC5jb2x1bW4pO1xuXG4gICAgICAgIG1vdmVyLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFRvID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFRvUG9zaXRpb24gPSBmdW5jdGlvbihwb3MpIHtcbiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24ocG9zKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLm1vdmVUbyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4pO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlVG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24ocG9zKTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0VXAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JVcCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdERvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JEb3duKTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0UmlnaHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JSaWdodCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdExlZnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JMZWZ0KTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0TGluZVN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yTGluZVN0YXJ0KTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0TGluZUVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckxpbmVFbmQpO1xuICAgIH07XG4gICAgdGhpcy5zZWxlY3RGaWxlRW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yRmlsZUVuZCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdEZpbGVTdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckZpbGVTdGFydCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFdvcmRSaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvcldvcmRSaWdodCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yV29yZExlZnQpO1xuICAgIH07XG4gICAgdGhpcy5nZXRXb3JkUmFuZ2UgPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICBpZiAodHlwZW9mIGNvbHVtbiA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB2YXIgY3Vyc29yID0gcm93IHx8IHRoaXMubGVhZDtcbiAgICAgICAgICAgIHJvdyA9IGN1cnNvci5yb3c7XG4gICAgICAgICAgICBjb2x1bW4gPSBjdXJzb3IuY29sdW1uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0V29yZFJhbmdlKHJvdywgY29sdW1uKTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0V29yZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHRoaXMuZ2V0V29yZFJhbmdlKCkpO1xuICAgIH07XG4gICAgdGhpcy5zZWxlY3RBV29yZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5nZXRDdXJzb3IoKTtcbiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5zZXNzaW9uLmdldEFXb3JkUmFuZ2UoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldExpbmVSYW5nZSA9IGZ1bmN0aW9uKHJvdywgZXhjbHVkZUxhc3RDaGFyKSB7XG4gICAgICAgIHZhciByb3dTdGFydCA9IHR5cGVvZiByb3cgPT0gXCJudW1iZXJcIiA/IHJvdyA6IHRoaXMubGVhZC5yb3c7XG4gICAgICAgIHZhciByb3dFbmQ7XG5cbiAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKHJvd1N0YXJ0KTtcbiAgICAgICAgaWYgKGZvbGRMaW5lKSB7XG4gICAgICAgICAgICByb3dTdGFydCA9IGZvbGRMaW5lLnN0YXJ0LnJvdztcbiAgICAgICAgICAgIHJvd0VuZCA9IGZvbGRMaW5lLmVuZC5yb3c7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dFbmQgPSByb3dTdGFydDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhjbHVkZUxhc3RDaGFyID09PSB0cnVlKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShyb3dTdGFydCwgMCwgcm93RW5kLCB0aGlzLnNlc3Npb24uZ2V0TGluZShyb3dFbmQpLmxlbmd0aCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93U3RhcnQsIDAsIHJvd0VuZCArIDEsIDApO1xuICAgIH07XG4gICAgdGhpcy5zZWxlY3RMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy5nZXRMaW5lUmFuZ2UoKSk7XG4gICAgfTtcbiAgICB0aGlzLm1vdmVDdXJzb3JVcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLm1vdmVDdXJzb3JCeSgtMSwgMCk7XG4gICAgfTtcbiAgICB0aGlzLm1vdmVDdXJzb3JEb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KDEsIDApO1xuICAgIH07XG4gICAgdGhpcy53b3VsZE1vdmVJbnRvU29mdFRhYiA9IGZ1bmN0aW9uKGN1cnNvciwgdGFiU2l6ZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIHZhciBzdGFydCA9IGN1cnNvci5jb2x1bW47XG4gICAgICAgIHZhciBlbmQgPSBjdXJzb3IuY29sdW1uICsgdGFiU2l6ZTtcblxuICAgICAgICBpZiAoZGlyZWN0aW9uIDwgMCkge1xuICAgICAgICAgICAgc3RhcnQgPSBjdXJzb3IuY29sdW1uIC0gdGFiU2l6ZTtcbiAgICAgICAgICAgIGVuZCA9IGN1cnNvci5jb2x1bW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5pc1RhYlN0b3AoY3Vyc29yKSAmJiB0aGlzLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpLnNsaWNlKHN0YXJ0LCBlbmQpLnNwbGl0KFwiIFwiKS5sZW5ndGgtMSA9PSB0YWJTaXplO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yTGVmdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCksXG4gICAgICAgICAgICBmb2xkO1xuXG4gICAgICAgIGlmIChmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uLCAtMSkpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbik7XG4gICAgICAgIH0gZWxzZSBpZiAoY3Vyc29yLmNvbHVtbiA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKGN1cnNvci5yb3cgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oY3Vyc29yLnJvdyAtIDEsIHRoaXMuZG9jLmdldExpbmUoY3Vyc29yLnJvdyAtIDEpLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFiU2l6ZSA9IHRoaXMuc2Vzc2lvbi5nZXRUYWJTaXplKCk7XG4gICAgICAgICAgICBpZiAodGhpcy53b3VsZE1vdmVJbnRvU29mdFRhYihjdXJzb3IsIHRhYlNpemUsIC0xKSAmJiAhdGhpcy5zZXNzaW9uLmdldE5hdmlnYXRlV2l0aGluU29mdFRhYnMoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KDAsIC10YWJTaXplKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yQnkoMCwgLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm1vdmVDdXJzb3JSaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCksXG4gICAgICAgICAgICBmb2xkO1xuICAgICAgICBpZiAoZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbiwgMSkpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGZvbGQuZW5kLnJvdywgZm9sZC5lbmQuY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmxlYWQuY29sdW1uID09IHRoaXMuZG9jLmdldExpbmUodGhpcy5sZWFkLnJvdykubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sZWFkLnJvdyA8IHRoaXMuZG9jLmdldExlbmd0aCgpIC0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHRoaXMubGVhZC5yb3cgKyAxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YWJTaXplID0gdGhpcy5zZXNzaW9uLmdldFRhYlNpemUoKTtcbiAgICAgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmxlYWQ7XG4gICAgICAgICAgICBpZiAodGhpcy53b3VsZE1vdmVJbnRvU29mdFRhYihjdXJzb3IsIHRhYlNpemUsIDEpICYmICF0aGlzLnNlc3Npb24uZ2V0TmF2aWdhdGVXaXRoaW5Tb2Z0VGFicygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yQnkoMCwgdGFiU2l6ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KDAsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm1vdmVDdXJzb3JMaW5lU3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJvdyA9IHRoaXMubGVhZC5yb3c7XG4gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmxlYWQuY29sdW1uO1xuICAgICAgICB2YXIgc2NyZWVuUm93ID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Sb3cocm93LCBjb2x1bW4pO1xuICAgICAgICB2YXIgZmlyc3RDb2x1bW5Qb3NpdGlvbiA9IHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCAwKTtcbiAgICAgICAgdmFyIGJlZm9yZUN1cnNvciA9IHRoaXMuc2Vzc2lvbi5nZXREaXNwbGF5TGluZShcbiAgICAgICAgICAgIHJvdywgbnVsbCwgZmlyc3RDb2x1bW5Qb3NpdGlvbi5yb3csXG4gICAgICAgICAgICBmaXJzdENvbHVtblBvc2l0aW9uLmNvbHVtblxuICAgICAgICApO1xuXG4gICAgICAgIHZhciBsZWFkaW5nU3BhY2UgPSBiZWZvcmVDdXJzb3IubWF0Y2goL15cXHMqLyk7XG4gICAgICAgIGlmIChsZWFkaW5nU3BhY2VbMF0ubGVuZ3RoICE9IGNvbHVtbiAmJiAhdGhpcy5zZXNzaW9uLiR1c2VFbWFjc1N0eWxlTGluZVN0YXJ0KVxuICAgICAgICAgICAgZmlyc3RDb2x1bW5Qb3NpdGlvbi5jb2x1bW4gKz0gbGVhZGluZ1NwYWNlWzBdLmxlbmd0aDtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihmaXJzdENvbHVtblBvc2l0aW9uKTtcbiAgICB9O1xuICAgIHRoaXMubW92ZUN1cnNvckxpbmVFbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmxlYWQ7XG4gICAgICAgIHZhciBsaW5lRW5kID0gdGhpcy5zZXNzaW9uLmdldERvY3VtZW50TGFzdFJvd0NvbHVtblBvc2l0aW9uKGxlYWQucm93LCBsZWFkLmNvbHVtbik7XG4gICAgICAgIGlmICh0aGlzLmxlYWQuY29sdW1uID09IGxpbmVFbmQuY29sdW1uKSB7XG4gICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKGxpbmVFbmQucm93KTtcbiAgICAgICAgICAgIGlmIChsaW5lRW5kLmNvbHVtbiA9PSBsaW5lLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciB0ZXh0RW5kID0gbGluZS5zZWFyY2goL1xccyskLyk7XG4gICAgICAgICAgICAgICAgaWYgKHRleHRFbmQgPiAwKVxuICAgICAgICAgICAgICAgICAgICBsaW5lRW5kLmNvbHVtbiA9IHRleHRFbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhsaW5lRW5kLnJvdywgbGluZUVuZC5jb2x1bW4pO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yRmlsZUVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcm93ID0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCkgLSAxO1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpLmxlbmd0aDtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4pO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yRmlsZVN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvKDAsIDApO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yTG9uZ1dvcmRSaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcm93ID0gdGhpcy5sZWFkLnJvdztcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47XG4gICAgICAgIHZhciBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpO1xuICAgICAgICB2YXIgcmlnaHRPZkN1cnNvciA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbik7XG5cbiAgICAgICAgdmFyIG1hdGNoO1xuICAgICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICB0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICB2YXIgZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1bW4sIDEpO1xuICAgICAgICBpZiAoZm9sZCkge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5lbmQucm93LCBmb2xkLmVuZC5jb2x1bW4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCA9IHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmV4ZWMocmlnaHRPZkN1cnNvcikpIHtcbiAgICAgICAgICAgIGNvbHVtbiArPSB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXg7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgcmlnaHRPZkN1cnNvciA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbHVtbiA+PSBsaW5lLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBsaW5lLmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JSaWdodCgpO1xuICAgICAgICAgICAgaWYgKHJvdyA8IHRoaXMuZG9jLmdldExlbmd0aCgpIC0gMSlcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JXb3JkUmlnaHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2ggPSB0aGlzLnNlc3Npb24udG9rZW5SZS5leGVjKHJpZ2h0T2ZDdXJzb3IpKSB7XG4gICAgICAgICAgICBjb2x1bW4gKz0gdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4O1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uKTtcbiAgICB9O1xuICAgIHRoaXMubW92ZUN1cnNvckxvbmdXb3JkTGVmdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcm93ID0gdGhpcy5sZWFkLnJvdztcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47XG4gICAgICAgIHZhciBmb2xkO1xuICAgICAgICBpZiAoZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1bW4sIC0xKSkge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdHIgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZFN0cmluZ0F0KHJvdywgY29sdW1uLCAtMSk7XG4gICAgICAgIGlmIChzdHIgPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RyID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpLnN1YnN0cmluZygwLCBjb2x1bW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxlZnRPZkN1cnNvciA9IGxhbmcuc3RyaW5nUmV2ZXJzZShzdHIpO1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGlmIChtYXRjaCA9IHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmV4ZWMobGVmdE9mQ3Vyc29yKSkge1xuICAgICAgICAgICAgY29sdW1uIC09IHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleDtcbiAgICAgICAgICAgIGxlZnRPZkN1cnNvciA9IGxlZnRPZkN1cnNvci5zbGljZSh0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sdW1uIDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgMCk7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JMZWZ0KCk7XG4gICAgICAgICAgICBpZiAocm93ID4gMClcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JXb3JkTGVmdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCA9IHRoaXMuc2Vzc2lvbi50b2tlblJlLmV4ZWMobGVmdE9mQ3Vyc29yKSkge1xuICAgICAgICAgICAgY29sdW1uIC09IHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleDtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIGNvbHVtbik7XG4gICAgfTtcblxuICAgIHRoaXMuJHNob3J0V29yZEVuZEluZGV4ID0gZnVuY3Rpb24ocmlnaHRPZkN1cnNvcikge1xuICAgICAgICB2YXIgbWF0Y2gsIGluZGV4ID0gMCwgY2g7XG4gICAgICAgIHZhciB3aGl0ZXNwYWNlUmUgPSAvXFxzLztcbiAgICAgICAgdmFyIHRva2VuUmUgPSB0aGlzLnNlc3Npb24udG9rZW5SZTtcblxuICAgICAgICB0b2tlblJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGlmIChtYXRjaCA9IHRoaXMuc2Vzc2lvbi50b2tlblJlLmV4ZWMocmlnaHRPZkN1cnNvcikpIHtcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2hpbGUgKChjaCA9IHJpZ2h0T2ZDdXJzb3JbaW5kZXhdKSAmJiB3aGl0ZXNwYWNlUmUudGVzdChjaCkpXG4gICAgICAgICAgICAgICAgaW5kZXggKys7XG5cbiAgICAgICAgICAgIGlmIChpbmRleCA8IDEpIHtcbiAgICAgICAgICAgICAgICB0b2tlblJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSByaWdodE9mQ3Vyc29yW2luZGV4XSkgJiYgIXRva2VuUmUudGVzdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5SZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICBpbmRleCArKztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdoaXRlc3BhY2VSZS50ZXN0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSByaWdodE9mQ3Vyc29yW2luZGV4XSkgJiYgd2hpdGVzcGFjZVJlLnRlc3QoY2gpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0b2tlblJlLmxhc3RJbmRleCA9IDA7XG5cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH07XG5cbiAgICB0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRSaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcm93ID0gdGhpcy5sZWFkLnJvdztcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47XG4gICAgICAgIHZhciBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpO1xuICAgICAgICB2YXIgcmlnaHRPZkN1cnNvciA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbik7XG5cbiAgICAgICAgdmFyIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KHJvdywgY29sdW1uLCAxKTtcbiAgICAgICAgaWYgKGZvbGQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5lbmQucm93LCBmb2xkLmVuZC5jb2x1bW4pO1xuXG4gICAgICAgIGlmIChjb2x1bW4gPT0gbGluZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBsID0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCk7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgcm93Kys7XG4gICAgICAgICAgICAgICAgcmlnaHRPZkN1cnNvciA9IHRoaXMuZG9jLmdldExpbmUocm93KTtcbiAgICAgICAgICAgIH0gd2hpbGUgKHJvdyA8IGwgJiYgL15cXHMqJC8udGVzdChyaWdodE9mQ3Vyc29yKSk7XG5cbiAgICAgICAgICAgIGlmICghL15cXHMrLy50ZXN0KHJpZ2h0T2ZDdXJzb3IpKVxuICAgICAgICAgICAgICAgIHJpZ2h0T2ZDdXJzb3IgPSBcIlwiO1xuICAgICAgICAgICAgY29sdW1uID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuJHNob3J0V29yZEVuZEluZGV4KHJpZ2h0T2ZDdXJzb3IpO1xuXG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uICsgaW5kZXgpO1xuICAgIH07XG5cbiAgICB0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByb3cgPSB0aGlzLmxlYWQucm93O1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5sZWFkLmNvbHVtbjtcblxuICAgICAgICB2YXIgZm9sZDtcbiAgICAgICAgaWYgKGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KHJvdywgY29sdW1uLCAtMSkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKTtcblxuICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKHJvdykuc3Vic3RyaW5nKDAsIGNvbHVtbik7XG4gICAgICAgIGlmIChjb2x1bW4gPT09IDApIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICByb3ctLTtcbiAgICAgICAgICAgICAgICBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpO1xuICAgICAgICAgICAgfSB3aGlsZSAocm93ID4gMCAmJiAvXlxccyokLy50ZXN0KGxpbmUpKTtcblxuICAgICAgICAgICAgY29sdW1uID0gbGluZS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoIS9cXHMrJC8udGVzdChsaW5lKSlcbiAgICAgICAgICAgICAgICBsaW5lID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZWZ0T2ZDdXJzb3IgPSBsYW5nLnN0cmluZ1JldmVyc2UobGluZSk7XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuJHNob3J0V29yZEVuZEluZGV4KGxlZnRPZkN1cnNvcik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uIC0gaW5kZXgpO1xuICAgIH07XG5cbiAgICB0aGlzLm1vdmVDdXJzb3JXb3JkUmlnaHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kc2VsZWN0TG9uZ1dvcmRzKVxuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yTG9uZ1dvcmRSaWdodCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRSaWdodCgpO1xuICAgIH07XG5cbiAgICB0aGlzLm1vdmVDdXJzb3JXb3JkTGVmdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zZXNzaW9uLiRzZWxlY3RMb25nV29yZHMpXG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JMb25nV29yZExlZnQoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yU2hvcnRXb3JkTGVmdCgpO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yQnkgPSBmdW5jdGlvbihyb3dzLCBjaGFycykge1xuICAgICAgICB2YXIgc2NyZWVuUG9zID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihcbiAgICAgICAgICAgIHRoaXMubGVhZC5yb3csXG4gICAgICAgICAgICB0aGlzLmxlYWQuY29sdW1uXG4gICAgICAgICk7XG5cbiAgICAgICAgdmFyIG9mZnNldFg7XG5cbiAgICAgICAgaWYgKGNoYXJzID09PSAwKSB7XG4gICAgICAgICAgICBpZiAocm93cyAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyhzY3JlZW5Qb3Mucm93LCB0aGlzLmxlYWQucm93KSkge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRYID0gdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5nZXRQb3NMZWZ0KHNjcmVlblBvcy5jb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICBzY3JlZW5Qb3MuY29sdW1uID0gTWF0aC5yb3VuZChvZmZzZXRYIC8gdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5jaGFyV2lkdGhzWzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRYID0gc2NyZWVuUG9zLmNvbHVtbiAqIHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuY2hhcldpZHRoc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLiRkZXNpcmVkQ29sdW1uKVxuICAgICAgICAgICAgICAgIHNjcmVlblBvcy5jb2x1bW4gPSB0aGlzLiRkZXNpcmVkQ29sdW1uO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuJGRlc2lyZWRDb2x1bW4gPSBzY3JlZW5Qb3MuY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRvY1BvcyA9IHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUG9zLnJvdyArIHJvd3MsIHNjcmVlblBvcy5jb2x1bW4sIG9mZnNldFgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHJvd3MgIT09IDAgJiYgY2hhcnMgPT09IDAgJiYgZG9jUG9zLnJvdyA9PT0gdGhpcy5sZWFkLnJvdyAmJiBkb2NQb3MuY29sdW1uID09PSB0aGlzLmxlYWQuY29sdW1uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzICYmIHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0c1tkb2NQb3Mucm93XSkge1xuICAgICAgICAgICAgICAgIGlmIChkb2NQb3Mucm93ID4gMCB8fCByb3dzID4gMClcbiAgICAgICAgICAgICAgICAgICAgZG9jUG9zLnJvdysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGRvY1Bvcy5yb3csIGRvY1Bvcy5jb2x1bW4gKyBjaGFycywgY2hhcnMgPT09IDApO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTtcbiAgICB9O1xuICAgIHRoaXMubW92ZUN1cnNvclRvID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIGtlZXBEZXNpcmVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChyb3csIGNvbHVtbiwgMSk7XG4gICAgICAgIGlmIChmb2xkKSB7XG4gICAgICAgICAgICByb3cgPSBmb2xkLnN0YXJ0LnJvdztcbiAgICAgICAgICAgIGNvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4ka2VlcERlc2lyZWRDb2x1bW5PbkNoYW5nZSA9IHRydWU7XG4gICAgICAgIHZhciBsaW5lID0gdGhpcy5zZXNzaW9uLmdldExpbmUocm93KTtcbiAgICAgICAgaWYgKC9bXFx1REMwMC1cXHVERkZGXS8udGVzdChsaW5lLmNoYXJBdChjb2x1bW4pKSAmJiBsaW5lLmNoYXJBdChjb2x1bW4gLSAxKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubGVhZC5yb3cgPT0gcm93ICYmIHRoaXMubGVhZC5jb2x1bW4gPT0gY29sdW1uICsgMSlcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBjb2x1bW4gLSAxO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGNvbHVtbiArIDE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZWFkLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTtcbiAgICAgICAgdGhpcy4ka2VlcERlc2lyZWRDb2x1bW5PbkNoYW5nZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICgha2VlcERlc2lyZWRDb2x1bW4pXG4gICAgICAgICAgICB0aGlzLiRkZXNpcmVkQ29sdW1uID0gbnVsbDtcbiAgICB9O1xuICAgIHRoaXMubW92ZUN1cnNvclRvU2NyZWVuID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIGtlZXBEZXNpcmVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBwb3MgPSB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHJvdywgY29sdW1uKTtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocG9zLnJvdywgcG9zLmNvbHVtbiwga2VlcERlc2lyZWRDb2x1bW4pO1xuICAgIH07XG4gICAgdGhpcy5kZXRhY2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5sZWFkLmRldGFjaCgpO1xuICAgICAgICB0aGlzLmFuY2hvci5kZXRhY2goKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0gdGhpcy5kb2MgPSBudWxsO1xuICAgIH07XG5cbiAgICB0aGlzLmZyb21PcmllbnRlZFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwgcmFuZ2UuY3Vyc29yID09IHJhbmdlLnN0YXJ0KTtcbiAgICAgICAgdGhpcy4kZGVzaXJlZENvbHVtbiA9IHJhbmdlLmRlc2lyZWRDb2x1bW4gfHwgdGhpcy4kZGVzaXJlZENvbHVtbjtcbiAgICB9O1xuXG4gICAgdGhpcy50b09yaWVudGVkUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMuZ2V0UmFuZ2UoKTtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSByLnN0YXJ0LmNvbHVtbjtcbiAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9IHIuc3RhcnQucm93O1xuICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IHIuZW5kLmNvbHVtbjtcbiAgICAgICAgICAgIHJhbmdlLmVuZC5yb3cgPSByLmVuZC5yb3c7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByYW5nZSA9IHI7XG4gICAgICAgIH1cblxuICAgICAgICByYW5nZS5jdXJzb3IgPSB0aGlzLmlzQmFja3dhcmRzKCkgPyByYW5nZS5zdGFydCA6IHJhbmdlLmVuZDtcbiAgICAgICAgcmFuZ2UuZGVzaXJlZENvbHVtbiA9IHRoaXMuJGRlc2lyZWRDb2x1bW47XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0UmFuZ2VPZk1vdmVtZW50cyA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5nZXRDdXJzb3IoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZ1bmModGhpcyk7XG4gICAgICAgICAgICB2YXIgZW5kID0gdGhpcy5nZXRDdXJzb3IoKTtcbiAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LGVuZCk7XG4gICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQsc3RhcnQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihzdGFydCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucmFuZ2VDb3VudCkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnJhbmdlcy5tYXAoZnVuY3Rpb24ocikge1xuICAgICAgICAgICAgICAgIHZhciByMSA9IHIuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICByMS5pc0JhY2t3YXJkcyA9IHIuY3Vyc29yID09IHIuc3RhcnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHIxO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0UmFuZ2UoKTtcbiAgICAgICAgICAgIGRhdGEuaXNCYWNrd2FyZHMgPSB0aGlzLmlzQmFja3dhcmRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcblxuICAgIHRoaXMuZnJvbUpTT04gPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhLnN0YXJ0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmFuZ2VMaXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b1NpbmdsZVJhbmdlKGRhdGFbMF0pO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBkYXRhLmxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBSYW5nZS5mcm9tUG9pbnRzKGRhdGFbaV0uc3RhcnQsIGRhdGFbaV0uZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbaV0uaXNCYWNrd2FyZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICByLmN1cnNvciA9IHIuc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkUmFuZ2UociwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJhbmdlTGlzdClcbiAgICAgICAgICAgIHRoaXMudG9TaW5nbGVSYW5nZShkYXRhKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShkYXRhLCBkYXRhLmlzQmFja3dhcmRzKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc0VxdWFsID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICBpZiAoKGRhdGEubGVuZ3RoIHx8IHRoaXMucmFuZ2VDb3VudCkgJiYgZGF0YS5sZW5ndGggIT0gdGhpcy5yYW5nZUNvdW50KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIWRhdGEubGVuZ3RoIHx8ICF0aGlzLnJhbmdlcylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJhbmdlKCkuaXNFcXVhbChkYXRhKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5yYW5nZXMubGVuZ3RoOyBpLS07ICkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJhbmdlc1tpXS5pc0VxdWFsKGRhdGFbaV0pKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG59KS5jYWxsKFNlbGVjdGlvbi5wcm90b3R5cGUpO1xuXG5leHBvcnRzLlNlbGVjdGlvbiA9IFNlbGVjdGlvbjtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL3Rva2VuaXplclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2NvbmZpZ1wiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb25maWcgPSBhY2VxdWlyZShcIi4vY29uZmlnXCIpO1xudmFyIE1BWF9UT0tFTl9DT1VOVCA9IDIwMDA7XG52YXIgVG9rZW5pemVyID0gZnVuY3Rpb24ocnVsZXMpIHtcbiAgICB0aGlzLnN0YXRlcyA9IHJ1bGVzO1xuXG4gICAgdGhpcy5yZWdFeHBzID0ge307XG4gICAgdGhpcy5tYXRjaE1hcHBpbmdzID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuc3RhdGVzKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGVzW2tleV07XG4gICAgICAgIHZhciBydWxlUmVnRXhwcyA9IFtdO1xuICAgICAgICB2YXIgbWF0Y2hUb3RhbCA9IDA7XG4gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5tYXRjaE1hcHBpbmdzW2tleV0gPSB7ZGVmYXVsdFRva2VuOiBcInRleHRcIn07XG4gICAgICAgIHZhciBmbGFnID0gXCJnXCI7XG5cbiAgICAgICAgdmFyIHNwbGl0dGVyUnVybGVzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBydWxlID0gc3RhdGVbaV07XG4gICAgICAgICAgICBpZiAocnVsZS5kZWZhdWx0VG9rZW4pXG4gICAgICAgICAgICAgICAgbWFwcGluZy5kZWZhdWx0VG9rZW4gPSBydWxlLmRlZmF1bHRUb2tlbjtcbiAgICAgICAgICAgIGlmIChydWxlLmNhc2VJbnNlbnNpdGl2ZSlcbiAgICAgICAgICAgICAgICBmbGFnID0gXCJnaVwiO1xuICAgICAgICAgICAgaWYgKHJ1bGUucmVnZXggPT0gbnVsbClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKHJ1bGUucmVnZXggaW5zdGFuY2VvZiBSZWdFeHApXG4gICAgICAgICAgICAgICAgcnVsZS5yZWdleCA9IHJ1bGUucmVnZXgudG9TdHJpbmcoKS5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgICB2YXIgYWRqdXN0ZWRyZWdleCA9IHJ1bGUucmVnZXg7XG4gICAgICAgICAgICB2YXIgbWF0Y2hjb3VudCA9IG5ldyBSZWdFeHAoXCIoPzooXCIgKyBhZGp1c3RlZHJlZ2V4ICsgXCIpfCguKSlcIikuZXhlYyhcImFcIikubGVuZ3RoIC0gMjtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bGUudG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudG9rZW4ubGVuZ3RoID09IDEgfHwgbWF0Y2hjb3VudCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUudG9rZW4gPSBydWxlLnRva2VuWzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hjb3VudCAtIDEgIT0gcnVsZS50b2tlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRFcnJvcihcIm51bWJlciBvZiBjbGFzc2VzIGFuZCByZWdleHAgZ3JvdXBzIGRvZXNuJ3QgbWF0Y2hcIiwgeyBcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGU6IHJ1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cENvdW50OiBtYXRjaGNvdW50IC0gMVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS50b2tlbiA9IHJ1bGUudG9rZW5bMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS50b2tlbkFycmF5ID0gcnVsZS50b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS50b2tlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUub25NYXRjaCA9IHRoaXMuJGFycmF5VG9rZW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJ1bGUudG9rZW4gPT0gXCJmdW5jdGlvblwiICYmICFydWxlLm9uTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hjb3VudCA+IDEpXG4gICAgICAgICAgICAgICAgICAgIHJ1bGUub25NYXRjaCA9IHRoaXMuJGFwcGx5VG9rZW47XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBydWxlLm9uTWF0Y2ggPSBydWxlLnRva2VuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWF0Y2hjb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoL1xcXFxcXGQvLnRlc3QocnVsZS5yZWdleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRyZWdleCA9IHJ1bGUucmVnZXgucmVwbGFjZSgvXFxcXChbMC05XSspL2csIGZ1bmN0aW9uKG1hdGNoLCBkaWdpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXFxcXFwiICsgKHBhcnNlSW50KGRpZ2l0LCAxMCkgKyBtYXRjaFRvdGFsICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoY291bnQgPSAxO1xuICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZHJlZ2V4ID0gdGhpcy5yZW1vdmVDYXB0dXJpbmdHcm91cHMocnVsZS5yZWdleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcnVsZS5zcGxpdFJlZ2V4ICYmIHR5cGVvZiBydWxlLnRva2VuICE9IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0dGVyUnVybGVzLnB1c2gocnVsZSk7IC8vIGZsYWcgd2lsbCBiZSBrbm93biBvbmx5IGF0IHRoZSB2ZXJ5IGVuZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtYXBwaW5nW21hdGNoVG90YWxdID0gaTtcbiAgICAgICAgICAgIG1hdGNoVG90YWwgKz0gbWF0Y2hjb3VudDtcblxuICAgICAgICAgICAgcnVsZVJlZ0V4cHMucHVzaChhZGp1c3RlZHJlZ2V4KTtcbiAgICAgICAgICAgIGlmICghcnVsZS5vbk1hdGNoKVxuICAgICAgICAgICAgICAgIHJ1bGUub25NYXRjaCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICghcnVsZVJlZ0V4cHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBtYXBwaW5nWzBdID0gMDtcbiAgICAgICAgICAgIHJ1bGVSZWdFeHBzLnB1c2goXCIkXCIpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBzcGxpdHRlclJ1cmxlcy5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGUpIHtcbiAgICAgICAgICAgIHJ1bGUuc3BsaXRSZWdleCA9IHRoaXMuY3JlYXRlU3BsaXR0ZXJSZWdleHAocnVsZS5yZWdleCwgZmxhZyk7XG4gICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgIHRoaXMucmVnRXhwc1trZXldID0gbmV3IFJlZ0V4cChcIihcIiArIHJ1bGVSZWdFeHBzLmpvaW4oXCIpfChcIikgKyBcIil8KCQpXCIsIGZsYWcpO1xuICAgIH1cbn07XG5cbihmdW5jdGlvbigpIHtcbiAgICB0aGlzLiRzZXRNYXhUb2tlbkNvdW50ID0gZnVuY3Rpb24obSkge1xuICAgICAgICBNQVhfVE9LRU5fQ09VTlQgPSBtIHwgMDtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuJGFwcGx5VG9rZW4gPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuc3BsaXRSZWdleC5leGVjKHN0cikuc2xpY2UoMSk7XG4gICAgICAgIHZhciB0eXBlcyA9IHRoaXMudG9rZW4uYXBwbHkodGhpcywgdmFsdWVzKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0eXBlcyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHJldHVybiBbe3R5cGU6IHR5cGVzLCB2YWx1ZTogc3RyfV07XG5cbiAgICAgICAgdmFyIHRva2VucyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHR5cGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaWYgKHZhbHVlc1tpXSlcbiAgICAgICAgICAgICAgICB0b2tlbnNbdG9rZW5zLmxlbmd0aF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzW2ldLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVzW2ldXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW5zO1xuICAgIH07XG5cbiAgICB0aGlzLiRhcnJheVRva2VucyA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgICBpZiAoIXN0cilcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuc3BsaXRSZWdleC5leGVjKHN0cik7XG4gICAgICAgIGlmICghdmFsdWVzKVxuICAgICAgICAgICAgcmV0dXJuIFwidGV4dFwiO1xuICAgICAgICB2YXIgdG9rZW5zID0gW107XG4gICAgICAgIHZhciB0eXBlcyA9IHRoaXMudG9rZW5BcnJheTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0eXBlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZXNbaSArIDFdKVxuICAgICAgICAgICAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZXNbaV0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbaSArIDFdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW5zO1xuICAgIH07XG5cbiAgICB0aGlzLnJlbW92ZUNhcHR1cmluZ0dyb3VwcyA9IGZ1bmN0aW9uKHNyYykge1xuICAgICAgICB2YXIgciA9IHNyYy5yZXBsYWNlKFxuICAgICAgICAgICAgL1xcWyg/OlxcXFwufFteXFxdXSkqP1xcXXxcXFxcLnxcXChcXD9bOj0hXXwoXFwoKS9nLFxuICAgICAgICAgICAgZnVuY3Rpb24oeCwgeSkge3JldHVybiB5ID8gXCIoPzpcIiA6IHg7fVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgdGhpcy5jcmVhdGVTcGxpdHRlclJlZ2V4cCA9IGZ1bmN0aW9uKHNyYywgZmxhZykge1xuICAgICAgICBpZiAoc3JjLmluZGV4T2YoXCIoPz1cIikgIT0gLTEpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IDA7XG4gICAgICAgICAgICB2YXIgaW5DaENsYXNzID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgbGFzdENhcHR1cmUgPSB7fTtcbiAgICAgICAgICAgIHNyYy5yZXBsYWNlKC8oXFxcXC4pfChcXCgoPzpcXD9bPSFdKT8pfChcXCkpfChbXFxbXFxdXSkvZywgZnVuY3Rpb24oXG4gICAgICAgICAgICAgICAgbSwgZXNjLCBwYXJlbk9wZW4sIHBhcmVuQ2xvc2UsIHNxdWFyZSwgaW5kZXhcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChpbkNoQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5DaENsYXNzID0gc3F1YXJlICE9IFwiXVwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3F1YXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQ2hDbGFzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJlbkNsb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFjayA9PSBsYXN0Q2FwdHVyZS5zdGFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENhcHR1cmUuZW5kID0gaW5kZXgrMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDYXB0dXJlLnN0YWNrID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3RhY2stLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmVuT3Blbikge1xuICAgICAgICAgICAgICAgICAgICBzdGFjaysrO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW5PcGVuLmxlbmd0aCAhPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2FwdHVyZS5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENhcHR1cmUuc3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAobGFzdENhcHR1cmUuZW5kICE9IG51bGwgJiYgL15cXCkqJC8udGVzdChzcmMuc3Vic3RyKGxhc3RDYXB0dXJlLmVuZCkpKVxuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoMCwgbGFzdENhcHR1cmUuc3RhcnQpICsgc3JjLnN1YnN0cihsYXN0Q2FwdHVyZS5lbmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzcmMuY2hhckF0KDApICE9IFwiXlwiKSBzcmMgPSBcIl5cIiArIHNyYztcbiAgICAgICAgaWYgKHNyYy5jaGFyQXQoc3JjLmxlbmd0aCAtIDEpICE9IFwiJFwiKSBzcmMgKz0gXCIkXCI7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChzcmMsIChmbGFnfHxcIlwiKS5yZXBsYWNlKFwiZ1wiLCBcIlwiKSk7XG4gICAgfTtcbiAgICB0aGlzLmdldExpbmVUb2tlbnMgPSBmdW5jdGlvbihsaW5lLCBzdGFydFN0YXRlKSB7XG4gICAgICAgIGlmIChzdGFydFN0YXRlICYmIHR5cGVvZiBzdGFydFN0YXRlICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IHN0YXJ0U3RhdGUuc2xpY2UoMCk7XG4gICAgICAgICAgICBzdGFydFN0YXRlID0gc3RhY2tbMF07XG4gICAgICAgICAgICBpZiAoc3RhcnRTdGF0ZSA9PT0gXCIjdG1wXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHN0YXJ0U3RhdGUgPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuXG4gICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBzdGFydFN0YXRlIHx8IFwic3RhcnRcIjtcbiAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZXNbY3VycmVudFN0YXRlXTtcbiAgICAgICAgaWYgKCFzdGF0ZSkge1xuICAgICAgICAgICAgY3VycmVudFN0YXRlID0gXCJzdGFydFwiO1xuICAgICAgICAgICAgc3RhdGUgPSB0aGlzLnN0YXRlc1tjdXJyZW50U3RhdGVdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5tYXRjaE1hcHBpbmdzW2N1cnJlbnRTdGF0ZV07XG4gICAgICAgIHZhciByZSA9IHRoaXMucmVnRXhwc1tjdXJyZW50U3RhdGVdO1xuICAgICAgICByZS5sYXN0SW5kZXggPSAwO1xuXG4gICAgICAgIHZhciBtYXRjaCwgdG9rZW5zID0gW107XG4gICAgICAgIHZhciBsYXN0SW5kZXggPSAwO1xuICAgICAgICB2YXIgbWF0Y2hBdHRlbXB0cyA9IDA7XG5cbiAgICAgICAgdmFyIHRva2VuID0ge3R5cGU6IG51bGwsIHZhbHVlOiBcIlwifTtcblxuICAgICAgICB3aGlsZSAobWF0Y2ggPSByZS5leGVjKGxpbmUpKSB7XG4gICAgICAgICAgICB2YXIgdHlwZSA9IG1hcHBpbmcuZGVmYXVsdFRva2VuO1xuICAgICAgICAgICAgdmFyIHJ1bGUgPSBudWxsO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gbWF0Y2hbMF07XG4gICAgICAgICAgICB2YXIgaW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICAgICAgICAgIGlmIChpbmRleCAtIHZhbHVlLmxlbmd0aCA+IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgICAgIHZhciBza2lwcGVkID0gbGluZS5zdWJzdHJpbmcobGFzdEluZGV4LCBpbmRleCAtIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0gdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbi52YWx1ZSArPSBza2lwcGVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlKVxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHt0eXBlOiB0eXBlLCB2YWx1ZTogc2tpcHBlZH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdGNoLmxlbmd0aC0yOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbaSArIDFdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgcnVsZSA9IHN0YXRlW21hcHBpbmdbaV1dO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUub25NYXRjaClcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHJ1bGUub25NYXRjaCh2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaywgbGluZSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gcnVsZS50b2tlbjtcblxuICAgICAgICAgICAgICAgIGlmIChydWxlLm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlLm5leHQgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gcnVsZS5uZXh0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gcnVsZS5uZXh0KGN1cnJlbnRTdGF0ZSwgc3RhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoaXMuc3RhdGVzW2N1cnJlbnRTdGF0ZV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0RXJyb3IoXCJzdGF0ZSBkb2Vzbid0IGV4aXN0XCIsIGN1cnJlbnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBcInN0YXJ0XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoaXMuc3RhdGVzW2N1cnJlbnRTdGF0ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IHRoaXMubWF0Y2hNYXBwaW5nc1tjdXJyZW50U3RhdGVdO1xuICAgICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgcmUgPSB0aGlzLnJlZ0V4cHNbY3VycmVudFN0YXRlXTtcbiAgICAgICAgICAgICAgICAgICAgcmUubGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLmNvbnN1bWVMaW5lRW5kKVxuICAgICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoIXJ1bGUgfHwgcnVsZS5tZXJnZSAhPT0gZmFsc2UpICYmIHRva2VuLnR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLnZhbHVlICs9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB7dHlwZTogdHlwZSwgdmFsdWU6IHZhbHVlfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB7dHlwZTogbnVsbCwgdmFsdWU6IFwiXCJ9O1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0eXBlW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsYXN0SW5kZXggPT0gbGluZS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGxhc3RJbmRleCA9IGluZGV4O1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hBdHRlbXB0cysrID4gTUFYX1RPS0VOX0NPVU5UKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoQXR0ZW1wdHMgPiAyICogbGluZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRFcnJvcihcImluZmluaXRlIGxvb3Agd2l0aCBpbiBhY2UgdG9rZW5pemVyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0U3RhdGU6IHN0YXJ0U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAobGFzdEluZGV4IDwgbGluZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGxpbmUuc3Vic3RyaW5nKGxhc3RJbmRleCwgbGFzdEluZGV4ICs9IDIwMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvdmVyZmxvd1wiXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFwic3RhcnRcIjtcbiAgICAgICAgICAgICAgICBzdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUpXG4gICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIFxuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgaWYgKHN0YWNrWzBdICE9PSBjdXJyZW50U3RhdGUpXG4gICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdChcIiN0bXBcIiwgY3VycmVudFN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9rZW5zIDogdG9rZW5zLFxuICAgICAgICAgICAgc3RhdGUgOiBzdGFjay5sZW5ndGggPyBzdGFjayA6IGN1cnJlbnRTdGF0ZVxuICAgICAgICB9O1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5yZXBvcnRFcnJvciA9IGNvbmZpZy5yZXBvcnRFcnJvcjtcbiAgICBcbn0pLmNhbGwoVG9rZW5pemVyLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuVG9rZW5pemVyID0gVG9rZW5pemVyO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlc1wiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9sYW5nXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGxhbmcgPSBhY2VxdWlyZShcIi4uL2xpYi9sYW5nXCIpO1xuXG52YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7XG5cbiAgICB0aGlzLiRydWxlcyA9IHtcbiAgICAgICAgXCJzdGFydFwiIDogW3tcbiAgICAgICAgICAgIHRva2VuIDogXCJlbXB0eV9saW5lXCIsXG4gICAgICAgICAgICByZWdleCA6ICdeJCdcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogXCJ0ZXh0XCJcbiAgICAgICAgfV1cbiAgICB9O1xufTtcblxuKGZ1bmN0aW9uKCkge1xuXG4gICAgdGhpcy5hZGRSdWxlcyA9IGZ1bmN0aW9uKHJ1bGVzLCBwcmVmaXgpIHtcbiAgICAgICAgaWYgKCFwcmVmaXgpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBydWxlcylcbiAgICAgICAgICAgICAgICB0aGlzLiRydWxlc1trZXldID0gcnVsZXNba2V5XTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcnVsZXMpIHtcbiAgICAgICAgICAgIHZhciBzdGF0ZSA9IHJ1bGVzW2tleV07XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBzdGF0ZVtpXTtcbiAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0IHx8IHJ1bGUub25NYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGUubmV4dCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0LmluZGV4T2YocHJlZml4KSAhPT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlLm5leHQgPSBwcmVmaXggKyBydWxlLm5leHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUubmV4dFN0YXRlICYmIHJ1bGUubmV4dFN0YXRlLmluZGV4T2YocHJlZml4KSAhPT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUubmV4dFN0YXRlID0gcHJlZml4ICsgcnVsZS5uZXh0U3RhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4kcnVsZXNbcHJlZml4ICsga2V5XSA9IHN0YXRlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0UnVsZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJ1bGVzO1xuICAgIH07XG5cbiAgICB0aGlzLmVtYmVkUnVsZXMgPSBmdW5jdGlvbiAoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgZXNjYXBlUnVsZXMsIHN0YXRlcywgYXBwZW5kKSB7XG4gICAgICAgIHZhciBlbWJlZFJ1bGVzID0gdHlwZW9mIEhpZ2hsaWdodFJ1bGVzID09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyBuZXcgSGlnaGxpZ2h0UnVsZXMoKS5nZXRSdWxlcygpXG4gICAgICAgICAgICA6IEhpZ2hsaWdodFJ1bGVzO1xuICAgICAgICBpZiAoc3RhdGVzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBzdGF0ZXNbaV0gPSBwcmVmaXggKyBzdGF0ZXNbaV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBlbWJlZFJ1bGVzKVxuICAgICAgICAgICAgICAgIHN0YXRlcy5wdXNoKHByZWZpeCArIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZFJ1bGVzKGVtYmVkUnVsZXMsIHByZWZpeCk7XG5cbiAgICAgICAgaWYgKGVzY2FwZVJ1bGVzKSB7XG4gICAgICAgICAgICB2YXIgYWRkUnVsZXMgPSBBcnJheS5wcm90b3R5cGVbYXBwZW5kID8gXCJwdXNoXCIgOiBcInVuc2hpZnRcIl07XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBhZGRSdWxlcy5hcHBseSh0aGlzLiRydWxlc1tzdGF0ZXNbaV1dLCBsYW5nLmRlZXBDb3B5KGVzY2FwZVJ1bGVzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuJGVtYmVkcylcbiAgICAgICAgICAgIHRoaXMuJGVtYmVkcyA9IFtdO1xuICAgICAgICB0aGlzLiRlbWJlZHMucHVzaChwcmVmaXgpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEVtYmVkcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kZW1iZWRzO1xuICAgIH07XG5cbiAgICB2YXIgcHVzaFN0YXRlID0gZnVuY3Rpb24oY3VycmVudFN0YXRlLCBzdGFjaykge1xuICAgICAgICBpZiAoY3VycmVudFN0YXRlICE9IFwic3RhcnRcIiB8fCBzdGFjay5sZW5ndGgpXG4gICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dFN0YXRlLCBjdXJyZW50U3RhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0U3RhdGU7XG4gICAgfTtcbiAgICB2YXIgcG9wU3RhdGUgPSBmdW5jdGlvbihjdXJyZW50U3RhdGUsIHN0YWNrKSB7XG4gICAgICAgIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgIHJldHVybiBzdGFjay5zaGlmdCgpIHx8IFwic3RhcnRcIjtcbiAgICB9O1xuXG4gICAgdGhpcy5ub3JtYWxpemVSdWxlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaWQgPSAwO1xuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLiRydWxlcztcbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1N0YXRlKGtleSkge1xuICAgICAgICAgICAgdmFyIHN0YXRlID0gcnVsZXNba2V5XTtcbiAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NlZCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBzdGF0ZVtpXTtcbiAgICAgICAgICAgICAgICB2YXIgdG9JbnNlcnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvSW5zZXJ0ID0gcnVsZTtcbiAgICAgICAgICAgICAgICAgICAgcnVsZSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXJ1bGUucmVnZXggJiYgcnVsZS5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICBydWxlLnJlZ2V4ID0gcnVsZS5zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlLm5leHQpXG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlLm5leHQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS5uZXh0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiBydWxlLnRva2VuXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiBydWxlLnRva2VuICsgXCIuZW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdleDogcnVsZS5lbmQgfHwgcnVsZS5zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IFwicG9wXCJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUudG9rZW4gPSBydWxlLnRva2VuICsgXCIuc3RhcnRcIjtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS5wdXNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIG5leHQgPSBydWxlLm5leHQgfHwgcnVsZS5wdXNoO1xuICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIEFycmF5LmlzQXJyYXkobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlTmFtZSA9IHJ1bGUuc3RhdGVOYW1lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRlTmFtZSkgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTmFtZSA9IHJ1bGUudG9rZW47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN0YXRlTmFtZSAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTmFtZSA9IHN0YXRlTmFtZVswXSB8fCBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGVzW3N0YXRlTmFtZV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVOYW1lICs9IGlkKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcnVsZXNbc3RhdGVOYW1lXSA9IG5leHQ7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUubmV4dCA9IHN0YXRlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1N0YXRlKHN0YXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0ID09IFwicG9wXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS5uZXh0ID0gcG9wU3RhdGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUucHVzaCkge1xuICAgICAgICAgICAgICAgICAgICBydWxlLm5leHRTdGF0ZSA9IHJ1bGUubmV4dCB8fCBydWxlLnB1c2g7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUubmV4dCA9IHB1c2hTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJ1bGUucHVzaDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocnVsZS5ydWxlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciByIGluIHJ1bGUucnVsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlc1tyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlc1tyXS5wdXNoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlc1tyXS5wdXNoLmFwcGx5KHJ1bGVzW3JdLCBydWxlLnJ1bGVzW3JdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXNbcl0gPSBydWxlLnJ1bGVzW3JdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBpbmNsdWRlTmFtZSA9IHR5cGVvZiBydWxlID09IFwic3RyaW5nXCIgPyBydWxlIDogcnVsZS5pbmNsdWRlO1xuICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbmNsdWRlTmFtZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0b0luc2VydCA9IGluY2x1ZGVOYW1lLm1hcChmdW5jdGlvbih4KSB7IHJldHVybiBydWxlc1t4XTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvSW5zZXJ0ID0gcnVsZXNbaW5jbHVkZU5hbWVdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0b0luc2VydCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtpLCAxXS5jb25jYXQodG9JbnNlcnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5ub0VzY2FwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzLmZpbHRlcihmdW5jdGlvbih4KSB7cmV0dXJuICF4Lm5leHQ7fSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNwbGljZS5hcHBseShzdGF0ZSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUua2V5d29yZE1hcCkge1xuICAgICAgICAgICAgICAgICAgICBydWxlLnRva2VuID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZS5rZXl3b3JkTWFwLCBydWxlLmRlZmF1bHRUb2tlbiB8fCBcInRleHRcIiwgcnVsZS5jYXNlSW5zZW5zaXRpdmVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJ1bGUuZGVmYXVsdFRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyhydWxlcykuZm9yRWFjaChwcm9jZXNzU3RhdGUsIHRoaXMpO1xuICAgIH07XG5cbiAgICB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIgPSBmdW5jdGlvbihtYXAsIGRlZmF1bHRUb2tlbiwgaWdub3JlQ2FzZSwgc3BsaXRDaGFyKSB7XG4gICAgICAgIHZhciBrZXl3b3JkcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIE9iamVjdC5rZXlzKG1hcCkuZm9yRWFjaChmdW5jdGlvbihjbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHZhciBhID0gbWFwW2NsYXNzTmFtZV07XG4gICAgICAgICAgICBpZiAoaWdub3JlQ2FzZSlcbiAgICAgICAgICAgICAgICBhID0gYS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdmFyIGxpc3QgPSBhLnNwbGl0KHNwbGl0Q2hhciB8fCBcInxcIik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gbGlzdC5sZW5ndGg7IGktLTsgKVxuICAgICAgICAgICAgICAgIGtleXdvcmRzW2xpc3RbaV1dID0gY2xhc3NOYW1lO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihrZXl3b3JkcykpIHtcbiAgICAgICAgICAgIGtleXdvcmRzLl9fcHJvdG9fXyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4ka2V5d29yZExpc3QgPSBPYmplY3Qua2V5cyhrZXl3b3Jkcyk7XG4gICAgICAgIG1hcCA9IG51bGw7XG4gICAgICAgIHJldHVybiBpZ25vcmVDYXNlXG4gICAgICAgICAgICA/IGZ1bmN0aW9uKHZhbHVlKSB7cmV0dXJuIGtleXdvcmRzW3ZhbHVlLnRvTG93ZXJDYXNlKCldIHx8IGRlZmF1bHRUb2tlbjsgfVxuICAgICAgICAgICAgOiBmdW5jdGlvbih2YWx1ZSkge3JldHVybiBrZXl3b3Jkc1t2YWx1ZV0gfHwgZGVmYXVsdFRva2VuOyB9O1xuICAgIH07XG5cbiAgICB0aGlzLmdldEtleXdvcmRzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRrZXl3b3JkcztcbiAgICB9O1xuXG59KS5jYWxsKFRleHRIaWdobGlnaHRSdWxlcy5wcm90b3R5cGUpO1xuXG5leHBvcnRzLlRleHRIaWdobGlnaHRSdWxlcyA9IFRleHRIaWdobGlnaHRSdWxlcztcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL21vZGUvYmVoYXZpb3VyXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEJlaGF2aW91ciA9IGZ1bmN0aW9uKCkge1xuICAgdGhpcy4kYmVoYXZpb3VycyA9IHt9O1xufTtcblxuKGZ1bmN0aW9uICgpIHtcblxuICAgIHRoaXMuYWRkID0gZnVuY3Rpb24gKG5hbWUsIGFjdGlvbiwgY2FsbGJhY2spIHtcbiAgICAgICAgc3dpdGNoICh1bmRlZmluZWQpIHtcbiAgICAgICAgICBjYXNlIHRoaXMuJGJlaGF2aW91cnM6XG4gICAgICAgICAgICAgIHRoaXMuJGJlaGF2aW91cnMgPSB7fTtcbiAgICAgICAgICBjYXNlIHRoaXMuJGJlaGF2aW91cnNbbmFtZV06XG4gICAgICAgICAgICAgIHRoaXMuJGJlaGF2aW91cnNbbmFtZV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRiZWhhdmlvdXJzW25hbWVdW2FjdGlvbl0gPSBjYWxsYmFjaztcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuYWRkQmVoYXZpb3VycyA9IGZ1bmN0aW9uIChiZWhhdmlvdXJzKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBiZWhhdmlvdXJzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBhY3Rpb24gaW4gYmVoYXZpb3Vyc1trZXldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQoa2V5LCBhY3Rpb24sIGJlaGF2aW91cnNba2V5XVthY3Rpb25dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAodGhpcy4kYmVoYXZpb3VycyAmJiB0aGlzLiRiZWhhdmlvdXJzW25hbWVdKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kYmVoYXZpb3Vyc1tuYW1lXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgdGhpcy5pbmhlcml0ID0gZnVuY3Rpb24gKG1vZGUsIGZpbHRlcikge1xuICAgICAgICBpZiAodHlwZW9mIG1vZGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIGJlaGF2aW91cnMgPSBuZXcgbW9kZSgpLmdldEJlaGF2aW91cnMoZmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBiZWhhdmlvdXJzID0gbW9kZS5nZXRCZWhhdmlvdXJzKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRCZWhhdmlvdXJzKGJlaGF2aW91cnMpO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5nZXRCZWhhdmlvdXJzID0gZnVuY3Rpb24gKGZpbHRlcikge1xuICAgICAgICBpZiAoIWZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGJlaGF2aW91cnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmV0ID0ge307XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRiZWhhdmlvdXJzW2ZpbHRlcltpXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0W2ZpbHRlcltpXV0gPSB0aGlzLiRiZWhhdmlvdXJzW2ZpbHRlcltpXV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgIH07XG5cbn0pLmNhbGwoQmVoYXZpb3VyLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuQmVoYXZpb3VyID0gQmVoYXZpb3VyO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvdG9rZW5faXRlcmF0b3JcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9yYW5nZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi9yYW5nZVwiKS5SYW5nZTtcbnZhciBUb2tlbkl0ZXJhdG9yID0gZnVuY3Rpb24oc2Vzc2lvbiwgaW5pdGlhbFJvdywgaW5pdGlhbENvbHVtbikge1xuICAgIHRoaXMuJHNlc3Npb24gPSBzZXNzaW9uO1xuICAgIHRoaXMuJHJvdyA9IGluaXRpYWxSb3c7XG4gICAgdGhpcy4kcm93VG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMoaW5pdGlhbFJvdyk7XG5cbiAgICB2YXIgdG9rZW4gPSBzZXNzaW9uLmdldFRva2VuQXQoaW5pdGlhbFJvdywgaW5pdGlhbENvbHVtbik7XG4gICAgdGhpcy4kdG9rZW5JbmRleCA9IHRva2VuID8gdG9rZW4uaW5kZXggOiAtMTtcbn07XG5cbihmdW5jdGlvbigpIHsgXG4gICAgdGhpcy5zdGVwQmFja3dhcmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kdG9rZW5JbmRleCAtPSAxO1xuICAgICAgICBcbiAgICAgICAgd2hpbGUgKHRoaXMuJHRva2VuSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLiRyb3cgLT0gMTtcbiAgICAgICAgICAgIGlmICh0aGlzLiRyb3cgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kcm93ID0gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuJHJvd1Rva2VucyA9IHRoaXMuJHNlc3Npb24uZ2V0VG9rZW5zKHRoaXMuJHJvdyk7XG4gICAgICAgICAgICB0aGlzLiR0b2tlbkluZGV4ID0gdGhpcy4kcm93VG9rZW5zLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICByZXR1cm4gdGhpcy4kcm93VG9rZW5zW3RoaXMuJHRva2VuSW5kZXhdO1xuICAgIH07ICAgXG4gICAgdGhpcy5zdGVwRm9yd2FyZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiR0b2tlbkluZGV4ICs9IDE7XG4gICAgICAgIHZhciByb3dDb3VudDtcbiAgICAgICAgd2hpbGUgKHRoaXMuJHRva2VuSW5kZXggPj0gdGhpcy4kcm93VG9rZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy4kcm93ICs9IDE7XG4gICAgICAgICAgICBpZiAoIXJvd0NvdW50KVxuICAgICAgICAgICAgICAgIHJvd0NvdW50ID0gdGhpcy4kc2Vzc2lvbi5nZXRMZW5ndGgoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiRyb3cgPj0gcm93Q291bnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRyb3cgPSByb3dDb3VudCAtIDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuJHJvd1Rva2VucyA9IHRoaXMuJHNlc3Npb24uZ2V0VG9rZW5zKHRoaXMuJHJvdyk7XG4gICAgICAgICAgICB0aGlzLiR0b2tlbkluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIHJldHVybiB0aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9rZW5JbmRleF07XG4gICAgfTsgICAgICBcbiAgICB0aGlzLmdldEN1cnJlbnRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvd1Rva2Vuc1t0aGlzLiR0b2tlbkluZGV4XTtcbiAgICB9OyAgICAgIFxuICAgIHRoaXMuZ2V0Q3VycmVudFRva2VuUm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kcm93O1xuICAgIH07ICAgICBcbiAgICB0aGlzLmdldEN1cnJlbnRUb2tlbkNvbHVtbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcm93VG9rZW5zID0gdGhpcy4kcm93VG9rZW5zO1xuICAgICAgICB2YXIgdG9rZW5JbmRleCA9IHRoaXMuJHRva2VuSW5kZXg7XG4gICAgICAgIHZhciBjb2x1bW4gPSByb3dUb2tlbnNbdG9rZW5JbmRleF0uc3RhcnQ7XG4gICAgICAgIGlmIChjb2x1bW4gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgICAgICBcbiAgICAgICAgY29sdW1uID0gMDtcbiAgICAgICAgd2hpbGUgKHRva2VuSW5kZXggPiAwKSB7XG4gICAgICAgICAgICB0b2tlbkluZGV4IC09IDE7XG4gICAgICAgICAgICBjb2x1bW4gKz0gcm93VG9rZW5zW3Rva2VuSW5kZXhdLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGNvbHVtbjsgIFxuICAgIH07XG4gICAgdGhpcy5nZXRDdXJyZW50VG9rZW5Qb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge3JvdzogdGhpcy4kcm93LCBjb2x1bW46IHRoaXMuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9O1xuICAgIH07XG4gICAgdGhpcy5nZXRDdXJyZW50VG9rZW5SYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9rZW5JbmRleF07XG4gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpO1xuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuJHJvdywgY29sdW1uLCB0aGlzLiRyb3csIGNvbHVtbiArIHRva2VuLnZhbHVlLmxlbmd0aCk7XG4gICAgfTtcblxufSkuY2FsbChUb2tlbkl0ZXJhdG9yLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuVG9rZW5JdGVyYXRvciA9IFRva2VuSXRlcmF0b3I7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGVcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvb29wXCIsXCJhY2UvbW9kZS9iZWhhdmlvdXJcIixcImFjZS90b2tlbl9pdGVyYXRvclwiLFwiYWNlL2xpYi9sYW5nXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIG9vcCA9IGFjZXF1aXJlKFwiLi4vLi4vbGliL29vcFwiKTtcbnZhciBCZWhhdmlvdXIgPSBhY2VxdWlyZShcIi4uL2JlaGF2aW91clwiKS5CZWhhdmlvdXI7XG52YXIgVG9rZW5JdGVyYXRvciA9IGFjZXF1aXJlKFwiLi4vLi4vdG9rZW5faXRlcmF0b3JcIikuVG9rZW5JdGVyYXRvcjtcbnZhciBsYW5nID0gYWNlcXVpcmUoXCIuLi8uLi9saWIvbGFuZ1wiKTtcblxudmFyIFNBRkVfSU5TRVJUX0lOX1RPS0VOUyA9XG4gICAgW1widGV4dFwiLCBcInBhcmVuLnJwYXJlblwiLCBcInB1bmN0dWF0aW9uLm9wZXJhdG9yXCJdO1xudmFyIFNBRkVfSU5TRVJUX0JFRk9SRV9UT0tFTlMgPVxuICAgIFtcInRleHRcIiwgXCJwYXJlbi5ycGFyZW5cIiwgXCJwdW5jdHVhdGlvbi5vcGVyYXRvclwiLCBcImNvbW1lbnRcIl07XG5cbnZhciBjb250ZXh0O1xudmFyIGNvbnRleHRDYWNoZSA9IHt9O1xudmFyIGRlZmF1bHRRdW90ZXMgPSB7J1wiJyA6ICdcIicsIFwiJ1wiIDogXCInXCJ9O1xuXG52YXIgaW5pdENvbnRleHQgPSBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICB2YXIgaWQgPSAtMTtcbiAgICBpZiAoZWRpdG9yLm11bHRpU2VsZWN0KSB7XG4gICAgICAgIGlkID0gZWRpdG9yLnNlbGVjdGlvbi5pbmRleDtcbiAgICAgICAgaWYgKGNvbnRleHRDYWNoZS5yYW5nZUNvdW50ICE9IGVkaXRvci5tdWx0aVNlbGVjdC5yYW5nZUNvdW50KVxuICAgICAgICAgICAgY29udGV4dENhY2hlID0ge3JhbmdlQ291bnQ6IGVkaXRvci5tdWx0aVNlbGVjdC5yYW5nZUNvdW50fTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHRDYWNoZVtpZF0pXG4gICAgICAgIHJldHVybiBjb250ZXh0ID0gY29udGV4dENhY2hlW2lkXTtcbiAgICBjb250ZXh0ID0gY29udGV4dENhY2hlW2lkXSA9IHtcbiAgICAgICAgYXV0b0luc2VydGVkQnJhY2tldHM6IDAsXG4gICAgICAgIGF1dG9JbnNlcnRlZFJvdzogLTEsXG4gICAgICAgIGF1dG9JbnNlcnRlZExpbmVFbmQ6IFwiXCIsXG4gICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0czogMCxcbiAgICAgICAgbWF5YmVJbnNlcnRlZFJvdzogLTEsXG4gICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQ6IFwiXCIsXG4gICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5lRW5kOiBcIlwiXG4gICAgfTtcbn07XG5cbnZhciBnZXRXcmFwcGVkID0gZnVuY3Rpb24oc2VsZWN0aW9uLCBzZWxlY3RlZCwgb3BlbmluZywgY2xvc2luZykge1xuICAgIHZhciByb3dEaWZmID0gc2VsZWN0aW9uLmVuZC5yb3cgLSBzZWxlY3Rpb24uc3RhcnQucm93O1xuICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6IG9wZW5pbmcgKyBzZWxlY3RlZCArIGNsb3NpbmcsXG4gICAgICAgIHNlbGVjdGlvbjogW1xuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnN0YXJ0LmNvbHVtbiArIDEsXG4gICAgICAgICAgICAgICAgcm93RGlmZixcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZW5kLmNvbHVtbiArIChyb3dEaWZmID8gMCA6IDEpXG4gICAgICAgICAgICBdXG4gICAgfTtcbn07XG5cbnZhciBDc3R5bGVCZWhhdmlvdXIgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgdGhpcy5hZGQoXCJicmFjZXNcIiwgXCJpbnNlcnRpb25cIiwgZnVuY3Rpb24oc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7XG4gICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpO1xuICAgICAgICBpZiAodGV4dCA9PSAneycpIHtcbiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gXCJcIiAmJiBzZWxlY3RlZCAhPT0gXCJ7XCIgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFdyYXBwZWQoc2VsZWN0aW9uLCBzZWxlY3RlZCwgJ3snLCAnfScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHtcbiAgICAgICAgICAgICAgICBpZiAoL1tcXF1cXH1cXCldLy50ZXN0KGxpbmVbY3Vyc29yLmNvbHVtbl0pIHx8IGVkaXRvci5pbk11bHRpU2VsZWN0TW9kZSB8fCBvcHRpb25zICYmIG9wdGlvbnMuYnJhY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgXCJ9XCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3t9JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLnJlY29yZE1heWJlSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgXCJ7XCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3snLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnfScpIHtcbiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7XG4gICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpO1xuICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnfScpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBzZXNzaW9uLiRmaW5kT3BlbmluZ0JyYWNrZXQoJ30nLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsgMSwgcm93OiBjdXJzb3Iucm93fSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9PSBudWxsICYmIENzdHlsZUJlaGF2aW91ci5pc0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lLCB0ZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0b0luc2VydGVkQ2xvc2luZygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09IFwiXFxuXCIgfHwgdGV4dCA9PSBcIlxcclxcblwiKSB7XG4gICAgICAgICAgICBpbml0Q29udGV4dChlZGl0b3IpO1xuICAgICAgICAgICAgdmFyIGNsb3NpbmcgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKENzdHlsZUJlaGF2aW91ci5pc01heWJlSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSkpIHtcbiAgICAgICAgICAgICAgICBjbG9zaW5nID0gbGFuZy5zdHJpbmdSZXBlYXQoXCJ9XCIsIGNvbnRleHQubWF5YmVJbnNlcnRlZEJyYWNrZXRzKTtcbiAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIuY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTtcbiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICd9Jykge1xuICAgICAgICAgICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBzZXNzaW9uLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzogY3Vyc29yLnJvdywgY29sdW1uOiBjdXJzb3IuY29sdW1uKzF9LCAnfScpO1xuICAgICAgICAgICAgICAgIGlmICghb3BlbkJyYWNlUG9zKVxuICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgdmFyIG5leHRfaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KHNlc3Npb24uZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNsb3NpbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV4dF9pbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5jbGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluZGVudCA9IG5leHRfaW5kZW50ICsgc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiAnXFxuJyArIGluZGVudCArICdcXG4nICsgbmV4dF9pbmRlbnQgKyBjbG9zaW5nLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIGluZGVudC5sZW5ndGgsIDEsIGluZGVudC5sZW5ndGhdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLmNsZWFyTWF5YmVJbnNlcnRlZENsb3NpbmcoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGQoXCJicmFjZXNcIiwgXCJkZWxldGlvblwiLCBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7XG4gICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAneycpIHtcbiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7XG4gICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTtcbiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uICsgMSk7XG4gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICd9Jykge1xuICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubWF5YmVJbnNlcnRlZEJyYWNrZXRzLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYWRkKFwicGFyZW5zXCIsIFwiaW5zZXJ0aW9uXCIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkge1xuICAgICAgICBpZiAodGV4dCA9PSAnKCcpIHtcbiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gXCJcIiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZChzZWxlY3Rpb24sIHNlbGVjdGVkLCAnKCcsICcpJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkge1xuICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgXCIpXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6ICcoKScsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICcpJykge1xuICAgICAgICAgICAgaW5pdENvbnRleHQoZWRpdG9yKTtcbiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTtcbiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7XG4gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICcpJykge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnKScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZChcInBhcmVuc1wiLCBcImRlbGV0aW9uXCIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHtcbiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTtcbiAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIHNlbGVjdGVkID09ICcoJykge1xuICAgICAgICAgICAgaW5pdENvbnRleHQoZWRpdG9yKTtcbiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpO1xuICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpO1xuICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnKScpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZChcImJyYWNrZXRzXCIsIFwiaW5zZXJ0aW9uXCIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkge1xuICAgICAgICBpZiAodGV4dCA9PSAnWycpIHtcbiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gXCJcIiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZChzZWxlY3Rpb24sIHNlbGVjdGVkLCAnWycsICddJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkge1xuICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgXCJdXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6ICdbXScsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICddJykge1xuICAgICAgICAgICAgaW5pdENvbnRleHQoZWRpdG9yKTtcbiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTtcbiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7XG4gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICddJykge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnXScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZChcImJyYWNrZXRzXCIsIFwiZGVsZXRpb25cIiwgZnVuY3Rpb24oc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkge1xuICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpO1xuICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT0gJ1snKSB7XG4gICAgICAgICAgICBpbml0Q29udGV4dChlZGl0b3IpO1xuICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7XG4gICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7XG4gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICddJykge1xuICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYWRkKFwic3RyaW5nX2RxdW90ZXNcIiwgXCJpbnNlcnRpb25cIiwgZnVuY3Rpb24oc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7XG4gICAgICAgIHZhciBxdW90ZXMgPSBzZXNzaW9uLiRtb2RlLiRxdW90ZXMgfHwgZGVmYXVsdFF1b3RlcztcbiAgICAgICAgaWYgKHRleHQubGVuZ3RoID09IDEgJiYgcXVvdGVzW3RleHRdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5saW5lQ29tbWVudFN0YXJ0ICYmIHRoaXMubGluZUNvbW1lbnRTdGFydC5pbmRleE9mKHRleHQpICE9IC0xKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7XG4gICAgICAgICAgICB2YXIgcXVvdGUgPSB0ZXh0O1xuICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09IFwiXCIgJiYgKHNlbGVjdGVkLmxlbmd0aCAhPSAxIHx8ICFxdW90ZXNbc2VsZWN0ZWRdKSAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZChzZWxlY3Rpb24sIHNlbGVjdGVkLCBxdW90ZSwgcXVvdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpO1xuICAgICAgICAgICAgICAgIHZhciBsZWZ0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4tMSwgY3Vyc29yLmNvbHVtbik7XG4gICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTtcbiAgICAgICAgICAgICAgICB2YXIgcmlnaHRUb2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGxlZnRDaGFyID09IFwiXFxcXFwiICYmIHRva2VuICYmIC9lc2NhcGUvLnRlc3QodG9rZW4udHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgdmFyIHN0cmluZ0JlZm9yZSA9IHRva2VuICYmIC9zdHJpbmd8ZXNjYXBlLy50ZXN0KHRva2VuLnR5cGUpO1xuICAgICAgICAgICAgICAgIHZhciBzdHJpbmdBZnRlciA9ICFyaWdodFRva2VuIHx8IC9zdHJpbmd8ZXNjYXBlLy50ZXN0KHJpZ2h0VG9rZW4udHlwZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcGFpcjtcbiAgICAgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhaXIgPSBzdHJpbmdCZWZvcmUgIT09IHN0cmluZ0FmdGVyO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFpciAmJiAvc3RyaW5nXFwuZW5kLy50ZXN0KHJpZ2h0VG9rZW4udHlwZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWlyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ0JlZm9yZSAmJiAhc3RyaW5nQWZ0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gd3JhcCBzdHJpbmcgd2l0aCBkaWZmZXJlbnQgcXVvdGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ0JlZm9yZSAmJiBzdHJpbmdBZnRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBkbyBub3QgcGFpciBxdW90ZXMgaW5zaWRlIHN0cmluZ3NcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdvcmRSZSA9IHNlc3Npb24uJG1vZGUudG9rZW5SZTtcbiAgICAgICAgICAgICAgICAgICAgd29yZFJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1dvcmRCZWZvcmUgPSB3b3JkUmUudGVzdChsZWZ0Q2hhcik7XG4gICAgICAgICAgICAgICAgICAgIHdvcmRSZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNXb3JkQWZ0ZXIgPSB3b3JkUmUudGVzdChsZWZ0Q2hhcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1dvcmRCZWZvcmUgfHwgaXNXb3JkQWZ0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gYmVmb3JlIG9yIGFmdGVyIGFscGhhbnVtZXJpY1xuICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRDaGFyICYmICEvW1xcczssLn0pXFxdXFxcXF0vLnRlc3QocmlnaHRDaGFyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyB0aGVyZSBpcyByaWdodENoYXIgYW5kIGl0IGlzbid0IGNsb3NpbmdcbiAgICAgICAgICAgICAgICAgICAgcGFpciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHBhaXIgPyBxdW90ZSArIHF1b3RlIDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwxXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYWRkKFwic3RyaW5nX2RxdW90ZXNcIiwgXCJkZWxldGlvblwiLCBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7XG4gICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJ1wiJyB8fCBzZWxlY3RlZCA9PSBcIidcIikpIHtcbiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7XG4gICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTtcbiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTtcbiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbn07XG5cblxuQ3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbiA9IGZ1bmN0aW9uKGVkaXRvciwgc2Vzc2lvbikge1xuICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTtcbiAgICBpZiAoIXRoaXMuJG1hdGNoVG9rZW5UeXBlKGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8IFwidGV4dFwiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKSB7XG4gICAgICAgIHZhciBpdGVyYXRvcjIgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uICsgMSk7XG4gICAgICAgIGlmICghdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IyLmdldEN1cnJlbnRUb2tlbigpIHx8IFwidGV4dFwiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpO1xuICAgIHJldHVybiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSAhPT0gY3Vyc29yLnJvdyB8fFxuICAgICAgICB0aGlzLiRtYXRjaFRva2VuVHlwZShpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKSB8fCBcInRleHRcIiwgU0FGRV9JTlNFUlRfQkVGT1JFX1RPS0VOUyk7XG59O1xuXG5Dc3R5bGVCZWhhdmlvdXIuJG1hdGNoVG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW4sIHR5cGVzKSB7XG4gICAgcmV0dXJuIHR5cGVzLmluZGV4T2YodG9rZW4udHlwZSB8fCB0b2tlbikgPiAtMTtcbn07XG5cbkNzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uLCBicmFja2V0KSB7XG4gICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpO1xuICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTtcbiAgICBpZiAoIXRoaXMuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgY29udGV4dC5hdXRvSW5zZXJ0ZWRMaW5lRW5kWzBdKSlcbiAgICAgICAgY29udGV4dC5hdXRvSW5zZXJ0ZWRCcmFja2V0cyA9IDA7XG4gICAgY29udGV4dC5hdXRvSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iucm93O1xuICAgIGNvbnRleHQuYXV0b0luc2VydGVkTGluZUVuZCA9IGJyYWNrZXQgKyBsaW5lLnN1YnN0cihjdXJzb3IuY29sdW1uKTtcbiAgICBjb250ZXh0LmF1dG9JbnNlcnRlZEJyYWNrZXRzKys7XG59O1xuXG5Dc3R5bGVCZWhhdmlvdXIucmVjb3JkTWF5YmVJbnNlcnQgPSBmdW5jdGlvbihlZGl0b3IsIHNlc3Npb24sIGJyYWNrZXQpIHtcbiAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7XG4gICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpO1xuICAgIGlmICghdGhpcy5pc01heWJlSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSkpXG4gICAgICAgIGNvbnRleHQubWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDtcbiAgICBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iucm93O1xuICAgIGNvbnRleHQubWF5YmVJbnNlcnRlZExpbmVTdGFydCA9IGxpbmUuc3Vic3RyKDAsIGN1cnNvci5jb2x1bW4pICsgYnJhY2tldDtcbiAgICBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRMaW5lRW5kID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7XG4gICAgY29udGV4dC5tYXliZUluc2VydGVkQnJhY2tldHMrKztcbn07XG5cbkNzdHlsZUJlaGF2aW91ci5pc0F1dG9JbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbihjdXJzb3IsIGxpbmUsIGJyYWNrZXQpIHtcbiAgICByZXR1cm4gY29udGV4dC5hdXRvSW5zZXJ0ZWRCcmFja2V0cyA+IDAgJiZcbiAgICAgICAgY3Vyc29yLnJvdyA9PT0gY29udGV4dC5hdXRvSW5zZXJ0ZWRSb3cgJiZcbiAgICAgICAgYnJhY2tldCA9PT0gY29udGV4dC5hdXRvSW5zZXJ0ZWRMaW5lRW5kWzBdICYmXG4gICAgICAgIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBjb250ZXh0LmF1dG9JbnNlcnRlZExpbmVFbmQ7XG59O1xuXG5Dc3R5bGVCZWhhdmlvdXIuaXNNYXliZUluc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSkge1xuICAgIHJldHVybiBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRCcmFja2V0cyA+IDAgJiZcbiAgICAgICAgY3Vyc29yLnJvdyA9PT0gY29udGV4dC5tYXliZUluc2VydGVkUm93ICYmXG4gICAgICAgIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRMaW5lRW5kICYmXG4gICAgICAgIGxpbmUuc3Vic3RyKDAsIGN1cnNvci5jb2x1bW4pID09IGNvbnRleHQubWF5YmVJbnNlcnRlZExpbmVTdGFydDtcbn07XG5cbkNzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgY29udGV4dC5hdXRvSW5zZXJ0ZWRMaW5lRW5kID0gY29udGV4dC5hdXRvSW5zZXJ0ZWRMaW5lRW5kLnN1YnN0cigxKTtcbiAgICBjb250ZXh0LmF1dG9JbnNlcnRlZEJyYWNrZXRzLS07XG59O1xuXG5Dc3R5bGVCZWhhdmlvdXIuY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgIGNvbnRleHQubWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDtcbiAgICAgICAgY29udGV4dC5tYXliZUluc2VydGVkUm93ID0gLTE7XG4gICAgfVxufTtcblxuXG5cbm9vcC5pbmhlcml0cyhDc3R5bGVCZWhhdmlvdXIsIEJlaGF2aW91cik7XG5cbmV4cG9ydHMuQ3N0eWxlQmVoYXZpb3VyID0gQ3N0eWxlQmVoYXZpb3VyO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvdW5pY29kZVwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5leHBvcnRzLnBhY2thZ2VzID0ge307XG5cbmFkZFVuaWNvZGVQYWNrYWdlKHtcbiAgICBMOiAgXCIwMDQxLTAwNUEwMDYxLTAwN0EwMEFBMDBCNTAwQkEwMEMwLTAwRDYwMEQ4LTAwRjYwMEY4LTAyQzEwMkM2LTAyRDEwMkUwLTAyRTQwMkVDMDJFRTAzNzAtMDM3NDAzNzYwMzc3MDM3QS0wMzdEMDM4NjAzODgtMDM4QTAzOEMwMzhFLTAzQTEwM0EzLTAzRjUwM0Y3LTA0ODEwNDhBLTA1MjUwNTMxLTA1NTYwNTU5MDU2MS0wNTg3MDVEMC0wNUVBMDVGMC0wNUYyMDYyMS0wNjRBMDY2RTA2NkYwNjcxLTA2RDMwNkQ1MDZFNTA2RTYwNkVFMDZFRjA2RkEtMDZGQzA2RkYwNzEwMDcxMi0wNzJGMDc0RC0wN0E1MDdCMTA3Q0EtMDdFQTA3RjQwN0Y1MDdGQTA4MDAtMDgxNTA4MUEwODI0MDgyODA5MDQtMDkzOTA5M0QwOTUwMDk1OC0wOTYxMDk3MTA5NzIwOTc5LTA5N0YwOTg1LTA5OEMwOThGMDk5MDA5OTMtMDlBODA5QUEtMDlCMDA5QjIwOUI2LTA5QjkwOUJEMDlDRTA5REMwOUREMDlERi0wOUUxMDlGMDA5RjEwQTA1LTBBMEEwQTBGMEExMDBBMTMtMEEyODBBMkEtMEEzMDBBMzIwQTMzMEEzNTBBMzYwQTM4MEEzOTBBNTktMEE1QzBBNUUwQTcyLTBBNzQwQTg1LTBBOEQwQThGLTBBOTEwQTkzLTBBQTgwQUFBLTBBQjAwQUIyMEFCMzBBQjUtMEFCOTBBQkQwQUQwMEFFMDBBRTEwQjA1LTBCMEMwQjBGMEIxMDBCMTMtMEIyODBCMkEtMEIzMDBCMzIwQjMzMEIzNS0wQjM5MEIzRDBCNUMwQjVEMEI1Ri0wQjYxMEI3MTBCODMwQjg1LTBCOEEwQjhFLTBCOTAwQjkyLTBCOTUwQjk5MEI5QTBCOUMwQjlFMEI5RjBCQTMwQkE0MEJBOC0wQkFBMEJBRS0wQkI5MEJEMDBDMDUtMEMwQzBDMEUtMEMxMDBDMTItMEMyODBDMkEtMEMzMzBDMzUtMEMzOTBDM0QwQzU4MEM1OTBDNjAwQzYxMEM4NS0wQzhDMEM4RS0wQzkwMEM5Mi0wQ0E4MENBQS0wQ0IzMENCNS0wQ0I5MENCRDBDREUwQ0UwMENFMTBEMDUtMEQwQzBEMEUtMEQxMDBEMTItMEQyODBEMkEtMEQzOTBEM0QwRDYwMEQ2MTBEN0EtMEQ3RjBEODUtMEQ5NjBEOUEtMERCMTBEQjMtMERCQjBEQkQwREMwLTBEQzYwRTAxLTBFMzAwRTMyMEUzMzBFNDAtMEU0NjBFODEwRTgyMEU4NDBFODcwRTg4MEU4QTBFOEQwRTk0LTBFOTcwRTk5LTBFOUYwRUExLTBFQTMwRUE1MEVBNzBFQUEwRUFCMEVBRC0wRUIwMEVCMjBFQjMwRUJEMEVDMC0wRUM0MEVDNjBFREMwRUREMEYwMDBGNDAtMEY0NzBGNDktMEY2QzBGODgtMEY4QjEwMDAtMTAyQTEwM0YxMDUwLTEwNTUxMDVBLTEwNUQxMDYxMTA2NTEwNjYxMDZFLTEwNzAxMDc1LTEwODExMDhFMTBBMC0xMEM1MTBEMC0xMEZBMTBGQzExMDAtMTI0ODEyNEEtMTI0RDEyNTAtMTI1NjEyNTgxMjVBLTEyNUQxMjYwLTEyODgxMjhBLTEyOEQxMjkwLTEyQjAxMkIyLTEyQjUxMkI4LTEyQkUxMkMwMTJDMi0xMkM1MTJDOC0xMkQ2MTJEOC0xMzEwMTMxMi0xMzE1MTMxOC0xMzVBMTM4MC0xMzhGMTNBMC0xM0Y0MTQwMS0xNjZDMTY2Ri0xNjdGMTY4MS0xNjlBMTZBMC0xNkVBMTcwMC0xNzBDMTcwRS0xNzExMTcyMC0xNzMxMTc0MC0xNzUxMTc2MC0xNzZDMTc2RS0xNzcwMTc4MC0xN0IzMTdENzE3REMxODIwLTE4NzcxODgwLTE4QTgxOEFBMThCMC0xOEY1MTkwMC0xOTFDMTk1MC0xOTZEMTk3MC0xOTc0MTk4MC0xOUFCMTlDMS0xOUM3MUEwMC0xQTE2MUEyMC0xQTU0MUFBNzFCMDUtMUIzMzFCNDUtMUI0QjFCODMtMUJBMDFCQUUxQkFGMUMwMC0xQzIzMUM0RC0xQzRGMUM1QS0xQzdEMUNFOS0xQ0VDMUNFRS0xQ0YxMUQwMC0xREJGMUUwMC0xRjE1MUYxOC0xRjFEMUYyMC0xRjQ1MUY0OC0xRjREMUY1MC0xRjU3MUY1OTFGNUIxRjVEMUY1Ri0xRjdEMUY4MC0xRkI0MUZCNi0xRkJDMUZCRTFGQzItMUZDNDFGQzYtMUZDQzFGRDAtMUZEMzFGRDYtMUZEQjFGRTAtMUZFQzFGRjItMUZGNDFGRjYtMUZGQzIwNzEyMDdGMjA5MC0yMDk0MjEwMjIxMDcyMTBBLTIxMTMyMTE1MjExOS0yMTFEMjEyNDIxMjYyMTI4MjEyQS0yMTJEMjEyRi0yMTM5MjEzQy0yMTNGMjE0NS0yMTQ5MjE0RTIxODMyMTg0MkMwMC0yQzJFMkMzMC0yQzVFMkM2MC0yQ0U0MkNFQi0yQ0VFMkQwMC0yRDI1MkQzMC0yRDY1MkQ2RjJEODAtMkQ5NjJEQTAtMkRBNjJEQTgtMkRBRTJEQjAtMkRCNjJEQjgtMkRCRTJEQzAtMkRDNjJEQzgtMkRDRTJERDAtMkRENjJERDgtMkRERTJFMkYzMDA1MzAwNjMwMzEtMzAzNTMwM0IzMDNDMzA0MS0zMDk2MzA5RC0zMDlGMzBBMS0zMEZBMzBGQy0zMEZGMzEwNS0zMTJEMzEzMS0zMThFMzFBMC0zMUI3MzFGMC0zMUZGMzQwMC00REI1NEUwMC05RkNCQTAwMC1BNDhDQTREMC1BNEZEQTUwMC1BNjBDQTYxMC1BNjFGQTYyQUE2MkJBNjQwLUE2NUZBNjYyLUE2NkVBNjdGLUE2OTdBNkEwLUE2RTVBNzE3LUE3MUZBNzIyLUE3ODhBNzhCQTc4Q0E3RkItQTgwMUE4MDMtQTgwNUE4MDctQTgwQUE4MEMtQTgyMkE4NDAtQTg3M0E4ODItQThCM0E4RjItQThGN0E4RkJBOTBBLUE5MjVBOTMwLUE5NDZBOTYwLUE5N0NBOTg0LUE5QjJBOUNGQUEwMC1BQTI4QUE0MC1BQTQyQUE0NC1BQTRCQUE2MC1BQTc2QUE3QUFBODAtQUFBRkFBQjFBQUI1QUFCNkFBQjktQUFCREFBQzBBQUMyQUFEQi1BQUREQUJDMC1BQkUyQUMwMC1EN0EzRDdCMC1EN0M2RDdDQi1EN0ZCRjkwMC1GQTJERkEzMC1GQTZERkE3MC1GQUQ5RkIwMC1GQjA2RkIxMy1GQjE3RkIxREZCMUYtRkIyOEZCMkEtRkIzNkZCMzgtRkIzQ0ZCM0VGQjQwRkI0MUZCNDNGQjQ0RkI0Ni1GQkIxRkJEMy1GRDNERkQ1MC1GRDhGRkQ5Mi1GREM3RkRGMC1GREZCRkU3MC1GRTc0RkU3Ni1GRUZDRkYyMS1GRjNBRkY0MS1GRjVBRkY2Ni1GRkJFRkZDMi1GRkM3RkZDQS1GRkNGRkZEMi1GRkQ3RkZEQS1GRkRDXCIsXG4gICAgTGw6IFwiMDA2MS0wMDdBMDBBQTAwQjUwMEJBMDBERi0wMEY2MDBGOC0wMEZGMDEwMTAxMDMwMTA1MDEwNzAxMDkwMTBCMDEwRDAxMEYwMTExMDExMzAxMTUwMTE3MDExOTAxMUIwMTFEMDExRjAxMjEwMTIzMDEyNTAxMjcwMTI5MDEyQjAxMkQwMTJGMDEzMTAxMzMwMTM1MDEzNzAxMzgwMTNBMDEzQzAxM0UwMTQwMDE0MjAxNDQwMTQ2MDE0ODAxNDkwMTRCMDE0RDAxNEYwMTUxMDE1MzAxNTUwMTU3MDE1OTAxNUIwMTVEMDE1RjAxNjEwMTYzMDE2NTAxNjcwMTY5MDE2QjAxNkQwMTZGMDE3MTAxNzMwMTc1MDE3NzAxN0EwMTdDMDE3RS0wMTgwMDE4MzAxODUwMTg4MDE4QzAxOEQwMTkyMDE5NTAxOTktMDE5QjAxOUUwMUExMDFBMzAxQTUwMUE4MDFBQTAxQUIwMUFEMDFCMDAxQjQwMUI2MDFCOTAxQkEwMUJELTAxQkYwMUM2MDFDOTAxQ0MwMUNFMDFEMDAxRDIwMUQ0MDFENjAxRDgwMURBMDFEQzAxREQwMURGMDFFMTAxRTMwMUU1MDFFNzAxRTkwMUVCMDFFRDAxRUYwMUYwMDFGMzAxRjUwMUY5MDFGQjAxRkQwMUZGMDIwMTAyMDMwMjA1MDIwNzAyMDkwMjBCMDIwRDAyMEYwMjExMDIxMzAyMTUwMjE3MDIxOTAyMUIwMjFEMDIxRjAyMjEwMjIzMDIyNTAyMjcwMjI5MDIyQjAyMkQwMjJGMDIzMTAyMzMtMDIzOTAyM0MwMjNGMDI0MDAyNDIwMjQ3MDI0OTAyNEIwMjREMDI0Ri0wMjkzMDI5NS0wMkFGMDM3MTAzNzMwMzc3MDM3Qi0wMzdEMDM5MDAzQUMtMDNDRTAzRDAwM0QxMDNENS0wM0Q3MDNEOTAzREIwM0REMDNERjAzRTEwM0UzMDNFNTAzRTcwM0U5MDNFQjAzRUQwM0VGLTAzRjMwM0Y1MDNGODAzRkIwM0ZDMDQzMC0wNDVGMDQ2MTA0NjMwNDY1MDQ2NzA0NjkwNDZCMDQ2RDA0NkYwNDcxMDQ3MzA0NzUwNDc3MDQ3OTA0N0IwNDdEMDQ3RjA0ODEwNDhCMDQ4RDA0OEYwNDkxMDQ5MzA0OTUwNDk3MDQ5OTA0OUIwNDlEMDQ5RjA0QTEwNEEzMDRBNTA0QTcwNEE5MDRBQjA0QUQwNEFGMDRCMTA0QjMwNEI1MDRCNzA0QjkwNEJCMDRCRDA0QkYwNEMyMDRDNDA0QzYwNEM4MDRDQTA0Q0MwNENFMDRDRjA0RDEwNEQzMDRENTA0RDcwNEQ5MDREQjA0REQwNERGMDRFMTA0RTMwNEU1MDRFNzA0RTkwNEVCMDRFRDA0RUYwNEYxMDRGMzA0RjUwNEY3MDRGOTA0RkIwNEZEMDRGRjA1MDEwNTAzMDUwNTA1MDcwNTA5MDUwQjA1MEQwNTBGMDUxMTA1MTMwNTE1MDUxNzA1MTkwNTFCMDUxRDA1MUYwNTIxMDUyMzA1MjUwNTYxLTA1ODcxRDAwLTFEMkIxRDYyLTFENzcxRDc5LTFEOUExRTAxMUUwMzFFMDUxRTA3MUUwOTFFMEIxRTBEMUUwRjFFMTExRTEzMUUxNTFFMTcxRTE5MUUxQjFFMUQxRTFGMUUyMTFFMjMxRTI1MUUyNzFFMjkxRTJCMUUyRDFFMkYxRTMxMUUzMzFFMzUxRTM3MUUzOTFFM0IxRTNEMUUzRjFFNDExRTQzMUU0NTFFNDcxRTQ5MUU0QjFFNEQxRTRGMUU1MTFFNTMxRTU1MUU1NzFFNTkxRTVCMUU1RDFFNUYxRTYxMUU2MzFFNjUxRTY3MUU2OTFFNkIxRTZEMUU2RjFFNzExRTczMUU3NTFFNzcxRTc5MUU3QjFFN0QxRTdGMUU4MTFFODMxRTg1MUU4NzFFODkxRThCMUU4RDFFOEYxRTkxMUU5MzFFOTUtMUU5RDFFOUYxRUExMUVBMzFFQTUxRUE3MUVBOTFFQUIxRUFEMUVBRjFFQjExRUIzMUVCNTFFQjcxRUI5MUVCQjFFQkQxRUJGMUVDMTFFQzMxRUM1MUVDNzFFQzkxRUNCMUVDRDFFQ0YxRUQxMUVEMzFFRDUxRUQ3MUVEOTFFREIxRUREMUVERjFFRTExRUUzMUVFNTFFRTcxRUU5MUVFQjFFRUQxRUVGMUVGMTFFRjMxRUY1MUVGNzFFRjkxRUZCMUVGRDFFRkYtMUYwNzFGMTAtMUYxNTFGMjAtMUYyNzFGMzAtMUYzNzFGNDAtMUY0NTFGNTAtMUY1NzFGNjAtMUY2NzFGNzAtMUY3RDFGODAtMUY4NzFGOTAtMUY5NzFGQTAtMUZBNzFGQjAtMUZCNDFGQjYxRkI3MUZCRTFGQzItMUZDNDFGQzYxRkM3MUZEMC0xRkQzMUZENjFGRDcxRkUwLTFGRTcxRkYyLTFGRjQxRkY2MUZGNzIxMEEyMTBFMjEwRjIxMTMyMTJGMjEzNDIxMzkyMTNDMjEzRDIxNDYtMjE0OTIxNEUyMTg0MkMzMC0yQzVFMkM2MTJDNjUyQzY2MkM2ODJDNkEyQzZDMkM3MTJDNzMyQzc0MkM3Ni0yQzdDMkM4MTJDODMyQzg1MkM4NzJDODkyQzhCMkM4RDJDOEYyQzkxMkM5MzJDOTUyQzk3MkM5OTJDOUIyQzlEMkM5RjJDQTEyQ0EzMkNBNTJDQTcyQ0E5MkNBQjJDQUQyQ0FGMkNCMTJDQjMyQ0I1MkNCNzJDQjkyQ0JCMkNCRDJDQkYyQ0MxMkNDMzJDQzUyQ0M3MkNDOTJDQ0IyQ0NEMkNDRjJDRDEyQ0QzMkNENTJDRDcyQ0Q5MkNEQjJDREQyQ0RGMkNFMTJDRTMyQ0U0MkNFQzJDRUUyRDAwLTJEMjVBNjQxQTY0M0E2NDVBNjQ3QTY0OUE2NEJBNjREQTY0RkE2NTFBNjUzQTY1NUE2NTdBNjU5QTY1QkE2NURBNjVGQTY2M0E2NjVBNjY3QTY2OUE2NkJBNjZEQTY4MUE2ODNBNjg1QTY4N0E2ODlBNjhCQTY4REE2OEZBNjkxQTY5M0E2OTVBNjk3QTcyM0E3MjVBNzI3QTcyOUE3MkJBNzJEQTcyRi1BNzMxQTczM0E3MzVBNzM3QTczOUE3M0JBNzNEQTczRkE3NDFBNzQzQTc0NUE3NDdBNzQ5QTc0QkE3NERBNzRGQTc1MUE3NTNBNzU1QTc1N0E3NTlBNzVCQTc1REE3NUZBNzYxQTc2M0E3NjVBNzY3QTc2OUE3NkJBNzZEQTc2RkE3NzEtQTc3OEE3N0FBNzdDQTc3RkE3ODFBNzgzQTc4NUE3ODdBNzhDRkIwMC1GQjA2RkIxMy1GQjE3RkY0MS1GRjVBXCIsXG4gICAgTHU6IFwiMDA0MS0wMDVBMDBDMC0wMEQ2MDBEOC0wMERFMDEwMDAxMDIwMTA0MDEwNjAxMDgwMTBBMDEwQzAxMEUwMTEwMDExMjAxMTQwMTE2MDExODAxMUEwMTFDMDExRTAxMjAwMTIyMDEyNDAxMjYwMTI4MDEyQTAxMkMwMTJFMDEzMDAxMzIwMTM0MDEzNjAxMzkwMTNCMDEzRDAxM0YwMTQxMDE0MzAxNDUwMTQ3MDE0QTAxNEMwMTRFMDE1MDAxNTIwMTU0MDE1NjAxNTgwMTVBMDE1QzAxNUUwMTYwMDE2MjAxNjQwMTY2MDE2ODAxNkEwMTZDMDE2RTAxNzAwMTcyMDE3NDAxNzYwMTc4MDE3OTAxN0IwMTdEMDE4MTAxODIwMTg0MDE4NjAxODcwMTg5LTAxOEIwMThFLTAxOTEwMTkzMDE5NDAxOTYtMDE5ODAxOUMwMTlEMDE5RjAxQTAwMUEyMDFBNDAxQTYwMUE3MDFBOTAxQUMwMUFFMDFBRjAxQjEtMDFCMzAxQjUwMUI3MDFCODAxQkMwMUM0MDFDNzAxQ0EwMUNEMDFDRjAxRDEwMUQzMDFENTAxRDcwMUQ5MDFEQjAxREUwMUUwMDFFMjAxRTQwMUU2MDFFODAxRUEwMUVDMDFFRTAxRjEwMUY0MDFGNi0wMUY4MDFGQTAxRkMwMUZFMDIwMDAyMDIwMjA0MDIwNjAyMDgwMjBBMDIwQzAyMEUwMjEwMDIxMjAyMTQwMjE2MDIxODAyMUEwMjFDMDIxRTAyMjAwMjIyMDIyNDAyMjYwMjI4MDIyQTAyMkMwMjJFMDIzMDAyMzIwMjNBMDIzQjAyM0QwMjNFMDI0MTAyNDMtMDI0NjAyNDgwMjRBMDI0QzAyNEUwMzcwMDM3MjAzNzYwMzg2MDM4OC0wMzhBMDM4QzAzOEUwMzhGMDM5MS0wM0ExMDNBMy0wM0FCMDNDRjAzRDItMDNENDAzRDgwM0RBMDNEQzAzREUwM0UwMDNFMjAzRTQwM0U2MDNFODAzRUEwM0VDMDNFRTAzRjQwM0Y3MDNGOTAzRkEwM0ZELTA0MkYwNDYwMDQ2MjA0NjQwNDY2MDQ2ODA0NkEwNDZDMDQ2RTA0NzAwNDcyMDQ3NDA0NzYwNDc4MDQ3QTA0N0MwNDdFMDQ4MDA0OEEwNDhDMDQ4RTA0OTAwNDkyMDQ5NDA0OTYwNDk4MDQ5QTA0OUMwNDlFMDRBMDA0QTIwNEE0MDRBNjA0QTgwNEFBMDRBQzA0QUUwNEIwMDRCMjA0QjQwNEI2MDRCODA0QkEwNEJDMDRCRTA0QzAwNEMxMDRDMzA0QzUwNEM3MDRDOTA0Q0IwNENEMDREMDA0RDIwNEQ0MDRENjA0RDgwNERBMDREQzA0REUwNEUwMDRFMjA0RTQwNEU2MDRFODA0RUEwNEVDMDRFRTA0RjAwNEYyMDRGNDA0RjYwNEY4MDRGQTA0RkMwNEZFMDUwMDA1MDIwNTA0MDUwNjA1MDgwNTBBMDUwQzA1MEUwNTEwMDUxMjA1MTQwNTE2MDUxODA1MUEwNTFDMDUxRTA1MjAwNTIyMDUyNDA1MzEtMDU1NjEwQTAtMTBDNTFFMDAxRTAyMUUwNDFFMDYxRTA4MUUwQTFFMEMxRTBFMUUxMDFFMTIxRTE0MUUxNjFFMTgxRTFBMUUxQzFFMUUxRTIwMUUyMjFFMjQxRTI2MUUyODFFMkExRTJDMUUyRTFFMzAxRTMyMUUzNDFFMzYxRTM4MUUzQTFFM0MxRTNFMUU0MDFFNDIxRTQ0MUU0NjFFNDgxRTRBMUU0QzFFNEUxRTUwMUU1MjFFNTQxRTU2MUU1ODFFNUExRTVDMUU1RTFFNjAxRTYyMUU2NDFFNjYxRTY4MUU2QTFFNkMxRTZFMUU3MDFFNzIxRTc0MUU3NjFFNzgxRTdBMUU3QzFFN0UxRTgwMUU4MjFFODQxRTg2MUU4ODFFOEExRThDMUU4RTFFOTAxRTkyMUU5NDFFOUUxRUEwMUVBMjFFQTQxRUE2MUVBODFFQUExRUFDMUVBRTFFQjAxRUIyMUVCNDFFQjYxRUI4MUVCQTFFQkMxRUJFMUVDMDFFQzIxRUM0MUVDNjFFQzgxRUNBMUVDQzFFQ0UxRUQwMUVEMjFFRDQxRUQ2MUVEODFFREExRURDMUVERTFFRTAxRUUyMUVFNDFFRTYxRUU4MUVFQTFFRUMxRUVFMUVGMDFFRjIxRUY0MUVGNjFFRjgxRUZBMUVGQzFFRkUxRjA4LTFGMEYxRjE4LTFGMUQxRjI4LTFGMkYxRjM4LTFGM0YxRjQ4LTFGNEQxRjU5MUY1QjFGNUQxRjVGMUY2OC0xRjZGMUZCOC0xRkJCMUZDOC0xRkNCMUZEOC0xRkRCMUZFOC0xRkVDMUZGOC0xRkZCMjEwMjIxMDcyMTBCLTIxMEQyMTEwLTIxMTIyMTE1MjExOS0yMTFEMjEyNDIxMjYyMTI4MjEyQS0yMTJEMjEzMC0yMTMzMjEzRTIxM0YyMTQ1MjE4MzJDMDAtMkMyRTJDNjAyQzYyLTJDNjQyQzY3MkM2OTJDNkIyQzZELTJDNzAyQzcyMkM3NTJDN0UtMkM4MDJDODIyQzg0MkM4NjJDODgyQzhBMkM4QzJDOEUyQzkwMkM5MjJDOTQyQzk2MkM5ODJDOUEyQzlDMkM5RTJDQTAyQ0EyMkNBNDJDQTYyQ0E4MkNBQTJDQUMyQ0FFMkNCMDJDQjIyQ0I0MkNCNjJDQjgyQ0JBMkNCQzJDQkUyQ0MwMkNDMjJDQzQyQ0M2MkNDODJDQ0EyQ0NDMkNDRTJDRDAyQ0QyMkNENDJDRDYyQ0Q4MkNEQTJDREMyQ0RFMkNFMDJDRTIyQ0VCMkNFREE2NDBBNjQyQTY0NEE2NDZBNjQ4QTY0QUE2NENBNjRFQTY1MEE2NTJBNjU0QTY1NkE2NThBNjVBQTY1Q0E2NUVBNjYyQTY2NEE2NjZBNjY4QTY2QUE2NkNBNjgwQTY4MkE2ODRBNjg2QTY4OEE2OEFBNjhDQTY4RUE2OTBBNjkyQTY5NEE2OTZBNzIyQTcyNEE3MjZBNzI4QTcyQUE3MkNBNzJFQTczMkE3MzRBNzM2QTczOEE3M0FBNzNDQTczRUE3NDBBNzQyQTc0NEE3NDZBNzQ4QTc0QUE3NENBNzRFQTc1MEE3NTJBNzU0QTc1NkE3NThBNzVBQTc1Q0E3NUVBNzYwQTc2MkE3NjRBNzY2QTc2OEE3NkFBNzZDQTc2RUE3NzlBNzdCQTc3REE3N0VBNzgwQTc4MkE3ODRBNzg2QTc4QkZGMjEtRkYzQVwiLFxuICAgIEx0OiBcIjAxQzUwMUM4MDFDQjAxRjIxRjg4LTFGOEYxRjk4LTFGOUYxRkE4LTFGQUYxRkJDMUZDQzFGRkNcIixcbiAgICBMbTogXCIwMkIwLTAyQzEwMkM2LTAyRDEwMkUwLTAyRTQwMkVDMDJFRTAzNzQwMzdBMDU1OTA2NDAwNkU1MDZFNjA3RjQwN0Y1MDdGQTA4MUEwODI0MDgyODA5NzEwRTQ2MEVDNjEwRkMxN0Q3MTg0MzFBQTcxQzc4LTFDN0QxRDJDLTFENjExRDc4MUQ5Qi0xREJGMjA3MTIwN0YyMDkwLTIwOTQyQzdEMkQ2RjJFMkYzMDA1MzAzMS0zMDM1MzAzQjMwOUQzMDlFMzBGQy0zMEZFQTAxNUE0RjgtQTRGREE2MENBNjdGQTcxNy1BNzFGQTc3MEE3ODhBOUNGQUE3MEFBRERGRjcwRkY5RUZGOUZcIixcbiAgICBMbzogXCIwMUJCMDFDMC0wMUMzMDI5NDA1RDAtMDVFQTA1RjAtMDVGMjA2MjEtMDYzRjA2NDEtMDY0QTA2NkUwNjZGMDY3MS0wNkQzMDZENTA2RUUwNkVGMDZGQS0wNkZDMDZGRjA3MTAwNzEyLTA3MkYwNzRELTA3QTUwN0IxMDdDQS0wN0VBMDgwMC0wODE1MDkwNC0wOTM5MDkzRDA5NTAwOTU4LTA5NjEwOTcyMDk3OS0wOTdGMDk4NS0wOThDMDk4RjA5OTAwOTkzLTA5QTgwOUFBLTA5QjAwOUIyMDlCNi0wOUI5MDlCRDA5Q0UwOURDMDlERDA5REYtMDlFMTA5RjAwOUYxMEEwNS0wQTBBMEEwRjBBMTAwQTEzLTBBMjgwQTJBLTBBMzAwQTMyMEEzMzBBMzUwQTM2MEEzODBBMzkwQTU5LTBBNUMwQTVFMEE3Mi0wQTc0MEE4NS0wQThEMEE4Ri0wQTkxMEE5My0wQUE4MEFBQS0wQUIwMEFCMjBBQjMwQUI1LTBBQjkwQUJEMEFEMDBBRTAwQUUxMEIwNS0wQjBDMEIwRjBCMTAwQjEzLTBCMjgwQjJBLTBCMzAwQjMyMEIzMzBCMzUtMEIzOTBCM0QwQjVDMEI1RDBCNUYtMEI2MTBCNzEwQjgzMEI4NS0wQjhBMEI4RS0wQjkwMEI5Mi0wQjk1MEI5OTBCOUEwQjlDMEI5RTBCOUYwQkEzMEJBNDBCQTgtMEJBQTBCQUUtMEJCOTBCRDAwQzA1LTBDMEMwQzBFLTBDMTAwQzEyLTBDMjgwQzJBLTBDMzMwQzM1LTBDMzkwQzNEMEM1ODBDNTkwQzYwMEM2MTBDODUtMEM4QzBDOEUtMEM5MDBDOTItMENBODBDQUEtMENCMzBDQjUtMENCOTBDQkQwQ0RFMENFMDBDRTEwRDA1LTBEMEMwRDBFLTBEMTAwRDEyLTBEMjgwRDJBLTBEMzkwRDNEMEQ2MDBENjEwRDdBLTBEN0YwRDg1LTBEOTYwRDlBLTBEQjEwREIzLTBEQkIwREJEMERDMC0wREM2MEUwMS0wRTMwMEUzMjBFMzMwRTQwLTBFNDUwRTgxMEU4MjBFODQwRTg3MEU4ODBFOEEwRThEMEU5NC0wRTk3MEU5OS0wRTlGMEVBMS0wRUEzMEVBNTBFQTcwRUFBMEVBQjBFQUQtMEVCMDBFQjIwRUIzMEVCRDBFQzAtMEVDNDBFREMwRUREMEYwMDBGNDAtMEY0NzBGNDktMEY2QzBGODgtMEY4QjEwMDAtMTAyQTEwM0YxMDUwLTEwNTUxMDVBLTEwNUQxMDYxMTA2NTEwNjYxMDZFLTEwNzAxMDc1LTEwODExMDhFMTBEMC0xMEZBMTEwMC0xMjQ4MTI0QS0xMjREMTI1MC0xMjU2MTI1ODEyNUEtMTI1RDEyNjAtMTI4ODEyOEEtMTI4RDEyOTAtMTJCMDEyQjItMTJCNTEyQjgtMTJCRTEyQzAxMkMyLTEyQzUxMkM4LTEyRDYxMkQ4LTEzMTAxMzEyLTEzMTUxMzE4LTEzNUExMzgwLTEzOEYxM0EwLTEzRjQxNDAxLTE2NkMxNjZGLTE2N0YxNjgxLTE2OUExNkEwLTE2RUExNzAwLTE3MEMxNzBFLTE3MTExNzIwLTE3MzExNzQwLTE3NTExNzYwLTE3NkMxNzZFLTE3NzAxNzgwLTE3QjMxN0RDMTgyMC0xODQyMTg0NC0xODc3MTg4MC0xOEE4MThBQTE4QjAtMThGNTE5MDAtMTkxQzE5NTAtMTk2RDE5NzAtMTk3NDE5ODAtMTlBQjE5QzEtMTlDNzFBMDAtMUExNjFBMjAtMUE1NDFCMDUtMUIzMzFCNDUtMUI0QjFCODMtMUJBMDFCQUUxQkFGMUMwMC0xQzIzMUM0RC0xQzRGMUM1QS0xQzc3MUNFOS0xQ0VDMUNFRS0xQ0YxMjEzNS0yMTM4MkQzMC0yRDY1MkQ4MC0yRDk2MkRBMC0yREE2MkRBOC0yREFFMkRCMC0yREI2MkRCOC0yREJFMkRDMC0yREM2MkRDOC0yRENFMkREMC0yREQ2MkREOC0yRERFMzAwNjMwM0MzMDQxLTMwOTYzMDlGMzBBMS0zMEZBMzBGRjMxMDUtMzEyRDMxMzEtMzE4RTMxQTAtMzFCNzMxRjAtMzFGRjM0MDAtNERCNTRFMDAtOUZDQkEwMDAtQTAxNEEwMTYtQTQ4Q0E0RDAtQTRGN0E1MDAtQTYwQkE2MTAtQTYxRkE2MkFBNjJCQTY2RUE2QTAtQTZFNUE3RkItQTgwMUE4MDMtQTgwNUE4MDctQTgwQUE4MEMtQTgyMkE4NDAtQTg3M0E4ODItQThCM0E4RjItQThGN0E4RkJBOTBBLUE5MjVBOTMwLUE5NDZBOTYwLUE5N0NBOTg0LUE5QjJBQTAwLUFBMjhBQTQwLUFBNDJBQTQ0LUFBNEJBQTYwLUFBNkZBQTcxLUFBNzZBQTdBQUE4MC1BQUFGQUFCMUFBQjVBQUI2QUFCOS1BQUJEQUFDMEFBQzJBQURCQUFEQ0FCQzAtQUJFMkFDMDAtRDdBM0Q3QjAtRDdDNkQ3Q0ItRDdGQkY5MDAtRkEyREZBMzAtRkE2REZBNzAtRkFEOUZCMURGQjFGLUZCMjhGQjJBLUZCMzZGQjM4LUZCM0NGQjNFRkI0MEZCNDFGQjQzRkI0NEZCNDYtRkJCMUZCRDMtRkQzREZENTAtRkQ4RkZEOTItRkRDN0ZERjAtRkRGQkZFNzAtRkU3NEZFNzYtRkVGQ0ZGNjYtRkY2RkZGNzEtRkY5REZGQTAtRkZCRUZGQzItRkZDN0ZGQ0EtRkZDRkZGRDItRkZEN0ZGREEtRkZEQ1wiLFxuICAgIE06ICBcIjAzMDAtMDM2RjA0ODMtMDQ4OTA1OTEtMDVCRDA1QkYwNUMxMDVDMjA1QzQwNUM1MDVDNzA2MTAtMDYxQTA2NEItMDY1RTA2NzAwNkQ2LTA2REMwNkRFLTA2RTQwNkU3MDZFODA2RUEtMDZFRDA3MTEwNzMwLTA3NEEwN0E2LTA3QjAwN0VCLTA3RjMwODE2LTA4MTkwODFCLTA4MjMwODI1LTA4MjcwODI5LTA4MkQwOTAwLTA5MDMwOTNDMDkzRS0wOTRFMDk1MS0wOTU1MDk2MjA5NjMwOTgxLTA5ODMwOUJDMDlCRS0wOUM0MDlDNzA5QzgwOUNCLTA5Q0QwOUQ3MDlFMjA5RTMwQTAxLTBBMDMwQTNDMEEzRS0wQTQyMEE0NzBBNDgwQTRCLTBBNEQwQTUxMEE3MDBBNzEwQTc1MEE4MS0wQTgzMEFCQzBBQkUtMEFDNTBBQzctMEFDOTBBQ0ItMEFDRDBBRTIwQUUzMEIwMS0wQjAzMEIzQzBCM0UtMEI0NDBCNDcwQjQ4MEI0Qi0wQjREMEI1NjBCNTcwQjYyMEI2MzBCODIwQkJFLTBCQzIwQkM2LTBCQzgwQkNBLTBCQ0QwQkQ3MEMwMS0wQzAzMEMzRS0wQzQ0MEM0Ni0wQzQ4MEM0QS0wQzREMEM1NTBDNTYwQzYyMEM2MzBDODIwQzgzMENCQzBDQkUtMENDNDBDQzYtMENDODBDQ0EtMENDRDBDRDUwQ0Q2MENFMjBDRTMwRDAyMEQwMzBEM0UtMEQ0NDBENDYtMEQ0ODBENEEtMEQ0RDBENTcwRDYyMEQ2MzBEODIwRDgzMERDQTBEQ0YtMERENDBERDYwREQ4LTBEREYwREYyMERGMzBFMzEwRTM0LTBFM0EwRTQ3LTBFNEUwRUIxMEVCNC0wRUI5MEVCQjBFQkMwRUM4LTBFQ0QwRjE4MEYxOTBGMzUwRjM3MEYzOTBGM0UwRjNGMEY3MS0wRjg0MEY4NjBGODcwRjkwLTBGOTcwRjk5LTBGQkMwRkM2MTAyQi0xMDNFMTA1Ni0xMDU5MTA1RS0xMDYwMTA2Mi0xMDY0MTA2Ny0xMDZEMTA3MS0xMDc0MTA4Mi0xMDhEMTA4RjEwOUEtMTA5RDEzNUYxNzEyLTE3MTQxNzMyLTE3MzQxNzUyMTc1MzE3NzIxNzczMTdCNi0xN0QzMTdERDE4MEItMTgwRDE4QTkxOTIwLTE5MkIxOTMwLTE5M0IxOUIwLTE5QzAxOUM4MTlDOTFBMTctMUExQjFBNTUtMUE1RTFBNjAtMUE3QzFBN0YxQjAwLTFCMDQxQjM0LTFCNDQxQjZCLTFCNzMxQjgwLTFCODIxQkExLTFCQUExQzI0LTFDMzcxQ0QwLTFDRDIxQ0Q0LTFDRTgxQ0VEMUNGMjFEQzAtMURFNjFERkQtMURGRjIwRDAtMjBGMDJDRUYtMkNGMTJERTAtMkRGRjMwMkEtMzAyRjMwOTkzMDlBQTY2Ri1BNjcyQTY3Q0E2N0RBNkYwQTZGMUE4MDJBODA2QTgwQkE4MjMtQTgyN0E4ODBBODgxQThCNC1BOEM0QThFMC1BOEYxQTkyNi1BOTJEQTk0Ny1BOTUzQTk4MC1BOTgzQTlCMy1BOUMwQUEyOS1BQTM2QUE0M0FBNENBQTREQUE3QkFBQjBBQUIyLUFBQjRBQUI3QUFCOEFBQkVBQUJGQUFDMUFCRTMtQUJFQUFCRUNBQkVERkIxRUZFMDAtRkUwRkZFMjAtRkUyNlwiLFxuICAgIE1uOiBcIjAzMDAtMDM2RjA0ODMtMDQ4NzA1OTEtMDVCRDA1QkYwNUMxMDVDMjA1QzQwNUM1MDVDNzA2MTAtMDYxQTA2NEItMDY1RTA2NzAwNkQ2LTA2REMwNkRGLTA2RTQwNkU3MDZFODA2RUEtMDZFRDA3MTEwNzMwLTA3NEEwN0E2LTA3QjAwN0VCLTA3RjMwODE2LTA4MTkwODFCLTA4MjMwODI1LTA4MjcwODI5LTA4MkQwOTAwLTA5MDIwOTNDMDk0MS0wOTQ4MDk0RDA5NTEtMDk1NTA5NjIwOTYzMDk4MTA5QkMwOUMxLTA5QzQwOUNEMDlFMjA5RTMwQTAxMEEwMjBBM0MwQTQxMEE0MjBBNDcwQTQ4MEE0Qi0wQTREMEE1MTBBNzAwQTcxMEE3NTBBODEwQTgyMEFCQzBBQzEtMEFDNTBBQzcwQUM4MEFDRDBBRTIwQUUzMEIwMTBCM0MwQjNGMEI0MS0wQjQ0MEI0RDBCNTYwQjYyMEI2MzBCODIwQkMwMEJDRDBDM0UtMEM0MDBDNDYtMEM0ODBDNEEtMEM0RDBDNTUwQzU2MEM2MjBDNjMwQ0JDMENCRjBDQzYwQ0NDMENDRDBDRTIwQ0UzMEQ0MS0wRDQ0MEQ0RDBENjIwRDYzMERDQTBERDItMERENDBERDYwRTMxMEUzNC0wRTNBMEU0Ny0wRTRFMEVCMTBFQjQtMEVCOTBFQkIwRUJDMEVDOC0wRUNEMEYxODBGMTkwRjM1MEYzNzBGMzkwRjcxLTBGN0UwRjgwLTBGODQwRjg2MEY4NzBGOTAtMEY5NzBGOTktMEZCQzBGQzYxMDJELTEwMzAxMDMyLTEwMzcxMDM5MTAzQTEwM0QxMDNFMTA1ODEwNTkxMDVFLTEwNjAxMDcxLTEwNzQxMDgyMTA4NTEwODYxMDhEMTA5RDEzNUYxNzEyLTE3MTQxNzMyLTE3MzQxNzUyMTc1MzE3NzIxNzczMTdCNy0xN0JEMTdDNjE3QzktMTdEMzE3REQxODBCLTE4MEQxOEE5MTkyMC0xOTIyMTkyNzE5MjgxOTMyMTkzOS0xOTNCMUExNzFBMTgxQTU2MUE1OC0xQTVFMUE2MDFBNjIxQTY1LTFBNkMxQTczLTFBN0MxQTdGMUIwMC0xQjAzMUIzNDFCMzYtMUIzQTFCM0MxQjQyMUI2Qi0xQjczMUI4MDFCODExQkEyLTFCQTUxQkE4MUJBOTFDMkMtMUMzMzFDMzYxQzM3MUNEMC0xQ0QyMUNENC0xQ0UwMUNFMi0xQ0U4MUNFRDFEQzAtMURFNjFERkQtMURGRjIwRDAtMjBEQzIwRTEyMEU1LTIwRjAyQ0VGLTJDRjEyREUwLTJERkYzMDJBLTMwMkYzMDk5MzA5QUE2NkZBNjdDQTY3REE2RjBBNkYxQTgwMkE4MDZBODBCQTgyNUE4MjZBOEM0QThFMC1BOEYxQTkyNi1BOTJEQTk0Ny1BOTUxQTk4MC1BOTgyQTlCM0E5QjYtQTlCOUE5QkNBQTI5LUFBMkVBQTMxQUEzMkFBMzVBQTM2QUE0M0FBNENBQUIwQUFCMi1BQUI0QUFCN0FBQjhBQUJFQUFCRkFBQzFBQkU1QUJFOEFCRURGQjFFRkUwMC1GRTBGRkUyMC1GRTI2XCIsXG4gICAgTWM6IFwiMDkwMzA5M0UtMDk0MDA5NDktMDk0QzA5NEUwOTgyMDk4MzA5QkUtMDlDMDA5QzcwOUM4MDlDQjA5Q0MwOUQ3MEEwMzBBM0UtMEE0MDBBODMwQUJFLTBBQzAwQUM5MEFDQjBBQ0MwQjAyMEIwMzBCM0UwQjQwMEI0NzBCNDgwQjRCMEI0QzBCNTcwQkJFMEJCRjBCQzEwQkMyMEJDNi0wQkM4MEJDQS0wQkNDMEJENzBDMDEtMEMwMzBDNDEtMEM0NDBDODIwQzgzMENCRTBDQzAtMENDNDBDQzcwQ0M4MENDQTBDQ0IwQ0Q1MENENjBEMDIwRDAzMEQzRS0wRDQwMEQ0Ni0wRDQ4MEQ0QS0wRDRDMEQ1NzBEODIwRDgzMERDRi0wREQxMEREOC0wRERGMERGMjBERjMwRjNFMEYzRjBGN0YxMDJCMTAyQzEwMzExMDM4MTAzQjEwM0MxMDU2MTA1NzEwNjItMTA2NDEwNjctMTA2RDEwODMxMDg0MTA4Ny0xMDhDMTA4RjEwOUEtMTA5QzE3QjYxN0JFLTE3QzUxN0M3MTdDODE5MjMtMTkyNjE5MjktMTkyQjE5MzAxOTMxMTkzMy0xOTM4MTlCMC0xOUMwMTlDODE5QzkxQTE5LTFBMUIxQTU1MUE1NzFBNjExQTYzMUE2NDFBNkQtMUE3MjFCMDQxQjM1MUIzQjFCM0QtMUI0MTFCNDMxQjQ0MUI4MjFCQTExQkE2MUJBNzFCQUExQzI0LTFDMkIxQzM0MUMzNTFDRTExQ0YyQTgyM0E4MjRBODI3QTg4MEE4ODFBOEI0LUE4QzNBOTUyQTk1M0E5ODNBOUI0QTlCNUE5QkFBOUJCQTlCRC1BOUMwQUEyRkFBMzBBQTMzQUEzNEFBNERBQTdCQUJFM0FCRTRBQkU2QUJFN0FCRTlBQkVBQUJFQ1wiLFxuICAgIE1lOiBcIjA0ODgwNDg5MDZERTIwREQtMjBFMDIwRTItMjBFNEE2NzAtQTY3MlwiLFxuICAgIE46ICBcIjAwMzAtMDAzOTAwQjIwMEIzMDBCOTAwQkMtMDBCRTA2NjAtMDY2OTA2RjAtMDZGOTA3QzAtMDdDOTA5NjYtMDk2RjA5RTYtMDlFRjA5RjQtMDlGOTBBNjYtMEE2RjBBRTYtMEFFRjBCNjYtMEI2RjBCRTYtMEJGMjBDNjYtMEM2RjBDNzgtMEM3RTBDRTYtMENFRjBENjYtMEQ3NTBFNTAtMEU1OTBFRDAtMEVEOTBGMjAtMEYzMzEwNDAtMTA0OTEwOTAtMTA5OTEzNjktMTM3QzE2RUUtMTZGMDE3RTAtMTdFOTE3RjAtMTdGOTE4MTAtMTgxOTE5NDYtMTk0RjE5RDAtMTlEQTFBODAtMUE4OTFBOTAtMUE5OTFCNTAtMUI1OTFCQjAtMUJCOTFDNDAtMUM0OTFDNTAtMUM1OTIwNzAyMDc0LTIwNzkyMDgwLTIwODkyMTUwLTIxODIyMTg1LTIxODkyNDYwLTI0OUIyNEVBLTI0RkYyNzc2LTI3OTMyQ0ZEMzAwNzMwMjEtMzAyOTMwMzgtMzAzQTMxOTItMzE5NTMyMjAtMzIyOTMyNTEtMzI1RjMyODAtMzI4OTMyQjEtMzJCRkE2MjAtQTYyOUE2RTYtQTZFRkE4MzAtQTgzNUE4RDAtQThEOUE5MDAtQTkwOUE5RDAtQTlEOUFBNTAtQUE1OUFCRjAtQUJGOUZGMTAtRkYxOVwiLFxuICAgIE5kOiBcIjAwMzAtMDAzOTA2NjAtMDY2OTA2RjAtMDZGOTA3QzAtMDdDOTA5NjYtMDk2RjA5RTYtMDlFRjBBNjYtMEE2RjBBRTYtMEFFRjBCNjYtMEI2RjBCRTYtMEJFRjBDNjYtMEM2RjBDRTYtMENFRjBENjYtMEQ2RjBFNTAtMEU1OTBFRDAtMEVEOTBGMjAtMEYyOTEwNDAtMTA0OTEwOTAtMTA5OTE3RTAtMTdFOTE4MTAtMTgxOTE5NDYtMTk0RjE5RDAtMTlEQTFBODAtMUE4OTFBOTAtMUE5OTFCNTAtMUI1OTFCQjAtMUJCOTFDNDAtMUM0OTFDNTAtMUM1OUE2MjAtQTYyOUE4RDAtQThEOUE5MDAtQTkwOUE5RDAtQTlEOUFBNTAtQUE1OUFCRjAtQUJGOUZGMTAtRkYxOVwiLFxuICAgIE5sOiBcIjE2RUUtMTZGMDIxNjAtMjE4MjIxODUtMjE4ODMwMDczMDIxLTMwMjkzMDM4LTMwM0FBNkU2LUE2RUZcIixcbiAgICBObzogXCIwMEIyMDBCMzAwQjkwMEJDLTAwQkUwOUY0LTA5RjkwQkYwLTBCRjIwQzc4LTBDN0UwRDcwLTBENzUwRjJBLTBGMzMxMzY5LTEzN0MxN0YwLTE3RjkyMDcwMjA3NC0yMDc5MjA4MC0yMDg5MjE1MC0yMTVGMjE4OTI0NjAtMjQ5QjI0RUEtMjRGRjI3NzYtMjc5MzJDRkQzMTkyLTMxOTUzMjIwLTMyMjkzMjUxLTMyNUYzMjgwLTMyODkzMkIxLTMyQkZBODMwLUE4MzVcIixcbiAgICBQOiAgXCIwMDIxLTAwMjMwMDI1LTAwMkEwMDJDLTAwMkYwMDNBMDAzQjAwM0YwMDQwMDA1Qi0wMDVEMDA1RjAwN0IwMDdEMDBBMTAwQUIwMEI3MDBCQjAwQkYwMzdFMDM4NzA1NUEtMDU1RjA1ODkwNThBMDVCRTA1QzAwNUMzMDVDNjA1RjMwNUY0MDYwOTA2MEEwNjBDMDYwRDA2MUIwNjFFMDYxRjA2NkEtMDY2RDA2RDQwNzAwLTA3MEQwN0Y3LTA3RjkwODMwLTA4M0UwOTY0MDk2NTA5NzAwREY0MEU0RjBFNUEwRTVCMEYwNC0wRjEyMEYzQS0wRjNEMEY4NTBGRDAtMEZENDEwNEEtMTA0RjEwRkIxMzYxLTEzNjgxNDAwMTY2RDE2NkUxNjlCMTY5QzE2RUItMTZFRDE3MzUxNzM2MTdENC0xN0Q2MTdEOC0xN0RBMTgwMC0xODBBMTk0NDE5NDUxOURFMTlERjFBMUUxQTFGMUFBMC0xQUE2MUFBOC0xQUFEMUI1QS0xQjYwMUMzQi0xQzNGMUM3RTFDN0YxQ0QzMjAxMC0yMDI3MjAzMC0yMDQzMjA0NS0yMDUxMjA1My0yMDVFMjA3RDIwN0UyMDhEMjA4RTIzMjkyMzJBMjc2OC0yNzc1MjdDNTI3QzYyN0U2LTI3RUYyOTgzLTI5OTgyOUQ4LTI5REIyOUZDMjlGRDJDRjktMkNGQzJDRkUyQ0ZGMkUwMC0yRTJFMkUzMDJFMzEzMDAxLTMwMDMzMDA4LTMwMTEzMDE0LTMwMUYzMDMwMzAzRDMwQTAzMEZCQTRGRUE0RkZBNjBELUE2MEZBNjczQTY3RUE2RjItQTZGN0E4NzQtQTg3N0E4Q0VBOENGQThGOC1BOEZBQTkyRUE5MkZBOTVGQTlDMS1BOUNEQTlERUE5REZBQTVDLUFBNUZBQURFQUFERkFCRUJGRDNFRkQzRkZFMTAtRkUxOUZFMzAtRkU1MkZFNTQtRkU2MUZFNjNGRTY4RkU2QUZFNkJGRjAxLUZGMDNGRjA1LUZGMEFGRjBDLUZGMEZGRjFBRkYxQkZGMUZGRjIwRkYzQi1GRjNERkYzRkZGNUJGRjVERkY1Ri1GRjY1XCIsXG4gICAgUGQ6IFwiMDAyRDA1OEEwNUJFMTQwMDE4MDYyMDEwLTIwMTUyRTE3MkUxQTMwMUMzMDMwMzBBMEZFMzFGRTMyRkU1OEZFNjNGRjBEXCIsXG4gICAgUHM6IFwiMDAyODAwNUIwMDdCMEYzQTBGM0MxNjlCMjAxQTIwMUUyMDQ1MjA3RDIwOEQyMzI5Mjc2ODI3NkEyNzZDMjc2RTI3NzAyNzcyMjc3NDI3QzUyN0U2MjdFODI3RUEyN0VDMjdFRTI5ODMyOTg1Mjk4NzI5ODkyOThCMjk4RDI5OEYyOTkxMjk5MzI5OTUyOTk3MjlEODI5REEyOUZDMkUyMjJFMjQyRTI2MkUyODMwMDgzMDBBMzAwQzMwMEUzMDEwMzAxNDMwMTYzMDE4MzAxQTMwMURGRDNFRkUxN0ZFMzVGRTM3RkUzOUZFM0JGRTNERkUzRkZFNDFGRTQzRkU0N0ZFNTlGRTVCRkU1REZGMDhGRjNCRkY1QkZGNUZGRjYyXCIsXG4gICAgUGU6IFwiMDAyOTAwNUQwMDdEMEYzQjBGM0QxNjlDMjA0NjIwN0UyMDhFMjMyQTI3NjkyNzZCMjc2RDI3NkYyNzcxMjc3MzI3NzUyN0M2MjdFNzI3RTkyN0VCMjdFRDI3RUYyOTg0Mjk4NjI5ODgyOThBMjk4QzI5OEUyOTkwMjk5MjI5OTQyOTk2Mjk5ODI5RDkyOURCMjlGRDJFMjMyRTI1MkUyNzJFMjkzMDA5MzAwQjMwMEQzMDBGMzAxMTMwMTUzMDE3MzAxOTMwMUIzMDFFMzAxRkZEM0ZGRTE4RkUzNkZFMzhGRTNBRkUzQ0ZFM0VGRTQwRkU0MkZFNDRGRTQ4RkU1QUZFNUNGRTVFRkYwOUZGM0RGRjVERkY2MEZGNjNcIixcbiAgICBQaTogXCIwMEFCMjAxODIwMUIyMDFDMjAxRjIwMzkyRTAyMkUwNDJFMDkyRTBDMkUxQzJFMjBcIixcbiAgICBQZjogXCIwMEJCMjAxOTIwMUQyMDNBMkUwMzJFMDUyRTBBMkUwRDJFMUQyRTIxXCIsXG4gICAgUGM6IFwiMDA1RjIwM0YyMDQwMjA1NEZFMzNGRTM0RkU0RC1GRTRGRkYzRlwiLFxuICAgIFBvOiBcIjAwMjEtMDAyMzAwMjUtMDAyNzAwMkEwMDJDMDAyRTAwMkYwMDNBMDAzQjAwM0YwMDQwMDA1QzAwQTEwMEI3MDBCRjAzN0UwMzg3MDU1QS0wNTVGMDU4OTA1QzAwNUMzMDVDNjA1RjMwNUY0MDYwOTA2MEEwNjBDMDYwRDA2MUIwNjFFMDYxRjA2NkEtMDY2RDA2RDQwNzAwLTA3MEQwN0Y3LTA3RjkwODMwLTA4M0UwOTY0MDk2NTA5NzAwREY0MEU0RjBFNUEwRTVCMEYwNC0wRjEyMEY4NTBGRDAtMEZENDEwNEEtMTA0RjEwRkIxMzYxLTEzNjgxNjZEMTY2RTE2RUItMTZFRDE3MzUxNzM2MTdENC0xN0Q2MTdEOC0xN0RBMTgwMC0xODA1MTgwNy0xODBBMTk0NDE5NDUxOURFMTlERjFBMUUxQTFGMUFBMC0xQUE2MUFBOC0xQUFEMUI1QS0xQjYwMUMzQi0xQzNGMUM3RTFDN0YxQ0QzMjAxNjIwMTcyMDIwLTIwMjcyMDMwLTIwMzgyMDNCLTIwM0UyMDQxLTIwNDMyMDQ3LTIwNTEyMDUzMjA1NS0yMDVFMkNGOS0yQ0ZDMkNGRTJDRkYyRTAwMkUwMTJFMDYtMkUwODJFMEIyRTBFLTJFMTYyRTE4MkUxOTJFMUIyRTFFMkUxRjJFMkEtMkUyRTJFMzAyRTMxMzAwMS0zMDAzMzAzRDMwRkJBNEZFQTRGRkE2MEQtQTYwRkE2NzNBNjdFQTZGMi1BNkY3QTg3NC1BODc3QThDRUE4Q0ZBOEY4LUE4RkFBOTJFQTkyRkE5NUZBOUMxLUE5Q0RBOURFQTlERkFBNUMtQUE1RkFBREVBQURGQUJFQkZFMTAtRkUxNkZFMTlGRTMwRkU0NUZFNDZGRTQ5LUZFNENGRTUwLUZFNTJGRTU0LUZFNTdGRTVGLUZFNjFGRTY4RkU2QUZFNkJGRjAxLUZGMDNGRjA1LUZGMDdGRjBBRkYwQ0ZGMEVGRjBGRkYxQUZGMUJGRjFGRkYyMEZGM0NGRjYxRkY2NEZGNjVcIixcbiAgICBTOiAgXCIwMDI0MDAyQjAwM0MtMDAzRTAwNUUwMDYwMDA3QzAwN0UwMEEyLTAwQTkwMEFDMDBBRS0wMEIxMDBCNDAwQjYwMEI4MDBENzAwRjcwMkMyLTAyQzUwMkQyLTAyREYwMkU1LTAyRUIwMkVEMDJFRi0wMkZGMDM3NTAzODQwMzg1MDNGNjA0ODIwNjA2LTA2MDgwNjBCMDYwRTA2MEYwNkU5MDZGRDA2RkUwN0Y2MDlGMjA5RjMwOUZBMDlGQjBBRjEwQjcwMEJGMy0wQkZBMEM3RjBDRjEwQ0YyMEQ3OTBFM0YwRjAxLTBGMDMwRjEzLTBGMTcwRjFBLTBGMUYwRjM0MEYzNjBGMzgwRkJFLTBGQzUwRkM3LTBGQ0MwRkNFMEZDRjBGRDUtMEZEODEwOUUxMDlGMTM2MDEzOTAtMTM5OTE3REIxOTQwMTlFMC0xOUZGMUI2MS0xQjZBMUI3NC0xQjdDMUZCRDFGQkYtMUZDMTFGQ0QtMUZDRjFGREQtMUZERjFGRUQtMUZFRjFGRkQxRkZFMjA0NDIwNTIyMDdBLTIwN0MyMDhBLTIwOEMyMEEwLTIwQjgyMTAwMjEwMTIxMDMtMjEwNjIxMDgyMTA5MjExNDIxMTYtMjExODIxMUUtMjEyMzIxMjUyMTI3MjEyOTIxMkUyMTNBMjEzQjIxNDAtMjE0NDIxNEEtMjE0RDIxNEYyMTkwLTIzMjgyMzJCLTIzRTgyNDAwLTI0MjYyNDQwLTI0NEEyNDlDLTI0RTkyNTAwLTI2Q0QyNkNGLTI2RTEyNkUzMjZFOC0yNkZGMjcwMS0yNzA0MjcwNi0yNzA5MjcwQy0yNzI3MjcyOS0yNzRCMjc0RDI3NEYtMjc1MjI3NTYtMjc1RTI3NjEtMjc2NzI3OTQyNzk4LTI3QUYyN0IxLTI3QkUyN0MwLTI3QzQyN0M3LTI3Q0EyN0NDMjdEMC0yN0U1MjdGMC0yOTgyMjk5OS0yOUQ3MjlEQy0yOUZCMjlGRS0yQjRDMkI1MC0yQjU5MkNFNS0yQ0VBMkU4MC0yRTk5MkU5Qi0yRUYzMkYwMC0yRkQ1MkZGMC0yRkZCMzAwNDMwMTIzMDEzMzAyMDMwMzYzMDM3MzAzRTMwM0YzMDlCMzA5QzMxOTAzMTkxMzE5Ni0zMTlGMzFDMC0zMUUzMzIwMC0zMjFFMzIyQS0zMjUwMzI2MC0zMjdGMzI4QS0zMkIwMzJDMC0zMkZFMzMwMC0zM0ZGNERDMC00REZGQTQ5MC1BNEM2QTcwMC1BNzE2QTcyMEE3MjFBNzg5QTc4QUE4MjgtQTgyQkE4MzYtQTgzOUFBNzctQUE3OUZCMjlGREZDRkRGREZFNjJGRTY0LUZFNjZGRTY5RkYwNEZGMEJGRjFDLUZGMUVGRjNFRkY0MEZGNUNGRjVFRkZFMC1GRkU2RkZFOC1GRkVFRkZGQ0ZGRkRcIixcbiAgICBTbTogXCIwMDJCMDAzQy0wMDNFMDA3QzAwN0UwMEFDMDBCMTAwRDcwMEY3MDNGNjA2MDYtMDYwODIwNDQyMDUyMjA3QS0yMDdDMjA4QS0yMDhDMjE0MC0yMTQ0MjE0QjIxOTAtMjE5NDIxOUEyMTlCMjFBMDIxQTMyMUE2MjFBRTIxQ0UyMUNGMjFEMjIxRDQyMUY0LTIyRkYyMzA4LTIzMEIyMzIwMjMyMTIzN0MyMzlCLTIzQjMyM0RDLTIzRTEyNUI3MjVDMTI1RjgtMjVGRjI2NkYyN0MwLTI3QzQyN0M3LTI3Q0EyN0NDMjdEMC0yN0U1MjdGMC0yN0ZGMjkwMC0yOTgyMjk5OS0yOUQ3MjlEQy0yOUZCMjlGRS0yQUZGMkIzMC0yQjQ0MkI0Ny0yQjRDRkIyOUZFNjJGRTY0LUZFNjZGRjBCRkYxQy1GRjFFRkY1Q0ZGNUVGRkUyRkZFOS1GRkVDXCIsXG4gICAgU2M6IFwiMDAyNDAwQTItMDBBNTA2MEIwOUYyMDlGMzA5RkIwQUYxMEJGOTBFM0YxN0RCMjBBMC0yMEI4QTgzOEZERkNGRTY5RkYwNEZGRTBGRkUxRkZFNUZGRTZcIixcbiAgICBTazogXCIwMDVFMDA2MDAwQTgwMEFGMDBCNDAwQjgwMkMyLTAyQzUwMkQyLTAyREYwMkU1LTAyRUIwMkVEMDJFRi0wMkZGMDM3NTAzODQwMzg1MUZCRDFGQkYtMUZDMTFGQ0QtMUZDRjFGREQtMUZERjFGRUQtMUZFRjFGRkQxRkZFMzA5QjMwOUNBNzAwLUE3MTZBNzIwQTcyMUE3ODlBNzhBRkYzRUZGNDBGRkUzXCIsXG4gICAgU286IFwiMDBBNjAwQTcwMEE5MDBBRTAwQjAwMEI2MDQ4MjA2MEUwNjBGMDZFOTA2RkQwNkZFMDdGNjA5RkEwQjcwMEJGMy0wQkY4MEJGQTBDN0YwQ0YxMENGMjBENzkwRjAxLTBGMDMwRjEzLTBGMTcwRjFBLTBGMUYwRjM0MEYzNjBGMzgwRkJFLTBGQzUwRkM3LTBGQ0MwRkNFMEZDRjBGRDUtMEZEODEwOUUxMDlGMTM2MDEzOTAtMTM5OTE5NDAxOUUwLTE5RkYxQjYxLTFCNkExQjc0LTFCN0MyMTAwMjEwMTIxMDMtMjEwNjIxMDgyMTA5MjExNDIxMTYtMjExODIxMUUtMjEyMzIxMjUyMTI3MjEyOTIxMkUyMTNBMjEzQjIxNEEyMTRDMjE0RDIxNEYyMTk1LTIxOTkyMTlDLTIxOUYyMUExMjFBMjIxQTQyMUE1MjFBNy0yMUFEMjFBRi0yMUNEMjFEMDIxRDEyMUQzMjFENS0yMUYzMjMwMC0yMzA3MjMwQy0yMzFGMjMyMi0yMzI4MjMyQi0yMzdCMjM3RC0yMzlBMjNCNC0yM0RCMjNFMi0yM0U4MjQwMC0yNDI2MjQ0MC0yNDRBMjQ5Qy0yNEU5MjUwMC0yNUI2MjVCOC0yNUMwMjVDMi0yNUY3MjYwMC0yNjZFMjY3MC0yNkNEMjZDRi0yNkUxMjZFMzI2RTgtMjZGRjI3MDEtMjcwNDI3MDYtMjcwOTI3MEMtMjcyNzI3MjktMjc0QjI3NEQyNzRGLTI3NTIyNzU2LTI3NUUyNzYxLTI3NjcyNzk0Mjc5OC0yN0FGMjdCMS0yN0JFMjgwMC0yOEZGMkIwMC0yQjJGMkI0NTJCNDYyQjUwLTJCNTkyQ0U1LTJDRUEyRTgwLTJFOTkyRTlCLTJFRjMyRjAwLTJGRDUyRkYwLTJGRkIzMDA0MzAxMjMwMTMzMDIwMzAzNjMwMzczMDNFMzAzRjMxOTAzMTkxMzE5Ni0zMTlGMzFDMC0zMUUzMzIwMC0zMjFFMzIyQS0zMjUwMzI2MC0zMjdGMzI4QS0zMkIwMzJDMC0zMkZFMzMwMC0zM0ZGNERDMC00REZGQTQ5MC1BNEM2QTgyOC1BODJCQTgzNkE4MzdBODM5QUE3Ny1BQTc5RkRGREZGRTRGRkU4RkZFREZGRUVGRkZDRkZGRFwiLFxuICAgIFo6ICBcIjAwMjAwMEEwMTY4MDE4MEUyMDAwLTIwMEEyMDI4MjAyOTIwMkYyMDVGMzAwMFwiLFxuICAgIFpzOiBcIjAwMjAwMEEwMTY4MDE4MEUyMDAwLTIwMEEyMDJGMjA1RjMwMDBcIixcbiAgICBabDogXCIyMDI4XCIsXG4gICAgWnA6IFwiMjAyOVwiLFxuICAgIEM6ICBcIjAwMDAtMDAxRjAwN0YtMDA5RjAwQUQwMzc4MDM3OTAzN0YtMDM4MzAzOEIwMzhEMDNBMjA1MjYtMDUzMDA1NTcwNTU4MDU2MDA1ODgwNThCLTA1OTAwNUM4LTA1Q0YwNUVCLTA1RUYwNUY1LTA2MDUwNjFDMDYxRDA2MjAwNjVGMDZERDA3MEUwNzBGMDc0QjA3NEMwN0IyLTA3QkYwN0ZCLTA3RkYwODJFMDgyRjA4M0YtMDhGRjA5M0EwOTNCMDk0RjA5NTYwOTU3MDk3My0wOTc4MDk4MDA5ODQwOThEMDk4RTA5OTEwOTkyMDlBOTA5QjEwOUIzLTA5QjUwOUJBMDlCQjA5QzUwOUM2MDlDOTA5Q0EwOUNGLTA5RDYwOUQ4LTA5REIwOURFMDlFNDA5RTUwOUZDLTBBMDAwQTA0MEEwQi0wQTBFMEExMTBBMTIwQTI5MEEzMTBBMzQwQTM3MEEzQTBBM0IwQTNEMEE0My0wQTQ2MEE0OTBBNEEwQTRFLTBBNTAwQTUyLTBBNTgwQTVEMEE1Ri0wQTY1MEE3Ni0wQTgwMEE4NDBBOEUwQTkyMEFBOTBBQjEwQUI0MEFCQTBBQkIwQUM2MEFDQTBBQ0UwQUNGMEFEMS0wQURGMEFFNDBBRTUwQUYwMEFGMi0wQjAwMEIwNDBCMEQwQjBFMEIxMTBCMTIwQjI5MEIzMTBCMzQwQjNBMEIzQjBCNDUwQjQ2MEI0OTBCNEEwQjRFLTBCNTUwQjU4LTBCNUIwQjVFMEI2NDBCNjUwQjcyLTBCODEwQjg0MEI4Qi0wQjhEMEI5MTBCOTYtMEI5ODBCOUIwQjlEMEJBMC0wQkEyMEJBNS0wQkE3MEJBQi0wQkFEMEJCQS0wQkJEMEJDMy0wQkM1MEJDOTBCQ0UwQkNGMEJEMS0wQkQ2MEJEOC0wQkU1MEJGQi0wQzAwMEMwNDBDMEQwQzExMEMyOTBDMzQwQzNBLTBDM0MwQzQ1MEM0OTBDNEUtMEM1NDBDNTcwQzVBLTBDNUYwQzY0MEM2NTBDNzAtMEM3NzBDODAwQzgxMEM4NDBDOEQwQzkxMENBOTBDQjQwQ0JBMENCQjBDQzUwQ0M5MENDRS0wQ0Q0MENENy0wQ0REMENERjBDRTQwQ0U1MENGMDBDRjMtMEQwMTBEMDQwRDBEMEQxMTBEMjkwRDNBLTBEM0MwRDQ1MEQ0OTBENEUtMEQ1NjBENTgtMEQ1RjBENjQwRDY1MEQ3Ni0wRDc4MEQ4MDBEODEwRDg0MEQ5Ny0wRDk5MERCMjBEQkMwREJFMERCRjBEQzctMERDOTBEQ0ItMERDRTBERDUwREQ3MERFMC0wREYxMERGNS0wRTAwMEUzQi0wRTNFMEU1Qy0wRTgwMEU4MzBFODUwRTg2MEU4OTBFOEIwRThDMEU4RS0wRTkzMEU5ODBFQTAwRUE0MEVBNjBFQTgwRUE5MEVBQzBFQkEwRUJFMEVCRjBFQzUwRUM3MEVDRTBFQ0YwRURBMEVEQjBFREUtMEVGRjBGNDgwRjZELTBGNzAwRjhDLTBGOEYwRjk4MEZCRDBGQ0QwRkQ5LTBGRkYxMEM2LTEwQ0YxMEZELTEwRkYxMjQ5MTI0RTEyNEYxMjU3MTI1OTEyNUUxMjVGMTI4OTEyOEUxMjhGMTJCMTEyQjYxMkI3MTJCRjEyQzExMkM2MTJDNzEyRDcxMzExMTMxNjEzMTcxMzVCLTEzNUUxMzdELTEzN0YxMzlBLTEzOUYxM0Y1LTEzRkYxNjlELTE2OUYxNkYxLTE2RkYxNzBEMTcxNS0xNzFGMTczNy0xNzNGMTc1NC0xNzVGMTc2RDE3NzExNzc0LTE3N0YxN0I0MTdCNTE3REUxN0RGMTdFQS0xN0VGMTdGQS0xN0ZGMTgwRjE4MUEtMTgxRjE4NzgtMTg3RjE4QUItMThBRjE4RjYtMThGRjE5MUQtMTkxRjE5MkMtMTkyRjE5M0MtMTkzRjE5NDEtMTk0MzE5NkUxOTZGMTk3NS0xOTdGMTlBQy0xOUFGMTlDQS0xOUNGMTlEQi0xOUREMUExQzFBMUQxQTVGMUE3RDFBN0UxQThBLTFBOEYxQTlBLTFBOUYxQUFFLTFBRkYxQjRDLTFCNEYxQjdELTFCN0YxQkFCLTFCQUQxQkJBLTFCRkYxQzM4LTFDM0ExQzRBLTFDNEMxQzgwLTFDQ0YxQ0YzLTFDRkYxREU3LTFERkMxRjE2MUYxNzFGMUUxRjFGMUY0NjFGNDcxRjRFMUY0RjFGNTgxRjVBMUY1QzFGNUUxRjdFMUY3RjFGQjUxRkM1MUZENDFGRDUxRkRDMUZGMDFGRjExRkY1MUZGRjIwMEItMjAwRjIwMkEtMjAyRTIwNjAtMjA2RjIwNzIyMDczMjA4RjIwOTUtMjA5RjIwQjktMjBDRjIwRjEtMjBGRjIxOEEtMjE4RjIzRTktMjNGRjI0MjctMjQzRjI0NEItMjQ1RjI2Q0UyNkUyMjZFNC0yNkU3MjcwMDI3MDUyNzBBMjcwQjI3MjgyNzRDMjc0RTI3NTMtMjc1NTI3NUYyNzYwMjc5NS0yNzk3MjdCMDI3QkYyN0NCMjdDRC0yN0NGMkI0RC0yQjRGMkI1QS0yQkZGMkMyRjJDNUYyQ0YyLTJDRjgyRDI2LTJEMkYyRDY2LTJENkUyRDcwLTJEN0YyRDk3LTJEOUYyREE3MkRBRjJEQjcyREJGMkRDNzJEQ0YyREQ3MkRERjJFMzItMkU3RjJFOUEyRUY0LTJFRkYyRkQ2LTJGRUYyRkZDLTJGRkYzMDQwMzA5NzMwOTgzMTAwLTMxMDQzMTJFLTMxMzAzMThGMzFCOC0zMUJGMzFFNC0zMUVGMzIxRjMyRkY0REI2LTREQkY5RkNDLTlGRkZBNDhELUE0OEZBNEM3LUE0Q0ZBNjJDLUE2M0ZBNjYwQTY2MUE2NzQtQTY3QkE2OTgtQTY5RkE2RjgtQTZGRkE3OEQtQTdGQUE4MkMtQTgyRkE4M0EtQTgzRkE4NzgtQTg3RkE4QzUtQThDREE4REEtQThERkE4RkMtQThGRkE5NTQtQTk1RUE5N0QtQTk3RkE5Q0VBOURBLUE5RERBOUUwLUE5RkZBQTM3LUFBM0ZBQTRFQUE0RkFBNUFBQTVCQUE3Qy1BQTdGQUFDMy1BQURBQUFFMC1BQkJGQUJFRUFCRUZBQkZBLUFCRkZEN0E0LUQ3QUZEN0M3LUQ3Q0FEN0ZDLUY4RkZGQTJFRkEyRkZBNkVGQTZGRkFEQS1GQUZGRkIwNy1GQjEyRkIxOC1GQjFDRkIzN0ZCM0RGQjNGRkI0MkZCNDVGQkIyLUZCRDJGRDQwLUZENEZGRDkwRkQ5MUZEQzgtRkRFRkZERkVGREZGRkUxQS1GRTFGRkUyNy1GRTJGRkU1M0ZFNjdGRTZDLUZFNkZGRTc1RkVGRC1GRjAwRkZCRi1GRkMxRkZDOEZGQzlGRkQwRkZEMUZGRDhGRkQ5RkZERC1GRkRGRkZFN0ZGRUYtRkZGQkZGRkVGRkZGXCIsXG4gICAgQ2M6IFwiMDAwMC0wMDFGMDA3Ri0wMDlGXCIsXG4gICAgQ2Y6IFwiMDBBRDA2MDAtMDYwMzA2REQwNzBGMTdCNDE3QjUyMDBCLTIwMEYyMDJBLTIwMkUyMDYwLTIwNjQyMDZBLTIwNkZGRUZGRkZGOS1GRkZCXCIsXG4gICAgQ286IFwiRTAwMC1GOEZGXCIsXG4gICAgQ3M6IFwiRDgwMC1ERkZGXCIsXG4gICAgQ246IFwiMDM3ODAzNzkwMzdGLTAzODMwMzhCMDM4RDAzQTIwNTI2LTA1MzAwNTU3MDU1ODA1NjAwNTg4MDU4Qi0wNTkwMDVDOC0wNUNGMDVFQi0wNUVGMDVGNS0wNUZGMDYwNDA2MDUwNjFDMDYxRDA2MjAwNjVGMDcwRTA3NEIwNzRDMDdCMi0wN0JGMDdGQi0wN0ZGMDgyRTA4MkYwODNGLTA4RkYwOTNBMDkzQjA5NEYwOTU2MDk1NzA5NzMtMDk3ODA5ODAwOTg0MDk4RDA5OEUwOTkxMDk5MjA5QTkwOUIxMDlCMy0wOUI1MDlCQTA5QkIwOUM1MDlDNjA5QzkwOUNBMDlDRi0wOUQ2MDlEOC0wOURCMDlERTA5RTQwOUU1MDlGQy0wQTAwMEEwNDBBMEItMEEwRTBBMTEwQTEyMEEyOTBBMzEwQTM0MEEzNzBBM0EwQTNCMEEzRDBBNDMtMEE0NjBBNDkwQTRBMEE0RS0wQTUwMEE1Mi0wQTU4MEE1RDBBNUYtMEE2NTBBNzYtMEE4MDBBODQwQThFMEE5MjBBQTkwQUIxMEFCNDBBQkEwQUJCMEFDNjBBQ0EwQUNFMEFDRjBBRDEtMEFERjBBRTQwQUU1MEFGMDBBRjItMEIwMDBCMDQwQjBEMEIwRTBCMTEwQjEyMEIyOTBCMzEwQjM0MEIzQTBCM0IwQjQ1MEI0NjBCNDkwQjRBMEI0RS0wQjU1MEI1OC0wQjVCMEI1RTBCNjQwQjY1MEI3Mi0wQjgxMEI4NDBCOEItMEI4RDBCOTEwQjk2LTBCOTgwQjlCMEI5RDBCQTAtMEJBMjBCQTUtMEJBNzBCQUItMEJBRDBCQkEtMEJCRDBCQzMtMEJDNTBCQzkwQkNFMEJDRjBCRDEtMEJENjBCRDgtMEJFNTBCRkItMEMwMDBDMDQwQzBEMEMxMTBDMjkwQzM0MEMzQS0wQzNDMEM0NTBDNDkwQzRFLTBDNTQwQzU3MEM1QS0wQzVGMEM2NDBDNjUwQzcwLTBDNzcwQzgwMEM4MTBDODQwQzhEMEM5MTBDQTkwQ0I0MENCQTBDQkIwQ0M1MENDOTBDQ0UtMENENDBDRDctMENERDBDREYwQ0U0MENFNTBDRjAwQ0YzLTBEMDEwRDA0MEQwRDBEMTEwRDI5MEQzQS0wRDNDMEQ0NTBENDkwRDRFLTBENTYwRDU4LTBENUYwRDY0MEQ2NTBENzYtMEQ3ODBEODAwRDgxMEQ4NDBEOTctMEQ5OTBEQjIwREJDMERCRTBEQkYwREM3LTBEQzkwRENCLTBEQ0UwREQ1MERENzBERTAtMERGMTBERjUtMEUwMDBFM0ItMEUzRTBFNUMtMEU4MDBFODMwRTg1MEU4NjBFODkwRThCMEU4QzBFOEUtMEU5MzBFOTgwRUEwMEVBNDBFQTYwRUE4MEVBOTBFQUMwRUJBMEVCRTBFQkYwRUM1MEVDNzBFQ0UwRUNGMEVEQTBFREIwRURFLTBFRkYwRjQ4MEY2RC0wRjcwMEY4Qy0wRjhGMEY5ODBGQkQwRkNEMEZEOS0wRkZGMTBDNi0xMENGMTBGRC0xMEZGMTI0OTEyNEUxMjRGMTI1NzEyNTkxMjVFMTI1RjEyODkxMjhFMTI4RjEyQjExMkI2MTJCNzEyQkYxMkMxMTJDNjEyQzcxMkQ3MTMxMTEzMTYxMzE3MTM1Qi0xMzVFMTM3RC0xMzdGMTM5QS0xMzlGMTNGNS0xM0ZGMTY5RC0xNjlGMTZGMS0xNkZGMTcwRDE3MTUtMTcxRjE3MzctMTczRjE3NTQtMTc1RjE3NkQxNzcxMTc3NC0xNzdGMTdERTE3REYxN0VBLTE3RUYxN0ZBLTE3RkYxODBGMTgxQS0xODFGMTg3OC0xODdGMThBQi0xOEFGMThGNi0xOEZGMTkxRC0xOTFGMTkyQy0xOTJGMTkzQy0xOTNGMTk0MS0xOTQzMTk2RTE5NkYxOTc1LTE5N0YxOUFDLTE5QUYxOUNBLTE5Q0YxOURCLTE5REQxQTFDMUExRDFBNUYxQTdEMUE3RTFBOEEtMUE4RjFBOUEtMUE5RjFBQUUtMUFGRjFCNEMtMUI0RjFCN0QtMUI3RjFCQUItMUJBRDFCQkEtMUJGRjFDMzgtMUMzQTFDNEEtMUM0QzFDODAtMUNDRjFDRjMtMUNGRjFERTctMURGQzFGMTYxRjE3MUYxRTFGMUYxRjQ2MUY0NzFGNEUxRjRGMUY1ODFGNUExRjVDMUY1RTFGN0UxRjdGMUZCNTFGQzUxRkQ0MUZENTFGREMxRkYwMUZGMTFGRjUxRkZGMjA2NS0yMDY5MjA3MjIwNzMyMDhGMjA5NS0yMDlGMjBCOS0yMENGMjBGMS0yMEZGMjE4QS0yMThGMjNFOS0yM0ZGMjQyNy0yNDNGMjQ0Qi0yNDVGMjZDRTI2RTIyNkU0LTI2RTcyNzAwMjcwNTI3MEEyNzBCMjcyODI3NEMyNzRFMjc1My0yNzU1Mjc1RjI3NjAyNzk1LTI3OTcyN0IwMjdCRjI3Q0IyN0NELTI3Q0YyQjRELTJCNEYyQjVBLTJCRkYyQzJGMkM1RjJDRjItMkNGODJEMjYtMkQyRjJENjYtMkQ2RTJENzAtMkQ3RjJEOTctMkQ5RjJEQTcyREFGMkRCNzJEQkYyREM3MkRDRjJERDcyRERGMkUzMi0yRTdGMkU5QTJFRjQtMkVGRjJGRDYtMkZFRjJGRkMtMkZGRjMwNDAzMDk3MzA5ODMxMDAtMzEwNDMxMkUtMzEzMDMxOEYzMUI4LTMxQkYzMUU0LTMxRUYzMjFGMzJGRjREQjYtNERCRjlGQ0MtOUZGRkE0OEQtQTQ4RkE0QzctQTRDRkE2MkMtQTYzRkE2NjBBNjYxQTY3NC1BNjdCQTY5OC1BNjlGQTZGOC1BNkZGQTc4RC1BN0ZBQTgyQy1BODJGQTgzQS1BODNGQTg3OC1BODdGQThDNS1BOENEQThEQS1BOERGQThGQy1BOEZGQTk1NC1BOTVFQTk3RC1BOTdGQTlDRUE5REEtQTlEREE5RTAtQTlGRkFBMzctQUEzRkFBNEVBQTRGQUE1QUFBNUJBQTdDLUFBN0ZBQUMzLUFBREFBQUUwLUFCQkZBQkVFQUJFRkFCRkEtQUJGRkQ3QTQtRDdBRkQ3QzctRDdDQUQ3RkMtRDdGRkZBMkVGQTJGRkE2RUZBNkZGQURBLUZBRkZGQjA3LUZCMTJGQjE4LUZCMUNGQjM3RkIzREZCM0ZGQjQyRkI0NUZCQjItRkJEMkZENDAtRkQ0RkZEOTBGRDkxRkRDOC1GREVGRkRGRUZERkZGRTFBLUZFMUZGRTI3LUZFMkZGRTUzRkU2N0ZFNkMtRkU2RkZFNzVGRUZERkVGRUZGMDBGRkJGLUZGQzFGRkM4RkZDOUZGRDBGRkQxRkZEOEZGRDlGRkRELUZGREZGRkU3RkZFRi1GRkY4RkZGRUZGRkZcIlxufSk7XG5cbmZ1bmN0aW9uIGFkZFVuaWNvZGVQYWNrYWdlIChwYWNrKSB7XG4gICAgdmFyIGNvZGVQb2ludCA9IC9cXHd7NH0vZztcbiAgICBmb3IgKHZhciBuYW1lIGluIHBhY2spXG4gICAgICAgIGV4cG9ydHMucGFja2FnZXNbbmFtZV0gPSBwYWNrW25hbWVdLnJlcGxhY2UoY29kZVBvaW50LCBcIlxcXFx1JCZcIik7XG59XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL21vZGUvdGV4dFwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL3Rva2VuaXplclwiLFwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXNcIixcImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGVcIixcImFjZS91bmljb2RlXCIsXCJhY2UvbGliL2xhbmdcIixcImFjZS90b2tlbl9pdGVyYXRvclwiLFwiYWNlL3JhbmdlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIFRva2VuaXplciA9IGFjZXF1aXJlKFwiLi4vdG9rZW5pemVyXCIpLlRva2VuaXplcjtcbnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSBhY2VxdWlyZShcIi4vdGV4dF9oaWdobGlnaHRfcnVsZXNcIikuVGV4dEhpZ2hsaWdodFJ1bGVzO1xudmFyIENzdHlsZUJlaGF2aW91ciA9IGFjZXF1aXJlKFwiLi9iZWhhdmlvdXIvY3N0eWxlXCIpLkNzdHlsZUJlaGF2aW91cjtcbnZhciB1bmljb2RlID0gYWNlcXVpcmUoXCIuLi91bmljb2RlXCIpO1xudmFyIGxhbmcgPSBhY2VxdWlyZShcIi4uL2xpYi9sYW5nXCIpO1xudmFyIFRva2VuSXRlcmF0b3IgPSBhY2VxdWlyZShcIi4uL3Rva2VuX2l0ZXJhdG9yXCIpLlRva2VuSXRlcmF0b3I7XG52YXIgUmFuZ2UgPSBhY2VxdWlyZShcIi4uL3JhbmdlXCIpLlJhbmdlO1xuXG52YXIgTW9kZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBUZXh0SGlnaGxpZ2h0UnVsZXM7XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgdGhpcy4kZGVmYXVsdEJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTtcblxuICAgIHRoaXMudG9rZW5SZSA9IG5ldyBSZWdFeHAoXCJeW1wiXG4gICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5MXG4gICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5NbiArIHVuaWNvZGUucGFja2FnZXMuTWNcbiAgICAgICAgKyB1bmljb2RlLnBhY2thZ2VzLk5kXG4gICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5QYyArIFwiXFxcXCRfXStcIiwgXCJnXCJcbiAgICApO1xuXG4gICAgdGhpcy5ub25Ub2tlblJlID0gbmV3IFJlZ0V4cChcIl4oPzpbXlwiXG4gICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5MXG4gICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5NbiArIHVuaWNvZGUucGFja2FnZXMuTWNcbiAgICAgICAgKyB1bmljb2RlLnBhY2thZ2VzLk5kXG4gICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5QYyArIFwiXFxcXCRfXXxcXFxcc10pK1wiLCBcImdcIlxuICAgICk7XG5cbiAgICB0aGlzLmdldFRva2VuaXplciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuJHRva2VuaXplcikge1xuICAgICAgICAgICAgdGhpcy4kaGlnaGxpZ2h0UnVsZXMgPSB0aGlzLiRoaWdobGlnaHRSdWxlcyB8fCBuZXcgdGhpcy5IaWdobGlnaHRSdWxlcyh0aGlzLiRoaWdobGlnaHRSdWxlQ29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuJHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIodGhpcy4kaGlnaGxpZ2h0UnVsZXMuZ2V0UnVsZXMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuJHRva2VuaXplcjtcbiAgICB9O1xuXG4gICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gXCJcIjtcbiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IFwiXCI7XG5cbiAgICB0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBzdGFydFJvdywgZW5kUm93KSB7XG4gICAgICAgIHZhciBkb2MgPSBzZXNzaW9uLmRvYztcblxuICAgICAgICB2YXIgaWdub3JlQmxhbmtMaW5lcyA9IHRydWU7XG4gICAgICAgIHZhciBzaG91bGRSZW1vdmUgPSB0cnVlO1xuICAgICAgICB2YXIgbWluSW5kZW50ID0gSW5maW5pdHk7XG4gICAgICAgIHZhciB0YWJTaXplID0gc2Vzc2lvbi5nZXRUYWJTaXplKCk7XG4gICAgICAgIHZhciBpbnNlcnRBdFRhYlN0b3AgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXRoaXMubGluZUNvbW1lbnRTdGFydCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmJsb2NrQ29tbWVudClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB2YXIgbGluZUNvbW1lbnRTdGFydCA9IHRoaXMuYmxvY2tDb21tZW50LnN0YXJ0O1xuICAgICAgICAgICAgdmFyIGxpbmVDb21tZW50RW5kID0gdGhpcy5ibG9ja0NvbW1lbnQuZW5kO1xuICAgICAgICAgICAgdmFyIHJlZ2V4cFN0YXJ0ID0gbmV3IFJlZ0V4cChcIl4oXFxcXHMqKSg/OlwiICsgbGFuZy5lc2NhcGVSZWdFeHAobGluZUNvbW1lbnRTdGFydCkgKyBcIilcIik7XG4gICAgICAgICAgICB2YXIgcmVnZXhwRW5kID0gbmV3IFJlZ0V4cChcIig/OlwiICsgbGFuZy5lc2NhcGVSZWdFeHAobGluZUNvbW1lbnRFbmQpICsgXCIpXFxcXHMqJFwiKTtcblxuICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSBmdW5jdGlvbihsaW5lLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlc3RSZW1vdmUobGluZSwgaSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAoIWlnbm9yZUJsYW5rTGluZXMgfHwgL1xcUy8udGVzdChsaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICBkb2MuaW5zZXJ0SW5MaW5lKHtyb3c6IGksIGNvbHVtbjogbGluZS5sZW5ndGh9LCBsaW5lQ29tbWVudEVuZCk7XG4gICAgICAgICAgICAgICAgICAgIGRvYy5pbnNlcnRJbkxpbmUoe3JvdzogaSwgY29sdW1uOiBtaW5JbmRlbnR9LCBsaW5lQ29tbWVudFN0YXJ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB2YXIgdW5jb21tZW50ID0gZnVuY3Rpb24obGluZSwgaSkge1xuICAgICAgICAgICAgICAgIHZhciBtO1xuICAgICAgICAgICAgICAgIGlmIChtID0gbGluZS5tYXRjaChyZWdleHBFbmQpKVxuICAgICAgICAgICAgICAgICAgICBkb2MucmVtb3ZlSW5MaW5lKGksIGxpbmUubGVuZ3RoIC0gbVswXS5sZW5ndGgsIGxpbmUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAobSA9IGxpbmUubWF0Y2gocmVnZXhwU3RhcnQpKVxuICAgICAgICAgICAgICAgICAgICBkb2MucmVtb3ZlSW5MaW5lKGksIG1bMV0ubGVuZ3RoLCBtWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB2YXIgdGVzdFJlbW92ZSA9IGZ1bmN0aW9uKGxpbmUsIHJvdykge1xuICAgICAgICAgICAgICAgIGlmIChyZWdleHBTdGFydC50ZXN0KGxpbmUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zW2ldLnR5cGUgPT09IFwiY29tbWVudFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMubGluZUNvbW1lbnRTdGFydCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVnZXhwU3RhcnQgPSB0aGlzLmxpbmVDb21tZW50U3RhcnQubWFwKGxhbmcuZXNjYXBlUmVnRXhwKS5qb2luKFwifFwiKTtcbiAgICAgICAgICAgICAgICB2YXIgbGluZUNvbW1lbnRTdGFydCA9IHRoaXMubGluZUNvbW1lbnRTdGFydFswXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlZ2V4cFN0YXJ0ID0gbGFuZy5lc2NhcGVSZWdFeHAodGhpcy5saW5lQ29tbWVudFN0YXJ0KTtcbiAgICAgICAgICAgICAgICB2YXIgbGluZUNvbW1lbnRTdGFydCA9IHRoaXMubGluZUNvbW1lbnRTdGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZ2V4cFN0YXJ0ID0gbmV3IFJlZ0V4cChcIl4oXFxcXHMqKSg/OlwiICsgcmVnZXhwU3RhcnQgKyBcIikgP1wiKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaW5zZXJ0QXRUYWJTdG9wID0gc2Vzc2lvbi5nZXRVc2VTb2Z0VGFicygpO1xuXG4gICAgICAgICAgICB2YXIgdW5jb21tZW50ID0gZnVuY3Rpb24obGluZSwgaSkge1xuICAgICAgICAgICAgICAgIHZhciBtID0gbGluZS5tYXRjaChyZWdleHBTdGFydCk7XG4gICAgICAgICAgICAgICAgaWYgKCFtKSByZXR1cm47XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbVsxXS5sZW5ndGgsIGVuZCA9IG1bMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICghc2hvdWxkSW5zZXJ0U3BhY2UobGluZSwgc3RhcnQsIGVuZCkgJiYgbVswXVtlbmQgLSAxXSA9PSBcIiBcIilcbiAgICAgICAgICAgICAgICAgICAgZW5kLS07XG4gICAgICAgICAgICAgICAgZG9jLnJlbW92ZUluTGluZShpLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgY29tbWVudFdpdGhTcGFjZSA9IGxpbmVDb21tZW50U3RhcnQgKyBcIiBcIjtcbiAgICAgICAgICAgIHZhciBjb21tZW50ID0gZnVuY3Rpb24obGluZSwgaSkge1xuICAgICAgICAgICAgICAgIGlmICghaWdub3JlQmxhbmtMaW5lcyB8fCAvXFxTLy50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRJbnNlcnRTcGFjZShsaW5lLCBtaW5JbmRlbnQsIG1pbkluZGVudCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2MuaW5zZXJ0SW5MaW5lKHtyb3c6IGksIGNvbHVtbjogbWluSW5kZW50fSwgY29tbWVudFdpdGhTcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvYy5pbnNlcnRJbkxpbmUoe3JvdzogaSwgY29sdW1uOiBtaW5JbmRlbnR9LCBsaW5lQ29tbWVudFN0YXJ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHRlc3RSZW1vdmUgPSBmdW5jdGlvbihsaW5lLCBpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2V4cFN0YXJ0LnRlc3QobGluZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgc2hvdWxkSW5zZXJ0U3BhY2UgPSBmdW5jdGlvbihsaW5lLCBiZWZvcmUsIGFmdGVyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNwYWNlcyA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGJlZm9yZS0tICYmIGxpbmUuY2hhckF0KGJlZm9yZSkgPT0gXCIgXCIpXG4gICAgICAgICAgICAgICAgICAgIHNwYWNlcysrO1xuICAgICAgICAgICAgICAgIGlmIChzcGFjZXMgJSB0YWJTaXplICE9IDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgc3BhY2VzID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAobGluZS5jaGFyQXQoYWZ0ZXIrKykgPT0gXCIgXCIpXG4gICAgICAgICAgICAgICAgICAgIHNwYWNlcysrO1xuICAgICAgICAgICAgICAgIGlmICh0YWJTaXplID4gMilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwYWNlcyAlIHRhYlNpemUgIT0gdGFiU2l6ZSAtIDE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3BhY2VzICUgdGFiU2l6ZSA9PSAwO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGl0ZXIoZnVuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3c7IGkgPD0gZW5kUm93OyBpKyspXG4gICAgICAgICAgICAgICAgZnVuKGRvYy5nZXRMaW5lKGkpLCBpKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdmFyIG1pbkVtcHR5TGVuZ3RoID0gSW5maW5pdHk7XG4gICAgICAgIGl0ZXIoZnVuY3Rpb24obGluZSwgaSkge1xuICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cXFMvKTtcbiAgICAgICAgICAgIGlmIChpbmRlbnQgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGVudCA8IG1pbkluZGVudClcbiAgICAgICAgICAgICAgICAgICAgbWluSW5kZW50ID0gaW5kZW50O1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRSZW1vdmUgJiYgIXRlc3RSZW1vdmUobGluZSwgaSkpXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFJlbW92ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtaW5FbXB0eUxlbmd0aCA+IGxpbmUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbWluRW1wdHlMZW5ndGggPSBsaW5lLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG1pbkluZGVudCA9PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgbWluSW5kZW50ID0gbWluRW1wdHlMZW5ndGg7XG4gICAgICAgICAgICBpZ25vcmVCbGFua0xpbmVzID0gZmFsc2U7XG4gICAgICAgICAgICBzaG91bGRSZW1vdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnNlcnRBdFRhYlN0b3AgJiYgbWluSW5kZW50ICUgdGFiU2l6ZSAhPSAwKVxuICAgICAgICAgICAgbWluSW5kZW50ID0gTWF0aC5mbG9vcihtaW5JbmRlbnQgLyB0YWJTaXplKSAqIHRhYlNpemU7XG5cbiAgICAgICAgaXRlcihzaG91bGRSZW1vdmUgPyB1bmNvbW1lbnQgOiBjb21tZW50KTtcbiAgICB9O1xuXG4gICAgdGhpcy50b2dnbGVCbG9ja0NvbW1lbnQgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcmFuZ2UsIGN1cnNvcikge1xuICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMuYmxvY2tDb21tZW50O1xuICAgICAgICBpZiAoIWNvbW1lbnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghY29tbWVudC5zdGFydCAmJiBjb21tZW50WzBdKVxuICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRbMF07XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7XG4gICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpO1xuXG4gICAgICAgIHZhciBzZWwgPSBzZXNzaW9uLnNlbGVjdGlvbjtcbiAgICAgICAgdmFyIGluaXRpYWxSYW5nZSA9IHNlc3Npb24uc2VsZWN0aW9uLnRvT3JpZW50ZWRSYW5nZSgpO1xuICAgICAgICB2YXIgc3RhcnRSb3csIGNvbERpZmY7XG5cbiAgICAgICAgaWYgKHRva2VuICYmIC9jb21tZW50Ly50ZXN0KHRva2VuLnR5cGUpKSB7XG4gICAgICAgICAgICB2YXIgc3RhcnRSYW5nZSwgZW5kUmFuZ2U7XG4gICAgICAgICAgICB3aGlsZSAodG9rZW4gJiYgL2NvbW1lbnQvLnRlc3QodG9rZW4udHlwZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IHRva2VuLnZhbHVlLmluZGV4T2YoY29tbWVudC5zdGFydCk7XG4gICAgICAgICAgICAgICAgaWYgKGkgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyBpO1xuICAgICAgICAgICAgICAgICAgICBzdGFydFJhbmdlID0gbmV3IFJhbmdlKHJvdywgY29sdW1uLCByb3csIGNvbHVtbiArIGNvbW1lbnQuc3RhcnQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pO1xuICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgICAgICAgICB3aGlsZSAodG9rZW4gJiYgL2NvbW1lbnQvLnRlc3QodG9rZW4udHlwZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IHRva2VuLnZhbHVlLmluZGV4T2YoY29tbWVudC5lbmQpO1xuICAgICAgICAgICAgICAgIGlmIChpICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgaTtcbiAgICAgICAgICAgICAgICAgICAgZW5kUmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBjb2x1bW4sIHJvdywgY29sdW1uICsgY29tbWVudC5lbmQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbmRSYW5nZSlcbiAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZShlbmRSYW5nZSk7XG4gICAgICAgICAgICBpZiAoc3RhcnRSYW5nZSkge1xuICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlKHN0YXJ0UmFuZ2UpO1xuICAgICAgICAgICAgICAgIHN0YXJ0Um93ID0gc3RhcnRSYW5nZS5zdGFydC5yb3c7XG4gICAgICAgICAgICAgICAgY29sRGlmZiA9IC1jb21tZW50LnN0YXJ0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbERpZmYgPSBjb21tZW50LnN0YXJ0Lmxlbmd0aDtcbiAgICAgICAgICAgIHN0YXJ0Um93ID0gcmFuZ2Uuc3RhcnQucm93O1xuICAgICAgICAgICAgc2Vzc2lvbi5pbnNlcnQocmFuZ2UuZW5kLCBjb21tZW50LmVuZCk7XG4gICAgICAgICAgICBzZXNzaW9uLmluc2VydChyYW5nZS5zdGFydCwgY29tbWVudC5zdGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluaXRpYWxSYW5nZS5zdGFydC5yb3cgPT0gc3RhcnRSb3cpXG4gICAgICAgICAgICBpbml0aWFsUmFuZ2Uuc3RhcnQuY29sdW1uICs9IGNvbERpZmY7XG4gICAgICAgIGlmIChpbml0aWFsUmFuZ2UuZW5kLnJvdyA9PSBzdGFydFJvdylcbiAgICAgICAgICAgIGluaXRpYWxSYW5nZS5lbmQuY29sdW1uICs9IGNvbERpZmY7XG4gICAgICAgIHNlc3Npb24uc2VsZWN0aW9uLmZyb21PcmllbnRlZFJhbmdlKGluaXRpYWxSYW5nZSk7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRnZXRJbmRlbnQobGluZSk7XG4gICAgfTtcblxuICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykge1xuICAgIH07XG5cbiAgICB0aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXFxzKi8pWzBdO1xuICAgIH07XG5cbiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcyA9IGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICAgIHRoaXMuJGVtYmVkcyA9IFtdO1xuICAgICAgICB0aGlzLiRtb2RlcyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpIGluIG1hcHBpbmcpIHtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZW1iZWRzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgdGhpcy4kbW9kZXNbaV0gPSBuZXcgbWFwcGluZ1tpXSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRlbGVnYXRpb25zID0gW1widG9nZ2xlQmxvY2tDb21tZW50XCIsIFwidG9nZ2xlQ29tbWVudExpbmVzXCIsIFwiZ2V0TmV4dExpbmVJbmRlbnRcIiwgXG4gICAgICAgICAgICBcImNoZWNrT3V0ZGVudFwiLCBcImF1dG9PdXRkZW50XCIsIFwidHJhbnNmb3JtQWN0aW9uXCIsIFwiZ2V0Q29tcGxldGlvbnNcIl07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxlZ2F0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgKGZ1bmN0aW9uKHNjb3BlKSB7XG4gICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBkZWxlZ2F0aW9uc1tpXTtcbiAgICAgICAgICAgICAgdmFyIGRlZmF1bHRIYW5kbGVyID0gc2NvcGVbZnVuY3Rpb25OYW1lXTtcbiAgICAgICAgICAgICAgc2NvcGVbZGVsZWdhdGlvbnNbaV1dID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kZGVsZWdhdG9yKGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzLCBkZWZhdWx0SGFuZGxlcik7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRkZWxlZ2F0b3IgPSBmdW5jdGlvbihtZXRob2QsIGFyZ3MsIGRlZmF1bHRIYW5kbGVyKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGFyZ3NbMF07XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHN0YXRlID0gc3RhdGVbMF07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZW1iZWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuJG1vZGVzW3RoaXMuJGVtYmVkc1tpXV0pIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICB2YXIgc3BsaXQgPSBzdGF0ZS5zcGxpdCh0aGlzLiRlbWJlZHNbaV0pO1xuICAgICAgICAgICAgaWYgKCFzcGxpdFswXSAmJiBzcGxpdFsxXSkge1xuICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBzcGxpdFsxXTtcbiAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJG1vZGVzW3RoaXMuJGVtYmVkc1tpXV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVbbWV0aG9kXS5hcHBseShtb2RlLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgcmV0ID0gZGVmYXVsdEhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiBkZWZhdWx0SGFuZGxlciA/IHJldCA6IHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgdGhpcy50cmFuc2Zvcm1BY3Rpb24gPSBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHBhcmFtKSB7XG4gICAgICAgIGlmICh0aGlzLiRiZWhhdmlvdXIpIHtcbiAgICAgICAgICAgIHZhciBiZWhhdmlvdXJzID0gdGhpcy4kYmVoYXZpb3VyLmdldEJlaGF2aW91cnMoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBiZWhhdmlvdXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJlaGF2aW91cnNba2V5XVthY3Rpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBiZWhhdmlvdXJzW2tleV1bYWN0aW9uXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmdldEtleXdvcmRzID0gZnVuY3Rpb24oYXBwZW5kKSB7XG4gICAgICAgIGlmICghdGhpcy5jb21wbGV0aW9uS2V5d29yZHMpIHtcbiAgICAgICAgICAgIHZhciBydWxlcyA9IHRoaXMuJHRva2VuaXplci5ydWxlcztcbiAgICAgICAgICAgIHZhciBjb21wbGV0aW9uS2V5d29yZHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIHJ1bGUgaW4gcnVsZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcnVsZUl0ciA9IHJ1bGVzW3J1bGVdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwLCBsID0gcnVsZUl0ci5sZW5ndGg7IHIgPCBsOyByKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlSXRyW3JdLnRva2VuID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoL2tleXdvcmR8c3VwcG9ydHxzdG9yYWdlLy50ZXN0KHJ1bGVJdHJbcl0udG9rZW4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25LZXl3b3Jkcy5wdXNoKHJ1bGVJdHJbcl0ucmVnZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBydWxlSXRyW3JdLnRva2VuID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gMCwgYUxlbmd0aCA9IHJ1bGVJdHJbcl0udG9rZW4ubGVuZ3RoOyBhIDwgYUxlbmd0aDsgYSsrKSB7ICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgva2V5d29yZHxzdXBwb3J0fHN0b3JhZ2UvLnRlc3QocnVsZUl0cltyXS50b2tlblthXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBydWxlSXRyW3JdLnJlZ2V4Lm1hdGNoKC9cXCguKz9cXCkvZylbYV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25LZXl3b3Jkcy5wdXNoKHJ1bGUuc3Vic3RyKDEsIHJ1bGUubGVuZ3RoIC0gMikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29tcGxldGlvbktleXdvcmRzID0gY29tcGxldGlvbktleXdvcmRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXBwZW5kKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGtleXdvcmRMaXN0O1xuICAgICAgICByZXR1cm4gY29tcGxldGlvbktleXdvcmRzLmNvbmNhdCh0aGlzLiRrZXl3b3JkTGlzdCB8fCBbXSk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLiRjcmVhdGVLZXl3b3JkTGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuJGhpZ2hsaWdodFJ1bGVzKVxuICAgICAgICAgICAgdGhpcy5nZXRUb2tlbml6ZXIoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGtleXdvcmRMaXN0ID0gdGhpcy4kaGlnaGxpZ2h0UnVsZXMuJGtleXdvcmRMaXN0IHx8IFtdO1xuICAgIH07XG5cbiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7XG4gICAgICAgIHZhciBrZXl3b3JkcyA9IHRoaXMuJGtleXdvcmRMaXN0IHx8IHRoaXMuJGNyZWF0ZUtleXdvcmRMaXN0KCk7XG4gICAgICAgIHJldHVybiBrZXl3b3Jkcy5tYXAoZnVuY3Rpb24od29yZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiB3b3JkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB3b3JkLFxuICAgICAgICAgICAgICAgIHNjb3JlOiAwLFxuICAgICAgICAgICAgICAgIG1ldGE6IFwia2V5d29yZFwiXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy4kaWQgPSBcImFjZS9tb2RlL3RleHRcIjtcbn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpO1xuXG5leHBvcnRzLk1vZGUgPSBNb2RlO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvYXBwbHlfZGVsdGFcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIGVycm9yVGV4dCl7XG4gICAgY29uc29sZS5sb2coXCJJbnZhbGlkIERlbHRhOlwiLCBkZWx0YSk7XG4gICAgdGhyb3cgXCJJbnZhbGlkIERlbHRhOiBcIiArIGVycm9yVGV4dDtcbn1cblxuZnVuY3Rpb24gcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbi5yb3cgICAgPj0gMCAmJiBwb3NpdGlvbi5yb3cgICAgPCAgZG9jTGluZXMubGVuZ3RoICYmXG4gICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA+PSAwICYmIHBvc2l0aW9uLmNvbHVtbiA8PSBkb2NMaW5lc1twb3NpdGlvbi5yb3ddLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEZWx0YShkb2NMaW5lcywgZGVsdGEpIHtcbiAgICBpZiAoZGVsdGEuYWN0aW9uICE9IFwiaW5zZXJ0XCIgJiYgZGVsdGEuYWN0aW9uICE9IFwicmVtb3ZlXCIpXG4gICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgXCJkZWx0YS5hY3Rpb24gbXVzdCBiZSAnaW5zZXJ0JyBvciAncmVtb3ZlJ1wiKTtcbiAgICBpZiAoIShkZWx0YS5saW5lcyBpbnN0YW5jZW9mIEFycmF5KSlcbiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCBcImRlbHRhLmxpbmVzIG11c3QgYmUgYW4gQXJyYXlcIik7XG4gICAgaWYgKCFkZWx0YS5zdGFydCB8fCAhZGVsdGEuZW5kKVxuICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgXCJkZWx0YS5zdGFydC9lbmQgbXVzdCBiZSBhbiBwcmVzZW50XCIpO1xuICAgIHZhciBzdGFydCA9IGRlbHRhLnN0YXJ0O1xuICAgIGlmICghcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBkZWx0YS5zdGFydCkpXG4gICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgXCJkZWx0YS5zdGFydCBtdXN0IGJlIGNvbnRhaW5lZCBpbiBkb2N1bWVudFwiKTtcbiAgICB2YXIgZW5kID0gZGVsdGEuZW5kO1xuICAgIGlmIChkZWx0YS5hY3Rpb24gPT0gXCJyZW1vdmVcIiAmJiAhcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBlbmQpKVxuICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIFwiZGVsdGEuZW5kIG11c3QgY29udGFpbmVkIGluIGRvY3VtZW50IGZvciAncmVtb3ZlJyBhY3Rpb25zXCIpO1xuICAgIHZhciBudW1SYW5nZVJvd3MgPSBlbmQucm93IC0gc3RhcnQucm93O1xuICAgIHZhciBudW1SYW5nZUxhc3RMaW5lQ2hhcnMgPSAoZW5kLmNvbHVtbiAtIChudW1SYW5nZVJvd3MgPT0gMCA/IHN0YXJ0LmNvbHVtbiA6IDApKTtcbiAgICBpZiAobnVtUmFuZ2VSb3dzICE9IGRlbHRhLmxpbmVzLmxlbmd0aCAtIDEgfHwgZGVsdGEubGluZXNbbnVtUmFuZ2VSb3dzXS5sZW5ndGggIT0gbnVtUmFuZ2VMYXN0TGluZUNoYXJzKVxuICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIFwiZGVsdGEucmFuZ2UgbXVzdCBtYXRjaCBkZWx0YSBsaW5lc1wiKTtcbn1cblxuZXhwb3J0cy5hcHBseURlbHRhID0gZnVuY3Rpb24oZG9jTGluZXMsIGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7XG4gICAgXG4gICAgdmFyIHJvdyA9IGRlbHRhLnN0YXJ0LnJvdztcbiAgICB2YXIgc3RhcnRDb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47XG4gICAgdmFyIGxpbmUgPSBkb2NMaW5lc1tyb3ddIHx8IFwiXCI7XG4gICAgc3dpdGNoIChkZWx0YS5hY3Rpb24pIHtcbiAgICAgICAgY2FzZSBcImluc2VydFwiOlxuICAgICAgICAgICAgdmFyIGxpbmVzID0gZGVsdGEubGluZXM7XG4gICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZG9jTGluZXNbcm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGRlbHRhLmxpbmVzWzBdICsgbGluZS5zdWJzdHJpbmcoc3RhcnRDb2x1bW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtyb3csIDFdLmNvbmNhdChkZWx0YS5saW5lcyk7XG4gICAgICAgICAgICAgICAgZG9jTGluZXMuc3BsaWNlLmFwcGx5KGRvY0xpbmVzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZG9jTGluZXNbcm93XTtcbiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3cgKyBkZWx0YS5saW5lcy5sZW5ndGggLSAxXSArPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlbW92ZVwiOlxuICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IGRlbHRhLmVuZC5jb2x1bW47XG4gICAgICAgICAgICB2YXIgZW5kUm93ID0gZGVsdGEuZW5kLnJvdztcbiAgICAgICAgICAgIGlmIChyb3cgPT09IGVuZFJvdykge1xuICAgICAgICAgICAgICAgIGRvY0xpbmVzW3Jvd10gPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb2NMaW5lcy5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgIHJvdywgZW5kUm93IC0gcm93ICsgMSxcbiAgICAgICAgICAgICAgICAgICAgbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZG9jTGluZXNbZW5kUm93XS5zdWJzdHJpbmcoZW5kQ29sdW1uKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvYW5jaG9yXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9ldmVudF9lbWl0dGVyXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIG9vcCA9IGFjZXF1aXJlKFwiLi9saWIvb29wXCIpO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi9saWIvZXZlbnRfZW1pdHRlclwiKS5FdmVudEVtaXR0ZXI7XG5cbnZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywgcm93LCBjb2x1bW4pIHtcbiAgICB0aGlzLiRvbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLmF0dGFjaChkb2MpO1xuICAgIFxuICAgIGlmICh0eXBlb2YgY29sdW1uID09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24ocm93LnJvdywgcm93LmNvbHVtbik7XG4gICAgZWxzZVxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTtcbn07XG5cbihmdW5jdGlvbigpIHtcblxuICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTtcbiAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHRoaXMucm93LCB0aGlzLmNvbHVtbik7XG4gICAgfTtcbiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50O1xuICAgIH07XG4gICAgdGhpcy4kaW5zZXJ0UmlnaHQgPSBmYWxzZTtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZnVuY3Rpb24oZGVsdGEpIHtcbiAgICAgICAgaWYgKGRlbHRhLnN0YXJ0LnJvdyA9PSBkZWx0YS5lbmQucm93ICYmIGRlbHRhLnN0YXJ0LnJvdyAhPSB0aGlzLnJvdylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoZGVsdGEuc3RhcnQucm93ID4gdGhpcy5yb3cpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBcbiAgICAgICAgdmFyIHBvaW50ID0gJGdldFRyYW5zZm9ybWVkUG9pbnQoZGVsdGEsIHtyb3c6IHRoaXMucm93LCBjb2x1bW46IHRoaXMuY29sdW1ufSwgdGhpcy4kaW5zZXJ0UmlnaHQpO1xuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvaW50LnJvdywgcG9pbnQuY29sdW1uLCB0cnVlKTtcbiAgICB9O1xuICAgIFxuICAgIGZ1bmN0aW9uICRwb2ludHNJbk9yZGVyKHBvaW50MSwgcG9pbnQyLCBlcXVhbFBvaW50c0luT3JkZXIpIHtcbiAgICAgICAgdmFyIGJDb2xJc0FmdGVyID0gZXF1YWxQb2ludHNJbk9yZGVyID8gcG9pbnQxLmNvbHVtbiA8PSBwb2ludDIuY29sdW1uIDogcG9pbnQxLmNvbHVtbiA8IHBvaW50Mi5jb2x1bW47XG4gICAgICAgIHJldHVybiAocG9pbnQxLnJvdyA8IHBvaW50Mi5yb3cpIHx8IChwb2ludDEucm93ID09IHBvaW50Mi5yb3cgJiYgYkNvbElzQWZ0ZXIpO1xuICAgIH1cbiAgICAgICAgICAgIFxuICAgIGZ1bmN0aW9uICRnZXRUcmFuc2Zvcm1lZFBvaW50KGRlbHRhLCBwb2ludCwgbW92ZUlmRXF1YWwpIHtcbiAgICAgICAgdmFyIGRlbHRhSXNJbnNlcnQgPSBkZWx0YS5hY3Rpb24gPT0gXCJpbnNlcnRcIjtcbiAgICAgICAgdmFyIGRlbHRhUm93U2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLnJvdyAgICAtIGRlbHRhLnN0YXJ0LnJvdyk7XG4gICAgICAgIHZhciBkZWx0YUNvbFNoaWZ0ID0gKGRlbHRhSXNJbnNlcnQgPyAxIDogLTEpICogKGRlbHRhLmVuZC5jb2x1bW4gLSBkZWx0YS5zdGFydC5jb2x1bW4pO1xuICAgICAgICB2YXIgZGVsdGFTdGFydCA9IGRlbHRhLnN0YXJ0O1xuICAgICAgICB2YXIgZGVsdGFFbmQgPSBkZWx0YUlzSW5zZXJ0ID8gZGVsdGFTdGFydCA6IGRlbHRhLmVuZDsgLy8gQ29sbGFwc2UgaW5zZXJ0IHJhbmdlLlxuICAgICAgICBpZiAoJHBvaW50c0luT3JkZXIocG9pbnQsIGRlbHRhU3RhcnQsIG1vdmVJZkVxdWFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByb3c6IHBvaW50LnJvdyxcbiAgICAgICAgICAgICAgICBjb2x1bW46IHBvaW50LmNvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJHBvaW50c0luT3JkZXIoZGVsdGFFbmQsIHBvaW50LCAhbW92ZUlmRXF1YWwpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJvdzogcG9pbnQucm93ICsgZGVsdGFSb3dTaGlmdCxcbiAgICAgICAgICAgICAgICBjb2x1bW46IHBvaW50LmNvbHVtbiArIChwb2ludC5yb3cgPT0gZGVsdGFFbmQucm93ID8gZGVsdGFDb2xTaGlmdCA6IDApXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm93OiBkZWx0YVN0YXJ0LnJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogZGVsdGFTdGFydC5jb2x1bW5cbiAgICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBub0NsaXApIHtcbiAgICAgICAgdmFyIHBvcztcbiAgICAgICAgaWYgKG5vQ2xpcCkge1xuICAgICAgICAgICAgcG9zID0ge1xuICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yb3cgPT0gcG9zLnJvdyAmJiB0aGlzLmNvbHVtbiA9PSBwb3MuY29sdW1uKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciBvbGQgPSB7XG4gICAgICAgICAgICByb3c6IHRoaXMucm93LFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtblxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucm93ID0gcG9zLnJvdztcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VcIiwge1xuICAgICAgICAgICAgb2xkOiBvbGQsXG4gICAgICAgICAgICB2YWx1ZTogcG9zXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5kZXRhY2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHRoaXMuJG9uQ2hhbmdlKTtcbiAgICB9O1xuICAgIHRoaXMuYXR0YWNoID0gZnVuY3Rpb24oZG9jKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2MgfHwgdGhpcy5kb2N1bWVudDtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5vbihcImNoYW5nZVwiLCB0aGlzLiRvbkNoYW5nZSk7XG4gICAgfTtcbiAgICB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIHBvcyA9IHt9O1xuXG4gICAgICAgIGlmIChyb3cgPj0gdGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKSkge1xuICAgICAgICAgICAgcG9zLnJvdyA9IE1hdGgubWF4KDAsIHRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3RoKCkgLSAxKTtcbiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHJvdyA8IDApIHtcbiAgICAgICAgICAgIHBvcy5yb3cgPSAwO1xuICAgICAgICAgICAgcG9zLmNvbHVtbiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwb3Mucm93ID0gcm93O1xuICAgICAgICAgICAgcG9zLmNvbHVtbiA9IE1hdGgubWluKHRoaXMuZG9jdW1lbnQuZ2V0TGluZShwb3Mucm93KS5sZW5ndGgsIE1hdGgubWF4KDAsIGNvbHVtbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbiA8IDApXG4gICAgICAgICAgICBwb3MuY29sdW1uID0gMDtcblxuICAgICAgICByZXR1cm4gcG9zO1xuICAgIH07XG5cbn0pLmNhbGwoQW5jaG9yLnByb3RvdHlwZSk7XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2RvY3VtZW50XCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2FwcGx5X2RlbHRhXCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIixcImFjZS9yYW5nZVwiLFwiYWNlL2FuY2hvclwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBvb3AgPSBhY2VxdWlyZShcIi4vbGliL29vcFwiKTtcbnZhciBhcHBseURlbHRhID0gYWNlcXVpcmUoXCIuL2FwcGx5X2RlbHRhXCIpLmFwcGx5RGVsdGE7XG52YXIgRXZlbnRFbWl0dGVyID0gYWNlcXVpcmUoXCIuL2xpYi9ldmVudF9lbWl0dGVyXCIpLkV2ZW50RW1pdHRlcjtcbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi9yYW5nZVwiKS5SYW5nZTtcbnZhciBBbmNob3IgPSBhY2VxdWlyZShcIi4vYW5jaG9yXCIpLkFuY2hvcjtcblxudmFyIERvY3VtZW50ID0gZnVuY3Rpb24odGV4dE9yTGluZXMpIHtcbiAgICB0aGlzLiRsaW5lcyA9IFtcIlwiXTtcbiAgICBpZiAodGV4dE9yTGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuJGxpbmVzID0gW1wiXCJdO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0ZXh0T3JMaW5lcykpIHtcbiAgICAgICAgdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyh7cm93OiAwLCBjb2x1bW46IDB9LCB0ZXh0T3JMaW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnNlcnQoe3JvdzogMCwgY29sdW1uOjB9LCB0ZXh0T3JMaW5lcyk7XG4gICAgfVxufTtcblxuKGZ1bmN0aW9uKCkge1xuXG4gICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpO1xuICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpIC0gMTtcbiAgICAgICAgdGhpcy5yZW1vdmUobmV3IFJhbmdlKDAsIDAsIGxlbiwgdGhpcy5nZXRMaW5lKGxlbikubGVuZ3RoKSk7XG4gICAgICAgIHRoaXMuaW5zZXJ0KHtyb3c6IDAsIGNvbHVtbjogMH0sIHRleHQpO1xuICAgIH07XG4gICAgdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGxMaW5lcygpLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpO1xuICAgIH07XG4gICAgdGhpcy5jcmVhdGVBbmNob3IgPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICByZXR1cm4gbmV3IEFuY2hvcih0aGlzLCByb3csIGNvbHVtbik7XG4gICAgfTtcbiAgICBpZiAoXCJhYWFcIi5zcGxpdCgvYS8pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLiRzcGxpdCA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xcclxcbnxcXHIvZywgXCJcXG5cIikuc3BsaXQoXCJcXG5cIik7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kc3BsaXQgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXFxyXFxufFxccnxcXG4vKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIHRoaXMuJGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHRleHQubWF0Y2goL14uKj8oXFxyXFxufFxccnxcXG4pL20pO1xuICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoID8gbWF0Y2hbMV0gOiBcIlxcblwiO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VOZXdMaW5lTW9kZVwiKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7XG4gICAgICAgICAgY2FzZSBcIndpbmRvd3NcIjpcbiAgICAgICAgICAgIHJldHVybiBcIlxcclxcblwiO1xuICAgICAgICAgIGNhc2UgXCJ1bml4XCI6XG4gICAgICAgICAgICByZXR1cm4gXCJcXG5cIjtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGF1dG9OZXdMaW5lIHx8IFwiXFxuXCI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy4kYXV0b05ld0xpbmUgPSBcIlwiO1xuICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gXCJhdXRvXCI7XG4gICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLiRuZXdMaW5lTW9kZSA9PT0gbmV3TGluZU1vZGUpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy4kbmV3TGluZU1vZGUgPSBuZXdMaW5lTW9kZTtcbiAgICAgICAgdGhpcy5fc2lnbmFsKFwiY2hhbmdlTmV3TGluZU1vZGVcIik7XG4gICAgfTtcbiAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRuZXdMaW5lTW9kZTtcbiAgICB9O1xuICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgICByZXR1cm4gKHRleHQgPT0gXCJcXHJcXG5cIiB8fCB0ZXh0ID09IFwiXFxyXCIgfHwgdGV4dCA9PSBcIlxcblwiKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0TGluZSA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICByZXR1cm4gdGhpcy4kbGluZXNbcm93XSB8fCBcIlwiO1xuICAgIH07XG4gICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRsaW5lcy5zbGljZShmaXJzdFJvdywgbGFzdFJvdyArIDEpO1xuICAgIH07XG4gICAgdGhpcy5nZXRBbGxMaW5lcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lcygwLCB0aGlzLmdldExlbmd0aCgpKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRsaW5lcy5sZW5ndGg7XG4gICAgfTtcbiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzRm9yUmFuZ2UocmFuZ2UpLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpO1xuICAgIH07XG4gICAgdGhpcy5nZXRMaW5lc0ZvclJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHtcbiAgICAgICAgdmFyIGxpbmVzO1xuICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09PSByYW5nZS5lbmQucm93KSB7XG4gICAgICAgICAgICBsaW5lcyA9IFt0aGlzLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaW5lcyA9IHRoaXMuZ2V0TGluZXMocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5lbmQucm93KTtcbiAgICAgICAgICAgIGxpbmVzWzBdID0gKGxpbmVzWzBdIHx8IFwiXCIpLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgdmFyIGwgPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgaWYgKHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3cgPT0gbClcbiAgICAgICAgICAgICAgICBsaW5lc1tsXSA9IGxpbmVzW2xdLnN1YnN0cmluZygwLCByYW5nZS5lbmQuY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgfTtcbiAgICB0aGlzLmluc2VydExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TGluZXMgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBpbnNlcnRGdWxsTGluZXMgbWV0aG9kIGluc3RlYWQuXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRGdWxsTGluZXMocm93LCBsaW5lcyk7XG4gICAgfTtcbiAgICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiVXNlIG9mIGRvY3VtZW50LnJlbW92ZUxpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgcmVtb3ZlRnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlRnVsbExpbmVzKGZpcnN0Um93LCBsYXN0Um93KTtcbiAgICB9O1xuICAgIHRoaXMuaW5zZXJ0TmV3TGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlVzZSBvZiBkb2N1bWVudC5pbnNlcnROZXdMaW5lIGlzIGRlcHJlY2F0ZWQuIFVzZSBpbnNlcnRNZXJnZWRMaW5lcyhwb3NpdGlvbiwgWycnLCAnJ10pIGluc3RlYWQuXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyhwb3NpdGlvbiwgW1wiXCIsIFwiXCJdKTtcbiAgICB9O1xuICAgIHRoaXMuaW5zZXJ0ID0gZnVuY3Rpb24ocG9zaXRpb24sIHRleHQpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0TGVuZ3RoKCkgPD0gMSlcbiAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyhwb3NpdGlvbiwgdGhpcy4kc3BsaXQodGV4dCkpO1xuICAgIH07XG4gICAgdGhpcy5pbnNlcnRJbkxpbmUgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkge1xuICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5wb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmFwcGx5RGVsdGEoe1xuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBlbmQsXG4gICAgICAgICAgICBhY3Rpb246IFwiaW5zZXJ0XCIsXG4gICAgICAgICAgICBsaW5lczogW3RleHRdXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuY2xpcHBlZFBvcyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpO1xuICAgICAgICBpZiAocm93ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJvdyA9IGxlbmd0aDtcbiAgICAgICAgfSBlbHNlIGlmIChyb3cgPCAwKSB7XG4gICAgICAgICAgICByb3cgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdyA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIHJvdyA9IGxlbmd0aCAtIDE7XG4gICAgICAgICAgICBjb2x1bW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTtcbiAgICAgICAgaWYgKGNvbHVtbiA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBjb2x1bW4gPSBsaW5lLmxlbmd0aDtcbiAgICAgICAgY29sdW1uID0gTWF0aC5taW4oTWF0aC5tYXgoY29sdW1uLCAwKSwgbGluZS5sZW5ndGgpO1xuICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmNsb25lUG9zID0gZnVuY3Rpb24ocG9zKSB7XG4gICAgICAgIHJldHVybiB7cm93OiBwb3Mucm93LCBjb2x1bW46IHBvcy5jb2x1bW59O1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5wb3MgPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikge1xuICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5nZXRMZW5ndGgoKTtcbiAgICAgICAgaWYgKHBvc2l0aW9uLnJvdyA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgcG9zaXRpb24uY29sdW1uID0gdGhpcy5nZXRMaW5lKGxlbmd0aCAtIDEpLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIHBvc2l0aW9uLnJvdyk7XG4gICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPSBNYXRoLm1pbihNYXRoLm1heChwb3NpdGlvbi5jb2x1bW4sIDApLCB0aGlzLmdldExpbmUocG9zaXRpb24ucm93KS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICB9O1xuICAgIHRoaXMuaW5zZXJ0RnVsbExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykge1xuICAgICAgICByb3cgPSBNYXRoLm1pbihNYXRoLm1heChyb3csIDApLCB0aGlzLmdldExlbmd0aCgpKTtcbiAgICAgICAgdmFyIGNvbHVtbiA9IDA7XG4gICAgICAgIGlmIChyb3cgPCB0aGlzLmdldExlbmd0aCgpKSB7XG4gICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChbXCJcIl0pO1xuICAgICAgICAgICAgY29sdW1uID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpbmVzID0gW1wiXCJdLmNvbmNhdChsaW5lcyk7XG4gICAgICAgICAgICByb3ctLTtcbiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuJGxpbmVzW3Jvd10ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0sIGxpbmVzKTtcbiAgICB9OyAgICBcbiAgICB0aGlzLmluc2VydE1lcmdlZExpbmVzID0gZnVuY3Rpb24ocG9zaXRpb24sIGxpbmVzKSB7XG4gICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7XG4gICAgICAgIHZhciBlbmQgPSB7XG4gICAgICAgICAgICByb3c6IHN0YXJ0LnJvdyArIGxpbmVzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICBjb2x1bW46IChsaW5lcy5sZW5ndGggPT0gMSA/IHN0YXJ0LmNvbHVtbiA6IDApICsgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICB0aGlzLmFwcGx5RGVsdGEoe1xuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBlbmQsXG4gICAgICAgICAgICBhY3Rpb246IFwiaW5zZXJ0XCIsXG4gICAgICAgICAgICBsaW5lczogbGluZXNcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhlbmQpO1xuICAgIH07XG4gICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pO1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pO1xuICAgICAgICB0aGlzLmFwcGx5RGVsdGEoe1xuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBlbmQsXG4gICAgICAgICAgICBhY3Rpb246IFwicmVtb3ZlXCIsXG4gICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDogc3RhcnQsIGVuZDogZW5kfSlcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKHN0YXJ0KTtcbiAgICB9O1xuICAgIHRoaXMucmVtb3ZlSW5MaW5lID0gZnVuY3Rpb24ocm93LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKSB7XG4gICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhyb3csIHN0YXJ0Q29sdW1uKTtcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMuY2xpcHBlZFBvcyhyb3csIGVuZENvbHVtbik7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmFwcGx5RGVsdGEoe1xuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBlbmQsXG4gICAgICAgICAgICBhY3Rpb246IFwicmVtb3ZlXCIsXG4gICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDogc3RhcnQsIGVuZDogZW5kfSlcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhzdGFydCk7XG4gICAgfTtcbiAgICB0aGlzLnJlbW92ZUZ1bGxMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIGZpcnN0Um93ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZmlyc3RSb3cpLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7XG4gICAgICAgIGxhc3RSb3cgID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgbGFzdFJvdyApLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7XG4gICAgICAgIHZhciBkZWxldGVGaXJzdE5ld0xpbmUgPSBsYXN0Um93ID09IHRoaXMuZ2V0TGVuZ3RoKCkgLSAxICYmIGZpcnN0Um93ID4gMDtcbiAgICAgICAgdmFyIGRlbGV0ZUxhc3ROZXdMaW5lICA9IGxhc3RSb3cgIDwgdGhpcy5nZXRMZW5ndGgoKSAtIDE7XG4gICAgICAgIHZhciBzdGFydFJvdyA9ICggZGVsZXRlRmlyc3ROZXdMaW5lID8gZmlyc3RSb3cgLSAxICAgICAgICAgICAgICAgICAgOiBmaXJzdFJvdyAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgdmFyIHN0YXJ0Q29sID0gKCBkZWxldGVGaXJzdE5ld0xpbmUgPyB0aGlzLmdldExpbmUoc3RhcnRSb3cpLmxlbmd0aCA6IDAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICB2YXIgZW5kUm93ICAgPSAoIGRlbGV0ZUxhc3ROZXdMaW5lICA/IGxhc3RSb3cgKyAxICAgICAgICAgICAgICAgICAgIDogbGFzdFJvdyAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgIHZhciBlbmRDb2wgICA9ICggZGVsZXRlTGFzdE5ld0xpbmUgID8gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmdldExpbmUoZW5kUm93KS5sZW5ndGggKTsgXG4gICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2wsIGVuZFJvdywgZW5kQ29sKTtcbiAgICAgICAgdmFyIGRlbGV0ZWRMaW5lcyA9IHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmFwcGx5RGVsdGEoe1xuICAgICAgICAgICAgc3RhcnQ6IHJhbmdlLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiByYW5nZS5lbmQsXG4gICAgICAgICAgICBhY3Rpb246IFwicmVtb3ZlXCIsXG4gICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHJhbmdlKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZWRMaW5lcztcbiAgICB9O1xuICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICBpZiAocm93IDwgdGhpcy5nZXRMZW5ndGgoKSAtIDEgJiYgcm93ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMucG9zKHJvdywgdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMucG9zKHJvdyArIDEsIDApLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogXCJyZW1vdmVcIixcbiAgICAgICAgICAgICAgICBsaW5lczogW1wiXCIsIFwiXCJdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5yZXBsYWNlID0gZnVuY3Rpb24ocmFuZ2UsIHRleHQpIHtcbiAgICAgICAgaWYgKCEocmFuZ2UgaW5zdGFuY2VvZiBSYW5nZSkpXG4gICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4gICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCAmJiByYW5nZS5pc0VtcHR5KCkpXG4gICAgICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgIGlmICh0ZXh0ID09IHRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSlcbiAgICAgICAgICAgIHJldHVybiByYW5nZS5lbmQ7XG5cbiAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpO1xuICAgICAgICB2YXIgZW5kO1xuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiBlbmQ7XG4gICAgfTtcbiAgICB0aGlzLmFwcGx5RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7XG4gICAgICAgIGZvciAodmFyIGk9MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlEZWx0YShkZWx0YXNbaV0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnJldmVydERlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykge1xuICAgICAgICBmb3IgKHZhciBpPWRlbHRhcy5sZW5ndGgtMTsgaT49MDsgaS0tKSB7XG4gICAgICAgICAgICB0aGlzLnJldmVydERlbHRhKGRlbHRhc1tpXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuYXBwbHlEZWx0YSA9IGZ1bmN0aW9uKGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7XG4gICAgICAgIHZhciBpc0luc2VydCA9IGRlbHRhLmFjdGlvbiA9PSBcImluc2VydFwiO1xuICAgICAgICBpZiAoaXNJbnNlcnQgPyBkZWx0YS5saW5lcy5sZW5ndGggPD0gMSAmJiAhZGVsdGEubGluZXNbMF1cbiAgICAgICAgICAgIDogIVJhbmdlLmNvbXBhcmVQb2ludHMoZGVsdGEuc3RhcnQsIGRlbHRhLmVuZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKGlzSW5zZXJ0ICYmIGRlbHRhLmxpbmVzLmxlbmd0aCA+IDIwMDAwKVxuICAgICAgICAgICAgdGhpcy4kc3BsaXRBbmRhcHBseUxhcmdlRGVsdGEoZGVsdGEsIDIwMDAwKTtcbiAgICAgICAgYXBwbHlEZWx0YSh0aGlzLiRsaW5lcywgZGVsdGEsIGRvTm90VmFsaWRhdGUpO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VcIiwgZGVsdGEpO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy4kc3BsaXRBbmRhcHBseUxhcmdlRGVsdGEgPSBmdW5jdGlvbihkZWx0YSwgTUFYKSB7XG4gICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzO1xuICAgICAgICB2YXIgbCA9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgdmFyIHJvdyA9IGRlbHRhLnN0YXJ0LnJvdzsgXG4gICAgICAgIHZhciBjb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47XG4gICAgICAgIHZhciBmcm9tID0gMCwgdG8gPSAwO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBmcm9tID0gdG87XG4gICAgICAgICAgICB0byArPSBNQVggLSAxO1xuICAgICAgICAgICAgdmFyIGNodW5rID0gbGluZXMuc2xpY2UoZnJvbSwgdG8pO1xuICAgICAgICAgICAgaWYgKHRvID4gbCkge1xuICAgICAgICAgICAgICAgIGRlbHRhLmxpbmVzID0gY2h1bms7XG4gICAgICAgICAgICAgICAgZGVsdGEuc3RhcnQucm93ID0gcm93ICsgZnJvbTtcbiAgICAgICAgICAgICAgICBkZWx0YS5zdGFydC5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaHVuay5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKHtcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5wb3Mocm93ICsgZnJvbSwgY29sdW1uKSxcbiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMucG9zKHJvdyArIHRvLCBjb2x1bW4gPSAwKSxcbiAgICAgICAgICAgICAgICBhY3Rpb246IGRlbHRhLmFjdGlvbixcbiAgICAgICAgICAgICAgICBsaW5lczogY2h1bmtcbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICB9IHdoaWxlKHRydWUpO1xuICAgIH07XG4gICAgdGhpcy5yZXZlcnREZWx0YSA9IGZ1bmN0aW9uKGRlbHRhKSB7XG4gICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7XG4gICAgICAgICAgICBzdGFydDogdGhpcy5jbG9uZVBvcyhkZWx0YS5zdGFydCksXG4gICAgICAgICAgICBlbmQ6IHRoaXMuY2xvbmVQb3MoZGVsdGEuZW5kKSxcbiAgICAgICAgICAgIGFjdGlvbjogKGRlbHRhLmFjdGlvbiA9PSBcImluc2VydFwiID8gXCJyZW1vdmVcIiA6IFwiaW5zZXJ0XCIpLFxuICAgICAgICAgICAgbGluZXM6IGRlbHRhLmxpbmVzLnNsaWNlKClcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLmluZGV4VG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKGluZGV4LCBzdGFydFJvdykge1xuICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7XG4gICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMCwgbCA9IGxpbmVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaW5kZXggLT0gbGluZXNbaV0ubGVuZ3RoICsgbmV3bGluZUxlbmd0aDtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtyb3c6IGksIGNvbHVtbjogaW5kZXggKyBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RofTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge3JvdzogbC0xLCBjb2x1bW46IGxpbmVzW2wtMV0ubGVuZ3RofTtcbiAgICB9O1xuICAgIHRoaXMucG9zaXRpb25Ub0luZGV4ID0gZnVuY3Rpb24ocG9zLCBzdGFydFJvdykge1xuICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7XG4gICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgcm93ID0gTWF0aC5taW4ocG9zLnJvdywgbGluZXMubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0Um93IHx8IDA7IGkgPCByb3c7ICsraSlcbiAgICAgICAgICAgIGluZGV4ICs9IGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGg7XG5cbiAgICAgICAgcmV0dXJuIGluZGV4ICsgcG9zLmNvbHVtbjtcbiAgICB9O1xuXG59KS5jYWxsKERvY3VtZW50LnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2JhY2tncm91bmRfdG9rZW5pemVyXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9ldmVudF9lbWl0dGVyXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIG9vcCA9IGFjZXF1aXJlKFwiLi9saWIvb29wXCIpO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi9saWIvZXZlbnRfZW1pdHRlclwiKS5FdmVudEVtaXR0ZXI7XG5cbnZhciBCYWNrZ3JvdW5kVG9rZW5pemVyID0gZnVuY3Rpb24odG9rZW5pemVyLCBlZGl0b3IpIHtcbiAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gICAgdGhpcy5zdGF0ZXMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRMaW5lID0gMDtcbiAgICB0aGlzLnRva2VuaXplciA9IHRva2VuaXplcjtcblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMuJHdvcmtlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXNlbGYucnVubmluZykgeyByZXR1cm47IH1cblxuICAgICAgICB2YXIgd29ya2VyU3RhcnQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB2YXIgY3VycmVudExpbmUgPSBzZWxmLmN1cnJlbnRMaW5lO1xuICAgICAgICB2YXIgZW5kTGluZSA9IC0xO1xuICAgICAgICB2YXIgZG9jID0gc2VsZi5kb2M7XG5cbiAgICAgICAgdmFyIHN0YXJ0TGluZSA9IGN1cnJlbnRMaW5lO1xuICAgICAgICB3aGlsZSAoc2VsZi5saW5lc1tjdXJyZW50TGluZV0pXG4gICAgICAgICAgICBjdXJyZW50TGluZSsrO1xuICAgICAgICBcbiAgICAgICAgdmFyIGxlbiA9IGRvYy5nZXRMZW5ndGgoKTtcbiAgICAgICAgdmFyIHByb2Nlc3NlZExpbmVzID0gMDtcbiAgICAgICAgc2VsZi5ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHdoaWxlIChjdXJyZW50TGluZSA8IGxlbikge1xuICAgICAgICAgICAgc2VsZi4kdG9rZW5pemVSb3coY3VycmVudExpbmUpO1xuICAgICAgICAgICAgZW5kTGluZSA9IGN1cnJlbnRMaW5lO1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRMaW5lKys7XG4gICAgICAgICAgICB9IHdoaWxlIChzZWxmLmxpbmVzW2N1cnJlbnRMaW5lXSk7XG4gICAgICAgICAgICBwcm9jZXNzZWRMaW5lcyArKztcbiAgICAgICAgICAgIGlmICgocHJvY2Vzc2VkTGluZXMgJSA1ID09PSAwKSAmJiAobmV3IERhdGUoKSAtIHdvcmtlclN0YXJ0KSA+IDIwKSB7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHNlbGYucnVubmluZyA9IHNldFRpbWVvdXQoc2VsZi4kd29ya2VyLCAyMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5jdXJyZW50TGluZSA9IGN1cnJlbnRMaW5lO1xuICAgICAgICBcbiAgICAgICAgaWYgKGVuZExpbmUgPT0gLTEpXG4gICAgICAgICAgICBlbmRMaW5lID0gY3VycmVudExpbmU7XG5cbiAgICAgICAgaWYgKHN0YXJ0TGluZSA8PSBlbmRMaW5lKVxuICAgICAgICAgICAgc2VsZi5maXJlVXBkYXRlRXZlbnQoc3RhcnRMaW5lLCBlbmRMaW5lKTtcbiAgICB9O1xufTtcblxuKGZ1bmN0aW9uKCl7XG5cbiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7XG4gICAgdGhpcy5zZXRUb2tlbml6ZXIgPSBmdW5jdGlvbih0b2tlbml6ZXIpIHtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIgPSB0b2tlbml6ZXI7XG4gICAgICAgIHRoaXMubGluZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zdGF0ZXMgPSBbXTtcblxuICAgICAgICB0aGlzLnN0YXJ0KDApO1xuICAgIH07XG4gICAgdGhpcy5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKGRvYykge1xuICAgICAgICB0aGlzLmRvYyA9IGRvYztcbiAgICAgICAgdGhpcy5saW5lcyA9IFtdO1xuICAgICAgICB0aGlzLnN0YXRlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgIH07XG4gICAgdGhpcy5maXJlVXBkYXRlRXZlbnQgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykge1xuICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgIGZpcnN0OiBmaXJzdFJvdyxcbiAgICAgICAgICAgIGxhc3Q6IGxhc3RSb3dcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fc2lnbmFsKFwidXBkYXRlXCIsIHtkYXRhOiBkYXRhfSk7XG4gICAgfTtcbiAgICB0aGlzLnN0YXJ0ID0gZnVuY3Rpb24oc3RhcnRSb3cpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50TGluZSA9IE1hdGgubWluKHN0YXJ0Um93IHx8IDAsIHRoaXMuY3VycmVudExpbmUsIHRoaXMuZG9jLmdldExlbmd0aCgpKTtcbiAgICAgICAgdGhpcy5saW5lcy5zcGxpY2UodGhpcy5jdXJyZW50TGluZSwgdGhpcy5saW5lcy5sZW5ndGgpO1xuICAgICAgICB0aGlzLnN0YXRlcy5zcGxpY2UodGhpcy5jdXJyZW50TGluZSwgdGhpcy5zdGF0ZXMubGVuZ3RoKTtcblxuICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgdGhpcy5ydW5uaW5nID0gc2V0VGltZW91dCh0aGlzLiR3b3JrZXIsIDcwMCk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnNjaGVkdWxlU3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJ1bm5pbmcpXG4gICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSBzZXRUaW1lb3V0KHRoaXMuJHdvcmtlciwgNzAwKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kdXBkYXRlT25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkge1xuICAgICAgICB2YXIgc3RhcnRSb3cgPSBkZWx0YS5zdGFydC5yb3c7XG4gICAgICAgIHZhciBsZW4gPSBkZWx0YS5lbmQucm93IC0gc3RhcnRSb3c7XG5cbiAgICAgICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5saW5lc1tzdGFydFJvd10gPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSBcInJlbW92ZVwiKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmVzLnNwbGljZShzdGFydFJvdywgbGVuICsgMSwgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlcy5zcGxpY2Uoc3RhcnRSb3csIGxlbiArIDEsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW4gKyAxKTtcbiAgICAgICAgICAgIGFyZ3MudW5zaGlmdChzdGFydFJvdywgMSk7XG4gICAgICAgICAgICB0aGlzLmxpbmVzLnNwbGljZS5hcHBseSh0aGlzLmxpbmVzLCBhcmdzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVzLnNwbGljZS5hcHBseSh0aGlzLnN0YXRlcywgYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN1cnJlbnRMaW5lID0gTWF0aC5taW4oc3RhcnRSb3csIHRoaXMuY3VycmVudExpbmUsIHRoaXMuZG9jLmdldExlbmd0aCgpKTtcblxuICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICB9O1xuICAgIHRoaXMuc3RvcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5ydW5uaW5nKVxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucnVubmluZyk7XG4gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgIH07XG4gICAgdGhpcy5nZXRUb2tlbnMgPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGluZXNbcm93XSB8fCB0aGlzLiR0b2tlbml6ZVJvdyhyb3cpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTdGF0ZSA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50TGluZSA9PSByb3cpXG4gICAgICAgICAgICB0aGlzLiR0b2tlbml6ZVJvdyhyb3cpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZXNbcm93XSB8fCBcInN0YXJ0XCI7XG4gICAgfTtcblxuICAgIHRoaXMuJHRva2VuaXplUm93ID0gZnVuY3Rpb24ocm93KSB7XG4gICAgICAgIHZhciBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpO1xuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlc1tyb3cgLSAxXTtcblxuICAgICAgICB2YXIgZGF0YSA9IHRoaXMudG9rZW5pemVyLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUsIHJvdyk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGVzW3Jvd10gKyBcIlwiICE9PSBkYXRhLnN0YXRlICsgXCJcIikge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZXNbcm93XSA9IGRhdGEuc3RhdGU7XG4gICAgICAgICAgICB0aGlzLmxpbmVzW3JvdyArIDFdID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRMaW5lID4gcm93ICsgMSlcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMaW5lID0gcm93ICsgMTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRMaW5lID09IHJvdykge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGluZSA9IHJvdyArIDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5saW5lc1tyb3ddID0gZGF0YS50b2tlbnM7XG4gICAgfTtcblxufSkuY2FsbChCYWNrZ3JvdW5kVG9rZW5pemVyLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuQmFja2dyb3VuZFRva2VuaXplciA9IEJhY2tncm91bmRUb2tlbml6ZXI7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9zZWFyY2hfaGlnaGxpZ2h0XCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2xhbmdcIixcImFjZS9saWIvb29wXCIsXCJhY2UvcmFuZ2VcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgbGFuZyA9IGFjZXF1aXJlKFwiLi9saWIvbGFuZ1wiKTtcbnZhciBvb3AgPSBhY2VxdWlyZShcIi4vbGliL29vcFwiKTtcbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi9yYW5nZVwiKS5SYW5nZTtcblxudmFyIFNlYXJjaEhpZ2hsaWdodCA9IGZ1bmN0aW9uKHJlZ0V4cCwgY2xhenosIHR5cGUpIHtcbiAgICB0aGlzLnNldFJlZ2V4cChyZWdFeHApO1xuICAgIHRoaXMuY2xhenogPSBjbGF6ejtcbiAgICB0aGlzLnR5cGUgPSB0eXBlIHx8IFwidGV4dFwiO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuTUFYX1JBTkdFUyA9IDUwMDtcbiAgICBcbiAgICB0aGlzLnNldFJlZ2V4cCA9IGZ1bmN0aW9uKHJlZ0V4cCkge1xuICAgICAgICBpZiAodGhpcy5yZWdFeHArXCJcIiA9PSByZWdFeHArXCJcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5yZWdFeHAgPSByZWdFeHA7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBbXTtcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbihodG1sLCBtYXJrZXJMYXllciwgc2Vzc2lvbiwgY29uZmlnKSB7XG4gICAgICAgIGlmICghdGhpcy5yZWdFeHApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBzdGFydCA9IGNvbmZpZy5maXJzdFJvdywgZW5kID0gY29uZmlnLmxhc3RSb3c7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5jYWNoZVtpXTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJhbmdlcyA9IGxhbmcuZ2V0TWF0Y2hPZmZzZXRzKHNlc3Npb24uZ2V0TGluZShpKSwgdGhpcy5yZWdFeHApO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZXMubGVuZ3RoID4gdGhpcy5NQVhfUkFOR0VTKVxuICAgICAgICAgICAgICAgICAgICByYW5nZXMgPSByYW5nZXMuc2xpY2UoMCwgdGhpcy5NQVhfUkFOR0VTKTtcbiAgICAgICAgICAgICAgICByYW5nZXMgPSByYW5nZXMubWFwKGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2UoaSwgbWF0Y2gub2Zmc2V0LCBpLCBtYXRjaC5vZmZzZXQgKyBtYXRjaC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVbaV0gPSByYW5nZXMubGVuZ3RoID8gcmFuZ2VzIDogXCJcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IHJhbmdlcy5sZW5ndGg7IGogLS07ICkge1xuICAgICAgICAgICAgICAgIG1hcmtlckxheWVyLmRyYXdTaW5nbGVMaW5lTWFya2VyKFxuICAgICAgICAgICAgICAgICAgICBodG1sLCByYW5nZXNbal0udG9TY3JlZW5SYW5nZShzZXNzaW9uKSwgdGhpcy5jbGF6eiwgY29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbn0pLmNhbGwoU2VhcmNoSGlnaGxpZ2h0LnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuU2VhcmNoSGlnaGxpZ2h0ID0gU2VhcmNoSGlnaGxpZ2h0O1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGRfbGluZVwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL3JhbmdlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIFJhbmdlID0gYWNlcXVpcmUoXCIuLi9yYW5nZVwiKS5SYW5nZTtcbmZ1bmN0aW9uIEZvbGRMaW5lKGZvbGREYXRhLCBmb2xkcykge1xuICAgIHRoaXMuZm9sZERhdGEgPSBmb2xkRGF0YTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb2xkcykpIHtcbiAgICAgICAgdGhpcy5mb2xkcyA9IGZvbGRzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvbGRzID0gdGhpcy5mb2xkcyA9IFsgZm9sZHMgXTtcbiAgICB9XG5cbiAgICB2YXIgbGFzdCA9IGZvbGRzW2ZvbGRzLmxlbmd0aCAtIDFdO1xuICAgIHRoaXMucmFuZ2UgPSBuZXcgUmFuZ2UoZm9sZHNbMF0uc3RhcnQucm93LCBmb2xkc1swXS5zdGFydC5jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0LmVuZC5yb3csIGxhc3QuZW5kLmNvbHVtbik7XG4gICAgdGhpcy5zdGFydCA9IHRoaXMucmFuZ2Uuc3RhcnQ7XG4gICAgdGhpcy5lbmQgICA9IHRoaXMucmFuZ2UuZW5kO1xuXG4gICAgdGhpcy5mb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHtcbiAgICAgICAgZm9sZC5zZXRGb2xkTGluZSh0aGlzKTtcbiAgICB9LCB0aGlzKTtcbn1cblxuKGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2hpZnRSb3cgPSBmdW5jdGlvbihzaGlmdCkge1xuICAgICAgICB0aGlzLnN0YXJ0LnJvdyArPSBzaGlmdDtcbiAgICAgICAgdGhpcy5lbmQucm93ICs9IHNoaWZ0O1xuICAgICAgICB0aGlzLmZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkge1xuICAgICAgICAgICAgZm9sZC5zdGFydC5yb3cgKz0gc2hpZnQ7XG4gICAgICAgICAgICBmb2xkLmVuZC5yb3cgKz0gc2hpZnQ7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLmFkZEZvbGQgPSBmdW5jdGlvbihmb2xkKSB7XG4gICAgICAgIGlmIChmb2xkLnNhbWVSb3cpIHtcbiAgICAgICAgICAgIGlmIChmb2xkLnN0YXJ0LnJvdyA8IHRoaXMuc3RhcnRSb3cgfHwgZm9sZC5lbmRSb3cgPiB0aGlzLmVuZFJvdykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGFkZCBhIGZvbGQgdG8gdGhpcyBGb2xkTGluZSBhcyBpdCBoYXMgbm8gY29ubmVjdGlvblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZm9sZHMucHVzaChmb2xkKTtcbiAgICAgICAgICAgIHRoaXMuZm9sZHMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC1hLnJhbmdlLmNvbXBhcmVFbmQoYi5zdGFydC5yb3csIGIuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMucmFuZ2UuY29tcGFyZUVuZChmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IGZvbGQuZW5kLnJvdztcbiAgICAgICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSAgZm9sZC5lbmQuY29sdW1uO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJhbmdlLmNvbXBhcmVTdGFydChmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVtbikgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSBmb2xkLnN0YXJ0LnJvdztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvbGQuc3RhcnQucm93ID09IHRoaXMuZW5kLnJvdykge1xuICAgICAgICAgICAgdGhpcy5mb2xkcy5wdXNoKGZvbGQpO1xuICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gZm9sZC5lbmQucm93O1xuICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uID0gZm9sZC5lbmQuY29sdW1uO1xuICAgICAgICB9IGVsc2UgaWYgKGZvbGQuZW5kLnJvdyA9PSB0aGlzLnN0YXJ0LnJvdykge1xuICAgICAgICAgICAgdGhpcy5mb2xkcy51bnNoaWZ0KGZvbGQpO1xuICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSBmb2xkLnN0YXJ0LnJvdztcbiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gZm9sZC5zdGFydC5jb2x1bW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcnlpbmcgdG8gYWRkIGZvbGQgdG8gRm9sZFJvdyB0aGF0IGRvZXNuJ3QgaGF2ZSBhIG1hdGNoaW5nIHJvd1wiKTtcbiAgICAgICAgfVxuICAgICAgICBmb2xkLmZvbGRMaW5lID0gdGhpcztcbiAgICB9O1xuXG4gICAgdGhpcy5jb250YWluc1JvdyA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICByZXR1cm4gcm93ID49IHRoaXMuc3RhcnQucm93ICYmIHJvdyA8PSB0aGlzLmVuZC5yb3c7XG4gICAgfTtcblxuICAgIHRoaXMud2FsayA9IGZ1bmN0aW9uKGNhbGxiYWNrLCBlbmRSb3csIGVuZENvbHVtbikge1xuICAgICAgICB2YXIgbGFzdEVuZCA9IDAsXG4gICAgICAgICAgICBmb2xkcyA9IHRoaXMuZm9sZHMsXG4gICAgICAgICAgICBmb2xkLFxuICAgICAgICAgICAgY21wLCBzdG9wLCBpc05ld1JvdyA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVuZFJvdyA9PSBudWxsKSB7XG4gICAgICAgICAgICBlbmRSb3cgPSB0aGlzLmVuZC5yb3c7XG4gICAgICAgICAgICBlbmRDb2x1bW4gPSB0aGlzLmVuZC5jb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb2xkID0gZm9sZHNbaV07XG5cbiAgICAgICAgICAgIGNtcCA9IGZvbGQucmFuZ2UuY29tcGFyZVN0YXJ0KGVuZFJvdywgZW5kQ29sdW1uKTtcbiAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBlbmRSb3csIGVuZENvbHVtbiwgbGFzdEVuZCwgaXNOZXdSb3cpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RvcCA9IGNhbGxiYWNrKG51bGwsIGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbiwgbGFzdEVuZCwgaXNOZXdSb3cpO1xuICAgICAgICAgICAgc3RvcCA9ICFzdG9wICYmIGNhbGxiYWNrKGZvbGQucGxhY2Vob2xkZXIsIGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbiwgbGFzdEVuZCk7XG4gICAgICAgICAgICBpZiAoc3RvcCB8fCBjbXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc05ld1JvdyA9ICFmb2xkLnNhbWVSb3c7XG4gICAgICAgICAgICBsYXN0RW5kID0gZm9sZC5lbmQuY29sdW1uO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGVuZFJvdywgZW5kQ29sdW1uLCBsYXN0RW5kLCBpc05ld1Jvdyk7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0TmV4dEZvbGRUbyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHZhciBmb2xkLCBjbXA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5mb2xkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9sZCA9IHRoaXMuZm9sZHNbaV07XG4gICAgICAgICAgICBjbXAgPSBmb2xkLnJhbmdlLmNvbXBhcmVFbmQocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGZvbGQ6IGZvbGQsXG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IFwiYWZ0ZXJcIlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGZvbGQ6IGZvbGQsXG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IFwiaW5zaWRlXCJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB0aGlzLmFkZFJlbW92ZUNoYXJzID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIGxlbikge1xuICAgICAgICB2YXIgcmV0ID0gdGhpcy5nZXROZXh0Rm9sZFRvKHJvdywgY29sdW1uKSxcbiAgICAgICAgICAgIGZvbGQsIGZvbGRzO1xuICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgICBmb2xkID0gcmV0LmZvbGQ7XG4gICAgICAgICAgICBpZiAocmV0LmtpbmQgPT0gXCJpbnNpZGVcIlxuICAgICAgICAgICAgICAgICYmIGZvbGQuc3RhcnQuY29sdW1uICE9IGNvbHVtblxuICAgICAgICAgICAgICAgICYmIGZvbGQuc3RhcnQucm93ICE9IHJvdylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cocm93LCBjb2x1bW4sIGZvbGQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkLnN0YXJ0LnJvdyA9PSByb3cpIHtcbiAgICAgICAgICAgICAgICBmb2xkcyA9IHRoaXMuZm9sZHM7XG4gICAgICAgICAgICAgICAgdmFyIGkgPSBmb2xkcy5pbmRleE9mKGZvbGQpO1xuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uICs9IGxlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChpOyBpIDwgZm9sZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZm9sZCA9IGZvbGRzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb2xkLnN0YXJ0LmNvbHVtbiArPSBsZW47XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9sZC5zYW1lUm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9sZC5lbmQuY29sdW1uICs9IGxlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uICs9IGxlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnNwbGl0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0TmV4dEZvbGRUbyhyb3csIGNvbHVtbik7XG4gICAgICAgIFxuICAgICAgICBpZiAoIXBvcyB8fCBwb3Mua2luZCA9PSBcImluc2lkZVwiKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBcbiAgICAgICAgdmFyIGZvbGQgPSBwb3MuZm9sZDtcbiAgICAgICAgdmFyIGZvbGRzID0gdGhpcy5mb2xkcztcbiAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy5mb2xkRGF0YTtcbiAgICAgICAgXG4gICAgICAgIHZhciBpID0gZm9sZHMuaW5kZXhPZihmb2xkKTtcbiAgICAgICAgdmFyIGZvbGRCZWZvcmUgPSBmb2xkc1tpIC0gMV07XG4gICAgICAgIHRoaXMuZW5kLnJvdyA9IGZvbGRCZWZvcmUuZW5kLnJvdztcbiAgICAgICAgdGhpcy5lbmQuY29sdW1uID0gZm9sZEJlZm9yZS5lbmQuY29sdW1uO1xuICAgICAgICBmb2xkcyA9IGZvbGRzLnNwbGljZShpLCBmb2xkcy5sZW5ndGggLSBpKTtcblxuICAgICAgICB2YXIgbmV3Rm9sZExpbmUgPSBuZXcgRm9sZExpbmUoZm9sZERhdGEsIGZvbGRzKTtcbiAgICAgICAgZm9sZERhdGEuc3BsaWNlKGZvbGREYXRhLmluZGV4T2YodGhpcykgKyAxLCAwLCBuZXdGb2xkTGluZSk7XG4gICAgICAgIHJldHVybiBuZXdGb2xkTGluZTtcbiAgICB9O1xuXG4gICAgdGhpcy5tZXJnZSA9IGZ1bmN0aW9uKGZvbGRMaW5lTmV4dCkge1xuICAgICAgICB2YXIgZm9sZHMgPSBmb2xkTGluZU5leHQuZm9sZHM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9sZChmb2xkc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy5mb2xkRGF0YTtcbiAgICAgICAgZm9sZERhdGEuc3BsaWNlKGZvbGREYXRhLmluZGV4T2YoZm9sZExpbmVOZXh0KSwgMSk7XG4gICAgfTtcblxuICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJldCA9IFt0aGlzLnJhbmdlLnRvU3RyaW5nKCkgKyBcIjogW1wiIF07XG5cbiAgICAgICAgdGhpcy5mb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHtcbiAgICAgICAgICAgIHJldC5wdXNoKFwiICBcIiArIGZvbGQudG9TdHJpbmcoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXQucHVzaChcIl1cIik7XG4gICAgICAgIHJldHVybiByZXQuam9pbihcIlxcblwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pZHhUb1Bvc2l0aW9uID0gZnVuY3Rpb24oaWR4KSB7XG4gICAgICAgIHZhciBsYXN0Rm9sZEVuZENvbHVtbiA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZvbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZm9sZCA9IHRoaXMuZm9sZHNbaV07XG5cbiAgICAgICAgICAgIGlkeCAtPSBmb2xkLnN0YXJ0LmNvbHVtbiAtIGxhc3RGb2xkRW5kQ29sdW1uO1xuICAgICAgICAgICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByb3c6IGZvbGQuc3RhcnQucm93LFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGZvbGQuc3RhcnQuY29sdW1uICsgaWR4XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWR4IC09IGZvbGQucGxhY2Vob2xkZXIubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9sZC5zdGFydDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGFzdEZvbGRFbmRDb2x1bW4gPSBmb2xkLmVuZC5jb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm93OiB0aGlzLmVuZC5yb3csXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuZW5kLmNvbHVtbiArIGlkeFxuICAgICAgICB9O1xuICAgIH07XG59KS5jYWxsKEZvbGRMaW5lLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuRm9sZExpbmUgPSBGb2xkTGluZTtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL3JhbmdlX2xpc3RcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9yYW5nZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgUmFuZ2UgPSBhY2VxdWlyZShcIi4vcmFuZ2VcIikuUmFuZ2U7XG52YXIgY29tcGFyZVBvaW50cyA9IFJhbmdlLmNvbXBhcmVQb2ludHM7XG5cbnZhciBSYW5nZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJhbmdlcyA9IFtdO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY29tcGFyZVBvaW50cyA9IGNvbXBhcmVQb2ludHM7XG5cbiAgICB0aGlzLnBvaW50SW5kZXggPSBmdW5jdGlvbihwb3MsIGV4Y2x1ZGVFZGdlcywgc3RhcnRJbmRleCkge1xuICAgICAgICB2YXIgbGlzdCA9IHRoaXMucmFuZ2VzO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4IHx8IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2UgPSBsaXN0W2ldO1xuICAgICAgICAgICAgdmFyIGNtcEVuZCA9IGNvbXBhcmVQb2ludHMocG9zLCByYW5nZS5lbmQpO1xuICAgICAgICAgICAgaWYgKGNtcEVuZCA+IDApXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB2YXIgY21wU3RhcnQgPSBjb21wYXJlUG9pbnRzKHBvcywgcmFuZ2Uuc3RhcnQpO1xuICAgICAgICAgICAgaWYgKGNtcEVuZCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhjbHVkZUVkZ2VzICYmIGNtcFN0YXJ0ICE9PSAwID8gLWktMiA6IGk7XG4gICAgICAgICAgICBpZiAoY21wU3RhcnQgPiAwIHx8IChjbXBTdGFydCA9PT0gMCAmJiAhZXhjbHVkZUVkZ2VzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcblxuICAgICAgICAgICAgcmV0dXJuIC1pLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC1pIC0gMTtcbiAgICB9O1xuXG4gICAgdGhpcy5hZGQgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICB2YXIgZXhjbHVkZUVkZ2VzID0gIXJhbmdlLmlzRW1wdHkoKTtcbiAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSB0aGlzLnBvaW50SW5kZXgocmFuZ2Uuc3RhcnQsIGV4Y2x1ZGVFZGdlcyk7XG4gICAgICAgIGlmIChzdGFydEluZGV4IDwgMClcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAtc3RhcnRJbmRleCAtIDE7XG5cbiAgICAgICAgdmFyIGVuZEluZGV4ID0gdGhpcy5wb2ludEluZGV4KHJhbmdlLmVuZCwgZXhjbHVkZUVkZ2VzLCBzdGFydEluZGV4KTtcblxuICAgICAgICBpZiAoZW5kSW5kZXggPCAwKVxuICAgICAgICAgICAgZW5kSW5kZXggPSAtZW5kSW5kZXggLSAxO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBlbmRJbmRleCsrO1xuICAgICAgICByZXR1cm4gdGhpcy5yYW5nZXMuc3BsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4IC0gc3RhcnRJbmRleCwgcmFuZ2UpO1xuICAgIH07XG5cbiAgICB0aGlzLmFkZExpc3QgPSBmdW5jdGlvbihsaXN0KSB7XG4gICAgICAgIHZhciByZW1vdmVkID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSBsaXN0Lmxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICAgIHJlbW92ZWQucHVzaC5hcHBseShyZW1vdmVkLCB0aGlzLmFkZChsaXN0W2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfTtcblxuICAgIHRoaXMuc3Vic3RyYWN0UG9pbnQgPSBmdW5jdGlvbihwb3MpIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLnBvaW50SW5kZXgocG9zKTtcblxuICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VzLnNwbGljZShpLCAxKTtcbiAgICB9O1xuICAgIHRoaXMubWVyZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJlbW92ZWQgPSBbXTtcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLnJhbmdlcztcbiAgICAgICAgXG4gICAgICAgIGxpc3QgPSBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVQb2ludHMoYS5zdGFydCwgYi5zdGFydCk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgdmFyIG5leHQgPSBsaXN0WzBdLCByYW5nZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByYW5nZSA9IG5leHQ7XG4gICAgICAgICAgICBuZXh0ID0gbGlzdFtpXTtcbiAgICAgICAgICAgIHZhciBjbXAgPSBjb21wYXJlUG9pbnRzKHJhbmdlLmVuZCwgbmV4dC5zdGFydCk7XG4gICAgICAgICAgICBpZiAoY21wIDwgMClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKGNtcCA9PSAwICYmICFyYW5nZS5pc0VtcHR5KCkgJiYgIW5leHQuaXNFbXB0eSgpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoY29tcGFyZVBvaW50cyhyYW5nZS5lbmQsIG5leHQuZW5kKSA8IDApIHtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmQucm93ID0gbmV4dC5lbmQucm93O1xuICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSBuZXh0LmVuZC5jb2x1bW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKG5leHQpO1xuICAgICAgICAgICAgbmV4dCA9IHJhbmdlO1xuICAgICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLnJhbmdlcyA9IGxpc3Q7XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfTtcblxuICAgIHRoaXMuY29udGFpbnMgPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICByZXR1cm4gdGhpcy5wb2ludEluZGV4KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KSA+PSAwO1xuICAgIH07XG5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbihwb3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9pbnRJbmRleChwb3MpID49IDA7XG4gICAgfTtcblxuICAgIHRoaXMucmFuZ2VBdFBvaW50ID0gZnVuY3Rpb24ocG9zKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy5wb2ludEluZGV4KHBvcyk7XG4gICAgICAgIGlmIChpID49IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYW5nZXNbaV07XG4gICAgfTtcblxuXG4gICAgdGhpcy5jbGlwUm93cyA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBlbmRSb3cpIHtcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLnJhbmdlcztcbiAgICAgICAgaWYgKGxpc3RbMF0uc3RhcnQucm93ID4gZW5kUm93IHx8IGxpc3RbbGlzdC5sZW5ndGggLSAxXS5zdGFydC5yb3cgPCBzdGFydFJvdylcbiAgICAgICAgICAgIHJldHVybiBbXTtcblxuICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMucG9pbnRJbmRleCh7cm93OiBzdGFydFJvdywgY29sdW1uOiAwfSk7XG4gICAgICAgIGlmIChzdGFydEluZGV4IDwgMClcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAtc3RhcnRJbmRleCAtIDE7XG4gICAgICAgIHZhciBlbmRJbmRleCA9IHRoaXMucG9pbnRJbmRleCh7cm93OiBlbmRSb3csIGNvbHVtbjogMH0sIHN0YXJ0SW5kZXgpO1xuICAgICAgICBpZiAoZW5kSW5kZXggPCAwKVxuICAgICAgICAgICAgZW5kSW5kZXggPSAtZW5kSW5kZXggLSAxO1xuXG4gICAgICAgIHZhciBjbGlwcGVkID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykge1xuICAgICAgICAgICAgY2xpcHBlZC5wdXNoKGxpc3RbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGlwcGVkO1xuICAgIH07XG5cbiAgICB0aGlzLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYW5nZXMuc3BsaWNlKDAsIHRoaXMucmFuZ2VzLmxlbmd0aCk7XG4gICAgfTtcblxuICAgIHRoaXMuYXR0YWNoID0gZnVuY3Rpb24oc2Vzc2lvbikge1xuICAgICAgICBpZiAodGhpcy5zZXNzaW9uKVxuICAgICAgICAgICAgdGhpcy5kZXRhY2goKTtcblxuICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy4kb25DaGFuZ2UuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLnNlc3Npb24ub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2UpO1xuICAgIH07XG5cbiAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2Vzc2lvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUxpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdGhpcy4kb25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkge1xuICAgICAgICBpZiAoZGVsdGEuYWN0aW9uID09IFwiaW5zZXJ0XCIpe1xuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gZGVsdGEuc3RhcnQ7XG4gICAgICAgICAgICB2YXIgZW5kID0gZGVsdGEuZW5kO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGVuZCA9IGRlbHRhLnN0YXJ0O1xuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gZGVsdGEuZW5kO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdGFydFJvdyA9IHN0YXJ0LnJvdztcbiAgICAgICAgdmFyIGVuZFJvdyA9IGVuZC5yb3c7XG4gICAgICAgIHZhciBsaW5lRGlmID0gZW5kUm93IC0gc3RhcnRSb3c7XG5cbiAgICAgICAgdmFyIGNvbERpZmYgPSAtc3RhcnQuY29sdW1uICsgZW5kLmNvbHVtbjtcbiAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMucmFuZ2VzO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gcmFuZ2VzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgdmFyIHIgPSByYW5nZXNbaV07XG4gICAgICAgICAgICBpZiAoci5lbmQucm93IDwgc3RhcnRSb3cpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoci5zdGFydC5yb3cgPiBzdGFydFJvdylcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgaWYgKHIuc3RhcnQucm93ID09IHN0YXJ0Um93ICYmIHIuc3RhcnQuY29sdW1uID49IHN0YXJ0LmNvbHVtbiApIHtcbiAgICAgICAgICAgICAgICBpZiAoci5zdGFydC5jb2x1bW4gPT0gc3RhcnQuY29sdW1uICYmIHRoaXMuJGluc2VydFJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgci5zdGFydC5jb2x1bW4gKz0gY29sRGlmZjtcbiAgICAgICAgICAgICAgICAgICAgci5zdGFydC5yb3cgKz0gbGluZURpZjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoci5lbmQucm93ID09IHN0YXJ0Um93ICYmIHIuZW5kLmNvbHVtbiA+PSBzdGFydC5jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoci5lbmQuY29sdW1uID09IHN0YXJ0LmNvbHVtbiAmJiB0aGlzLiRpbnNlcnRSaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHIuZW5kLmNvbHVtbiA9PSBzdGFydC5jb2x1bW4gJiYgY29sRGlmZiA+IDAgJiYgaSA8IG4gLSAxKSB7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAoci5lbmQuY29sdW1uID4gci5zdGFydC5jb2x1bW4gJiYgci5lbmQuY29sdW1uID09IHJhbmdlc1tpKzFdLnN0YXJ0LmNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZW5kLmNvbHVtbiAtPSBjb2xEaWZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByLmVuZC5jb2x1bW4gKz0gY29sRGlmZjtcbiAgICAgICAgICAgICAgICByLmVuZC5yb3cgKz0gbGluZURpZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5lRGlmICE9IDAgJiYgaSA8IG4pIHtcbiAgICAgICAgICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSByYW5nZXNbaV07XG4gICAgICAgICAgICAgICAgci5zdGFydC5yb3cgKz0gbGluZURpZjtcbiAgICAgICAgICAgICAgICByLmVuZC5yb3cgKz0gbGluZURpZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbn0pLmNhbGwoUmFuZ2VMaXN0LnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuUmFuZ2VMaXN0ID0gUmFuZ2VMaXN0O1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGRcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9yYW5nZVwiLFwiYWNlL3JhbmdlX2xpc3RcIixcImFjZS9saWIvb29wXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIFJhbmdlID0gYWNlcXVpcmUoXCIuLi9yYW5nZVwiKS5SYW5nZTtcbnZhciBSYW5nZUxpc3QgPSBhY2VxdWlyZShcIi4uL3JhbmdlX2xpc3RcIikuUmFuZ2VMaXN0O1xudmFyIG9vcCA9IGFjZXF1aXJlKFwiLi4vbGliL29vcFwiKTtcbnZhciBGb2xkID0gZXhwb3J0cy5Gb2xkID0gZnVuY3Rpb24ocmFuZ2UsIHBsYWNlaG9sZGVyKSB7XG4gICAgdGhpcy5mb2xkTGluZSA9IG51bGw7XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgICB0aGlzLnN0YXJ0ID0gcmFuZ2Uuc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSByYW5nZS5lbmQ7XG5cbiAgICB0aGlzLnNhbWVSb3cgPSByYW5nZS5zdGFydC5yb3cgPT0gcmFuZ2UuZW5kLnJvdztcbiAgICB0aGlzLnN1YkZvbGRzID0gdGhpcy5yYW5nZXMgPSBbXTtcbn07XG5cbm9vcC5pbmhlcml0cyhGb2xkLCBSYW5nZUxpc3QpO1xuXG4oZnVuY3Rpb24oKSB7XG5cbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAnXCInICsgdGhpcy5wbGFjZWhvbGRlciArICdcIiAnICsgdGhpcy5yYW5nZS50b1N0cmluZygpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldEZvbGRMaW5lID0gZnVuY3Rpb24oZm9sZExpbmUpIHtcbiAgICAgICAgdGhpcy5mb2xkTGluZSA9IGZvbGRMaW5lO1xuICAgICAgICB0aGlzLnN1YkZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkge1xuICAgICAgICAgICAgZm9sZC5zZXRGb2xkTGluZShmb2xkTGluZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByYW5nZSA9IHRoaXMucmFuZ2UuY2xvbmUoKTtcbiAgICAgICAgdmFyIGZvbGQgPSBuZXcgRm9sZChyYW5nZSwgdGhpcy5wbGFjZWhvbGRlcik7XG4gICAgICAgIHRoaXMuc3ViRm9sZHMuZm9yRWFjaChmdW5jdGlvbihzdWJGb2xkKSB7XG4gICAgICAgICAgICBmb2xkLnN1YkZvbGRzLnB1c2goc3ViRm9sZC5jbG9uZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZvbGQuY29sbGFwc2VDaGlsZHJlbiA9IHRoaXMuY29sbGFwc2VDaGlsZHJlbjtcbiAgICAgICAgcmV0dXJuIGZvbGQ7XG4gICAgfTtcblxuICAgIHRoaXMuYWRkU3ViRm9sZCA9IGZ1bmN0aW9uKGZvbGQpIHtcbiAgICAgICAgaWYgKHRoaXMucmFuZ2UuaXNFcXVhbChmb2xkKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoIXRoaXMucmFuZ2UuY29udGFpbnNSYW5nZShmb2xkKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgZm9sZCBjYW4ndCBpbnRlcnNlY3QgYWxyZWFkeSBleGlzdGluZyBmb2xkXCIgKyBmb2xkLnJhbmdlICsgdGhpcy5yYW5nZSk7XG4gICAgICAgIGNvbnN1bWVSYW5nZShmb2xkLCB0aGlzLnN0YXJ0KTtcblxuICAgICAgICB2YXIgcm93ID0gZm9sZC5zdGFydC5yb3csIGNvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgY21wID0gLTE7IGkgPCB0aGlzLnN1YkZvbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbXAgPSB0aGlzLnN1YkZvbGRzW2ldLnJhbmdlLmNvbXBhcmUocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNtcCAhPSAxKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhZnRlclN0YXJ0ID0gdGhpcy5zdWJGb2xkc1tpXTtcblxuICAgICAgICBpZiAoY21wID09IDApXG4gICAgICAgICAgICByZXR1cm4gYWZ0ZXJTdGFydC5hZGRTdWJGb2xkKGZvbGQpO1xuICAgICAgICB2YXIgcm93ID0gZm9sZC5yYW5nZS5lbmQucm93LCBjb2x1bW4gPSBmb2xkLnJhbmdlLmVuZC5jb2x1bW47XG4gICAgICAgIGZvciAodmFyIGogPSBpLCBjbXAgPSAtMTsgaiA8IHRoaXMuc3ViRm9sZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNtcCA9IHRoaXMuc3ViRm9sZHNbal0ucmFuZ2UuY29tcGFyZShyb3csIGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoY21wICE9IDEpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFmdGVyRW5kID0gdGhpcy5zdWJGb2xkc1tqXTtcblxuICAgICAgICBpZiAoY21wID09IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGZvbGQgY2FuJ3QgaW50ZXJzZWN0IGFscmVhZHkgZXhpc3RpbmcgZm9sZFwiICsgZm9sZC5yYW5nZSArIHRoaXMucmFuZ2UpO1xuXG4gICAgICAgIHZhciBjb25zdW1lZEZvbGRzID0gdGhpcy5zdWJGb2xkcy5zcGxpY2UoaSwgaiAtIGksIGZvbGQpO1xuICAgICAgICBmb2xkLnNldEZvbGRMaW5lKHRoaXMuZm9sZExpbmUpO1xuXG4gICAgICAgIHJldHVybiBmb2xkO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5yZXN0b3JlUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICByZXR1cm4gcmVzdG9yZVJhbmdlKHJhbmdlLCB0aGlzLnN0YXJ0KTtcbiAgICB9O1xuXG59KS5jYWxsKEZvbGQucHJvdG90eXBlKTtcblxuZnVuY3Rpb24gY29uc3VtZVBvaW50KHBvaW50LCBhbmNob3IpIHtcbiAgICBwb2ludC5yb3cgLT0gYW5jaG9yLnJvdztcbiAgICBpZiAocG9pbnQucm93ID09IDApXG4gICAgICAgIHBvaW50LmNvbHVtbiAtPSBhbmNob3IuY29sdW1uO1xufVxuZnVuY3Rpb24gY29uc3VtZVJhbmdlKHJhbmdlLCBhbmNob3IpIHtcbiAgICBjb25zdW1lUG9pbnQocmFuZ2Uuc3RhcnQsIGFuY2hvcik7XG4gICAgY29uc3VtZVBvaW50KHJhbmdlLmVuZCwgYW5jaG9yKTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVQb2ludChwb2ludCwgYW5jaG9yKSB7XG4gICAgaWYgKHBvaW50LnJvdyA9PSAwKVxuICAgICAgICBwb2ludC5jb2x1bW4gKz0gYW5jaG9yLmNvbHVtbjtcbiAgICBwb2ludC5yb3cgKz0gYW5jaG9yLnJvdztcbn1cbmZ1bmN0aW9uIHJlc3RvcmVSYW5nZShyYW5nZSwgYW5jaG9yKSB7XG4gICAgcmVzdG9yZVBvaW50KHJhbmdlLnN0YXJ0LCBhbmNob3IpO1xuICAgIHJlc3RvcmVQb2ludChyYW5nZS5lbmQsIGFuY2hvcik7XG59XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvcmFuZ2VcIixcImFjZS9lZGl0X3Nlc3Npb24vZm9sZF9saW5lXCIsXCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGRcIixcImFjZS90b2tlbl9pdGVyYXRvclwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi4vcmFuZ2VcIikuUmFuZ2U7XG52YXIgRm9sZExpbmUgPSBhY2VxdWlyZShcIi4vZm9sZF9saW5lXCIpLkZvbGRMaW5lO1xudmFyIEZvbGQgPSBhY2VxdWlyZShcIi4vZm9sZFwiKS5Gb2xkO1xudmFyIFRva2VuSXRlcmF0b3IgPSBhY2VxdWlyZShcIi4uL3Rva2VuX2l0ZXJhdG9yXCIpLlRva2VuSXRlcmF0b3I7XG5cbmZ1bmN0aW9uIEZvbGRpbmcoKSB7XG4gICAgdGhpcy5nZXRGb2xkQXQgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgc2lkZSkge1xuICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKHJvdyk7XG4gICAgICAgIGlmICghZm9sZExpbmUpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICB2YXIgZm9sZHMgPSBmb2xkTGluZS5mb2xkcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGZvbGQgPSBmb2xkc1tpXTtcbiAgICAgICAgICAgIGlmIChmb2xkLnJhbmdlLmNvbnRhaW5zKHJvdywgY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIGlmIChzaWRlID09IDEgJiYgZm9sZC5yYW5nZS5pc0VuZChyb3csIGNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaWRlID09IC0xICYmIGZvbGQucmFuZ2UuaXNTdGFydChyb3csIGNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmb2xkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdldEZvbGRzSW5SYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7XG4gICAgICAgIHZhciBzdGFydCA9IHJhbmdlLnN0YXJ0O1xuICAgICAgICB2YXIgZW5kID0gcmFuZ2UuZW5kO1xuICAgICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7XG4gICAgICAgIHZhciBmb3VuZEZvbGRzID0gW107XG5cbiAgICAgICAgc3RhcnQuY29sdW1uICs9IDE7XG4gICAgICAgIGVuZC5jb2x1bW4gLT0gMTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRMaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNtcCA9IGZvbGRMaW5lc1tpXS5yYW5nZS5jb21wYXJlUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgaWYgKGNtcCA9PSAyKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTIpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmVzW2ldLmZvbGRzO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmb2xkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBmb2xkID0gZm9sZHNbal07XG4gICAgICAgICAgICAgICAgY21wID0gZm9sZC5yYW5nZS5jb21wYXJlUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgIGlmIChjbXAgPT0gLTIpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMikge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBpZiAoY21wID09IDQyKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3VuZEZvbGRzLnB1c2goZm9sZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnQuY29sdW1uIC09IDE7XG4gICAgICAgIGVuZC5jb2x1bW4gKz0gMTtcblxuICAgICAgICByZXR1cm4gZm91bmRGb2xkcztcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRGb2xkc0luUmFuZ2VMaXN0ID0gZnVuY3Rpb24ocmFuZ2VzKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJhbmdlcykpIHtcbiAgICAgICAgICAgIHZhciBmb2xkcyA9IFtdO1xuICAgICAgICAgICAgcmFuZ2VzLmZvckVhY2goZnVuY3Rpb24ocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBmb2xkcyA9IGZvbGRzLmNvbmNhdCh0aGlzLmdldEZvbGRzSW5SYW5nZShyYW5nZSkpO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShyYW5nZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb2xkcztcbiAgICB9O1xuICAgIHRoaXMuZ2V0QWxsRm9sZHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGZvbGRzID0gW107XG4gICAgICAgIHZhciBmb2xkTGluZXMgPSB0aGlzLiRmb2xkRGF0YTtcbiAgICAgICAgXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZExpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmb2xkTGluZXNbaV0uZm9sZHMubGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgZm9sZHMucHVzaChmb2xkTGluZXNbaV0uZm9sZHNbal0pO1xuXG4gICAgICAgIHJldHVybiBmb2xkcztcbiAgICB9O1xuICAgIHRoaXMuZ2V0Rm9sZFN0cmluZ0F0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIHRyaW0sIGZvbGRMaW5lKSB7XG4gICAgICAgIGZvbGRMaW5lID0gZm9sZExpbmUgfHwgdGhpcy5nZXRGb2xkTGluZShyb3cpO1xuICAgICAgICBpZiAoIWZvbGRMaW5lKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgdmFyIGxhc3RGb2xkID0ge1xuICAgICAgICAgICAgZW5kOiB7IGNvbHVtbjogMCB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBzdHIsIGZvbGQ7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZExpbmUuZm9sZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvbGQgPSBmb2xkTGluZS5mb2xkc1tpXTtcbiAgICAgICAgICAgIHZhciBjbXAgPSBmb2xkLnJhbmdlLmNvbXBhcmVFbmQocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXNcbiAgICAgICAgICAgICAgICAgICAgLmdldExpbmUoZm9sZC5zdGFydC5yb3cpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzdHJpbmcobGFzdEZvbGQuZW5kLmNvbHVtbiwgZm9sZC5zdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY21wID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0Rm9sZCA9IGZvbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdHIpXG4gICAgICAgICAgICBzdHIgPSB0aGlzLmdldExpbmUoZm9sZC5zdGFydC5yb3cpLnN1YnN0cmluZyhsYXN0Rm9sZC5lbmQuY29sdW1uKTtcblxuICAgICAgICBpZiAodHJpbSA9PSAtMSlcbiAgICAgICAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIGNvbHVtbiAtIGxhc3RGb2xkLmVuZC5jb2x1bW4pO1xuICAgICAgICBlbHNlIGlmICh0cmltID09IDEpXG4gICAgICAgICAgICByZXR1cm4gc3RyLnN1YnN0cmluZyhjb2x1bW4gLSBsYXN0Rm9sZC5lbmQuY29sdW1uKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRGb2xkTGluZSA9IGZ1bmN0aW9uKGRvY1Jvdywgc3RhcnRGb2xkTGluZSkge1xuICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLiRmb2xkRGF0YTtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBpZiAoc3RhcnRGb2xkTGluZSlcbiAgICAgICAgICAgIGkgPSBmb2xkRGF0YS5pbmRleE9mKHN0YXJ0Rm9sZExpbmUpO1xuICAgICAgICBpZiAoaSA9PSAtMSlcbiAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICBmb3IgKGk7IGkgPCBmb2xkRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZERhdGFbaV07XG4gICAgICAgICAgICBpZiAoZm9sZExpbmUuc3RhcnQucm93IDw9IGRvY1JvdyAmJiBmb2xkTGluZS5lbmQucm93ID49IGRvY1Jvdykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb2xkTGluZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZExpbmUuZW5kLnJvdyA+IGRvY1Jvdykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgdGhpcy5nZXROZXh0Rm9sZExpbmUgPSBmdW5jdGlvbihkb2NSb3csIHN0YXJ0Rm9sZExpbmUpIHtcbiAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9sZERhdGE7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgaWYgKHN0YXJ0Rm9sZExpbmUpXG4gICAgICAgICAgICBpID0gZm9sZERhdGEuaW5kZXhPZihzdGFydEZvbGRMaW5lKTtcbiAgICAgICAgaWYgKGkgPT0gLTEpXG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgZm9yIChpOyBpIDwgZm9sZERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IGZvbGREYXRhW2ldO1xuICAgICAgICAgICAgaWYgKGZvbGRMaW5lLmVuZC5yb3cgPj0gZG9jUm93KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvbGRMaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEZvbGRlZFJvd0NvdW50ID0gZnVuY3Rpb24oZmlyc3QsIGxhc3QpIHtcbiAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9sZERhdGEsIHJvd0NvdW50ID0gbGFzdC1maXJzdCsxO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGREYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkRGF0YVtpXSxcbiAgICAgICAgICAgICAgICBlbmQgPSBmb2xkTGluZS5lbmQucm93LFxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZm9sZExpbmUuc3RhcnQucm93O1xuICAgICAgICAgICAgaWYgKGVuZCA+PSBsYXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gZmlyc3QpXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dDb3VudCAtPSBsYXN0LXN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dDb3VudCA9IDA7IC8vIGluIG9uZSBmb2xkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbmQgPj0gZmlyc3Qpe1xuICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSBmaXJzdCkgLy8gZm9sZCBpbnNpZGUgcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgcm93Q291bnQgLT0gIGVuZC1zdGFydDtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJvd0NvdW50IC09ICBlbmQtZmlyc3QrMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93Q291bnQ7XG4gICAgfTtcblxuICAgIHRoaXMuJGFkZEZvbGRMaW5lID0gZnVuY3Rpb24oZm9sZExpbmUpIHtcbiAgICAgICAgdGhpcy4kZm9sZERhdGEucHVzaChmb2xkTGluZSk7XG4gICAgICAgIHRoaXMuJGZvbGREYXRhLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGEuc3RhcnQucm93IC0gYi5zdGFydC5yb3c7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZm9sZExpbmU7XG4gICAgfTtcbiAgICB0aGlzLmFkZEZvbGQgPSBmdW5jdGlvbihwbGFjZWhvbGRlciwgcmFuZ2UpIHtcbiAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9sZERhdGE7XG4gICAgICAgIHZhciBhZGRlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZm9sZDtcbiAgICAgICAgXG4gICAgICAgIGlmIChwbGFjZWhvbGRlciBpbnN0YW5jZW9mIEZvbGQpXG4gICAgICAgICAgICBmb2xkID0gcGxhY2Vob2xkZXI7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9sZCA9IG5ldyBGb2xkKHJhbmdlLCBwbGFjZWhvbGRlcik7XG4gICAgICAgICAgICBmb2xkLmNvbGxhcHNlQ2hpbGRyZW4gPSByYW5nZS5jb2xsYXBzZUNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGNsaXBSYW5nZVRvRG9jdW1lbnQoZm9sZC5yYW5nZSk7XG5cbiAgICAgICAgdmFyIHN0YXJ0Um93ID0gZm9sZC5zdGFydC5yb3c7XG4gICAgICAgIHZhciBzdGFydENvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uO1xuICAgICAgICB2YXIgZW5kUm93ID0gZm9sZC5lbmQucm93O1xuICAgICAgICB2YXIgZW5kQ29sdW1uID0gZm9sZC5lbmQuY29sdW1uO1xuICAgICAgICBpZiAoIShzdGFydFJvdyA8IGVuZFJvdyB8fCBcbiAgICAgICAgICAgIHN0YXJ0Um93ID09IGVuZFJvdyAmJiBzdGFydENvbHVtbiA8PSBlbmRDb2x1bW4gLSAyKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSByYW5nZSBoYXMgdG8gYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIHdpZHRoXCIpO1xuXG4gICAgICAgIHZhciBzdGFydEZvbGQgPSB0aGlzLmdldEZvbGRBdChzdGFydFJvdywgc3RhcnRDb2x1bW4sIDEpO1xuICAgICAgICB2YXIgZW5kRm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KGVuZFJvdywgZW5kQ29sdW1uLCAtMSk7XG4gICAgICAgIGlmIChzdGFydEZvbGQgJiYgZW5kRm9sZCA9PSBzdGFydEZvbGQpXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRGb2xkLmFkZFN1YkZvbGQoZm9sZCk7XG5cbiAgICAgICAgaWYgKHN0YXJ0Rm9sZCAmJiAhc3RhcnRGb2xkLnJhbmdlLmlzU3RhcnQoc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSlcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZChzdGFydEZvbGQpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGVuZEZvbGQgJiYgIWVuZEZvbGQucmFuZ2UuaXNFbmQoZW5kUm93LCBlbmRDb2x1bW4pKVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkKGVuZEZvbGQpO1xuICAgICAgICB2YXIgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShmb2xkLnJhbmdlKTtcbiAgICAgICAgaWYgKGZvbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZHMoZm9sZHMpO1xuICAgICAgICAgICAgZm9sZHMuZm9yRWFjaChmdW5jdGlvbihzdWJGb2xkKSB7XG4gICAgICAgICAgICAgICAgZm9sZC5hZGRTdWJGb2xkKHN1YkZvbGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGREYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkRGF0YVtpXTtcbiAgICAgICAgICAgIGlmIChlbmRSb3cgPT0gZm9sZExpbmUuc3RhcnQucm93KSB7XG4gICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkRm9sZChmb2xkKTtcbiAgICAgICAgICAgICAgICBhZGRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Um93ID09IGZvbGRMaW5lLmVuZC5yb3cpIHtcbiAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRGb2xkKGZvbGQpO1xuICAgICAgICAgICAgICAgIGFkZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoIWZvbGQuc2FtZVJvdykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmVOZXh0ID0gZm9sZERhdGFbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmVOZXh0ICYmIGZvbGRMaW5lTmV4dC5zdGFydC5yb3cgPT0gZW5kUm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5tZXJnZShmb2xkTGluZU5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVuZFJvdyA8PSBmb2xkTGluZS5zdGFydC5yb3cpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWRkZWQpXG4gICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuJGFkZEZvbGRMaW5lKG5ldyBGb2xkTGluZSh0aGlzLiRmb2xkRGF0YSwgZm9sZCkpO1xuXG4gICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSlcbiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKGZvbGRMaW5lLnN0YXJ0LnJvdywgZm9sZExpbmUuc3RhcnQucm93KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2FjaGUoZm9sZExpbmUuc3RhcnQucm93LCBmb2xkTGluZS5zdGFydC5yb3cpO1xuICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZUZvbGRcIiwgeyBkYXRhOiBmb2xkLCBhY3Rpb246IFwiYWRkXCIgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZvbGQ7XG4gICAgfTtcblxuICAgIHRoaXMuYWRkRm9sZHMgPSBmdW5jdGlvbihmb2xkcykge1xuICAgICAgICBmb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9sZChmb2xkKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfTtcblxuICAgIHRoaXMucmVtb3ZlRm9sZCA9IGZ1bmN0aW9uKGZvbGQpIHtcbiAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZC5mb2xkTGluZTtcbiAgICAgICAgdmFyIHN0YXJ0Um93ID0gZm9sZExpbmUuc3RhcnQucm93O1xuICAgICAgICB2YXIgZW5kUm93ID0gZm9sZExpbmUuZW5kLnJvdztcblxuICAgICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7XG4gICAgICAgIHZhciBmb2xkcyA9IGZvbGRMaW5lLmZvbGRzO1xuICAgICAgICBpZiAoZm9sZHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIGZvbGRMaW5lcy5zcGxpY2UoZm9sZExpbmVzLmluZGV4T2YoZm9sZExpbmUpLCAxKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgIGlmIChmb2xkTGluZS5yYW5nZS5pc0VuZChmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVtbikpIHtcbiAgICAgICAgICAgIGZvbGRzLnBvcCgpO1xuICAgICAgICAgICAgZm9sZExpbmUuZW5kLnJvdyA9IGZvbGRzW2ZvbGRzLmxlbmd0aCAtIDFdLmVuZC5yb3c7XG4gICAgICAgICAgICBmb2xkTGluZS5lbmQuY29sdW1uID0gZm9sZHNbZm9sZHMubGVuZ3RoIC0gMV0uZW5kLmNvbHVtbjtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgIGlmIChmb2xkTGluZS5yYW5nZS5pc1N0YXJ0KGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbikpIHtcbiAgICAgICAgICAgIGZvbGRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBmb2xkTGluZS5zdGFydC5yb3cgPSBmb2xkc1swXS5zdGFydC5yb3c7XG4gICAgICAgICAgICBmb2xkTGluZS5zdGFydC5jb2x1bW4gPSBmb2xkc1swXS5zdGFydC5jb2x1bW47XG4gICAgICAgIH0gZWxzZVxuICAgICAgICBpZiAoZm9sZC5zYW1lUm93KSB7XG4gICAgICAgICAgICBmb2xkcy5zcGxpY2UoZm9sZHMuaW5kZXhPZihmb2xkKSwgMSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbmV3Rm9sZExpbmUgPSBmb2xkTGluZS5zcGxpdChmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgZm9sZHMgPSBuZXdGb2xkTGluZS5mb2xkcztcbiAgICAgICAgICAgIGZvbGRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBuZXdGb2xkTGluZS5zdGFydC5yb3cgPSBmb2xkc1swXS5zdGFydC5yb3c7XG4gICAgICAgICAgICBuZXdGb2xkTGluZS5zdGFydC5jb2x1bW4gPSBmb2xkc1swXS5zdGFydC5jb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuJHVwZGF0aW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpXG4gICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlV3JhcERhdGEoc3RhcnRSb3csIGVuZFJvdyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2FjaGUoc3RhcnRSb3csIGVuZFJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VGb2xkXCIsIHsgZGF0YTogZm9sZCwgYWN0aW9uOiBcInJlbW92ZVwiIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLnJlbW92ZUZvbGRzID0gZnVuY3Rpb24oZm9sZHMpIHtcbiAgICAgICAgdmFyIGNsb25lRm9sZHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVGb2xkcy5wdXNoKGZvbGRzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb25lRm9sZHMuZm9yRWFjaChmdW5jdGlvbihmb2xkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGQoZm9sZCk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7XG4gICAgfTtcblxuICAgIHRoaXMuZXhwYW5kRm9sZCA9IGZ1bmN0aW9uKGZvbGQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGb2xkKGZvbGQpO1xuICAgICAgICBmb2xkLnN1YkZvbGRzLmZvckVhY2goZnVuY3Rpb24oc3ViRm9sZCkge1xuICAgICAgICAgICAgZm9sZC5yZXN0b3JlUmFuZ2Uoc3ViRm9sZCk7XG4gICAgICAgICAgICB0aGlzLmFkZEZvbGQoc3ViRm9sZCk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgICAgICBpZiAoZm9sZC5jb2xsYXBzZUNoaWxkcmVuID4gMCkge1xuICAgICAgICAgICAgdGhpcy5mb2xkQWxsKGZvbGQuc3RhcnQucm93KzEsIGZvbGQuZW5kLnJvdywgZm9sZC5jb2xsYXBzZUNoaWxkcmVuLTEpO1xuICAgICAgICB9XG4gICAgICAgIGZvbGQuc3ViRm9sZHMgPSBbXTtcbiAgICB9O1xuXG4gICAgdGhpcy5leHBhbmRGb2xkcyA9IGZ1bmN0aW9uKGZvbGRzKSB7XG4gICAgICAgIGZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRGb2xkKGZvbGQpO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICB9O1xuXG4gICAgdGhpcy51bmZvbGQgPSBmdW5jdGlvbihsb2NhdGlvbiwgZXhwYW5kSW5uZXIpIHtcbiAgICAgICAgdmFyIHJhbmdlLCBmb2xkcztcbiAgICAgICAgaWYgKGxvY2F0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIHJhbmdlID0gbmV3IFJhbmdlKDAsIDAsIHRoaXMuZ2V0TGVuZ3RoKCksIDApO1xuICAgICAgICAgICAgZXhwYW5kSW5uZXIgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsb2NhdGlvbiA9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2UobG9jYXRpb24sIDAsIGxvY2F0aW9uLCB0aGlzLmdldExpbmUobG9jYXRpb24pLmxlbmd0aCk7XG4gICAgICAgIGVsc2UgaWYgKFwicm93XCIgaW4gbG9jYXRpb24pXG4gICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMobG9jYXRpb24sIGxvY2F0aW9uKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmFuZ2UgPSBsb2NhdGlvbjtcbiAgICAgICAgXG4gICAgICAgIGZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2VMaXN0KHJhbmdlKTtcbiAgICAgICAgaWYgKGV4cGFuZElubmVyKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGRzKGZvbGRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzdWJGb2xkcyA9IGZvbGRzO1xuICAgICAgICAgICAgd2hpbGUgKHN1YkZvbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kRm9sZHMoc3ViRm9sZHMpO1xuICAgICAgICAgICAgICAgIHN1YkZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2VMaXN0KHJhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9sZHMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZvbGRzO1xuICAgIH07XG4gICAgdGhpcy5pc1Jvd0ZvbGRlZCA9IGZ1bmN0aW9uKGRvY1Jvdywgc3RhcnRGb2xkUm93KSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ2V0Rm9sZExpbmUoZG9jUm93LCBzdGFydEZvbGRSb3cpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFJvd0ZvbGRFbmQgPSBmdW5jdGlvbihkb2NSb3csIHN0YXJ0Rm9sZFJvdykge1xuICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKGRvY1Jvdywgc3RhcnRGb2xkUm93KTtcbiAgICAgICAgcmV0dXJuIGZvbGRMaW5lID8gZm9sZExpbmUuZW5kLnJvdyA6IGRvY1JvdztcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRSb3dGb2xkU3RhcnQgPSBmdW5jdGlvbihkb2NSb3csIHN0YXJ0Rm9sZFJvdykge1xuICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKGRvY1Jvdywgc3RhcnRGb2xkUm93KTtcbiAgICAgICAgcmV0dXJuIGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogZG9jUm93O1xuICAgIH07XG5cbiAgICB0aGlzLmdldEZvbGREaXNwbGF5TGluZSA9IGZ1bmN0aW9uKGZvbGRMaW5lLCBlbmRSb3csIGVuZENvbHVtbiwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSB7XG4gICAgICAgIGlmIChzdGFydFJvdyA9PSBudWxsKVxuICAgICAgICAgICAgc3RhcnRSb3cgPSBmb2xkTGluZS5zdGFydC5yb3c7XG4gICAgICAgIGlmIChzdGFydENvbHVtbiA9PSBudWxsKVxuICAgICAgICAgICAgc3RhcnRDb2x1bW4gPSAwO1xuICAgICAgICBpZiAoZW5kUm93ID09IG51bGwpXG4gICAgICAgICAgICBlbmRSb3cgPSBmb2xkTGluZS5lbmQucm93O1xuICAgICAgICBpZiAoZW5kQ29sdW1uID09IG51bGwpXG4gICAgICAgICAgICBlbmRDb2x1bW4gPSB0aGlzLmdldExpbmUoZW5kUm93KS5sZW5ndGg7XG4gICAgICAgIHZhciBkb2MgPSB0aGlzLmRvYztcbiAgICAgICAgdmFyIHRleHRMaW5lID0gXCJcIjtcblxuICAgICAgICBmb2xkTGluZS53YWxrKGZ1bmN0aW9uKHBsYWNlaG9sZGVyLCByb3csIGNvbHVtbiwgbGFzdENvbHVtbikge1xuICAgICAgICAgICAgaWYgKHJvdyA8IHN0YXJ0Um93KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmIChyb3cgPT0gc3RhcnRSb3cpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBsYXN0Q29sdW1uID0gTWF0aC5tYXgoc3RhcnRDb2x1bW4sIGxhc3RDb2x1bW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRleHRMaW5lICs9IHBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXh0TGluZSArPSBkb2MuZ2V0TGluZShyb3cpLnN1YnN0cmluZyhsYXN0Q29sdW1uLCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBlbmRSb3csIGVuZENvbHVtbik7XG4gICAgICAgIHJldHVybiB0ZXh0TGluZTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXREaXNwbGF5TGluZSA9IGZ1bmN0aW9uKHJvdywgZW5kQ29sdW1uLCBzdGFydFJvdywgc3RhcnRDb2x1bW4pIHtcbiAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShyb3cpO1xuXG4gICAgICAgIGlmICghZm9sZExpbmUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lO1xuICAgICAgICAgICAgbGluZSA9IHRoaXMuZG9jLmdldExpbmUocm93KTtcbiAgICAgICAgICAgIHJldHVybiBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbiB8fCAwLCBlbmRDb2x1bW4gfHwgbGluZS5sZW5ndGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9sZERpc3BsYXlMaW5lKFxuICAgICAgICAgICAgICAgIGZvbGRMaW5lLCByb3csIGVuZENvbHVtbiwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRjbG9uZUZvbGREYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmZCA9IFtdO1xuICAgICAgICBmZCA9IHRoaXMuJGZvbGREYXRhLm1hcChmdW5jdGlvbihmb2xkTGluZSkge1xuICAgICAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmUuZm9sZHMubWFwKGZ1bmN0aW9uKGZvbGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9sZC5jbG9uZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvbGRMaW5lKGZkLCBmb2xkcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmZDtcbiAgICB9O1xuXG4gICAgdGhpcy50b2dnbGVGb2xkID0gZnVuY3Rpb24odHJ5VG9VbmZvbGQpIHtcbiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xuICAgICAgICB2YXIgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2UoKTtcbiAgICAgICAgdmFyIGZvbGQ7XG4gICAgICAgIHZhciBicmFja2V0UG9zO1xuXG4gICAgICAgIGlmIChyYW5nZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHZhciBjdXJzb3IgPSByYW5nZS5zdGFydDtcbiAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdldEZvbGRBdChjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTtcblxuICAgICAgICAgICAgaWYgKGZvbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEZvbGQoZm9sZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChicmFja2V0UG9zID0gdGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0KGN1cnNvcikpIHtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZVBvaW50KGJyYWNrZXRQb3MpID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kID0gYnJhY2tldFBvcztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByYW5nZS5zdGFydCA9IGJyYWNrZXRQb3M7XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbisrO1xuICAgICAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChicmFja2V0UG9zID0gdGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IGN1cnNvci5yb3csIGNvbHVtbjogY3Vyc29yLmNvbHVtbiArIDF9KSkge1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJlUG9pbnQoYnJhY2tldFBvcykgPT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kID0gYnJhY2tldFBvcztcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0ID0gYnJhY2tldFBvcztcblxuICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbisrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0Q29tbWVudEZvbGRSYW5nZShjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKSB8fCByYW5nZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBmb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgIGlmICh0cnlUb1VuZm9sZCAmJiBmb2xkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEZvbGRzKGZvbGRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRzLmxlbmd0aCA9PSAxICkge1xuICAgICAgICAgICAgICAgIGZvbGQgPSBmb2xkc1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZm9sZClcbiAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdldEZvbGRBdChyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbik7XG5cbiAgICAgICAgaWYgKGZvbGQgJiYgZm9sZC5yYW5nZS50b1N0cmluZygpID09IHJhbmdlLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kRm9sZChmb2xkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbGFjZWhvbGRlciA9IFwiLi4uXCI7XG4gICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSkge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSB0aGlzLmdldFRleHRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIubGVuZ3RoIDwgNClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBwbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyLnRyaW0oKS5zdWJzdHJpbmcoMCwgMikgKyBcIi4uXCI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZEZvbGQocGxhY2Vob2xkZXIsIHJhbmdlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRDb21tZW50Rm9sZFJhbmdlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIGRpcikge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcih0aGlzLCByb3csIGNvbHVtbik7XG4gICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpO1xuICAgICAgICB2YXIgdHlwZSA9IHRva2VuLnR5cGU7XG4gICAgICAgIGlmICh0b2tlbiAmJiAvXmNvbW1lbnR8c3RyaW5nLy50ZXN0KHR5cGUpKSB7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5tYXRjaCgvY29tbWVudHxzdHJpbmcvKVswXTtcbiAgICAgICAgICAgIGlmICh0eXBlID09IFwiY29tbWVudFwiKVxuICAgICAgICAgICAgICAgIHR5cGUgKz0gXCJ8ZG9jLXN0YXJ0XCI7XG4gICAgICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKHR5cGUpO1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gICAgICAgICAgICBpZiAoZGlyICE9IDEpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAodG9rZW4gJiYgcmUudGVzdCh0b2tlbi50eXBlKSk7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7XG4gICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIDI7XG5cbiAgICAgICAgICAgIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3IodGhpcywgcm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoZGlyICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RSb3cgPSAtMTtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RSb3cgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoaXRlcmF0b3IuJHJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlLnRlc3Qoc3RhdGUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RSb3cgPSBpdGVyYXRvci4kcm93O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZXJhdG9yLiRyb3cgPiBsYXN0Um93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKHRva2VuICYmIHJlLnRlc3QodG9rZW4udHlwZSkpO1xuICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpO1xuXG4gICAgICAgICAgICByYW5nZS5lbmQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7XG4gICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGggLSAyO1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuZm9sZEFsbCA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBlbmRSb3csIGRlcHRoKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBkZXB0aCA9IDEwMDAwMDsgLy8gSlNPTi5zdHJpbmdpZnkgZG9lc24ndCBoYW5sZSBJbmZpbml0eVxuICAgICAgICB2YXIgZm9sZFdpZGdldHMgPSB0aGlzLmZvbGRXaWRnZXRzO1xuICAgICAgICBpZiAoIWZvbGRXaWRnZXRzKVxuICAgICAgICAgICAgcmV0dXJuOyAvLyBtb2RlIGRvZXNuJ3Qgc3VwcG9ydCBmb2xkaW5nXG4gICAgICAgIGVuZFJvdyA9IGVuZFJvdyB8fCB0aGlzLmdldExlbmd0aCgpO1xuICAgICAgICBzdGFydFJvdyA9IHN0YXJ0Um93IHx8IDA7XG4gICAgICAgIGZvciAodmFyIHJvdyA9IHN0YXJ0Um93OyByb3cgPCBlbmRSb3c7IHJvdysrKSB7XG4gICAgICAgICAgICBpZiAoZm9sZFdpZGdldHNbcm93XSA9PSBudWxsKVxuICAgICAgICAgICAgICAgIGZvbGRXaWRnZXRzW3Jvd10gPSB0aGlzLmdldEZvbGRXaWRnZXQocm93KTtcbiAgICAgICAgICAgIGlmIChmb2xkV2lkZ2V0c1tyb3ddICE9IFwic3RhcnRcIilcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uocm93KTtcbiAgICAgICAgICAgIGlmIChyYW5nZSAmJiByYW5nZS5pc011bHRpTGluZSgpXG4gICAgICAgICAgICAgICAgJiYgcmFuZ2UuZW5kLnJvdyA8PSBlbmRSb3dcbiAgICAgICAgICAgICAgICAmJiByYW5nZS5zdGFydC5yb3cgPj0gc3RhcnRSb3dcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJvdyA9IHJhbmdlLmVuZC5yb3c7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGQgPSB0aGlzLmFkZEZvbGQoXCIuLi5cIiwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbGQuY29sbGFwc2VDaGlsZHJlbiA9IGRlcHRoO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge31cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy4kZm9sZFN0eWxlcyA9IHtcbiAgICAgICAgXCJtYW51YWxcIjogMSxcbiAgICAgICAgXCJtYXJrYmVnaW5cIjogMSxcbiAgICAgICAgXCJtYXJrYmVnaW5lbmRcIjogMVxuICAgIH07XG4gICAgdGhpcy4kZm9sZFN0eWxlID0gXCJtYXJrYmVnaW5cIjtcbiAgICB0aGlzLnNldEZvbGRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKSB7XG4gICAgICAgIGlmICghdGhpcy4kZm9sZFN0eWxlc1tzdHlsZV0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGZvbGQgc3R5bGU6IFwiICsgc3R5bGUgKyBcIltcIiArIE9iamVjdC5rZXlzKHRoaXMuJGZvbGRTdHlsZXMpLmpvaW4oXCIsIFwiKSArIFwiXVwiKTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLiRmb2xkU3R5bGUgPT0gc3R5bGUpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy4kZm9sZFN0eWxlID0gc3R5bGU7XG4gICAgICAgIFxuICAgICAgICBpZiAoc3R5bGUgPT0gXCJtYW51YWxcIilcbiAgICAgICAgICAgIHRoaXMudW5mb2xkKCk7XG4gICAgICAgIHZhciBtb2RlID0gdGhpcy4kZm9sZE1vZGU7XG4gICAgICAgIHRoaXMuJHNldEZvbGRpbmcobnVsbCk7XG4gICAgICAgIHRoaXMuJHNldEZvbGRpbmcobW9kZSk7XG4gICAgfTtcblxuICAgIHRoaXMuJHNldEZvbGRpbmcgPSBmdW5jdGlvbihmb2xkTW9kZSkge1xuICAgICAgICBpZiAodGhpcy4kZm9sZE1vZGUgPT0gZm9sZE1vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBcbiAgICAgICAgdGhpcy4kZm9sZE1vZGUgPSBmb2xkTW9kZTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMub2ZmKCdjaGFuZ2UnLCB0aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyk7XG4gICAgICAgIHRoaXMub2ZmKCd0b2tlbml6ZXJVcGRhdGUnLCB0aGlzLiR0b2tlbml6ZXJVcGRhdGVGb2xkV2lkZ2V0cyk7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZUFubm90YXRpb25cIik7XG4gICAgICAgIFxuICAgICAgICBpZiAoIWZvbGRNb2RlIHx8IHRoaXMuJGZvbGRTdHlsZSA9PSBcIm1hbnVhbFwiKSB7XG4gICAgICAgICAgICB0aGlzLmZvbGRXaWRnZXRzID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5mb2xkV2lkZ2V0cyA9IFtdO1xuICAgICAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmb2xkTW9kZS5nZXRGb2xkV2lkZ2V0LmJpbmQoZm9sZE1vZGUsIHRoaXMsIHRoaXMuJGZvbGRTdHlsZSk7XG4gICAgICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZm9sZE1vZGUuZ2V0Rm9sZFdpZGdldFJhbmdlLmJpbmQoZm9sZE1vZGUsIHRoaXMsIHRoaXMuJGZvbGRTdHlsZSk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyA9IHRoaXMudXBkYXRlRm9sZFdpZGdldHMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy4kdG9rZW5pemVyVXBkYXRlRm9sZFdpZGdldHMgPSB0aGlzLnRva2VuaXplclVwZGF0ZUZvbGRXaWRnZXRzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub24oJ2NoYW5nZScsIHRoaXMuJHVwZGF0ZUZvbGRXaWRnZXRzKTtcbiAgICAgICAgdGhpcy5vbigndG9rZW5pemVyVXBkYXRlJywgdGhpcy4kdG9rZW5pemVyVXBkYXRlRm9sZFdpZGdldHMpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFBhcmVudEZvbGRSYW5nZURhdGEgPSBmdW5jdGlvbiAocm93LCBpZ25vcmVDdXJyZW50KSB7XG4gICAgICAgIHZhciBmdyA9IHRoaXMuZm9sZFdpZGdldHM7XG4gICAgICAgIGlmICghZncgfHwgKGlnbm9yZUN1cnJlbnQgJiYgZndbcm93XSkpXG4gICAgICAgICAgICByZXR1cm4ge307XG5cbiAgICAgICAgdmFyIGkgPSByb3cgLSAxLCBmaXJzdFJhbmdlO1xuICAgICAgICB3aGlsZSAoaSA+PSAwKSB7XG4gICAgICAgICAgICB2YXIgYyA9IGZ3W2ldO1xuICAgICAgICAgICAgaWYgKGMgPT0gbnVsbClcbiAgICAgICAgICAgICAgICBjID0gZndbaV0gPSB0aGlzLmdldEZvbGRXaWRnZXQoaSk7XG5cbiAgICAgICAgICAgIGlmIChjID09IFwic3RhcnRcIikge1xuICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKGkpO1xuICAgICAgICAgICAgICAgIGlmICghZmlyc3RSYW5nZSlcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RSYW5nZSA9IHJhbmdlO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZSAmJiByYW5nZS5lbmQucm93ID49IHJvdylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpLS07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmFuZ2U6IGkgIT09IC0xICYmIHJhbmdlLFxuICAgICAgICAgICAgZmlyc3RSYW5nZTogZmlyc3RSYW5nZVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB0aGlzLm9uRm9sZFdpZGdldENsaWNrID0gZnVuY3Rpb24ocm93LCBlKSB7XG4gICAgICAgIGUgPSBlLmRvbUV2ZW50O1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBlLnNoaWZ0S2V5LFxuICAgICAgICAgICAgYWxsOiBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5LFxuICAgICAgICAgICAgc2libGluZ3M6IGUuYWx0S2V5XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLiR0b2dnbGVGb2xkV2lkZ2V0KHJvdywgb3B0aW9ucyk7XG4gICAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgICAgIHZhciBlbCA9IChlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGVsICYmIC9hY2VfZm9sZC13aWRnZXQvLnRlc3QoZWwuY2xhc3NOYW1lKSlcbiAgICAgICAgICAgICAgICBlbC5jbGFzc05hbWUgKz0gXCIgYWNlX2ludmFsaWRcIjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgdGhpcy4kdG9nZ2xlRm9sZFdpZGdldCA9IGZ1bmN0aW9uKHJvdywgb3B0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMuZ2V0Rm9sZFdpZGdldClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHR5cGUgPSB0aGlzLmdldEZvbGRXaWRnZXQocm93KTtcbiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTtcblxuICAgICAgICB2YXIgZGlyID0gdHlwZSA9PT0gXCJlbmRcIiA/IC0xIDogMTtcbiAgICAgICAgdmFyIGZvbGQgPSB0aGlzLmdldEZvbGRBdChyb3csIGRpciA9PT0gLTEgPyAwIDogbGluZS5sZW5ndGgsIGRpcik7XG5cbiAgICAgICAgaWYgKGZvbGQpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNoaWxkcmVuIHx8IG9wdGlvbnMuYWxsKVxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZChmb2xkKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEZvbGQoZm9sZCk7XG4gICAgICAgICAgICByZXR1cm4gZm9sZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHJvdywgdHJ1ZSk7XG4gICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkge1xuICAgICAgICAgICAgZm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uLCAxKTtcbiAgICAgICAgICAgIGlmIChmb2xkICYmIHJhbmdlLmlzRXF1YWwoZm9sZC5yYW5nZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGQoZm9sZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChvcHRpb25zLnNpYmxpbmdzKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0UGFyZW50Rm9sZFJhbmdlRGF0YShyb3cpO1xuICAgICAgICAgICAgaWYgKGRhdGEucmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRSb3cgPSBkYXRhLnJhbmdlLnN0YXJ0LnJvdyArIDE7XG4gICAgICAgICAgICAgICAgdmFyIGVuZFJvdyA9IGRhdGEucmFuZ2UuZW5kLnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZm9sZEFsbChzdGFydFJvdywgZW5kUm93LCBvcHRpb25zLmFsbCA/IDEwMDAwIDogMCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5jaGlsZHJlbikge1xuICAgICAgICAgICAgZW5kUm93ID0gcmFuZ2UgPyByYW5nZS5lbmQucm93IDogdGhpcy5nZXRMZW5ndGgoKTtcbiAgICAgICAgICAgIHRoaXMuZm9sZEFsbChyb3cgKyAxLCBlbmRSb3csIG9wdGlvbnMuYWxsID8gMTAwMDAgOiAwKTtcbiAgICAgICAgfSBlbHNlIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWxsKSBcbiAgICAgICAgICAgICAgICByYW5nZS5jb2xsYXBzZUNoaWxkcmVuID0gMTAwMDA7XG4gICAgICAgICAgICB0aGlzLmFkZEZvbGQoXCIuLi5cIiwgcmFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfTtcbiAgICBcbiAgICBcbiAgICBcbiAgICB0aGlzLnRvZ2dsZUZvbGRXaWRnZXQgPSBmdW5jdGlvbih0b2dnbGVQYXJlbnQpIHtcbiAgICAgICAgdmFyIHJvdyA9IHRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpLnJvdztcbiAgICAgICAgcm93ID0gdGhpcy5nZXRSb3dGb2xkU3RhcnQocm93KTtcbiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy4kdG9nZ2xlRm9sZFdpZGdldChyb3csIHt9KTtcbiAgICAgICAgXG4gICAgICAgIGlmIChyYW5nZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdldFBhcmVudEZvbGRSYW5nZURhdGEocm93LCB0cnVlKTtcbiAgICAgICAgcmFuZ2UgPSBkYXRhLnJhbmdlIHx8IGRhdGEuZmlyc3RSYW5nZTtcbiAgICAgICAgXG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgcm93ID0gcmFuZ2Uuc3RhcnQucm93O1xuICAgICAgICAgICAgdmFyIGZvbGQgPSB0aGlzLmdldEZvbGRBdChyb3csIHRoaXMuZ2V0TGluZShyb3cpLmxlbmd0aCwgMSk7XG5cbiAgICAgICAgICAgIGlmIChmb2xkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkKGZvbGQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZvbGQoXCIuLi5cIiwgcmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlRm9sZFdpZGdldHMgPSBmdW5jdGlvbihkZWx0YSkge1xuICAgICAgICB2YXIgZmlyc3RSb3cgPSBkZWx0YS5zdGFydC5yb3c7XG4gICAgICAgIHZhciBsZW4gPSBkZWx0YS5lbmQucm93IC0gZmlyc3RSb3c7XG5cbiAgICAgICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5mb2xkV2lkZ2V0c1tmaXJzdFJvd10gPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAncmVtb3ZlJykge1xuICAgICAgICAgICAgdGhpcy5mb2xkV2lkZ2V0cy5zcGxpY2UoZmlyc3RSb3csIGxlbiArIDEsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW4gKyAxKTtcbiAgICAgICAgICAgIGFyZ3MudW5zaGlmdChmaXJzdFJvdywgMSk7XG4gICAgICAgICAgICB0aGlzLmZvbGRXaWRnZXRzLnNwbGljZS5hcHBseSh0aGlzLmZvbGRXaWRnZXRzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy50b2tlbml6ZXJVcGRhdGVGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIHJvd3MgPSBlLmRhdGE7XG4gICAgICAgIGlmIChyb3dzLmZpcnN0ICE9IHJvd3MubGFzdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9sZFdpZGdldHMubGVuZ3RoID4gcm93cy5maXJzdClcbiAgICAgICAgICAgICAgICB0aGlzLmZvbGRXaWRnZXRzLnNwbGljZShyb3dzLmZpcnN0LCB0aGlzLmZvbGRXaWRnZXRzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5leHBvcnRzLkZvbGRpbmcgPSBGb2xkaW5nO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9lZGl0X3Nlc3Npb24vYnJhY2tldF9tYXRjaFwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL3Rva2VuX2l0ZXJhdG9yXCIsXCJhY2UvcmFuZ2VcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgVG9rZW5JdGVyYXRvciA9IGFjZXF1aXJlKFwiLi4vdG9rZW5faXRlcmF0b3JcIikuVG9rZW5JdGVyYXRvcjtcbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi4vcmFuZ2VcIikuUmFuZ2U7XG5cblxuZnVuY3Rpb24gQnJhY2tldE1hdGNoKCkge1xuXG4gICAgdGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0ID0gZnVuY3Rpb24ocG9zaXRpb24sIGNocikge1xuICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uID09IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgIHZhciBjaGFyQmVmb3JlQ3Vyc29yID0gY2hyIHx8IHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmNoYXJBdChwb3NpdGlvbi5jb2x1bW4tMSk7XG4gICAgICAgIGlmIChjaGFyQmVmb3JlQ3Vyc29yID09IFwiXCIpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHZhciBtYXRjaCA9IGNoYXJCZWZvcmVDdXJzb3IubWF0Y2goLyhbXFwoXFxbXFx7XSl8KFtcXClcXF1cXH1dKS8pO1xuICAgICAgICBpZiAoIW1hdGNoKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKG1hdGNoWzFdKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGZpbmRDbG9zaW5nQnJhY2tldChtYXRjaFsxXSwgcG9zaXRpb24pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kZmluZE9wZW5pbmdCcmFja2V0KG1hdGNoWzJdLCBwb3NpdGlvbik7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmdldEJyYWNrZXRSYW5nZSA9IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShwb3Mucm93KTtcbiAgICAgICAgdmFyIGJlZm9yZSA9IHRydWUsIHJhbmdlO1xuXG4gICAgICAgIHZhciBjaHIgPSBsaW5lLmNoYXJBdChwb3MuY29sdW1uLTEpO1xuICAgICAgICB2YXIgbWF0Y2ggPSBjaHIgJiYgY2hyLm1hdGNoKC8oW1xcKFxcW1xce10pfChbXFwpXFxdXFx9XSkvKTtcbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgY2hyID0gbGluZS5jaGFyQXQocG9zLmNvbHVtbik7XG4gICAgICAgICAgICBwb3MgPSB7cm93OiBwb3Mucm93LCBjb2x1bW46IHBvcy5jb2x1bW4gKyAxfTtcbiAgICAgICAgICAgIG1hdGNoID0gY2hyICYmIGNoci5tYXRjaCgvKFtcXChcXFtcXHtdKXwoW1xcKVxcXVxcfV0pLyk7XG4gICAgICAgICAgICBiZWZvcmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKG1hdGNoWzFdKSB7XG4gICAgICAgICAgICB2YXIgYnJhY2tldFBvcyA9IHRoaXMuJGZpbmRDbG9zaW5nQnJhY2tldChtYXRjaFsxXSwgcG9zKTtcbiAgICAgICAgICAgIGlmICghYnJhY2tldFBvcylcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhwb3MsIGJyYWNrZXRQb3MpO1xuICAgICAgICAgICAgaWYgKCFiZWZvcmUpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYW5nZS5jdXJzb3IgPSByYW5nZS5lbmQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgYnJhY2tldFBvcyA9IHRoaXMuJGZpbmRPcGVuaW5nQnJhY2tldChtYXRjaFsyXSwgcG9zKTtcbiAgICAgICAgICAgIGlmICghYnJhY2tldFBvcylcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhicmFja2V0UG9zLCBwb3MpO1xuICAgICAgICAgICAgaWYgKCFiZWZvcmUpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4rKztcbiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYW5nZS5jdXJzb3IgPSByYW5nZS5zdGFydDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH07XG5cbiAgICB0aGlzLiRicmFja2V0cyA9IHtcbiAgICAgICAgXCIpXCI6IFwiKFwiLFxuICAgICAgICBcIihcIjogXCIpXCIsXG4gICAgICAgIFwiXVwiOiBcIltcIixcbiAgICAgICAgXCJbXCI6IFwiXVwiLFxuICAgICAgICBcIntcIjogXCJ9XCIsXG4gICAgICAgIFwifVwiOiBcIntcIlxuICAgIH07XG5cbiAgICB0aGlzLiRmaW5kT3BlbmluZ0JyYWNrZXQgPSBmdW5jdGlvbihicmFja2V0LCBwb3NpdGlvbiwgdHlwZVJlKSB7XG4gICAgICAgIHZhciBvcGVuQnJhY2tldCA9IHRoaXMuJGJyYWNrZXRzW2JyYWNrZXRdO1xuICAgICAgICB2YXIgZGVwdGggPSAxO1xuXG4gICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHRoaXMsIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTtcbiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgICAgIGlmICghdG9rZW4pXG4gICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7XG4gICAgICAgIGlmICghdG9rZW4pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIFxuICAgICAgICAgaWYgKCF0eXBlUmUpe1xuICAgICAgICAgICAgdHlwZVJlID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICBcIihcXFxcLj9cIiArXG4gICAgICAgICAgICAgICAgdG9rZW4udHlwZS5yZXBsYWNlKFwiLlwiLCBcIlxcXFwuXCIpLnJlcGxhY2UoXCJycGFyZW5cIiwgXCIucGFyZW5cIilcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcYig/OmVuZClcXGIvLCBcIig/OnN0YXJ0fGJlZ2lufGVuZClcIilcbiAgICAgICAgICAgICAgICArIFwiKStcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmFsdWVJbmRleCA9IHBvc2l0aW9uLmNvbHVtbiAtIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpIC0gMjtcbiAgICAgICAgdmFyIHZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgIFxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBcbiAgICAgICAgICAgIHdoaWxlICh2YWx1ZUluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hyID0gdmFsdWUuY2hhckF0KHZhbHVlSW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChjaHIgPT0gb3BlbkJyYWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGggLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7cm93OiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHZhbHVlSW5kZXggKyBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hyID09IGJyYWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGggKz0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWVJbmRleCAtPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7XG4gICAgICAgICAgICB9IHdoaWxlICh0b2tlbiAmJiAhdHlwZVJlLnRlc3QodG9rZW4udHlwZSkpO1xuXG4gICAgICAgICAgICBpZiAodG9rZW4gPT0gbnVsbClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIHZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgICAgICB2YWx1ZUluZGV4ID0gdmFsdWUubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHRoaXMuJGZpbmRDbG9zaW5nQnJhY2tldCA9IGZ1bmN0aW9uKGJyYWNrZXQsIHBvc2l0aW9uLCB0eXBlUmUpIHtcbiAgICAgICAgdmFyIGNsb3NpbmdCcmFja2V0ID0gdGhpcy4kYnJhY2tldHNbYnJhY2tldF07XG4gICAgICAgIHZhciBkZXB0aCA9IDE7XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3IodGhpcywgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgaWYgKCF0b2tlbilcbiAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgaWYgKCF0b2tlbilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoIXR5cGVSZSl7XG4gICAgICAgICAgICB0eXBlUmUgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgIFwiKFxcXFwuP1wiICtcbiAgICAgICAgICAgICAgICB0b2tlbi50eXBlLnJlcGxhY2UoXCIuXCIsIFwiXFxcXC5cIikucmVwbGFjZShcImxwYXJlblwiLCBcIi5wYXJlblwiKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxiKD86c3RhcnR8YmVnaW4pXFxiLywgXCIoPzpzdGFydHxiZWdpbnxlbmQpXCIpXG4gICAgICAgICAgICAgICAgKyBcIikrXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHZhbHVlSW5kZXggPSBwb3NpdGlvbi5jb2x1bW4gLSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKTtcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0b2tlbi52YWx1ZTtcbiAgICAgICAgICAgIHZhciB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICh2YWx1ZUluZGV4IDwgdmFsdWVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hyID0gdmFsdWUuY2hhckF0KHZhbHVlSW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChjaHIgPT0gY2xvc2luZ0JyYWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGggLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7cm93OiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHZhbHVlSW5kZXggKyBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hyID09IGJyYWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGggKz0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWVJbmRleCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKHRva2VuICYmICF0eXBlUmUudGVzdCh0b2tlbi50eXBlKSk7XG5cbiAgICAgICAgICAgIGlmICh0b2tlbiA9PSBudWxsKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICB2YWx1ZUluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbn1cbmV4cG9ydHMuQnJhY2tldE1hdGNoID0gQnJhY2tldE1hdGNoO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9lZGl0X3Nlc3Npb25cIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvb29wXCIsXCJhY2UvbGliL2xhbmdcIixcImFjZS9iaWRpaGFuZGxlclwiLFwiYWNlL2NvbmZpZ1wiLFwiYWNlL2xpYi9ldmVudF9lbWl0dGVyXCIsXCJhY2Uvc2VsZWN0aW9uXCIsXCJhY2UvbW9kZS90ZXh0XCIsXCJhY2UvcmFuZ2VcIixcImFjZS9kb2N1bWVudFwiLFwiYWNlL2JhY2tncm91bmRfdG9rZW5pemVyXCIsXCJhY2Uvc2VhcmNoX2hpZ2hsaWdodFwiLFwiYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nXCIsXCJhY2UvZWRpdF9zZXNzaW9uL2JyYWNrZXRfbWF0Y2hcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgb29wID0gYWNlcXVpcmUoXCIuL2xpYi9vb3BcIik7XG52YXIgbGFuZyA9IGFjZXF1aXJlKFwiLi9saWIvbGFuZ1wiKTtcbnZhciBCaWRpSGFuZGxlciA9IGFjZXF1aXJlKFwiLi9iaWRpaGFuZGxlclwiKS5CaWRpSGFuZGxlcjtcbnZhciBjb25maWcgPSBhY2VxdWlyZShcIi4vY29uZmlnXCIpO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi9saWIvZXZlbnRfZW1pdHRlclwiKS5FdmVudEVtaXR0ZXI7XG52YXIgU2VsZWN0aW9uID0gYWNlcXVpcmUoXCIuL3NlbGVjdGlvblwiKS5TZWxlY3Rpb247XG52YXIgVGV4dE1vZGUgPSBhY2VxdWlyZShcIi4vbW9kZS90ZXh0XCIpLk1vZGU7XG52YXIgUmFuZ2UgPSBhY2VxdWlyZShcIi4vcmFuZ2VcIikuUmFuZ2U7XG52YXIgRG9jdW1lbnQgPSBhY2VxdWlyZShcIi4vZG9jdW1lbnRcIikuRG9jdW1lbnQ7XG52YXIgQmFja2dyb3VuZFRva2VuaXplciA9IGFjZXF1aXJlKFwiLi9iYWNrZ3JvdW5kX3Rva2VuaXplclwiKS5CYWNrZ3JvdW5kVG9rZW5pemVyO1xudmFyIFNlYXJjaEhpZ2hsaWdodCA9IGFjZXF1aXJlKFwiLi9zZWFyY2hfaGlnaGxpZ2h0XCIpLlNlYXJjaEhpZ2hsaWdodDtcblxudmFyIEVkaXRTZXNzaW9uID0gZnVuY3Rpb24odGV4dCwgbW9kZSkge1xuICAgIHRoaXMuJGJyZWFrcG9pbnRzID0gW107XG4gICAgdGhpcy4kZGVjb3JhdGlvbnMgPSBbXTtcbiAgICB0aGlzLiRmcm9udE1hcmtlcnMgPSB7fTtcbiAgICB0aGlzLiRiYWNrTWFya2VycyA9IHt9O1xuICAgIHRoaXMuJG1hcmtlcklkID0gMTtcbiAgICB0aGlzLiR1bmRvU2VsZWN0ID0gdHJ1ZTtcblxuICAgIHRoaXMuJGZvbGREYXRhID0gW107XG4gICAgdGhpcy5pZCA9IFwic2Vzc2lvblwiICsgKCsrRWRpdFNlc3Npb24uJHVpZCk7XG4gICAgdGhpcy4kZm9sZERhdGEudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9pbihcIlxcblwiKTtcbiAgICB9O1xuICAgIHRoaXMub24oXCJjaGFuZ2VGb2xkXCIsIHRoaXMub25DaGFuZ2VGb2xkLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKHR5cGVvZiB0ZXh0ICE9IFwib2JqZWN0XCIgfHwgIXRleHQuZ2V0TGluZSlcbiAgICAgICAgdGV4dCA9IG5ldyBEb2N1bWVudCh0ZXh0KTtcblxuICAgIHRoaXMuJGJpZGlIYW5kbGVyID0gbmV3IEJpZGlIYW5kbGVyKHRoaXMpO1xuICAgIHRoaXMuc2V0RG9jdW1lbnQodGV4dCk7XG4gICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHRoaXMpO1xuXG4gICAgY29uZmlnLnJlc2V0T3B0aW9ucyh0aGlzKTtcbiAgICB0aGlzLnNldE1vZGUobW9kZSk7XG4gICAgY29uZmlnLl9zaWduYWwoXCJzZXNzaW9uXCIsIHRoaXMpO1xufTtcblxuXG5FZGl0U2Vzc2lvbi4kdWlkID0gMDtcblxuKGZ1bmN0aW9uKCkge1xuXG4gICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpO1xuICAgIHRoaXMuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2MpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jKVxuICAgICAgICAgICAgdGhpcy5kb2MucmVtb3ZlTGlzdGVuZXIoXCJjaGFuZ2VcIiwgdGhpcy4kb25DaGFuZ2UpO1xuXG4gICAgICAgIHRoaXMuZG9jID0gZG9jO1xuICAgICAgICBkb2Mub24oXCJjaGFuZ2VcIiwgdGhpcy4kb25DaGFuZ2UpO1xuXG4gICAgICAgIGlmICh0aGlzLmJnVG9rZW5pemVyKVxuICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zZXREb2N1bWVudCh0aGlzLmdldERvY3VtZW50KCkpO1xuXG4gICAgICAgIHRoaXMucmVzZXRDYWNoZXMoKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0RG9jdW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jO1xuICAgIH07XG4gICAgdGhpcy4kcmVzZXRSb3dDYWNoZSA9IGZ1bmN0aW9uKGRvY1Jvdykge1xuICAgICAgICBpZiAoIWRvY1Jvdykge1xuICAgICAgICAgICAgdGhpcy4kZG9jUm93Q2FjaGUgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuJHNjcmVlblJvd0NhY2hlID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGwgPSB0aGlzLiRkb2NSb3dDYWNoZS5sZW5ndGg7XG4gICAgICAgIHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleCh0aGlzLiRkb2NSb3dDYWNoZSwgZG9jUm93KSArIDE7XG4gICAgICAgIGlmIChsID4gaSkge1xuICAgICAgICAgICAgdGhpcy4kZG9jUm93Q2FjaGUuc3BsaWNlKGksIGwpO1xuICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUuc3BsaWNlKGksIGwpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuJGdldFJvd0NhY2hlSW5kZXggPSBmdW5jdGlvbihjYWNoZUFycmF5LCB2YWwpIHtcbiAgICAgICAgdmFyIGxvdyA9IDA7XG4gICAgICAgIHZhciBoaSA9IGNhY2hlQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgICAgICB3aGlsZSAobG93IDw9IGhpKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gKGxvdyArIGhpKSA+PiAxO1xuICAgICAgICAgICAgdmFyIGMgPSBjYWNoZUFycmF5W21pZF07XG5cbiAgICAgICAgICAgIGlmICh2YWwgPiBjKVxuICAgICAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWwgPCBjKVxuICAgICAgICAgICAgICAgIGhpID0gbWlkIC0gMTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gbWlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvdyAtMTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZXNldENhY2hlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7XG4gICAgICAgIHRoaXMuJHdyYXBEYXRhID0gW107XG4gICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlID0gW107XG4gICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoMCk7XG4gICAgICAgIGlmICh0aGlzLmJnVG9rZW5pemVyKVxuICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zdGFydCgwKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkNoYW5nZUZvbGQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBmb2xkID0gZS5kYXRhO1xuICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKGZvbGQuc3RhcnQucm93KTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uKGRlbHRhKSB7XG4gICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy4kYmlkaUhhbmRsZXIub25DaGFuZ2UoZGVsdGEpO1xuICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKGRlbHRhLnN0YXJ0LnJvdyk7XG5cbiAgICAgICAgdmFyIHJlbW92ZWRGb2xkcyA9IHRoaXMuJHVwZGF0ZUludGVybmFsRGF0YU9uQ2hhbmdlKGRlbHRhKTtcbiAgICAgICAgaWYgKCF0aGlzLiRmcm9tVW5kbyAmJiB0aGlzLiR1bmRvTWFuYWdlciAmJiAhZGVsdGEuaWdub3JlKSB7XG4gICAgICAgICAgICB0aGlzLiRkZWx0YXNEb2MucHVzaChkZWx0YSk7XG4gICAgICAgICAgICBpZiAocmVtb3ZlZEZvbGRzICYmIHJlbW92ZWRGb2xkcy5sZW5ndGggIT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGRlbHRhc0ZvbGQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJyZW1vdmVGb2xkc1wiLFxuICAgICAgICAgICAgICAgICAgICBmb2xkczogIHJlbW92ZWRGb2xkc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiRpbmZvcm1VbmRvTWFuYWdlci5zY2hlZHVsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iZ1Rva2VuaXplciAmJiB0aGlzLmJnVG9rZW5pemVyLiR1cGRhdGVPbkNoYW5nZShkZWx0YSk7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZVwiLCBkZWx0YSk7XG4gICAgfTtcbiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh0ZXh0KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZVRvKDAsIDApO1xuXG4gICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoMCk7XG4gICAgICAgIHRoaXMuJGRlbHRhcyA9IFtdO1xuICAgICAgICB0aGlzLiRkZWx0YXNEb2MgPSBbXTtcbiAgICAgICAgdGhpcy4kZGVsdGFzRm9sZCA9IFtdO1xuICAgICAgICB0aGlzLnNldFVuZG9NYW5hZ2VyKHRoaXMuJHVuZG9NYW5hZ2VyKTtcbiAgICAgICAgdGhpcy5nZXRVbmRvTWFuYWdlcigpLnJlc2V0KCk7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlID1cbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRWYWx1ZSgpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uO1xuICAgIH07XG4gICAgdGhpcy5nZXRTdGF0ZSA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICByZXR1cm4gdGhpcy5iZ1Rva2VuaXplci5nZXRTdGF0ZShyb3cpO1xuICAgIH07XG4gICAgdGhpcy5nZXRUb2tlbnMgPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmdUb2tlbml6ZXIuZ2V0VG9rZW5zKHJvdyk7XG4gICAgfTtcbiAgICB0aGlzLmdldFRva2VuQXQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5iZ1Rva2VuaXplci5nZXRUb2tlbnMocm93KTtcbiAgICAgICAgdmFyIHRva2VuLCBjID0gMDtcbiAgICAgICAgaWYgKGNvbHVtbiA9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgaSA9IHRva2Vucy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgYyA9IHRoaXMuZ2V0TGluZShyb3cpLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYyArPSB0b2tlbnNbaV0udmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChjID49IGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgIGlmICghdG9rZW4pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdG9rZW4uaW5kZXggPSBpO1xuICAgICAgICB0b2tlbi5zdGFydCA9IGMgLSB0b2tlbi52YWx1ZS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9O1xuICAgIHRoaXMuc2V0VW5kb01hbmFnZXIgPSBmdW5jdGlvbih1bmRvTWFuYWdlcikge1xuICAgICAgICB0aGlzLiR1bmRvTWFuYWdlciA9IHVuZG9NYW5hZ2VyO1xuICAgICAgICB0aGlzLiRkZWx0YXMgPSBbXTtcbiAgICAgICAgdGhpcy4kZGVsdGFzRG9jID0gW107XG4gICAgICAgIHRoaXMuJGRlbHRhc0ZvbGQgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy4kaW5mb3JtVW5kb01hbmFnZXIpXG4gICAgICAgICAgICB0aGlzLiRpbmZvcm1VbmRvTWFuYWdlci5jYW5jZWwoKTtcblxuICAgICAgICBpZiAodW5kb01hbmFnZXIpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICAgICAgdGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgc2VsZi4kaW5mb3JtVW5kb01hbmFnZXIuY2FuY2VsKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi4kZGVsdGFzRm9sZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IFwiZm9sZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFzOiBzZWxmLiRkZWx0YXNGb2xkXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLiRkZWx0YXNGb2xkID0gW107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuJGRlbHRhc0RvYy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IFwiZG9jXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YXM6IHNlbGYuJGRlbHRhc0RvY1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzRG9jID0gW107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuJGRlbHRhcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuZG9NYW5hZ2VyLmV4ZWN1dGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBcImFjZXVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW3NlbGYuJGRlbHRhcywgc2VsZl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZTogc2VsZi5tZXJnZVVuZG9EZWx0YXNcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYubWVyZ2VVbmRvRGVsdGFzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzID0gW107XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy4kaW5mb3JtVW5kb01hbmFnZXIgPSBsYW5nLmRlbGF5ZWRDYWxsKHRoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdlcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMubWFya1VuZG9Hcm91cCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyKVxuICAgICAgICAgICAgdGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyKCk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLiRkZWZhdWx0VW5kb01hbmFnZXIgPSB7XG4gICAgICAgIHVuZG86IGZ1bmN0aW9uKCkge30sXG4gICAgICAgIHJlZG86IGZ1bmN0aW9uKCkge30sXG4gICAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHt9XG4gICAgfTtcbiAgICB0aGlzLmdldFVuZG9NYW5hZ2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiR1bmRvTWFuYWdlciB8fCB0aGlzLiRkZWZhdWx0VW5kb01hbmFnZXI7XG4gICAgfTtcbiAgICB0aGlzLmdldFRhYlN0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5nZXRVc2VTb2Z0VGFicygpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFuZy5zdHJpbmdSZXBlYXQoXCIgXCIsIHRoaXMuZ2V0VGFiU2l6ZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBcIlxcdFwiO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNldFVzZVNvZnRUYWJzID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwidXNlU29mdFRhYnNcIiwgdmFsKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VXNlU29mdFRhYnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHVzZVNvZnRUYWJzICYmICF0aGlzLiRtb2RlLiRpbmRlbnRXaXRoVGFicztcbiAgICB9O1xuICAgIHRoaXMuc2V0VGFiU2l6ZSA9IGZ1bmN0aW9uKHRhYlNpemUpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJ0YWJTaXplXCIsIHRhYlNpemUpO1xuICAgIH07XG4gICAgdGhpcy5nZXRUYWJTaXplID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiR0YWJTaXplO1xuICAgIH07XG4gICAgdGhpcy5pc1RhYlN0b3AgPSBmdW5jdGlvbihwb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy4kdXNlU29mdFRhYnMgJiYgKHBvc2l0aW9uLmNvbHVtbiAlIHRoaXMuJHRhYlNpemUgPT09IDApO1xuICAgIH07XG4gICAgdGhpcy5zZXROYXZpZ2F0ZVdpdGhpblNvZnRUYWJzID0gZnVuY3Rpb24gKG5hdmlnYXRlV2l0aGluU29mdFRhYnMpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJuYXZpZ2F0ZVdpdGhpblNvZnRUYWJzXCIsIG5hdmlnYXRlV2l0aGluU29mdFRhYnMpO1xuICAgIH07XG4gICAgdGhpcy5nZXROYXZpZ2F0ZVdpdGhpblNvZnRUYWJzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRuYXZpZ2F0ZVdpdGhpblNvZnRUYWJzO1xuICAgIH07XG5cbiAgICB0aGlzLiRvdmVyd3JpdGUgPSBmYWxzZTtcbiAgICB0aGlzLnNldE92ZXJ3cml0ZSA9IGZ1bmN0aW9uKG92ZXJ3cml0ZSkge1xuICAgICAgICB0aGlzLnNldE9wdGlvbihcIm92ZXJ3cml0ZVwiLCBvdmVyd3JpdGUpO1xuICAgIH07XG4gICAgdGhpcy5nZXRPdmVyd3JpdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG92ZXJ3cml0ZTtcbiAgICB9O1xuICAgIHRoaXMudG9nZ2xlT3ZlcndyaXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2V0T3ZlcndyaXRlKCF0aGlzLiRvdmVyd3JpdGUpO1xuICAgIH07XG4gICAgdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLiRkZWNvcmF0aW9uc1tyb3ddKVxuICAgICAgICAgICAgdGhpcy4kZGVjb3JhdGlvbnNbcm93XSA9IFwiXCI7XG4gICAgICAgIHRoaXMuJGRlY29yYXRpb25zW3Jvd10gKz0gXCIgXCIgKyBjbGFzc05hbWU7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZUJyZWFrcG9pbnRcIiwge30pO1xuICAgIH07XG4gICAgdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpIHtcbiAgICAgICAgdGhpcy4kZGVjb3JhdGlvbnNbcm93XSA9ICh0aGlzLiRkZWNvcmF0aW9uc1tyb3ddIHx8IFwiXCIpLnJlcGxhY2UoXCIgXCIgKyBjbGFzc05hbWUsIFwiXCIpO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VCcmVha3BvaW50XCIsIHt9KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0QnJlYWtwb2ludHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGJyZWFrcG9pbnRzO1xuICAgIH07XG4gICAgdGhpcy5zZXRCcmVha3BvaW50cyA9IGZ1bmN0aW9uKHJvd3MpIHtcbiAgICAgICAgdGhpcy4kYnJlYWtwb2ludHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd3NbaV1dID0gXCJhY2VfYnJlYWtwb2ludFwiO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZUJyZWFrcG9pbnRcIiwge30pO1xuICAgIH07XG4gICAgdGhpcy5jbGVhckJyZWFrcG9pbnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZUJyZWFrcG9pbnRcIiwge30pO1xuICAgIH07XG4gICAgdGhpcy5zZXRCcmVha3BvaW50ID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpIHtcbiAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgY2xhc3NOYW1lID0gXCJhY2VfYnJlYWtwb2ludFwiO1xuICAgICAgICBpZiAoY2xhc3NOYW1lKVxuICAgICAgICAgICAgdGhpcy4kYnJlYWtwb2ludHNbcm93XSA9IGNsYXNzTmFtZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd107XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZUJyZWFrcG9pbnRcIiwge30pO1xuICAgIH07XG4gICAgdGhpcy5jbGVhckJyZWFrcG9pbnQgPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd107XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZUJyZWFrcG9pbnRcIiwge30pO1xuICAgIH07XG4gICAgdGhpcy5hZGRNYXJrZXIgPSBmdW5jdGlvbihyYW5nZSwgY2xhenosIHR5cGUsIGluRnJvbnQpIHtcbiAgICAgICAgdmFyIGlkID0gdGhpcy4kbWFya2VySWQrKztcblxuICAgICAgICB2YXIgbWFya2VyID0ge1xuICAgICAgICAgICAgcmFuZ2UgOiByYW5nZSxcbiAgICAgICAgICAgIHR5cGUgOiB0eXBlIHx8IFwibGluZVwiLFxuICAgICAgICAgICAgcmVuZGVyZXI6IHR5cGVvZiB0eXBlID09IFwiZnVuY3Rpb25cIiA/IHR5cGUgOiBudWxsLFxuICAgICAgICAgICAgY2xhenogOiBjbGF6eixcbiAgICAgICAgICAgIGluRnJvbnQ6ICEhaW5Gcm9udCxcbiAgICAgICAgICAgIGlkOiBpZFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChpbkZyb250KSB7XG4gICAgICAgICAgICB0aGlzLiRmcm9udE1hcmtlcnNbaWRdID0gbWFya2VyO1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsKFwiY2hhbmdlRnJvbnRNYXJrZXJcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiRiYWNrTWFya2Vyc1tpZF0gPSBtYXJrZXI7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VCYWNrTWFya2VyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH07XG4gICAgdGhpcy5hZGREeW5hbWljTWFya2VyID0gZnVuY3Rpb24obWFya2VyLCBpbkZyb250KSB7XG4gICAgICAgIGlmICghbWFya2VyLnVwZGF0ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGlkID0gdGhpcy4kbWFya2VySWQrKztcbiAgICAgICAgbWFya2VyLmlkID0gaWQ7XG4gICAgICAgIG1hcmtlci5pbkZyb250ID0gISFpbkZyb250O1xuXG4gICAgICAgIGlmIChpbkZyb250KSB7XG4gICAgICAgICAgICB0aGlzLiRmcm9udE1hcmtlcnNbaWRdID0gbWFya2VyO1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsKFwiY2hhbmdlRnJvbnRNYXJrZXJcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiRiYWNrTWFya2Vyc1tpZF0gPSBtYXJrZXI7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VCYWNrTWFya2VyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1hcmtlcjtcbiAgICB9O1xuICAgIHRoaXMucmVtb3ZlTWFya2VyID0gZnVuY3Rpb24obWFya2VySWQpIHtcbiAgICAgICAgdmFyIG1hcmtlciA9IHRoaXMuJGZyb250TWFya2Vyc1ttYXJrZXJJZF0gfHwgdGhpcy4kYmFja01hcmtlcnNbbWFya2VySWRdO1xuICAgICAgICBpZiAoIW1hcmtlcilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB2YXIgbWFya2VycyA9IG1hcmtlci5pbkZyb250ID8gdGhpcy4kZnJvbnRNYXJrZXJzIDogdGhpcy4kYmFja01hcmtlcnM7XG4gICAgICAgIGlmIChtYXJrZXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSAobWFya2Vyc1ttYXJrZXJJZF0pO1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsKG1hcmtlci5pbkZyb250ID8gXCJjaGFuZ2VGcm9udE1hcmtlclwiIDogXCJjaGFuZ2VCYWNrTWFya2VyXCIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdldE1hcmtlcnMgPSBmdW5jdGlvbihpbkZyb250KSB7XG4gICAgICAgIHJldHVybiBpbkZyb250ID8gdGhpcy4kZnJvbnRNYXJrZXJzIDogdGhpcy4kYmFja01hcmtlcnM7XG4gICAgfTtcblxuICAgIHRoaXMuaGlnaGxpZ2h0ID0gZnVuY3Rpb24ocmUpIHtcbiAgICAgICAgaWYgKCF0aGlzLiRzZWFyY2hIaWdobGlnaHQpIHtcbiAgICAgICAgICAgIHZhciBoaWdobGlnaHQgPSBuZXcgU2VhcmNoSGlnaGxpZ2h0KG51bGwsIFwiYWNlX3NlbGVjdGVkLXdvcmRcIiwgXCJ0ZXh0XCIpO1xuICAgICAgICAgICAgdGhpcy4kc2VhcmNoSGlnaGxpZ2h0ID0gdGhpcy5hZGREeW5hbWljTWFya2VyKGhpZ2hsaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kc2VhcmNoSGlnaGxpZ2h0LnNldFJlZ2V4cChyZSk7XG4gICAgfTtcbiAgICB0aGlzLmhpZ2hsaWdodExpbmVzID0gZnVuY3Rpb24oc3RhcnRSb3csIGVuZFJvdywgY2xhenosIGluRnJvbnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbmRSb3cgIT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgY2xhenogPSBlbmRSb3c7XG4gICAgICAgICAgICBlbmRSb3cgPSBzdGFydFJvdztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNsYXp6KVxuICAgICAgICAgICAgY2xhenogPSBcImFjZV9zdGVwXCI7XG5cbiAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0Um93LCAwLCBlbmRSb3csIEluZmluaXR5KTtcbiAgICAgICAgcmFuZ2UuaWQgPSB0aGlzLmFkZE1hcmtlcihyYW5nZSwgY2xhenosIFwiZnVsbExpbmVcIiwgaW5Gcm9udCk7XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICB9O1xuICAgIHRoaXMuc2V0QW5ub3RhdGlvbnMgPSBmdW5jdGlvbihhbm5vdGF0aW9ucykge1xuICAgICAgICB0aGlzLiRhbm5vdGF0aW9ucyA9IGFubm90YXRpb25zO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VBbm5vdGF0aW9uXCIsIHt9KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0QW5ub3RhdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGFubm90YXRpb25zIHx8IFtdO1xuICAgIH07XG4gICAgdGhpcy5jbGVhckFubm90YXRpb25zID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2V0QW5ub3RhdGlvbnMoW10pO1xuICAgIH07XG4gICAgdGhpcy4kZGV0ZWN0TmV3TGluZSA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhcXHI/XFxuKS9tKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoWzFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4kYXV0b05ld0xpbmUgPSBcIlxcblwiO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdldFdvcmRSYW5nZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHZhciBsaW5lID0gdGhpcy5nZXRMaW5lKHJvdyk7XG5cbiAgICAgICAgdmFyIGluVG9rZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKGNvbHVtbiA+IDApXG4gICAgICAgICAgICBpblRva2VuID0gISFsaW5lLmNoYXJBdChjb2x1bW4gLSAxKS5tYXRjaCh0aGlzLnRva2VuUmUpO1xuXG4gICAgICAgIGlmICghaW5Ub2tlbilcbiAgICAgICAgICAgIGluVG9rZW4gPSAhIWxpbmUuY2hhckF0KGNvbHVtbikubWF0Y2godGhpcy50b2tlblJlKTtcblxuICAgICAgICBpZiAoaW5Ub2tlbilcbiAgICAgICAgICAgIHZhciByZSA9IHRoaXMudG9rZW5SZTtcbiAgICAgICAgZWxzZSBpZiAoL15cXHMrJC8udGVzdChsaW5lLnNsaWNlKGNvbHVtbi0xLCBjb2x1bW4rMSkpKVxuICAgICAgICAgICAgdmFyIHJlID0gL1xccy87XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHZhciByZSA9IHRoaXMubm9uVG9rZW5SZTtcblxuICAgICAgICB2YXIgc3RhcnQgPSBjb2x1bW47XG4gICAgICAgIGlmIChzdGFydCA+IDApIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBzdGFydC0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKHN0YXJ0ID49IDAgJiYgbGluZS5jaGFyQXQoc3RhcnQpLm1hdGNoKHJlKSk7XG4gICAgICAgICAgICBzdGFydCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVuZCA9IGNvbHVtbjtcbiAgICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGxpbmUuY2hhckF0KGVuZCkubWF0Y2gocmUpKSB7XG4gICAgICAgICAgICBlbmQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93LCBzdGFydCwgcm93LCBlbmQpO1xuICAgIH07XG4gICAgdGhpcy5nZXRBV29yZFJhbmdlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIHdvcmRSYW5nZSA9IHRoaXMuZ2V0V29yZFJhbmdlKHJvdywgY29sdW1uKTtcbiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUod29yZFJhbmdlLmVuZC5yb3cpO1xuXG4gICAgICAgIHdoaWxlIChsaW5lLmNoYXJBdCh3b3JkUmFuZ2UuZW5kLmNvbHVtbikubWF0Y2goL1sgXFx0XS8pKSB7XG4gICAgICAgICAgICB3b3JkUmFuZ2UuZW5kLmNvbHVtbiArPSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3b3JkUmFuZ2U7XG4gICAgfTtcbiAgICB0aGlzLnNldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24obmV3TGluZU1vZGUpIHtcbiAgICAgICAgdGhpcy5kb2Muc2V0TmV3TGluZU1vZGUobmV3TGluZU1vZGUpO1xuICAgIH07XG4gICAgdGhpcy5nZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0TmV3TGluZU1vZGUoKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0VXNlV29ya2VyID0gZnVuY3Rpb24odXNlV29ya2VyKSB7IHRoaXMuc2V0T3B0aW9uKFwidXNlV29ya2VyXCIsIHVzZVdvcmtlcik7IH07XG4gICAgdGhpcy5nZXRVc2VXb3JrZXIgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuJHVzZVdvcmtlcjsgfTtcbiAgICB0aGlzLm9uUmVsb2FkVG9rZW5pemVyID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgcm93cyA9IGUuZGF0YTtcbiAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zdGFydChyb3dzLmZpcnN0KTtcbiAgICAgICAgdGhpcy5fc2lnbmFsKFwidG9rZW5pemVyVXBkYXRlXCIsIGUpO1xuICAgIH07XG5cbiAgICB0aGlzLiRtb2RlcyA9IHt9O1xuICAgIHRoaXMuJG1vZGUgPSBudWxsO1xuICAgIHRoaXMuJG1vZGVJZCA9IG51bGw7XG4gICAgdGhpcy5zZXRNb2RlID0gZnVuY3Rpb24obW9kZSwgY2IpIHtcbiAgICAgICAgaWYgKG1vZGUgJiYgdHlwZW9mIG1vZGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmIChtb2RlLmdldFRva2VuaXplcilcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kb25DaGFuZ2VNb2RlKG1vZGUpO1xuICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSBtb2RlO1xuICAgICAgICAgICAgdmFyIHBhdGggPSBvcHRpb25zLnBhdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXRoID0gbW9kZSB8fCBcImFjZS9tb2RlL3RleHRcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuJG1vZGVzW1wiYWNlL21vZGUvdGV4dFwiXSlcbiAgICAgICAgICAgIHRoaXMuJG1vZGVzW1wiYWNlL21vZGUvdGV4dFwiXSA9IG5ldyBUZXh0TW9kZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLiRtb2Rlc1twYXRoXSAmJiAhb3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy4kb25DaGFuZ2VNb2RlKHRoaXMuJG1vZGVzW3BhdGhdKTtcbiAgICAgICAgICAgIGNiICYmIGNiKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kbW9kZUlkID0gcGF0aDtcbiAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoW1wibW9kZVwiLCBwYXRoXSwgZnVuY3Rpb24obSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJG1vZGVJZCAhPT0gcGF0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gY2IgJiYgY2IoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiRtb2Rlc1twYXRoXSAmJiAhb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlTW9kZSh0aGlzLiRtb2Rlc1twYXRoXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG0gJiYgbS5Nb2RlKSB7XG4gICAgICAgICAgICAgICAgbSA9IG5ldyBtLk1vZGUob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG1vZGVzW3BhdGhdID0gbTtcbiAgICAgICAgICAgICAgICAgICAgbS4kaWQgPSBwYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYiAmJiBjYigpO1xuICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICBpZiAoIXRoaXMuJG1vZGUpXG4gICAgICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUodGhpcy4kbW9kZXNbXCJhY2UvbW9kZS90ZXh0XCJdLCB0cnVlKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kb25DaGFuZ2VNb2RlID0gZnVuY3Rpb24obW9kZSwgJGlzUGxhY2Vob2xkZXIpIHtcbiAgICAgICAgaWYgKCEkaXNQbGFjZWhvbGRlcilcbiAgICAgICAgICAgIHRoaXMuJG1vZGVJZCA9IG1vZGUuJGlkO1xuICAgICAgICBpZiAodGhpcy4kbW9kZSA9PT0gbW9kZSkgXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy4kbW9kZSA9IG1vZGU7XG5cbiAgICAgICAgdGhpcy4kc3RvcFdvcmtlcigpO1xuXG4gICAgICAgIGlmICh0aGlzLiR1c2VXb3JrZXIpXG4gICAgICAgICAgICB0aGlzLiRzdGFydFdvcmtlcigpO1xuXG4gICAgICAgIHZhciB0b2tlbml6ZXIgPSBtb2RlLmdldFRva2VuaXplcigpO1xuXG4gICAgICAgIGlmKHRva2VuaXplci5hZGRFdmVudExpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhciBvblJlbG9hZFRva2VuaXplciA9IHRoaXMub25SZWxvYWRUb2tlbml6ZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRva2VuaXplci5hZGRFdmVudExpc3RlbmVyKFwidXBkYXRlXCIsIG9uUmVsb2FkVG9rZW5pemVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5iZ1Rva2VuaXplcikge1xuICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplciA9IG5ldyBCYWNrZ3JvdW5kVG9rZW5pemVyKHRva2VuaXplcik7XG4gICAgICAgICAgICB2YXIgX3NlbGYgPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5hZGRFdmVudExpc3RlbmVyKFwidXBkYXRlXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICBfc2VsZi5fc2lnbmFsKFwidG9rZW5pemVyVXBkYXRlXCIsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnNldFRva2VuaXplcih0b2tlbml6ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zZXREb2N1bWVudCh0aGlzLmdldERvY3VtZW50KCkpO1xuXG4gICAgICAgIHRoaXMudG9rZW5SZSA9IG1vZGUudG9rZW5SZTtcbiAgICAgICAgdGhpcy5ub25Ub2tlblJlID0gbW9kZS5ub25Ub2tlblJlO1xuXG4gICAgICAgIFxuICAgICAgICBpZiAoISRpc1BsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICBpZiAobW9kZS5hdHRhY2hUb1Nlc3Npb24pXG4gICAgICAgICAgICAgICAgbW9kZS5hdHRhY2hUb1Nlc3Npb24odGhpcyk7XG4gICAgICAgICAgICB0aGlzLiRvcHRpb25zLndyYXBNZXRob2Quc2V0LmNhbGwodGhpcywgdGhpcy4kd3JhcE1ldGhvZCk7XG4gICAgICAgICAgICB0aGlzLiRzZXRGb2xkaW5nKG1vZGUuZm9sZGluZ1J1bGVzKTtcbiAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc3RhcnQoMCk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0KFwiY2hhbmdlTW9kZVwiKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRzdG9wV29ya2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLiR3b3JrZXIpIHtcbiAgICAgICAgICAgIHRoaXMuJHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy4kc3RhcnRXb3JrZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IHRoaXMuJG1vZGUuY3JlYXRlV29ya2VyKHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25maWcud2FybihcIkNvdWxkIG5vdCBsb2FkIHdvcmtlclwiLCBlKTtcbiAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0TW9kZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kbW9kZTtcbiAgICB9O1xuXG4gICAgdGhpcy4kc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLnNldFNjcm9sbFRvcCA9IGZ1bmN0aW9uKHNjcm9sbFRvcCkge1xuICAgICAgICBpZiAodGhpcy4kc2Nyb2xsVG9wID09PSBzY3JvbGxUb3AgfHwgaXNOYU4oc2Nyb2xsVG9wKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aGlzLiRzY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZVNjcm9sbFRvcFwiLCBzY3JvbGxUb3ApO1xuICAgIH07XG4gICAgdGhpcy5nZXRTY3JvbGxUb3AgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNjcm9sbFRvcDtcbiAgICB9O1xuXG4gICAgdGhpcy4kc2Nyb2xsTGVmdCA9IDA7XG4gICAgdGhpcy5zZXRTY3JvbGxMZWZ0ID0gZnVuY3Rpb24oc2Nyb2xsTGVmdCkge1xuICAgICAgICBpZiAodGhpcy4kc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCB8fCBpc05hTihzY3JvbGxMZWZ0KSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aGlzLiRzY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgdGhpcy5fc2lnbmFsKFwiY2hhbmdlU2Nyb2xsTGVmdFwiLCBzY3JvbGxMZWZ0KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2Nyb2xsTGVmdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc2Nyb2xsTGVmdDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2NyZWVuV2lkdGggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kY29tcHV0ZVdpZHRoKCk7XG4gICAgICAgIGlmICh0aGlzLmxpbmVXaWRnZXRzKSBcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmdldExpbmVXaWRnZXRNYXhXaWR0aCgpLCB0aGlzLnNjcmVlbldpZHRoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGg7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmdldExpbmVXaWRnZXRNYXhXaWR0aCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5saW5lV2lkZ2V0c1dpZHRoICE9IG51bGwpIHJldHVybiB0aGlzLmxpbmVXaWRnZXRzV2lkdGg7XG4gICAgICAgIHZhciB3aWR0aCA9IDA7XG4gICAgICAgIHRoaXMubGluZVdpZGdldHMuZm9yRWFjaChmdW5jdGlvbih3KSB7XG4gICAgICAgICAgICBpZiAodyAmJiB3LnNjcmVlbldpZHRoID4gd2lkdGgpXG4gICAgICAgICAgICAgICAgd2lkdGggPSB3LnNjcmVlbldpZHRoO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubGluZVdpZGdldFdpZHRoID0gd2lkdGg7XG4gICAgfTtcblxuICAgIHRoaXMuJGNvbXB1dGVXaWR0aCA9IGZ1bmN0aW9uKGZvcmNlKSB7XG4gICAgICAgIGlmICh0aGlzLiRtb2RpZmllZCB8fCBmb3JjZSkge1xuICAgICAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjcmVlbldpZHRoID0gdGhpcy4kd3JhcExpbWl0O1xuXG4gICAgICAgICAgICB2YXIgbGluZXMgPSB0aGlzLmRvYy5nZXRBbGxMaW5lcygpO1xuICAgICAgICAgICAgdmFyIGNhY2hlID0gdGhpcy4kcm93TGVuZ3RoQ2FjaGU7XG4gICAgICAgICAgICB2YXIgbG9uZ2VzdFNjcmVlbkxpbmUgPSAwO1xuICAgICAgICAgICAgdmFyIGZvbGRJbmRleCA9IDA7XG4gICAgICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLiRmb2xkRGF0YVtmb2xkSW5kZXhdO1xuICAgICAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7XG4gICAgICAgICAgICB2YXIgbGVuID0gbGluZXMubGVuZ3RoO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPiBmb2xkU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGZvbGRMaW5lLmVuZC5yb3cgKyAxO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBsZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLiRmb2xkRGF0YVtmb2xkSW5kZXgrK107XG4gICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNhY2hlW2ldID09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlW2ldID0gdGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGgobGluZXNbaV0pWzBdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNhY2hlW2ldID4gbG9uZ2VzdFNjcmVlbkxpbmUpXG4gICAgICAgICAgICAgICAgICAgIGxvbmdlc3RTY3JlZW5MaW5lID0gY2FjaGVbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNjcmVlbldpZHRoID0gbG9uZ2VzdFNjcmVlbkxpbmU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0TGluZSA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0TGluZShyb3cpO1xuICAgIH07XG4gICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRMaW5lcyhmaXJzdFJvdywgbGFzdFJvdyk7XG4gICAgfTtcbiAgICB0aGlzLmdldExlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0TGVuZ3RoKCk7XG4gICAgfTtcbiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UgfHwgdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSk7XG4gICAgfTtcbiAgICB0aGlzLmluc2VydCA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvYy5pbnNlcnQocG9zaXRpb24sIHRleHQpO1xuICAgIH07XG4gICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2MucmVtb3ZlKHJhbmdlKTtcbiAgICB9O1xuICAgIHRoaXMucmVtb3ZlRnVsbExpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpe1xuICAgICAgICByZXR1cm4gdGhpcy5kb2MucmVtb3ZlRnVsbExpbmVzKGZpcnN0Um93LCBsYXN0Um93KTtcbiAgICB9O1xuICAgIHRoaXMudW5kb0NoYW5nZXMgPSBmdW5jdGlvbihkZWx0YXMsIGRvbnRTZWxlY3QpIHtcbiAgICAgICAgaWYgKCFkZWx0YXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuJGZyb21VbmRvID0gdHJ1ZTtcbiAgICAgICAgdmFyIGxhc3RVbmRvUmFuZ2UgPSBudWxsO1xuICAgICAgICBmb3IgKHZhciBpID0gZGVsdGFzLmxlbmd0aCAtIDE7IGkgIT0gLTE7IGktLSkge1xuICAgICAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFzW2ldO1xuICAgICAgICAgICAgaWYgKGRlbHRhLmdyb3VwID09IFwiZG9jXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvYy5yZXZlcnREZWx0YXMoZGVsdGEuZGVsdGFzKTtcbiAgICAgICAgICAgICAgICBsYXN0VW5kb1JhbmdlID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZ2V0VW5kb1NlbGVjdGlvbihkZWx0YS5kZWx0YXMsIHRydWUsIGxhc3RVbmRvUmFuZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWx0YS5kZWx0YXMuZm9yRWFjaChmdW5jdGlvbihmb2xkRGVsdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRGb2xkcyhmb2xkRGVsdGEuZm9sZHMpO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGZyb21VbmRvID0gZmFsc2U7XG4gICAgICAgIGxhc3RVbmRvUmFuZ2UgJiZcbiAgICAgICAgICAgIHRoaXMuJHVuZG9TZWxlY3QgJiZcbiAgICAgICAgICAgICFkb250U2VsZWN0ICYmXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShsYXN0VW5kb1JhbmdlKTtcbiAgICAgICAgcmV0dXJuIGxhc3RVbmRvUmFuZ2U7XG4gICAgfTtcbiAgICB0aGlzLnJlZG9DaGFuZ2VzID0gZnVuY3Rpb24oZGVsdGFzLCBkb250U2VsZWN0KSB7XG4gICAgICAgIGlmICghZGVsdGFzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IHRydWU7XG4gICAgICAgIHZhciBsYXN0VW5kb1JhbmdlID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWx0YXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1tpXTtcbiAgICAgICAgICAgIGlmIChkZWx0YS5ncm91cCA9PSBcImRvY1wiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb2MuYXBwbHlEZWx0YXMoZGVsdGEuZGVsdGFzKTtcbiAgICAgICAgICAgICAgICBsYXN0VW5kb1JhbmdlID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZ2V0VW5kb1NlbGVjdGlvbihkZWx0YS5kZWx0YXMsIGZhbHNlLCBsYXN0VW5kb1JhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IGZhbHNlO1xuICAgICAgICBsYXN0VW5kb1JhbmdlICYmXG4gICAgICAgICAgICB0aGlzLiR1bmRvU2VsZWN0ICYmXG4gICAgICAgICAgICAhZG9udFNlbGVjdCAmJlxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UobGFzdFVuZG9SYW5nZSk7XG4gICAgICAgIHJldHVybiBsYXN0VW5kb1JhbmdlO1xuICAgIH07XG4gICAgdGhpcy5zZXRVbmRvU2VsZWN0ID0gZnVuY3Rpb24oZW5hYmxlKSB7XG4gICAgICAgIHRoaXMuJHVuZG9TZWxlY3QgPSBlbmFibGU7XG4gICAgfTtcblxuICAgIHRoaXMuJGdldFVuZG9TZWxlY3Rpb24gPSBmdW5jdGlvbihkZWx0YXMsIGlzVW5kbywgbGFzdFVuZG9SYW5nZSkge1xuICAgICAgICBmdW5jdGlvbiBpc0luc2VydChkZWx0YSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzVW5kbyA/IGRlbHRhLmFjdGlvbiAhPT0gXCJpbnNlcnRcIiA6IGRlbHRhLmFjdGlvbiA9PT0gXCJpbnNlcnRcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1swXTtcbiAgICAgICAgdmFyIHJhbmdlLCBwb2ludDtcbiAgICAgICAgdmFyIGxhc3REZWx0YUlzSW5zZXJ0ID0gZmFsc2U7XG4gICAgICAgIGlmIChpc0luc2VydChkZWx0YSkpIHtcbiAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkZWx0YS5zdGFydCwgZGVsdGEuZW5kKTtcbiAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkZWx0YS5zdGFydCwgZGVsdGEuc3RhcnQpO1xuICAgICAgICAgICAgbGFzdERlbHRhSXNJbnNlcnQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgZGVsdGFzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkZWx0YSA9IGRlbHRhc1tpXTtcbiAgICAgICAgICAgIGlmIChpc0luc2VydChkZWx0YSkpIHtcbiAgICAgICAgICAgICAgICBwb2ludCA9IGRlbHRhLnN0YXJ0O1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJlKHBvaW50LnJvdywgcG9pbnQuY29sdW1uKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydChwb2ludCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBvaW50ID0gZGVsdGEuZW5kO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJlKHBvaW50LnJvdywgcG9pbnQuY29sdW1uKSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLnNldEVuZChwb2ludCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcG9pbnQgPSBkZWx0YS5zdGFydDtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZShwb2ludC5yb3csIHBvaW50LmNvbHVtbikgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGRlbHRhLnN0YXJ0LCBkZWx0YS5zdGFydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RVbmRvUmFuZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKFJhbmdlLmNvbXBhcmVQb2ludHMobGFzdFVuZG9SYW5nZS5zdGFydCwgcmFuZ2Uuc3RhcnQpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGFzdFVuZG9SYW5nZS5zdGFydC5jb2x1bW4gKz0gcmFuZ2UuZW5kLmNvbHVtbiAtIHJhbmdlLnN0YXJ0LmNvbHVtbjtcbiAgICAgICAgICAgICAgICBsYXN0VW5kb1JhbmdlLmVuZC5jb2x1bW4gKz0gcmFuZ2UuZW5kLmNvbHVtbiAtIHJhbmdlLnN0YXJ0LmNvbHVtbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNtcCA9IGxhc3RVbmRvUmFuZ2UuY29tcGFyZVJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgIGlmIChjbXAgPT0gMSkge1xuICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KGxhc3RVbmRvUmFuZ2Uuc3RhcnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zZXRFbmQobGFzdFVuZG9SYW5nZS5lbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH07XG4gICAgdGhpcy5yZXBsYWNlID0gZnVuY3Rpb24ocmFuZ2UsIHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnJlcGxhY2UocmFuZ2UsIHRleHQpO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlVGV4dCA9IGZ1bmN0aW9uKGZyb21SYW5nZSwgdG9Qb3NpdGlvbiwgY29weSkge1xuICAgICAgICB2YXIgdGV4dCA9IHRoaXMuZ2V0VGV4dFJhbmdlKGZyb21SYW5nZSk7XG4gICAgICAgIHZhciBmb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKGZyb21SYW5nZSk7XG5cbiAgICAgICAgdmFyIHRvUmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKHRvUG9zaXRpb24sIHRvUG9zaXRpb24pO1xuICAgICAgICBpZiAoIWNvcHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKGZyb21SYW5nZSk7XG4gICAgICAgICAgICB2YXIgcm93RGlmZiA9IGZyb21SYW5nZS5zdGFydC5yb3cgLSBmcm9tUmFuZ2UuZW5kLnJvdztcbiAgICAgICAgICAgIHZhciBjb2xsRGlmZiA9IHJvd0RpZmYgPyAtZnJvbVJhbmdlLmVuZC5jb2x1bW4gOiBmcm9tUmFuZ2Uuc3RhcnQuY29sdW1uIC0gZnJvbVJhbmdlLmVuZC5jb2x1bW47XG4gICAgICAgICAgICBpZiAoY29sbERpZmYpIHtcbiAgICAgICAgICAgICAgICBpZiAodG9SYW5nZS5zdGFydC5yb3cgPT0gZnJvbVJhbmdlLmVuZC5yb3cgJiYgdG9SYW5nZS5zdGFydC5jb2x1bW4gPiBmcm9tUmFuZ2UuZW5kLmNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgdG9SYW5nZS5zdGFydC5jb2x1bW4gKz0gY29sbERpZmY7XG4gICAgICAgICAgICAgICAgaWYgKHRvUmFuZ2UuZW5kLnJvdyA9PSBmcm9tUmFuZ2UuZW5kLnJvdyAmJiB0b1JhbmdlLmVuZC5jb2x1bW4gPiBmcm9tUmFuZ2UuZW5kLmNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgdG9SYW5nZS5lbmQuY29sdW1uICs9IGNvbGxEaWZmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvd0RpZmYgJiYgdG9SYW5nZS5zdGFydC5yb3cgPj0gZnJvbVJhbmdlLmVuZC5yb3cpIHtcbiAgICAgICAgICAgICAgICB0b1JhbmdlLnN0YXJ0LnJvdyArPSByb3dEaWZmO1xuICAgICAgICAgICAgICAgIHRvUmFuZ2UuZW5kLnJvdyArPSByb3dEaWZmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdG9SYW5nZS5lbmQgPSB0aGlzLmluc2VydCh0b1JhbmdlLnN0YXJ0LCB0ZXh0KTtcbiAgICAgICAgaWYgKGZvbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIG9sZFN0YXJ0ID0gZnJvbVJhbmdlLnN0YXJ0O1xuICAgICAgICAgICAgdmFyIG5ld1N0YXJ0ID0gdG9SYW5nZS5zdGFydDtcbiAgICAgICAgICAgIHZhciByb3dEaWZmID0gbmV3U3RhcnQucm93IC0gb2xkU3RhcnQucm93O1xuICAgICAgICAgICAgdmFyIGNvbGxEaWZmID0gbmV3U3RhcnQuY29sdW1uIC0gb2xkU3RhcnQuY29sdW1uO1xuICAgICAgICAgICAgdGhpcy5hZGRGb2xkcyhmb2xkcy5tYXAoZnVuY3Rpb24oeCkge1xuICAgICAgICAgICAgICAgIHggPSB4LmNsb25lKCk7XG4gICAgICAgICAgICAgICAgaWYgKHguc3RhcnQucm93ID09IG9sZFN0YXJ0LnJvdylcbiAgICAgICAgICAgICAgICAgICAgeC5zdGFydC5jb2x1bW4gKz0gY29sbERpZmY7XG4gICAgICAgICAgICAgICAgaWYgKHguZW5kLnJvdyA9PSBvbGRTdGFydC5yb3cpXG4gICAgICAgICAgICAgICAgICAgIHguZW5kLmNvbHVtbiArPSBjb2xsRGlmZjtcbiAgICAgICAgICAgICAgICB4LnN0YXJ0LnJvdyArPSByb3dEaWZmO1xuICAgICAgICAgICAgICAgIHguZW5kLnJvdyArPSByb3dEaWZmO1xuICAgICAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvUmFuZ2U7XG4gICAgfTtcbiAgICB0aGlzLmluZGVudFJvd3MgPSBmdW5jdGlvbihzdGFydFJvdywgZW5kUm93LCBpbmRlbnRTdHJpbmcpIHtcbiAgICAgICAgaW5kZW50U3RyaW5nID0gaW5kZW50U3RyaW5nLnJlcGxhY2UoL1xcdC9nLCB0aGlzLmdldFRhYlN0cmluZygpKTtcbiAgICAgICAgZm9yICh2YXIgcm93PXN0YXJ0Um93OyByb3c8PWVuZFJvdzsgcm93KyspXG4gICAgICAgICAgICB0aGlzLmRvYy5pbnNlcnRJbkxpbmUoe3Jvdzogcm93LCBjb2x1bW46IDB9LCBpbmRlbnRTdHJpbmcpO1xuICAgIH07XG4gICAgdGhpcy5vdXRkZW50Um93cyA9IGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgICB2YXIgcm93UmFuZ2UgPSByYW5nZS5jb2xsYXBzZVJvd3MoKTtcbiAgICAgICAgdmFyIGRlbGV0ZVJhbmdlID0gbmV3IFJhbmdlKDAsIDAsIDAsIDApO1xuICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuZ2V0VGFiU2l6ZSgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSByb3dSYW5nZS5zdGFydC5yb3c7IGkgPD0gcm93UmFuZ2UuZW5kLnJvdzsgKytpKSB7XG4gICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShpKTtcblxuICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQucm93ID0gaTtcbiAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5yb3cgPSBpO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaXplOyArK2opXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KGopICE9ICcgJylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBpZiAoaiA8IHNpemUgJiYgbGluZS5jaGFyQXQoaikgPT0gJ1xcdCcpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVSYW5nZS5zdGFydC5jb2x1bW4gPSBqO1xuICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5jb2x1bW4gPSBqICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQuY29sdW1uID0gMDtcbiAgICAgICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQuY29sdW1uID0gajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKGRlbGV0ZVJhbmdlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRtb3ZlTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdywgZGlyKSB7XG4gICAgICAgIGZpcnN0Um93ID0gdGhpcy5nZXRSb3dGb2xkU3RhcnQoZmlyc3RSb3cpO1xuICAgICAgICBsYXN0Um93ID0gdGhpcy5nZXRSb3dGb2xkRW5kKGxhc3RSb3cpO1xuICAgICAgICBpZiAoZGlyIDwgMCkge1xuICAgICAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2V0Um93Rm9sZFN0YXJ0KGZpcnN0Um93ICsgZGlyKTtcbiAgICAgICAgICAgIGlmIChyb3cgPCAwKSByZXR1cm4gMDtcbiAgICAgICAgICAgIHZhciBkaWZmID0gcm93LWZpcnN0Um93O1xuICAgICAgICB9IGVsc2UgaWYgKGRpciA+IDApIHtcbiAgICAgICAgICAgIHZhciByb3cgPSB0aGlzLmdldFJvd0ZvbGRFbmQobGFzdFJvdyArIGRpcik7XG4gICAgICAgICAgICBpZiAocm93ID4gdGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSkgcmV0dXJuIDA7XG4gICAgICAgICAgICB2YXIgZGlmZiA9IHJvdy1sYXN0Um93O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlyc3RSb3cgPSB0aGlzLiRjbGlwUm93VG9Eb2N1bWVudChmaXJzdFJvdyk7XG4gICAgICAgICAgICBsYXN0Um93ID0gdGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQobGFzdFJvdyk7XG4gICAgICAgICAgICB2YXIgZGlmZiA9IGxhc3RSb3cgLSBmaXJzdFJvdyArIDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2UoZmlyc3RSb3csIDAsIGxhc3RSb3csIE51bWJlci5NQVhfVkFMVUUpO1xuICAgICAgICB2YXIgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShyYW5nZSkubWFwKGZ1bmN0aW9uKHgpe1xuICAgICAgICAgICAgeCA9IHguY2xvbmUoKTtcbiAgICAgICAgICAgIHguc3RhcnQucm93ICs9IGRpZmY7XG4gICAgICAgICAgICB4LmVuZC5yb3cgKz0gZGlmZjtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHZhciBsaW5lcyA9IGRpciA9PSAwXG4gICAgICAgICAgICA/IHRoaXMuZG9jLmdldExpbmVzKGZpcnN0Um93LCBsYXN0Um93KVxuICAgICAgICAgICAgOiB0aGlzLmRvYy5yZW1vdmVGdWxsTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpO1xuICAgICAgICB0aGlzLmRvYy5pbnNlcnRGdWxsTGluZXMoZmlyc3RSb3crZGlmZiwgbGluZXMpO1xuICAgICAgICBmb2xkcy5sZW5ndGggJiYgdGhpcy5hZGRGb2xkcyhmb2xkcyk7XG4gICAgICAgIHJldHVybiBkaWZmO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlTGluZXNVcCA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRtb3ZlTGluZXMoZmlyc3RSb3csIGxhc3RSb3csIC0xKTtcbiAgICB9O1xuICAgIHRoaXMubW92ZUxpbmVzRG93biA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRtb3ZlTGluZXMoZmlyc3RSb3csIGxhc3RSb3csIDEpO1xuICAgIH07XG4gICAgdGhpcy5kdXBsaWNhdGVMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRtb3ZlTGluZXMoZmlyc3RSb3csIGxhc3RSb3csIDApO1xuICAgIH07XG5cblxuICAgIHRoaXMuJGNsaXBSb3dUb0RvY3VtZW50ID0gZnVuY3Rpb24ocm93KSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3csIHRoaXMuZG9jLmdldExlbmd0aCgpLTEpKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kY2xpcENvbHVtblRvUm93ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKGNvbHVtbiA8IDApXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuZG9jLmdldExpbmUocm93KS5sZW5ndGgsIGNvbHVtbik7XG4gICAgfTtcblxuXG4gICAgdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIGNvbHVtbiA9IE1hdGgubWF4KDAsIGNvbHVtbik7XG5cbiAgICAgICAgaWYgKHJvdyA8IDApIHtcbiAgICAgICAgICAgIHJvdyA9IDA7XG4gICAgICAgICAgICBjb2x1bW4gPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxlbiA9IHRoaXMuZG9jLmdldExlbmd0aCgpO1xuICAgICAgICAgICAgaWYgKHJvdyA+PSBsZW4pIHtcbiAgICAgICAgICAgICAgICByb3cgPSBsZW4gLSAxO1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuZG9jLmdldExpbmUobGVuLTEpLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gTWF0aC5taW4odGhpcy5kb2MuZ2V0TGluZShyb3cpLmxlbmd0aCwgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogY29sdW1uXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHRoaXMuJGNsaXBSYW5nZVRvRG9jdW1lbnQgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93IDwgMCkge1xuICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93ID0gMDtcbiAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSB0aGlzLiRjbGlwQ29sdW1uVG9Sb3coXG4gICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW4gPSB0aGlzLmRvYy5nZXRMZW5ndGgoKSAtIDE7XG4gICAgICAgIGlmIChyYW5nZS5lbmQucm93ID4gbGVuKSB7XG4gICAgICAgICAgICByYW5nZS5lbmQucm93ID0gbGVuO1xuICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IHRoaXMuZG9jLmdldExpbmUobGVuKS5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gdGhpcy4kY2xpcENvbHVtblRvUm93KFxuICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5yb3csXG4gICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfTtcbiAgICB0aGlzLiR3cmFwTGltaXQgPSA4MDtcbiAgICB0aGlzLiR1c2VXcmFwTW9kZSA9IGZhbHNlO1xuICAgIHRoaXMuJHdyYXBMaW1pdFJhbmdlID0ge1xuICAgICAgICBtaW4gOiBudWxsLFxuICAgICAgICBtYXggOiBudWxsXG4gICAgfTtcbiAgICB0aGlzLnNldFVzZVdyYXBNb2RlID0gZnVuY3Rpb24odXNlV3JhcE1vZGUpIHtcbiAgICAgICAgaWYgKHVzZVdyYXBNb2RlICE9IHRoaXMuJHVzZVdyYXBNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLiR1c2VXcmFwTW9kZSA9IHVzZVdyYXBNb2RlO1xuICAgICAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTtcbiAgICAgICAgICAgIGlmICh1c2VXcmFwTW9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuJHdyYXBEYXRhID0gQXJyYXkobGVuKTtcbiAgICAgICAgICAgICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSgwLCBsZW4gLSAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fc2lnbmFsKFwiY2hhbmdlV3JhcE1vZGVcIik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0VXNlV3JhcE1vZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHVzZVdyYXBNb2RlO1xuICAgIH07XG4gICAgdGhpcy5zZXRXcmFwTGltaXRSYW5nZSA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4gICAgICAgIGlmICh0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4gIT09IG1pbiB8fCB0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXggIT09IG1heCkge1xuICAgICAgICAgICAgdGhpcy4kd3JhcExpbWl0UmFuZ2UgPSB7IG1pbjogbWluLCBtYXg6IG1heCB9O1xuICAgICAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy4kYmlkaUhhbmRsZXIubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSlcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VXcmFwTW9kZVwiKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5hZGp1c3RXcmFwTGltaXQgPSBmdW5jdGlvbihkZXNpcmVkTGltaXQsICRwcmludE1hcmdpbikge1xuICAgICAgICB2YXIgbGltaXRzID0gdGhpcy4kd3JhcExpbWl0UmFuZ2U7XG4gICAgICAgIGlmIChsaW1pdHMubWF4IDwgMClcbiAgICAgICAgICAgIGxpbWl0cyA9IHttaW46ICRwcmludE1hcmdpbiwgbWF4OiAkcHJpbnRNYXJnaW59O1xuICAgICAgICB2YXIgd3JhcExpbWl0ID0gdGhpcy4kY29uc3RyYWluV3JhcExpbWl0KGRlc2lyZWRMaW1pdCwgbGltaXRzLm1pbiwgbGltaXRzLm1heCk7XG4gICAgICAgIGlmICh3cmFwTGltaXQgIT0gdGhpcy4kd3JhcExpbWl0ICYmIHdyYXBMaW1pdCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuJHdyYXBMaW1pdCA9IHdyYXBMaW1pdDtcbiAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKDAsIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKDApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZVdyYXBMaW1pdFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdGhpcy4kY29uc3RyYWluV3JhcExpbWl0ID0gZnVuY3Rpb24od3JhcExpbWl0LCBtaW4sIG1heCkge1xuICAgICAgICBpZiAobWluKVxuICAgICAgICAgICAgd3JhcExpbWl0ID0gTWF0aC5tYXgobWluLCB3cmFwTGltaXQpO1xuXG4gICAgICAgIGlmIChtYXgpXG4gICAgICAgICAgICB3cmFwTGltaXQgPSBNYXRoLm1pbihtYXgsIHdyYXBMaW1pdCk7XG5cbiAgICAgICAgcmV0dXJuIHdyYXBMaW1pdDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0V3JhcExpbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiR3cmFwTGltaXQ7XG4gICAgfTtcbiAgICB0aGlzLnNldFdyYXBMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuICAgICAgICB0aGlzLnNldFdyYXBMaW1pdFJhbmdlKGxpbWl0LCBsaW1pdCk7XG4gICAgfTtcbiAgICB0aGlzLmdldFdyYXBMaW1pdFJhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtaW4gOiB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4sXG4gICAgICAgICAgICBtYXggOiB0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXhcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgdGhpcy4kdXBkYXRlSW50ZXJuYWxEYXRhT25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkge1xuICAgICAgICB2YXIgdXNlV3JhcE1vZGUgPSB0aGlzLiR1c2VXcmFwTW9kZTtcbiAgICAgICAgdmFyIGFjdGlvbiA9IGRlbHRhLmFjdGlvbjtcbiAgICAgICAgdmFyIHN0YXJ0ID0gZGVsdGEuc3RhcnQ7XG4gICAgICAgIHZhciBlbmQgPSBkZWx0YS5lbmQ7XG4gICAgICAgIHZhciBmaXJzdFJvdyA9IHN0YXJ0LnJvdztcbiAgICAgICAgdmFyIGxhc3RSb3cgPSBlbmQucm93O1xuICAgICAgICB2YXIgbGVuID0gbGFzdFJvdyAtIGZpcnN0Um93O1xuICAgICAgICB2YXIgcmVtb3ZlZEZvbGRzID0gbnVsbDtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuJHVwZGF0aW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKGxlbiAhPSAwKSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uID09PSBcInJlbW92ZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhpc1t1c2VXcmFwTW9kZSA/IFwiJHdyYXBEYXRhXCIgOiBcIiRyb3dMZW5ndGhDYWNoZVwiXS5zcGxpY2UoZmlyc3RSb3csIGxlbik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZEZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2UoZGVsdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZHMocmVtb3ZlZEZvbGRzKTtcblxuICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUoZW5kLnJvdyk7XG4gICAgICAgICAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNoYXJzKGVuZC5yb3csIGVuZC5jb2x1bW4sIHN0YXJ0LmNvbHVtbiAtIGVuZC5jb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdygtbGVuKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmVCZWZvcmUgPSB0aGlzLmdldEZvbGRMaW5lKGZpcnN0Um93KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lQmVmb3JlICYmIGZvbGRMaW5lQmVmb3JlICE9PSBmb2xkTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmVCZWZvcmUubWVyZ2UoZm9sZExpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSBmb2xkTGluZUJlZm9yZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZHggPSBmb2xkTGluZXMuaW5kZXhPZihmb2xkTGluZSkgKyAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAoaWR4OyBpZHggPCBmb2xkTGluZXMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkTGluZXNbaWR4XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lLnN0YXJ0LnJvdyA+PSBlbmQucm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdygtbGVuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxhc3RSb3cgPSBmaXJzdFJvdztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW4pO1xuICAgICAgICAgICAgICAgIGFyZ3MudW5zaGlmdChmaXJzdFJvdywgMCk7XG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHVzZVdyYXBNb2RlID8gdGhpcy4kd3JhcERhdGEgOiB0aGlzLiRyb3dMZW5ndGhDYWNoZTtcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlLmFwcGx5KGFyciwgYXJncyk7XG4gICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lcyA9IHRoaXMuJGZvbGREYXRhO1xuICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUoZmlyc3RSb3cpO1xuICAgICAgICAgICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICAgICAgICAgIGlmIChmb2xkTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY21wID0gZm9sZExpbmUucmFuZ2UuY29tcGFyZUluc2lkZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbXAgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSBmb2xkTGluZS5zcGxpdChzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdyhsZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNoYXJzKGxhc3RSb3csIDAsIGVuZC5jb2x1bW4gLSBzdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkUmVtb3ZlQ2hhcnMoZmlyc3RSb3csIDAsIGVuZC5jb2x1bW4gLSBzdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRSb3cobGVuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZHggPSBmb2xkTGluZXMuaW5kZXhPZihmb2xkTGluZSkgKyAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAoaWR4OyBpZHggPCBmb2xkTGluZXMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkTGluZXNbaWR4XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lLnN0YXJ0LnJvdyA+PSBmaXJzdFJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRSb3cobGVuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxlbiA9IE1hdGguYWJzKGRlbHRhLnN0YXJ0LmNvbHVtbiAtIGRlbHRhLmVuZC5jb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJyZW1vdmVcIikge1xuICAgICAgICAgICAgICAgIHJlbW92ZWRGb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKGRlbHRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGRzKHJlbW92ZWRGb2xkcyk7XG5cbiAgICAgICAgICAgICAgICBsZW4gPSAtbGVuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShmaXJzdFJvdyk7XG4gICAgICAgICAgICBpZiAoZm9sZExpbmUpIHtcbiAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRSZW1vdmVDaGFycyhmaXJzdFJvdywgc3RhcnQuY29sdW1uLCBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVzZVdyYXBNb2RlICYmIHRoaXMuJHdyYXBEYXRhLmxlbmd0aCAhPSB0aGlzLmRvYy5nZXRMZW5ndGgoKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImRvYy5nZXRMZW5ndGgoKSBhbmQgJHdyYXBEYXRhLmxlbmd0aCBoYXZlIHRvIGJlIHRoZSBzYW1lIVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiR1cGRhdGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh1c2VXcmFwTW9kZSlcbiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKGZpcnN0Um93LCBsYXN0Um93KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2FjaGUoZmlyc3RSb3csIGxhc3RSb3cpO1xuXG4gICAgICAgIHJldHVybiByZW1vdmVkRm9sZHM7XG4gICAgfTtcblxuICAgIHRoaXMuJHVwZGF0ZVJvd0xlbmd0aENhY2hlID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3csIGIpIHtcbiAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGVbZmlyc3RSb3ddID0gbnVsbDtcbiAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGVbbGFzdFJvd10gPSBudWxsO1xuICAgIH07XG5cbiAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIHZhciBsaW5lcyA9IHRoaXMuZG9jLmdldEFsbExpbmVzKCk7XG4gICAgICAgIHZhciB0YWJTaXplID0gdGhpcy5nZXRUYWJTaXplKCk7XG4gICAgICAgIHZhciB3cmFwRGF0YSA9IHRoaXMuJHdyYXBEYXRhO1xuICAgICAgICB2YXIgd3JhcExpbWl0ID0gdGhpcy4kd3JhcExpbWl0O1xuICAgICAgICB2YXIgdG9rZW5zO1xuICAgICAgICB2YXIgZm9sZExpbmU7XG5cbiAgICAgICAgdmFyIHJvdyA9IGZpcnN0Um93O1xuICAgICAgICBsYXN0Um93ID0gTWF0aC5taW4obGFzdFJvdywgbGluZXMubGVuZ3RoIC0gMSk7XG4gICAgICAgIHdoaWxlIChyb3cgPD0gbGFzdFJvdykge1xuICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKHJvdywgZm9sZExpbmUpO1xuICAgICAgICAgICAgaWYgKCFmb2xkTGluZSkge1xuICAgICAgICAgICAgICAgIHRva2VucyA9IHRoaXMuJGdldERpc3BsYXlUb2tlbnMobGluZXNbcm93XSk7XG4gICAgICAgICAgICAgICAgd3JhcERhdGFbcm93XSA9IHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzKHRva2Vucywgd3JhcExpbWl0LCB0YWJTaXplKTtcbiAgICAgICAgICAgICAgICByb3cgKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRva2VucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvbGRMaW5lLndhbGsoZnVuY3Rpb24ocGxhY2Vob2xkZXIsIHJvdywgY29sdW1uLCBsYXN0Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2Fsa1Rva2VucztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fsa1Rva2VucyA9IHRoaXMuJGdldERpc3BsYXlUb2tlbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLCB0b2tlbnMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrVG9rZW5zWzBdID0gUExBQ0VIT0xERVJfU1RBUlQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB3YWxrVG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtUb2tlbnNbaV0gPSBQTEFDRUhPTERFUl9CT0RZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fsa1Rva2VucyA9IHRoaXMuJGdldERpc3BsYXlUb2tlbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW3Jvd10uc3Vic3RyaW5nKGxhc3RDb2x1bW4sIGNvbHVtbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zID0gdG9rZW5zLmNvbmNhdCh3YWxrVG9rZW5zKTtcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5lbmQucm93LFxuICAgICAgICAgICAgICAgICAgICBsaW5lc1tmb2xkTGluZS5lbmQucm93XS5sZW5ndGggKyAxXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHdyYXBEYXRhW2ZvbGRMaW5lLnN0YXJ0LnJvd10gPSB0aGlzLiRjb21wdXRlV3JhcFNwbGl0cyh0b2tlbnMsIHdyYXBMaW1pdCwgdGFiU2l6ZSk7XG4gICAgICAgICAgICAgICAgcm93ID0gZm9sZExpbmUuZW5kLnJvdyArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBDSEFSID0gMSxcbiAgICAgICAgQ0hBUl9FWFQgPSAyLFxuICAgICAgICBQTEFDRUhPTERFUl9TVEFSVCA9IDMsXG4gICAgICAgIFBMQUNFSE9MREVSX0JPRFkgPSAgNCxcbiAgICAgICAgUFVOQ1RVQVRJT04gPSA5LFxuICAgICAgICBTUEFDRSA9IDEwLFxuICAgICAgICBUQUIgPSAxMSxcbiAgICAgICAgVEFCX1NQQUNFID0gMTI7XG5cblxuICAgIHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzID0gZnVuY3Rpb24odG9rZW5zLCB3cmFwTGltaXQsIHRhYlNpemUpIHtcbiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNwbGl0cyA9IFtdO1xuICAgICAgICB2YXIgZGlzcGxheUxlbmd0aCA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIHZhciBsYXN0U3BsaXQgPSAwLCBsYXN0RG9jU3BsaXQgPSAwO1xuXG4gICAgICAgIHZhciBpc0NvZGUgPSB0aGlzLiR3cmFwQXNDb2RlO1xuXG4gICAgICAgIHZhciBpbmRlbnRlZFNvZnRXcmFwID0gdGhpcy4kaW5kZW50ZWRTb2Z0V3JhcDtcbiAgICAgICAgdmFyIG1heEluZGVudCA9IHdyYXBMaW1pdCA8PSBNYXRoLm1heCgyICogdGFiU2l6ZSwgOClcbiAgICAgICAgICAgIHx8IGluZGVudGVkU29mdFdyYXAgPT09IGZhbHNlID8gMCA6IE1hdGguZmxvb3Iod3JhcExpbWl0IC8gMik7XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0V3JhcEluZGVudCgpIHtcbiAgICAgICAgICAgIHZhciBpbmRlbnRhdGlvbiA9IDA7XG4gICAgICAgICAgICBpZiAobWF4SW5kZW50ID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIGlmIChpbmRlbnRlZFNvZnRXcmFwKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gU1BBQ0UpXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbiArPSAxO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSBUQUIpXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbiArPSB0YWJTaXplO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSBUQUJfU1BBQ0UpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzQ29kZSAmJiBpbmRlbnRlZFNvZnRXcmFwICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbiArPSB0YWJTaXplO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKGluZGVudGF0aW9uLCBtYXhJbmRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFkZFNwbGl0KHNjcmVlblBvcykge1xuICAgICAgICAgICAgdmFyIGRpc3BsYXllZCA9IHRva2Vucy5zbGljZShsYXN0U3BsaXQsIHNjcmVlblBvcyk7XG4gICAgICAgICAgICB2YXIgbGVuID0gZGlzcGxheWVkLmxlbmd0aDtcbiAgICAgICAgICAgIGRpc3BsYXllZC5qb2luKFwiXCIpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLzEyL2csIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8yL2csIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFzcGxpdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaW5kZW50ID0gZ2V0V3JhcEluZGVudCgpO1xuICAgICAgICAgICAgICAgIHNwbGl0cy5pbmRlbnQgPSBpbmRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0RG9jU3BsaXQgKz0gbGVuO1xuICAgICAgICAgICAgc3BsaXRzLnB1c2gobGFzdERvY1NwbGl0KTtcbiAgICAgICAgICAgIGxhc3RTcGxpdCA9IHNjcmVlblBvcztcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5kZW50ID0gMDtcbiAgICAgICAgd2hpbGUgKGRpc3BsYXlMZW5ndGggLSBsYXN0U3BsaXQgPiB3cmFwTGltaXQgLSBpbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBzcGxpdCA9IGxhc3RTcGxpdCArIHdyYXBMaW1pdCAtIGluZGVudDtcbiAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXQgLSAxXSA+PSBTUEFDRSAmJiB0b2tlbnNbc3BsaXRdID49IFNQQUNFKSB7XG4gICAgICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0gPT0gUExBQ0VIT0xERVJfU1RBUlQgfHwgdG9rZW5zW3NwbGl0XSA9PSBQTEFDRUhPTERFUl9CT0RZKSB7XG4gICAgICAgICAgICAgICAgZm9yIChzcGxpdDsgc3BsaXQgIT0gbGFzdFNwbGl0IC0gMTsgc3BsaXQtLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zW3NwbGl0XSA9PSBQTEFDRUhPTERFUl9TVEFSVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0ID4gbGFzdFNwbGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFNwbGl0KHNwbGl0KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNwbGl0ID0gbGFzdFNwbGl0ICsgd3JhcExpbWl0O1xuICAgICAgICAgICAgICAgIGZvciAoc3BsaXQ7IHNwbGl0IDwgdG9rZW5zLmxlbmd0aDsgc3BsaXQrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zW3NwbGl0XSAhPSBQTEFDRUhPTERFUl9CT0RZKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3BsaXQgPT0gdG9rZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIEJyZWFrcyB0aGUgd2hpbGUtbG9vcC5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG1pblNwbGl0ID0gTWF0aC5tYXgoc3BsaXQgLSAod3JhcExpbWl0IC0od3JhcExpbWl0Pj4yKSksIGxhc3RTcGxpdCAtIDEpO1xuICAgICAgICAgICAgd2hpbGUgKHNwbGl0ID4gbWluU3BsaXQgJiYgdG9rZW5zW3NwbGl0XSA8IFBMQUNFSE9MREVSX1NUQVJUKSB7XG4gICAgICAgICAgICAgICAgc3BsaXQgLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNDb2RlKSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHNwbGl0ID4gbWluU3BsaXQgJiYgdG9rZW5zW3NwbGl0XSA8IFBMQUNFSE9MREVSX1NUQVJUKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwbGl0IC0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoc3BsaXQgPiBtaW5TcGxpdCAmJiB0b2tlbnNbc3BsaXRdID09IFBVTkNUVUFUSU9OKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwbGl0IC0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHNwbGl0ID4gbWluU3BsaXQgJiYgdG9rZW5zW3NwbGl0XSA8IFNQQUNFKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwbGl0IC0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzcGxpdCA+IG1pblNwbGl0KSB7XG4gICAgICAgICAgICAgICAgYWRkU3BsaXQoKytzcGxpdCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzcGxpdCA9IGxhc3RTcGxpdCArIHdyYXBMaW1pdDtcbiAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID09IENIQVJfRVhUKVxuICAgICAgICAgICAgICAgIHNwbGl0LS07XG4gICAgICAgICAgICBhZGRTcGxpdChzcGxpdCAtIGluZGVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNwbGl0cztcbiAgICB9O1xuICAgIHRoaXMuJGdldERpc3BsYXlUb2tlbnMgPSBmdW5jdGlvbihzdHIsIG9mZnNldCkge1xuICAgICAgICB2YXIgYXJyID0gW107XG4gICAgICAgIHZhciB0YWJTaXplO1xuICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIGlmIChjID09IDkpIHtcbiAgICAgICAgICAgICAgICB0YWJTaXplID0gdGhpcy5nZXRTY3JlZW5UYWJTaXplKGFyci5sZW5ndGggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKFRBQik7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDE7IG4gPCB0YWJTaXplOyBuKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goVEFCX1NQQUNFKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID09IDMyKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goU1BBQ0UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmKChjID4gMzkgJiYgYyA8IDQ4KSB8fCAoYyA+IDU3ICYmIGMgPCA2NCkpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaChQVU5DVFVBVElPTik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID49IDB4MTEwMCAmJiBpc0Z1bGxXaWR0aChjKSkge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKENIQVIsIENIQVJfRVhUKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goQ0hBUik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9O1xuICAgIHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoID0gZnVuY3Rpb24oc3RyLCBtYXhTY3JlZW5Db2x1bW4sIHNjcmVlbkNvbHVtbikge1xuICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1uID09IDApXG4gICAgICAgICAgICByZXR1cm4gWzAsIDBdO1xuICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1uID09IG51bGwpXG4gICAgICAgICAgICBtYXhTY3JlZW5Db2x1bW4gPSBJbmZpbml0eTtcbiAgICAgICAgc2NyZWVuQ29sdW1uID0gc2NyZWVuQ29sdW1uIHx8IDA7XG5cbiAgICAgICAgdmFyIGMsIGNvbHVtbjtcbiAgICAgICAgZm9yIChjb2x1bW4gPSAwOyBjb2x1bW4gPCBzdHIubGVuZ3RoOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoYyA9PSA5KSB7XG4gICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IHRoaXMuZ2V0U2NyZWVuVGFiU2l6ZShzY3JlZW5Db2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYyA+PSAweDExMDAgJiYgaXNGdWxsV2lkdGgoYykpIHtcbiAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gKz0gMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2NyZWVuQ29sdW1uID4gbWF4U2NyZWVuQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3NjcmVlbkNvbHVtbiwgY29sdW1uXTtcbiAgICB9O1xuXG4gICAgdGhpcy5saW5lV2lkZ2V0cyA9IG51bGw7XG4gICAgdGhpcy5nZXRSb3dMZW5ndGggPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgaWYgKHRoaXMubGluZVdpZGdldHMpXG4gICAgICAgICAgICB2YXIgaCA9IHRoaXMubGluZVdpZGdldHNbcm93XSAmJiB0aGlzLmxpbmVXaWRnZXRzW3Jvd10ucm93Q291bnQgfHwgMDtcbiAgICAgICAgZWxzZSBcbiAgICAgICAgICAgIGggPSAwO1xuICAgICAgICBpZiAoIXRoaXMuJHVzZVdyYXBNb2RlIHx8ICF0aGlzLiR3cmFwRGF0YVtyb3ddKSB7XG4gICAgICAgICAgICByZXR1cm4gMSArIGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kd3JhcERhdGFbcm93XS5sZW5ndGggKyAxICsgaDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRSb3dMaW5lQ291bnQgPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgaWYgKCF0aGlzLiR1c2VXcmFwTW9kZSB8fCAhdGhpcy4kd3JhcERhdGFbcm93XSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kd3JhcERhdGFbcm93XS5sZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0Um93V3JhcEluZGVudCA9IGZ1bmN0aW9uKHNjcmVlblJvdykge1xuICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHtcbiAgICAgICAgICAgIHZhciBwb3MgPSB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3csIE51bWJlci5NQVhfVkFMVUUpO1xuICAgICAgICAgICAgdmFyIHNwbGl0cyA9IHRoaXMuJHdyYXBEYXRhW3Bvcy5yb3ddO1xuICAgICAgICAgICAgcmV0dXJuIHNwbGl0cy5sZW5ndGggJiYgc3BsaXRzWzBdIDwgcG9zLmNvbHVtbiA/IHNwbGl0cy5pbmRlbnQgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbiA9IGZ1bmN0aW9uKHNjcmVlblJvdykge1xuICAgICAgICB2YXIgcG9zID0gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBOdW1iZXIuTUFYX1ZBTFVFKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRUb1NjcmVlbkNvbHVtbihwb3Mucm93LCBwb3MuY29sdW1uKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uID0gZnVuY3Rpb24oZG9jUm93LCBkb2NDb2x1bW4pIHtcbiAgICAgICAgdmFyIHNjcmVlblJvdyA9IHRoaXMuZG9jdW1lbnRUb1NjcmVlblJvdyhkb2NSb3csIGRvY0NvbHVtbik7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNjcmVlbkxhc3RSb3dDb2x1bW4oc2NyZWVuUm93KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uUG9zaXRpb24gPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikge1xuICAgICAgICB2YXIgc2NyZWVuUm93ID0gdGhpcy5kb2N1bWVudFRvU2NyZWVuUm93KGRvY1JvdywgZG9jQ29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblJvdywgTnVtYmVyLk1BWF9WQUxVRSAvIDEwKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Um93U3BsaXREYXRhID0gZnVuY3Rpb24ocm93KSB7XG4gICAgICAgIGlmICghdGhpcy4kdXNlV3JhcE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kd3JhcERhdGFbcm93XTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRTY3JlZW5UYWJTaXplID0gZnVuY3Rpb24oc2NyZWVuQ29sdW1uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiR0YWJTaXplIC0gc2NyZWVuQ29sdW1uICUgdGhpcy4kdGFiU2l6ZTtcbiAgICB9O1xuXG5cbiAgICB0aGlzLnNjcmVlblRvRG9jdW1lbnRSb3cgPSBmdW5jdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVtbikge1xuICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4pLnJvdztcbiAgICB9O1xuXG5cbiAgICB0aGlzLnNjcmVlblRvRG9jdW1lbnRDb2x1bW4gPSBmdW5jdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVtbikge1xuICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4pLmNvbHVtbjtcbiAgICB9O1xuICAgIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uID0gZnVuY3Rpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4sIG9mZnNldFgpIHtcbiAgICAgICAgaWYgKHNjcmVlblJvdyA8IDApXG4gICAgICAgICAgICByZXR1cm4ge3JvdzogMCwgY29sdW1uOiAwfTtcblxuICAgICAgICB2YXIgbGluZTtcbiAgICAgICAgdmFyIGRvY1JvdyA9IDA7XG4gICAgICAgIHZhciBkb2NDb2x1bW4gPSAwO1xuICAgICAgICB2YXIgY29sdW1uO1xuICAgICAgICB2YXIgcm93ID0gMDtcbiAgICAgICAgdmFyIHJvd0xlbmd0aCA9IDA7XG5cbiAgICAgICAgdmFyIHJvd0NhY2hlID0gdGhpcy4kc2NyZWVuUm93Q2FjaGU7XG4gICAgICAgIHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleChyb3dDYWNoZSwgc2NyZWVuUm93KTtcbiAgICAgICAgdmFyIGwgPSByb3dDYWNoZS5sZW5ndGg7XG4gICAgICAgIGlmIChsICYmIGkgPj0gMCkge1xuICAgICAgICAgICAgdmFyIHJvdyA9IHJvd0NhY2hlW2ldO1xuICAgICAgICAgICAgdmFyIGRvY1JvdyA9IHRoaXMuJGRvY1Jvd0NhY2hlW2ldO1xuICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSBzY3JlZW5Sb3cgPiByb3dDYWNoZVtsIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZG9DYWNoZSA9ICFsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1heFJvdyA9IHRoaXMuZ2V0TGVuZ3RoKCkgLSAxO1xuICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldE5leHRGb2xkTGluZShkb2NSb3cpO1xuICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTtcblxuICAgICAgICB3aGlsZSAocm93IDw9IHNjcmVlblJvdykge1xuICAgICAgICAgICAgcm93TGVuZ3RoID0gdGhpcy5nZXRSb3dMZW5ndGgoZG9jUm93KTtcbiAgICAgICAgICAgIGlmIChyb3cgKyByb3dMZW5ndGggPiBzY3JlZW5Sb3cgfHwgZG9jUm93ID49IG1heFJvdykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByb3cgKz0gcm93TGVuZ3RoO1xuICAgICAgICAgICAgICAgIGRvY1JvdysrO1xuICAgICAgICAgICAgICAgIGlmIChkb2NSb3cgPiBmb2xkU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jUm93ID0gZm9sZExpbmUuZW5kLnJvdysxO1xuICAgICAgICAgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuZ2V0TmV4dEZvbGRMaW5lKGRvY1JvdywgZm9sZExpbmUpO1xuICAgICAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRvQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZS5wdXNoKGRvY1Jvdyk7XG4gICAgICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaChyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvbGRMaW5lICYmIGZvbGRMaW5lLnN0YXJ0LnJvdyA8PSBkb2NSb3cpIHtcbiAgICAgICAgICAgIGxpbmUgPSB0aGlzLmdldEZvbGREaXNwbGF5TGluZShmb2xkTGluZSk7XG4gICAgICAgICAgICBkb2NSb3cgPSBmb2xkTGluZS5zdGFydC5yb3c7XG4gICAgICAgIH0gZWxzZSBpZiAocm93ICsgcm93TGVuZ3RoIDw9IHNjcmVlblJvdyB8fCBkb2NSb3cgPiBtYXhSb3cpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcm93OiBtYXhSb3csXG4gICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmdldExpbmUobWF4Um93KS5sZW5ndGhcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaW5lID0gdGhpcy5nZXRMaW5lKGRvY1Jvdyk7XG4gICAgICAgICAgICBmb2xkTGluZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJbmRlbnQgPSAwLCBzcGxpdEluZGV4ID0gTWF0aC5mbG9vcihzY3JlZW5Sb3cgLSByb3cpO1xuICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHtcbiAgICAgICAgICAgIHZhciBzcGxpdHMgPSB0aGlzLiR3cmFwRGF0YVtkb2NSb3ddO1xuICAgICAgICAgICAgaWYgKHNwbGl0cykge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IHNwbGl0c1tzcGxpdEluZGV4XTtcbiAgICAgICAgICAgICAgICBpZihzcGxpdEluZGV4ID4gMCAmJiBzcGxpdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBJbmRlbnQgPSBzcGxpdHMuaW5kZW50O1xuICAgICAgICAgICAgICAgICAgICBkb2NDb2x1bW4gPSBzcGxpdHNbc3BsaXRJbmRleCAtIDFdIHx8IHNwbGl0c1tzcGxpdHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cmluZyhkb2NDb2x1bW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvZmZzZXRYICE9PSB1bmRlZmluZWQgJiYgdGhpcy4kYmlkaUhhbmRsZXIuaXNCaWRpUm93KHJvdyArIHNwbGl0SW5kZXgsIGRvY1Jvdywgc3BsaXRJbmRleCkpXG4gICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRiaWRpSGFuZGxlci5vZmZzZXRUb0NvbChvZmZzZXRYKTtcblxuICAgICAgICBkb2NDb2x1bW4gKz0gdGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGgobGluZSwgc2NyZWVuQ29sdW1uIC0gd3JhcEluZGVudClbMV07XG4gICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSAmJiBkb2NDb2x1bW4gPj0gY29sdW1uKVxuICAgICAgICAgICAgZG9jQ29sdW1uID0gY29sdW1uIC0gMTtcblxuICAgICAgICBpZiAoZm9sZExpbmUpXG4gICAgICAgICAgICByZXR1cm4gZm9sZExpbmUuaWR4VG9Qb3NpdGlvbihkb2NDb2x1bW4pO1xuXG4gICAgICAgIHJldHVybiB7cm93OiBkb2NSb3csIGNvbHVtbjogZG9jQ29sdW1ufTtcbiAgICB9O1xuICAgIHRoaXMuZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uID0gZnVuY3Rpb24oZG9jUm93LCBkb2NDb2x1bW4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2NDb2x1bW4gPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICB2YXIgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChkb2NSb3cucm93LCBkb2NSb3cuY29sdW1uKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChkb2NSb3csIGRvY0NvbHVtbik7XG5cbiAgICAgICAgZG9jUm93ID0gcG9zLnJvdztcbiAgICAgICAgZG9jQ29sdW1uID0gcG9zLmNvbHVtbjtcblxuICAgICAgICB2YXIgc2NyZWVuUm93ID0gMDtcbiAgICAgICAgdmFyIGZvbGRTdGFydFJvdyA9IG51bGw7XG4gICAgICAgIHZhciBmb2xkID0gbnVsbDtcbiAgICAgICAgZm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KGRvY1JvdywgZG9jQ29sdW1uLCAxKTtcbiAgICAgICAgaWYgKGZvbGQpIHtcbiAgICAgICAgICAgIGRvY1JvdyA9IGZvbGQuc3RhcnQucm93O1xuICAgICAgICAgICAgZG9jQ29sdW1uID0gZm9sZC5zdGFydC5jb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm93RW5kLCByb3cgPSAwO1xuXG5cbiAgICAgICAgdmFyIHJvd0NhY2hlID0gdGhpcy4kZG9jUm93Q2FjaGU7XG4gICAgICAgIHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleChyb3dDYWNoZSwgZG9jUm93KTtcbiAgICAgICAgdmFyIGwgPSByb3dDYWNoZS5sZW5ndGg7XG4gICAgICAgIGlmIChsICYmIGkgPj0gMCkge1xuICAgICAgICAgICAgdmFyIHJvdyA9IHJvd0NhY2hlW2ldO1xuICAgICAgICAgICAgdmFyIHNjcmVlblJvdyA9IHRoaXMuJHNjcmVlblJvd0NhY2hlW2ldO1xuICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSBkb2NSb3cgPiByb3dDYWNoZVtsIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZG9DYWNoZSA9ICFsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExpbmUocm93KTtcbiAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID9mb2xkTGluZS5zdGFydC5yb3cgOkluZmluaXR5O1xuXG4gICAgICAgIHdoaWxlIChyb3cgPCBkb2NSb3cpIHtcbiAgICAgICAgICAgIGlmIChyb3cgPj0gZm9sZFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcm93RW5kID0gZm9sZExpbmUuZW5kLnJvdyArIDE7XG4gICAgICAgICAgICAgICAgaWYgKHJvd0VuZCA+IGRvY1JvdylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLmdldE5leHRGb2xkTGluZShyb3dFbmQsIGZvbGRMaW5lKTtcbiAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/Zm9sZExpbmUuc3RhcnQucm93IDpJbmZpbml0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJvd0VuZCA9IHJvdyArIDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjcmVlblJvdyArPSB0aGlzLmdldFJvd0xlbmd0aChyb3cpO1xuICAgICAgICAgICAgcm93ID0gcm93RW5kO1xuXG4gICAgICAgICAgICBpZiAoZG9DYWNoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGRvY1Jvd0NhY2hlLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICB0aGlzLiRzY3JlZW5Sb3dDYWNoZS5wdXNoKHNjcmVlblJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRleHRMaW5lID0gXCJcIjtcbiAgICAgICAgaWYgKGZvbGRMaW5lICYmIHJvdyA+PSBmb2xkU3RhcnQpIHtcbiAgICAgICAgICAgIHRleHRMaW5lID0gdGhpcy5nZXRGb2xkRGlzcGxheUxpbmUoZm9sZExpbmUsIGRvY1JvdywgZG9jQ29sdW1uKTtcbiAgICAgICAgICAgIGZvbGRTdGFydFJvdyA9IGZvbGRMaW5lLnN0YXJ0LnJvdztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHRMaW5lID0gdGhpcy5nZXRMaW5lKGRvY1Jvdykuc3Vic3RyaW5nKDAsIGRvY0NvbHVtbik7XG4gICAgICAgICAgICBmb2xkU3RhcnRSb3cgPSBkb2NSb3c7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJbmRlbnQgPSAwO1xuICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHtcbiAgICAgICAgICAgIHZhciB3cmFwUm93ID0gdGhpcy4kd3JhcERhdGFbZm9sZFN0YXJ0Um93XTtcbiAgICAgICAgICAgIGlmICh3cmFwUm93KSB7XG4gICAgICAgICAgICAgICAgdmFyIHNjcmVlblJvd09mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRleHRMaW5lLmxlbmd0aCA+PSB3cmFwUm93W3NjcmVlblJvd09mZnNldF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2NyZWVuUm93ICsrO1xuICAgICAgICAgICAgICAgICAgICBzY3JlZW5Sb3dPZmZzZXQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGV4dExpbmUgPSB0ZXh0TGluZS5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHdyYXBSb3dbc2NyZWVuUm93T2Zmc2V0IC0gMV0gfHwgMCwgdGV4dExpbmUubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB3cmFwSW5kZW50ID0gc2NyZWVuUm93T2Zmc2V0ID4gMCA/IHdyYXBSb3cuaW5kZW50IDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3c6IHNjcmVlblJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogd3JhcEluZGVudCArIHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoKHRleHRMaW5lKVswXVxuICAgICAgICB9O1xuICAgIH07XG4gICAgdGhpcy5kb2N1bWVudFRvU2NyZWVuQ29sdW1uID0gZnVuY3Rpb24ocm93LCBkb2NDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHJvdywgZG9jQ29sdW1uKS5jb2x1bW47XG4gICAgfTtcbiAgICB0aGlzLmRvY3VtZW50VG9TY3JlZW5Sb3cgPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oZG9jUm93LCBkb2NDb2x1bW4pLnJvdztcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2NyZWVuTGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzY3JlZW5Sb3dzID0gMDtcbiAgICAgICAgdmFyIGZvbGQgPSBudWxsO1xuICAgICAgICBpZiAoIXRoaXMuJHVzZVdyYXBNb2RlKSB7XG4gICAgICAgICAgICBzY3JlZW5Sb3dzID0gdGhpcy5nZXRMZW5ndGgoKTtcbiAgICAgICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuJGZvbGREYXRhO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvbGQgPSBmb2xkRGF0YVtpXTtcbiAgICAgICAgICAgICAgICBzY3JlZW5Sb3dzIC09IGZvbGQuZW5kLnJvdyAtIGZvbGQuc3RhcnQucm93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxhc3RSb3cgPSB0aGlzLiR3cmFwRGF0YS5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgcm93ID0gMCwgaSA9IDA7XG4gICAgICAgICAgICB2YXIgZm9sZCA9IHRoaXMuJGZvbGREYXRhW2krK107XG4gICAgICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZCA/IGZvbGQuc3RhcnQucm93IDpJbmZpbml0eTtcblxuICAgICAgICAgICAgd2hpbGUgKHJvdyA8IGxhc3RSb3cpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3BsaXRzID0gdGhpcy4kd3JhcERhdGFbcm93XTtcbiAgICAgICAgICAgICAgICBzY3JlZW5Sb3dzICs9IHNwbGl0cyA/IHNwbGl0cy5sZW5ndGggKyAxIDogMTtcbiAgICAgICAgICAgICAgICByb3cgKys7XG4gICAgICAgICAgICAgICAgaWYgKHJvdyA+IGZvbGRTdGFydCkge1xuICAgICAgICAgICAgICAgICAgICByb3cgPSBmb2xkLmVuZC5yb3crMTtcbiAgICAgICAgICAgICAgICAgICAgZm9sZCA9IHRoaXMuJGZvbGREYXRhW2krK107XG4gICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGQgP2ZvbGQuc3RhcnQucm93IDpJbmZpbml0eTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGluZVdpZGdldHMpXG4gICAgICAgICAgICBzY3JlZW5Sb3dzICs9IHRoaXMuJGdldFdpZGdldFNjcmVlbkxlbmd0aCgpO1xuXG4gICAgICAgIHJldHVybiBzY3JlZW5Sb3dzO1xuICAgIH07XG4gICAgdGhpcy4kc2V0Rm9udE1ldHJpY3MgPSBmdW5jdGlvbihmbSkge1xuICAgICAgICBpZiAoIXRoaXMuJGVuYWJsZVZhckNoYXIpIHJldHVybjtcbiAgICAgICAgdGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGggPSBmdW5jdGlvbihzdHIsIG1heFNjcmVlbkNvbHVtbiwgc2NyZWVuQ29sdW1uKSB7XG4gICAgICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1uID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBbMCwgMF07XG4gICAgICAgICAgICBpZiAoIW1heFNjcmVlbkNvbHVtbilcbiAgICAgICAgICAgICAgICBtYXhTY3JlZW5Db2x1bW4gPSBJbmZpbml0eTtcbiAgICAgICAgICAgIHNjcmVlbkNvbHVtbiA9IHNjcmVlbkNvbHVtbiB8fCAwO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgYywgY29sdW1uO1xuICAgICAgICAgICAgZm9yIChjb2x1bW4gPSAwOyBjb2x1bW4gPCBzdHIubGVuZ3RoOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgICAgIGMgPSBzdHIuY2hhckF0KGNvbHVtbik7XG4gICAgICAgICAgICAgICAgaWYgKGMgPT09IFwiXFx0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IHRoaXMuZ2V0U2NyZWVuVGFiU2l6ZShzY3JlZW5Db2x1bW4pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSBmbS5nZXRDaGFyYWN0ZXJXaWR0aChjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNjcmVlbkNvbHVtbiA+IG1heFNjcmVlbkNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBbc2NyZWVuQ29sdW1uLCBjb2x1bW5dO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmJnVG9rZW5pemVyKSB7XG4gICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnNldERvY3VtZW50KG51bGwpO1xuICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kc3RvcFdvcmtlcigpO1xuICAgIH07XG5cbiAgICB0aGlzLmlzRnVsbFdpZHRoID0gaXNGdWxsV2lkdGg7XG4gICAgZnVuY3Rpb24gaXNGdWxsV2lkdGgoYykge1xuICAgICAgICBpZiAoYyA8IDB4MTEwMClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGMgPj0gMHgxMTAwICYmIGMgPD0gMHgxMTVGIHx8XG4gICAgICAgICAgICAgICBjID49IDB4MTFBMyAmJiBjIDw9IDB4MTFBNyB8fFxuICAgICAgICAgICAgICAgYyA+PSAweDExRkEgJiYgYyA8PSAweDExRkYgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHgyMzI5ICYmIGMgPD0gMHgyMzJBIHx8XG4gICAgICAgICAgICAgICBjID49IDB4MkU4MCAmJiBjIDw9IDB4MkU5OSB8fFxuICAgICAgICAgICAgICAgYyA+PSAweDJFOUIgJiYgYyA8PSAweDJFRjMgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHgyRjAwICYmIGMgPD0gMHgyRkQ1IHx8XG4gICAgICAgICAgICAgICBjID49IDB4MkZGMCAmJiBjIDw9IDB4MkZGQiB8fFxuICAgICAgICAgICAgICAgYyA+PSAweDMwMDAgJiYgYyA8PSAweDMwM0UgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHgzMDQxICYmIGMgPD0gMHgzMDk2IHx8XG4gICAgICAgICAgICAgICBjID49IDB4MzA5OSAmJiBjIDw9IDB4MzBGRiB8fFxuICAgICAgICAgICAgICAgYyA+PSAweDMxMDUgJiYgYyA8PSAweDMxMkQgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHgzMTMxICYmIGMgPD0gMHgzMThFIHx8XG4gICAgICAgICAgICAgICBjID49IDB4MzE5MCAmJiBjIDw9IDB4MzFCQSB8fFxuICAgICAgICAgICAgICAgYyA+PSAweDMxQzAgJiYgYyA8PSAweDMxRTMgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHgzMUYwICYmIGMgPD0gMHgzMjFFIHx8XG4gICAgICAgICAgICAgICBjID49IDB4MzIyMCAmJiBjIDw9IDB4MzI0NyB8fFxuICAgICAgICAgICAgICAgYyA+PSAweDMyNTAgJiYgYyA8PSAweDMyRkUgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHgzMzAwICYmIGMgPD0gMHg0REJGIHx8XG4gICAgICAgICAgICAgICBjID49IDB4NEUwMCAmJiBjIDw9IDB4QTQ4QyB8fFxuICAgICAgICAgICAgICAgYyA+PSAweEE0OTAgJiYgYyA8PSAweEE0QzYgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHhBOTYwICYmIGMgPD0gMHhBOTdDIHx8XG4gICAgICAgICAgICAgICBjID49IDB4QUMwMCAmJiBjIDw9IDB4RDdBMyB8fFxuICAgICAgICAgICAgICAgYyA+PSAweEQ3QjAgJiYgYyA8PSAweEQ3QzYgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHhEN0NCICYmIGMgPD0gMHhEN0ZCIHx8XG4gICAgICAgICAgICAgICBjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRiB8fFxuICAgICAgICAgICAgICAgYyA+PSAweEZFMTAgJiYgYyA8PSAweEZFMTkgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHhGRTMwICYmIGMgPD0gMHhGRTUyIHx8XG4gICAgICAgICAgICAgICBjID49IDB4RkU1NCAmJiBjIDw9IDB4RkU2NiB8fFxuICAgICAgICAgICAgICAgYyA+PSAweEZFNjggJiYgYyA8PSAweEZFNkIgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHhGRjAxICYmIGMgPD0gMHhGRjYwIHx8XG4gICAgICAgICAgICAgICBjID49IDB4RkZFMCAmJiBjIDw9IDB4RkZFNjtcbiAgICB9XG5cbn0pLmNhbGwoRWRpdFNlc3Npb24ucHJvdG90eXBlKTtcblxuYWNlcXVpcmUoXCIuL2VkaXRfc2Vzc2lvbi9mb2xkaW5nXCIpLkZvbGRpbmcuY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpO1xuYWNlcXVpcmUoXCIuL2VkaXRfc2Vzc2lvbi9icmFja2V0X21hdGNoXCIpLkJyYWNrZXRNYXRjaC5jYWxsKEVkaXRTZXNzaW9uLnByb3RvdHlwZSk7XG5cblxuY29uZmlnLmRlZmluZU9wdGlvbnMoRWRpdFNlc3Npb24ucHJvdG90eXBlLCBcInNlc3Npb25cIiwge1xuICAgIHdyYXA6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA9PSBcIm9mZlwiKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcImZyZWVcIilcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcInByaW50TWFyZ2luXCIpXG4gICAgICAgICAgICAgICAgdmFsdWUgPSAtMTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKSB8fCBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuJHdyYXAgPT0gdmFsdWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy4kd3JhcCA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VXNlV3JhcE1vZGUoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgY29sID0gdHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIgPyB2YWx1ZSA6IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRXcmFwTGltaXRSYW5nZShjb2wsIGNvbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRVc2VXcmFwTW9kZSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldFVzZVdyYXBNb2RlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kd3JhcCA9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicHJpbnRNYXJnaW5cIjtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0V3JhcExpbWl0UmFuZ2UoKS5taW4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImZyZWVcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kd3JhcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIm9mZlwiO1xuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVzU2V0OiB0cnVlXG4gICAgfSwgICAgXG4gICAgd3JhcE1ldGhvZDoge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgdmFsID0gdmFsID09IFwiYXV0b1wiXG4gICAgICAgICAgICAgICAgPyB0aGlzLiRtb2RlLnR5cGUgIT0gXCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICA6IHZhbCAhPSBcInRleHRcIjtcbiAgICAgICAgICAgIGlmICh2YWwgIT0gdGhpcy4kd3JhcEFzQ29kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHdyYXBBc0NvZGUgPSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlV3JhcERhdGEoMCwgdGhpcy5nZXRMZW5ndGgoKSAtIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBcImF1dG9cIlxuICAgIH0sXG4gICAgaW5kZW50ZWRTb2Z0V3JhcDogeyBpbml0aWFsVmFsdWU6IHRydWUgfSxcbiAgICBmaXJzdExpbmVOdW1iZXI6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbigpIHt0aGlzLl9zaWduYWwoXCJjaGFuZ2VCcmVha3BvaW50XCIpO30sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogMVxuICAgIH0sXG4gICAgdXNlV29ya2VyOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odXNlV29ya2VyKSB7XG4gICAgICAgICAgICB0aGlzLiR1c2VXb3JrZXIgPSB1c2VXb3JrZXI7XG5cbiAgICAgICAgICAgIHRoaXMuJHN0b3BXb3JrZXIoKTtcbiAgICAgICAgICAgIGlmICh1c2VXb3JrZXIpXG4gICAgICAgICAgICAgICAgdGhpcy4kc3RhcnRXb3JrZXIoKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiB0cnVlXG4gICAgfSxcbiAgICB1c2VTb2Z0VGFiczoge2luaXRpYWxWYWx1ZTogdHJ1ZX0sXG4gICAgdGFiU2l6ZToge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHRhYlNpemUpIHtcbiAgICAgICAgICAgIGlmIChpc05hTih0YWJTaXplKSB8fCB0aGlzLiR0YWJTaXplID09PSB0YWJTaXplKSByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlID0gW107XG4gICAgICAgICAgICB0aGlzLiR0YWJTaXplID0gdGFiU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZVRhYlNpemVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogNCxcbiAgICAgICAgaGFuZGxlc1NldDogdHJ1ZVxuICAgIH0sXG4gICAgbmF2aWdhdGVXaXRoaW5Tb2Z0VGFiczoge2luaXRpYWxWYWx1ZTogZmFsc2V9LFxuICAgIG92ZXJ3cml0ZToge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge3RoaXMuX3NpZ25hbChcImNoYW5nZU92ZXJ3cml0ZVwiKTt9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IGZhbHNlXG4gICAgfSxcbiAgICBuZXdMaW5lTW9kZToge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge3RoaXMuZG9jLnNldE5ld0xpbmVNb2RlKHZhbCk7fSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5kb2MuZ2V0TmV3TGluZU1vZGUoKTt9LFxuICAgICAgICBoYW5kbGVzU2V0OiB0cnVlXG4gICAgfSxcbiAgICBtb2RlOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7IHRoaXMuc2V0TW9kZSh2YWwpOyB9LFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy4kbW9kZUlkOyB9XG4gICAgfVxufSk7XG5cbmV4cG9ydHMuRWRpdFNlc3Npb24gPSBFZGl0U2Vzc2lvbjtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL3NlYXJjaFwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9sYW5nXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL3JhbmdlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGxhbmcgPSBhY2VxdWlyZShcIi4vbGliL2xhbmdcIik7XG52YXIgb29wID0gYWNlcXVpcmUoXCIuL2xpYi9vb3BcIik7XG52YXIgUmFuZ2UgPSBhY2VxdWlyZShcIi4vcmFuZ2VcIikuUmFuZ2U7XG5cbnZhciBTZWFyY2ggPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLiRvcHRpb25zID0ge307XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXQgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIG9vcC5taXhpbih0aGlzLiRvcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICB0aGlzLmdldE9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGxhbmcuY29weU9iamVjdCh0aGlzLiRvcHRpb25zKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfTtcbiAgICB0aGlzLmZpbmQgPSBmdW5jdGlvbihzZXNzaW9uKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9ucztcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gdGhpcy4kbWF0Y2hJdGVyYXRvcihzZXNzaW9uLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFpdGVyYXRvcilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICB2YXIgZmlyc3RSYW5nZSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yLmZvckVhY2goZnVuY3Rpb24oc3IsIHNjLCBlciwgZWMpIHtcbiAgICAgICAgICAgIGZpcnN0UmFuZ2UgPSBuZXcgUmFuZ2Uoc3IsIHNjLCBlciwgZWMpO1xuICAgICAgICAgICAgaWYgKHNjID09IGVjICYmIG9wdGlvbnMuc3RhcnQgJiYgb3B0aW9ucy5zdGFydC5zdGFydFxuICAgICAgICAgICAgICAgICYmIG9wdGlvbnMuc2tpcEN1cnJlbnQgIT0gZmFsc2UgJiYgZmlyc3RSYW5nZS5pc0VxdWFsKG9wdGlvbnMuc3RhcnQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBmaXJzdFJhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmlyc3RSYW5nZTtcbiAgICB9O1xuICAgIHRoaXMuZmluZEFsbCA9IGZ1bmN0aW9uKHNlc3Npb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zO1xuICAgICAgICBpZiAoIW9wdGlvbnMubmVlZGxlKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB0aGlzLiRhc3NlbWJsZVJlZ0V4cChvcHRpb25zKTtcblxuICAgICAgICB2YXIgcmFuZ2UgPSBvcHRpb25zLnJhbmdlO1xuICAgICAgICB2YXIgbGluZXMgPSByYW5nZVxuICAgICAgICAgICAgPyBzZXNzaW9uLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdylcbiAgICAgICAgICAgIDogc2Vzc2lvbi5kb2MuZ2V0QWxsTGluZXMoKTtcblxuICAgICAgICB2YXIgcmFuZ2VzID0gW107XG4gICAgICAgIHZhciByZSA9IG9wdGlvbnMucmU7XG4gICAgICAgIGlmIChvcHRpb25zLiRpc011bHRpTGluZSkge1xuICAgICAgICAgICAgdmFyIGxlbiA9IHJlLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBtYXhSb3cgPSBsaW5lcy5sZW5ndGggLSBsZW47XG4gICAgICAgICAgICB2YXIgcHJldlJhbmdlO1xuICAgICAgICAgICAgb3V0ZXI6IGZvciAodmFyIHJvdyA9IHJlLm9mZnNldCB8fCAwOyByb3cgPD0gbWF4Um93OyByb3crKykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5lc1tyb3cgKyBqXS5zZWFyY2gocmVbal0pID09IC0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0TGluZSA9IGxpbmVzW3Jvd107XG4gICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tyb3cgKyBsZW4gLSAxXTtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHN0YXJ0TGluZS5sZW5ndGggLSBzdGFydExpbmUubWF0Y2gocmVbMF0pWzBdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB2YXIgZW5kSW5kZXggPSBsaW5lLm1hdGNoKHJlW2xlbiAtIDFdKVswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKHByZXZSYW5nZSAmJiBwcmV2UmFuZ2UuZW5kLnJvdyA9PT0gcm93ICYmXG4gICAgICAgICAgICAgICAgICAgIHByZXZSYW5nZS5lbmQuY29sdW1uID4gc3RhcnRJbmRleFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2gocHJldlJhbmdlID0gbmV3IFJhbmdlKFxuICAgICAgICAgICAgICAgICAgICByb3csIHN0YXJ0SW5kZXgsIHJvdyArIGxlbiAtIDEsIGVuZEluZGV4XG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxlbiA+IDIpXG4gICAgICAgICAgICAgICAgICAgIHJvdyA9IHJvdyArIGxlbiAtIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBsYW5nLmdldE1hdGNoT2Zmc2V0cyhsaW5lc1tpXSwgcmUpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWF0Y2hlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBtYXRjaGVzW2pdO1xuICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoaSwgbWF0Y2gub2Zmc2V0LCBpLCBtYXRjaC5vZmZzZXQgKyBtYXRjaC5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgIHZhciBzdGFydENvbHVtbiA9IHJhbmdlLnN0YXJ0LmNvbHVtbjtcbiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSByYW5nZS5zdGFydC5jb2x1bW47XG4gICAgICAgICAgICB2YXIgaSA9IDAsIGogPSByYW5nZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChpIDwgaiAmJiByYW5nZXNbaV0uc3RhcnQuY29sdW1uIDwgc3RhcnRDb2x1bW4gJiYgcmFuZ2VzW2ldLnN0YXJ0LnJvdyA9PSByYW5nZS5zdGFydC5yb3cpXG4gICAgICAgICAgICAgICAgaSsrO1xuXG4gICAgICAgICAgICB3aGlsZSAoaSA8IGogJiYgcmFuZ2VzW2pdLmVuZC5jb2x1bW4gPiBlbmRDb2x1bW4gJiYgcmFuZ2VzW2pdLmVuZC5yb3cgPT0gcmFuZ2UuZW5kLnJvdylcbiAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJhbmdlcyA9IHJhbmdlcy5zbGljZShpLCBqICsgMSk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBqID0gcmFuZ2VzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgICAgICAgIHJhbmdlc1tpXS5zdGFydC5yb3cgKz0gcmFuZ2Uuc3RhcnQucm93O1xuICAgICAgICAgICAgICAgIHJhbmdlc1tpXS5lbmQucm93ICs9IHJhbmdlLnN0YXJ0LnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByYW5nZXM7XG4gICAgfTtcbiAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihpbnB1dCwgcmVwbGFjZW1lbnQpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zO1xuXG4gICAgICAgIHZhciByZSA9IHRoaXMuJGFzc2VtYmxlUmVnRXhwKG9wdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9ucy4kaXNNdWx0aUxpbmUpXG4gICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XG5cbiAgICAgICAgaWYgKCFyZSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB2YXIgbWF0Y2ggPSByZS5leGVjKGlucHV0KTtcbiAgICAgICAgaWYgKCFtYXRjaCB8fCBtYXRjaFswXS5sZW5ndGggIT0gaW5wdXQubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIFxuICAgICAgICByZXBsYWNlbWVudCA9IGlucHV0LnJlcGxhY2UocmUsIHJlcGxhY2VtZW50KTtcbiAgICAgICAgaWYgKG9wdGlvbnMucHJlc2VydmVDYXNlKSB7XG4gICAgICAgICAgICByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LnNwbGl0KFwiXCIpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IE1hdGgubWluKGlucHV0Lmxlbmd0aCwgaW5wdXQubGVuZ3RoKTsgaS0tOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgY2ggPSBpbnB1dFtpXTtcbiAgICAgICAgICAgICAgICBpZiAoY2ggJiYgY2gudG9Mb3dlckNhc2UoKSAhPSBjaClcbiAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRbaV0gPSByZXBsYWNlbWVudFtpXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRbaV0gPSByZXBsYWNlbWVudFtpXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC5qb2luKFwiXCIpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XG4gICAgfTtcblxuICAgIHRoaXMuJGFzc2VtYmxlUmVnRXhwID0gZnVuY3Rpb24ob3B0aW9ucywgJGRpc2FibGVGYWtlTXVsdGlsaW5lKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm5lZWRsZSBpbnN0YW5jZW9mIFJlZ0V4cClcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJlID0gb3B0aW9ucy5uZWVkbGU7XG5cbiAgICAgICAgdmFyIG5lZWRsZSA9IG9wdGlvbnMubmVlZGxlO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy5uZWVkbGUpXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5yZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy5yZWdFeHApXG4gICAgICAgICAgICBuZWVkbGUgPSBsYW5nLmVzY2FwZVJlZ0V4cChuZWVkbGUpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLndob2xlV29yZClcbiAgICAgICAgICAgIG5lZWRsZSA9IGFkZFdvcmRCb3VuZGFyeShuZWVkbGUsIG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBtb2RpZmllciA9IG9wdGlvbnMuY2FzZVNlbnNpdGl2ZSA/IFwiZ21cIiA6IFwiZ21pXCI7XG5cbiAgICAgICAgb3B0aW9ucy4kaXNNdWx0aUxpbmUgPSAhJGRpc2FibGVGYWtlTXVsdGlsaW5lICYmIC9bXFxuXFxyXS8udGVzdChuZWVkbGUpO1xuICAgICAgICBpZiAob3B0aW9ucy4kaXNNdWx0aUxpbmUpXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5yZSA9IHRoaXMuJGFzc2VtYmxlTXVsdGlsaW5lUmVnRXhwKG5lZWRsZSwgbW9kaWZpZXIpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKG5lZWRsZSwgbW9kaWZpZXIpO1xuICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgIHJlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucmUgPSByZTtcbiAgICB9O1xuXG4gICAgdGhpcy4kYXNzZW1ibGVNdWx0aWxpbmVSZWdFeHAgPSBmdW5jdGlvbihuZWVkbGUsIG1vZGlmaWVyKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IG5lZWRsZS5yZXBsYWNlKC9cXHJcXG58XFxyfFxcbi9nLCBcIiRcXG5eXCIpLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICB2YXIgcmUgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykgdHJ5IHtcbiAgICAgICAgICAgIHJlLnB1c2gobmV3IFJlZ0V4cChwYXJ0c1tpXSwgbW9kaWZpZXIpKTtcbiAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlO1xuICAgIH07XG5cbiAgICB0aGlzLiRtYXRjaEl0ZXJhdG9yID0gZnVuY3Rpb24oc2Vzc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgcmUgPSB0aGlzLiRhc3NlbWJsZVJlZ0V4cChvcHRpb25zKTtcbiAgICAgICAgaWYgKCFyZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGJhY2t3YXJkcyA9IG9wdGlvbnMuYmFja3dhcmRzID09IHRydWU7XG4gICAgICAgIHZhciBza2lwQ3VycmVudCA9IG9wdGlvbnMuc2tpcEN1cnJlbnQgIT0gZmFsc2U7XG5cbiAgICAgICAgdmFyIHJhbmdlID0gb3B0aW9ucy5yYW5nZTtcbiAgICAgICAgdmFyIHN0YXJ0ID0gb3B0aW9ucy5zdGFydDtcbiAgICAgICAgaWYgKCFzdGFydClcbiAgICAgICAgICAgIHN0YXJ0ID0gcmFuZ2UgPyByYW5nZVtiYWNrd2FyZHMgPyBcImVuZFwiIDogXCJzdGFydFwiXSA6IHNlc3Npb24uc2VsZWN0aW9uLmdldFJhbmdlKCk7XG4gICAgICAgICBcbiAgICAgICAgaWYgKHN0YXJ0LnN0YXJ0KVxuICAgICAgICAgICAgc3RhcnQgPSBzdGFydFtza2lwQ3VycmVudCAhPSBiYWNrd2FyZHMgPyBcImVuZFwiIDogXCJzdGFydFwiXTtcblxuICAgICAgICB2YXIgZmlyc3RSb3cgPSByYW5nZSA/IHJhbmdlLnN0YXJ0LnJvdyA6IDA7XG4gICAgICAgIHZhciBsYXN0Um93ID0gcmFuZ2UgPyByYW5nZS5lbmQucm93IDogc2Vzc2lvbi5nZXRMZW5ndGgoKSAtIDE7XG5cbiAgICAgICAgaWYgKGJhY2t3YXJkcykge1xuICAgICAgICAgICAgdmFyIGZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciByb3cgPSBzdGFydC5yb3c7XG4gICAgICAgICAgICAgICAgaWYgKGZvckVhY2hJbkxpbmUocm93LCBzdGFydC5jb2x1bW4sIGNhbGxiYWNrKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGZvciAocm93LS07IHJvdyA+PSBmaXJzdFJvdzsgcm93LS0pXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JFYWNoSW5MaW5lKHJvdywgTnVtYmVyLk1BWF9WQUxVRSwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLndyYXAgPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBmb3IgKHJvdyA9IGxhc3RSb3csIGZpcnN0Um93ID0gc3RhcnQucm93OyByb3cgPj0gZmlyc3RSb3c7IHJvdy0tKVxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9yRWFjaEluTGluZShyb3csIE51bWJlci5NQVhfVkFMVUUsIGNhbGxiYWNrKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJvdyA9IHN0YXJ0LnJvdztcbiAgICAgICAgICAgICAgICBpZiAoZm9yRWFjaEluTGluZShyb3csIHN0YXJ0LmNvbHVtbiwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZm9yIChyb3cgPSByb3cgKyAxOyByb3cgPD0gbGFzdFJvdzsgcm93KyspXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JFYWNoSW5MaW5lKHJvdywgMCwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLndyYXAgPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBmb3IgKHJvdyA9IGZpcnN0Um93LCBsYXN0Um93ID0gc3RhcnQucm93OyByb3cgPD0gbGFzdFJvdzsgcm93KyspXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JFYWNoSW5MaW5lKHJvdywgMCwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKG9wdGlvbnMuJGlzTXVsdGlMaW5lKSB7XG4gICAgICAgICAgICB2YXIgbGVuID0gcmUubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGZvckVhY2hJbkxpbmUgPSBmdW5jdGlvbihyb3csIG9mZnNldCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRSb3cgPSBiYWNrd2FyZHMgPyByb3cgLSBsZW4gKyAxIDogcm93O1xuICAgICAgICAgICAgICAgIGlmIChzdGFydFJvdyA8IDApIHJldHVybjtcbiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShzdGFydFJvdyk7XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSBsaW5lLnNlYXJjaChyZVswXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFiYWNrd2FyZHMgJiYgc3RhcnRJbmRleCA8IG9mZnNldCB8fCBzdGFydEluZGV4ID09PSAtMSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShzdGFydFJvdyArIGkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGluZS5zZWFyY2gocmVbaV0pID09IC0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZW5kSW5kZXggPSBsaW5lLm1hdGNoKHJlW2xlbiAtIDFdKVswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGJhY2t3YXJkcyAmJiBlbmRJbmRleCA+IG9mZnNldCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhzdGFydFJvdywgc3RhcnRJbmRleCwgc3RhcnRSb3cgKyBsZW4gLSAxLCBlbmRJbmRleCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChiYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIHZhciBmb3JFYWNoSW5MaW5lID0gZnVuY3Rpb24ocm93LCBlbmRJbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpO1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIG0sIGxhc3QgPSAwO1xuICAgICAgICAgICAgICAgIHJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUoKG0gPSByZS5leGVjKGxpbmUpKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gbVswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxhc3QgPSBtLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3QgPj0gbGluZS5sZW5ndGgpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmUubGFzdEluZGV4ID0gbGFzdCArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtLmluZGV4ICsgbGVuZ3RoID4gZW5kSW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKG0uaW5kZXgsIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBtYXRjaGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaGVzW2kgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IG1hdGNoZXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhyb3csIGNvbHVtbiwgcm93LCBjb2x1bW4gKyBsZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBmb3JFYWNoSW5MaW5lID0gZnVuY3Rpb24ocm93LCBzdGFydEluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7XG4gICAgICAgICAgICAgICAgdmFyIG07XG4gICAgICAgICAgICAgICAgdmFyIGxhc3QgPSBzdGFydEluZGV4O1xuICAgICAgICAgICAgICAgIHJlLmxhc3RJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgICAgICAgICAgICAgd2hpbGUoKG0gPSByZS5leGVjKGxpbmUpKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gbVswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxhc3QgPSBtLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2socm93LCBsYXN0LCByb3csbGFzdCArIGxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlLmxhc3RJbmRleCA9IGxhc3QgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0ID49IGxpbmUubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7Zm9yRWFjaDogZm9yRWFjaH07XG4gICAgfTtcblxufSkuY2FsbChTZWFyY2gucHJvdG90eXBlKTtcblxuZnVuY3Rpb24gYWRkV29yZEJvdW5kYXJ5KG5lZWRsZSwgb3B0aW9ucykge1xuICAgIGZ1bmN0aW9uIHdvcmRCb3VuZGFyeShjKSB7XG4gICAgICAgIGlmICgvXFx3Ly50ZXN0KGMpIHx8IG9wdGlvbnMucmVnRXhwKSByZXR1cm4gXCJcXFxcYlwiO1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmRCb3VuZGFyeShuZWVkbGVbMF0pICsgbmVlZGxlXG4gICAgICAgICsgd29yZEJvdW5kYXJ5KG5lZWRsZVtuZWVkbGUubGVuZ3RoIC0gMV0pO1xufVxuXG5leHBvcnRzLlNlYXJjaCA9IFNlYXJjaDtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9rZXlzXCIsXCJhY2UvbGliL3VzZXJhZ2VudFwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBrZXlVdGlsID0gYWNlcXVpcmUoXCIuLi9saWIva2V5c1wiKTtcbnZhciB1c2VyYWdlbnQgPSBhY2VxdWlyZShcIi4uL2xpYi91c2VyYWdlbnRcIik7XG52YXIgS0VZX01PRFMgPSBrZXlVdGlsLktFWV9NT0RTO1xuXG5mdW5jdGlvbiBIYXNoSGFuZGxlcihjb25maWcsIHBsYXRmb3JtKSB7XG4gICAgdGhpcy5wbGF0Zm9ybSA9IHBsYXRmb3JtIHx8ICh1c2VyYWdlbnQuaXNNYWMgPyBcIm1hY1wiIDogXCJ3aW5cIik7XG4gICAgdGhpcy5jb21tYW5kcyA9IHt9O1xuICAgIHRoaXMuY29tbWFuZEtleUJpbmRpbmcgPSB7fTtcbiAgICB0aGlzLmFkZENvbW1hbmRzKGNvbmZpZyk7XG4gICAgdGhpcy4kc2luZ2xlQ29tbWFuZCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIE11bHRpSGFzaEhhbmRsZXIoY29uZmlnLCBwbGF0Zm9ybSkge1xuICAgIEhhc2hIYW5kbGVyLmNhbGwodGhpcywgY29uZmlnLCBwbGF0Zm9ybSk7XG4gICAgdGhpcy4kc2luZ2xlQ29tbWFuZCA9IGZhbHNlO1xufVxuXG5NdWx0aUhhc2hIYW5kbGVyLnByb3RvdHlwZSA9IEhhc2hIYW5kbGVyLnByb3RvdHlwZTtcblxuKGZ1bmN0aW9uKCkge1xuICAgIFxuXG4gICAgdGhpcy5hZGRDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCkge1xuICAgICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kLm5hbWVdKVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tYW5kKGNvbW1hbmQpO1xuXG4gICAgICAgIHRoaXMuY29tbWFuZHNbY29tbWFuZC5uYW1lXSA9IGNvbW1hbmQ7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQuYmluZEtleSlcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkS2V5SGFzaChjb21tYW5kKTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZW1vdmVDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCwga2VlcENvbW1hbmQpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBjb21tYW5kICYmICh0eXBlb2YgY29tbWFuZCA9PT0gJ3N0cmluZycgPyBjb21tYW5kIDogY29tbWFuZC5uYW1lKTtcbiAgICAgICAgY29tbWFuZCA9IHRoaXMuY29tbWFuZHNbbmFtZV07XG4gICAgICAgIGlmICgha2VlcENvbW1hbmQpXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jb21tYW5kc1tuYW1lXTtcbiAgICAgICAgdmFyIGNrYiA9IHRoaXMuY29tbWFuZEtleUJpbmRpbmc7XG4gICAgICAgIGZvciAodmFyIGtleUlkIGluIGNrYikge1xuICAgICAgICAgICAgdmFyIGNtZEdyb3VwID0gY2tiW2tleUlkXTtcbiAgICAgICAgICAgIGlmIChjbWRHcm91cCA9PSBjb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNrYltrZXlJZF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY21kR3JvdXApKSB7XG4gICAgICAgICAgICAgICAgdmFyIGkgPSBjbWRHcm91cC5pbmRleE9mKGNvbW1hbmQpO1xuICAgICAgICAgICAgICAgIGlmIChpICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNtZEdyb3VwLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNtZEdyb3VwLmxlbmd0aCA9PSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgY2tiW2tleUlkXSA9IGNtZEdyb3VwWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmJpbmRLZXkgPSBmdW5jdGlvbihrZXksIGNvbW1hbmQsIHBvc2l0aW9uKSB7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09IFwib2JqZWN0XCIgJiYga2V5KSB7XG4gICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0ga2V5LnBvc2l0aW9uO1xuICAgICAgICAgICAga2V5ID0ga2V5W3RoaXMucGxhdGZvcm1dO1xuICAgICAgICB9XG4gICAgICAgIGlmICgha2V5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ29tbWFuZCh7ZXhlYzogY29tbWFuZCwgYmluZEtleToga2V5LCBuYW1lOiBjb21tYW5kLm5hbWUgfHwga2V5fSk7XG4gICAgICAgIFxuICAgICAgICBrZXkuc3BsaXQoXCJ8XCIpLmZvckVhY2goZnVuY3Rpb24oa2V5UGFydCkge1xuICAgICAgICAgICAgdmFyIGNoYWluID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChrZXlQYXJ0LmluZGV4T2YoXCIgXCIpICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnRzID0ga2V5UGFydC5zcGxpdCgvXFxzKy8pO1xuICAgICAgICAgICAgICAgIGtleVBhcnQgPSBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICBwYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKGtleVBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJpbmRpbmcgPSB0aGlzLnBhcnNlS2V5cyhrZXlQYXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gS0VZX01PRFNbYmluZGluZy5oYXNoSWRdICsgYmluZGluZy5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGNoYWluICs9IChjaGFpbiA/IFwiIFwiIDogXCJcIikgKyBpZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkQ29tbWFuZFRvQmluZGluZyhjaGFpbiwgXCJjaGFpbktleXNcIik7XG4gICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgY2hhaW4gKz0gXCIgXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYmluZGluZyA9IHRoaXMucGFyc2VLZXlzKGtleVBhcnQpO1xuICAgICAgICAgICAgdmFyIGlkID0gS0VZX01PRFNbYmluZGluZy5oYXNoSWRdICsgYmluZGluZy5rZXk7XG4gICAgICAgICAgICB0aGlzLl9hZGRDb21tYW5kVG9CaW5kaW5nKGNoYWluICsgaWQsIGNvbW1hbmQsIHBvc2l0aW9uKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfTtcbiAgICBcbiAgICBmdW5jdGlvbiBnZXRQb3NpdGlvbihjb21tYW5kKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgY29tbWFuZCA9PSBcIm9iamVjdFwiICYmIGNvbW1hbmQuYmluZEtleVxuICAgICAgICAgICAgJiYgY29tbWFuZC5iaW5kS2V5LnBvc2l0aW9uXG4gICAgICAgICAgICB8fCAoY29tbWFuZC5pc0RlZmF1bHQgPyAtMTAwIDogMCk7XG4gICAgfVxuICAgIHRoaXMuX2FkZENvbW1hbmRUb0JpbmRpbmcgPSBmdW5jdGlvbihrZXlJZCwgY29tbWFuZCwgcG9zaXRpb24pIHtcbiAgICAgICAgdmFyIGNrYiA9IHRoaXMuY29tbWFuZEtleUJpbmRpbmcsIGk7XG4gICAgICAgIGlmICghY29tbWFuZCkge1xuICAgICAgICAgICAgZGVsZXRlIGNrYltrZXlJZF07XG4gICAgICAgIH0gZWxzZSBpZiAoIWNrYltrZXlJZF0gfHwgdGhpcy4kc2luZ2xlQ29tbWFuZCkge1xuICAgICAgICAgICAgY2tiW2tleUlkXSA9IGNvbW1hbmQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2tiW2tleUlkXSkpIHtcbiAgICAgICAgICAgICAgICBja2Jba2V5SWRdID0gW2NrYltrZXlJZF1dO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoaSA9IGNrYltrZXlJZF0uaW5kZXhPZihjb21tYW5kKSkgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICBja2Jba2V5SWRdLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwb3NpdGlvbiAhPSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb24gPSBnZXRQb3NpdGlvbihjb21tYW5kKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNvbW1hbmRzID0gY2tiW2tleUlkXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb21tYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNvbW1hbmRzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBvdGhlclBvcyA9IGdldFBvc2l0aW9uKG90aGVyKTtcbiAgICAgICAgICAgICAgICBpZiAob3RoZXJQb3MgPiBwb3NpdGlvbilcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21tYW5kcy5zcGxpY2UoaSwgMCwgY29tbWFuZCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5hZGRDb21tYW5kcyA9IGZ1bmN0aW9uKGNvbW1hbmRzKSB7XG4gICAgICAgIGNvbW1hbmRzICYmIE9iamVjdC5rZXlzKGNvbW1hbmRzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgIHZhciBjb21tYW5kID0gY29tbWFuZHNbbmFtZV07XG4gICAgICAgICAgICBpZiAoIWNvbW1hbmQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmluZEtleShjb21tYW5kLCBuYW1lKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICAgICAgY29tbWFuZCA9IHsgZXhlYzogY29tbWFuZCB9O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBpZiAoIWNvbW1hbmQubmFtZSlcbiAgICAgICAgICAgICAgICBjb21tYW5kLm5hbWUgPSBuYW1lO1xuXG4gICAgICAgICAgICB0aGlzLmFkZENvbW1hbmQoY29tbWFuZCk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgIH07XG5cbiAgICB0aGlzLnJlbW92ZUNvbW1hbmRzID0gZnVuY3Rpb24oY29tbWFuZHMpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZHMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tYW5kKGNvbW1hbmRzW25hbWVdKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfTtcblxuICAgIHRoaXMuYmluZEtleXMgPSBmdW5jdGlvbihrZXlMaXN0KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGtleUxpc3QpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRLZXkoa2V5LCBrZXlMaXN0W2tleV0pO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICB9O1xuXG4gICAgdGhpcy5fYnVpbGRLZXlIYXNoID0gZnVuY3Rpb24oY29tbWFuZCkge1xuICAgICAgICB0aGlzLmJpbmRLZXkoY29tbWFuZC5iaW5kS2V5LCBjb21tYW5kKTtcbiAgICB9O1xuICAgIHRoaXMucGFyc2VLZXlzID0gZnVuY3Rpb24oa2V5cykge1xuICAgICAgICB2YXIgcGFydHMgPSBrZXlzLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tcXC1cXCtdKFtcXC1cXCtdKT8vKS5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHg7fSk7XG4gICAgICAgIHZhciBrZXkgPSBwYXJ0cy5wb3AoKTtcblxuICAgICAgICB2YXIga2V5Q29kZSA9IGtleVV0aWxba2V5XTtcbiAgICAgICAgaWYgKGtleVV0aWwuRlVOQ1RJT05fS0VZU1trZXlDb2RlXSlcbiAgICAgICAgICAgIGtleSA9IGtleVV0aWwuRlVOQ1RJT05fS0VZU1trZXlDb2RlXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBlbHNlIGlmICghcGFydHMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHtrZXk6IGtleSwgaGFzaElkOiAtMX07XG4gICAgICAgIGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PSAxICYmIHBhcnRzWzBdID09IFwic2hpZnRcIilcbiAgICAgICAgICAgIHJldHVybiB7a2V5OiBrZXkudG9VcHBlckNhc2UoKSwgaGFzaElkOiAtMX07XG5cbiAgICAgICAgdmFyIGhhc2hJZCA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgIHZhciBtb2RpZmllciA9IGtleVV0aWwuS0VZX01PRFNbcGFydHNbaV1dO1xuICAgICAgICAgICAgaWYgKG1vZGlmaWVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImludmFsaWQgbW9kaWZpZXIgXCIgKyBwYXJ0c1tpXSArIFwiIGluIFwiICsga2V5cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFzaElkIHw9IG1vZGlmaWVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7a2V5OiBrZXksIGhhc2hJZDogaGFzaElkfTtcbiAgICB9O1xuXG4gICAgdGhpcy5maW5kS2V5Q29tbWFuZCA9IGZ1bmN0aW9uIGZpbmRLZXlDb21tYW5kKGhhc2hJZCwga2V5U3RyaW5nKSB7XG4gICAgICAgIHZhciBrZXkgPSBLRVlfTU9EU1toYXNoSWRdICsga2V5U3RyaW5nO1xuICAgICAgICByZXR1cm4gdGhpcy5jb21tYW5kS2V5QmluZGluZ1trZXldO1xuICAgIH07XG5cbiAgICB0aGlzLmhhbmRsZUtleWJvYXJkID0gZnVuY3Rpb24oZGF0YSwgaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUpIHtcbiAgICAgICAgaWYgKGtleUNvZGUgPCAwKSByZXR1cm47XG4gICAgICAgIHZhciBrZXkgPSBLRVlfTU9EU1toYXNoSWRdICsga2V5U3RyaW5nO1xuICAgICAgICB2YXIgY29tbWFuZCA9IHRoaXMuY29tbWFuZEtleUJpbmRpbmdba2V5XTtcbiAgICAgICAgaWYgKGRhdGEuJGtleUNoYWluKSB7XG4gICAgICAgICAgICBkYXRhLiRrZXlDaGFpbiArPSBcIiBcIiArIGtleTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSB0aGlzLmNvbW1hbmRLZXlCaW5kaW5nW2RhdGEuJGtleUNoYWluXSB8fCBjb21tYW5kO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQgPT0gXCJjaGFpbktleXNcIiB8fCBjb21tYW5kW2NvbW1hbmQubGVuZ3RoIC0gMV0gPT0gXCJjaGFpbktleXNcIikge1xuICAgICAgICAgICAgICAgIGRhdGEuJGtleUNoYWluID0gZGF0YS4ka2V5Q2hhaW4gfHwga2V5O1xuICAgICAgICAgICAgICAgIHJldHVybiB7Y29tbWFuZDogXCJudWxsXCJ9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoZGF0YS4ka2V5Q2hhaW4pIHtcbiAgICAgICAgICAgIGlmICgoIWhhc2hJZCB8fCBoYXNoSWQgPT0gNCkgJiYga2V5U3RyaW5nLmxlbmd0aCA9PSAxKVxuICAgICAgICAgICAgICAgIGRhdGEuJGtleUNoYWluID0gZGF0YS4ka2V5Q2hhaW4uc2xpY2UoMCwgLWtleS5sZW5ndGggLSAxKTsgLy8gd2FpdCBmb3IgaW5wdXRcbiAgICAgICAgICAgIGVsc2UgaWYgKGhhc2hJZCA9PSAtMSB8fCBrZXlDb2RlID4gMClcbiAgICAgICAgICAgICAgICBkYXRhLiRrZXlDaGFpbiA9IFwiXCI7IC8vIHJlc2V0IGtleUNoYWluXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtjb21tYW5kOiBjb21tYW5kfTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuZ2V0U3RhdHVzVGV4dCA9IGZ1bmN0aW9uKGVkaXRvciwgZGF0YSkge1xuICAgICAgICByZXR1cm4gZGF0YS4ka2V5Q2hhaW4gfHwgXCJcIjtcbiAgICB9O1xuXG59KS5jYWxsKEhhc2hIYW5kbGVyLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuSGFzaEhhbmRsZXIgPSBIYXNoSGFuZGxlcjtcbmV4cG9ydHMuTXVsdGlIYXNoSGFuZGxlciA9IE11bHRpSGFzaEhhbmRsZXI7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9jb21tYW5kcy9jb21tYW5kX21hbmFnZXJcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvb29wXCIsXCJhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyXCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgb29wID0gYWNlcXVpcmUoXCIuLi9saWIvb29wXCIpO1xudmFyIE11bHRpSGFzaEhhbmRsZXIgPSBhY2VxdWlyZShcIi4uL2tleWJvYXJkL2hhc2hfaGFuZGxlclwiKS5NdWx0aUhhc2hIYW5kbGVyO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi4vbGliL2V2ZW50X2VtaXR0ZXJcIikuRXZlbnRFbWl0dGVyO1xuXG52YXIgQ29tbWFuZE1hbmFnZXIgPSBmdW5jdGlvbihwbGF0Zm9ybSwgY29tbWFuZHMpIHtcbiAgICBNdWx0aUhhc2hIYW5kbGVyLmNhbGwodGhpcywgY29tbWFuZHMsIHBsYXRmb3JtKTtcbiAgICB0aGlzLmJ5TmFtZSA9IHRoaXMuY29tbWFuZHM7XG4gICAgdGhpcy5zZXREZWZhdWx0SGFuZGxlcihcImV4ZWNcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gZS5jb21tYW5kLmV4ZWMoZS5lZGl0b3IsIGUuYXJncyB8fCB7fSk7XG4gICAgfSk7XG59O1xuXG5vb3AuaW5oZXJpdHMoQ29tbWFuZE1hbmFnZXIsIE11bHRpSGFzaEhhbmRsZXIpO1xuXG4oZnVuY3Rpb24oKSB7XG5cbiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7XG5cbiAgICB0aGlzLmV4ZWMgPSBmdW5jdGlvbihjb21tYW5kLCBlZGl0b3IsIGFyZ3MpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29tbWFuZCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBjb21tYW5kLmxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5leGVjKGNvbW1hbmRbaV0sIGVkaXRvciwgYXJncykpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgY29tbWFuZCA9IHRoaXMuY29tbWFuZHNbY29tbWFuZF07XG5cbiAgICAgICAgaWYgKCFjb21tYW5kKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmIChlZGl0b3IgJiYgZWRpdG9yLiRyZWFkT25seSAmJiAhY29tbWFuZC5yZWFkT25seSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAoY29tbWFuZC5pc0F2YWlsYWJsZSAmJiAhY29tbWFuZC5pc0F2YWlsYWJsZShlZGl0b3IpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHZhciBlID0ge2VkaXRvcjogZWRpdG9yLCBjb21tYW5kOiBjb21tYW5kLCBhcmdzOiBhcmdzfTtcbiAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IHRoaXMuX2VtaXQoXCJleGVjXCIsIGUpO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJhZnRlckV4ZWNcIiwgZSk7XG5cbiAgICAgICAgcmV0dXJuIGUucmV0dXJuVmFsdWUgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xuICAgIH07XG5cbiAgICB0aGlzLnRvZ2dsZVJlY29yZGluZyA9IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICBpZiAodGhpcy4kaW5SZXBsYXkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgZWRpdG9yICYmIGVkaXRvci5fZW1pdChcImNoYW5nZVN0YXR1c1wiKTtcbiAgICAgICAgaWYgKHRoaXMucmVjb3JkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLm1hY3JvLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXhlY1wiLCB0aGlzLiRhZGRDb21tYW5kVG9NYWNybyk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5tYWNyby5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdGhpcy5tYWNybyA9IHRoaXMub2xkTWFjcm87XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlY29yZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy4kYWRkQ29tbWFuZFRvTWFjcm8pIHtcbiAgICAgICAgICAgIHRoaXMuJGFkZENvbW1hbmRUb01hY3JvID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFjcm8ucHVzaChbZS5jb21tYW5kLCBlLmFyZ3NdKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub2xkTWFjcm8gPSB0aGlzLm1hY3JvO1xuICAgICAgICB0aGlzLm1hY3JvID0gW107XG4gICAgICAgIHRoaXMub24oXCJleGVjXCIsIHRoaXMuJGFkZENvbW1hbmRUb01hY3JvKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVjb3JkaW5nID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZXBsYXkgPSBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICAgICAgaWYgKHRoaXMuJGluUmVwbGF5IHx8ICF0aGlzLm1hY3JvKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLnJlY29yZGluZylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZVJlY29yZGluZyhlZGl0b3IpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLiRpblJlcGxheSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm1hY3JvLmZvckVhY2goZnVuY3Rpb24oeCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWMoeCwgZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlYyh4WzBdLCBlZGl0b3IsIHhbMV0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLiRpblJlcGxheSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMudHJpbU1hY3JvID0gZnVuY3Rpb24obSkge1xuICAgICAgICByZXR1cm4gbS5tYXAoZnVuY3Rpb24oeCl7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHhbMF0gIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICB4WzBdID0geFswXS5uYW1lO1xuICAgICAgICAgICAgaWYgKCF4WzFdKVxuICAgICAgICAgICAgICAgIHggPSB4WzBdO1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbn0pLmNhbGwoQ29tbWFuZE1hbmFnZXIucHJvdG90eXBlKTtcblxuZXhwb3J0cy5Db21tYW5kTWFuYWdlciA9IENvbW1hbmRNYW5hZ2VyO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9jb21tYW5kcy9kZWZhdWx0X2NvbW1hbmRzXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2xhbmdcIixcImFjZS9jb25maWdcIixcImFjZS9yYW5nZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBsYW5nID0gYWNlcXVpcmUoXCIuLi9saWIvbGFuZ1wiKTtcbnZhciBjb25maWcgPSBhY2VxdWlyZShcIi4uL2NvbmZpZ1wiKTtcbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi4vcmFuZ2VcIikuUmFuZ2U7XG5cbmZ1bmN0aW9uIGJpbmRLZXkod2luLCBtYWMpIHtcbiAgICByZXR1cm4ge3dpbjogd2luLCBtYWM6IG1hY307XG59XG5leHBvcnRzLmNvbW1hbmRzID0gW3tcbiAgICBuYW1lOiBcInNob3dTZXR0aW5nc01lbnVcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC0sXCIsIFwiQ29tbWFuZC0sXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICBjb25maWcubG9hZE1vZHVsZShcImFjZS9leHQvc2V0dGluZ3NfbWVudVwiLCBmdW5jdGlvbihtb2R1bGUpIHtcbiAgICAgICAgICAgIG1vZHVsZS5pbml0KGVkaXRvcik7XG4gICAgICAgICAgICBlZGl0b3Iuc2hvd1NldHRpbmdzTWVudSgpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJnb1RvTmV4dEVycm9yXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1FXCIsIFwiRjRcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7XG4gICAgICAgIGNvbmZpZy5sb2FkTW9kdWxlKFwiYWNlL2V4dC9lcnJvcl9tYXJrZXJcIiwgZnVuY3Rpb24obW9kdWxlKSB7XG4gICAgICAgICAgICBtb2R1bGUuc2hvd0Vycm9yTWFya2VyKGVkaXRvciwgMSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiYW5pbWF0ZVwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJnb1RvUHJldmlvdXNFcnJvclwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJBbHQtU2hpZnQtRVwiLCBcIlNoaWZ0LUY0XCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICBjb25maWcubG9hZE1vZHVsZShcImFjZS9leHQvZXJyb3JfbWFya2VyXCIsIGZ1bmN0aW9uKG1vZHVsZSkge1xuICAgICAgICAgICAgbW9kdWxlLnNob3dFcnJvck1hcmtlcihlZGl0b3IsIC0xKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJhbmltYXRlXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdGFsbFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLUFcIiwgXCJDb21tYW5kLUFcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RBbGwoKTsgfSxcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwiY2VudGVyc2VsZWN0aW9uXCIsXG4gICAgYmluZEtleTogYmluZEtleShudWxsLCBcIkN0cmwtTFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNlbnRlclNlbGVjdGlvbigpOyB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJnb3RvbGluZVwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLUxcIiwgXCJDb21tYW5kLUxcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7XG4gICAgICAgIHZhciBsaW5lID0gcGFyc2VJbnQocHJvbXB0KFwiRW50ZXIgbGluZSBudW1iZXI6XCIpLCAxMCk7XG4gICAgICAgIGlmICghaXNOYU4obGluZSkpIHtcbiAgICAgICAgICAgIGVkaXRvci5nb3RvTGluZShsaW5lKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImZvbGRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQWx0LUx8Q3RybC1GMVwiLCBcIkNvbW1hbmQtQWx0LUx8Q29tbWFuZC1GMVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24udG9nZ2xlRm9sZChmYWxzZSk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImNlbnRlclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJ1bmZvbGRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQWx0LVNoaWZ0LUx8Q3RybC1TaGlmdC1GMVwiLCBcIkNvbW1hbmQtQWx0LVNoaWZ0LUx8Q29tbWFuZC1TaGlmdC1GMVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24udG9nZ2xlRm9sZCh0cnVlKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY2VudGVyXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInRvZ2dsZUZvbGRXaWRnZXRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiRjJcIiwgXCJGMlwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24udG9nZ2xlRm9sZFdpZGdldCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjZW50ZXJcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwidG9nZ2xlUGFyZW50Rm9sZFdpZGdldFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJBbHQtRjJcIiwgXCJBbHQtRjJcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZXNzaW9uLnRvZ2dsZUZvbGRXaWRnZXQodHJ1ZSk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImNlbnRlclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJmb2xkYWxsXCIsXG4gICAgYmluZEtleTogYmluZEtleShudWxsLCBcIkN0cmwtQ29tbWFuZC1PcHRpb24tMFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24uZm9sZEFsbCgpOyB9LFxuICAgIHNjcm9sbEludG9WaWV3OiBcImNlbnRlclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJmb2xkT3RoZXJcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQWx0LTBcIiwgXCJDb21tYW5kLU9wdGlvbi0wXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBcbiAgICAgICAgZWRpdG9yLnNlc3Npb24uZm9sZEFsbCgpO1xuICAgICAgICBlZGl0b3Iuc2Vzc2lvbi51bmZvbGQoZWRpdG9yLnNlbGVjdGlvbi5nZXRBbGxSYW5nZXMoKSk7XG4gICAgfSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjZW50ZXJcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwidW5mb2xkYWxsXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1TaGlmdC0wXCIsIFwiQ29tbWFuZC1PcHRpb24tU2hpZnQtMFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24udW5mb2xkKCk7IH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY2VudGVyXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImZpbmRuZXh0XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtS1wiLCBcIkNvbW1hbmQtR1wiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmZpbmROZXh0KCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImNlbnRlclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJmaW5kcHJldmlvdXNcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1LXCIsIFwiQ29tbWFuZC1TaGlmdC1HXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZmluZFByZXZpb3VzKCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImNlbnRlclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJzZWxlY3RPckZpbmROZXh0XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1LXCIsIFwiQ3RybC1HXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpXG4gICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZWRpdG9yLmZpbmROZXh0KCk7IFxuICAgIH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdE9yRmluZFByZXZpb3VzXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1TaGlmdC1LXCIsIFwiQ3RybC1TaGlmdC1HXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBcbiAgICAgICAgaWYgKGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKVxuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGVkaXRvci5maW5kUHJldmlvdXMoKTtcbiAgICB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJmaW5kXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtRlwiLCBcIkNvbW1hbmQtRlwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoXCJhY2UvZXh0L3NlYXJjaGJveFwiLCBmdW5jdGlvbihlKSB7ZS5TZWFyY2goZWRpdG9yKTt9KTtcbiAgICB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJvdmVyd3JpdGVcIixcbiAgICBiaW5kS2V5OiBcIkluc2VydFwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudG9nZ2xlT3ZlcndyaXRlKCk7IH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdHRvc3RhcnRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1Ib21lXCIsIFwiQ29tbWFuZC1TaGlmdC1Ib21lfENvbW1hbmQtU2hpZnQtVXBcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RGaWxlU3RhcnQoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgcmVhZE9ubHk6IHRydWUsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiYW5pbWF0ZVwiLFxuICAgIGFjZUNvbW1hbmRHcm91cDogXCJmaWxlSnVtcFwiXG59LCB7XG4gICAgbmFtZTogXCJnb3Rvc3RhcnRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1Ib21lXCIsIFwiQ29tbWFuZC1Ib21lfENvbW1hbmQtVXBcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZUZpbGVTdGFydCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICByZWFkT25seTogdHJ1ZSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJhbmltYXRlXCIsXG4gICAgYWNlQ29tbWFuZEdyb3VwOiBcImZpbGVKdW1wXCJcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdHVwXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIlNoaWZ0LVVwXCIsIFwiU2hpZnQtVXB8Q3RybC1TaGlmdC1QXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0VXAoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImdvbGluZXVwXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIlVwXCIsIFwiVXB8Q3RybC1QXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgeyBlZGl0b3IubmF2aWdhdGVVcChhcmdzLnRpbWVzKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdHRvZW5kXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtU2hpZnQtRW5kXCIsIFwiQ29tbWFuZC1TaGlmdC1FbmR8Q29tbWFuZC1TaGlmdC1Eb3duXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0RmlsZUVuZCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICByZWFkT25seTogdHJ1ZSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJhbmltYXRlXCIsXG4gICAgYWNlQ29tbWFuZEdyb3VwOiBcImZpbGVKdW1wXCJcbn0sIHtcbiAgICBuYW1lOiBcImdvdG9lbmRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1FbmRcIiwgXCJDb21tYW5kLUVuZHxDb21tYW5kLURvd25cIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZUZpbGVFbmQoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgcmVhZE9ubHk6IHRydWUsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiYW5pbWF0ZVwiLFxuICAgIGFjZUNvbW1hbmRHcm91cDogXCJmaWxlSnVtcFwiXG59LCB7XG4gICAgbmFtZTogXCJzZWxlY3Rkb3duXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIlNoaWZ0LURvd25cIiwgXCJTaGlmdC1Eb3dufEN0cmwtU2hpZnQtTlwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdERvd24oKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImdvbGluZWRvd25cIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiRG93blwiLCBcIkRvd258Q3RybC1OXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgeyBlZGl0b3IubmF2aWdhdGVEb3duKGFyZ3MudGltZXMpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwic2VsZWN0d29yZGxlZnRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1MZWZ0XCIsIFwiT3B0aW9uLVNoaWZ0LUxlZnRcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RXb3JkTGVmdCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwiZ290b3dvcmRsZWZ0XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtTGVmdFwiLCBcIk9wdGlvbi1MZWZ0XCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVXb3JkTGVmdCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwic2VsZWN0dG9saW5lc3RhcnRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQWx0LVNoaWZ0LUxlZnRcIiwgXCJDb21tYW5kLVNoaWZ0LUxlZnR8Q3RybC1TaGlmdC1BXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0TGluZVN0YXJ0KCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJnb3RvbGluZXN0YXJ0XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1MZWZ0fEhvbWVcIiwgXCJDb21tYW5kLUxlZnR8SG9tZXxDdHJsLUFcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZUxpbmVTdGFydCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwic2VsZWN0bGVmdFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJTaGlmdC1MZWZ0XCIsIFwiU2hpZnQtTGVmdHxDdHJsLVNoaWZ0LUJcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMZWZ0KCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJnb3RvbGVmdFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJMZWZ0XCIsIFwiTGVmdHxDdHJsLUJcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmdzKSB7IGVkaXRvci5uYXZpZ2F0ZUxlZnQoYXJncy50aW1lcyk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJzZWxlY3R3b3JkcmlnaHRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1SaWdodFwiLCBcIk9wdGlvbi1TaGlmdC1SaWdodFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdFdvcmRSaWdodCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwiZ290b3dvcmRyaWdodFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLVJpZ2h0XCIsIFwiT3B0aW9uLVJpZ2h0XCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVXb3JkUmlnaHQoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdHRvbGluZWVuZFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJBbHQtU2hpZnQtUmlnaHRcIiwgXCJDb21tYW5kLVNoaWZ0LVJpZ2h0fFNoaWZ0LUVuZHxDdHJsLVNoaWZ0LUVcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lRW5kKCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJnb3RvbGluZWVuZFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJBbHQtUmlnaHR8RW5kXCIsIFwiQ29tbWFuZC1SaWdodHxFbmR8Q3RybC1FXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVMaW5lRW5kKCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJzZWxlY3RyaWdodFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJTaGlmdC1SaWdodFwiLCBcIlNoaWZ0LVJpZ2h0XCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0UmlnaHQoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImdvdG9yaWdodFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJSaWdodFwiLCBcIlJpZ2h0fEN0cmwtRlwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIGFyZ3MpIHsgZWRpdG9yLm5hdmlnYXRlUmlnaHQoYXJncy50aW1lcyk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJzZWxlY3RwYWdlZG93blwiLFxuICAgIGJpbmRLZXk6IFwiU2hpZnQtUGFnZURvd25cIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdFBhZ2VEb3duKCk7IH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInBhZ2Vkb3duXCIsXG4gICAgYmluZEtleTogYmluZEtleShudWxsLCBcIk9wdGlvbi1QYWdlRG93blwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNjcm9sbFBhZ2VEb3duKCk7IH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImdvdG9wYWdlZG93blwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJQYWdlRG93blwiLCBcIlBhZ2VEb3dufEN0cmwtVlwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdvdG9QYWdlRG93bigpOyB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJzZWxlY3RwYWdldXBcIixcbiAgICBiaW5kS2V5OiBcIlNoaWZ0LVBhZ2VVcFwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0UGFnZVVwKCk7IH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInBhZ2V1cFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkobnVsbCwgXCJPcHRpb24tUGFnZVVwXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Nyb2xsUGFnZVVwKCk7IH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImdvdG9wYWdldXBcIixcbiAgICBiaW5kS2V5OiBcIlBhZ2VVcFwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ290b1BhZ2VVcCgpOyB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJzY3JvbGx1cFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLVVwXCIsIG51bGwpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGUpIHsgZS5yZW5kZXJlci5zY3JvbGxCeSgwLCAtMiAqIGUucmVuZGVyZXIubGF5ZXJDb25maWcubGluZUhlaWdodCk7IH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNjcm9sbGRvd25cIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1Eb3duXCIsIG51bGwpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGUpIHsgZS5yZW5kZXJlci5zY3JvbGxCeSgwLCAyICogZS5yZW5kZXJlci5sYXllckNvbmZpZy5saW5lSGVpZ2h0KTsgfSxcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwic2VsZWN0bGluZXN0YXJ0XCIsXG4gICAgYmluZEtleTogXCJTaGlmdC1Ib21lXCIsXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lU3RhcnQoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdGxpbmVlbmRcIixcbiAgICBiaW5kS2V5OiBcIlNoaWZ0LUVuZFwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0TGluZUVuZCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwidG9nZ2xlcmVjb3JkaW5nXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtQWx0LUVcIiwgXCJDb21tYW5kLU9wdGlvbi1FXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29tbWFuZHMudG9nZ2xlUmVjb3JkaW5nKGVkaXRvcik7IH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInJlcGxheW1hY3JvXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtU2hpZnQtRVwiLCBcIkNvbW1hbmQtU2hpZnQtRVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNvbW1hbmRzLnJlcGxheShlZGl0b3IpOyB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJqdW1wdG9tYXRjaGluZ1wiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLVBcIiwgXCJDdHJsLVBcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5qdW1wVG9NYXRjaGluZygpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJhbmltYXRlXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdHRvbWF0Y2hpbmdcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1QXCIsIFwiQ3RybC1TaGlmdC1QXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuanVtcFRvTWF0Y2hpbmcodHJ1ZSk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImFuaW1hdGVcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwiZXhwYW5kVG9NYXRjaGluZ1wiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLVNoaWZ0LU1cIiwgXCJDdHJsLVNoaWZ0LU1cIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5qdW1wVG9NYXRjaGluZyh0cnVlLCB0cnVlKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiYW5pbWF0ZVwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJwYXNzS2V5c1RvQnJvd3NlclwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkobnVsbCwgbnVsbCksXG4gICAgZXhlYzogZnVuY3Rpb24oKSB7fSxcbiAgICBwYXNzRXZlbnQ6IHRydWUsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImNvcHlcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LFxue1xuICAgIG5hbWU6IFwiY3V0XCIsXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7XG4gICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICBlZGl0b3IuX2VtaXQoXCJjdXRcIiwgcmFuZ2UpO1xuXG4gICAgICAgIGlmICghZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGVkaXRvci5zZXNzaW9uLnJlbW92ZShyYW5nZSk7XG4gICAgICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiXG59LCB7XG4gICAgbmFtZTogXCJwYXN0ZVwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykge1xuICAgICAgICBlZGl0b3IuJGhhbmRsZVBhc3RlKGFyZ3MpO1xuICAgIH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcInJlbW92ZWxpbmVcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1EXCIsIFwiQ29tbWFuZC1EXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVtb3ZlTGluZXMoKTsgfSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoTGluZVwiXG59LCB7XG4gICAgbmFtZTogXCJkdXBsaWNhdGVTZWxlY3Rpb25cIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1EXCIsIFwiQ29tbWFuZC1TaGlmdC1EXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZHVwbGljYXRlU2VsZWN0aW9uKCk7IH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiXG59LCB7XG4gICAgbmFtZTogXCJzb3J0bGluZXNcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1BbHQtU1wiLCBcIkNvbW1hbmQtQWx0LVNcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zb3J0TGluZXMoKTsgfSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJzZWxlY3Rpb25cIixcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoTGluZVwiXG59LCB7XG4gICAgbmFtZTogXCJ0b2dnbGVjb21tZW50XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtL1wiLCBcIkNvbW1hbmQtL1wiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRvZ2dsZUNvbW1lbnRMaW5lcygpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hMaW5lXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwic2VsZWN0aW9uUGFydFwiXG59LCB7XG4gICAgbmFtZTogXCJ0b2dnbGVCbG9ja0NvbW1lbnRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC0vXCIsIFwiQ29tbWFuZC1TaGlmdC0vXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudG9nZ2xlQmxvY2tDb21tZW50KCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcInNlbGVjdGlvblBhcnRcIlxufSwge1xuICAgIG5hbWU6IFwibW9kaWZ5TnVtYmVyVXBcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1VcFwiLCBcIkFsdC1TaGlmdC1VcFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm1vZGlmeU51bWJlcigxKTsgfSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCJcbn0sIHtcbiAgICBuYW1lOiBcIm1vZGlmeU51bWJlckRvd25cIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1Eb3duXCIsIFwiQWx0LVNoaWZ0LURvd25cIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5tb2RpZnlOdW1iZXIoLTEpOyB9LFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIlxufSwge1xuICAgIG5hbWU6IFwicmVwbGFjZVwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLUhcIiwgXCJDb21tYW5kLU9wdGlvbi1GXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICBjb25maWcubG9hZE1vZHVsZShcImFjZS9leHQvc2VhcmNoYm94XCIsIGZ1bmN0aW9uKGUpIHtlLlNlYXJjaChlZGl0b3IsIHRydWUpO30pO1xuICAgIH1cbn0sIHtcbiAgICBuYW1lOiBcInVuZG9cIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1aXCIsIFwiQ29tbWFuZC1aXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudW5kbygpOyB9XG59LCB7XG4gICAgbmFtZTogXCJyZWRvXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtU2hpZnQtWnxDdHJsLVlcIiwgXCJDb21tYW5kLVNoaWZ0LVp8Q29tbWFuZC1ZXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVkbygpOyB9XG59LCB7XG4gICAgbmFtZTogXCJjb3B5bGluZXN1cFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJBbHQtU2hpZnQtVXBcIiwgXCJDb21tYW5kLU9wdGlvbi1VcFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNvcHlMaW5lc1VwKCk7IH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcIm1vdmVsaW5lc3VwXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1VcFwiLCBcIk9wdGlvbi1VcFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm1vdmVMaW5lc1VwKCk7IH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcImNvcHlsaW5lc2Rvd25cIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQWx0LVNoaWZ0LURvd25cIiwgXCJDb21tYW5kLU9wdGlvbi1Eb3duXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29weUxpbmVzRG93bigpOyB9LFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiXG59LCB7XG4gICAgbmFtZTogXCJtb3ZlbGluZXNkb3duXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1Eb3duXCIsIFwiT3B0aW9uLURvd25cIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5tb3ZlTGluZXNEb3duKCk7IH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcImRlbFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJEZWxldGVcIiwgXCJEZWxldGV8Q3RybC1EfFNoaWZ0LURlbGV0ZVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZShcInJpZ2h0XCIpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwiYmFja3NwYWNlXCIsXG4gICAgYmluZEtleTogYmluZEtleShcbiAgICAgICAgXCJTaGlmdC1CYWNrc3BhY2V8QmFja3NwYWNlXCIsXG4gICAgICAgIFwiQ3RybC1CYWNrc3BhY2V8U2hpZnQtQmFja3NwYWNlfEJhY2tzcGFjZXxDdHJsLUhcIlxuICAgICksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5yZW1vdmUoXCJsZWZ0XCIpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwiY3V0X29yX2RlbGV0ZVwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJTaGlmdC1EZWxldGVcIiwgbnVsbCksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IFxuICAgICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGVkaXRvci5yZW1vdmUoXCJsZWZ0XCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcInJlbW92ZXRvbGluZXN0YXJ0XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1CYWNrc3BhY2VcIiwgXCJDb21tYW5kLUJhY2tzcGFjZVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZVRvTGluZVN0YXJ0KCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiXG59LCB7XG4gICAgbmFtZTogXCJyZW1vdmV0b2xpbmVlbmRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQWx0LURlbGV0ZVwiLCBcIkN0cmwtS3xDb21tYW5kLURlbGV0ZVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZVRvTGluZUVuZCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwicmVtb3ZldG9saW5lc3RhcnRoYXJkXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtU2hpZnQtQmFja3NwYWNlXCIsIG51bGwpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IDA7XG4gICAgICAgIGVkaXRvci5zZXNzaW9uLnJlbW92ZShyYW5nZSk7XG4gICAgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcInJlbW92ZXRvbGluZWVuZGhhcmRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1EZWxldGVcIiwgbnVsbCksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7XG4gICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTtcbiAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgIGVkaXRvci5zZXNzaW9uLnJlbW92ZShyYW5nZSk7XG4gICAgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcInJlbW92ZXdvcmRsZWZ0XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtQmFja3NwYWNlXCIsIFwiQWx0LUJhY2tzcGFjZXxDdHJsLUFsdC1CYWNrc3BhY2VcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5yZW1vdmVXb3JkTGVmdCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwicmVtb3Zld29yZHJpZ2h0XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtRGVsZXRlXCIsIFwiQWx0LURlbGV0ZVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZVdvcmRSaWdodCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwib3V0ZGVudFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJTaGlmdC1UYWJcIiwgXCJTaGlmdC1UYWJcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5ibG9ja091dGRlbnQoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwic2VsZWN0aW9uUGFydFwiXG59LCB7XG4gICAgbmFtZTogXCJpbmRlbnRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiVGFiXCIsIFwiVGFiXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuaW5kZW50KCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcInNlbGVjdGlvblBhcnRcIlxufSwge1xuICAgIG5hbWU6IFwiYmxvY2tvdXRkZW50XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtW1wiLCBcIkN0cmwtW1wiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmJsb2NrT3V0ZGVudCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hMaW5lXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwic2VsZWN0aW9uUGFydFwiXG59LCB7XG4gICAgbmFtZTogXCJibG9ja2luZGVudFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLV1cIiwgXCJDdHJsLV1cIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5ibG9ja0luZGVudCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hMaW5lXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwic2VsZWN0aW9uUGFydFwiXG59LCB7XG4gICAgbmFtZTogXCJpbnNlcnRzdHJpbmdcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIHN0cikgeyBlZGl0b3IuaW5zZXJ0KHN0cik7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiXG59LCB7XG4gICAgbmFtZTogXCJpbnNlcnR0ZXh0XCIsXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmdzKSB7XG4gICAgICAgIGVkaXRvci5pbnNlcnQobGFuZy5zdHJpbmdSZXBlYXQoYXJncy50ZXh0ICB8fCBcIlwiLCBhcmdzLnRpbWVzIHx8IDEpKTtcbiAgICB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwic3BsaXRsaW5lXCIsXG4gICAgYmluZEtleTogYmluZEtleShudWxsLCBcIkN0cmwtT1wiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNwbGl0TGluZSgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwidHJhbnNwb3NlbGV0dGVyc1wiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJBbHQtU2hpZnQtWFwiLCBcIkN0cmwtVFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRyYW5zcG9zZUxldHRlcnMoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogZnVuY3Rpb24oZWRpdG9yKSB7ZWRpdG9yLnRyYW5zcG9zZVNlbGVjdGlvbnMoMSk7IH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcInRvdXBwZXJjYXNlXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtVVwiLCBcIkN0cmwtVVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRvVXBwZXJDYXNlKCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiXG59LCB7XG4gICAgbmFtZTogXCJ0b2xvd2VyY2FzZVwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLVNoaWZ0LVVcIiwgXCJDdHJsLVNoaWZ0LVVcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci50b0xvd2VyQ2FzZSgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwiZXhwYW5kdG9saW5lXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtU2hpZnQtTFwiLCBcIkNvbW1hbmQtU2hpZnQtTFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICAgICAgdmFyIHJhbmdlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuXG4gICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IHJhbmdlLmVuZC5jb2x1bW4gPSAwO1xuICAgICAgICByYW5nZS5lbmQucm93Kys7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0UmFuZ2UocmFuZ2UsIGZhbHNlKTtcbiAgICB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwiam9pbmxpbmVzXCIsXG4gICAgYmluZEtleTogYmluZEtleShudWxsLCBudWxsKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICAgICAgdmFyIGlzQmFja3dhcmRzID0gZWRpdG9yLnNlbGVjdGlvbi5pc0JhY2t3YXJkcygpO1xuICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSBpc0JhY2t3YXJkcyA/IGVkaXRvci5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uTGVhZCgpIDogZWRpdG9yLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25BbmNob3IoKTtcbiAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IGlzQmFja3dhcmRzID8gZWRpdG9yLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25BbmNob3IoKSA6IGVkaXRvci5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uTGVhZCgpO1xuICAgICAgICB2YXIgZmlyc3RMaW5lRW5kQ29sID0gZWRpdG9yLnNlc3Npb24uZG9jLmdldExpbmUoc2VsZWN0aW9uU3RhcnQucm93KS5sZW5ndGg7XG4gICAgICAgIHZhciBzZWxlY3RlZFRleHQgPSBlZGl0b3Iuc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSk7XG4gICAgICAgIHZhciBzZWxlY3RlZENvdW50ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2UoL1xcblxccyovLCBcIiBcIikubGVuZ3RoO1xuICAgICAgICB2YXIgaW5zZXJ0TGluZSA9IGVkaXRvci5zZXNzaW9uLmRvYy5nZXRMaW5lKHNlbGVjdGlvblN0YXJ0LnJvdyk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IHNlbGVjdGlvblN0YXJ0LnJvdyArIDE7IGkgPD0gc2VsZWN0aW9uRW5kLnJvdyArIDE7IGkrKykge1xuICAgICAgICAgICAgdmFyIGN1ckxpbmUgPSBsYW5nLnN0cmluZ1RyaW1MZWZ0KGxhbmcuc3RyaW5nVHJpbVJpZ2h0KGVkaXRvci5zZXNzaW9uLmRvYy5nZXRMaW5lKGkpKSk7XG4gICAgICAgICAgICBpZiAoY3VyTGluZS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICBjdXJMaW5lID0gXCIgXCIgKyBjdXJMaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5zZXJ0TGluZSArPSBjdXJMaW5lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlbGVjdGlvbkVuZC5yb3cgKyAxIDwgKGVkaXRvci5zZXNzaW9uLmRvYy5nZXRMZW5ndGgoKSAtIDEpKSB7XG4gICAgICAgICAgICBpbnNlcnRMaW5lICs9IGVkaXRvci5zZXNzaW9uLmRvYy5nZXROZXdMaW5lQ2hhcmFjdGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgZWRpdG9yLnNlc3Npb24uZG9jLnJlcGxhY2UobmV3IFJhbmdlKHNlbGVjdGlvblN0YXJ0LnJvdywgMCwgc2VsZWN0aW9uRW5kLnJvdyArIDIsIDApLCBpbnNlcnRMaW5lKTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRDb3VudCA+IDApIHtcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZUN1cnNvclRvKHNlbGVjdGlvblN0YXJ0LnJvdywgc2VsZWN0aW9uU3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0VG8oc2VsZWN0aW9uU3RhcnQucm93LCBzZWxlY3Rpb25TdGFydC5jb2x1bW4gKyBzZWxlY3RlZENvdW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpcnN0TGluZUVuZENvbCA9IGVkaXRvci5zZXNzaW9uLmRvYy5nZXRMaW5lKHNlbGVjdGlvblN0YXJ0LnJvdykubGVuZ3RoID4gZmlyc3RMaW5lRW5kQ29sID8gKGZpcnN0TGluZUVuZENvbCArIDEpIDogZmlyc3RMaW5lRW5kQ29sO1xuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8oc2VsZWN0aW9uU3RhcnQucm93LCBmaXJzdExpbmVFbmRDb2wpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImludmVydFNlbGVjdGlvblwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkobnVsbCwgbnVsbCksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7XG4gICAgICAgIHZhciBlbmRSb3cgPSBlZGl0b3Iuc2Vzc2lvbi5kb2MuZ2V0TGVuZ3RoKCkgLSAxO1xuICAgICAgICB2YXIgZW5kQ29sID0gZWRpdG9yLnNlc3Npb24uZG9jLmdldExpbmUoZW5kUm93KS5sZW5ndGg7XG4gICAgICAgIHZhciByYW5nZXMgPSBlZGl0b3Iuc2VsZWN0aW9uLnJhbmdlTGlzdC5yYW5nZXM7XG4gICAgICAgIHZhciBuZXdSYW5nZXMgPSBbXTtcbiAgICAgICAgaWYgKHJhbmdlcy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICByYW5nZXMgPSBbZWRpdG9yLnNlbGVjdGlvbi5nZXRSYW5nZSgpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA9PSAocmFuZ2VzLmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEocmFuZ2VzW2ldLmVuZC5yb3cgPT09IGVuZFJvdyAmJiByYW5nZXNbaV0uZW5kLmNvbHVtbiA9PT0gZW5kQ29sKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdSYW5nZXMucHVzaChuZXcgUmFuZ2UocmFuZ2VzW2ldLmVuZC5yb3csIHJhbmdlc1tpXS5lbmQuY29sdW1uLCBlbmRSb3csIGVuZENvbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIShyYW5nZXNbaV0uc3RhcnQucm93ID09PSAwICYmIHJhbmdlc1tpXS5zdGFydC5jb2x1bW4gPT09IDApKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Jhbmdlcy5wdXNoKG5ldyBSYW5nZSgwLCAwLCByYW5nZXNbaV0uc3RhcnQucm93LCByYW5nZXNbaV0uc3RhcnQuY29sdW1uKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdSYW5nZXMucHVzaChuZXcgUmFuZ2UocmFuZ2VzW2ktMV0uZW5kLnJvdywgcmFuZ2VzW2ktMV0uZW5kLmNvbHVtbiwgcmFuZ2VzW2ldLnN0YXJ0LnJvdywgcmFuZ2VzW2ldLnN0YXJ0LmNvbHVtbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZWRpdG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTtcbiAgICAgICAgZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG5ld1Jhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZXNbaV0sIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVhZE9ubHk6IHRydWUsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwibm9uZVwiXG59XTtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvZWRpdG9yXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2ZpeG9sZGJyb3dzZXJzXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9kb21cIixcImFjZS9saWIvbGFuZ1wiLFwiYWNlL2xpYi91c2VyYWdlbnRcIixcImFjZS9rZXlib2FyZC90ZXh0aW5wdXRcIixcImFjZS9tb3VzZS9tb3VzZV9oYW5kbGVyXCIsXCJhY2UvbW91c2UvZm9sZF9oYW5kbGVyXCIsXCJhY2Uva2V5Ym9hcmQva2V5YmluZGluZ1wiLFwiYWNlL2VkaXRfc2Vzc2lvblwiLFwiYWNlL3NlYXJjaFwiLFwiYWNlL3JhbmdlXCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIixcImFjZS9jb21tYW5kcy9jb21tYW5kX21hbmFnZXJcIixcImFjZS9jb21tYW5kcy9kZWZhdWx0X2NvbW1hbmRzXCIsXCJhY2UvY29uZmlnXCIsXCJhY2UvdG9rZW5faXRlcmF0b3JcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG5hY2VxdWlyZShcIi4vbGliL2ZpeG9sZGJyb3dzZXJzXCIpO1xuXG52YXIgb29wID0gYWNlcXVpcmUoXCIuL2xpYi9vb3BcIik7XG52YXIgZG9tID0gYWNlcXVpcmUoXCIuL2xpYi9kb21cIik7XG52YXIgbGFuZyA9IGFjZXF1aXJlKFwiLi9saWIvbGFuZ1wiKTtcbnZhciB1c2VyYWdlbnQgPSBhY2VxdWlyZShcIi4vbGliL3VzZXJhZ2VudFwiKTtcbnZhciBUZXh0SW5wdXQgPSBhY2VxdWlyZShcIi4va2V5Ym9hcmQvdGV4dGlucHV0XCIpLlRleHRJbnB1dDtcbnZhciBNb3VzZUhhbmRsZXIgPSBhY2VxdWlyZShcIi4vbW91c2UvbW91c2VfaGFuZGxlclwiKS5Nb3VzZUhhbmRsZXI7XG52YXIgRm9sZEhhbmRsZXIgPSBhY2VxdWlyZShcIi4vbW91c2UvZm9sZF9oYW5kbGVyXCIpLkZvbGRIYW5kbGVyO1xudmFyIEtleUJpbmRpbmcgPSBhY2VxdWlyZShcIi4va2V5Ym9hcmQva2V5YmluZGluZ1wiKS5LZXlCaW5kaW5nO1xudmFyIEVkaXRTZXNzaW9uID0gYWNlcXVpcmUoXCIuL2VkaXRfc2Vzc2lvblwiKS5FZGl0U2Vzc2lvbjtcbnZhciBTZWFyY2ggPSBhY2VxdWlyZShcIi4vc2VhcmNoXCIpLlNlYXJjaDtcbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi9yYW5nZVwiKS5SYW5nZTtcbnZhciBFdmVudEVtaXR0ZXIgPSBhY2VxdWlyZShcIi4vbGliL2V2ZW50X2VtaXR0ZXJcIikuRXZlbnRFbWl0dGVyO1xudmFyIENvbW1hbmRNYW5hZ2VyID0gYWNlcXVpcmUoXCIuL2NvbW1hbmRzL2NvbW1hbmRfbWFuYWdlclwiKS5Db21tYW5kTWFuYWdlcjtcbnZhciBkZWZhdWx0Q29tbWFuZHMgPSBhY2VxdWlyZShcIi4vY29tbWFuZHMvZGVmYXVsdF9jb21tYW5kc1wiKS5jb21tYW5kcztcbnZhciBjb25maWcgPSBhY2VxdWlyZShcIi4vY29uZmlnXCIpO1xudmFyIFRva2VuSXRlcmF0b3IgPSBhY2VxdWlyZShcIi4vdG9rZW5faXRlcmF0b3JcIikuVG9rZW5JdGVyYXRvcjtcbnZhciBFZGl0b3IgPSBmdW5jdGlvbihyZW5kZXJlciwgc2Vzc2lvbikge1xuICAgIHZhciBjb250YWluZXIgPSByZW5kZXJlci5nZXRDb250YWluZXJFbGVtZW50KCk7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgIHRoaXMuaWQgPSBcImVkaXRvclwiICsgKCsrRWRpdG9yLiR1aWQpO1xuXG4gICAgdGhpcy5jb21tYW5kcyA9IG5ldyBDb21tYW5kTWFuYWdlcih1c2VyYWdlbnQuaXNNYWMgPyBcIm1hY1wiIDogXCJ3aW5cIiwgZGVmYXVsdENvbW1hbmRzKTtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhpcy50ZXh0SW5wdXQgID0gbmV3IFRleHRJbnB1dChyZW5kZXJlci5nZXRUZXh0QXJlYUNvbnRhaW5lcigpLCB0aGlzKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci50ZXh0YXJlYSA9IHRoaXMudGV4dElucHV0LmdldEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy4kbW91c2VIYW5kbGVyID0gbmV3IE1vdXNlSGFuZGxlcih0aGlzKTtcbiAgICAgICAgbmV3IEZvbGRIYW5kbGVyKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMua2V5QmluZGluZyA9IG5ldyBLZXlCaW5kaW5nKHRoaXMpO1xuXG4gICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgPSAwO1xuICAgIHRoaXMuJHNlYXJjaCA9IG5ldyBTZWFyY2goKS5zZXQoe1xuICAgICAgICB3cmFwOiB0cnVlXG4gICAgfSk7XG5cbiAgICB0aGlzLiRoaXN0b3J5VHJhY2tlciA9IHRoaXMuJGhpc3RvcnlUcmFja2VyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jb21tYW5kcy5vbihcImV4ZWNcIiwgdGhpcy4kaGlzdG9yeVRyYWNrZXIpO1xuXG4gICAgdGhpcy4kaW5pdE9wZXJhdGlvbkxpc3RlbmVycygpO1xuICAgIFxuICAgIHRoaXMuXyRlbWl0SW5wdXRFdmVudCA9IGxhbmcuZGVsYXllZENhbGwoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImlucHV0XCIsIHt9KTtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbiAmJiB0aGlzLnNlc3Npb24uYmdUb2tlbml6ZXIpXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYmdUb2tlbml6ZXIuc2NoZWR1bGVTdGFydCgpO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gICAgXG4gICAgdGhpcy5vbihcImNoYW5nZVwiLCBmdW5jdGlvbihfLCBfc2VsZikge1xuICAgICAgICBfc2VsZi5fJGVtaXRJbnB1dEV2ZW50LnNjaGVkdWxlKDMxKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0U2Vzc2lvbihzZXNzaW9uIHx8IG5ldyBFZGl0U2Vzc2lvbihcIlwiKSk7XG4gICAgY29uZmlnLnJlc2V0T3B0aW9ucyh0aGlzKTtcbiAgICBjb25maWcuX3NpZ25hbChcImVkaXRvclwiLCB0aGlzKTtcbn07XG5cbkVkaXRvci4kdWlkID0gMDtcblxuKGZ1bmN0aW9uKCl7XG5cbiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7XG5cbiAgICB0aGlzLiRpbml0T3BlcmF0aW9uTGlzdGVuZXJzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIGxhc3QoYSkge3JldHVybiBhW2EubGVuZ3RoIC0gMV07fVxuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmNvbW1hbmRzLm9uKFwiZXhlY1wiLCB0aGlzLnN0YXJ0T3BlcmF0aW9uLmJpbmQodGhpcyksIHRydWUpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzLm9uKFwiYWZ0ZXJFeGVjXCIsIHRoaXMuZW5kT3BlcmF0aW9uLmJpbmQodGhpcyksIHRydWUpO1xuXG4gICAgICAgIHRoaXMuJG9wUmVzZXRUaW1lciA9IGxhbmcuZGVsYXllZENhbGwodGhpcy5lbmRPcGVyYXRpb24uYmluZCh0aGlzKSk7XG5cbiAgICAgICAgdGhpcy5vbihcImNoYW5nZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuY3VyT3AgfHwgdGhpcy5zdGFydE9wZXJhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5jdXJPcC5kb2NDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCB0cnVlKTtcblxuICAgICAgICB0aGlzLm9uKFwiY2hhbmdlU2VsZWN0aW9uXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5jdXJPcCB8fCB0aGlzLnN0YXJ0T3BlcmF0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9LmJpbmQodGhpcyksIHRydWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmN1ck9wID0gbnVsbDtcbiAgICB0aGlzLnByZXZPcCA9IHt9O1xuICAgIHRoaXMuc3RhcnRPcGVyYXRpb24gPSBmdW5jdGlvbihjb21tYWRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jdXJPcCkge1xuICAgICAgICAgICAgaWYgKCFjb21tYWRFdmVudCB8fCB0aGlzLmN1ck9wLmNvbW1hbmQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5wcmV2T3AgPSB0aGlzLmN1ck9wO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29tbWFkRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNDb21tYW5kID0gbnVsbDtcbiAgICAgICAgICAgIGNvbW1hZEV2ZW50ID0ge307XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRvcFJlc2V0VGltZXIuc2NoZWR1bGUoKTtcbiAgICAgICAgdGhpcy5jdXJPcCA9IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hZEV2ZW50LmNvbW1hbmQgfHwge30sXG4gICAgICAgICAgICBhcmdzOiBjb21tYWRFdmVudC5hcmdzLFxuICAgICAgICAgICAgc2Nyb2xsVG9wOiB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvcFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5jdXJPcC5jb21tYW5kLm5hbWUgJiYgdGhpcy5jdXJPcC5jb21tYW5kLnNjcm9sbEludG9WaWV3ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZysrO1xuICAgIH07XG5cbiAgICB0aGlzLmVuZE9wZXJhdGlvbiA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VyT3ApIHtcbiAgICAgICAgICAgIGlmIChlICYmIGUucmV0dXJuVmFsdWUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1ck9wID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbChcImJlZm9yZUVuZE9wZXJhdGlvblwiKTtcbiAgICAgICAgICAgIHZhciBjb21tYW5kID0gdGhpcy5jdXJPcC5jb21tYW5kO1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQubmFtZSAmJiB0aGlzLiRibG9ja1Njcm9sbGluZyA+IDApXG4gICAgICAgICAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmctLTtcbiAgICAgICAgICAgIHZhciBzY3JvbGxJbnRvVmlldyA9IGNvbW1hbmQgJiYgY29tbWFuZC5zY3JvbGxJbnRvVmlldztcbiAgICAgICAgICAgIGlmIChzY3JvbGxJbnRvVmlldykge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoc2Nyb2xsSW50b1ZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNlbnRlci1hbmltYXRlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxJbnRvVmlldyA9IFwiYW5pbWF0ZVwiO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY2VudGVyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImFuaW1hdGVcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImN1cnNvclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3Rpb25QYXJ0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHRoaXMucmVuZGVyZXIubGF5ZXJDb25maWc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID49IGNvbmZpZy5sYXN0Um93IHx8IHJhbmdlLmVuZC5yb3cgPD0gY29uZmlnLmZpcnN0Um93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldyh0aGlzLnNlbGVjdGlvbi5hbmNob3IsIHRoaXMuc2VsZWN0aW9uLmxlYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNjcm9sbEludG9WaWV3ID09IFwiYW5pbWF0ZVwiKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFuaW1hdGVTY3JvbGxpbmcodGhpcy5jdXJPcC5zY3JvbGxUb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLnByZXZPcCA9IHRoaXMuY3VyT3A7XG4gICAgICAgICAgICB0aGlzLmN1ck9wID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy4kbWVyZ2VhYmxlQ29tbWFuZHMgPSBbXCJiYWNrc3BhY2VcIiwgXCJkZWxcIiwgXCJpbnNlcnRzdHJpbmdcIl07XG4gICAgdGhpcy4kaGlzdG9yeVRyYWNrZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICghdGhpcy4kbWVyZ2VVbmRvRGVsdGFzKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciBwcmV2ID0gdGhpcy5wcmV2T3A7XG4gICAgICAgIHZhciBtZXJnZWFibGVDb21tYW5kcyA9IHRoaXMuJG1lcmdlYWJsZUNvbW1hbmRzO1xuICAgICAgICB2YXIgc2hvdWxkTWVyZ2UgPSBwcmV2LmNvbW1hbmQgJiYgKGUuY29tbWFuZC5uYW1lID09IHByZXYuY29tbWFuZC5uYW1lKTtcbiAgICAgICAgaWYgKGUuY29tbWFuZC5uYW1lID09IFwiaW5zZXJ0c3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHZhciB0ZXh0ID0gZS5hcmdzO1xuICAgICAgICAgICAgaWYgKHRoaXMubWVyZ2VOZXh0Q29tbWFuZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VOZXh0Q29tbWFuZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHNob3VsZE1lcmdlID0gc2hvdWxkTWVyZ2VcbiAgICAgICAgICAgICAgICAmJiB0aGlzLm1lcmdlTmV4dENvbW1hbmQgLy8gcHJldmlvdXMgY29tbWFuZCBhbGxvd3MgdG8gY29hbGVzY2Ugd2l0aFxuICAgICAgICAgICAgICAgICYmICghL1xccy8udGVzdCh0ZXh0KSB8fCAvXFxzLy50ZXN0KHByZXYuYXJncykpOyAvLyBwcmV2aW91cyBpbnNlcnRpb24gd2FzIG9mIHNhbWUgdHlwZVxuXG4gICAgICAgICAgICB0aGlzLm1lcmdlTmV4dENvbW1hbmQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2hvdWxkTWVyZ2UgPSBzaG91bGRNZXJnZVxuICAgICAgICAgICAgICAgICYmIG1lcmdlYWJsZUNvbW1hbmRzLmluZGV4T2YoZS5jb21tYW5kLm5hbWUpICE9PSAtMTsgLy8gdGhlIGNvbW1hbmQgaXMgbWVyZ2VhYmxlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLiRtZXJnZVVuZG9EZWx0YXMgIT0gXCJhbHdheXNcIlxuICAgICAgICAgICAgJiYgRGF0ZS5ub3coKSAtIHRoaXMuc2VxdWVuY2VTdGFydFRpbWUgPiAyMDAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgc2hvdWxkTWVyZ2UgPSBmYWxzZTsgLy8gdGhlIHNlcXVlbmNlIGlzIHRvbyBsb25nXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvdWxkTWVyZ2UpXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ubWVyZ2VVbmRvRGVsdGFzID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBpZiAobWVyZ2VhYmxlQ29tbWFuZHMuaW5kZXhPZihlLmNvbW1hbmQubmFtZSkgIT09IC0xKVxuICAgICAgICAgICAgdGhpcy5zZXF1ZW5jZVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgfTtcbiAgICB0aGlzLnNldEtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9uKGtleWJvYXJkSGFuZGxlciwgY2IpIHtcbiAgICAgICAgaWYgKGtleWJvYXJkSGFuZGxlciAmJiB0eXBlb2Yga2V5Ym9hcmRIYW5kbGVyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLiRrZXliaW5kaW5nSWQgPSBrZXlib2FyZEhhbmRsZXI7XG4gICAgICAgICAgICB2YXIgX3NlbGYgPSB0aGlzO1xuICAgICAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoW1wia2V5YmluZGluZ1wiLCBrZXlib2FyZEhhbmRsZXJdLCBmdW5jdGlvbihtb2R1bGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoX3NlbGYuJGtleWJpbmRpbmdJZCA9PSBrZXlib2FyZEhhbmRsZXIpXG4gICAgICAgICAgICAgICAgICAgIF9zZWxmLmtleUJpbmRpbmcuc2V0S2V5Ym9hcmRIYW5kbGVyKG1vZHVsZSAmJiBtb2R1bGUuaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgY2IgJiYgY2IoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4ka2V5YmluZGluZ0lkID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMua2V5QmluZGluZy5zZXRLZXlib2FyZEhhbmRsZXIoa2V5Ym9hcmRIYW5kbGVyKTtcbiAgICAgICAgICAgIGNiICYmIGNiKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0S2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmtleUJpbmRpbmcuZ2V0S2V5Ym9hcmRIYW5kbGVyKCk7XG4gICAgfTtcbiAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7XG4gICAgICAgIGlmICh0aGlzLnNlc3Npb24gPT0gc2Vzc2lvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuY3VyT3ApIHRoaXMuZW5kT3BlcmF0aW9uKCk7XG4gICAgICAgIHRoaXMuY3VyT3AgPSB7fTtcblxuICAgICAgICB2YXIgb2xkU2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgaWYgKG9sZFNlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vZmYoXCJjaGFuZ2VcIiwgdGhpcy4kb25Eb2N1bWVudENoYW5nZSk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKFwiY2hhbmdlTW9kZVwiLCB0aGlzLiRvbkNoYW5nZU1vZGUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZihcInRva2VuaXplclVwZGF0ZVwiLCB0aGlzLiRvblRva2VuaXplclVwZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKFwiY2hhbmdlVGFiU2l6ZVwiLCB0aGlzLiRvbkNoYW5nZVRhYlNpemUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZihcImNoYW5nZVdyYXBMaW1pdFwiLCB0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdCk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKFwiY2hhbmdlV3JhcE1vZGVcIiwgdGhpcy4kb25DaGFuZ2VXcmFwTW9kZSk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKFwiY2hhbmdlRm9sZFwiLCB0aGlzLiRvbkNoYW5nZUZvbGQpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZihcImNoYW5nZUZyb250TWFya2VyXCIsIHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXIpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZihcImNoYW5nZUJhY2tNYXJrZXJcIiwgdGhpcy4kb25DaGFuZ2VCYWNrTWFya2VyKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vZmYoXCJjaGFuZ2VCcmVha3BvaW50XCIsIHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKFwiY2hhbmdlQW5ub3RhdGlvblwiLCB0aGlzLiRvbkNoYW5nZUFubm90YXRpb24pO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZihcImNoYW5nZU92ZXJ3cml0ZVwiLCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKFwiY2hhbmdlU2Nyb2xsVG9wXCIsIHRoaXMuJG9uU2Nyb2xsVG9wQ2hhbmdlKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vZmYoXCJjaGFuZ2VTY3JvbGxMZWZ0XCIsIHRoaXMuJG9uU2Nyb2xsTGVmdENoYW5nZSk7XG5cbiAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnNlc3Npb24uZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24ub2ZmKFwiY2hhbmdlQ3Vyc29yXCIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5vZmYoXCJjaGFuZ2VTZWxlY3Rpb25cIiwgdGhpcy4kb25TZWxlY3Rpb25DaGFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICAgICAgaWYgKHNlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuJG9uRG9jdW1lbnRDaGFuZ2UgPSB0aGlzLm9uRG9jdW1lbnRDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHNlc3Npb24ub24oXCJjaGFuZ2VcIiwgdGhpcy4kb25Eb2N1bWVudENoYW5nZSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFNlc3Npb24oc2Vzc2lvbik7XG4gICAgXG4gICAgICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUgPSB0aGlzLm9uQ2hhbmdlTW9kZS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgc2Vzc2lvbi5vbihcImNoYW5nZU1vZGVcIiwgdGhpcy4kb25DaGFuZ2VNb2RlKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuJG9uVG9rZW5pemVyVXBkYXRlID0gdGhpcy5vblRva2VuaXplclVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgc2Vzc2lvbi5vbihcInRva2VuaXplclVwZGF0ZVwiLCB0aGlzLiRvblRva2VuaXplclVwZGF0ZSk7XG4gICAgXG4gICAgICAgICAgICB0aGlzLiRvbkNoYW5nZVRhYlNpemUgPSB0aGlzLnJlbmRlcmVyLm9uQ2hhbmdlVGFiU2l6ZS5iaW5kKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICAgICAgc2Vzc2lvbi5vbihcImNoYW5nZVRhYlNpemVcIiwgdGhpcy4kb25DaGFuZ2VUYWJTaXplKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlV3JhcExpbWl0ID0gdGhpcy5vbkNoYW5nZVdyYXBMaW1pdC5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgc2Vzc2lvbi5vbihcImNoYW5nZVdyYXBMaW1pdFwiLCB0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdCk7XG4gICAgXG4gICAgICAgICAgICB0aGlzLiRvbkNoYW5nZVdyYXBNb2RlID0gdGhpcy5vbkNoYW5nZVdyYXBNb2RlLmJpbmQodGhpcyk7XG4gICAgICAgICAgICBzZXNzaW9uLm9uKFwiY2hhbmdlV3JhcE1vZGVcIiwgdGhpcy4kb25DaGFuZ2VXcmFwTW9kZSk7XG4gICAgXG4gICAgICAgICAgICB0aGlzLiRvbkNoYW5nZUZvbGQgPSB0aGlzLm9uQ2hhbmdlRm9sZC5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgc2Vzc2lvbi5vbihcImNoYW5nZUZvbGRcIiwgdGhpcy4kb25DaGFuZ2VGb2xkKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXIgPSB0aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vbihcImNoYW5nZUZyb250TWFya2VyXCIsIHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXIpO1xuICAgIFxuICAgICAgICAgICAgdGhpcy4kb25DaGFuZ2VCYWNrTWFya2VyID0gdGhpcy5vbkNoYW5nZUJhY2tNYXJrZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vbihcImNoYW5nZUJhY2tNYXJrZXJcIiwgdGhpcy4kb25DaGFuZ2VCYWNrTWFya2VyKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCA9IHRoaXMub25DaGFuZ2VCcmVha3BvaW50LmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub24oXCJjaGFuZ2VCcmVha3BvaW50XCIsIHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCk7XG4gICAgXG4gICAgICAgICAgICB0aGlzLiRvbkNoYW5nZUFubm90YXRpb24gPSB0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbi5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9uKFwiY2hhbmdlQW5ub3RhdGlvblwiLCB0aGlzLiRvbkNoYW5nZUFubm90YXRpb24pO1xuICAgIFxuICAgICAgICAgICAgdGhpcy4kb25DdXJzb3JDaGFuZ2UgPSB0aGlzLm9uQ3Vyc29yQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub24oXCJjaGFuZ2VPdmVyd3JpdGVcIiwgdGhpcy4kb25DdXJzb3JDaGFuZ2UpO1xuICAgIFxuICAgICAgICAgICAgdGhpcy4kb25TY3JvbGxUb3BDaGFuZ2UgPSB0aGlzLm9uU2Nyb2xsVG9wQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub24oXCJjaGFuZ2VTY3JvbGxUb3BcIiwgdGhpcy4kb25TY3JvbGxUb3BDaGFuZ2UpO1xuICAgIFxuICAgICAgICAgICAgdGhpcy4kb25TY3JvbGxMZWZ0Q2hhbmdlID0gdGhpcy5vblNjcm9sbExlZnRDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vbihcImNoYW5nZVNjcm9sbExlZnRcIiwgdGhpcy4kb25TY3JvbGxMZWZ0Q2hhbmdlKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gc2Vzc2lvbi5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm9uKFwiY2hhbmdlQ3Vyc29yXCIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuJG9uU2VsZWN0aW9uQ2hhbmdlID0gdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ub24oXCJjaGFuZ2VTZWxlY3Rpb25cIiwgdGhpcy4kb25TZWxlY3Rpb25DaGFuZ2UpO1xuICAgIFxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZU1vZGUoKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7XG4gICAgICAgICAgICB0aGlzLm9uQ3Vyc29yQ2hhbmdlKCk7XG4gICAgICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyAtPSAxO1xuICAgIFxuICAgICAgICAgICAgdGhpcy5vblNjcm9sbFRvcENoYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5vblNjcm9sbExlZnRDaGFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VGcm9udE1hcmtlcigpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUJhY2tNYXJrZXIoKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VCcmVha3BvaW50KCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCkgJiYgdGhpcy5yZW5kZXJlci5hZGp1c3RXcmFwTGltaXQoKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlRnVsbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2lnbmFsKFwiY2hhbmdlU2Vzc2lvblwiLCB7XG4gICAgICAgICAgICBzZXNzaW9uOiBzZXNzaW9uLFxuICAgICAgICAgICAgb2xkU2Vzc2lvbjogb2xkU2Vzc2lvblxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY3VyT3AgPSBudWxsO1xuICAgICAgICBcbiAgICAgICAgb2xkU2Vzc2lvbiAmJiBvbGRTZXNzaW9uLl9zaWduYWwoXCJjaGFuZ2VFZGl0b3JcIiwge29sZEVkaXRvcjogdGhpc30pO1xuICAgICAgICBzZXNzaW9uICYmIHNlc3Npb24uX3NpZ25hbChcImNoYW5nZUVkaXRvclwiLCB7ZWRpdG9yOiB0aGlzfSk7XG5cbiAgICAgICAgaWYgKHNlc3Npb24gJiYgc2Vzc2lvbi5iZ1Rva2VuaXplcilcbiAgICAgICAgICAgIHNlc3Npb24uYmdUb2tlbml6ZXIuc2NoZWR1bGVTdGFydCgpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTZXNzaW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb247XG4gICAgfTtcbiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsLCBjdXJzb3JQb3MpIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmRvYy5zZXRWYWx1ZSh2YWwpO1xuXG4gICAgICAgIGlmICghY3Vyc29yUG9zKVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGwoKTtcbiAgICAgICAgZWxzZSBpZiAoY3Vyc29yUG9zID09IDEpXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlRmlsZUVuZCgpO1xuICAgICAgICBlbHNlIGlmIChjdXJzb3JQb3MgPT0gLTEpXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlRmlsZVN0YXJ0KCk7XG5cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRWYWx1ZSgpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uO1xuICAgIH07XG4gICAgdGhpcy5yZXNpemUgPSBmdW5jdGlvbihmb3JjZSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLm9uUmVzaXplKGZvcmNlKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0VGhlbWUgPSBmdW5jdGlvbih0aGVtZSwgY2IpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRUaGVtZSh0aGVtZSwgY2IpO1xuICAgIH07XG4gICAgdGhpcy5nZXRUaGVtZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRUaGVtZSgpO1xuICAgIH07XG4gICAgdGhpcy5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3R5bGUpO1xuICAgIH07XG4gICAgdGhpcy51bnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51bnNldFN0eWxlKHN0eWxlKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Rm9udFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcImZvbnRTaXplXCIpIHx8XG4gICAgICAgICAgIGRvbS5jb21wdXRlZFN0eWxlKHRoaXMuY29udGFpbmVyLCBcImZvbnRTaXplXCIpO1xuICAgIH07XG4gICAgdGhpcy5zZXRGb250U2l6ZSA9IGZ1bmN0aW9uKHNpemUpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJmb250U2l6ZVwiLCBzaXplKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kaGlnaGxpZ2h0QnJhY2tldHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kYnJhY2tldEhpZ2hsaWdodCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLnNlc3Npb24uJGJyYWNrZXRIaWdobGlnaHQpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRQZW5kaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB0aGlzLiRoaWdobGlnaHRQZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHNlbGYuJGhpZ2hsaWdodFBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBzZXNzaW9uID0gc2VsZi5zZXNzaW9uO1xuICAgICAgICAgICAgaWYgKCFzZXNzaW9uIHx8ICFzZXNzaW9uLmJnVG9rZW5pemVyKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgcG9zID0gc2Vzc2lvbi5maW5kTWF0Y2hpbmdCcmFja2V0KHNlbGYuZ2V0Q3Vyc29yUG9zaXRpb24oKSk7XG4gICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHBvcy5yb3csIHBvcy5jb2x1bW4sIHBvcy5yb3csIHBvcy5jb2x1bW4gKyAxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbi4kbW9kZS5nZXRNYXRjaGluZykge1xuICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uJG1vZGUuZ2V0TWF0Y2hpbmcoc2VsZi5zZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyYW5nZSlcbiAgICAgICAgICAgICAgICBzZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0ID0gc2Vzc2lvbi5hZGRNYXJrZXIocmFuZ2UsIFwiYWNlX2JyYWNrZXRcIiwgXCJ0ZXh0XCIpO1xuICAgICAgICB9LCA1MCk7XG4gICAgfTtcbiAgICB0aGlzLiRoaWdobGlnaHRUYWdzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRUYWdQZW5kaW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHRoaXMuJGhpZ2hsaWdodFRhZ1BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc2VsZi4kaGlnaGxpZ2h0VGFnUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgc2Vzc2lvbiA9IHNlbGYuc2Vzc2lvbjtcbiAgICAgICAgICAgIGlmICghc2Vzc2lvbiB8fCAhc2Vzc2lvbi5iZ1Rva2VuaXplcikgcmV0dXJuO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgcG9zID0gc2VsZi5nZXRDdXJzb3JQb3NpdGlvbigpO1xuICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2VsZi5zZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTtcbiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXRva2VuIHx8ICEvXFxiKD86dGFnLW9wZW58dGFnLW5hbWUpLy50ZXN0KHRva2VuLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVNYXJrZXIoc2Vzc2lvbi4kdGFnSGlnaGxpZ2h0KTtcbiAgICAgICAgICAgICAgICBzZXNzaW9uLiR0YWdIaWdobGlnaHQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUuaW5kZXhPZihcInRhZy1vcGVuXCIpICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpO1xuICAgICAgICAgICAgICAgIGlmICghdG9rZW4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRhZyA9IHRva2VuLnZhbHVlO1xuICAgICAgICAgICAgdmFyIGRlcHRoID0gMDtcbiAgICAgICAgICAgIHZhciBwcmV2VG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PSAnPCcpe1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldlRva2VuID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PT0gdGFnICYmIHRva2VuLnR5cGUuaW5kZXhPZigndGFnLW5hbWUnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICc8Jyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldlRva2VuLnZhbHVlID09PSAnPC8nKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKHRva2VuICYmIGRlcHRoID49IDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gcHJldlRva2VuO1xuICAgICAgICAgICAgICAgICAgICBwcmV2VG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PT0gdGFnICYmIHRva2VuLnR5cGUuaW5kZXhPZigndGFnLW5hbWUnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICc8Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJzwvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IHdoaWxlIChwcmV2VG9rZW4gJiYgZGVwdGggPD0gMCk7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlTWFya2VyKHNlc3Npb24uJHRhZ0hpZ2hsaWdodCk7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi4kdGFnSGlnaGxpZ2h0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTtcbiAgICAgICAgICAgIHZhciBjb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKTtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShyb3csIGNvbHVtbiwgcm93LCBjb2x1bW4rdG9rZW4udmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIHZhciBzYm0gPSBzZXNzaW9uLiRiYWNrTWFya2Vyc1tzZXNzaW9uLiR0YWdIaWdobGlnaHRdO1xuICAgICAgICAgICAgaWYgKHNlc3Npb24uJHRhZ0hpZ2hsaWdodCAmJiBzYm0gIT0gdW5kZWZpbmVkICYmIHJhbmdlLmNvbXBhcmVSYW5nZShzYm0ucmFuZ2UpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVNYXJrZXIoc2Vzc2lvbi4kdGFnSGlnaGxpZ2h0KTtcbiAgICAgICAgICAgICAgICBzZXNzaW9uLiR0YWdIaWdobGlnaHQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXNlc3Npb24uJHRhZ0hpZ2hsaWdodClcbiAgICAgICAgICAgICAgICBzZXNzaW9uLiR0YWdIaWdobGlnaHQgPSBzZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgXCJhY2VfYnJhY2tldFwiLCBcInRleHRcIik7XG4gICAgICAgIH0sIDUwKTtcbiAgICB9O1xuICAgIHRoaXMuZm9jdXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIF9zZWxmID0gdGhpcztcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIF9zZWxmLnRleHRJbnB1dC5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50ZXh0SW5wdXQuZm9jdXMoKTtcbiAgICB9O1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQoKTtcbiAgICB9O1xuICAgIHRoaXMuYmx1ciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRleHRJbnB1dC5ibHVyKCk7XG4gICAgfTtcbiAgICB0aGlzLm9uRm9jdXMgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICh0aGlzLiRpc0ZvY3VzZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuJGlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2hvd0N1cnNvcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnZpc3VhbGl6ZUZvY3VzKCk7XG4gICAgICAgIHRoaXMuX2VtaXQoXCJmb2N1c1wiLCBlKTtcbiAgICB9O1xuICAgIHRoaXMub25CbHVyID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoIXRoaXMuJGlzRm9jdXNlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy4kaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuaGlkZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnZpc3VhbGl6ZUJsdXIoKTtcbiAgICAgICAgdGhpcy5fZW1pdChcImJsdXJcIiwgZSk7XG4gICAgfTtcblxuICAgIHRoaXMuJGN1cnNvckNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH07XG4gICAgdGhpcy5vbkRvY3VtZW50Q2hhbmdlID0gZnVuY3Rpb24oZGVsdGEpIHtcbiAgICAgICAgdmFyIHdyYXAgPSB0aGlzLnNlc3Npb24uJHVzZVdyYXBNb2RlO1xuICAgICAgICB2YXIgbGFzdFJvdyA9IChkZWx0YS5zdGFydC5yb3cgPT0gZGVsdGEuZW5kLnJvdyA/IGRlbHRhLmVuZC5yb3cgOiBJbmZpbml0eSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlTGluZXMoZGVsdGEuc3RhcnQucm93LCBsYXN0Um93LCB3cmFwKTtcblxuICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VcIiwgZGVsdGEpO1xuICAgICAgICB0aGlzLiRjdXJzb3JDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSgpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uVG9rZW5pemVyVXBkYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgcm93cyA9IGUuZGF0YTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyhyb3dzLmZpcnN0LCByb3dzLmxhc3QpO1xuICAgIH07XG5cblxuICAgIHRoaXMub25TY3JvbGxUb3BDaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxUb1kodGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vblNjcm9sbExlZnRDaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxUb1godGhpcy5zZXNzaW9uLmdldFNjcm9sbExlZnQoKSk7XG4gICAgfTtcbiAgICB0aGlzLm9uQ3Vyc29yQ2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJGN1cnNvckNoYW5nZSgpO1xuXG4gICAgICAgIGlmICghdGhpcy4kYmxvY2tTY3JvbGxpbmcpIHtcbiAgICAgICAgICAgIGNvbmZpZy53YXJuKFwiQXV0b21hdGljYWxseSBzY3JvbGxpbmcgY3Vyc29yIGludG8gdmlldyBhZnRlciBzZWxlY3Rpb24gY2hhbmdlXCIsXG4gICAgICAgICAgICAgICAgXCJ0aGlzIHdpbGwgYmUgZGlzYWJsZWQgaW4gdGhlIG5leHQgdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIFwic2V0IGVkaXRvci4kYmxvY2tTY3JvbGxpbmcgPSBJbmZpbml0eSB0byBkaXNhYmxlIHRoaXMgbWVzc2FnZVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kaGlnaGxpZ2h0QnJhY2tldHMoKTtcbiAgICAgICAgdGhpcy4kaGlnaGxpZ2h0VGFncygpO1xuICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZVNlbGVjdGlvblwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuZ2V0U2Vzc2lvbigpO1xuXG4gICAgICAgIHZhciBoaWdobGlnaHQ7XG4gICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRBY3RpdmVMaW5lKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMuJHNlbGVjdGlvblN0eWxlICE9IFwibGluZVwiIHx8ICF0aGlzLnNlbGVjdGlvbi5pc011bHRpTGluZSgpKSlcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5yZW5kZXJlci4kbWF4TGluZXMgJiYgdGhpcy5zZXNzaW9uLmdldExlbmd0aCgpID09PSAxICYmICEodGhpcy5yZW5kZXJlci4kbWluTGluZXMgPiAxKSlcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZXNzaW9uLiRoaWdobGlnaHRMaW5lTWFya2VyICYmICFoaWdobGlnaHQpIHtcbiAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlTWFya2VyKHNlc3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIuaWQpO1xuICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlciA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoIXNlc3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIgJiYgaGlnaGxpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2UoaGlnaGxpZ2h0LnJvdywgaGlnaGxpZ2h0LmNvbHVtbiwgaGlnaGxpZ2h0LnJvdywgSW5maW5pdHkpO1xuICAgICAgICAgICAgcmFuZ2UuaWQgPSBzZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgXCJhY2VfYWN0aXZlLWxpbmVcIiwgXCJzY3JlZW5MaW5lXCIpO1xuICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlciA9IHJhbmdlO1xuICAgICAgICB9IGVsc2UgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlci5zdGFydC5yb3cgPSBoaWdobGlnaHQucm93O1xuICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlci5lbmQucm93ID0gaGlnaGxpZ2h0LnJvdztcbiAgICAgICAgICAgIHNlc3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIuc3RhcnQuY29sdW1uID0gaGlnaGxpZ2h0LmNvbHVtbjtcbiAgICAgICAgICAgIHNlc3Npb24uX3NpZ25hbChcImNoYW5nZUJhY2tNYXJrZXJcIik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG5cbiAgICAgICAgaWYgKHNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcikge1xuICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVNYXJrZXIoc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2VyKTtcbiAgICAgICAgfVxuICAgICAgICBzZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXIgPSBudWxsO1xuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuICAgICAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5nZXRTZWxlY3Rpb25TdHlsZSgpO1xuICAgICAgICAgICAgc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2VyID0gc2Vzc2lvbi5hZGRNYXJrZXIocmFuZ2UsIFwiYWNlX3NlbGVjdGlvblwiLCBzdHlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmUgPSB0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQgJiYgdGhpcy4kZ2V0U2VsZWN0aW9uSGlnaExpZ2h0UmVnZXhwKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5oaWdobGlnaHQocmUpO1xuXG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZVNlbGVjdGlvblwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kZ2V0U2VsZWN0aW9uSGlnaExpZ2h0UmVnZXhwID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuXG4gICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb24uaXNFbXB0eSgpIHx8IHNlbGVjdGlvbi5pc011bHRpTGluZSgpKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciBzdGFydE91dGVyID0gc2VsZWN0aW9uLnN0YXJ0LmNvbHVtbiAtIDE7XG4gICAgICAgIHZhciBlbmRPdXRlciA9IHNlbGVjdGlvbi5lbmQuY29sdW1uICsgMTtcbiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUoc2VsZWN0aW9uLnN0YXJ0LnJvdyk7XG4gICAgICAgIHZhciBsaW5lQ29scyA9IGxpbmUubGVuZ3RoO1xuICAgICAgICB2YXIgbmVlZGxlID0gbGluZS5zdWJzdHJpbmcoTWF0aC5tYXgoc3RhcnRPdXRlciwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihlbmRPdXRlciwgbGluZUNvbHMpKTtcbiAgICAgICAgaWYgKChzdGFydE91dGVyID49IDAgJiYgL15bXFx3XFxkXS8udGVzdChuZWVkbGUpKSB8fFxuICAgICAgICAgICAgKGVuZE91dGVyIDw9IGxpbmVDb2xzICYmIC9bXFx3XFxkXSQvLnRlc3QobmVlZGxlKSkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgbmVlZGxlID0gbGluZS5zdWJzdHJpbmcoc2VsZWN0aW9uLnN0YXJ0LmNvbHVtbiwgc2VsZWN0aW9uLmVuZC5jb2x1bW4pO1xuICAgICAgICBpZiAoIS9eW1xcd1xcZF0rJC8udGVzdChuZWVkbGUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciByZSA9IHRoaXMuJHNlYXJjaC4kYXNzZW1ibGVSZWdFeHAoe1xuICAgICAgICAgICAgd2hvbGVXb3JkOiB0cnVlLFxuICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG5lZWRsZTogbmVlZGxlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZTtcbiAgICB9O1xuXG5cbiAgICB0aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVGcm9udE1hcmtlcnMoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkNoYW5nZUJhY2tNYXJrZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpO1xuICAgIH07XG5cblxuICAgIHRoaXMub25DaGFuZ2VCcmVha3BvaW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQnJlYWtwb2ludHMoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkNoYW5nZUFubm90YXRpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBbm5vdGF0aW9ucyh0aGlzLnNlc3Npb24uZ2V0QW5ub3RhdGlvbnMoKSk7XG4gICAgfTtcblxuXG4gICAgdGhpcy5vbkNoYW5nZU1vZGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dCgpO1xuICAgICAgICB0aGlzLl9lbWl0KFwiY2hhbmdlTW9kZVwiLCBlKTtcbiAgICB9O1xuXG5cbiAgICB0aGlzLm9uQ2hhbmdlV3JhcExpbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlRnVsbCgpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uQ2hhbmdlV3JhcE1vZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5vblJlc2l6ZSh0cnVlKTtcbiAgICB9O1xuXG5cbiAgICB0aGlzLm9uQ2hhbmdlRm9sZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlRnVsbCgpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTZWxlY3RlZFRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Q29weVRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHRleHQgPSB0aGlzLmdldFNlbGVjdGVkVGV4dCgpO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJjb3B5XCIsIHRleHQpO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9O1xuICAgIHRoaXMub25Db3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuY29tbWFuZHMuZXhlYyhcImNvcHlcIiwgdGhpcyk7XG4gICAgfTtcbiAgICB0aGlzLm9uQ3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuY29tbWFuZHMuZXhlYyhcImN1dFwiLCB0aGlzKTtcbiAgICB9O1xuICAgIHRoaXMub25QYXN0ZSA9IGZ1bmN0aW9uKHRleHQsIGV2ZW50KSB7XG4gICAgICAgIHZhciBlID0ge3RleHQ6IHRleHQsIGV2ZW50OiBldmVudH07XG4gICAgICAgIHRoaXMuY29tbWFuZHMuZXhlYyhcInBhc3RlXCIsIHRoaXMsIGUpO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy4kaGFuZGxlUGFzdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZSA9PSBcInN0cmluZ1wiKSBcbiAgICAgICAgICAgIGUgPSB7dGV4dDogZX07XG4gICAgICAgIHRoaXMuX3NpZ25hbChcInBhc3RlXCIsIGUpO1xuICAgICAgICB2YXIgdGV4dCA9IGUudGV4dDtcbiAgICAgICAgaWYgKCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlIHx8IHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnQodGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pO1xuICAgICAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuc2VsZWN0aW9uLnJhbmdlTGlzdC5yYW5nZXM7XG4gICAgXG4gICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gcmFuZ2VzLmxlbmd0aCB8fCBsaW5lcy5sZW5ndGggPCAyIHx8ICFsaW5lc1sxXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21tYW5kcy5leGVjKFwiaW5zZXJ0c3RyaW5nXCIsIHRoaXMsIHRleHQpO1xuICAgIFxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHJhbmdlcy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKCFyYW5nZS5pc0VtcHR5KCkpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpO1xuICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnQocmFuZ2Uuc3RhcnQsIGxpbmVzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmV4ZWNDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCwgYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21tYW5kcy5leGVjKGNvbW1hbmQsIHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbih0ZXh0LCBwYXN0ZWQpIHtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgIHZhciBtb2RlID0gc2Vzc2lvbi5nZXRNb2RlKCk7XG4gICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZ2V0QmVoYXZpb3Vyc0VuYWJsZWQoKSAmJiAhcGFzdGVkKSB7XG4gICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gbW9kZS50cmFuc2Zvcm1BY3Rpb24oc2Vzc2lvbi5nZXRTdGF0ZShjdXJzb3Iucm93KSwgJ2luc2VydGlvbicsIHRoaXMsIHNlc3Npb24sIHRleHQpO1xuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0ICE9PSB0cmFuc2Zvcm0udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24ubWVyZ2VVbmRvRGVsdGFzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG1lcmdlTmV4dENvbW1hbmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGV4dCA9IHRyYW5zZm9ybS50ZXh0O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICh0ZXh0ID09IFwiXFx0XCIpXG4gICAgICAgICAgICB0ZXh0ID0gdGhpcy5zZXNzaW9uLmdldFRhYlN0cmluZygpO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICAgICAgY3Vyc29yID0gdGhpcy5zZXNzaW9uLnJlbW92ZShyYW5nZSk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5zZXNzaW9uLmdldE92ZXJ3cml0ZSgpICYmIHRleHQuaW5kZXhPZihcIlxcblwiKSA9PSAtMSkge1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlLmZyb21Qb2ludHMoY3Vyc29yLCBjdXJzb3IpO1xuICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiArPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHQgPT0gXCJcXG5cIiB8fCB0ZXh0ID09IFwiXFxyXFxuXCIpIHtcbiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpO1xuICAgICAgICAgICAgaWYgKGN1cnNvci5jb2x1bW4gPiBsaW5lLnNlYXJjaCgvXFxTfCQvKSkge1xuICAgICAgICAgICAgICAgIHZhciBkID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbikuc2VhcmNoKC9cXFN8JC8pO1xuICAgICAgICAgICAgICAgIHNlc3Npb24uZG9jLnJlbW92ZUluTGluZShjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuXG4gICAgICAgIHZhciBzdGFydCA9IGN1cnNvci5jb2x1bW47XG4gICAgICAgIHZhciBsaW5lU3RhdGUgPSBzZXNzaW9uLmdldFN0YXRlKGN1cnNvci5yb3cpO1xuICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShjdXJzb3Iucm93KTtcbiAgICAgICAgdmFyIHNob3VsZE91dGRlbnQgPSBtb2RlLmNoZWNrT3V0ZGVudChsaW5lU3RhdGUsIGxpbmUsIHRleHQpO1xuICAgICAgICB2YXIgZW5kID0gc2Vzc2lvbi5pbnNlcnQoY3Vyc29yLCB0ZXh0KTtcblxuICAgICAgICBpZiAodHJhbnNmb3JtICYmIHRyYW5zZm9ybS5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0uc2VsZWN0aW9uLmxlbmd0aCA9PSAyKSB7IC8vIFRyYW5zZm9ybSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBjb2x1bW5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgICAgICAgICAgICAgbmV3IFJhbmdlKGN1cnNvci5yb3csIHN0YXJ0ICsgdHJhbnNmb3JtLnNlbGVjdGlvblswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5yb3csIHN0YXJ0ICsgdHJhbnNmb3JtLnNlbGVjdGlvblsxXSkpO1xuICAgICAgICAgICAgfSBlbHNlIHsgLy8gVHJhbnNmb3JtIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHJvdy5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgICAgICAgICAgICAgbmV3IFJhbmdlKGN1cnNvci5yb3cgKyB0cmFuc2Zvcm0uc2VsZWN0aW9uWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNlbGVjdGlvblsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5yb3cgKyB0cmFuc2Zvcm0uc2VsZWN0aW9uWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNlbGVjdGlvblszXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlc3Npb24uZ2V0RG9jdW1lbnQoKS5pc05ld0xpbmUodGV4dCkpIHtcbiAgICAgICAgICAgIHZhciBsaW5lSW5kZW50ID0gbW9kZS5nZXROZXh0TGluZUluZGVudChsaW5lU3RhdGUsIGxpbmUuc2xpY2UoMCwgY3Vyc29yLmNvbHVtbiksIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICBzZXNzaW9uLmluc2VydCh7cm93OiBjdXJzb3Iucm93KzEsIGNvbHVtbjogMH0sIGxpbmVJbmRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRPdXRkZW50KVxuICAgICAgICAgICAgbW9kZS5hdXRvT3V0ZGVudChsaW5lU3RhdGUsIHNlc3Npb24sIGN1cnNvci5yb3cpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uVGV4dElucHV0ID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgICB0aGlzLmtleUJpbmRpbmcub25UZXh0SW5wdXQodGV4dCk7XG4gICAgfTtcblxuICAgIHRoaXMub25Db21tYW5kS2V5ID0gZnVuY3Rpb24oZSwgaGFzaElkLCBrZXlDb2RlKSB7XG4gICAgICAgIHRoaXMua2V5QmluZGluZy5vbkNvbW1hbmRLZXkoZSwgaGFzaElkLCBrZXlDb2RlKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0T3ZlcndyaXRlID0gZnVuY3Rpb24ob3ZlcndyaXRlKSB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRPdmVyd3JpdGUob3ZlcndyaXRlKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0T3ZlcndyaXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0T3ZlcndyaXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRvZ2dsZU92ZXJ3cml0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNlc3Npb24udG9nZ2xlT3ZlcndyaXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnNldFNjcm9sbFNwZWVkID0gZnVuY3Rpb24oc3BlZWQpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJzY3JvbGxTcGVlZFwiLCBzcGVlZCk7XG4gICAgfTtcbiAgICB0aGlzLmdldFNjcm9sbFNwZWVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcInNjcm9sbFNwZWVkXCIpO1xuICAgIH07XG4gICAgdGhpcy5zZXREcmFnRGVsYXkgPSBmdW5jdGlvbihkcmFnRGVsYXkpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJkcmFnRGVsYXlcIiwgZHJhZ0RlbGF5KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0RHJhZ0RlbGF5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcImRyYWdEZWxheVwiKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uU3R5bGUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJzZWxlY3Rpb25TdHlsZVwiLCB2YWwpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTZWxlY3Rpb25TdHlsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25TdHlsZVwiKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0SGlnaGxpZ2h0QWN0aXZlTGluZSA9IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkge1xuICAgICAgICB0aGlzLnNldE9wdGlvbihcImhpZ2hsaWdodEFjdGl2ZUxpbmVcIiwgc2hvdWxkSGlnaGxpZ2h0KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0SGlnaGxpZ2h0QWN0aXZlTGluZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJoaWdobGlnaHRBY3RpdmVMaW5lXCIpO1xuICAgIH07XG4gICAgdGhpcy5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwiaGlnaGxpZ2h0R3V0dGVyTGluZVwiLCBzaG91bGRIaWdobGlnaHQpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEhpZ2hsaWdodEd1dHRlckxpbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwiaGlnaGxpZ2h0R3V0dGVyTGluZVwiKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0SGlnaGxpZ2h0U2VsZWN0ZWRXb3JkID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwiaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkXCIsIHNob3VsZEhpZ2hsaWdodCk7XG4gICAgfTtcbiAgICB0aGlzLmdldEhpZ2hsaWdodFNlbGVjdGVkV29yZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkO1xuICAgIH07XG5cbiAgICB0aGlzLnNldEFuaW1hdGVkU2Nyb2xsID0gZnVuY3Rpb24oc2hvdWxkQW5pbWF0ZSl7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QW5pbWF0ZWRTY3JvbGwoc2hvdWxkQW5pbWF0ZSk7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0QW5pbWF0ZWRTY3JvbGwgPSBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRBbmltYXRlZFNjcm9sbCgpO1xuICAgIH07XG4gICAgdGhpcy5zZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9uKHNob3dJbnZpc2libGVzKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U2hvd0ludmlzaWJsZXMoc2hvd0ludmlzaWJsZXMpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRTaG93SW52aXNpYmxlcygpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldERpc3BsYXlJbmRlbnRHdWlkZXMgPSBmdW5jdGlvbihkaXNwbGF5KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RGlzcGxheUluZGVudEd1aWRlcyhkaXNwbGF5KTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldERpc3BsYXlJbmRlbnRHdWlkZXMoKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0U2hvd1ByaW50TWFyZ2luID0gZnVuY3Rpb24oc2hvd1ByaW50TWFyZ2luKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U2hvd1ByaW50TWFyZ2luKHNob3dQcmludE1hcmdpbik7XG4gICAgfTtcbiAgICB0aGlzLmdldFNob3dQcmludE1hcmdpbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRTaG93UHJpbnRNYXJnaW4oKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0UHJpbnRNYXJnaW5Db2x1bW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcmludE1hcmdpbkNvbHVtbihzaG93UHJpbnRNYXJnaW4pO1xuICAgIH07XG4gICAgdGhpcy5nZXRQcmludE1hcmdpbkNvbHVtbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRQcmludE1hcmdpbkNvbHVtbigpO1xuICAgIH07XG4gICAgdGhpcy5zZXRSZWFkT25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwicmVhZE9ubHlcIiwgcmVhZE9ubHkpO1xuICAgIH07XG4gICAgdGhpcy5nZXRSZWFkT25seSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJyZWFkT25seVwiKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0QmVoYXZpb3Vyc0VuYWJsZWQgPSBmdW5jdGlvbiAoZW5hYmxlZCkge1xuICAgICAgICB0aGlzLnNldE9wdGlvbihcImJlaGF2aW91cnNFbmFibGVkXCIsIGVuYWJsZWQpO1xuICAgIH07XG4gICAgdGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwiYmVoYXZpb3Vyc0VuYWJsZWRcIik7XG4gICAgfTtcbiAgICB0aGlzLnNldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uIChlbmFibGVkKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwid3JhcEJlaGF2aW91cnNFbmFibGVkXCIsIGVuYWJsZWQpO1xuICAgIH07XG4gICAgdGhpcy5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcIndyYXBCZWhhdmlvdXJzRW5hYmxlZFwiKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0U2hvd0ZvbGRXaWRnZXRzID0gZnVuY3Rpb24oc2hvdykge1xuICAgICAgICB0aGlzLnNldE9wdGlvbihcInNob3dGb2xkV2lkZ2V0c1wiLCBzaG93KTtcblxuICAgIH07XG4gICAgdGhpcy5nZXRTaG93Rm9sZFdpZGdldHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwic2hvd0ZvbGRXaWRnZXRzXCIpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldEZhZGVGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKGZhZGUpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJmYWRlRm9sZFdpZGdldHNcIiwgZmFkZSk7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0RmFkZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcImZhZGVGb2xkV2lkZ2V0c1wiKTtcbiAgICB9O1xuICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24oZGlyKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpe1xuICAgICAgICAgICAgaWYgKGRpciA9PSBcImxlZnRcIilcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RMZWZ0KCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0UmlnaHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0QmVoYXZpb3Vyc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSBzZXNzaW9uLmdldFN0YXRlKHJhbmdlLnN0YXJ0LnJvdyk7XG4gICAgICAgICAgICB2YXIgbmV3X3JhbmdlID0gc2Vzc2lvbi5nZXRNb2RlKCkudHJhbnNmb3JtQWN0aW9uKHN0YXRlLCAnZGVsZXRpb24nLCB0aGlzLCBzZXNzaW9uLCByYW5nZSk7XG5cbiAgICAgICAgICAgIGlmIChyYW5nZS5lbmQuY29sdW1uID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRleHQgPSBzZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRleHRbdGV4dC5sZW5ndGggLSAxXSA9PSBcIlxcblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJhbmdlLmVuZC5yb3cpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoL15cXHMrJC8udGVzdChsaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IGxpbmUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5ld19yYW5nZSlcbiAgICAgICAgICAgICAgICByYW5nZSA9IG5ld19yYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLnJlbW92ZVdvcmRSaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZFJpZ2h0KCk7XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLnJlbW92ZVdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkTGVmdCgpO1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH07XG4gICAgdGhpcy5yZW1vdmVUb0xpbmVTdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGluZVN0YXJ0KCk7XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLnJlbW92ZVRvTGluZUVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGluZUVuZCgpO1xuXG4gICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LmNvbHVtbiA9PSByYW5nZS5lbmQuY29sdW1uICYmIHJhbmdlLnN0YXJ0LnJvdyA9PSByYW5nZS5lbmQucm93KSB7XG4gICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gMDtcbiAgICAgICAgICAgIHJhbmdlLmVuZC5yb3crKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLnNwbGl0TGluZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpO1xuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5pbnNlcnQoXCJcXG5cIik7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oY3Vyc29yKTtcbiAgICB9O1xuICAgIHRoaXMudHJhbnNwb3NlTGV0dGVycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICAgICAgdmFyIGNvbHVtbiA9IGN1cnNvci5jb2x1bW47XG4gICAgICAgIGlmIChjb2x1bW4gPT09IDApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TGluZShjdXJzb3Iucm93KTtcbiAgICAgICAgdmFyIHN3YXAsIHJhbmdlO1xuICAgICAgICBpZiAoY29sdW1uIDwgbGluZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN3YXAgPSBsaW5lLmNoYXJBdChjb2x1bW4pICsgbGluZS5jaGFyQXQoY29sdW1uLTEpO1xuICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2UoY3Vyc29yLnJvdywgY29sdW1uLTEsIGN1cnNvci5yb3csIGNvbHVtbisxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN3YXAgPSBsaW5lLmNoYXJBdChjb2x1bW4tMSkgKyBsaW5lLmNoYXJBdChjb2x1bW4tMik7XG4gICAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZShjdXJzb3Iucm93LCBjb2x1bW4tMiwgY3Vyc29yLnJvdywgY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlc3Npb24ucmVwbGFjZShyYW5nZSwgc3dhcCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24ubW92ZVRvUG9zaXRpb24ocmFuZ2UuZW5kKTtcbiAgICB9O1xuICAgIHRoaXMudG9Mb3dlckNhc2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsUmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgdmFyIHRleHQgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlcGxhY2UocmFuZ2UsIHRleHQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKG9yaWdpbmFsUmFuZ2UpO1xuICAgIH07XG4gICAgdGhpcy50b1VwcGVyQ2FzZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgb3JpZ2luYWxSYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICB2YXIgdGV4dCA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVwbGFjZShyYW5nZSwgdGV4dC50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2Uob3JpZ2luYWxSYW5nZSk7XG4gICAgfTtcbiAgICB0aGlzLmluZGVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuXG4gICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPCByYW5nZS5lbmQucm93KSB7XG4gICAgICAgICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICAgICAgc2Vzc2lvbi5pbmRlbnRSb3dzKHJvd3MuZmlyc3QsIHJvd3MubGFzdCwgXCJcXHRcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAocmFuZ2Uuc3RhcnQuY29sdW1uIDwgcmFuZ2UuZW5kLmNvbHVtbikge1xuICAgICAgICAgICAgdmFyIHRleHQgPSBzZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICBpZiAoIS9eXFxzKyQvLnRlc3QodGV4dCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICAgICAgICAgIHNlc3Npb24uaW5kZW50Um93cyhyb3dzLmZpcnN0LCByb3dzLmxhc3QsIFwiXFx0XCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgIHZhciBzaXplID0gc2Vzc2lvbi5nZXRUYWJTaXplKCk7XG4gICAgICAgIHZhciBjb2x1bW4gPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Db2x1bW4ocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuXG4gICAgICAgIGlmICh0aGlzLnNlc3Npb24uZ2V0VXNlU29mdFRhYnMoKSkge1xuICAgICAgICAgICAgdmFyIGNvdW50ID0gKHNpemUgLSBjb2x1bW4gJSBzaXplKTtcbiAgICAgICAgICAgIHZhciBpbmRlbnRTdHJpbmcgPSBsYW5nLnN0cmluZ1JlcGVhdChcIiBcIiwgY291bnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNvdW50ID0gY29sdW1uICUgc2l6ZTtcbiAgICAgICAgICAgIHdoaWxlIChsaW5lW3JhbmdlLnN0YXJ0LmNvbHVtbiAtIDFdID09IFwiIFwiICYmIGNvdW50KSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uLS07XG4gICAgICAgICAgICAgICAgY291bnQtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgIGluZGVudFN0cmluZyA9IFwiXFx0XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0KGluZGVudFN0cmluZyk7XG4gICAgfTtcbiAgICB0aGlzLmJsb2NrSW5kZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByb3dzID0gdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5pbmRlbnRSb3dzKHJvd3MuZmlyc3QsIHJvd3MubGFzdCwgXCJcXHRcIik7XG4gICAgfTtcbiAgICB0aGlzLmJsb2NrT3V0ZGVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5zZXNzaW9uLmdldFNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLnNlc3Npb24ub3V0ZGVudFJvd3Moc2VsZWN0aW9uLmdldFJhbmdlKCkpO1xuICAgIH07XG4gICAgdGhpcy5zb3J0TGluZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG5cbiAgICAgICAgdmFyIGxpbmVzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSByb3dzLmZpcnN0OyBpIDw9IHJvd3MubGFzdDsgaSsrKVxuICAgICAgICAgICAgbGluZXMucHVzaChzZXNzaW9uLmdldExpbmUoaSkpO1xuXG4gICAgICAgIGxpbmVzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgaWYgKGEudG9Mb3dlckNhc2UoKSA8IGIudG9Mb3dlckNhc2UoKSkgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKGEudG9Mb3dlckNhc2UoKSA+IGIudG9Mb3dlckNhc2UoKSkgcmV0dXJuIDE7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGRlbGV0ZVJhbmdlID0gbmV3IFJhbmdlKDAsIDAsIDAsIDApO1xuICAgICAgICBmb3IgKHZhciBpID0gcm93cy5maXJzdDsgaSA8PSByb3dzLmxhc3Q7IGkrKykge1xuICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUoaSk7XG4gICAgICAgICAgICBkZWxldGVSYW5nZS5zdGFydC5yb3cgPSBpO1xuICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLnJvdyA9IGk7XG4gICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQuY29sdW1uID0gbGluZS5sZW5ndGg7XG4gICAgICAgICAgICBzZXNzaW9uLnJlcGxhY2UoZGVsZXRlUmFuZ2UsIGxpbmVzW2ktcm93cy5maXJzdF0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnNlc3Npb24uZ2V0U3RhdGUodGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpLnJvdyk7XG4gICAgICAgIHZhciByb3dzID0gdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5nZXRNb2RlKCkudG9nZ2xlQ29tbWVudExpbmVzKHN0YXRlLCB0aGlzLnNlc3Npb24sIHJvd3MuZmlyc3QsIHJvd3MubGFzdCk7XG4gICAgfTtcblxuICAgIHRoaXMudG9nZ2xlQmxvY2tDb21tZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7XG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc2Vzc2lvbi5nZXRTdGF0ZShjdXJzb3Iucm93KTtcbiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICB0aGlzLnNlc3Npb24uZ2V0TW9kZSgpLnRvZ2dsZUJsb2NrQ29tbWVudChzdGF0ZSwgdGhpcy5zZXNzaW9uLCByYW5nZSwgY3Vyc29yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0TnVtYmVyQXQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICB2YXIgX251bWJlclJ4ID0gL1tcXC1dP1swLTldKyg/OlxcLlswLTldKyk/L2c7XG4gICAgICAgIF9udW1iZXJSeC5sYXN0SW5kZXggPSAwO1xuXG4gICAgICAgIHZhciBzID0gdGhpcy5zZXNzaW9uLmdldExpbmUocm93KTtcbiAgICAgICAgd2hpbGUgKF9udW1iZXJSeC5sYXN0SW5kZXggPCBjb2x1bW4pIHtcbiAgICAgICAgICAgIHZhciBtID0gX251bWJlclJ4LmV4ZWMocyk7XG4gICAgICAgICAgICBpZihtLmluZGV4IDw9IGNvbHVtbiAmJiBtLmluZGV4K21bMF0ubGVuZ3RoID49IGNvbHVtbil7XG4gICAgICAgICAgICAgICAgdmFyIG51bWJlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1bMF0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBtLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IG0uaW5kZXgrbVswXS5sZW5ndGhcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICB0aGlzLm1vZGlmeU51bWJlciA9IGZ1bmN0aW9uKGFtb3VudCkge1xuICAgICAgICB2YXIgcm93ID0gdGhpcy5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCkucm93O1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCkuY29sdW1uO1xuICAgICAgICB2YXIgY2hhclJhbmdlID0gbmV3IFJhbmdlKHJvdywgY29sdW1uLTEsIHJvdywgY29sdW1uKTtcblxuICAgICAgICB2YXIgYyA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UoY2hhclJhbmdlKTtcbiAgICAgICAgaWYgKCFpc05hTihwYXJzZUZsb2F0KGMpKSAmJiBpc0Zpbml0ZShjKSkge1xuICAgICAgICAgICAgdmFyIG5yID0gdGhpcy5nZXROdW1iZXJBdChyb3csIGNvbHVtbik7XG4gICAgICAgICAgICBpZiAobnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgZnAgPSBuci52YWx1ZS5pbmRleE9mKFwiLlwiKSA+PSAwID8gbnIuc3RhcnQgKyBuci52YWx1ZS5pbmRleE9mKFwiLlwiKSArIDEgOiBuci5lbmQ7XG4gICAgICAgICAgICAgICAgdmFyIGRlY2ltYWxzID0gbnIuc3RhcnQgKyBuci52YWx1ZS5sZW5ndGggLSBmcDtcblxuICAgICAgICAgICAgICAgIHZhciB0ID0gcGFyc2VGbG9hdChuci52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdCAqPSBNYXRoLnBvdygxMCwgZGVjaW1hbHMpO1xuXG5cbiAgICAgICAgICAgICAgICBpZihmcCAhPT0gbnIuZW5kICYmIGNvbHVtbiA8IGZwKXtcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50ICo9IE1hdGgucG93KDEwLCBuci5lbmQgLSBjb2x1bW4gLSAxKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhbW91bnQgKj0gTWF0aC5wb3coMTAsIG5yLmVuZCAtIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdCArPSBhbW91bnQ7XG4gICAgICAgICAgICAgICAgdCAvPSBNYXRoLnBvdygxMCwgZGVjaW1hbHMpO1xuICAgICAgICAgICAgICAgIHZhciBubnIgPSB0LnRvRml4ZWQoZGVjaW1hbHMpO1xuICAgICAgICAgICAgICAgIHZhciByZXBsYWNlUmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBuci5zdGFydCwgcm93LCBuci5lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXBsYWNlKHJlcGxhY2VSYW5nZSwgbm5yKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIE1hdGgubWF4KG5yLnN0YXJ0ICsxLCBjb2x1bW4gKyBubnIubGVuZ3RoIC0gbnIudmFsdWUubGVuZ3RoKSk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5yZW1vdmVMaW5lcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRnVsbExpbmVzKHJvd3MuZmlyc3QsIHJvd3MubGFzdCk7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9O1xuXG4gICAgdGhpcy5kdXBsaWNhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHNlbCA9IHRoaXMuc2VsZWN0aW9uO1xuICAgICAgICB2YXIgZG9jID0gdGhpcy5zZXNzaW9uO1xuICAgICAgICB2YXIgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2UoKTtcbiAgICAgICAgdmFyIHJldmVyc2UgPSBzZWwuaXNCYWNrd2FyZHMoKTtcbiAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdmFyIHJvdyA9IHJhbmdlLnN0YXJ0LnJvdztcbiAgICAgICAgICAgIGRvYy5kdXBsaWNhdGVMaW5lcyhyb3csIHJvdyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcG9pbnQgPSByZXZlcnNlID8gcmFuZ2Uuc3RhcnQgOiByYW5nZS5lbmQ7XG4gICAgICAgICAgICB2YXIgZW5kUG9pbnQgPSBkb2MuaW5zZXJ0KHBvaW50LCBkb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKSwgZmFsc2UpO1xuICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSBwb2ludDtcbiAgICAgICAgICAgIHJhbmdlLmVuZCA9IGVuZFBvaW50O1xuXG4gICAgICAgICAgICBzZWwuc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UsIHJldmVyc2UpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm1vdmVMaW5lc0Rvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZUxpbmVzKDEsIGZhbHNlKTtcbiAgICB9O1xuICAgIHRoaXMubW92ZUxpbmVzVXAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZUxpbmVzKC0xLCBmYWxzZSk7XG4gICAgfTtcbiAgICB0aGlzLm1vdmVUZXh0ID0gZnVuY3Rpb24ocmFuZ2UsIHRvUG9zaXRpb24sIGNvcHkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5tb3ZlVGV4dChyYW5nZSwgdG9Qb3NpdGlvbiwgY29weSk7XG4gICAgfTtcbiAgICB0aGlzLmNvcHlMaW5lc1VwID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJG1vdmVMaW5lcygtMSwgdHJ1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmNvcHlMaW5lc0Rvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZUxpbmVzKDEsIHRydWUpO1xuICAgIH07XG4gICAgdGhpcy4kbW92ZUxpbmVzID0gZnVuY3Rpb24oZGlyLCBjb3B5KSB7XG4gICAgICAgIHZhciByb3dzLCBtb3ZlZDtcbiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xuICAgICAgICBpZiAoIXNlbGVjdGlvbi5pbk11bHRpU2VsZWN0TW9kZSB8fCB0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGUpIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlbGVjdGlvbi50b09yaWVudGVkUmFuZ2UoKTtcbiAgICAgICAgICAgIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MocmFuZ2UpO1xuICAgICAgICAgICAgbW92ZWQgPSB0aGlzLnNlc3Npb24uJG1vdmVMaW5lcyhyb3dzLmZpcnN0LCByb3dzLmxhc3QsIGNvcHkgPyAwIDogZGlyKTtcbiAgICAgICAgICAgIGlmIChjb3B5ICYmIGRpciA9PSAtMSkgbW92ZWQgPSAwO1xuICAgICAgICAgICAgcmFuZ2UubW92ZUJ5KG1vdmVkLCAwKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2VzID0gc2VsZWN0aW9uLnJhbmdlTGlzdC5yYW5nZXM7XG4gICAgICAgICAgICBzZWxlY3Rpb24ucmFuZ2VMaXN0LmRldGFjaCh0aGlzLnNlc3Npb24pO1xuICAgICAgICAgICAgdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGRpZmYgPSAwO1xuICAgICAgICAgICAgdmFyIHRvdGFsRGlmZiA9IDA7XG4gICAgICAgICAgICB2YXIgbCA9IHJhbmdlcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciByYW5nZUluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICByYW5nZXNbaV0ubW92ZUJ5KGRpZmYsIDApO1xuICAgICAgICAgICAgICAgIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MocmFuZ2VzW2ldKTtcbiAgICAgICAgICAgICAgICB2YXIgZmlyc3QgPSByb3dzLmZpcnN0O1xuICAgICAgICAgICAgICAgIHZhciBsYXN0ID0gcm93cy5sYXN0O1xuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b3RhbERpZmYpIHJhbmdlc1tpXS5tb3ZlQnkodG90YWxEaWZmLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN1YlJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MocmFuZ2VzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvcHkgJiYgc3ViUm93cy5maXJzdCAhPSBsYXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFjb3B5ICYmIHN1YlJvd3MuZmlyc3QgPiBsYXN0ICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBsYXN0ID0gc3ViUm93cy5sYXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMuc2Vzc2lvbi4kbW92ZUxpbmVzKGZpcnN0LCBsYXN0LCBjb3B5ID8gMCA6IGRpcik7XG4gICAgICAgICAgICAgICAgaWYgKGNvcHkgJiYgZGlyID09IC0xKSByYW5nZUluZGV4ID0gaSArIDE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHJhbmdlSW5kZXggPD0gaSkge1xuICAgICAgICAgICAgICAgICAgICByYW5nZXNbcmFuZ2VJbmRleF0ubW92ZUJ5KGRpZmYsIDApO1xuICAgICAgICAgICAgICAgICAgICByYW5nZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghY29weSkgZGlmZiA9IDA7XG4gICAgICAgICAgICAgICAgdG90YWxEaWZmICs9IGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHNlbGVjdGlvbi5mcm9tT3JpZW50ZWRSYW5nZShzZWxlY3Rpb24ucmFuZ2VzWzBdKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yYW5nZUxpc3QuYXR0YWNoKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgICAgICB0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzID0gZnVuY3Rpb24ocmFuZ2UpIHtcbiAgICAgICAgcmFuZ2UgPSAocmFuZ2UgfHwgdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKS5jb2xsYXBzZVJvd3MoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmlyc3Q6IHRoaXMuc2Vzc2lvbi5nZXRSb3dGb2xkU3RhcnQocmFuZ2Uuc3RhcnQucm93KSxcbiAgICAgICAgICAgIGxhc3Q6IHRoaXMuc2Vzc2lvbi5nZXRSb3dGb2xkRW5kKHJhbmdlLmVuZC5yb3cpXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHRoaXMub25Db21wb3NpdGlvblN0YXJ0ID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNob3dDb21wb3NpdGlvbih0aGlzLmdldEN1cnNvclBvc2l0aW9uKCkpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uQ29tcG9zaXRpb25VcGRhdGUgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0Q29tcG9zaXRpb25UZXh0KHRleHQpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uQ29tcG9zaXRpb25FbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5oaWRlQ29tcG9zaXRpb24oKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldEZpcnN0VmlzaWJsZVJvdygpO1xuICAgIH07XG4gICAgdGhpcy5nZXRMYXN0VmlzaWJsZVJvdyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRMYXN0VmlzaWJsZVJvdygpO1xuICAgIH07XG4gICAgdGhpcy5pc1Jvd1Zpc2libGUgPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgcmV0dXJuIChyb3cgPj0gdGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSAmJiByb3cgPD0gdGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpKTtcbiAgICB9O1xuICAgIHRoaXMuaXNSb3dGdWxseVZpc2libGUgPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgcmV0dXJuIChyb3cgPj0gdGhpcy5yZW5kZXJlci5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpICYmIHJvdyA8PSB0aGlzLnJlbmRlcmVyLmdldExhc3RGdWxseVZpc2libGVSb3coKSk7XG4gICAgfTtcbiAgICB0aGlzLiRnZXRWaXNpYmxlUm93Q291bnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0U2Nyb2xsQm90dG9tUm93KCkgLSB0aGlzLnJlbmRlcmVyLmdldFNjcm9sbFRvcFJvdygpICsgMTtcbiAgICB9O1xuXG4gICAgdGhpcy4kbW92ZUJ5UGFnZSA9IGZ1bmN0aW9uKGRpciwgc2VsZWN0KSB7XG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgICAgIHZhciBjb25maWcgPSB0aGlzLnJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICB2YXIgcm93cyA9IGRpciAqIE1hdGguZmxvb3IoY29uZmlnLmhlaWdodCAvIGNvbmZpZy5saW5lSGVpZ2h0KTtcblxuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZysrO1xuICAgICAgICBpZiAoc2VsZWN0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KHJvd3MsIDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckJ5KHJvd3MsIDApO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZy0tO1xuXG4gICAgICAgIHZhciBzY3JvbGxUb3AgPSByZW5kZXJlci5zY3JvbGxUb3A7XG5cbiAgICAgICAgcmVuZGVyZXIuc2Nyb2xsQnkoMCwgcm93cyAqIGNvbmZpZy5saW5lSGVpZ2h0KTtcbiAgICAgICAgaWYgKHNlbGVjdCAhPSBudWxsKVxuICAgICAgICAgICAgcmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgMC41KTtcblxuICAgICAgICByZW5kZXJlci5hbmltYXRlU2Nyb2xsaW5nKHNjcm9sbFRvcCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFBhZ2VEb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJG1vdmVCeVBhZ2UoMSwgdHJ1ZSk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFBhZ2VVcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtb3ZlQnlQYWdlKC0xLCB0cnVlKTtcbiAgICB9O1xuICAgIHRoaXMuZ290b1BhZ2VEb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgxLCBmYWxzZSk7XG4gICAgfTtcbiAgICB0aGlzLmdvdG9QYWdlVXAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgtMSwgZmFsc2UpO1xuICAgIH07XG4gICAgdGhpcy5zY3JvbGxQYWdlRG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtb3ZlQnlQYWdlKDEpO1xuICAgIH07XG4gICAgdGhpcy5zY3JvbGxQYWdlVXAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgtMSk7XG4gICAgfTtcbiAgICB0aGlzLnNjcm9sbFRvUm93ID0gZnVuY3Rpb24ocm93KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsVG9Sb3cocm93KTtcbiAgICB9O1xuICAgIHRoaXMuc2Nyb2xsVG9MaW5lID0gZnVuY3Rpb24obGluZSwgY2VudGVyLCBhbmltYXRlLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvTGluZShsaW5lLCBjZW50ZXIsIGFuaW1hdGUsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIHRoaXMuY2VudGVyU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgdmFyIHBvcyA9IHtcbiAgICAgICAgICAgIHJvdzogTWF0aC5mbG9vcihyYW5nZS5zdGFydC5yb3cgKyAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdykgLyAyKSxcbiAgICAgICAgICAgIGNvbHVtbjogTWF0aC5mbG9vcihyYW5nZS5zdGFydC5jb2x1bW4gKyAocmFuZ2UuZW5kLmNvbHVtbiAtIHJhbmdlLnN0YXJ0LmNvbHVtbikgLyAyKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFsaWduQ3Vyc29yKHBvcywgMC41KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpO1xuICAgIH07XG4gICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvblNjcmVlbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLmdldEN1cnNvclBvc2l0aW9uKCkpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0QWxsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdEFsbCgpO1xuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyAtPSAxO1xuICAgIH07XG4gICAgdGhpcy5jbGVhclNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yVG8gPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4pO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihwb3MpO1xuICAgIH07XG4gICAgdGhpcy5qdW1wVG9NYXRjaGluZyA9IGZ1bmN0aW9uKHNlbGVjdCwgZXhwYW5kKSB7XG4gICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHRoaXMuc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7XG4gICAgICAgIHZhciBwcmV2VG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgdmFyIHRva2VuID0gcHJldlRva2VuIHx8IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7XG5cbiAgICAgICAgaWYgKCF0b2tlbikgcmV0dXJuO1xuICAgICAgICB2YXIgbWF0Y2hUeXBlO1xuICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGRlcHRoID0ge307XG4gICAgICAgIHZhciBpID0gY3Vyc29yLmNvbHVtbiAtIHRva2VuLnN0YXJ0O1xuICAgICAgICB2YXIgYnJhY2tldFR5cGU7XG4gICAgICAgIHZhciBicmFja2V0cyA9IHtcbiAgICAgICAgICAgIFwiKVwiOiBcIihcIixcbiAgICAgICAgICAgIFwiKFwiOiBcIihcIixcbiAgICAgICAgICAgIFwiXVwiOiBcIltcIixcbiAgICAgICAgICAgIFwiW1wiOiBcIltcIixcbiAgICAgICAgICAgIFwie1wiOiBcIntcIixcbiAgICAgICAgICAgIFwifVwiOiBcIntcIlxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlLm1hdGNoKC9be30oKVxcW1xcXV0vZykpIHtcbiAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IHRva2VuLnZhbHVlLmxlbmd0aCAmJiAhZm91bmQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJyYWNrZXRzW3Rva2VuLnZhbHVlW2ldXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmFja2V0VHlwZSA9IGJyYWNrZXRzW3Rva2VuLnZhbHVlW2ldXSArICcuJyArIHRva2VuLnR5cGUucmVwbGFjZShcInJwYXJlblwiLCBcImxwYXJlblwiKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oZGVwdGhbYnJhY2tldFR5cGVdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhbYnJhY2tldFR5cGVdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodG9rZW4udmFsdWVbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnWyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd7JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFticmFja2V0VHlwZV0rKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnXSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd9JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFticmFja2V0VHlwZV0tLTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aFticmFja2V0VHlwZV0gPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoVHlwZSA9ICdicmFja2V0JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCd0YWctbmFtZScpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihkZXB0aFt0b2tlbi52YWx1ZV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlcHRoW3Rva2VuLnZhbHVlXSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICc8Jykge1xuICAgICAgICAgICAgICAgICAgICBkZXB0aFt0b2tlbi52YWx1ZV0rKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocHJldlRva2VuLnZhbHVlID09PSAnPC8nKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlcHRoW3Rva2VuLnZhbHVlXS0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAoZGVwdGhbdG9rZW4udmFsdWVdID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaFR5cGUgPSAndGFnJztcbiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgIHByZXZUb2tlbiA9IHRva2VuO1xuICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAodG9rZW4gJiYgIWZvdW5kKTtcbiAgICAgICAgaWYgKCFtYXRjaFR5cGUpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdmFyIHJhbmdlLCBwb3M7XG4gICAgICAgIGlmIChtYXRjaFR5cGUgPT09ICdicmFja2V0Jykge1xuICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0QnJhY2tldFJhbmdlKGN1cnNvcik7XG4gICAgICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpLFxuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIGkgLSAxLFxuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSxcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyBpIC0gMVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcG9zID0gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgICAgICAgICAgaWYgKGV4cGFuZCB8fCBwb3Mucm93ID09PSBjdXJzb3Iucm93ICYmIE1hdGguYWJzKHBvcy5jb2x1bW4gLSBjdXJzb3IuY29sdW1uKSA8IDIpXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5zZXNzaW9uLmdldEJyYWNrZXRSYW5nZShwb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoVHlwZSA9PT0gJ3RhZycpIHtcbiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoJ3RhZy1uYW1lJykgIT09IC0xKSBcbiAgICAgICAgICAgICAgICB2YXIgdGFnID0gdG9rZW4udmFsdWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZShcbiAgICAgICAgICAgICAgICBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSxcbiAgICAgICAgICAgICAgICBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSAtIDIsXG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCksXG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgLSAyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHJhbmdlLmNvbXBhcmUoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbikgPT09IDApIHtcbiAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBwcmV2VG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHByZXZUb2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZUb2tlbi50eXBlLmluZGV4T2YoJ3RhZy1jbG9zZScpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLnNldEVuZChpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSwgaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSB0YWcgJiYgdG9rZW4udHlwZS5pbmRleE9mKCd0YWctbmFtZScpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICc8Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFt0YWddKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJzwvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFt0YWddLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aFt0YWddID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IHdoaWxlIChwcmV2VG9rZW4gJiYgIWZvdW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoJ3RhZy1uYW1lJykpIHtcbiAgICAgICAgICAgICAgICBwb3MgPSByYW5nZS5zdGFydDtcbiAgICAgICAgICAgICAgICBpZiAocG9zLnJvdyA9PSBjdXJzb3Iucm93ICYmIE1hdGguYWJzKHBvcy5jb2x1bW4gLSBjdXJzb3IuY29sdW1uKSA8IDIpXG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IHJhbmdlLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHBvcyA9IHJhbmdlICYmIHJhbmdlLmN1cnNvciB8fCBwb3M7XG4gICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UgJiYgZXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlICYmIHJhbmdlLmlzRXF1YWwodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0VG8ocG9zLnJvdywgcG9zLmNvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlVG8ocG9zLnJvdywgcG9zLmNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ290b0xpbmUgPSBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW4sIGFuaW1hdGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnVuZm9sZCh7cm93OiBsaW5lTnVtYmVyIC0gMSwgY29sdW1uOiBjb2x1bW4gfHwgMH0pO1xuXG4gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7XG4gICAgICAgIHRoaXMuZXhpdE11bHRpU2VsZWN0TW9kZSAmJiB0aGlzLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8obGluZU51bWJlciAtIDEsIGNvbHVtbiB8fCAwKTtcbiAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0gMTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNSb3dGdWxseVZpc2libGUobGluZU51bWJlciAtIDEpKVxuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0xpbmUobGluZU51bWJlciAtIDEsIHRydWUsIGFuaW1hdGUpO1xuICAgIH07XG4gICAgdGhpcy5uYXZpZ2F0ZVRvID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZVRvKHJvdywgY29sdW1uKTtcbiAgICB9O1xuICAgIHRoaXMubmF2aWdhdGVVcCA9IGZ1bmN0aW9uKHRpbWVzKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc011bHRpTGluZSgpICYmICF0aGlzLnNlbGVjdGlvbi5pc0JhY2t3YXJkcygpKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLnNlbGVjdGlvbi5hbmNob3IuZ2V0UG9zaXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHNlbGVjdGlvblN0YXJ0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yQnkoLXRpbWVzIHx8IC0xLCAwKTtcbiAgICB9O1xuICAgIHRoaXMubmF2aWdhdGVEb3duID0gZnVuY3Rpb24odGltZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzTXVsdGlMaW5lKCkgJiYgdGhpcy5zZWxlY3Rpb24uaXNCYWNrd2FyZHMoKSkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IHRoaXMuc2VsZWN0aW9uLmFuY2hvci5nZXRQb3NpdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oc2VsZWN0aW9uRW5kKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yQnkodGltZXMgfHwgMSwgMCk7XG4gICAgfTtcbiAgICB0aGlzLm5hdmlnYXRlTGVmdCA9IGZ1bmN0aW9uKHRpbWVzKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHNlbGVjdGlvblN0YXJ0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRpbWVzID0gdGltZXMgfHwgMTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcy0tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckxlZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLm5hdmlnYXRlUmlnaHQgPSBmdW5jdGlvbih0aW1lcykge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKS5lbmQ7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHNlbGVjdGlvbkVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aW1lcyA9IHRpbWVzIHx8IDE7XG4gICAgICAgICAgICB3aGlsZSAodGltZXMtLSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JSaWdodCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9O1xuICAgIHRoaXMubmF2aWdhdGVMaW5lU3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckxpbmVTdGFydCgpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLm5hdmlnYXRlTGluZUVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yTGluZUVuZCgpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLm5hdmlnYXRlRmlsZUVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yRmlsZUVuZCgpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLm5hdmlnYXRlRmlsZVN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JGaWxlU3RhcnQoKTtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH07XG4gICAgdGhpcy5uYXZpZ2F0ZVdvcmRSaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yV29yZFJpZ2h0KCk7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9O1xuICAgIHRoaXMubmF2aWdhdGVXb3JkTGVmdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yV29yZExlZnQoKTtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH07XG4gICAgdGhpcy5yZXBsYWNlID0gZnVuY3Rpb24ocmVwbGFjZW1lbnQsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMpXG4gICAgICAgICAgICB0aGlzLiRzZWFyY2guc2V0KG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciByYW5nZSA9IHRoaXMuJHNlYXJjaC5maW5kKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIHZhciByZXBsYWNlZCA9IDA7XG4gICAgICAgIGlmICghcmFuZ2UpXG4gICAgICAgICAgICByZXR1cm4gcmVwbGFjZWQ7XG5cbiAgICAgICAgaWYgKHRoaXMuJHRyeVJlcGxhY2UocmFuZ2UsIHJlcGxhY2VtZW50KSkge1xuICAgICAgICAgICAgcmVwbGFjZWQgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyYW5nZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldyhyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXBsYWNlZDtcbiAgICB9O1xuICAgIHRoaXMucmVwbGFjZUFsbCA9IGZ1bmN0aW9uKHJlcGxhY2VtZW50LCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLiRzZWFyY2guc2V0KG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuJHNlYXJjaC5maW5kQWxsKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIHZhciByZXBsYWNlZCA9IDA7XG4gICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiByZXBsYWNlZDtcblxuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyArPSAxO1xuXG4gICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVUbygwLCAwKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICBpZih0aGlzLiR0cnlSZXBsYWNlKHJhbmdlc1tpXSwgcmVwbGFjZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmVwbGFjZWQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nIC09IDE7XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VkO1xuICAgIH07XG5cbiAgICB0aGlzLiR0cnlSZXBsYWNlID0gZnVuY3Rpb24ocmFuZ2UsIHJlcGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBpbnB1dCA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpO1xuICAgICAgICByZXBsYWNlbWVudCA9IHRoaXMuJHNlYXJjaC5yZXBsYWNlKGlucHV0LCByZXBsYWNlbWVudCk7XG4gICAgICAgIGlmIChyZXBsYWNlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmFuZ2UuZW5kID0gdGhpcy5zZXNzaW9uLnJlcGxhY2UocmFuZ2UsIHJlcGxhY2VtZW50KTtcbiAgICAgICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdldExhc3RTZWFyY2hPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzZWFyY2guZ2V0T3B0aW9ucygpO1xuICAgIH07XG4gICAgdGhpcy5maW5kID0gZnVuY3Rpb24obmVlZGxlLCBvcHRpb25zLCBhbmltYXRlKSB7XG4gICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcblxuICAgICAgICBpZiAodHlwZW9mIG5lZWRsZSA9PSBcInN0cmluZ1wiIHx8IG5lZWRsZSBpbnN0YW5jZW9mIFJlZ0V4cClcbiAgICAgICAgICAgIG9wdGlvbnMubmVlZGxlID0gbmVlZGxlO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbmVlZGxlID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICBvb3AubWl4aW4ob3B0aW9ucywgbmVlZGxlKTtcblxuICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuICAgICAgICBpZiAob3B0aW9ucy5uZWVkbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgbmVlZGxlID0gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSlcbiAgICAgICAgICAgICAgICB8fCB0aGlzLiRzZWFyY2guJG9wdGlvbnMubmVlZGxlO1xuICAgICAgICAgICAgaWYgKCFuZWVkbGUpIHtcbiAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgICAgIG5lZWRsZSA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4kc2VhcmNoLnNldCh7bmVlZGxlOiBuZWVkbGV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJHNlYXJjaC5zZXQob3B0aW9ucyk7XG4gICAgICAgIGlmICghb3B0aW9ucy5zdGFydClcbiAgICAgICAgICAgIHRoaXMuJHNlYXJjaC5zZXQoe3N0YXJ0OiByYW5nZX0pO1xuXG4gICAgICAgIHZhciBuZXdSYW5nZSA9IHRoaXMuJHNlYXJjaC5maW5kKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIGlmIChvcHRpb25zLnByZXZlbnRTY3JvbGwpXG4gICAgICAgICAgICByZXR1cm4gbmV3UmFuZ2U7XG4gICAgICAgIGlmIChuZXdSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5yZXZlYWxSYW5nZShuZXdSYW5nZSwgYW5pbWF0ZSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3UmFuZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuYmFja3dhcmRzKVxuICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSByYW5nZS5lbmQ7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJhbmdlLmVuZCA9IHJhbmdlLnN0YXJ0O1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRSYW5nZShyYW5nZSk7XG4gICAgfTtcbiAgICB0aGlzLmZpbmROZXh0ID0gZnVuY3Rpb24ob3B0aW9ucywgYW5pbWF0ZSkge1xuICAgICAgICB0aGlzLmZpbmQoe3NraXBDdXJyZW50OiB0cnVlLCBiYWNrd2FyZHM6IGZhbHNlfSwgb3B0aW9ucywgYW5pbWF0ZSk7XG4gICAgfTtcbiAgICB0aGlzLmZpbmRQcmV2aW91cyA9IGZ1bmN0aW9uKG9wdGlvbnMsIGFuaW1hdGUpIHtcbiAgICAgICAgdGhpcy5maW5kKG9wdGlvbnMsIHtza2lwQ3VycmVudDogdHJ1ZSwgYmFja3dhcmRzOiB0cnVlfSwgYW5pbWF0ZSk7XG4gICAgfTtcblxuICAgIHRoaXMucmV2ZWFsUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSwgYW5pbWF0ZSkge1xuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyArPSAxO1xuICAgICAgICB0aGlzLnNlc3Npb24udW5mb2xkKHJhbmdlKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UpO1xuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyAtPSAxO1xuXG4gICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvcDtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldyhyYW5nZS5zdGFydCwgcmFuZ2UuZW5kLCAwLjUpO1xuICAgICAgICBpZiAoYW5pbWF0ZSAhPT0gZmFsc2UpXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFuaW1hdGVTY3JvbGxpbmcoc2Nyb2xsVG9wKTtcbiAgICB9O1xuICAgIHRoaXMudW5kbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZysrO1xuICAgICAgICB0aGlzLnNlc3Npb24uZ2V0VW5kb01hbmFnZXIoKS51bmRvKCk7XG4gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nLS07XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgMC41KTtcbiAgICB9O1xuICAgIHRoaXMucmVkbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZysrO1xuICAgICAgICB0aGlzLnNlc3Npb24uZ2V0VW5kb01hbmFnZXIoKS5yZWRvKCk7XG4gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nLS07XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgMC41KTtcbiAgICB9O1xuICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fc2lnbmFsKFwiZGVzdHJveVwiLCB0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zZXRBdXRvU2Nyb2xsRWRpdG9ySW50b1ZpZXcgPSBmdW5jdGlvbihlbmFibGUpIHtcbiAgICAgICAgaWYgKCFlbmFibGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciByZWN0O1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBzaG91bGRTY3JvbGwgPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLiRzY3JvbGxBbmNob3IpXG4gICAgICAgICAgICB0aGlzLiRzY3JvbGxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB2YXIgc2Nyb2xsQW5jaG9yID0gdGhpcy4kc2Nyb2xsQW5jaG9yO1xuICAgICAgICBzY3JvbGxBbmNob3Iuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGVcIjtcbiAgICAgICAgdGhpcy5jb250YWluZXIuaW5zZXJ0QmVmb3JlKHNjcm9sbEFuY2hvciwgdGhpcy5jb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgICAgIHZhciBvbkNoYW5nZVNlbGVjdGlvbiA9IHRoaXMub24oXCJjaGFuZ2VTZWxlY3Rpb25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBzaG91bGRTY3JvbGwgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIG9uQmVmb3JlUmVuZGVyID0gdGhpcy5yZW5kZXJlci5vbihcImJlZm9yZVJlbmRlclwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChzaG91bGRTY3JvbGwpXG4gICAgICAgICAgICAgICAgcmVjdCA9IHNlbGYucmVuZGVyZXIuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIG9uQWZ0ZXJSZW5kZXIgPSB0aGlzLnJlbmRlcmVyLm9uKFwiYWZ0ZXJSZW5kZXJcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsICYmIHJlY3QgJiYgKHNlbGYuaXNGb2N1c2VkKClcbiAgICAgICAgICAgICAgICB8fCBzZWxmLnNlYXJjaEJveCAmJiBzZWxmLnNlYXJjaEJveC5pc0ZvY3VzZWQoKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciByZW5kZXJlciA9IHNlbGYucmVuZGVyZXI7XG4gICAgICAgICAgICAgICAgdmFyIHBvcyA9IHJlbmRlcmVyLiRjdXJzb3JMYXllci4kcGl4ZWxQb3M7XG4gICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICAgICAgICAgIHZhciB0b3AgPSBwb3MudG9wIC0gY29uZmlnLm9mZnNldDtcbiAgICAgICAgICAgICAgICBpZiAocG9zLnRvcCA+PSAwICYmIHRvcCArIHJlY3QudG9wIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRTY3JvbGwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zLnRvcCA8IGNvbmZpZy5oZWlnaHQgJiZcbiAgICAgICAgICAgICAgICAgICAgcG9zLnRvcCArIHJlY3QudG9wICsgY29uZmlnLmxpbmVIZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2Nyb2xsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2Nyb2xsID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFNjcm9sbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbEFuY2hvci5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbEFuY2hvci5zdHlsZS5sZWZ0ID0gcG9zLmxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbEFuY2hvci5zdHlsZS5oZWlnaHQgPSBjb25maWcubGluZUhlaWdodCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsQW5jaG9yLnNjcm9sbEludG9WaWV3KHNob3VsZFNjcm9sbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNob3VsZFNjcm9sbCA9IHJlY3QgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXRBdXRvU2Nyb2xsRWRpdG9ySW50b1ZpZXcgPSBmdW5jdGlvbihlbmFibGUpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2V0QXV0b1Njcm9sbEVkaXRvckludG9WaWV3O1xuICAgICAgICAgICAgdGhpcy5vZmYoXCJjaGFuZ2VTZWxlY3Rpb25cIiwgb25DaGFuZ2VTZWxlY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5vZmYoXCJhZnRlclJlbmRlclwiLCBvbkFmdGVyUmVuZGVyKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIub2ZmKFwiYmVmb3JlUmVuZGVyXCIsIG9uQmVmb3JlUmVuZGVyKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB0aGlzLiRyZXNldEN1cnNvclN0eWxlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzdHlsZSA9IHRoaXMuJGN1cnNvclN0eWxlIHx8IFwiYWNlXCI7XG4gICAgICAgIHZhciBjdXJzb3JMYXllciA9IHRoaXMucmVuZGVyZXIuJGN1cnNvckxheWVyO1xuICAgICAgICBpZiAoIWN1cnNvckxheWVyKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjdXJzb3JMYXllci5zZXRTbW9vdGhCbGlua2luZygvc21vb3RoLy50ZXN0KHN0eWxlKSk7XG4gICAgICAgIGN1cnNvckxheWVyLmlzQmxpbmtpbmcgPSAhdGhpcy4kcmVhZE9ubHkgJiYgc3R5bGUgIT0gXCJ3aWRlXCI7XG4gICAgICAgIGRvbS5zZXRDc3NDbGFzcyhjdXJzb3JMYXllci5lbGVtZW50LCBcImFjZV9zbGltLWN1cnNvcnNcIiwgL3NsaW0vLnRlc3Qoc3R5bGUpKTtcbiAgICB9O1xuXG59KS5jYWxsKEVkaXRvci5wcm90b3R5cGUpO1xuXG5cblxuY29uZmlnLmRlZmluZU9wdGlvbnMoRWRpdG9yLnByb3RvdHlwZSwgXCJlZGl0b3JcIiwge1xuICAgIHNlbGVjdGlvblN0eWxlOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oc3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZVNlbGVjdGlvblN0eWxlXCIsIHtkYXRhOiBzdHlsZX0pO1xuICAgICAgICB9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IFwibGluZVwiXG4gICAgfSxcbiAgICBoaWdobGlnaHRBY3RpdmVMaW5lOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oKSB7dGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSgpO30sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogdHJ1ZVxuICAgIH0sXG4gICAgaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7dGhpcy4kb25TZWxlY3Rpb25DaGFuZ2UoKTt9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IHRydWVcbiAgICB9LFxuICAgIHJlYWRPbmx5OiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24ocmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuJHJlc2V0Q3Vyc29yU3R5bGUoKTsgXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogZmFsc2VcbiAgICB9LFxuICAgIGN1cnNvclN0eWxlOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7IHRoaXMuJHJlc2V0Q3Vyc29yU3R5bGUoKTsgfSxcbiAgICAgICAgdmFsdWVzOiBbXCJhY2VcIiwgXCJzbGltXCIsIFwic21vb3RoXCIsIFwid2lkZVwiXSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBcImFjZVwiXG4gICAgfSxcbiAgICBtZXJnZVVuZG9EZWx0YXM6IHtcbiAgICAgICAgdmFsdWVzOiBbZmFsc2UsIHRydWUsIFwiYWx3YXlzXCJdLFxuICAgICAgICBpbml0aWFsVmFsdWU6IHRydWVcbiAgICB9LFxuICAgIGJlaGF2aW91cnNFbmFibGVkOiB7aW5pdGlhbFZhbHVlOiB0cnVlfSxcbiAgICB3cmFwQmVoYXZpb3Vyc0VuYWJsZWQ6IHtpbml0aWFsVmFsdWU6IHRydWV9LFxuICAgIGF1dG9TY3JvbGxFZGl0b3JJbnRvVmlldzoge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge3RoaXMuc2V0QXV0b1Njcm9sbEVkaXRvckludG9WaWV3KHZhbCk7fVxuICAgIH0sXG4gICAga2V5Ym9hcmRIYW5kbGVyOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7IHRoaXMuc2V0S2V5Ym9hcmRIYW5kbGVyKHZhbCk7IH0sXG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmtleWJpbmRpbmdJZDsgfSxcbiAgICAgICAgaGFuZGxlc1NldDogdHJ1ZVxuICAgIH0sXG5cbiAgICBoU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZTogXCJyZW5kZXJlclwiLFxuICAgIHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlOiBcInJlbmRlcmVyXCIsXG4gICAgaGlnaGxpZ2h0R3V0dGVyTGluZTogXCJyZW5kZXJlclwiLFxuICAgIGFuaW1hdGVkU2Nyb2xsOiBcInJlbmRlcmVyXCIsXG4gICAgc2hvd0ludmlzaWJsZXM6IFwicmVuZGVyZXJcIixcbiAgICBzaG93UHJpbnRNYXJnaW46IFwicmVuZGVyZXJcIixcbiAgICBwcmludE1hcmdpbkNvbHVtbjogXCJyZW5kZXJlclwiLFxuICAgIHByaW50TWFyZ2luOiBcInJlbmRlcmVyXCIsXG4gICAgZmFkZUZvbGRXaWRnZXRzOiBcInJlbmRlcmVyXCIsXG4gICAgc2hvd0ZvbGRXaWRnZXRzOiBcInJlbmRlcmVyXCIsXG4gICAgc2hvd0xpbmVOdW1iZXJzOiBcInJlbmRlcmVyXCIsXG4gICAgc2hvd0d1dHRlcjogXCJyZW5kZXJlclwiLFxuICAgIGRpc3BsYXlJbmRlbnRHdWlkZXM6IFwicmVuZGVyZXJcIixcbiAgICBmb250U2l6ZTogXCJyZW5kZXJlclwiLFxuICAgIGZvbnRGYW1pbHk6IFwicmVuZGVyZXJcIixcbiAgICBtYXhMaW5lczogXCJyZW5kZXJlclwiLFxuICAgIG1pbkxpbmVzOiBcInJlbmRlcmVyXCIsXG4gICAgc2Nyb2xsUGFzdEVuZDogXCJyZW5kZXJlclwiLFxuICAgIGZpeGVkV2lkdGhHdXR0ZXI6IFwicmVuZGVyZXJcIixcbiAgICB0aGVtZTogXCJyZW5kZXJlclwiLFxuXG4gICAgc2Nyb2xsU3BlZWQ6IFwiJG1vdXNlSGFuZGxlclwiLFxuICAgIGRyYWdEZWxheTogXCIkbW91c2VIYW5kbGVyXCIsXG4gICAgZHJhZ0VuYWJsZWQ6IFwiJG1vdXNlSGFuZGxlclwiLFxuICAgIGZvY3VzVGltb3V0OiBcIiRtb3VzZUhhbmRsZXJcIixcbiAgICB0b29sdGlwRm9sbG93c01vdXNlOiBcIiRtb3VzZUhhbmRsZXJcIixcblxuICAgIGZpcnN0TGluZU51bWJlcjogXCJzZXNzaW9uXCIsXG4gICAgb3ZlcndyaXRlOiBcInNlc3Npb25cIixcbiAgICBuZXdMaW5lTW9kZTogXCJzZXNzaW9uXCIsXG4gICAgdXNlV29ya2VyOiBcInNlc3Npb25cIixcbiAgICB1c2VTb2Z0VGFiczogXCJzZXNzaW9uXCIsXG4gICAgdGFiU2l6ZTogXCJzZXNzaW9uXCIsXG4gICAgd3JhcDogXCJzZXNzaW9uXCIsXG4gICAgaW5kZW50ZWRTb2Z0V3JhcDogXCJzZXNzaW9uXCIsXG4gICAgZm9sZFN0eWxlOiBcInNlc3Npb25cIixcbiAgICBtb2RlOiBcInNlc3Npb25cIlxufSk7XG5cbmV4cG9ydHMuRWRpdG9yID0gRWRpdG9yO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvdW5kb21hbmFnZXJcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xudmFyIFVuZG9NYW5hZ2VyID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXNldCgpO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZXhlY3V0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGRlbHRhU2V0cyA9IG9wdGlvbnMuYXJnc1swXTtcbiAgICAgICAgdGhpcy4kZG9jICA9IG9wdGlvbnMuYXJnc1sxXTtcbiAgICAgICAgaWYgKG9wdGlvbnMubWVyZ2UgJiYgdGhpcy5oYXNVbmRvKCkpe1xuICAgICAgICAgICAgdGhpcy5kaXJ0eUNvdW50ZXItLTtcbiAgICAgICAgICAgIGRlbHRhU2V0cyA9IHRoaXMuJHVuZG9TdGFjay5wb3AoKS5jb25jYXQoZGVsdGFTZXRzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiR1bmRvU3RhY2sucHVzaChkZWx0YVNldHMpO1xuICAgICAgICB0aGlzLiRyZWRvU3RhY2sgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZGlydHlDb3VudGVyIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5kaXJ0eUNvdW50ZXIgPSBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXJ0eUNvdW50ZXIrKztcbiAgICB9O1xuICAgIHRoaXMudW5kbyA9IGZ1bmN0aW9uKGRvbnRTZWxlY3QpIHtcbiAgICAgICAgdmFyIGRlbHRhU2V0cyA9IHRoaXMuJHVuZG9TdGFjay5wb3AoKTtcbiAgICAgICAgdmFyIHVuZG9TZWxlY3Rpb25SYW5nZSA9IG51bGw7XG4gICAgICAgIGlmIChkZWx0YVNldHMpIHtcbiAgICAgICAgICAgIHVuZG9TZWxlY3Rpb25SYW5nZSA9IHRoaXMuJGRvYy51bmRvQ2hhbmdlcyhkZWx0YVNldHMsIGRvbnRTZWxlY3QpO1xuICAgICAgICAgICAgdGhpcy4kcmVkb1N0YWNrLnB1c2goZGVsdGFTZXRzKTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlDb3VudGVyLS07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kb1NlbGVjdGlvblJhbmdlO1xuICAgIH07XG4gICAgdGhpcy5yZWRvID0gZnVuY3Rpb24oZG9udFNlbGVjdCkge1xuICAgICAgICB2YXIgZGVsdGFTZXRzID0gdGhpcy4kcmVkb1N0YWNrLnBvcCgpO1xuICAgICAgICB2YXIgcmVkb1NlbGVjdGlvblJhbmdlID0gbnVsbDtcbiAgICAgICAgaWYgKGRlbHRhU2V0cykge1xuICAgICAgICAgICAgcmVkb1NlbGVjdGlvblJhbmdlID1cbiAgICAgICAgICAgICAgICB0aGlzLiRkb2MucmVkb0NoYW5nZXModGhpcy4kZGVzZXJpYWxpemVEZWx0YXMoZGVsdGFTZXRzKSwgZG9udFNlbGVjdCk7XG4gICAgICAgICAgICB0aGlzLiR1bmRvU3RhY2sucHVzaChkZWx0YVNldHMpO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eUNvdW50ZXIrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVkb1NlbGVjdGlvblJhbmdlO1xuICAgIH07XG4gICAgdGhpcy5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiR1bmRvU3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy4kcmVkb1N0YWNrID0gW107XG4gICAgICAgIHRoaXMuZGlydHlDb3VudGVyID0gMDtcbiAgICB9O1xuICAgIHRoaXMuaGFzVW5kbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kdW5kb1N0YWNrLmxlbmd0aCA+IDA7XG4gICAgfTtcbiAgICB0aGlzLmhhc1JlZG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJlZG9TdGFjay5sZW5ndGggPiAwO1xuICAgIH07XG4gICAgdGhpcy5tYXJrQ2xlYW4gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5kaXJ0eUNvdW50ZXIgPSAwO1xuICAgIH07XG4gICAgdGhpcy5pc0NsZWFuID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcnR5Q291bnRlciA9PT0gMDtcbiAgICB9O1xuICAgIHRoaXMuJHNlcmlhbGl6ZURlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhU2V0cykge1xuICAgICAgICByZXR1cm4gY2xvbmVEZWx0YVNldHNPYmooZGVsdGFTZXRzLCAkc2VyaWFsaXplRGVsdGEpO1xuICAgIH07XG4gICAgdGhpcy4kZGVzZXJpYWxpemVEZWx0YXMgPSBmdW5jdGlvbihkZWx0YVNldHMpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lRGVsdGFTZXRzT2JqKGRlbHRhU2V0cywgJGRlc2VyaWFsaXplRGVsdGEpO1xuICAgIH07XG4gICAgXG4gICAgZnVuY3Rpb24gJHNlcmlhbGl6ZURlbHRhKGRlbHRhKXtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjdGlvbjogZGVsdGEuYWN0aW9uLFxuICAgICAgICAgICAgc3RhcnQ6IGRlbHRhLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBkZWx0YS5lbmQsXG4gICAgICAgICAgICBsaW5lczogZGVsdGEubGluZXMubGVuZ3RoID09IDEgPyBudWxsIDogZGVsdGEubGluZXMsXG4gICAgICAgICAgICB0ZXh0OiBkZWx0YS5saW5lcy5sZW5ndGggPT0gMSA/IGRlbHRhLmxpbmVzWzBdIDogbnVsbFxuICAgICAgICB9O1xuICAgIH1cbiAgICAgICAgXG4gICAgZnVuY3Rpb24gJGRlc2VyaWFsaXplRGVsdGEoZGVsdGEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjdGlvbjogZGVsdGEuYWN0aW9uLFxuICAgICAgICAgICAgc3RhcnQ6IGRlbHRhLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBkZWx0YS5lbmQsXG4gICAgICAgICAgICBsaW5lczogZGVsdGEubGluZXMgfHwgW2RlbHRhLnRleHRdXG4gICAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIGZ1bmN0aW9uIGNsb25lRGVsdGFTZXRzT2JqKGRlbHRhU2V0c19vbGQsIGZuR2V0TW9kaWZpZWREZWx0YSkge1xuICAgICAgICB2YXIgZGVsdGFTZXRzX25ldyA9IG5ldyBBcnJheShkZWx0YVNldHNfb2xkLmxlbmd0aCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsdGFTZXRzX29sZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGRlbHRhU2V0X29sZCA9IGRlbHRhU2V0c19vbGRbaV07XG4gICAgICAgICAgICB2YXIgZGVsdGFTZXRfbmV3ID0geyBncm91cDogZGVsdGFTZXRfb2xkLmdyb3VwLCBkZWx0YXM6IG5ldyBBcnJheShkZWx0YVNldF9vbGQubGVuZ3RoKX07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGVsdGFTZXRfb2xkLmRlbHRhcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBkZWx0YV9vbGQgPSBkZWx0YVNldF9vbGQuZGVsdGFzW2pdO1xuICAgICAgICAgICAgICAgIGRlbHRhU2V0X25ldy5kZWx0YXNbal0gPSBmbkdldE1vZGlmaWVkRGVsdGEoZGVsdGFfb2xkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZGVsdGFTZXRzX25ld1tpXSA9IGRlbHRhU2V0X25ldztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsdGFTZXRzX25ldztcbiAgICB9XG4gICAgXG59KS5jYWxsKFVuZG9NYW5hZ2VyLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuVW5kb01hbmFnZXIgPSBVbmRvTWFuYWdlcjtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2xheWVyL2d1dHRlclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9kb21cIixcImFjZS9saWIvb29wXCIsXCJhY2UvbGliL2xhbmdcIixcImFjZS9saWIvZXZlbnRfZW1pdHRlclwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBkb20gPSBhY2VxdWlyZShcIi4uL2xpYi9kb21cIik7XG52YXIgb29wID0gYWNlcXVpcmUoXCIuLi9saWIvb29wXCIpO1xudmFyIGxhbmcgPSBhY2VxdWlyZShcIi4uL2xpYi9sYW5nXCIpO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi4vbGliL2V2ZW50X2VtaXR0ZXJcIikuRXZlbnRFbWl0dGVyO1xuXG52YXIgR3V0dGVyID0gZnVuY3Rpb24ocGFyZW50RWwpIHtcbiAgICB0aGlzLmVsZW1lbnQgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gXCJhY2VfbGF5ZXIgYWNlX2d1dHRlci1sYXllclwiO1xuICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5zZXRTaG93Rm9sZFdpZGdldHModGhpcy4kc2hvd0ZvbGRXaWRnZXRzKTtcbiAgICBcbiAgICB0aGlzLmd1dHRlcldpZHRoID0gMDtcblxuICAgIHRoaXMuJGFubm90YXRpb25zID0gW107XG4gICAgdGhpcy4kdXBkYXRlQW5ub3RhdGlvbnMgPSB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy4kY2VsbHMgPSBbXTtcbn07XG5cbihmdW5jdGlvbigpIHtcblxuICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTtcblxuICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbilcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHRoaXMuJHVwZGF0ZUFubm90YXRpb25zKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICAgICAgaWYgKHNlc3Npb24pXG4gICAgICAgICAgICBzZXNzaW9uLm9uKFwiY2hhbmdlXCIsIHRoaXMuJHVwZGF0ZUFubm90YXRpb25zKTtcbiAgICB9O1xuXG4gICAgdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpe1xuICAgICAgICBpZiAod2luZG93LmNvbnNvbGUpXG4gICAgICAgICAgICBjb25zb2xlLndhcm4gJiYgY29uc29sZS53YXJuKFwiZGVwcmVjYXRlZCB1c2Ugc2Vzc2lvbi5hZGRHdXR0ZXJEZWNvcmF0aW9uXCIpO1xuICAgICAgICB0aGlzLnNlc3Npb24uYWRkR3V0dGVyRGVjb3JhdGlvbihyb3csIGNsYXNzTmFtZSk7XG4gICAgfTtcblxuICAgIHRoaXMucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKXtcbiAgICAgICAgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICAgICAgY29uc29sZS53YXJuICYmIGNvbnNvbGUud2FybihcImRlcHJlY2F0ZWQgdXNlIHNlc3Npb24ucmVtb3ZlR3V0dGVyRGVjb3JhdGlvblwiKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUd1dHRlckRlY29yYXRpb24ocm93LCBjbGFzc05hbWUpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldEFubm90YXRpb25zID0gZnVuY3Rpb24oYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbm5vdGF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1tpXTtcbiAgICAgICAgICAgIHZhciByb3cgPSBhbm5vdGF0aW9uLnJvdztcbiAgICAgICAgICAgIHZhciByb3dJbmZvID0gdGhpcy4kYW5ub3RhdGlvbnNbcm93XTtcbiAgICAgICAgICAgIGlmICghcm93SW5mbylcbiAgICAgICAgICAgICAgICByb3dJbmZvID0gdGhpcy4kYW5ub3RhdGlvbnNbcm93XSA9IHt0ZXh0OiBbXX07XG4gICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGFubm9UZXh0ID0gYW5ub3RhdGlvbi50ZXh0O1xuICAgICAgICAgICAgYW5ub1RleHQgPSBhbm5vVGV4dCA/IGxhbmcuZXNjYXBlSFRNTChhbm5vVGV4dCkgOiBhbm5vdGF0aW9uLmh0bWwgfHwgXCJcIjtcblxuICAgICAgICAgICAgaWYgKHJvd0luZm8udGV4dC5pbmRleE9mKGFubm9UZXh0KSA9PT0gLTEpXG4gICAgICAgICAgICAgICAgcm93SW5mby50ZXh0LnB1c2goYW5ub1RleHQpO1xuXG4gICAgICAgICAgICB2YXIgdHlwZSA9IGFubm90YXRpb24udHlwZTtcbiAgICAgICAgICAgIGlmICh0eXBlID09IFwiZXJyb3JcIilcbiAgICAgICAgICAgICAgICByb3dJbmZvLmNsYXNzTmFtZSA9IFwiIGFjZV9lcnJvclwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBcIndhcm5pbmdcIiAmJiByb3dJbmZvLmNsYXNzTmFtZSAhPSBcIiBhY2VfZXJyb3JcIilcbiAgICAgICAgICAgICAgICByb3dJbmZvLmNsYXNzTmFtZSA9IFwiIGFjZV93YXJuaW5nXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IFwiaW5mb1wiICYmICghcm93SW5mby5jbGFzc05hbWUpKVxuICAgICAgICAgICAgICAgIHJvd0luZm8uY2xhc3NOYW1lID0gXCIgYWNlX2luZm9cIjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uIChkZWx0YSkge1xuICAgICAgICBpZiAoIXRoaXMuJGFubm90YXRpb25zLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGZpcnN0Um93ID0gZGVsdGEuc3RhcnQucm93O1xuICAgICAgICB2YXIgbGVuID0gZGVsdGEuZW5kLnJvdyAtIGZpcnN0Um93O1xuICAgICAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICdyZW1vdmUnKSB7XG4gICAgICAgICAgICB0aGlzLiRhbm5vdGF0aW9ucy5zcGxpY2UoZmlyc3RSb3csIGxlbiArIDEsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICBhcmdzLnVuc2hpZnQoZmlyc3RSb3csIDEpO1xuICAgICAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMuc3BsaWNlLmFwcGx5KHRoaXMuJGFubm90YXRpb25zLCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZykge1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIGZpcnN0Um93ID0gY29uZmlnLmZpcnN0Um93O1xuICAgICAgICB2YXIgbGFzdFJvdyA9IE1hdGgubWluKGNvbmZpZy5sYXN0Um93ICsgY29uZmlnLmd1dHRlck9mZnNldCwgIC8vIG5lZWRlZCB0byBjb21wZW5zYXRlIGZvciBob3Igc2NvbGxiYXJcbiAgICAgICAgICAgIHNlc3Npb24uZ2V0TGVuZ3RoKCkgLSAxKTtcbiAgICAgICAgdmFyIGZvbGQgPSBzZXNzaW9uLmdldE5leHRGb2xkTGluZShmaXJzdFJvdyk7XG4gICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkID8gZm9sZC5zdGFydC5yb3cgOiBJbmZpbml0eTtcbiAgICAgICAgdmFyIGZvbGRXaWRnZXRzID0gdGhpcy4kc2hvd0ZvbGRXaWRnZXRzICYmIHNlc3Npb24uZm9sZFdpZGdldHM7XG4gICAgICAgIHZhciBicmVha3BvaW50cyA9IHNlc3Npb24uJGJyZWFrcG9pbnRzO1xuICAgICAgICB2YXIgZGVjb3JhdGlvbnMgPSBzZXNzaW9uLiRkZWNvcmF0aW9ucztcbiAgICAgICAgdmFyIGZpcnN0TGluZU51bWJlciA9IHNlc3Npb24uJGZpcnN0TGluZU51bWJlcjtcbiAgICAgICAgdmFyIGxhc3RMaW5lTnVtYmVyID0gMDtcbiAgICAgICAgXG4gICAgICAgIHZhciBndXR0ZXJSZW5kZXJlciA9IHNlc3Npb24uZ3V0dGVyUmVuZGVyZXIgfHwgdGhpcy4kcmVuZGVyZXI7XG5cbiAgICAgICAgdmFyIGNlbGwgPSBudWxsO1xuICAgICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgICAgdmFyIHJvdyA9IGZpcnN0Um93O1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHJvdyA+IGZvbGRTdGFydCkge1xuICAgICAgICAgICAgICAgIHJvdyA9IGZvbGQuZW5kLnJvdyArIDE7XG4gICAgICAgICAgICAgICAgZm9sZCA9IHNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHJvdywgZm9sZCk7XG4gICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZCA/IGZvbGQuc3RhcnQucm93IDogSW5maW5pdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm93ID4gbGFzdFJvdykge1xuICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLiRjZWxscy5sZW5ndGggPiBpbmRleCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbCA9IHRoaXMuJGNlbGxzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQoY2VsbC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNlbGwgPSB0aGlzLiRjZWxsc1srK2luZGV4XTtcbiAgICAgICAgICAgIGlmICghY2VsbCkge1xuICAgICAgICAgICAgICAgIGNlbGwgPSB7ZWxlbWVudDogbnVsbCwgdGV4dE5vZGU6IG51bGwsIGZvbGRXaWRnZXQ6IG51bGx9O1xuICAgICAgICAgICAgICAgIGNlbGwuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgICAgIGNlbGwudGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgICAgICAgICAgICAgY2VsbC5lbGVtZW50LmFwcGVuZENoaWxkKGNlbGwudGV4dE5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjZWxsLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGNlbGxzW2luZGV4XSA9IGNlbGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSBcImFjZV9ndXR0ZXItY2VsbCBcIjtcbiAgICAgICAgICAgIGlmIChicmVha3BvaW50c1tyb3ddKVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSBicmVha3BvaW50c1tyb3ddO1xuICAgICAgICAgICAgaWYgKGRlY29yYXRpb25zW3Jvd10pXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lICs9IGRlY29yYXRpb25zW3Jvd107XG4gICAgICAgICAgICBpZiAodGhpcy4kYW5ub3RhdGlvbnNbcm93XSlcbiAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gdGhpcy4kYW5ub3RhdGlvbnNbcm93XS5jbGFzc05hbWU7XG4gICAgICAgICAgICBpZiAoY2VsbC5lbGVtZW50LmNsYXNzTmFtZSAhPSBjbGFzc05hbWUpXG4gICAgICAgICAgICAgICAgY2VsbC5lbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNlc3Npb24uZ2V0Um93TGVuZ3RoKHJvdykgKiBjb25maWcubGluZUhlaWdodCArIFwicHhcIjtcbiAgICAgICAgICAgIGlmIChoZWlnaHQgIT0gY2VsbC5lbGVtZW50LnN0eWxlLmhlaWdodClcbiAgICAgICAgICAgICAgICBjZWxsLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoZm9sZFdpZGdldHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IGZvbGRXaWRnZXRzW3Jvd107XG4gICAgICAgICAgICAgICAgaWYgKGMgPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgYyA9IGZvbGRXaWRnZXRzW3Jvd10gPSBzZXNzaW9uLmdldEZvbGRXaWRnZXQocm93KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNlbGwuZm9sZFdpZGdldCkge1xuICAgICAgICAgICAgICAgICAgICBjZWxsLmZvbGRXaWRnZXQgPSBkb20uY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwuZWxlbWVudC5hcHBlbmRDaGlsZChjZWxsLmZvbGRXaWRnZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gXCJhY2VfZm9sZC13aWRnZXQgYWNlX1wiICsgYztcbiAgICAgICAgICAgICAgICBpZiAoYyA9PSBcInN0YXJ0XCIgJiYgcm93ID09IGZvbGRTdGFydCAmJiByb3cgPCBmb2xkLmVuZC5yb3cpXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSBcIiBhY2VfY2xvc2VkXCI7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgYWNlX29wZW5cIjtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC5mb2xkV2lkZ2V0LmNsYXNzTmFtZSAhPSBjbGFzc05hbWUpXG4gICAgICAgICAgICAgICAgICAgIGNlbGwuZm9sZFdpZGdldC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gY29uZmlnLmxpbmVIZWlnaHQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgaWYgKGNlbGwuZm9sZFdpZGdldC5zdHlsZS5oZWlnaHQgIT0gaGVpZ2h0KVxuICAgICAgICAgICAgICAgICAgICBjZWxsLmZvbGRXaWRnZXQuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC5mb2xkV2lkZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwuZWxlbWVudC5yZW1vdmVDaGlsZChjZWxsLmZvbGRXaWRnZXQpO1xuICAgICAgICAgICAgICAgICAgICBjZWxsLmZvbGRXaWRnZXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRleHQgPSBsYXN0TGluZU51bWJlciA9IGd1dHRlclJlbmRlcmVyXG4gICAgICAgICAgICAgICAgPyBndXR0ZXJSZW5kZXJlci5nZXRUZXh0KHNlc3Npb24sIHJvdylcbiAgICAgICAgICAgICAgICA6IHJvdyArIGZpcnN0TGluZU51bWJlcjtcbiAgICAgICAgICAgIGlmICh0ZXh0ICE9PSBjZWxsLnRleHROb2RlLmRhdGEpXG4gICAgICAgICAgICAgICAgY2VsbC50ZXh0Tm9kZS5kYXRhID0gdGV4dDtcblxuICAgICAgICAgICAgcm93Kys7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gY29uZmlnLm1pbkhlaWdodCArIFwicHhcIjtcblxuICAgICAgICBpZiAodGhpcy4kZml4ZWRXaWR0aCB8fCBzZXNzaW9uLiR1c2VXcmFwTW9kZSlcbiAgICAgICAgICAgIGxhc3RMaW5lTnVtYmVyID0gc2Vzc2lvbi5nZXRMZW5ndGgoKSArIGZpcnN0TGluZU51bWJlcjtcblxuICAgICAgICB2YXIgZ3V0dGVyV2lkdGggPSBndXR0ZXJSZW5kZXJlciBcbiAgICAgICAgICAgID8gZ3V0dGVyUmVuZGVyZXIuZ2V0V2lkdGgoc2Vzc2lvbiwgbGFzdExpbmVOdW1iZXIsIGNvbmZpZylcbiAgICAgICAgICAgIDogbGFzdExpbmVOdW1iZXIudG9TdHJpbmcoKS5sZW5ndGggKiBjb25maWcuY2hhcmFjdGVyV2lkdGg7XG4gICAgICAgIFxuICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuJHBhZGRpbmcgfHwgdGhpcy4kY29tcHV0ZVBhZGRpbmcoKTtcbiAgICAgICAgZ3V0dGVyV2lkdGggKz0gcGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodDtcbiAgICAgICAgaWYgKGd1dHRlcldpZHRoICE9PSB0aGlzLmd1dHRlcldpZHRoICYmICFpc05hTihndXR0ZXJXaWR0aCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3V0dGVyV2lkdGggPSBndXR0ZXJXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9IE1hdGguY2VpbCh0aGlzLmd1dHRlcldpZHRoKSArIFwicHhcIjtcbiAgICAgICAgICAgIHRoaXMuX2VtaXQoXCJjaGFuZ2VHdXR0ZXJXaWR0aFwiLCBndXR0ZXJXaWR0aCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy4kZml4ZWRXaWR0aCA9IGZhbHNlO1xuICAgIFxuICAgIHRoaXMuJHNob3dMaW5lTnVtYmVycyA9IHRydWU7XG4gICAgdGhpcy4kcmVuZGVyZXIgPSBcIlwiO1xuICAgIHRoaXMuc2V0U2hvd0xpbmVOdW1iZXJzID0gZnVuY3Rpb24oc2hvdykge1xuICAgICAgICB0aGlzLiRyZW5kZXJlciA9ICFzaG93ICYmIHtcbiAgICAgICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHtyZXR1cm4gXCJcIjt9LFxuICAgICAgICAgICAgZ2V0VGV4dDogZnVuY3Rpb24oKSB7cmV0dXJuIFwiXCI7fVxuICAgICAgICB9O1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5nZXRTaG93TGluZU51bWJlcnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNob3dMaW5lTnVtYmVycztcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuJHNob3dGb2xkV2lkZ2V0cyA9IHRydWU7XG4gICAgdGhpcy5zZXRTaG93Rm9sZFdpZGdldHMgPSBmdW5jdGlvbihzaG93KSB7XG4gICAgICAgIGlmIChzaG93KVxuICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwgXCJhY2VfZm9sZGluZy1lbmFibGVkXCIpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCBcImFjZV9mb2xkaW5nLWVuYWJsZWRcIik7XG5cbiAgICAgICAgdGhpcy4kc2hvd0ZvbGRXaWRnZXRzID0gc2hvdztcbiAgICAgICAgdGhpcy4kcGFkZGluZyA9IG51bGw7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmdldFNob3dGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc2hvd0ZvbGRXaWRnZXRzO1xuICAgIH07XG5cbiAgICB0aGlzLiRjb21wdXRlUGFkZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudC5maXJzdENoaWxkKVxuICAgICAgICAgICAgcmV0dXJuIHtsZWZ0OiAwLCByaWdodDogMH07XG4gICAgICAgIHZhciBzdHlsZSA9IGRvbS5jb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudC5maXJzdENoaWxkKTtcbiAgICAgICAgdGhpcy4kcGFkZGluZyA9IHt9O1xuICAgICAgICB0aGlzLiRwYWRkaW5nLmxlZnQgPSBwYXJzZUludChzdHlsZS5wYWRkaW5nTGVmdCkgKyAxIHx8IDA7XG4gICAgICAgIHRoaXMuJHBhZGRpbmcucmlnaHQgPSBwYXJzZUludChzdHlsZS5wYWRkaW5nUmlnaHQpIHx8IDA7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYWRkaW5nO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFJlZ2lvbiA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy4kcGFkZGluZyB8fCB0aGlzLiRjb21wdXRlUGFkZGluZygpO1xuICAgICAgICB2YXIgcmVjdCA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKHBvaW50LnggPCBwYWRkaW5nLmxlZnQgKyByZWN0LmxlZnQpXG4gICAgICAgICAgICByZXR1cm4gXCJtYXJrZXJzXCI7XG4gICAgICAgIGlmICh0aGlzLiRzaG93Rm9sZFdpZGdldHMgJiYgcG9pbnQueCA+IHJlY3QucmlnaHQgLSBwYWRkaW5nLnJpZ2h0KVxuICAgICAgICAgICAgcmV0dXJuIFwiZm9sZFdpZGdldHNcIjtcbiAgICB9O1xuXG59KS5jYWxsKEd1dHRlci5wcm90b3R5cGUpO1xuXG5leHBvcnRzLkd1dHRlciA9IEd1dHRlcjtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGF5ZXIvbWFya2VyXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvcmFuZ2VcIixcImFjZS9saWIvZG9tXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIFJhbmdlID0gYWNlcXVpcmUoXCIuLi9yYW5nZVwiKS5SYW5nZTtcbnZhciBkb20gPSBhY2VxdWlyZShcIi4uL2xpYi9kb21cIik7XG5cbnZhciBNYXJrZXIgPSBmdW5jdGlvbihwYXJlbnRFbCkge1xuICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSBcImFjZV9sYXllciBhY2VfbWFya2VyLWxheWVyXCI7XG4gICAgcGFyZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtcbn07XG5cbihmdW5jdGlvbigpIHtcblxuICAgIHRoaXMuJHBhZGRpbmcgPSAwO1xuXG4gICAgdGhpcy5zZXRQYWRkaW5nID0gZnVuY3Rpb24ocGFkZGluZykge1xuICAgICAgICB0aGlzLiRwYWRkaW5nID0gcGFkZGluZztcbiAgICB9O1xuICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuc2V0TWFya2VycyA9IGZ1bmN0aW9uKG1hcmtlcnMpIHtcbiAgICAgICAgdGhpcy5tYXJrZXJzID0gbWFya2VycztcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbihjb25maWcpIHtcbiAgICAgICAgaWYgKCFjb25maWcpIHJldHVybjtcblxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuXG4gICAgICAgIHZhciBodG1sID0gW107XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLm1hcmtlcnMpIHtcbiAgICAgICAgICAgIHZhciBtYXJrZXIgPSB0aGlzLm1hcmtlcnNba2V5XTtcblxuICAgICAgICAgICAgaWYgKCFtYXJrZXIucmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIudXBkYXRlKGh0bWwsIHRoaXMsIHRoaXMuc2Vzc2lvbiwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJhbmdlID0gbWFya2VyLnJhbmdlLmNsaXBSb3dzKGNvbmZpZy5maXJzdFJvdywgY29uZmlnLmxhc3RSb3cpO1xuICAgICAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIHJhbmdlID0gcmFuZ2UudG9TY3JlZW5SYW5nZSh0aGlzLnNlc3Npb24pO1xuICAgICAgICAgICAgaWYgKG1hcmtlci5yZW5kZXJlcikge1xuICAgICAgICAgICAgICAgIHZhciB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcpO1xuICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gdGhpcy4kcGFkZGluZyArICh0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyhyYW5nZS5zdGFydC5yb3cpXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5nZXRQb3NMZWZ0KHJhbmdlLnN0YXJ0LmNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgOiByYW5nZS5zdGFydC5jb2x1bW4gKiBjb25maWcuY2hhcmFjdGVyV2lkdGgpO1xuICAgICAgICAgICAgICAgIG1hcmtlci5yZW5kZXJlcihodG1sLCByYW5nZSwgbGVmdCwgdG9wLCBjb25maWcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXJrZXIudHlwZSA9PSBcImZ1bGxMaW5lXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdGdWxsTGluZU1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6LCBjb25maWcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXJrZXIudHlwZSA9PSBcInNjcmVlbkxpbmVcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd1NjcmVlbkxpbmVNYXJrZXIoaHRtbCwgcmFuZ2UsIG1hcmtlci5jbGF6eiwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmFuZ2UuaXNNdWx0aUxpbmUoKSkge1xuICAgICAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSBcInRleHRcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3VGV4dE1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6LCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3TXVsdGlMaW5lTWFya2VyKGh0bWwsIHJhbmdlLCBtYXJrZXIuY2xhenosIGNvbmZpZyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyhyYW5nZS5zdGFydC5yb3cpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd0JpZGlTaW5nbGVMaW5lTWFya2VyKGh0bWwsIHJhbmdlLCBtYXJrZXIuY2xhenogKyBcIiBhY2Vfc3RhcnRcIiArIFwiIGFjZV9icjE1XCIsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6ICsgXCIgYWNlX3N0YXJ0XCIgKyBcIiBhY2VfYnIxNVwiLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbC5qb2luKFwiXCIpO1xuICAgIH07XG5cbiAgICB0aGlzLiRnZXRUb3AgPSBmdW5jdGlvbihyb3csIGxheWVyQ29uZmlnKSB7XG4gICAgICAgIHJldHVybiAocm93IC0gbGF5ZXJDb25maWcuZmlyc3RSb3dTY3JlZW4pICogbGF5ZXJDb25maWcubGluZUhlaWdodDtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0Qm9yZGVyQ2xhc3ModGwsIHRyLCBiciwgYmwpIHtcbiAgICAgICAgcmV0dXJuICh0bCA/IDEgOiAwKSB8ICh0ciA/IDIgOiAwKSB8IChiciA/IDQgOiAwKSB8IChibCA/IDggOiAwKTtcbiAgICB9XG4gICAgdGhpcy5kcmF3VGV4dE1hcmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHJhbmdlLCBjbGF6eiwgbGF5ZXJDb25maWcsIGV4dHJhU3R5bGUpIHtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgIHZhciBzdGFydCA9IHJhbmdlLnN0YXJ0LnJvdztcbiAgICAgICAgdmFyIGVuZCA9IHJhbmdlLmVuZC5yb3c7XG4gICAgICAgIHZhciByb3cgPSBzdGFydDtcbiAgICAgICAgdmFyIHByZXYgPSAwOyBcbiAgICAgICAgdmFyIGN1cnIgPSAwO1xuICAgICAgICB2YXIgbmV4dCA9IHNlc3Npb24uZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihyb3cpO1xuICAgICAgICB2YXIgY2xhenpNb2RpZmllZCA9IG51bGw7XG4gICAgICAgIHZhciBsaW5lUmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCByYW5nZS5zdGFydC5jb2x1bW4sIHJvdywgY3Vycik7XG4gICAgICAgIGZvciAoOyByb3cgPD0gZW5kOyByb3crKykge1xuICAgICAgICAgICAgbGluZVJhbmdlLnN0YXJ0LnJvdyA9IGxpbmVSYW5nZS5lbmQucm93ID0gcm93O1xuICAgICAgICAgICAgbGluZVJhbmdlLnN0YXJ0LmNvbHVtbiA9IHJvdyA9PSBzdGFydCA/IHJhbmdlLnN0YXJ0LmNvbHVtbiA6IHNlc3Npb24uZ2V0Um93V3JhcEluZGVudChyb3cpO1xuICAgICAgICAgICAgbGluZVJhbmdlLmVuZC5jb2x1bW4gPSBuZXh0O1xuICAgICAgICAgICAgcHJldiA9IGN1cnI7XG4gICAgICAgICAgICBjdXJyID0gbmV4dDtcbiAgICAgICAgICAgIG5leHQgPSByb3cgKyAxIDwgZW5kID8gc2Vzc2lvbi5nZXRTY3JlZW5MYXN0Um93Q29sdW1uKHJvdyArIDEpIDogcm93ID09IGVuZCA/IDAgOiByYW5nZS5lbmQuY29sdW1uO1xuICAgICAgICAgICAgY2xhenpNb2RpZmllZCA9IGNsYXp6ICsgKHJvdyA9PSBzdGFydCAgPyBcIiBhY2Vfc3RhcnRcIiA6IFwiXCIpICsgXCIgYWNlX2JyXCJcbiAgICAgICAgICAgICAgICArIGdldEJvcmRlckNsYXNzKHJvdyA9PSBzdGFydCB8fCByb3cgPT0gc3RhcnQgKyAxICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiwgcHJldiA8IGN1cnIsIGN1cnIgPiBuZXh0LCByb3cgPT0gZW5kKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuaXNCaWRpUm93KHJvdykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdCaWRpU2luZ2xlTGluZU1hcmtlcihzdHJpbmdCdWlsZGVyLCBsaW5lUmFuZ2UsIGNsYXp6TW9kaWZpZWQsXG4gICAgICAgICAgICAgICAgICAgIGxheWVyQ29uZmlnLCByb3cgPT0gZW5kID8gMCA6IDEsIGV4dHJhU3R5bGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyKHN0cmluZ0J1aWxkZXIsIGxpbmVSYW5nZSwgY2xhenpNb2RpZmllZCxcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJDb25maWcsIHJvdyA9PSBlbmQgPyAwIDogMSwgZXh0cmFTdHlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZHJhd011bHRpTGluZU1hcmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHJhbmdlLCBjbGF6eiwgY29uZmlnLCBleHRyYVN0eWxlKSB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy4kcGFkZGluZztcbiAgICAgICAgdmFyIGhlaWdodCwgdG9wLCBsZWZ0O1xuICAgICAgICBleHRyYVN0eWxlID0gZXh0cmFTdHlsZSB8fCBcIlwiO1xuICAgICAgIGlmICh0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyhyYW5nZS5zdGFydC5yb3cpKSB7XG4gICAgICAgICAgIHZhciByYW5nZTEgPSByYW5nZS5jbG9uZSgpO1xuICAgICAgICAgICByYW5nZTEuZW5kLnJvdyA9IHJhbmdlMS5zdGFydC5yb3c7XG4gICAgICAgICAgIHJhbmdlMS5lbmQuY29sdW1uID0gdGhpcy5zZXNzaW9uLmdldExpbmUocmFuZ2UxLnN0YXJ0LnJvdykubGVuZ3RoO1xuICAgICAgICAgICB0aGlzLmRyYXdCaWRpU2luZ2xlTGluZU1hcmtlcihzdHJpbmdCdWlsZGVyLCByYW5nZTEsIGNsYXp6ICsgXCIgYWNlX2JyMSBhY2Vfc3RhcnRcIiwgY29uZmlnLCBudWxsLCBleHRyYVN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgaGVpZ2h0ID0gY29uZmlnLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgIHRvcCA9IHRoaXMuJGdldFRvcChyYW5nZS5zdGFydC5yb3csIGNvbmZpZyk7XG4gICAgICAgICAgIGxlZnQgPSBwYWRkaW5nICsgcmFuZ2Uuc3RhcnQuY29sdW1uICogY29uZmlnLmNoYXJhY3RlcldpZHRoO1xuICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goXG4gICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J1wiLCBjbGF6eiwgXCIgYWNlX2JyMSBhY2Vfc3RhcnQnIHN0eWxlPSdcIixcbiAgICAgICAgICAgICAgIFwiaGVpZ2h0OlwiLCBoZWlnaHQsIFwicHg7XCIsXG4gICAgICAgICAgICAgICBcInJpZ2h0OjA7XCIsXG4gICAgICAgICAgICAgICBcInRvcDpcIiwgdG9wLCBcInB4O1wiLFxuICAgICAgICAgICAgICAgXCJsZWZ0OlwiLCBsZWZ0LCBcInB4O1wiLCBleHRyYVN0eWxlLCBcIic+PC9kaXY+XCJcbiAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5pc0JpZGlSb3cocmFuZ2UuZW5kLnJvdykpIHtcbiAgICAgICAgICAgdmFyIHJhbmdlMSA9IHJhbmdlLmNsb25lKCk7XG4gICAgICAgICAgIHJhbmdlMS5zdGFydC5yb3cgPSByYW5nZTEuZW5kLnJvdztcbiAgICAgICAgICAgcmFuZ2UxLnN0YXJ0LmNvbHVtbiA9IDA7XG4gICAgICAgICAgIHRoaXMuZHJhd0JpZGlTaW5nbGVMaW5lTWFya2VyKHN0cmluZ0J1aWxkZXIsIHJhbmdlMSwgY2xhenogKyBcIiBhY2VfYnIxMlwiLCBjb25maWcsIG51bGwsIGV4dHJhU3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICB2YXIgd2lkdGggPSByYW5nZS5lbmQuY29sdW1uICogY29uZmlnLmNoYXJhY3RlcldpZHRoO1xuICAgICAgICAgICBoZWlnaHQgPSBjb25maWcubGluZUhlaWdodDtcbiAgICAgICAgICAgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLmVuZC5yb3csIGNvbmZpZyk7XG4gICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaChcbiAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nXCIsIGNsYXp6LCBcIiBhY2VfYnIxMicgc3R5bGU9J1wiLFxuICAgICAgICAgICAgICAgXCJoZWlnaHQ6XCIsIGhlaWdodCwgXCJweDtcIixcbiAgICAgICAgICAgICAgIFwid2lkdGg6XCIsIHdpZHRoLCBcInB4O1wiLFxuICAgICAgICAgICAgICAgXCJ0b3A6XCIsIHRvcCwgXCJweDtcIixcbiAgICAgICAgICAgICAgIFwibGVmdDpcIiwgcGFkZGluZywgXCJweDtcIiwgZXh0cmFTdHlsZSwgXCInPjwvZGl2PlwiXG4gICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaGVpZ2h0ID0gKHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3cgLSAxKSAqIGNvbmZpZy5saW5lSGVpZ2h0O1xuICAgICAgICBpZiAoaGVpZ2h0IDw9IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRvcCA9IHRoaXMuJGdldFRvcChyYW5nZS5zdGFydC5yb3cgKyAxLCBjb25maWcpO1xuICAgICAgICBcbiAgICAgICAgdmFyIHJhZGl1c0NsYXNzID0gKHJhbmdlLnN0YXJ0LmNvbHVtbiA/IDEgOiAwKSB8IChyYW5nZS5lbmQuY29sdW1uID8gMCA6IDgpO1xuXG4gICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaChcbiAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nXCIsIGNsYXp6LCAocmFkaXVzQ2xhc3MgPyBcIiBhY2VfYnJcIiArIHJhZGl1c0NsYXNzIDogXCJcIiksIFwiJyBzdHlsZT0nXCIsXG4gICAgICAgICAgICBcImhlaWdodDpcIiwgaGVpZ2h0LCBcInB4O1wiLFxuICAgICAgICAgICAgXCJyaWdodDowO1wiLFxuICAgICAgICAgICAgXCJ0b3A6XCIsIHRvcCwgXCJweDtcIixcbiAgICAgICAgICAgIFwibGVmdDpcIiwgcGFkZGluZywgXCJweDtcIiwgZXh0cmFTdHlsZSwgXCInPjwvZGl2PlwiXG4gICAgICAgICk7XG4gICAgfTtcbiAgICB0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwgcmFuZ2UsIGNsYXp6LCBjb25maWcsIGV4dHJhTGVuZ3RoLCBleHRyYVN0eWxlKSB7XG4gICAgICAgIHZhciBoZWlnaHQgPSBjb25maWcubGluZUhlaWdodDtcbiAgICAgICAgdmFyIHdpZHRoID0gKHJhbmdlLmVuZC5jb2x1bW4gKyAoZXh0cmFMZW5ndGggfHwgMCkgLSByYW5nZS5zdGFydC5jb2x1bW4pICogY29uZmlnLmNoYXJhY3RlcldpZHRoO1xuXG4gICAgICAgIHZhciB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcpO1xuICAgICAgICB2YXIgbGVmdCA9IHRoaXMuJHBhZGRpbmcgKyByYW5nZS5zdGFydC5jb2x1bW4gKiBjb25maWcuY2hhcmFjdGVyV2lkdGg7XG5cbiAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKFxuICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdcIiwgY2xhenosIFwiJyBzdHlsZT0nXCIsXG4gICAgICAgICAgICBcImhlaWdodDpcIiwgaGVpZ2h0LCBcInB4O1wiLFxuICAgICAgICAgICAgXCJ3aWR0aDpcIiwgd2lkdGgsIFwicHg7XCIsXG4gICAgICAgICAgICBcInRvcDpcIiwgdG9wLCBcInB4O1wiLFxuICAgICAgICAgICAgXCJsZWZ0OlwiLCBsZWZ0LCBcInB4O1wiLCBleHRyYVN0eWxlIHx8IFwiXCIsIFwiJz48L2Rpdj5cIlxuICAgICAgICApO1xuICAgIH07XG4gICAgdGhpcy5kcmF3QmlkaVNpbmdsZUxpbmVNYXJrZXIgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCByYW5nZSwgY2xhenosIGNvbmZpZywgZXh0cmFMZW5ndGgsIGV4dHJhU3R5bGUpIHtcbiAgICAgICAgdmFyIGhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0LCB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcpLCBwYWRkaW5nID0gdGhpcy4kcGFkZGluZztcbiAgICAgICAgdmFyIHNlbGVjdGlvbnMgPSB0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmdldFNlbGVjdGlvbnMocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKTtcblxuICAgICAgICBzZWxlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goXG4gICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdcIiwgY2xhenosIFwiJyBzdHlsZT0nXCIsXG4gICAgICAgICAgICAgICAgXCJoZWlnaHQ6XCIsIGhlaWdodCwgXCJweDtcIixcbiAgICAgICAgICAgICAgICBcIndpZHRoOlwiLCBzZWxlY3Rpb24ud2lkdGggKyAoZXh0cmFMZW5ndGggfHwgMCksIFwicHg7XCIsXG4gICAgICAgICAgICAgICAgXCJ0b3A6XCIsIHRvcCwgXCJweDtcIixcbiAgICAgICAgICAgICAgICBcImxlZnQ6XCIsIHBhZGRpbmcgKyBzZWxlY3Rpb24ubGVmdCwgXCJweDtcIiwgZXh0cmFTdHlsZSB8fCBcIlwiLCBcIic+PC9kaXY+XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLmRyYXdGdWxsTGluZU1hcmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHJhbmdlLCBjbGF6eiwgY29uZmlnLCBleHRyYVN0eWxlKSB7XG4gICAgICAgIHZhciB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gY29uZmlnLmxpbmVIZWlnaHQ7XG4gICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgIT0gcmFuZ2UuZW5kLnJvdylcbiAgICAgICAgICAgIGhlaWdodCArPSB0aGlzLiRnZXRUb3AocmFuZ2UuZW5kLnJvdywgY29uZmlnKSAtIHRvcDtcblxuICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goXG4gICAgICAgICAgICBcIjxkaXYgY2xhc3M9J1wiLCBjbGF6eiwgXCInIHN0eWxlPSdcIixcbiAgICAgICAgICAgIFwiaGVpZ2h0OlwiLCBoZWlnaHQsIFwicHg7XCIsXG4gICAgICAgICAgICBcInRvcDpcIiwgdG9wLCBcInB4O1wiLFxuICAgICAgICAgICAgXCJsZWZ0OjA7cmlnaHQ6MDtcIiwgZXh0cmFTdHlsZSB8fCBcIlwiLCBcIic+PC9kaXY+XCJcbiAgICAgICAgKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuZHJhd1NjcmVlbkxpbmVNYXJrZXIgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCByYW5nZSwgY2xhenosIGNvbmZpZywgZXh0cmFTdHlsZSkge1xuICAgICAgICB2YXIgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLnN0YXJ0LnJvdywgY29uZmlnKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0O1xuXG4gICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaChcbiAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nXCIsIGNsYXp6LCBcIicgc3R5bGU9J1wiLFxuICAgICAgICAgICAgXCJoZWlnaHQ6XCIsIGhlaWdodCwgXCJweDtcIixcbiAgICAgICAgICAgIFwidG9wOlwiLCB0b3AsIFwicHg7XCIsXG4gICAgICAgICAgICBcImxlZnQ6MDtyaWdodDowO1wiLCBleHRyYVN0eWxlIHx8IFwiXCIsIFwiJz48L2Rpdj5cIlxuICAgICAgICApO1xuICAgIH07XG5cbn0pLmNhbGwoTWFya2VyLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuTWFya2VyID0gTWFya2VyO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9sYXllci90ZXh0XCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9kb21cIixcImFjZS9saWIvbGFuZ1wiLFwiYWNlL2xpYi91c2VyYWdlbnRcIixcImFjZS9saWIvZXZlbnRfZW1pdHRlclwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBvb3AgPSBhY2VxdWlyZShcIi4uL2xpYi9vb3BcIik7XG52YXIgZG9tID0gYWNlcXVpcmUoXCIuLi9saWIvZG9tXCIpO1xudmFyIGxhbmcgPSBhY2VxdWlyZShcIi4uL2xpYi9sYW5nXCIpO1xudmFyIHVzZXJhZ2VudCA9IGFjZXF1aXJlKFwiLi4vbGliL3VzZXJhZ2VudFwiKTtcbnZhciBFdmVudEVtaXR0ZXIgPSBhY2VxdWlyZShcIi4uL2xpYi9ldmVudF9lbWl0dGVyXCIpLkV2ZW50RW1pdHRlcjtcblxudmFyIFRleHQgPSBmdW5jdGlvbihwYXJlbnRFbCkge1xuICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSBcImFjZV9sYXllciBhY2VfdGV4dC1sYXllclwiO1xuICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy4kdXBkYXRlRW9sQ2hhciA9IHRoaXMuJHVwZGF0ZUVvbENoYXIuYmluZCh0aGlzKTtcbn07XG5cbihmdW5jdGlvbigpIHtcblxuICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTtcblxuICAgIHRoaXMuRU9GX0NIQVIgPSBcIlxceEI2XCI7XG4gICAgdGhpcy5FT0xfQ0hBUl9MRiA9IFwiXFx4QUNcIjtcbiAgICB0aGlzLkVPTF9DSEFSX0NSTEYgPSBcIlxceGE0XCI7XG4gICAgdGhpcy5FT0xfQ0hBUiA9IHRoaXMuRU9MX0NIQVJfTEY7XG4gICAgdGhpcy5UQUJfQ0hBUiA9IFwiXFx1MjAxNFwiOyAvL1wiXFx1MjFFNVwiO1xuICAgIHRoaXMuU1BBQ0VfQ0hBUiA9IFwiXFx4QjdcIjtcbiAgICB0aGlzLiRwYWRkaW5nID0gMDtcblxuICAgIHRoaXMuJHVwZGF0ZUVvbENoYXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIEVPTF9DSEFSID0gdGhpcy5zZXNzaW9uLmRvYy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkgPT0gXCJcXG5cIlxuICAgICAgICAgICA/IHRoaXMuRU9MX0NIQVJfTEZcbiAgICAgICAgICAgOiB0aGlzLkVPTF9DSEFSX0NSTEY7XG4gICAgICAgIGlmICh0aGlzLkVPTF9DSEFSICE9IEVPTF9DSEFSKSB7XG4gICAgICAgICAgICB0aGlzLkVPTF9DSEFSID0gRU9MX0NIQVI7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnNldFBhZGRpbmcgPSBmdW5jdGlvbihwYWRkaW5nKSB7XG4gICAgICAgIHRoaXMuJHBhZGRpbmcgPSBwYWRkaW5nO1xuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUucGFkZGluZyA9IFwiMCBcIiArIHBhZGRpbmcgKyBcInB4XCI7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0TGluZUhlaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kZm9udE1ldHJpY3MuJGNoYXJhY3RlclNpemUuaGVpZ2h0IHx8IDA7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0Q2hhcmFjdGVyV2lkdGggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGZvbnRNZXRyaWNzLiRjaGFyYWN0ZXJTaXplLndpZHRoIHx8IDA7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLiRzZXRGb250TWV0cmljcyA9IGZ1bmN0aW9uKG1lYXN1cmUpIHtcbiAgICAgICAgdGhpcy4kZm9udE1ldHJpY3MgPSBtZWFzdXJlO1xuICAgICAgICB0aGlzLiRmb250TWV0cmljcy5vbihcImNoYW5nZUNoYXJhY3RlclNpemVcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsKFwiY2hhbmdlQ2hhcmFjdGVyU2l6ZVwiLCBlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy4kcG9sbFNpemVDaGFuZ2VzKCk7XG4gICAgfTtcblxuICAgIHRoaXMuY2hlY2tGb3JTaXplQ2hhbmdlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRmb250TWV0cmljcy5jaGVja0ZvclNpemVDaGFuZ2VzKCk7XG4gICAgfTtcbiAgICB0aGlzLiRwb2xsU2l6ZUNoYW5nZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyID0gdGhpcy4kZm9udE1ldHJpY3MuJHBvbGxTaXplQ2hhbmdlcygpO1xuICAgIH07XG4gICAgdGhpcy5zZXRTZXNzaW9uID0gZnVuY3Rpb24oc2Vzc2lvbikge1xuICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uO1xuICAgICAgICBpZiAoc2Vzc2lvbilcbiAgICAgICAgICAgIHRoaXMuJGNvbXB1dGVUYWJTdHJpbmcoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zaG93SW52aXNpYmxlcyA9IGZhbHNlO1xuICAgIHRoaXMuc2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbihzaG93SW52aXNpYmxlcykge1xuICAgICAgICBpZiAodGhpcy5zaG93SW52aXNpYmxlcyA9PSBzaG93SW52aXNpYmxlcylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICB0aGlzLnNob3dJbnZpc2libGVzID0gc2hvd0ludmlzaWJsZXM7XG4gICAgICAgIHRoaXMuJGNvbXB1dGVUYWJTdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIHRoaXMuZGlzcGxheUluZGVudEd1aWRlcyA9IHRydWU7XG4gICAgdGhpcy5zZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oZGlzcGxheSkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzID09IGRpc3BsYXkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzID0gZGlzcGxheTtcbiAgICAgICAgdGhpcy4kY29tcHV0ZVRhYlN0cmluZygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy4kdGFiU3RyaW5ncyA9IFtdO1xuICAgIHRoaXMub25DaGFuZ2VUYWJTaXplID1cbiAgICB0aGlzLiRjb21wdXRlVGFiU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB0YWJTaXplID0gdGhpcy5zZXNzaW9uLmdldFRhYlNpemUoKTtcbiAgICAgICAgdGhpcy50YWJTaXplID0gdGFiU2l6ZTtcbiAgICAgICAgdmFyIHRhYlN0ciA9IHRoaXMuJHRhYlN0cmluZ3MgPSBbMF07XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGFiU2l6ZSArIDE7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0ludmlzaWJsZXMpIHtcbiAgICAgICAgICAgICAgICB0YWJTdHIucHVzaChcIjxzcGFuIGNsYXNzPSdhY2VfaW52aXNpYmxlIGFjZV9pbnZpc2libGVfdGFiJz5cIlxuICAgICAgICAgICAgICAgICAgICArIGxhbmcuc3RyaW5nUmVwZWF0KHRoaXMuVEFCX0NIQVIsIGkpXG4gICAgICAgICAgICAgICAgICAgICsgXCI8L3NwYW4+XCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YWJTdHIucHVzaChsYW5nLnN0cmluZ1JlcGVhdChcIiBcIiwgaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXMpIHtcbiAgICAgICAgICAgIHRoaXMuJGluZGVudEd1aWRlUmUgPSAgL1xcc1xcU3wgXFx0fFxcdCB8XFxzJC87XG4gICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gXCJhY2VfaW5kZW50LWd1aWRlXCI7XG4gICAgICAgICAgICB2YXIgc3BhY2VDbGFzcyA9IFwiXCI7XG4gICAgICAgICAgICB2YXIgdGFiQ2xhc3MgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0ludmlzaWJsZXMpIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgYWNlX2ludmlzaWJsZVwiO1xuICAgICAgICAgICAgICAgIHNwYWNlQ2xhc3MgPSBcIiBhY2VfaW52aXNpYmxlX3NwYWNlXCI7XG4gICAgICAgICAgICAgICAgdGFiQ2xhc3MgPSBcIiBhY2VfaW52aXNpYmxlX3RhYlwiO1xuICAgICAgICAgICAgICAgIHZhciBzcGFjZUNvbnRlbnQgPSBsYW5nLnN0cmluZ1JlcGVhdCh0aGlzLlNQQUNFX0NIQVIsIHRoaXMudGFiU2l6ZSk7XG4gICAgICAgICAgICAgICAgdmFyIHRhYkNvbnRlbnQgPSBsYW5nLnN0cmluZ1JlcGVhdCh0aGlzLlRBQl9DSEFSLCB0aGlzLnRhYlNpemUpO1xuICAgICAgICAgICAgfSBlbHNle1xuICAgICAgICAgICAgICAgIHZhciBzcGFjZUNvbnRlbnQgPSBsYW5nLnN0cmluZ1JlcGVhdChcIiBcIiwgdGhpcy50YWJTaXplKTtcbiAgICAgICAgICAgICAgICB2YXIgdGFiQ29udGVudCA9IHNwYWNlQ29udGVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy4kdGFiU3RyaW5nc1tcIiBcIl0gPSBcIjxzcGFuIGNsYXNzPSdcIiArIGNsYXNzTmFtZSArIHNwYWNlQ2xhc3MgKyBcIic+XCIgKyBzcGFjZUNvbnRlbnQgKyBcIjwvc3Bhbj5cIjtcbiAgICAgICAgICAgIHRoaXMuJHRhYlN0cmluZ3NbXCJcXHRcIl0gPSBcIjxzcGFuIGNsYXNzPSdcIiArIGNsYXNzTmFtZSArIHRhYkNsYXNzICsgXCInPlwiICsgdGFiQ29udGVudCArIFwiPC9zcGFuPlwiO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlTGluZXMgPSBmdW5jdGlvbihjb25maWcsIGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXN0Um93ICE9IGNvbmZpZy5sYXN0Um93IHx8XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5maXJzdFJvdyAhPSBjb25maWcuZmlyc3RSb3cpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGluZXMoY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuICAgICAgICB2YXIgZmlyc3QgPSBNYXRoLm1heChmaXJzdFJvdywgY29uZmlnLmZpcnN0Um93KTtcbiAgICAgICAgdmFyIGxhc3QgPSBNYXRoLm1pbihsYXN0Um93LCBjb25maWcubGFzdFJvdyk7XG5cbiAgICAgICAgdmFyIGxpbmVFbGVtZW50cyA9IHRoaXMuZWxlbWVudC5jaGlsZE5vZGVzO1xuICAgICAgICB2YXIgbGluZUVsZW1lbnRzSWR4ID0gMDtcblxuICAgICAgICBmb3IgKHZhciByb3cgPSBjb25maWcuZmlyc3RSb3c7IHJvdyA8IGZpcnN0OyByb3crKykge1xuICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKHJvdyk7XG4gICAgICAgICAgICBpZiAoZm9sZExpbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUuY29udGFpbnNSb3coZmlyc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZm9sZExpbmUuc3RhcnQucm93O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb3cgPSBmb2xkTGluZS5lbmQucm93O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVFbGVtZW50c0lkeCArKztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByb3cgPSBmaXJzdDtcbiAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShyb3cpO1xuICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTtcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHJvdyA+IGZvbGRTdGFydCkge1xuICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5yb3crMTtcbiAgICAgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUocm93LCBmb2xkTGluZSk7XG4gICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOkluZmluaXR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvdyA+IGxhc3QpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIHZhciBsaW5lRWxlbWVudCA9IGxpbmVFbGVtZW50c1tsaW5lRWxlbWVudHNJZHgrK107XG4gICAgICAgICAgICBpZiAobGluZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuJHJlbmRlckxpbmUoXG4gICAgICAgICAgICAgICAgICAgIGh0bWwsIHJvdywgIXRoaXMuJHVzZUxpbmVHcm91cHMoKSwgcm93ID09IGZvbGRTdGFydCA/IGZvbGRMaW5lIDogZmFsc2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGxpbmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0ICogdGhpcy5zZXNzaW9uLmdldFJvd0xlbmd0aChyb3cpICsgXCJweFwiO1xuICAgICAgICAgICAgICAgIGxpbmVFbGVtZW50LmlubmVySFRNTCA9IGh0bWwuam9pbihcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdysrO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuc2Nyb2xsTGluZXMgPSBmdW5jdGlvbihjb25maWcpIHtcbiAgICAgICAgdmFyIG9sZENvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuICAgICAgICBpZiAoIW9sZENvbmZpZyB8fCBvbGRDb25maWcubGFzdFJvdyA8IGNvbmZpZy5maXJzdFJvdylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShjb25maWcpO1xuXG4gICAgICAgIGlmIChjb25maWcubGFzdFJvdyA8IG9sZENvbmZpZy5maXJzdFJvdylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShjb25maWcpO1xuXG4gICAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudDtcbiAgICAgICAgaWYgKG9sZENvbmZpZy5maXJzdFJvdyA8IGNvbmZpZy5maXJzdFJvdylcbiAgICAgICAgICAgIGZvciAodmFyIHJvdz10aGlzLnNlc3Npb24uZ2V0Rm9sZGVkUm93Q291bnQob2xkQ29uZmlnLmZpcnN0Um93LCBjb25maWcuZmlyc3RSb3cgLSAxKTsgcm93PjA7IHJvdy0tKVxuICAgICAgICAgICAgICAgIGVsLnJlbW92ZUNoaWxkKGVsLmZpcnN0Q2hpbGQpO1xuXG4gICAgICAgIGlmIChvbGRDb25maWcubGFzdFJvdyA+IGNvbmZpZy5sYXN0Um93KVxuICAgICAgICAgICAgZm9yICh2YXIgcm93PXRoaXMuc2Vzc2lvbi5nZXRGb2xkZWRSb3dDb3VudChjb25maWcubGFzdFJvdyArIDEsIG9sZENvbmZpZy5sYXN0Um93KTsgcm93PjA7IHJvdy0tKVxuICAgICAgICAgICAgICAgIGVsLnJlbW92ZUNoaWxkKGVsLmxhc3RDaGlsZCk7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5maXJzdFJvdyA8IG9sZENvbmZpZy5maXJzdFJvdykge1xuICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gdGhpcy4kcmVuZGVyTGluZXNGcmFnbWVudChjb25maWcsIGNvbmZpZy5maXJzdFJvdywgb2xkQ29uZmlnLmZpcnN0Um93IC0gMSk7XG4gICAgICAgICAgICBpZiAoZWwuZmlyc3RDaGlsZClcbiAgICAgICAgICAgICAgICBlbC5pbnNlcnRCZWZvcmUoZnJhZ21lbnQsIGVsLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGVsLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcubGFzdFJvdyA+IG9sZENvbmZpZy5sYXN0Um93KSB7XG4gICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSB0aGlzLiRyZW5kZXJMaW5lc0ZyYWdtZW50KGNvbmZpZywgb2xkQ29uZmlnLmxhc3RSb3cgKyAxLCBjb25maWcubGFzdFJvdyk7XG4gICAgICAgICAgICBlbC5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy4kcmVuZGVyTGluZXNGcmFnbWVudCA9IGZ1bmN0aW9uKGNvbmZpZywgZmlyc3RSb3csIGxhc3RSb3cpIHtcbiAgICAgICAgdmFyIGZyYWdtZW50ID0gdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICB2YXIgcm93ID0gZmlyc3RSb3c7XG4gICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUocm93KTtcbiAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7XG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGlmIChyb3cgPiBmb2xkU3RhcnQpIHtcbiAgICAgICAgICAgICAgICByb3cgPSBmb2xkTGluZS5lbmQucm93KzE7XG4gICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHJvdywgZm9sZExpbmUpO1xuICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm93ID4gbGFzdFJvdylcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICAgICAgICB2YXIgaHRtbCA9IFtdO1xuICAgICAgICAgICAgdGhpcy4kcmVuZGVyTGluZShodG1sLCByb3csIGZhbHNlLCByb3cgPT0gZm9sZFN0YXJ0ID8gZm9sZExpbmUgOiBmYWxzZSk7XG4gICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbC5qb2luKFwiXCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMuJHVzZUxpbmVHcm91cHMoKSkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSAnYWNlX2xpbmVfZ3JvdXAnO1xuICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0ICogdGhpcy5zZXNzaW9uLmdldFJvd0xlbmd0aChyb3cpICsgXCJweFwiO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdoaWxlKGNvbnRhaW5lci5maXJzdENoaWxkKVxuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJvdysrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmcmFnbWVudDtcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbihjb25maWcpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICAgICAgdmFyIGh0bWwgPSBbXTtcbiAgICAgICAgdmFyIGZpcnN0Um93ID0gY29uZmlnLmZpcnN0Um93LCBsYXN0Um93ID0gY29uZmlnLmxhc3RSb3c7XG5cbiAgICAgICAgdmFyIHJvdyA9IGZpcnN0Um93O1xuICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHJvdyk7XG4gICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5O1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBpZiAocm93ID4gZm9sZFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcm93ID0gZm9sZExpbmUuZW5kLnJvdysxO1xuICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShyb3csIGZvbGRMaW5lKTtcbiAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6SW5maW5pdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm93ID4gbGFzdFJvdylcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgaWYgKHRoaXMuJHVzZUxpbmVHcm91cHMoKSlcbiAgICAgICAgICAgICAgICBodG1sLnB1c2goXCI8ZGl2IGNsYXNzPSdhY2VfbGluZV9ncm91cCcgc3R5bGU9J2hlaWdodDpcIiwgY29uZmlnLmxpbmVIZWlnaHQqdGhpcy5zZXNzaW9uLmdldFJvd0xlbmd0aChyb3cpLCBcInB4Jz5cIik7XG5cbiAgICAgICAgICAgIHRoaXMuJHJlbmRlckxpbmUoaHRtbCwgcm93LCBmYWxzZSwgcm93ID09IGZvbGRTdGFydCA/IGZvbGRMaW5lIDogZmFsc2UpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy4kdXNlTGluZUdyb3VwcygpKVxuICAgICAgICAgICAgICAgIGh0bWwucHVzaChcIjwvZGl2PlwiKTsgLy8gZW5kIHRoZSBsaW5lIGdyb3VwXG5cbiAgICAgICAgICAgIHJvdysrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSBodG1sLmpvaW4oXCJcIik7XG4gICAgfTtcblxuICAgIHRoaXMuJHRleHRUb2tlbiA9IHtcbiAgICAgICAgXCJ0ZXh0XCI6IHRydWUsXG4gICAgICAgIFwicnBhcmVuXCI6IHRydWUsXG4gICAgICAgIFwibHBhcmVuXCI6IHRydWVcbiAgICB9O1xuXG4gICAgdGhpcy4kcmVuZGVyVG9rZW4gPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sIHRva2VuLCB2YWx1ZSkge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciByZXBsYWNlUmVnID0gL1xcdHwmfDx8PnwoICspfChbXFx4MDAtXFx4MWZcXHg4MC1cXHhhMFxceGFkXFx1MTY4MFxcdTE4MEVcXHUyMDAwLVxcdTIwMGZcXHUyMDI4XFx1MjAyOVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdUZFRkZcXHVGRkY5LVxcdUZGRkNdKXxbXFx1MTEwMC1cXHUxMTVGXFx1MTFBMy1cXHUxMUE3XFx1MTFGQS1cXHUxMUZGXFx1MjMyOS1cXHUyMzJBXFx1MkU4MC1cXHUyRTk5XFx1MkU5Qi1cXHUyRUYzXFx1MkYwMC1cXHUyRkQ1XFx1MkZGMC1cXHUyRkZCXFx1MzAwMC1cXHUzMDNFXFx1MzA0MS1cXHUzMDk2XFx1MzA5OS1cXHUzMEZGXFx1MzEwNS1cXHUzMTJEXFx1MzEzMS1cXHUzMThFXFx1MzE5MC1cXHUzMUJBXFx1MzFDMC1cXHUzMUUzXFx1MzFGMC1cXHUzMjFFXFx1MzIyMC1cXHUzMjQ3XFx1MzI1MC1cXHUzMkZFXFx1MzMwMC1cXHU0REJGXFx1NEUwMC1cXHVBNDhDXFx1QTQ5MC1cXHVBNEM2XFx1QTk2MC1cXHVBOTdDXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQUZGXFx1RkUxMC1cXHVGRTE5XFx1RkUzMC1cXHVGRTUyXFx1RkU1NC1cXHVGRTY2XFx1RkU2OC1cXHVGRTZCXFx1RkYwMS1cXHVGRjYwXFx1RkZFMC1cXHVGRkU2XXxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdL2c7XG4gICAgICAgIHZhciByZXBsYWNlRnVuYyA9IGZ1bmN0aW9uKGMsIGEsIGIsIHRhYklkeCwgaWR4NCkge1xuICAgICAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zaG93SW52aXNpYmxlc1xuICAgICAgICAgICAgICAgICAgICA/IFwiPHNwYW4gY2xhc3M9J2FjZV9pbnZpc2libGUgYWNlX2ludmlzaWJsZV9zcGFjZSc+XCIgKyBsYW5nLnN0cmluZ1JlcGVhdChzZWxmLlNQQUNFX0NIQVIsIGMubGVuZ3RoKSArIFwiPC9zcGFuPlwiXG4gICAgICAgICAgICAgICAgICAgIDogYztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSBcIiZcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIiYjMzg7XCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gXCI8XCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCImIzYwO1wiO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjID09IFwiPlwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiJiM2MjtcIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSBcIlxcdFwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhYlNpemUgPSBzZWxmLnNlc3Npb24uZ2V0U2NyZWVuVGFiU2l6ZShzY3JlZW5Db2x1bW4gKyB0YWJJZHgpO1xuICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSB0YWJTaXplIC0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi4kdGFiU3RyaW5nc1t0YWJTaXplXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSBcIlxcdTMwMDBcIikge1xuICAgICAgICAgICAgICAgIHZhciBjbGFzc1RvVXNlID0gc2VsZi5zaG93SW52aXNpYmxlcyA/IFwiYWNlX2NqayBhY2VfaW52aXNpYmxlIGFjZV9pbnZpc2libGVfc3BhY2VcIiA6IFwiYWNlX2Nqa1wiO1xuICAgICAgICAgICAgICAgIHZhciBzcGFjZSA9IHNlbGYuc2hvd0ludmlzaWJsZXMgPyBzZWxmLlNQQUNFX0NIQVIgOiBcIlwiO1xuICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSAxO1xuICAgICAgICAgICAgICAgIHJldHVybiBcIjxzcGFuIGNsYXNzPSdcIiArIGNsYXNzVG9Vc2UgKyBcIicgc3R5bGU9J3dpZHRoOlwiICtcbiAgICAgICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLmNoYXJhY3RlcldpZHRoICogMikgK1xuICAgICAgICAgICAgICAgICAgICBcInB4Jz5cIiArIHNwYWNlICsgXCI8L3NwYW4+XCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCI8c3BhbiBjbGFzcz0nYWNlX2ludmlzaWJsZSBhY2VfaW52aXNpYmxlX3NwYWNlIGFjZV9pbnZhbGlkJz5cIiArIHNlbGYuU1BBQ0VfQ0hBUiArIFwiPC9zcGFuPlwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gKz0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCI8c3BhbiBjbGFzcz0nYWNlX2Nqaycgc3R5bGU9J3dpZHRoOlwiICtcbiAgICAgICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLmNoYXJhY3RlcldpZHRoICogMikgK1xuICAgICAgICAgICAgICAgICAgICBcInB4Jz5cIiArIGMgKyBcIjwvc3Bhbj5cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgb3V0cHV0ID0gdmFsdWUucmVwbGFjZShyZXBsYWNlUmVnLCByZXBsYWNlRnVuYyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLiR0ZXh0VG9rZW5bdG9rZW4udHlwZV0pIHtcbiAgICAgICAgICAgIHZhciBjbGFzc2VzID0gXCJhY2VfXCIgKyB0b2tlbi50eXBlLnJlcGxhY2UoL1xcLi9nLCBcIiBhY2VfXCIpO1xuICAgICAgICAgICAgdmFyIHN0eWxlID0gXCJcIjtcbiAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09IFwiZm9sZFwiKVxuICAgICAgICAgICAgICAgIHN0eWxlID0gXCIgc3R5bGU9J3dpZHRoOlwiICsgKHRva2VuLnZhbHVlLmxlbmd0aCAqIHRoaXMuY29uZmlnLmNoYXJhY3RlcldpZHRoKSArIFwicHg7JyBcIjtcbiAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaChcIjxzcGFuIGNsYXNzPSdcIiwgY2xhc3NlcywgXCInXCIsIHN0eWxlLCBcIj5cIiwgb3V0cHV0LCBcIjwvc3Bhbj5cIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2gob3V0cHV0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NyZWVuQ29sdW1uICsgdmFsdWUubGVuZ3RoO1xuICAgIH07XG5cbiAgICB0aGlzLnJlbmRlckluZGVudEd1aWRlID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwgdmFsdWUsIG1heCkge1xuICAgICAgICB2YXIgY29scyA9IHZhbHVlLnNlYXJjaCh0aGlzLiRpbmRlbnRHdWlkZVJlKTtcbiAgICAgICAgaWYgKGNvbHMgPD0gMCB8fCBjb2xzID49IG1heClcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlWzBdID09IFwiIFwiKSB7XG4gICAgICAgICAgICBjb2xzIC09IGNvbHMgJSB0aGlzLnRhYlNpemU7XG4gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2gobGFuZy5zdHJpbmdSZXBlYXQodGhpcy4kdGFiU3RyaW5nc1tcIiBcIl0sIGNvbHMvdGhpcy50YWJTaXplKSk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyKGNvbHMpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlWzBdID09IFwiXFx0XCIpIHtcbiAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaChsYW5nLnN0cmluZ1JlcGVhdCh0aGlzLiR0YWJTdHJpbmdzW1wiXFx0XCJdLCBjb2xzKSk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyKGNvbHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy4kcmVuZGVyV3JhcHBlZExpbmUgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCB0b2tlbnMsIHNwbGl0cywgb25seUNvbnRlbnRzKSB7XG4gICAgICAgIHZhciBjaGFycyA9IDA7XG4gICAgICAgIHZhciBzcGxpdCA9IDA7XG4gICAgICAgIHZhciBzcGxpdENoYXJzID0gc3BsaXRzWzBdO1xuICAgICAgICB2YXIgc2NyZWVuQ29sdW1uID0gMDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgICAgICBpZiAoaSA9PSAwICYmIHRoaXMuZGlzcGxheUluZGVudEd1aWRlcykge1xuICAgICAgICAgICAgICAgIGNoYXJzID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5yZW5kZXJJbmRlbnRHdWlkZShzdHJpbmdCdWlsZGVyLCB2YWx1ZSwgc3BsaXRDaGFycyk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2hhcnMgLT0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2hhcnMgKyB2YWx1ZS5sZW5ndGggPCBzcGxpdENoYXJzKSB7XG4gICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uID0gdGhpcy4kcmVuZGVyVG9rZW4oc3RyaW5nQnVpbGRlciwgc2NyZWVuQ29sdW1uLCB0b2tlbiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGNoYXJzICs9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJzICsgdmFsdWUubGVuZ3RoID49IHNwbGl0Q2hhcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uID0gdGhpcy4kcmVuZGVyVG9rZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiwgdmFsdWUuc3Vic3RyaW5nKDAsIHNwbGl0Q2hhcnMgLSBjaGFycylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoc3BsaXRDaGFycyAtIGNoYXJzKTtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnMgPSBzcGxpdENoYXJzO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghb25seUNvbnRlbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goXCI8L2Rpdj5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J2FjZV9saW5lJyBzdHlsZT0naGVpZ2h0OlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmxpbmVIZWlnaHQsIFwicHgnPlwiXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKGxhbmcuc3RyaW5nUmVwZWF0KFwiXFx4YTBcIiwgc3BsaXRzLmluZGVudCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0ICsrO1xuICAgICAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICBzcGxpdENoYXJzID0gc3BsaXRzW3NwbGl0XSB8fCBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnMgKz0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRyZW5kZXJUb2tlbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIsIHNjcmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuJHJlbmRlclNpbXBsZUxpbmUgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCB0b2tlbnMpIHtcbiAgICAgICAgdmFyIHNjcmVlbkNvbHVtbiA9IDA7XG4gICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1swXTtcbiAgICAgICAgdmFyIHZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXMpXG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMucmVuZGVySW5kZW50R3VpZGUoc3RyaW5nQnVpbGRlciwgdmFsdWUpO1xuICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRyZW5kZXJUb2tlbihzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sIHRva2VuLCB2YWx1ZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRyZW5kZXJUb2tlbihzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sIHRva2VuLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuJHJlbmRlckxpbmUgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCByb3csIG9ubHlDb250ZW50cywgZm9sZExpbmUpIHtcbiAgICAgICAgaWYgKCFmb2xkTGluZSAmJiBmb2xkTGluZSAhPSBmYWxzZSlcbiAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKHJvdyk7XG5cbiAgICAgICAgaWYgKGZvbGRMaW5lKVxuICAgICAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuJGdldEZvbGRMaW5lVG9rZW5zKHJvdywgZm9sZExpbmUpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5zZXNzaW9uLmdldFRva2Vucyhyb3cpO1xuXG5cbiAgICAgICAgaWYgKCFvbmx5Q29udGVudHMpIHtcbiAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaChcbiAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J2FjZV9saW5lJyBzdHlsZT0naGVpZ2h0OlwiLCBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubGluZUhlaWdodCAqIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHVzZUxpbmVHcm91cHMoKSA/IDEgOnRoaXMuc2Vzc2lvbi5nZXRSb3dMZW5ndGgocm93KVxuICAgICAgICAgICAgICAgICAgICApLCBcInB4Jz5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgc3BsaXRzID0gdGhpcy5zZXNzaW9uLmdldFJvd1NwbGl0RGF0YShyb3cpO1xuICAgICAgICAgICAgaWYgKHNwbGl0cyAmJiBzcGxpdHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHRoaXMuJHJlbmRlcldyYXBwZWRMaW5lKHN0cmluZ0J1aWxkZXIsIHRva2Vucywgc3BsaXRzLCBvbmx5Q29udGVudHMpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuJHJlbmRlclNpbXBsZUxpbmUoc3RyaW5nQnVpbGRlciwgdG9rZW5zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNob3dJbnZpc2libGVzKSB7XG4gICAgICAgICAgICBpZiAoZm9sZExpbmUpXG4gICAgICAgICAgICAgICAgcm93ID0gZm9sZExpbmUuZW5kLnJvdztcblxuICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKFxuICAgICAgICAgICAgICAgIFwiPHNwYW4gY2xhc3M9J2FjZV9pbnZpc2libGUgYWNlX2ludmlzaWJsZV9lb2wnPlwiLFxuICAgICAgICAgICAgICAgIHJvdyA9PSB0aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCkgLSAxID8gdGhpcy5FT0ZfQ0hBUiA6IHRoaXMuRU9MX0NIQVIsXG4gICAgICAgICAgICAgICAgXCI8L3NwYW4+XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvbmx5Q29udGVudHMpXG4gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goXCI8L2Rpdj5cIik7XG4gICAgfTtcblxuICAgIHRoaXMuJGdldEZvbGRMaW5lVG9rZW5zID0gZnVuY3Rpb24ocm93LCBmb2xkTGluZSkge1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIHJlbmRlclRva2VucyA9IFtdO1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZFRva2Vucyh0b2tlbnMsIGZyb20sIHRvKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gMCwgY29sID0gMDtcbiAgICAgICAgICAgIHdoaWxlICgoY29sICsgdG9rZW5zW2lkeF0udmFsdWUubGVuZ3RoKSA8IGZyb20pIHtcbiAgICAgICAgICAgICAgICBjb2wgKz0gdG9rZW5zW2lkeF0udmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlkeCsrO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlkeCA9PSB0b2tlbnMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sICE9IGZyb20pIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0b2tlbnNbaWR4XS52YWx1ZS5zdWJzdHJpbmcoZnJvbSAtIGNvbCk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+ICh0byAtIGZyb20pKVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCB0byAtIGZyb20pO1xuXG4gICAgICAgICAgICAgICAgcmVuZGVyVG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiB0b2tlbnNbaWR4XS50eXBlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbCA9IGZyb20gKyB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWR4ICs9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdoaWxlIChjb2wgPCB0byAmJiBpZHggPCB0b2tlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdG9rZW5zW2lkeF0udmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCArIGNvbCA+IHRvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRva2Vuc1tpZHhdLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUuc3Vic3RyaW5nKDAsIHRvIC0gY29sKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVG9rZW5zLnB1c2godG9rZW5zW2lkeF0pO1xuICAgICAgICAgICAgICAgIGNvbCArPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWR4ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTtcbiAgICAgICAgZm9sZExpbmUud2FsayhmdW5jdGlvbihwbGFjZWhvbGRlciwgcm93LCBjb2x1bW4sIGxhc3RDb2x1bW4sIGlzTmV3Um93KSB7XG4gICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlbmRlclRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJmb2xkXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNOZXdSb3cpXG4gICAgICAgICAgICAgICAgICAgIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgYWRkVG9rZW5zKHRva2VucywgbGFzdENvbHVtbiwgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZm9sZExpbmUuZW5kLnJvdywgdGhpcy5zZXNzaW9uLmdldExpbmUoZm9sZExpbmUuZW5kLnJvdykubGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4gcmVuZGVyVG9rZW5zO1xuICAgIH07XG5cbiAgICB0aGlzLiR1c2VMaW5lR3JvdXBzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXIpO1xuICAgICAgICBpZiAodGhpcy4kbWVhc3VyZU5vZGUpXG4gICAgICAgICAgICB0aGlzLiRtZWFzdXJlTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuJG1lYXN1cmVOb2RlKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuJG1lYXN1cmVOb2RlO1xuICAgIH07XG5cbn0pLmNhbGwoVGV4dC5wcm90b3R5cGUpO1xuXG5leHBvcnRzLlRleHQgPSBUZXh0O1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9sYXllci9jdXJzb3JcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvZG9tXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGRvbSA9IGFjZXF1aXJlKFwiLi4vbGliL2RvbVwiKTtcbnZhciBpc0lFODtcblxudmFyIEN1cnNvciA9IGZ1bmN0aW9uKHBhcmVudEVsKSB7XG4gICAgdGhpcy5lbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9IFwiYWNlX2xheWVyIGFjZV9jdXJzb3ItbGF5ZXJcIjtcbiAgICBwYXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuICAgIFxuICAgIGlmIChpc0lFOCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICBpc0lFOCA9ICEoXCJvcGFjaXR5XCIgaW4gdGhpcy5lbGVtZW50LnN0eWxlKTtcblxuICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5pc0JsaW5raW5nID0gdHJ1ZTtcbiAgICB0aGlzLmJsaW5rSW50ZXJ2YWwgPSAxMDAwO1xuICAgIHRoaXMuc21vb3RoQmxpbmtpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuY3Vyc29ycyA9IFtdO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5hZGRDdXJzb3IoKTtcbiAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCBcImFjZV9oaWRkZW4tY3Vyc29yc1wiKTtcbiAgICB0aGlzLiR1cGRhdGVDdXJzb3JzID0gKGlzSUU4XG4gICAgICAgID8gdGhpcy4kdXBkYXRlVmlzaWJpbGl0eVxuICAgICAgICA6IHRoaXMuJHVwZGF0ZU9wYWNpdHkpLmJpbmQodGhpcyk7XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgXG4gICAgdGhpcy4kdXBkYXRlVmlzaWJpbGl0eSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB2YXIgY3Vyc29ycyA9IHRoaXMuY3Vyc29ycztcbiAgICAgICAgZm9yICh2YXIgaSA9IGN1cnNvcnMubGVuZ3RoOyBpLS07IClcbiAgICAgICAgICAgIGN1cnNvcnNbaV0uc3R5bGUudmlzaWJpbGl0eSA9IHZhbCA/IFwiXCIgOiBcImhpZGRlblwiO1xuICAgIH07XG4gICAgdGhpcy4kdXBkYXRlT3BhY2l0eSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB2YXIgY3Vyc29ycyA9IHRoaXMuY3Vyc29ycztcbiAgICAgICAgZm9yICh2YXIgaSA9IGN1cnNvcnMubGVuZ3RoOyBpLS07IClcbiAgICAgICAgICAgIGN1cnNvcnNbaV0uc3R5bGUub3BhY2l0eSA9IHZhbCA/IFwiXCIgOiBcIjBcIjtcbiAgICB9O1xuICAgIFxuXG4gICAgdGhpcy4kcGFkZGluZyA9IDA7XG4gICAgdGhpcy5zZXRQYWRkaW5nID0gZnVuY3Rpb24ocGFkZGluZykge1xuICAgICAgICB0aGlzLiRwYWRkaW5nID0gcGFkZGluZztcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRTZXNzaW9uID0gZnVuY3Rpb24oc2Vzc2lvbikge1xuICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uO1xuICAgIH07XG5cbiAgICB0aGlzLnNldEJsaW5raW5nID0gZnVuY3Rpb24oYmxpbmtpbmcpIHtcbiAgICAgICAgaWYgKGJsaW5raW5nICE9IHRoaXMuaXNCbGlua2luZyl7XG4gICAgICAgICAgICB0aGlzLmlzQmxpbmtpbmcgPSBibGlua2luZztcbiAgICAgICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zZXRCbGlua0ludGVydmFsID0gZnVuY3Rpb24oYmxpbmtJbnRlcnZhbCkge1xuICAgICAgICBpZiAoYmxpbmtJbnRlcnZhbCAhPSB0aGlzLmJsaW5rSW50ZXJ2YWwpe1xuICAgICAgICAgICAgdGhpcy5ibGlua0ludGVydmFsID0gYmxpbmtJbnRlcnZhbDtcbiAgICAgICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zZXRTbW9vdGhCbGlua2luZyA9IGZ1bmN0aW9uKHNtb290aEJsaW5raW5nKSB7XG4gICAgICAgIGlmIChzbW9vdGhCbGlua2luZyAhPSB0aGlzLnNtb290aEJsaW5raW5nICYmICFpc0lFOCkge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhCbGlua2luZyA9IHNtb290aEJsaW5raW5nO1xuICAgICAgICAgICAgZG9tLnNldENzc0NsYXNzKHRoaXMuZWxlbWVudCwgXCJhY2Vfc21vb3RoLWJsaW5raW5nXCIsIHNtb290aEJsaW5raW5nKTtcbiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZUN1cnNvcnModHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLiR1cGRhdGVDdXJzb3JzID0gKHRoaXMuJHVwZGF0ZU9wYWNpdHkpLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnJlc3RhcnRUaW1lcigpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuYWRkQ3Vyc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbCA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBlbC5jbGFzc05hbWUgPSBcImFjZV9jdXJzb3JcIjtcbiAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGVsKTtcbiAgICAgICAgdGhpcy5jdXJzb3JzLnB1c2goZWwpO1xuICAgICAgICByZXR1cm4gZWw7XG4gICAgfTtcblxuICAgIHRoaXMucmVtb3ZlQ3Vyc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnNvcnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5jdXJzb3JzLnBvcCgpO1xuICAgICAgICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XG4gICAgICAgICAgICByZXR1cm4gZWw7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5oaWRlQ3Vyc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsIFwiYWNlX2hpZGRlbi1jdXJzb3JzXCIpO1xuICAgICAgICB0aGlzLnJlc3RhcnRUaW1lcigpO1xuICAgIH07XG5cbiAgICB0aGlzLnNob3dDdXJzb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5pc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCBcImFjZV9oaWRkZW4tY3Vyc29yc1wiKTtcbiAgICAgICAgdGhpcy5yZXN0YXJ0VGltZXIoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZXN0YXJ0VGltZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHVwZGF0ZSA9IHRoaXMuJHVwZGF0ZUN1cnNvcnM7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKTtcbiAgICAgICAgaWYgKHRoaXMuc21vb3RoQmxpbmtpbmcpIHtcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsIFwiYWNlX3Ntb290aC1ibGlua2luZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdXBkYXRlKHRydWUpO1xuXG4gICAgICAgIGlmICghdGhpcy5pc0JsaW5raW5nIHx8ICF0aGlzLmJsaW5rSW50ZXJ2YWwgfHwgIXRoaXMuaXNWaXNpYmxlKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLnNtb290aEJsaW5raW5nKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwgXCJhY2Vfc21vb3RoLWJsaW5raW5nXCIpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdmFyIGJsaW5rID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMudGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUoZmFsc2UpO1xuICAgICAgICAgICAgfSwgMC42ICogdGhpcy5ibGlua0ludGVydmFsKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdXBkYXRlKHRydWUpO1xuICAgICAgICAgICAgYmxpbmsoKTtcbiAgICAgICAgfSwgdGhpcy5ibGlua0ludGVydmFsKTtcblxuICAgICAgICBibGluaygpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFBpeGVsUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbiwgb25TY3JlZW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZyB8fCAhdGhpcy5zZXNzaW9uKVxuICAgICAgICAgICAgcmV0dXJuIHtsZWZ0IDogMCwgdG9wIDogMH07XG5cbiAgICAgICAgaWYgKCFwb3NpdGlvbilcbiAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5nZXRDdXJzb3IoKTtcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24ocG9zaXRpb24pO1xuICAgICAgICB2YXIgY3Vyc29yTGVmdCA9IHRoaXMuJHBhZGRpbmcgKyAodGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5pc0JpZGlSb3cocG9zLnJvdywgcG9zaXRpb24ucm93KVxuICAgICAgICAgICAgPyB0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmdldFBvc0xlZnQocG9zLmNvbHVtbilcbiAgICAgICAgICAgIDogcG9zLmNvbHVtbiAqIHRoaXMuY29uZmlnLmNoYXJhY3RlcldpZHRoKTtcblxuICAgICAgICB2YXIgY3Vyc29yVG9wID0gKHBvcy5yb3cgLSAob25TY3JlZW4gPyB0aGlzLmNvbmZpZy5maXJzdFJvd1NjcmVlbiA6IDApKSAqXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5saW5lSGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiB7bGVmdCA6IGN1cnNvckxlZnQsIHRvcCA6IGN1cnNvclRvcH07XG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlID0gZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuXG4gICAgICAgIHZhciBzZWxlY3Rpb25zID0gdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzO1xuICAgICAgICB2YXIgaSA9IDAsIGN1cnNvckluZGV4ID0gMDtcblxuICAgICAgICBpZiAoc2VsZWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdGlvbnMubGVuZ3RoID09PSAwKXtcbiAgICAgICAgICAgIHNlbGVjdGlvbnMgPSBbe2N1cnNvcjogbnVsbH1dO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBzZWxlY3Rpb25zLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgdmFyIHBpeGVsUG9zID0gdGhpcy5nZXRQaXhlbFBvc2l0aW9uKHNlbGVjdGlvbnNbaV0uY3Vyc29yLCB0cnVlKTtcbiAgICAgICAgICAgIGlmICgocGl4ZWxQb3MudG9wID4gY29uZmlnLmhlaWdodCArIGNvbmZpZy5vZmZzZXQgfHxcbiAgICAgICAgICAgICAgICAgcGl4ZWxQb3MudG9wIDwgMCkgJiYgaSA+IDEpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHN0eWxlID0gKHRoaXMuY3Vyc29yc1tjdXJzb3JJbmRleCsrXSB8fCB0aGlzLmFkZEN1cnNvcigpKS5zdHlsZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCF0aGlzLmRyYXdDdXJzb3IpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5sZWZ0ID0gcGl4ZWxQb3MubGVmdCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICBzdHlsZS50b3AgPSBwaXhlbFBvcy50b3AgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgc3R5bGUud2lkdGggPSBjb25maWcuY2hhcmFjdGVyV2lkdGggKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgc3R5bGUuaGVpZ2h0ID0gY29uZmlnLmxpbmVIZWlnaHQgKyBcInB4XCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0N1cnNvcihzdHlsZSwgcGl4ZWxQb3MsIGNvbmZpZywgc2VsZWN0aW9uc1tpXSwgdGhpcy5zZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodGhpcy5jdXJzb3JzLmxlbmd0aCA+IGN1cnNvckluZGV4KVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDdXJzb3IoKTtcblxuICAgICAgICB2YXIgb3ZlcndyaXRlID0gdGhpcy5zZXNzaW9uLmdldE92ZXJ3cml0ZSgpO1xuICAgICAgICB0aGlzLiRzZXRPdmVyd3JpdGUob3ZlcndyaXRlKTtcbiAgICAgICAgdGhpcy4kcGl4ZWxQb3MgPSBwaXhlbFBvcztcbiAgICAgICAgdGhpcy5yZXN0YXJ0VGltZXIoKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuZHJhd0N1cnNvciA9IG51bGw7XG5cbiAgICB0aGlzLiRzZXRPdmVyd3JpdGUgPSBmdW5jdGlvbihvdmVyd3JpdGUpIHtcbiAgICAgICAgaWYgKG92ZXJ3cml0ZSAhPSB0aGlzLm92ZXJ3cml0ZSkge1xuICAgICAgICAgICAgdGhpcy5vdmVyd3JpdGUgPSBvdmVyd3JpdGU7XG4gICAgICAgICAgICBpZiAob3ZlcndyaXRlKVxuICAgICAgICAgICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsIFwiYWNlX292ZXJ3cml0ZS1jdXJzb3JzXCIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsIFwiYWNlX292ZXJ3cml0ZS1jdXJzb3JzXCIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZCk7XG4gICAgfTtcblxufSkuY2FsbChDdXJzb3IucHJvdG90eXBlKTtcblxuZXhwb3J0cy5DdXJzb3IgPSBDdXJzb3I7XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL3Njcm9sbGJhclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9vb3BcIixcImFjZS9saWIvZG9tXCIsXCJhY2UvbGliL2V2ZW50XCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgb29wID0gYWNlcXVpcmUoXCIuL2xpYi9vb3BcIik7XG52YXIgZG9tID0gYWNlcXVpcmUoXCIuL2xpYi9kb21cIik7XG52YXIgZXZlbnQgPSBhY2VxdWlyZShcIi4vbGliL2V2ZW50XCIpO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi9saWIvZXZlbnRfZW1pdHRlclwiKS5FdmVudEVtaXR0ZXI7XG52YXIgTUFYX1NDUk9MTF9IID0gMHg4MDAwO1xudmFyIFNjcm9sbEJhciA9IGZ1bmN0aW9uKHBhcmVudCkge1xuICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSBcImFjZV9zY3JvbGxiYXIgYWNlX3Njcm9sbGJhclwiICsgdGhpcy5jbGFzc1N1ZmZpeDtcblxuICAgIHRoaXMuaW5uZXIgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmlubmVyLmNsYXNzTmFtZSA9IFwiYWNlX3Njcm9sbGJhci1pbm5lclwiO1xuICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcblxuICAgIHBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuXG4gICAgdGhpcy5zZXRWaXNpYmxlKGZhbHNlKTtcbiAgICB0aGlzLnNraXBFdmVudCA9IGZhbHNlO1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGhpcy5lbGVtZW50LCBcInNjcm9sbFwiLCB0aGlzLm9uU2Nyb2xsLmJpbmQodGhpcykpO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRoaXMuZWxlbWVudCwgXCJtb3VzZWRvd25cIiwgZXZlbnQucHJldmVudERlZmF1bHQpO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTtcblxuICAgIHRoaXMuc2V0VmlzaWJsZSA9IGZ1bmN0aW9uKGlzVmlzaWJsZSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IGlzVmlzaWJsZSA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBpc1Zpc2libGU7XG4gICAgICAgIHRoaXMuY29lZmYgPSAxO1xuICAgIH07XG59KS5jYWxsKFNjcm9sbEJhci5wcm90b3R5cGUpO1xudmFyIFZTY3JvbGxCYXIgPSBmdW5jdGlvbihwYXJlbnQsIHJlbmRlcmVyKSB7XG4gICAgU2Nyb2xsQmFyLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICB0aGlzLnNjcm9sbFRvcCA9IDA7XG4gICAgdGhpcy5zY3JvbGxIZWlnaHQgPSAwO1xuICAgIHJlbmRlcmVyLiRzY3JvbGxiYXJXaWR0aCA9IFxuICAgIHRoaXMud2lkdGggPSBkb20uc2Nyb2xsYmFyV2lkdGgocGFyZW50Lm93bmVyRG9jdW1lbnQpO1xuICAgIHRoaXMuaW5uZXIuc3R5bGUud2lkdGggPVxuICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9ICh0aGlzLndpZHRoIHx8IDE1KSArIDUgKyBcInB4XCI7XG4gICAgdGhpcy4kbWluV2lkdGggPSAwO1xufTtcblxub29wLmluaGVyaXRzKFZTY3JvbGxCYXIsIFNjcm9sbEJhcik7XG5cbihmdW5jdGlvbigpIHtcblxuICAgIHRoaXMuY2xhc3NTdWZmaXggPSAnLXYnO1xuICAgIHRoaXMub25TY3JvbGwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNraXBFdmVudCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29lZmYgIT0gMSkge1xuICAgICAgICAgICAgICAgIHZhciBoID0gdGhpcy5lbGVtZW50LmNsaWVudEhlaWdodCAvIHRoaXMuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxUb3AgKiAoMSAtIGgpIC8gKHRoaXMuY29lZmYgLSBoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2VtaXQoXCJzY3JvbGxcIiwge2RhdGE6IHRoaXMuc2Nyb2xsVG9wfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5za2lwRXZlbnQgPSBmYWxzZTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0V2lkdGggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuaXNWaXNpYmxlID8gdGhpcy53aWR0aCA6IDAsIHRoaXMuJG1pbldpZHRoIHx8IDApO1xuICAgIH07XG4gICAgdGhpcy5zZXRIZWlnaHQgPSBmdW5jdGlvbihoZWlnaHQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArIFwicHhcIjtcbiAgICB9O1xuICAgIHRoaXMuc2V0SW5uZXJIZWlnaHQgPVxuICAgIHRoaXMuc2V0U2Nyb2xsSGVpZ2h0ID0gZnVuY3Rpb24oaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsSGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBpZiAoaGVpZ2h0ID4gTUFYX1NDUk9MTF9IKSB7XG4gICAgICAgICAgICB0aGlzLmNvZWZmID0gTUFYX1NDUk9MTF9IIC8gaGVpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0ID0gTUFYX1NDUk9MTF9IO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29lZmYgIT0gMSkge1xuICAgICAgICAgICAgdGhpcy5jb2VmZiA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbm5lci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyBcInB4XCI7XG4gICAgfTtcbiAgICB0aGlzLnNldFNjcm9sbFRvcCA9IGZ1bmN0aW9uKHNjcm9sbFRvcCkge1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxUb3AgIT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICB0aGlzLnNraXBFdmVudCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3AgKiB0aGlzLmNvZWZmO1xuICAgICAgICB9XG4gICAgfTtcblxufSkuY2FsbChWU2Nyb2xsQmFyLnByb3RvdHlwZSk7XG52YXIgSFNjcm9sbEJhciA9IGZ1bmN0aW9uKHBhcmVudCwgcmVuZGVyZXIpIHtcbiAgICBTY3JvbGxCYXIuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgIHRoaXMuc2Nyb2xsTGVmdCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSByZW5kZXJlci4kc2Nyb2xsYmFyV2lkdGg7XG4gICAgdGhpcy5pbm5lci5zdHlsZS5oZWlnaHQgPVxuICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAodGhpcy5oZWlnaHQgfHwgMTUpICsgNSArIFwicHhcIjtcbn07XG5cbm9vcC5pbmhlcml0cyhIU2Nyb2xsQmFyLCBTY3JvbGxCYXIpO1xuXG4oZnVuY3Rpb24oKSB7XG5cbiAgICB0aGlzLmNsYXNzU3VmZml4ID0gJy1oJztcbiAgICB0aGlzLm9uU2Nyb2xsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5za2lwRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgdGhpcy5fZW1pdChcInNjcm9sbFwiLCB7ZGF0YTogdGhpcy5zY3JvbGxMZWZ0fSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5za2lwRXZlbnQgPSBmYWxzZTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0SGVpZ2h0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmlzaWJsZSA/IHRoaXMuaGVpZ2h0IDogMDtcbiAgICB9O1xuICAgIHRoaXMuc2V0V2lkdGggPSBmdW5jdGlvbih3aWR0aCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSB3aWR0aCArIFwicHhcIjtcbiAgICB9O1xuICAgIHRoaXMuc2V0SW5uZXJXaWR0aCA9IGZ1bmN0aW9uKHdpZHRoKSB7XG4gICAgICAgIHRoaXMuaW5uZXIuc3R5bGUud2lkdGggPSB3aWR0aCArIFwicHhcIjtcbiAgICB9O1xuICAgIHRoaXMuc2V0U2Nyb2xsV2lkdGggPSBmdW5jdGlvbih3aWR0aCkge1xuICAgICAgICB0aGlzLmlubmVyLnN0eWxlLndpZHRoID0gd2lkdGggKyBcInB4XCI7XG4gICAgfTtcbiAgICB0aGlzLnNldFNjcm9sbExlZnQgPSBmdW5jdGlvbihzY3JvbGxMZWZ0KSB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbExlZnQgIT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgdGhpcy5za2lwRXZlbnQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxMZWZ0ID0gdGhpcy5lbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICB9XG4gICAgfTtcblxufSkuY2FsbChIU2Nyb2xsQmFyLnByb3RvdHlwZSk7XG5cblxuZXhwb3J0cy5TY3JvbGxCYXIgPSBWU2Nyb2xsQmFyOyAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5leHBvcnRzLlNjcm9sbEJhclYgPSBWU2Nyb2xsQmFyOyAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5leHBvcnRzLlNjcm9sbEJhckggPSBIU2Nyb2xsQmFyOyAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5cbmV4cG9ydHMuVlNjcm9sbEJhciA9IFZTY3JvbGxCYXI7XG5leHBvcnRzLkhTY3JvbGxCYXIgPSBIU2Nyb2xsQmFyO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvcmVuZGVybG9vcFwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9ldmVudFwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBldmVudCA9IGFjZXF1aXJlKFwiLi9saWIvZXZlbnRcIik7XG5cblxudmFyIFJlbmRlckxvb3AgPSBmdW5jdGlvbihvblJlbmRlciwgd2luKSB7XG4gICAgdGhpcy5vblJlbmRlciA9IG9uUmVuZGVyO1xuICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlcyA9IDA7XG4gICAgdGhpcy53aW5kb3cgPSB3aW4gfHwgd2luZG93O1xufTtcblxuKGZ1bmN0aW9uKCkge1xuXG5cbiAgICB0aGlzLnNjaGVkdWxlID0gZnVuY3Rpb24oY2hhbmdlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IHRoaXMuY2hhbmdlcyB8IGNoYW5nZTtcbiAgICAgICAgaWYgKCF0aGlzLnBlbmRpbmcgJiYgdGhpcy5jaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9zZWxmID0gdGhpcztcbiAgICAgICAgICAgIGV2ZW50Lm5leHRGcmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBfc2VsZi5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdmFyIGNoYW5nZXM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoYW5nZXMgPSBfc2VsZi5jaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIF9zZWxmLmNoYW5nZXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICBfc2VsZi5vblJlbmRlcihjaGFuZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzLndpbmRvdyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG59KS5jYWxsKFJlbmRlckxvb3AucHJvdG90eXBlKTtcblxuZXhwb3J0cy5SZW5kZXJMb29wID0gUmVuZGVyTG9vcDtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2xheWVyL2ZvbnRfbWV0cmljc1wiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9vb3BcIixcImFjZS9saWIvZG9tXCIsXCJhY2UvbGliL2xhbmdcIixcImFjZS9saWIvdXNlcmFnZW50XCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxudmFyIG9vcCA9IGFjZXF1aXJlKFwiLi4vbGliL29vcFwiKTtcbnZhciBkb20gPSBhY2VxdWlyZShcIi4uL2xpYi9kb21cIik7XG52YXIgbGFuZyA9IGFjZXF1aXJlKFwiLi4vbGliL2xhbmdcIik7XG52YXIgdXNlcmFnZW50ID0gYWNlcXVpcmUoXCIuLi9saWIvdXNlcmFnZW50XCIpO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi4vbGliL2V2ZW50X2VtaXR0ZXJcIikuRXZlbnRFbWl0dGVyO1xuXG52YXIgQ0hBUl9DT1VOVCA9IDA7XG5cbnZhciBGb250TWV0cmljcyA9IGV4cG9ydHMuRm9udE1ldHJpY3MgPSBmdW5jdGlvbihwYXJlbnRFbCkge1xuICAgIHRoaXMuZWwgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLiRzZXRNZWFzdXJlTm9kZVN0eWxlcyh0aGlzLmVsLnN0eWxlLCB0cnVlKTtcbiAgICBcbiAgICB0aGlzLiRtYWluID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy4kc2V0TWVhc3VyZU5vZGVTdHlsZXModGhpcy4kbWFpbi5zdHlsZSk7XG4gICAgXG4gICAgdGhpcy4kbWVhc3VyZU5vZGUgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLiRzZXRNZWFzdXJlTm9kZVN0eWxlcyh0aGlzLiRtZWFzdXJlTm9kZS5zdHlsZSk7XG4gICAgXG4gICAgXG4gICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh0aGlzLiRtYWluKTtcbiAgICB0aGlzLmVsLmFwcGVuZENoaWxkKHRoaXMuJG1lYXN1cmVOb2RlKTtcbiAgICBwYXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmVsKTtcbiAgICBcbiAgICBpZiAoIUNIQVJfQ09VTlQpXG4gICAgICAgIHRoaXMuJHRlc3RGcmFjdGlvbmFsUmVjdCgpO1xuICAgIHRoaXMuJG1lYXN1cmVOb2RlLmlubmVySFRNTCA9IGxhbmcuc3RyaW5nUmVwZWF0KFwiWFwiLCBDSEFSX0NPVU5UKTtcbiAgICBcbiAgICB0aGlzLiRjaGFyYWN0ZXJTaXplID0ge3dpZHRoOiAwLCBoZWlnaHQ6IDB9O1xuICAgIHRoaXMuY2hlY2tGb3JTaXplQ2hhbmdlcygpO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuXG4gICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpO1xuICAgICAgICBcbiAgICB0aGlzLiRjaGFyYWN0ZXJTaXplID0ge3dpZHRoOiAwLCBoZWlnaHQ6IDB9O1xuICAgIFxuICAgIHRoaXMuJHRlc3RGcmFjdGlvbmFsUmVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZWwgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdGhpcy4kc2V0TWVhc3VyZU5vZGVTdHlsZXMoZWwuc3R5bGUpO1xuICAgICAgICBlbC5zdHlsZS53aWR0aCA9IFwiMC4ycHhcIjtcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGVsKTtcbiAgICAgICAgdmFyIHcgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgaWYgKHcgPiAwICYmIHcgPCAxKVxuICAgICAgICAgICAgQ0hBUl9DT1VOVCA9IDUwO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBDSEFSX0NPVU5UID0gMTAwO1xuICAgICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuJHNldE1lYXN1cmVOb2RlU3R5bGVzID0gZnVuY3Rpb24oc3R5bGUsIGlzUm9vdCkge1xuICAgICAgICBzdHlsZS53aWR0aCA9IHN0eWxlLmhlaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICBzdHlsZS5sZWZ0ID0gc3R5bGUudG9wID0gXCIwcHhcIjtcbiAgICAgICAgc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICAgIHN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICBzdHlsZS53aGl0ZVNwYWNlID0gXCJwcmVcIjtcblxuICAgICAgICBpZiAodXNlcmFnZW50LmlzSUUgPCA4KSB7XG4gICAgICAgICAgICBzdHlsZVtcImZvbnQtZmFtaWx5XCJdID0gXCJpbmhlcml0XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHlsZS5mb250ID0gXCJpbmhlcml0XCI7XG4gICAgICAgIH1cbiAgICAgICAgc3R5bGUub3ZlcmZsb3cgPSBpc1Jvb3QgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XG4gICAgfTtcblxuICAgIHRoaXMuY2hlY2tGb3JTaXplQ2hhbmdlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuJG1lYXN1cmVTaXplcygpO1xuICAgICAgICBpZiAoc2l6ZSAmJiAodGhpcy4kY2hhcmFjdGVyU2l6ZS53aWR0aCAhPT0gc2l6ZS53aWR0aCB8fCB0aGlzLiRjaGFyYWN0ZXJTaXplLmhlaWdodCAhPT0gc2l6ZS5oZWlnaHQpKSB7XG4gICAgICAgICAgICB0aGlzLiRtZWFzdXJlTm9kZS5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICAgICAgICB2YXIgYm9sZFNpemUgPSB0aGlzLiRtZWFzdXJlU2l6ZXMoKTtcbiAgICAgICAgICAgIHRoaXMuJG1lYXN1cmVOb2RlLnN0eWxlLmZvbnRXZWlnaHQgPSBcIlwiO1xuICAgICAgICAgICAgdGhpcy4kY2hhcmFjdGVyU2l6ZSA9IHNpemU7XG4gICAgICAgICAgICB0aGlzLmNoYXJTaXplcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmFsbG93Qm9sZEZvbnRzID0gYm9sZFNpemUgJiYgYm9sZFNpemUud2lkdGggPT09IHNpemUud2lkdGggJiYgYm9sZFNpemUuaGVpZ2h0ID09PSBzaXplLmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX2VtaXQoXCJjaGFuZ2VDaGFyYWN0ZXJTaXplXCIsIHtkYXRhOiBzaXplfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy4kcG9sbFNpemVDaGFuZ2VzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcjtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gdGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHNlbGYuY2hlY2tGb3JTaXplQ2hhbmdlcygpO1xuICAgICAgICB9LCA1MDApO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5zZXRQb2xsaW5nID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuJHBvbGxTaXplQ2hhbmdlcygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyID0gMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRtZWFzdXJlU2l6ZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKENIQVJfQ09VTlQgPT09IDUwKSB7XG4gICAgICAgICAgICB2YXIgcmVjdCA9IG51bGw7XG4gICAgICAgICAgICB0cnkgeyBcbiAgICAgICAgICAgICAgIHJlY3QgPSB0aGlzLiRtZWFzdXJlTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgICAgcmVjdCA9IHt3aWR0aDogMCwgaGVpZ2h0OjAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzaXplID0ge1xuICAgICAgICAgICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGggLyBDSEFSX0NPVU5UXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHNpemUgPSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLiRtZWFzdXJlTm9kZS5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuJG1lYXN1cmVOb2RlLmNsaWVudFdpZHRoIC8gQ0hBUl9DT1VOVFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2l6ZS53aWR0aCA9PT0gMCB8fCBzaXplLmhlaWdodCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gc2l6ZTtcbiAgICB9O1xuXG4gICAgdGhpcy4kbWVhc3VyZUNoYXJXaWR0aCA9IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHRoaXMuJG1haW4uaW5uZXJIVE1MID0gbGFuZy5zdHJpbmdSZXBlYXQoY2gsIENIQVJfQ09VTlQpO1xuICAgICAgICB2YXIgcmVjdCA9IHRoaXMuJG1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiByZWN0LndpZHRoIC8gQ0hBUl9DT1VOVDtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuZ2V0Q2hhcmFjdGVyV2lkdGggPSBmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgdyA9IHRoaXMuY2hhclNpemVzW2NoXTtcbiAgICAgICAgaWYgKHcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdyA9IHRoaXMuY2hhclNpemVzW2NoXSA9IHRoaXMuJG1lYXN1cmVDaGFyV2lkdGgoY2gpIC8gdGhpcy4kY2hhcmFjdGVyU2l6ZS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdztcbiAgICB9O1xuXG4gICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXIpO1xuICAgICAgICBpZiAodGhpcy5lbCAmJiB0aGlzLmVsLnBhcmVudE5vZGUpXG4gICAgICAgICAgICB0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCk7XG4gICAgfTtcblxufSkuY2FsbChGb250TWV0cmljcy5wcm90b3R5cGUpO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS92aXJ0dWFsX3JlbmRlcmVyXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9kb21cIixcImFjZS9jb25maWdcIixcImFjZS9saWIvdXNlcmFnZW50XCIsXCJhY2UvbGF5ZXIvZ3V0dGVyXCIsXCJhY2UvbGF5ZXIvbWFya2VyXCIsXCJhY2UvbGF5ZXIvdGV4dFwiLFwiYWNlL2xheWVyL2N1cnNvclwiLFwiYWNlL3Njcm9sbGJhclwiLFwiYWNlL3Njcm9sbGJhclwiLFwiYWNlL3JlbmRlcmxvb3BcIixcImFjZS9sYXllci9mb250X21ldHJpY3NcIixcImFjZS9saWIvZXZlbnRfZW1pdHRlclwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBvb3AgPSBhY2VxdWlyZShcIi4vbGliL29vcFwiKTtcbnZhciBkb20gPSBhY2VxdWlyZShcIi4vbGliL2RvbVwiKTtcbnZhciBjb25maWcgPSBhY2VxdWlyZShcIi4vY29uZmlnXCIpO1xudmFyIHVzZXJhZ2VudCA9IGFjZXF1aXJlKFwiLi9saWIvdXNlcmFnZW50XCIpO1xudmFyIEd1dHRlckxheWVyID0gYWNlcXVpcmUoXCIuL2xheWVyL2d1dHRlclwiKS5HdXR0ZXI7XG52YXIgTWFya2VyTGF5ZXIgPSBhY2VxdWlyZShcIi4vbGF5ZXIvbWFya2VyXCIpLk1hcmtlcjtcbnZhciBUZXh0TGF5ZXIgPSBhY2VxdWlyZShcIi4vbGF5ZXIvdGV4dFwiKS5UZXh0O1xudmFyIEN1cnNvckxheWVyID0gYWNlcXVpcmUoXCIuL2xheWVyL2N1cnNvclwiKS5DdXJzb3I7XG52YXIgSFNjcm9sbEJhciA9IGFjZXF1aXJlKFwiLi9zY3JvbGxiYXJcIikuSFNjcm9sbEJhcjtcbnZhciBWU2Nyb2xsQmFyID0gYWNlcXVpcmUoXCIuL3Njcm9sbGJhclwiKS5WU2Nyb2xsQmFyO1xudmFyIFJlbmRlckxvb3AgPSBhY2VxdWlyZShcIi4vcmVuZGVybG9vcFwiKS5SZW5kZXJMb29wO1xudmFyIEZvbnRNZXRyaWNzID0gYWNlcXVpcmUoXCIuL2xheWVyL2ZvbnRfbWV0cmljc1wiKS5Gb250TWV0cmljcztcbnZhciBFdmVudEVtaXR0ZXIgPSBhY2VxdWlyZShcIi4vbGliL2V2ZW50X2VtaXR0ZXJcIikuRXZlbnRFbWl0dGVyO1xudmFyIGVkaXRvckNzcyA9IFwiLmFjZV9lZGl0b3Ige1xcXG5wb3NpdGlvbjogcmVsYXRpdmU7XFxcbm92ZXJmbG93OiBoaWRkZW47XFxcbmZvbnQ6IDEycHgvbm9ybWFsICdNb25hY28nLCAnTWVubG8nLCAnVWJ1bnR1IE1vbm8nLCAnQ29uc29sYXMnLCAnc291cmNlLWNvZGUtcHJvJywgbW9ub3NwYWNlO1xcXG5kaXJlY3Rpb246IGx0cjtcXFxudGV4dC1hbGlnbjogbGVmdDtcXFxuLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xcXG59XFxcbi5hY2Vfc2Nyb2xsZXIge1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbm92ZXJmbG93OiBoaWRkZW47XFxcbnRvcDogMDtcXFxuYm90dG9tOiAwO1xcXG5iYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xcXG4tbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxcbi1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxcbi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxcbnVzZXItc2VsZWN0OiBub25lO1xcXG5jdXJzb3I6IHRleHQ7XFxcbn1cXFxuLmFjZV9jb250ZW50IHtcXFxucG9zaXRpb246IGFic29sdXRlO1xcXG4tbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbi13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXFxuYm94LXNpemluZzogYm9yZGVyLWJveDtcXFxubWluLXdpZHRoOiAxMDAlO1xcXG59XFxcbi5hY2VfZHJhZ2dpbmcgLmFjZV9zY3JvbGxlcjpiZWZvcmV7XFxcbnBvc2l0aW9uOiBhYnNvbHV0ZTtcXFxudG9wOiAwO1xcXG5sZWZ0OiAwO1xcXG5yaWdodDogMDtcXFxuYm90dG9tOiAwO1xcXG5jb250ZW50OiAnJztcXFxuYmFja2dyb3VuZDogcmdiYSgyNTAsIDI1MCwgMjUwLCAwLjAxKTtcXFxuei1pbmRleDogMTAwMDtcXFxufVxcXG4uYWNlX2RyYWdnaW5nLmFjZV9kYXJrIC5hY2Vfc2Nyb2xsZXI6YmVmb3Jle1xcXG5iYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xcXG59XFxcbi5hY2Vfc2VsZWN0aW5nLCAuYWNlX3NlbGVjdGluZyAqIHtcXFxuY3Vyc29yOiB0ZXh0ICFpbXBvcnRhbnQ7XFxcbn1cXFxuLmFjZV9ndXR0ZXIge1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbm92ZXJmbG93IDogaGlkZGVuO1xcXG53aWR0aDogYXV0bztcXFxudG9wOiAwO1xcXG5ib3R0b206IDA7XFxcbmxlZnQ6IDA7XFxcbmN1cnNvcjogZGVmYXVsdDtcXFxuei1pbmRleDogNDtcXFxuLW1zLXVzZXItc2VsZWN0OiBub25lO1xcXG4tbW96LXVzZXItc2VsZWN0OiBub25lO1xcXG4td2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcXG51c2VyLXNlbGVjdDogbm9uZTtcXFxufVxcXG4uYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XFxcbnBvc2l0aW9uOiBhYnNvbHV0ZTtcXFxubGVmdDogMDtcXFxucmlnaHQ6IDA7XFxcbn1cXFxuLmFjZV9zY3JvbGxlci5hY2Vfc2Nyb2xsLWxlZnQge1xcXG5ib3gtc2hhZG93OiAxN3B4IDAgMTZweCAtMTZweCByZ2JhKDAsIDAsIDAsIDAuNCkgaW5zZXQ7XFxcbn1cXFxuLmFjZV9ndXR0ZXItY2VsbCB7XFxcbnBhZGRpbmctbGVmdDogMTlweDtcXFxucGFkZGluZy1yaWdodDogNnB4O1xcXG5iYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcXG59XFxcbi5hY2VfZ3V0dGVyLWNlbGwuYWNlX2Vycm9yIHtcXFxuYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQU1BQUFBb0xROVRBQUFCT0ZCTVZFWC8vLy8vLy8vL1FSc3dGQWIvVWk0d0ZBWXdGQVl3RkFhV0dBZkRSeW16T1NIL1B4c3dGQWIvU2lVd0ZBWXdGQWJVUFJ2alFpRGxsb2c1SGhIZFJ5YnNUaTMvVHl2OVRpcitTeWovVUMzLy8vL1h1cmViTUJJd0ZBYi9SU0hiUHgvZ1V6ZmR3TDNrek1pdktCQXdGQWJidmJuaFB4NjZOaG93RkFZd0ZBYVpKZzh3RkFheEtCRFp1cmYvUkI2bU14Yi9TQ013RkFZd0ZBYnhRQjMrUkI0d0ZBYi9RaHk0T2grNFFpZmJOUmN3RkFZd0ZBWXdGQWIvUVJ6ZE5oZ3dGQVl3RkFiYXY3di9VeTdvYUU2OE1CSzVMeExld3IvcjJOWGV3THN3RkFheEp3NHdGQWJrUFJ5MlB5WXdGQWF4S2hMbTF0TXdGQWF6UGlRd0ZBYVVHQWIvUUJyZk94M2J2cnYvVkMvbWFFNHdGQWJSUEJxNk1STzhReW5ldzhEcDJ0amZ3YjB3RkFieDZlanU1K2J5NnVuczR1SDkvZjM2K3ZyL0drSGpBQUFBWW5SU1RsTUFHdCs2NHJuV3UvYm84ZUFBNEluSDMrRHdvTjdqNGVMaTR4UDk5TmZnNCtiKy91OUIvZURzMU1EMW1PNys0UEhnMk1YYTM0N2c3dkRpek1MTjRlRytQdjdpNWV2cy92Nzl5dTdTMy9EVjcvNDk4WXYyNGVIKzR1ZlEzT3p1L3Y3K3kxM3NScXdBQUFETFNVUkJWSGphWmMvWERzRmdHSUJodERyc2hsaXRtazJJcmJIRnFMMnB2WGYvKzc4RFBva2o3K0Z6OXFwVS85VVhKSWxobVBhVGFRNlFQYXowbW0rNWd3a2dvdmNWNkdaemQ1SnRDUXdnc3hvSE92Sk8xNWtsZVJMQW5NZ0hGSUVTVUVQbWF3QjluZ21lbFR0aXB3d2ZBU2lseE9MeWlWNVVWVXlWQWZiRzBjQ1BIaWcrR0JrekFFTkhTMEFzdFZGNmJhY1pJT3pnTG14c0hidDJPZWNOZ0pDODNKRVJtZVBVWXE4QVJHa0p4Nlh0RnNkZGRCUWdaRTJuUFI2Q0lDWmhhd2pBNEZiL2NodiszOTlrZlIrTU1NREdPUUFBQUFCSlJVNUVya0pnZ2c9PVxcXCIpO1xcXG5iYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcXG5iYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggY2VudGVyO1xcXG59XFxcbi5hY2VfZ3V0dGVyLWNlbGwuYWNlX3dhcm5pbmcge1xcXG5iYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBTUFBQUFvTFE5VEFBQUFtVkJNVkVYLy8vOEFBQUQvLy84QUFBQUFBQUJQU3piLzVzQUFBQUIvYmxILzczei91bGtBQUFBQUFBRDg1cGtBQUFBQUFBQUNBZ1Avdkd6L3JrRGVyR2JHclY3L3BrUUlDQWYvLy8vZTBJc0FBQUQvb0VEL3FUdmhyblVBQUFEL3lIRC9uamNBQUFEdXYyci9uei8vb1RqL3AwNjRvR2YvekhBQUFBQTlOaXIvdEZJQUFBRC90bFRpdVdmL3RrSUFBQUN5blhFQUFBQUFBQUF0SVJXN3pCcEJBQUFBTTNSU1RsTUFBQlIxbTdSWE84TG4zMVozNnpUK25lWGU1T3pvb1JEZm4rVFo0cDNoMmhUZjR0M2szdWN5ck4xSzUrWGFrczUyU2ZzOUNYZ3JBQUFBamtsRVFWUjQybzNQYlErQ0lCUUZZRXdib1BoU1lnb1l1bklxcUxuNi96OHVZZEg4Vm1kbnU5dno0V3dYZ04veFRQUkQyK3NnT2NaanNnZS93aFhaZ1VhWVl2VDhRbnVKYVVyanJIVVFyZUdjenVFYWZRQ08vU0pUdWZUYnJvV3NQZ3NsbFZocTN3SkVrMmpVU3pYM0NVRURKQzg0NzA3ZGpSYzVNVEFReG9MZ3VwV1J3VzZVQjVmUysrTlY4QWJPWmduc0M3QnBFQUFBQUFCSlJVNUVya0pnZ2c9PVxcXCIpO1xcXG5iYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggY2VudGVyO1xcXG59XFxcbi5hY2VfZ3V0dGVyLWNlbGwuYWNlX2luZm8ge1xcXG5iYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBQUFBQUE2bUtDOUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBQUowVWs1VEFBQjJrODA0QUFBQVBrbEVRVlFZMDJOZ0lCNjhRdU8zdGlMem5qQXdwS1RnTnlEYk1lZ3dpc0NIWlVFVFVaVjBacU9xdUJwWGoycnRucFNKVDFBRW5uUm1MMk9nR2dBQUlLa1JRYXAyaHRnQUFBQUFTVVZPUks1Q1lJST1cXFwiKTtcXFxuYmFja2dyb3VuZC1wb3NpdGlvbjogMnB4IGNlbnRlcjtcXFxufVxcXG4uYWNlX2RhcmsgLmFjZV9ndXR0ZXItY2VsbC5hY2VfaW5mbyB7XFxcbmJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQkFNQUFBRHQzZUpTQUFBQUpGQk1WRVVBQUFDaG9hR0FnSUFxS2lxK3ZyNnRyYTFaV1ZtVWxKU2JtNXM4UER4dWJtNTZlbnJkZ3pnM0FBQUFBWFJTVGxNQVFPYllaZ0FBQUNsSlJFRlVlTnBqWU1BUGRzTVlIZWd5SlpGUUJsc1VsTUZWQ1dVWUtrQVpNeFpBR2R4bERNUUJBRytUQlA0QjZSeUpBQUFBQUVsRlRrU3VRbUNDXFxcIik7XFxcbn1cXFxuLmFjZV9zY3JvbGxiYXIge1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbnJpZ2h0OiAwO1xcXG5ib3R0b206IDA7XFxcbnotaW5kZXg6IDY7XFxcbn1cXFxuLmFjZV9zY3JvbGxiYXItaW5uZXIge1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbmN1cnNvcjogdGV4dDtcXFxubGVmdDogMDtcXFxudG9wOiAwO1xcXG59XFxcbi5hY2Vfc2Nyb2xsYmFyLXZ7XFxcbm92ZXJmbG93LXg6IGhpZGRlbjtcXFxub3ZlcmZsb3cteTogc2Nyb2xsO1xcXG50b3A6IDA7XFxcbn1cXFxuLmFjZV9zY3JvbGxiYXItaCB7XFxcbm92ZXJmbG93LXg6IHNjcm9sbDtcXFxub3ZlcmZsb3cteTogaGlkZGVuO1xcXG5sZWZ0OiAwO1xcXG59XFxcbi5hY2VfcHJpbnQtbWFyZ2luIHtcXFxucG9zaXRpb246IGFic29sdXRlO1xcXG5oZWlnaHQ6IDEwMCU7XFxcbn1cXFxuLmFjZV90ZXh0LWlucHV0IHtcXFxucG9zaXRpb246IGFic29sdXRlO1xcXG56LWluZGV4OiAwO1xcXG53aWR0aDogMC41ZW07XFxcbmhlaWdodDogMWVtO1xcXG5vcGFjaXR5OiAwO1xcXG5iYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXFxuLW1vei1hcHBlYXJhbmNlOiBub25lO1xcXG5hcHBlYXJhbmNlOiBub25lO1xcXG5ib3JkZXI6IG5vbmU7XFxcbnJlc2l6ZTogbm9uZTtcXFxub3V0bGluZTogbm9uZTtcXFxub3ZlcmZsb3c6IGhpZGRlbjtcXFxuZm9udDogaW5oZXJpdDtcXFxucGFkZGluZzogMCAxcHg7XFxcbm1hcmdpbjogMCAtMXB4O1xcXG50ZXh0LWluZGVudDogLTFlbTtcXFxuLW1zLXVzZXItc2VsZWN0OiB0ZXh0O1xcXG4tbW96LXVzZXItc2VsZWN0OiB0ZXh0O1xcXG4td2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0O1xcXG51c2VyLXNlbGVjdDogdGV4dDtcXFxud2hpdGUtc3BhY2U6IHByZSFpbXBvcnRhbnQ7XFxcbn1cXFxuLmFjZV90ZXh0LWlucHV0LmFjZV9jb21wb3NpdGlvbiB7XFxcbmJhY2tncm91bmQ6IGluaGVyaXQ7XFxcbmNvbG9yOiBpbmhlcml0O1xcXG56LWluZGV4OiAxMDAwO1xcXG5vcGFjaXR5OiAxO1xcXG50ZXh0LWluZGVudDogMDtcXFxufVxcXG4uYWNlX2xheWVyIHtcXFxuei1pbmRleDogMTtcXFxucG9zaXRpb246IGFic29sdXRlO1xcXG5vdmVyZmxvdzogaGlkZGVuO1xcXG53b3JkLXdyYXA6IG5vcm1hbDtcXFxud2hpdGUtc3BhY2U6IHByZTtcXFxuaGVpZ2h0OiAxMDAlO1xcXG53aWR0aDogMTAwJTtcXFxuLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcXG4td2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbmJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbnBvaW50ZXItZXZlbnRzOiBub25lO1xcXG59XFxcbi5hY2VfZ3V0dGVyLWxheWVyIHtcXFxucG9zaXRpb246IHJlbGF0aXZlO1xcXG53aWR0aDogYXV0bztcXFxudGV4dC1hbGlnbjogcmlnaHQ7XFxcbnBvaW50ZXItZXZlbnRzOiBhdXRvO1xcXG59XFxcbi5hY2VfdGV4dC1sYXllciB7XFxcbmZvbnQ6IGluaGVyaXQgIWltcG9ydGFudDtcXFxufVxcXG4uYWNlX2NqayB7XFxcbmRpc3BsYXk6IGlubGluZS1ibG9jaztcXFxudGV4dC1hbGlnbjogY2VudGVyO1xcXG59XFxcbi5hY2VfY3Vyc29yLWxheWVyIHtcXFxuei1pbmRleDogNDtcXFxufVxcXG4uYWNlX2N1cnNvciB7XFxcbnotaW5kZXg6IDQ7XFxcbnBvc2l0aW9uOiBhYnNvbHV0ZTtcXFxuLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcXG4td2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbmJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbmJvcmRlci1sZWZ0OiAycHggc29saWQ7XFxcbnRyYW5zZm9ybTogdHJhbnNsYXRleigwKTtcXFxufVxcXG4uYWNlX211bHRpc2VsZWN0IC5hY2VfY3Vyc29yIHtcXFxuYm9yZGVyLWxlZnQtd2lkdGg6IDFweDtcXFxufVxcXG4uYWNlX3NsaW0tY3Vyc29ycyAuYWNlX2N1cnNvciB7XFxcbmJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7XFxcbn1cXFxuLmFjZV9vdmVyd3JpdGUtY3Vyc29ycyAuYWNlX2N1cnNvciB7XFxcbmJvcmRlci1sZWZ0LXdpZHRoOiAwO1xcXG5ib3JkZXItYm90dG9tOiAxcHggc29saWQ7XFxcbn1cXFxuLmFjZV9oaWRkZW4tY3Vyc29ycyAuYWNlX2N1cnNvciB7XFxcbm9wYWNpdHk6IDAuMjtcXFxufVxcXG4uYWNlX3Ntb290aC1ibGlua2luZyAuYWNlX2N1cnNvciB7XFxcbi13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE4cztcXFxudHJhbnNpdGlvbjogb3BhY2l0eSAwLjE4cztcXFxufVxcXG4uYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAsIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RhY2sge1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbnotaW5kZXg6IDM7XFxcbn1cXFxuLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbnotaW5kZXg6IDU7XFxcbn1cXFxuLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcXFxucG9zaXRpb246IGFic29sdXRlO1xcXG56LWluZGV4OiA2O1xcXG59XFxcbi5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbnotaW5kZXg6IDI7XFxcbn1cXFxuLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcXFxucG9zaXRpb246IGFic29sdXRlO1xcXG56LWluZGV4OiA0O1xcXG4tbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbi13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXFxuYm94LXNpemluZzogYm9yZGVyLWJveDtcXFxufVxcXG4uYWNlX2xpbmUgLmFjZV9mb2xkIHtcXFxuLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcXG4td2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbmJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbmRpc3BsYXk6IGlubGluZS1ibG9jaztcXFxuaGVpZ2h0OiAxMXB4O1xcXG5tYXJnaW4tdG9wOiAtMnB4O1xcXG52ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcXG5iYWNrZ3JvdW5kLWltYWdlOlxcXG51cmwoXFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkVBQUFBSkNBWUFBQURVNk1jTUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBSnBKUkVGVWVOcGkvUC8vUHdPbGdBWEdZR1JrbEFWU29rRDhHbWp3WTF3YXNLbGpRcFlBQ3RwQ0ZlQURjSFZRZlF5TVFBd3p3QVpJM3dKS3ZDTGtmS0JhTVNDbEJsUjdCT1Fpa0NGR1FFRXJJSDBWcWthYmlHQ0Fxd1VhZEF6WkpSeFFyLzBnd2lYSWFsOHpRUVBuTlZUZ0oxVGRhd0wwVDVnQklQMU1VSk5oQnYySEtvUUhIanFOckE0V080elkwZ2x5TktMVDJLSWZJTUFBUXNkZ0dpWHZnbllBQUFBQVNVVk9SSzVDWUlJPVxcXCIpLFxcXG51cmwoXFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBM0NBWUFBQUROTmlBNUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBQ0pKUkVGVWVOcGkrUC8vZnhnVEF3UERCeER4RDA3OFJTWCtZZUV5REZNQ0lNQUFJM0lObVhpd2YyWUFBQUFBU1VWT1JLNUNZSUk9XFxcIik7XFxcbmJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQsIHJlcGVhdC14O1xcXG5iYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyLCB0b3AgbGVmdDtcXFxuY29sb3I6IHRyYW5zcGFyZW50O1xcXG5ib3JkZXI6IDFweCBzb2xpZCBibGFjaztcXFxuYm9yZGVyLXJhZGl1czogMnB4O1xcXG5jdXJzb3I6IHBvaW50ZXI7XFxcbnBvaW50ZXItZXZlbnRzOiBhdXRvO1xcXG59XFxcbi5hY2VfZGFyayAuYWNlX2ZvbGQge1xcXG59XFxcbi5hY2VfZm9sZDpob3ZlcntcXFxuYmFja2dyb3VuZC1pbWFnZTpcXFxudXJsKFxcXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJFQUFBQUpDQVlBQUFEVTZNY01BQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUpwSlJFRlVlTnBpL1AvL1B3T2xnQVhHWUdSa2xBVlNva0Q4R21qd1kxd2FzS2xqUXBZQUN0cENGZUFEY0hWUWZReU1RQXd6d0FaSTN3Skt2Q0xrZktCYU1TQ2xCbFI3Qk9RaWtDRkdRRUVySUgwVnFrYWJpR0NBcXdVYWRBelpKUnhRci8wZ3dpWElhbDh6UVFQbk5WVGdKMVRkYXdMMFQ1Z0JJUDFNVUpOaEJ2MkhLb1FISGpxTnJBNFdPNHpZMGdseU5LTFQyS0lmSU1BQVFzZGdHaVh2Z25ZQUFBQUFTVVZPUks1Q1lJST1cXFwiKSxcXFxudXJsKFxcXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQTNDQVlBQUFETk5pQTVBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUNCSlJFRlVlTnBpK1AvL2Z6NFRBd1BEWnhEeEQ1WDRpNWZMTUV3SmdBQURBRVBWRGJqTnc4N1pBQUFBQUVsRlRrU3VRbUNDXFxcIik7XFxcbn1cXFxuLmFjZV90b29sdGlwIHtcXFxuYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcXFxuYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCB0cmFuc3BhcmVudCwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcXFxuYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJlbnQsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XFxcbmJvcmRlcjogMXB4IHNvbGlkIGdyYXk7XFxcbmJvcmRlci1yYWRpdXM6IDFweDtcXFxuYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcXFxuY29sb3I6IGJsYWNrO1xcXG5tYXgtd2lkdGg6IDEwMCU7XFxcbnBhZGRpbmc6IDNweCA0cHg7XFxcbnBvc2l0aW9uOiBmaXhlZDtcXFxuei1pbmRleDogOTk5OTk5O1xcXG4tbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbi13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXFxuYm94LXNpemluZzogYm9yZGVyLWJveDtcXFxuY3Vyc29yOiBkZWZhdWx0O1xcXG53aGl0ZS1zcGFjZTogcHJlO1xcXG53b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxcbmxpbmUtaGVpZ2h0OiBub3JtYWw7XFxcbmZvbnQtc3R5bGU6IG5vcm1hbDtcXFxuZm9udC13ZWlnaHQ6IG5vcm1hbDtcXFxubGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXFxucG9pbnRlci1ldmVudHM6IG5vbmU7XFxcbn1cXFxuLmFjZV9mb2xkaW5nLWVuYWJsZWQgPiAuYWNlX2d1dHRlci1jZWxsIHtcXFxucGFkZGluZy1yaWdodDogMTNweDtcXFxufVxcXG4uYWNlX2ZvbGQtd2lkZ2V0IHtcXFxuLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcXG4td2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbmJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbm1hcmdpbjogMCAtMTJweCAwIDFweDtcXFxuZGlzcGxheTogbm9uZTtcXFxud2lkdGg6IDExcHg7XFxcbnZlcnRpY2FsLWFsaWduOiB0b3A7XFxcbmJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBVUFBQUFGQ0FZQUFBQ05ieWJsQUFBQU5FbEVRVlI0Mm1XS3NRMEFNQXpDOGl4TGxyelFqem1CaUVqcDBBNld3QkNTUGdLQVhvTGtxU290N25OM3lNd1I3cFozMk56cEtrVm9EQlV4S0FBQUFBQkpSVTVFcmtKZ2dnPT1cXFwiKTtcXFxuYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXFxuYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcXG5ib3JkZXItcmFkaXVzOiAzcHg7XFxcbmJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcXG5jdXJzb3I6IHBvaW50ZXI7XFxcbn1cXFxuLmFjZV9mb2xkaW5nLWVuYWJsZWQgLmFjZV9mb2xkLXdpZGdldCB7XFxcbmRpc3BsYXk6IGlubGluZS1ibG9jazsgICBcXFxufVxcXG4uYWNlX2ZvbGQtd2lkZ2V0LmFjZV9lbmQge1xcXG5iYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVVBQUFBRkNBWUFBQUNOYnlibEFBQUFORWxFUVZSNDJtM0h3UWtBTUFoRDBZenNSY2hGS0k3c0Fpa2VXa3J4d1NjRUIwbmg1ZTdLVFBXaW1aa2k0dFlmVmJYK01ObDRweVpYZWpVTzFRQUFBQUJKUlU1RXJrSmdnZz09XFxcIik7XFxcbn1cXFxuLmFjZV9mb2xkLXdpZGdldC5hY2VfY2xvc2VkIHtcXFxuYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFNQUFBQUdDQVlBQUFBRzVTUU1BQUFBT1VsRVFWUjQyalhLd1FrQU1BZ0R3S3dxS0Q0RXdRMjZzU09rVldqZ0lJSEF6UGlDZ2FxaXFuSkhabktJQ0JFUkhOMTk0TzViOXZiTHVBVlJMK2wwWVduWkFBQUFBRWxGVGtTdVFtQ0NYQT09XFxcIik7XFxcbn1cXFxuLmFjZV9mb2xkLXdpZGdldDpob3ZlciB7XFxcbmJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4zKTtcXFxuYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xcXG5ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xcXG59XFxcbi5hY2VfZm9sZC13aWRnZXQ6YWN0aXZlIHtcXFxuYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjQpO1xcXG5iYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcXG5ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xcXG59XFxcbi5hY2VfZGFyayAuYWNlX2ZvbGQtd2lkZ2V0IHtcXFxuYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBSGtsRVFWUUlXMlA0Ly84L0F6b0dFUTdvR0NhTExBaFdpU3dCMTQ2QkFRQ1NUUFlvY3FUMEFBQUFBRWxGVGtTdVFtQ0NcXFwiKTtcXFxufVxcXG4uYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldC5hY2VfZW5kIHtcXFxuYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBSDBsRVFWUUlXMlA0Ly84L0F4UTd3TmpJQWpETWdDNEF4akNWS0JpcklBQUYwa3oycmxoeHBBQUFBQUJKUlU1RXJrSmdnZz09XFxcIik7XFxcbn1cXFxuLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQuYWNlX2Nsb3NlZCB7XFxcbmJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBTUFBQUFGQ0FZQUFBQ0FjVmFpQUFBQUhFbEVRVlFJVzJQNC8vKy9BeEF6Z0RBRGxPT0F6bkhBS2dQV0F3QVJqaThVSURUZlFRQUFBQUJKUlU1RXJrSmdnZz09XFxcIik7XFxcbn1cXFxuLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQ6aG92ZXIge1xcXG5ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xcXG5iYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XFxcbn1cXFxuLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQ6YWN0aXZlIHtcXFxuYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcXFxufVxcXG4uYWNlX2ZvbGQtd2lkZ2V0LmFjZV9pbnZhbGlkIHtcXFxuYmFja2dyb3VuZC1jb2xvcjogI0ZGQjRCNDtcXFxuYm9yZGVyLWNvbG9yOiAjREU1NTU1O1xcXG59XFxcbi5hY2VfZmFkZS1mb2xkLXdpZGdldHMgLmFjZV9mb2xkLXdpZGdldCB7XFxcbi13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2UgMC4wNXM7XFxcbnRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlIDAuMDVzO1xcXG5vcGFjaXR5OiAwO1xcXG59XFxcbi5hY2VfZmFkZS1mb2xkLXdpZGdldHM6aG92ZXIgLmFjZV9mb2xkLXdpZGdldCB7XFxcbi13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjA1cyBlYXNlIDAuMDVzO1xcXG50cmFuc2l0aW9uOiBvcGFjaXR5IDAuMDVzIGVhc2UgMC4wNXM7XFxcbm9wYWNpdHk6MTtcXFxufVxcXG4uYWNlX3VuZGVybGluZSB7XFxcbnRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcXG59XFxcbi5hY2VfYm9sZCB7XFxcbmZvbnQtd2VpZ2h0OiBib2xkO1xcXG59XFxcbi5hY2Vfbm9ib2xkIC5hY2VfYm9sZCB7XFxcbmZvbnQtd2VpZ2h0OiBub3JtYWw7XFxcbn1cXFxuLmFjZV9pdGFsaWMge1xcXG5mb250LXN0eWxlOiBpdGFsaWM7XFxcbn1cXFxuLmFjZV9lcnJvci1tYXJrZXIge1xcXG5iYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMCwgMCwwLjIpO1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbnotaW5kZXg6IDk7XFxcbn1cXFxuLmFjZV9oaWdobGlnaHQtbWFya2VyIHtcXFxuYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMCwwLjIpO1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbnotaW5kZXg6IDg7XFxcbn1cXFxuLmFjZV9icjEge2JvcmRlci10b3AtbGVmdC1yYWRpdXMgICAgOiAzcHg7fVxcXG4uYWNlX2JyMiB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXMgICA6IDNweDt9XFxcbi5hY2VfYnIzIHtib3JkZXItdG9wLWxlZnQtcmFkaXVzICAgIDogM3B4OyBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogICAgM3B4O31cXFxuLmFjZV9icjQge2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7fVxcXG4uYWNlX2JyNSB7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDt9XFxcbi5hY2VfYnI2IHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyAgIDogM3B4OyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O31cXFxuLmFjZV9icjcge2JvcmRlci10b3AtbGVmdC1yYWRpdXMgICAgOiAzcHg7IGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAgICAzcHg7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7fVxcXG4uYWNlX2JyOCB7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyA6IDNweDt9XFxcbi5hY2VfYnI5IHtib3JkZXItdG9wLWxlZnQtcmFkaXVzICAgIDogM3B4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAgM3B4O31cXFxuLmFjZV9icjEwe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzICAgOiAzcHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICAzcHg7fVxcXG4uYWNlX2JyMTF7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICAgIDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XFxcbi5hY2VfYnIxMntib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAgM3B4O31cXFxuLmFjZV9icjEze2JvcmRlci10b3AtbGVmdC1yYWRpdXMgICAgOiAzcHg7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICAzcHg7fVxcXG4uYWNlX2JyMTR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXMgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XFxcbi5hY2VfYnIxNXtib3JkZXItdG9wLWxlZnQtcmFkaXVzICAgIDogM3B4OyBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogICAgM3B4OyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7fVxcXG4uYWNlX3RleHQtaW5wdXQtaW9zIHtcXFxucG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XFxcbnRvcDogLTEwMDAwMHB4ICFpbXBvcnRhbnQ7XFxcbmxlZnQ6IC0xMDAwMDBweCAhaW1wb3J0YW50O1xcXG59XFxcblwiO1xuXG5kb20uaW1wb3J0Q3NzU3RyaW5nKGVkaXRvckNzcywgXCJhY2VfZWRpdG9yLmNzc1wiKTtcblxudmFyIFZpcnR1YWxSZW5kZXJlciA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgdGhlbWUpIHtcbiAgICB2YXIgX3NlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXIgfHwgZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSAhdXNlcmFnZW50LmlzT2xkSUU7XG5cbiAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsIFwiYWNlX2VkaXRvclwiKTtcblxuICAgIHRoaXMuc2V0VGhlbWUodGhlbWUpO1xuXG4gICAgdGhpcy4kZ3V0dGVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy4kZ3V0dGVyLmNsYXNzTmFtZSA9IFwiYWNlX2d1dHRlclwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuJGd1dHRlcik7XG4gICAgdGhpcy4kZ3V0dGVyLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsIHRydWUpO1xuXG4gICAgdGhpcy5zY3JvbGxlciA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuc2Nyb2xsZXIuY2xhc3NOYW1lID0gXCJhY2Vfc2Nyb2xsZXJcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbGVyKTtcblxuICAgIHRoaXMuY29udGVudCA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29udGVudC5jbGFzc05hbWUgPSBcImFjZV9jb250ZW50XCI7XG4gICAgdGhpcy5zY3JvbGxlci5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xuXG4gICAgdGhpcy4kZ3V0dGVyTGF5ZXIgPSBuZXcgR3V0dGVyTGF5ZXIodGhpcy4kZ3V0dGVyKTtcbiAgICB0aGlzLiRndXR0ZXJMYXllci5vbihcImNoYW5nZUd1dHRlcldpZHRoXCIsIHRoaXMub25HdXR0ZXJSZXNpemUuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLiRtYXJrZXJCYWNrID0gbmV3IE1hcmtlckxheWVyKHRoaXMuY29udGVudCk7XG5cbiAgICB2YXIgdGV4dExheWVyID0gdGhpcy4kdGV4dExheWVyID0gbmV3IFRleHRMYXllcih0aGlzLmNvbnRlbnQpO1xuICAgIHRoaXMuY2FudmFzID0gdGV4dExheWVyLmVsZW1lbnQ7XG5cbiAgICB0aGlzLiRtYXJrZXJGcm9udCA9IG5ldyBNYXJrZXJMYXllcih0aGlzLmNvbnRlbnQpO1xuXG4gICAgdGhpcy4kY3Vyc29yTGF5ZXIgPSBuZXcgQ3Vyc29yTGF5ZXIodGhpcy5jb250ZW50KTtcbiAgICB0aGlzLiRob3JpelNjcm9sbCA9IGZhbHNlO1xuICAgIHRoaXMuJHZTY3JvbGwgPSBmYWxzZTtcblxuICAgIHRoaXMuc2Nyb2xsQmFyID0gXG4gICAgdGhpcy5zY3JvbGxCYXJWID0gbmV3IFZTY3JvbGxCYXIodGhpcy5jb250YWluZXIsIHRoaXMpO1xuICAgIHRoaXMuc2Nyb2xsQmFySCA9IG5ldyBIU2Nyb2xsQmFyKHRoaXMuY29udGFpbmVyLCB0aGlzKTtcbiAgICB0aGlzLnNjcm9sbEJhclYuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICghX3NlbGYuJHNjcm9sbEFuaW1hdGlvbilcbiAgICAgICAgICAgIF9zZWxmLnNlc3Npb24uc2V0U2Nyb2xsVG9wKGUuZGF0YSAtIF9zZWxmLnNjcm9sbE1hcmdpbi50b3ApO1xuICAgIH0pO1xuICAgIHRoaXMuc2Nyb2xsQmFySC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKCFfc2VsZi4kc2Nyb2xsQW5pbWF0aW9uKVxuICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KGUuZGF0YSAtIF9zZWxmLnNjcm9sbE1hcmdpbi5sZWZ0KTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLnNjcm9sbExlZnQgPSAwO1xuXG4gICAgdGhpcy5jdXJzb3JQb3MgPSB7XG4gICAgICAgIHJvdyA6IDAsXG4gICAgICAgIGNvbHVtbiA6IDBcbiAgICB9O1xuXG4gICAgdGhpcy4kZm9udE1ldHJpY3MgPSBuZXcgRm9udE1ldHJpY3ModGhpcy5jb250YWluZXIpO1xuICAgIHRoaXMuJHRleHRMYXllci4kc2V0Rm9udE1ldHJpY3ModGhpcy4kZm9udE1ldHJpY3MpO1xuICAgIHRoaXMuJHRleHRMYXllci5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlQ2hhcmFjdGVyU2l6ZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIF9zZWxmLnVwZGF0ZUNoYXJhY3RlclNpemUoKTtcbiAgICAgICAgX3NlbGYub25SZXNpemUodHJ1ZSwgX3NlbGYuZ3V0dGVyV2lkdGgsIF9zZWxmLiRzaXplLndpZHRoLCBfc2VsZi4kc2l6ZS5oZWlnaHQpO1xuICAgICAgICBfc2VsZi5fc2lnbmFsKFwiY2hhbmdlQ2hhcmFjdGVyU2l6ZVwiLCBlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuJHNpemUgPSB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIHNjcm9sbGVySGVpZ2h0OiAwLFxuICAgICAgICBzY3JvbGxlcldpZHRoOiAwLFxuICAgICAgICAkZGlydHk6IHRydWVcbiAgICB9O1xuXG4gICAgdGhpcy5sYXllckNvbmZpZyA9IHtcbiAgICAgICAgd2lkdGggOiAxLFxuICAgICAgICBwYWRkaW5nIDogMCxcbiAgICAgICAgZmlyc3RSb3cgOiAwLFxuICAgICAgICBmaXJzdFJvd1NjcmVlbjogMCxcbiAgICAgICAgbGFzdFJvdyA6IDAsXG4gICAgICAgIGxpbmVIZWlnaHQgOiAwLFxuICAgICAgICBjaGFyYWN0ZXJXaWR0aCA6IDAsXG4gICAgICAgIG1pbkhlaWdodCA6IDEsXG4gICAgICAgIG1heEhlaWdodCA6IDEsXG4gICAgICAgIG9mZnNldCA6IDAsXG4gICAgICAgIGhlaWdodCA6IDEsXG4gICAgICAgIGd1dHRlck9mZnNldDogMVxuICAgIH07XG4gICAgXG4gICAgdGhpcy5zY3JvbGxNYXJnaW4gPSB7XG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgdjogMCxcbiAgICAgICAgaDogMFxuICAgIH07XG5cbiAgICB0aGlzLiRsb29wID0gbmV3IFJlbmRlckxvb3AoXG4gICAgICAgIHRoaXMuJHJlbmRlckNoYW5nZXMuYmluZCh0aGlzKSxcbiAgICAgICAgdGhpcy5jb250YWluZXIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld1xuICAgICk7XG4gICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTtcblxuICAgIHRoaXMudXBkYXRlQ2hhcmFjdGVyU2l6ZSgpO1xuICAgIHRoaXMuc2V0UGFkZGluZyg0KTtcbiAgICBjb25maWcucmVzZXRPcHRpb25zKHRoaXMpO1xuICAgIGNvbmZpZy5fZW1pdChcInJlbmRlcmVyXCIsIHRoaXMpO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuXG4gICAgdGhpcy5DSEFOR0VfQ1VSU09SID0gMTtcbiAgICB0aGlzLkNIQU5HRV9NQVJLRVIgPSAyO1xuICAgIHRoaXMuQ0hBTkdFX0dVVFRFUiA9IDQ7XG4gICAgdGhpcy5DSEFOR0VfU0NST0xMID0gODtcbiAgICB0aGlzLkNIQU5HRV9MSU5FUyA9IDE2O1xuICAgIHRoaXMuQ0hBTkdFX1RFWFQgPSAzMjtcbiAgICB0aGlzLkNIQU5HRV9TSVpFID0gNjQ7XG4gICAgdGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0sgPSAxMjg7XG4gICAgdGhpcy5DSEFOR0VfTUFSS0VSX0ZST05UID0gMjU2O1xuICAgIHRoaXMuQ0hBTkdFX0ZVTEwgPSA1MTI7XG4gICAgdGhpcy5DSEFOR0VfSF9TQ1JPTEwgPSAxMDI0O1xuXG4gICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpO1xuXG4gICAgdGhpcy51cGRhdGVDaGFyYWN0ZXJTaXplID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLiR0ZXh0TGF5ZXIuYWxsb3dCb2xkRm9udHMgIT0gdGhpcy4kYWxsb3dCb2xkRm9udHMpIHtcbiAgICAgICAgICAgIHRoaXMuJGFsbG93Qm9sZEZvbnRzID0gdGhpcy4kdGV4dExheWVyLmFsbG93Qm9sZEZvbnRzO1xuICAgICAgICAgICAgdGhpcy5zZXRTdHlsZShcImFjZV9ub2JvbGRcIiwgIXRoaXMuJGFsbG93Qm9sZEZvbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGF5ZXJDb25maWcuY2hhcmFjdGVyV2lkdGggPVxuICAgICAgICB0aGlzLmNoYXJhY3RlcldpZHRoID0gdGhpcy4kdGV4dExheWVyLmdldENoYXJhY3RlcldpZHRoKCk7XG4gICAgICAgIHRoaXMubGF5ZXJDb25maWcubGluZUhlaWdodCA9XG4gICAgICAgIHRoaXMubGluZUhlaWdodCA9IHRoaXMuJHRleHRMYXllci5nZXRMaW5lSGVpZ2h0KCk7XG4gICAgICAgIHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7XG4gICAgfTtcbiAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7XG4gICAgICAgIGlmICh0aGlzLnNlc3Npb24pXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uZG9jLm9mZihcImNoYW5nZU5ld0xpbmVNb2RlXCIsIHRoaXMub25DaGFuZ2VOZXdMaW5lTW9kZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICAgICAgaWYgKHNlc3Npb24gJiYgdGhpcy5zY3JvbGxNYXJnaW4udG9wICYmIHNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgPD0gMClcbiAgICAgICAgICAgIHNlc3Npb24uc2V0U2Nyb2xsVG9wKC10aGlzLnNjcm9sbE1hcmdpbi50b3ApO1xuXG4gICAgICAgIHRoaXMuJGN1cnNvckxheWVyLnNldFNlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgIHRoaXMuJG1hcmtlckJhY2suc2V0U2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgdGhpcy4kbWFya2VyRnJvbnQuc2V0U2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIuc2V0U2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgdGhpcy4kdGV4dExheWVyLnNldFNlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgIGlmICghc2Vzc2lvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi4kc2V0Rm9udE1ldHJpY3ModGhpcy4kZm9udE1ldHJpY3MpO1xuICAgICAgICB0aGlzLnNjcm9sbEJhckguc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsQmFyVi5zY3JvbGxUb3AgPSBudWxsO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5vbkNoYW5nZU5ld0xpbmVNb2RlID0gdGhpcy5vbkNoYW5nZU5ld0xpbmVNb2RlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VOZXdMaW5lTW9kZSgpO1xuICAgICAgICB0aGlzLnNlc3Npb24uZG9jLm9uKFwiY2hhbmdlTmV3TGluZU1vZGVcIiwgdGhpcy5vbkNoYW5nZU5ld0xpbmVNb2RlKTtcbiAgICB9O1xuICAgIHRoaXMudXBkYXRlTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdywgZm9yY2UpIHtcbiAgICAgICAgaWYgKGxhc3RSb3cgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGxhc3RSb3cgPSBJbmZpbml0eTtcblxuICAgICAgICBpZiAoIXRoaXMuJGNoYW5nZWRMaW5lcykge1xuICAgICAgICAgICAgdGhpcy4kY2hhbmdlZExpbmVzID0ge1xuICAgICAgICAgICAgICAgIGZpcnN0Um93OiBmaXJzdFJvdyxcbiAgICAgICAgICAgICAgICBsYXN0Um93OiBsYXN0Um93XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuJGNoYW5nZWRMaW5lcy5maXJzdFJvdyA+IGZpcnN0Um93KVxuICAgICAgICAgICAgICAgIHRoaXMuJGNoYW5nZWRMaW5lcy5maXJzdFJvdyA9IGZpcnN0Um93O1xuXG4gICAgICAgICAgICBpZiAodGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3cgPCBsYXN0Um93KVxuICAgICAgICAgICAgICAgIHRoaXMuJGNoYW5nZWRMaW5lcy5sYXN0Um93ID0gbGFzdFJvdztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3cgPCB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93KSB7XG4gICAgICAgICAgICBpZiAoZm9yY2UpXG4gICAgICAgICAgICAgICAgdGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3cgPSB0aGlzLmxheWVyQ29uZmlnLmxhc3RSb3c7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiRjaGFuZ2VkTGluZXMuZmlyc3RSb3cgPiB0aGlzLmxheWVyQ29uZmlnLmxhc3RSb3cpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfTElORVMpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uQ2hhbmdlTmV3TGluZU1vZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUKTtcbiAgICAgICAgdGhpcy4kdGV4dExheWVyLiR1cGRhdGVFb2xDaGFyKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuc2V0RW9sQ2hhcih0aGlzLiR0ZXh0TGF5ZXIuRU9MX0NIQVIpO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5vbkNoYW5nZVRhYlNpemUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUIHwgdGhpcy5DSEFOR0VfTUFSS0VSKTtcbiAgICAgICAgdGhpcy4kdGV4dExheWVyLm9uQ2hhbmdlVGFiU2l6ZSgpO1xuICAgIH07XG4gICAgdGhpcy51cGRhdGVUZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCk7XG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUZ1bGwgPSBmdW5jdGlvbihmb3JjZSkge1xuICAgICAgICBpZiAoZm9yY2UpXG4gICAgICAgICAgICB0aGlzLiRyZW5kZXJDaGFuZ2VzKHRoaXMuQ0hBTkdFX0ZVTEwsIHRydWUpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZVTEwpO1xuICAgIH07XG4gICAgdGhpcy51cGRhdGVGb250U2l6ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIuY2hlY2tGb3JTaXplQ2hhbmdlcygpO1xuICAgIH07XG5cbiAgICB0aGlzLiRjaGFuZ2VzID0gMDtcbiAgICB0aGlzLiR1cGRhdGVTaXplQXN5bmMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuJGxvb3AucGVuZGluZylcbiAgICAgICAgICAgIHRoaXMuJHNpemUuJGRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5vblJlc2l6ZSgpO1xuICAgIH07XG4gICAgdGhpcy5vblJlc2l6ZSA9IGZ1bmN0aW9uKGZvcmNlLCBndXR0ZXJXaWR0aCwgd2lkdGgsIGhlaWdodCkge1xuICAgICAgICBpZiAodGhpcy5yZXNpemluZyA+IDIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucmVzaXppbmcgPiAwKVxuICAgICAgICAgICAgdGhpcy5yZXNpemluZysrO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnJlc2l6aW5nID0gZm9yY2UgPyAxIDogMDtcbiAgICAgICAgdmFyIGVsID0gdGhpcy5jb250YWluZXI7XG4gICAgICAgIGlmICghaGVpZ2h0KVxuICAgICAgICAgICAgaGVpZ2h0ID0gZWwuY2xpZW50SGVpZ2h0IHx8IGVsLnNjcm9sbEhlaWdodDtcbiAgICAgICAgaWYgKCF3aWR0aClcbiAgICAgICAgICAgIHdpZHRoID0gZWwuY2xpZW50V2lkdGggfHwgZWwuc2Nyb2xsV2lkdGg7XG4gICAgICAgIHZhciBjaGFuZ2VzID0gdGhpcy4kdXBkYXRlQ2FjaGVkU2l6ZShmb3JjZSwgZ3V0dGVyV2lkdGgsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIFxuICAgICAgICBpZiAoIXRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQgfHwgKCF3aWR0aCAmJiAhaGVpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc2l6aW5nID0gMDtcblxuICAgICAgICBpZiAoZm9yY2UpXG4gICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci4kcGFkZGluZyA9IG51bGw7XG5cbiAgICAgICAgaWYgKGZvcmNlKVxuICAgICAgICAgICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyhjaGFuZ2VzIHwgdGhpcy4kY2hhbmdlcywgdHJ1ZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUoY2hhbmdlcyB8IHRoaXMuJGNoYW5nZXMpO1xuXG4gICAgICAgIGlmICh0aGlzLnJlc2l6aW5nKVxuICAgICAgICAgICAgdGhpcy5yZXNpemluZyA9IDA7XG4gICAgICAgIHRoaXMuc2Nyb2xsQmFyVi5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxCYXJWLnNjcm9sbFRvcCA9IG51bGw7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLiR1cGRhdGVDYWNoZWRTaXplID0gZnVuY3Rpb24oZm9yY2UsIGd1dHRlcldpZHRoLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIGhlaWdodCAtPSAodGhpcy4kZXh0cmFIZWlnaHQgfHwgMCk7XG4gICAgICAgIHZhciBjaGFuZ2VzID0gMDtcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLiRzaXplO1xuICAgICAgICB2YXIgb2xkU2l6ZSA9IHtcbiAgICAgICAgICAgIHdpZHRoOiBzaXplLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBzaXplLmhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbGVySGVpZ2h0OiBzaXplLnNjcm9sbGVySGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsZXJXaWR0aDogc2l6ZS5zY3JvbGxlcldpZHRoXG4gICAgICAgIH07XG4gICAgICAgIGlmIChoZWlnaHQgJiYgKGZvcmNlIHx8IHNpemUuaGVpZ2h0ICE9IGhlaWdodCkpIHtcbiAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgY2hhbmdlcyB8PSB0aGlzLkNIQU5HRV9TSVpFO1xuXG4gICAgICAgICAgICBzaXplLnNjcm9sbGVySGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICBpZiAodGhpcy4kaG9yaXpTY3JvbGwpXG4gICAgICAgICAgICAgICAgc2l6ZS5zY3JvbGxlckhlaWdodCAtPSB0aGlzLnNjcm9sbEJhckguZ2V0SGVpZ2h0KCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEJhclYuZWxlbWVudC5zdHlsZS5ib3R0b20gPSB0aGlzLnNjcm9sbEJhckguZ2V0SGVpZ2h0KCkgKyBcInB4XCI7XG5cbiAgICAgICAgICAgIGNoYW5nZXMgPSBjaGFuZ2VzIHwgdGhpcy5DSEFOR0VfU0NST0xMO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdpZHRoICYmIChmb3JjZSB8fCBzaXplLndpZHRoICE9IHdpZHRoKSkge1xuICAgICAgICAgICAgY2hhbmdlcyB8PSB0aGlzLkNIQU5HRV9TSVpFO1xuICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoZ3V0dGVyV2lkdGggPT0gbnVsbClcbiAgICAgICAgICAgICAgICBndXR0ZXJXaWR0aCA9IHRoaXMuJHNob3dHdXR0ZXIgPyB0aGlzLiRndXR0ZXIub2Zmc2V0V2lkdGggOiAwO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmd1dHRlcldpZHRoID0gZ3V0dGVyV2lkdGg7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFySC5lbGVtZW50LnN0eWxlLmxlZnQgPSBcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUubGVmdCA9IGd1dHRlcldpZHRoICsgXCJweFwiO1xuICAgICAgICAgICAgc2l6ZS5zY3JvbGxlcldpZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggLSBndXR0ZXJXaWR0aCAtIHRoaXMuc2Nyb2xsQmFyVi5nZXRXaWR0aCgpKTsgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLnNjcm9sbEJhckguZWxlbWVudC5zdHlsZS5yaWdodCA9IFxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5yaWdodCA9IHRoaXMuc2Nyb2xsQmFyVi5nZXRXaWR0aCgpICsgXCJweFwiO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5ib3R0b20gPSB0aGlzLnNjcm9sbEJhckguZ2V0SGVpZ2h0KCkgKyBcInB4XCI7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24gJiYgdGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCkgJiYgdGhpcy5hZGp1c3RXcmFwTGltaXQoKSB8fCBmb3JjZSlcbiAgICAgICAgICAgICAgICBjaGFuZ2VzIHw9IHRoaXMuQ0hBTkdFX0ZVTEw7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHNpemUuJGRpcnR5ID0gIXdpZHRoIHx8ICFoZWlnaHQ7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMpXG4gICAgICAgICAgICB0aGlzLl9zaWduYWwoXCJyZXNpemVcIiwgb2xkU2l6ZSk7XG5cbiAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgfTtcblxuICAgIHRoaXMub25HdXR0ZXJSZXNpemUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGd1dHRlcldpZHRoID0gdGhpcy4kc2hvd0d1dHRlciA/IHRoaXMuJGd1dHRlci5vZmZzZXRXaWR0aCA6IDA7XG4gICAgICAgIGlmIChndXR0ZXJXaWR0aCAhPSB0aGlzLmd1dHRlcldpZHRoKVxuICAgICAgICAgICAgdGhpcy4kY2hhbmdlcyB8PSB0aGlzLiR1cGRhdGVDYWNoZWRTaXplKHRydWUsIGd1dHRlcldpZHRoLCB0aGlzLiRzaXplLndpZHRoLCB0aGlzLiRzaXplLmhlaWdodCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgpICYmIHRoaXMuYWRqdXN0V3JhcExpbWl0KCkpIHtcbiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4kc2l6ZS4kZGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiRjb21wdXRlTGF5ZXJDb25maWcoKTtcbiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfTUFSS0VSKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5hZGp1c3RXcmFwTGltaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGF2YWlsYWJsZVdpZHRoID0gdGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoIC0gdGhpcy4kcGFkZGluZyAqIDI7XG4gICAgICAgIHZhciBsaW1pdCA9IE1hdGguZmxvb3IoYXZhaWxhYmxlV2lkdGggLyB0aGlzLmNoYXJhY3RlcldpZHRoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5hZGp1c3RXcmFwTGltaXQobGltaXQsIHRoaXMuJHNob3dQcmludE1hcmdpbiAmJiB0aGlzLiRwcmludE1hcmdpbkNvbHVtbik7XG4gICAgfTtcbiAgICB0aGlzLnNldEFuaW1hdGVkU2Nyb2xsID0gZnVuY3Rpb24oc2hvdWxkQW5pbWF0ZSl7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwiYW5pbWF0ZWRTY3JvbGxcIiwgc2hvdWxkQW5pbWF0ZSk7XG4gICAgfTtcbiAgICB0aGlzLmdldEFuaW1hdGVkU2Nyb2xsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhbmltYXRlZFNjcm9sbDtcbiAgICB9O1xuICAgIHRoaXMuc2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbihzaG93SW52aXNpYmxlcykge1xuICAgICAgICB0aGlzLnNldE9wdGlvbihcInNob3dJbnZpc2libGVzXCIsIHNob3dJbnZpc2libGVzKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5zZXRTaG93SW52aXNpYmxlcyhzaG93SW52aXNpYmxlcyk7XG4gICAgfTtcbiAgICB0aGlzLmdldFNob3dJbnZpc2libGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcInNob3dJbnZpc2libGVzXCIpO1xuICAgIH07XG4gICAgdGhpcy5nZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcImRpc3BsYXlJbmRlbnRHdWlkZXNcIik7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0RGlzcGxheUluZGVudEd1aWRlcyA9IGZ1bmN0aW9uKGRpc3BsYXkpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJkaXNwbGF5SW5kZW50R3VpZGVzXCIsIGRpc3BsYXkpO1xuICAgIH07XG4gICAgdGhpcy5zZXRTaG93UHJpbnRNYXJnaW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJzaG93UHJpbnRNYXJnaW5cIiwgc2hvd1ByaW50TWFyZ2luKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2hvd1ByaW50TWFyZ2luID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcInNob3dQcmludE1hcmdpblwiKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0UHJpbnRNYXJnaW5Db2x1bW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJwcmludE1hcmdpbkNvbHVtblwiLCBzaG93UHJpbnRNYXJnaW4pO1xuICAgIH07XG4gICAgdGhpcy5nZXRQcmludE1hcmdpbkNvbHVtbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJwcmludE1hcmdpbkNvbHVtblwiKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2hvd0d1dHRlciA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcInNob3dHdXR0ZXJcIik7XG4gICAgfTtcbiAgICB0aGlzLnNldFNob3dHdXR0ZXIgPSBmdW5jdGlvbihzaG93KXtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9uKFwic2hvd0d1dHRlclwiLCBzaG93KTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRGYWRlRm9sZFdpZGdldHMgPSBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJmYWRlRm9sZFdpZGdldHNcIik7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0RmFkZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oc2hvdykge1xuICAgICAgICB0aGlzLnNldE9wdGlvbihcImZhZGVGb2xkV2lkZ2V0c1wiLCBzaG93KTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwiaGlnaGxpZ2h0R3V0dGVyTGluZVwiLCBzaG91bGRIaWdobGlnaHQpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEhpZ2hsaWdodEd1dHRlckxpbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwiaGlnaGxpZ2h0R3V0dGVyTGluZVwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcG9zID0gdGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5sYXllckNvbmZpZy5saW5lSGVpZ2h0O1xuICAgICAgICBpZiAodGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCkpIHtcbiAgICAgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLnNlc3Npb24uc2VsZWN0aW9uLmdldEN1cnNvcigpO1xuICAgICAgICAgICAgY3Vyc29yLmNvbHVtbiA9IDA7XG4gICAgICAgICAgICBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKGN1cnNvciwgdHJ1ZSk7XG4gICAgICAgICAgICBoZWlnaHQgKj0gdGhpcy5zZXNzaW9uLmdldFJvd0xlbmd0aChjdXJzb3Iucm93KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LnN0eWxlLnRvcCA9IHBvcy50b3AgLSB0aGlzLmxheWVyQ29uZmlnLm9mZnNldCArIFwicHhcIjtcbiAgICAgICAgdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyBcInB4XCI7XG4gICAgfTtcblxuICAgIHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy4kc2hvd1ByaW50TWFyZ2luICYmICF0aGlzLiRwcmludE1hcmdpbkVsKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmICghdGhpcy4kcHJpbnRNYXJnaW5FbCkge1xuICAgICAgICAgICAgdmFyIGNvbnRhaW5lckVsID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICBjb250YWluZXJFbC5jbGFzc05hbWUgPSBcImFjZV9sYXllciBhY2VfcHJpbnQtbWFyZ2luLWxheWVyXCI7XG4gICAgICAgICAgICB0aGlzLiRwcmludE1hcmdpbkVsID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICB0aGlzLiRwcmludE1hcmdpbkVsLmNsYXNzTmFtZSA9IFwiYWNlX3ByaW50LW1hcmdpblwiO1xuICAgICAgICAgICAgY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQodGhpcy4kcHJpbnRNYXJnaW5FbCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnQuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lckVsLCB0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLiRwcmludE1hcmdpbkVsLnN0eWxlO1xuICAgICAgICBzdHlsZS5sZWZ0ID0gKCh0aGlzLmNoYXJhY3RlcldpZHRoICogdGhpcy4kcHJpbnRNYXJnaW5Db2x1bW4pICsgdGhpcy4kcGFkZGluZykgKyBcInB4XCI7XG4gICAgICAgIHN0eWxlLnZpc2liaWxpdHkgPSB0aGlzLiRzaG93UHJpbnRNYXJnaW4gPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5zZXNzaW9uICYmIHRoaXMuc2Vzc2lvbi4kd3JhcCA9PSAtMSlcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0V3JhcExpbWl0KCk7XG4gICAgfTtcbiAgICB0aGlzLmdldENvbnRhaW5lckVsZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgIH07XG4gICAgdGhpcy5nZXRNb3VzZUV2ZW50VGFyZ2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjcm9sbGVyO1xuICAgIH07XG4gICAgdGhpcy5nZXRUZXh0QXJlYUNvbnRhaW5lciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgfTtcbiAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgY29uZmlnID0gdGhpcy5sYXllckNvbmZpZztcbiAgICAgICAgdmFyIHBvc1RvcCA9IHRoaXMuJGN1cnNvckxheWVyLiRwaXhlbFBvcy50b3A7XG4gICAgICAgIHZhciBwb3NMZWZ0ID0gdGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zLmxlZnQ7XG4gICAgICAgIHBvc1RvcCAtPSBjb25maWcub2Zmc2V0O1xuXG4gICAgICAgIHZhciBzdHlsZSA9IHRoaXMudGV4dGFyZWEuc3R5bGU7XG4gICAgICAgIHZhciBoID0gdGhpcy5saW5lSGVpZ2h0O1xuICAgICAgICBpZiAocG9zVG9wIDwgMCB8fCBwb3NUb3AgPiBjb25maWcuaGVpZ2h0IC0gaCkge1xuICAgICAgICAgICAgc3R5bGUudG9wID0gc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHcgPSB0aGlzLmNoYXJhY3RlcldpZHRoO1xuICAgICAgICBpZiAodGhpcy4kY29tcG9zaXRpb24pIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnRleHRhcmVhLnZhbHVlLnJlcGxhY2UoL15cXHgwMSsvLCBcIlwiKTtcbiAgICAgICAgICAgIHcgKj0gKHRoaXMuc2Vzc2lvbi4kZ2V0U3RyaW5nU2NyZWVuV2lkdGgodmFsKVswXSsyKTtcbiAgICAgICAgICAgIGggKz0gMjtcbiAgICAgICAgfVxuICAgICAgICBwb3NMZWZ0IC09IHRoaXMuc2Nyb2xsTGVmdDtcbiAgICAgICAgaWYgKHBvc0xlZnQgPiB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGggLSB3KVxuICAgICAgICAgICAgcG9zTGVmdCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIHc7XG5cbiAgICAgICAgcG9zTGVmdCArPSB0aGlzLmd1dHRlcldpZHRoO1xuICAgICAgICBzdHlsZS5oZWlnaHQgPSBoICsgXCJweFwiO1xuICAgICAgICBzdHlsZS53aWR0aCA9IHcgKyBcInB4XCI7XG4gICAgICAgIHN0eWxlLmxlZnQgPSBNYXRoLm1pbihwb3NMZWZ0LCB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGggLSB3KSArIFwicHhcIjtcbiAgICAgICAgc3R5bGUudG9wID0gTWF0aC5taW4ocG9zVG9wLCB0aGlzLiRzaXplLmhlaWdodCAtIGgpICsgXCJweFwiO1xuICAgIH07XG4gICAgdGhpcy5nZXRGaXJzdFZpc2libGVSb3cgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJDb25maWcuZmlyc3RSb3c7XG4gICAgfTtcbiAgICB0aGlzLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93ICsgKHRoaXMubGF5ZXJDb25maWcub2Zmc2V0ID09PSAwID8gMCA6IDEpO1xuICAgIH07XG4gICAgdGhpcy5nZXRMYXN0RnVsbHlWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjb25maWcgPSB0aGlzLmxheWVyQ29uZmlnO1xuICAgICAgICB2YXIgbGFzdFJvdyA9IGNvbmZpZy5sYXN0Um93O1xuICAgICAgICB2YXIgdG9wID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Sb3cobGFzdFJvdywgMCkgKiBjb25maWcubGluZUhlaWdodDtcbiAgICAgICAgaWYgKHRvcCAtIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKSA+IGNvbmZpZy5oZWlnaHQgLSBjb25maWcubGluZUhlaWdodClcbiAgICAgICAgICAgIHJldHVybiBsYXN0Um93IC0gMTtcbiAgICAgICAgcmV0dXJuIGxhc3RSb3c7XG4gICAgfTtcbiAgICB0aGlzLmdldExhc3RWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheWVyQ29uZmlnLmxhc3RSb3c7XG4gICAgfTtcblxuICAgIHRoaXMuJHBhZGRpbmcgPSBudWxsO1xuICAgIHRoaXMuc2V0UGFkZGluZyA9IGZ1bmN0aW9uKHBhZGRpbmcpIHtcbiAgICAgICAgdGhpcy4kcGFkZGluZyA9IHBhZGRpbmc7XG4gICAgICAgIHRoaXMuJHRleHRMYXllci5zZXRQYWRkaW5nKHBhZGRpbmcpO1xuICAgICAgICB0aGlzLiRjdXJzb3JMYXllci5zZXRQYWRkaW5nKHBhZGRpbmcpO1xuICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC5zZXRQYWRkaW5nKHBhZGRpbmcpO1xuICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnNldFBhZGRpbmcocGFkZGluZyk7XG4gICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk7XG4gICAgICAgIHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnNldFNjcm9sbE1hcmdpbiA9IGZ1bmN0aW9uKHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCkge1xuICAgICAgICB2YXIgc20gPSB0aGlzLnNjcm9sbE1hcmdpbjtcbiAgICAgICAgc20udG9wID0gdG9wfDA7XG4gICAgICAgIHNtLmJvdHRvbSA9IGJvdHRvbXwwO1xuICAgICAgICBzbS5yaWdodCA9IHJpZ2h0fDA7XG4gICAgICAgIHNtLmxlZnQgPSBsZWZ0fDA7XG4gICAgICAgIHNtLnYgPSBzbS50b3AgKyBzbS5ib3R0b207XG4gICAgICAgIHNtLmggPSBzbS5sZWZ0ICsgc20ucmlnaHQ7XG4gICAgICAgIGlmIChzbS50b3AgJiYgdGhpcy5zY3JvbGxUb3AgPD0gMCAmJiB0aGlzLnNlc3Npb24pXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKC1zbS50b3ApO1xuICAgICAgICB0aGlzLnVwZGF0ZUZ1bGwoKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0SFNjcm9sbEJhckFsd2F5c1Zpc2libGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGhTY3JvbGxCYXJBbHdheXNWaXNpYmxlO1xuICAgIH07XG4gICAgdGhpcy5zZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSA9IGZ1bmN0aW9uKGFsd2F5c1Zpc2libGUpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJoU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZVwiLCBhbHdheXNWaXNpYmxlKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VlNjcm9sbEJhckFsd2F5c1Zpc2libGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlO1xuICAgIH07XG4gICAgdGhpcy5zZXRWU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSA9IGZ1bmN0aW9uKGFsd2F5c1Zpc2libGUpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJ2U2Nyb2xsQmFyQWx3YXlzVmlzaWJsZVwiLCBhbHdheXNWaXNpYmxlKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kdXBkYXRlU2Nyb2xsQmFyViA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gdGhpcy5sYXllckNvbmZpZy5tYXhIZWlnaHQ7XG4gICAgICAgIHZhciBzY3JvbGxlckhlaWdodCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQ7XG4gICAgICAgIGlmICghdGhpcy4kbWF4TGluZXMgJiYgdGhpcy4kc2Nyb2xsUGFzdEVuZCkge1xuICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0IC09IChzY3JvbGxlckhlaWdodCAtIHRoaXMubGluZUhlaWdodCkgKiB0aGlzLiRzY3JvbGxQYXN0RW5kO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsVG9wID4gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsZXJIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxIZWlnaHQgPSB0aGlzLnNjcm9sbFRvcCArIHNjcm9sbGVySGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyVi5zY3JvbGxUb3AgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Nyb2xsQmFyVi5zZXRTY3JvbGxIZWlnaHQoc2Nyb2xsSGVpZ2h0ICsgdGhpcy5zY3JvbGxNYXJnaW4udik7XG4gICAgICAgIHRoaXMuc2Nyb2xsQmFyVi5zZXRTY3JvbGxUb3AodGhpcy5zY3JvbGxUb3AgKyB0aGlzLnNjcm9sbE1hcmdpbi50b3ApO1xuICAgIH07XG4gICAgdGhpcy4kdXBkYXRlU2Nyb2xsQmFySCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNjcm9sbEJhckguc2V0U2Nyb2xsV2lkdGgodGhpcy5sYXllckNvbmZpZy53aWR0aCArIDIgKiB0aGlzLiRwYWRkaW5nICsgdGhpcy5zY3JvbGxNYXJnaW4uaCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQmFySC5zZXRTY3JvbGxMZWZ0KHRoaXMuc2Nyb2xsTGVmdCArIHRoaXMuc2Nyb2xsTWFyZ2luLmxlZnQpO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy4kZnJvemVuID0gZmFsc2U7XG4gICAgdGhpcy5mcmVlemUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kZnJvemVuID0gdHJ1ZTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMudW5mcmVlemUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kZnJvemVuID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHRoaXMuJHJlbmRlckNoYW5nZXMgPSBmdW5jdGlvbihjaGFuZ2VzLCBmb3JjZSkge1xuICAgICAgICBpZiAodGhpcy4kY2hhbmdlcykge1xuICAgICAgICAgICAgY2hhbmdlcyB8PSB0aGlzLiRjaGFuZ2VzO1xuICAgICAgICAgICAgdGhpcy4kY2hhbmdlcyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCghdGhpcy5zZXNzaW9uIHx8ICF0aGlzLmNvbnRhaW5lci5vZmZzZXRXaWR0aCB8fCB0aGlzLiRmcm96ZW4pIHx8ICghY2hhbmdlcyAmJiAhZm9yY2UpKSB7XG4gICAgICAgICAgICB0aGlzLiRjaGFuZ2VzIHw9IGNoYW5nZXM7XG4gICAgICAgICAgICByZXR1cm47IFxuICAgICAgICB9IFxuICAgICAgICBpZiAodGhpcy4kc2l6ZS4kZGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMuJGNoYW5nZXMgfD0gY2hhbmdlcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uUmVzaXplKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5saW5lSGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIuY2hlY2tGb3JTaXplQ2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9zaWduYWwoXCJiZWZvcmVSZW5kZXJcIik7XG5cbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbiAmJiB0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyKVxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci51cGRhdGVDaGFyYWN0ZXJXaWR0aHModGhpcy4kZm9udE1ldHJpY3MpO1xuXG4gICAgICAgIHZhciBjb25maWcgPSB0aGlzLmxheWVyQ29uZmlnO1xuICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0ZVTEwgfHxcbiAgICAgICAgICAgIGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9TSVpFIHx8XG4gICAgICAgICAgICBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCB8fFxuICAgICAgICAgICAgY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0xJTkVTIHx8XG4gICAgICAgICAgICBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfU0NST0xMIHx8XG4gICAgICAgICAgICBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfSF9TQ1JPTExcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjaGFuZ2VzIHw9IHRoaXMuJGNvbXB1dGVMYXllckNvbmZpZygpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5maXJzdFJvdyAhPSB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93ICYmIGNvbmZpZy5maXJzdFJvd1NjcmVlbiA9PSB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93U2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0ID0gdGhpcy5zY3JvbGxUb3AgKyAoY29uZmlnLmZpcnN0Um93IC0gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdykgKiB0aGlzLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKHN0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvcCA9IHN0O1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzID0gY2hhbmdlcyB8IHRoaXMuQ0hBTkdFX1NDUk9MTDtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB8PSB0aGlzLiRjb21wdXRlTGF5ZXJDb25maWcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcgPSB0aGlzLmxheWVyQ29uZmlnO1xuICAgICAgICAgICAgdGhpcy4kdXBkYXRlU2Nyb2xsQmFyVigpO1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9IX1NDUk9MTClcbiAgICAgICAgICAgICAgICB0aGlzLiR1cGRhdGVTY3JvbGxCYXJIKCk7XG4gICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci5lbGVtZW50LnN0eWxlLm1hcmdpblRvcCA9ICgtY29uZmlnLm9mZnNldCkgKyBcInB4XCI7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luVG9wID0gKC1jb25maWcub2Zmc2V0KSArIFwicHhcIjtcbiAgICAgICAgICAgIHRoaXMuY29udGVudC5zdHlsZS53aWR0aCA9IGNvbmZpZy53aWR0aCArIDIgKiB0aGlzLiRwYWRkaW5nICsgXCJweFwiO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IGNvbmZpZy5taW5IZWlnaHQgKyBcInB4XCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9IX1NDUk9MTCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtdGhpcy5zY3JvbGxMZWZ0ICsgXCJweFwiO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5jbGFzc05hbWUgPSB0aGlzLnNjcm9sbExlZnQgPD0gMCA/IFwiYWNlX3Njcm9sbGVyXCIgOiBcImFjZV9zY3JvbGxlciBhY2Vfc2Nyb2xsLWxlZnRcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0ZVTEwpIHtcbiAgICAgICAgICAgIHRoaXMuJHRleHRMYXllci51cGRhdGUoY29uZmlnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiRzaG93R3V0dGVyKVxuICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZShjb25maWcpO1xuICAgICAgICAgICAgdGhpcy4kbWFya2VyQmFjay51cGRhdGUoY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuJG1hcmtlckZyb250LnVwZGF0ZShjb25maWcpO1xuICAgICAgICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIudXBkYXRlKGNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpO1xuICAgICAgICAgICAgdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSAmJiB0aGlzLiR1cGRhdGVHdXR0ZXJMaW5lSGlnaGxpZ2h0KCk7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWwoXCJhZnRlclJlbmRlclwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX1NDUk9MTCkge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9URVhUIHx8IGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9MSU5FUylcbiAgICAgICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIudXBkYXRlKGNvbmZpZyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnNjcm9sbExpbmVzKGNvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLiRzaG93R3V0dGVyKVxuICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZShjb25maWcpO1xuICAgICAgICAgICAgdGhpcy4kbWFya2VyQmFjay51cGRhdGUoY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuJG1hcmtlckZyb250LnVwZGF0ZShjb25maWcpO1xuICAgICAgICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIudXBkYXRlKGNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lICYmIHRoaXMuJHVwZGF0ZUd1dHRlckxpbmVIaWdobGlnaHQoKTtcbiAgICAgICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWwoXCJhZnRlclJlbmRlclwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCkge1xuICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZShjb25maWcpO1xuICAgICAgICAgICAgaWYgKHRoaXMuJHNob3dHdXR0ZXIpXG4gICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0xJTkVTKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kdXBkYXRlTGluZXMoKSB8fCAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0dVVFRFUikgJiYgdGhpcy4kc2hvd0d1dHRlcilcbiAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUoY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCB8fCBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfR1VUVEVSKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kc2hvd0d1dHRlcilcbiAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUoY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfQ1VSU09SKSB7XG4gICAgICAgICAgICB0aGlzLiRjdXJzb3JMYXllci51cGRhdGUoY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7XG4gICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lICYmIHRoaXMuJHVwZGF0ZUd1dHRlckxpbmVIaWdobGlnaHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzICYgKHRoaXMuQ0hBTkdFX01BUktFUiB8IHRoaXMuQ0hBTkdFX01BUktFUl9GUk9OVCkpIHtcbiAgICAgICAgICAgIHRoaXMuJG1hcmtlckZyb250LnVwZGF0ZShjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMgJiAodGhpcy5DSEFOR0VfTUFSS0VSIHwgdGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0spKSB7XG4gICAgICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnVwZGF0ZShjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2lnbmFsKFwiYWZ0ZXJSZW5kZXJcIik7XG4gICAgfTtcblxuICAgIFxuICAgIHRoaXMuJGF1dG9zaXplID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLnNlc3Npb24uZ2V0U2NyZWVuTGVuZ3RoKCkgKiB0aGlzLmxpbmVIZWlnaHQ7XG4gICAgICAgIHZhciBtYXhIZWlnaHQgPSB0aGlzLiRtYXhMaW5lcyAqIHRoaXMubGluZUhlaWdodDtcbiAgICAgICAgdmFyIGRlc2lyZWRIZWlnaHQgPSBNYXRoLm1pbihtYXhIZWlnaHQsXG4gICAgICAgICAgICBNYXRoLm1heCgodGhpcy4kbWluTGluZXMgfHwgMSkgKiB0aGlzLmxpbmVIZWlnaHQsIGhlaWdodClcbiAgICAgICAgKSArIHRoaXMuc2Nyb2xsTWFyZ2luLnYgKyAodGhpcy4kZXh0cmFIZWlnaHQgfHwgMCk7XG4gICAgICAgIGlmICh0aGlzLiRob3JpelNjcm9sbClcbiAgICAgICAgICAgIGRlc2lyZWRIZWlnaHQgKz0gdGhpcy5zY3JvbGxCYXJILmdldEhlaWdodCgpO1xuICAgICAgICBpZiAodGhpcy4kbWF4UGl4ZWxIZWlnaHQgJiYgZGVzaXJlZEhlaWdodCA+IHRoaXMuJG1heFBpeGVsSGVpZ2h0KVxuICAgICAgICAgICAgZGVzaXJlZEhlaWdodCA9IHRoaXMuJG1heFBpeGVsSGVpZ2h0O1xuICAgICAgICB2YXIgdlNjcm9sbCA9IGhlaWdodCA+IG1heEhlaWdodDtcbiAgICAgICAgXG4gICAgICAgIGlmIChkZXNpcmVkSGVpZ2h0ICE9IHRoaXMuZGVzaXJlZEhlaWdodCB8fFxuICAgICAgICAgICAgdGhpcy4kc2l6ZS5oZWlnaHQgIT0gdGhpcy5kZXNpcmVkSGVpZ2h0IHx8IHZTY3JvbGwgIT0gdGhpcy4kdlNjcm9sbCkge1xuICAgICAgICAgICAgaWYgKHZTY3JvbGwgIT0gdGhpcy4kdlNjcm9sbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHZTY3JvbGwgPSB2U2Nyb2xsO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyVi5zZXRWaXNpYmxlKHZTY3JvbGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdyA9IHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gZGVzaXJlZEhlaWdodCArIFwicHhcIjtcbiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZUNhY2hlZFNpemUodHJ1ZSwgdGhpcy4kZ3V0dGVyV2lkdGgsIHcsIGRlc2lyZWRIZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kZXNpcmVkSGVpZ2h0ID0gZGVzaXJlZEhlaWdodDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5fc2lnbmFsKFwiYXV0b3NpemVcIik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHRoaXMuJGNvbXB1dGVMYXllckNvbmZpZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLiRzaXplO1xuICAgICAgICBcbiAgICAgICAgdmFyIGhpZGVTY3JvbGxiYXJzID0gc2l6ZS5oZWlnaHQgPD0gMiAqIHRoaXMubGluZUhlaWdodDtcbiAgICAgICAgdmFyIHNjcmVlbkxpbmVzID0gdGhpcy5zZXNzaW9uLmdldFNjcmVlbkxlbmd0aCgpO1xuICAgICAgICB2YXIgbWF4SGVpZ2h0ID0gc2NyZWVuTGluZXMgKiB0aGlzLmxpbmVIZWlnaHQ7XG5cbiAgICAgICAgdmFyIGxvbmdlc3RMaW5lID0gdGhpcy4kZ2V0TG9uZ2VzdExpbmUoKTtcbiAgICAgICAgXG4gICAgICAgIHZhciBob3JpelNjcm9sbCA9ICFoaWRlU2Nyb2xsYmFycyAmJiAodGhpcy4kaFNjcm9sbEJhckFsd2F5c1Zpc2libGUgfHxcbiAgICAgICAgICAgIHNpemUuc2Nyb2xsZXJXaWR0aCAtIGxvbmdlc3RMaW5lIC0gMiAqIHRoaXMuJHBhZGRpbmcgPCAwKTtcblxuICAgICAgICB2YXIgaFNjcm9sbENoYW5nZWQgPSB0aGlzLiRob3JpelNjcm9sbCAhPT0gaG9yaXpTY3JvbGw7XG4gICAgICAgIGlmIChoU2Nyb2xsQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy4kaG9yaXpTY3JvbGwgPSBob3JpelNjcm9sbDtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFySC5zZXRWaXNpYmxlKGhvcml6U2Nyb2xsKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdlNjcm9sbEJlZm9yZSA9IHRoaXMuJHZTY3JvbGw7IC8vIGF1dG9zaXplIGNhbiBjaGFuZ2UgdnNjcm9sbCB2YWx1ZSBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gdXBkYXRlIGxvbmdlc3RMaW5lXG4gICAgICAgIGlmICh0aGlzLiRtYXhMaW5lcyAmJiB0aGlzLmxpbmVIZWlnaHQgPiAxKVxuICAgICAgICAgICAgdGhpcy4kYXV0b3NpemUoKTtcblxuICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5zY3JvbGxUb3AgJSB0aGlzLmxpbmVIZWlnaHQ7XG4gICAgICAgIHZhciBtaW5IZWlnaHQgPSBzaXplLnNjcm9sbGVySGVpZ2h0ICsgdGhpcy5saW5lSGVpZ2h0O1xuICAgICAgICBcbiAgICAgICAgdmFyIHNjcm9sbFBhc3RFbmQgPSAhdGhpcy4kbWF4TGluZXMgJiYgdGhpcy4kc2Nyb2xsUGFzdEVuZFxuICAgICAgICAgICAgPyAoc2l6ZS5zY3JvbGxlckhlaWdodCAtIHRoaXMubGluZUhlaWdodCkgKiB0aGlzLiRzY3JvbGxQYXN0RW5kXG4gICAgICAgICAgICA6IDA7XG4gICAgICAgIG1heEhlaWdodCArPSBzY3JvbGxQYXN0RW5kO1xuICAgICAgICBcbiAgICAgICAgdmFyIHNtID0gdGhpcy5zY3JvbGxNYXJnaW47XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AoTWF0aC5tYXgoLXNtLnRvcCxcbiAgICAgICAgICAgIE1hdGgubWluKHRoaXMuc2Nyb2xsVG9wLCBtYXhIZWlnaHQgLSBzaXplLnNjcm9sbGVySGVpZ2h0ICsgc20uYm90dG9tKSkpO1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KE1hdGgubWF4KC1zbS5sZWZ0LCBNYXRoLm1pbih0aGlzLnNjcm9sbExlZnQsIFxuICAgICAgICAgICAgbG9uZ2VzdExpbmUgKyAyICogdGhpcy4kcGFkZGluZyAtIHNpemUuc2Nyb2xsZXJXaWR0aCArIHNtLnJpZ2h0KSkpO1xuICAgICAgICBcbiAgICAgICAgdmFyIHZTY3JvbGwgPSAhaGlkZVNjcm9sbGJhcnMgJiYgKHRoaXMuJHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlIHx8XG4gICAgICAgICAgICBzaXplLnNjcm9sbGVySGVpZ2h0IC0gbWF4SGVpZ2h0ICsgc2Nyb2xsUGFzdEVuZCA8IDAgfHwgdGhpcy5zY3JvbGxUb3AgPiBzbS50b3ApO1xuICAgICAgICB2YXIgdlNjcm9sbENoYW5nZWQgPSB2U2Nyb2xsQmVmb3JlICE9PSB2U2Nyb2xsO1xuICAgICAgICBpZiAodlNjcm9sbENoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuJHZTY3JvbGwgPSB2U2Nyb2xsO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxCYXJWLnNldFZpc2libGUodlNjcm9sbCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGluZUNvdW50ID0gTWF0aC5jZWlsKG1pbkhlaWdodCAvIHRoaXMubGluZUhlaWdodCkgLSAxO1xuICAgICAgICB2YXIgZmlyc3RSb3cgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKCh0aGlzLnNjcm9sbFRvcCAtIG9mZnNldCkgLyB0aGlzLmxpbmVIZWlnaHQpKTtcbiAgICAgICAgdmFyIGxhc3RSb3cgPSBmaXJzdFJvdyArIGxpbmVDb3VudDtcbiAgICAgICAgdmFyIGZpcnN0Um93U2NyZWVuLCBmaXJzdFJvd0hlaWdodDtcbiAgICAgICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLmxpbmVIZWlnaHQ7XG4gICAgICAgIGZpcnN0Um93ID0gc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50Um93KGZpcnN0Um93LCAwKTtcbiAgICAgICAgdmFyIGZvbGRMaW5lID0gc2Vzc2lvbi5nZXRGb2xkTGluZShmaXJzdFJvdyk7XG4gICAgICAgIGlmIChmb2xkTGluZSkge1xuICAgICAgICAgICAgZmlyc3RSb3cgPSBmb2xkTGluZS5zdGFydC5yb3c7XG4gICAgICAgIH1cblxuICAgICAgICBmaXJzdFJvd1NjcmVlbiA9IHNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblJvdyhmaXJzdFJvdywgMCk7XG4gICAgICAgIGZpcnN0Um93SGVpZ2h0ID0gc2Vzc2lvbi5nZXRSb3dMZW5ndGgoZmlyc3RSb3cpICogbGluZUhlaWdodDtcblxuICAgICAgICBsYXN0Um93ID0gTWF0aC5taW4oc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50Um93KGxhc3RSb3csIDApLCBzZXNzaW9uLmdldExlbmd0aCgpIC0gMSk7XG4gICAgICAgIG1pbkhlaWdodCA9IHNpemUuc2Nyb2xsZXJIZWlnaHQgKyBzZXNzaW9uLmdldFJvd0xlbmd0aChsYXN0Um93KSAqIGxpbmVIZWlnaHQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSb3dIZWlnaHQ7XG5cbiAgICAgICAgb2Zmc2V0ID0gdGhpcy5zY3JvbGxUb3AgLSBmaXJzdFJvd1NjcmVlbiAqIGxpbmVIZWlnaHQ7XG5cbiAgICAgICAgdmFyIGNoYW5nZXMgPSAwO1xuICAgICAgICBpZiAodGhpcy5sYXllckNvbmZpZy53aWR0aCAhPSBsb25nZXN0TGluZSkgXG4gICAgICAgICAgICBjaGFuZ2VzID0gdGhpcy5DSEFOR0VfSF9TQ1JPTEw7XG4gICAgICAgIGlmIChoU2Nyb2xsQ2hhbmdlZCB8fCB2U2Nyb2xsQ2hhbmdlZCkge1xuICAgICAgICAgICAgY2hhbmdlcyA9IHRoaXMuJHVwZGF0ZUNhY2hlZFNpemUodHJ1ZSwgdGhpcy5ndXR0ZXJXaWR0aCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsKFwic2Nyb2xsYmFyVmlzaWJpbGl0eUNoYW5nZWRcIik7XG4gICAgICAgICAgICBpZiAodlNjcm9sbENoYW5nZWQpXG4gICAgICAgICAgICAgICAgbG9uZ2VzdExpbmUgPSB0aGlzLiRnZXRMb25nZXN0TGluZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLmxheWVyQ29uZmlnID0ge1xuICAgICAgICAgICAgd2lkdGggOiBsb25nZXN0TGluZSxcbiAgICAgICAgICAgIHBhZGRpbmcgOiB0aGlzLiRwYWRkaW5nLFxuICAgICAgICAgICAgZmlyc3RSb3cgOiBmaXJzdFJvdyxcbiAgICAgICAgICAgIGZpcnN0Um93U2NyZWVuOiBmaXJzdFJvd1NjcmVlbixcbiAgICAgICAgICAgIGxhc3RSb3cgOiBsYXN0Um93LFxuICAgICAgICAgICAgbGluZUhlaWdodCA6IGxpbmVIZWlnaHQsXG4gICAgICAgICAgICBjaGFyYWN0ZXJXaWR0aCA6IHRoaXMuY2hhcmFjdGVyV2lkdGgsXG4gICAgICAgICAgICBtaW5IZWlnaHQgOiBtaW5IZWlnaHQsXG4gICAgICAgICAgICBtYXhIZWlnaHQgOiBtYXhIZWlnaHQsXG4gICAgICAgICAgICBvZmZzZXQgOiBvZmZzZXQsXG4gICAgICAgICAgICBndXR0ZXJPZmZzZXQgOiBsaW5lSGVpZ2h0ID8gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChvZmZzZXQgKyBzaXplLmhlaWdodCAtIHNpemUuc2Nyb2xsZXJIZWlnaHQpIC8gbGluZUhlaWdodCkpIDogMCxcbiAgICAgICAgICAgIGhlaWdodCA6IHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHRcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICB9O1xuXG4gICAgdGhpcy4kdXBkYXRlTGluZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLiRjaGFuZ2VkTGluZXMpIHJldHVybjtcbiAgICAgICAgdmFyIGZpcnN0Um93ID0gdGhpcy4kY2hhbmdlZExpbmVzLmZpcnN0Um93O1xuICAgICAgICB2YXIgbGFzdFJvdyA9IHRoaXMuJGNoYW5nZWRMaW5lcy5sYXN0Um93O1xuICAgICAgICB0aGlzLiRjaGFuZ2VkTGluZXMgPSBudWxsO1xuXG4gICAgICAgIHZhciBsYXllckNvbmZpZyA9IHRoaXMubGF5ZXJDb25maWc7XG5cbiAgICAgICAgaWYgKGZpcnN0Um93ID4gbGF5ZXJDb25maWcubGFzdFJvdyArIDEpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChsYXN0Um93IDwgbGF5ZXJDb25maWcuZmlyc3RSb3cpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChsYXN0Um93ID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHNob3dHdXR0ZXIpXG4gICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKGxheWVyQ29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuJHRleHRMYXllci51cGRhdGUobGF5ZXJDb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuJHRleHRMYXllci51cGRhdGVMaW5lcyhsYXllckNvbmZpZywgZmlyc3RSb3csIGxhc3RSb3cpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy4kZ2V0TG9uZ2VzdExpbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYXJDb3VudCA9IHRoaXMuc2Vzc2lvbi5nZXRTY3JlZW5XaWR0aCgpO1xuICAgICAgICBpZiAodGhpcy5zaG93SW52aXNpYmxlcyAmJiAhdGhpcy5zZXNzaW9uLiR1c2VXcmFwTW9kZSlcbiAgICAgICAgICAgIGNoYXJDb3VudCArPSAxO1xuXG4gICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGggLSAyICogdGhpcy4kcGFkZGluZywgTWF0aC5yb3VuZChjaGFyQ291bnQgKiB0aGlzLmNoYXJhY3RlcldpZHRoKSk7XG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUZyb250TWFya2VycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC5zZXRNYXJrZXJzKHRoaXMuc2Vzc2lvbi5nZXRNYXJrZXJzKHRydWUpKTtcbiAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9NQVJLRVJfRlJPTlQpO1xuICAgIH07XG4gICAgdGhpcy51cGRhdGVCYWNrTWFya2VycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnNldE1hcmtlcnModGhpcy5zZXNzaW9uLmdldE1hcmtlcnMoKSk7XG4gICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0spO1xuICAgIH07XG4gICAgdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpe1xuICAgICAgICB0aGlzLiRndXR0ZXJMYXllci5hZGRHdXR0ZXJEZWNvcmF0aW9uKHJvdywgY2xhc3NOYW1lKTtcbiAgICB9O1xuICAgIHRoaXMucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKXtcbiAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbihyb3csIGNsYXNzTmFtZSk7XG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUJyZWFrcG9pbnRzID0gZnVuY3Rpb24ocm93cykge1xuICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0dVVFRFUik7XG4gICAgfTtcbiAgICB0aGlzLnNldEFubm90YXRpb25zID0gZnVuY3Rpb24oYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIuc2V0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbnMpO1xuICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0dVVFRFUik7XG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUN1cnNvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0NVUlNPUik7XG4gICAgfTtcbiAgICB0aGlzLmhpZGVDdXJzb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIuaGlkZUN1cnNvcigpO1xuICAgIH07XG4gICAgdGhpcy5zaG93Q3Vyc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJGN1cnNvckxheWVyLnNob3dDdXJzb3IoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldyA9IGZ1bmN0aW9uKGFuY2hvciwgbGVhZCwgb2Zmc2V0KSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoYW5jaG9yLCBvZmZzZXQpO1xuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9WaWV3KGxlYWQsIG9mZnNldCk7XG4gICAgfTtcbiAgICB0aGlzLnNjcm9sbEN1cnNvckludG9WaWV3ID0gZnVuY3Rpb24oY3Vyc29yLCBvZmZzZXQsICR2aWV3TWFyZ2luKSB7XG4gICAgICAgIGlmICh0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKGN1cnNvcik7XG5cbiAgICAgICAgdmFyIGxlZnQgPSBwb3MubGVmdDtcbiAgICAgICAgdmFyIHRvcCA9IHBvcy50b3A7XG4gICAgICAgIFxuICAgICAgICB2YXIgdG9wTWFyZ2luID0gJHZpZXdNYXJnaW4gJiYgJHZpZXdNYXJnaW4udG9wIHx8IDA7XG4gICAgICAgIHZhciBib3R0b21NYXJnaW4gPSAkdmlld01hcmdpbiAmJiAkdmlld01hcmdpbi5ib3R0b20gfHwgMDtcbiAgICAgICAgXG4gICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLiRzY3JvbGxBbmltYXRpb24gPyB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgOiB0aGlzLnNjcm9sbFRvcDtcbiAgICAgICAgXG4gICAgICAgIGlmIChzY3JvbGxUb3AgKyB0b3BNYXJnaW4gPiB0b3ApIHtcbiAgICAgICAgICAgIGlmIChvZmZzZXQgJiYgc2Nyb2xsVG9wICsgdG9wTWFyZ2luID4gdG9wICsgdGhpcy5saW5lSGVpZ2h0KVxuICAgICAgICAgICAgICAgIHRvcCAtPSBvZmZzZXQgKiB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0O1xuICAgICAgICAgICAgaWYgKHRvcCA9PT0gMClcbiAgICAgICAgICAgICAgICB0b3AgPSAtdGhpcy5zY3JvbGxNYXJnaW4udG9wO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcCh0b3ApO1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFRvcCArIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQgLSBib3R0b21NYXJnaW4gPCB0b3AgKyB0aGlzLmxpbmVIZWlnaHQpIHtcbiAgICAgICAgICAgIGlmIChvZmZzZXQgJiYgc2Nyb2xsVG9wICsgdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCAtIGJvdHRvbU1hcmdpbiA8IHRvcCAtICB0aGlzLmxpbmVIZWlnaHQpXG4gICAgICAgICAgICAgICAgdG9wICs9IG9mZnNldCAqIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHRvcCArIHRoaXMubGluZUhlaWdodCAtIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQ7XG5cbiAgICAgICAgaWYgKHNjcm9sbExlZnQgPiBsZWZ0KSB7XG4gICAgICAgICAgICBpZiAobGVmdCA8IHRoaXMuJHBhZGRpbmcgKyAyICogdGhpcy5sYXllckNvbmZpZy5jaGFyYWN0ZXJXaWR0aClcbiAgICAgICAgICAgICAgICBsZWZ0ID0gLXRoaXMuc2Nyb2xsTWFyZ2luLmxlZnQ7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChsZWZ0KTtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxMZWZ0ICsgdGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoIDwgbGVmdCArIHRoaXMuY2hhcmFjdGVyV2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KE1hdGgucm91bmQobGVmdCArIHRoaXMuY2hhcmFjdGVyV2lkdGggLSB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxMZWZ0IDw9IHRoaXMuJHBhZGRpbmcgJiYgbGVmdCAtIHNjcm9sbExlZnQgPCB0aGlzLmNoYXJhY3RlcldpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdCgwKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRTY3JvbGxUb3AgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2Nyb2xsTGVmdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldFNjcm9sbExlZnQoKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2Nyb2xsVG9wUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjcm9sbFRvcCAvIHRoaXMubGluZUhlaWdodDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2Nyb2xsQm90dG9tUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLmZsb29yKCh0aGlzLnNjcm9sbFRvcCArIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQpIC8gdGhpcy5saW5lSGVpZ2h0KSAtIDEpO1xuICAgIH07XG4gICAgdGhpcy5zY3JvbGxUb1JvdyA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHJvdyAqIHRoaXMubGluZUhlaWdodCk7XG4gICAgfTtcblxuICAgIHRoaXMuYWxpZ25DdXJzb3IgPSBmdW5jdGlvbihjdXJzb3IsIGFsaWdubWVudCkge1xuICAgICAgICBpZiAodHlwZW9mIGN1cnNvciA9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgY3Vyc29yID0ge3JvdzogY3Vyc29yLCBjb2x1bW46IDB9O1xuXG4gICAgICAgIHZhciBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKGN1cnNvcik7XG4gICAgICAgIHZhciBoID0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCAtIHRoaXMubGluZUhlaWdodDtcbiAgICAgICAgdmFyIG9mZnNldCA9IHBvcy50b3AgLSBoICogKGFsaWdubWVudCB8fCAwKTtcblxuICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKG9mZnNldCk7XG4gICAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfTtcblxuICAgIHRoaXMuU1RFUFMgPSA4O1xuICAgIHRoaXMuJGNhbGNTdGVwcyA9IGZ1bmN0aW9uKGZyb21WYWx1ZSwgdG9WYWx1ZSl7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgdmFyIGwgPSB0aGlzLlNURVBTO1xuICAgICAgICB2YXIgc3RlcHMgPSBbXTtcblxuICAgICAgICB2YXIgZnVuYyAgPSBmdW5jdGlvbih0LCB4X21pbiwgZHgpIHtcbiAgICAgICAgICAgIHJldHVybiBkeCAqIChNYXRoLnBvdyh0IC0gMSwgMykgKyAxKSArIHhfbWluO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsOyArK2kpXG4gICAgICAgICAgICBzdGVwcy5wdXNoKGZ1bmMoaSAvIHRoaXMuU1RFUFMsIGZyb21WYWx1ZSwgdG9WYWx1ZSAtIGZyb21WYWx1ZSkpO1xuXG4gICAgICAgIHJldHVybiBzdGVwcztcbiAgICB9O1xuICAgIHRoaXMuc2Nyb2xsVG9MaW5lID0gZnVuY3Rpb24obGluZSwgY2VudGVyLCBhbmltYXRlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcG9zID0gdGhpcy4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbih7cm93OiBsaW5lLCBjb2x1bW46IDB9KTtcbiAgICAgICAgdmFyIG9mZnNldCA9IHBvcy50b3A7XG4gICAgICAgIGlmIChjZW50ZXIpXG4gICAgICAgICAgICBvZmZzZXQgLT0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCAvIDI7XG5cbiAgICAgICAgdmFyIGluaXRpYWxTY3JvbGwgPSB0aGlzLnNjcm9sbFRvcDtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcChvZmZzZXQpO1xuICAgICAgICBpZiAoYW5pbWF0ZSAhPT0gZmFsc2UpXG4gICAgICAgICAgICB0aGlzLmFuaW1hdGVTY3JvbGxpbmcoaW5pdGlhbFNjcm9sbCwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB0aGlzLmFuaW1hdGVTY3JvbGxpbmcgPSBmdW5jdGlvbihmcm9tVmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciB0b1ZhbHVlID0gdGhpcy5zY3JvbGxUb3A7XG4gICAgICAgIGlmICghdGhpcy4kYW5pbWF0ZWRTY3JvbGwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBfc2VsZiA9IHRoaXM7XG4gICAgICAgIFxuICAgICAgICBpZiAoZnJvbVZhbHVlID09IHRvVmFsdWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy4kc2Nyb2xsQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICB2YXIgb2xkU3RlcHMgPSB0aGlzLiRzY3JvbGxBbmltYXRpb24uc3RlcHM7XG4gICAgICAgICAgICBpZiAob2xkU3RlcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZnJvbVZhbHVlID0gb2xkU3RlcHNbMF07XG4gICAgICAgICAgICAgICAgaWYgKGZyb21WYWx1ZSA9PSB0b1ZhbHVlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHZhciBzdGVwcyA9IF9zZWxmLiRjYWxjU3RlcHMoZnJvbVZhbHVlLCB0b1ZhbHVlKTtcbiAgICAgICAgdGhpcy4kc2Nyb2xsQW5pbWF0aW9uID0ge2Zyb206IGZyb21WYWx1ZSwgdG86IHRvVmFsdWUsIHN0ZXBzOiBzdGVwc307XG5cbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiR0aW1lcik7XG5cbiAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aoc3RlcHMuc2hpZnQoKSk7XG4gICAgICAgIF9zZWxmLnNlc3Npb24uJHNjcm9sbFRvcCA9IHRvVmFsdWU7XG4gICAgICAgIHRoaXMuJHRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoc3RlcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aoc3RlcHMuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi4kc2Nyb2xsVG9wID0gdG9WYWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG9WYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi4kc2Nyb2xsVG9wID0gLTE7XG4gICAgICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxUb3AodG9WYWx1ZSk7XG4gICAgICAgICAgICAgICAgdG9WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9zZWxmLiR0aW1lciA9IGNsZWFySW50ZXJ2YWwoX3NlbGYuJHRpbWVyKTtcbiAgICAgICAgICAgICAgICBfc2VsZi4kc2Nyb2xsQW5pbWF0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAxMCk7XG4gICAgfTtcbiAgICB0aGlzLnNjcm9sbFRvWSA9IGZ1bmN0aW9uKHNjcm9sbFRvcCkge1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxUb3AgIT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9TQ1JPTEwpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc2Nyb2xsVG9YID0gZnVuY3Rpb24oc2Nyb2xsTGVmdCkge1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxMZWZ0ICE9PSBzY3JvbGxMZWZ0KVxuICAgICAgICAgICAgdGhpcy5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9IX1NDUk9MTCk7XG4gICAgfTtcbiAgICB0aGlzLnNjcm9sbFRvID0gZnVuY3Rpb24oeCwgeSkge1xuICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHkpO1xuICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdCh5KTtcbiAgICB9O1xuICAgIHRoaXMuc2Nyb2xsQnkgPSBmdW5jdGlvbihkZWx0YVgsIGRlbHRhWSkge1xuICAgICAgICBkZWx0YVkgJiYgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcCh0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgKyBkZWx0YVkpO1xuICAgICAgICBkZWx0YVggJiYgdGhpcy5zZXNzaW9uLnNldFNjcm9sbExlZnQodGhpcy5zZXNzaW9uLmdldFNjcm9sbExlZnQoKSArIGRlbHRhWCk7XG4gICAgfTtcbiAgICB0aGlzLmlzU2Nyb2xsYWJsZUJ5ID0gZnVuY3Rpb24oZGVsdGFYLCBkZWx0YVkpIHtcbiAgICAgICAgaWYgKGRlbHRhWSA8IDAgJiYgdGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpID49IDEgLSB0aGlzLnNjcm9sbE1hcmdpbi50b3ApXG4gICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoZGVsdGFZID4gMCAmJiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgKyB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0XG4gICAgICAgICAgICAtIHRoaXMubGF5ZXJDb25maWcubWF4SGVpZ2h0IDwgLTEgKyB0aGlzLnNjcm9sbE1hcmdpbi5ib3R0b20pXG4gICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoZGVsdGFYIDwgMCAmJiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpID49IDEgLSB0aGlzLnNjcm9sbE1hcmdpbi5sZWZ0KVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChkZWx0YVggPiAwICYmIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxMZWZ0KCkgKyB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGhcbiAgICAgICAgICAgIC0gdGhpcy5sYXllckNvbmZpZy53aWR0aCA8IC0xICsgdGhpcy5zY3JvbGxNYXJnaW4ucmlnaHQpXG4gICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICB0aGlzLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcyA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgdmFyIGNhbnZhc1BvcyA9IHRoaXMuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgdmFyIG9mZnNldFggPSB4ICsgdGhpcy5zY3JvbGxMZWZ0IC0gY2FudmFzUG9zLmxlZnQgLSB0aGlzLiRwYWRkaW5nO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gb2Zmc2V0WCAvIHRoaXMuY2hhcmFjdGVyV2lkdGg7XG4gICAgICAgIHZhciByb3cgPSBNYXRoLmZsb29yKCh5ICsgdGhpcy5zY3JvbGxUb3AgLSBjYW52YXNQb3MudG9wKSAvIHRoaXMubGluZUhlaWdodCk7XG4gICAgICAgIHZhciBjb2wgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG5cbiAgICAgICAgcmV0dXJuIHtyb3c6IHJvdywgY29sdW1uOiBjb2wsIHNpZGU6IG9mZnNldCAtIGNvbCA+IDAgPyAxIDogLTEsIG9mZnNldFg6ICBvZmZzZXRYfTtcbiAgICB9O1xuXG4gICAgdGhpcy5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgdmFyIGNhbnZhc1BvcyA9IHRoaXMuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHZhciBvZmZzZXRYID0geCArIHRoaXMuc2Nyb2xsTGVmdCAtIGNhbnZhc1Bvcy5sZWZ0IC0gdGhpcy4kcGFkZGluZztcblxuICAgICAgICB2YXIgY29sID0gTWF0aC5yb3VuZChvZmZzZXRYIC8gdGhpcy5jaGFyYWN0ZXJXaWR0aCk7XG5cbiAgICAgICAgdmFyIHJvdyA9ICh5ICsgdGhpcy5zY3JvbGxUb3AgLSBjYW52YXNQb3MudG9wKSAvIHRoaXMubGluZUhlaWdodDtcblxuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihyb3csIE1hdGgubWF4KGNvbCwgMCksIG9mZnNldFgpO1xuICAgIH07XG4gICAgdGhpcy50ZXh0VG9TY3JlZW5Db29yZGluYXRlcyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHZhciBjYW52YXNQb3MgPSB0aGlzLnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB2YXIgcG9zID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihyb3csIGNvbHVtbik7XG5cbiAgICAgICAgdmFyIHggPSB0aGlzLiRwYWRkaW5nICsgKHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuaXNCaWRpUm93KHBvcy5yb3csIHJvdylcbiAgICAgICAgICAgICA/IHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuZ2V0UG9zTGVmdChwb3MuY29sdW1uKVxuICAgICAgICAgICAgIDogTWF0aC5yb3VuZChwb3MuY29sdW1uICogdGhpcy5jaGFyYWN0ZXJXaWR0aCkpO1xuXG4gICAgICAgIHZhciB5ID0gcG9zLnJvdyAqIHRoaXMubGluZUhlaWdodDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFnZVg6IGNhbnZhc1Bvcy5sZWZ0ICsgeCAtIHRoaXMuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIHBhZ2VZOiBjYW52YXNQb3MudG9wICsgeSAtIHRoaXMuc2Nyb2xsVG9wXG4gICAgICAgIH07XG4gICAgfTtcbiAgICB0aGlzLnZpc3VhbGl6ZUZvY3VzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmNvbnRhaW5lciwgXCJhY2VfZm9jdXNcIik7XG4gICAgfTtcbiAgICB0aGlzLnZpc3VhbGl6ZUJsdXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMuY29udGFpbmVyLCBcImFjZV9mb2N1c1wiKTtcbiAgICB9O1xuICAgIHRoaXMuc2hvd0NvbXBvc2l0aW9uID0gZnVuY3Rpb24ocG9zaXRpb24pIHtcbiAgICAgICAgaWYgKCF0aGlzLiRjb21wb3NpdGlvbilcbiAgICAgICAgICAgIHRoaXMuJGNvbXBvc2l0aW9uID0ge1xuICAgICAgICAgICAgICAgIGtlZXBUZXh0QXJlYUF0Q3Vyc29yOiB0aGlzLiRrZWVwVGV4dEFyZWFBdEN1cnNvcixcbiAgICAgICAgICAgICAgICBjc3NUZXh0OiB0aGlzLnRleHRhcmVhLnN0eWxlLmNzc1RleHRcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgdGhpcy4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSB0cnVlO1xuICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy50ZXh0YXJlYSwgXCJhY2VfY29tcG9zaXRpb25cIik7XG4gICAgICAgIHRoaXMudGV4dGFyZWEuc3R5bGUuY3NzVGV4dCA9IFwiXCI7XG4gICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7XG4gICAgfTtcbiAgICB0aGlzLnNldENvbXBvc2l0aW9uVGV4dCA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTtcbiAgICB9O1xuICAgIHRoaXMuaGlkZUNvbXBvc2l0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy4kY29tcG9zaXRpb24pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMudGV4dGFyZWEsIFwiYWNlX2NvbXBvc2l0aW9uXCIpO1xuICAgICAgICB0aGlzLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IHRoaXMuJGNvbXBvc2l0aW9uLmtlZXBUZXh0QXJlYUF0Q3Vyc29yO1xuICAgICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLmNzc1RleHQgPSB0aGlzLiRjb21wb3NpdGlvbi5jc3NUZXh0O1xuICAgICAgICB0aGlzLiRjb21wb3NpdGlvbiA9IG51bGw7XG4gICAgfTtcbiAgICB0aGlzLnNldFRoZW1lID0gZnVuY3Rpb24odGhlbWUsIGNiKSB7XG4gICAgICAgIHZhciBfc2VsZiA9IHRoaXM7XG4gICAgICAgIHRoaXMuJHRoZW1lSWQgPSB0aGVtZTtcbiAgICAgICAgX3NlbGYuX2Rpc3BhdGNoRXZlbnQoJ3RoZW1lQ2hhbmdlJyx7dGhlbWU6dGhlbWV9KTtcblxuICAgICAgICBpZiAoIXRoZW1lIHx8IHR5cGVvZiB0aGVtZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9IHRoZW1lIHx8IHRoaXMuJG9wdGlvbnMudGhlbWUuaW5pdGlhbFZhbHVlO1xuICAgICAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoW1widGhlbWVcIiwgbW9kdWxlTmFtZV0sIGFmdGVyTG9hZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZnRlckxvYWQodGhlbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYWZ0ZXJMb2FkKG1vZHVsZSkge1xuICAgICAgICAgICAgaWYgKF9zZWxmLiR0aGVtZUlkICE9IHRoZW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBjYiAmJiBjYigpO1xuICAgICAgICAgICAgaWYgKCFtb2R1bGUgfHwgIW1vZHVsZS5jc3NDbGFzcylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZG4ndCBsb2FkIG1vZHVsZSBcIiArIHRoZW1lICsgXCIgb3IgaXQgZGlkbid0IGNhbGwgZGVmaW5lXCIpO1xuICAgICAgICAgICAgZG9tLmltcG9ydENzc1N0cmluZyhcbiAgICAgICAgICAgICAgICBtb2R1bGUuY3NzVGV4dCxcbiAgICAgICAgICAgICAgICBtb2R1bGUuY3NzQ2xhc3MsXG4gICAgICAgICAgICAgICAgX3NlbGYuY29udGFpbmVyLm93bmVyRG9jdW1lbnRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChfc2VsZi50aGVtZSlcbiAgICAgICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3MoX3NlbGYuY29udGFpbmVyLCBfc2VsZi50aGVtZS5jc3NDbGFzcyk7XG5cbiAgICAgICAgICAgIHZhciBwYWRkaW5nID0gXCJwYWRkaW5nXCIgaW4gbW9kdWxlID8gbW9kdWxlLnBhZGRpbmcgXG4gICAgICAgICAgICAgICAgOiBcInBhZGRpbmdcIiBpbiAoX3NlbGYudGhlbWUgfHwge30pID8gNCA6IF9zZWxmLiRwYWRkaW5nO1xuICAgICAgICAgICAgaWYgKF9zZWxmLiRwYWRkaW5nICYmIHBhZGRpbmcgIT0gX3NlbGYuJHBhZGRpbmcpXG4gICAgICAgICAgICAgICAgX3NlbGYuc2V0UGFkZGluZyhwYWRkaW5nKTtcbiAgICAgICAgICAgIF9zZWxmLiR0aGVtZSA9IG1vZHVsZS5jc3NDbGFzcztcblxuICAgICAgICAgICAgX3NlbGYudGhlbWUgPSBtb2R1bGU7XG4gICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3MoX3NlbGYuY29udGFpbmVyLCBtb2R1bGUuY3NzQ2xhc3MpO1xuICAgICAgICAgICAgZG9tLnNldENzc0NsYXNzKF9zZWxmLmNvbnRhaW5lciwgXCJhY2VfZGFya1wiLCBtb2R1bGUuaXNEYXJrKTtcbiAgICAgICAgICAgIGlmIChfc2VsZi4kc2l6ZSkge1xuICAgICAgICAgICAgICAgIF9zZWxmLiRzaXplLndpZHRoID0gMDtcbiAgICAgICAgICAgICAgICBfc2VsZi4kdXBkYXRlU2l6ZUFzeW5jKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9zZWxmLl9kaXNwYXRjaEV2ZW50KCd0aGVtZUxvYWRlZCcsIHt0aGVtZTptb2R1bGV9KTtcbiAgICAgICAgICAgIGNiICYmIGNiKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0VGhlbWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHRoZW1lSWQ7XG4gICAgfTtcbiAgICB0aGlzLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUsIGluY2x1ZGUpIHtcbiAgICAgICAgZG9tLnNldENzc0NsYXNzKHRoaXMuY29udGFpbmVyLCBzdHlsZSwgaW5jbHVkZSAhPT0gZmFsc2UpO1xuICAgIH07XG4gICAgdGhpcy51bnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHtcbiAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMuY29udGFpbmVyLCBzdHlsZSk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnNldEN1cnNvclN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsZXIuc3R5bGUuY3Vyc29yICE9IHN0eWxlKVxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5jdXJzb3IgPSBzdHlsZTtcbiAgICB9O1xuICAgIHRoaXMuc2V0TW91c2VDdXJzb3IgPSBmdW5jdGlvbihjdXJzb3JTdHlsZSkge1xuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmN1cnNvciA9IGN1cnNvclN0eWxlO1xuICAgIH07XG4gICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJHRleHRMYXllci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuJGN1cnNvckxheWVyLmRlc3Ryb3koKTtcbiAgICB9O1xuXG59KS5jYWxsKFZpcnR1YWxSZW5kZXJlci5wcm90b3R5cGUpO1xuXG5cbmNvbmZpZy5kZWZpbmVPcHRpb25zKFZpcnR1YWxSZW5kZXJlci5wcm90b3R5cGUsIFwicmVuZGVyZXJcIiwge1xuICAgIGFuaW1hdGVkU2Nyb2xsOiB7aW5pdGlhbFZhbHVlOiBmYWxzZX0sXG4gICAgc2hvd0ludmlzaWJsZXM6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHRleHRMYXllci5zZXRTaG93SW52aXNpYmxlcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBmYWxzZVxuICAgIH0sXG4gICAgc2hvd1ByaW50TWFyZ2luOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oKSB7IHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7IH0sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogdHJ1ZVxuICAgIH0sXG4gICAgcHJpbnRNYXJnaW5Db2x1bW46IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbigpIHsgdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKTsgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiA4MFxuICAgIH0sXG4gICAgcHJpbnRNYXJnaW46IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgdGhpcy4kcHJpbnRNYXJnaW5Db2x1bW4gPSB2YWw7XG4gICAgICAgICAgICB0aGlzLiRzaG93UHJpbnRNYXJnaW4gPSAhIXZhbDtcbiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kc2hvd1ByaW50TWFyZ2luICYmIHRoaXMuJHByaW50TWFyZ2luQ29sdW1uOyBcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2hvd0d1dHRlcjoge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHNob3cpe1xuICAgICAgICAgICAgdGhpcy4kZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSBzaG93ID8gXCJibG9ja1wiIDogXCJub25lXCI7XG4gICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZVTEwpO1xuICAgICAgICAgICAgdGhpcy5vbkd1dHRlclJlc2l6ZSgpO1xuICAgICAgICB9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IHRydWVcbiAgICB9LFxuICAgIGZhZGVGb2xkV2lkZ2V0czoge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHNob3cpIHtcbiAgICAgICAgICAgIGRvbS5zZXRDc3NDbGFzcyh0aGlzLiRndXR0ZXIsIFwiYWNlX2ZhZGUtZm9sZC13aWRnZXRzXCIsIHNob3cpO1xuICAgICAgICB9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IGZhbHNlXG4gICAgfSxcbiAgICBzaG93Rm9sZFdpZGdldHM6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbihzaG93KSB7dGhpcy4kZ3V0dGVyTGF5ZXIuc2V0U2hvd0ZvbGRXaWRnZXRzKHNob3cpO30sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogdHJ1ZVxuICAgIH0sXG4gICAgc2hvd0xpbmVOdW1iZXJzOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oc2hvdykge1xuICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIuc2V0U2hvd0xpbmVOdW1iZXJzKHNob3cpO1xuICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRURVIpO1xuICAgICAgICB9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IHRydWVcbiAgICB9LFxuICAgIGRpc3BsYXlJbmRlbnRHdWlkZXM6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbihzaG93KSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kdGV4dExheWVyLnNldERpc3BsYXlJbmRlbnRHdWlkZXMoc2hvdykpXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiB0cnVlXG4gICAgfSxcbiAgICBoaWdobGlnaHRHdXR0ZXJMaW5lOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0ID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodC5jbGFzc05hbWUgPSBcImFjZV9ndXR0ZXItYWN0aXZlLWxpbmVcIjtcbiAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXIuYXBwZW5kQ2hpbGQodGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LnN0eWxlLmRpc3BsYXkgPSBzaG91bGRIaWdobGlnaHQgPyBcIlwiIDogXCJub25lXCI7XG4gICAgICAgICAgICBpZiAodGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zKVxuICAgICAgICAgICAgICAgIHRoaXMuJHVwZGF0ZUd1dHRlckxpbmVIaWdobGlnaHQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IHRydWVcbiAgICB9LFxuICAgIGhTY3JvbGxCYXJBbHdheXNWaXNpYmxlOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuJGhTY3JvbGxCYXJBbHdheXNWaXNpYmxlIHx8ICF0aGlzLiRob3JpelNjcm9sbClcbiAgICAgICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1NDUk9MTCk7XG4gICAgICAgIH0sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogZmFsc2VcbiAgICB9LFxuICAgIHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuJHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlIHx8ICF0aGlzLiR2U2Nyb2xsKVxuICAgICAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfU0NST0xMKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBmYWxzZVxuICAgIH0sXG4gICAgZm9udFNpemU6ICB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oc2l6ZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzaXplID09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgc2l6ZSA9IHNpemUgKyBcInB4XCI7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5mb250U2l6ZSA9IHNpemU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvbnRTaXplKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogMTJcbiAgICB9LFxuICAgIGZvbnRGYW1pbHk6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5mb250RmFtaWx5ID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9udFNpemUoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWF4TGluZXM6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRnVsbCgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtaW5MaW5lczoge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGdWxsKCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1heFBpeGVsSGVpZ2h0OiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZ1bGwoKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiAwXG4gICAgfSxcbiAgICBzY3JvbGxQYXN0RW5kOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICB2YWwgPSArdmFsIHx8IDA7XG4gICAgICAgICAgICBpZiAodGhpcy4kc2Nyb2xsUGFzdEVuZCA9PSB2YWwpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy4kc2Nyb2xsUGFzdEVuZCA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfU0NST0xMKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiAwLFxuICAgICAgICBoYW5kbGVzU2V0OiB0cnVlXG4gICAgfSxcbiAgICBmaXhlZFdpZHRoR3V0dGVyOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci4kZml4ZWRXaWR0aCA9ICEhdmFsO1xuICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRURVIpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB0aGVtZToge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkgeyB0aGlzLnNldFRoZW1lKHZhbCk7IH0sXG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLiR0aGVtZUlkIHx8IHRoaXMudGhlbWU7IH0sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogXCIuL3RoZW1lL3RleHRtYXRlXCIsXG4gICAgICAgIGhhbmRsZXNTZXQ6IHRydWVcbiAgICB9XG59KTtcblxuZXhwb3J0cy5WaXJ0dWFsUmVuZGVyZXIgPSBWaXJ0dWFsUmVuZGVyZXI7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS93b3JrZXIvd29ya2VyX2NsaWVudFwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9vb3BcIixcImFjZS9saWIvbmV0XCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIixcImFjZS9jb25maWdcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgb29wID0gYWNlcXVpcmUoXCIuLi9saWIvb29wXCIpO1xudmFyIG5ldCA9IGFjZXF1aXJlKFwiLi4vbGliL25ldFwiKTtcbnZhciBFdmVudEVtaXR0ZXIgPSBhY2VxdWlyZShcIi4uL2xpYi9ldmVudF9lbWl0dGVyXCIpLkV2ZW50RW1pdHRlcjtcbnZhciBjb25maWcgPSBhY2VxdWlyZShcIi4uL2NvbmZpZ1wiKTtcblxuZnVuY3Rpb24gJHdvcmtlckJsb2Iod29ya2VyVXJsLCBtb2QpIHtcbiAgICB2YXIgc2NyaXB0ID0gbW9kLnNyYztcImltcG9ydFNjcmlwdHMoJ1wiICsgbmV0LnF1YWxpZnlVUkwod29ya2VyVXJsKSArIFwiJyk7XCI7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iKFtzY3JpcHRdLCB7XCJ0eXBlXCI6IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwifSk7XG4gICAgfSBjYXRjaCAoZSkgeyAvLyBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eVxuICAgICAgICB2YXIgQmxvYkJ1aWxkZXIgPSB3aW5kb3cuQmxvYkJ1aWxkZXIgfHwgd2luZG93LldlYktpdEJsb2JCdWlsZGVyIHx8IHdpbmRvdy5Nb3pCbG9iQnVpbGRlcjtcbiAgICAgICAgdmFyIGJsb2JCdWlsZGVyID0gbmV3IEJsb2JCdWlsZGVyKCk7XG4gICAgICAgIGJsb2JCdWlsZGVyLmFwcGVuZChzY3JpcHQpO1xuICAgICAgICByZXR1cm4gYmxvYkJ1aWxkZXIuZ2V0QmxvYihcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVXb3JrZXIod29ya2VyVXJsLCBtb2QpIHtcbiAgICB2YXIgYmxvYiA9ICR3b3JrZXJCbG9iKHdvcmtlclVybCwgbW9kKTtcbiAgICB2YXIgVVJMID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xuICAgIHZhciBibG9iVVJMID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICByZXR1cm4gbmV3IFdvcmtlcihibG9iVVJMKTtcbn1cblxudmFyIFdvcmtlckNsaWVudCA9IGZ1bmN0aW9uKHRvcExldmVsTmFtZXNwYWNlcywgbW9kLCBjbGFzc25hbWUsIHdvcmtlclVybCwgaW1wb3J0U2NyaXB0cykge1xuICAgIHRoaXMuJHNlbmREZWx0YVF1ZXVlID0gdGhpcy4kc2VuZERlbHRhUXVldWUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmNoYW5nZUxpc3RlbmVyID0gdGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25NZXNzYWdlID0gdGhpcy5vbk1lc3NhZ2UuYmluZCh0aGlzKTtcbiAgICBpZiAoYWNlcXVpcmUubmFtZVRvVXJsICYmICFhY2VxdWlyZS50b1VybClcbiAgICAgICAgYWNlcXVpcmUudG9VcmwgPSBhY2VxdWlyZS5uYW1lVG9Vcmw7XG4gICAgXG4gICAgaWYgKGNvbmZpZy5nZXQoXCJwYWNrYWdlZFwiKSB8fCAhYWNlcXVpcmUudG9VcmwpIHtcbiAgICAgICAgd29ya2VyVXJsID0gd29ya2VyVXJsIHx8IGNvbmZpZy5tb2R1bGVVcmwobW9kLmlkLCBcIndvcmtlclwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbm9ybWFsaXplUGF0aCA9IHRoaXMuJG5vcm1hbGl6ZVBhdGg7XG4gICAgICAgIHdvcmtlclVybCA9IHdvcmtlclVybCB8fCBub3JtYWxpemVQYXRoKGFjZXF1aXJlLnRvVXJsKFwiYWNlL3dvcmtlci93b3JrZXIuanNcIiwgbnVsbCwgXCJfXCIpKTtcblxuICAgICAgICB2YXIgdGxucyA9IHt9O1xuICAgICAgICB0b3BMZXZlbE5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbihucykge1xuICAgICAgICAgICAgdGxuc1tuc10gPSBub3JtYWxpemVQYXRoKGFjZXF1aXJlLnRvVXJsKG5zLCBudWxsLCBcIl9cIikucmVwbGFjZSgvKFxcLmpzKT8oXFw/LiopPyQvLCBcIlwiKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuJHdvcmtlciA9IGNyZWF0ZVdvcmtlcih3b3JrZXJVcmwsIG1vZCk7XG4gICAgaWYgKGltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgdGhpcy5zZW5kKFwiaW1wb3J0U2NyaXB0c1wiLCBpbXBvcnRTY3JpcHRzKTtcbiAgICB9XG4gICAgdGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgaW5pdCA6IHRydWUsXG4gICAgICAgIHRsbnMgOiB0bG5zLFxuICAgICAgICBtb2R1bGUgOiBtb2QuaWQsXG4gICAgICAgIGNsYXNzbmFtZSA6IGNsYXNzbmFtZVxuICAgIH0pO1xuXG4gICAgdGhpcy5jYWxsYmFja0lkID0gMTtcbiAgICB0aGlzLmNhbGxiYWNrcyA9IHt9O1xuXG4gICAgdGhpcy4kd29ya2VyLm9ubWVzc2FnZSA9IHRoaXMub25NZXNzYWdlO1xufTtcblxuKGZ1bmN0aW9uKCl7XG5cbiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7XG5cbiAgICB0aGlzLm9uTWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIG1zZyA9IGUuZGF0YTtcbiAgICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcImV2ZW50XCI6XG4gICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsKG1zZy5uYW1lLCB7ZGF0YTogbXNnLmRhdGF9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjYWxsXCI6XG4gICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5jYWxsYmFja3NbbXNnLmlkXTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobXNnLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja3NbbXNnLmlkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZXJyb3JcIjpcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydEVycm9yKG1zZy5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJsb2dcIjpcbiAgICAgICAgICAgICAgICB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLmxvZyAmJiBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBtc2cuZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHRoaXMucmVwb3J0RXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5lcnJvciAmJiBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfTtcblxuICAgIHRoaXMuJG5vcm1hbGl6ZVBhdGggPSBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgIHJldHVybiBuZXQucXVhbGlmeVVSTChwYXRoKTtcbiAgICB9O1xuXG4gICAgdGhpcy50ZXJtaW5hdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fc2lnbmFsKFwidGVybWluYXRlXCIsIHt9KTtcbiAgICAgICAgdGhpcy5kZWx0YVF1ZXVlID0gbnVsbDtcbiAgICAgICAgdGhpcy4kd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICB0aGlzLiR3b3JrZXIgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy4kZG9jKVxuICAgICAgICAgICAgdGhpcy4kZG9jLm9mZihcImNoYW5nZVwiLCB0aGlzLmNoYW5nZUxpc3RlbmVyKTtcbiAgICAgICAgdGhpcy4kZG9jID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdGhpcy5zZW5kID0gZnVuY3Rpb24oY21kLCBhcmdzKSB7XG4gICAgICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDogY21kLCBhcmdzOiBhcmdzfSk7XG4gICAgfTtcblxuICAgIHRoaXMuY2FsbCA9IGZ1bmN0aW9uKGNtZCwgYXJncywgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgaWQgPSB0aGlzLmNhbGxiYWNrSWQrKztcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzW2lkXSA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgYXJncy5wdXNoKGlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbmQoY21kLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgdGhpcy5lbWl0ID0gZnVuY3Rpb24oZXZlbnQsIGRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7ZXZlbnQ6IGV2ZW50LCBkYXRhOiB7ZGF0YTogZGF0YS5kYXRhfX0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGV4KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGV4LnN0YWNrKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmF0dGFjaFRvRG9jdW1lbnQgPSBmdW5jdGlvbihkb2MpIHtcbiAgICAgICAgaWYgKHRoaXMuJGRvYylcbiAgICAgICAgICAgIHRoaXMudGVybWluYXRlKCk7XG5cbiAgICAgICAgdGhpcy4kZG9jID0gZG9jO1xuICAgICAgICB0aGlzLmNhbGwoXCJzZXRWYWx1ZVwiLCBbZG9jLmdldFZhbHVlKCldKTtcbiAgICAgICAgZG9jLm9uKFwiY2hhbmdlXCIsIHRoaXMuY2hhbmdlTGlzdGVuZXIpO1xuICAgIH07XG5cbiAgICB0aGlzLmNoYW5nZUxpc3RlbmVyID0gZnVuY3Rpb24oZGVsdGEpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlbHRhUXVldWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsdGFRdWV1ZSA9IFtdO1xuICAgICAgICAgICAgc2V0VGltZW91dCh0aGlzLiRzZW5kRGVsdGFRdWV1ZSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PSBcImluc2VydFwiKVxuICAgICAgICAgICAgdGhpcy5kZWx0YVF1ZXVlLnB1c2goZGVsdGEuc3RhcnQsIGRlbHRhLmxpbmVzKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5kZWx0YVF1ZXVlLnB1c2goZGVsdGEuc3RhcnQsIGRlbHRhLmVuZCk7XG4gICAgfTtcblxuICAgIHRoaXMuJHNlbmREZWx0YVF1ZXVlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBxID0gdGhpcy5kZWx0YVF1ZXVlO1xuICAgICAgICBpZiAoIXEpIHJldHVybjtcbiAgICAgICAgdGhpcy5kZWx0YVF1ZXVlID0gbnVsbDtcbiAgICAgICAgaWYgKHEubGVuZ3RoID4gNTAgJiYgcS5sZW5ndGggPiB0aGlzLiRkb2MuZ2V0TGVuZ3RoKCkgPj4gMSkge1xuICAgICAgICAgICAgdGhpcy5jYWxsKFwic2V0VmFsdWVcIiwgW3RoaXMuJGRvYy5nZXRWYWx1ZSgpXSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHtkYXRhOiBxfSk7XG4gICAgfTtcblxufSkuY2FsbChXb3JrZXJDbGllbnQucHJvdG90eXBlKTtcblxuXG52YXIgVUlXb3JrZXJDbGllbnQgPSBmdW5jdGlvbih0b3BMZXZlbE5hbWVzcGFjZXMsIG1vZCwgY2xhc3NuYW1lKSB7XG4gICAgdGhpcy4kc2VuZERlbHRhUXVldWUgPSB0aGlzLiRzZW5kRGVsdGFRdWV1ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY2hhbmdlTGlzdGVuZXIgPSB0aGlzLmNoYW5nZUxpc3RlbmVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jYWxsYmFja0lkID0gMTtcbiAgICB0aGlzLmNhbGxiYWNrcyA9IHt9O1xuICAgIHRoaXMubWVzc2FnZUJ1ZmZlciA9IFtdO1xuXG4gICAgdmFyIG1haW4gPSBudWxsO1xuICAgIHZhciBlbWl0U3luYyA9IGZhbHNlO1xuICAgIHZhciBzZW5kZXIgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlcik7XG4gICAgdmFyIF9zZWxmID0gdGhpcztcblxuICAgIHRoaXMuJHdvcmtlciA9IHt9O1xuICAgIHRoaXMuJHdvcmtlci50ZXJtaW5hdGUgPSBmdW5jdGlvbigpIHt9O1xuICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgX3NlbGYubWVzc2FnZUJ1ZmZlci5wdXNoKGUpO1xuICAgICAgICBpZiAobWFpbikge1xuICAgICAgICAgICAgaWYgKGVtaXRTeW5jKVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocHJvY2Vzc05leHQpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHByb2Nlc3NOZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc2V0RW1pdFN5bmMgPSBmdW5jdGlvbih2YWwpIHsgZW1pdFN5bmMgPSB2YWw7IH07XG5cbiAgICB2YXIgcHJvY2Vzc05leHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG1zZyA9IF9zZWxmLm1lc3NhZ2VCdWZmZXIuc2hpZnQoKTtcbiAgICAgICAgaWYgKG1zZy5jb21tYW5kKVxuICAgICAgICAgICAgbWFpblttc2cuY29tbWFuZF0uYXBwbHkobWFpbiwgbXNnLmFyZ3MpO1xuICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQpXG4gICAgICAgICAgICBzZW5kZXIuX3NpZ25hbChtc2cuZXZlbnQsIG1zZy5kYXRhKTtcbiAgICB9O1xuXG4gICAgc2VuZGVyLnBvc3RNZXNzYWdlID0gZnVuY3Rpb24obXNnKSB7XG4gICAgICAgIF9zZWxmLm9uTWVzc2FnZSh7ZGF0YTogbXNnfSk7XG4gICAgfTtcbiAgICBzZW5kZXIuY2FsbGJhY2sgPSBmdW5jdGlvbihkYXRhLCBjYWxsYmFja0lkKSB7XG4gICAgICAgIHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6IFwiY2FsbFwiLCBpZDogY2FsbGJhY2tJZCwgZGF0YTogZGF0YX0pO1xuICAgIH07XG4gICAgc2VuZGVyLmVtaXQgPSBmdW5jdGlvbihuYW1lLCBkYXRhKSB7XG4gICAgICAgIHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6IFwiZXZlbnRcIiwgbmFtZTogbmFtZSwgZGF0YTogZGF0YX0pO1xuICAgIH07XG5cbiAgICBjb25maWcubG9hZE1vZHVsZShbXCJ3b3JrZXJcIiwgbW9kXSwgZnVuY3Rpb24oTWFpbikge1xuICAgICAgICBtYWluID0gbmV3IE1haW5bY2xhc3NuYW1lXShzZW5kZXIpO1xuICAgICAgICB3aGlsZSAoX3NlbGYubWVzc2FnZUJ1ZmZlci5sZW5ndGgpXG4gICAgICAgICAgICBwcm9jZXNzTmV4dCgpO1xuICAgIH0pO1xufTtcblxuVUlXb3JrZXJDbGllbnQucHJvdG90eXBlID0gV29ya2VyQ2xpZW50LnByb3RvdHlwZTtcblxuZXhwb3J0cy5VSVdvcmtlckNsaWVudCA9IFVJV29ya2VyQ2xpZW50O1xuZXhwb3J0cy5Xb3JrZXJDbGllbnQgPSBXb3JrZXJDbGllbnQ7XG5leHBvcnRzLmNyZWF0ZVdvcmtlciA9IGNyZWF0ZVdvcmtlcjtcblxuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9wbGFjZWhvbGRlclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL3JhbmdlXCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIixcImFjZS9saWIvb29wXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIFJhbmdlID0gYWNlcXVpcmUoXCIuL3JhbmdlXCIpLlJhbmdlO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi9saWIvZXZlbnRfZW1pdHRlclwiKS5FdmVudEVtaXR0ZXI7XG52YXIgb29wID0gYWNlcXVpcmUoXCIuL2xpYi9vb3BcIik7XG5cbnZhciBQbGFjZUhvbGRlciA9IGZ1bmN0aW9uKHNlc3Npb24sIGxlbmd0aCwgcG9zLCBvdGhlcnMsIG1haW5DbGFzcywgb3RoZXJzQ2xhc3MpIHtcbiAgICB2YXIgX3NlbGYgPSB0aGlzO1xuICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247XG4gICAgdGhpcy5kb2MgPSBzZXNzaW9uLmdldERvY3VtZW50KCk7XG4gICAgdGhpcy5tYWluQ2xhc3MgPSBtYWluQ2xhc3M7XG4gICAgdGhpcy5vdGhlcnNDbGFzcyA9IG90aGVyc0NsYXNzO1xuICAgIHRoaXMuJG9uVXBkYXRlID0gdGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZG9jLm9uKFwiY2hhbmdlXCIsIHRoaXMuJG9uVXBkYXRlKTtcbiAgICB0aGlzLiRvdGhlcnMgPSBvdGhlcnM7XG4gICAgXG4gICAgdGhpcy4kb25DdXJzb3JDaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIF9zZWxmLm9uQ3Vyc29yQ2hhbmdlKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy4kcG9zID0gcG9zO1xuICAgIHZhciB1bmRvU3RhY2sgPSBzZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCkuJHVuZG9TdGFjayB8fCBzZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCkuJHVuZG9zdGFjayB8fCB7bGVuZ3RoOiAtMX07XG4gICAgdGhpcy4kdW5kb1N0YWNrRGVwdGggPSB1bmRvU3RhY2subGVuZ3RoO1xuICAgIHRoaXMuc2V0dXAoKTtcblxuICAgIHNlc3Npb24uc2VsZWN0aW9uLm9uKFwiY2hhbmdlQ3Vyc29yXCIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTtcbn07XG5cbihmdW5jdGlvbigpIHtcblxuICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTtcbiAgICB0aGlzLnNldHVwID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBfc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBkb2MgPSB0aGlzLmRvYztcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgIFxuICAgICAgICB0aGlzLnNlbGVjdGlvbkJlZm9yZSA9IHNlc3Npb24uc2VsZWN0aW9uLnRvSlNPTigpO1xuICAgICAgICBpZiAoc2Vzc2lvbi5zZWxlY3Rpb24uaW5NdWx0aVNlbGVjdE1vZGUpXG4gICAgICAgICAgICBzZXNzaW9uLnNlbGVjdGlvbi50b1NpbmdsZVJhbmdlKCk7XG5cbiAgICAgICAgdGhpcy5wb3MgPSBkb2MuY3JlYXRlQW5jaG9yKHRoaXMuJHBvcy5yb3csIHRoaXMuJHBvcy5jb2x1bW4pO1xuICAgICAgICB2YXIgcG9zID0gdGhpcy5wb3M7XG4gICAgICAgIHBvcy4kaW5zZXJ0UmlnaHQgPSB0cnVlO1xuICAgICAgICBwb3MuZGV0YWNoKCk7XG4gICAgICAgIHBvcy5tYXJrZXJJZCA9IHNlc3Npb24uYWRkTWFya2VyKG5ldyBSYW5nZShwb3Mucm93LCBwb3MuY29sdW1uLCBwb3Mucm93LCBwb3MuY29sdW1uICsgdGhpcy5sZW5ndGgpLCB0aGlzLm1haW5DbGFzcywgbnVsbCwgZmFsc2UpO1xuICAgICAgICB0aGlzLm90aGVycyA9IFtdO1xuICAgICAgICB0aGlzLiRvdGhlcnMuZm9yRWFjaChmdW5jdGlvbihvdGhlcikge1xuICAgICAgICAgICAgdmFyIGFuY2hvciA9IGRvYy5jcmVhdGVBbmNob3Iob3RoZXIucm93LCBvdGhlci5jb2x1bW4pO1xuICAgICAgICAgICAgYW5jaG9yLiRpbnNlcnRSaWdodCA9IHRydWU7XG4gICAgICAgICAgICBhbmNob3IuZGV0YWNoKCk7XG4gICAgICAgICAgICBfc2VsZi5vdGhlcnMucHVzaChhbmNob3IpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2Vzc2lvbi5zZXRVbmRvU2VsZWN0KGZhbHNlKTtcbiAgICB9O1xuICAgIHRoaXMuc2hvd090aGVyTWFya2VycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vdGhlcnNBY3RpdmUpIHJldHVybjtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgIHZhciBfc2VsZiA9IHRoaXM7XG4gICAgICAgIHRoaXMub3RoZXJzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vdGhlcnMuZm9yRWFjaChmdW5jdGlvbihhbmNob3IpIHtcbiAgICAgICAgICAgIGFuY2hvci5tYXJrZXJJZCA9IHNlc3Npb24uYWRkTWFya2VyKG5ldyBSYW5nZShhbmNob3Iucm93LCBhbmNob3IuY29sdW1uLCBhbmNob3Iucm93LCBhbmNob3IuY29sdW1uK19zZWxmLmxlbmd0aCksIF9zZWxmLm90aGVyc0NsYXNzLCBudWxsLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5oaWRlT3RoZXJNYXJrZXJzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5vdGhlcnNBY3RpdmUpIHJldHVybjtcbiAgICAgICAgdGhpcy5vdGhlcnNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm90aGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLm90aGVyc1tpXS5tYXJrZXJJZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25VcGRhdGUgPSBmdW5jdGlvbihkZWx0YSkge1xuICAgICAgICBpZiAodGhpcy4kdXBkYXRpbmcpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVBbmNob3JzKGRlbHRhKTtcbiAgICAgICAgICAgIFxuICAgICAgICB2YXIgcmFuZ2UgPSBkZWx0YTtcbiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyAhPT0gcmFuZ2UuZW5kLnJvdykgcmV0dXJuO1xuICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ICE9PSB0aGlzLnBvcy5yb3cpIHJldHVybjtcbiAgICAgICAgdGhpcy4kdXBkYXRpbmcgPSB0cnVlO1xuICAgICAgICB2YXIgbGVuZ3RoRGlmZiA9IGRlbHRhLmFjdGlvbiA9PT0gXCJpbnNlcnRcIiA/IHJhbmdlLmVuZC5jb2x1bW4gLSByYW5nZS5zdGFydC5jb2x1bW4gOiByYW5nZS5zdGFydC5jb2x1bW4gLSByYW5nZS5lbmQuY29sdW1uO1xuICAgICAgICB2YXIgaW5NYWluUmFuZ2UgPSByYW5nZS5zdGFydC5jb2x1bW4gPj0gdGhpcy5wb3MuY29sdW1uICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8PSB0aGlzLnBvcy5jb2x1bW4gKyB0aGlzLmxlbmd0aCArIDE7XG4gICAgICAgIHZhciBkaXN0YW5jZUZyb21TdGFydCA9IHJhbmdlLnN0YXJ0LmNvbHVtbiAtIHRoaXMucG9zLmNvbHVtbjtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudXBkYXRlQW5jaG9ycyhkZWx0YSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaW5NYWluUmFuZ2UpXG4gICAgICAgICAgICB0aGlzLmxlbmd0aCArPSBsZW5ndGhEaWZmO1xuXG4gICAgICAgIGlmIChpbk1haW5SYW5nZSAmJiAhdGhpcy5zZXNzaW9uLiRmcm9tVW5kbykge1xuICAgICAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PT0gJ2luc2VydCcpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5vdGhlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyUG9zID0gdGhpcy5vdGhlcnNbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdQb3MgPSB7cm93OiBvdGhlclBvcy5yb3csIGNvbHVtbjogb3RoZXJQb3MuY29sdW1uICsgZGlzdGFuY2VGcm9tU3RhcnR9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvYy5pbnNlcnRNZXJnZWRMaW5lcyhuZXdQb3MsIGRlbHRhLmxpbmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5vdGhlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyUG9zID0gdGhpcy5vdGhlcnNbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdQb3MgPSB7cm93OiBvdGhlclBvcy5yb3csIGNvbHVtbjogb3RoZXJQb3MuY29sdW1uICsgZGlzdGFuY2VGcm9tU3RhcnR9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvYy5yZW1vdmUobmV3IFJhbmdlKG5ld1Bvcy5yb3csIG5ld1Bvcy5jb2x1bW4sIG5ld1Bvcy5yb3csIG5ld1Bvcy5jb2x1bW4gLSBsZW5ndGhEaWZmKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLiR1cGRhdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVwZGF0ZU1hcmtlcnMoKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMudXBkYXRlQW5jaG9ycyA9IGZ1bmN0aW9uKGRlbHRhKSB7XG4gICAgICAgIHRoaXMucG9zLm9uQ2hhbmdlKGRlbHRhKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3RoZXJzLmxlbmd0aDsgaS0tOylcbiAgICAgICAgICAgIHRoaXMub3RoZXJzW2ldLm9uQ2hhbmdlKGRlbHRhKTtcbiAgICAgICAgdGhpcy51cGRhdGVNYXJrZXJzKCk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnVwZGF0ZU1hcmtlcnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuJHVwZGF0aW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgX3NlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIHVwZGF0ZU1hcmtlciA9IGZ1bmN0aW9uKHBvcywgY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtlcihwb3MubWFya2VySWQpO1xuICAgICAgICAgICAgcG9zLm1hcmtlcklkID0gc2Vzc2lvbi5hZGRNYXJrZXIobmV3IFJhbmdlKHBvcy5yb3csIHBvcy5jb2x1bW4sIHBvcy5yb3csIHBvcy5jb2x1bW4rX3NlbGYubGVuZ3RoKSwgY2xhc3NOYW1lLCBudWxsLCBmYWxzZSk7XG4gICAgICAgIH07XG4gICAgICAgIHVwZGF0ZU1hcmtlcih0aGlzLnBvcywgdGhpcy5tYWluQ2xhc3MpO1xuICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5vdGhlcnMubGVuZ3RoOyBpLS07KVxuICAgICAgICAgICAgdXBkYXRlTWFya2VyKHRoaXMub3RoZXJzW2ldLCB0aGlzLm90aGVyc0NsYXNzKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkN1cnNvckNoYW5nZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLiR1cGRhdGluZyB8fCAhdGhpcy5zZXNzaW9uKSByZXR1cm47XG4gICAgICAgIHZhciBwb3MgPSB0aGlzLnNlc3Npb24uc2VsZWN0aW9uLmdldEN1cnNvcigpO1xuICAgICAgICBpZiAocG9zLnJvdyA9PT0gdGhpcy5wb3Mucm93ICYmIHBvcy5jb2x1bW4gPj0gdGhpcy5wb3MuY29sdW1uICYmIHBvcy5jb2x1bW4gPD0gdGhpcy5wb3MuY29sdW1uICsgdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd090aGVyTWFya2VycygpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdChcImN1cnNvckVudGVyXCIsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZU90aGVyTWFya2VycygpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdChcImN1cnNvckxlYXZlXCIsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH07ICAgIFxuICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIodGhpcy5wb3MgJiYgdGhpcy5wb3MubWFya2VySWQpO1xuICAgICAgICB0aGlzLmhpZGVPdGhlck1hcmtlcnMoKTtcbiAgICAgICAgdGhpcy5kb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCB0aGlzLiRvblVwZGF0ZSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZUN1cnNvclwiLCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVbmRvU2VsZWN0KHRydWUpO1xuICAgICAgICB0aGlzLnNlc3Npb24gPSBudWxsO1xuICAgIH07XG4gICAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuJHVuZG9TdGFja0RlcHRoID09PSAtMSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHVuZG9NYW5hZ2VyID0gdGhpcy5zZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCk7XG4gICAgICAgIHZhciB1bmRvc1JlcXVpcmVkID0gKHVuZG9NYW5hZ2VyLiR1bmRvU3RhY2sgfHwgdW5kb01hbmFnZXIuJHVuZG9zdGFjaykubGVuZ3RoIC0gdGhpcy4kdW5kb1N0YWNrRGVwdGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5kb3NSZXF1aXJlZDsgaSsrKSB7XG4gICAgICAgICAgICB1bmRvTWFuYWdlci51bmRvKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkJlZm9yZSlcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24uZnJvbUpTT04odGhpcy5zZWxlY3Rpb25CZWZvcmUpO1xuICAgIH07XG59KS5jYWxsKFBsYWNlSG9sZGVyLnByb3RvdHlwZSk7XG5cblxuZXhwb3J0cy5QbGFjZUhvbGRlciA9IFBsYWNlSG9sZGVyO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbW91c2UvbXVsdGlfc2VsZWN0X2hhbmRsZXJcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvZXZlbnRcIixcImFjZS9saWIvdXNlcmFnZW50XCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cbnZhciBldmVudCA9IGFjZXF1aXJlKFwiLi4vbGliL2V2ZW50XCIpO1xudmFyIHVzZXJhZ2VudCA9IGFjZXF1aXJlKFwiLi4vbGliL3VzZXJhZ2VudFwiKTtcbmZ1bmN0aW9uIGlzU2FtZVBvaW50KHAxLCBwMikge1xuICAgIHJldHVybiBwMS5yb3cgPT0gcDIucm93ICYmIHAxLmNvbHVtbiA9PSBwMi5jb2x1bW47XG59XG5cbmZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHtcbiAgICB2YXIgZXYgPSBlLmRvbUV2ZW50O1xuICAgIHZhciBhbHQgPSBldi5hbHRLZXk7XG4gICAgdmFyIHNoaWZ0ID0gZXYuc2hpZnRLZXk7XG4gICAgdmFyIGN0cmwgPSBldi5jdHJsS2V5O1xuICAgIHZhciBhY2NlbCA9IGUuZ2V0QWNjZWxLZXkoKTtcbiAgICB2YXIgYnV0dG9uID0gZS5nZXRCdXR0b24oKTtcbiAgICBcbiAgICBpZiAoY3RybCAmJiB1c2VyYWdlbnQuaXNNYWMpXG4gICAgICAgIGJ1dHRvbiA9IGV2LmJ1dHRvbjtcblxuICAgIGlmIChlLmVkaXRvci5pbk11bHRpU2VsZWN0TW9kZSAmJiBidXR0b24gPT0gMikge1xuICAgICAgICBlLmVkaXRvci50ZXh0SW5wdXQub25Db250ZXh0TWVudShlLmRvbUV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWN0cmwgJiYgIWFsdCAmJiAhYWNjZWwpIHtcbiAgICAgICAgaWYgKGJ1dHRvbiA9PT0gMCAmJiBlLmVkaXRvci5pbk11bHRpU2VsZWN0TW9kZSlcbiAgICAgICAgICAgIGUuZWRpdG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBpZiAoYnV0dG9uICE9PSAwKVxuICAgICAgICByZXR1cm47XG5cbiAgICB2YXIgZWRpdG9yID0gZS5lZGl0b3I7XG4gICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb247XG4gICAgdmFyIGlzTXVsdGlTZWxlY3QgPSBlZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGU7XG4gICAgdmFyIHBvcyA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpO1xuICAgIHZhciBjdXJzb3IgPSBzZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7XG4gICAgdmFyIGluU2VsZWN0aW9uID0gZS5pblNlbGVjdGlvbigpIHx8IChzZWxlY3Rpb24uaXNFbXB0eSgpICYmIGlzU2FtZVBvaW50KHBvcywgY3Vyc29yKSk7XG5cbiAgICB2YXIgbW91c2VYID0gZS54LCBtb3VzZVkgPSBlLnk7XG4gICAgdmFyIG9uTW91c2VTZWxlY3Rpb24gPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIG1vdXNlWCA9IGUuY2xpZW50WDtcbiAgICAgICAgbW91c2VZID0gZS5jbGllbnRZO1xuICAgIH07XG4gICAgXG4gICAgdmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjtcbiAgICB2YXIgc2NyZWVuQW5jaG9yID0gZWRpdG9yLnJlbmRlcmVyLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcyhtb3VzZVgsIG1vdXNlWSk7XG4gICAgdmFyIHNjcmVlbkN1cnNvciA9IHNjcmVlbkFuY2hvcjtcbiAgICBcbiAgICB2YXIgc2VsZWN0aW9uTW9kZTtcbiAgICBpZiAoZWRpdG9yLiRtb3VzZUhhbmRsZXIuJGVuYWJsZUp1bXBUb0RlZikge1xuICAgICAgICBpZiAoY3RybCAmJiBhbHQgfHwgYWNjZWwgJiYgYWx0KVxuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9IHNoaWZ0ID8gXCJibG9ja1wiIDogXCJhZGRcIjtcbiAgICAgICAgZWxzZSBpZiAoYWx0ICYmIGVkaXRvci4kYmxvY2tTZWxlY3RFbmFibGVkKVxuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9IFwiYmxvY2tcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYWNjZWwgJiYgIWFsdCkge1xuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9IFwiYWRkXCI7XG4gICAgICAgICAgICBpZiAoIWlzTXVsdGlTZWxlY3QgJiYgc2hpZnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGFsdCAmJiBlZGl0b3IuJGJsb2NrU2VsZWN0RW5hYmxlZCkge1xuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9IFwiYmxvY2tcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAoc2VsZWN0aW9uTW9kZSAmJiB1c2VyYWdlbnQuaXNNYWMgJiYgZXYuY3RybEtleSkge1xuICAgICAgICBlZGl0b3IuJG1vdXNlSGFuZGxlci5jYW5jZWxDb250ZXh0TWVudSgpO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb25Nb2RlID09IFwiYWRkXCIpIHtcbiAgICAgICAgaWYgKCFpc011bHRpU2VsZWN0ICYmIGluU2VsZWN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuOyAvLyBkcmFnZ2luZ1xuXG4gICAgICAgIGlmICghaXNNdWx0aVNlbGVjdCkge1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gc2VsZWN0aW9uLnRvT3JpZW50ZWRSYW5nZSgpO1xuICAgICAgICAgICAgZWRpdG9yLmFkZFNlbGVjdGlvbk1hcmtlcihyYW5nZSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb2xkUmFuZ2UgPSBzZWxlY3Rpb24ucmFuZ2VMaXN0LnJhbmdlQXRQb2ludChwb3MpO1xuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmcrKztcbiAgICAgICAgZWRpdG9yLmluVmlydHVhbFNlbGVjdGlvbk1vZGUgPSB0cnVlO1xuICAgICAgICBcbiAgICAgICAgaWYgKHNoaWZ0KSB7XG4gICAgICAgICAgICBvbGRSYW5nZSA9IG51bGw7XG4gICAgICAgICAgICByYW5nZSA9IHNlbGVjdGlvbi5yYW5nZXNbMF0gfHwgcmFuZ2U7XG4gICAgICAgICAgICBlZGl0b3IucmVtb3ZlU2VsZWN0aW9uTWFya2VyKHJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3Iub25jZShcIm1vdXNldXBcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgdG1wU2VsID0gc2VsZWN0aW9uLnRvT3JpZW50ZWRSYW5nZSgpO1xuXG4gICAgICAgICAgICBpZiAob2xkUmFuZ2UgJiYgdG1wU2VsLmlzRW1wdHkoKSAmJiBpc1NhbWVQb2ludChvbGRSYW5nZS5jdXJzb3IsIHRtcFNlbC5jdXJzb3IpKVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zdWJzdHJhY3RQb2ludCh0bXBTZWwuY3Vyc29yKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzaGlmdCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc3Vic3RyYWN0UG9pbnQocmFuZ2UuY3Vyc29yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVkaXRvci5yZW1vdmVTZWxlY3Rpb25NYXJrZXIocmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UodG1wU2VsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmctLTtcbiAgICAgICAgICAgIGVkaXRvci5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgfSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09IFwiYmxvY2tcIikge1xuICAgICAgICBlLnN0b3AoKTtcbiAgICAgICAgZWRpdG9yLmluVmlydHVhbFNlbGVjdGlvbk1vZGUgPSB0cnVlOyAgICAgICAgXG4gICAgICAgIHZhciBpbml0aWFsUmFuZ2U7XG4gICAgICAgIHZhciByZWN0U2VsID0gW107XG4gICAgICAgIHZhciBibG9ja1NlbGVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIG5ld0N1cnNvciA9IGVkaXRvci5yZW5kZXJlci5waXhlbFRvU2NyZWVuQ29vcmRpbmF0ZXMobW91c2VYLCBtb3VzZVkpO1xuICAgICAgICAgICAgdmFyIGN1cnNvciA9IHNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKG5ld0N1cnNvci5yb3csIG5ld0N1cnNvci5jb2x1bW4sIG5ld0N1cnNvci5vZmZzZXRYKTtcblxuICAgICAgICAgICAgaWYgKGlzU2FtZVBvaW50KHNjcmVlbkN1cnNvciwgbmV3Q3Vyc29yKSAmJiBpc1NhbWVQb2ludChjdXJzb3IsIHNlbGVjdGlvbi5sZWFkKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzY3JlZW5DdXJzb3IgPSBuZXdDdXJzb3I7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmcrKztcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZVRvUG9zaXRpb24oY3Vyc29yKTtcbiAgICAgICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpO1xuXG4gICAgICAgICAgICBlZGl0b3IucmVtb3ZlU2VsZWN0aW9uTWFya2VycyhyZWN0U2VsKTtcbiAgICAgICAgICAgIHJlY3RTZWwgPSBzZWxlY3Rpb24ucmVjdGFuZ3VsYXJSYW5nZUJsb2NrKHNjcmVlbkN1cnNvciwgc2NyZWVuQW5jaG9yKTtcbiAgICAgICAgICAgIGlmIChlZGl0b3IuJG1vdXNlSGFuZGxlci4kY2xpY2tTZWxlY3Rpb24gJiYgcmVjdFNlbC5sZW5ndGggPT0gMSAmJiByZWN0U2VsWzBdLmlzRW1wdHkoKSlcbiAgICAgICAgICAgICAgICByZWN0U2VsWzBdID0gZWRpdG9yLiRtb3VzZUhhbmRsZXIuJGNsaWNrU2VsZWN0aW9uLmNsb25lKCk7XG4gICAgICAgICAgICByZWN0U2VsLmZvckVhY2goZWRpdG9yLmFkZFNlbGVjdGlvbk1hcmtlciwgZWRpdG9yKTtcbiAgICAgICAgICAgIGVkaXRvci51cGRhdGVTZWxlY3Rpb25NYXJrZXJzKCk7XG4gICAgICAgICAgICBlZGl0b3IuJGJsb2NrU2Nyb2xsaW5nLS07XG4gICAgICAgIH07XG4gICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmcrKztcbiAgICAgICAgaWYgKGlzTXVsdGlTZWxlY3QgJiYgIWFjY2VsKSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24udG9TaW5nbGVSYW5nZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc011bHRpU2VsZWN0ICYmIGFjY2VsKSB7XG4gICAgICAgICAgICBpbml0aWFsUmFuZ2UgPSBzZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCk7XG4gICAgICAgICAgICBlZGl0b3IuYWRkU2VsZWN0aW9uTWFya2VyKGluaXRpYWxSYW5nZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChzaGlmdClcbiAgICAgICAgICAgIHNjcmVlbkFuY2hvciA9IHNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHNlbGVjdGlvbi5sZWFkKTsgICAgICAgICAgICBcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKHBvcyk7XG4gICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmctLTtcbiAgICAgICAgXG4gICAgICAgIHNjcmVlbkN1cnNvciA9IHtyb3c6IC0xLCBjb2x1bW46IC0xfTtcblxuICAgICAgICB2YXIgb25Nb3VzZVNlbGVjdGlvbkVuZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgICAgICBlZGl0b3IucmVtb3ZlU2VsZWN0aW9uTWFya2VycyhyZWN0U2VsKTtcbiAgICAgICAgICAgIGlmICghcmVjdFNlbC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcmVjdFNlbCA9IFtzZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCldO1xuICAgICAgICAgICAgZWRpdG9yLiRibG9ja1Njcm9sbGluZysrO1xuICAgICAgICAgICAgaWYgKGluaXRpYWxSYW5nZSkge1xuICAgICAgICAgICAgICAgIGVkaXRvci5yZW1vdmVTZWxlY3Rpb25NYXJrZXIoaW5pdGlhbFJhbmdlKTtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24udG9TaW5nbGVSYW5nZShpbml0aWFsUmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0U2VsLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyZWN0U2VsW2ldKTtcbiAgICAgICAgICAgIGVkaXRvci5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlID0gZmFsc2U7XG4gICAgICAgICAgICBlZGl0b3IuJG1vdXNlSGFuZGxlci4kY2xpY2tTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgZWRpdG9yLiRibG9ja1Njcm9sbGluZy0tO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBvblNlbGVjdGlvbkludGVydmFsID0gYmxvY2tTZWxlY3Q7XG5cbiAgICAgICAgZXZlbnQuY2FwdHVyZShlZGl0b3IuY29udGFpbmVyLCBvbk1vdXNlU2VsZWN0aW9uLCBvbk1vdXNlU2VsZWN0aW9uRW5kKTtcbiAgICAgICAgdmFyIHRpbWVySWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtvblNlbGVjdGlvbkludGVydmFsKCk7fSwgMjApO1xuXG4gICAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydHMub25Nb3VzZURvd24gPSBvbk1vdXNlRG93bjtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvY29tbWFuZHMvbXVsdGlfc2VsZWN0X2NvbW1hbmRzXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5leHBvcnRzLmRlZmF1bHRDb21tYW5kcyA9IFt7XG4gICAgbmFtZTogXCJhZGRDdXJzb3JBYm92ZVwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZUxpbmVzKC0xKTsgfSxcbiAgICBiaW5kS2V5OiB7d2luOiBcIkN0cmwtQWx0LVVwXCIsIG1hYzogXCJDdHJsLUFsdC1VcFwifSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwiYWRkQ3Vyc29yQmVsb3dcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmVMaW5lcygxKTsgfSxcbiAgICBiaW5kS2V5OiB7d2luOiBcIkN0cmwtQWx0LURvd25cIiwgbWFjOiBcIkN0cmwtQWx0LURvd25cIn0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImFkZEN1cnNvckFib3ZlU2tpcEN1cnJlbnRcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmVMaW5lcygtMSwgdHJ1ZSk7IH0sXG4gICAgYmluZEtleToge3dpbjogXCJDdHJsLUFsdC1TaGlmdC1VcFwiLCBtYWM6IFwiQ3RybC1BbHQtU2hpZnQtVXBcIn0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImFkZEN1cnNvckJlbG93U2tpcEN1cnJlbnRcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmVMaW5lcygxLCB0cnVlKTsgfSxcbiAgICBiaW5kS2V5OiB7d2luOiBcIkN0cmwtQWx0LVNoaWZ0LURvd25cIiwgbWFjOiBcIkN0cmwtQWx0LVNoaWZ0LURvd25cIn0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdE1vcmVCZWZvcmVcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmUoLTEpOyB9LFxuICAgIGJpbmRLZXk6IHt3aW46IFwiQ3RybC1BbHQtTGVmdFwiLCBtYWM6IFwiQ3RybC1BbHQtTGVmdFwifSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwic2VsZWN0TW9yZUFmdGVyXCIsXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RNb3JlKDEpOyB9LFxuICAgIGJpbmRLZXk6IHt3aW46IFwiQ3RybC1BbHQtUmlnaHRcIiwgbWFjOiBcIkN0cmwtQWx0LVJpZ2h0XCJ9LFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJzZWxlY3ROZXh0QmVmb3JlXCIsXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RNb3JlKC0xLCB0cnVlKTsgfSxcbiAgICBiaW5kS2V5OiB7d2luOiBcIkN0cmwtQWx0LVNoaWZ0LUxlZnRcIiwgbWFjOiBcIkN0cmwtQWx0LVNoaWZ0LUxlZnRcIn0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdE5leHRBZnRlclwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZSgxLCB0cnVlKTsgfSxcbiAgICBiaW5kS2V5OiB7d2luOiBcIkN0cmwtQWx0LVNoaWZ0LVJpZ2h0XCIsIG1hYzogXCJDdHJsLUFsdC1TaGlmdC1SaWdodFwifSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwic3BsaXRJbnRvTGluZXNcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm11bHRpU2VsZWN0LnNwbGl0SW50b0xpbmVzKCk7IH0sXG4gICAgYmluZEtleToge3dpbjogXCJDdHJsLUFsdC1MXCIsIG1hYzogXCJDdHJsLUFsdC1MXCJ9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJhbGlnbkN1cnNvcnNcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmFsaWduQ3Vyc29ycygpOyB9LFxuICAgIGJpbmRLZXk6IHt3aW46IFwiQ3RybC1BbHQtQVwiLCBtYWM6IFwiQ3RybC1BbHQtQVwifSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwiZmluZEFsbFwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZmluZEFsbCgpOyB9LFxuICAgIGJpbmRLZXk6IHt3aW46IFwiQ3RybC1BbHQtS1wiLCBtYWM6IFwiQ3RybC1BbHQtR1wifSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufV07XG5leHBvcnRzLm11bHRpU2VsZWN0Q29tbWFuZHMgPSBbe1xuICAgIG5hbWU6IFwic2luZ2xlU2VsZWN0aW9uXCIsXG4gICAgYmluZEtleTogXCJlc2NcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTsgfSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZSxcbiAgICBpc0F2YWlsYWJsZTogZnVuY3Rpb24oZWRpdG9yKSB7cmV0dXJuIGVkaXRvciAmJiBlZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGU7fVxufV07XG5cbnZhciBIYXNoSGFuZGxlciA9IGFjZXF1aXJlKFwiLi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyXCIpLkhhc2hIYW5kbGVyO1xuZXhwb3J0cy5rZXlib2FyZEhhbmRsZXIgPSBuZXcgSGFzaEhhbmRsZXIoZXhwb3J0cy5tdWx0aVNlbGVjdENvbW1hbmRzKTtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbXVsdGlfc2VsZWN0XCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvcmFuZ2VfbGlzdFwiLFwiYWNlL3JhbmdlXCIsXCJhY2Uvc2VsZWN0aW9uXCIsXCJhY2UvbW91c2UvbXVsdGlfc2VsZWN0X2hhbmRsZXJcIixcImFjZS9saWIvZXZlbnRcIixcImFjZS9saWIvbGFuZ1wiLFwiYWNlL2NvbW1hbmRzL211bHRpX3NlbGVjdF9jb21tYW5kc1wiLFwiYWNlL3NlYXJjaFwiLFwiYWNlL2VkaXRfc2Vzc2lvblwiLFwiYWNlL2VkaXRvclwiLFwiYWNlL2NvbmZpZ1wiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXG52YXIgUmFuZ2VMaXN0ID0gYWNlcXVpcmUoXCIuL3JhbmdlX2xpc3RcIikuUmFuZ2VMaXN0O1xudmFyIFJhbmdlID0gYWNlcXVpcmUoXCIuL3JhbmdlXCIpLlJhbmdlO1xudmFyIFNlbGVjdGlvbiA9IGFjZXF1aXJlKFwiLi9zZWxlY3Rpb25cIikuU2VsZWN0aW9uO1xudmFyIG9uTW91c2VEb3duID0gYWNlcXVpcmUoXCIuL21vdXNlL211bHRpX3NlbGVjdF9oYW5kbGVyXCIpLm9uTW91c2VEb3duO1xudmFyIGV2ZW50ID0gYWNlcXVpcmUoXCIuL2xpYi9ldmVudFwiKTtcbnZhciBsYW5nID0gYWNlcXVpcmUoXCIuL2xpYi9sYW5nXCIpO1xudmFyIGNvbW1hbmRzID0gYWNlcXVpcmUoXCIuL2NvbW1hbmRzL211bHRpX3NlbGVjdF9jb21tYW5kc1wiKTtcbmV4cG9ydHMuY29tbWFuZHMgPSBjb21tYW5kcy5kZWZhdWx0Q29tbWFuZHMuY29uY2F0KGNvbW1hbmRzLm11bHRpU2VsZWN0Q29tbWFuZHMpO1xudmFyIFNlYXJjaCA9IGFjZXF1aXJlKFwiLi9zZWFyY2hcIikuU2VhcmNoO1xudmFyIHNlYXJjaCA9IG5ldyBTZWFyY2goKTtcblxuZnVuY3Rpb24gZmluZChzZXNzaW9uLCBuZWVkbGUsIGRpcikge1xuICAgIHNlYXJjaC4kb3B0aW9ucy53cmFwID0gdHJ1ZTtcbiAgICBzZWFyY2guJG9wdGlvbnMubmVlZGxlID0gbmVlZGxlO1xuICAgIHNlYXJjaC4kb3B0aW9ucy5iYWNrd2FyZHMgPSBkaXIgPT0gLTE7XG4gICAgcmV0dXJuIHNlYXJjaC5maW5kKHNlc3Npb24pO1xufVxudmFyIEVkaXRTZXNzaW9uID0gYWNlcXVpcmUoXCIuL2VkaXRfc2Vzc2lvblwiKS5FZGl0U2Vzc2lvbjtcbihmdW5jdGlvbigpIHtcbiAgICB0aGlzLmdldFNlbGVjdGlvbk1hcmtlcnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNlbGVjdGlvbk1hcmtlcnM7XG4gICAgfTtcbn0pLmNhbGwoRWRpdFNlc3Npb24ucHJvdG90eXBlKTtcbihmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJhbmdlcyA9IG51bGw7XG4gICAgdGhpcy5yYW5nZUxpc3QgPSBudWxsO1xuICAgIHRoaXMuYWRkUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSwgJGJsb2NrQ2hhbmdlRXZlbnRzKSB7XG4gICAgICAgIGlmICghcmFuZ2UpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlICYmIHRoaXMucmFuZ2VDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdmFyIG9sZFJhbmdlID0gdGhpcy50b09yaWVudGVkUmFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VMaXN0LmFkZChvbGRSYW5nZSk7XG4gICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5hZGQocmFuZ2UpO1xuICAgICAgICAgICAgaWYgKHRoaXMucmFuZ2VMaXN0LnJhbmdlcy5sZW5ndGggIT0gMikge1xuICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VMaXN0LnJlbW92ZUFsbCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiAkYmxvY2tDaGFuZ2VFdmVudHMgfHwgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5yZW1vdmVBbGwoKTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VMaXN0LmFkZChvbGRSYW5nZSk7XG4gICAgICAgICAgICB0aGlzLiRvbkFkZFJhbmdlKG9sZFJhbmdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmFuZ2UuY3Vyc29yKVxuICAgICAgICAgICAgcmFuZ2UuY3Vyc29yID0gcmFuZ2UuZW5kO1xuXG4gICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3QuYWRkKHJhbmdlKTtcblxuICAgICAgICB0aGlzLiRvbkFkZFJhbmdlKHJhbmdlKTtcblxuICAgICAgICBpZiAocmVtb3ZlZC5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLiRvblJlbW92ZVJhbmdlKHJlbW92ZWQpO1xuXG4gICAgICAgIGlmICh0aGlzLnJhbmdlQ291bnQgPiAxICYmICF0aGlzLmluTXVsdGlTZWxlY3RNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWwoXCJtdWx0aVNlbGVjdFwiKTtcbiAgICAgICAgICAgIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiR1bmRvU2VsZWN0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5hdHRhY2godGhpcy5zZXNzaW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAkYmxvY2tDaGFuZ2VFdmVudHMgfHwgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZSk7XG4gICAgfTtcblxuICAgIHRoaXMudG9TaW5nbGVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7XG4gICAgICAgIHJhbmdlID0gcmFuZ2UgfHwgdGhpcy5yYW5nZXNbMF07XG4gICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3QucmVtb3ZlQWxsKCk7XG4gICAgICAgIGlmIChyZW1vdmVkLmxlbmd0aClcbiAgICAgICAgICAgIHRoaXMuJG9uUmVtb3ZlUmFuZ2UocmVtb3ZlZCk7XG5cbiAgICAgICAgcmFuZ2UgJiYgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZSk7XG4gICAgfTtcbiAgICB0aGlzLnN1YnN0cmFjdFBvaW50ID0gZnVuY3Rpb24ocG9zKSB7XG4gICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3Quc3Vic3RyYWN0UG9pbnQocG9zKTtcbiAgICAgICAgaWYgKHJlbW92ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuJG9uUmVtb3ZlUmFuZ2UocmVtb3ZlZCk7XG4gICAgICAgICAgICByZXR1cm4gcmVtb3ZlZFswXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3QubWVyZ2UoKTtcbiAgICAgICAgaWYgKHJlbW92ZWQubGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy4kb25SZW1vdmVSYW5nZShyZW1vdmVkKTtcbiAgICAgICAgZWxzZSBpZih0aGlzLnJhbmdlc1swXSlcbiAgICAgICAgICAgIHRoaXMuZnJvbU9yaWVudGVkUmFuZ2UodGhpcy5yYW5nZXNbMF0pO1xuICAgIH07XG5cbiAgICB0aGlzLiRvbkFkZFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHtcbiAgICAgICAgdGhpcy5yYW5nZUNvdW50ID0gdGhpcy5yYW5nZUxpc3QucmFuZ2VzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yYW5nZXMudW5zaGlmdChyYW5nZSk7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImFkZFJhbmdlXCIsIHtyYW5nZTogcmFuZ2V9KTtcbiAgICB9O1xuXG4gICAgdGhpcy4kb25SZW1vdmVSYW5nZSA9IGZ1bmN0aW9uKHJlbW92ZWQpIHtcbiAgICAgICAgdGhpcy5yYW5nZUNvdW50ID0gdGhpcy5yYW5nZUxpc3QucmFuZ2VzLmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMucmFuZ2VDb3VudCA9PSAxICYmIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpIHtcbiAgICAgICAgICAgIHZhciBsYXN0UmFuZ2UgPSB0aGlzLnJhbmdlTGlzdC5yYW5nZXMucG9wKCk7XG4gICAgICAgICAgICByZW1vdmVkLnB1c2gobGFzdFJhbmdlKTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VDb3VudCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gcmVtb3ZlZC5sZW5ndGg7IGktLTsgKSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnJhbmdlcy5pbmRleE9mKHJlbW92ZWRbaV0pO1xuICAgICAgICAgICAgdGhpcy5yYW5nZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NpZ25hbChcInJlbW92ZVJhbmdlXCIsIHtyYW5nZXM6IHJlbW92ZWR9KTtcblxuICAgICAgICBpZiAodGhpcy5yYW5nZUNvdW50ID09PSAwICYmIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbChcInNpbmdsZVNlbGVjdFwiKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kdW5kb1NlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5kZXRhY2godGhpcy5zZXNzaW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RSYW5nZSA9IGxhc3RSYW5nZSB8fCB0aGlzLnJhbmdlc1swXTtcbiAgICAgICAgaWYgKGxhc3RSYW5nZSAmJiAhbGFzdFJhbmdlLmlzRXF1YWwodGhpcy5nZXRSYW5nZSgpKSlcbiAgICAgICAgICAgIHRoaXMuZnJvbU9yaWVudGVkUmFuZ2UobGFzdFJhbmdlKTtcbiAgICB9O1xuICAgIHRoaXMuJGluaXRSYW5nZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucmFuZ2VMaXN0KVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMucmFuZ2VMaXN0ID0gbmV3IFJhbmdlTGlzdCgpO1xuICAgICAgICB0aGlzLnJhbmdlcyA9IFtdO1xuICAgICAgICB0aGlzLnJhbmdlQ291bnQgPSAwO1xuICAgIH07XG4gICAgdGhpcy5nZXRBbGxSYW5nZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VDb3VudCA/IHRoaXMucmFuZ2VMaXN0LnJhbmdlcy5jb25jYXQoKSA6IFt0aGlzLmdldFJhbmdlKCldO1xuICAgIH07XG5cbiAgICB0aGlzLnNwbGl0SW50b0xpbmVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5yYW5nZUNvdW50ID4gMSkge1xuICAgICAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMucmFuZ2VMaXN0LnJhbmdlcztcbiAgICAgICAgICAgIHZhciBsYXN0UmFuZ2UgPSByYW5nZXNbcmFuZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhyYW5nZXNbMF0uc3RhcnQsIGxhc3RSYW5nZS5lbmQpO1xuXG4gICAgICAgICAgICB0aGlzLnRvU2luZ2xlUmFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UsIGxhc3RSYW5nZS5jdXJzb3IgPT0gbGFzdFJhbmdlLnN0YXJ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcbiAgICAgICAgICAgIHZhciBpc0JhY2t3YXJkcyA9IHRoaXMuaXNCYWNrd2FyZHMoKTtcbiAgICAgICAgICAgIHZhciBzdGFydFJvdyA9IHJhbmdlLnN0YXJ0LnJvdztcbiAgICAgICAgICAgIHZhciBlbmRSb3cgPSByYW5nZS5lbmQucm93O1xuICAgICAgICAgICAgaWYgKHN0YXJ0Um93ID09IGVuZFJvdykge1xuICAgICAgICAgICAgICAgIGlmIChpc0JhY2t3YXJkcylcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gcmFuZ2UuZW5kLCBlbmQgPSByYW5nZS5zdGFydDtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHJhbmdlLnN0YXJ0LCBlbmQgPSByYW5nZS5lbmQ7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRSYW5nZShSYW5nZS5mcm9tUG9pbnRzKGVuZCwgZW5kKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRSYW5nZShSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCBzdGFydCkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJlY3RTZWwgPSBbXTtcbiAgICAgICAgICAgIHZhciByID0gdGhpcy5nZXRMaW5lUmFuZ2Uoc3RhcnRSb3csIHRydWUpO1xuICAgICAgICAgICAgci5zdGFydC5jb2x1bW4gPSByYW5nZS5zdGFydC5jb2x1bW47XG4gICAgICAgICAgICByZWN0U2VsLnB1c2gocik7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyArIDE7IGkgPCBlbmRSb3c7IGkrKylcbiAgICAgICAgICAgICAgICByZWN0U2VsLnB1c2godGhpcy5nZXRMaW5lUmFuZ2UoaSwgdHJ1ZSkpO1xuXG4gICAgICAgICAgICByID0gdGhpcy5nZXRMaW5lUmFuZ2UoZW5kUm93LCB0cnVlKTtcbiAgICAgICAgICAgIHIuZW5kLmNvbHVtbiA9IHJhbmdlLmVuZC5jb2x1bW47XG4gICAgICAgICAgICByZWN0U2VsLnB1c2gocik7XG5cbiAgICAgICAgICAgIHJlY3RTZWwuZm9yRWFjaCh0aGlzLmFkZFJhbmdlLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy50b2dnbGVCbG9ja1NlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMucmFuZ2VDb3VudCA+IDEpIHtcbiAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLnJhbmdlTGlzdC5yYW5nZXM7XG4gICAgICAgICAgICB2YXIgbGFzdFJhbmdlID0gcmFuZ2VzW3Jhbmdlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2VzWzBdLnN0YXJ0LCBsYXN0UmFuZ2UuZW5kKTtcblxuICAgICAgICAgICAgdGhpcy50b1NpbmdsZVJhbmdlKCk7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLCBsYXN0UmFuZ2UuY3Vyc29yID09IGxhc3RSYW5nZS5zdGFydCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnNlbGVjdGlvbkxlYWQpO1xuICAgICAgICAgICAgdmFyIGFuY2hvciA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5zZWxlY3Rpb25BbmNob3IpO1xuXG4gICAgICAgICAgICB2YXIgcmVjdFNlbCA9IHRoaXMucmVjdGFuZ3VsYXJSYW5nZUJsb2NrKGN1cnNvciwgYW5jaG9yKTtcbiAgICAgICAgICAgIHJlY3RTZWwuZm9yRWFjaCh0aGlzLmFkZFJhbmdlLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5yZWN0YW5ndWxhclJhbmdlQmxvY2sgPSBmdW5jdGlvbihzY3JlZW5DdXJzb3IsIHNjcmVlbkFuY2hvciwgaW5jbHVkZUVtcHR5TGluZXMpIHtcbiAgICAgICAgdmFyIHJlY3RTZWwgPSBbXTtcblxuICAgICAgICB2YXIgeEJhY2t3YXJkcyA9IHNjcmVlbkN1cnNvci5jb2x1bW4gPCBzY3JlZW5BbmNob3IuY29sdW1uO1xuICAgICAgICBpZiAoeEJhY2t3YXJkcykge1xuICAgICAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gc2NyZWVuQ3Vyc29yLmNvbHVtbjtcbiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzY3JlZW5BbmNob3IuY29sdW1uO1xuICAgICAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0WCA9IHNjcmVlbkN1cnNvci5vZmZzZXRYO1xuICAgICAgICAgICAgdmFyIGVuZE9mZnNldFggPSBzY3JlZW5BbmNob3Iub2Zmc2V0WDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzdGFydENvbHVtbiA9IHNjcmVlbkFuY2hvci5jb2x1bW47XG4gICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2NyZWVuQ3Vyc29yLmNvbHVtbjtcbiAgICAgICAgICAgIHZhciBzdGFydE9mZnNldFggPSBzY3JlZW5BbmNob3Iub2Zmc2V0WDtcbiAgICAgICAgICAgIHZhciBlbmRPZmZzZXRYID0gc2NyZWVuQ3Vyc29yLm9mZnNldFg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeUJhY2t3YXJkcyA9IHNjcmVlbkN1cnNvci5yb3cgPCBzY3JlZW5BbmNob3Iucm93O1xuICAgICAgICBpZiAoeUJhY2t3YXJkcykge1xuICAgICAgICAgICAgdmFyIHN0YXJ0Um93ID0gc2NyZWVuQ3Vyc29yLnJvdztcbiAgICAgICAgICAgIHZhciBlbmRSb3cgPSBzY3JlZW5BbmNob3Iucm93O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHN0YXJ0Um93ID0gc2NyZWVuQW5jaG9yLnJvdztcbiAgICAgICAgICAgIHZhciBlbmRSb3cgPSBzY3JlZW5DdXJzb3Iucm93O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXJ0Q29sdW1uIDwgMClcbiAgICAgICAgICAgIHN0YXJ0Q29sdW1uID0gMDtcbiAgICAgICAgaWYgKHN0YXJ0Um93IDwgMClcbiAgICAgICAgICAgIHN0YXJ0Um93ID0gMDtcblxuICAgICAgICBpZiAoc3RhcnRSb3cgPT0gZW5kUm93KVxuICAgICAgICAgICAgaW5jbHVkZUVtcHR5TGluZXMgPSB0cnVlO1xuXG4gICAgICAgIGZvciAodmFyIHJvdyA9IHN0YXJ0Um93OyByb3cgPD0gZW5kUm93OyByb3crKykge1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHJvdywgc3RhcnRDb2x1bW4sIHN0YXJ0T2Zmc2V0WCksXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihyb3csIGVuZENvbHVtbiwgZW5kT2Zmc2V0WClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvY0VuZCAmJiBpc1NhbWVQb2ludChyYW5nZS5lbmQsIGRvY0VuZCkpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIHZhciBkb2NFbmQgPSByYW5nZS5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYW5nZS5jdXJzb3IgPSB4QmFja3dhcmRzID8gcmFuZ2Uuc3RhcnQgOiByYW5nZS5lbmQ7XG4gICAgICAgICAgICByZWN0U2VsLnB1c2gocmFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHlCYWNrd2FyZHMpXG4gICAgICAgICAgICByZWN0U2VsLnJldmVyc2UoKTtcblxuICAgICAgICBpZiAoIWluY2x1ZGVFbXB0eUxpbmVzKSB7XG4gICAgICAgICAgICB2YXIgZW5kID0gcmVjdFNlbC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKHJlY3RTZWxbZW5kXS5pc0VtcHR5KCkgJiYgZW5kID4gMClcbiAgICAgICAgICAgICAgICBlbmQtLTtcbiAgICAgICAgICAgIGlmIChlbmQgPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAocmVjdFNlbFtzdGFydF0uaXNFbXB0eSgpKVxuICAgICAgICAgICAgICAgICAgICBzdGFydCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGVuZDsgaSA+PSBzdGFydDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlY3RTZWxbaV0uaXNFbXB0eSgpKVxuICAgICAgICAgICAgICAgICAgICByZWN0U2VsLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWN0U2VsO1xuICAgIH07XG59KS5jYWxsKFNlbGVjdGlvbi5wcm90b3R5cGUpO1xudmFyIEVkaXRvciA9IGFjZXF1aXJlKFwiLi9lZGl0b3JcIikuRWRpdG9yO1xuKGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uTWFya2VycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tNYXJrZXJzKCk7XG4gICAgfTtcbiAgICB0aGlzLmFkZFNlbGVjdGlvbk1hcmtlciA9IGZ1bmN0aW9uKG9yaWVudGVkUmFuZ2UpIHtcbiAgICAgICAgaWYgKCFvcmllbnRlZFJhbmdlLmN1cnNvcilcbiAgICAgICAgICAgIG9yaWVudGVkUmFuZ2UuY3Vyc29yID0gb3JpZW50ZWRSYW5nZS5lbmQ7XG5cbiAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5nZXRTZWxlY3Rpb25TdHlsZSgpO1xuICAgICAgICBvcmllbnRlZFJhbmdlLm1hcmtlciA9IHRoaXMuc2Vzc2lvbi5hZGRNYXJrZXIob3JpZW50ZWRSYW5nZSwgXCJhY2Vfc2VsZWN0aW9uXCIsIHN0eWxlKTtcblxuICAgICAgICB0aGlzLnNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnMucHVzaChvcmllbnRlZFJhbmdlKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnNlbGVjdGlvbk1hcmtlckNvdW50ID0gdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIG9yaWVudGVkUmFuZ2U7XG4gICAgfTtcbiAgICB0aGlzLnJlbW92ZVNlbGVjdGlvbk1hcmtlciA9IGZ1bmN0aW9uKHJhbmdlKSB7XG4gICAgICAgIGlmICghcmFuZ2UubWFya2VyKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2VyKHJhbmdlLm1hcmtlcik7XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5pbmRleE9mKHJhbmdlKTtcbiAgICAgICAgaWYgKGluZGV4ICE9IC0xKVxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb25NYXJrZXJDb3VudCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5sZW5ndGg7XG4gICAgfTtcblxuICAgIHRoaXMucmVtb3ZlU2VsZWN0aW9uTWFya2VycyA9IGZ1bmN0aW9uKHJhbmdlcykge1xuICAgICAgICB2YXIgbWFya2VyTGlzdCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2VycztcbiAgICAgICAgZm9yICh2YXIgaSA9IHJhbmdlcy5sZW5ndGg7IGktLTsgKSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07XG4gICAgICAgICAgICBpZiAoIXJhbmdlLm1hcmtlcilcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIocmFuZ2UubWFya2VyKTtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IG1hcmtlckxpc3QuaW5kZXhPZihyYW5nZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpXG4gICAgICAgICAgICAgICAgbWFya2VyTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb25NYXJrZXJDb3VudCA9IG1hcmtlckxpc3QubGVuZ3RoO1xuICAgIH07XG5cbiAgICB0aGlzLiRvbkFkZFJhbmdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB0aGlzLmFkZFNlbGVjdGlvbk1hcmtlcihlLnJhbmdlKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpO1xuICAgIH07XG5cbiAgICB0aGlzLiRvblJlbW92ZVJhbmdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGlvbk1hcmtlcnMoZS5yYW5nZXMpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tNYXJrZXJzKCk7XG4gICAgfTtcblxuICAgIHRoaXMuJG9uTXVsdGlTZWxlY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICh0aGlzLmluTXVsdGlTZWxlY3RNb2RlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmluTXVsdGlTZWxlY3RNb2RlID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLnNldFN0eWxlKFwiYWNlX211bHRpc2VsZWN0XCIpO1xuICAgICAgICB0aGlzLmtleUJpbmRpbmcuYWRkS2V5Ym9hcmRIYW5kbGVyKGNvbW1hbmRzLmtleWJvYXJkSGFuZGxlcik7XG4gICAgICAgIHRoaXMuY29tbWFuZHMuc2V0RGVmYXVsdEhhbmRsZXIoXCJleGVjXCIsIHRoaXMuJG9uTXVsdGlTZWxlY3RFeGVjKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tNYXJrZXJzKCk7XG4gICAgfTtcblxuICAgIHRoaXMuJG9uU2luZ2xlU2VsZWN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAodGhpcy5zZXNzaW9uLm11bHRpU2VsZWN0LmluVmlydHVhbE1vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnVuc2V0U3R5bGUoXCJhY2VfbXVsdGlzZWxlY3RcIik7XG4gICAgICAgIHRoaXMua2V5QmluZGluZy5yZW1vdmVLZXlib2FyZEhhbmRsZXIoY29tbWFuZHMua2V5Ym9hcmRIYW5kbGVyKTtcblxuICAgICAgICB0aGlzLmNvbW1hbmRzLnJlbW92ZURlZmF1bHRIYW5kbGVyKFwiZXhlY1wiLCB0aGlzLiRvbk11bHRpU2VsZWN0RXhlYyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTtcbiAgICAgICAgdGhpcy5fZW1pdChcImNoYW5nZVNlbGVjdGlvblwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kb25NdWx0aVNlbGVjdEV4ZWMgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBjb21tYW5kID0gZS5jb21tYW5kO1xuICAgICAgICB2YXIgZWRpdG9yID0gZS5lZGl0b3I7XG4gICAgICAgIGlmICghZWRpdG9yLm11bHRpU2VsZWN0KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIWNvbW1hbmQubXVsdGlTZWxlY3RBY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBjb21tYW5kLmV4ZWMoZWRpdG9yLCBlLmFyZ3MgfHwge30pO1xuICAgICAgICAgICAgZWRpdG9yLm11bHRpU2VsZWN0LmFkZFJhbmdlKGVkaXRvci5tdWx0aVNlbGVjdC50b09yaWVudGVkUmFuZ2UoKSk7XG4gICAgICAgICAgICBlZGl0b3IubXVsdGlTZWxlY3QubWVyZ2VPdmVybGFwcGluZ1JhbmdlcygpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQubXVsdGlTZWxlY3RBY3Rpb24gPT0gXCJmb3JFYWNoXCIpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGVkaXRvci5mb3JFYWNoU2VsZWN0aW9uKGNvbW1hbmQsIGUuYXJncyk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZC5tdWx0aVNlbGVjdEFjdGlvbiA9PSBcImZvckVhY2hMaW5lXCIpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGVkaXRvci5mb3JFYWNoU2VsZWN0aW9uKGNvbW1hbmQsIGUuYXJncywgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZC5tdWx0aVNlbGVjdEFjdGlvbiA9PSBcInNpbmdsZVwiKSB7XG4gICAgICAgICAgICBlZGl0b3IuZXhpdE11bHRpU2VsZWN0TW9kZSgpO1xuICAgICAgICAgICAgcmVzdWx0ID0gY29tbWFuZC5leGVjKGVkaXRvciwgZS5hcmdzIHx8IHt9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGNvbW1hbmQubXVsdGlTZWxlY3RBY3Rpb24oZWRpdG9yLCBlLmFyZ3MgfHwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTsgXG4gICAgdGhpcy5mb3JFYWNoU2VsZWN0aW9uID0gZnVuY3Rpb24oY21kLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBrZWVwT3JkZXIgPSBvcHRpb25zICYmIG9wdGlvbnMua2VlcE9yZGVyO1xuICAgICAgICB2YXIgJGJ5TGluZXMgPSBvcHRpb25zID09IHRydWUgfHwgb3B0aW9ucyAmJiBvcHRpb25zLiRieUxpbmVzO1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xuICAgICAgICB2YXIgcmFuZ2VMaXN0ID0gc2VsZWN0aW9uLnJhbmdlTGlzdDtcbiAgICAgICAgdmFyIHJhbmdlcyA9IChrZWVwT3JkZXIgPyBzZWxlY3Rpb24gOiByYW5nZUxpc3QpLnJhbmdlcztcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgXG4gICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBjbWQuZXhlYyA/IGNtZC5leGVjKHRoaXMsIGFyZ3MgfHwge30pIDogY21kKHRoaXMsIGFyZ3MgfHwge30pO1xuICAgICAgICBcbiAgICAgICAgdmFyIHJlZyA9IHNlbGVjdGlvbi5fZXZlbnRSZWdpc3RyeTtcbiAgICAgICAgc2VsZWN0aW9uLl9ldmVudFJlZ2lzdHJ5ID0ge307XG5cbiAgICAgICAgdmFyIHRtcFNlbCA9IG5ldyBTZWxlY3Rpb24oc2Vzc2lvbik7XG4gICAgICAgIHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSA9IHRydWU7XG4gICAgICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICBpZiAoJGJ5TGluZXMpIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaSA+IDAgJiYgcmFuZ2VzW2ldLnN0YXJ0LnJvdyA9PSByYW5nZXNbaSAtIDFdLmVuZC5yb3cpXG4gICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRtcFNlbC5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZXNbaV0pO1xuICAgICAgICAgICAgdG1wU2VsLmluZGV4ID0gaTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gc2Vzc2lvbi5zZWxlY3Rpb24gPSB0bXBTZWw7XG4gICAgICAgICAgICB2YXIgY21kUmVzdWx0ID0gY21kLmV4ZWMgPyBjbWQuZXhlYyh0aGlzLCBhcmdzIHx8IHt9KSA6IGNtZCh0aGlzLCBhcmdzIHx8IHt9KTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0ICYmIGNtZFJlc3VsdCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNtZFJlc3VsdDtcbiAgICAgICAgICAgIHRtcFNlbC50b09yaWVudGVkUmFuZ2UocmFuZ2VzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICB0bXBTZWwuZGV0YWNoKCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBzZXNzaW9uLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcbiAgICAgICAgdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlID0gZmFsc2U7XG4gICAgICAgIHNlbGVjdGlvbi5fZXZlbnRSZWdpc3RyeSA9IHJlZztcbiAgICAgICAgc2VsZWN0aW9uLm1lcmdlT3ZlcmxhcHBpbmdSYW5nZXMoKTtcbiAgICAgICAgXG4gICAgICAgIHZhciBhbmltID0gdGhpcy5yZW5kZXJlci4kc2Nyb2xsQW5pbWF0aW9uO1xuICAgICAgICB0aGlzLm9uQ3Vyc29yQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS5mcm9tID09IGFuaW0udG8pXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFuaW1hdGVTY3JvbGxpbmcoYW5pbS5mcm9tKTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICB0aGlzLmV4aXRNdWx0aVNlbGVjdE1vZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlIHx8IHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdC50b1NpbmdsZVJhbmdlKCk7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0U2VsZWN0ZWRUZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB0ZXh0ID0gXCJcIjtcbiAgICAgICAgaWYgKHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUgJiYgIXRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkge1xuICAgICAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMubXVsdGlTZWxlY3QucmFuZ2VMaXN0LnJhbmdlcztcbiAgICAgICAgICAgIHZhciBidWYgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYnVmLnB1c2godGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZXNbaV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBubCA9IHRoaXMuc2Vzc2lvbi5nZXREb2N1bWVudCgpLmdldE5ld0xpbmVDaGFyYWN0ZXIoKTtcbiAgICAgICAgICAgIHRleHQgPSBidWYuam9pbihubCk7XG4gICAgICAgICAgICBpZiAodGV4dC5sZW5ndGggPT0gKGJ1Zi5sZW5ndGggLSAxKSAqIG5sLmxlbmd0aClcbiAgICAgICAgICAgICAgICB0ZXh0ID0gXCJcIjtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICB0ZXh0ID0gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH07XG4gICAgXG4gICAgdGhpcy4kY2hlY2tNdWx0aXNlbGVjdENoYW5nZSA9IGZ1bmN0aW9uKGUsIGFuY2hvcikge1xuICAgICAgICBpZiAodGhpcy5pbk11bHRpU2VsZWN0TW9kZSAmJiAhdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLm11bHRpU2VsZWN0LnJhbmdlc1swXTtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpU2VsZWN0LmlzRW1wdHkoKSAmJiBhbmNob3IgPT0gdGhpcy5tdWx0aVNlbGVjdC5hbmNob3IpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIHBvcyA9IGFuY2hvciA9PSB0aGlzLm11bHRpU2VsZWN0LmFuY2hvclxuICAgICAgICAgICAgICAgID8gcmFuZ2UuY3Vyc29yID09IHJhbmdlLnN0YXJ0ID8gcmFuZ2UuZW5kIDogcmFuZ2Uuc3RhcnRcbiAgICAgICAgICAgICAgICA6IHJhbmdlLmN1cnNvcjtcbiAgICAgICAgICAgIGlmIChwb3Mucm93ICE9IGFuY2hvci5yb3cgXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5zZXNzaW9uLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHBvcy5yb3csIHBvcy5jb2x1bW4pLmNvbHVtbiAhPSBhbmNob3IuY29sdW1uKVxuICAgICAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3QudG9TaW5nbGVSYW5nZSh0aGlzLm11bHRpU2VsZWN0LnRvT3JpZW50ZWRSYW5nZSgpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5maW5kQWxsID0gZnVuY3Rpb24obmVlZGxlLCBvcHRpb25zLCBhZGRpdGl2ZSkge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgb3B0aW9ucy5uZWVkbGUgPSBuZWVkbGUgfHwgb3B0aW9ucy5uZWVkbGU7XG4gICAgICAgIGlmIChvcHRpb25zLm5lZWRsZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKVxuICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3Rpb24uZ2V0V29yZFJhbmdlKClcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCk7XG4gICAgICAgICAgICBvcHRpb25zLm5lZWRsZSA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpO1xuICAgICAgICB9ICAgIFxuICAgICAgICB0aGlzLiRzZWFyY2guc2V0KG9wdGlvbnMpO1xuICAgICAgICBcbiAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuJHNlYXJjaC5maW5kQWxsKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7XG4gICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLm11bHRpU2VsZWN0O1xuXG4gICAgICAgIGlmICghYWRkaXRpdmUpXG4gICAgICAgICAgICBzZWxlY3Rpb24udG9TaW5nbGVSYW5nZShyYW5nZXNbMF0pO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoOyBpLS07IClcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZXNbaV0sIHRydWUpO1xuICAgICAgICBpZiAocmFuZ2UgJiYgc2VsZWN0aW9uLnJhbmdlTGlzdC5yYW5nZUF0UG9pbnQocmFuZ2Uuc3RhcnQpKVxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlLCB0cnVlKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nIC09IDE7XG5cbiAgICAgICAgcmV0dXJuIHJhbmdlcy5sZW5ndGg7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdE1vcmVMaW5lcyA9IGZ1bmN0aW9uKGRpciwgc2tpcCkge1xuICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi50b09yaWVudGVkUmFuZ2UoKTtcbiAgICAgICAgdmFyIGlzQmFja3dhcmRzID0gcmFuZ2UuY3Vyc29yID09IHJhbmdlLmVuZDtcblxuICAgICAgICB2YXIgc2NyZWVuTGVhZCA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24ocmFuZ2UuY3Vyc29yKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLiRkZXNpcmVkQ29sdW1uKVxuICAgICAgICAgICAgc2NyZWVuTGVhZC5jb2x1bW4gPSB0aGlzLnNlbGVjdGlvbi4kZGVzaXJlZENvbHVtbjtcblxuICAgICAgICB2YXIgbGVhZCA9IHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuTGVhZC5yb3cgKyBkaXIsIHNjcmVlbkxlYWQuY29sdW1uKTtcblxuICAgICAgICBpZiAoIXJhbmdlLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdmFyIHNjcmVlbkFuY2hvciA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oaXNCYWNrd2FyZHMgPyByYW5nZS5lbmQgOiByYW5nZS5zdGFydCk7XG4gICAgICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5BbmNob3Iucm93ICsgZGlyLCBzY3JlZW5BbmNob3IuY29sdW1uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBhbmNob3IgPSBsZWFkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQmFja3dhcmRzKSB7XG4gICAgICAgICAgICB2YXIgbmV3UmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGxlYWQsIGFuY2hvcik7XG4gICAgICAgICAgICBuZXdSYW5nZS5jdXJzb3IgPSBuZXdSYW5nZS5zdGFydDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBuZXdSYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoYW5jaG9yLCBsZWFkKTtcbiAgICAgICAgICAgIG5ld1JhbmdlLmN1cnNvciA9IG5ld1JhbmdlLmVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld1JhbmdlLmRlc2lyZWRDb2x1bW4gPSBzY3JlZW5MZWFkLmNvbHVtbjtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pbk11bHRpU2VsZWN0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNraXApXG4gICAgICAgICAgICAgICAgdmFyIHRvUmVtb3ZlID0gcmFuZ2UuY3Vyc29yO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xuICAgICAgICBpZiAodG9SZW1vdmUpXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zdWJzdHJhY3RQb2ludCh0b1JlbW92ZSk7XG4gICAgfTtcbiAgICB0aGlzLnRyYW5zcG9zZVNlbGVjdGlvbnMgPSBmdW5jdGlvbihkaXIpIHtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgIHZhciBzZWwgPSBzZXNzaW9uLm11bHRpU2VsZWN0O1xuICAgICAgICB2YXIgYWxsID0gc2VsLnJhbmdlcztcblxuICAgICAgICBmb3IgKHZhciBpID0gYWxsLmxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IGFsbFtpXTtcbiAgICAgICAgICAgIGlmIChyYW5nZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG1wID0gc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9IHRtcC5zdGFydC5yb3c7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gdG1wLnN0YXJ0LmNvbHVtbjtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmQucm93ID0gdG1wLmVuZC5yb3c7XG4gICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IHRtcC5lbmQuY29sdW1uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbC5tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzKCk7XG5cbiAgICAgICAgdmFyIHdvcmRzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSBhbGwubGVuZ3RoOyBpLS07ICkge1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gYWxsW2ldO1xuICAgICAgICAgICAgd29yZHMudW5zaGlmdChzZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpciA8IDApXG4gICAgICAgICAgICB3b3Jkcy51bnNoaWZ0KHdvcmRzLnBvcCgpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgd29yZHMucHVzaCh3b3Jkcy5zaGlmdCgpKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gYWxsLmxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IGFsbFtpXTtcbiAgICAgICAgICAgIHZhciB0bXAgPSByYW5nZS5jbG9uZSgpO1xuICAgICAgICAgICAgc2Vzc2lvbi5yZXBsYWNlKHJhbmdlLCB3b3Jkc1tpXSk7XG4gICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgPSB0bXAuc3RhcnQucm93O1xuICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gdG1wLnN0YXJ0LmNvbHVtbjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zZWxlY3RNb3JlID0gZnVuY3Rpb24oZGlyLCBza2lwLCBzdG9wQXRGaXJzdCkge1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIHNlbCA9IHNlc3Npb24ubXVsdGlTZWxlY3Q7XG5cbiAgICAgICAgdmFyIHJhbmdlID0gc2VsLnRvT3JpZW50ZWRSYW5nZSgpO1xuICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICByYW5nZSA9IHNlc3Npb24uZ2V0V29yZFJhbmdlKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgIHJhbmdlLmN1cnNvciA9IGRpciA9PSAtMSA/IHJhbmdlLnN0YXJ0IDogcmFuZ2UuZW5kO1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdC5hZGRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICBpZiAoc3RvcEF0Rmlyc3QpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZWVkbGUgPSBzZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7XG5cbiAgICAgICAgdmFyIG5ld1JhbmdlID0gZmluZChzZXNzaW9uLCBuZWVkbGUsIGRpcik7XG4gICAgICAgIGlmIChuZXdSYW5nZSkge1xuICAgICAgICAgICAgbmV3UmFuZ2UuY3Vyc29yID0gZGlyID09IC0xID8gbmV3UmFuZ2Uuc3RhcnQgOiBuZXdSYW5nZS5lbmQ7XG4gICAgICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyArPSAxO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnVuZm9sZChuZXdSYW5nZSk7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0LmFkZFJhbmdlKG5ld1JhbmdlKTtcbiAgICAgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nIC09IDE7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsIDAuNSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNraXApXG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0LnN1YnN0cmFjdFBvaW50KHJhbmdlLmN1cnNvcik7XG4gICAgfTtcbiAgICB0aGlzLmFsaWduQ3Vyc29ycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIHNlbCA9IHNlc3Npb24ubXVsdGlTZWxlY3Q7XG4gICAgICAgIHZhciByYW5nZXMgPSBzZWwucmFuZ2VzO1xuICAgICAgICB2YXIgcm93ID0gLTE7XG4gICAgICAgIHZhciBzYW1lUm93UmFuZ2VzID0gcmFuZ2VzLmZpbHRlcihmdW5jdGlvbihyKSB7XG4gICAgICAgICAgICBpZiAoci5jdXJzb3Iucm93ID09IHJvdylcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJvdyA9IHIuY3Vyc29yLnJvdztcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGggfHwgc2FtZVJvd1Jhbmdlcy5sZW5ndGggPT0gcmFuZ2VzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCk7XG4gICAgICAgICAgICB2YXIgZnIgPSByYW5nZS5zdGFydC5yb3csIGxyID0gcmFuZ2UuZW5kLnJvdztcbiAgICAgICAgICAgIHZhciBndWVzc1JhbmdlID0gZnIgPT0gbHI7XG4gICAgICAgICAgICBpZiAoZ3Vlc3NSYW5nZSkge1xuICAgICAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCk7XG4gICAgICAgICAgICAgICAgdmFyIGxpbmU7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBsaW5lID0gdGhpcy5zZXNzaW9uLmdldExpbmUobHIpO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKC9bPTpdLy50ZXN0KGxpbmUpICYmICsrbHIgPCBtYXgpO1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKGZyKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlICgvWz06XS8udGVzdChsaW5lKSAmJiAtLWZyID4gMCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKGZyIDwgMCkgZnIgPSAwO1xuICAgICAgICAgICAgICAgIGlmIChsciA+PSBtYXgpIGxyID0gbWF4IC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuc2Vzc2lvbi5yZW1vdmVGdWxsTGluZXMoZnIsIGxyKTtcbiAgICAgICAgICAgIGxpbmVzID0gdGhpcy4kcmVBbGlnblRleHQobGluZXMsIGd1ZXNzUmFuZ2UpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydCh7cm93OiBmciwgY29sdW1uOiAwfSwgbGluZXMuam9pbihcIlxcblwiKSArIFwiXFxuXCIpO1xuICAgICAgICAgICAgaWYgKCFndWVzc1JhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gMDtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0UmFuZ2UocmFuZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2FtZVJvd1Jhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgICAgICAgICBzZWwuc3Vic3RyYWN0UG9pbnQoci5jdXJzb3IpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHZhciBtYXhDb2wgPSAwO1xuICAgICAgICAgICAgdmFyIG1pblNwYWNlID0gSW5maW5pdHk7XG4gICAgICAgICAgICB2YXIgc3BhY2VPZmZzZXRzID0gcmFuZ2VzLm1hcChmdW5jdGlvbihyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSByLmN1cnNvcjtcbiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwLnJvdyk7XG4gICAgICAgICAgICAgICAgdmFyIHNwYWNlT2Zmc2V0ID0gbGluZS5zdWJzdHIocC5jb2x1bW4pLnNlYXJjaCgvXFxTL2cpO1xuICAgICAgICAgICAgICAgIGlmIChzcGFjZU9mZnNldCA9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgc3BhY2VPZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICAgICAgaWYgKHAuY29sdW1uID4gbWF4Q29sKVxuICAgICAgICAgICAgICAgICAgICBtYXhDb2wgPSBwLmNvbHVtbjtcbiAgICAgICAgICAgICAgICBpZiAoc3BhY2VPZmZzZXQgPCBtaW5TcGFjZSlcbiAgICAgICAgICAgICAgICAgICAgbWluU3BhY2UgPSBzcGFjZU9mZnNldDtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3BhY2VPZmZzZXQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcCA9IHIuY3Vyc29yO1xuICAgICAgICAgICAgICAgIHZhciBsID0gbWF4Q29sIC0gcC5jb2x1bW47XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBzcGFjZU9mZnNldHNbaV0gLSBtaW5TcGFjZTtcbiAgICAgICAgICAgICAgICBpZiAobCA+IGQpXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb24uaW5zZXJ0KHAsIGxhbmcuc3RyaW5nUmVwZWF0KFwiIFwiLCBsIC0gZCkpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmUobmV3IFJhbmdlKHAucm93LCBwLmNvbHVtbiwgcC5yb3csIHAuY29sdW1uIC0gbCArIGQpKTtcblxuICAgICAgICAgICAgICAgIHIuc3RhcnQuY29sdW1uID0gci5lbmQuY29sdW1uID0gbWF4Q29sO1xuICAgICAgICAgICAgICAgIHIuc3RhcnQucm93ID0gci5lbmQucm93ID0gcC5yb3c7XG4gICAgICAgICAgICAgICAgci5jdXJzb3IgPSByLmVuZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsLmZyb21PcmllbnRlZFJhbmdlKHJhbmdlc1swXSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuJHJlQWxpZ25UZXh0ID0gZnVuY3Rpb24obGluZXMsIGZvcmNlTGVmdCkge1xuICAgICAgICB2YXIgaXNMZWZ0QWxpZ25lZCA9IHRydWUsIGlzUmlnaHRBbGlnbmVkID0gdHJ1ZTtcbiAgICAgICAgdmFyIHN0YXJ0VywgdGV4dFcsIGVuZFc7XG5cbiAgICAgICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICB2YXIgbSA9IGxpbmUubWF0Y2goLyhcXHMqKSguKj8pKFxccyopKFs9Ol0uKikvKTtcbiAgICAgICAgICAgIGlmICghbSlcbiAgICAgICAgICAgICAgICByZXR1cm4gW2xpbmVdO1xuXG4gICAgICAgICAgICBpZiAoc3RhcnRXID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdGFydFcgPSBtWzFdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0ZXh0VyA9IG1bMl0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGVuZFcgPSBtWzNdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0YXJ0VyArIHRleHRXICsgZW5kVyAhPSBtWzFdLmxlbmd0aCArIG1bMl0ubGVuZ3RoICsgbVszXS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgaXNSaWdodEFsaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzdGFydFcgIT0gbVsxXS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgaXNMZWZ0QWxpZ25lZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoc3RhcnRXID4gbVsxXS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgc3RhcnRXID0gbVsxXS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAodGV4dFcgPCBtWzJdLmxlbmd0aClcbiAgICAgICAgICAgICAgICB0ZXh0VyA9IG1bMl0ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGVuZFcgPiBtWzNdLmxlbmd0aClcbiAgICAgICAgICAgICAgICBlbmRXID0gbVszXS5sZW5ndGg7XG5cbiAgICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICB9KS5tYXAoZm9yY2VMZWZ0ID8gYWxpZ25MZWZ0IDpcbiAgICAgICAgICAgIGlzTGVmdEFsaWduZWQgPyBpc1JpZ2h0QWxpZ25lZCA/IGFsaWduUmlnaHQgOiBhbGlnbkxlZnQgOiB1bkFsaWduKTtcblxuICAgICAgICBmdW5jdGlvbiBzcGFjZXMobikge1xuICAgICAgICAgICAgcmV0dXJuIGxhbmcuc3RyaW5nUmVwZWF0KFwiIFwiLCBuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGFsaWduTGVmdChtKSB7XG4gICAgICAgICAgICByZXR1cm4gIW1bMl0gPyBtWzBdIDogc3BhY2VzKHN0YXJ0VykgKyBtWzJdXG4gICAgICAgICAgICAgICAgKyBzcGFjZXModGV4dFcgLSBtWzJdLmxlbmd0aCArIGVuZFcpXG4gICAgICAgICAgICAgICAgKyBtWzRdLnJlcGxhY2UoL14oWz06XSlcXHMrLywgXCIkMSBcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWxpZ25SaWdodChtKSB7XG4gICAgICAgICAgICByZXR1cm4gIW1bMl0gPyBtWzBdIDogc3BhY2VzKHN0YXJ0VyArIHRleHRXIC0gbVsyXS5sZW5ndGgpICsgbVsyXVxuICAgICAgICAgICAgICAgICsgc3BhY2VzKGVuZFcsIFwiIFwiKVxuICAgICAgICAgICAgICAgICsgbVs0XS5yZXBsYWNlKC9eKFs9Ol0pXFxzKy8sIFwiJDEgXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHVuQWxpZ24obSkge1xuICAgICAgICAgICAgcmV0dXJuICFtWzJdID8gbVswXSA6IHNwYWNlcyhzdGFydFcpICsgbVsyXVxuICAgICAgICAgICAgICAgICsgc3BhY2VzKGVuZFcpXG4gICAgICAgICAgICAgICAgKyBtWzRdLnJlcGxhY2UoL14oWz06XSlcXHMrLywgXCIkMSBcIik7XG4gICAgICAgIH1cbiAgICB9O1xufSkuY2FsbChFZGl0b3IucHJvdG90eXBlKTtcblxuXG5mdW5jdGlvbiBpc1NhbWVQb2ludChwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEucm93ID09IHAyLnJvdyAmJiBwMS5jb2x1bW4gPT0gcDIuY29sdW1uO1xufVxuZXhwb3J0cy5vblNlc3Npb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHNlc3Npb24gPSBlLnNlc3Npb247XG4gICAgaWYgKHNlc3Npb24gJiYgIXNlc3Npb24ubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2VycyA9IFtdO1xuICAgICAgICBzZXNzaW9uLnNlbGVjdGlvbi4kaW5pdFJhbmdlTGlzdCgpO1xuICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0ID0gc2Vzc2lvbi5zZWxlY3Rpb247XG4gICAgfVxuICAgIHRoaXMubXVsdGlTZWxlY3QgPSBzZXNzaW9uICYmIHNlc3Npb24ubXVsdGlTZWxlY3Q7XG5cbiAgICB2YXIgb2xkU2Vzc2lvbiA9IGUub2xkU2Vzc2lvbjtcbiAgICBpZiAob2xkU2Vzc2lvbikge1xuICAgICAgICBvbGRTZXNzaW9uLm11bHRpU2VsZWN0Lm9mZihcImFkZFJhbmdlXCIsIHRoaXMuJG9uQWRkUmFuZ2UpO1xuICAgICAgICBvbGRTZXNzaW9uLm11bHRpU2VsZWN0Lm9mZihcInJlbW92ZVJhbmdlXCIsIHRoaXMuJG9uUmVtb3ZlUmFuZ2UpO1xuICAgICAgICBvbGRTZXNzaW9uLm11bHRpU2VsZWN0Lm9mZihcIm11bHRpU2VsZWN0XCIsIHRoaXMuJG9uTXVsdGlTZWxlY3QpO1xuICAgICAgICBvbGRTZXNzaW9uLm11bHRpU2VsZWN0Lm9mZihcInNpbmdsZVNlbGVjdFwiLCB0aGlzLiRvblNpbmdsZVNlbGVjdCk7XG4gICAgICAgIG9sZFNlc3Npb24ubXVsdGlTZWxlY3QubGVhZC5vZmYoXCJjaGFuZ2VcIiwgdGhpcy4kY2hlY2tNdWx0aXNlbGVjdENoYW5nZSk7XG4gICAgICAgIG9sZFNlc3Npb24ubXVsdGlTZWxlY3QuYW5jaG9yLm9mZihcImNoYW5nZVwiLCB0aGlzLiRjaGVja011bHRpc2VsZWN0Q2hhbmdlKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbikge1xuICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0Lm9uKFwiYWRkUmFuZ2VcIiwgdGhpcy4kb25BZGRSYW5nZSk7XG4gICAgICAgIHNlc3Npb24ubXVsdGlTZWxlY3Qub24oXCJyZW1vdmVSYW5nZVwiLCB0aGlzLiRvblJlbW92ZVJhbmdlKTtcbiAgICAgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5vbihcIm11bHRpU2VsZWN0XCIsIHRoaXMuJG9uTXVsdGlTZWxlY3QpO1xuICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0Lm9uKFwic2luZ2xlU2VsZWN0XCIsIHRoaXMuJG9uU2luZ2xlU2VsZWN0KTtcbiAgICAgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5sZWFkLm9uKFwiY2hhbmdlXCIsIHRoaXMuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UpO1xuICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0LmFuY2hvci5vbihcImNoYW5nZVwiLCB0aGlzLiRjaGVja011bHRpc2VsZWN0Q2hhbmdlKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbiAmJiB0aGlzLmluTXVsdGlTZWxlY3RNb2RlICE9IHNlc3Npb24uc2VsZWN0aW9uLmluTXVsdGlTZWxlY3RNb2RlKSB7XG4gICAgICAgIGlmIChzZXNzaW9uLnNlbGVjdGlvbi5pbk11bHRpU2VsZWN0TW9kZSlcbiAgICAgICAgICAgIHRoaXMuJG9uTXVsdGlTZWxlY3QoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy4kb25TaW5nbGVTZWxlY3QoKTtcbiAgICB9XG59O1xuZnVuY3Rpb24gTXVsdGlTZWxlY3QoZWRpdG9yKSB7XG4gICAgaWYgKGVkaXRvci4kbXVsdGlzZWxlY3RPblNlc3Npb25DaGFuZ2UpXG4gICAgICAgIHJldHVybjtcbiAgICBlZGl0b3IuJG9uQWRkUmFuZ2UgPSBlZGl0b3IuJG9uQWRkUmFuZ2UuYmluZChlZGl0b3IpO1xuICAgIGVkaXRvci4kb25SZW1vdmVSYW5nZSA9IGVkaXRvci4kb25SZW1vdmVSYW5nZS5iaW5kKGVkaXRvcik7XG4gICAgZWRpdG9yLiRvbk11bHRpU2VsZWN0ID0gZWRpdG9yLiRvbk11bHRpU2VsZWN0LmJpbmQoZWRpdG9yKTtcbiAgICBlZGl0b3IuJG9uU2luZ2xlU2VsZWN0ID0gZWRpdG9yLiRvblNpbmdsZVNlbGVjdC5iaW5kKGVkaXRvcik7XG4gICAgZWRpdG9yLiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZSA9IGV4cG9ydHMub25TZXNzaW9uQ2hhbmdlLmJpbmQoZWRpdG9yKTtcbiAgICBlZGl0b3IuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UgPSBlZGl0b3IuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UuYmluZChlZGl0b3IpO1xuXG4gICAgZWRpdG9yLiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZShlZGl0b3IpO1xuICAgIGVkaXRvci5vbihcImNoYW5nZVNlc3Npb25cIiwgZWRpdG9yLiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZSk7XG5cbiAgICBlZGl0b3Iub24oXCJtb3VzZWRvd25cIiwgb25Nb3VzZURvd24pO1xuICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhjb21tYW5kcy5kZWZhdWx0Q29tbWFuZHMpO1xuXG4gICAgYWRkQWx0Q3Vyc29yTGlzdGVuZXJzKGVkaXRvcik7XG59XG5cbmZ1bmN0aW9uIGFkZEFsdEN1cnNvckxpc3RlbmVycyhlZGl0b3Ipe1xuICAgIHZhciBlbCA9IGVkaXRvci50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpO1xuICAgIHZhciBhbHRDdXJzb3IgPSBmYWxzZTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihlbCwgXCJrZXlkb3duXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIGFsdERvd24gPSBlLmtleUNvZGUgPT0gMTggJiYgIShlLmN0cmxLZXkgfHwgZS5zaGlmdEtleSB8fCBlLm1ldGFLZXkpO1xuICAgICAgICBpZiAoZWRpdG9yLiRibG9ja1NlbGVjdEVuYWJsZWQgJiYgYWx0RG93bikge1xuICAgICAgICAgICAgaWYgKCFhbHRDdXJzb3IpIHtcbiAgICAgICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2V0TW91c2VDdXJzb3IoXCJjcm9zc2hhaXJcIik7XG4gICAgICAgICAgICAgICAgYWx0Q3Vyc29yID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhbHRDdXJzb3IpIHtcbiAgICAgICAgICAgIHJlc2V0KCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGV2ZW50LmFkZExpc3RlbmVyKGVsLCBcImtleXVwXCIsIHJlc2V0KTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihlbCwgXCJibHVyXCIsIHJlc2V0KTtcbiAgICBmdW5jdGlvbiByZXNldChlKSB7XG4gICAgICAgIGlmIChhbHRDdXJzb3IpIHtcbiAgICAgICAgICAgIGVkaXRvci5yZW5kZXJlci5zZXRNb3VzZUN1cnNvcihcIlwiKTtcbiAgICAgICAgICAgIGFsdEN1cnNvciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnRzLk11bHRpU2VsZWN0ID0gTXVsdGlTZWxlY3Q7XG5cblxuYWNlcXVpcmUoXCIuL2NvbmZpZ1wiKS5kZWZpbmVPcHRpb25zKEVkaXRvci5wcm90b3R5cGUsIFwiZWRpdG9yXCIsIHtcbiAgICBlbmFibGVNdWx0aXNlbGVjdDoge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgTXVsdGlTZWxlY3QodGhpcyk7XG4gICAgICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbihcImNoYW5nZVNlc3Npb25cIiwgdGhpcy4kbXVsdGlzZWxlY3RPblNlc3Npb25DaGFuZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMub24oXCJtb3VzZWRvd25cIiwgb25Nb3VzZURvd24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZihcImNoYW5nZVNlc3Npb25cIiwgdGhpcy4kbXVsdGlzZWxlY3RPblNlc3Npb25DaGFuZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKFwibW91c2Vkb3duXCIsIG9uTW91c2VEb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IHRydWVcbiAgICB9LFxuICAgIGVuYWJsZUJsb2NrU2VsZWN0OiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICB0aGlzLiRibG9ja1NlbGVjdEVuYWJsZWQgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiB0cnVlXG4gICAgfVxufSk7XG5cblxuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvcmFuZ2VcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgUmFuZ2UgPSBhY2VxdWlyZShcIi4uLy4uL3JhbmdlXCIpLlJhbmdlO1xuXG52YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7fTtcblxuKGZ1bmN0aW9uKCkge1xuXG4gICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBudWxsO1xuICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBudWxsO1xuICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7XG4gICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7XG4gICAgICAgIGlmICh0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGxpbmUpKVxuICAgICAgICAgICAgcmV0dXJuIFwic3RhcnRcIjtcbiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PSBcIm1hcmtiZWdpbmVuZFwiXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5mb2xkaW5nU3RvcE1hcmtlclxuICAgICAgICAgICAgICAgICYmIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChsaW5lKSlcbiAgICAgICAgICAgIHJldHVybiBcImVuZFwiO1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdGhpcy5pbmRlbnRhdGlvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93LCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIHJlID0gL1xcUy87XG4gICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7XG4gICAgICAgIHZhciBzdGFydExldmVsID0gbGluZS5zZWFyY2gocmUpO1xuICAgICAgICBpZiAoc3RhcnRMZXZlbCA9PSAtMSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBjb2x1bW4gfHwgbGluZS5sZW5ndGg7XG4gICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpO1xuICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7XG4gICAgICAgIHZhciBlbmRSb3cgPSByb3c7XG5cbiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7XG4gICAgICAgICAgICB2YXIgbGV2ZWwgPSBzZXNzaW9uLmdldExpbmUocm93KS5zZWFyY2gocmUpO1xuXG4gICAgICAgICAgICBpZiAobGV2ZWwgPT0gLTEpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmIChsZXZlbCA8PSBzdGFydExldmVsKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBlbmRSb3cgPSByb3c7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHtcbiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGJyYWNrZXQsIHJvdywgY29sdW1uLCB0eXBlUmUpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbiArIDF9O1xuICAgICAgICB2YXIgZW5kID0gc2Vzc2lvbi4kZmluZENsb3NpbmdCcmFja2V0KGJyYWNrZXQsIHN0YXJ0LCB0eXBlUmUpO1xuICAgICAgICBpZiAoIWVuZClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB2YXIgZncgPSBzZXNzaW9uLmZvbGRXaWRnZXRzW2VuZC5yb3ddO1xuICAgICAgICBpZiAoZncgPT0gbnVsbClcbiAgICAgICAgICAgIGZ3ID0gc2Vzc2lvbi5nZXRGb2xkV2lkZ2V0KGVuZC5yb3cpO1xuXG4gICAgICAgIGlmIChmdyA9PSBcInN0YXJ0XCIgJiYgZW5kLnJvdyA+IHN0YXJ0LnJvdykge1xuICAgICAgICAgICAgZW5kLnJvdyAtLTtcbiAgICAgICAgICAgIGVuZC5jb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kLnJvdykubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCBlbmQpO1xuICAgIH07XG5cbiAgICB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBicmFja2V0LCByb3csIGNvbHVtbiwgdHlwZVJlKSB7XG4gICAgICAgIHZhciBlbmQgPSB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTtcbiAgICAgICAgdmFyIHN0YXJ0ID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0KGJyYWNrZXQsIGVuZCk7XG5cbiAgICAgICAgaWYgKCFzdGFydClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBzdGFydC5jb2x1bW4rKztcbiAgICAgICAgZW5kLmNvbHVtbi0tO1xuXG4gICAgICAgIHJldHVybiAgUmFuZ2UuZnJvbVBvaW50cyhzdGFydCwgZW5kKTtcbiAgICB9O1xufSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS90aGVtZS90ZXh0bWF0ZVwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9kb21cIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLmlzRGFyayA9IGZhbHNlO1xuZXhwb3J0cy5jc3NDbGFzcyA9IFwiYWNlLXRtXCI7XG5leHBvcnRzLmNzc1RleHQgPSBcIi5hY2UtdG0gLmFjZV9ndXR0ZXIge1xcXG5iYWNrZ3JvdW5kOiAjZjBmMGYwO1xcXG5jb2xvcjogIzMzMztcXFxufVxcXG4uYWNlLXRtIC5hY2VfcHJpbnQtbWFyZ2luIHtcXFxud2lkdGg6IDFweDtcXFxuYmFja2dyb3VuZDogI2U4ZThlODtcXFxufVxcXG4uYWNlLXRtIC5hY2VfZm9sZCB7XFxcbmJhY2tncm91bmQtY29sb3I6ICM2QjcyRTY7XFxcbn1cXFxuLmFjZS10bSB7XFxcbmJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7XFxcbmNvbG9yOiBibGFjaztcXFxufVxcXG4uYWNlLXRtIC5hY2VfY3Vyc29yIHtcXFxuY29sb3I6IGJsYWNrO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9pbnZpc2libGUge1xcXG5jb2xvcjogcmdiKDE5MSwgMTkxLCAxOTEpO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9zdG9yYWdlLFxcXG4uYWNlLXRtIC5hY2Vfa2V5d29yZCB7XFxcbmNvbG9yOiBibHVlO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9jb25zdGFudCB7XFxcbmNvbG9yOiByZ2IoMTk3LCA2LCAxMSk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9idWlsZGluIHtcXFxuY29sb3I6IHJnYig4OCwgNzIsIDI0Nik7XFxcbn1cXFxuLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7XFxcbmNvbG9yOiByZ2IoODgsIDkyLCAyNDYpO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7XFxcbmNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX2ludmFsaWQge1xcXG5iYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMCwgMCwgMC4xKTtcXFxuY29sb3I6IHJlZDtcXFxufVxcXG4uYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24ge1xcXG5jb2xvcjogcmdiKDYwLCA3NiwgMTE0KTtcXFxufVxcXG4uYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQge1xcXG5jb2xvcjogcmdiKDYsIDE1MCwgMTQpO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV90eXBlLFxcXG4uYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfY2xhc3Mge1xcXG5jb2xvcjogcmdiKDEwOSwgMTIxLCAyMjIpO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7XFxcbmNvbG9yOiByZ2IoMTA0LCAxMTgsIDEzNSk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX3N0cmluZyB7XFxcbmNvbG9yOiByZ2IoMywgMTA2LCA3KTtcXFxufVxcXG4uYWNlLXRtIC5hY2VfY29tbWVudCB7XFxcbmNvbG9yOiByZ2IoNzYsIDEzNiwgMTA3KTtcXFxufVxcXG4uYWNlLXRtIC5hY2VfY29tbWVudC5hY2VfZG9jIHtcXFxuY29sb3I6IHJnYigwLCAxMDIsIDI1NSk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX2NvbW1lbnQuYWNlX2RvYy5hY2VfdGFnIHtcXFxuY29sb3I6IHJnYigxMjgsIDE1OSwgMTkxKTtcXFxufVxcXG4uYWNlLXRtIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMge1xcXG5jb2xvcjogcmdiKDAsIDAsIDIwNSk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX3ZhcmlhYmxlIHtcXFxuY29sb3I6IHJnYig0OSwgMTMyLCAxNDkpO1xcXG59XFxcbi5hY2UtdG0gLmFjZV94bWwtcGUge1xcXG5jb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24ge1xcXG5jb2xvcjogIzAwMDBBMjtcXFxufVxcXG4uYWNlLXRtIC5hY2VfaGVhZGluZyB7XFxcbmNvbG9yOiByZ2IoMTIsIDcsIDI1NSk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX2xpc3Qge1xcXG5jb2xvcjpyZ2IoMTg1LCA2LCAxNDQpO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9tZXRhLmFjZV90YWcge1xcXG5jb2xvcjpyZ2IoMCwgMjIsIDE0Mik7XFxcbn1cXFxuLmFjZS10bSAuYWNlX3N0cmluZy5hY2VfcmVnZXgge1xcXG5jb2xvcjogcmdiKDI1NSwgMCwgMClcXFxufVxcXG4uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcXFxuYmFja2dyb3VuZDogcmdiKDE4MSwgMjEzLCAyNTUpO1xcXG59XFxcbi5hY2UtdG0uYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XFxcbmJveC1zaGFkb3c6IDAgMCAzcHggMHB4IHdoaXRlO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcXFxuYmFja2dyb3VuZDogcmdiKDI1MiwgMjU1LCAwKTtcXFxufVxcXG4uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RhY2sge1xcXG5iYWNrZ3JvdW5kOiByZ2IoMTY0LCAyMjksIDEwMSk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1xcXG5tYXJnaW46IC0xcHggMCAwIC0xcHg7XFxcbmJvcmRlcjogMXB4IHNvbGlkIHJnYigxOTIsIDE5MiwgMTkyKTtcXFxufVxcXG4uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1xcXG5iYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDcpO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1xcXG5iYWNrZ3JvdW5kLWNvbG9yIDogI2RjZGNkYztcXFxufVxcXG4uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XFxcbmJhY2tncm91bmQ6IHJnYigyNTAsIDI1MCwgMjU1KTtcXFxuYm9yZGVyOiAxcHggc29saWQgcmdiKDIwMCwgMjAwLCAyNTApO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9pbmRlbnQtZ3VpZGUge1xcXG5iYWNrZ3JvdW5kOiB1cmwoXFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBWUFBQUNaZ2JZbkFBQUFFMGxFUVZRSW1XUDQvLy8vZjRiTGx5Ly9Cd0FtVmdkMS93MTEvZ0FBQUFCSlJVNUVya0pnZ2c9PVxcXCIpIHJpZ2h0IHJlcGVhdC15O1xcXG59XFxcblwiO1xuXG52YXIgZG9tID0gYWNlcXVpcmUoXCIuLi9saWIvZG9tXCIpO1xuZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGluZV93aWRnZXRzXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9kb21cIixcImFjZS9yYW5nZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBvb3AgPSBhY2VxdWlyZShcIi4vbGliL29vcFwiKTtcbnZhciBkb20gPSBhY2VxdWlyZShcIi4vbGliL2RvbVwiKTtcbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi9yYW5nZVwiKS5SYW5nZTtcblxuXG5mdW5jdGlvbiBMaW5lV2lkZ2V0cyhzZXNzaW9uKSB7XG4gICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICB0aGlzLnNlc3Npb24ud2lkZ2V0TWFuYWdlciA9IHRoaXM7XG4gICAgdGhpcy5zZXNzaW9uLmdldFJvd0xlbmd0aCA9IHRoaXMuZ2V0Um93TGVuZ3RoO1xuICAgIHRoaXMuc2Vzc2lvbi4kZ2V0V2lkZ2V0U2NyZWVuTGVuZ3RoID0gdGhpcy4kZ2V0V2lkZ2V0U2NyZWVuTGVuZ3RoO1xuICAgIHRoaXMudXBkYXRlT25DaGFuZ2UgPSB0aGlzLnVwZGF0ZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZW5kZXJXaWRnZXRzID0gdGhpcy5yZW5kZXJXaWRnZXRzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5tZWFzdXJlV2lkZ2V0cyA9IHRoaXMubWVhc3VyZVdpZGdldHMuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNlc3Npb24uX2NoYW5nZWRXaWRnZXRzID0gW107XG4gICAgdGhpcy4kb25DaGFuZ2VFZGl0b3IgPSB0aGlzLiRvbkNoYW5nZUVkaXRvci5iaW5kKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuc2Vzc2lvbi5vbihcImNoYW5nZVwiLCB0aGlzLnVwZGF0ZU9uQ2hhbmdlKTtcbiAgICB0aGlzLnNlc3Npb24ub24oXCJjaGFuZ2VGb2xkXCIsIHRoaXMudXBkYXRlT25Gb2xkKTtcbiAgICB0aGlzLnNlc3Npb24ub24oXCJjaGFuZ2VFZGl0b3JcIiwgdGhpcy4kb25DaGFuZ2VFZGl0b3IpO1xufVxuXG4oZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5nZXRSb3dMZW5ndGggPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgdmFyIGg7XG4gICAgICAgIGlmICh0aGlzLmxpbmVXaWRnZXRzKVxuICAgICAgICAgICAgaCA9IHRoaXMubGluZVdpZGdldHNbcm93XSAmJiB0aGlzLmxpbmVXaWRnZXRzW3Jvd10ucm93Q291bnQgfHwgMDtcbiAgICAgICAgZWxzZSBcbiAgICAgICAgICAgIGggPSAwO1xuICAgICAgICBpZiAoIXRoaXMuJHVzZVdyYXBNb2RlIHx8ICF0aGlzLiR3cmFwRGF0YVtyb3ddKSB7XG4gICAgICAgICAgICByZXR1cm4gMSArIGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kd3JhcERhdGFbcm93XS5sZW5ndGggKyAxICsgaDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRnZXRXaWRnZXRTY3JlZW5MZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHNjcmVlblJvd3MgPSAwO1xuICAgICAgICB0aGlzLmxpbmVXaWRnZXRzLmZvckVhY2goZnVuY3Rpb24odyl7XG4gICAgICAgICAgICBpZiAodyAmJiB3LnJvd0NvdW50ICYmICF3LmhpZGRlbilcbiAgICAgICAgICAgICAgICBzY3JlZW5Sb3dzICs9IHcucm93Q291bnQ7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2NyZWVuUm93cztcbiAgICB9OyAgICBcbiAgICBcbiAgICB0aGlzLiRvbkNoYW5nZUVkaXRvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdGhpcy5hdHRhY2goZS5lZGl0b3IpO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5hdHRhY2ggPSBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICAgICAgaWYgKGVkaXRvciAgJiYgZWRpdG9yLndpZGdldE1hbmFnZXIgJiYgZWRpdG9yLndpZGdldE1hbmFnZXIgIT0gdGhpcylcbiAgICAgICAgICAgIGVkaXRvci53aWRnZXRNYW5hZ2VyLmRldGFjaCgpO1xuXG4gICAgICAgIGlmICh0aGlzLmVkaXRvciA9PSBlZGl0b3IpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5kZXRhY2goKTtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gICAgICAgIFxuICAgICAgICBpZiAoZWRpdG9yKSB7XG4gICAgICAgICAgICBlZGl0b3Iud2lkZ2V0TWFuYWdlciA9IHRoaXM7XG4gICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIub24oXCJiZWZvcmVSZW5kZXJcIiwgdGhpcy5tZWFzdXJlV2lkZ2V0cyk7XG4gICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIub24oXCJhZnRlclJlbmRlclwiLCB0aGlzLnJlbmRlcldpZGdldHMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICBpZiAoIWVkaXRvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuZWRpdG9yID0gbnVsbDtcbiAgICAgICAgZWRpdG9yLndpZGdldE1hbmFnZXIgPSBudWxsO1xuICAgICAgICBcbiAgICAgICAgZWRpdG9yLnJlbmRlcmVyLm9mZihcImJlZm9yZVJlbmRlclwiLCB0aGlzLm1lYXN1cmVXaWRnZXRzKTtcbiAgICAgICAgZWRpdG9yLnJlbmRlcmVyLm9mZihcImFmdGVyUmVuZGVyXCIsIHRoaXMucmVuZGVyV2lkZ2V0cyk7XG4gICAgICAgIHZhciBsaW5lV2lkZ2V0cyA9IHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0cztcbiAgICAgICAgbGluZVdpZGdldHMgJiYgbGluZVdpZGdldHMuZm9yRWFjaChmdW5jdGlvbih3KSB7XG4gICAgICAgICAgICBpZiAodyAmJiB3LmVsICYmIHcuZWwucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHcuX2luRG9jdW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB3LmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQody5lbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZU9uRm9sZCA9IGZ1bmN0aW9uKGUsIHNlc3Npb24pIHtcbiAgICAgICAgdmFyIGxpbmVXaWRnZXRzID0gc2Vzc2lvbi5saW5lV2lkZ2V0cztcbiAgICAgICAgaWYgKCFsaW5lV2lkZ2V0cyB8fCAhZS5hY3Rpb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBmb2xkID0gZS5kYXRhO1xuICAgICAgICB2YXIgc3RhcnQgPSBmb2xkLnN0YXJ0LnJvdztcbiAgICAgICAgdmFyIGVuZCA9IGZvbGQuZW5kLnJvdztcbiAgICAgICAgdmFyIGhpZGUgPSBlLmFjdGlvbiA9PSBcImFkZFwiO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQgKyAxOyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsaW5lV2lkZ2V0c1tpXSlcbiAgICAgICAgICAgICAgICBsaW5lV2lkZ2V0c1tpXS5oaWRkZW4gPSBoaWRlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW5lV2lkZ2V0c1tlbmRdKSB7XG4gICAgICAgICAgICBpZiAoaGlkZSkge1xuICAgICAgICAgICAgICAgIGlmICghbGluZVdpZGdldHNbc3RhcnRdKVxuICAgICAgICAgICAgICAgICAgICBsaW5lV2lkZ2V0c1tzdGFydF0gPSBsaW5lV2lkZ2V0c1tlbmRdO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgbGluZVdpZGdldHNbZW5kXS5oaWRkZW4gPSBoaWRlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAobGluZVdpZGdldHNbc3RhcnRdID09IGxpbmVXaWRnZXRzW2VuZF0pXG4gICAgICAgICAgICAgICAgICAgIGxpbmVXaWRnZXRzW3N0YXJ0XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBsaW5lV2lkZ2V0c1tlbmRdLmhpZGRlbiA9IGhpZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHRoaXMudXBkYXRlT25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkge1xuICAgICAgICB2YXIgbGluZVdpZGdldHMgPSB0aGlzLnNlc3Npb24ubGluZVdpZGdldHM7XG4gICAgICAgIGlmICghbGluZVdpZGdldHMpIHJldHVybjtcbiAgICAgICAgXG4gICAgICAgIHZhciBzdGFydFJvdyA9IGRlbHRhLnN0YXJ0LnJvdztcbiAgICAgICAgdmFyIGxlbiA9IGRlbHRhLmVuZC5yb3cgLSBzdGFydFJvdztcblxuICAgICAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICdyZW1vdmUnKSB7XG4gICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGxpbmVXaWRnZXRzLnNwbGljZShzdGFydFJvdyArIDEsIGxlbik7XG4gICAgICAgICAgICByZW1vdmVkLmZvckVhY2goZnVuY3Rpb24odykge1xuICAgICAgICAgICAgICAgIHcgJiYgdGhpcy5yZW1vdmVMaW5lV2lkZ2V0KHcpO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLiR1cGRhdGVSb3dzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgICAgICAgICAgYXJncy51bnNoaWZ0KHN0YXJ0Um93LCAwKTtcbiAgICAgICAgICAgIGxpbmVXaWRnZXRzLnNwbGljZS5hcHBseShsaW5lV2lkZ2V0cywgYXJncyk7XG4gICAgICAgICAgICB0aGlzLiR1cGRhdGVSb3dzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHRoaXMuJHVwZGF0ZVJvd3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGxpbmVXaWRnZXRzID0gdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzO1xuICAgICAgICBpZiAoIWxpbmVXaWRnZXRzKSByZXR1cm47XG4gICAgICAgIHZhciBub1dpZGdldHMgPSB0cnVlO1xuICAgICAgICBsaW5lV2lkZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uKHcsIGkpIHtcbiAgICAgICAgICAgIGlmICh3KSB7XG4gICAgICAgICAgICAgICAgbm9XaWRnZXRzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdy5yb3cgPSBpO1xuICAgICAgICAgICAgICAgIHdoaWxlICh3LiRvbGRXaWRnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdy4kb2xkV2lkZ2V0LnJvdyA9IGk7XG4gICAgICAgICAgICAgICAgICAgIHcgPSB3LiRvbGRXaWRnZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG5vV2lkZ2V0cylcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0cyA9IG51bGw7XG4gICAgfTtcblxuICAgIHRoaXMuYWRkTGluZVdpZGdldCA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlc3Npb24ubGluZVdpZGdldHMpXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ubGluZVdpZGdldHMgPSBuZXcgQXJyYXkodGhpcy5zZXNzaW9uLmdldExlbmd0aCgpKTtcbiAgICAgICAgXG4gICAgICAgIHZhciBvbGQgPSB0aGlzLnNlc3Npb24ubGluZVdpZGdldHNbdy5yb3ddO1xuICAgICAgICBpZiAob2xkKSB7XG4gICAgICAgICAgICB3LiRvbGRXaWRnZXQgPSBvbGQ7XG4gICAgICAgICAgICBpZiAob2xkLmVsICYmIG9sZC5lbC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgb2xkLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2xkLmVsKTtcbiAgICAgICAgICAgICAgICBvbGQuX2luRG9jdW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0c1t3LnJvd10gPSB3O1xuICAgICAgICBcbiAgICAgICAgdy5zZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuICAgICAgICBcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5lZGl0b3IucmVuZGVyZXI7XG4gICAgICAgIGlmICh3Lmh0bWwgJiYgIXcuZWwpIHtcbiAgICAgICAgICAgIHcuZWwgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICAgIHcuZWwuaW5uZXJIVE1MID0gdy5odG1sO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3LmVsKSB7XG4gICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3Mody5lbCwgXCJhY2VfbGluZVdpZGdldENvbnRhaW5lclwiKTtcbiAgICAgICAgICAgIHcuZWwuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgICAgICAgICB3LmVsLnN0eWxlLnpJbmRleCA9IDU7XG4gICAgICAgICAgICByZW5kZXJlci5jb250YWluZXIuYXBwZW5kQ2hpbGQody5lbCk7XG4gICAgICAgICAgICB3Ll9pbkRvY3VtZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKCF3LmNvdmVyR3V0dGVyKSB7XG4gICAgICAgICAgICB3LmVsLnN0eWxlLnpJbmRleCA9IDM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHcucGl4ZWxIZWlnaHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdy5waXhlbEhlaWdodCA9IHcuZWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh3LnJvd0NvdW50ID09IG51bGwpIHtcbiAgICAgICAgICAgIHcucm93Q291bnQgPSB3LnBpeGVsSGVpZ2h0IC8gcmVuZGVyZXIubGF5ZXJDb25maWcubGluZUhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdmFyIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KHcucm93LCAwKTtcbiAgICAgICAgdy4kZm9sZCA9IGZvbGQ7XG4gICAgICAgIGlmIChmb2xkKSB7XG4gICAgICAgICAgICB2YXIgbGluZVdpZGdldHMgPSB0aGlzLnNlc3Npb24ubGluZVdpZGdldHM7XG4gICAgICAgICAgICBpZiAody5yb3cgPT0gZm9sZC5lbmQucm93ICYmICFsaW5lV2lkZ2V0c1tmb2xkLnN0YXJ0LnJvd10pXG4gICAgICAgICAgICAgICAgbGluZVdpZGdldHNbZm9sZC5zdGFydC5yb3ddID0gdztcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB3LmhpZGRlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICB0aGlzLnNlc3Npb24uX2VtaXQoXCJjaGFuZ2VGb2xkXCIsIHtkYXRhOntzdGFydDp7cm93OiB3LnJvd319fSk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLiR1cGRhdGVSb3dzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyV2lkZ2V0cyhudWxsLCByZW5kZXJlcik7XG4gICAgICAgIHRoaXMub25XaWRnZXRDaGFuZ2VkKHcpO1xuICAgICAgICByZXR1cm4gdztcbiAgICB9O1xuICAgIFxuICAgIHRoaXMucmVtb3ZlTGluZVdpZGdldCA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgICAgdy5faW5Eb2N1bWVudCA9IGZhbHNlO1xuICAgICAgICB3LnNlc3Npb24gPSBudWxsO1xuICAgICAgICBpZiAody5lbCAmJiB3LmVsLnBhcmVudE5vZGUpXG4gICAgICAgICAgICB3LmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQody5lbCk7XG4gICAgICAgIGlmICh3LmVkaXRvciAmJiB3LmVkaXRvci5kZXN0cm95KSB0cnkge1xuICAgICAgICAgICAgdy5lZGl0b3IuZGVzdHJveSgpO1xuICAgICAgICB9IGNhdGNoKGUpe31cbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0cykge1xuICAgICAgICAgICAgdmFyIHcxID0gdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzW3cucm93XTtcbiAgICAgICAgICAgIGlmICh3MSA9PSB3KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzW3cucm93XSA9IHcuJG9sZFdpZGdldDtcbiAgICAgICAgICAgICAgICBpZiAody4kb2xkV2lkZ2V0KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uV2lkZ2V0Q2hhbmdlZCh3LiRvbGRXaWRnZXQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAodzEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHcxLiRvbGRXaWRnZXQgPT0gdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdzEuJG9sZFdpZGdldCA9IHcuJG9sZFdpZGdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHcxID0gdzEuJG9sZFdpZGdldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXNzaW9uLl9lbWl0KFwiY2hhbmdlRm9sZFwiLCB7ZGF0YTp7c3RhcnQ6e3Jvdzogdy5yb3d9fX0pO1xuICAgICAgICB0aGlzLiR1cGRhdGVSb3dzKCk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmdldFdpZGdldHNBdFJvdyA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICB2YXIgbGluZVdpZGdldHMgPSB0aGlzLnNlc3Npb24ubGluZVdpZGdldHM7XG4gICAgICAgIHZhciB3ID0gbGluZVdpZGdldHMgJiYgbGluZVdpZGdldHNbcm93XTtcbiAgICAgICAgdmFyIGxpc3QgPSBbXTtcbiAgICAgICAgd2hpbGUgKHcpIHtcbiAgICAgICAgICAgIGxpc3QucHVzaCh3KTtcbiAgICAgICAgICAgIHcgPSB3LiRvbGRXaWRnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLm9uV2lkZ2V0Q2hhbmdlZCA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uLl9jaGFuZ2VkV2lkZ2V0cy5wdXNoKHcpO1xuICAgICAgICB0aGlzLmVkaXRvciAmJiB0aGlzLmVkaXRvci5yZW5kZXJlci51cGRhdGVGdWxsKCk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLm1lYXN1cmVXaWRnZXRzID0gZnVuY3Rpb24oZSwgcmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIGNoYW5nZWRXaWRnZXRzID0gdGhpcy5zZXNzaW9uLl9jaGFuZ2VkV2lkZ2V0cztcbiAgICAgICAgdmFyIGNvbmZpZyA9IHJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICBcbiAgICAgICAgaWYgKCFjaGFuZ2VkV2lkZ2V0cyB8fCAhY2hhbmdlZFdpZGdldHMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHZhciBtaW4gPSBJbmZpbml0eTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VkV2lkZ2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHcgPSBjaGFuZ2VkV2lkZ2V0c1tpXTtcbiAgICAgICAgICAgIGlmICghdyB8fCAhdy5lbCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAody5zZXNzaW9uICE9IHRoaXMuc2Vzc2lvbikgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXcuX2luRG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzW3cucm93XSAhPSB3KVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB3Ll9pbkRvY3VtZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZW5kZXJlci5jb250YWluZXIuYXBwZW5kQ2hpbGQody5lbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHcuaCA9IHcuZWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXcuZml4ZWRXaWR0aCkge1xuICAgICAgICAgICAgICAgIHcudyA9IHcuZWwub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgdy5zY3JlZW5XaWR0aCA9IE1hdGguY2VpbCh3LncgLyBjb25maWcuY2hhcmFjdGVyV2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgcm93Q291bnQgPSB3LmggLyBjb25maWcubGluZUhlaWdodDtcbiAgICAgICAgICAgIGlmICh3LmNvdmVyTGluZSkge1xuICAgICAgICAgICAgICAgIHJvd0NvdW50IC09IHRoaXMuc2Vzc2lvbi5nZXRSb3dMaW5lQ291bnQody5yb3cpO1xuICAgICAgICAgICAgICAgIGlmIChyb3dDb3VudCA8IDApXG4gICAgICAgICAgICAgICAgICAgIHJvd0NvdW50ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3LnJvd0NvdW50ICE9IHJvd0NvdW50KSB7XG4gICAgICAgICAgICAgICAgdy5yb3dDb3VudCA9IHJvd0NvdW50O1xuICAgICAgICAgICAgICAgIGlmICh3LnJvdyA8IG1pbilcbiAgICAgICAgICAgICAgICAgICAgbWluID0gdy5yb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbiAhPSBJbmZpbml0eSkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLl9lbWl0KFwiY2hhbmdlRm9sZFwiLCB7ZGF0YTp7c3RhcnQ6e3JvdzogbWlufX19KTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0V2lkdGggPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5fY2hhbmdlZFdpZGdldHMgPSBbXTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMucmVuZGVyV2lkZ2V0cyA9IGZ1bmN0aW9uKGUsIHJlbmRlcmVyKSB7XG4gICAgICAgIHZhciBjb25maWcgPSByZW5kZXJlci5sYXllckNvbmZpZztcbiAgICAgICAgdmFyIGxpbmVXaWRnZXRzID0gdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzO1xuICAgICAgICBpZiAoIWxpbmVXaWRnZXRzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgZmlyc3QgPSBNYXRoLm1pbih0aGlzLmZpcnN0Um93LCBjb25maWcuZmlyc3RSb3cpO1xuICAgICAgICB2YXIgbGFzdCA9IE1hdGgubWF4KHRoaXMubGFzdFJvdywgY29uZmlnLmxhc3RSb3csIGxpbmVXaWRnZXRzLmxlbmd0aCk7XG4gICAgICAgIFxuICAgICAgICB3aGlsZSAoZmlyc3QgPiAwICYmICFsaW5lV2lkZ2V0c1tmaXJzdF0pXG4gICAgICAgICAgICBmaXJzdC0tO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5maXJzdFJvdyA9IGNvbmZpZy5maXJzdFJvdztcbiAgICAgICAgdGhpcy5sYXN0Um93ID0gY29uZmlnLmxhc3RSb3c7XG5cbiAgICAgICAgcmVuZGVyZXIuJGN1cnNvckxheWVyLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgZm9yICh2YXIgaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykge1xuICAgICAgICAgICAgdmFyIHcgPSBsaW5lV2lkZ2V0c1tpXTtcbiAgICAgICAgICAgIGlmICghdyB8fCAhdy5lbCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAody5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICB3LmVsLnN0eWxlLnRvcCA9IC0xMDAgLSAody5waXhlbEhlaWdodCB8fCAwKSArIFwicHhcIjtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdy5faW5Eb2N1bWVudCkge1xuICAgICAgICAgICAgICAgIHcuX2luRG9jdW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh3LmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB0b3AgPSByZW5kZXJlci4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbih7cm93OiBpLCBjb2x1bW46MH0sIHRydWUpLnRvcDtcbiAgICAgICAgICAgIGlmICghdy5jb3ZlckxpbmUpXG4gICAgICAgICAgICAgICAgdG9wICs9IGNvbmZpZy5saW5lSGVpZ2h0ICogdGhpcy5zZXNzaW9uLmdldFJvd0xpbmVDb3VudCh3LnJvdyk7XG4gICAgICAgICAgICB3LmVsLnN0eWxlLnRvcCA9IHRvcCAtIGNvbmZpZy5vZmZzZXQgKyBcInB4XCI7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gdy5jb3Zlckd1dHRlciA/IDAgOiByZW5kZXJlci5ndXR0ZXJXaWR0aDtcbiAgICAgICAgICAgIGlmICghdy5maXhlZFdpZHRoKVxuICAgICAgICAgICAgICAgIGxlZnQgLT0gcmVuZGVyZXIuc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgIHcuZWwuc3R5bGUubGVmdCA9IGxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh3LmZ1bGxXaWR0aCAmJiB3LnNjcmVlbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgdy5lbC5zdHlsZS5taW5XaWR0aCA9IGNvbmZpZy53aWR0aCArIDIgKiBjb25maWcucGFkZGluZyArIFwicHhcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHcuZml4ZWRXaWR0aCkge1xuICAgICAgICAgICAgICAgIHcuZWwuc3R5bGUucmlnaHQgPSByZW5kZXJlci5zY3JvbGxCYXIuZ2V0V2lkdGgoKSArIFwicHhcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdy5lbC5zdHlsZS5yaWdodCA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxufSkuY2FsbChMaW5lV2lkZ2V0cy5wcm90b3R5cGUpO1xuXG5cbmV4cG9ydHMuTGluZVdpZGdldHMgPSBMaW5lV2lkZ2V0cztcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvZXh0L2Vycm9yX21hcmtlclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpbmVfd2lkZ2V0c1wiLFwiYWNlL2xpYi9kb21cIixcImFjZS9yYW5nZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgTGluZVdpZGdldHMgPSBhY2VxdWlyZShcIi4uL2xpbmVfd2lkZ2V0c1wiKS5MaW5lV2lkZ2V0cztcbnZhciBkb20gPSBhY2VxdWlyZShcIi4uL2xpYi9kb21cIik7XG52YXIgUmFuZ2UgPSBhY2VxdWlyZShcIi4uL3JhbmdlXCIpLlJhbmdlO1xuXG5mdW5jdGlvbiBiaW5hcnlTZWFyY2goYXJyYXksIG5lZWRsZSwgY29tcGFyYXRvcikge1xuICAgIHZhciBmaXJzdCA9IDA7XG4gICAgdmFyIGxhc3QgPSBhcnJheS5sZW5ndGggLSAxO1xuXG4gICAgd2hpbGUgKGZpcnN0IDw9IGxhc3QpIHtcbiAgICAgICAgdmFyIG1pZCA9IChmaXJzdCArIGxhc3QpID4+IDE7XG4gICAgICAgIHZhciBjID0gY29tcGFyYXRvcihuZWVkbGUsIGFycmF5W21pZF0pO1xuICAgICAgICBpZiAoYyA+IDApXG4gICAgICAgICAgICBmaXJzdCA9IG1pZCArIDE7XG4gICAgICAgIGVsc2UgaWYgKGMgPCAwKVxuICAgICAgICAgICAgbGFzdCA9IG1pZCAtIDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBtaWQ7XG4gICAgfVxuICAgIHJldHVybiAtKGZpcnN0ICsgMSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRBbm5vdGF0aW9ucyhzZXNzaW9uLCByb3csIGRpcikge1xuICAgIHZhciBhbm5vdGF0aW9ucyA9IHNlc3Npb24uZ2V0QW5ub3RhdGlvbnMoKS5zb3J0KFJhbmdlLmNvbXBhcmVQb2ludHMpO1xuICAgIGlmICghYW5ub3RhdGlvbnMubGVuZ3RoKVxuICAgICAgICByZXR1cm47XG4gICAgXG4gICAgdmFyIGkgPSBiaW5hcnlTZWFyY2goYW5ub3RhdGlvbnMsIHtyb3c6IHJvdywgY29sdW1uOiAtMX0sIFJhbmdlLmNvbXBhcmVQb2ludHMpO1xuICAgIGlmIChpIDwgMClcbiAgICAgICAgaSA9IC1pIC0gMTtcbiAgICBcbiAgICBpZiAoaSA+PSBhbm5vdGF0aW9ucy5sZW5ndGgpXG4gICAgICAgIGkgPSBkaXIgPiAwID8gMCA6IGFubm90YXRpb25zLmxlbmd0aCAtIDE7XG4gICAgZWxzZSBpZiAoaSA9PT0gMCAmJiBkaXIgPCAwKVxuICAgICAgICBpID0gYW5ub3RhdGlvbnMubGVuZ3RoIC0gMTtcbiAgICBcbiAgICB2YXIgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zW2ldO1xuICAgIGlmICghYW5ub3RhdGlvbiB8fCAhZGlyKVxuICAgICAgICByZXR1cm47XG5cbiAgICBpZiAoYW5ub3RhdGlvbi5yb3cgPT09IHJvdykge1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNbaSArPSBkaXJdO1xuICAgICAgICB9IHdoaWxlIChhbm5vdGF0aW9uICYmIGFubm90YXRpb24ucm93ID09PSByb3cpO1xuICAgICAgICBpZiAoIWFubm90YXRpb24pXG4gICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbnMuc2xpY2UoKTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgdmFyIG1hdGNoZWQgPSBbXTtcbiAgICByb3cgPSBhbm5vdGF0aW9uLnJvdztcbiAgICBkbyB7XG4gICAgICAgIG1hdGNoZWRbZGlyIDwgMCA/IFwidW5zaGlmdFwiIDogXCJwdXNoXCJdKGFubm90YXRpb24pO1xuICAgICAgICBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNbaSArPSBkaXJdO1xuICAgIH0gd2hpbGUgKGFubm90YXRpb24gJiYgYW5ub3RhdGlvbi5yb3cgPT0gcm93KTtcbiAgICByZXR1cm4gbWF0Y2hlZC5sZW5ndGggJiYgbWF0Y2hlZDtcbn1cblxuZXhwb3J0cy5zaG93RXJyb3JNYXJrZXIgPSBmdW5jdGlvbihlZGl0b3IsIGRpcikge1xuICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247XG4gICAgaWYgKCFzZXNzaW9uLndpZGdldE1hbmFnZXIpIHtcbiAgICAgICAgc2Vzc2lvbi53aWRnZXRNYW5hZ2VyID0gbmV3IExpbmVXaWRnZXRzKHNlc3Npb24pO1xuICAgICAgICBzZXNzaW9uLndpZGdldE1hbmFnZXIuYXR0YWNoKGVkaXRvcik7XG4gICAgfVxuICAgIFxuICAgIHZhciBwb3MgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICB2YXIgcm93ID0gcG9zLnJvdztcbiAgICB2YXIgb2xkV2lkZ2V0ID0gc2Vzc2lvbi53aWRnZXRNYW5hZ2VyLmdldFdpZGdldHNBdFJvdyhyb3cpLmZpbHRlcihmdW5jdGlvbih3KSB7XG4gICAgICAgIHJldHVybiB3LnR5cGUgPT0gXCJlcnJvck1hcmtlclwiO1xuICAgIH0pWzBdO1xuICAgIGlmIChvbGRXaWRnZXQpIHtcbiAgICAgICAgb2xkV2lkZ2V0LmRlc3Ryb3koKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb3cgLT0gZGlyO1xuICAgIH1cbiAgICB2YXIgYW5ub3RhdGlvbnMgPSBmaW5kQW5ub3RhdGlvbnMoc2Vzc2lvbiwgcm93LCBkaXIpO1xuICAgIHZhciBndXR0ZXJBbm5vO1xuICAgIGlmIChhbm5vdGF0aW9ucykge1xuICAgICAgICB2YXIgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zWzBdO1xuICAgICAgICBwb3MuY29sdW1uID0gKGFubm90YXRpb24ucG9zICYmIHR5cGVvZiBhbm5vdGF0aW9uLmNvbHVtbiAhPSBcIm51bWJlclwiXG4gICAgICAgICAgICA/IGFubm90YXRpb24ucG9zLnNjXG4gICAgICAgICAgICA6IGFubm90YXRpb24uY29sdW1uKSB8fCAwO1xuICAgICAgICBwb3Mucm93ID0gYW5ub3RhdGlvbi5yb3c7XG4gICAgICAgIGd1dHRlckFubm8gPSBlZGl0b3IucmVuZGVyZXIuJGd1dHRlckxheWVyLiRhbm5vdGF0aW9uc1twb3Mucm93XTtcbiAgICB9IGVsc2UgaWYgKG9sZFdpZGdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ3V0dGVyQW5ubyA9IHtcbiAgICAgICAgICAgIHRleHQ6IFtcIkxvb2tzIGdvb2QhXCJdLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImFjZV9va1wiXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVkaXRvci5zZXNzaW9uLnVuZm9sZChwb3Mucm93KTtcbiAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKHBvcyk7XG4gICAgXG4gICAgdmFyIHcgPSB7XG4gICAgICAgIHJvdzogcG9zLnJvdywgXG4gICAgICAgIGZpeGVkV2lkdGg6IHRydWUsXG4gICAgICAgIGNvdmVyR3V0dGVyOiB0cnVlLFxuICAgICAgICBlbDogZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgICAgIHR5cGU6IFwiZXJyb3JNYXJrZXJcIlxuICAgIH07XG4gICAgdmFyIGVsID0gdy5lbC5hcHBlbmRDaGlsZChkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgdmFyIGFycm93ID0gdy5lbC5hcHBlbmRDaGlsZChkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgYXJyb3cuY2xhc3NOYW1lID0gXCJlcnJvcl93aWRnZXRfYXJyb3cgXCIgKyBndXR0ZXJBbm5vLmNsYXNzTmFtZTtcbiAgICBcbiAgICB2YXIgbGVmdCA9IGVkaXRvci5yZW5kZXJlci4kY3Vyc29yTGF5ZXJcbiAgICAgICAgLmdldFBpeGVsUG9zaXRpb24ocG9zKS5sZWZ0O1xuICAgIGFycm93LnN0eWxlLmxlZnQgPSBsZWZ0ICsgZWRpdG9yLnJlbmRlcmVyLmd1dHRlcldpZHRoIC0gNSArIFwicHhcIjtcbiAgICBcbiAgICB3LmVsLmNsYXNzTmFtZSA9IFwiZXJyb3Jfd2lkZ2V0X3dyYXBwZXJcIjtcbiAgICBlbC5jbGFzc05hbWUgPSBcImVycm9yX3dpZGdldCBcIiArIGd1dHRlckFubm8uY2xhc3NOYW1lO1xuICAgIGVsLmlubmVySFRNTCA9IGd1dHRlckFubm8udGV4dC5qb2luKFwiPGJyPlwiKTtcbiAgICBcbiAgICBlbC5hcHBlbmRDaGlsZChkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgXG4gICAgdmFyIGtiID0gZnVuY3Rpb24oXywgaGFzaElkLCBrZXlTdHJpbmcpIHtcbiAgICAgICAgaWYgKGhhc2hJZCA9PT0gMCAmJiAoa2V5U3RyaW5nID09PSBcImVzY1wiIHx8IGtleVN0cmluZyA9PT0gXCJyZXR1cm5cIikpIHtcbiAgICAgICAgICAgIHcuZGVzdHJveSgpO1xuICAgICAgICAgICAgcmV0dXJuIHtjb21tYW5kOiBcIm51bGxcIn07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHcuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoZWRpdG9yLiRtb3VzZUhhbmRsZXIuaXNNb3VzZVByZXNzZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGVkaXRvci5rZXlCaW5kaW5nLnJlbW92ZUtleWJvYXJkSGFuZGxlcihrYik7XG4gICAgICAgIHNlc3Npb24ud2lkZ2V0TWFuYWdlci5yZW1vdmVMaW5lV2lkZ2V0KHcpO1xuICAgICAgICBlZGl0b3Iub2ZmKFwiY2hhbmdlU2VsZWN0aW9uXCIsIHcuZGVzdHJveSk7XG4gICAgICAgIGVkaXRvci5vZmYoXCJjaGFuZ2VTZXNzaW9uXCIsIHcuZGVzdHJveSk7XG4gICAgICAgIGVkaXRvci5vZmYoXCJtb3VzZXVwXCIsIHcuZGVzdHJveSk7XG4gICAgICAgIGVkaXRvci5vZmYoXCJjaGFuZ2VcIiwgdy5kZXN0cm95KTtcbiAgICB9O1xuICAgIFxuICAgIGVkaXRvci5rZXlCaW5kaW5nLmFkZEtleWJvYXJkSGFuZGxlcihrYik7XG4gICAgZWRpdG9yLm9uKFwiY2hhbmdlU2VsZWN0aW9uXCIsIHcuZGVzdHJveSk7XG4gICAgZWRpdG9yLm9uKFwiY2hhbmdlU2Vzc2lvblwiLCB3LmRlc3Ryb3kpO1xuICAgIGVkaXRvci5vbihcIm1vdXNldXBcIiwgdy5kZXN0cm95KTtcbiAgICBlZGl0b3Iub24oXCJjaGFuZ2VcIiwgdy5kZXN0cm95KTtcbiAgICBcbiAgICBlZGl0b3Iuc2Vzc2lvbi53aWRnZXRNYW5hZ2VyLmFkZExpbmVXaWRnZXQodyk7XG4gICAgXG4gICAgdy5lbC5vbm1vdXNlZG93biA9IGVkaXRvci5mb2N1cy5iaW5kKGVkaXRvcik7XG4gICAgXG4gICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsIDAuNSwge2JvdHRvbTogdy5lbC5vZmZzZXRIZWlnaHR9KTtcbn07XG5cblxuZG9tLmltcG9ydENzc1N0cmluZyhcIlxcXG4gICAgLmVycm9yX3dpZGdldF93cmFwcGVyIHtcXFxuICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xcXG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xcXG4gICAgICAgIGJvcmRlcjpub25lXFxcbiAgICB9XFxcbiAgICAuZXJyb3Jfd2lkZ2V0IHtcXFxuICAgICAgICBib3JkZXItdG9wOiBzb2xpZCAycHg7XFxcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMnB4O1xcXG4gICAgICAgIG1hcmdpbjogNXB4IDA7XFxcbiAgICAgICAgcGFkZGluZzogMTBweCA0MHB4O1xcXG4gICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXFxuICAgIH1cXFxuICAgIC5lcnJvcl93aWRnZXQuYWNlX2Vycm9yLCAuZXJyb3Jfd2lkZ2V0X2Fycm93LmFjZV9lcnJvcntcXFxuICAgICAgICBib3JkZXItY29sb3I6ICNmZjVhNWFcXFxuICAgIH1cXFxuICAgIC5lcnJvcl93aWRnZXQuYWNlX3dhcm5pbmcsIC5lcnJvcl93aWRnZXRfYXJyb3cuYWNlX3dhcm5pbmd7XFxcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjRjFEODE3XFxcbiAgICB9XFxcbiAgICAuZXJyb3Jfd2lkZ2V0LmFjZV9pbmZvLCAuZXJyb3Jfd2lkZ2V0X2Fycm93LmFjZV9pbmZve1xcXG4gICAgICAgIGJvcmRlci1jb2xvcjogIzVhNWE1YVxcXG4gICAgfVxcXG4gICAgLmVycm9yX3dpZGdldC5hY2Vfb2ssIC5lcnJvcl93aWRnZXRfYXJyb3cuYWNlX29re1xcXG4gICAgICAgIGJvcmRlci1jb2xvcjogIzVhYWE1YVxcXG4gICAgfVxcXG4gICAgLmVycm9yX3dpZGdldF9hcnJvdyB7XFxcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcXG4gICAgICAgIGJvcmRlcjogc29saWQgNXB4O1xcXG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50IWltcG9ydGFudDtcXFxuICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50IWltcG9ydGFudDtcXFxuICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQhaW1wb3J0YW50O1xcXG4gICAgICAgIHRvcDogLTVweDtcXFxuICAgIH1cXFxuXCIsIFwiXCIpO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9hY2VcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvZml4b2xkYnJvd3NlcnNcIixcImFjZS9saWIvZG9tXCIsXCJhY2UvbGliL2V2ZW50XCIsXCJhY2UvZWRpdG9yXCIsXCJhY2UvZWRpdF9zZXNzaW9uXCIsXCJhY2UvdW5kb21hbmFnZXJcIixcImFjZS92aXJ0dWFsX3JlbmRlcmVyXCIsXCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnRcIixcImFjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXJcIixcImFjZS9wbGFjZWhvbGRlclwiLFwiYWNlL211bHRpX3NlbGVjdFwiLFwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGVcIixcImFjZS90aGVtZS90ZXh0bWF0ZVwiLFwiYWNlL2V4dC9lcnJvcl9tYXJrZXJcIixcImFjZS9jb25maWdcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG5hY2VxdWlyZShcIi4vbGliL2ZpeG9sZGJyb3dzZXJzXCIpO1xuXG52YXIgZG9tID0gYWNlcXVpcmUoXCIuL2xpYi9kb21cIik7XG52YXIgZXZlbnQgPSBhY2VxdWlyZShcIi4vbGliL2V2ZW50XCIpO1xuXG52YXIgRWRpdG9yID0gYWNlcXVpcmUoXCIuL2VkaXRvclwiKS5FZGl0b3I7XG52YXIgRWRpdFNlc3Npb24gPSBhY2VxdWlyZShcIi4vZWRpdF9zZXNzaW9uXCIpLkVkaXRTZXNzaW9uO1xudmFyIFVuZG9NYW5hZ2VyID0gYWNlcXVpcmUoXCIuL3VuZG9tYW5hZ2VyXCIpLlVuZG9NYW5hZ2VyO1xudmFyIFJlbmRlcmVyID0gYWNlcXVpcmUoXCIuL3ZpcnR1YWxfcmVuZGVyZXJcIikuVmlydHVhbFJlbmRlcmVyO1xuYWNlcXVpcmUoXCIuL3dvcmtlci93b3JrZXJfY2xpZW50XCIpO1xuYWNlcXVpcmUoXCIuL2tleWJvYXJkL2hhc2hfaGFuZGxlclwiKTtcbmFjZXF1aXJlKFwiLi9wbGFjZWhvbGRlclwiKTtcbmFjZXF1aXJlKFwiLi9tdWx0aV9zZWxlY3RcIik7XG5hY2VxdWlyZShcIi4vbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZVwiKTtcbmFjZXF1aXJlKFwiLi90aGVtZS90ZXh0bWF0ZVwiKTtcbmFjZXF1aXJlKFwiLi9leHQvZXJyb3JfbWFya2VyXCIpO1xuXG5leHBvcnRzLmNvbmZpZyA9IGFjZXF1aXJlKFwiLi9jb25maWdcIik7XG5leHBvcnRzLmFjZXF1aXJlID0gYWNlcXVpcmU7XG5cbmlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIpXG4gICAgZXhwb3J0cy5kZWZpbmUgPSBkZWZpbmU7XG5leHBvcnRzLmVkaXQgPSBmdW5jdGlvbihlbCkge1xuICAgIGlmICh0eXBlb2YgZWwgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB2YXIgX2lkID0gZWw7XG4gICAgICAgIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoX2lkKTtcbiAgICAgICAgaWYgKCFlbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFjZS5lZGl0IGNhbid0IGZpbmQgZGl2ICNcIiArIF9pZCk7XG4gICAgfVxuXG4gICAgaWYgKGVsICYmIGVsLmVudiAmJiBlbC5lbnYuZWRpdG9yIGluc3RhbmNlb2YgRWRpdG9yKVxuICAgICAgICByZXR1cm4gZWwuZW52LmVkaXRvcjtcblxuICAgIHZhciB2YWx1ZSA9IFwiXCI7XG4gICAgaWYgKGVsICYmIC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZWwudGFnTmFtZSkpIHtcbiAgICAgICAgdmFyIG9sZE5vZGUgPSBlbDtcbiAgICAgICAgdmFsdWUgPSBvbGROb2RlLnZhbHVlO1xuICAgICAgICBlbCA9IGRvbS5jcmVhdGVFbGVtZW50KFwicHJlXCIpO1xuICAgICAgICBvbGROb2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGVsLCBvbGROb2RlKTtcbiAgICB9IGVsc2UgaWYgKGVsKSB7XG4gICAgICAgIHZhbHVlID0gZG9tLmdldElubmVyVGV4dChlbCk7XG4gICAgICAgIGVsLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfVxuXG4gICAgdmFyIGRvYyA9IGV4cG9ydHMuY3JlYXRlRWRpdFNlc3Npb24odmFsdWUpO1xuXG4gICAgdmFyIGVkaXRvciA9IG5ldyBFZGl0b3IobmV3IFJlbmRlcmVyKGVsKSk7XG4gICAgZWRpdG9yLnNldFNlc3Npb24oZG9jKTtcblxuICAgIHZhciBlbnYgPSB7XG4gICAgICAgIGRvY3VtZW50OiBkb2MsXG4gICAgICAgIGVkaXRvcjogZWRpdG9yLFxuICAgICAgICBvblJlc2l6ZTogZWRpdG9yLnJlc2l6ZS5iaW5kKGVkaXRvciwgbnVsbClcbiAgICB9O1xuICAgIGlmIChvbGROb2RlKSBlbnYudGV4dGFyZWEgPSBvbGROb2RlO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKHdpbmRvdywgXCJyZXNpemVcIiwgZW52Lm9uUmVzaXplKTtcbiAgICBlZGl0b3Iub24oXCJkZXN0cm95XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICBldmVudC5yZW1vdmVMaXN0ZW5lcih3aW5kb3csIFwicmVzaXplXCIsIGVudi5vblJlc2l6ZSk7XG4gICAgICAgIGVudi5lZGl0b3IuY29udGFpbmVyLmVudiA9IG51bGw7IC8vIHByZXZlbnQgbWVtb3J5IGxlYWsgb24gb2xkIGllXG4gICAgfSk7XG4gICAgZWRpdG9yLmNvbnRhaW5lci5lbnYgPSBlZGl0b3IuZW52ID0gZW52O1xuICAgIHJldHVybiBlZGl0b3I7XG59O1xuZXhwb3J0cy5jcmVhdGVFZGl0U2Vzc2lvbiA9IGZ1bmN0aW9uKHRleHQsIG1vZGUpIHtcbiAgICB2YXIgZG9jID0gbmV3IEVkaXRTZXNzaW9uKHRleHQsIG1vZGUpO1xuICAgIGRvYy5zZXRVbmRvTWFuYWdlcihuZXcgVW5kb01hbmFnZXIoKSk7XG4gICAgcmV0dXJuIGRvYztcbn07XG5leHBvcnRzLkVkaXRTZXNzaW9uID0gRWRpdFNlc3Npb247XG5leHBvcnRzLlVuZG9NYW5hZ2VyID0gVW5kb01hbmFnZXI7XG5leHBvcnRzLnZlcnNpb24gPSBcIjEuMi45XCI7XG59KTtcbiAgICAgICAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBhY2UuYWNlcXVpcmUoW1wiYWNlL2FjZVwiXSwgZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5jb25maWcuaW5pdCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuZGVmaW5lID0gYWNlLmRlZmluZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXdpbmRvdy5hY2UpXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWNlID0gYTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGEpIGlmIChhLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWNlW2tleV0gPSBhW2tleV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICBcbm1vZHVsZS5leHBvcnRzID0gd2luZG93LmFjZS5hY2VxdWlyZShcImFjZS9hY2VcIik7Il0sIm5hbWVzIjpbImdsb2JhbCIsInRoaXMiLCJ3aW5kb3ciLCJkZWZpbmUiLCJtb2R1bGUiLCJkZXBzIiwicGF5bG9hZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsIm1vZHVsZXMiLCJwYXlsb2FkcyIsIm9yaWdpbmFsIiwiYXBwbHkiLCJjb25zb2xlIiwiZXJyb3IiLCJ0cmFjZSIsIm5zIiwicm9vdCIsIl9hY2VxdWlyZSIsInBhcmVudElkIiwiY2FsbGJhY2siLCJsb29rdXAiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJwYXJhbXMiLCJpIiwibCIsImRlcCIsImFjZXF1aXJlIiwicHVzaCIsInBhY2thZ2VkTW9kdWxlIiwibm9ybWFsaXplTW9kdWxlIiwibW9kdWxlTmFtZSIsImluZGV4T2YiLCJjaHVua3MiLCJzcGxpdCIsImNoYXJBdCIsInNsaWNlIiwiam9pbiIsInByZXZpb3VzIiwicmVwbGFjZSIsImV4cG9ydHMiLCJtb2QiLCJpZCIsInVyaSIsInBhY2thZ2VkIiwiYWNlIiwieCIsInJlYWwiLCJleGVjIiwiUmVnRXhwIiwidGVzdCIsIm1hdGNoIiwiU3RyaW5nIiwiY29tcGxpYW50RXhlY05wY2ciLCJjb21wbGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQiLCJsYXN0SW5kZXgiLCJzdHIiLCJuYW1lIiwicjIiLCJyZWdleCIsImFycmF5IiwiaXRlbSIsImZyb20iLCJBcnJheSIsInNvdXJjZSIsImlnbm9yZUNhc2UiLCJtdWx0aWxpbmUiLCJleHRlbmRlZCIsInN0aWNreSIsImluZGV4IiwiX3hyZWdleHAiLCJjYXB0dXJlTmFtZXMiLCJFbXB0eSIsIkZ1bmN0aW9uIiwiYmluZCIsInRoYXQiLCJ0YXJnZXQiLCJUeXBlRXJyb3IiLCJhcmdzIiwiYm91bmQiLCJyZXN1bHQiLCJjb25jYXQiLCJkZWZpbmVHZXR0ZXIiLCJkZWZpbmVTZXR0ZXIiLCJsb29rdXBHZXR0ZXIiLCJsb29rdXBTZXR0ZXIiLCJzdXBwb3J0c0FjY2Vzc29ycyIsInByb3RvdHlwZU9mQXJyYXkiLCJwcm90b3R5cGVPZk9iamVjdCIsIl90b1N0cmluZyIsIm93bnMiLCJoYXNPd25Qcm9wZXJ0eSIsIl9fZGVmaW5lR2V0dGVyX18iLCJfX2RlZmluZVNldHRlcl9fIiwiX19sb29rdXBHZXR0ZXJfXyIsIl9fbG9va3VwU2V0dGVyX18iLCJzcGxpY2UiLCJtYWtlQXJyYXkiLCJhIiwibGVuZ3RoQmVmb3JlIiwiYXJyYXlfc3BsaWNlIiwic3RhcnQiLCJkZWxldGVDb3VudCIsInBvcyIsInJlbW92ZUNvdW50IiwiTWF0aCIsIm1heCIsInJlbW92ZWQiLCJpbnNlcnQiLCJhZGQiLCJyZW1vdmUiLCJtaW4iLCJ0YWlsT2xkUG9zIiwidGFpbE5ld1BvcyIsInRhaWxDb3VudCIsImxlbmd0aEFmdGVyUmVtb3ZlIiwiaXNBcnJheSIsIm9iaiIsImNyZWF0ZUVtcHR5IiwiZnJlZXplT2JqZWN0IiwiYm94ZWRTdHJpbmciLCJzcGxpdFN0cmluZyIsImRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsiLCJvYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4Y2VwdGlvbiIsImZvckVhY2giLCJmdW4iLCJ0b09iamVjdCIsInNlbGYiLCJ0aGlzcCIsIm1hcCIsImZpbHRlciIsInZhbHVlIiwiZXZlcnkiLCJzb21lIiwicmVkdWNlIiwicmVkdWNlUmlnaHQiLCJzb3VnaHQiLCJ0b0ludGVnZXIiLCJsYXN0SW5kZXhPZiIsImFicyIsImdldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiY29uc3RydWN0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJwcm9wZXJ0eSIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwiZ2V0dGVyIiwic2V0dGVyIiwiZ2V0Iiwic2V0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImtleXMiLCJjcmVhdGUiLCJlbXB0eSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiaXNQcm90b3R5cGVPZiIsInRvTG9jYWxlU3RyaW5nIiwidmFsdWVPZiIsInByb3BlcnRpZXMiLCJUeXBlIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdCIsImRlZmluZVByb3BlcnR5V29ya3NPbkRvbSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImRlZmluZVByb3BlcnR5RmFsbGJhY2siLCJzZWFsIiwiZnJlZXplIiwicHJldmVudEV4dGVuc2lvbnMiLCJpc1NlYWxlZCIsImlzRnJvemVuIiwiaXNFeHRlbnNpYmxlIiwicmV0dXJuVmFsdWUiLCJoYXNEb250RW51bUJ1ZyIsImRvbnRFbnVtcyIsImRvbnRFbnVtc0xlbmd0aCIsImtleSIsImlpIiwiZG9udEVudW0iLCJEYXRlIiwibm93IiwiZ2V0VGltZSIsIndzIiwidHJpbSIsInRyaW1CZWdpblJlZ2V4cCIsInRyaW1FbmRSZWdleHAiLCJuIiwiZmxvb3IiLCJvIiwiZ2V0RG9jdW1lbnRIZWFkIiwiZG9jIiwiaGVhZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50IiwidGFnIiwiY3JlYXRlRWxlbWVudE5TIiwiaGFzQ3NzQ2xhc3MiLCJlbCIsImNsYXNzTmFtZSIsImFkZENzc0NsYXNzIiwicmVtb3ZlQ3NzQ2xhc3MiLCJjbGFzc2VzIiwidG9nZ2xlQ3NzQ2xhc3MiLCJzZXRDc3NDbGFzcyIsIm5vZGUiLCJpbmNsdWRlIiwiaGFzQ3NzU3RyaW5nIiwic2hlZXRzIiwiY3JlYXRlU3R5bGVTaGVldCIsInN0eWxlU2hlZXRzIiwib3duaW5nRWxlbWVudCIsImltcG9ydENzc1N0cmluZyIsImNzc1RleHQiLCJzdHlsZSIsImFwcGVuZENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJpbXBvcnRDc3NTdHlsc2hlZXQiLCJsaW5rIiwicmVsIiwiaHJlZiIsImdldElubmVyV2lkdGgiLCJlbGVtZW50IiwicGFyc2VJbnQiLCJjb21wdXRlZFN0eWxlIiwiY2xpZW50V2lkdGgiLCJnZXRJbm5lckhlaWdodCIsImNsaWVudEhlaWdodCIsInNjcm9sbGJhcldpZHRoIiwiaW5uZXIiLCJ3aWR0aCIsIm1pbldpZHRoIiwiaGVpZ2h0IiwiZGlzcGxheSIsIm91dGVyIiwicG9zaXRpb24iLCJsZWZ0Iiwib3ZlcmZsb3ciLCJib2R5Iiwibm9TY3JvbGxiYXIiLCJvZmZzZXRXaWR0aCIsIndpdGhTY3JvbGxiYXIiLCJyZW1vdmVDaGlsZCIsInBhZ2VZT2Zmc2V0IiwiZ2V0UGFnZVNjcm9sbFRvcCIsImdldFBhZ2VTY3JvbGxMZWZ0IiwicGFnZVhPZmZzZXQiLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImN1cnJlbnRTdHlsZSIsInNldElubmVySHRtbCIsImlubmVySHRtbCIsImNsb25lTm9kZSIsImlubmVySFRNTCIsInBhcmVudE5vZGUiLCJyZXBsYWNlQ2hpbGQiLCJzZXRJbm5lclRleHQiLCJpbm5lclRleHQiLCJ0ZXh0Q29udGVudCIsImdldElubmVyVGV4dCIsImdldFBhcmVudFdpbmRvdyIsImRlZmF1bHRWaWV3IiwicGFyZW50V2luZG93IiwiaW5oZXJpdHMiLCJjdG9yIiwic3VwZXJDdG9yIiwic3VwZXJfIiwid3JpdGFibGUiLCJtaXhpbiIsImltcGxlbWVudCIsInByb3RvIiwib29wIiwiS2V5cyIsInJldCIsIk1PRElGSUVSX0tFWVMiLCJLRVlfTU9EUyIsIkZVTkNUSU9OX0tFWVMiLCJQUklOVEFCTEVfS0VZUyIsInRvTG93ZXJDYXNlIiwiZW50ZXIiLCJlc2NhcGUiLCJlc2MiLCJkZWwiLCJtb2RzIiwicG93Iiwia2V5Q29kZVRvU3RyaW5nIiwia2V5Q29kZSIsImtleVN0cmluZyIsImZyb21DaGFyQ29kZSIsIk9TIiwiTElOVVgiLCJNQUMiLCJXSU5ET1dTIiwiZ2V0T1MiLCJpc01hYyIsImlzTGludXgiLCJuYXZpZ2F0b3IiLCJvcyIsInBsYXRmb3JtIiwidWEiLCJ1c2VyQWdlbnQiLCJpc1dpbiIsImlzSUUiLCJhcHBOYW1lIiwicGFyc2VGbG9hdCIsImlzT2xkSUUiLCJpc0dlY2tvIiwiaXNNb3ppbGxhIiwiQ29udHJvbGxlcnMiLCJjb250cm9sbGVycyIsInByb2R1Y3QiLCJpc09sZEdlY2tvIiwiaXNPcGVyYSIsIm9wZXJhIiwiaXNXZWJLaXQiLCJpc0Nocm9tZSIsImlzQUlSIiwiaXNJUGFkIiwiaXNDaHJvbWVPUyIsImlzSU9TIiwiTVNTdHJlYW0iLCJ1c2VyYWdlbnQiLCJwcmVzc2VkS2V5cyIsInRzIiwiYWRkTGlzdGVuZXIiLCJlbGVtIiwidHlwZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsIndyYXBwZXIiLCJldmVudCIsIl93cmFwcGVyIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGV0YWNoRXZlbnQiLCJzdG9wRXZlbnQiLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJjYW5jZWxCdWJibGUiLCJnZXRCdXR0b24iLCJjdHJsS2V5IiwiYWx0S2V5Iiwic2hpZnRLZXkiLCJidXR0b24iLCJjYXB0dXJlIiwiZXZlbnRIYW5kbGVyIiwicmVsZWFzZUNhcHR1cmVIYW5kbGVyIiwib25Nb3VzZVVwIiwiYWRkVG91Y2hNb3ZlTGlzdGVuZXIiLCJzdGFydHgiLCJzdGFydHkiLCJ0b3VjaE9iaiIsInRvdWNoZXMiLCJjbGllbnRYIiwiY2xpZW50WSIsIndoZWVsWCIsIndoZWVsWSIsImFkZE1vdXNlV2hlZWxMaXN0ZW5lciIsIndoZWVsRGVsdGFYIiwid2hlZWxEZWx0YVkiLCJ3aGVlbERlbHRhIiwiZGVsdGFNb2RlIiwiRE9NX0RFTFRBX1BJWEVMIiwiZGVsdGFYIiwiZGVsdGFZIiwiRE9NX0RFTFRBX0xJTkUiLCJET01fREVMVEFfUEFHRSIsImF4aXMiLCJIT1JJWk9OVEFMX0FYSVMiLCJkZXRhaWwiLCJhZGRNdWx0aU1vdXNlRG93bkxpc3RlbmVyIiwiZWxlbWVudHMiLCJ0aW1lb3V0cyIsImNhbGxiYWNrTmFtZSIsInN0YXJ0WCIsInN0YXJ0WSIsInRpbWVyIiwiY2xpY2tzIiwiZXZlbnROYW1lcyIsIm9uTW91c2Vkb3duIiwiaXNOZXdDbGljayIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJfY2xpY2tzIiwib25EYmxjbGljayIsImdldE1vZGlmaWVySGFzaCIsIm1ldGFLZXkiLCJub3JtYWxpemVDb21tYW5kS2V5cyIsImhhc2hJZCIsImdldE1vZGlmaWVyU3RhdGUiLCJhbHRHciIsImxvY2F0aW9uIiwia2V5TG9jYXRpb24iLCJ0aW1lU3RhbXAiLCJkZWZhdWx0UHJldmVudGVkIiwicmVzZXRQcmVzc2VkS2V5cyIsImdldE1vZGlmaWVyU3RyaW5nIiwiYWRkQ29tbWFuZEtleUxpc3RlbmVyIiwibGFzdEtleURvd25LZXlDb2RlIiwibGFzdERlZmF1bHRQcmV2ZW50ZWQiLCJwb3N0TWVzc2FnZSIsIm5leHRUaWNrIiwid2luIiwibWVzc2FnZU5hbWUiLCJsaXN0ZW5lciIsImRhdGEiLCJuZXh0RnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtc1JlcXVlc3RBbmltYXRpb25GcmFtZSIsIm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJsYXN0Iiwic3RyaW5nUmV2ZXJzZSIsInN0cmluZyIsInJldmVyc2UiLCJzdHJpbmdSZXBlYXQiLCJjb3VudCIsInN0cmluZ1RyaW1MZWZ0Iiwic3RyaW5nVHJpbVJpZ2h0IiwiY29weU9iamVjdCIsImNvcHkiLCJjb3B5QXJyYXkiLCJkZWVwQ29weSIsImFycmF5VG9NYXAiLCJhcnIiLCJjcmVhdGVNYXAiLCJwcm9wcyIsImFycmF5UmVtb3ZlIiwiZXNjYXBlUmVnRXhwIiwiZXNjYXBlSFRNTCIsImdldE1hdGNoT2Zmc2V0cyIsInJlZ0V4cCIsIm1hdGNoZXMiLCJvZmZzZXQiLCJkZWZlcnJlZENhbGwiLCJmY24iLCJkZWZlcnJlZCIsInRpbWVvdXQiLCJjYW5jZWwiLCJzY2hlZHVsZSIsImlzUGVuZGluZyIsImRlbGF5ZWRDYWxsIiwiZGVmYXVsdFRpbWVvdXQiLCJfc2VsZiIsImRlbGF5IiwiZG9tIiwibGFuZyIsIktFWVMiLCJNT0RTIiwiQlJPS0VOX1NFVERBVEEiLCJVU0VfSUVfTUlNRV9UWVBFIiwiVGV4dElucHV0IiwiaG9zdCIsInRleHQiLCJpc1RvdWNoUGFkIiwic2V0QXR0cmlidXRlIiwib3BhY2l0eSIsImluc2VydEJlZm9yZSIsImZpcnN0Q2hpbGQiLCJQTEFDRUhPTERFUiIsImNvcGllZCIsImN1dCIsInBhc3RlZCIsImluQ29tcG9zaXRpb24iLCJ0ZW1wU3R5bGUiLCJpc1NlbGVjdGlvbkVtcHR5IiwiaXNGb2N1c2VkIiwiYWN0aXZlRWxlbWVudCIsIm9uQmx1ciIsIm9uRm9jdXMiLCJyZXNldFNlbGVjdGlvbiIsImZvY3VzIiwiYmx1ciIsInN5bmNTZWxlY3Rpb24iLCJzeW5jVmFsdWUiLCJpc0VtcHR5IiwiaW5wdXRIYW5kbGVyIiwic2VsZWN0aW9uU3RhcnQiLCJzZWxlY3Rpb25FbmQiLCJzZXRTZWxlY3Rpb25SYW5nZSIsInJlc2V0VmFsdWUiLCJzZWxlY3Rpb24iLCJzZXRJbnB1dEhhbmRsZXIiLCJjYiIsImdldElucHV0SGFuZGxlciIsImFmdGVyQ29udGV4dE1lbnUiLCJzZW5kVGV4dCIsIm9uUGFzdGUiLCJzdWJzdHIiLCJleGVjQ29tbWFuZCIsInN1YnN0cmluZyIsIm9uVGV4dElucHV0Iiwib25JbnB1dCIsImhhbmRsZUNsaXBib2FyZERhdGEiLCJmb3JjZUlFTWltZSIsImNsaXBib2FyZERhdGEiLCJtaW1lIiwic2V0RGF0YSIsImdldERhdGEiLCJkb0NvcHkiLCJpc0N1dCIsImdldENvcHlUZXh0Iiwib25DdXQiLCJvbkNvcHkiLCJzZWxlY3QiLCJvbkNvbW1hbmRLZXkiLCJpc0FsbFNlbGVjdGVkIiwic2VsZWN0QWxsIiwiY2xvc2VUaW1lb3V0Iiwib25Db21wb3NpdGlvblVwZGF0ZSIsIiRyZWFkT25seSIsInZhbCIsImxhc3RWYWx1ZSIsInVuZG8iLCJjYW5VbmRvIiwiciIsImdldFJhbmdlIiwic2Vzc2lvbiIsIm1hcmtVbmRvR3JvdXAiLCJyYW5nZSIsInNldFJhbmdlIiwiY2xlYXJTZWxlY3Rpb24iLCJvbkNvbXBvc2l0aW9uRW5kIiwiYyIsInN5bmNDb21wb3NpdGlvbiIsIm9uQ29udGV4dE1lbnVDbG9zZSIsInJlbmRlcmVyIiwiJGtlZXBUZXh0QXJlYUF0Q3Vyc29yIiwiJG1vdmVUZXh0QXJlYVRvQ3Vyc29yIiwib25Db21wb3NpdGlvblN0YXJ0IiwiJHVuZG9NYW5hZ2VyIiwib24iLCJnZXRFbGVtZW50Iiwic2V0UmVhZE9ubHkiLCJyZWFkT25seSIsIm9uQ29udGV4dE1lbnUiLCJfZW1pdCIsImRvbUV2ZW50IiwibW92ZVRvTW91c2UiLCJicmluZ1RvRnJvbnQiLCJyZWN0IiwiY29udGFpbmVyIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwidG9wIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJtYXhUb3AiLCJib3R0b20iLCJtb3ZlIiwidGV4dElucHV0Iiwic2Nyb2xsZXIiLCJ0eXBpbmdSZXNldFRpbWVvdXQiLCJ0eXBpbmciLCJkZXRlY3RBcnJvd0tleXMiLCJ1cCIsImhvbWUiLCJvcHRpb24iLCJyaWdodCIsImVuZCIsImRvd24iLCJzaGlmdCIsIlRleHRJbnB1dElPUyIsIkRlZmF1bHRIYW5kbGVycyIsIm1vdXNlSGFuZGxlciIsIiRjbGlja1NlbGVjdGlvbiIsImVkaXRvciIsInNldERlZmF1bHRIYW5kbGVyIiwib25Nb3VzZURvd24iLCJvbkRvdWJsZUNsaWNrIiwib25UcmlwbGVDbGljayIsIm9uUXVhZENsaWNrIiwib25Nb3VzZVdoZWVsIiwib25Ub3VjaE1vdmUiLCJzZWxlY3RCeUxpbmVzIiwiZXh0ZW5kU2VsZWN0aW9uQnkiLCJzZWxlY3RCeVdvcmRzIiwiY2FsY1JhbmdlT3JpZW50YXRpb24iLCJjdXJzb3IiLCJyb3ciLCJjbXAiLCJjb2x1bW4iLCJhbmNob3IiLCJldiIsImluU2VsZWN0aW9uIiwiZ2V0RG9jdW1lbnRQb3NpdGlvbiIsIm1vdXNlZG93bkV2ZW50Iiwic2VsZWN0aW9uRW1wdHkiLCJnZXRTZWxlY3Rpb25SYW5nZSIsIiRibG9ja1Njcm9sbGluZyIsIm1vdmVUb1Bvc2l0aW9uIiwidGltZSIsIiRmb2N1c1RpbW91dCIsImluTXVsdGlTZWxlY3RNb2RlIiwiY2FwdHVyZU1vdXNlIiwic3RhcnRTZWxlY3QiLCJzZXRTdGF0ZSIsIndhaXRGb3JDbGlja1NlbGVjdGlvbiIsInNjcmVlblRvVGV4dENvb3JkaW5hdGVzIiwieSIsImdldFNoaWZ0S2V5Iiwic2VsZWN0VG9Qb3NpdGlvbiIsInNldENhcHR1cmUiLCJzZXRTdHlsZSIsImNvbXBhcmVQb2ludCIsIm9yaWVudGVkUmFuZ2UiLCJzZXRTZWxlY3Rpb25BbmNob3IiLCJzY3JvbGxDdXJzb3JJbnRvVmlldyIsInVuaXROYW1lIiwiY21wU3RhcnQiLCJjbXBFbmQiLCJzZWxlY3RFbmQiLCJzZWxlY3RBbGxFbmQiLCJzZWxlY3RCeVdvcmRzRW5kIiwic2VsZWN0QnlMaW5lc0VuZCIsInVuc2V0U3R5bGUiLCJyZWxlYXNlQ2FwdHVyZSIsImZvY3VzV2FpdCIsImF4IiwiYXkiLCJieCIsImJ5IiwiZGlzdGFuY2UiLCJzcXJ0IiwiZ2V0QnJhY2tldFJhbmdlIiwiZ2V0V29yZFJhbmdlIiwiaXNNdWx0aUxpbmUiLCJjb250YWlucyIsImdldExpbmVSYW5nZSIsImdldEFjY2VsS2V5IiwiJGxhc3RTY3JvbGwiLCJ0IiwidngiLCJ2eSIsImFsbG93ZWQiLCJwcmV2U2Nyb2xsIiwiZHQiLCJkaXJlY3Rpb24iLCJjYW5TY3JvbGwiLCJpc1Njcm9sbGFibGVCeSIsInNwZWVkIiwic2Nyb2xsQnkiLCJzdG9wIiwiVG9vbHRpcCIsImlzT3BlbiIsIiRlbGVtZW50IiwiJHBhcmVudE5vZGUiLCIkaW5pdCIsInNldFRleHQiLCJzZXRIdG1sIiwiaHRtbCIsInNldFBvc2l0aW9uIiwic2V0Q2xhc3NOYW1lIiwic2hvdyIsImhpZGUiLCJnZXRIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJnZXRXaWR0aCIsImRlc3Ryb3kiLCJHdXR0ZXJUb29sdGlwIiwid2luZG93V2lkdGgiLCJpbm5lcldpZHRoIiwid2luZG93SGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJHdXR0ZXJIYW5kbGVyIiwidG9vbHRpcFRpbWVvdXQiLCJtb3VzZUV2ZW50IiwidG9vbHRpcEFubm90YXRpb24iLCJndXR0ZXIiLCIkZ3V0dGVyTGF5ZXIiLCJ0b29sdGlwIiwiaGlkZVRvb2x0aXAiLCJfc2lnbmFsIiwibW92ZVRvb2x0aXAiLCJnZXRSZWdpb24iLCJzZWxlY3RUbyIsInNyY0VsZW1lbnQiLCIkdG9vbHRpcEZvbGxvd3NNb3VzZSIsImlzTW91c2VQcmVzc2VkIiwiYW5ub3RhdGlvbiIsIiRhbm5vdGF0aW9ucyIsImdldExlbmd0aCIsInNjcmVlblJvdyIsInBpeGVsVG9TY3JlZW5Db29yZGluYXRlcyIsIiRwb3MiLCJkb2N1bWVudFRvU2NyZWVuUm93Iiwic2hvd1Rvb2x0aXAiLCIkZ3V0dGVyIiwiTW91c2VFdmVudCIsIiRpblNlbGVjdGlvbiIsInByb3BhZ2F0aW9uU3RvcHBlZCIsInNlbGVjdGlvblJhbmdlIiwiRHJhZ2Ryb3BIYW5kbGVyIiwiYmxhbmtJbWFnZSIsInNyYyIsImRyYWdTZWxlY3Rpb25NYXJrZXIiLCJ0aW1lcklkIiwiZHJhZ0N1cnNvciIsImRyYWdPcGVyYXRpb24iLCJpc0ludGVybmFsIiwiYXV0b1Njcm9sbFN0YXJ0VGltZSIsImN1cnNvck1vdmVkVGltZSIsImN1cnNvclBvaW50T25DYXJldE1vdmVkIiwibW91c2VUYXJnZXQiLCJjb3VudGVyIiwib25EcmFnSW50ZXJ2YWwiLCJwcmV2Q3Vyc29yIiwidk1vdmVtZW50IiwiaE1vdmVtZW50IiwibW92ZUN1cnNvclRvUG9zaXRpb24iLCJjYWxjRGlzdGFuY2UiLCJsaW5lSGVpZ2h0IiwibGF5ZXJDb25maWciLCJjaGFyYWN0ZXJXaWR0aCIsImVkaXRvclJlY3QiLCJvZmZzZXRzIiwibmVhcmVzdFhPZmZzZXQiLCJuZWFyZXN0WU9mZnNldCIsInNjcm9sbEN1cnNvciIsInZTY3JvbGwiLCJoU2Nyb2xsIiwiYXV0b1Njcm9sbCIsImFkZERyYWdNYXJrZXIiLCJ0b09yaWVudGVkUmFuZ2UiLCJhZGRNYXJrZXIiLCJnZXRTZWxlY3Rpb25TdHlsZSIsIiRjdXJzb3JMYXllciIsInNldEJsaW5raW5nIiwiY2xlYXJJbnRlcnZhbCIsInNldEludGVydmFsIiwib25Nb3VzZU1vdmUiLCJjbGVhckRyYWdNYXJrZXIiLCJyZW1vdmVNYXJrZXIiLCJmcm9tT3JpZW50ZWRSYW5nZSIsImdldFJlYWRPbmx5Iiwib25EcmFnU3RhcnQiLCJjYW5jZWxEcmFnIiwiZHJhZ2dhYmxlIiwiZGF0YVRyYW5zZmVyIiwiZWZmZWN0QWxsb3dlZCIsInNldERyYWdJbWFnZSIsImNsZWFyRGF0YSIsImdldFRleHRSYW5nZSIsIm9uRHJhZ0VuZCIsImRyb3BFZmZlY3QiLCJzZXRDdXJzb3JTdHlsZSIsIm9uRHJhZ0VudGVyIiwiY2FuQWNjZXB0IiwiZ2V0RHJvcEVmZmVjdCIsIm9uRHJhZ092ZXIiLCJvbk1vdXNlTW92ZVRpbWVyIiwib25EcmFnTGVhdmUiLCJvbkRyb3AiLCJtb3ZlVGV4dCIsImRyb3BEYXRhIiwidHlwZXMiLCJjb3B5QWxsb3dlZCIsImNvcHlNb2RpZmllclN0YXRlIiwiZHJhZ1dhaXQiLCJnZXREcmFnRGVsYXkiLCJzdGFydERyYWciLCJkcmFnV2FpdEVuZCIsImRyYWdSZWFkeUVuZCIsImN1cnNvclN0eWxlIiwib25Nb3VzZURyYWciLCJzdGF0ZSIsImRyYWdEcm9wIiwiJGRyYWdFbmFibGVkIiwiZXZlbnRUYXJnZXQiLCJ1bnNlbGVjdGFibGUiLCJ1cmwiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VUZXh0Iiwic2VuZCIsImxvYWRTY3JpcHQiLCJwYXRoIiwicyIsIm9ubG9hZCIsIl8iLCJpc0Fib3J0IiwicXVhbGlmeVVSTCIsIkV2ZW50RW1pdHRlciIsIl9kaXNwYXRjaEV2ZW50IiwiZXZlbnROYW1lIiwiX2V2ZW50UmVnaXN0cnkiLCJfZGVmYXVsdEhhbmRsZXJzIiwibGlzdGVuZXJzIiwiZGVmYXVsdEhhbmRsZXIiLCJvbmNlIiwibmV3Q2FsbGJhY2siLCJoYW5kbGVycyIsIl9kaXNhYmxlZF8iLCJvbGQiLCJkaXNhYmxlZCIsInJlbW92ZURlZmF1bHRIYW5kbGVyIiwicG9wIiwiY2FwdHVyaW5nIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwib3B0aW9uc1Byb3ZpZGVyIiwic2V0T3B0aW9ucyIsIm9wdExpc3QiLCJzZXRPcHRpb24iLCJnZXRPcHRpb25zIiwib3B0aW9uTmFtZXMiLCIkb3B0aW9ucyIsImdldE9wdGlvbiIsIm9wdCIsIndhcm4iLCJmb3J3YXJkVG8iLCJoYW5kbGVzU2V0IiwibWVzc2FnZSIsInJlcG9ydEVycm9yIiwibXNnIiwiRXJyb3IiLCJBcHBDb25maWciLCIkZGVmYXVsdE9wdGlvbnMiLCJkZWZpbmVPcHRpb25zIiwib3B0aW9ucyIsImluaXRpYWxWYWx1ZSIsInJlc2V0T3B0aW9ucyIsInNldERlZmF1bHRWYWx1ZSIsIm9wdHMiLCJzZXREZWZhdWx0VmFsdWVzIiwib3B0aW9uSGFzaCIsIm5ldCIsIndvcmtlclBhdGgiLCJtb2RlUGF0aCIsInRoZW1lUGF0aCIsImJhc2VQYXRoIiwic3VmZml4IiwiJG1vZHVsZVVybHMiLCJpbml0Iiwic2NyaXB0T3B0aW9ucyIsInNjcmlwdFVybCIsImN1cnJlbnRTY3JpcHQiLCJfY3VycmVudFNjcmlwdCIsInNjcmlwdHMiLCJvd25lckRvY3VtZW50Iiwic2NyaXB0IiwiZ2V0QXR0cmlidXRlIiwiYXR0cmlidXRlcyIsImoiLCJhdHRyIiwibSIsIm0xIiwidG9VcHBlckNhc2UiLCJiYXNlIiwiYWxsIiwibW9kdWxlVXJsIiwiY29tcG9uZW50IiwicGFydHMiLCJzZXAiLCJyZSIsInNldE1vZHVsZVVybCIsInN1YnN0IiwiJGxvYWRpbmciLCJsb2FkTW9kdWxlIiwib25Mb2FkIiwibW9kdWxlVHlwZSIsImFmdGVyTG9hZCIsIkRlZmF1bHRHdXR0ZXJIYW5kbGVyIiwiY29uZmlnIiwiTW91c2VIYW5kbGVyIiwiZm9jdXNFZGl0b3IiLCJoYXNGb2N1cyIsImdldE1vdXNlRXZlbnRUYXJnZXQiLCJvbk1vdXNlRXZlbnQiLCJzY3JvbGxCYXJWIiwic2Nyb2xsQmFySCIsIkJvb2xlYW4iLCJndXR0ZXJFbCIsIiRkcmFnRGVsYXkiLCJjaGFyYWN0ZXIiLCJpbnNpZGVTdGFydCIsIm1vdXNlbW92ZSIsIiRzY3JvbGxTcGVlZCIsIm1vdXNlTW92ZUhhbmRsZXIiLCJ3aGljaCIsInJlbGVhc2VNb3VzZSIsIiRtb3VzZU1vdmVkIiwib25DYXB0dXJlRW5kIiwib25DYXB0dXJlSW50ZXJ2YWwiLCIkb25DYXB0dXJlTW91c2VNb3ZlIiwiY2FuY2VsQ29udGV4dE1lbnUiLCJzY3JvbGxTcGVlZCIsImRyYWdEZWxheSIsImRyYWdFbmFibGVkIiwiZm9jdXNUaW1vdXQiLCJ0b29sdGlwRm9sbG93c01vdXNlIiwiRm9sZEhhbmRsZXIiLCJmb2xkIiwiZ2V0Rm9sZEF0IiwicmVtb3ZlRm9sZCIsImV4cGFuZEZvbGQiLCJmb2xkV2lkZ2V0cyIsIm9uRm9sZFdpZGdldENsaWNrIiwiZ2V0UGFyZW50Rm9sZFJhbmdlRGF0YSIsImZpcnN0UmFuZ2UiLCJnZXRMaW5lIiwiYWRkRm9sZCIsImtleVV0aWwiLCJLZXlCaW5kaW5nIiwiJGVkaXRvciIsIiRkYXRhIiwiJGhhbmRsZXJzIiwiY29tbWFuZHMiLCJrYiIsInJlbW92ZUtleWJvYXJkSGFuZGxlciIsIiRkZWZhdWx0SGFuZGxlciIsImFkZEtleWJvYXJkSGFuZGxlciIsInNldEtleWJvYXJkSGFuZGxlciIsImgiLCJoYW5kbGVLZXlib2FyZCIsImF0dGFjaCIsImRldGFjaCIsImdldEtleWJvYXJkSGFuZGxlciIsImdldFN0YXR1c1RleHQiLCIkY2FsbEtleWJvYXJkSGFuZGxlcnMiLCJ0b0V4ZWN1dGUiLCJzdWNjZXNzIiwiY29tbWFuZCIsInBhc3NFdmVudCIsImRpciIsImhpTGV2ZWwiLCJsYXN0QXJhYmljIiwiaGFzVUJBVF9CIiwiaGFzVUJBVF9TIiwiaW1wVGFiX0xUUiIsImltcFRhYl9SVEwiLCJFVCIsIkJOIiwiVW5pY29kZVRCTDAwIiwiVW5pY29kZVRCTDIwIiwiX2ludmVydExldmVsIiwibGV2IiwibGV2ZWxzIiwiX2FycmF5IiwibG8iLCJoaSIsInRtcCIsImxlbiIsIl9nZXRDaGFyQ2xhc3MiLCJjaGFycyIsIml4Iiwid1R5cGUiLCJuVHlwZSIsImNUeXBlIiwicnRsQ2FuZGlkYXRlIiwiX2dldENoYXJhY3RlclR5cGUiLCJjaCIsInVjIiwiY2hhckNvZGVBdCIsIkwiLCJSIiwiRU4iLCJPTl9SIiwiQU4iLCJSX0giLCJCIiwiRE9UIiwiZG9CaWRpUmVvcmRlciIsInRleHRDaGFyVHlwZXMiLCJpc1J0bCIsImxvZ2ljYWxGcm9tVmlzdWFsIiwiYmlkaUxldmVscyIsImNoYXJUeXBlcyIsImltcFRhYiIsInByZXZTdGF0ZSIsIm5ld0NsYXNzIiwibmV3TGV2ZWwiLCJuZXdTdGF0ZSIsImFjdGlvbiIsImNvbmRQb3MiLCJfY29tcHV0ZUxldmVscyIsImhhc0JpZGlDaGFyYWN0ZXJzIiwiZ2V0VmlzdWFsRnJvbUxvZ2ljYWxJZHgiLCJsb2dJZHgiLCJyb3dNYXAiLCJiaWRpVXRpbCIsImJpZGlSRSIsIkJpZGlIYW5kbGVyIiwiYmlkaU1hcCIsImN1cnJlbnRSb3ciLCJjaGFyV2lkdGhzIiwiRU9MIiwic2hvd0ludmlzaWJsZXMiLCJpc1J0bERpciIsImxpbmUiLCJ3cmFwSW5kZW50IiwiaXNMYXN0Um93IiwiRU9GIiwic2VlbkJpZGkiLCJpc0JpZGlSb3ciLCJkb2NSb3ciLCJzcGxpdEluZGV4IiwidXBkYXRlUm93TGluZSIsInVwZGF0ZUJpZGlNYXAiLCJvbkNoYW5nZSIsImRlbHRhIiwibGluZXMiLCJnZXREb2N1bWVudFJvdyIsInJvd0NhY2hlIiwiJHNjcmVlblJvd0NhY2hlIiwiJGdldFJvd0NhY2hlSW5kZXgiLCIkZG9jUm93Q2FjaGUiLCJnZXRTcGxpdEluZGV4IiwiY3VycmVudEluZGV4IiwicHJldkluZGV4IiwiJHVzZVdyYXBNb2RlIiwic3BsaXRzIiwiJHdyYXBEYXRhIiwiaW5kZW50Iiwic2l6ZSIsImlzRnVsbFdpZHRoIiwiZ2V0U2NyZWVuVGFiU2l6ZSIsImVuZE9mTGluZSIsIm1hcmtBc0RpcnR5IiwidXBkYXRlQ2hhcmFjdGVyV2lkdGhzIiwiZm9udE1ldHJpY3MiLCIkY2hhcmFjdGVyU2l6ZSIsImJpZGlDaGFyV2lkdGgiLCIkbWVhc3VyZUNoYXJXaWR0aCIsImdldFNob3dJbnZpc2libGVzIiwic2V0U2hvd0ludmlzaWJsZXMiLCJzZXRFb2xDaGFyIiwiZW9sQ2hhciIsInNldFRleHREaXIiLCJnZXRQb3NMZWZ0IiwiY29sIiwidmlzdWFsSWR4IiwiZ2V0U2VsZWN0aW9ucyIsInN0YXJ0Q29sIiwiZW5kQ29sIiwibGV2ZWwiLCJzZWxlY3Rpb25zIiwic2VsQ29sTWluIiwic2VsQ29sTWF4IiwiaXNTZWxlY3RlZCIsImlzU2VsZWN0ZWRQcmV2IiwidmlzSWR4Iiwib2Zmc2V0VG9Db2wiLCJwb3NYIiwibG9naWNhbElkeCIsImNoYXJXaWR0aCIsIlJhbmdlIiwic3RhcnRSb3ciLCJzdGFydENvbHVtbiIsImVuZFJvdyIsImVuZENvbHVtbiIsImlzRXF1YWwiLCJjb21wYXJlIiwiY29tcGFyZVJhbmdlIiwicCIsImNvbnRhaW5zUmFuZ2UiLCJpbnRlcnNlY3RzIiwiaXNFbmQiLCJpc1N0YXJ0Iiwic2V0U3RhcnQiLCJzZXRFbmQiLCJpbnNpZGUiLCJpbnNpZGVFbmQiLCJjb21wYXJlU3RhcnQiLCJjb21wYXJlRW5kIiwiY29tcGFyZUluc2lkZSIsImNsaXBSb3dzIiwiZmlyc3RSb3ciLCJsYXN0Um93IiwiZnJvbVBvaW50cyIsImV4dGVuZCIsImNsb25lIiwiY29sbGFwc2VSb3dzIiwidG9TY3JlZW5SYW5nZSIsInNjcmVlblBvc1N0YXJ0IiwiZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uIiwic2NyZWVuUG9zRW5kIiwibW92ZUJ5IiwiY29tcGFyZVBvaW50cyIsInAxIiwicDIiLCJTZWxlY3Rpb24iLCJnZXREb2N1bWVudCIsImxlYWQiLCJzZWxlY3Rpb25MZWFkIiwiY3JlYXRlQW5jaG9yIiwic2VsZWN0aW9uQW5jaG9yIiwiJGlzRW1wdHkiLCIka2VlcERlc2lyZWRDb2x1bW5PbkNoYW5nZSIsIiRkZXNpcmVkQ29sdW1uIiwiZ2V0Q3Vyc29yIiwiZ2V0UG9zaXRpb24iLCJnZXRTZWxlY3Rpb25BbmNob3IiLCJnZXRTZWxlY3Rpb25MZWFkIiwic2hpZnRTZWxlY3Rpb24iLCJjb2x1bW5zIiwibW92ZUN1cnNvclRvIiwiaXNCYWNrd2FyZHMiLCIkbW92ZVNlbGVjdGlvbiIsIm1vdmVyIiwibW92ZVRvIiwic2VsZWN0VXAiLCJtb3ZlQ3Vyc29yVXAiLCJzZWxlY3REb3duIiwibW92ZUN1cnNvckRvd24iLCJzZWxlY3RSaWdodCIsIm1vdmVDdXJzb3JSaWdodCIsInNlbGVjdExlZnQiLCJtb3ZlQ3Vyc29yTGVmdCIsInNlbGVjdExpbmVTdGFydCIsIm1vdmVDdXJzb3JMaW5lU3RhcnQiLCJzZWxlY3RMaW5lRW5kIiwibW92ZUN1cnNvckxpbmVFbmQiLCJzZWxlY3RGaWxlRW5kIiwibW92ZUN1cnNvckZpbGVFbmQiLCJzZWxlY3RGaWxlU3RhcnQiLCJtb3ZlQ3Vyc29yRmlsZVN0YXJ0Iiwic2VsZWN0V29yZFJpZ2h0IiwibW92ZUN1cnNvcldvcmRSaWdodCIsInNlbGVjdFdvcmRMZWZ0IiwibW92ZUN1cnNvcldvcmRMZWZ0Iiwic2VsZWN0V29yZCIsInNlbGVjdEFXb3JkIiwiZ2V0QVdvcmRSYW5nZSIsImV4Y2x1ZGVMYXN0Q2hhciIsInJvd0VuZCIsInJvd1N0YXJ0IiwiZm9sZExpbmUiLCJnZXRGb2xkTGluZSIsInNlbGVjdExpbmUiLCJtb3ZlQ3Vyc29yQnkiLCJ3b3VsZE1vdmVJbnRvU29mdFRhYiIsInRhYlNpemUiLCJpc1RhYlN0b3AiLCJnZXRUYWJTaXplIiwiZ2V0TmF2aWdhdGVXaXRoaW5Tb2Z0VGFicyIsImZpcnN0Q29sdW1uUG9zaXRpb24iLCJzY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24iLCJsZWFkaW5nU3BhY2UiLCJnZXREaXNwbGF5TGluZSIsIiR1c2VFbWFjc1N0eWxlTGluZVN0YXJ0IiwibGluZUVuZCIsImdldERvY3VtZW50TGFzdFJvd0NvbHVtblBvc2l0aW9uIiwidGV4dEVuZCIsInNlYXJjaCIsIm1vdmVDdXJzb3JMb25nV29yZFJpZ2h0IiwicmlnaHRPZkN1cnNvciIsIm5vblRva2VuUmUiLCJ0b2tlblJlIiwibW92ZUN1cnNvckxvbmdXb3JkTGVmdCIsImdldEZvbGRTdHJpbmdBdCIsImxlZnRPZkN1cnNvciIsIiRzaG9ydFdvcmRFbmRJbmRleCIsIndoaXRlc3BhY2VSZSIsIm1vdmVDdXJzb3JTaG9ydFdvcmRSaWdodCIsIm1vdmVDdXJzb3JTaG9ydFdvcmRMZWZ0IiwiJHNlbGVjdExvbmdXb3JkcyIsInJvd3MiLCJvZmZzZXRYIiwic2NyZWVuUG9zIiwiJGJpZGlIYW5kbGVyIiwicm91bmQiLCJkb2NQb3MiLCJsaW5lV2lkZ2V0cyIsImtlZXBEZXNpcmVkQ29sdW1uIiwibW92ZUN1cnNvclRvU2NyZWVuIiwiZGVzaXJlZENvbHVtbiIsImdldFJhbmdlT2ZNb3ZlbWVudHMiLCJmdW5jIiwidG9KU09OIiwicmFuZ2VDb3VudCIsInJhbmdlcyIsInIxIiwiZnJvbUpTT04iLCJyYW5nZUxpc3QiLCJ0b1NpbmdsZVJhbmdlIiwiYWRkUmFuZ2UiLCJNQVhfVE9LRU5fQ09VTlQiLCJUb2tlbml6ZXIiLCJydWxlcyIsInN0YXRlcyIsInJlZ0V4cHMiLCJtYXRjaE1hcHBpbmdzIiwicnVsZVJlZ0V4cHMiLCJtYXRjaFRvdGFsIiwibWFwcGluZyIsImRlZmF1bHRUb2tlbiIsImZsYWciLCJzcGxpdHRlclJ1cmxlcyIsInJ1bGUiLCJjYXNlSW5zZW5zaXRpdmUiLCJhZGp1c3RlZHJlZ2V4IiwibWF0Y2hjb3VudCIsInRva2VuIiwiZ3JvdXBDb3VudCIsInRva2VuQXJyYXkiLCJvbk1hdGNoIiwiJGFycmF5VG9rZW5zIiwiJGFwcGx5VG9rZW4iLCJkaWdpdCIsInJlbW92ZUNhcHR1cmluZ0dyb3VwcyIsInNwbGl0UmVnZXgiLCJjcmVhdGVTcGxpdHRlclJlZ2V4cCIsIiRzZXRNYXhUb2tlbkNvdW50IiwidmFsdWVzIiwidG9rZW5zIiwic3RhY2siLCJpbkNoQ2xhc3MiLCJsYXN0Q2FwdHVyZSIsInBhcmVuT3BlbiIsInBhcmVuQ2xvc2UiLCJzcXVhcmUiLCJnZXRMaW5lVG9rZW5zIiwic3RhcnRTdGF0ZSIsImN1cnJlbnRTdGF0ZSIsIm1hdGNoQXR0ZW1wdHMiLCJza2lwcGVkIiwibmV4dCIsImNvbnN1bWVMaW5lRW5kIiwibWVyZ2UiLCJ1bnNoaWZ0IiwiVGV4dEhpZ2hsaWdodFJ1bGVzIiwiJHJ1bGVzIiwiYWRkUnVsZXMiLCJwcmVmaXgiLCJuZXh0U3RhdGUiLCJnZXRSdWxlcyIsImVtYmVkUnVsZXMiLCJIaWdobGlnaHRSdWxlcyIsImVzY2FwZVJ1bGVzIiwiYXBwZW5kIiwiJGVtYmVkcyIsImdldEVtYmVkcyIsInB1c2hTdGF0ZSIsInBvcFN0YXRlIiwibm9ybWFsaXplUnVsZXMiLCJwcm9jZXNzU3RhdGUiLCJwcm9jZXNzZWQiLCJ0b0luc2VydCIsInN0YXRlTmFtZSIsImluY2x1ZGVOYW1lIiwibm9Fc2NhcGUiLCJrZXl3b3JkTWFwIiwiY3JlYXRlS2V5d29yZE1hcHBlciIsInNwbGl0Q2hhciIsImtleXdvcmRzIiwibGlzdCIsIiRrZXl3b3JkTGlzdCIsImdldEtleXdvcmRzIiwiJGtleXdvcmRzIiwiQmVoYXZpb3VyIiwiJGJlaGF2aW91cnMiLCJhZGRCZWhhdmlvdXJzIiwiYmVoYXZpb3VycyIsImluaGVyaXQiLCJtb2RlIiwiZ2V0QmVoYXZpb3VycyIsIlRva2VuSXRlcmF0b3IiLCJpbml0aWFsUm93IiwiaW5pdGlhbENvbHVtbiIsIiRzZXNzaW9uIiwiJHJvdyIsIiRyb3dUb2tlbnMiLCJnZXRUb2tlbnMiLCJnZXRUb2tlbkF0IiwiJHRva2VuSW5kZXgiLCJzdGVwQmFja3dhcmQiLCJzdGVwRm9yd2FyZCIsInJvd0NvdW50IiwiZ2V0Q3VycmVudFRva2VuIiwiZ2V0Q3VycmVudFRva2VuUm93IiwiZ2V0Q3VycmVudFRva2VuQ29sdW1uIiwicm93VG9rZW5zIiwidG9rZW5JbmRleCIsImdldEN1cnJlbnRUb2tlblBvc2l0aW9uIiwiZ2V0Q3VycmVudFRva2VuUmFuZ2UiLCJjb250ZXh0IiwiU0FGRV9JTlNFUlRfSU5fVE9LRU5TIiwiU0FGRV9JTlNFUlRfQkVGT1JFX1RPS0VOUyIsImNvbnRleHRDYWNoZSIsImRlZmF1bHRRdW90ZXMiLCJpbml0Q29udGV4dCIsIm11bHRpU2VsZWN0IiwiYXV0b0luc2VydGVkQnJhY2tldHMiLCJhdXRvSW5zZXJ0ZWRSb3ciLCJhdXRvSW5zZXJ0ZWRMaW5lRW5kIiwibWF5YmVJbnNlcnRlZEJyYWNrZXRzIiwibWF5YmVJbnNlcnRlZFJvdyIsIm1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQiLCJtYXliZUluc2VydGVkTGluZUVuZCIsImdldFdyYXBwZWQiLCJzZWxlY3RlZCIsIm9wZW5pbmciLCJjbG9zaW5nIiwicm93RGlmZiIsIkNzdHlsZUJlaGF2aW91ciIsImdldEN1cnNvclBvc2l0aW9uIiwiZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkIiwiaXNTYW5lSW5zZXJ0aW9uIiwiYnJhY2VzIiwicmVjb3JkQXV0b0luc2VydCIsInJlY29yZE1heWJlSW5zZXJ0IiwiJGZpbmRPcGVuaW5nQnJhY2tldCIsImlzQXV0b0luc2VydGVkQ2xvc2luZyIsInBvcEF1dG9JbnNlcnRlZENsb3NpbmciLCJpc01heWJlSW5zZXJ0ZWRDbG9zaW5nIiwiY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZyIsIm9wZW5CcmFjZVBvcyIsImZpbmRNYXRjaGluZ0JyYWNrZXQiLCJuZXh0X2luZGVudCIsIiRnZXRJbmRlbnQiLCJnZXRUYWJTdHJpbmciLCJxdW90ZXMiLCIkbW9kZSIsIiRxdW90ZXMiLCJsaW5lQ29tbWVudFN0YXJ0IiwicXVvdGUiLCJsZWZ0Q2hhciIsInJpZ2h0Q2hhciIsInJpZ2h0VG9rZW4iLCJwYWlyIiwic3RyaW5nQmVmb3JlIiwic3RyaW5nQWZ0ZXIiLCJ3b3JkUmUiLCJpc1dvcmRCZWZvcmUiLCJpc1dvcmRBZnRlciIsIml0ZXJhdG9yIiwiJG1hdGNoVG9rZW5UeXBlIiwiaXRlcmF0b3IyIiwiYnJhY2tldCIsInBhY2thZ2VzIiwicGFjayIsImNvZGVQb2ludCIsImFkZFVuaWNvZGVQYWNrYWdlIiwiTGwiLCJMdSIsIkx0IiwiTG0iLCJMbyIsIk0iLCJNbiIsIk1jIiwiTWUiLCJOIiwiTmQiLCJObCIsIk5vIiwiUCIsIlBkIiwiUHMiLCJQZSIsIlBpIiwiUGYiLCJQYyIsIlBvIiwiUyIsIlNtIiwiU2MiLCJTayIsIlNvIiwiWiIsIlpzIiwiWmwiLCJacCIsIkMiLCJDYyIsIkNmIiwiQ28iLCJDcyIsIkNuIiwidW5pY29kZSIsIk1vZGUiLCIkZGVmYXVsdEJlaGF2aW91ciIsImdldFRva2VuaXplciIsIiR0b2tlbml6ZXIiLCIkaGlnaGxpZ2h0UnVsZXMiLCIkaGlnaGxpZ2h0UnVsZUNvbmZpZyIsImJsb2NrQ29tbWVudCIsInRvZ2dsZUNvbW1lbnRMaW5lcyIsImlnbm9yZUJsYW5rTGluZXMiLCJzaG91bGRSZW1vdmUiLCJtaW5JbmRlbnQiLCJJbmZpbml0eSIsImluc2VydEF0VGFiU3RvcCIsInJlZ2V4cFN0YXJ0IiwiZ2V0VXNlU29mdFRhYnMiLCJ1bmNvbW1lbnQiLCJzaG91bGRJbnNlcnRTcGFjZSIsInJlbW92ZUluTGluZSIsImNvbW1lbnRXaXRoU3BhY2UiLCJjb21tZW50IiwiaW5zZXJ0SW5MaW5lIiwidGVzdFJlbW92ZSIsImJlZm9yZSIsImFmdGVyIiwic3BhY2VzIiwibGluZUNvbW1lbnRFbmQiLCJyZWdleHBFbmQiLCJpdGVyIiwibWluRW1wdHlMZW5ndGgiLCJ0b2dnbGVCbG9ja0NvbW1lbnQiLCJjb2xEaWZmIiwiaW5pdGlhbFJhbmdlIiwic3RhcnRSYW5nZSIsImVuZFJhbmdlIiwiZ2V0TmV4dExpbmVJbmRlbnQiLCJ0YWIiLCJjaGVja091dGRlbnQiLCJpbnB1dCIsImF1dG9PdXRkZW50IiwiY3JlYXRlV29ya2VyIiwiY3JlYXRlTW9kZURlbGVnYXRlcyIsIiRtb2RlcyIsImRlbGVnYXRpb25zIiwic2NvcGUiLCJmdW5jdGlvbk5hbWUiLCIkZGVsZWdhdG9yIiwibWV0aG9kIiwidHJhbnNmb3JtQWN0aW9uIiwicGFyYW0iLCIkYmVoYXZpb3VyIiwiY29tcGxldGlvbktleXdvcmRzIiwicnVsZUl0ciIsImFMZW5ndGgiLCIkY3JlYXRlS2V5d29yZExpc3QiLCJnZXRDb21wbGV0aW9ucyIsIndvcmQiLCJzY29yZSIsIm1ldGEiLCIkaWQiLCJhcHBseURlbHRhIiwiZG9jTGluZXMiLCJkb05vdFZhbGlkYXRlIiwiQW5jaG9yIiwiJG9uQ2hhbmdlIiwiJHBvaW50c0luT3JkZXIiLCJwb2ludDEiLCJwb2ludDIiLCJlcXVhbFBvaW50c0luT3JkZXIiLCJiQ29sSXNBZnRlciIsIiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50IiwiJGluc2VydFJpZ2h0IiwicG9pbnQiLCJtb3ZlSWZFcXVhbCIsImRlbHRhSXNJbnNlcnQiLCJkZWx0YVJvd1NoaWZ0IiwiZGVsdGFDb2xTaGlmdCIsImRlbHRhU3RhcnQiLCJkZWx0YUVuZCIsIiRnZXRUcmFuc2Zvcm1lZFBvaW50Iiwibm9DbGlwIiwiRG9jdW1lbnQiLCJ0ZXh0T3JMaW5lcyIsIiRsaW5lcyIsImluc2VydE1lcmdlZExpbmVzIiwic2V0VmFsdWUiLCJnZXRWYWx1ZSIsImdldEFsbExpbmVzIiwiZ2V0TmV3TGluZUNoYXJhY3RlciIsIiRzcGxpdCIsIiRkZXRlY3ROZXdMaW5lIiwiJGF1dG9OZXdMaW5lIiwiJG5ld0xpbmVNb2RlIiwic2V0TmV3TGluZU1vZGUiLCJuZXdMaW5lTW9kZSIsImdldE5ld0xpbmVNb2RlIiwiaXNOZXdMaW5lIiwiZ2V0TGluZXMiLCJnZXRMaW5lc0ZvclJhbmdlIiwiaW5zZXJ0TGluZXMiLCJpbnNlcnRGdWxsTGluZXMiLCJyZW1vdmVMaW5lcyIsInJlbW92ZUZ1bGxMaW5lcyIsImluc2VydE5ld0xpbmUiLCJjbGlwcGVkUG9zIiwiY2xvbmVQb3MiLCIkY2xpcFBvc2l0aW9uIiwiZGVsZXRlRmlyc3ROZXdMaW5lIiwiZGVsZXRlTGFzdE5ld0xpbmUiLCJkZWxldGVkTGluZXMiLCJyZW1vdmVOZXdMaW5lIiwiYXBwbHlEZWx0YXMiLCJkZWx0YXMiLCJyZXZlcnREZWx0YXMiLCJyZXZlcnREZWx0YSIsImlzSW5zZXJ0IiwiJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhIiwiTUFYIiwidG8iLCJjaHVuayIsImluZGV4VG9Qb3NpdGlvbiIsIm5ld2xpbmVMZW5ndGgiLCJwb3NpdGlvblRvSW5kZXgiLCJCYWNrZ3JvdW5kVG9rZW5pemVyIiwidG9rZW5pemVyIiwicnVubmluZyIsImN1cnJlbnRMaW5lIiwiJHdvcmtlciIsIndvcmtlclN0YXJ0IiwiZW5kTGluZSIsInN0YXJ0TGluZSIsInByb2Nlc3NlZExpbmVzIiwiJHRva2VuaXplUm93IiwiZmlyZVVwZGF0ZUV2ZW50Iiwic2V0VG9rZW5pemVyIiwic2V0RG9jdW1lbnQiLCJmaXJzdCIsInNjaGVkdWxlU3RhcnQiLCIkdXBkYXRlT25DaGFuZ2UiLCJnZXRTdGF0ZSIsIlNlYXJjaEhpZ2hsaWdodCIsImNsYXp6Iiwic2V0UmVnZXhwIiwiTUFYX1JBTkdFUyIsImNhY2hlIiwidXBkYXRlIiwibWFya2VyTGF5ZXIiLCJkcmF3U2luZ2xlTGluZU1hcmtlciIsIkZvbGRMaW5lIiwiZm9sZERhdGEiLCJmb2xkcyIsInNldEZvbGRMaW5lIiwic2hpZnRSb3ciLCJzYW1lUm93Iiwic29ydCIsImIiLCJjb250YWluc1JvdyIsIndhbGsiLCJsYXN0RW5kIiwiaXNOZXdSb3ciLCJwbGFjZWhvbGRlciIsImdldE5leHRGb2xkVG8iLCJraW5kIiwiYWRkUmVtb3ZlQ2hhcnMiLCJsb2ciLCJmb2xkQmVmb3JlIiwibmV3Rm9sZExpbmUiLCJmb2xkTGluZU5leHQiLCJpZHhUb1Bvc2l0aW9uIiwiaWR4IiwibGFzdEZvbGRFbmRDb2x1bW4iLCJSYW5nZUxpc3QiLCJwb2ludEluZGV4IiwiZXhjbHVkZUVkZ2VzIiwic3RhcnRJbmRleCIsImVuZEluZGV4IiwiYWRkTGlzdCIsInN1YnN0cmFjdFBvaW50IiwiY29udGFpbnNQb2ludCIsInJhbmdlQXRQb2ludCIsImNsaXBwZWQiLCJyZW1vdmVBbGwiLCJsaW5lRGlmIiwiRm9sZCIsInN1YkZvbGRzIiwiY29uc3VtZVBvaW50IiwicmVzdG9yZVBvaW50Iiwic3ViRm9sZCIsImNvbGxhcHNlQ2hpbGRyZW4iLCJhZGRTdWJGb2xkIiwiYWZ0ZXJTdGFydCIsInJlc3RvcmVSYW5nZSIsIkZvbGRpbmciLCJzaWRlIiwiZ2V0Rm9sZHNJblJhbmdlIiwiZm9sZExpbmVzIiwiJGZvbGREYXRhIiwiZm91bmRGb2xkcyIsImdldEZvbGRzSW5SYW5nZUxpc3QiLCJnZXRBbGxGb2xkcyIsImxhc3RGb2xkIiwic3RhcnRGb2xkTGluZSIsImdldE5leHRGb2xkTGluZSIsImdldEZvbGRlZFJvd0NvdW50IiwiJGFkZEZvbGRMaW5lIiwiYWRkZWQiLCIkY2xpcFJhbmdlVG9Eb2N1bWVudCIsInN0YXJ0Rm9sZCIsImVuZEZvbGQiLCJyZW1vdmVGb2xkcyIsIiR1cGRhdGVXcmFwRGF0YSIsIiR1cGRhdGVSb3dMZW5ndGhDYWNoZSIsIiRtb2RpZmllZCIsImFkZEZvbGRzIiwiJHVwZGF0aW5nIiwiY2xvbmVGb2xkcyIsImZvbGRBbGwiLCJleHBhbmRGb2xkcyIsInVuZm9sZCIsImV4cGFuZElubmVyIiwiaXNSb3dGb2xkZWQiLCJzdGFydEZvbGRSb3ciLCJnZXRSb3dGb2xkRW5kIiwiZ2V0Um93Rm9sZFN0YXJ0IiwiZ2V0Rm9sZERpc3BsYXlMaW5lIiwidGV4dExpbmUiLCJsYXN0Q29sdW1uIiwiJGNsb25lRm9sZERhdGEiLCJmZCIsInRvZ2dsZUZvbGQiLCJ0cnlUb1VuZm9sZCIsImJyYWNrZXRQb3MiLCJnZXRDb21tZW50Rm9sZFJhbmdlIiwiZGVwdGgiLCJnZXRGb2xkV2lkZ2V0IiwiZ2V0Rm9sZFdpZGdldFJhbmdlIiwiJGZvbGRTdHlsZXMiLCIkZm9sZFN0eWxlIiwic2V0Rm9sZFN0eWxlIiwiJGZvbGRNb2RlIiwiJHNldEZvbGRpbmciLCJmb2xkTW9kZSIsIiR1cGRhdGVGb2xkV2lkZ2V0cyIsIiR0b2tlbml6ZXJVcGRhdGVGb2xkV2lkZ2V0cyIsInVwZGF0ZUZvbGRXaWRnZXRzIiwidG9rZW5pemVyVXBkYXRlRm9sZFdpZGdldHMiLCJpZ25vcmVDdXJyZW50IiwiZnciLCJjaGlsZHJlbiIsInNpYmxpbmdzIiwiJHRvZ2dsZUZvbGRXaWRnZXQiLCJ0b2dnbGVGb2xkV2lkZ2V0IiwidG9nZ2xlUGFyZW50IiwiQnJhY2tldE1hdGNoIiwiY2hyIiwiY2hhckJlZm9yZUN1cnNvciIsIiRmaW5kQ2xvc2luZ0JyYWNrZXQiLCIkYnJhY2tldHMiLCJ0eXBlUmUiLCJvcGVuQnJhY2tldCIsInZhbHVlSW5kZXgiLCJjbG9zaW5nQnJhY2tldCIsInZhbHVlTGVuZ3RoIiwiVGV4dE1vZGUiLCJFZGl0U2Vzc2lvbiIsIiRicmVha3BvaW50cyIsIiRkZWNvcmF0aW9ucyIsIiRmcm9udE1hcmtlcnMiLCIkYmFja01hcmtlcnMiLCIkbWFya2VySWQiLCIkdW5kb1NlbGVjdCIsIiR1aWQiLCJvbkNoYW5nZUZvbGQiLCJzZXRNb2RlIiwiYmdUb2tlbml6ZXIiLCJyZXNldENhY2hlcyIsIiRyZXNldFJvd0NhY2hlIiwiY2FjaGVBcnJheSIsImxvdyIsIm1pZCIsIiRyb3dMZW5ndGhDYWNoZSIsInJlbW92ZWRGb2xkcyIsIiR1cGRhdGVJbnRlcm5hbERhdGFPbkNoYW5nZSIsIiRmcm9tVW5kbyIsImlnbm9yZSIsIiRkZWx0YXNEb2MiLCIkZGVsdGFzRm9sZCIsIiRpbmZvcm1VbmRvTWFuYWdlciIsIiRkZWx0YXMiLCJzZXRVbmRvTWFuYWdlciIsImdldFVuZG9NYW5hZ2VyIiwicmVzZXQiLCJnZXRTZWxlY3Rpb24iLCJ1bmRvTWFuYWdlciIsIiRzeW5jSW5mb3JtVW5kb01hbmFnZXIiLCJncm91cCIsImV4ZWN1dGUiLCJtZXJnZVVuZG9EZWx0YXMiLCIkZGVmYXVsdFVuZG9NYW5hZ2VyIiwicmVkbyIsInNldFVzZVNvZnRUYWJzIiwiJHVzZVNvZnRUYWJzIiwiJGluZGVudFdpdGhUYWJzIiwic2V0VGFiU2l6ZSIsIiR0YWJTaXplIiwic2V0TmF2aWdhdGVXaXRoaW5Tb2Z0VGFicyIsIm5hdmlnYXRlV2l0aGluU29mdFRhYnMiLCIkbmF2aWdhdGVXaXRoaW5Tb2Z0VGFicyIsIiRvdmVyd3JpdGUiLCJzZXRPdmVyd3JpdGUiLCJvdmVyd3JpdGUiLCJnZXRPdmVyd3JpdGUiLCJ0b2dnbGVPdmVyd3JpdGUiLCJhZGRHdXR0ZXJEZWNvcmF0aW9uIiwicmVtb3ZlR3V0dGVyRGVjb3JhdGlvbiIsImdldEJyZWFrcG9pbnRzIiwic2V0QnJlYWtwb2ludHMiLCJjbGVhckJyZWFrcG9pbnRzIiwic2V0QnJlYWtwb2ludCIsImNsZWFyQnJlYWtwb2ludCIsImluRnJvbnQiLCJtYXJrZXIiLCJhZGREeW5hbWljTWFya2VyIiwibWFya2VySWQiLCJtYXJrZXJzIiwiZ2V0TWFya2VycyIsImhpZ2hsaWdodCIsIiRzZWFyY2hIaWdobGlnaHQiLCJoaWdobGlnaHRMaW5lcyIsInNldEFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJnZXRBbm5vdGF0aW9ucyIsImNsZWFyQW5ub3RhdGlvbnMiLCJpblRva2VuIiwid29yZFJhbmdlIiwic2V0VXNlV29ya2VyIiwidXNlV29ya2VyIiwiZ2V0VXNlV29ya2VyIiwiJHVzZVdvcmtlciIsIm9uUmVsb2FkVG9rZW5pemVyIiwiJG1vZGVJZCIsIiRvbkNoYW5nZU1vZGUiLCIkaXNQbGFjZWhvbGRlciIsIiRzdG9wV29ya2VyIiwiJHN0YXJ0V29ya2VyIiwiYXR0YWNoVG9TZXNzaW9uIiwid3JhcE1ldGhvZCIsIiR3cmFwTWV0aG9kIiwiZm9sZGluZ1J1bGVzIiwidGVybWluYXRlIiwiZ2V0TW9kZSIsIiRzY3JvbGxUb3AiLCJzZXRTY3JvbGxUb3AiLCJpc05hTiIsImdldFNjcm9sbFRvcCIsIiRzY3JvbGxMZWZ0Iiwic2V0U2Nyb2xsTGVmdCIsImdldFNjcm9sbExlZnQiLCJnZXRTY3JlZW5XaWR0aCIsIiRjb21wdXRlV2lkdGgiLCJnZXRMaW5lV2lkZ2V0TWF4V2lkdGgiLCJzY3JlZW5XaWR0aCIsImxpbmVXaWRnZXRzV2lkdGgiLCJ3IiwibGluZVdpZGdldFdpZHRoIiwiZm9yY2UiLCIkd3JhcExpbWl0IiwibG9uZ2VzdFNjcmVlbkxpbmUiLCJmb2xkSW5kZXgiLCJmb2xkU3RhcnQiLCIkZ2V0U3RyaW5nU2NyZWVuV2lkdGgiLCJ1bmRvQ2hhbmdlcyIsImRvbnRTZWxlY3QiLCJsYXN0VW5kb1JhbmdlIiwiJGdldFVuZG9TZWxlY3Rpb24iLCJmb2xkRGVsdGEiLCJyZWRvQ2hhbmdlcyIsInNldFVuZG9TZWxlY3QiLCJlbmFibGUiLCJpc1VuZG8iLCJmcm9tUmFuZ2UiLCJ0b1Bvc2l0aW9uIiwidG9SYW5nZSIsImNvbGxEaWZmIiwib2xkU3RhcnQiLCJuZXdTdGFydCIsImluZGVudFJvd3MiLCJpbmRlbnRTdHJpbmciLCJvdXRkZW50Um93cyIsInJvd1JhbmdlIiwiZGVsZXRlUmFuZ2UiLCIkbW92ZUxpbmVzIiwiZGlmZiIsIiRjbGlwUm93VG9Eb2N1bWVudCIsIk51bWJlciIsIk1BWF9WQUxVRSIsIm1vdmVMaW5lc1VwIiwibW92ZUxpbmVzRG93biIsImR1cGxpY2F0ZUxpbmVzIiwiJGNsaXBDb2x1bW5Ub1JvdyIsIiR3cmFwTGltaXRSYW5nZSIsInNldFVzZVdyYXBNb2RlIiwidXNlV3JhcE1vZGUiLCJnZXRVc2VXcmFwTW9kZSIsInNldFdyYXBMaW1pdFJhbmdlIiwiYWRqdXN0V3JhcExpbWl0IiwiZGVzaXJlZExpbWl0IiwiJHByaW50TWFyZ2luIiwibGltaXRzIiwid3JhcExpbWl0IiwiJGNvbnN0cmFpbldyYXBMaW1pdCIsImdldFdyYXBMaW1pdCIsInNldFdyYXBMaW1pdCIsImxpbWl0IiwiZ2V0V3JhcExpbWl0UmFuZ2UiLCJmb2xkTGluZUJlZm9yZSIsIndyYXBEYXRhIiwid2Fsa1Rva2VucyIsIiRnZXREaXNwbGF5VG9rZW5zIiwiUExBQ0VIT0xERVJfU1RBUlQiLCJQTEFDRUhPTERFUl9CT0RZIiwiJGNvbXB1dGVXcmFwU3BsaXRzIiwiZGlzcGxheUxlbmd0aCIsImxhc3RTcGxpdCIsImxhc3REb2NTcGxpdCIsImlzQ29kZSIsIiR3cmFwQXNDb2RlIiwiaW5kZW50ZWRTb2Z0V3JhcCIsIiRpbmRlbnRlZFNvZnRXcmFwIiwibWF4SW5kZW50IiwiYWRkU3BsaXQiLCJkaXNwbGF5ZWQiLCJpbmRlbnRhdGlvbiIsImdldFdyYXBJbmRlbnQiLCJtaW5TcGxpdCIsIm1heFNjcmVlbkNvbHVtbiIsInNjcmVlbkNvbHVtbiIsImdldFJvd0xlbmd0aCIsImdldFJvd0xpbmVDb3VudCIsImdldFJvd1dyYXBJbmRlbnQiLCJnZXRTY3JlZW5MYXN0Um93Q29sdW1uIiwiZG9jdW1lbnRUb1NjcmVlbkNvbHVtbiIsImdldERvY3VtZW50TGFzdFJvd0NvbHVtbiIsImRvY0NvbHVtbiIsImdldFJvd1NwbGl0RGF0YSIsInNjcmVlblRvRG9jdW1lbnRSb3ciLCJzY3JlZW5Ub0RvY3VtZW50Q29sdW1uIiwicm93TGVuZ3RoIiwiZG9DYWNoZSIsIm1heFJvdyIsImZvbGRTdGFydFJvdyIsIndyYXBSb3ciLCJzY3JlZW5Sb3dPZmZzZXQiLCJnZXRTY3JlZW5MZW5ndGgiLCJzY3JlZW5Sb3dzIiwiJGdldFdpZGdldFNjcmVlbkxlbmd0aCIsIiRzZXRGb250TWV0cmljcyIsImZtIiwiJGVuYWJsZVZhckNoYXIiLCJnZXRDaGFyYWN0ZXJXaWR0aCIsIndyYXAiLCIkd3JhcCIsImZpcnN0TGluZU51bWJlciIsInVzZVNvZnRUYWJzIiwiU2VhcmNoIiwiZmluZCIsIiRtYXRjaEl0ZXJhdG9yIiwic3IiLCJzYyIsImVyIiwiZWMiLCJza2lwQ3VycmVudCIsImZpbmRBbGwiLCJuZWVkbGUiLCIkYXNzZW1ibGVSZWdFeHAiLCIkaXNNdWx0aUxpbmUiLCJwcmV2UmFuZ2UiLCJyZXBsYWNlbWVudCIsInByZXNlcnZlQ2FzZSIsIiRkaXNhYmxlRmFrZU11bHRpbGluZSIsIndob2xlV29yZCIsIndvcmRCb3VuZGFyeSIsImFkZFdvcmRCb3VuZGFyeSIsIm1vZGlmaWVyIiwiY2FzZVNlbnNpdGl2ZSIsIiRhc3NlbWJsZU11bHRpbGluZVJlZ0V4cCIsImJhY2t3YXJkcyIsImZvckVhY2hJbkxpbmUiLCJIYXNoSGFuZGxlciIsImNvbW1hbmRLZXlCaW5kaW5nIiwiYWRkQ29tbWFuZHMiLCIkc2luZ2xlQ29tbWFuZCIsIk11bHRpSGFzaEhhbmRsZXIiLCJiaW5kS2V5IiwiaXNEZWZhdWx0IiwiYWRkQ29tbWFuZCIsInJlbW92ZUNvbW1hbmQiLCJfYnVpbGRLZXlIYXNoIiwia2VlcENvbW1hbmQiLCJja2IiLCJrZXlJZCIsImNtZEdyb3VwIiwia2V5UGFydCIsImNoYWluIiwiYmluZGluZyIsInBhcnNlS2V5cyIsIl9hZGRDb21tYW5kVG9CaW5kaW5nIiwicmVtb3ZlQ29tbWFuZHMiLCJiaW5kS2V5cyIsImtleUxpc3QiLCJmaW5kS2V5Q29tbWFuZCIsIiRrZXlDaGFpbiIsIkNvbW1hbmRNYW5hZ2VyIiwiYnlOYW1lIiwiaXNBdmFpbGFibGUiLCJ0b2dnbGVSZWNvcmRpbmciLCIkaW5SZXBsYXkiLCJyZWNvcmRpbmciLCJtYWNybyIsIiRhZGRDb21tYW5kVG9NYWNybyIsIm9sZE1hY3JvIiwicmVwbGF5IiwidHJpbU1hY3JvIiwibWFjIiwic2hvd1NldHRpbmdzTWVudSIsInNob3dFcnJvck1hcmtlciIsInNjcm9sbEludG9WaWV3IiwiY2VudGVyU2VsZWN0aW9uIiwicHJvbXB0IiwiZ290b0xpbmUiLCJtdWx0aVNlbGVjdEFjdGlvbiIsImdldEFsbFJhbmdlcyIsImZpbmROZXh0IiwiZmluZFByZXZpb3VzIiwiYWNlQ29tbWFuZEdyb3VwIiwibmF2aWdhdGVGaWxlU3RhcnQiLCJuYXZpZ2F0ZVVwIiwidGltZXMiLCJuYXZpZ2F0ZUZpbGVFbmQiLCJuYXZpZ2F0ZURvd24iLCJuYXZpZ2F0ZVdvcmRMZWZ0IiwibmF2aWdhdGVMaW5lU3RhcnQiLCJuYXZpZ2F0ZUxlZnQiLCJuYXZpZ2F0ZVdvcmRSaWdodCIsIm5hdmlnYXRlTGluZUVuZCIsIm5hdmlnYXRlUmlnaHQiLCJzZWxlY3RQYWdlRG93biIsInNjcm9sbFBhZ2VEb3duIiwiZ290b1BhZ2VEb3duIiwic2VsZWN0UGFnZVVwIiwic2Nyb2xsUGFnZVVwIiwiZ290b1BhZ2VVcCIsImp1bXBUb01hdGNoaW5nIiwiJGhhbmRsZVBhc3RlIiwiZHVwbGljYXRlU2VsZWN0aW9uIiwic29ydExpbmVzIiwibW9kaWZ5TnVtYmVyIiwiY29weUxpbmVzVXAiLCJjb3B5TGluZXNEb3duIiwicmVtb3ZlVG9MaW5lU3RhcnQiLCJyZW1vdmVUb0xpbmVFbmQiLCJyZW1vdmVXb3JkTGVmdCIsInJlbW92ZVdvcmRSaWdodCIsImJsb2NrT3V0ZGVudCIsImJsb2NrSW5kZW50Iiwic3BsaXRMaW5lIiwidHJhbnNwb3NlTGV0dGVycyIsInRyYW5zcG9zZVNlbGVjdGlvbnMiLCJmaXJzdExpbmVFbmRDb2wiLCJzZWxlY3RlZENvdW50IiwiaW5zZXJ0TGluZSIsImN1ckxpbmUiLCJuZXdSYW5nZXMiLCJleGl0TXVsdGlTZWxlY3RNb2RlIiwiZGVmYXVsdENvbW1hbmRzIiwiRWRpdG9yIiwiZ2V0Q29udGFpbmVyRWxlbWVudCIsImdldFRleHRBcmVhQ29udGFpbmVyIiwidGV4dGFyZWEiLCIkbW91c2VIYW5kbGVyIiwia2V5QmluZGluZyIsIiRzZWFyY2giLCIkaGlzdG9yeVRyYWNrZXIiLCIkaW5pdE9wZXJhdGlvbkxpc3RlbmVycyIsIl8kZW1pdElucHV0RXZlbnQiLCJzZXRTZXNzaW9uIiwic3RhcnRPcGVyYXRpb24iLCJlbmRPcGVyYXRpb24iLCIkb3BSZXNldFRpbWVyIiwiY3VyT3AiLCJkb2NDaGFuZ2VkIiwic2VsZWN0aW9uQ2hhbmdlZCIsInByZXZPcCIsImNvbW1hZEV2ZW50IiwicHJldmlvdXNDb21tYW5kIiwic2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXciLCJhbmltYXRlU2Nyb2xsaW5nIiwiJG1lcmdlYWJsZUNvbW1hbmRzIiwiJG1lcmdlVW5kb0RlbHRhcyIsInByZXYiLCJtZXJnZWFibGVDb21tYW5kcyIsInNob3VsZE1lcmdlIiwibWVyZ2VOZXh0Q29tbWFuZCIsInNlcXVlbmNlU3RhcnRUaW1lIiwia2V5Ym9hcmRIYW5kbGVyIiwiJGtleWJpbmRpbmdJZCIsImhhbmRsZXIiLCJvbGRTZXNzaW9uIiwiJG9uRG9jdW1lbnRDaGFuZ2UiLCIkb25Ub2tlbml6ZXJVcGRhdGUiLCIkb25DaGFuZ2VUYWJTaXplIiwiJG9uQ2hhbmdlV3JhcExpbWl0IiwiJG9uQ2hhbmdlV3JhcE1vZGUiLCIkb25DaGFuZ2VGb2xkIiwiJG9uQ2hhbmdlRnJvbnRNYXJrZXIiLCIkb25DaGFuZ2VCYWNrTWFya2VyIiwiJG9uQ2hhbmdlQnJlYWtwb2ludCIsIiRvbkNoYW5nZUFubm90YXRpb24iLCIkb25DdXJzb3JDaGFuZ2UiLCIkb25TY3JvbGxUb3BDaGFuZ2UiLCIkb25TY3JvbGxMZWZ0Q2hhbmdlIiwiJG9uU2VsZWN0aW9uQ2hhbmdlIiwib25Eb2N1bWVudENoYW5nZSIsIm9uQ2hhbmdlTW9kZSIsIm9uVG9rZW5pemVyVXBkYXRlIiwib25DaGFuZ2VUYWJTaXplIiwib25DaGFuZ2VXcmFwTGltaXQiLCJvbkNoYW5nZVdyYXBNb2RlIiwib25DaGFuZ2VGcm9udE1hcmtlciIsIm9uQ2hhbmdlQmFja01hcmtlciIsIm9uQ2hhbmdlQnJlYWtwb2ludCIsIm9uQ2hhbmdlQW5ub3RhdGlvbiIsIm9uQ3Vyc29yQ2hhbmdlIiwib25TY3JvbGxUb3BDaGFuZ2UiLCJvblNjcm9sbExlZnRDaGFuZ2UiLCJvblNlbGVjdGlvbkNoYW5nZSIsInVwZGF0ZUZ1bGwiLCJvbGRFZGl0b3IiLCJnZXRTZXNzaW9uIiwiY3Vyc29yUG9zIiwicmVzaXplIiwib25SZXNpemUiLCJzZXRUaGVtZSIsInRoZW1lIiwiZ2V0VGhlbWUiLCJnZXRGb250U2l6ZSIsInNldEZvbnRTaXplIiwiJGhpZ2hsaWdodEJyYWNrZXRzIiwiJGJyYWNrZXRIaWdobGlnaHQiLCIkaGlnaGxpZ2h0UGVuZGluZyIsImdldE1hdGNoaW5nIiwiJGhpZ2hsaWdodFRhZ3MiLCIkaGlnaGxpZ2h0VGFnUGVuZGluZyIsIiR0YWdIaWdobGlnaHQiLCJwcmV2VG9rZW4iLCJzYm0iLCIkaXNGb2N1c2VkIiwic2hvd0N1cnNvciIsInZpc3VhbGl6ZUZvY3VzIiwiaGlkZUN1cnNvciIsInZpc3VhbGl6ZUJsdXIiLCIkY3Vyc29yQ2hhbmdlIiwidXBkYXRlQ3Vyc29yIiwidXBkYXRlTGluZXMiLCIkdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSIsInNjcm9sbFRvWSIsInNjcm9sbFRvWCIsIiRoaWdobGlnaHRBY3RpdmVMaW5lIiwiJHNlbGVjdGlvblN0eWxlIiwiJG1heExpbmVzIiwiJG1pbkxpbmVzIiwiJGhpZ2hsaWdodExpbmVNYXJrZXIiLCIkc2VsZWN0aW9uTWFya2VyIiwiJGhpZ2hsaWdodFNlbGVjdGVkV29yZCIsIiRnZXRTZWxlY3Rpb25IaWdoTGlnaHRSZWdleHAiLCJzdGFydE91dGVyIiwiZW5kT3V0ZXIiLCJsaW5lQ29scyIsInVwZGF0ZUZyb250TWFya2VycyIsInVwZGF0ZUJhY2tNYXJrZXJzIiwidXBkYXRlQnJlYWtwb2ludHMiLCJ1cGRhdGVUZXh0IiwiZ2V0U2VsZWN0ZWRUZXh0IiwiaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSIsImdldEJlaGF2aW91cnNFbmFibGVkIiwidHJhbnNmb3JtIiwiJG1lcmdlTmV4dENvbW1hbmQiLCJkIiwibGluZVN0YXRlIiwic2hvdWxkT3V0ZGVudCIsImxpbmVJbmRlbnQiLCJzZXRTY3JvbGxTcGVlZCIsImdldFNjcm9sbFNwZWVkIiwic2V0RHJhZ0RlbGF5Iiwic2V0U2VsZWN0aW9uU3R5bGUiLCJzZXRIaWdobGlnaHRBY3RpdmVMaW5lIiwic2hvdWxkSGlnaGxpZ2h0IiwiZ2V0SGlnaGxpZ2h0QWN0aXZlTGluZSIsInNldEhpZ2hsaWdodEd1dHRlckxpbmUiLCJnZXRIaWdobGlnaHRHdXR0ZXJMaW5lIiwic2V0SGlnaGxpZ2h0U2VsZWN0ZWRXb3JkIiwiZ2V0SGlnaGxpZ2h0U2VsZWN0ZWRXb3JkIiwic2V0QW5pbWF0ZWRTY3JvbGwiLCJzaG91bGRBbmltYXRlIiwiZ2V0QW5pbWF0ZWRTY3JvbGwiLCJzZXREaXNwbGF5SW5kZW50R3VpZGVzIiwiZ2V0RGlzcGxheUluZGVudEd1aWRlcyIsInNldFNob3dQcmludE1hcmdpbiIsInNob3dQcmludE1hcmdpbiIsImdldFNob3dQcmludE1hcmdpbiIsInNldFByaW50TWFyZ2luQ29sdW1uIiwiZ2V0UHJpbnRNYXJnaW5Db2x1bW4iLCJzZXRCZWhhdmlvdXJzRW5hYmxlZCIsImVuYWJsZWQiLCJzZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQiLCJzZXRTaG93Rm9sZFdpZGdldHMiLCJnZXRTaG93Rm9sZFdpZGdldHMiLCJzZXRGYWRlRm9sZFdpZGdldHMiLCJmYWRlIiwiZ2V0RmFkZUZvbGRXaWRnZXRzIiwibmV3X3JhbmdlIiwic3dhcCIsIm9yaWdpbmFsUmFuZ2UiLCIkZ2V0U2VsZWN0ZWRSb3dzIiwiZ2V0TnVtYmVyQXQiLCJfbnVtYmVyUngiLCJhbW91bnQiLCJjaGFyUmFuZ2UiLCJpc0Zpbml0ZSIsIm5yIiwiZnAiLCJkZWNpbWFscyIsIm5uciIsInRvRml4ZWQiLCJyZXBsYWNlUmFuZ2UiLCJzZWwiLCJlbmRQb2ludCIsIm1vdmVkIiwidG90YWxEaWZmIiwicmFuZ2VJbmRleCIsInN1YlJvd3MiLCJzaG93Q29tcG9zaXRpb24iLCJzZXRDb21wb3NpdGlvblRleHQiLCJoaWRlQ29tcG9zaXRpb24iLCJnZXRGaXJzdFZpc2libGVSb3ciLCJnZXRMYXN0VmlzaWJsZVJvdyIsImlzUm93VmlzaWJsZSIsImlzUm93RnVsbHlWaXNpYmxlIiwiZ2V0Rmlyc3RGdWxseVZpc2libGVSb3ciLCJnZXRMYXN0RnVsbHlWaXNpYmxlUm93IiwiJGdldFZpc2libGVSb3dDb3VudCIsImdldFNjcm9sbEJvdHRvbVJvdyIsImdldFNjcm9sbFRvcFJvdyIsIiRtb3ZlQnlQYWdlIiwic2Nyb2xsVG9Sb3ciLCJzY3JvbGxUb0xpbmUiLCJjZW50ZXIiLCJhbmltYXRlIiwiYWxpZ25DdXJzb3IiLCJnZXRDdXJzb3JQb3NpdGlvblNjcmVlbiIsImV4cGFuZCIsIm1hdGNoVHlwZSIsImJyYWNrZXRUeXBlIiwiZm91bmQiLCJicmFja2V0cyIsImxpbmVOdW1iZXIiLCJuYXZpZ2F0ZVRvIiwicmVwbGFjZWQiLCIkdHJ5UmVwbGFjZSIsInJlcGxhY2VBbGwiLCJnZXRMYXN0U2VhcmNoT3B0aW9ucyIsIm5ld1JhbmdlIiwicHJldmVudFNjcm9sbCIsInJldmVhbFJhbmdlIiwic2V0QXV0b1Njcm9sbEVkaXRvckludG9WaWV3Iiwic2hvdWxkU2Nyb2xsIiwiJHNjcm9sbEFuY2hvciIsInNjcm9sbEFuY2hvciIsIm9uQ2hhbmdlU2VsZWN0aW9uIiwib25CZWZvcmVSZW5kZXIiLCJvbkFmdGVyUmVuZGVyIiwic2VhcmNoQm94IiwiJHBpeGVsUG9zIiwiJHJlc2V0Q3Vyc29yU3R5bGUiLCIkY3Vyc29yU3R5bGUiLCJjdXJzb3JMYXllciIsInNldFNtb290aEJsaW5raW5nIiwiaXNCbGlua2luZyIsInNlbGVjdGlvblN0eWxlIiwiaGlnaGxpZ2h0QWN0aXZlTGluZSIsImhpZ2hsaWdodFNlbGVjdGVkV29yZCIsImJlaGF2aW91cnNFbmFibGVkIiwid3JhcEJlaGF2aW91cnNFbmFibGVkIiwiYXV0b1Njcm9sbEVkaXRvckludG9WaWV3Iiwia2V5YmluZGluZ0lkIiwiaFNjcm9sbEJhckFsd2F5c1Zpc2libGUiLCJ2U2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSIsImhpZ2hsaWdodEd1dHRlckxpbmUiLCJhbmltYXRlZFNjcm9sbCIsInByaW50TWFyZ2luQ29sdW1uIiwicHJpbnRNYXJnaW4iLCJmYWRlRm9sZFdpZGdldHMiLCJzaG93Rm9sZFdpZGdldHMiLCJzaG93TGluZU51bWJlcnMiLCJzaG93R3V0dGVyIiwiZGlzcGxheUluZGVudEd1aWRlcyIsImZvbnRTaXplIiwiZm9udEZhbWlseSIsIm1heExpbmVzIiwibWluTGluZXMiLCJzY3JvbGxQYXN0RW5kIiwiZml4ZWRXaWR0aEd1dHRlciIsImZvbGRTdHlsZSIsIlVuZG9NYW5hZ2VyIiwiJHNlcmlhbGl6ZURlbHRhIiwiJGRlc2VyaWFsaXplRGVsdGEiLCJjbG9uZURlbHRhU2V0c09iaiIsImRlbHRhU2V0c19vbGQiLCJmbkdldE1vZGlmaWVkRGVsdGEiLCJkZWx0YVNldHNfbmV3IiwiZGVsdGFTZXRfb2xkIiwiZGVsdGFTZXRfbmV3IiwiZGVsdGFfb2xkIiwiZGVsdGFTZXRzIiwiJGRvYyIsImhhc1VuZG8iLCJkaXJ0eUNvdW50ZXIiLCIkdW5kb1N0YWNrIiwiJHJlZG9TdGFjayIsIk5hTiIsInVuZG9TZWxlY3Rpb25SYW5nZSIsInJlZG9TZWxlY3Rpb25SYW5nZSIsIiRkZXNlcmlhbGl6ZURlbHRhcyIsImhhc1JlZG8iLCJtYXJrQ2xlYW4iLCJpc0NsZWFuIiwiJHNlcmlhbGl6ZURlbHRhcyIsIkd1dHRlciIsInBhcmVudEVsIiwiJHNob3dGb2xkV2lkZ2V0cyIsImd1dHRlcldpZHRoIiwiJHVwZGF0ZUFubm90YXRpb25zIiwiJGNlbGxzIiwicm93SW5mbyIsImFubm9UZXh0IiwiZ3V0dGVyT2Zmc2V0IiwiYnJlYWtwb2ludHMiLCJkZWNvcmF0aW9ucyIsIiRmaXJzdExpbmVOdW1iZXIiLCJsYXN0TGluZU51bWJlciIsImd1dHRlclJlbmRlcmVyIiwiJHJlbmRlcmVyIiwiY2VsbCIsInRleHROb2RlIiwiZm9sZFdpZGdldCIsImdldFRleHQiLCJtaW5IZWlnaHQiLCIkZml4ZWRXaWR0aCIsInBhZGRpbmciLCIkcGFkZGluZyIsIiRjb21wdXRlUGFkZGluZyIsImNlaWwiLCIkc2hvd0xpbmVOdW1iZXJzIiwic2V0U2hvd0xpbmVOdW1iZXJzIiwiZ2V0U2hvd0xpbmVOdW1iZXJzIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJNYXJrZXIiLCJzZXRQYWRkaW5nIiwic2V0TWFya2VycyIsIiRnZXRUb3AiLCJkcmF3RnVsbExpbmVNYXJrZXIiLCJkcmF3U2NyZWVuTGluZU1hcmtlciIsImRyYXdUZXh0TWFya2VyIiwiZHJhd011bHRpTGluZU1hcmtlciIsImRyYXdCaWRpU2luZ2xlTGluZU1hcmtlciIsImZpcnN0Um93U2NyZWVuIiwic3RyaW5nQnVpbGRlciIsImV4dHJhU3R5bGUiLCJjdXJyIiwiY2xhenpNb2RpZmllZCIsImxpbmVSYW5nZSIsInJhbmdlMSIsInJhZGl1c0NsYXNzIiwiZXh0cmFMZW5ndGgiLCJUZXh0IiwiJHVwZGF0ZUVvbENoYXIiLCJFT0ZfQ0hBUiIsIkVPTF9DSEFSX0xGIiwiRU9MX0NIQVJfQ1JMRiIsIkVPTF9DSEFSIiwiVEFCX0NIQVIiLCJTUEFDRV9DSEFSIiwiZ2V0TGluZUhlaWdodCIsIiRmb250TWV0cmljcyIsIm1lYXN1cmUiLCIkcG9sbFNpemVDaGFuZ2VzIiwiY2hlY2tGb3JTaXplQ2hhbmdlcyIsIiRwb2xsU2l6ZUNoYW5nZXNUaW1lciIsIiRjb21wdXRlVGFiU3RyaW5nIiwiJHRhYlN0cmluZ3MiLCJ0YWJTdHIiLCIkaW5kZW50R3VpZGVSZSIsInNwYWNlQ2xhc3MiLCJ0YWJDbGFzcyIsInNwYWNlQ29udGVudCIsInRhYkNvbnRlbnQiLCJzY3JvbGxMaW5lcyIsImxpbmVFbGVtZW50cyIsImNoaWxkTm9kZXMiLCJsaW5lRWxlbWVudHNJZHgiLCJsaW5lRWxlbWVudCIsIiRyZW5kZXJMaW5lIiwiJHVzZUxpbmVHcm91cHMiLCJvbGRDb25maWciLCJsYXN0Q2hpbGQiLCJmcmFnbWVudCIsIiRyZW5kZXJMaW5lc0ZyYWdtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsIiR0ZXh0VG9rZW4iLCIkcmVuZGVyVG9rZW4iLCJvdXRwdXQiLCJ0YWJJZHgiLCJpZHg0IiwiY2xhc3NUb1VzZSIsInNwYWNlIiwicmVuZGVySW5kZW50R3VpZGUiLCJjb2xzIiwiJHJlbmRlcldyYXBwZWRMaW5lIiwib25seUNvbnRlbnRzIiwic3BsaXRDaGFycyIsIiRyZW5kZXJTaW1wbGVMaW5lIiwiJGdldEZvbGRMaW5lVG9rZW5zIiwicmVuZGVyVG9rZW5zIiwiYWRkVG9rZW5zIiwiJG1lYXN1cmVOb2RlIiwiaXNJRTgiLCJDdXJzb3IiLCJpc1Zpc2libGUiLCJibGlua0ludGVydmFsIiwic21vb3RoQmxpbmtpbmciLCJjdXJzb3JzIiwiYWRkQ3Vyc29yIiwiJHVwZGF0ZUN1cnNvcnMiLCIkdXBkYXRlVmlzaWJpbGl0eSIsIiR1cGRhdGVPcGFjaXR5IiwidmlzaWJpbGl0eSIsImJsaW5raW5nIiwicmVzdGFydFRpbWVyIiwic2V0QmxpbmtJbnRlcnZhbCIsInJlbW92ZUN1cnNvciIsImludGVydmFsSWQiLCJ0aW1lb3V0SWQiLCJibGluayIsImdldFBpeGVsUG9zaXRpb24iLCJvblNjcmVlbiIsIiRzZWxlY3Rpb25NYXJrZXJzIiwiY3Vyc29ySW5kZXgiLCJwaXhlbFBvcyIsImRyYXdDdXJzb3IiLCIkc2V0T3ZlcndyaXRlIiwiTUFYX1NDUk9MTF9IIiwiU2Nyb2xsQmFyIiwicGFyZW50IiwiY2xhc3NTdWZmaXgiLCJzZXRWaXNpYmxlIiwic2tpcEV2ZW50Iiwib25TY3JvbGwiLCJjb2VmZiIsIlZTY3JvbGxCYXIiLCJzY3JvbGxIZWlnaHQiLCIkc2Nyb2xsYmFyV2lkdGgiLCIkbWluV2lkdGgiLCJzZXRIZWlnaHQiLCJzZXRJbm5lckhlaWdodCIsInNldFNjcm9sbEhlaWdodCIsIkhTY3JvbGxCYXIiLCJzZXRXaWR0aCIsInNldElubmVyV2lkdGgiLCJzZXRTY3JvbGxXaWR0aCIsIlNjcm9sbEJhclYiLCJTY3JvbGxCYXJIIiwiUmVuZGVyTG9vcCIsIm9uUmVuZGVyIiwicGVuZGluZyIsImNoYW5nZXMiLCJjaGFuZ2UiLCJDSEFSX0NPVU5UIiwiRm9udE1ldHJpY3MiLCIkc2V0TWVhc3VyZU5vZGVTdHlsZXMiLCIkbWFpbiIsIiR0ZXN0RnJhY3Rpb25hbFJlY3QiLCJpc1Jvb3QiLCJ3aGl0ZVNwYWNlIiwiZm9udCIsIiRtZWFzdXJlU2l6ZXMiLCJmb250V2VpZ2h0IiwiYm9sZFNpemUiLCJjaGFyU2l6ZXMiLCJhbGxvd0JvbGRGb250cyIsInNldFBvbGxpbmciLCJHdXR0ZXJMYXllciIsIk1hcmtlckxheWVyIiwiVGV4dExheWVyIiwiQ3Vyc29yTGF5ZXIiLCJWaXJ0dWFsUmVuZGVyZXIiLCJjb250ZW50Iiwib25HdXR0ZXJSZXNpemUiLCIkbWFya2VyQmFjayIsInRleHRMYXllciIsIiR0ZXh0TGF5ZXIiLCJjYW52YXMiLCIkbWFya2VyRnJvbnQiLCIkaG9yaXpTY3JvbGwiLCIkdlNjcm9sbCIsInNjcm9sbEJhciIsIiRzY3JvbGxBbmltYXRpb24iLCJzY3JvbGxNYXJnaW4iLCJ1cGRhdGVDaGFyYWN0ZXJTaXplIiwiJHNpemUiLCJzY3JvbGxlckhlaWdodCIsInNjcm9sbGVyV2lkdGgiLCIkZGlydHkiLCJtYXhIZWlnaHQiLCJ2IiwiJGxvb3AiLCIkcmVuZGVyQ2hhbmdlcyIsIkNIQU5HRV9GVUxMIiwiQ0hBTkdFX0NVUlNPUiIsIkNIQU5HRV9NQVJLRVIiLCJDSEFOR0VfR1VUVEVSIiwiQ0hBTkdFX1NDUk9MTCIsIkNIQU5HRV9MSU5FUyIsIkNIQU5HRV9URVhUIiwiQ0hBTkdFX1NJWkUiLCJDSEFOR0VfTUFSS0VSX0JBQ0siLCJDSEFOR0VfTUFSS0VSX0ZST05UIiwiQ0hBTkdFX0hfU0NST0xMIiwiJGFsbG93Qm9sZEZvbnRzIiwiJHVwZGF0ZVByaW50TWFyZ2luIiwib25DaGFuZ2VOZXdMaW5lTW9kZSIsIiRjaGFuZ2VkTGluZXMiLCJ1cGRhdGVGb250U2l6ZSIsIiRjaGFuZ2VzIiwiJHVwZGF0ZVNpemVBc3luYyIsInJlc2l6aW5nIiwic2Nyb2xsV2lkdGgiLCIkdXBkYXRlQ2FjaGVkU2l6ZSIsIiRleHRyYUhlaWdodCIsIm9sZFNpemUiLCIkc2hvd0d1dHRlciIsIiRjb21wdXRlTGF5ZXJDb25maWciLCJhdmFpbGFibGVXaWR0aCIsIiRzaG93UHJpbnRNYXJnaW4iLCIkcHJpbnRNYXJnaW5Db2x1bW4iLCIkYW5pbWF0ZWRTY3JvbGwiLCJnZXRTaG93R3V0dGVyIiwic2V0U2hvd0d1dHRlciIsIiR1cGRhdGVHdXR0ZXJMaW5lSGlnaGxpZ2h0IiwiJGd1dHRlckxpbmVIaWdobGlnaHQiLCIkcHJpbnRNYXJnaW5FbCIsImNvbnRhaW5lckVsIiwicG9zVG9wIiwicG9zTGVmdCIsIiRjb21wb3NpdGlvbiIsInNldFNjcm9sbE1hcmdpbiIsInNtIiwiZ2V0SFNjcm9sbEJhckFsd2F5c1Zpc2libGUiLCIkaFNjcm9sbEJhckFsd2F5c1Zpc2libGUiLCJzZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSIsImFsd2F5c1Zpc2libGUiLCJnZXRWU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSIsIiR2U2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSIsInNldFZTY3JvbGxCYXJBbHdheXNWaXNpYmxlIiwiJHVwZGF0ZVNjcm9sbEJhclYiLCIkc2Nyb2xsUGFzdEVuZCIsIiR1cGRhdGVTY3JvbGxCYXJIIiwiJGZyb3plbiIsInVuZnJlZXplIiwic3QiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwiJGhpZ2hsaWdodEd1dHRlckxpbmUiLCIkdXBkYXRlTGluZXMiLCIkYXV0b3NpemUiLCJkZXNpcmVkSGVpZ2h0IiwiJG1heFBpeGVsSGVpZ2h0IiwiJGd1dHRlcldpZHRoIiwiaGlkZVNjcm9sbGJhcnMiLCJsb25nZXN0TGluZSIsIiRnZXRMb25nZXN0TGluZSIsImhvcml6U2Nyb2xsIiwiaFNjcm9sbENoYW5nZWQiLCJ2U2Nyb2xsQmVmb3JlIiwidlNjcm9sbENoYW5nZWQiLCJmaXJzdFJvd0hlaWdodCIsImxpbmVDb3VudCIsImNoYXJDb3VudCIsIiR2aWV3TWFyZ2luIiwidG9wTWFyZ2luIiwiYm90dG9tTWFyZ2luIiwiYWxpZ25tZW50IiwiU1RFUFMiLCIkY2FsY1N0ZXBzIiwiZnJvbVZhbHVlIiwidG9WYWx1ZSIsInhfbWluIiwic3RlcHMiLCJpbml0aWFsU2Nyb2xsIiwib2xkU3RlcHMiLCIkdGltZXIiLCJzY3JvbGxUbyIsImNhbnZhc1BvcyIsInRleHRUb1NjcmVlbkNvb3JkaW5hdGVzIiwicGFnZVgiLCJwYWdlWSIsImtlZXBUZXh0QXJlYUF0Q3Vyc29yIiwiJHRoZW1lSWQiLCJjc3NDbGFzcyIsIiR0aGVtZSIsImlzRGFyayIsInNldE1vdXNlQ3Vyc29yIiwibWF4UGl4ZWxIZWlnaHQiLCJ3b3JrZXJVcmwiLCJibG9iIiwiQmxvYiIsImJsb2JCdWlsZGVyIiwiQmxvYkJ1aWxkZXIiLCJXZWJLaXRCbG9iQnVpbGRlciIsIk1vekJsb2JCdWlsZGVyIiwiZ2V0QmxvYiIsIiR3b3JrZXJCbG9iIiwiYmxvYlVSTCIsIlVSTCIsIndlYmtpdFVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIldvcmtlciIsIldvcmtlckNsaWVudCIsInRvcExldmVsTmFtZXNwYWNlcyIsImNsYXNzbmFtZSIsImltcG9ydFNjcmlwdHMiLCIkc2VuZERlbHRhUXVldWUiLCJjaGFuZ2VMaXN0ZW5lciIsIm9uTWVzc2FnZSIsIm5hbWVUb1VybCIsInRvVXJsIiwibm9ybWFsaXplUGF0aCIsIiRub3JtYWxpemVQYXRoIiwidGxucyIsImNhbGxiYWNrSWQiLCJjYWxsYmFja3MiLCJvbm1lc3NhZ2UiLCJlcnIiLCJkZWx0YVF1ZXVlIiwiY21kIiwiZW1pdCIsImV4IiwiYXR0YWNoVG9Eb2N1bWVudCIsInEiLCJVSVdvcmtlckNsaWVudCIsIm1lc3NhZ2VCdWZmZXIiLCJtYWluIiwiZW1pdFN5bmMiLCJzZW5kZXIiLCJwcm9jZXNzTmV4dCIsInNldEVtaXRTeW5jIiwiTWFpbiIsIlBsYWNlSG9sZGVyIiwib3RoZXJzIiwibWFpbkNsYXNzIiwib3RoZXJzQ2xhc3MiLCIkb25VcGRhdGUiLCJvblVwZGF0ZSIsIiRvdGhlcnMiLCJ1bmRvU3RhY2siLCIkdW5kb3N0YWNrIiwiJHVuZG9TdGFja0RlcHRoIiwic2V0dXAiLCJzZWxlY3Rpb25CZWZvcmUiLCJvdGhlciIsInNob3dPdGhlck1hcmtlcnMiLCJvdGhlcnNBY3RpdmUiLCJoaWRlT3RoZXJNYXJrZXJzIiwidXBkYXRlQW5jaG9ycyIsImxlbmd0aERpZmYiLCJpbk1haW5SYW5nZSIsImRpc3RhbmNlRnJvbVN0YXJ0IiwibmV3UG9zIiwib3RoZXJQb3MiLCJ1cGRhdGVNYXJrZXJzIiwidXBkYXRlTWFya2VyIiwidW5kb3NSZXF1aXJlZCIsImlzU2FtZVBvaW50IiwiYWx0IiwiY3RybCIsImFjY2VsIiwic2VsZWN0aW9uTW9kZSIsImlzTXVsdGlTZWxlY3QiLCJtb3VzZVgiLCJtb3VzZVkiLCJzY3JlZW5BbmNob3IiLCJzY3JlZW5DdXJzb3IiLCIkZW5hYmxlSnVtcFRvRGVmIiwiJGJsb2NrU2VsZWN0RW5hYmxlZCIsImFkZFNlbGVjdGlvbk1hcmtlciIsIm9sZFJhbmdlIiwicmVtb3ZlU2VsZWN0aW9uTWFya2VyIiwidG1wU2VsIiwicmVjdFNlbCIsInJlbW92ZVNlbGVjdGlvbk1hcmtlcnMiLCJuZXdDdXJzb3IiLCJyZWN0YW5ndWxhclJhbmdlQmxvY2siLCJ1cGRhdGVTZWxlY3Rpb25NYXJrZXJzIiwib25TZWxlY3Rpb25JbnRlcnZhbCIsInNlbGVjdE1vcmVMaW5lcyIsInNlbGVjdE1vcmUiLCJzcGxpdEludG9MaW5lcyIsImFsaWduQ3Vyc29ycyIsIm11bHRpU2VsZWN0Q29tbWFuZHMiLCJnZXRTZWxlY3Rpb25NYXJrZXJzIiwiJGJsb2NrQ2hhbmdlRXZlbnRzIiwiJG9uQWRkUmFuZ2UiLCIkb25SZW1vdmVSYW5nZSIsIm1lcmdlT3ZlcmxhcHBpbmdSYW5nZXMiLCJsYXN0UmFuZ2UiLCIkaW5pdFJhbmdlTGlzdCIsInRvZ2dsZUJsb2NrU2VsZWN0aW9uIiwiaW5jbHVkZUVtcHR5TGluZXMiLCJ4QmFja3dhcmRzIiwic3RhcnRPZmZzZXRYIiwiZW5kT2Zmc2V0WCIsInlCYWNrd2FyZHMiLCJkb2NFbmQiLCJNdWx0aVNlbGVjdCIsIiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZSIsIiRvbk11bHRpU2VsZWN0IiwiJG9uU2luZ2xlU2VsZWN0Iiwib25TZXNzaW9uQ2hhbmdlIiwiJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UiLCJhbHRDdXJzb3IiLCJhbHREb3duIiwiYWRkQWx0Q3Vyc29yTGlzdGVuZXJzIiwic2VsZWN0aW9uTWFya2VyQ291bnQiLCJtYXJrZXJMaXN0IiwiJG9uTXVsdGlTZWxlY3RFeGVjIiwiaW5WaXJ0dWFsTW9kZSIsImZvckVhY2hTZWxlY3Rpb24iLCJrZWVwT3JkZXIiLCIkYnlMaW5lcyIsInJlZyIsImNtZFJlc3VsdCIsImFuaW0iLCJidWYiLCJubCIsImFkZGl0aXZlIiwic2tpcCIsInNjcmVlbkxlYWQiLCJ0b1JlbW92ZSIsIndvcmRzIiwic3RvcEF0Rmlyc3QiLCJzYW1lUm93UmFuZ2VzIiwibWF4Q29sIiwibWluU3BhY2UiLCJzcGFjZU9mZnNldHMiLCJzcGFjZU9mZnNldCIsImZyIiwibHIiLCJndWVzc1JhbmdlIiwiJHJlQWxpZ25UZXh0IiwiZm9yY2VMZWZ0Iiwic3RhcnRXIiwidGV4dFciLCJlbmRXIiwiaXNMZWZ0QWxpZ25lZCIsImlzUmlnaHRBbGlnbmVkIiwiYWxpZ25MZWZ0IiwiZW5hYmxlTXVsdGlzZWxlY3QiLCJlbmFibGVCbG9ja1NlbGVjdCIsIkZvbGRNb2RlIiwiZm9sZGluZ1N0YXJ0TWFya2VyIiwiZm9sZGluZ1N0b3BNYXJrZXIiLCJpbmRlbnRhdGlvbkJsb2NrIiwic3RhcnRMZXZlbCIsIm9wZW5pbmdCcmFja2V0QmxvY2siLCJjbG9zaW5nQnJhY2tldEJsb2NrIiwiTGluZVdpZGdldHMiLCJ3aWRnZXRNYW5hZ2VyIiwidXBkYXRlT25DaGFuZ2UiLCJyZW5kZXJXaWRnZXRzIiwibWVhc3VyZVdpZGdldHMiLCJfY2hhbmdlZFdpZGdldHMiLCIkb25DaGFuZ2VFZGl0b3IiLCJ1cGRhdGVPbkZvbGQiLCJoaWRkZW4iLCJfaW5Eb2N1bWVudCIsInJlbW92ZUxpbmVXaWRnZXQiLCIkdXBkYXRlUm93cyIsIm5vV2lkZ2V0cyIsIiRvbGRXaWRnZXQiLCJhZGRMaW5lV2lkZ2V0IiwiekluZGV4IiwiY292ZXJHdXR0ZXIiLCJwaXhlbEhlaWdodCIsIiRmb2xkIiwib25XaWRnZXRDaGFuZ2VkIiwidzEiLCJnZXRXaWRnZXRzQXRSb3ciLCJjaGFuZ2VkV2lkZ2V0cyIsImZpeGVkV2lkdGgiLCJjb3ZlckxpbmUiLCJmdWxsV2lkdGgiLCJvbGRXaWRnZXQiLCJndXR0ZXJBbm5vIiwiY29tcGFyYXRvciIsImJpbmFyeVNlYXJjaCIsIm1hdGNoZWQiLCJmaW5kQW5ub3RhdGlvbnMiLCJhcnJvdyIsIm9ubW91c2Vkb3duIiwiUmVuZGVyZXIiLCJlZGl0IiwiX2lkIiwiZ2V0RWxlbWVudEJ5SWQiLCJlbnYiLCJ0YWdOYW1lIiwib2xkTm9kZSIsImNyZWF0ZUVkaXRTZXNzaW9uIiwidmVyc2lvbiJdLCJzb3VyY2VSb290IjoiIn0=