htmgo/framework/assets/dist/htmgo.js
2024-09-30 16:32:12 -05:00

3 lines
No EOL
478 KiB
JavaScript

var re=function(){let htmx={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){return getInputValues(e,t||"post").values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:!0,historyCacheSize:10,refreshOnHistoryMiss:!1,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:!0,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:!0,allowScriptTags:!0,inlineScriptNonce:"",inlineStyleNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:!1,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",scrollBehavior:"instant",defaultFocusScroll:!1,getCacheBusterParam:!1,globalViewTransitions:!1,methodsThatUseUrlParams:["get","delete"],selfRequestsOnly:!0,ignoreTitle:!1,scrollIntoViewOnBoost:!0,triggerSpecsCache:null,disableInheritance:!1,responseHandling:[{code:"204",swap:!1},{code:"[23]..",swap:!0},{code:"[45]..",swap:!1,error:!0}],allowNestedOobSwaps:!0},parseInterval:null,_:null,version:"2.0.2"};htmx.onLoad=onLoadHelper,htmx.process=processNode,htmx.on=addEventListenerImpl,htmx.off=removeEventListenerImpl,htmx.trigger=triggerEvent,htmx.ajax=ajaxHelper,htmx.find=find,htmx.findAll=findAll,htmx.closest=closest,htmx.remove=removeElement,htmx.addClass=addClassToElement,htmx.removeClass=removeClassFromElement,htmx.toggleClass=toggleClassOnElement,htmx.takeClass=takeClassForElement,htmx.swap=swap,htmx.defineExtension=defineExtension,htmx.removeExtension=removeExtension,htmx.logAll=logAll,htmx.logNone=logNone,htmx.parseInterval=parseInterval,htmx._=internalEval;let internalAPI={addTriggerHandler,bodyContains,canAccessLocalStorage,findThisElement,filterValues,swap,hasAttribute,getAttributeValue,getClosestAttributeValue,getClosestMatch,getExpressionVars,getHeaders,getInputValues,getInternalData,getSwapSpecification,getTriggerSpecs,getTarget,makeFragment,mergeObjects,makeSettleInfo,oobSwap,querySelectorExt,settleImmediately,shouldCancel,triggerEvent,triggerErrorEvent,withExtensions},VERBS=["get","post","put","delete","patch"],VERB_SELECTOR=VERBS.map(function(e){return "[hx-"+e+"], [data-hx-"+e+"]"}).join(", "),HEAD_TAG_REGEX=makeTagRegEx("head");function makeTagRegEx(e,t=!1){return new RegExp(`<${e}(\\s[^>]*>|>)([\\s\\S]*?)<\\/${e}>`,t?"gim":"im")}function parseInterval(e){if(e==null)return;let t=NaN;return e.slice(-2)=="ms"?t=parseFloat(e.slice(0,-2)):e.slice(-1)=="s"?t=parseFloat(e.slice(0,-1))*1e3:e.slice(-1)=="m"?t=parseFloat(e.slice(0,-1))*1e3*60:t=parseFloat(e),isNaN(t)?void 0:t}function getRawAttribute(e,t){return e instanceof Element&&e.getAttribute(t)}function hasAttribute(e,t){return !!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function getAttributeValue(e,t){return getRawAttribute(e,t)||getRawAttribute(e,"data-"+t)}function parentElt(e){let t=e.parentElement;return !t&&e.parentNode instanceof ShadowRoot?e.parentNode:t}function getDocument(){return document}function getRootNode(e,t){return e.getRootNode?e.getRootNode({composed:t}):getDocument()}function getClosestMatch(e,t){for(;e&&!t(e);)e=parentElt(e);return e||null}function getAttributeValueWithDisinheritance(e,t,n){let r=getAttributeValue(t,n),o=getAttributeValue(t,"hx-disinherit");var i=getAttributeValue(t,"hx-inherit");if(e!==t){if(htmx.config.disableInheritance)return i&&(i==="*"||i.split(" ").indexOf(n)>=0)?r:null;if(o&&(o==="*"||o.split(" ").indexOf(n)>=0))return "unset"}return r}function getClosestAttributeValue(e,t){let n=null;if(getClosestMatch(e,function(r){return !!(n=getAttributeValueWithDisinheritance(e,asElement(r),t))}),n!=="unset")return n}function matches(e,t){let n=e instanceof Element&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector);return !!n&&n.call(e,t)}function getStartTag(e){let n=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i.exec(e);return n?n[1].toLowerCase():""}function parseHTML(e){return new DOMParser().parseFromString(e,"text/html")}function takeChildrenFor(e,t){for(;t.childNodes.length>0;)e.append(t.childNodes[0]);}function duplicateScript(e){let t=getDocument().createElement("script");return forEach(e.attributes,function(n){t.setAttribute(n.name,n.value);}),t.textContent=e.textContent,t.async=!1,htmx.config.inlineScriptNonce&&(t.nonce=htmx.config.inlineScriptNonce),t}function isJavaScriptScriptNode(e){return e.matches("script")&&(e.type==="text/javascript"||e.type==="module"||e.type==="")}function normalizeScriptTags(e){Array.from(e.querySelectorAll("script")).forEach(t=>{if(isJavaScriptScriptNode(t)){let n=duplicateScript(t),r=t.parentNode;try{r.insertBefore(n,t);}catch(o){logError(o);}finally{t.remove();}}});}function makeFragment(e){let t=e.replace(HEAD_TAG_REGEX,""),n=getStartTag(t),r;if(n==="html"){r=new DocumentFragment;let i=parseHTML(e);takeChildrenFor(r,i.body),r.title=i.title;}else if(n==="body"){r=new DocumentFragment;let i=parseHTML(t);takeChildrenFor(r,i.body),r.title=i.title;}else {let i=parseHTML('<body><template class="internal-htmx-wrapper">'+t+"</template></body>");r=i.querySelector("template").content,r.title=i.title;var o=r.querySelector("title");o&&o.parentNode===r&&(o.remove(),r.title=o.innerText);}return r&&(htmx.config.allowScriptTags?normalizeScriptTags(r):r.querySelectorAll("script").forEach(i=>i.remove())),r}function maybeCall(e){e&&e();}function isType(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function isFunction(e){return typeof e=="function"}function isRawObject(e){return isType(e,"Object")}function getInternalData(e){let t="htmx-internal-data",n=e[t];return n||(n=e[t]={}),n}function toArray(e){let t=[];if(e)for(let n=0;n<e.length;n++)t.push(e[n]);return t}function forEach(e,t){if(e)for(let n=0;n<e.length;n++)t(e[n]);}function isScrolledIntoView(e){let t=e.getBoundingClientRect(),n=t.top,r=t.bottom;return n<window.innerHeight&&r>=0}function bodyContains(e){let t=e.getRootNode&&e.getRootNode();return t&&t instanceof window.ShadowRoot?getDocument().body.contains(t.host):getDocument().body.contains(e)}function splitOnWhitespace(e){return e.trim().split(/\s+/)}function mergeObjects(e,t){for(let n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function parseJSON(e){try{return JSON.parse(e)}catch(t){return logError(t),null}}function canAccessLocalStorage(){let e="htmx:localStorageTest";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch{return !1}}function normalizePath(e){try{let t=new URL(e);return t&&(e=t.pathname+t.search),/^\/$/.test(e)||(e=e.replace(/\/+$/,"")),e}catch{return e}}function internalEval(str){return maybeEval(getDocument().body,function(){return eval(str)})}function onLoadHelper(e){return htmx.on("htmx:load",function(n){e(n.detail.elt);})}function logAll(){htmx.logger=function(e,t,n){console&&console.log(t,e,n);};}function logNone(){htmx.logger=null;}function find(e,t){return typeof e!="string"?e.querySelector(t):find(getDocument(),e)}function findAll(e,t){return typeof e!="string"?e.querySelectorAll(t):findAll(getDocument(),e)}function getWindow(){return window}function removeElement(e,t){e=resolveTarget(e),t?getWindow().setTimeout(function(){removeElement(e),e=null;},t):parentElt(e).removeChild(e);}function asElement(e){return e instanceof Element?e:null}function asHtmlElement(e){return e instanceof HTMLElement?e:null}function asString(e){return typeof e=="string"?e:null}function asParentNode(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function addClassToElement(e,t,n){e=asElement(resolveTarget(e)),e&&(n?getWindow().setTimeout(function(){addClassToElement(e,t),e=null;},n):e.classList&&e.classList.add(t));}function removeClassFromElement(e,t,n){let r=asElement(resolveTarget(e));r&&(n?getWindow().setTimeout(function(){removeClassFromElement(r,t),r=null;},n):r.classList&&(r.classList.remove(t),r.classList.length===0&&r.removeAttribute("class")));}function toggleClassOnElement(e,t){e=resolveTarget(e),e.classList.toggle(t);}function takeClassForElement(e,t){e=resolveTarget(e),forEach(e.parentElement.children,function(n){removeClassFromElement(n,t);}),addClassToElement(asElement(e),t);}function closest(e,t){if(e=asElement(resolveTarget(e)),e&&e.closest)return e.closest(t);do if(e==null||matches(e,t))return e;while(e=e&&asElement(parentElt(e)));return null}function startsWith(e,t){return e.substring(0,t.length)===t}function endsWith(e,t){return e.substring(e.length-t.length)===t}function normalizeSelector(e){let t=e.trim();return startsWith(t,"<")&&endsWith(t,"/>")?t.substring(1,t.length-2):t}function querySelectorAllExt(e,t,n){return e=resolveTarget(e),t.indexOf("closest ")===0?[closest(asElement(e),normalizeSelector(t.substr(8)))]:t.indexOf("find ")===0?[find(asParentNode(e),normalizeSelector(t.substr(5)))]:t==="next"?[asElement(e).nextElementSibling]:t.indexOf("next ")===0?[scanForwardQuery(e,normalizeSelector(t.substr(5)),!!n)]:t==="previous"?[asElement(e).previousElementSibling]:t.indexOf("previous ")===0?[scanBackwardsQuery(e,normalizeSelector(t.substr(9)),!!n)]:t==="document"?[document]:t==="window"?[window]:t==="body"?[document.body]:t==="root"?[getRootNode(e,!!n)]:t.indexOf("global ")===0?querySelectorAllExt(e,t.slice(7),!0):toArray(asParentNode(getRootNode(e,!!n)).querySelectorAll(normalizeSelector(t)))}var scanForwardQuery=function(e,t,n){let r=asParentNode(getRootNode(e,n)).querySelectorAll(t);for(let o=0;o<r.length;o++){let i=r[o];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_PRECEDING)return i}},scanBackwardsQuery=function(e,t,n){let r=asParentNode(getRootNode(e,n)).querySelectorAll(t);for(let o=r.length-1;o>=0;o--){let i=r[o];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING)return i}};function querySelectorExt(e,t){return typeof e!="string"?querySelectorAllExt(e,t)[0]:querySelectorAllExt(getDocument().body,e)[0]}function resolveTarget(e,t){return typeof e=="string"?find(asParentNode(t)||document,e):e}function processEventArgs(e,t,n){return isFunction(t)?{target:getDocument().body,event:asString(e),listener:t}:{target:resolveTarget(e),event:asString(t),listener:n}}function addEventListenerImpl(e,t,n){return ready(function(){let o=processEventArgs(e,t,n);o.target.addEventListener(o.event,o.listener);}),isFunction(t)?t:n}function removeEventListenerImpl(e,t,n){return ready(function(){let r=processEventArgs(e,t,n);r.target.removeEventListener(r.event,r.listener);}),isFunction(t)?t:n}let DUMMY_ELT=getDocument().createElement("output");function findAttributeTargets(e,t){let n=getClosestAttributeValue(e,t);if(n){if(n==="this")return [findThisElement(e,t)];{let r=querySelectorAllExt(e,n);return r.length===0?(logError('The selector "'+n+'" on '+t+" returned no matches!"),[DUMMY_ELT]):r}}}function findThisElement(e,t){return asElement(getClosestMatch(e,function(n){return getAttributeValue(asElement(n),t)!=null}))}function getTarget(e){let t=getClosestAttributeValue(e,"hx-target");return t?t==="this"?findThisElement(e,"hx-target"):querySelectorExt(e,t):getInternalData(e).boosted?getDocument().body:e}function shouldSettleAttribute(e){let t=htmx.config.attributesToSettle;for(let n=0;n<t.length;n++)if(e===t[n])return !0;return !1}function cloneAttributes(e,t){forEach(e.attributes,function(n){!t.hasAttribute(n.name)&&shouldSettleAttribute(n.name)&&e.removeAttribute(n.name);}),forEach(t.attributes,function(n){shouldSettleAttribute(n.name)&&e.setAttribute(n.name,n.value);});}function isInlineSwap(e,t){let n=getExtensions(t);for(let r=0;r<n.length;r++){let o=n[r];try{if(o.isInlineSwap(e))return !0}catch(i){logError(i);}}return e==="outerHTML"}function oobSwap(e,t,n){let r="#"+getRawAttribute(t,"id"),o="outerHTML";e==="true"||(e.indexOf(":")>0?(o=e.substr(0,e.indexOf(":")),r=e.substr(e.indexOf(":")+1,e.length)):o=e);let i=getDocument().querySelectorAll(r);return i?(forEach(i,function(s){let l,a=t.cloneNode(!0);l=getDocument().createDocumentFragment(),l.appendChild(a),isInlineSwap(o,s)||(l=asParentNode(a));let u={shouldSwap:!0,target:s,fragment:l};triggerEvent(s,"htmx:oobBeforeSwap",u)&&(s=u.target,u.shouldSwap&&swapWithStyle(o,s,s,l,n),forEach(n.elts,function(d){triggerEvent(d,"htmx:oobAfterSwap",u);}));}),t.parentNode.removeChild(t)):(t.parentNode.removeChild(t),triggerErrorEvent(getDocument().body,"htmx:oobErrorNoTarget",{content:t})),e}function handlePreservedElements(e){forEach(findAll(e,"[hx-preserve], [data-hx-preserve]"),function(t){let n=getAttributeValue(t,"id"),r=getDocument().getElementById(n);r!=null&&t.parentNode.replaceChild(r,t);});}function handleAttributes(e,t,n){forEach(t.querySelectorAll("[id]"),function(r){let o=getRawAttribute(r,"id");if(o&&o.length>0){let i=o.replace("'","\\'"),s=r.tagName.replace(":","\\:"),l=asParentNode(e),a=l&&l.querySelector(s+"[id='"+i+"']");if(a&&a!==l){let u=r.cloneNode();cloneAttributes(r,a),n.tasks.push(function(){cloneAttributes(r,u);});}}});}function makeAjaxLoadTask(e){return function(){removeClassFromElement(e,htmx.config.addedClass),processNode(asElement(e)),processFocus(asParentNode(e)),triggerEvent(e,"htmx:load");}}function processFocus(e){let t="[autofocus]",n=asHtmlElement(matches(e,t)?e:e.querySelector(t));n?.focus();}function insertNodesBefore(e,t,n,r){for(handleAttributes(e,n,r);n.childNodes.length>0;){let o=n.firstChild;addClassToElement(asElement(o),htmx.config.addedClass),e.insertBefore(o,t),o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE&&r.tasks.push(makeAjaxLoadTask(o));}}function stringHash(e,t){let n=0;for(;n<e.length;)t=(t<<5)-t+e.charCodeAt(n++)|0;return t}function attributeHash(e){let t=0;if(e.attributes)for(let n=0;n<e.attributes.length;n++){let r=e.attributes[n];r.value&&(t=stringHash(r.name,t),t=stringHash(r.value,t));}return t}function deInitOnHandlers(e){let t=getInternalData(e);if(t.onHandlers){for(let n=0;n<t.onHandlers.length;n++){let r=t.onHandlers[n];removeEventListenerImpl(e,r.event,r.listener);}delete t.onHandlers;}}function deInitNode(e){let t=getInternalData(e);t.timeout&&clearTimeout(t.timeout),t.listenerInfos&&forEach(t.listenerInfos,function(n){n.on&&removeEventListenerImpl(n.on,n.trigger,n.listener);}),deInitOnHandlers(e),forEach(Object.keys(t),function(n){delete t[n];});}function cleanUpElement(e){triggerEvent(e,"htmx:beforeCleanupElement"),deInitNode(e),e.children&&forEach(e.children,function(t){cleanUpElement(t);});}function swapOuterHTML(e,t,n){if(e instanceof Element&&e.tagName==="BODY")return swapInnerHTML(e,t,n);let r,o=e.previousSibling;for(insertNodesBefore(parentElt(e),e,t,n),o==null?r=parentElt(e).firstChild:r=o.nextSibling,n.elts=n.elts.filter(function(i){return i!==e});r&&r!==e;)r instanceof Element&&n.elts.push(r),r=r.nextSibling;cleanUpElement(e),e instanceof Element?e.remove():e.parentNode.removeChild(e);}function swapAfterBegin(e,t,n){return insertNodesBefore(e,e.firstChild,t,n)}function swapBeforeBegin(e,t,n){return insertNodesBefore(parentElt(e),e,t,n)}function swapBeforeEnd(e,t,n){return insertNodesBefore(e,null,t,n)}function swapAfterEnd(e,t,n){return insertNodesBefore(parentElt(e),e.nextSibling,t,n)}function swapDelete(e){return cleanUpElement(e),parentElt(e).removeChild(e)}function swapInnerHTML(e,t,n){let r=e.firstChild;if(insertNodesBefore(e,r,t,n),r){for(;r.nextSibling;)cleanUpElement(r.nextSibling),e.removeChild(r.nextSibling);cleanUpElement(r),e.removeChild(r);}}function swapWithStyle(e,t,n,r,o){switch(e){case"none":return;case"outerHTML":swapOuterHTML(n,r,o);return;case"afterbegin":swapAfterBegin(n,r,o);return;case"beforebegin":swapBeforeBegin(n,r,o);return;case"beforeend":swapBeforeEnd(n,r,o);return;case"afterend":swapAfterEnd(n,r,o);return;case"delete":swapDelete(n);return;default:var i=getExtensions(t);for(let s=0;s<i.length;s++){let l=i[s];try{let a=l.handleSwap(e,n,r,o);if(a){if(Array.isArray(a))for(let u=0;u<a.length;u++){let d=a[u];d.nodeType!==Node.TEXT_NODE&&d.nodeType!==Node.COMMENT_NODE&&o.tasks.push(makeAjaxLoadTask(d));}return}}catch(a){logError(a);}}e==="innerHTML"?swapInnerHTML(n,r,o):swapWithStyle(htmx.config.defaultSwapStyle,t,n,r,o);}}function findAndSwapOobElements(e,t){var n=findAll(e,"[hx-swap-oob], [data-hx-swap-oob]");return forEach(n,function(r){if(htmx.config.allowNestedOobSwaps||r.parentElement===null){let o=getAttributeValue(r,"hx-swap-oob");o!=null&&oobSwap(o,r,t);}else r.removeAttribute("hx-swap-oob"),r.removeAttribute("data-hx-swap-oob");}),n.length>0}function swap(e,t,n,r){r||(r={}),e=resolveTarget(e);let o=document.activeElement,i={};try{i={elt:o,start:o?o.selectionStart:null,end:o?o.selectionEnd:null};}catch{}let s=makeSettleInfo(e);if(n.swapStyle==="textContent")e.textContent=t;else {let a=makeFragment(t);if(s.title=a.title,r.selectOOB){let u=r.selectOOB.split(",");for(let d=0;d<u.length;d++){let c=u[d].split(":",2),g=c[0].trim();g.indexOf("#")===0&&(g=g.substring(1));let x=c[1]||"true",C=a.querySelector("#"+g);C&&oobSwap(x,C,s);}}if(findAndSwapOobElements(a,s),forEach(findAll(a,"template"),function(u){findAndSwapOobElements(u.content,s)&&u.remove();}),r.select){let u=getDocument().createDocumentFragment();forEach(a.querySelectorAll(r.select),function(d){u.appendChild(d);}),a=u;}handlePreservedElements(a),swapWithStyle(n.swapStyle,r.contextElement,e,a,s);}if(i.elt&&!bodyContains(i.elt)&&getRawAttribute(i.elt,"id")){let a=document.getElementById(getRawAttribute(i.elt,"id")),u={preventScroll:n.focusScroll!==void 0?!n.focusScroll:!htmx.config.defaultFocusScroll};if(a){if(i.start&&a.setSelectionRange)try{a.setSelectionRange(i.start,i.end);}catch{}a.focus(u);}}e.classList.remove(htmx.config.swappingClass),forEach(s.elts,function(a){a.classList&&a.classList.add(htmx.config.settlingClass),triggerEvent(a,"htmx:afterSwap",r.eventInfo);}),r.afterSwapCallback&&r.afterSwapCallback(),n.ignoreTitle||handleTitle(s.title);let l=function(){if(forEach(s.tasks,function(a){a.call();}),forEach(s.elts,function(a){a.classList&&a.classList.remove(htmx.config.settlingClass),triggerEvent(a,"htmx:afterSettle",r.eventInfo);}),r.anchor){let a=asElement(resolveTarget("#"+r.anchor));a&&a.scrollIntoView({block:"start",behavior:"auto"});}updateScrollState(s.elts,n),r.afterSettleCallback&&r.afterSettleCallback();};n.settleDelay>0?getWindow().setTimeout(l,n.settleDelay):l();}function handleTriggerHeader(e,t,n){let r=e.getResponseHeader(t);if(r.indexOf("{")===0){let o=parseJSON(r);for(let i in o)if(o.hasOwnProperty(i)){let s=o[i];isRawObject(s)?n=s.target!==void 0?s.target:n:s={value:s},triggerEvent(n,i,s);}}else {let o=r.split(",");for(let i=0;i<o.length;i++)triggerEvent(n,o[i].trim(),[]);}}let WHITESPACE_OR_COMMA=/[\s,]/,SYMBOL_START=/[_$a-zA-Z]/,SYMBOL_CONT=/[_$a-zA-Z0-9]/,STRINGISH_START=['"',"'","/"],NOT_WHITESPACE=/[^\s]/,COMBINED_SELECTOR_START=/[{(]/,COMBINED_SELECTOR_END=/[})]/;function tokenizeString(e){let t=[],n=0;for(;n<e.length;){if(SYMBOL_START.exec(e.charAt(n))){for(var r=n;SYMBOL_CONT.exec(e.charAt(n+1));)n++;t.push(e.substr(r,n-r+1));}else if(STRINGISH_START.indexOf(e.charAt(n))!==-1){let o=e.charAt(n);var r=n;for(n++;n<e.length&&e.charAt(n)!==o;)e.charAt(n)==="\\"&&n++,n++;t.push(e.substr(r,n-r+1));}else {let o=e.charAt(n);t.push(o);}n++;}return t}function isPossibleRelativeReference(e,t,n){return SYMBOL_START.exec(e.charAt(0))&&e!=="true"&&e!=="false"&&e!=="this"&&e!==n&&t!=="."}function maybeGenerateConditional(e,t,n){if(t[0]==="["){t.shift();let r=1,o=" return (function("+n+"){ return (",i=null;for(;t.length>0;){let s=t[0];if(s==="]"){if(r--,r===0){i===null&&(o=o+"true"),t.shift(),o+=")})";try{let l=maybeEval(e,function(){return Function(o)()},function(){return !0});return l.source=o,l}catch(l){return triggerErrorEvent(getDocument().body,"htmx:syntax:error",{error:l,source:o}),null}}}else s==="["&&r++;isPossibleRelativeReference(s,i,n)?o+="(("+n+"."+s+") ? ("+n+"."+s+") : (window."+s+"))":o=o+s,i=t.shift();}}}function consumeUntil(e,t){let n="";for(;e.length>0&&!t.test(e[0]);)n+=e.shift();return n}function consumeCSSSelector(e){let t;return e.length>0&&COMBINED_SELECTOR_START.test(e[0])?(e.shift(),t=consumeUntil(e,COMBINED_SELECTOR_END).trim(),e.shift()):t=consumeUntil(e,WHITESPACE_OR_COMMA),t}let INPUT_SELECTOR="input, textarea, select";function parseAndCacheTrigger(e,t,n){let r=[],o=tokenizeString(t);do{consumeUntil(o,NOT_WHITESPACE);let l=o.length,a=consumeUntil(o,/[,\[\s]/);if(a!=="")if(a==="every"){let u={trigger:"every"};consumeUntil(o,NOT_WHITESPACE),u.pollInterval=parseInterval(consumeUntil(o,/[,\[\s]/)),consumeUntil(o,NOT_WHITESPACE);var i=maybeGenerateConditional(e,o,"event");i&&(u.eventFilter=i),r.push(u);}else {let u={trigger:a};var i=maybeGenerateConditional(e,o,"event");for(i&&(u.eventFilter=i);o.length>0&&o[0]!==",";){consumeUntil(o,NOT_WHITESPACE);let c=o.shift();if(c==="changed")u.changed=!0;else if(c==="once")u.once=!0;else if(c==="consume")u.consume=!0;else if(c==="delay"&&o[0]===":")o.shift(),u.delay=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA));else if(c==="from"&&o[0]===":"){if(o.shift(),COMBINED_SELECTOR_START.test(o[0]))var s=consumeCSSSelector(o);else {var s=consumeUntil(o,WHITESPACE_OR_COMMA);if(s==="closest"||s==="find"||s==="next"||s==="previous"){o.shift();let x=consumeCSSSelector(o);x.length>0&&(s+=" "+x);}}u.from=s;}else c==="target"&&o[0]===":"?(o.shift(),u.target=consumeCSSSelector(o)):c==="throttle"&&o[0]===":"?(o.shift(),u.throttle=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA))):c==="queue"&&o[0]===":"?(o.shift(),u.queue=consumeUntil(o,WHITESPACE_OR_COMMA)):c==="root"&&o[0]===":"?(o.shift(),u[c]=consumeCSSSelector(o)):c==="threshold"&&o[0]===":"?(o.shift(),u[c]=consumeUntil(o,WHITESPACE_OR_COMMA)):triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()});}r.push(u);}o.length===l&&triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()}),consumeUntil(o,NOT_WHITESPACE);}while(o[0]===","&&o.shift());return n&&(n[t]=r),r}function getTriggerSpecs(e){let t=getAttributeValue(e,"hx-trigger"),n=[];if(t){let r=htmx.config.triggerSpecsCache;n=r&&r[t]||parseAndCacheTrigger(e,t,r);}return n.length>0?n:matches(e,"form")?[{trigger:"submit"}]:matches(e,'input[type="button"], input[type="submit"]')?[{trigger:"click"}]:matches(e,INPUT_SELECTOR)?[{trigger:"change"}]:[{trigger:"click"}]}function cancelPolling(e){getInternalData(e).cancelled=!0;}function processPolling(e,t,n){let r=getInternalData(e);r.timeout=getWindow().setTimeout(function(){bodyContains(e)&&r.cancelled!==!0&&(maybeFilterEvent(n,e,makeEvent("hx:poll:trigger",{triggerSpec:n,target:e}))||t(e),processPolling(e,t,n));},n.pollInterval);}function isLocalLink(e){return location.hostname===e.hostname&&getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")!==0}function eltIsDisabled(e){return closest(e,htmx.config.disableSelector)}function boostElement(e,t,n){if(e instanceof HTMLAnchorElement&&isLocalLink(e)&&(e.target===""||e.target==="_self")||e.tagName==="FORM"&&String(getRawAttribute(e,"method")).toLowerCase()!=="dialog"){t.boosted=!0;let r,o;if(e.tagName==="A")r="get",o=getRawAttribute(e,"href");else {let i=getRawAttribute(e,"method");r=i?i.toLowerCase():"get",o=getRawAttribute(e,"action");}n.forEach(function(i){addEventListener(e,function(s,l){let a=asElement(s);if(eltIsDisabled(a)){cleanUpElement(a);return}issueAjaxRequest(r,o,a,l);},t,i,!0);});}}function shouldCancel(e,t){let n=asElement(t);return n?!!((e.type==="submit"||e.type==="click")&&(n.tagName==="FORM"||matches(n,'input[type="submit"], button')&&closest(n,"form")!==null||n instanceof HTMLAnchorElement&&n.href&&(n.getAttribute("href")==="#"||n.getAttribute("href").indexOf("#")!==0))):!1}function ignoreBoostedAnchorCtrlClick(e,t){return getInternalData(e).boosted&&e instanceof HTMLAnchorElement&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function maybeFilterEvent(e,t,n){let r=e.eventFilter;if(r)try{return r.call(t,n)!==!0}catch(o){let i=r.source;return triggerErrorEvent(getDocument().body,"htmx:eventFilter:error",{error:o,source:i}),!0}return !1}function addEventListener(e,t,n,r,o){let i=getInternalData(e),s;r.from?s=querySelectorAllExt(e,r.from):s=[e],r.changed&&s.forEach(function(l){let a=getInternalData(l);a.lastValue=l.value;}),forEach(s,function(l){let a=function(u){if(!bodyContains(e)){l.removeEventListener(r.trigger,a);return}if(ignoreBoostedAnchorCtrlClick(e,u)||((o||shouldCancel(u,e))&&u.preventDefault(),maybeFilterEvent(r,e,u)))return;let d=getInternalData(u);if(d.triggerSpec=r,d.handledFor==null&&(d.handledFor=[]),d.handledFor.indexOf(e)<0){if(d.handledFor.push(e),r.consume&&u.stopPropagation(),r.target&&u.target&&!matches(asElement(u.target),r.target))return;if(r.once){if(i.triggeredOnce)return;i.triggeredOnce=!0;}if(r.changed){let c=getInternalData(l),g=l.value;if(c.lastValue===g)return;c.lastValue=g;}if(i.delayed&&clearTimeout(i.delayed),i.throttle)return;r.throttle>0?i.throttle||(triggerEvent(e,"htmx:trigger"),t(e,u),i.throttle=getWindow().setTimeout(function(){i.throttle=null;},r.throttle)):r.delay>0?i.delayed=getWindow().setTimeout(function(){triggerEvent(e,"htmx:trigger"),t(e,u);},r.delay):(triggerEvent(e,"htmx:trigger"),t(e,u));}};n.listenerInfos==null&&(n.listenerInfos=[]),n.listenerInfos.push({trigger:r.trigger,listener:a,on:l}),l.addEventListener(r.trigger,a);});}let windowIsScrolling=!1,scrollHandler=null;function initScrollHandler(){scrollHandler||(scrollHandler=function(){windowIsScrolling=!0;},window.addEventListener("scroll",scrollHandler),setInterval(function(){windowIsScrolling&&(windowIsScrolling=!1,forEach(getDocument().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"),function(e){maybeReveal(e);}));},200));}function maybeReveal(e){!hasAttribute(e,"data-hx-revealed")&&isScrolledIntoView(e)&&(e.setAttribute("data-hx-revealed","true"),getInternalData(e).initHash?triggerEvent(e,"revealed"):e.addEventListener("htmx:afterProcessNode",function(){triggerEvent(e,"revealed");},{once:!0}));}function loadImmediately(e,t,n,r){let o=function(){n.loaded||(n.loaded=!0,t(e));};r>0?getWindow().setTimeout(o,r):o();}function processVerbs(e,t,n){let r=!1;return forEach(VERBS,function(o){if(hasAttribute(e,"hx-"+o)){let i=getAttributeValue(e,"hx-"+o);r=!0,t.path=i,t.verb=o,n.forEach(function(s){addTriggerHandler(e,s,t,function(l,a){let u=asElement(l);if(closest(u,htmx.config.disableSelector)){cleanUpElement(u);return}issueAjaxRequest(o,i,u,a);});});}}),r}function addTriggerHandler(e,t,n,r){if(t.trigger==="revealed")initScrollHandler(),addEventListener(e,r,n,t),maybeReveal(asElement(e));else if(t.trigger==="intersect"){let o={};t.root&&(o.root=querySelectorExt(e,t.root)),t.threshold&&(o.threshold=parseFloat(t.threshold)),new IntersectionObserver(function(s){for(let l=0;l<s.length;l++)if(s[l].isIntersecting){triggerEvent(e,"intersect");break}},o).observe(asElement(e)),addEventListener(asElement(e),r,n,t);}else t.trigger==="load"?maybeFilterEvent(t,e,makeEvent("load",{elt:e}))||loadImmediately(asElement(e),r,n,t.delay):t.pollInterval>0?(n.polling=!0,processPolling(asElement(e),r,t)):addEventListener(e,r,n,t);}function shouldProcessHxOn(e){let t=asElement(e);if(!t)return !1;let n=t.attributes;for(let r=0;r<n.length;r++){let o=n[r].name;if(startsWith(o,"hx-on:")||startsWith(o,"data-hx-on:")||startsWith(o,"hx-on-")||startsWith(o,"data-hx-on-"))return !0}return !1}let HX_ON_QUERY=new XPathEvaluator().createExpression('.//*[@*[ starts-with(name(), "hx-on:") or starts-with(name(), "data-hx-on:") or starts-with(name(), "hx-on-") or starts-with(name(), "data-hx-on-") ]]');function processHXOnRoot(e,t){shouldProcessHxOn(e)&&t.push(asElement(e));let n=HX_ON_QUERY.evaluate(e),r=null;for(;r=n.iterateNext();)t.push(asElement(r));}function findHxOnWildcardElements(e){let t=[];if(e instanceof DocumentFragment)for(let n of e.childNodes)processHXOnRoot(n,t);else processHXOnRoot(e,t);return t}function findElementsToProcess(e){if(e.querySelectorAll){let n=", [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]",r=[];for(let i in extensions){let s=extensions[i];if(s.getSelectors){var t=s.getSelectors();t&&r.push(t);}}return e.querySelectorAll(VERB_SELECTOR+n+", form, [type='submit'], [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger]"+r.flat().map(i=>", "+i).join(""))}else return []}function maybeSetLastButtonClicked(e){let t=closest(asElement(e.target),"button, input[type='submit']"),n=getRelatedFormData(e);n&&(n.lastButtonClicked=t);}function maybeUnsetLastButtonClicked(e){let t=getRelatedFormData(e);t&&(t.lastButtonClicked=null);}function getRelatedFormData(e){let t=closest(asElement(e.target),"button, input[type='submit']");if(!t)return;let n=resolveTarget("#"+getRawAttribute(t,"form"),t.getRootNode())||closest(t,"form");if(n)return getInternalData(n)}function initButtonTracking(e){e.addEventListener("click",maybeSetLastButtonClicked),e.addEventListener("focusin",maybeSetLastButtonClicked),e.addEventListener("focusout",maybeUnsetLastButtonClicked);}function addHxOnEventHandler(e,t,n){let r=getInternalData(e);Array.isArray(r.onHandlers)||(r.onHandlers=[]);let o,i=function(s){maybeEval(e,function(){eltIsDisabled(e)||(o||(o=new Function("event",n)),o.call(e,s));});};e.addEventListener(t,i),r.onHandlers.push({event:t,listener:i});}function processHxOnWildcard(e){deInitOnHandlers(e);for(let t=0;t<e.attributes.length;t++){let n=e.attributes[t].name,r=e.attributes[t].value;if(startsWith(n,"hx-on")||startsWith(n,"data-hx-on")){let o=n.indexOf("-on")+3,i=n.slice(o,o+1);if(i==="-"||i===":"){let s=n.slice(o+1);startsWith(s,":")?s="htmx"+s:startsWith(s,"-")?s="htmx:"+s.slice(1):startsWith(s,"htmx-")&&(s="htmx:"+s.slice(5)),addHxOnEventHandler(e,s,r);}}}}function initNode(e){if(closest(e,htmx.config.disableSelector)){cleanUpElement(e);return}let t=getInternalData(e);if(t.initHash!==attributeHash(e)){deInitNode(e),t.initHash=attributeHash(e),triggerEvent(e,"htmx:beforeProcessNode"),e.value&&(t.lastValue=e.value);let n=getTriggerSpecs(e);processVerbs(e,t,n)||(getClosestAttributeValue(e,"hx-boost")==="true"?boostElement(e,t,n):hasAttribute(e,"hx-trigger")&&n.forEach(function(o){addTriggerHandler(e,o,t,function(){});})),(e.tagName==="FORM"||getRawAttribute(e,"type")==="submit"&&hasAttribute(e,"form"))&&initButtonTracking(e),triggerEvent(e,"htmx:afterProcessNode");}}function processNode(e){if(e=resolveTarget(e),closest(e,htmx.config.disableSelector)){cleanUpElement(e);return}initNode(e),forEach(findElementsToProcess(e),function(t){initNode(t);}),forEach(findHxOnWildcardElements(e),processHxOnWildcard);}function kebabEventName(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}function makeEvent(e,t){let n;return window.CustomEvent&&typeof window.CustomEvent=="function"?n=new CustomEvent(e,{bubbles:!0,cancelable:!0,composed:!0,detail:t}):(n=getDocument().createEvent("CustomEvent"),n.initCustomEvent(e,!0,!0,t)),n}function triggerErrorEvent(e,t,n){triggerEvent(e,t,mergeObjects({error:t},n));}function ignoreEventForLogging(e){return e==="htmx:afterProcessNode"}function withExtensions(e,t){forEach(getExtensions(e),function(n){try{t(n);}catch(r){logError(r);}});}function logError(e){console.error?console.error(e):console.log&&console.log("ERROR: ",e);}function triggerEvent(e,t,n){e=resolveTarget(e),n==null&&(n={}),n.elt=e;let r=makeEvent(t,n);htmx.logger&&!ignoreEventForLogging(t)&&htmx.logger(e,t,n),n.error&&(logError(n.error),triggerEvent(e,"htmx:error",{errorInfo:n}));let o=e.dispatchEvent(r),i=kebabEventName(t);if(o&&i!==t){let s=makeEvent(i,r.detail);o=o&&e.dispatchEvent(s);}return withExtensions(asElement(e),function(s){o=o&&s.onEvent(t,r)!==!1&&!r.defaultPrevented;}),o}let currentPathForHistory=location.pathname+location.search;function getHistoryElement(){return getDocument().querySelector("[hx-history-elt],[data-hx-history-elt]")||getDocument().body}function saveToHistoryCache(e,t){if(!canAccessLocalStorage())return;let n=cleanInnerHtmlForHistory(t),r=getDocument().title,o=window.scrollY;if(htmx.config.historyCacheSize<=0){localStorage.removeItem("htmx-history-cache");return}e=normalizePath(e);let i=parseJSON(localStorage.getItem("htmx-history-cache"))||[];for(let l=0;l<i.length;l++)if(i[l].url===e){i.splice(l,1);break}let s={url:e,content:n,title:r,scroll:o};for(triggerEvent(getDocument().body,"htmx:historyItemCreated",{item:s,cache:i}),i.push(s);i.length>htmx.config.historyCacheSize;)i.shift();for(;i.length>0;)try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(l){triggerErrorEvent(getDocument().body,"htmx:historyCacheError",{cause:l,cache:i}),i.shift();}}function getCachedHistory(e){if(!canAccessLocalStorage())return null;e=normalizePath(e);let t=parseJSON(localStorage.getItem("htmx-history-cache"))||[];for(let n=0;n<t.length;n++)if(t[n].url===e)return t[n];return null}function cleanInnerHtmlForHistory(e){let t=htmx.config.requestClass,n=e.cloneNode(!0);return forEach(findAll(n,"."+t),function(r){removeClassFromElement(r,t);}),forEach(findAll(n,"[data-disabled-by-htmx]"),function(r){r.removeAttribute("disabled");}),n.innerHTML}function saveCurrentPageToHistory(){let e=getHistoryElement(),t=currentPathForHistory||location.pathname+location.search,n;try{n=getDocument().querySelector('[hx-history="false" i],[data-hx-history="false" i]');}catch{n=getDocument().querySelector('[hx-history="false"],[data-hx-history="false"]');}n||(triggerEvent(getDocument().body,"htmx:beforeHistorySave",{path:t,historyElt:e}),saveToHistoryCache(t,e)),htmx.config.historyEnabled&&history.replaceState({htmx:!0},getDocument().title,window.location.href);}function pushUrlIntoHistory(e){htmx.config.getCacheBusterParam&&(e=e.replace(/org\.htmx\.cache-buster=[^&]*&?/,""),(endsWith(e,"&")||endsWith(e,"?"))&&(e=e.slice(0,-1))),htmx.config.historyEnabled&&history.pushState({htmx:!0},"",e),currentPathForHistory=e;}function replaceUrlInHistory(e){htmx.config.historyEnabled&&history.replaceState({htmx:!0},"",e),currentPathForHistory=e;}function settleImmediately(e){forEach(e,function(t){t.call(void 0);});}function loadHistoryFromServer(e){let t=new XMLHttpRequest,n={path:e,xhr:t};triggerEvent(getDocument().body,"htmx:historyCacheMiss",n),t.open("GET",e,!0),t.setRequestHeader("HX-Request","true"),t.setRequestHeader("HX-History-Restore-Request","true"),t.setRequestHeader("HX-Current-URL",getDocument().location.href),t.onload=function(){if(this.status>=200&&this.status<400){triggerEvent(getDocument().body,"htmx:historyCacheMissLoad",n);let r=makeFragment(this.response),o=r.querySelector("[hx-history-elt],[data-hx-history-elt]")||r,i=getHistoryElement(),s=makeSettleInfo(i);handleTitle(r.title),swapInnerHTML(i,o,s),settleImmediately(s.tasks),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,cacheMiss:!0,serverResponse:this.response});}else triggerErrorEvent(getDocument().body,"htmx:historyCacheMissLoadError",n);},t.send();}function restoreHistory(e){saveCurrentPageToHistory(),e=e||location.pathname+location.search;let t=getCachedHistory(e);if(t){let n=makeFragment(t.content),r=getHistoryElement(),o=makeSettleInfo(r);handleTitle(n.title),swapInnerHTML(r,n,o),settleImmediately(o.tasks),getWindow().setTimeout(function(){window.scrollTo(0,t.scroll);},0),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,item:t});}else htmx.config.refreshOnHistoryMiss?window.location.reload(!0):loadHistoryFromServer(e);}function addRequestIndicatorClasses(e){let t=findAttributeTargets(e,"hx-indicator");return t==null&&(t=[e]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.classList.add.call(n.classList,htmx.config.requestClass);}),t}function disableElements(e){let t=findAttributeTargets(e,"hx-disabled-elt");return t==null&&(t=[]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.setAttribute("disabled",""),n.setAttribute("data-disabled-by-htmx","");}),t}function removeRequestIndicators(e,t){forEach(e,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)-1,r.requestCount===0&&n.classList.remove.call(n.classList,htmx.config.requestClass);}),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)-1,r.requestCount===0&&(n.removeAttribute("disabled"),n.removeAttribute("data-disabled-by-htmx"));});}function haveSeenNode(e,t){for(let n=0;n<e.length;n++)if(e[n].isSameNode(t))return !0;return !1}function shouldInclude(e){let t=e;return t.name===""||t.name==null||t.disabled||closest(t,"fieldset[disabled]")||t.type==="button"||t.type==="submit"||t.tagName==="image"||t.tagName==="reset"||t.tagName==="file"?!1:t.type==="checkbox"||t.type==="radio"?t.checked:!0}function addValueToFormData(e,t,n){e!=null&&t!=null&&(Array.isArray(t)?t.forEach(function(r){n.append(e,r);}):n.append(e,t));}function removeValueFromFormData(e,t,n){if(e!=null&&t!=null){let r=n.getAll(e);Array.isArray(t)?r=r.filter(o=>t.indexOf(o)<0):r=r.filter(o=>o!==t),n.delete(e),forEach(r,o=>n.append(e,o));}}function processInputValue(e,t,n,r,o){if(!(r==null||haveSeenNode(e,r))){if(e.push(r),shouldInclude(r)){let i=getRawAttribute(r,"name"),s=r.value;r instanceof HTMLSelectElement&&r.multiple&&(s=toArray(r.querySelectorAll("option:checked")).map(function(l){return l.value})),r instanceof HTMLInputElement&&r.files&&(s=toArray(r.files)),addValueToFormData(i,s,t),o&&validateElement(r,n);}r instanceof HTMLFormElement&&(forEach(r.elements,function(i){e.indexOf(i)>=0?removeValueFromFormData(i.name,i.value,t):e.push(i),o&&validateElement(i,n);}),new FormData(r).forEach(function(i,s){i instanceof File&&i.name===""||addValueToFormData(s,i,t);}));}}function validateElement(e,t){let n=e;n.willValidate&&(triggerEvent(n,"htmx:validation:validate"),n.checkValidity()||(t.push({elt:n,message:n.validationMessage,validity:n.validity}),triggerEvent(n,"htmx:validation:failed",{message:n.validationMessage,validity:n.validity})));}function overrideFormData(e,t){for(let n of t.keys())e.delete(n);return t.forEach(function(n,r){e.append(r,n);}),e}function getInputValues(e,t){let n=[],r=new FormData,o=new FormData,i=[],s=getInternalData(e);s.lastButtonClicked&&!bodyContains(s.lastButtonClicked)&&(s.lastButtonClicked=null);let l=e instanceof HTMLFormElement&&e.noValidate!==!0||getAttributeValue(e,"hx-validate")==="true";if(s.lastButtonClicked&&(l=l&&s.lastButtonClicked.formNoValidate!==!0),t!=="get"&&processInputValue(n,o,i,closest(e,"form"),l),processInputValue(n,r,i,e,l),s.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&getRawAttribute(e,"type")==="submit"){let u=s.lastButtonClicked||e,d=getRawAttribute(u,"name");addValueToFormData(d,u.value,o);}let a=findAttributeTargets(e,"hx-include");return forEach(a,function(u){processInputValue(n,r,i,asElement(u),l),matches(u,"form")||forEach(asParentNode(u).querySelectorAll(INPUT_SELECTOR),function(d){processInputValue(n,r,i,d,l);});}),overrideFormData(r,o),{errors:i,formData:r,values:formDataProxy(r)}}function appendParam(e,t,n){e!==""&&(e+="&"),String(n)==="[object Object]"&&(n=JSON.stringify(n));let r=encodeURIComponent(n);return e+=encodeURIComponent(t)+"="+r,e}function urlEncode(e){e=formDataFromObject(e);let t="";return e.forEach(function(n,r){t=appendParam(t,r,n);}),t}function getHeaders(e,t,n){let r={"HX-Request":"true","HX-Trigger":getRawAttribute(e,"id"),"HX-Trigger-Name":getRawAttribute(e,"name"),"HX-Target":getAttributeValue(t,"id"),"HX-Current-URL":getDocument().location.href};return getValuesForElement(e,"hx-headers",!1,r),n!==void 0&&(r["HX-Prompt"]=n),getInternalData(e).boosted&&(r["HX-Boosted"]="true"),r}function filterValues(e,t){let n=getClosestAttributeValue(t,"hx-params");if(n){if(n==="none")return new FormData;if(n==="*")return e;if(n.indexOf("not ")===0)return forEach(n.substr(4).split(","),function(r){r=r.trim(),e.delete(r);}),e;{let r=new FormData;return forEach(n.split(","),function(o){o=o.trim(),e.has(o)&&e.getAll(o).forEach(function(i){r.append(o,i);});}),r}}else return e}function isAnchorLink(e){return !!getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")>=0}function getSwapSpecification(e,t){let n=t||getClosestAttributeValue(e,"hx-swap"),r={swapStyle:getInternalData(e).boosted?"innerHTML":htmx.config.defaultSwapStyle,swapDelay:htmx.config.defaultSwapDelay,settleDelay:htmx.config.defaultSettleDelay};if(htmx.config.scrollIntoViewOnBoost&&getInternalData(e).boosted&&!isAnchorLink(e)&&(r.show="top"),n){let s=splitOnWhitespace(n);if(s.length>0)for(let l=0;l<s.length;l++){let a=s[l];if(a.indexOf("swap:")===0)r.swapDelay=parseInterval(a.substr(5));else if(a.indexOf("settle:")===0)r.settleDelay=parseInterval(a.substr(7));else if(a.indexOf("transition:")===0)r.transition=a.substr(11)==="true";else if(a.indexOf("ignoreTitle:")===0)r.ignoreTitle=a.substr(12)==="true";else if(a.indexOf("scroll:")===0){var o=a.substr(7).split(":");let d=o.pop();var i=o.length>0?o.join(":"):null;r.scroll=d,r.scrollTarget=i;}else if(a.indexOf("show:")===0){var o=a.substr(5).split(":");let c=o.pop();var i=o.length>0?o.join(":"):null;r.show=c,r.showTarget=i;}else if(a.indexOf("focus-scroll:")===0){let u=a.substr(13);r.focusScroll=u=="true";}else l==0?r.swapStyle=a:logError("Unknown modifier in hx-swap: "+a);}}return r}function usesFormData(e){return getClosestAttributeValue(e,"hx-encoding")==="multipart/form-data"||matches(e,"form")&&getRawAttribute(e,"enctype")==="multipart/form-data"}function encodeParamsForBody(e,t,n){let r=null;return withExtensions(t,function(o){r==null&&(r=o.encodeParameters(e,n,t));}),r??(usesFormData(t)?overrideFormData(new FormData,formDataFromObject(n)):urlEncode(n))}function makeSettleInfo(e){return {tasks:[],elts:[e]}}function updateScrollState(e,t){let n=e[0],r=e[e.length-1];if(t.scroll){var o=null;t.scrollTarget&&(o=asElement(querySelectorExt(n,t.scrollTarget))),t.scroll==="top"&&(n||o)&&(o=o||n,o.scrollTop=0),t.scroll==="bottom"&&(r||o)&&(o=o||r,o.scrollTop=o.scrollHeight);}if(t.show){var o=null;if(t.showTarget){let s=t.showTarget;t.showTarget==="window"&&(s="body"),o=asElement(querySelectorExt(n,s));}t.show==="top"&&(n||o)&&(o=o||n,o.scrollIntoView({block:"start",behavior:htmx.config.scrollBehavior})),t.show==="bottom"&&(r||o)&&(o=o||r,o.scrollIntoView({block:"end",behavior:htmx.config.scrollBehavior}));}}function getValuesForElement(e,t,n,r){if(r==null&&(r={}),e==null)return r;let o=getAttributeValue(e,t);if(o){let i=o.trim(),s=n;if(i==="unset")return null;i.indexOf("javascript:")===0?(i=i.substr(11),s=!0):i.indexOf("js:")===0&&(i=i.substr(3),s=!0),i.indexOf("{")!==0&&(i="{"+i+"}");let l;s?l=maybeEval(e,function(){return Function("return ("+i+")")()},{}):l=parseJSON(i);for(let a in l)l.hasOwnProperty(a)&&r[a]==null&&(r[a]=l[a]);}return getValuesForElement(asElement(parentElt(e)),t,n,r)}function maybeEval(e,t,n){return htmx.config.allowEval?t():(triggerErrorEvent(e,"htmx:evalDisallowedError"),n)}function getHXVarsForElement(e,t){return getValuesForElement(e,"hx-vars",!0,t)}function getHXValsForElement(e,t){return getValuesForElement(e,"hx-vals",!1,t)}function getExpressionVars(e){return mergeObjects(getHXVarsForElement(e),getHXValsForElement(e))}function safelySetHeaderValue(e,t,n){if(n!==null)try{e.setRequestHeader(t,n);}catch{e.setRequestHeader(t,encodeURIComponent(n)),e.setRequestHeader(t+"-URI-AutoEncoded","true");}}function getPathFromResponse(e){if(e.responseURL&&typeof URL<"u")try{let t=new URL(e.responseURL);return t.pathname+t.search}catch{triggerErrorEvent(getDocument().body,"htmx:badResponseUrl",{url:e.responseURL});}}function hasHeader(e,t){return t.test(e.getAllResponseHeaders())}function ajaxHelper(e,t,n){return e=e.toLowerCase(),n?n instanceof Element||typeof n=="string"?issueAjaxRequest(e,t,null,null,{targetOverride:resolveTarget(n),returnPromise:!0}):issueAjaxRequest(e,t,resolveTarget(n.source),n.event,{handler:n.handler,headers:n.headers,values:n.values,targetOverride:resolveTarget(n.target),swapOverride:n.swap,select:n.select,returnPromise:!0}):issueAjaxRequest(e,t,null,null,{returnPromise:!0})}function hierarchyForElt(e){let t=[];for(;e;)t.push(e),e=e.parentElement;return t}function verifyPath(e,t,n){let r,o;return typeof URL=="function"?(o=new URL(t,document.location.href),r=document.location.origin===o.origin):(o=t,r=startsWith(t,document.location.origin)),htmx.config.selfRequestsOnly&&!r?!1:triggerEvent(e,"htmx:validateUrl",mergeObjects({url:o,sameHost:r},n))}function formDataFromObject(e){if(e instanceof FormData)return e;let t=new FormData;for(let n in e)e.hasOwnProperty(n)&&(typeof e[n].forEach=="function"?e[n].forEach(function(r){t.append(n,r);}):typeof e[n]=="object"&&!(e[n]instanceof Blob)?t.append(n,JSON.stringify(e[n])):t.append(n,e[n]));return t}function formDataArrayProxy(e,t,n){return new Proxy(n,{get:function(r,o){return typeof o=="number"?r[o]:o==="length"?r.length:o==="push"?function(i){r.push(i),e.append(t,i);}:typeof r[o]=="function"?function(){r[o].apply(r,arguments),e.delete(t),r.forEach(function(i){e.append(t,i);});}:r[o]&&r[o].length===1?r[o][0]:r[o]},set:function(r,o,i){return r[o]=i,e.delete(t),r.forEach(function(s){e.append(t,s);}),!0}})}function formDataProxy(e){return new Proxy(e,{get:function(t,n){if(typeof n=="symbol")return Reflect.get(t,n);if(n==="toJSON")return ()=>Object.fromEntries(e);if(n in t)return typeof t[n]=="function"?function(){return e[n].apply(e,arguments)}:t[n];let r=e.getAll(n);if(r.length!==0)return r.length===1?r[0]:formDataArrayProxy(t,n,r)},set:function(t,n,r){return typeof n!="string"?!1:(t.delete(n),typeof r.forEach=="function"?r.forEach(function(o){t.append(n,o);}):typeof r=="object"&&!(r instanceof Blob)?t.append(n,JSON.stringify(r)):t.append(n,r),!0)},deleteProperty:function(t,n){return typeof n=="string"&&t.delete(n),!0},ownKeys:function(t){return Reflect.ownKeys(Object.fromEntries(t))},getOwnPropertyDescriptor:function(t,n){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(t),n)}})}function issueAjaxRequest(e,t,n,r,o,i){let s=null,l=null;if(o=o??{},o.returnPromise&&typeof Promise<"u")var a=new Promise(function(h,b){s=h,l=b;});n==null&&(n=getDocument().body);let u=o.handler||handleAjaxResponse,d=o.select||null;if(!bodyContains(n))return maybeCall(s),a;let c=o.targetOverride||asElement(getTarget(n));if(c==null||c==DUMMY_ELT)return triggerErrorEvent(n,"htmx:targetError",{target:getAttributeValue(n,"hx-target")}),maybeCall(l),a;let g=getInternalData(n),x=g.lastButtonClicked;if(x){let h=getRawAttribute(x,"formaction");h!=null&&(t=h);let b=getRawAttribute(x,"formmethod");b!=null&&b.toLowerCase()!=="dialog"&&(e=b);}let C=getClosestAttributeValue(n,"hx-confirm");if(i===void 0&&triggerEvent(n,"htmx:confirm",{target:c,elt:n,path:t,verb:e,triggeringEvent:r,etc:o,issueRequest:function(O){return issueAjaxRequest(e,t,n,r,o,!!O)},question:C})===!1)return maybeCall(s),a;let v=n,E=getClosestAttributeValue(n,"hx-sync"),p=null,T=!1;if(E){let h=E.split(":"),b=h[0].trim();if(b==="this"?v=findThisElement(n,"hx-sync"):v=asElement(querySelectorExt(n,b)),E=(h[1]||"drop").trim(),g=getInternalData(v),E==="drop"&&g.xhr&&g.abortable!==!0)return maybeCall(s),a;if(E==="abort"){if(g.xhr)return maybeCall(s),a;T=!0;}else E==="replace"?triggerEvent(v,"htmx:abort"):E.indexOf("queue")===0&&(p=(E.split(" ")[1]||"last").trim());}if(g.xhr)if(g.abortable)triggerEvent(v,"htmx:abort");else {if(p==null){if(r){let h=getInternalData(r);h&&h.triggerSpec&&h.triggerSpec.queue&&(p=h.triggerSpec.queue);}p==null&&(p="last");}return g.queuedRequests==null&&(g.queuedRequests=[]),p==="first"&&g.queuedRequests.length===0?g.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o);}):p==="all"?g.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o);}):p==="last"&&(g.queuedRequests=[],g.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o);})),maybeCall(s),a}let y=new XMLHttpRequest;g.xhr=y,g.abortable=T;let R=function(){g.xhr=null,g.abortable=!1,g.queuedRequests!=null&&g.queuedRequests.length>0&&g.queuedRequests.shift()();},N=getClosestAttributeValue(n,"hx-prompt");if(N){var L=prompt(N);if(L===null||!triggerEvent(n,"htmx:prompt",{prompt:L,target:c}))return maybeCall(s),R(),a}if(C&&!i&&!confirm(C))return maybeCall(s),R(),a;let D=getHeaders(n,c,L);e!=="get"&&!usesFormData(n)&&(D["Content-Type"]="application/x-www-form-urlencoded"),o.headers&&(D=mergeObjects(D,o.headers));let S=getInputValues(n,e),q=S.errors,k=S.formData;o.values&&overrideFormData(k,formDataFromObject(o.values));let _=formDataFromObject(getExpressionVars(n)),j=overrideFormData(k,_),P=filterValues(j,n);htmx.config.getCacheBusterParam&&e==="get"&&P.set("org.htmx.cache-buster",getRawAttribute(c,"id")||"true"),(t==null||t==="")&&(t=getDocument().location.href);let X=getValuesForElement(n,"hx-request"),G=getInternalData(n).boosted,F=htmx.config.methodsThatUseUrlParams.indexOf(e)>=0,A={boosted:G,useUrlParams:F,formData:P,parameters:formDataProxy(P),unfilteredFormData:j,unfilteredParameters:formDataProxy(j),headers:D,target:c,verb:e,errors:q,withCredentials:o.credentials||X.credentials||htmx.config.withCredentials,timeout:o.timeout||X.timeout||htmx.config.timeout,path:t,triggeringEvent:r};if(!triggerEvent(n,"htmx:configRequest",A))return maybeCall(s),R(),a;if(t=A.path,e=A.verb,D=A.headers,P=formDataFromObject(A.parameters),q=A.errors,F=A.useUrlParams,q&&q.length>0)return triggerEvent(n,"htmx:validation:halted",A),maybeCall(s),R(),a;let Y=t.split("#"),te=Y[0],z=Y[1],I=t;if(F&&(I=te,!P.keys().next().done&&(I.indexOf("?")<0?I+="?":I+="&",I+=urlEncode(P),z&&(I+="#"+z))),!verifyPath(n,I,A))return triggerErrorEvent(n,"htmx:invalidPath",A),maybeCall(l),a;if(y.open(e.toUpperCase(),I,!0),y.overrideMimeType("text/html"),y.withCredentials=A.withCredentials,y.timeout=A.timeout,!X.noHeaders){for(let h in D)if(D.hasOwnProperty(h)){let b=D[h];safelySetHeaderValue(y,h,b);}}let w={xhr:y,target:c,requestConfig:A,etc:o,boosted:G,select:d,pathInfo:{requestPath:t,finalRequestPath:I,responsePath:null,anchor:z}};if(y.onload=function(){try{let h=hierarchyForElt(n);if(w.pathInfo.responsePath=getPathFromResponse(y),u(n,w),w.keepIndicators!==!0&&removeRequestIndicators(M,V),triggerEvent(n,"htmx:afterRequest",w),triggerEvent(n,"htmx:afterOnLoad",w),!bodyContains(n)){let b=null;for(;h.length>0&&b==null;){let O=h.shift();bodyContains(O)&&(b=O);}b&&(triggerEvent(b,"htmx:afterRequest",w),triggerEvent(b,"htmx:afterOnLoad",w));}maybeCall(s),R();}catch(h){throw triggerErrorEvent(n,"htmx:onLoadError",mergeObjects({error:h},w)),h}},y.onerror=function(){removeRequestIndicators(M,V),triggerErrorEvent(n,"htmx:afterRequest",w),triggerErrorEvent(n,"htmx:sendError",w),maybeCall(l),R();},y.onabort=function(){removeRequestIndicators(M,V),triggerErrorEvent(n,"htmx:afterRequest",w),triggerErrorEvent(n,"htmx:sendAbort",w),maybeCall(l),R();},y.ontimeout=function(){removeRequestIndicators(M,V),triggerErrorEvent(n,"htmx:afterRequest",w),triggerErrorEvent(n,"htmx:timeout",w),maybeCall(l),R();},!triggerEvent(n,"htmx:beforeRequest",w))return maybeCall(s),R(),a;var M=addRequestIndicatorClasses(n),V=disableElements(n);forEach(["loadstart","loadend","progress","abort"],function(h){forEach([y,y.upload],function(b){b.addEventListener(h,function(O){triggerEvent(n,"htmx:xhr:"+h,{lengthComputable:O.lengthComputable,loaded:O.loaded,total:O.total});});});}),triggerEvent(n,"htmx:beforeSend",w);let ne=F?null:encodeParamsForBody(y,n,P);return y.send(ne),a}function determineHistoryUpdates(e,t){let n=t.xhr,r=null,o=null;if(hasHeader(n,/HX-Push:/i)?(r=n.getResponseHeader("HX-Push"),o="push"):hasHeader(n,/HX-Push-Url:/i)?(r=n.getResponseHeader("HX-Push-Url"),o="push"):hasHeader(n,/HX-Replace-Url:/i)&&(r=n.getResponseHeader("HX-Replace-Url"),o="replace"),r)return r==="false"?{}:{type:o,path:r};let i=t.pathInfo.finalRequestPath,s=t.pathInfo.responsePath,l=getClosestAttributeValue(e,"hx-push-url"),a=getClosestAttributeValue(e,"hx-replace-url"),u=getInternalData(e).boosted,d=null,c=null;return l?(d="push",c=l):a?(d="replace",c=a):u&&(d="push",c=s||i),c?c==="false"?{}:(c==="true"&&(c=s||i),t.pathInfo.anchor&&c.indexOf("#")===-1&&(c=c+"#"+t.pathInfo.anchor),{type:d,path:c}):{}}function codeMatches(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function resolveResponseHandling(e){for(var t=0;t<htmx.config.responseHandling.length;t++){var n=htmx.config.responseHandling[t];if(codeMatches(n,e.status))return n}return {swap:!1}}function handleTitle(e){if(e){let t=find("title");t?t.innerHTML=e:window.document.title=e;}}function handleAjaxResponse(e,t){let n=t.xhr,r=t.target,o=t.etc,i=t.select;if(!triggerEvent(e,"htmx:beforeOnLoad",t))return;if(hasHeader(n,/HX-Trigger:/i)&&handleTriggerHeader(n,"HX-Trigger",e),hasHeader(n,/HX-Location:/i)){saveCurrentPageToHistory();let T=n.getResponseHeader("HX-Location");var s;T.indexOf("{")===0&&(s=parseJSON(T),T=s.path,delete s.path),ajaxHelper("get",T,s).then(function(){pushUrlIntoHistory(T);});return}let l=hasHeader(n,/HX-Refresh:/i)&&n.getResponseHeader("HX-Refresh")==="true";if(hasHeader(n,/HX-Redirect:/i)){t.keepIndicators=!0,location.href=n.getResponseHeader("HX-Redirect"),l&&location.reload();return}if(l){t.keepIndicators=!0,location.reload();return}hasHeader(n,/HX-Retarget:/i)&&(n.getResponseHeader("HX-Retarget")==="this"?t.target=e:t.target=asElement(querySelectorExt(e,n.getResponseHeader("HX-Retarget"))));let a=determineHistoryUpdates(e,t),u=resolveResponseHandling(n),d=u.swap,c=!!u.error,g=htmx.config.ignoreTitle||u.ignoreTitle,x=u.select;u.target&&(t.target=asElement(querySelectorExt(e,u.target)));var C=o.swapOverride;C==null&&u.swapOverride&&(C=u.swapOverride),hasHeader(n,/HX-Retarget:/i)&&(n.getResponseHeader("HX-Retarget")==="this"?t.target=e:t.target=asElement(querySelectorExt(e,n.getResponseHeader("HX-Retarget")))),hasHeader(n,/HX-Reswap:/i)&&(C=n.getResponseHeader("HX-Reswap"));var v=n.response,E=mergeObjects({shouldSwap:d,serverResponse:v,isError:c,ignoreTitle:g,selectOverride:x},t);if(!(u.event&&!triggerEvent(r,u.event,E))&&triggerEvent(r,"htmx:beforeSwap",E)){if(r=E.target,v=E.serverResponse,c=E.isError,g=E.ignoreTitle,x=E.selectOverride,t.target=r,t.failed=c,t.successful=!c,E.shouldSwap){n.status===286&&cancelPolling(e),withExtensions(e,function(S){v=S.transformResponse(v,n,e);}),a.type&&saveCurrentPageToHistory(),hasHeader(n,/HX-Reswap:/i)&&(C=n.getResponseHeader("HX-Reswap"));var p=getSwapSpecification(e,C);p.hasOwnProperty("ignoreTitle")||(p.ignoreTitle=g),r.classList.add(htmx.config.swappingClass);let T=null,y=null;i&&(x=i),hasHeader(n,/HX-Reselect:/i)&&(x=n.getResponseHeader("HX-Reselect"));let R=getClosestAttributeValue(e,"hx-select-oob"),N=getClosestAttributeValue(e,"hx-select"),L=function(){try{a.type&&(triggerEvent(getDocument().body,"htmx:beforeHistoryUpdate",mergeObjects({history:a},t)),a.type==="push"?(pushUrlIntoHistory(a.path),triggerEvent(getDocument().body,"htmx:pushedIntoHistory",{path:a.path})):(replaceUrlInHistory(a.path),triggerEvent(getDocument().body,"htmx:replacedInHistory",{path:a.path}))),swap(r,v,p,{select:x||N,selectOOB:R,eventInfo:t,anchor:t.pathInfo.anchor,contextElement:e,afterSwapCallback:function(){if(hasHeader(n,/HX-Trigger-After-Swap:/i)){let S=e;bodyContains(e)||(S=getDocument().body),handleTriggerHeader(n,"HX-Trigger-After-Swap",S);}},afterSettleCallback:function(){if(hasHeader(n,/HX-Trigger-After-Settle:/i)){let S=e;bodyContains(e)||(S=getDocument().body),handleTriggerHeader(n,"HX-Trigger-After-Settle",S);}maybeCall(T);}});}catch(S){throw triggerErrorEvent(e,"htmx:swapError",t),maybeCall(y),S}},D=htmx.config.globalViewTransitions;if(p.hasOwnProperty("transition")&&(D=p.transition),D&&triggerEvent(e,"htmx:beforeTransition",t)&&typeof Promise<"u"&&document.startViewTransition){let S=new Promise(function(k,_){T=k,y=_;}),q=L;L=function(){document.startViewTransition(function(){return q(),S});};}p.swapDelay>0?getWindow().setTimeout(L,p.swapDelay):L();}c&&triggerErrorEvent(e,"htmx:responseError",mergeObjects({error:"Response Status Error Code "+n.status+" from "+t.pathInfo.requestPath},t));}}let extensions={};function extensionBase(){return {init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return !0},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return !1},handleSwap:function(e,t,n,r){return !1},encodeParameters:function(e,t,n){return null}}}function defineExtension(e,t){t.init&&t.init(internalAPI),extensions[e]=mergeObjects(extensionBase(),t);}function removeExtension(e){delete extensions[e];}function getExtensions(e,t,n){if(t==null&&(t=[]),e==null)return t;n==null&&(n=[]);let r=getAttributeValue(e,"hx-ext");return r&&forEach(r.split(","),function(o){if(o=o.replace(/ /g,""),o.slice(0,7)=="ignore:"){n.push(o.slice(7));return}if(n.indexOf(o)<0){let i=extensions[o];i&&t.indexOf(i)<0&&t.push(i);}}),getExtensions(asElement(parentElt(e)),t,n)}var isReady=!1;getDocument().addEventListener("DOMContentLoaded",function(){isReady=!0;});function ready(e){isReady||getDocument().readyState==="complete"?e():getDocument().addEventListener("DOMContentLoaded",e);}function insertIndicatorStyles(){if(htmx.config.includeIndicatorStyles!==!1){let e=htmx.config.inlineStyleNonce?` nonce="${htmx.config.inlineStyleNonce}"`:"";getDocument().head.insertAdjacentHTML("beforeend","<style"+e+"> ."+htmx.config.indicatorClass+"{opacity:0} ."+htmx.config.requestClass+" ."+htmx.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} ."+htmx.config.requestClass+"."+htmx.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} </style>");}}function getMetaConfig(){let e=getDocument().querySelector('meta[name="htmx-config"]');return e?parseJSON(e.content):null}function mergeMetaConfig(){let e=getMetaConfig();e&&(htmx.config=mergeObjects(htmx.config,e));}return ready(function(){mergeMetaConfig(),insertIndicatorStyles();let e=getDocument().body;processNode(e);let t=getDocument().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(r){let o=r.target,i=getInternalData(o);i&&i.xhr&&i.xhr.abort();});let n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(r){r.state&&r.state.htmx?(restoreHistory(),forEach(t,function(o){triggerEvent(o,"htmx:restored",{document:getDocument(),triggerEvent});})):n&&n(r);},getWindow().setTimeout(function(){triggerEvent(e,"htmx:load",{}),e=null;},0);}),htmx}(),m=re;function oe(e,t){if(e==="ignore")return !1;let n=e.split("/"),r=t.split("/");for(let o=0;o<r.length;o++){let i=n.shift(),s=r[o];if(i!==s&&i!=="*")return !1;if(n.length===0||n.length===1&&n[0]==="")return !0}return !1}function ie(e){let t=m.findAll("[path-deps]");for(let n=0;n<t.length;n++){let r=t[n];oe(r.getAttribute("path-deps"),e)&&m.trigger(r,"path-deps",null);}}m.defineExtension("path-deps",{onEvent:function(e,t){if(!(t instanceof CustomEvent))return !1;if(e==="htmx:beforeOnLoad"){let n=t.detail.requestConfig;n&&n.verb!=="get"&&t.target!=null&&t.target instanceof Element&&t.target.getAttribute("path-deps")!=="ignore"&&ie(n.path);}}});function se(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}function ae(e,t){let n;return window.CustomEvent&&typeof window.CustomEvent=="function"?n=new CustomEvent(e,{bubbles:!1,cancelable:!0,composed:!0,detail:t}):(n=document.createEvent("CustomEvent"),n.initCustomEvent(e,!0,!0,t)),n}function $(e,t,n,r){n.detail.meta="trigger-children",e&&e.children&&Array.from(e.children).forEach(o=>{let s=se(t).replace("htmx:","hx-on::");if(!r.has(o)){if(o.hasAttribute(s)){let l=ae(s.replace("hx-on::","htmx:"),n.detail);o.dispatchEvent(l),r.add(o);}o.children&&$(o,t,n,r);}});}m.defineExtension("trigger-children",{onEvent:(e,t)=>{if(!(t instanceof CustomEvent)||t.detail.meta==="trigger-children")return !1;let n=new Set,r=t.target||t.detail.target;return $(r,e,t,n),!0},init:function(e){},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return !1},handleSwap:function(e,t,n,r){return !1},encodeParameters:function(e,t,n){},getSelectors:function(){return null}});m.defineExtension("debug",{onEvent:function(e,t){console.debug?console.debug(e,t):console&&console.log("DEBUG:",e,t);}});var H=m.config,W,le="hx-target-";function K(e,t){return e.substring(0,t.length)===t}function ue(e,t){if(!e||!t)return null;let n=t.toString(),r=[n,n.substr(0,2)+"*",n.substr(0,2)+"x",n.substr(0,1)+"*",n.substr(0,1)+"x",n.substr(0,1)+"**",n.substr(0,1)+"xx","*","x","***","xxx"];(K(n,"4")||K(n,"5"))&&r.push("error");for(let o=0;o<r.length;o++){let i=le+r[o],s=W.getClosestAttributeValue(e,i);if(s)return s==="this"?W.findThisElement(e,i):W.querySelectorExt(e,s)}return null}function Q(e){e.detail.isError?H.responseTargetUnsetsError&&(e.detail.isError=!1):H.responseTargetSetsError&&(e.detail.isError=!0);}m.defineExtension("response-targets",{init:e=>{W=e,H.responseTargetUnsetsError===void 0&&(H.responseTargetUnsetsError=!0),H.responseTargetSetsError===void 0&&(H.responseTargetSetsError=!1),H.responseTargetPrefersExisting===void 0&&(H.responseTargetPrefersExisting=!1),H.responseTargetPrefersRetargetHeader===void 0&&(H.responseTargetPrefersRetargetHeader=!0);},onEvent:(e,t)=>{if(!(t instanceof CustomEvent))return !1;if(e==="htmx:beforeSwap"&&t.detail.xhr&&t.detail.xhr.status!==200){if(t.detail.target&&(H.responseTargetPrefersExisting||H.responseTargetPrefersRetargetHeader&&t.detail.xhr.getAllResponseHeaders().match(/HX-Retarget:/i)))return t.detail.shouldSwap=!0,Q(t),!0;if(!t.detail.requestConfig)return !0;let n=ue(t.detail.requestConfig.elt,t.detail.xhr.status);return n&&(Q(t),t.detail.shouldSwap=!0,t.detail.target=n),!0}}});m.defineExtension("mutation-error",{onEvent:(e,t)=>{if(!(t instanceof CustomEvent))return !1;if(e==="htmx:afterRequest"){if(!t.detail||!t.detail.xhr)return;let n=t.detail.xhr.status;n>=400&&m.findAll("[hx-on\\:\\:mutation-error]").forEach(r=>{m.trigger(r,"htmx:mutation-error",{status:n});});}}});var B="";m.defineExtension("livereload",{init:function(){let e=!1;for(let n of Array.from(m.findAll("[hx-ext]")))if(n.getAttribute("hx-ext")?.split(" ").includes("livereload")){e=!0;break}if(!e)return;console.log("livereload extension initialized.");let t=new EventSource("/dev/livereload");t.onmessage=function(n){let r=n.data;B===""&&(B=r),B!==r&&(B=r,ce());},t.onerror=function(n){console.error("EventSource error:",n);};},onEvent:function(e,t){}});function ce(){window.location.reload();}var fe=/__eval_[A-Za-z0-9]+\([a-z]+\)/gm;m.defineExtension("htmgo",{onEvent:function(e,t){e==="htmx:beforeCleanupElement"&&t.target&&J(t.target);}});function J(e){let t=Array.from(e.attributes);for(let n of t){let r=n.value.match(fe)||[];for(let o of r){let i=o.replace("()","").replace("(this)","").replace(";",""),s=document.getElementById(i);s&&s.tagName==="SCRIPT"&&(console.debug("removing associated script with id",i),s.remove());}}}var f;function de(e){return e.trim().split(/\s+/)}function ge(e){let t=f.getAttributeValue(e,"hx-ws");if(t){let n=de(t);for(let r=0;r<n.length;r++){let o=n[r].split(/:(.+)/);if(o[0]==="connect")return o[1]}}}function he(e){if(!f.bodyContains(e))return;let t=f.getAttributeValue(e,"ws-connect");if(t==null||t===""){let r=ge(e);if(r==null)return;t=r;}if(t.indexOf("/")===0){let r=location.hostname+(location.port?":"+location.port:"");location.protocol==="https:"?t="wss://"+r+t:location.protocol==="http:"&&(t="ws://"+r+t);}let n=me(e,()=>xe(t));n.addEventListener("message",r=>{if(U(e))return;let o=r.data;if(!f.triggerEvent(e,"htmx:wsBeforeMessage",{message:o,socketWrapper:n.publicInterface}))return;f.withExtensions(e,l=>{o=l.transformResponse(o,null,e);});let i=f.makeSettleInfo(e),s=f.makeFragment(o);if(s.children.length){let l=Array.from(s.children);for(let a=0;a<l.length;a++){let u=l[a];f.oobSwap(f.getAttributeValue(u,"hx-swap-oob")||"true",l[a],i),u.tagName==="SCRIPT"&&u.id.startsWith("__eval")&&document.body.appendChild(u);}}f.settleImmediately(i.tasks),f.triggerEvent(e,"htmx:wsAfterMessage",{message:o,socketWrapper:n.publicInterface});}),f.getInternalData(e).webSocket=n;}function me(e,t){let n={socket:null,messageQueue:[],retryCount:0,events:{},addEventListener(r,o){this.socket&&this.socket.addEventListener(r,o),this.events[r]||(this.events[r]=[]),this.events[r].push(o);},sendImmediately(r,o){this.socket||f.triggerErrorEvent(e,"htmx:wsError",{error:"No socket available"}),(!o||f.triggerEvent(o,"htmx:wsBeforeSend",{message:r,socketWrapper:this.publicInterface}))&&(this.socket.send(r),o&&f.triggerEvent(o,"htmx:wsAfterSend",{message:r,socketWrapper:this.publicInterface}));},send(r,o){this.socket.readyState!==this.socket.OPEN?this.messageQueue.push({message:r,sendElt:o}):this.sendImmediately(r,o);},handleQueuedMessages(){for(;this.messageQueue.length>0;){let r=this.messageQueue[0];if(this.socket.readyState===this.socket.OPEN)this.sendImmediately(r.message,r.sendElt),this.messageQueue.shift();else break}},init(){this.socket&&this.socket.readyState===this.socket.OPEN&&this.socket.close();let r=t();f.triggerEvent(e,"htmx:wsConnecting",{event:{type:"connecting"}}),this.socket=r,r.onopen=i=>{this.retryCount=0,f.triggerEvent(e,"htmx:wsOpen",{event:i,socketWrapper:this.publicInterface}),this.handleQueuedMessages();},r.onclose=i=>{if(!U(e)&&[1006,1012,1013].indexOf(i.code)>=0){let s=be(this.retryCount);setTimeout(()=>{this.retryCount+=1,this.init();},s);}f.triggerEvent(e,"htmx:wsClose",{event:i,socketWrapper:this.publicInterface});},r.onerror=i=>{f.triggerErrorEvent(e,"htmx:wsError",{error:i,socketWrapper:this}),U(e);};let o=this.events;Object.keys(o).forEach(i=>{o[i].forEach(s=>{r.addEventListener(i,s);});});},close(){this.socket.close();},publicInterface:{}};return n.init(),n.publicInterface={send:n.send.bind(n),sendImmediately:n.sendImmediately.bind(n),queue:n.messageQueue},n}function Ee(e){let t=f.getAttributeValue(e,"hx-ws");if(t&&t!=="send")return;let n=f.getClosestMatch(e,r=>pe(r));n&&ye(n,e);}function pe(e){return f.getInternalData(e).webSocket!=null}function ye(e,t){let n=f.getInternalData(t);f.getTriggerSpecs(t).forEach(o=>{f.addTriggerHandler(t,o,n,(i,s)=>{if(U(e))return;let l=f.getInternalData(e).webSocket,a=f.getHeaders(t,f.getTarget(t)),u=f.getInputValues(t,"post"),d=u.errors,c=Object.assign({},u.values),g=f.getExpressionVars(t),x=f.mergeObjects(c,g),v={parameters:f.filterValues(x,t),unfilteredParameters:x,headers:a,errors:d,triggeringEvent:s,messageBody:void 0,socketWrapper:l.publicInterface};if(!f.triggerEvent(i,"htmx:wsConfigSend",v))return;if(d&&d.length>0){f.triggerEvent(i,"htmx:validation:halted",d);return}let E=v.messageBody;if(E===void 0){let p=Object.assign({},v.parameters);v.headers&&(p.HEADERS=a),E=JSON.stringify(p);}l.send(E,i),s&&f.shouldCancel(s,i)&&s.preventDefault();});});}function be(e){let t=Math.min(e,6);return 1e3*Math.pow(2,t)*Math.random()}function U(e){return f.bodyContains(e)?!1:(f.getInternalData(e).webSocket.close(),!0)}function xe(e){let t=new WebSocket(e,[]);return t.binaryType=m.config.wsBinaryType||"blob",t}function Z(e,t){let n=[];return (f.hasAttribute(e,t)||f.hasAttribute(e,"hx-ws"))&&n.push(e),e.querySelectorAll("["+t+"], [data-"+t+"], [data-hx-ws], [hx-ws]").forEach(r=>{n.push(r);}),n}function ee(e,t){e&&e.forEach(t);}m.defineExtension("ws",{init:e=>{f=e;},onEvent:(e,t)=>{let n=t.target||t.detail.elt;if(n instanceof HTMLElement)switch(e){case"htmx:beforeCleanupElement":J(n);let r=f.getInternalData(n);r.webSocket&&r.webSocket.close();return;case"htmx:beforeProcessNode":ee(Z(n,"ws-connect"),o=>{he(o);}),ee(Z(n,"ws-send"),o=>{Ee(o);});}}});function ve(e){let t=window.location.href;setInterval(()=>{window.location.href!==t&&(e(t,window.location.href),t=window.location.href);},100);}ve((e,t)=>{we(t);});function we(e){let t=new URL(e);document.querySelectorAll("[hx-trigger]").forEach(function(n){let r=n.getAttribute("hx-trigger");if(!r)return;if(r.split(", ").find(i=>i==="url"))m.swap(n,"url",{swapStyle:"outerHTML",swapDelay:0,settleDelay:0});else for(let[i,s]of t.searchParams){let l="qs:"+i;if(r.includes(l)){console.log("triggering",l),m.trigger(n,l,null);break}}}),document.querySelectorAll("[hx-match-qp]").forEach(n=>{let r=!1;for(let o of n.getAttributeNames())if(o.startsWith("hx-match-qp-mapping:")){let i=o.replace("hx-match-qp-mapping:","");if(t.searchParams.get(i)){m.swap(n,n.getAttribute(o)??"",{swapStyle:"innerHTML",swapDelay:0,settleDelay:0}),r=!0;break}}if(!r){let o=n.getAttribute("hx-match-qp-default");o&&m.swap(n,n.getAttribute("hx-match-qp-mapping:"+o)??"",{swapStyle:"innerHTML",swapDelay:0,settleDelay:0});}});}
//# sourceMappingURL=htmgo.js.map
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2pzL25vZGVfbW9kdWxlcy9odG14Lm9yZy9kaXN0L2h0bXguZXNtLmpzIiwiLi4vanMvaHRteGV4dGVuc2lvbnMvcGF0aGRlcHMudHMiLCIuLi9qcy9odG14ZXh0ZW5zaW9ucy90cmlnZ2VyLWNoaWxkcmVuLnRzIiwiLi4vanMvaHRteGV4dGVuc2lvbnMvZGVidWcudHMiLCIuLi9qcy9odG14ZXh0ZW5zaW9ucy9yZXNwb25zZS10YXJnZXRzLnRzIiwiLi4vanMvaHRteGV4dGVuc2lvbnMvbXV0YXRpb24tZXJyb3IudHMiLCIuLi9qcy9odG14ZXh0ZW5zaW9ucy9saXZlcmVsb2FkLnRzIiwiLi4vanMvaHRteGV4dGVuc2lvbnMvaHRtZ28udHMiLCIuLi9qcy9odG14ZXh0ZW5zaW9ucy93cy50cyIsIi4uL2pzL2h0bWdvLnRzIl0sIm5hbWVzIjpbImh0bXgiLCJlbHQiLCJ0eXBlIiwidmVyYiIsInRhZyIsImdsb2JhbCIsInN0ciIsImludGVydmFsIiwibmFtZSIsInF1YWxpZmllZE5hbWUiLCJwYXJlbnQiLCJjb25kaXRpb24iLCJpbml0aWFsRWxlbWVudCIsImFuY2VzdG9yIiwiYXR0cmlidXRlTmFtZSIsImF0dHJpYnV0ZVZhbHVlIiwiZGlzaW5oZXJpdCIsImluaGVyaXQiLCJjbG9zZXN0QXR0ciIsImUiLCJzZWxlY3RvciIsIm1hdGNoZXNGdW5jdGlvbiIsIm1hdGNoIiwicmVzcCIsImZyYWdtZW50Iiwic2NyaXB0IiwibmV3U2NyaXB0IiwiYXR0ciIsInJlc3BvbnNlIiwicmVzcG9uc2VXaXRoTm9IZWFkIiwic3RhcnRUYWciLCJkb2MiLCJ0aXRsZUVsZW1lbnQiLCJmdW5jIiwibyIsImRhdGFQcm9wIiwiZGF0YSIsImFyciIsInJldHVybkFyciIsImkiLCJlbCIsInJlY3QiLCJlbGVtVG9wIiwiZWxlbUJvdHRvbSIsInJvb3ROb2RlIiwidHJpZ2dlciIsIm9iajEiLCJvYmoyIiwia2V5IiwialN0cmluZyIsImVycm9yIiwidGVzdCIsInBhdGgiLCJ1cmwiLCJjYWxsYmFjayIsImV2dCIsImV2ZW50IiwiZWx0T3JTZWxlY3RvciIsImRlbGF5IiwidmFsdWUiLCJjbGF6eiIsIm5vZGUiLCJjaGlsZCIsInByZWZpeCIsInN1ZmZpeCIsInRyaW1tZWRTZWxlY3RvciIsInN0YXJ0IiwicmVzdWx0cyIsImNvbnRleHQiLCJhcmcxIiwiYXJnMiIsImFyZzMiLCJldmVudEFyZ3MiLCJhdHRyTmFtZSIsImF0dHJUYXJnZXQiLCJyZXN1bHQiLCJhdHRyaWJ1dGUiLCJ0YXJnZXRTdHIiLCJhdHRyaWJ1dGVzVG9TZXR0bGUiLCJtZXJnZVRvIiwibWVyZ2VGcm9tIiwic3dhcFN0eWxlIiwidGFyZ2V0IiwiZXh0ZW5zaW9ucyIsImV4dGVuc2lvbiIsIm9vYlZhbHVlIiwib29iRWxlbWVudCIsInNldHRsZUluZm8iLCJ0YXJnZXRzIiwib29iRWxlbWVudENsb25lIiwiYmVmb3JlU3dhcERldGFpbHMiLCJwcmVzZXJ2ZWRFbHQiLCJpZCIsIm9sZEVsdCIsInBhcmVudE5vZGUiLCJuZXdOb2RlIiwibm9ybWFsaXplZElkIiwibm9ybWFsaXplZFRhZyIsInBhcmVudEVsdCIsIm9sZE5vZGUiLCJuZXdBdHRyaWJ1dGVzIiwiYXV0b2ZvY3VzIiwiYXV0b0ZvY3VzZWRFbHQiLCJpbnNlcnRCZWZvcmUiLCJzdHJpbmciLCJoYXNoIiwiY2hhciIsImludGVybmFsRGF0YSIsImhhbmRsZXJJbmZvIiwiZWxlbWVudCIsImluZm8iLCJuZXdFbHQiLCJlbHRCZWZvcmVOZXdDb250ZW50IiwiZmlyc3RDaGlsZCIsImV4dCIsIm5ld0VsZW1lbnRzIiwiaiIsIm9vYkVsdHMiLCJjb250ZW50Iiwic3dhcFNwZWMiLCJzd2FwT3B0aW9ucyIsImFjdGl2ZUVsdCIsInNlbGVjdGlvbkluZm8iLCJvb2JTZWxlY3RWYWx1ZXMiLCJvb2JTZWxlY3RWYWx1ZSIsInRlbXBsYXRlIiwibmV3RnJhZ21lbnQiLCJuZXdBY3RpdmVFbHQiLCJmb2N1c09wdGlvbnMiLCJkb1NldHRsZSIsInRhc2siLCJhbmNob3JUYXJnZXQiLCJ4aHIiLCJoZWFkZXIiLCJ0cmlnZ2VyQm9keSIsInRyaWdnZXJzIiwiZXZlbnROYW1lIiwiZGV0YWlsIiwiZXZlbnROYW1lcyIsInRva2VucyIsInBvc2l0aW9uIiwic3RhcnRQb3NpdGlvbiIsInN0YXJ0Q2hhciIsInN5bWJvbCIsInRva2VuIiwibGFzdCIsInBhcmFtTmFtZSIsImJyYWNrZXRDb3VudCIsImNvbmRpdGlvbmFsU291cmNlIiwiY29uZGl0aW9uRnVuY3Rpb24iLCJleHBsaWNpdFRyaWdnZXIiLCJjYWNoZSIsInRyaWdnZXJTcGVjcyIsImluaXRpYWxMZW5ndGgiLCJldmVyeSIsImV2ZW50RmlsdGVyIiwidHJpZ2dlclNwZWMiLCJmcm9tX2FyZyIsImhhbmRsZXIiLCJzcGVjIiwibm9kZURhdGEiLCJyYXdBdHRyaWJ1dGUiLCJzb3VyY2UiLCJleHBsaWNpdENhbmNlbCIsImVsZW1lbnREYXRhIiwiZWx0c1RvTGlzdGVuT24iLCJlbHRUb0xpc3Rlbk9uIiwiZWx0VG9MaXN0ZW5PbkRhdGEiLCJldmVudExpc3RlbmVyIiwiZXZlbnREYXRhIiwibG9hZCIsImV4cGxpY2l0QWN0aW9uIiwib2JzZXJ2ZXJPcHRpb25zIiwiZW50cmllcyIsImF0dHJpYnV0ZXMiLCJlbGVtZW50cyIsIml0ZXIiLCJib29zdGVkU2VsZWN0b3IiLCJleHRlbnNpb25TZWxlY3RvcnMiLCJzZWxlY3RvcnMiLCJzIiwiZm9ybSIsImNvZGUiLCJsaXN0ZW5lciIsImFmdGVyT25Qb3NpdGlvbiIsIm5leHRDaGFyIiwidG9EbyIsIm1zZyIsImV2ZW50UmVzdWx0Iiwia2ViYWJOYW1lIiwia2ViYWJlZEV2ZW50Iiwicm9vdEVsdCIsImlubmVySFRNTCIsInRpdGxlIiwic2Nyb2xsIiwiaGlzdG9yeUNhY2hlIiwibmV3SGlzdG9yeUl0ZW0iLCJjbGFzc05hbWUiLCJjbG9uZSIsImRpc2FibGVIaXN0b3J5Q2FjaGUiLCJ0YXNrcyIsInJlcXVlc3QiLCJkZXRhaWxzIiwiaGlzdG9yeUVsZW1lbnQiLCJjYWNoZWQiLCJpbmRpY2F0b3JzIiwiaWMiLCJkaXNhYmxlZEVsdHMiLCJkaXNhYmxlZEVsZW1lbnQiLCJkaXNhYmxlZCIsInByb2Nlc3NlZCIsImZvcm1EYXRhIiwidiIsInZhbHVlcyIsImVycm9ycyIsInZhbGlkYXRlIiwiaW5wdXQiLCJyZWNlaXZlciIsImRvbm9yIiwicHJpb3JpdHlGb3JtRGF0YSIsImJ1dHRvbiIsImluY2x1ZGVzIiwiZGVzY2VuZGFudCIsInJldHVyblN0ciIsInJlYWxWYWx1ZSIsInByb21wdCIsImhlYWRlcnMiLCJpbnB1dFZhbHVlcyIsInBhcmFtc1ZhbHVlIiwibmV3VmFsdWVzIiwic3dhcEluZm9PdmVycmlkZSIsInN3YXBJbmZvIiwic3BsaXQiLCJzcGxpdFNwZWMiLCJzY3JvbGxWYWwiLCJzZWxlY3RvclZhbCIsInNob3dWYWwiLCJmb2N1c1Njcm9sbFZhbCIsImZpbHRlcmVkUGFyYW1ldGVycyIsImVuY29kZWRQYXJhbWV0ZXJzIiwiZmlyc3QiLCJldmFsQXNEZWZhdWx0IiwiZXZhbHVhdGVWYWx1ZSIsInZhcnNWYWx1ZXMiLCJ0b0V2YWwiLCJkZWZhdWx0VmFsIiwiZXhwcmVzc2lvblZhcnMiLCJoZWFkZXJWYWx1ZSIsInJlZ2V4cCIsInJlcXVlc3RDb25maWciLCJzYW1lSG9zdCIsIm9iaiIsImFycmF5IiwiaW5kZXgiLCJwcm9wIiwiZXRjIiwiY29uZmlybWVkIiwicmVzb2x2ZSIsInJlamVjdCIsInByb21pc2UiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJyZXNwb25zZUhhbmRsZXIiLCJzZWxlY3QiLCJlbHREYXRhIiwic3VibWl0dGVyIiwiYnV0dG9uUGF0aCIsImJ1dHRvblZlcmIiLCJjb25maXJtUXVlc3Rpb24iLCJza2lwQ29uZmlybWF0aW9uIiwic3luY0VsdCIsInN5bmNTdHJhdGVneSIsInF1ZXVlU3RyYXRlZ3kiLCJhYm9ydGFibGUiLCJzeW5jU3RyaW5ncyIsImVuZFJlcXVlc3RMb2NrIiwicHJvbXB0UXVlc3Rpb24iLCJwcm9tcHRSZXNwb25zZSIsInJhd0Zvcm1EYXRhIiwiYWxsRm9ybURhdGEiLCJmaWx0ZXJlZEZvcm1EYXRhIiwicmVxdWVzdEF0dHJWYWx1ZXMiLCJlbHRJc0Jvb3N0ZWQiLCJ1c2VVcmxQYXJhbXMiLCJzcGxpdFBhdGgiLCJwYXRoTm9BbmNob3IiLCJhbmNob3IiLCJmaW5hbFBhdGgiLCJyZXNwb25zZUluZm8iLCJoaWVyYXJjaHkiLCJkaXNhYmxlRWx0cyIsInNlY29uZGFyeVRyaWdnZXJFbHQiLCJwYXJlbnRFbHRJbkhpZXJhcmNoeSIsInBhcmFtcyIsInBhdGhGcm9tSGVhZGVycyIsInR5cGVGcm9tSGVhZGVycyIsInJlcXVlc3RQYXRoIiwicmVzcG9uc2VQYXRoIiwicHVzaFVybCIsInJlcGxhY2VVcmwiLCJlbGVtZW50SXNCb29zdGVkIiwic2F2ZVR5cGUiLCJyZXNwb25zZUhhbmRsaW5nQ29uZmlnIiwic3RhdHVzIiwicmVnRXhwIiwicmVzcG9uc2VIYW5kbGluZ0VsZW1lbnQiLCJ0aXRsZUVsdCIsInJlc3BvbnNlSW5mb1NlbGVjdCIsInJlZGlyZWN0UGF0aCIsInJlZGlyZWN0U3dhcFNwZWMiLCJzaG91bGRSZWZyZXNoIiwiaGlzdG9yeVVwZGF0ZSIsInJlc3BvbnNlSGFuZGxpbmciLCJzaG91bGRTd2FwIiwiaXNFcnJvciIsImlnbm9yZVRpdGxlIiwic2VsZWN0T3ZlcnJpZGUiLCJzd2FwT3ZlcnJpZGUiLCJzZXJ2ZXJSZXNwb25zZSIsInNldHRsZVJlc29sdmUiLCJzZXR0bGVSZWplY3QiLCJzZWxlY3RPT0IiLCJkb1N3YXAiLCJmaW5hbEVsdCIsInNob3VsZFRyYW5zaXRpb24iLCJzZXR0bGVQcm9taXNlIiwiaW5uZXJEb1N3YXAiLCJhcGkiLCJ0ZXh0IiwicGFyYW1ldGVycyIsImV4dGVuc2lvbnNUb1JldHVybiIsImV4dGVuc2lvbnNUb0lnbm9yZSIsImV4dGVuc2lvbnNGb3JFbGVtZW50IiwiZXh0ZW5zaW9uTmFtZSIsImZuIiwibm9uY2VBdHRyaWJ1dGUiLCJtZXRhQ29uZmlnIiwiYm9keSIsInJlc3RvcmVkRWx0cyIsIm9yaWdpbmFsUG9wc3RhdGUiLCJodG14X2VzbV9kZWZhdWx0IiwiZGVwZW5kc09uIiwicGF0aFNwZWMiLCJkZXBlbmRlbmN5UGF0aCIsInVybFBhdGgiLCJkZXBlbmRlbmN5RWxlbWVudCIsInBhdGhFbGVtZW50IiwicmVmcmVzaFBhdGgiLCJlbHRzV2l0aERlcHMiLCJjb25maWciLCJrZWJhYkV2ZW50TmFtZSIsIm1ha2VFdmVudCIsInRyaWdnZXJDaGlsZHJlbiIsInRyaWdnZXJlZCIsIm5ld0V2ZW50IiwiYXR0clByZWZpeCIsInN0YXJ0c1dpdGgiLCJnZXRSZXNwQ29kZVRhcmdldCIsInJlc3BDb2RlTnVtYmVyIiwicmVzcENvZGUiLCJhdHRyUG9zc2liaWxpdGllcyIsImF0dHJWYWx1ZSIsImhhbmRsZUVycm9yRmxhZyIsImFwaVJlZiIsImxhc3RWZXJzaW9uIiwiZW5hYmxlZCIsImV2ZW50U291cmNlIiwibWVzc2FnZSIsInJlbG9hZCIsImV2YWxGdW5jUmVnZXgiLCJyZW1vdmVBc3NvY2lhdGVkU2NyaXB0cyIsIm1hdGNoZXMiLCJlbGUiLCJzcGxpdE9uV2hpdGVzcGFjZSIsImdldExlZ2FjeVdlYnNvY2tldFVSTCIsImxlZ2FjeVNTRVZhbHVlIiwiZW5zdXJlV2ViU29ja2V0Iiwic29ja2V0RWx0Iiwid3NzU291cmNlIiwibGVnYWN5U291cmNlIiwiYmFzZV9wYXJ0Iiwic29ja2V0V3JhcHBlciIsImNyZWF0ZVdlYnNvY2tldFdyYXBwZXIiLCJjcmVhdGVXZWJTb2NrZXQiLCJtYXliZUNsb3NlV2ViU29ja2V0U291cmNlIiwiY2hpbGRyZW4iLCJzb2NrZXRGdW5jIiwid3JhcHBlciIsInNlbmRFbHQiLCJxdWV1ZWRJdGVtIiwic29ja2V0IiwiZ2V0V2ViU29ja2V0UmVjb25uZWN0RGVsYXkiLCJldmVudHMiLCJrIiwiZW5zdXJlV2ViU29ja2V0U2VuZCIsImxlZ2FjeUF0dHJpYnV0ZSIsIndlYlNvY2tldFBhcmVudCIsImhhc1dlYlNvY2tldCIsInByb2Nlc3NXZWJTb2NrZXRTZW5kIiwidHMiLCJyYXdQYXJhbWV0ZXJzIiwiYWxsUGFyYW1ldGVycyIsInNlbmRDb25maWciLCJ0b1NlbmQiLCJyZXRyeUNvdW50IiwiZXhwIiwic29jayIsInF1ZXJ5QXR0cmlidXRlT25UaGlzT3JDaGlsZHJlbiIsImZvckVhY2giLCJ3YXRjaFVybCIsImxhc3RVcmwiLCJfIiwibmV3VXJsIiwib25VcmxDaGFuZ2UiLCJoYXNNYXRjaCIsImRlZmF1bHRLZXkiXSwibWFwcGluZ3MiOiJBQUFBLElBQUlBLEVBQUFBLENBQVEsVUFBVyxDQUlyQixJQUFNLElBQU8sQ0FBQSxDQUlYLE9BQVEsSUFFUixDQUFBLE9BQUEsQ0FBUyxLQUVULEVBQUksQ0FBQSxJQUFBLENBRUosSUFBSyxJQUVMLENBQUEsT0FBQSxDQUFTLEtBRVQsSUFBTSxDQUFBLElBQUEsQ0FHTixJQUFNLENBQUEsSUFBQSxDQUVOLE9BQVMsQ0FBQSxJQUFBLENBRVQsUUFBUyxJQVVULENBQUEsTUFBQSxDQUFRLFNBQVNDLENBQUtDLENBQUFBLENBQUFBLENBQU0sQ0FFMUIsT0FEb0IsY0FBQSxDQUFlRCxDQUFLQyxDQUFBQSxDQUFBQSxFQUFRLE1BQU0sQ0FBQSxDQUNuQyxNQUNyQixDQUdBLENBQUEsTUFBQSxDQUFRLEtBRVIsUUFBVSxDQUFBLElBQUEsQ0FFVixZQUFhLElBRWIsQ0FBQSxXQUFBLENBQWEsSUFFYixDQUFBLFNBQUEsQ0FBVyxJQUVYLENBQUEsSUFBQSxDQUFNLEtBR04sZUFBaUIsQ0FBQSxJQUFBLENBRWpCLGdCQUFpQixJQUdqQixDQUFBLE1BQUEsQ0FBUSxLQUVSLE9BQVMsQ0FBQSxJQUFBLENBT1QsTUFBUSxDQUFBLElBQUEsQ0FRUixNQUFRLENBQUEsQ0FNTixlQUFnQixDQU1oQixDQUFBLENBQUEsZ0JBQUEsQ0FBa0IsR0FLbEIsb0JBQXNCLENBQUEsQ0FBQSxDQUFBLENBTXRCLGlCQUFrQixXQU1sQixDQUFBLGdCQUFBLENBQWtCLENBTWxCLENBQUEsa0JBQUEsQ0FBb0IsRUFNcEIsQ0FBQSxzQkFBQSxDQUF3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QUFxQixDQUFBLENBQ2xEdVgsR0FDRjNFLENBQUssQ0FBQSxJQUFBLENBQ0g1UyxFQUNBQSxDQUFHLENBQUEsWUFBQSxDQUFhLHNCQUF5QnVYLENBQUFBLENBQVUsQ0FBSyxFQUFBLEVBQUEsQ0FDeEQsQ0FBRSxTQUFXLENBQUEsV0FBQSxDQUFhLFVBQVcsQ0FBRyxDQUFBLFdBQUEsQ0FBYSxDQUFFLENBQ3pELEVBRUosQ0FDRixDQUFDLEVBQ0giLCJmaWxlIjoiaHRtZ28uanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaHRteCA9IChmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnXG5cbiAgLy8gUHVibGljIEFQSVxuICBjb25zdCBodG14ID0ge1xuICAgIC8vIFRzYyBtYWRuZXNzIGhlcmUsIGFzc2lnbmluZyB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IHJlc3VsdHMgaW4gYW4gaW52YWxpZCBUeXBlU2NyaXB0IG91dHB1dCwgYnV0IHJlYXNzaWduaW5nIGlzIGZpbmVcbiAgICAvKiBFdmVudCBwcm9jZXNzaW5nICovXG4gICAgLyoqIEB0eXBlIHt0eXBlb2Ygb25Mb2FkSGVscGVyfSAqL1xuICAgIG9uTG9hZDogbnVsbCxcbiAgICAvKiogQHR5cGUge3R5cGVvZiBwcm9jZXNzTm9kZX0gKi9cbiAgICBwcm9jZXNzOiBudWxsLFxuICAgIC8qKiBAdHlwZSB7dHlwZW9mIGFkZEV2ZW50TGlzdGVuZXJJbXBsfSAqL1xuICAgIG9uOiBudWxsLFxuICAgIC8qKiBAdHlwZSB7dHlwZW9mIHJlbW92ZUV2ZW50TGlzdGVuZXJJbXBsfSAqL1xuICAgIG9mZjogbnVsbCxcbiAgICAvKiogQHR5cGUge3R5cGVvZiB0cmlnZ2VyRXZlbnR9ICovXG4gICAgdHJpZ2dlcjogbnVsbCxcbiAgICAvKiogQHR5cGUge3R5cGVvZiBhamF4SGVscGVyfSAqL1xuICAgIGFqYXg6IG51bGwsXG4gICAgLyogRE9NIHF1ZXJ5aW5nIGhlbHBlcnMgKi9cbiAgICAvKiogQHR5cGUge3R5cGVvZiBmaW5kfSAqL1xuICAgIGZpbmQ6IG51bGwsXG4gICAgLyoqIEB0eXBlIHt0eXBlb2YgZmluZEFsbH0gKi9cbiAgICBmaW5kQWxsOiBudWxsLFxuICAgIC8qKiBAdHlwZSB7dHlwZW9mIGNsb3Nlc3R9ICovXG4gICAgY2xvc2VzdDogbnVsbCxcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpbnB1dCB2YWx1ZXMgdGhhdCB3b3VsZCByZXNvbHZlIGZvciBhIGdpdmVuIGVsZW1lbnQgdmlhIHRoZSBodG14IHZhbHVlIHJlc29sdXRpb24gbWVjaGFuaXNtXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vaHRteC5vcmcvYXBpLyN2YWx1ZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0IHRoZSBlbGVtZW50IHRvIHJlc29sdmUgdmFsdWVzIG9uXG4gICAgICogQHBhcmFtIHtIdHRwVmVyYn0gdHlwZSB0aGUgcmVxdWVzdCB0eXBlIChlLmcuICoqZ2V0Kiogb3IgKipwb3N0KiopIG5vbi1HRVQncyB3aWxsIGluY2x1ZGUgdGhlIGVuY2xvc2luZyBmb3JtIG9mIHRoZSBlbGVtZW50LiBEZWZhdWx0cyB0byAqKnBvc3QqKlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgICovXG4gICAgdmFsdWVzOiBmdW5jdGlvbihlbHQsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGlucHV0VmFsdWVzID0gZ2V0SW5wdXRWYWx1ZXMoZWx0LCB0eXBlIHx8ICdwb3N0JylcbiAgICAgIHJldHVybiBpbnB1dFZhbHVlcy52YWx1ZXNcbiAgICB9LFxuICAgIC8qIERPTSBtYW5pcHVsYXRpb24gaGVscGVycyAqL1xuICAgIC8qKiBAdHlwZSB7dHlwZW9mIHJlbW92ZUVsZW1lbnR9ICovXG4gICAgcmVtb3ZlOiBudWxsLFxuICAgIC8qKiBAdHlwZSB7dHlwZW9mIGFkZENsYXNzVG9FbGVtZW50fSAqL1xuICAgIGFkZENsYXNzOiBudWxsLFxuICAgIC8qKiBAdHlwZSB7dHlwZW9mIHJlbW92ZUNsYXNzRnJvbUVsZW1lbnR9ICovXG4gICAgcmVtb3ZlQ2xhc3M6IG51bGwsXG4gICAgLyoqIEB0eXBlIHt0eXBlb2YgdG9nZ2xlQ2xhc3NPbkVsZW1lbnR9ICovXG4gICAgdG9nZ2xlQ2xhc3M6IG51bGwsXG4gICAgLyoqIEB0eXBlIHt0eXBlb2YgdGFrZUNsYXNzRm9yRWxlbWVudH0gKi9cbiAgICB0YWtlQ2xhc3M6IG51bGwsXG4gICAgLyoqIEB0eXBlIHt0eXBlb2Ygc3dhcH0gKi9cbiAgICBzd2FwOiBudWxsLFxuICAgIC8qIEV4dGVuc2lvbiBlbnRyeXBvaW50cyAqL1xuICAgIC8qKiBAdHlwZSB7dHlwZW9mIGRlZmluZUV4dGVuc2lvbn0gKi9cbiAgICBkZWZpbmVFeHRlbnNpb246IG51bGwsXG4gICAgLyoqIEB0eXBlIHt0eXBlb2YgcmVtb3ZlRXh0ZW5zaW9ufSAqL1xuICAgIHJlbW92ZUV4dGVuc2lvbjogbnVsbCxcbiAgICAvKiBEZWJ1Z2dpbmcgKi9cbiAgICAvKiogQHR5cGUge3R5cGVvZiBsb2dBbGx9ICovXG4gICAgbG9nQWxsOiBudWxsLFxuICAgIC8qKiBAdHlwZSB7dHlwZW9mIGxvZ05vbmV9ICovXG4gICAgbG9nTm9uZTogbnVsbCxcbiAgICAvKiBEZWJ1Z2dpbmcgKi9cbiAgICAvKipcbiAgICAgKiBUaGUgbG9nZ2VyIGh0bXggdXNlcyB0byBsb2cgd2l0aFxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jbG9nZ2VyXG4gICAgICovXG4gICAgbG9nZ2VyOiBudWxsLFxuICAgIC8qKlxuICAgICAqIEEgcHJvcGVydHkgaG9sZGluZyB0aGUgY29uZmlndXJhdGlvbiBodG14IHVzZXMgYXQgcnVudGltZS5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB1c2luZyBhIFttZXRhIHRhZ10oaHR0cHM6Ly9odG14Lm9yZy9kb2NzLyNjb25maWcpIGlzIHRoZSBwcmVmZXJyZWQgbWVjaGFuaXNtIGZvciBzZXR0aW5nIHRoZXNlIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vaHRteC5vcmcvYXBpLyNjb25maWdcbiAgICAgKi9cbiAgICBjb25maWc6IHtcbiAgICAgIC8qKlxuICAgICAgICogV2hldGhlciB0byB1c2UgaGlzdG9yeS5cbiAgICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAqL1xuICAgICAgaGlzdG9yeUVuYWJsZWQ6IHRydWUsXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBudW1iZXIgb2YgcGFnZXMgdG8ga2VlcCBpbiAqKmxvY2FsU3RvcmFnZSoqIGZvciBoaXN0b3J5IHN1cHBvcnQuXG4gICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICAgKi9cbiAgICAgIGhpc3RvcnlDYWNoZVNpemU6IDEwLFxuICAgICAgLyoqXG4gICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICovXG4gICAgICByZWZyZXNoT25IaXN0b3J5TWlzczogZmFsc2UsXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBkZWZhdWx0IHN3YXAgc3R5bGUgdG8gdXNlIGlmICoqW2h4LXN3YXBdKGh0dHBzOi8vaHRteC5vcmcvYXR0cmlidXRlcy9oeC1zd2FwKSoqIGlzIG9taXR0ZWQuXG4gICAgICAgKiBAdHlwZSBIdG14U3dhcFN0eWxlXG4gICAgICAgKiBAZGVmYXVsdCAnaW5uZXJIVE1MJ1xuICAgICAgICovXG4gICAgICBkZWZhdWx0U3dhcFN0eWxlOiAnaW5uZXJIVE1MJyxcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGRlZmF1bHQgZGVsYXkgYmV0d2VlbiByZWNlaXZpbmcgYSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIgYW5kIGRvaW5nIHRoZSBzd2FwLlxuICAgICAgICogQHR5cGUgbnVtYmVyXG4gICAgICAgKiBAZGVmYXVsdCAwXG4gICAgICAgKi9cbiAgICAgIGRlZmF1bHRTd2FwRGVsYXk6IDAsXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBkZWZhdWx0IGRlbGF5IGJldHdlZW4gY29tcGxldGluZyB0aGUgY29udGVudCBzd2FwIGFuZCBzZXR0bGluZyBhdHRyaWJ1dGVzLlxuICAgICAgICogQHR5cGUgbnVtYmVyXG4gICAgICAgKiBAZGVmYXVsdCAyMFxuICAgICAgICovXG4gICAgICBkZWZhdWx0U2V0dGxlRGVsYXk6IDIwLFxuICAgICAgLyoqXG4gICAgICAgKiBJZiB0cnVlLCBodG14IHdpbGwgaW5qZWN0IGEgc21hbGwgYW1vdW50IG9mIENTUyBpbnRvIHRoZSBwYWdlIHRvIG1ha2UgaW5kaWNhdG9ycyBpbnZpc2libGUgdW5sZXNzIHRoZSAqKmh0bXgtaW5kaWNhdG9yKiogY2xhc3MgaXMgcHJlc2VudC5cbiAgICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAqL1xuICAgICAgaW5jbHVkZUluZGljYXRvclN0eWxlczogdHJ1ZSxcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGNsYXNzIHRvIHBsYWNlIG9uIGluZGljYXRvcnMgd2hlbiBhIHJlcXVlc3QgaXMgaW4gZmxpZ2h0LlxuICAgICAgICogQHR5cGUgc3RyaW5nXG4gICAgICAgKiBAZGVmYXVsdCAnaHRteC1pbmRpY2F0b3InXG4gICAgICAgKi9cbiAgICAgIGluZGljYXRvckNsYXNzOiAnaHRteC1pbmRpY2F0b3InLFxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgY2xhc3MgdG8gcGxhY2Ugb24gdHJpZ2dlcmluZyBlbGVtZW50cyB3aGVuIGEgcmVxdWVzdCBpcyBpbiBmbGlnaHQuXG4gICAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgICAqIEBkZWZhdWx0ICdodG14LXJlcXVlc3QnXG4gICAgICAgKi9cbiAgICAgIHJlcXVlc3RDbGFzczogJ2h0bXgtcmVxdWVzdCcsXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBjbGFzcyB0byB0ZW1wb3JhcmlseSBwbGFjZSBvbiBlbGVtZW50cyB0aGF0IGh0bXggaGFzIGFkZGVkIHRvIHRoZSBET00uXG4gICAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgICAqIEBkZWZhdWx0ICdodG14LWFkZGVkJ1xuICAgICAgICovXG4gICAgICBhZGRlZENsYXNzOiAnaHRteC1hZGRlZCcsXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBjbGFzcyB0byBwbGFjZSBvbiB0YXJnZXQgZWxlbWVudHMgd2hlbiBodG14IGlzIGluIHRoZSBzZXR0bGluZyBwaGFzZS5cbiAgICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAgICogQGRlZmF1bHQgJ2h0bXgtc2V0dGxpbmcnXG4gICAgICAgKi9cbiAgICAgIHNldHRsaW5nQ2xhc3M6ICdodG14LXNldHRsaW5nJyxcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGNsYXNzIHRvIHBsYWNlIG9uIHRhcmdldCBlbGVtZW50cyB3aGVuIGh0bXggaXMgaW4gdGhlIHN3YXBwaW5nIHBoYXNlLlxuICAgICAgICogQHR5cGUgc3RyaW5nXG4gICAgICAgKiBAZGVmYXVsdCAnaHRteC1zd2FwcGluZydcbiAgICAgICAqL1xuICAgICAgc3dhcHBpbmdDbGFzczogJ2h0bXgtc3dhcHBpbmcnLFxuICAgICAgLyoqXG4gICAgICAgKiBBbGxvd3MgdGhlIHVzZSBvZiBldmFsLWxpa2UgZnVuY3Rpb25hbGl0eSBpbiBodG14LCB0byBlbmFibGUgKipoeC12YXJzKiosIHRyaWdnZXIgY29uZGl0aW9ucyAmIHNjcmlwdCB0YWcgZXZhbHVhdGlvbi4gQ2FuIGJlIHNldCB0byAqKmZhbHNlKiogZm9yIENTUCBjb21wYXRpYmlsaXR5LlxuICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICovXG4gICAgICBhbGxvd0V2YWw6IHRydWUsXG4gICAgICAvKipcbiAgICAgICAqIElmIHNldCB0byBmYWxzZSwgZGlzYWJsZXMgdGhlIGludGVycHJldGF0aW9uIG9mIHNjcmlwdCB0YWdzLlxuICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICovXG4gICAgICBhbGxvd1NjcmlwdFRhZ3M6IHRydWUsXG4gICAgICAvKipcbiAgICAgICAqIElmIHNldCwgdGhlIG5vbmNlIHdpbGwgYmUgYWRkZWQgdG8gaW5saW5lIHNjcmlwdHMuXG4gICAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgICAqIEBkZWZhdWx0ICcnXG4gICAgICAgKi9cbiAgICAgIGlubGluZVNjcmlwdE5vbmNlOiAnJyxcbiAgICAgIC8qKlxuICAgICAgICogSWYgc2V0LCB0aGUgbm9uY2Ugd2lsbCBiZSBhZGRlZCB0byBpbmxpbmUgc3R5bGVzLlxuICAgICAgICogQHR5cGUgc3RyaW5nXG4gICAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAgICovXG4gICAgICBpbmxpbmVTdHlsZU5vbmNlOiAnJyxcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGF0dHJpYnV0ZXMgdG8gc2V0dGxlIGR1cmluZyB0aGUgc2V0dGxpbmcgcGhhc2UuXG4gICAgICAgKiBAdHlwZSBzdHJpbmdbXVxuICAgICAgICogQGRlZmF1bHQgWydjbGFzcycsICdzdHlsZScsICd3aWR0aCcsICdoZWlnaHQnXVxuICAgICAgICovXG4gICAgICBhdHRyaWJ1dGVzVG9TZXR0bGU6IFsnY2xhc3MnLCAnc3R5bGUnLCAnd2lkdGgnLCAnaGVpZ2h0J10sXG4gICAgICAvKipcbiAgICAgICAqIEFsbG93IGNyb3NzLXNpdGUgQWNjZXNzLUNvbnRyb2wgcmVxdWVzdHMgdXNpbmcgY3JlZGVudGlhbHMgc3VjaCBhcyBjb29raWVzLCBhdXRob3JpemF0aW9uIGhlYWRlcnMgb3IgVExTIGNsaWVudCBjZXJ0aWZpY2F0ZXMuXG4gICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICovXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgICAgLyoqXG4gICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAqIEBkZWZhdWx0IDBcbiAgICAgICAqL1xuICAgICAgdGltZW91dDogMCxcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgKipnZXRXZWJTb2NrZXRSZWNvbm5lY3REZWxheSoqIGZvciByZWNvbm5lY3RpbmcgYWZ0ZXIgdW5leHBlY3RlZCBjb25uZWN0aW9uIGxvc3MgYnkgdGhlIGV2ZW50IGNvZGUgKipBYm5vcm1hbCBDbG9zdXJlKiosICoqU2VydmljZSBSZXN0YXJ0Kiogb3IgKipUcnkgQWdhaW4gTGF0ZXIqKi5cbiAgICAgICAqIEB0eXBlIHsnZnVsbC1qaXR0ZXInIHwgKChyZXRyeUNvdW50Om51bWJlcikgPT4gbnVtYmVyKX1cbiAgICAgICAqIEBkZWZhdWx0IFwiZnVsbC1qaXR0ZXJcIlxuICAgICAgICovXG4gICAgICB3c1JlY29ubmVjdERlbGF5OiAnZnVsbC1qaXR0ZXInLFxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdHlwZSBvZiBiaW5hcnkgZGF0YSBiZWluZyByZWNlaXZlZCBvdmVyIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvblxuICAgICAgICogQHR5cGUgQmluYXJ5VHlwZVxuICAgICAgICogQGRlZmF1bHQgJ2Jsb2InXG4gICAgICAgKi9cbiAgICAgIHdzQmluYXJ5VHlwZTogJ2Jsb2InLFxuICAgICAgLyoqXG4gICAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgICAqIEBkZWZhdWx0ICdbaHgtZGlzYWJsZV0sIFtkYXRhLWh4LWRpc2FibGVdJ1xuICAgICAgICovXG4gICAgICBkaXNhYmxlU2VsZWN0b3I6ICdbaHgtZGlzYWJsZV0sIFtkYXRhLWh4LWRpc2FibGVdJyxcbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUgeydhdXRvJyB8ICdpbnN0YW50JyB8ICdzbW9vdGgnfVxuICAgICAgICogQGRlZmF1bHQgJ2luc3RhbnQnXG4gICAgICAgKi9cbiAgICAgIHNjcm9sbEJlaGF2aW9yOiAnaW5zdGFudCcsXG4gICAgICAvKipcbiAgICAgICAqIElmIHRoZSBmb2N1c2VkIGVsZW1lbnQgc2hvdWxkIGJlIHNjcm9sbGVkIGludG8gdmlldy5cbiAgICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgICAgIGRlZmF1bHRGb2N1c1Njcm9sbDogZmFsc2UsXG4gICAgICAvKipcbiAgICAgICAqIElmIHNldCB0byB0cnVlIGh0bXggd2lsbCBpbmNsdWRlIGEgY2FjaGUtYnVzdGluZyBwYXJhbWV0ZXIgaW4gR0VUIHJlcXVlc3RzIHRvIGF2b2lkIGNhY2hpbmcgcGFydGlhbCByZXNwb25zZXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgICAgIGdldENhY2hlQnVzdGVyUGFyYW06IGZhbHNlLFxuICAgICAgLyoqXG4gICAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgaHRteCB3aWxsIHVzZSB0aGUgVmlldyBUcmFuc2l0aW9uIEFQSSB3aGVuIHN3YXBwaW5nIGluIG5ldyBjb250ZW50LlxuICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgICAgZ2xvYmFsVmlld1RyYW5zaXRpb25zOiBmYWxzZSxcbiAgICAgIC8qKlxuICAgICAgICogaHRteCB3aWxsIGZvcm1hdCByZXF1ZXN0cyB3aXRoIHRoZXNlIG1ldGhvZHMgYnkgZW5jb2RpbmcgdGhlaXIgcGFyYW1ldGVycyBpbiB0aGUgVVJMLCBub3QgdGhlIHJlcXVlc3QgYm9keVxuICAgICAgICogQHR5cGUgeyhIdHRwVmVyYilbXX1cbiAgICAgICAqIEBkZWZhdWx0IFsnZ2V0JywgJ2RlbGV0ZSddXG4gICAgICAgKi9cbiAgICAgIG1ldGhvZHNUaGF0VXNlVXJsUGFyYW1zOiBbJ2dldCcsICdkZWxldGUnXSxcbiAgICAgIC8qKlxuICAgICAgICogSWYgc2V0IHRvIHRydWUsIGRpc2FibGVzIGh0bXgtYmFzZWQgcmVxdWVzdHMgdG8gbm9uLW9yaWdpbiBob3N0cy5cbiAgICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgICAgIHNlbGZSZXF1ZXN0c09ubHk6IHRydWUsXG4gICAgICAvKipcbiAgICAgICAqIElmIHNldCB0byB0cnVlIGh0bXggd2lsbCBub3QgdXBkYXRlIHRoZSB0aXRsZSBvZiB0aGUgZG9jdW1lbnQgd2hlbiBhIHRpdGxlIHRhZyBpcyBmb3VuZCBpbiBuZXcgY29udGVudFxuICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgICAgaWdub3JlVGl0bGU6IGZhbHNlLFxuICAgICAgLyoqXG4gICAgICAgKiBXaGV0aGVyIHRoZSB0YXJnZXQgb2YgYSBib29zdGVkIGVsZW1lbnQgaXMgc2Nyb2xsZWQgaW50byB0aGUgdmlld3BvcnQuXG4gICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICAgKi9cbiAgICAgIHNjcm9sbEludG9WaWV3T25Cb29zdDogdHJ1ZSxcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGNhY2hlIHRvIHN0b3JlIGV2YWx1YXRlZCB0cmlnZ2VyIHNwZWNpZmljYXRpb25zIGludG8uXG4gICAgICAgKiBZb3UgbWF5IGRlZmluZSBhIHNpbXBsZSBvYmplY3QgdG8gdXNlIGEgbmV2ZXItY2xlYXJpbmcgY2FjaGUsIG9yIGltcGxlbWVudCB5b3VyIG93biBzeXN0ZW0gdXNpbmcgYSBbcHJveHkgb2JqZWN0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9Qcm94eSlcbiAgICAgICAqIEB0eXBlIHtPYmplY3R8bnVsbH1cbiAgICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgICAqL1xuICAgICAgdHJpZ2dlclNwZWNzQ2FjaGU6IG51bGwsXG4gICAgICAvKiogQHR5cGUgYm9vbGVhbiAqL1xuICAgICAgZGlzYWJsZUluaGVyaXRhbmNlOiBmYWxzZSxcbiAgICAgIC8qKiBAdHlwZSBIdG14UmVzcG9uc2VIYW5kbGluZ0NvbmZpZ1tdICovXG4gICAgICByZXNwb25zZUhhbmRsaW5nOiBbXG4gICAgICAgIHsgY29kZTogJzIwNCcsIHN3YXA6IGZhbHNlIH0sXG4gICAgICAgIHsgY29kZTogJ1syM10uLicsIHN3YXA6IHRydWUgfSxcbiAgICAgICAgeyBjb2RlOiAnWzQ1XS4uJywgc3dhcDogZmFsc2UsIGVycm9yOiB0cnVlIH1cbiAgICAgIF0sXG4gICAgICAvKipcbiAgICAgICAqIFdoZXRoZXIgdG8gcHJvY2VzcyBPT0Igc3dhcHMgb24gZWxlbWVudHMgdGhhdCBhcmUgbmVzdGVkIHdpdGhpbiB0aGUgbWFpbiByZXNwb25zZSBlbGVtZW50LlxuICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICovXG4gICAgICBhbGxvd05lc3RlZE9vYlN3YXBzOiB0cnVlXG4gICAgfSxcbiAgICAvKiogQHR5cGUge3R5cGVvZiBwYXJzZUludGVydmFsfSAqL1xuICAgIHBhcnNlSW50ZXJ2YWw6IG51bGwsXG4gICAgLyoqIEB0eXBlIHt0eXBlb2YgaW50ZXJuYWxFdmFsfSAqL1xuICAgIF86IG51bGwsXG4gICAgdmVyc2lvbjogJzIuMC4yJ1xuICB9XG4gIC8vIFRzYyBtYWRuZXNzIHBhcnQgMlxuICBodG14Lm9uTG9hZCA9IG9uTG9hZEhlbHBlclxuICBodG14LnByb2Nlc3MgPSBwcm9jZXNzTm9kZVxuICBodG14Lm9uID0gYWRkRXZlbnRMaXN0ZW5lckltcGxcbiAgaHRteC5vZmYgPSByZW1vdmVFdmVudExpc3RlbmVySW1wbFxuICBodG14LnRyaWdnZXIgPSB0cmlnZ2VyRXZlbnRcbiAgaHRteC5hamF4ID0gYWpheEhlbHBlclxuICBodG14LmZpbmQgPSBmaW5kXG4gIGh0bXguZmluZEFsbCA9IGZpbmRBbGxcbiAgaHRteC5jbG9zZXN0ID0gY2xvc2VzdFxuICBodG14LnJlbW92ZSA9IHJlbW92ZUVsZW1lbnRcbiAgaHRteC5hZGRDbGFzcyA9IGFkZENsYXNzVG9FbGVtZW50XG4gIGh0bXgucmVtb3ZlQ2xhc3MgPSByZW1vdmVDbGFzc0Zyb21FbGVtZW50XG4gIGh0bXgudG9nZ2xlQ2xhc3MgPSB0b2dnbGVDbGFzc09uRWxlbWVudFxuICBodG14LnRha2VDbGFzcyA9IHRha2VDbGFzc0ZvckVsZW1lbnRcbiAgaHRteC5zd2FwID0gc3dhcFxuICBodG14LmRlZmluZUV4dGVuc2lvbiA9IGRlZmluZUV4dGVuc2lvblxuICBodG14LnJlbW92ZUV4dGVuc2lvbiA9IHJlbW92ZUV4dGVuc2lvblxuICBodG14LmxvZ0FsbCA9IGxvZ0FsbFxuICBodG14LmxvZ05vbmUgPSBsb2dOb25lXG4gIGh0bXgucGFyc2VJbnRlcnZhbCA9IHBhcnNlSW50ZXJ2YWxcbiAgaHRteC5fID0gaW50ZXJuYWxFdmFsXG5cbiAgY29uc3QgaW50ZXJuYWxBUEkgPSB7XG4gICAgYWRkVHJpZ2dlckhhbmRsZXIsXG4gICAgYm9keUNvbnRhaW5zLFxuICAgIGNhbkFjY2Vzc0xvY2FsU3RvcmFnZSxcbiAgICBmaW5kVGhpc0VsZW1lbnQsXG4gICAgZmlsdGVyVmFsdWVzLFxuICAgIHN3YXAsXG4gICAgaGFzQXR0cmlidXRlLFxuICAgIGdldEF0dHJpYnV0ZVZhbHVlLFxuICAgIGdldENsb3Nlc3RBdHRyaWJ1dGVWYWx1ZSxcbiAgICBnZXRDbG9zZXN0TWF0Y2gsXG4gICAgZ2V0RXhwcmVzc2lvblZhcnMsXG4gICAgZ2V0SGVhZGVycyxcbiAgICBnZXRJbnB1dFZhbHVlcyxcbiAgICBnZXRJbnRlcm5hbERhdGEsXG4gICAgZ2V0U3dhcFNwZWNpZmljYXRpb24sXG4gICAgZ2V0VHJpZ2dlclNwZWNzLFxuICAgIGdldFRhcmdldCxcbiAgICBtYWtlRnJhZ21lbnQsXG4gICAgbWVyZ2VPYmplY3RzLFxuICAgIG1ha2VTZXR0bGVJbmZvLFxuICAgIG9vYlN3YXAsXG4gICAgcXVlcnlTZWxlY3RvckV4dCxcbiAgICBzZXR0bGVJbW1lZGlhdGVseSxcbiAgICBzaG91bGRDYW5jZWwsXG4gICAgdHJpZ2dlckV2ZW50LFxuICAgIHRyaWdnZXJFcnJvckV2ZW50LFxuICAgIHdpdGhFeHRlbnNpb25zXG4gIH1cblxuICBjb25zdCBWRVJCUyA9IFsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScsICdwYXRjaCddXG4gIGNvbnN0IFZFUkJfU0VMRUNUT1IgPSBWRVJCUy5tYXAoZnVuY3Rpb24odmVyYikge1xuICAgIHJldHVybiAnW2h4LScgKyB2ZXJiICsgJ10sIFtkYXRhLWh4LScgKyB2ZXJiICsgJ10nXG4gIH0pLmpvaW4oJywgJylcblxuICBjb25zdCBIRUFEX1RBR19SRUdFWCA9IG1ha2VUYWdSZWdFeCgnaGVhZCcpXG5cbiAgLy89ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVXRpbGl0aWVzXG4gIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdcbiAgICogQHBhcmFtIHtib29sZWFufSBnbG9iYWxcbiAgICogQHJldHVybnMge1JlZ0V4cH1cbiAgICovXG4gIGZ1bmN0aW9uIG1ha2VUYWdSZWdFeCh0YWcsIGdsb2JhbCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYDwke3RhZ30oXFxcXHNbXj5dKj58PikoW1xcXFxzXFxcXFNdKj8pPFxcXFwvJHt0YWd9PmAsXG4gICAgICBnbG9iYWwgPyAnZ2ltJyA6ICdpbScpXG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGFuIGludGVydmFsIHN0cmluZyBjb25zaXN0ZW50IHdpdGggdGhlIHdheSBodG14IGRvZXMuIFVzZWZ1bCBmb3IgcGx1Z2lucyB0aGF0IGhhdmUgdGltaW5nLXJlbGF0ZWQgYXR0cmlidXRlcy5cbiAgICpcbiAgICogQ2F1dGlvbjogQWNjZXB0cyBhbiBpbnQgZm9sbG93ZWQgYnkgZWl0aGVyICoqcyoqIG9yICoqbXMqKi4gQWxsIG90aGVyIHZhbHVlcyB1c2UgKipwYXJzZUZsb2F0KipcbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jcGFyc2VJbnRlcnZhbFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyIHRpbWluZyBzdHJpbmdcbiAgICogQHJldHVybnMge251bWJlcnx1bmRlZmluZWR9XG4gICAqL1xuICBmdW5jdGlvbiBwYXJzZUludGVydmFsKHN0cikge1xuICAgIGlmIChzdHIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgbGV0IGludGVydmFsID0gTmFOXG4gICAgaWYgKHN0ci5zbGljZSgtMikgPT0gJ21zJykge1xuICAgICAgaW50ZXJ2YWwgPSBwYXJzZUZsb2F0KHN0ci5zbGljZSgwLCAtMikpXG4gICAgfSBlbHNlIGlmIChzdHIuc2xpY2UoLTEpID09ICdzJykge1xuICAgICAgaW50ZXJ2YWwgPSBwYXJzZUZsb2F0KHN0ci5zbGljZSgwLCAtMSkpICogMTAwMFxuICAgIH0gZWxzZSBpZiAoc3RyLnNsaWNlKC0xKSA9PSAnbScpIHtcbiAgICAgIGludGVydmFsID0gcGFyc2VGbG9hdChzdHIuc2xpY2UoMCwgLTEpKSAqIDEwMDAgKiA2MFxuICAgIH0gZWxzZSB7XG4gICAgICBpbnRlcnZhbCA9IHBhcnNlRmxvYXQoc3RyKVxuICAgIH1cbiAgICByZXR1cm4gaXNOYU4oaW50ZXJ2YWwpID8gdW5kZWZpbmVkIDogaW50ZXJ2YWxcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IGVsdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJucyB7KHN0cmluZyB8IG51bGwpfVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UmF3QXR0cmlidXRlKGVsdCwgbmFtZSkge1xuICAgIHJldHVybiBlbHQgaW5zdGFuY2VvZiBFbGVtZW50ICYmIGVsdC5nZXRBdHRyaWJ1dGUobmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcXVhbGlmaWVkTmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIC8vIHJlc29sdmUgd2l0aCBib3RoIGh4IGFuZCBkYXRhLWh4IHByZWZpeGVzXG4gIGZ1bmN0aW9uIGhhc0F0dHJpYnV0ZShlbHQsIHF1YWxpZmllZE5hbWUpIHtcbiAgICByZXR1cm4gISFlbHQuaGFzQXR0cmlidXRlICYmIChlbHQuaGFzQXR0cmlidXRlKHF1YWxpZmllZE5hbWUpIHx8XG4gICAgICBlbHQuaGFzQXR0cmlidXRlKCdkYXRhLScgKyBxdWFsaWZpZWROYW1lKSlcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IGVsdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcXVhbGlmaWVkTmFtZVxuICAgKiBAcmV0dXJucyB7KHN0cmluZyB8IG51bGwpfVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0QXR0cmlidXRlVmFsdWUoZWx0LCBxdWFsaWZpZWROYW1lKSB7XG4gICAgcmV0dXJuIGdldFJhd0F0dHJpYnV0ZShlbHQsIHF1YWxpZmllZE5hbWUpIHx8IGdldFJhd0F0dHJpYnV0ZShlbHQsICdkYXRhLScgKyBxdWFsaWZpZWROYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gZWx0XG4gICAqIEByZXR1cm5zIHtOb2RlIHwgbnVsbH1cbiAgICovXG4gIGZ1bmN0aW9uIHBhcmVudEVsdChlbHQpIHtcbiAgICBjb25zdCBwYXJlbnQgPSBlbHQucGFyZW50RWxlbWVudFxuICAgIGlmICghcGFyZW50ICYmIGVsdC5wYXJlbnROb2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdCkgcmV0dXJuIGVsdC5wYXJlbnROb2RlXG4gICAgcmV0dXJuIHBhcmVudFxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtEb2N1bWVudH1cbiAgICovXG4gIGZ1bmN0aW9uIGdldERvY3VtZW50KCkge1xuICAgIHJldHVybiBkb2N1bWVudFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gZWx0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZ2xvYmFsXG4gICAqIEByZXR1cm5zIHtOb2RlfERvY3VtZW50fVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0Um9vdE5vZGUoZWx0LCBnbG9iYWwpIHtcbiAgICByZXR1cm4gZWx0LmdldFJvb3ROb2RlID8gZWx0LmdldFJvb3ROb2RlKHsgY29tcG9zZWQ6IGdsb2JhbCB9KSA6IGdldERvY3VtZW50KClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IGVsdFxuICAgKiBAcGFyYW0geyhlOk5vZGUpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICAgKiBAcmV0dXJucyB7Tm9kZSB8IG51bGx9XG4gICAqL1xuICBmdW5jdGlvbiBnZXRDbG9zZXN0TWF0Y2goZWx0LCBjb25kaXRpb24pIHtcbiAgICB3aGlsZSAoZWx0ICYmICFjb25kaXRpb24oZWx0KSkge1xuICAgICAgZWx0ID0gcGFyZW50RWx0KGVsdClcbiAgICB9XG5cbiAgICByZXR1cm4gZWx0IHx8IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGluaXRpYWxFbGVtZW50XG4gICAqIEBwYXJhbSB7RWxlbWVudH0gYW5jZXN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZU5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ3xudWxsfVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0QXR0cmlidXRlVmFsdWVXaXRoRGlzaW5oZXJpdGFuY2UoaW5pdGlhbEVsZW1lbnQsIGFuY2VzdG9yLCBhdHRyaWJ1dGVOYW1lKSB7XG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZShhbmNlc3RvciwgYXR0cmlidXRlTmFtZSlcbiAgICBjb25zdCBkaXNpbmhlcml0ID0gZ2V0QXR0cmlidXRlVmFsdWUoYW5jZXN0b3IsICdoeC1kaXNpbmhlcml0JylcbiAgICB2YXIgaW5oZXJpdCA9IGdldEF0dHJpYnV0ZVZhbHVlKGFuY2VzdG9yLCAnaHgtaW5oZXJpdCcpXG4gICAgaWYgKGluaXRpYWxFbGVtZW50ICE9PSBhbmNlc3Rvcikge1xuICAgICAgaWYgKGh0bXguY29uZmlnLmRpc2FibGVJbmhlcml0YW5jZSkge1xuICAgICAgICBpZiAoaW5oZXJpdCAmJiAoaW5oZXJpdCA9PT0gJyonIHx8IGluaGVyaXQuc3BsaXQoJyAnKS5pbmRleE9mKGF0dHJpYnV0ZU5hbWUpID49IDApKSB7XG4gICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRpc2luaGVyaXQgJiYgKGRpc2luaGVyaXQgPT09ICcqJyB8fCBkaXNpbmhlcml0LnNwbGl0KCcgJykuaW5kZXhPZihhdHRyaWJ1dGVOYW1lKSA+PSAwKSkge1xuICAgICAgICByZXR1cm4gJ3Vuc2V0J1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXR0cmlidXRlVmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlTmFtZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH1cbiAgICovXG4gIGZ1bmN0aW9uIGdldENsb3Nlc3RBdHRyaWJ1dGVWYWx1ZShlbHQsIGF0dHJpYnV0ZU5hbWUpIHtcbiAgICBsZXQgY2xvc2VzdEF0dHIgPSBudWxsXG4gICAgZ2V0Q2xvc2VzdE1hdGNoKGVsdCwgZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuICEhKGNsb3Nlc3RBdHRyID0gZ2V0QXR0cmlidXRlVmFsdWVXaXRoRGlzaW5oZXJpdGFuY2UoZWx0LCBhc0VsZW1lbnQoZSksIGF0dHJpYnV0ZU5hbWUpKVxuICAgIH0pXG4gICAgaWYgKGNsb3Nlc3RBdHRyICE9PSAndW5zZXQnKSB7XG4gICAgICByZXR1cm4gY2xvc2VzdEF0dHJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBlbHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gbWF0Y2hlcyhlbHQsIHNlbGVjdG9yKSB7XG4gICAgLy8gQHRzLWlnbm9yZTogbm9uLXN0YW5kYXJkIHByb3BlcnRpZXMgZm9yIGJyb3dzZXIgY29tcGF0aWJpbGl0eVxuICAgIC8vIG5vaW5zcGVjdGlvbiBKU1VucmVzb2x2ZWRWYXJpYWJsZVxuICAgIGNvbnN0IG1hdGNoZXNGdW5jdGlvbiA9IGVsdCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgKGVsdC5tYXRjaGVzIHx8IGVsdC5tYXRjaGVzU2VsZWN0b3IgfHwgZWx0Lm1zTWF0Y2hlc1NlbGVjdG9yIHx8IGVsdC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgZWx0LndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fCBlbHQub01hdGNoZXNTZWxlY3RvcilcbiAgICByZXR1cm4gISFtYXRjaGVzRnVuY3Rpb24gJiYgbWF0Y2hlc0Z1bmN0aW9uLmNhbGwoZWx0LCBzZWxlY3RvcilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiBnZXRTdGFydFRhZyhzdHIpIHtcbiAgICBjb25zdCB0YWdNYXRjaGVyID0gLzwoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0qKS9pXG4gICAgY29uc3QgbWF0Y2ggPSB0YWdNYXRjaGVyLmV4ZWMoc3RyKVxuICAgIGlmIChtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hdGNoWzFdLnRvTG93ZXJDYXNlKClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZXNwXG4gICAqIEByZXR1cm5zIHtEb2N1bWVudH1cbiAgICovXG4gIGZ1bmN0aW9uIHBhcnNlSFRNTChyZXNwKSB7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpXG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZUZyb21TdHJpbmcocmVzcCwgJ3RleHQvaHRtbCcpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtEb2N1bWVudEZyYWdtZW50fSBmcmFnbWVudFxuICAgKiBAcGFyYW0ge05vZGV9IGVsdFxuICAgKi9cbiAgZnVuY3Rpb24gdGFrZUNoaWxkcmVuRm9yKGZyYWdtZW50LCBlbHQpIHtcbiAgICB3aGlsZSAoZWx0LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kKGVsdC5jaGlsZE5vZGVzWzBdKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxTY3JpcHRFbGVtZW50fSBzY3JpcHRcbiAgICogQHJldHVybnMge0hUTUxTY3JpcHRFbGVtZW50fVxuICAgKi9cbiAgZnVuY3Rpb24gZHVwbGljYXRlU2NyaXB0KHNjcmlwdCkge1xuICAgIGNvbnN0IG5ld1NjcmlwdCA9IGdldERvY3VtZW50KCkuY3JlYXRlRWxlbWVudCgnc2NyaXB0JylcbiAgICBmb3JFYWNoKHNjcmlwdC5hdHRyaWJ1dGVzLCBmdW5jdGlvbihhdHRyKSB7XG4gICAgICBuZXdTY3JpcHQuc2V0QXR0cmlidXRlKGF0dHIubmFtZSwgYXR0ci52YWx1ZSlcbiAgICB9KVxuICAgIG5ld1NjcmlwdC50ZXh0Q29udGVudCA9IHNjcmlwdC50ZXh0Q29udGVudFxuICAgIG5ld1NjcmlwdC5hc3luYyA9IGZhbHNlXG4gICAgaWYgKGh0bXguY29uZmlnLmlubGluZVNjcmlwdE5vbmNlKSB7XG4gICAgICBuZXdTY3JpcHQubm9uY2UgPSBodG14LmNvbmZpZy5pbmxpbmVTY3JpcHROb25jZVxuICAgIH1cbiAgICByZXR1cm4gbmV3U2NyaXB0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MU2NyaXB0RWxlbWVudH0gc2NyaXB0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaXNKYXZhU2NyaXB0U2NyaXB0Tm9kZShzY3JpcHQpIHtcbiAgICByZXR1cm4gc2NyaXB0Lm1hdGNoZXMoJ3NjcmlwdCcpICYmIChzY3JpcHQudHlwZSA9PT0gJ3RleHQvamF2YXNjcmlwdCcgfHwgc2NyaXB0LnR5cGUgPT09ICdtb2R1bGUnIHx8IHNjcmlwdC50eXBlID09PSAnJylcbiAgfVxuXG4gIC8qKlxuICAgKiB3ZSBoYXZlIHRvIG1ha2UgbmV3IGNvcGllcyBvZiBzY3JpcHQgdGFncyB0aGF0IHdlIGFyZSBnb2luZyB0byBpbnNlcnQgYmVjYXVzZVxuICAgKiBTT01FIGJyb3dzZXJzIChub3Qgc2F5aW5nIHdobywgYnV0IGl0IGludm9sdmVzIGFuIGVsZW1lbnQgYW5kIGFuIGFuaW1hbCkgZG9uJ3RcbiAgICogZXhlY3V0ZSBzY3JpcHRzIGNyZWF0ZWQgaW4gPHRlbXBsYXRlPiB0YWdzIHdoZW4gdGhleSBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgRE9NXG4gICAqIGFuZCBhbGwgdGhlIG90aGVycyBkbyBsbWFvXG4gICAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gZnJhZ21lbnRcbiAgICovXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVNjcmlwdFRhZ3MoZnJhZ21lbnQpIHtcbiAgICBBcnJheS5mcm9tKGZyYWdtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NjcmlwdCcpKS5mb3JFYWNoKC8qKiBAcGFyYW0ge0hUTUxTY3JpcHRFbGVtZW50fSBzY3JpcHQgKi8gKHNjcmlwdCkgPT4ge1xuICAgICAgaWYgKGlzSmF2YVNjcmlwdFNjcmlwdE5vZGUoc2NyaXB0KSkge1xuICAgICAgICBjb25zdCBuZXdTY3JpcHQgPSBkdXBsaWNhdGVTY3JpcHQoc2NyaXB0KVxuICAgICAgICBjb25zdCBwYXJlbnQgPSBzY3JpcHQucGFyZW50Tm9kZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobmV3U2NyaXB0LCBzY3JpcHQpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2dFcnJvcihlKVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNjcmlwdC5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7RG9jdW1lbnRGcmFnbWVudCAmIHt0aXRsZT86IHN0cmluZ319IERvY3VtZW50RnJhZ21lbnRXaXRoVGl0bGVcbiAgICogQGRlc2NyaXB0aW9uICBhIGRvY3VtZW50IGZyYWdtZW50IHJlcHJlc2VudGluZyB0aGUgcmVzcG9uc2UgSFRNTCwgaW5jbHVkaW5nXG4gICAqIGEgYHRpdGxlYCBwcm9wZXJ0eSBmb3IgYW55IHRpdGxlIGluZm9ybWF0aW9uIGZvdW5kXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVzcG9uc2UgSFRNTFxuICAgKiBAcmV0dXJucyB7RG9jdW1lbnRGcmFnbWVudFdpdGhUaXRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG1ha2VGcmFnbWVudChyZXNwb25zZSkge1xuICAgIC8vIHN0cmlwIGhlYWQgdGFnIHRvIGRldGVybWluZSBzaGFwZSBvZiByZXNwb25zZSB3ZSBhcmUgZGVhbGluZyB3aXRoXG4gICAgY29uc3QgcmVzcG9uc2VXaXRoTm9IZWFkID0gcmVzcG9uc2UucmVwbGFjZShIRUFEX1RBR19SRUdFWCwgJycpXG4gICAgY29uc3Qgc3RhcnRUYWcgPSBnZXRTdGFydFRhZyhyZXNwb25zZVdpdGhOb0hlYWQpXG4gICAgLyoqIEB0eXBlIERvY3VtZW50RnJhZ21lbnRXaXRoVGl0bGUgKi9cbiAgICBsZXQgZnJhZ21lbnRcbiAgICBpZiAoc3RhcnRUYWcgPT09ICdodG1sJykge1xuICAgICAgLy8gaWYgaXQgaXMgYSBmdWxsIGRvY3VtZW50LCBwYXJzZSBpdCBhbmQgcmV0dXJuIHRoZSBib2R5XG4gICAgICBmcmFnbWVudCA9IC8qKiBAdHlwZSBEb2N1bWVudEZyYWdtZW50V2l0aFRpdGxlICovIChuZXcgRG9jdW1lbnRGcmFnbWVudCgpKVxuICAgICAgY29uc3QgZG9jID0gcGFyc2VIVE1MKHJlc3BvbnNlKVxuICAgICAgdGFrZUNoaWxkcmVuRm9yKGZyYWdtZW50LCBkb2MuYm9keSlcbiAgICAgIGZyYWdtZW50LnRpdGxlID0gZG9jLnRpdGxlXG4gICAgfSBlbHNlIGlmIChzdGFydFRhZyA9PT0gJ2JvZHknKSB7XG4gICAgICAvLyBwYXJzZSBib2R5IHcvbyB3cmFwcGluZyBpbiB0ZW1wbGF0ZVxuICAgICAgZnJhZ21lbnQgPSAvKiogQHR5cGUgRG9jdW1lbnRGcmFnbWVudFdpdGhUaXRsZSAqLyAobmV3IERvY3VtZW50RnJhZ21lbnQoKSlcbiAgICAgIGNvbnN0IGRvYyA9IHBhcnNlSFRNTChyZXNwb25zZVdpdGhOb0hlYWQpXG4gICAgICB0YWtlQ2hpbGRyZW5Gb3IoZnJhZ21lbnQsIGRvYy5ib2R5KVxuICAgICAgZnJhZ21lbnQudGl0bGUgPSBkb2MudGl0bGVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3RoZXJ3aXNlIHdlIGhhdmUgbm9uLWJvZHkgcGFydGlhbCBIVE1MIGNvbnRlbnQsIHNvIHdyYXAgaXQgaW4gYSB0ZW1wbGF0ZSB0byBtYXhpbWl6ZSBwYXJzaW5nIGZsZXhpYmlsaXR5XG4gICAgICBjb25zdCBkb2MgPSBwYXJzZUhUTUwoJzxib2R5Pjx0ZW1wbGF0ZSBjbGFzcz1cImludGVybmFsLWh0bXgtd3JhcHBlclwiPicgKyByZXNwb25zZVdpdGhOb0hlYWQgKyAnPC90ZW1wbGF0ZT48L2JvZHk+JylcbiAgICAgIGZyYWdtZW50ID0gLyoqIEB0eXBlIERvY3VtZW50RnJhZ21lbnRXaXRoVGl0bGUgKi8gKGRvYy5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpLmNvbnRlbnQpXG4gICAgICAvLyBleHRyYWN0IHRpdGxlIGludG8gZnJhZ21lbnQgZm9yIGxhdGVyIHByb2Nlc3NpbmdcbiAgICAgIGZyYWdtZW50LnRpdGxlID0gZG9jLnRpdGxlXG5cbiAgICAgIC8vIGZvciBsZWdhY3kgcmVhc29ucyB3ZSBzdXBwb3J0IGEgdGl0bGUgdGFnIGF0IHRoZSByb290IGxldmVsIG9mIG5vbi1ib2R5IHJlc3BvbnNlcywgc28gd2UgbmVlZCB0byBoYW5kbGUgaXRcbiAgICAgIHZhciB0aXRsZUVsZW1lbnQgPSBmcmFnbWVudC5xdWVyeVNlbGVjdG9yKCd0aXRsZScpXG4gICAgICBpZiAodGl0bGVFbGVtZW50ICYmIHRpdGxlRWxlbWVudC5wYXJlbnROb2RlID09PSBmcmFnbWVudCkge1xuICAgICAgICB0aXRsZUVsZW1lbnQucmVtb3ZlKClcbiAgICAgICAgZnJhZ21lbnQudGl0bGUgPSB0aXRsZUVsZW1lbnQuaW5uZXJUZXh0XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmcmFnbWVudCkge1xuICAgICAgaWYgKGh0bXguY29uZmlnLmFsbG93U2NyaXB0VGFncykge1xuICAgICAgICBub3JtYWxpemVTY3JpcHRUYWdzKGZyYWdtZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcmVtb3ZlIGFsbCBzY3JpcHQgdGFncyBpZiBzY3JpcHRzIGFyZSBkaXNhYmxlZFxuICAgICAgICBmcmFnbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHQnKS5mb3JFYWNoKChzY3JpcHQpID0+IHNjcmlwdC5yZW1vdmUoKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuY1xuICAgKi9cbiAgZnVuY3Rpb24gbWF5YmVDYWxsKGZ1bmMpIHtcbiAgICBpZiAoZnVuYykge1xuICAgICAgZnVuYygpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBvXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBmdW5jdGlvbiBpc1R5cGUobywgdHlwZSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykgPT09ICdbb2JqZWN0ICcgKyB0eXBlICsgJ10nXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsqfSBvXG4gICAqIEByZXR1cm5zIHtvIGlzIEZ1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gaXNGdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvID09PSAnZnVuY3Rpb24nXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsqfSBvXG4gICAqIEByZXR1cm5zIHtvIGlzIE9iamVjdH1cbiAgICovXG4gIGZ1bmN0aW9uIGlzUmF3T2JqZWN0KG8pIHtcbiAgICByZXR1cm4gaXNUeXBlKG8sICdPYmplY3QnKVxuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IE9uSGFuZGxlclxuICAgKiBAcHJvcGVydHkgeyhrZXlvZiBIVE1MRWxlbWVudEV2ZW50TWFwKXxzdHJpbmd9IGV2ZW50XG4gICAqIEBwcm9wZXJ0eSB7RXZlbnRMaXN0ZW5lcn0gbGlzdGVuZXJcbiAgICovXG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IExpc3RlbmVySW5mb1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gdHJpZ2dlclxuICAgKiBAcHJvcGVydHkge0V2ZW50TGlzdGVuZXJ9IGxpc3RlbmVyXG4gICAqIEBwcm9wZXJ0eSB7RXZlbnRUYXJnZXR9IG9uXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBIdG14Tm9kZUludGVybmFsRGF0YVxuICAgKiBFbGVtZW50IGRhdGFcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IFtpbml0SGFzaF1cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbYm9vc3RlZF1cbiAgICogQHByb3BlcnR5IHtPbkhhbmRsZXJbXX0gW29uSGFuZGxlcnNdXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbdGltZW91dF1cbiAgICogQHByb3BlcnR5IHtMaXN0ZW5lckluZm9bXX0gW2xpc3RlbmVySW5mb3NdXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2NhbmNlbGxlZF1cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbdHJpZ2dlcmVkT25jZV1cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZWxheWVkXVxuICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbdGhyb3R0bGVdXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbGFzdFZhbHVlXVxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtsb2FkZWRdXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGF0aF1cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IFt2ZXJiXVxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwb2xsaW5nXVxuICAgKiBAcHJvcGVydHkge0hUTUxCdXR0b25FbGVtZW50fEhUTUxJbnB1dEVsZW1lbnR8bnVsbH0gW2xhc3RCdXR0b25DbGlja2VkXVxuICAgKiBAcHJvcGVydHkge251bWJlcn0gW3JlcXVlc3RDb3VudF1cbiAgICogQHByb3BlcnR5IHtYTUxIdHRwUmVxdWVzdH0gW3hocl1cbiAgICogQHByb3BlcnR5IHsoKCkgPT4gdm9pZClbXX0gW3F1ZXVlZFJlcXVlc3RzXVxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFthYm9ydGFibGVdXG4gICAqXG4gICAqIEV2ZW50IGRhdGFcbiAgICogQHByb3BlcnR5IHtIdG14VHJpZ2dlclNwZWNpZmljYXRpb259IFt0cmlnZ2VyU3BlY11cbiAgICogQHByb3BlcnR5IHtFdmVudFRhcmdldFtdfSBbaGFuZGxlZEZvcl1cbiAgICovXG5cbiAgLyoqXG4gICAqIGdldEludGVybmFsRGF0YSByZXRyaWV2ZXMgXCJwcml2YXRlXCIgZGF0YSBzdG9yZWQgYnkgaHRteCB3aXRoaW4gYW4gZWxlbWVudFxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fEV2ZW50fSBlbHRcbiAgICogQHJldHVybnMge0h0bXhOb2RlSW50ZXJuYWxEYXRhfVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SW50ZXJuYWxEYXRhKGVsdCkge1xuICAgIGNvbnN0IGRhdGFQcm9wID0gJ2h0bXgtaW50ZXJuYWwtZGF0YSdcbiAgICBsZXQgZGF0YSA9IGVsdFtkYXRhUHJvcF1cbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIGRhdGEgPSBlbHRbZGF0YVByb3BdID0ge31cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiB0b0FycmF5IGNvbnZlcnRzIGFuIEFycmF5TGlrZSBvYmplY3QgaW50byBhIHJlYWwgYXJyYXkuXG4gICAqIEB0ZW1wbGF0ZSBUXG4gICAqIEBwYXJhbSB7QXJyYXlMaWtlPFQ+fSBhcnJcbiAgICogQHJldHVybnMge1RbXX1cbiAgICovXG4gIGZ1bmN0aW9uIHRvQXJyYXkoYXJyKSB7XG4gICAgY29uc3QgcmV0dXJuQXJyID0gW11cbiAgICBpZiAoYXJyKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXR1cm5BcnIucHVzaChhcnJbaV0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5BcnJcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAcGFyYW0ge1RbXXxOYW1lZE5vZGVNYXB8SFRNTENvbGxlY3Rpb258SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb258QXJyYXlMaWtlPFQ+fSBhcnJcbiAgICogQHBhcmFtIHsoVCkgPT4gdm9pZH0gZnVuY1xuICAgKi9cbiAgZnVuY3Rpb24gZm9yRWFjaChhcnIsIGZ1bmMpIHtcbiAgICBpZiAoYXJyKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBmdW5jKGFycltpXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGlzU2Nyb2xsZWRJbnRvVmlldyhlbCkge1xuICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IGVsZW1Ub3AgPSByZWN0LnRvcFxuICAgIGNvbnN0IGVsZW1Cb3R0b20gPSByZWN0LmJvdHRvbVxuICAgIHJldHVybiBlbGVtVG9wIDwgd2luZG93LmlubmVySGVpZ2h0ICYmIGVsZW1Cb3R0b20gPj0gMFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gZWx0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gYm9keUNvbnRhaW5zKGVsdCkge1xuICAgIC8vIElFIEZpeFxuICAgIGNvbnN0IHJvb3ROb2RlID0gZWx0LmdldFJvb3ROb2RlICYmIGVsdC5nZXRSb290Tm9kZSgpXG4gICAgaWYgKHJvb3ROb2RlICYmIHJvb3ROb2RlIGluc3RhbmNlb2Ygd2luZG93LlNoYWRvd1Jvb3QpIHtcbiAgICAgIHJldHVybiBnZXREb2N1bWVudCgpLmJvZHkuY29udGFpbnMocm9vdE5vZGUuaG9zdClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldERvY3VtZW50KCkuYm9keS5jb250YWlucyhlbHQpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0cmlnZ2VyXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIGZ1bmN0aW9uIHNwbGl0T25XaGl0ZXNwYWNlKHRyaWdnZXIpIHtcbiAgICByZXR1cm4gdHJpZ2dlci50cmltKCkuc3BsaXQoL1xccysvKVxuICB9XG5cbiAgLyoqXG4gICAqIG1lcmdlT2JqZWN0cyB0YWtlcyBhbGwgdGhlIGtleXMgZnJvbVxuICAgKiBvYmoyIGFuZCBkdXBsaWNhdGVzIHRoZW0gaW50byBvYmoxXG4gICAqIEB0ZW1wbGF0ZSBUMVxuICAgKiBAdGVtcGxhdGUgVDJcbiAgICogQHBhcmFtIHtUMX0gb2JqMVxuICAgKiBAcGFyYW0ge1QyfSBvYmoyXG4gICAqIEByZXR1cm5zIHtUMSAmIFQyfVxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VPYmplY3RzKG9iajEsIG9iajIpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmoyKSB7XG4gICAgICBpZiAob2JqMi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgdHNjIGRvZXNuJ3Qgc2VlbSB0byBwcm9wZXJseSBoYW5kbGUgdHlwZXMgbWVyZ2luZ1xuICAgICAgICBvYmoxW2tleV0gPSBvYmoyW2tleV1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZSB0c2MgZG9lc24ndCBzZWVtIHRvIHByb3Blcmx5IGhhbmRsZSB0eXBlcyBtZXJnaW5nXG4gICAgcmV0dXJuIG9iajFcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30galN0cmluZ1xuICAgKiBAcmV0dXJucyB7YW55fG51bGx9XG4gICAqL1xuICBmdW5jdGlvbiBwYXJzZUpTT04oalN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShqU3RyaW5nKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcihlcnJvcilcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gY2FuQWNjZXNzTG9jYWxTdG9yYWdlKCkge1xuICAgIGNvbnN0IHRlc3QgPSAnaHRteDpsb2NhbFN0b3JhZ2VUZXN0J1xuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0ZXN0LCB0ZXN0KVxuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGVzdClcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiBub3JtYWxpemVQYXRoKHBhdGgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChwYXRoKVxuICAgICAgaWYgKHVybCkge1xuICAgICAgICBwYXRoID0gdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaFxuICAgICAgfVxuICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoLCB1bmxlc3MgaW5kZXggcGFnZVxuICAgICAgaWYgKCEoL15cXC8kLy50ZXN0KHBhdGgpKSkge1xuICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8rJC8sICcnKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBhdGhcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBiZSBraW5kIHRvIElFMTEsIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBVUkwoKVxuICAgICAgcmV0dXJuIHBhdGhcbiAgICB9XG4gIH1cblxuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gcHVibGljIEFQSVxuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7YW55fVxuICAgKi9cbiAgZnVuY3Rpb24gaW50ZXJuYWxFdmFsKHN0cikge1xuICAgIHJldHVybiBtYXliZUV2YWwoZ2V0RG9jdW1lbnQoKS5ib2R5LCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBldmFsKHN0cilcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjYWxsYmFjayBmb3IgdGhlICoqaHRteDpsb2FkKiogZXZlbnQuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvY2VzcyBuZXcgY29udGVudCwgZm9yIGV4YW1wbGUgaW5pdGlhbGl6aW5nIHRoZSBjb250ZW50IHdpdGggYSBqYXZhc2NyaXB0IGxpYnJhcnlcbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jb25Mb2FkXG4gICAqXG4gICAqIEBwYXJhbSB7KGVsdDogTm9kZSkgPT4gdm9pZH0gY2FsbGJhY2sgdGhlIGNhbGxiYWNrIHRvIGNhbGwgb24gbmV3bHkgbG9hZGVkIGNvbnRlbnRcbiAgICogQHJldHVybnMge0V2ZW50TGlzdGVuZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBvbkxvYWRIZWxwZXIoY2FsbGJhY2spIHtcbiAgICBjb25zdCB2YWx1ZSA9IGh0bXgub24oJ2h0bXg6bG9hZCcsIC8qKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldnQgKi8gZnVuY3Rpb24oZXZ0KSB7XG4gICAgICBjYWxsYmFjayhldnQuZGV0YWlsLmVsdClcbiAgICB9KVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIExvZyBhbGwgaHRteCBldmVudHMsIHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vaHRteC5vcmcvYXBpLyNsb2dBbGxcbiAgICovXG4gIGZ1bmN0aW9uIGxvZ0FsbCgpIHtcbiAgICBodG14LmxvZ2dlciA9IGZ1bmN0aW9uKGVsdCwgZXZlbnQsIGRhdGEpIHtcbiAgICAgIGlmIChjb25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGV2ZW50LCBlbHQsIGRhdGEpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbG9nTm9uZSgpIHtcbiAgICBodG14LmxvZ2dlciA9IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhbiBlbGVtZW50IG1hdGNoaW5nIHRoZSBzZWxlY3RvclxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vaHRteC5vcmcvYXBpLyNmaW5kXG4gICAqXG4gICAqIEBwYXJhbSB7UGFyZW50Tm9kZXxzdHJpbmd9IGVsdE9yU2VsZWN0b3IgIHRoZSByb290IGVsZW1lbnQgdG8gZmluZCB0aGUgbWF0Y2hpbmcgZWxlbWVudCBpbiwgaW5jbHVzaXZlIHwgdGhlIHNlbGVjdG9yIHRvIG1hdGNoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3JdIHRoZSBzZWxlY3RvciB0byBtYXRjaFxuICAgKiBAcmV0dXJucyB7RWxlbWVudHxudWxsfVxuICAgKi9cbiAgZnVuY3Rpb24gZmluZChlbHRPclNlbGVjdG9yLCBzZWxlY3Rvcikge1xuICAgIGlmICh0eXBlb2YgZWx0T3JTZWxlY3RvciAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBlbHRPclNlbGVjdG9yLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaW5kKGdldERvY3VtZW50KCksIGVsdE9yU2VsZWN0b3IpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGFsbCBlbGVtZW50cyBtYXRjaGluZyB0aGUgc2VsZWN0b3JcbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jZmluZEFsbFxuICAgKlxuICAgKiBAcGFyYW0ge1BhcmVudE5vZGV8c3RyaW5nfSBlbHRPclNlbGVjdG9yIHRoZSByb290IGVsZW1lbnQgdG8gZmluZCB0aGUgbWF0Y2hpbmcgZWxlbWVudHMgaW4sIGluY2x1c2l2ZSB8IHRoZSBzZWxlY3RvciB0byBtYXRjaFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yXSB0aGUgc2VsZWN0b3IgdG8gbWF0Y2hcbiAgICogQHJldHVybnMge05vZGVMaXN0T2Y8RWxlbWVudD59XG4gICAqL1xuICBmdW5jdGlvbiBmaW5kQWxsKGVsdE9yU2VsZWN0b3IsIHNlbGVjdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBlbHRPclNlbGVjdG9yICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVsdE9yU2VsZWN0b3IucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcilcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbmRBbGwoZ2V0RG9jdW1lbnQoKSwgZWx0T3JTZWxlY3RvcilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgV2luZG93XG4gICAqL1xuICBmdW5jdGlvbiBnZXRXaW5kb3coKSB7XG4gICAgcmV0dXJuIHdpbmRvd1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYW4gZWxlbWVudCBmcm9tIHRoZSBET01cbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jcmVtb3ZlXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gZWx0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVsYXldXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmVFbGVtZW50KGVsdCwgZGVsYXkpIHtcbiAgICBlbHQgPSByZXNvbHZlVGFyZ2V0KGVsdClcbiAgICBpZiAoZGVsYXkpIHtcbiAgICAgIGdldFdpbmRvdygpLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlbW92ZUVsZW1lbnQoZWx0KVxuICAgICAgICBlbHQgPSBudWxsXG4gICAgICB9LCBkZWxheSlcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50RWx0KGVsdCkucmVtb3ZlQ2hpbGQoZWx0KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gZWx0XG4gICAqIEByZXR1cm4ge0VsZW1lbnR8bnVsbH1cbiAgICovXG4gIGZ1bmN0aW9uIGFzRWxlbWVudChlbHQpIHtcbiAgICByZXR1cm4gZWx0IGluc3RhbmNlb2YgRWxlbWVudCA/IGVsdCA6IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gZWx0XG4gICAqIEByZXR1cm4ge0hUTUxFbGVtZW50fG51bGx9XG4gICAqL1xuICBmdW5jdGlvbiBhc0h0bWxFbGVtZW50KGVsdCkge1xuICAgIHJldHVybiBlbHQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGVsdCA6IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICogQHJldHVybiB7c3RyaW5nfG51bGx9XG4gICAqL1xuICBmdW5jdGlvbiBhc1N0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH0gZWx0XG4gICAqIEByZXR1cm4ge1BhcmVudE5vZGV8bnVsbH1cbiAgICovXG4gIGZ1bmN0aW9uIGFzUGFyZW50Tm9kZShlbHQpIHtcbiAgICByZXR1cm4gZWx0IGluc3RhbmNlb2YgRWxlbWVudCB8fCBlbHQgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCBlbHQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50ID8gZWx0IDogbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGFkZHMgYSBjbGFzcyB0byB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jYWRkQ2xhc3NcbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fHN0cmluZ30gZWx0IHRoZSBlbGVtZW50IHRvIGFkZCB0aGUgY2xhc3MgdG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXp6IHRoZSBjbGFzcyB0byBhZGRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWxheV0gdGhlIGRlbGF5IChpbiBtaWxsaXNlY29uZHMpIGJlZm9yZSBjbGFzcyBpcyBhZGRlZFxuICAgKi9cbiAgZnVuY3Rpb24gYWRkQ2xhc3NUb0VsZW1lbnQoZWx0LCBjbGF6eiwgZGVsYXkpIHtcbiAgICBlbHQgPSBhc0VsZW1lbnQocmVzb2x2ZVRhcmdldChlbHQpKVxuICAgIGlmICghZWx0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGRlbGF5KSB7XG4gICAgICBnZXRXaW5kb3coKS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICBhZGRDbGFzc1RvRWxlbWVudChlbHQsIGNsYXp6KVxuICAgICAgICBlbHQgPSBudWxsXG4gICAgICB9LCBkZWxheSlcbiAgICB9IGVsc2Uge1xuICAgICAgZWx0LmNsYXNzTGlzdCAmJiBlbHQuY2xhc3NMaXN0LmFkZChjbGF6eilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGNsYXNzIGZyb20gdGhlIGdpdmVuIGVsZW1lbnRcbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jcmVtb3ZlQ2xhc3NcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfHN0cmluZ30gbm9kZSBlbGVtZW50IHRvIHJlbW92ZSB0aGUgY2xhc3MgZnJvbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhenogdGhlIGNsYXNzIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RlbGF5XSB0aGUgZGVsYXkgKGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgY2xhc3MgaXMgcmVtb3ZlZClcbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZUNsYXNzRnJvbUVsZW1lbnQobm9kZSwgY2xhenosIGRlbGF5KSB7XG4gICAgbGV0IGVsdCA9IGFzRWxlbWVudChyZXNvbHZlVGFyZ2V0KG5vZGUpKVxuICAgIGlmICghZWx0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGRlbGF5KSB7XG4gICAgICBnZXRXaW5kb3coKS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZW1vdmVDbGFzc0Zyb21FbGVtZW50KGVsdCwgY2xhenopXG4gICAgICAgIGVsdCA9IG51bGxcbiAgICAgIH0sIGRlbGF5KVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZWx0LmNsYXNzTGlzdCkge1xuICAgICAgICBlbHQuY2xhc3NMaXN0LnJlbW92ZShjbGF6eilcbiAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG5vIGNsYXNzZXMgbGVmdCwgcmVtb3ZlIHRoZSBjbGFzcyBhdHRyaWJ1dGVcbiAgICAgICAgaWYgKGVsdC5jbGFzc0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZWx0LnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGdpdmVuIGNsYXNzIG9uIGFuIGVsZW1lbnRcbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jdG9nZ2xlQ2xhc3NcbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fHN0cmluZ30gZWx0IHRoZSBlbGVtZW50IHRvIHRvZ2dsZSB0aGUgY2xhc3Mgb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXp6IHRoZSBjbGFzcyB0byB0b2dnbGVcbiAgICovXG4gIGZ1bmN0aW9uIHRvZ2dsZUNsYXNzT25FbGVtZW50KGVsdCwgY2xhenopIHtcbiAgICBlbHQgPSByZXNvbHZlVGFyZ2V0KGVsdClcbiAgICBlbHQuY2xhc3NMaXN0LnRvZ2dsZShjbGF6eilcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyB0aGUgZ2l2ZW4gY2xhc3MgZnJvbSBpdHMgc2libGluZ3MsIHNvIHRoYXQgYW1vbmcgaXRzIHNpYmxpbmdzLCBvbmx5IHRoZSBnaXZlbiBlbGVtZW50IHdpbGwgaGF2ZSB0aGUgY2xhc3MuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI3Rha2VDbGFzc1xuICAgKlxuICAgKiBAcGFyYW0ge05vZGV8c3RyaW5nfSBlbHQgdGhlIGVsZW1lbnQgdGhhdCB3aWxsIHRha2UgdGhlIGNsYXNzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGF6eiB0aGUgY2xhc3MgdG8gdGFrZVxuICAgKi9cbiAgZnVuY3Rpb24gdGFrZUNsYXNzRm9yRWxlbWVudChlbHQsIGNsYXp6KSB7XG4gICAgZWx0ID0gcmVzb2x2ZVRhcmdldChlbHQpXG4gICAgZm9yRWFjaChlbHQucGFyZW50RWxlbWVudC5jaGlsZHJlbiwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIHJlbW92ZUNsYXNzRnJvbUVsZW1lbnQoY2hpbGQsIGNsYXp6KVxuICAgIH0pXG4gICAgYWRkQ2xhc3NUb0VsZW1lbnQoYXNFbGVtZW50KGVsdCksIGNsYXp6KVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBjbG9zZXN0IG1hdGNoaW5nIGVsZW1lbnQgaW4gdGhlIGdpdmVuIGVsZW1lbnRzIHBhcmVudGFnZSwgaW5jbHVzaXZlIG9mIHRoZSBlbGVtZW50XG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI2Nsb3Nlc3RcbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fHN0cmluZ30gZWx0IHRoZSBlbGVtZW50IHRvIGZpbmQgdGhlIHNlbGVjdG9yIGZyb21cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIHRoZSBzZWxlY3RvciB0byBmaW5kXG4gICAqIEByZXR1cm5zIHtFbGVtZW50fG51bGx9XG4gICAqL1xuICBmdW5jdGlvbiBjbG9zZXN0KGVsdCwgc2VsZWN0b3IpIHtcbiAgICBlbHQgPSBhc0VsZW1lbnQocmVzb2x2ZVRhcmdldChlbHQpKVxuICAgIGlmIChlbHQgJiYgZWx0LmNsb3Nlc3QpIHtcbiAgICAgIHJldHVybiBlbHQuY2xvc2VzdChzZWxlY3RvcilcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETyByZW1vdmUgd2hlbiBJRSBnb2VzIGF3YXlcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKGVsdCA9PSBudWxsIHx8IG1hdGNoZXMoZWx0LCBzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gZWx0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlIChlbHQgPSBlbHQgJiYgYXNFbGVtZW50KHBhcmVudEVsdChlbHQpKSlcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyLCBwcmVmaXgpIHtcbiAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBwcmVmaXgubGVuZ3RoKSA9PT0gcHJlZml4XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VmZml4XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzdWZmaXgpIHtcbiAgICByZXR1cm4gc3RyLnN1YnN0cmluZyhzdHIubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aCkgPT09IHN1ZmZpeFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gbm9ybWFsaXplU2VsZWN0b3Ioc2VsZWN0b3IpIHtcbiAgICBjb25zdCB0cmltbWVkU2VsZWN0b3IgPSBzZWxlY3Rvci50cmltKClcbiAgICBpZiAoc3RhcnRzV2l0aCh0cmltbWVkU2VsZWN0b3IsICc8JykgJiYgZW5kc1dpdGgodHJpbW1lZFNlbGVjdG9yLCAnLz4nKSkge1xuICAgICAgcmV0dXJuIHRyaW1tZWRTZWxlY3Rvci5zdWJzdHJpbmcoMSwgdHJpbW1lZFNlbGVjdG9yLmxlbmd0aCAtIDIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cmltbWVkU2VsZWN0b3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfEVsZW1lbnR8RG9jdW1lbnR8c3RyaW5nfSBlbHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gICAqIEBwYXJhbSB7Ym9vbGVhbj19IGdsb2JhbFxuICAgKiBAcmV0dXJucyB7KE5vZGV8V2luZG93KVtdfVxuICAgKi9cbiAgZnVuY3Rpb24gcXVlcnlTZWxlY3RvckFsbEV4dChlbHQsIHNlbGVjdG9yLCBnbG9iYWwpIHtcbiAgICBlbHQgPSByZXNvbHZlVGFyZ2V0KGVsdClcbiAgICBpZiAoc2VsZWN0b3IuaW5kZXhPZignY2xvc2VzdCAnKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtjbG9zZXN0KGFzRWxlbWVudChlbHQpLCBub3JtYWxpemVTZWxlY3RvcihzZWxlY3Rvci5zdWJzdHIoOCkpKV1cbiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmluZGV4T2YoJ2ZpbmQgJykgPT09IDApIHtcbiAgICAgIHJldHVybiBbZmluZChhc1BhcmVudE5vZGUoZWx0KSwgbm9ybWFsaXplU2VsZWN0b3Ioc2VsZWN0b3Iuc3Vic3RyKDUpKSldXG4gICAgfSBlbHNlIGlmIChzZWxlY3RvciA9PT0gJ25leHQnKSB7XG4gICAgICByZXR1cm4gW2FzRWxlbWVudChlbHQpLm5leHRFbGVtZW50U2libGluZ11cbiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmluZGV4T2YoJ25leHQgJykgPT09IDApIHtcbiAgICAgIHJldHVybiBbc2NhbkZvcndhcmRRdWVyeShlbHQsIG5vcm1hbGl6ZVNlbGVjdG9yKHNlbGVjdG9yLnN1YnN0cig1KSksICEhZ2xvYmFsKV1cbiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yID09PSAncHJldmlvdXMnKSB7XG4gICAgICByZXR1cm4gW2FzRWxlbWVudChlbHQpLnByZXZpb3VzRWxlbWVudFNpYmxpbmddXG4gICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pbmRleE9mKCdwcmV2aW91cyAnKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtzY2FuQmFja3dhcmRzUXVlcnkoZWx0LCBub3JtYWxpemVTZWxlY3RvcihzZWxlY3Rvci5zdWJzdHIoOSkpLCAhIWdsb2JhbCldXG4gICAgfSBlbHNlIGlmIChzZWxlY3RvciA9PT0gJ2RvY3VtZW50Jykge1xuICAgICAgcmV0dXJuIFtkb2N1bWVudF1cbiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yID09PSAnd2luZG93Jykge1xuICAgICAgcmV0dXJuIFt3aW5kb3ddXG4gICAgfSBlbHNlIGlmIChzZWxlY3RvciA9PT0gJ2JvZHknKSB7XG4gICAgICByZXR1cm4gW2RvY3VtZW50LmJvZHldXG4gICAgfSBlbHNlIGlmIChzZWxlY3RvciA9PT0gJ3Jvb3QnKSB7XG4gICAgICByZXR1cm4gW2dldFJvb3ROb2RlKGVsdCwgISFnbG9iYWwpXVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaW5kZXhPZignZ2xvYmFsICcpID09PSAwKSB7XG4gICAgICByZXR1cm4gcXVlcnlTZWxlY3RvckFsbEV4dChlbHQsIHNlbGVjdG9yLnNsaWNlKDcpLCB0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdG9BcnJheShhc1BhcmVudE5vZGUoZ2V0Um9vdE5vZGUoZWx0LCAhIWdsb2JhbCkpLnF1ZXJ5U2VsZWN0b3JBbGwobm9ybWFsaXplU2VsZWN0b3Ioc2VsZWN0b3IpKSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBzdGFydFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWF0Y2hcbiAgICogQHBhcmFtIHtib29sZWFufSBnbG9iYWxcbiAgICogQHJldHVybnMge0VsZW1lbnR9XG4gICAqL1xuICB2YXIgc2NhbkZvcndhcmRRdWVyeSA9IGZ1bmN0aW9uKHN0YXJ0LCBtYXRjaCwgZ2xvYmFsKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGFzUGFyZW50Tm9kZShnZXRSb290Tm9kZShzdGFydCwgZ2xvYmFsKSkucXVlcnlTZWxlY3RvckFsbChtYXRjaClcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVsdCA9IHJlc3VsdHNbaV1cbiAgICAgIGlmIChlbHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oc3RhcnQpID09PSBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORykge1xuICAgICAgICByZXR1cm4gZWx0XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gc3RhcnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hdGNoXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZ2xvYmFsXG4gICAqIEByZXR1cm5zIHtFbGVtZW50fVxuICAgKi9cbiAgdmFyIHNjYW5CYWNrd2FyZHNRdWVyeSA9IGZ1bmN0aW9uKHN0YXJ0LCBtYXRjaCwgZ2xvYmFsKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGFzUGFyZW50Tm9kZShnZXRSb290Tm9kZShzdGFydCwgZ2xvYmFsKSkucXVlcnlTZWxlY3RvckFsbChtYXRjaClcbiAgICBmb3IgKGxldCBpID0gcmVzdWx0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgZWx0ID0gcmVzdWx0c1tpXVxuICAgICAgaWYgKGVsdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihzdGFydCkgPT09IE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKSB7XG4gICAgICAgIHJldHVybiBlbHRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfHN0cmluZ30gZWx0T3JTZWxlY3RvclxuICAgKiBAcGFyYW0ge3N0cmluZz19IHNlbGVjdG9yXG4gICAqIEByZXR1cm5zIHtOb2RlfFdpbmRvd31cbiAgICovXG4gIGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3JFeHQoZWx0T3JTZWxlY3Rvciwgc2VsZWN0b3IpIHtcbiAgICBpZiAodHlwZW9mIGVsdE9yU2VsZWN0b3IgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcXVlcnlTZWxlY3RvckFsbEV4dChlbHRPclNlbGVjdG9yLCBzZWxlY3RvcilbMF1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGxFeHQoZ2V0RG9jdW1lbnQoKS5ib2R5LCBlbHRPclNlbGVjdG9yKVswXVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAdGVtcGxhdGUge0V2ZW50VGFyZ2V0fSBUXG4gICAqIEBwYXJhbSB7VHxzdHJpbmd9IGVsdE9yU2VsZWN0b3JcbiAgICogQHBhcmFtIHtUfSBbY29udGV4dF1cbiAgICogQHJldHVybnMge0VsZW1lbnR8VHxudWxsfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb2x2ZVRhcmdldChlbHRPclNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgaWYgKHR5cGVvZiBlbHRPclNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGZpbmQoYXNQYXJlbnROb2RlKGNvbnRleHQpIHx8IGRvY3VtZW50LCBlbHRPclNlbGVjdG9yKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZWx0T3JTZWxlY3RvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7a2V5b2YgSFRNTEVsZW1lbnRFdmVudE1hcHxzdHJpbmd9IEFueUV2ZW50TmFtZVxuICAgKi9cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gRXZlbnRBcmdzXG4gICAqIEBwcm9wZXJ0eSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICAgKiBAcHJvcGVydHkge0FueUV2ZW50TmFtZX0gZXZlbnRcbiAgICogQHByb3BlcnR5IHtFdmVudExpc3RlbmVyfSBsaXN0ZW5lclxuICAgKi9cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldHxBbnlFdmVudE5hbWV9IGFyZzFcbiAgICogQHBhcmFtIHtBbnlFdmVudE5hbWV8RXZlbnRMaXN0ZW5lcn0gYXJnMlxuICAgKiBAcGFyYW0ge0V2ZW50TGlzdGVuZXJ9IFthcmczXVxuICAgKiBAcmV0dXJucyB7RXZlbnRBcmdzfVxuICAgKi9cbiAgZnVuY3Rpb24gcHJvY2Vzc0V2ZW50QXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oYXJnMikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhcmdldDogZ2V0RG9jdW1lbnQoKS5ib2R5LFxuICAgICAgICBldmVudDogYXNTdHJpbmcoYXJnMSksXG4gICAgICAgIGxpc3RlbmVyOiBhcmcyXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhcmdldDogcmVzb2x2ZVRhcmdldChhcmcxKSxcbiAgICAgICAgZXZlbnQ6IGFzU3RyaW5nKGFyZzIpLFxuICAgICAgICBsaXN0ZW5lcjogYXJnM1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIHRvIGFuIGVsZW1lbnRcbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jb25cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldHxzdHJpbmd9IGFyZzEgdGhlIGVsZW1lbnQgdG8gYWRkIHRoZSBsaXN0ZW5lciB0byB8IHRoZSBldmVudCBuYW1lIHRvIGFkZCB0aGUgbGlzdGVuZXIgZm9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfEV2ZW50TGlzdGVuZXJ9IGFyZzIgdGhlIGV2ZW50IG5hbWUgdG8gYWRkIHRoZSBsaXN0ZW5lciBmb3IgfCB0aGUgbGlzdGVuZXIgdG8gYWRkXG4gICAqIEBwYXJhbSB7RXZlbnRMaXN0ZW5lcn0gW2FyZzNdIHRoZSBsaXN0ZW5lciB0byBhZGRcbiAgICogQHJldHVybnMge0V2ZW50TGlzdGVuZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVySW1wbChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgcmVhZHkoZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBldmVudEFyZ3MgPSBwcm9jZXNzRXZlbnRBcmdzKGFyZzEsIGFyZzIsIGFyZzMpXG4gICAgICBldmVudEFyZ3MudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRBcmdzLmV2ZW50LCBldmVudEFyZ3MubGlzdGVuZXIpXG4gICAgfSlcbiAgICBjb25zdCBiID0gaXNGdW5jdGlvbihhcmcyKVxuICAgIHJldHVybiBiID8gYXJnMiA6IGFyZzNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFuIGV2ZW50IGxpc3RlbmVyIGZyb20gYW4gZWxlbWVudFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vaHRteC5vcmcvYXBpLyNvZmZcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldHxzdHJpbmd9IGFyZzEgdGhlIGVsZW1lbnQgdG8gcmVtb3ZlIHRoZSBsaXN0ZW5lciBmcm9tIHwgdGhlIGV2ZW50IG5hbWUgdG8gcmVtb3ZlIHRoZSBsaXN0ZW5lciBmcm9tXG4gICAqIEBwYXJhbSB7c3RyaW5nfEV2ZW50TGlzdGVuZXJ9IGFyZzIgdGhlIGV2ZW50IG5hbWUgdG8gcmVtb3ZlIHRoZSBsaXN0ZW5lciBmcm9tIHwgdGhlIGxpc3RlbmVyIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0ge0V2ZW50TGlzdGVuZXJ9IFthcmczXSB0aGUgbGlzdGVuZXIgdG8gcmVtb3ZlXG4gICAqIEByZXR1cm5zIHtFdmVudExpc3RlbmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lckltcGwoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJlYWR5KGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgZXZlbnRBcmdzID0gcHJvY2Vzc0V2ZW50QXJncyhhcmcxLCBhcmcyLCBhcmczKVxuICAgICAgZXZlbnRBcmdzLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50QXJncy5ldmVudCwgZXZlbnRBcmdzLmxpc3RlbmVyKVxuICAgIH0pXG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oYXJnMikgPyBhcmcyIDogYXJnM1xuICB9XG5cbiAgLy89ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTm9kZSBwcm9jZXNzaW5nXG4gIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgY29uc3QgRFVNTVlfRUxUID0gZ2V0RG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50KCdvdXRwdXQnKSAvLyBkdW1teSBlbGVtZW50IGZvciBiYWQgc2VsZWN0b3JzXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0ck5hbWVcbiAgICogQHJldHVybnMgeyhOb2RlfFdpbmRvdylbXX1cbiAgICovXG4gIGZ1bmN0aW9uIGZpbmRBdHRyaWJ1dGVUYXJnZXRzKGVsdCwgYXR0ck5hbWUpIHtcbiAgICBjb25zdCBhdHRyVGFyZ2V0ID0gZ2V0Q2xvc2VzdEF0dHJpYnV0ZVZhbHVlKGVsdCwgYXR0ck5hbWUpXG4gICAgaWYgKGF0dHJUYXJnZXQpIHtcbiAgICAgIGlmIChhdHRyVGFyZ2V0ID09PSAndGhpcycpIHtcbiAgICAgICAgcmV0dXJuIFtmaW5kVGhpc0VsZW1lbnQoZWx0LCBhdHRyTmFtZSldXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBxdWVyeVNlbGVjdG9yQWxsRXh0KGVsdCwgYXR0clRhcmdldClcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBsb2dFcnJvcignVGhlIHNlbGVjdG9yIFwiJyArIGF0dHJUYXJnZXQgKyAnXCIgb24gJyArIGF0dHJOYW1lICsgJyByZXR1cm5lZCBubyBtYXRjaGVzIScpXG4gICAgICAgICAgcmV0dXJuIFtEVU1NWV9FTFRdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMge0VsZW1lbnR8bnVsbH1cbiAgICovXG4gIGZ1bmN0aW9uIGZpbmRUaGlzRWxlbWVudChlbHQsIGF0dHJpYnV0ZSkge1xuICAgIHJldHVybiBhc0VsZW1lbnQoZ2V0Q2xvc2VzdE1hdGNoKGVsdCwgZnVuY3Rpb24oZWx0KSB7XG4gICAgICByZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoYXNFbGVtZW50KGVsdCksIGF0dHJpYnV0ZSkgIT0gbnVsbFxuICAgIH0pKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEByZXR1cm5zIHtOb2RlfFdpbmRvd3xudWxsfVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0VGFyZ2V0KGVsdCkge1xuICAgIGNvbnN0IHRhcmdldFN0ciA9IGdldENsb3Nlc3RBdHRyaWJ1dGVWYWx1ZShlbHQsICdoeC10YXJnZXQnKVxuICAgIGlmICh0YXJnZXRTdHIpIHtcbiAgICAgIGlmICh0YXJnZXRTdHIgPT09ICd0aGlzJykge1xuICAgICAgICByZXR1cm4gZmluZFRoaXNFbGVtZW50KGVsdCwgJ2h4LXRhcmdldCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcXVlcnlTZWxlY3RvckV4dChlbHQsIHRhcmdldFN0cilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0YSA9IGdldEludGVybmFsRGF0YShlbHQpXG4gICAgICBpZiAoZGF0YS5ib29zdGVkKSB7XG4gICAgICAgIHJldHVybiBnZXREb2N1bWVudCgpLmJvZHlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbHRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBzaG91bGRTZXR0bGVBdHRyaWJ1dGUobmFtZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXNUb1NldHRsZSA9IGh0bXguY29uZmlnLmF0dHJpYnV0ZXNUb1NldHRsZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlc1RvU2V0dGxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobmFtZSA9PT0gYXR0cmlidXRlc1RvU2V0dGxlW2ldKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gbWVyZ2VUb1xuICAgKiBAcGFyYW0ge0VsZW1lbnR9IG1lcmdlRnJvbVxuICAgKi9cbiAgZnVuY3Rpb24gY2xvbmVBdHRyaWJ1dGVzKG1lcmdlVG8sIG1lcmdlRnJvbSkge1xuICAgIGZvckVhY2gobWVyZ2VUby5hdHRyaWJ1dGVzLCBmdW5jdGlvbihhdHRyKSB7XG4gICAgICBpZiAoIW1lcmdlRnJvbS5oYXNBdHRyaWJ1dGUoYXR0ci5uYW1lKSAmJiBzaG91bGRTZXR0bGVBdHRyaWJ1dGUoYXR0ci5uYW1lKSkge1xuICAgICAgICBtZXJnZVRvLnJlbW92ZUF0dHJpYnV0ZShhdHRyLm5hbWUpXG4gICAgICB9XG4gICAgfSlcbiAgICBmb3JFYWNoKG1lcmdlRnJvbS5hdHRyaWJ1dGVzLCBmdW5jdGlvbihhdHRyKSB7XG4gICAgICBpZiAoc2hvdWxkU2V0dGxlQXR0cmlidXRlKGF0dHIubmFtZSkpIHtcbiAgICAgICAgbWVyZ2VUby5zZXRBdHRyaWJ1dGUoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIdG14U3dhcFN0eWxlfSBzd2FwU3R5bGVcbiAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXRcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBpc0lubGluZVN3YXAoc3dhcFN0eWxlLCB0YXJnZXQpIHtcbiAgICBjb25zdCBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucyh0YXJnZXQpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBleHRlbnNpb24gPSBleHRlbnNpb25zW2ldXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZXh0ZW5zaW9uLmlzSW5saW5lU3dhcChzd2FwU3R5bGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dFcnJvcihlKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3dhcFN0eWxlID09PSAnb3V0ZXJIVE1MJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvb2JWYWx1ZVxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IG9vYkVsZW1lbnRcbiAgICogQHBhcmFtIHtIdG14U2V0dGxlSW5mb30gc2V0dGxlSW5mb1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZnVuY3Rpb24gb29iU3dhcChvb2JWYWx1ZSwgb29iRWxlbWVudCwgc2V0dGxlSW5mbykge1xuICAgIGxldCBzZWxlY3RvciA9ICcjJyArIGdldFJhd0F0dHJpYnV0ZShvb2JFbGVtZW50LCAnaWQnKVxuICAgIC8qKiBAdHlwZSBIdG14U3dhcFN0eWxlICovXG4gICAgbGV0IHN3YXBTdHlsZSA9ICdvdXRlckhUTUwnXG4gICAgaWYgKG9vYlZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9IGVsc2UgaWYgKG9vYlZhbHVlLmluZGV4T2YoJzonKSA+IDApIHtcbiAgICAgIHN3YXBTdHlsZSA9IG9vYlZhbHVlLnN1YnN0cigwLCBvb2JWYWx1ZS5pbmRleE9mKCc6JykpXG4gICAgICBzZWxlY3RvciA9IG9vYlZhbHVlLnN1YnN0cihvb2JWYWx1ZS5pbmRleE9mKCc6JykgKyAxLCBvb2JWYWx1ZS5sZW5ndGgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN3YXBTdHlsZSA9IG9vYlZhbHVlXG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0cyA9IGdldERvY3VtZW50KCkucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcilcbiAgICBpZiAodGFyZ2V0cykge1xuICAgICAgZm9yRWFjaChcbiAgICAgICAgdGFyZ2V0cyxcbiAgICAgICAgZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICAgICAgbGV0IGZyYWdtZW50XG4gICAgICAgICAgY29uc3Qgb29iRWxlbWVudENsb25lID0gb29iRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSlcbiAgICAgICAgICBmcmFnbWVudCA9IGdldERvY3VtZW50KCkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpXG4gICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQob29iRWxlbWVudENsb25lKVxuICAgICAgICAgIGlmICghaXNJbmxpbmVTd2FwKHN3YXBTdHlsZSwgdGFyZ2V0KSkge1xuICAgICAgICAgICAgZnJhZ21lbnQgPSBhc1BhcmVudE5vZGUob29iRWxlbWVudENsb25lKSAvLyBpZiB0aGlzIGlzIG5vdCBhbiBpbmxpbmUgc3dhcCwgd2UgdXNlIHRoZSBjb250ZW50IG9mIHRoZSBub2RlLCBub3QgdGhlIG5vZGUgaXRzZWxmXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYmVmb3JlU3dhcERldGFpbHMgPSB7IHNob3VsZFN3YXA6IHRydWUsIHRhcmdldCwgZnJhZ21lbnQgfVxuICAgICAgICAgIGlmICghdHJpZ2dlckV2ZW50KHRhcmdldCwgJ2h0bXg6b29iQmVmb3JlU3dhcCcsIGJlZm9yZVN3YXBEZXRhaWxzKSkgcmV0dXJuXG5cbiAgICAgICAgICB0YXJnZXQgPSBiZWZvcmVTd2FwRGV0YWlscy50YXJnZXQgLy8gYWxsb3cgcmUtdGFyZ2V0aW5nXG4gICAgICAgICAgaWYgKGJlZm9yZVN3YXBEZXRhaWxzLnNob3VsZFN3YXApIHtcbiAgICAgICAgICAgIHN3YXBXaXRoU3R5bGUoc3dhcFN0eWxlLCB0YXJnZXQsIHRhcmdldCwgZnJhZ21lbnQsIHNldHRsZUluZm8pXG4gICAgICAgICAgfVxuICAgICAgICAgIGZvckVhY2goc2V0dGxlSW5mby5lbHRzLCBmdW5jdGlvbihlbHQpIHtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChlbHQsICdodG14Om9vYkFmdGVyU3dhcCcsIGJlZm9yZVN3YXBEZXRhaWxzKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIG9vYkVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvb2JFbGVtZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICBvb2JFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob29iRWxlbWVudClcbiAgICAgIHRyaWdnZXJFcnJvckV2ZW50KGdldERvY3VtZW50KCkuYm9keSwgJ2h0bXg6b29iRXJyb3JOb1RhcmdldCcsIHsgY29udGVudDogb29iRWxlbWVudCB9KVxuICAgIH1cbiAgICByZXR1cm4gb29iVmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RvY3VtZW50RnJhZ21lbnR9IGZyYWdtZW50XG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVQcmVzZXJ2ZWRFbGVtZW50cyhmcmFnbWVudCkge1xuICAgIGZvckVhY2goZmluZEFsbChmcmFnbWVudCwgJ1toeC1wcmVzZXJ2ZV0sIFtkYXRhLWh4LXByZXNlcnZlXScpLCBmdW5jdGlvbihwcmVzZXJ2ZWRFbHQpIHtcbiAgICAgIGNvbnN0IGlkID0gZ2V0QXR0cmlidXRlVmFsdWUocHJlc2VydmVkRWx0LCAnaWQnKVxuICAgICAgY29uc3Qgb2xkRWx0ID0gZ2V0RG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChpZClcbiAgICAgIGlmIChvbGRFbHQgIT0gbnVsbCkge1xuICAgICAgICBwcmVzZXJ2ZWRFbHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQob2xkRWx0LCBwcmVzZXJ2ZWRFbHQpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHBhcmVudE5vZGVcbiAgICogQHBhcmFtIHtQYXJlbnROb2RlfSBmcmFnbWVudFxuICAgKiBAcGFyYW0ge0h0bXhTZXR0bGVJbmZvfSBzZXR0bGVJbmZvXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVBdHRyaWJ1dGVzKHBhcmVudE5vZGUsIGZyYWdtZW50LCBzZXR0bGVJbmZvKSB7XG4gICAgZm9yRWFjaChmcmFnbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWRdJyksIGZ1bmN0aW9uKG5ld05vZGUpIHtcbiAgICAgIGNvbnN0IGlkID0gZ2V0UmF3QXR0cmlidXRlKG5ld05vZGUsICdpZCcpXG4gICAgICBpZiAoaWQgJiYgaWQubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkSWQgPSBpZC5yZXBsYWNlKFwiJ1wiLCBcIlxcXFwnXCIpXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUYWcgPSBuZXdOb2RlLnRhZ05hbWUucmVwbGFjZSgnOicsICdcXFxcOicpXG4gICAgICAgIGNvbnN0IHBhcmVudEVsdCA9IGFzUGFyZW50Tm9kZShwYXJlbnROb2RlKVxuICAgICAgICBjb25zdCBvbGROb2RlID0gcGFyZW50RWx0ICYmIHBhcmVudEVsdC5xdWVyeVNlbGVjdG9yKG5vcm1hbGl6ZWRUYWcgKyBcIltpZD0nXCIgKyBub3JtYWxpemVkSWQgKyBcIiddXCIpXG4gICAgICAgIGlmIChvbGROb2RlICYmIG9sZE5vZGUgIT09IHBhcmVudEVsdCkge1xuICAgICAgICAgIGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSBuZXdOb2RlLmNsb25lTm9kZSgpXG4gICAgICAgICAgY2xvbmVBdHRyaWJ1dGVzKG5ld05vZGUsIG9sZE5vZGUpXG4gICAgICAgICAgc2V0dGxlSW5mby50YXNrcy5wdXNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY2xvbmVBdHRyaWJ1dGVzKG5ld05vZGUsIG5ld0F0dHJpYnV0ZXMpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBjaGlsZFxuICAgKiBAcmV0dXJucyB7SHRteFNldHRsZVRhc2t9XG4gICAqL1xuICBmdW5jdGlvbiBtYWtlQWpheExvYWRUYXNrKGNoaWxkKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmVtb3ZlQ2xhc3NGcm9tRWxlbWVudChjaGlsZCwgaHRteC5jb25maWcuYWRkZWRDbGFzcylcbiAgICAgIHByb2Nlc3NOb2RlKGFzRWxlbWVudChjaGlsZCkpXG4gICAgICBwcm9jZXNzRm9jdXMoYXNQYXJlbnROb2RlKGNoaWxkKSlcbiAgICAgIHRyaWdnZXJFdmVudChjaGlsZCwgJ2h0bXg6bG9hZCcpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UGFyZW50Tm9kZX0gY2hpbGRcbiAgICovXG4gIGZ1bmN0aW9uIHByb2Nlc3NGb2N1cyhjaGlsZCkge1xuICAgIGNvbnN0IGF1dG9mb2N1cyA9ICdbYXV0b2ZvY3VzXSdcbiAgICBjb25zdCBhdXRvRm9jdXNlZEVsdCA9IGFzSHRtbEVsZW1lbnQobWF0Y2hlcyhjaGlsZCwgYXV0b2ZvY3VzKSA/IGNoaWxkIDogY2hpbGQucXVlcnlTZWxlY3RvcihhdXRvZm9jdXMpKVxuICAgIGlmIChhdXRvRm9jdXNlZEVsdCAhPSBudWxsKSB7XG4gICAgICBhdXRvRm9jdXNlZEVsdC5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcGFyZW50Tm9kZVxuICAgKiBAcGFyYW0ge05vZGV9IGluc2VydEJlZm9yZVxuICAgKiBAcGFyYW0ge1BhcmVudE5vZGV9IGZyYWdtZW50XG4gICAqIEBwYXJhbSB7SHRteFNldHRsZUluZm99IHNldHRsZUluZm9cbiAgICovXG4gIGZ1bmN0aW9uIGluc2VydE5vZGVzQmVmb3JlKHBhcmVudE5vZGUsIGluc2VydEJlZm9yZSwgZnJhZ21lbnQsIHNldHRsZUluZm8pIHtcbiAgICBoYW5kbGVBdHRyaWJ1dGVzKHBhcmVudE5vZGUsIGZyYWdtZW50LCBzZXR0bGVJbmZvKVxuICAgIHdoaWxlIChmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gZnJhZ21lbnQuZmlyc3RDaGlsZFxuICAgICAgYWRkQ2xhc3NUb0VsZW1lbnQoYXNFbGVtZW50KGNoaWxkKSwgaHRteC5jb25maWcuYWRkZWRDbGFzcylcbiAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkLCBpbnNlcnRCZWZvcmUpXG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFICYmIGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLkNPTU1FTlRfTk9ERSkge1xuICAgICAgICBzZXR0bGVJbmZvLnRhc2tzLnB1c2gobWFrZUFqYXhMb2FkVGFzayhjaGlsZCkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGJhc2VkIG9uIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2h5YW1hbW90by9mZDQzNTUwNWQyOWViZmEzZDk3MTZmZDJiZThkNDJmMCxcbiAgICogZGVyaXZlZCBmcm9tIEphdmEncyBzdHJpbmcgaGFzaGNvZGUgaW1wbGVtZW50YXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICAgKiBAcGFyYW0ge251bWJlcn0gaGFzaFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaW5nSGFzaChzdHJpbmcsIGhhc2gpIHtcbiAgICBsZXQgY2hhciA9IDBcbiAgICB3aGlsZSAoY2hhciA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBzdHJpbmcuY2hhckNvZGVBdChjaGFyKyspIHwgMCAvLyBiaXR3aXNlIG9yIGVuc3VyZXMgd2UgaGF2ZSBhIDMyLWJpdCBpbnRcbiAgICB9XG4gICAgcmV0dXJuIGhhc2hcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gYXR0cmlidXRlSGFzaChlbHQpIHtcbiAgICBsZXQgaGFzaCA9IDBcbiAgICAvLyBJRSBmaXhcbiAgICBpZiAoZWx0LmF0dHJpYnV0ZXMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWx0LmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gZWx0LmF0dHJpYnV0ZXNbaV1cbiAgICAgICAgaWYgKGF0dHJpYnV0ZS52YWx1ZSkgeyAvLyBvbmx5IGluY2x1ZGUgYXR0cmlidXRlcyB3LyBhY3R1YWwgdmFsdWVzIChlbXB0eSBpcyBzYW1lIGFzIG5vbi1leGlzdGVudClcbiAgICAgICAgICBoYXNoID0gc3RyaW5nSGFzaChhdHRyaWJ1dGUubmFtZSwgaGFzaClcbiAgICAgICAgICBoYXNoID0gc3RyaW5nSGFzaChhdHRyaWJ1dGUudmFsdWUsIGhhc2gpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhhc2hcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSBlbHRcbiAgICovXG4gIGZ1bmN0aW9uIGRlSW5pdE9uSGFuZGxlcnMoZWx0KSB7XG4gICAgY29uc3QgaW50ZXJuYWxEYXRhID0gZ2V0SW50ZXJuYWxEYXRhKGVsdClcbiAgICBpZiAoaW50ZXJuYWxEYXRhLm9uSGFuZGxlcnMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW50ZXJuYWxEYXRhLm9uSGFuZGxlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaGFuZGxlckluZm8gPSBpbnRlcm5hbERhdGEub25IYW5kbGVyc1tpXVxuICAgICAgICByZW1vdmVFdmVudExpc3RlbmVySW1wbChlbHQsIGhhbmRsZXJJbmZvLmV2ZW50LCBoYW5kbGVySW5mby5saXN0ZW5lcilcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBpbnRlcm5hbERhdGEub25IYW5kbGVyc1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIGRlSW5pdE5vZGUoZWxlbWVudCkge1xuICAgIGNvbnN0IGludGVybmFsRGF0YSA9IGdldEludGVybmFsRGF0YShlbGVtZW50KVxuICAgIGlmIChpbnRlcm5hbERhdGEudGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KGludGVybmFsRGF0YS50aW1lb3V0KVxuICAgIH1cbiAgICBpZiAoaW50ZXJuYWxEYXRhLmxpc3RlbmVySW5mb3MpIHtcbiAgICAgIGZvckVhY2goaW50ZXJuYWxEYXRhLmxpc3RlbmVySW5mb3MsIGZ1bmN0aW9uKGluZm8pIHtcbiAgICAgICAgaWYgKGluZm8ub24pIHtcbiAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVySW1wbChpbmZvLm9uLCBpbmZvLnRyaWdnZXIsIGluZm8ubGlzdGVuZXIpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIGRlSW5pdE9uSGFuZGxlcnMoZWxlbWVudClcbiAgICBmb3JFYWNoKE9iamVjdC5rZXlzKGludGVybmFsRGF0YSksIGZ1bmN0aW9uKGtleSkgeyBkZWxldGUgaW50ZXJuYWxEYXRhW2tleV0gfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFuVXBFbGVtZW50KGVsZW1lbnQpIHtcbiAgICB0cmlnZ2VyRXZlbnQoZWxlbWVudCwgJ2h0bXg6YmVmb3JlQ2xlYW51cEVsZW1lbnQnKVxuICAgIGRlSW5pdE5vZGUoZWxlbWVudClcbiAgICAvLyBAdHMtaWdub3JlIElFMTEgY29kZVxuICAgIC8vIG5vaW5zcGVjdGlvbiBKU1VucmVzb2x2ZWRSZWZlcmVuY2VcbiAgICBpZiAoZWxlbWVudC5jaGlsZHJlbikgeyAvLyBJRVxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgZm9yRWFjaChlbGVtZW50LmNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkgeyBjbGVhblVwRWxlbWVudChjaGlsZCkgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSB0YXJnZXRcbiAgICogQHBhcmFtIHtQYXJlbnROb2RlfSBmcmFnbWVudFxuICAgKiBAcGFyYW0ge0h0bXhTZXR0bGVJbmZvfSBzZXR0bGVJbmZvXG4gICAqL1xuICBmdW5jdGlvbiBzd2FwT3V0ZXJIVE1MKHRhcmdldCwgZnJhZ21lbnQsIHNldHRsZUluZm8pIHtcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJiB0YXJnZXQudGFnTmFtZSA9PT0gJ0JPRFknKSB7IC8vIHNwZWNpYWwgY2FzZSB0aGUgYm9keSB0byBpbm5lckhUTUwgYmVjYXVzZSBEb2N1bWVudEZyYWdtZW50cyBjYW4ndCBjb250YWluIGEgYm9keSBlbHQgdW5mb3J0dW5hdGVseVxuICAgICAgcmV0dXJuIHN3YXBJbm5lckhUTUwodGFyZ2V0LCBmcmFnbWVudCwgc2V0dGxlSW5mbylcbiAgICB9XG4gICAgLyoqIEB0eXBlIHtOb2RlfSAqL1xuICAgIGxldCBuZXdFbHRcbiAgICBjb25zdCBlbHRCZWZvcmVOZXdDb250ZW50ID0gdGFyZ2V0LnByZXZpb3VzU2libGluZ1xuICAgIGluc2VydE5vZGVzQmVmb3JlKHBhcmVudEVsdCh0YXJnZXQpLCB0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKVxuICAgIGlmIChlbHRCZWZvcmVOZXdDb250ZW50ID09IG51bGwpIHtcbiAgICAgIG5ld0VsdCA9IHBhcmVudEVsdCh0YXJnZXQpLmZpcnN0Q2hpbGRcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RWx0ID0gZWx0QmVmb3JlTmV3Q29udGVudC5uZXh0U2libGluZ1xuICAgIH1cbiAgICBzZXR0bGVJbmZvLmVsdHMgPSBzZXR0bGVJbmZvLmVsdHMuZmlsdGVyKGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGUgIT09IHRhcmdldCB9KVxuICAgIC8vIHNjYW4gdGhyb3VnaCBhbGwgbmV3bHkgYWRkZWQgY29udGVudCBhbmQgYWRkIGFsbCBlbGVtZW50cyB0byB0aGUgc2V0dGxlIGluZm8gc28gd2UgdHJpZ2dlclxuICAgIC8vIGV2ZW50cyBwcm9wZXJseSBvbiB0aGVtXG4gICAgd2hpbGUgKG5ld0VsdCAmJiBuZXdFbHQgIT09IHRhcmdldCkge1xuICAgICAgaWYgKG5ld0VsdCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgICAgc2V0dGxlSW5mby5lbHRzLnB1c2gobmV3RWx0KVxuICAgICAgfVxuICAgICAgbmV3RWx0ID0gbmV3RWx0Lm5leHRTaWJsaW5nXG4gICAgfVxuICAgIGNsZWFuVXBFbGVtZW50KHRhcmdldClcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgdGFyZ2V0LnJlbW92ZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRhcmdldClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSB0YXJnZXRcbiAgICogQHBhcmFtIHtQYXJlbnROb2RlfSBmcmFnbWVudFxuICAgKiBAcGFyYW0ge0h0bXhTZXR0bGVJbmZvfSBzZXR0bGVJbmZvXG4gICAqL1xuICBmdW5jdGlvbiBzd2FwQWZ0ZXJCZWdpbih0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKSB7XG4gICAgcmV0dXJuIGluc2VydE5vZGVzQmVmb3JlKHRhcmdldCwgdGFyZ2V0LmZpcnN0Q2hpbGQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7UGFyZW50Tm9kZX0gZnJhZ21lbnRcbiAgICogQHBhcmFtIHtIdG14U2V0dGxlSW5mb30gc2V0dGxlSW5mb1xuICAgKi9cbiAgZnVuY3Rpb24gc3dhcEJlZm9yZUJlZ2luKHRhcmdldCwgZnJhZ21lbnQsIHNldHRsZUluZm8pIHtcbiAgICByZXR1cm4gaW5zZXJ0Tm9kZXNCZWZvcmUocGFyZW50RWx0KHRhcmdldCksIHRhcmdldCwgZnJhZ21lbnQsIHNldHRsZUluZm8pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSB0YXJnZXRcbiAgICogQHBhcmFtIHtQYXJlbnROb2RlfSBmcmFnbWVudFxuICAgKiBAcGFyYW0ge0h0bXhTZXR0bGVJbmZvfSBzZXR0bGVJbmZvXG4gICAqL1xuICBmdW5jdGlvbiBzd2FwQmVmb3JlRW5kKHRhcmdldCwgZnJhZ21lbnQsIHNldHRsZUluZm8pIHtcbiAgICByZXR1cm4gaW5zZXJ0Tm9kZXNCZWZvcmUodGFyZ2V0LCBudWxsLCBmcmFnbWVudCwgc2V0dGxlSW5mbylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHRhcmdldFxuICAgKiBAcGFyYW0ge1BhcmVudE5vZGV9IGZyYWdtZW50XG4gICAqIEBwYXJhbSB7SHRteFNldHRsZUluZm99IHNldHRsZUluZm9cbiAgICovXG4gIGZ1bmN0aW9uIHN3YXBBZnRlckVuZCh0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKSB7XG4gICAgcmV0dXJuIGluc2VydE5vZGVzQmVmb3JlKHBhcmVudEVsdCh0YXJnZXQpLCB0YXJnZXQubmV4dFNpYmxpbmcsIGZyYWdtZW50LCBzZXR0bGVJbmZvKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gdGFyZ2V0XG4gICAqL1xuICBmdW5jdGlvbiBzd2FwRGVsZXRlKHRhcmdldCkge1xuICAgIGNsZWFuVXBFbGVtZW50KHRhcmdldClcbiAgICByZXR1cm4gcGFyZW50RWx0KHRhcmdldCkucmVtb3ZlQ2hpbGQodGFyZ2V0KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7UGFyZW50Tm9kZX0gZnJhZ21lbnRcbiAgICogQHBhcmFtIHtIdG14U2V0dGxlSW5mb30gc2V0dGxlSW5mb1xuICAgKi9cbiAgZnVuY3Rpb24gc3dhcElubmVySFRNTCh0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKSB7XG4gICAgY29uc3QgZmlyc3RDaGlsZCA9IHRhcmdldC5maXJzdENoaWxkXG4gICAgaW5zZXJ0Tm9kZXNCZWZvcmUodGFyZ2V0LCBmaXJzdENoaWxkLCBmcmFnbWVudCwgc2V0dGxlSW5mbylcbiAgICBpZiAoZmlyc3RDaGlsZCkge1xuICAgICAgd2hpbGUgKGZpcnN0Q2hpbGQubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgY2xlYW5VcEVsZW1lbnQoZmlyc3RDaGlsZC5uZXh0U2libGluZylcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUNoaWxkKGZpcnN0Q2hpbGQubmV4dFNpYmxpbmcpXG4gICAgICB9XG4gICAgICBjbGVhblVwRWxlbWVudChmaXJzdENoaWxkKVxuICAgICAgdGFyZ2V0LnJlbW92ZUNoaWxkKGZpcnN0Q2hpbGQpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SHRteFN3YXBTdHlsZX0gc3dhcFN0eWxlXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEBwYXJhbSB7Tm9kZX0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7UGFyZW50Tm9kZX0gZnJhZ21lbnRcbiAgICogQHBhcmFtIHtIdG14U2V0dGxlSW5mb30gc2V0dGxlSW5mb1xuICAgKi9cbiAgZnVuY3Rpb24gc3dhcFdpdGhTdHlsZShzd2FwU3R5bGUsIGVsdCwgdGFyZ2V0LCBmcmFnbWVudCwgc2V0dGxlSW5mbykge1xuICAgIHN3aXRjaCAoc3dhcFN0eWxlKSB7XG4gICAgICBjYXNlICdub25lJzpcbiAgICAgICAgcmV0dXJuXG4gICAgICBjYXNlICdvdXRlckhUTUwnOlxuICAgICAgICBzd2FwT3V0ZXJIVE1MKHRhcmdldCwgZnJhZ21lbnQsIHNldHRsZUluZm8pXG4gICAgICAgIHJldHVyblxuICAgICAgY2FzZSAnYWZ0ZXJiZWdpbic6XG4gICAgICAgIHN3YXBBZnRlckJlZ2luKHRhcmdldCwgZnJhZ21lbnQsIHNldHRsZUluZm8pXG4gICAgICAgIHJldHVyblxuICAgICAgY2FzZSAnYmVmb3JlYmVnaW4nOlxuICAgICAgICBzd2FwQmVmb3JlQmVnaW4odGFyZ2V0LCBmcmFnbWVudCwgc2V0dGxlSW5mbylcbiAgICAgICAgcmV0dXJuXG4gICAgICBjYXNlICdiZWZvcmVlbmQnOlxuICAgICAgICBzd2FwQmVmb3JlRW5kKHRhcmdldCwgZnJhZ21lbnQsIHNldHRsZUluZm8pXG4gICAgICAgIHJldHVyblxuICAgICAgY2FzZSAnYWZ0ZXJlbmQnOlxuICAgICAgICBzd2FwQWZ0ZXJFbmQodGFyZ2V0LCBmcmFnbWVudCwgc2V0dGxlSW5mbylcbiAgICAgICAgcmV0dXJuXG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICBzd2FwRGVsZXRlKHRhcmdldClcbiAgICAgICAgcmV0dXJuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoZWx0KVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBleHQgPSBleHRlbnNpb25zW2ldXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0VsZW1lbnRzID0gZXh0LmhhbmRsZVN3YXAoc3dhcFN0eWxlLCB0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKVxuICAgICAgICAgICAgaWYgKG5ld0VsZW1lbnRzKSB7XG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld0VsZW1lbnRzKSkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGhhbmRsZVN3YXAgcmV0dXJucyBhbiBhcnJheSAobGlrZSkgb2YgZWxlbWVudHMsIHdlIGhhbmRsZSB0aGVtXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuZXdFbGVtZW50cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBuZXdFbGVtZW50c1tqXVxuICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSAmJiBjaGlsZC5ub2RlVHlwZSAhPT0gTm9kZS5DT01NRU5UX05PREUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0dGxlSW5mby50YXNrcy5wdXNoKG1ha2VBamF4TG9hZFRhc2soY2hpbGQpKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2dFcnJvcihlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3dhcFN0eWxlID09PSAnaW5uZXJIVE1MJykge1xuICAgICAgICAgIHN3YXBJbm5lckhUTUwodGFyZ2V0LCBmcmFnbWVudCwgc2V0dGxlSW5mbylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2FwV2l0aFN0eWxlKGh0bXguY29uZmlnLmRlZmF1bHRTd2FwU3R5bGUsIGVsdCwgdGFyZ2V0LCBmcmFnbWVudCwgc2V0dGxlSW5mbylcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RvY3VtZW50RnJhZ21lbnR9IGZyYWdtZW50XG4gICAqIEBwYXJhbSB7SHRteFNldHRsZUluZm99IHNldHRsZUluZm9cbiAgICovXG4gIGZ1bmN0aW9uIGZpbmRBbmRTd2FwT29iRWxlbWVudHMoZnJhZ21lbnQsIHNldHRsZUluZm8pIHtcbiAgICB2YXIgb29iRWx0cyA9IGZpbmRBbGwoZnJhZ21lbnQsICdbaHgtc3dhcC1vb2JdLCBbZGF0YS1oeC1zd2FwLW9vYl0nKVxuICAgIGZvckVhY2gob29iRWx0cywgZnVuY3Rpb24ob29iRWxlbWVudCkge1xuICAgICAgaWYgKGh0bXguY29uZmlnLmFsbG93TmVzdGVkT29iU3dhcHMgfHwgb29iRWxlbWVudC5wYXJlbnRFbGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG9vYlZhbHVlID0gZ2V0QXR0cmlidXRlVmFsdWUob29iRWxlbWVudCwgJ2h4LXN3YXAtb29iJylcbiAgICAgICAgaWYgKG9vYlZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICBvb2JTd2FwKG9vYlZhbHVlLCBvb2JFbGVtZW50LCBzZXR0bGVJbmZvKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvb2JFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnaHgtc3dhcC1vb2InKVxuICAgICAgICBvb2JFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1oeC1zd2FwLW9vYicpXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gb29iRWx0cy5sZW5ndGggPiAwXG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50cyBjb21wbGV0ZSBzd2FwcGluZyBwaXBlbGluZSwgaW5jbHVkaW5nOiBmb2N1cyBhbmQgc2VsZWN0aW9uIHByZXNlcnZhdGlvbixcbiAgICogdGl0bGUgdXBkYXRlcywgc2Nyb2xsLCBPT0Igc3dhcHBpbmcsIG5vcm1hbCBzd2FwcGluZyBhbmQgc2V0dGxpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd8RWxlbWVudH0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50XG4gICAqIEBwYXJhbSB7SHRteFN3YXBTcGVjaWZpY2F0aW9ufSBzd2FwU3BlY1xuICAgKiBAcGFyYW0ge1N3YXBPcHRpb25zfSBbc3dhcE9wdGlvbnNdXG4gICAqL1xuICBmdW5jdGlvbiBzd2FwKHRhcmdldCwgY29udGVudCwgc3dhcFNwZWMsIHN3YXBPcHRpb25zKSB7XG4gICAgaWYgKCFzd2FwT3B0aW9ucykge1xuICAgICAgc3dhcE9wdGlvbnMgPSB7fVxuICAgIH1cblxuICAgIHRhcmdldCA9IHJlc29sdmVUYXJnZXQodGFyZ2V0KVxuXG4gICAgLy8gcHJlc2VydmUgZm9jdXMgYW5kIHNlbGVjdGlvblxuICAgIGNvbnN0IGFjdGl2ZUVsdCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRcbiAgICBsZXQgc2VsZWN0aW9uSW5mbyA9IHt9XG4gICAgdHJ5IHtcbiAgICAgIHNlbGVjdGlvbkluZm8gPSB7XG4gICAgICAgIGVsdDogYWN0aXZlRWx0LFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHN0YXJ0OiBhY3RpdmVFbHQgPyBhY3RpdmVFbHQuc2VsZWN0aW9uU3RhcnQgOiBudWxsLFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGVuZDogYWN0aXZlRWx0ID8gYWN0aXZlRWx0LnNlbGVjdGlvbkVuZCA6IG51bGxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBzYWZhcmkgaXNzdWUgLSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9wbGF5d3JpZ2h0L2lzc3Vlcy81ODk0XG4gICAgfVxuICAgIGNvbnN0IHNldHRsZUluZm8gPSBtYWtlU2V0dGxlSW5mbyh0YXJnZXQpXG5cbiAgICAvLyBGb3IgdGV4dCBjb250ZW50IHN3YXBzLCBkb24ndCBwYXJzZSB0aGUgcmVzcG9uc2UgYXMgSFRNTCwganVzdCBpbnNlcnQgaXRcbiAgICBpZiAoc3dhcFNwZWMuc3dhcFN0eWxlID09PSAndGV4dENvbnRlbnQnKSB7XG4gICAgICB0YXJnZXQudGV4dENvbnRlbnQgPSBjb250ZW50XG4gICAgLy8gT3RoZXJ3aXNlLCBtYWtlIHRoZSBmcmFnbWVudCBhbmQgcHJvY2VzcyBpdFxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZnJhZ21lbnQgPSBtYWtlRnJhZ21lbnQoY29udGVudClcblxuICAgICAgc2V0dGxlSW5mby50aXRsZSA9IGZyYWdtZW50LnRpdGxlXG5cbiAgICAgIC8vIHNlbGVjdC1vb2Igc3dhcHNcbiAgICAgIGlmIChzd2FwT3B0aW9ucy5zZWxlY3RPT0IpIHtcbiAgICAgICAgY29uc3Qgb29iU2VsZWN0VmFsdWVzID0gc3dhcE9wdGlvbnMuc2VsZWN0T09CLnNwbGl0KCcsJylcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvb2JTZWxlY3RWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBvb2JTZWxlY3RWYWx1ZSA9IG9vYlNlbGVjdFZhbHVlc1tpXS5zcGxpdCgnOicsIDIpXG4gICAgICAgICAgbGV0IGlkID0gb29iU2VsZWN0VmFsdWVbMF0udHJpbSgpXG4gICAgICAgICAgaWYgKGlkLmluZGV4T2YoJyMnKSA9PT0gMCkge1xuICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHJpbmcoMSlcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgb29iVmFsdWUgPSBvb2JTZWxlY3RWYWx1ZVsxXSB8fCAndHJ1ZSdcbiAgICAgICAgICBjb25zdCBvb2JFbGVtZW50ID0gZnJhZ21lbnQucXVlcnlTZWxlY3RvcignIycgKyBpZClcbiAgICAgICAgICBpZiAob29iRWxlbWVudCkge1xuICAgICAgICAgICAgb29iU3dhcChvb2JWYWx1ZSwgb29iRWxlbWVudCwgc2V0dGxlSW5mbylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIG9vYiBzd2Fwc1xuICAgICAgZmluZEFuZFN3YXBPb2JFbGVtZW50cyhmcmFnbWVudCwgc2V0dGxlSW5mbylcbiAgICAgIGZvckVhY2goZmluZEFsbChmcmFnbWVudCwgJ3RlbXBsYXRlJyksIC8qKiBAcGFyYW0ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlICovZnVuY3Rpb24odGVtcGxhdGUpIHtcbiAgICAgICAgaWYgKGZpbmRBbmRTd2FwT29iRWxlbWVudHModGVtcGxhdGUuY29udGVudCwgc2V0dGxlSW5mbykpIHtcbiAgICAgICAgICAvLyBBdm9pZCBwb2xsdXRpbmcgdGhlIERPTSB3aXRoIGVtcHR5IHRlbXBsYXRlcyB0aGF0IHdlcmUgb25seSB1c2VkIHRvIGVuY2Fwc3VsYXRlIG9vYiBzd2FwXG4gICAgICAgICAgdGVtcGxhdGUucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLy8gbm9ybWFsIHN3YXBcbiAgICAgIGlmIChzd2FwT3B0aW9ucy5zZWxlY3QpIHtcbiAgICAgICAgY29uc3QgbmV3RnJhZ21lbnQgPSBnZXREb2N1bWVudCgpLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKVxuICAgICAgICBmb3JFYWNoKGZyYWdtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc3dhcE9wdGlvbnMuc2VsZWN0KSwgZnVuY3Rpb24obm9kZSkge1xuICAgICAgICAgIG5ld0ZyYWdtZW50LmFwcGVuZENoaWxkKG5vZGUpXG4gICAgICAgIH0pXG4gICAgICAgIGZyYWdtZW50ID0gbmV3RnJhZ21lbnRcbiAgICAgIH1cbiAgICAgIGhhbmRsZVByZXNlcnZlZEVsZW1lbnRzKGZyYWdtZW50KVxuICAgICAgc3dhcFdpdGhTdHlsZShzd2FwU3BlYy5zd2FwU3R5bGUsIHN3YXBPcHRpb25zLmNvbnRleHRFbGVtZW50LCB0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKVxuICAgIH1cblxuICAgIC8vIGFwcGx5IHNhdmVkIGZvY3VzIGFuZCBzZWxlY3Rpb24gaW5mb3JtYXRpb24gdG8gc3dhcHBlZCBjb250ZW50XG4gICAgaWYgKHNlbGVjdGlvbkluZm8uZWx0ICYmXG4gICAgICAhYm9keUNvbnRhaW5zKHNlbGVjdGlvbkluZm8uZWx0KSAmJlxuICAgICAgZ2V0UmF3QXR0cmlidXRlKHNlbGVjdGlvbkluZm8uZWx0LCAnaWQnKSkge1xuICAgICAgY29uc3QgbmV3QWN0aXZlRWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZ2V0UmF3QXR0cmlidXRlKHNlbGVjdGlvbkluZm8uZWx0LCAnaWQnKSlcbiAgICAgIGNvbnN0IGZvY3VzT3B0aW9ucyA9IHsgcHJldmVudFNjcm9sbDogc3dhcFNwZWMuZm9jdXNTY3JvbGwgIT09IHVuZGVmaW5lZCA/ICFzd2FwU3BlYy5mb2N1c1Njcm9sbCA6ICFodG14LmNvbmZpZy5kZWZhdWx0Rm9jdXNTY3JvbGwgfVxuICAgICAgaWYgKG5ld0FjdGl2ZUVsdCkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChzZWxlY3Rpb25JbmZvLnN0YXJ0ICYmIG5ld0FjdGl2ZUVsdC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBuZXdBY3RpdmVFbHQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uSW5mby5zdGFydCwgc2VsZWN0aW9uSW5mby5lbmQpXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gdGhlIHNldFNlbGVjdGlvblJhbmdlIG1ldGhvZCBpcyBwcmVzZW50IG9uIGZpZWxkcyB0aGF0IGRvbid0IHN1cHBvcnQgaXQsIHNvIGp1c3QgbGV0IHRoaXMgZmFpbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXdBY3RpdmVFbHQuZm9jdXMoZm9jdXNPcHRpb25zKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKGh0bXguY29uZmlnLnN3YXBwaW5nQ2xhc3MpXG4gICAgZm9yRWFjaChzZXR0bGVJbmZvLmVsdHMsIGZ1bmN0aW9uKGVsdCkge1xuICAgICAgaWYgKGVsdC5jbGFzc0xpc3QpIHtcbiAgICAgICAgZWx0LmNsYXNzTGlzdC5hZGQoaHRteC5jb25maWcuc2V0dGxpbmdDbGFzcylcbiAgICAgIH1cbiAgICAgIHRyaWdnZXJFdmVudChlbHQsICdodG14OmFmdGVyU3dhcCcsIHN3YXBPcHRpb25zLmV2ZW50SW5mbylcbiAgICB9KVxuICAgIGlmIChzd2FwT3B0aW9ucy5hZnRlclN3YXBDYWxsYmFjaykge1xuICAgICAgc3dhcE9wdGlvbnMuYWZ0ZXJTd2FwQ2FsbGJhY2soKVxuICAgIH1cblxuICAgIC8vIG1lcmdlIGluIG5ldyB0aXRsZSBhZnRlciBzd2FwIGJ1dCBiZWZvcmUgc2V0dGxlXG4gICAgaWYgKCFzd2FwU3BlYy5pZ25vcmVUaXRsZSkge1xuICAgICAgaGFuZGxlVGl0bGUoc2V0dGxlSW5mby50aXRsZSlcbiAgICB9XG5cbiAgICAvLyBzZXR0bGVcbiAgICBjb25zdCBkb1NldHRsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yRWFjaChzZXR0bGVJbmZvLnRhc2tzLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgIHRhc2suY2FsbCgpXG4gICAgICB9KVxuICAgICAgZm9yRWFjaChzZXR0bGVJbmZvLmVsdHMsIGZ1bmN0aW9uKGVsdCkge1xuICAgICAgICBpZiAoZWx0LmNsYXNzTGlzdCkge1xuICAgICAgICAgIGVsdC5jbGFzc0xpc3QucmVtb3ZlKGh0bXguY29uZmlnLnNldHRsaW5nQ2xhc3MpXG4gICAgICAgIH1cbiAgICAgICAgdHJpZ2dlckV2ZW50KGVsdCwgJ2h0bXg6YWZ0ZXJTZXR0bGUnLCBzd2FwT3B0aW9ucy5ldmVudEluZm8pXG4gICAgICB9KVxuXG4gICAgICBpZiAoc3dhcE9wdGlvbnMuYW5jaG9yKSB7XG4gICAgICAgIGNvbnN0IGFuY2hvclRhcmdldCA9IGFzRWxlbWVudChyZXNvbHZlVGFyZ2V0KCcjJyArIHN3YXBPcHRpb25zLmFuY2hvcikpXG4gICAgICAgIGlmIChhbmNob3JUYXJnZXQpIHtcbiAgICAgICAgICBhbmNob3JUYXJnZXQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ3N0YXJ0JywgYmVoYXZpb3I6ICdhdXRvJyB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZVNjcm9sbFN0YXRlKHNldHRsZUluZm8uZWx0cywgc3dhcFNwZWMpXG4gICAgICBpZiAoc3dhcE9wdGlvbnMuYWZ0ZXJTZXR0bGVDYWxsYmFjaykge1xuICAgICAgICBzd2FwT3B0aW9ucy5hZnRlclNldHRsZUNhbGxiYWNrKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3dhcFNwZWMuc2V0dGxlRGVsYXkgPiAwKSB7XG4gICAgICBnZXRXaW5kb3coKS5zZXRUaW1lb3V0KGRvU2V0dGxlLCBzd2FwU3BlYy5zZXR0bGVEZWxheSlcbiAgICB9IGVsc2Uge1xuICAgICAgZG9TZXR0bGUoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSB4aHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlclxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSBlbHRcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZVRyaWdnZXJIZWFkZXIoeGhyLCBoZWFkZXIsIGVsdCkge1xuICAgIGNvbnN0IHRyaWdnZXJCb2R5ID0geGhyLmdldFJlc3BvbnNlSGVhZGVyKGhlYWRlcilcbiAgICBpZiAodHJpZ2dlckJvZHkuaW5kZXhPZigneycpID09PSAwKSB7XG4gICAgICBjb25zdCB0cmlnZ2VycyA9IHBhcnNlSlNPTih0cmlnZ2VyQm9keSlcbiAgICAgIGZvciAoY29uc3QgZXZlbnROYW1lIGluIHRyaWdnZXJzKSB7XG4gICAgICAgIGlmICh0cmlnZ2Vycy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKSB7XG4gICAgICAgICAgbGV0IGRldGFpbCA9IHRyaWdnZXJzW2V2ZW50TmFtZV1cbiAgICAgICAgICBpZiAoaXNSYXdPYmplY3QoZGV0YWlsKSkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgZWx0ID0gZGV0YWlsLnRhcmdldCAhPT0gdW5kZWZpbmVkID8gZGV0YWlsLnRhcmdldCA6IGVsdFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZXRhaWwgPSB7IHZhbHVlOiBkZXRhaWwgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0cmlnZ2VyRXZlbnQoZWx0LCBldmVudE5hbWUsIGRldGFpbClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBldmVudE5hbWVzID0gdHJpZ2dlckJvZHkuc3BsaXQoJywnKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRyaWdnZXJFdmVudChlbHQsIGV2ZW50TmFtZXNbaV0udHJpbSgpLCBbXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBXSElURVNQQUNFID0gL1xccy9cbiAgY29uc3QgV0hJVEVTUEFDRV9PUl9DT01NQSA9IC9bXFxzLF0vXG4gIGNvbnN0IFNZTUJPTF9TVEFSVCA9IC9bXyRhLXpBLVpdL1xuICBjb25zdCBTWU1CT0xfQ09OVCA9IC9bXyRhLXpBLVowLTldL1xuICBjb25zdCBTVFJJTkdJU0hfU1RBUlQgPSBbJ1wiJywgXCInXCIsICcvJ11cbiAgY29uc3QgTk9UX1dISVRFU1BBQ0UgPSAvW15cXHNdL1xuICBjb25zdCBDT01CSU5FRF9TRUxFQ1RPUl9TVEFSVCA9IC9beyhdL1xuICBjb25zdCBDT01CSU5FRF9TRUxFQ1RPUl9FTkQgPSAvW30pXS9cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBmdW5jdGlvbiB0b2tlbml6ZVN0cmluZyhzdHIpIHtcbiAgICAvKiogQHR5cGUgc3RyaW5nW10gKi9cbiAgICBjb25zdCB0b2tlbnMgPSBbXVxuICAgIGxldCBwb3NpdGlvbiA9IDBcbiAgICB3aGlsZSAocG9zaXRpb24gPCBzdHIubGVuZ3RoKSB7XG4gICAgICBpZiAoU1lNQk9MX1NUQVJULmV4ZWMoc3RyLmNoYXJBdChwb3NpdGlvbikpKSB7XG4gICAgICAgIHZhciBzdGFydFBvc2l0aW9uID0gcG9zaXRpb25cbiAgICAgICAgd2hpbGUgKFNZTUJPTF9DT05ULmV4ZWMoc3RyLmNoYXJBdChwb3NpdGlvbiArIDEpKSkge1xuICAgICAgICAgIHBvc2l0aW9uKytcbiAgICAgICAgfVxuICAgICAgICB0b2tlbnMucHVzaChzdHIuc3Vic3RyKHN0YXJ0UG9zaXRpb24sIHBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbiArIDEpKVxuICAgICAgfSBlbHNlIGlmIChTVFJJTkdJU0hfU1RBUlQuaW5kZXhPZihzdHIuY2hhckF0KHBvc2l0aW9uKSkgIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2hhciA9IHN0ci5jaGFyQXQocG9zaXRpb24pXG4gICAgICAgIHZhciBzdGFydFBvc2l0aW9uID0gcG9zaXRpb25cbiAgICAgICAgcG9zaXRpb24rK1xuICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBzdHIubGVuZ3RoICYmIHN0ci5jaGFyQXQocG9zaXRpb24pICE9PSBzdGFydENoYXIpIHtcbiAgICAgICAgICBpZiAoc3RyLmNoYXJBdChwb3NpdGlvbikgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgcG9zaXRpb24rK1xuICAgICAgICAgIH1cbiAgICAgICAgICBwb3NpdGlvbisrXG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5zLnB1c2goc3RyLnN1YnN0cihzdGFydFBvc2l0aW9uLCBwb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24gKyAxKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IHN0ci5jaGFyQXQocG9zaXRpb24pXG4gICAgICAgIHRva2Vucy5wdXNoKHN5bWJvbClcbiAgICAgIH1cbiAgICAgIHBvc2l0aW9uKytcbiAgICB9XG4gICAgcmV0dXJuIHRva2Vuc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICAgKiBAcGFyYW0ge3N0cmluZ3xudWxsfSBsYXN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbU5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBpc1Bvc3NpYmxlUmVsYXRpdmVSZWZlcmVuY2UodG9rZW4sIGxhc3QsIHBhcmFtTmFtZSkge1xuICAgIHJldHVybiBTWU1CT0xfU1RBUlQuZXhlYyh0b2tlbi5jaGFyQXQoMCkpICYmXG4gICAgICB0b2tlbiAhPT0gJ3RydWUnICYmXG4gICAgICB0b2tlbiAhPT0gJ2ZhbHNlJyAmJlxuICAgICAgdG9rZW4gIT09ICd0aGlzJyAmJlxuICAgICAgdG9rZW4gIT09IHBhcmFtTmFtZSAmJlxuICAgICAgbGFzdCAhPT0gJy4nXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldHxzdHJpbmd9IGVsdFxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSB0b2tlbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtTmFtZVxuICAgKiBAcmV0dXJucyB7Q29uZGl0aW9uYWxGdW5jdGlvbnxudWxsfVxuICAgKi9cbiAgZnVuY3Rpb24gbWF5YmVHZW5lcmF0ZUNvbmRpdGlvbmFsKGVsdCwgdG9rZW5zLCBwYXJhbU5hbWUpIHtcbiAgICBpZiAodG9rZW5zWzBdID09PSAnWycpIHtcbiAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgICBsZXQgYnJhY2tldENvdW50ID0gMVxuICAgICAgbGV0IGNvbmRpdGlvbmFsU291cmNlID0gJyByZXR1cm4gKGZ1bmN0aW9uKCcgKyBwYXJhbU5hbWUgKyAnKXsgcmV0dXJuICgnXG4gICAgICBsZXQgbGFzdCA9IG51bGxcbiAgICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1swXVxuICAgICAgICAvLyBAdHMtaWdub3JlIEZvciBzb21lIHJlYXNvbiB0c2MgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSBzaGlmdCBjYWxsLCBhbmQgdGhpbmtzIHdlJ3JlIGNvbXBhcmluZyB0aGUgc2FtZSB2YWx1ZSBoZXJlLCBpLmUuICdbJyB2cyAnXSdcbiAgICAgICAgaWYgKHRva2VuID09PSAnXScpIHtcbiAgICAgICAgICBicmFja2V0Q291bnQtLVxuICAgICAgICAgIGlmIChicmFja2V0Q291bnQgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChsYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGNvbmRpdGlvbmFsU291cmNlID0gY29uZGl0aW9uYWxTb3VyY2UgKyAndHJ1ZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgICAgICAgICBjb25kaXRpb25hbFNvdXJjZSArPSAnKX0pJ1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uRnVuY3Rpb24gPSBtYXliZUV2YWwoZWx0LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb24oY29uZGl0aW9uYWxTb3VyY2UpKClcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlIH0pXG4gICAgICAgICAgICAgIGNvbmRpdGlvbkZ1bmN0aW9uLnNvdXJjZSA9IGNvbmRpdGlvbmFsU291cmNlXG4gICAgICAgICAgICAgIHJldHVybiBjb25kaXRpb25GdW5jdGlvblxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB0cmlnZ2VyRXJyb3JFdmVudChnZXREb2N1bWVudCgpLmJvZHksICdodG14OnN5bnRheDplcnJvcicsIHsgZXJyb3I6IGUsIHNvdXJjZTogY29uZGl0aW9uYWxTb3VyY2UgfSlcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodG9rZW4gPT09ICdbJykge1xuICAgICAgICAgIGJyYWNrZXRDb3VudCsrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUG9zc2libGVSZWxhdGl2ZVJlZmVyZW5jZSh0b2tlbiwgbGFzdCwgcGFyYW1OYW1lKSkge1xuICAgICAgICAgIGNvbmRpdGlvbmFsU291cmNlICs9ICcoKCcgKyBwYXJhbU5hbWUgKyAnLicgKyB0b2tlbiArICcpID8gKCcgKyBwYXJhbU5hbWUgKyAnLicgKyB0b2tlbiArICcpIDogKHdpbmRvdy4nICsgdG9rZW4gKyAnKSknXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uZGl0aW9uYWxTb3VyY2UgPSBjb25kaXRpb25hbFNvdXJjZSArIHRva2VuXG4gICAgICAgIH1cbiAgICAgICAgbGFzdCA9IHRva2Vucy5zaGlmdCgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHRva2Vuc1xuICAgKiBAcGFyYW0ge1JlZ0V4cH0gbWF0Y2hcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnN1bWVVbnRpbCh0b2tlbnMsIG1hdGNoKSB7XG4gICAgbGV0IHJlc3VsdCA9ICcnXG4gICAgd2hpbGUgKHRva2Vucy5sZW5ndGggPiAwICYmICFtYXRjaC50ZXN0KHRva2Vuc1swXSkpIHtcbiAgICAgIHJlc3VsdCArPSB0b2tlbnMuc2hpZnQoKVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdG9rZW5zXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiBjb25zdW1lQ1NTU2VsZWN0b3IodG9rZW5zKSB7XG4gICAgbGV0IHJlc3VsdFxuICAgIGlmICh0b2tlbnMubGVuZ3RoID4gMCAmJiBDT01CSU5FRF9TRUxFQ1RPUl9TVEFSVC50ZXN0KHRva2Vuc1swXSkpIHtcbiAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgICByZXN1bHQgPSBjb25zdW1lVW50aWwodG9rZW5zLCBDT01CSU5FRF9TRUxFQ1RPUl9FTkQpLnRyaW0oKVxuICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gY29uc3VtZVVudGlsKHRva2VucywgV0hJVEVTUEFDRV9PUl9DT01NQSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgY29uc3QgSU5QVVRfU0VMRUNUT1IgPSAnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHBsaWNpdFRyaWdnZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIGZvciB0cmlnZ2VyIHNwZWNzXG4gICAqIEByZXR1cm5zIHtIdG14VHJpZ2dlclNwZWNpZmljYXRpb25bXX1cbiAgICovXG4gIGZ1bmN0aW9uIHBhcnNlQW5kQ2FjaGVUcmlnZ2VyKGVsdCwgZXhwbGljaXRUcmlnZ2VyLCBjYWNoZSkge1xuICAgIC8qKiBAdHlwZSBIdG14VHJpZ2dlclNwZWNpZmljYXRpb25bXSAqL1xuICAgIGNvbnN0IHRyaWdnZXJTcGVjcyA9IFtdXG4gICAgY29uc3QgdG9rZW5zID0gdG9rZW5pemVTdHJpbmcoZXhwbGljaXRUcmlnZ2VyKVxuICAgIGRvIHtcbiAgICAgIGNvbnN1bWVVbnRpbCh0b2tlbnMsIE5PVF9XSElURVNQQUNFKVxuICAgICAgY29uc3QgaW5pdGlhbExlbmd0aCA9IHRva2Vucy5sZW5ndGhcbiAgICAgIGNvbnN0IHRyaWdnZXIgPSBjb25zdW1lVW50aWwodG9rZW5zLCAvWyxcXFtcXHNdLylcbiAgICAgIGlmICh0cmlnZ2VyICE9PSAnJykge1xuICAgICAgICBpZiAodHJpZ2dlciA9PT0gJ2V2ZXJ5Jykge1xuICAgICAgICAgIC8qKiBAdHlwZSBIdG14VHJpZ2dlclNwZWNpZmljYXRpb24gKi9cbiAgICAgICAgICBjb25zdCBldmVyeSA9IHsgdHJpZ2dlcjogJ2V2ZXJ5JyB9XG4gICAgICAgICAgY29uc3VtZVVudGlsKHRva2VucywgTk9UX1dISVRFU1BBQ0UpXG4gICAgICAgICAgZXZlcnkucG9sbEludGVydmFsID0gcGFyc2VJbnRlcnZhbChjb25zdW1lVW50aWwodG9rZW5zLCAvWyxcXFtcXHNdLykpXG4gICAgICAgICAgY29uc3VtZVVudGlsKHRva2VucywgTk9UX1dISVRFU1BBQ0UpXG4gICAgICAgICAgdmFyIGV2ZW50RmlsdGVyID0gbWF5YmVHZW5lcmF0ZUNvbmRpdGlvbmFsKGVsdCwgdG9rZW5zLCAnZXZlbnQnKVxuICAgICAgICAgIGlmIChldmVudEZpbHRlcikge1xuICAgICAgICAgICAgZXZlcnkuZXZlbnRGaWx0ZXIgPSBldmVudEZpbHRlclxuICAgICAgICAgIH1cbiAgICAgICAgICB0cmlnZ2VyU3BlY3MucHVzaChldmVyeSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvKiogQHR5cGUgSHRteFRyaWdnZXJTcGVjaWZpY2F0aW9uICovXG4gICAgICAgICAgY29uc3QgdHJpZ2dlclNwZWMgPSB7IHRyaWdnZXIgfVxuICAgICAgICAgIHZhciBldmVudEZpbHRlciA9IG1heWJlR2VuZXJhdGVDb25kaXRpb25hbChlbHQsIHRva2VucywgJ2V2ZW50JylcbiAgICAgICAgICBpZiAoZXZlbnRGaWx0ZXIpIHtcbiAgICAgICAgICAgIHRyaWdnZXJTcGVjLmV2ZW50RmlsdGVyID0gZXZlbnRGaWx0ZXJcbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKHRva2Vucy5sZW5ndGggPiAwICYmIHRva2Vuc1swXSAhPT0gJywnKSB7XG4gICAgICAgICAgICBjb25zdW1lVW50aWwodG9rZW5zLCBOT1RfV0hJVEVTUEFDRSlcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdG9rZW5zLnNoaWZ0KClcbiAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gJ2NoYW5nZWQnKSB7XG4gICAgICAgICAgICAgIHRyaWdnZXJTcGVjLmNoYW5nZWQgPSB0cnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuID09PSAnb25jZScpIHtcbiAgICAgICAgICAgICAgdHJpZ2dlclNwZWMub25jZSA9IHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gPT09ICdjb25zdW1lJykge1xuICAgICAgICAgICAgICB0cmlnZ2VyU3BlYy5jb25zdW1lID0gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ2RlbGF5JyAmJiB0b2tlbnNbMF0gPT09ICc6Jykge1xuICAgICAgICAgICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgICAgICAgICB0cmlnZ2VyU3BlYy5kZWxheSA9IHBhcnNlSW50ZXJ2YWwoY29uc3VtZVVudGlsKHRva2VucywgV0hJVEVTUEFDRV9PUl9DT01NQSkpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuID09PSAnZnJvbScgJiYgdG9rZW5zWzBdID09PSAnOicpIHtcbiAgICAgICAgICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgICAgICAgICAgaWYgKENPTUJJTkVEX1NFTEVDVE9SX1NUQVJULnRlc3QodG9rZW5zWzBdKSkge1xuICAgICAgICAgICAgICAgIHZhciBmcm9tX2FyZyA9IGNvbnN1bWVDU1NTZWxlY3Rvcih0b2tlbnMpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZyb21fYXJnID0gY29uc3VtZVVudGlsKHRva2VucywgV0hJVEVTUEFDRV9PUl9DT01NQSlcbiAgICAgICAgICAgICAgICBpZiAoZnJvbV9hcmcgPT09ICdjbG9zZXN0JyB8fCBmcm9tX2FyZyA9PT0gJ2ZpbmQnIHx8IGZyb21fYXJnID09PSAnbmV4dCcgfHwgZnJvbV9hcmcgPT09ICdwcmV2aW91cycpIHtcbiAgICAgICAgICAgICAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RvciA9IGNvbnN1bWVDU1NTZWxlY3Rvcih0b2tlbnMpXG4gICAgICAgICAgICAgICAgICAvLyBgbmV4dGAgYW5kIGBwcmV2aW91c2AgYWxsb3cgYSBzZWxlY3Rvci1sZXNzIHN5bnRheFxuICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbV9hcmcgKz0gJyAnICsgc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdHJpZ2dlclNwZWMuZnJvbSA9IGZyb21fYXJnXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuID09PSAndGFyZ2V0JyAmJiB0b2tlbnNbMF0gPT09ICc6Jykge1xuICAgICAgICAgICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgICAgICAgICB0cmlnZ2VyU3BlYy50YXJnZXQgPSBjb25zdW1lQ1NTU2VsZWN0b3IodG9rZW5zKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ3Rocm90dGxlJyAmJiB0b2tlbnNbMF0gPT09ICc6Jykge1xuICAgICAgICAgICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgICAgICAgICB0cmlnZ2VyU3BlYy50aHJvdHRsZSA9IHBhcnNlSW50ZXJ2YWwoY29uc3VtZVVudGlsKHRva2VucywgV0hJVEVTUEFDRV9PUl9DT01NQSkpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuID09PSAncXVldWUnICYmIHRva2Vuc1swXSA9PT0gJzonKSB7XG4gICAgICAgICAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgICAgICAgICAgIHRyaWdnZXJTcGVjLnF1ZXVlID0gY29uc3VtZVVudGlsKHRva2VucywgV0hJVEVTUEFDRV9PUl9DT01NQSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gPT09ICdyb290JyAmJiB0b2tlbnNbMF0gPT09ICc6Jykge1xuICAgICAgICAgICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgICAgICAgICB0cmlnZ2VyU3BlY1t0b2tlbl0gPSBjb25zdW1lQ1NTU2VsZWN0b3IodG9rZW5zKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ3RocmVzaG9sZCcgJiYgdG9rZW5zWzBdID09PSAnOicpIHtcbiAgICAgICAgICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgICAgICAgICAgdHJpZ2dlclNwZWNbdG9rZW5dID0gY29uc3VtZVVudGlsKHRva2VucywgV0hJVEVTUEFDRV9PUl9DT01NQSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRyaWdnZXJFcnJvckV2ZW50KGVsdCwgJ2h0bXg6c3ludGF4OmVycm9yJywgeyB0b2tlbjogdG9rZW5zLnNoaWZ0KCkgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdHJpZ2dlclNwZWNzLnB1c2godHJpZ2dlclNwZWMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09PSBpbml0aWFsTGVuZ3RoKSB7XG4gICAgICAgIHRyaWdnZXJFcnJvckV2ZW50KGVsdCwgJ2h0bXg6c3ludGF4OmVycm9yJywgeyB0b2tlbjogdG9rZW5zLnNoaWZ0KCkgfSlcbiAgICAgIH1cbiAgICAgIGNvbnN1bWVVbnRpbCh0b2tlbnMsIE5PVF9XSElURVNQQUNFKVxuICAgIH0gd2hpbGUgKHRva2Vuc1swXSA9PT0gJywnICYmIHRva2Vucy5zaGlmdCgpKVxuICAgIGlmIChjYWNoZSkge1xuICAgICAgY2FjaGVbZXhwbGljaXRUcmlnZ2VyXSA9IHRyaWdnZXJTcGVjc1xuICAgIH1cbiAgICByZXR1cm4gdHJpZ2dlclNwZWNzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHJldHVybnMge0h0bXhUcmlnZ2VyU3BlY2lmaWNhdGlvbltdfVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0VHJpZ2dlclNwZWNzKGVsdCkge1xuICAgIGNvbnN0IGV4cGxpY2l0VHJpZ2dlciA9IGdldEF0dHJpYnV0ZVZhbHVlKGVsdCwgJ2h4LXRyaWdnZXInKVxuICAgIGxldCB0cmlnZ2VyU3BlY3MgPSBbXVxuICAgIGlmIChleHBsaWNpdFRyaWdnZXIpIHtcbiAgICAgIGNvbnN0IGNhY2hlID0gaHRteC5jb25maWcudHJpZ2dlclNwZWNzQ2FjaGVcbiAgICAgIHRyaWdnZXJTcGVjcyA9IChjYWNoZSAmJiBjYWNoZVtleHBsaWNpdFRyaWdnZXJdKSB8fCBwYXJzZUFuZENhY2hlVHJpZ2dlcihlbHQsIGV4cGxpY2l0VHJpZ2dlciwgY2FjaGUpXG4gICAgfVxuXG4gICAgaWYgKHRyaWdnZXJTcGVjcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdHJpZ2dlclNwZWNzXG4gICAgfSBlbHNlIGlmIChtYXRjaGVzKGVsdCwgJ2Zvcm0nKSkge1xuICAgICAgcmV0dXJuIFt7IHRyaWdnZXI6ICdzdWJtaXQnIH1dXG4gICAgfSBlbHNlIGlmIChtYXRjaGVzKGVsdCwgJ2lucHV0W3R5cGU9XCJidXR0b25cIl0sIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0nKSkge1xuICAgICAgcmV0dXJuIFt7IHRyaWdnZXI6ICdjbGljaycgfV1cbiAgICB9IGVsc2UgaWYgKG1hdGNoZXMoZWx0LCBJTlBVVF9TRUxFQ1RPUikpIHtcbiAgICAgIHJldHVybiBbeyB0cmlnZ2VyOiAnY2hhbmdlJyB9XVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3sgdHJpZ2dlcjogJ2NsaWNrJyB9XVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKi9cbiAgZnVuY3Rpb24gY2FuY2VsUG9sbGluZyhlbHQpIHtcbiAgICBnZXRJbnRlcm5hbERhdGEoZWx0KS5jYW5jZWxsZWQgPSB0cnVlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHBhcmFtIHtUcmlnZ2VySGFuZGxlcn0gaGFuZGxlclxuICAgKiBAcGFyYW0ge0h0bXhUcmlnZ2VyU3BlY2lmaWNhdGlvbn0gc3BlY1xuICAgKi9cbiAgZnVuY3Rpb24gcHJvY2Vzc1BvbGxpbmcoZWx0LCBoYW5kbGVyLCBzcGVjKSB7XG4gICAgY29uc3Qgbm9kZURhdGEgPSBnZXRJbnRlcm5hbERhdGEoZWx0KVxuICAgIG5vZGVEYXRhLnRpbWVvdXQgPSBnZXRXaW5kb3coKS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGJvZHlDb250YWlucyhlbHQpICYmIG5vZGVEYXRhLmNhbmNlbGxlZCAhPT0gdHJ1ZSkge1xuICAgICAgICBpZiAoIW1heWJlRmlsdGVyRXZlbnQoc3BlYywgZWx0LCBtYWtlRXZlbnQoJ2h4OnBvbGw6dHJpZ2dlcicsIHtcbiAgICAgICAgICB0cmlnZ2VyU3BlYzogc3BlYyxcbiAgICAgICAgICB0YXJnZXQ6IGVsdFxuICAgICAgICB9KSkpIHtcbiAgICAgICAgICBoYW5kbGVyKGVsdClcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzUG9sbGluZyhlbHQsIGhhbmRsZXIsIHNwZWMpXG4gICAgICB9XG4gICAgfSwgc3BlYy5wb2xsSW50ZXJ2YWwpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MQW5jaG9yRWxlbWVudH0gZWx0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaXNMb2NhbExpbmsoZWx0KSB7XG4gICAgcmV0dXJuIGxvY2F0aW9uLmhvc3RuYW1lID09PSBlbHQuaG9zdG5hbWUgJiZcbiAgICAgIGdldFJhd0F0dHJpYnV0ZShlbHQsICdocmVmJykgJiZcbiAgICAgIGdldFJhd0F0dHJpYnV0ZShlbHQsICdocmVmJykuaW5kZXhPZignIycpICE9PSAwXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICovXG4gIGZ1bmN0aW9uIGVsdElzRGlzYWJsZWQoZWx0KSB7XG4gICAgcmV0dXJuIGNsb3Nlc3QoZWx0LCBodG14LmNvbmZpZy5kaXNhYmxlU2VsZWN0b3IpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHBhcmFtIHtIdG14Tm9kZUludGVybmFsRGF0YX0gbm9kZURhdGFcbiAgICogQHBhcmFtIHtIdG14VHJpZ2dlclNwZWNpZmljYXRpb25bXX0gdHJpZ2dlclNwZWNzXG4gICAqL1xuICBmdW5jdGlvbiBib29zdEVsZW1lbnQoZWx0LCBub2RlRGF0YSwgdHJpZ2dlclNwZWNzKSB7XG4gICAgaWYgKChlbHQgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCAmJiBpc0xvY2FsTGluayhlbHQpICYmIChlbHQudGFyZ2V0ID09PSAnJyB8fCBlbHQudGFyZ2V0ID09PSAnX3NlbGYnKSkgfHwgKGVsdC50YWdOYW1lID09PSAnRk9STScgJiYgU3RyaW5nKGdldFJhd0F0dHJpYnV0ZShlbHQsICdtZXRob2QnKSkudG9Mb3dlckNhc2UoKSAhPT0gJ2RpYWxvZycpKSB7XG4gICAgICBub2RlRGF0YS5ib29zdGVkID0gdHJ1ZVxuICAgICAgbGV0IHZlcmIsIHBhdGhcbiAgICAgIGlmIChlbHQudGFnTmFtZSA9PT0gJ0EnKSB7XG4gICAgICAgIHZlcmIgPSAnZ2V0J1xuICAgICAgICBwYXRoID0gZ2V0UmF3QXR0cmlidXRlKGVsdCwgJ2hyZWYnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmF3QXR0cmlidXRlID0gZ2V0UmF3QXR0cmlidXRlKGVsdCwgJ21ldGhvZCcpXG4gICAgICAgIHZlcmIgPSByYXdBdHRyaWJ1dGUgPyByYXdBdHRyaWJ1dGUudG9Mb3dlckNhc2UoKSA6ICdnZXQnXG4gICAgICAgIGlmICh2ZXJiID09PSAnZ2V0Jykge1xuICAgICAgICB9XG4gICAgICAgIHBhdGggPSBnZXRSYXdBdHRyaWJ1dGUoZWx0LCAnYWN0aW9uJylcbiAgICAgIH1cbiAgICAgIHRyaWdnZXJTcGVjcy5mb3JFYWNoKGZ1bmN0aW9uKHRyaWdnZXJTcGVjKSB7XG4gICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWx0LCBmdW5jdGlvbihub2RlLCBldnQpIHtcbiAgICAgICAgICBjb25zdCBlbHQgPSBhc0VsZW1lbnQobm9kZSlcbiAgICAgICAgICBpZiAoZWx0SXNEaXNhYmxlZChlbHQpKSB7XG4gICAgICAgICAgICBjbGVhblVwRWxlbWVudChlbHQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgaXNzdWVBamF4UmVxdWVzdCh2ZXJiLCBwYXRoLCBlbHQsIGV2dClcbiAgICAgICAgfSwgbm9kZURhdGEsIHRyaWdnZXJTcGVjLCB0cnVlKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudH0gZXZ0XG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIHNob3VsZENhbmNlbChldnQsIG5vZGUpIHtcbiAgICBjb25zdCBlbHQgPSBhc0VsZW1lbnQobm9kZSlcbiAgICBpZiAoIWVsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGlmIChldnQudHlwZSA9PT0gJ3N1Ym1pdCcgfHwgZXZ0LnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgIGlmIChlbHQudGFnTmFtZSA9PT0gJ0ZPUk0nKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAobWF0Y2hlcyhlbHQsICdpbnB1dFt0eXBlPVwic3VibWl0XCJdLCBidXR0b24nKSAmJiBjbG9zZXN0KGVsdCwgJ2Zvcm0nKSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGVsdCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50ICYmIGVsdC5ocmVmICYmXG4gICAgICAgIChlbHQuZ2V0QXR0cmlidXRlKCdocmVmJykgPT09ICcjJyB8fCBlbHQuZ2V0QXR0cmlidXRlKCdocmVmJykuaW5kZXhPZignIycpICE9PSAwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IGVsdFxuICAgKiBAcGFyYW0ge0V2ZW50fE1vdXNlRXZlbnR8S2V5Ym9hcmRFdmVudHxUb3VjaEV2ZW50fSBldnRcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBpZ25vcmVCb29zdGVkQW5jaG9yQ3RybENsaWNrKGVsdCwgZXZ0KSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsRGF0YShlbHQpLmJvb3N0ZWQgJiYgZWx0IGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQgJiYgZXZ0LnR5cGUgPT09ICdjbGljaycgJiZcbiAgICAgIC8vIEB0cy1pZ25vcmUgdGhpcyB3aWxsIHJlc29sdmUgdG8gdW5kZWZpbmVkIGZvciBldmVudHMgdGhhdCBkb24ndCBkZWZpbmUgdGhvc2UgcHJvcGVydGllcywgd2hpY2ggaXMgZmluZVxuICAgICAgKGV2dC5jdHJsS2V5IHx8IGV2dC5tZXRhS2V5KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SHRteFRyaWdnZXJTcGVjaWZpY2F0aW9ufSB0cmlnZ2VyU3BlY1xuICAgKiBAcGFyYW0ge05vZGV9IGVsdFxuICAgKiBAcGFyYW0ge0V2ZW50fSBldnRcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBtYXliZUZpbHRlckV2ZW50KHRyaWdnZXJTcGVjLCBlbHQsIGV2dCkge1xuICAgIGNvbnN0IGV2ZW50RmlsdGVyID0gdHJpZ2dlclNwZWMuZXZlbnRGaWx0ZXJcbiAgICBpZiAoZXZlbnRGaWx0ZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBldmVudEZpbHRlci5jYWxsKGVsdCwgZXZ0KSAhPT0gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBldmVudEZpbHRlci5zb3VyY2VcbiAgICAgICAgdHJpZ2dlckVycm9yRXZlbnQoZ2V0RG9jdW1lbnQoKS5ib2R5LCAnaHRteDpldmVudEZpbHRlcjplcnJvcicsIHsgZXJyb3I6IGUsIHNvdXJjZSB9KVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IGVsdFxuICAgKiBAcGFyYW0ge1RyaWdnZXJIYW5kbGVyfSBoYW5kbGVyXG4gICAqIEBwYXJhbSB7SHRteE5vZGVJbnRlcm5hbERhdGF9IG5vZGVEYXRhXG4gICAqIEBwYXJhbSB7SHRteFRyaWdnZXJTcGVjaWZpY2F0aW9ufSB0cmlnZ2VyU3BlY1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtleHBsaWNpdENhbmNlbF1cbiAgICovXG4gIGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoZWx0LCBoYW5kbGVyLCBub2RlRGF0YSwgdHJpZ2dlclNwZWMsIGV4cGxpY2l0Q2FuY2VsKSB7XG4gICAgY29uc3QgZWxlbWVudERhdGEgPSBnZXRJbnRlcm5hbERhdGEoZWx0KVxuICAgIC8qKiBAdHlwZSB7KE5vZGV8V2luZG93KVtdfSAqL1xuICAgIGxldCBlbHRzVG9MaXN0ZW5PblxuICAgIGlmICh0cmlnZ2VyU3BlYy5mcm9tKSB7XG4gICAgICBlbHRzVG9MaXN0ZW5PbiA9IHF1ZXJ5U2VsZWN0b3JBbGxFeHQoZWx0LCB0cmlnZ2VyU3BlYy5mcm9tKVxuICAgIH0gZWxzZSB7XG4gICAgICBlbHRzVG9MaXN0ZW5PbiA9IFtlbHRdXG4gICAgfVxuICAgIC8vIHN0b3JlIHRoZSBpbml0aWFsIHZhbHVlcyBvZiB0aGUgZWxlbWVudHMsIHNvIHdlIGNhbiB0ZWxsIGlmIHRoZXkgY2hhbmdlXG4gICAgaWYgKHRyaWdnZXJTcGVjLmNoYW5nZWQpIHtcbiAgICAgIGVsdHNUb0xpc3Rlbk9uLmZvckVhY2goZnVuY3Rpb24oZWx0VG9MaXN0ZW5Pbikge1xuICAgICAgICBjb25zdCBlbHRUb0xpc3Rlbk9uRGF0YSA9IGdldEludGVybmFsRGF0YShlbHRUb0xpc3Rlbk9uKVxuICAgICAgICAvLyBAdHMtaWdub3JlIHZhbHVlIHdpbGwgYmUgdW5kZWZpbmVkIGZvciBub24taW5wdXQgZWxlbWVudHMsIHdoaWNoIGlzIGZpbmVcbiAgICAgICAgZWx0VG9MaXN0ZW5PbkRhdGEubGFzdFZhbHVlID0gZWx0VG9MaXN0ZW5Pbi52YWx1ZVxuICAgICAgfSlcbiAgICB9XG4gICAgZm9yRWFjaChlbHRzVG9MaXN0ZW5PbiwgZnVuY3Rpb24oZWx0VG9MaXN0ZW5Pbikge1xuICAgICAgLyoqIEB0eXBlIEV2ZW50TGlzdGVuZXIgKi9cbiAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldnQpIHtcbiAgICAgICAgaWYgKCFib2R5Q29udGFpbnMoZWx0KSkge1xuICAgICAgICAgIGVsdFRvTGlzdGVuT24ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0cmlnZ2VyU3BlYy50cmlnZ2VyLCBldmVudExpc3RlbmVyKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChpZ25vcmVCb29zdGVkQW5jaG9yQ3RybENsaWNrKGVsdCwgZXZ0KSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChleHBsaWNpdENhbmNlbCB8fCBzaG91bGRDYW5jZWwoZXZ0LCBlbHQpKSB7XG4gICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF5YmVGaWx0ZXJFdmVudCh0cmlnZ2VyU3BlYywgZWx0LCBldnQpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnREYXRhID0gZ2V0SW50ZXJuYWxEYXRhKGV2dClcbiAgICAgICAgZXZlbnREYXRhLnRyaWdnZXJTcGVjID0gdHJpZ2dlclNwZWNcbiAgICAgICAgaWYgKGV2ZW50RGF0YS5oYW5kbGVkRm9yID09IG51bGwpIHtcbiAgICAgICAgICBldmVudERhdGEuaGFuZGxlZEZvciA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50RGF0YS5oYW5kbGVkRm9yLmluZGV4T2YoZWx0KSA8IDApIHtcbiAgICAgICAgICBldmVudERhdGEuaGFuZGxlZEZvci5wdXNoKGVsdClcbiAgICAgICAgICBpZiAodHJpZ2dlclNwZWMuY29uc3VtZSkge1xuICAgICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0cmlnZ2VyU3BlYy50YXJnZXQgJiYgZXZ0LnRhcmdldCkge1xuICAgICAgICAgICAgaWYgKCFtYXRjaGVzKGFzRWxlbWVudChldnQudGFyZ2V0KSwgdHJpZ2dlclNwZWMudGFyZ2V0KSkge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRyaWdnZXJTcGVjLm9uY2UpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50RGF0YS50cmlnZ2VyZWRPbmNlKSB7XG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWxlbWVudERhdGEudHJpZ2dlcmVkT25jZSA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRyaWdnZXJTcGVjLmNoYW5nZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsdFRvTGlzdGVuT25EYXRhID0gZ2V0SW50ZXJuYWxEYXRhKGVsdFRvTGlzdGVuT24pXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIHZhbHVlIHdpbGwgYmUgdW5kZWZpbmVkIGZvciBub24taW5wdXQgZWxlbWVudHMsIHdoaWNoIGlzIGZpbmVcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZWx0VG9MaXN0ZW5Pbi52YWx1ZVxuICAgICAgICAgICAgaWYgKGVsdFRvTGlzdGVuT25EYXRhLmxhc3RWYWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHRUb0xpc3Rlbk9uRGF0YS5sYXN0VmFsdWUgPSB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWxlbWVudERhdGEuZGVsYXllZCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGVsZW1lbnREYXRhLmRlbGF5ZWQpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbGVtZW50RGF0YS50aHJvdHRsZSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRyaWdnZXJTcGVjLnRocm90dGxlID4gMCkge1xuICAgICAgICAgICAgaWYgKCFlbGVtZW50RGF0YS50aHJvdHRsZSkge1xuICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDp0cmlnZ2VyJylcbiAgICAgICAgICAgICAgaGFuZGxlcihlbHQsIGV2dClcbiAgICAgICAgICAgICAgZWxlbWVudERhdGEudGhyb3R0bGUgPSBnZXRXaW5kb3coKS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnREYXRhLnRocm90dGxlID0gbnVsbFxuICAgICAgICAgICAgICB9LCB0cmlnZ2VyU3BlYy50aHJvdHRsZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRyaWdnZXJTcGVjLmRlbGF5ID4gMCkge1xuICAgICAgICAgICAgZWxlbWVudERhdGEuZGVsYXllZCA9IGdldFdpbmRvdygpLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHRyaWdnZXJFdmVudChlbHQsICdodG14OnRyaWdnZXInKVxuICAgICAgICAgICAgICBoYW5kbGVyKGVsdCwgZXZ0KVxuICAgICAgICAgICAgfSwgdHJpZ2dlclNwZWMuZGVsYXkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChlbHQsICdodG14OnRyaWdnZXInKVxuICAgICAgICAgICAgaGFuZGxlcihlbHQsIGV2dClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub2RlRGF0YS5saXN0ZW5lckluZm9zID09IG51bGwpIHtcbiAgICAgICAgbm9kZURhdGEubGlzdGVuZXJJbmZvcyA9IFtdXG4gICAgICB9XG4gICAgICBub2RlRGF0YS5saXN0ZW5lckluZm9zLnB1c2goe1xuICAgICAgICB0cmlnZ2VyOiB0cmlnZ2VyU3BlYy50cmlnZ2VyLFxuICAgICAgICBsaXN0ZW5lcjogZXZlbnRMaXN0ZW5lcixcbiAgICAgICAgb246IGVsdFRvTGlzdGVuT25cbiAgICAgIH0pXG4gICAgICBlbHRUb0xpc3Rlbk9uLmFkZEV2ZW50TGlzdGVuZXIodHJpZ2dlclNwZWMudHJpZ2dlciwgZXZlbnRMaXN0ZW5lcilcbiAgICB9KVxuICB9XG5cbiAgbGV0IHdpbmRvd0lzU2Nyb2xsaW5nID0gZmFsc2UgLy8gdXNlZCBieSBpbml0U2Nyb2xsSGFuZGxlclxuICBsZXQgc2Nyb2xsSGFuZGxlciA9IG51bGxcbiAgZnVuY3Rpb24gaW5pdFNjcm9sbEhhbmRsZXIoKSB7XG4gICAgaWYgKCFzY3JvbGxIYW5kbGVyKSB7XG4gICAgICBzY3JvbGxIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHdpbmRvd0lzU2Nyb2xsaW5nID0gdHJ1ZVxuICAgICAgfVxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNjcm9sbEhhbmRsZXIpXG4gICAgICBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHdpbmRvd0lzU2Nyb2xsaW5nKSB7XG4gICAgICAgICAgd2luZG93SXNTY3JvbGxpbmcgPSBmYWxzZVxuICAgICAgICAgIGZvckVhY2goZ2V0RG9jdW1lbnQoKS5xdWVyeVNlbGVjdG9yQWxsKFwiW2h4LXRyaWdnZXIqPSdyZXZlYWxlZCddLFtkYXRhLWh4LXRyaWdnZXIqPSdyZXZlYWxlZCddXCIpLCBmdW5jdGlvbihlbHQpIHtcbiAgICAgICAgICAgIG1heWJlUmV2ZWFsKGVsdClcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9LCAyMDApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqL1xuICBmdW5jdGlvbiBtYXliZVJldmVhbChlbHQpIHtcbiAgICBpZiAoIWhhc0F0dHJpYnV0ZShlbHQsICdkYXRhLWh4LXJldmVhbGVkJykgJiYgaXNTY3JvbGxlZEludG9WaWV3KGVsdCkpIHtcbiAgICAgIGVsdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtaHgtcmV2ZWFsZWQnLCAndHJ1ZScpXG4gICAgICBjb25zdCBub2RlRGF0YSA9IGdldEludGVybmFsRGF0YShlbHQpXG4gICAgICBpZiAobm9kZURhdGEuaW5pdEhhc2gpIHtcbiAgICAgICAgdHJpZ2dlckV2ZW50KGVsdCwgJ3JldmVhbGVkJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIHRoZSBub2RlIGlzbid0IGluaXRpYWxpemVkLCB3YWl0IGZvciBpdCBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgcmVxdWVzdFxuICAgICAgICBlbHQuYWRkRXZlbnRMaXN0ZW5lcignaHRteDphZnRlclByb2Nlc3NOb2RlJywgZnVuY3Rpb24oKSB7IHRyaWdnZXJFdmVudChlbHQsICdyZXZlYWxlZCcpIH0sIHsgb25jZTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEBwYXJhbSB7VHJpZ2dlckhhbmRsZXJ9IGhhbmRsZXJcbiAgICogQHBhcmFtIHtIdG14Tm9kZUludGVybmFsRGF0YX0gbm9kZURhdGFcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5XG4gICAqL1xuICBmdW5jdGlvbiBsb2FkSW1tZWRpYXRlbHkoZWx0LCBoYW5kbGVyLCBub2RlRGF0YSwgZGVsYXkpIHtcbiAgICBjb25zdCBsb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIW5vZGVEYXRhLmxvYWRlZCkge1xuICAgICAgICBub2RlRGF0YS5sb2FkZWQgPSB0cnVlXG4gICAgICAgIGhhbmRsZXIoZWx0KVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGVsYXkgPiAwKSB7XG4gICAgICBnZXRXaW5kb3coKS5zZXRUaW1lb3V0KGxvYWQsIGRlbGF5KVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2FkKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHBhcmFtIHtIdG14Tm9kZUludGVybmFsRGF0YX0gbm9kZURhdGFcbiAgICogQHBhcmFtIHtIdG14VHJpZ2dlclNwZWNpZmljYXRpb25bXX0gdHJpZ2dlclNwZWNzXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gcHJvY2Vzc1ZlcmJzKGVsdCwgbm9kZURhdGEsIHRyaWdnZXJTcGVjcykge1xuICAgIGxldCBleHBsaWNpdEFjdGlvbiA9IGZhbHNlXG4gICAgZm9yRWFjaChWRVJCUywgZnVuY3Rpb24odmVyYikge1xuICAgICAgaWYgKGhhc0F0dHJpYnV0ZShlbHQsICdoeC0nICsgdmVyYikpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldEF0dHJpYnV0ZVZhbHVlKGVsdCwgJ2h4LScgKyB2ZXJiKVxuICAgICAgICBleHBsaWNpdEFjdGlvbiA9IHRydWVcbiAgICAgICAgbm9kZURhdGEucGF0aCA9IHBhdGhcbiAgICAgICAgbm9kZURhdGEudmVyYiA9IHZlcmJcbiAgICAgICAgdHJpZ2dlclNwZWNzLmZvckVhY2goZnVuY3Rpb24odHJpZ2dlclNwZWMpIHtcbiAgICAgICAgICBhZGRUcmlnZ2VySGFuZGxlcihlbHQsIHRyaWdnZXJTcGVjLCBub2RlRGF0YSwgZnVuY3Rpb24obm9kZSwgZXZ0KSB7XG4gICAgICAgICAgICBjb25zdCBlbHQgPSBhc0VsZW1lbnQobm9kZSlcbiAgICAgICAgICAgIGlmIChjbG9zZXN0KGVsdCwgaHRteC5jb25maWcuZGlzYWJsZVNlbGVjdG9yKSkge1xuICAgICAgICAgICAgICBjbGVhblVwRWxlbWVudChlbHQpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXNzdWVBamF4UmVxdWVzdCh2ZXJiLCBwYXRoLCBlbHQsIGV2dClcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGV4cGxpY2l0QWN0aW9uXG4gIH1cblxuICAvKipcbiAgICogQGNhbGxiYWNrIFRyaWdnZXJIYW5kbGVyXG4gICAqIEBwYXJhbSB7Tm9kZX0gZWx0XG4gICAqIEBwYXJhbSB7RXZlbnR9IFtldnRdXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IGVsdFxuICAgKiBAcGFyYW0ge0h0bXhUcmlnZ2VyU3BlY2lmaWNhdGlvbn0gdHJpZ2dlclNwZWNcbiAgICogQHBhcmFtIHtIdG14Tm9kZUludGVybmFsRGF0YX0gbm9kZURhdGFcbiAgICogQHBhcmFtIHtUcmlnZ2VySGFuZGxlcn0gaGFuZGxlclxuICAgKi9cbiAgZnVuY3Rpb24gYWRkVHJpZ2dlckhhbmRsZXIoZWx0LCB0cmlnZ2VyU3BlYywgbm9kZURhdGEsIGhhbmRsZXIpIHtcbiAgICBpZiAodHJpZ2dlclNwZWMudHJpZ2dlciA9PT0gJ3JldmVhbGVkJykge1xuICAgICAgaW5pdFNjcm9sbEhhbmRsZXIoKVxuICAgICAgYWRkRXZlbnRMaXN0ZW5lcihlbHQsIGhhbmRsZXIsIG5vZGVEYXRhLCB0cmlnZ2VyU3BlYylcbiAgICAgIG1heWJlUmV2ZWFsKGFzRWxlbWVudChlbHQpKVxuICAgIH0gZWxzZSBpZiAodHJpZ2dlclNwZWMudHJpZ2dlciA9PT0gJ2ludGVyc2VjdCcpIHtcbiAgICAgIGNvbnN0IG9ic2VydmVyT3B0aW9ucyA9IHt9XG4gICAgICBpZiAodHJpZ2dlclNwZWMucm9vdCkge1xuICAgICAgICBvYnNlcnZlck9wdGlvbnMucm9vdCA9IHF1ZXJ5U2VsZWN0b3JFeHQoZWx0LCB0cmlnZ2VyU3BlYy5yb290KVxuICAgICAgfVxuICAgICAgaWYgKHRyaWdnZXJTcGVjLnRocmVzaG9sZCkge1xuICAgICAgICBvYnNlcnZlck9wdGlvbnMudGhyZXNob2xkID0gcGFyc2VGbG9hdCh0cmlnZ2VyU3BlYy50aHJlc2hvbGQpXG4gICAgICB9XG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbihlbnRyaWVzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1tpXVxuICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KGVsdCwgJ2ludGVyc2VjdCcpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgb2JzZXJ2ZXJPcHRpb25zKVxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShhc0VsZW1lbnQoZWx0KSlcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoYXNFbGVtZW50KGVsdCksIGhhbmRsZXIsIG5vZGVEYXRhLCB0cmlnZ2VyU3BlYylcbiAgICB9IGVsc2UgaWYgKHRyaWdnZXJTcGVjLnRyaWdnZXIgPT09ICdsb2FkJykge1xuICAgICAgaWYgKCFtYXliZUZpbHRlckV2ZW50KHRyaWdnZXJTcGVjLCBlbHQsIG1ha2VFdmVudCgnbG9hZCcsIHsgZWx0IH0pKSkge1xuICAgICAgICBsb2FkSW1tZWRpYXRlbHkoYXNFbGVtZW50KGVsdCksIGhhbmRsZXIsIG5vZGVEYXRhLCB0cmlnZ2VyU3BlYy5kZWxheSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRyaWdnZXJTcGVjLnBvbGxJbnRlcnZhbCA+IDApIHtcbiAgICAgIG5vZGVEYXRhLnBvbGxpbmcgPSB0cnVlXG4gICAgICBwcm9jZXNzUG9sbGluZyhhc0VsZW1lbnQoZWx0KSwgaGFuZGxlciwgdHJpZ2dlclNwZWMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWx0LCBoYW5kbGVyLCBub2RlRGF0YSwgdHJpZ2dlclNwZWMpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIHNob3VsZFByb2Nlc3NIeE9uKG5vZGUpIHtcbiAgICBjb25zdCBlbHQgPSBhc0VsZW1lbnQobm9kZSlcbiAgICBpZiAoIWVsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBlbHQuYXR0cmlidXRlc1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgYXR0cmlidXRlcy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgYXR0ck5hbWUgPSBhdHRyaWJ1dGVzW2pdLm5hbWVcbiAgICAgIGlmIChzdGFydHNXaXRoKGF0dHJOYW1lLCAnaHgtb246JykgfHwgc3RhcnRzV2l0aChhdHRyTmFtZSwgJ2RhdGEtaHgtb246JykgfHxcbiAgICAgICAgc3RhcnRzV2l0aChhdHRyTmFtZSwgJ2h4LW9uLScpIHx8IHN0YXJ0c1dpdGgoYXR0ck5hbWUsICdkYXRhLWh4LW9uLScpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gZWx0XG4gICAqIEByZXR1cm5zIHtFbGVtZW50W119XG4gICAqL1xuICBjb25zdCBIWF9PTl9RVUVSWSA9IG5ldyBYUGF0aEV2YWx1YXRvcigpXG4gICAgLmNyZWF0ZUV4cHJlc3Npb24oJy4vLypbQCpbIHN0YXJ0cy13aXRoKG5hbWUoKSwgXCJoeC1vbjpcIikgb3Igc3RhcnRzLXdpdGgobmFtZSgpLCBcImRhdGEtaHgtb246XCIpIG9yJyArXG4gICAgICAnIHN0YXJ0cy13aXRoKG5hbWUoKSwgXCJoeC1vbi1cIikgb3Igc3RhcnRzLXdpdGgobmFtZSgpLCBcImRhdGEtaHgtb24tXCIpIF1dJylcblxuICBmdW5jdGlvbiBwcm9jZXNzSFhPblJvb3QoZWx0LCBlbGVtZW50cykge1xuICAgIGlmIChzaG91bGRQcm9jZXNzSHhPbihlbHQpKSB7XG4gICAgICBlbGVtZW50cy5wdXNoKGFzRWxlbWVudChlbHQpKVxuICAgIH1cbiAgICBjb25zdCBpdGVyID0gSFhfT05fUVVFUlkuZXZhbHVhdGUoZWx0KVxuICAgIGxldCBub2RlID0gbnVsbFxuICAgIHdoaWxlIChub2RlID0gaXRlci5pdGVyYXRlTmV4dCgpKSBlbGVtZW50cy5wdXNoKGFzRWxlbWVudChub2RlKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRIeE9uV2lsZGNhcmRFbGVtZW50cyhlbHQpIHtcbiAgICAvKiogQHR5cGUge0VsZW1lbnRbXX0gKi9cbiAgICBjb25zdCBlbGVtZW50cyA9IFtdXG4gICAgaWYgKGVsdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZWx0LmNoaWxkTm9kZXMpIHtcbiAgICAgICAgcHJvY2Vzc0hYT25Sb290KGNoaWxkLCBlbGVtZW50cylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzc0hYT25Sb290KGVsdCwgZWxlbWVudHMpXG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50c1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEByZXR1cm5zIHtOb2RlTGlzdE9mPEVsZW1lbnQ+fFtdfVxuICAgKi9cbiAgZnVuY3Rpb24gZmluZEVsZW1lbnRzVG9Qcm9jZXNzKGVsdCkge1xuICAgIGlmIChlbHQucXVlcnlTZWxlY3RvckFsbCkge1xuICAgICAgY29uc3QgYm9vc3RlZFNlbGVjdG9yID0gJywgW2h4LWJvb3N0XSBhLCBbZGF0YS1oeC1ib29zdF0gYSwgYVtoeC1ib29zdF0sIGFbZGF0YS1oeC1ib29zdF0nXG5cbiAgICAgIGNvbnN0IGV4dGVuc2lvblNlbGVjdG9ycyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IGUgaW4gZXh0ZW5zaW9ucykge1xuICAgICAgICBjb25zdCBleHRlbnNpb24gPSBleHRlbnNpb25zW2VdXG4gICAgICAgIGlmIChleHRlbnNpb24uZ2V0U2VsZWN0b3JzKSB7XG4gICAgICAgICAgdmFyIHNlbGVjdG9ycyA9IGV4dGVuc2lvbi5nZXRTZWxlY3RvcnMoKVxuICAgICAgICAgIGlmIChzZWxlY3RvcnMpIHtcbiAgICAgICAgICAgIGV4dGVuc2lvblNlbGVjdG9ycy5wdXNoKHNlbGVjdG9ycylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0cyA9IGVsdC5xdWVyeVNlbGVjdG9yQWxsKFZFUkJfU0VMRUNUT1IgKyBib29zdGVkU2VsZWN0b3IgKyBcIiwgZm9ybSwgW3R5cGU9J3N1Ym1pdCddLFwiICtcbiAgICAgICAgJyBbaHgtZXh0XSwgW2RhdGEtaHgtZXh0XSwgW2h4LXRyaWdnZXJdLCBbZGF0YS1oeC10cmlnZ2VyXScgKyBleHRlbnNpb25TZWxlY3RvcnMuZmxhdCgpLm1hcChzID0+ICcsICcgKyBzKS5qb2luKCcnKSlcblxuICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzdWJtaXQgYnV0dG9ucy9pbnB1dHMgdGhhdCBoYXZlIHRoZSBmb3JtIGF0dHJpYnV0ZSBzZXRcbiAgICogc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b25cbiAgICogQHBhcmFtIHtFdmVudH0gZXZ0XG4gICAqL1xuICBmdW5jdGlvbiBtYXliZVNldExhc3RCdXR0b25DbGlja2VkKGV2dCkge1xuICAgIGNvbnN0IGVsdCA9IC8qKiBAdHlwZSB7SFRNTEJ1dHRvbkVsZW1lbnR8SFRNTElucHV0RWxlbWVudH0gKi8gKGNsb3Nlc3QoYXNFbGVtZW50KGV2dC50YXJnZXQpLCBcImJ1dHRvbiwgaW5wdXRbdHlwZT0nc3VibWl0J11cIikpXG4gICAgY29uc3QgaW50ZXJuYWxEYXRhID0gZ2V0UmVsYXRlZEZvcm1EYXRhKGV2dClcbiAgICBpZiAoaW50ZXJuYWxEYXRhKSB7XG4gICAgICBpbnRlcm5hbERhdGEubGFzdEJ1dHRvbkNsaWNrZWQgPSBlbHRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudH0gZXZ0XG4gICAqL1xuICBmdW5jdGlvbiBtYXliZVVuc2V0TGFzdEJ1dHRvbkNsaWNrZWQoZXZ0KSB7XG4gICAgY29uc3QgaW50ZXJuYWxEYXRhID0gZ2V0UmVsYXRlZEZvcm1EYXRhKGV2dClcbiAgICBpZiAoaW50ZXJuYWxEYXRhKSB7XG4gICAgICBpbnRlcm5hbERhdGEubGFzdEJ1dHRvbkNsaWNrZWQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2dFxuICAgKiBAcmV0dXJucyB7SHRteE5vZGVJbnRlcm5hbERhdGF8dW5kZWZpbmVkfVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UmVsYXRlZEZvcm1EYXRhKGV2dCkge1xuICAgIGNvbnN0IGVsdCA9IGNsb3Nlc3QoYXNFbGVtZW50KGV2dC50YXJnZXQpLCBcImJ1dHRvbiwgaW5wdXRbdHlwZT0nc3VibWl0J11cIilcbiAgICBpZiAoIWVsdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IGZvcm0gPSByZXNvbHZlVGFyZ2V0KCcjJyArIGdldFJhd0F0dHJpYnV0ZShlbHQsICdmb3JtJyksIGVsdC5nZXRSb290Tm9kZSgpKSB8fCBjbG9zZXN0KGVsdCwgJ2Zvcm0nKVxuICAgIGlmICghZm9ybSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHJldHVybiBnZXRJbnRlcm5hbERhdGEoZm9ybSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSBlbHRcbiAgICovXG4gIGZ1bmN0aW9uIGluaXRCdXR0b25UcmFja2luZyhlbHQpIHtcbiAgICAvLyBuZWVkIHRvIGhhbmRsZSBib3RoIGNsaWNrIGFuZCBmb2N1cyBpbjpcbiAgICAvLyAgIGZvY3VzaW4gLSBpbiBjYXNlIHNvbWVvbmUgdGFicyBpbiB0byBhIGJ1dHRvbiBhbmQgaGl0cyB0aGUgc3BhY2UgYmFyXG4gICAgLy8gICBjbGljayAtIG9uIE9TWCBidXR0b25zIGRvIG5vdCBmb2N1cyBvbiBjbGljayBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzI0XG4gICAgZWx0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbWF5YmVTZXRMYXN0QnV0dG9uQ2xpY2tlZClcbiAgICBlbHQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIG1heWJlU2V0TGFzdEJ1dHRvbkNsaWNrZWQpXG4gICAgZWx0LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgbWF5YmVVbnNldExhc3RCdXR0b25DbGlja2VkKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGVcbiAgICovXG4gIGZ1bmN0aW9uIGFkZEh4T25FdmVudEhhbmRsZXIoZWx0LCBldmVudE5hbWUsIGNvZGUpIHtcbiAgICBjb25zdCBub2RlRGF0YSA9IGdldEludGVybmFsRGF0YShlbHQpXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG5vZGVEYXRhLm9uSGFuZGxlcnMpKSB7XG4gICAgICBub2RlRGF0YS5vbkhhbmRsZXJzID0gW11cbiAgICB9XG4gICAgbGV0IGZ1bmNcbiAgICAvKiogQHR5cGUgRXZlbnRMaXN0ZW5lciAqL1xuICAgIGNvbnN0IGxpc3RlbmVyID0gZnVuY3Rpb24oZSkge1xuICAgICAgbWF5YmVFdmFsKGVsdCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChlbHRJc0Rpc2FibGVkKGVsdCkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZ1bmMpIHtcbiAgICAgICAgICBmdW5jID0gbmV3IEZ1bmN0aW9uKCdldmVudCcsIGNvZGUpXG4gICAgICAgIH1cbiAgICAgICAgZnVuYy5jYWxsKGVsdCwgZSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGVsdC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgbGlzdGVuZXIpXG4gICAgbm9kZURhdGEub25IYW5kbGVycy5wdXNoKHsgZXZlbnQ6IGV2ZW50TmFtZSwgbGlzdGVuZXIgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKi9cbiAgZnVuY3Rpb24gcHJvY2Vzc0h4T25XaWxkY2FyZChlbHQpIHtcbiAgICAvLyB3aXBlIGFueSBwcmV2aW91cyBvbiBoYW5kbGVycyBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gdGFrZXMgcHJlY2VkZW5jZVxuICAgIGRlSW5pdE9uSGFuZGxlcnMoZWx0KVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbHQuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbmFtZSA9IGVsdC5hdHRyaWJ1dGVzW2ldLm5hbWVcbiAgICAgIGNvbnN0IHZhbHVlID0gZWx0LmF0dHJpYnV0ZXNbaV0udmFsdWVcbiAgICAgIGlmIChzdGFydHNXaXRoKG5hbWUsICdoeC1vbicpIHx8IHN0YXJ0c1dpdGgobmFtZSwgJ2RhdGEtaHgtb24nKSkge1xuICAgICAgICBjb25zdCBhZnRlck9uUG9zaXRpb24gPSBuYW1lLmluZGV4T2YoJy1vbicpICsgM1xuICAgICAgICBjb25zdCBuZXh0Q2hhciA9IG5hbWUuc2xpY2UoYWZ0ZXJPblBvc2l0aW9uLCBhZnRlck9uUG9zaXRpb24gKyAxKVxuICAgICAgICBpZiAobmV4dENoYXIgPT09ICctJyB8fCBuZXh0Q2hhciA9PT0gJzonKSB7XG4gICAgICAgICAgbGV0IGV2ZW50TmFtZSA9IG5hbWUuc2xpY2UoYWZ0ZXJPblBvc2l0aW9uICsgMSlcbiAgICAgICAgICAvLyBpZiB0aGUgZXZlbnROYW1lIHN0YXJ0cyB3aXRoIGEgY29sb24gb3IgZGFzaCwgcHJlcGVuZCBcImh0bXhcIiBmb3Igc2hvcnRoYW5kIHN1cHBvcnRcbiAgICAgICAgICBpZiAoc3RhcnRzV2l0aChldmVudE5hbWUsICc6JykpIHtcbiAgICAgICAgICAgIGV2ZW50TmFtZSA9ICdodG14JyArIGV2ZW50TmFtZVxuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRzV2l0aChldmVudE5hbWUsICctJykpIHtcbiAgICAgICAgICAgIGV2ZW50TmFtZSA9ICdodG14OicgKyBldmVudE5hbWUuc2xpY2UoMSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0c1dpdGgoZXZlbnROYW1lLCAnaHRteC0nKSkge1xuICAgICAgICAgICAgZXZlbnROYW1lID0gJ2h0bXg6JyArIGV2ZW50TmFtZS5zbGljZSg1KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFkZEh4T25FdmVudEhhbmRsZXIoZWx0LCBldmVudE5hbWUsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudHxIVE1MSW5wdXRFbGVtZW50fSBlbHRcbiAgICovXG4gIGZ1bmN0aW9uIGluaXROb2RlKGVsdCkge1xuICAgIGlmIChjbG9zZXN0KGVsdCwgaHRteC5jb25maWcuZGlzYWJsZVNlbGVjdG9yKSkge1xuICAgICAgY2xlYW5VcEVsZW1lbnQoZWx0KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IG5vZGVEYXRhID0gZ2V0SW50ZXJuYWxEYXRhKGVsdClcbiAgICBpZiAobm9kZURhdGEuaW5pdEhhc2ggIT09IGF0dHJpYnV0ZUhhc2goZWx0KSkge1xuICAgICAgLy8gY2xlYW4gdXAgYW55IHByZXZpb3VzbHkgcHJvY2Vzc2VkIGluZm9cbiAgICAgIGRlSW5pdE5vZGUoZWx0KVxuXG4gICAgICBub2RlRGF0YS5pbml0SGFzaCA9IGF0dHJpYnV0ZUhhc2goZWx0KVxuXG4gICAgICB0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDpiZWZvcmVQcm9jZXNzTm9kZScpXG5cbiAgICAgIC8vIEB0cy1pZ25vcmUgdmFsdWUgd2lsbCBiZSB1bmRlZmluZWQgZm9yIG5vbi1pbnB1dCBlbGVtZW50cywgd2hpY2ggaXMgZmluZVxuICAgICAgaWYgKGVsdC52YWx1ZSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG5vZGVEYXRhLmxhc3RWYWx1ZSA9IGVsdC52YWx1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmlnZ2VyU3BlY3MgPSBnZXRUcmlnZ2VyU3BlY3MoZWx0KVxuICAgICAgY29uc3QgaGFzRXhwbGljaXRIdHRwQWN0aW9uID0gcHJvY2Vzc1ZlcmJzKGVsdCwgbm9kZURhdGEsIHRyaWdnZXJTcGVjcylcblxuICAgICAgaWYgKCFoYXNFeHBsaWNpdEh0dHBBY3Rpb24pIHtcbiAgICAgICAgaWYgKGdldENsb3Nlc3RBdHRyaWJ1dGVWYWx1ZShlbHQsICdoeC1ib29zdCcpID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBib29zdEVsZW1lbnQoZWx0LCBub2RlRGF0YSwgdHJpZ2dlclNwZWNzKVxuICAgICAgICB9IGVsc2UgaWYgKGhhc0F0dHJpYnV0ZShlbHQsICdoeC10cmlnZ2VyJykpIHtcbiAgICAgICAgICB0cmlnZ2VyU3BlY3MuZm9yRWFjaChmdW5jdGlvbih0cmlnZ2VyU3BlYykge1xuICAgICAgICAgICAgLy8gRm9yIFwibmFrZWRcIiB0cmlnZ2VycywgZG9uJ3QgZG8gYW55dGhpbmcgYXQgYWxsXG4gICAgICAgICAgICBhZGRUcmlnZ2VySGFuZGxlcihlbHQsIHRyaWdnZXJTcGVjLCBub2RlRGF0YSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIHN1Ym1pdCBidXR0b25zL2lucHV0cyB0aGF0IGhhdmUgdGhlIGZvcm0gYXR0cmlidXRlIHNldFxuICAgICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b25cbiAgICAgIGlmIChlbHQudGFnTmFtZSA9PT0gJ0ZPUk0nIHx8IChnZXRSYXdBdHRyaWJ1dGUoZWx0LCAndHlwZScpID09PSAnc3VibWl0JyAmJiBoYXNBdHRyaWJ1dGUoZWx0LCAnZm9ybScpKSkge1xuICAgICAgICBpbml0QnV0dG9uVHJhY2tpbmcoZWx0KVxuICAgICAgfVxuXG4gICAgICB0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDphZnRlclByb2Nlc3NOb2RlJylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIG5ldyBjb250ZW50LCBlbmFibGluZyBodG14IGJlaGF2aW9yLiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IGhhdmUgY29udGVudCB0aGF0IGlzIGFkZGVkIHRvIHRoZSBET00gb3V0c2lkZSBvZiB0aGUgbm9ybWFsIGh0bXggcmVxdWVzdCBjeWNsZSBidXQgc3RpbGwgd2FudCBodG14IGF0dHJpYnV0ZXMgdG8gd29yay5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jcHJvY2Vzc1xuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR8c3RyaW5nfSBlbHQgZWxlbWVudCB0byBwcm9jZXNzXG4gICAqL1xuICBmdW5jdGlvbiBwcm9jZXNzTm9kZShlbHQpIHtcbiAgICBlbHQgPSByZXNvbHZlVGFyZ2V0KGVsdClcbiAgICBpZiAoY2xvc2VzdChlbHQsIGh0bXguY29uZmlnLmRpc2FibGVTZWxlY3RvcikpIHtcbiAgICAgIGNsZWFuVXBFbGVtZW50KGVsdClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpbml0Tm9kZShlbHQpXG4gICAgZm9yRWFjaChmaW5kRWxlbWVudHNUb1Byb2Nlc3MoZWx0KSwgZnVuY3Rpb24oY2hpbGQpIHsgaW5pdE5vZGUoY2hpbGQpIH0pXG4gICAgZm9yRWFjaChmaW5kSHhPbldpbGRjYXJkRWxlbWVudHMoZWx0KSwgcHJvY2Vzc0h4T25XaWxkY2FyZClcbiAgfVxuXG4gIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEV2ZW50L0xvZyBTdXBwb3J0XG4gIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIGtlYmFiRXZlbnROYW1lKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywgJyQxLSQyJykudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAgICogQHBhcmFtIHthbnl9IGRldGFpbFxuICAgKiBAcmV0dXJucyB7Q3VzdG9tRXZlbnR9XG4gICAqL1xuICBmdW5jdGlvbiBtYWtlRXZlbnQoZXZlbnROYW1lLCBkZXRhaWwpIHtcbiAgICBsZXQgZXZ0XG4gICAgaWYgKHdpbmRvdy5DdXN0b21FdmVudCAmJiB0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPOiBgY29tcG9zZWQ6IHRydWVgIGhlcmUgaXMgYSBoYWNrIHRvIG1ha2UgZ2xvYmFsIGV2ZW50IGhhbmRsZXJzIHdvcmsgd2l0aCBldmVudHMgaW4gc2hhZG93IERPTVxuICAgICAgLy8gVGhpcyBicmVha3MgZXhwZWN0ZWQgZW5jYXBzdWxhdGlvbiBidXQgbmVlZHMgdG8gYmUgaGVyZSB1bnRpbCBkZWNpZGVkIG90aGVyd2lzZSBieSBjb3JlIGRldnNcbiAgICAgIGV2dCA9IG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRldGFpbCB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBldnQgPSBnZXREb2N1bWVudCgpLmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpXG4gICAgICBldnQuaW5pdEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwgdHJ1ZSwgdHJ1ZSwgZGV0YWlsKVxuICAgIH1cbiAgICByZXR1cm4gZXZ0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldHxzdHJpbmd9IGVsdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gICAqIEBwYXJhbSB7YW55PX0gZGV0YWlsXG4gICAqL1xuICBmdW5jdGlvbiB0cmlnZ2VyRXJyb3JFdmVudChlbHQsIGV2ZW50TmFtZSwgZGV0YWlsKSB7XG4gICAgdHJpZ2dlckV2ZW50KGVsdCwgZXZlbnROYW1lLCBtZXJnZU9iamVjdHMoeyBlcnJvcjogZXZlbnROYW1lIH0sIGRldGFpbCkpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGlnbm9yZUV2ZW50Rm9yTG9nZ2luZyhldmVudE5hbWUpIHtcbiAgICByZXR1cm4gZXZlbnROYW1lID09PSAnaHRteDphZnRlclByb2Nlc3NOb2RlJ1xuICB9XG5cbiAgLyoqXG4gICAqIGB3aXRoRXh0ZW5zaW9uc2AgbG9jYXRlcyBhbGwgYWN0aXZlIGV4dGVuc2lvbnMgZm9yIGEgcHJvdmlkZWQgZWxlbWVudCwgdGhlblxuICAgKiBleGVjdXRlcyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gdXNpbmcgZWFjaCBvZiB0aGUgYWN0aXZlIGV4dGVuc2lvbnMuICBJdCBzaG91bGRcbiAgICogYmUgY2FsbGVkIGludGVybmFsbHkgYXQgZXZlcnkgZXh0ZW5kYWJsZSBleGVjdXRpb24gcG9pbnQgaW4gaHRteC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHBhcmFtIHsoZXh0ZW5zaW9uOkh0bXhFeHRlbnNpb24pID0+IHZvaWR9IHRvRG9cbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgZnVuY3Rpb24gd2l0aEV4dGVuc2lvbnMoZWx0LCB0b0RvKSB7XG4gICAgZm9yRWFjaChnZXRFeHRlbnNpb25zKGVsdCksIGZ1bmN0aW9uKGV4dGVuc2lvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdG9EbyhleHRlbnNpb24pXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ0Vycm9yKGUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvZ0Vycm9yKG1zZykge1xuICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1zZylcbiAgICB9IGVsc2UgaWYgKGNvbnNvbGUubG9nKSB7XG4gICAgICBjb25zb2xlLmxvZygnRVJST1I6ICcsIG1zZylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBnaXZlbiBldmVudCBvbiBhbiBlbGVtZW50XG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI3RyaWdnZXJcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldHxzdHJpbmd9IGVsdCB0aGUgZWxlbWVudCB0byB0cmlnZ2VyIHRoZSBldmVudCBvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIHRoZSBuYW1lIG9mIHRoZSBldmVudCB0byB0cmlnZ2VyXG4gICAqIEBwYXJhbSB7YW55PX0gZGV0YWlsIGRldGFpbHMgZm9yIHRoZSBldmVudFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIHRyaWdnZXJFdmVudChlbHQsIGV2ZW50TmFtZSwgZGV0YWlsKSB7XG4gICAgZWx0ID0gcmVzb2x2ZVRhcmdldChlbHQpXG4gICAgaWYgKGRldGFpbCA9PSBudWxsKSB7XG4gICAgICBkZXRhaWwgPSB7fVxuICAgIH1cbiAgICBkZXRhaWwuZWx0ID0gZWx0XG4gICAgY29uc3QgZXZlbnQgPSBtYWtlRXZlbnQoZXZlbnROYW1lLCBkZXRhaWwpXG4gICAgaWYgKGh0bXgubG9nZ2VyICYmICFpZ25vcmVFdmVudEZvckxvZ2dpbmcoZXZlbnROYW1lKSkge1xuICAgICAgaHRteC5sb2dnZXIoZWx0LCBldmVudE5hbWUsIGRldGFpbClcbiAgICB9XG4gICAgaWYgKGRldGFpbC5lcnJvcikge1xuICAgICAgbG9nRXJyb3IoZGV0YWlsLmVycm9yKVxuICAgICAgdHJpZ2dlckV2ZW50KGVsdCwgJ2h0bXg6ZXJyb3InLCB7IGVycm9ySW5mbzogZGV0YWlsIH0pXG4gICAgfVxuICAgIGxldCBldmVudFJlc3VsdCA9IGVsdC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxuICAgIGNvbnN0IGtlYmFiTmFtZSA9IGtlYmFiRXZlbnROYW1lKGV2ZW50TmFtZSlcbiAgICBpZiAoZXZlbnRSZXN1bHQgJiYga2ViYWJOYW1lICE9PSBldmVudE5hbWUpIHtcbiAgICAgIGNvbnN0IGtlYmFiZWRFdmVudCA9IG1ha2VFdmVudChrZWJhYk5hbWUsIGV2ZW50LmRldGFpbClcbiAgICAgIGV2ZW50UmVzdWx0ID0gZXZlbnRSZXN1bHQgJiYgZWx0LmRpc3BhdGNoRXZlbnQoa2ViYWJlZEV2ZW50KVxuICAgIH1cbiAgICB3aXRoRXh0ZW5zaW9ucyhhc0VsZW1lbnQoZWx0KSwgZnVuY3Rpb24oZXh0ZW5zaW9uKSB7XG4gICAgICBldmVudFJlc3VsdCA9IGV2ZW50UmVzdWx0ICYmIChleHRlbnNpb24ub25FdmVudChldmVudE5hbWUsIGV2ZW50KSAhPT0gZmFsc2UgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpXG4gICAgfSlcbiAgICByZXR1cm4gZXZlbnRSZXN1bHRcbiAgfVxuXG4gIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEhpc3RvcnkgU3VwcG9ydFxuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBsZXQgY3VycmVudFBhdGhGb3JIaXN0b3J5ID0gbG9jYXRpb24ucGF0aG5hbWUgKyBsb2NhdGlvbi5zZWFyY2hcblxuICAvKipcbiAgICogQHJldHVybnMge0VsZW1lbnR9XG4gICAqL1xuICBmdW5jdGlvbiBnZXRIaXN0b3J5RWxlbWVudCgpIHtcbiAgICBjb25zdCBoaXN0b3J5RWx0ID0gZ2V0RG9jdW1lbnQoKS5xdWVyeVNlbGVjdG9yKCdbaHgtaGlzdG9yeS1lbHRdLFtkYXRhLWh4LWhpc3RvcnktZWx0XScpXG4gICAgcmV0dXJuIGhpc3RvcnlFbHQgfHwgZ2V0RG9jdW1lbnQoKS5ib2R5XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RFbHRcbiAgICovXG4gIGZ1bmN0aW9uIHNhdmVUb0hpc3RvcnlDYWNoZSh1cmwsIHJvb3RFbHQpIHtcbiAgICBpZiAoIWNhbkFjY2Vzc0xvY2FsU3RvcmFnZSgpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBnZXQgc3RhdGUgdG8gc2F2ZVxuICAgIGNvbnN0IGlubmVySFRNTCA9IGNsZWFuSW5uZXJIdG1sRm9ySGlzdG9yeShyb290RWx0KVxuICAgIGNvbnN0IHRpdGxlID0gZ2V0RG9jdW1lbnQoKS50aXRsZVxuICAgIGNvbnN0IHNjcm9sbCA9IHdpbmRvdy5zY3JvbGxZXG5cbiAgICBpZiAoaHRteC5jb25maWcuaGlzdG9yeUNhY2hlU2l6ZSA8PSAwKSB7XG4gICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbiBldmVudHVhbGx5IGFscmVhZHkgZXhpc3RpbmcgY2FjaGUgaXMgcHVyZ2VkXG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnaHRteC1oaXN0b3J5LWNhY2hlJylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHVybCA9IG5vcm1hbGl6ZVBhdGgodXJsKVxuXG4gICAgY29uc3QgaGlzdG9yeUNhY2hlID0gcGFyc2VKU09OKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdodG14LWhpc3RvcnktY2FjaGUnKSkgfHwgW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhpc3RvcnlDYWNoZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGhpc3RvcnlDYWNoZVtpXS51cmwgPT09IHVybCkge1xuICAgICAgICBoaXN0b3J5Q2FjaGUuc3BsaWNlKGksIDEpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIEh0bXhIaXN0b3J5SXRlbSAqL1xuICAgIGNvbnN0IG5ld0hpc3RvcnlJdGVtID0geyB1cmwsIGNvbnRlbnQ6IGlubmVySFRNTCwgdGl0bGUsIHNjcm9sbCB9XG5cbiAgICB0cmlnZ2VyRXZlbnQoZ2V0RG9jdW1lbnQoKS5ib2R5LCAnaHRteDpoaXN0b3J5SXRlbUNyZWF0ZWQnLCB7IGl0ZW06IG5ld0hpc3RvcnlJdGVtLCBjYWNoZTogaGlzdG9yeUNhY2hlIH0pXG5cbiAgICBoaXN0b3J5Q2FjaGUucHVzaChuZXdIaXN0b3J5SXRlbSlcbiAgICB3aGlsZSAoaGlzdG9yeUNhY2hlLmxlbmd0aCA+IGh0bXguY29uZmlnLmhpc3RvcnlDYWNoZVNpemUpIHtcbiAgICAgIGhpc3RvcnlDYWNoZS5zaGlmdCgpXG4gICAgfVxuXG4gICAgLy8ga2VlcCB0cnlpbmcgdG8gc2F2ZSB0aGUgY2FjaGUgdW50aWwgaXQgc3VjY2VlZHMgb3IgaXMgZW1wdHlcbiAgICB3aGlsZSAoaGlzdG9yeUNhY2hlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdodG14LWhpc3RvcnktY2FjaGUnLCBKU09OLnN0cmluZ2lmeShoaXN0b3J5Q2FjaGUpKVxuICAgICAgICBicmVha1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cmlnZ2VyRXJyb3JFdmVudChnZXREb2N1bWVudCgpLmJvZHksICdodG14Omhpc3RvcnlDYWNoZUVycm9yJywgeyBjYXVzZTogZSwgY2FjaGU6IGhpc3RvcnlDYWNoZSB9KVxuICAgICAgICBoaXN0b3J5Q2FjaGUuc2hpZnQoKSAvLyBzaHJpbmsgdGhlIGNhY2hlIGFuZCByZXRyeVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBIdG14SGlzdG9yeUl0ZW1cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHVybFxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGVudFxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGVcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IHNjcm9sbFxuICAgKi9cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcmV0dXJucyB7SHRteEhpc3RvcnlJdGVtfG51bGx9XG4gICAqL1xuICBmdW5jdGlvbiBnZXRDYWNoZWRIaXN0b3J5KHVybCkge1xuICAgIGlmICghY2FuQWNjZXNzTG9jYWxTdG9yYWdlKCkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdXJsID0gbm9ybWFsaXplUGF0aCh1cmwpXG5cbiAgICBjb25zdCBoaXN0b3J5Q2FjaGUgPSBwYXJzZUpTT04obG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2h0bXgtaGlzdG9yeS1jYWNoZScpKSB8fCBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGlzdG9yeUNhY2hlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaGlzdG9yeUNhY2hlW2ldLnVybCA9PT0gdXJsKSB7XG4gICAgICAgIHJldHVybiBoaXN0b3J5Q2FjaGVbaV1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYW5Jbm5lckh0bWxGb3JIaXN0b3J5KGVsdCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IGh0bXguY29uZmlnLnJlcXVlc3RDbGFzc1xuICAgIGNvbnN0IGNsb25lID0gLyoqIEB0eXBlIEVsZW1lbnQgKi8gKGVsdC5jbG9uZU5vZGUodHJ1ZSkpXG4gICAgZm9yRWFjaChmaW5kQWxsKGNsb25lLCAnLicgKyBjbGFzc05hbWUpLCBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgcmVtb3ZlQ2xhc3NGcm9tRWxlbWVudChjaGlsZCwgY2xhc3NOYW1lKVxuICAgIH0pXG4gICAgLy8gcmVtb3ZlIHRoZSBkaXNhYmxlZCBhdHRyaWJ1dGUgZm9yIGFueSBlbGVtZW50IGRpc2FibGVkIGR1ZSB0byBhbiBodG14IHJlcXVlc3RcbiAgICBmb3JFYWNoKGZpbmRBbGwoY2xvbmUsICdbZGF0YS1kaXNhYmxlZC1ieS1odG14XScpLCBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgY2hpbGQucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpXG4gICAgfSlcbiAgICByZXR1cm4gY2xvbmUuaW5uZXJIVE1MXG4gIH1cblxuICBmdW5jdGlvbiBzYXZlQ3VycmVudFBhZ2VUb0hpc3RvcnkoKSB7XG4gICAgY29uc3QgZWx0ID0gZ2V0SGlzdG9yeUVsZW1lbnQoKVxuICAgIGNvbnN0IHBhdGggPSBjdXJyZW50UGF0aEZvckhpc3RvcnkgfHwgbG9jYXRpb24ucGF0aG5hbWUgKyBsb2NhdGlvbi5zZWFyY2hcblxuICAgIC8vIEFsbG93IGhpc3Rvcnkgc25hcHNob3QgZmVhdHVyZSB0byBiZSBkaXNhYmxlZCB3aGVyZSBoeC1oaXN0b3J5PVwiZmFsc2VcIlxuICAgIC8vIGlzIHByZXNlbnQgKmFueXdoZXJlKiBpbiB0aGUgY3VycmVudCBkb2N1bWVudCB3ZSdyZSBhYm91dCB0byBzYXZlLFxuICAgIC8vIHNvIHdlIGNhbiBwcmV2ZW50IHByaXZpbGVnZWQgZGF0YSBlbnRlcmluZyB0aGUgY2FjaGUuXG4gICAgLy8gVGhlIHBhZ2Ugd2lsbCBzdGlsbCBiZSByZWFjaGFibGUgYXMgYSBoaXN0b3J5IGVudHJ5LCBidXQgaHRteCB3aWxsIGZldGNoIGl0XG4gICAgLy8gbGl2ZSBmcm9tIHRoZSBzZXJ2ZXIgb25wb3BzdGF0ZSByYXRoZXIgdGhhbiBsb29rIGluIHRoZSBsb2NhbFN0b3JhZ2UgY2FjaGVcbiAgICBsZXQgZGlzYWJsZUhpc3RvcnlDYWNoZVxuICAgIHRyeSB7XG4gICAgICBkaXNhYmxlSGlzdG9yeUNhY2hlID0gZ2V0RG9jdW1lbnQoKS5xdWVyeVNlbGVjdG9yKCdbaHgtaGlzdG9yeT1cImZhbHNlXCIgaV0sW2RhdGEtaHgtaGlzdG9yeT1cImZhbHNlXCIgaV0nKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBJRTExOiBpbnNlbnNpdGl2ZSBtb2RpZmllciBub3Qgc3VwcG9ydGVkIHNvIGZhbGxiYWNrIHRvIGNhc2Ugc2Vuc2l0aXZlIHNlbGVjdG9yXG4gICAgICBkaXNhYmxlSGlzdG9yeUNhY2hlID0gZ2V0RG9jdW1lbnQoKS5xdWVyeVNlbGVjdG9yKCdbaHgtaGlzdG9yeT1cImZhbHNlXCJdLFtkYXRhLWh4LWhpc3Rvcnk9XCJmYWxzZVwiXScpXG4gICAgfVxuICAgIGlmICghZGlzYWJsZUhpc3RvcnlDYWNoZSkge1xuICAgICAgdHJpZ2dlckV2ZW50KGdldERvY3VtZW50KCkuYm9keSwgJ2h0bXg6YmVmb3JlSGlzdG9yeVNhdmUnLCB7IHBhdGgsIGhpc3RvcnlFbHQ6IGVsdCB9KVxuICAgICAgc2F2ZVRvSGlzdG9yeUNhY2hlKHBhdGgsIGVsdClcbiAgICB9XG5cbiAgICBpZiAoaHRteC5jb25maWcuaGlzdG9yeUVuYWJsZWQpIGhpc3RvcnkucmVwbGFjZVN0YXRlKHsgaHRteDogdHJ1ZSB9LCBnZXREb2N1bWVudCgpLnRpdGxlLCB3aW5kb3cubG9jYXRpb24uaHJlZilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgZnVuY3Rpb24gcHVzaFVybEludG9IaXN0b3J5KHBhdGgpIHtcbiAgLy8gcmVtb3ZlIHRoZSBjYWNoZSBidXN0ZXIgcGFyYW1ldGVyLCBpZiBhbnlcbiAgICBpZiAoaHRteC5jb25maWcuZ2V0Q2FjaGVCdXN0ZXJQYXJhbSkge1xuICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvb3JnXFwuaHRteFxcLmNhY2hlLWJ1c3Rlcj1bXiZdKiY/LywgJycpXG4gICAgICBpZiAoZW5kc1dpdGgocGF0aCwgJyYnKSB8fCBlbmRzV2l0aChwYXRoLCAnPycpKSB7XG4gICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKDAsIC0xKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaHRteC5jb25maWcuaGlzdG9yeUVuYWJsZWQpIHtcbiAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHsgaHRteDogdHJ1ZSB9LCAnJywgcGF0aClcbiAgICB9XG4gICAgY3VycmVudFBhdGhGb3JIaXN0b3J5ID0gcGF0aFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBmdW5jdGlvbiByZXBsYWNlVXJsSW5IaXN0b3J5KHBhdGgpIHtcbiAgICBpZiAoaHRteC5jb25maWcuaGlzdG9yeUVuYWJsZWQpIGhpc3RvcnkucmVwbGFjZVN0YXRlKHsgaHRteDogdHJ1ZSB9LCAnJywgcGF0aClcbiAgICBjdXJyZW50UGF0aEZvckhpc3RvcnkgPSBwYXRoXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIdG14U2V0dGxlVGFza1tdfSB0YXNrc1xuICAgKi9cbiAgZnVuY3Rpb24gc2V0dGxlSW1tZWRpYXRlbHkodGFza3MpIHtcbiAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICB0YXNrLmNhbGwodW5kZWZpbmVkKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIGZ1bmN0aW9uIGxvYWRIaXN0b3J5RnJvbVNlcnZlcihwYXRoKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG4gICAgY29uc3QgZGV0YWlscyA9IHsgcGF0aCwgeGhyOiByZXF1ZXN0IH1cbiAgICB0cmlnZ2VyRXZlbnQoZ2V0RG9jdW1lbnQoKS5ib2R5LCAnaHRteDpoaXN0b3J5Q2FjaGVNaXNzJywgZGV0YWlscylcbiAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIHBhdGgsIHRydWUpXG4gICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKCdIWC1SZXF1ZXN0JywgJ3RydWUnKVxuICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcignSFgtSGlzdG9yeS1SZXN0b3JlLVJlcXVlc3QnLCAndHJ1ZScpXG4gICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKCdIWC1DdXJyZW50LVVSTCcsIGdldERvY3VtZW50KCkubG9jYXRpb24uaHJlZilcbiAgICByZXF1ZXN0Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDQwMCkge1xuICAgICAgICB0cmlnZ2VyRXZlbnQoZ2V0RG9jdW1lbnQoKS5ib2R5LCAnaHRteDpoaXN0b3J5Q2FjaGVNaXNzTG9hZCcsIGRldGFpbHMpXG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gbWFrZUZyYWdtZW50KHRoaXMucmVzcG9uc2UpXG4gICAgICAgIC8qKiBAdHlwZSBQYXJlbnROb2RlICovXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcmFnbWVudC5xdWVyeVNlbGVjdG9yKCdbaHgtaGlzdG9yeS1lbHRdLFtkYXRhLWh4LWhpc3RvcnktZWx0XScpIHx8IGZyYWdtZW50XG4gICAgICAgIGNvbnN0IGhpc3RvcnlFbGVtZW50ID0gZ2V0SGlzdG9yeUVsZW1lbnQoKVxuICAgICAgICBjb25zdCBzZXR0bGVJbmZvID0gbWFrZVNldHRsZUluZm8oaGlzdG9yeUVsZW1lbnQpXG4gICAgICAgIGhhbmRsZVRpdGxlKGZyYWdtZW50LnRpdGxlKVxuXG4gICAgICAgIHN3YXBJbm5lckhUTUwoaGlzdG9yeUVsZW1lbnQsIGNvbnRlbnQsIHNldHRsZUluZm8pXG4gICAgICAgIHNldHRsZUltbWVkaWF0ZWx5KHNldHRsZUluZm8udGFza3MpXG4gICAgICAgIGN1cnJlbnRQYXRoRm9ySGlzdG9yeSA9IHBhdGhcbiAgICAgICAgdHJpZ2dlckV2ZW50KGdldERvY3VtZW50KCkuYm9keSwgJ2h0bXg6aGlzdG9yeVJlc3RvcmUnLCB7IHBhdGgsIGNhY2hlTWlzczogdHJ1ZSwgc2VydmVyUmVzcG9uc2U6IHRoaXMucmVzcG9uc2UgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyaWdnZXJFcnJvckV2ZW50KGdldERvY3VtZW50KCkuYm9keSwgJ2h0bXg6aGlzdG9yeUNhY2hlTWlzc0xvYWRFcnJvcicsIGRldGFpbHMpXG4gICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3Quc2VuZCgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoXVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzdG9yZUhpc3RvcnkocGF0aCkge1xuICAgIHNhdmVDdXJyZW50UGFnZVRvSGlzdG9yeSgpXG4gICAgcGF0aCA9IHBhdGggfHwgbG9jYXRpb24ucGF0aG5hbWUgKyBsb2NhdGlvbi5zZWFyY2hcbiAgICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRIaXN0b3J5KHBhdGgpXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgY29uc3QgZnJhZ21lbnQgPSBtYWtlRnJhZ21lbnQoY2FjaGVkLmNvbnRlbnQpXG4gICAgICBjb25zdCBoaXN0b3J5RWxlbWVudCA9IGdldEhpc3RvcnlFbGVtZW50KClcbiAgICAgIGNvbnN0IHNldHRsZUluZm8gPSBtYWtlU2V0dGxlSW5mbyhoaXN0b3J5RWxlbWVudClcbiAgICAgIGhhbmRsZVRpdGxlKGZyYWdtZW50LnRpdGxlKVxuICAgICAgc3dhcElubmVySFRNTChoaXN0b3J5RWxlbWVudCwgZnJhZ21lbnQsIHNldHRsZUluZm8pXG4gICAgICBzZXR0bGVJbW1lZGlhdGVseShzZXR0bGVJbmZvLnRhc2tzKVxuICAgICAgZ2V0V2luZG93KCkuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIGNhY2hlZC5zY3JvbGwpXG4gICAgICB9LCAwKSAvLyBuZXh0ICd0aWNrJywgc28gYnJvd3NlciBoYXMgdGltZSB0byByZW5kZXIgbGF5b3V0XG4gICAgICBjdXJyZW50UGF0aEZvckhpc3RvcnkgPSBwYXRoXG4gICAgICB0cmlnZ2VyRXZlbnQoZ2V0RG9jdW1lbnQoKS5ib2R5LCAnaHRteDpoaXN0b3J5UmVzdG9yZScsIHsgcGF0aCwgaXRlbTogY2FjaGVkIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChodG14LmNvbmZpZy5yZWZyZXNoT25IaXN0b3J5TWlzcykge1xuICAgICAgICAvLyBAdHMtaWdub3JlOiBvcHRpb25hbCBwYXJhbWV0ZXIgaW4gcmVsb2FkKCkgZnVuY3Rpb24gdGhyb3dzIGVycm9yXG4gICAgICAgIC8vIG5vaW5zcGVjdGlvbiBKU1VucmVzb2x2ZWRSZWZlcmVuY2VcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCh0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9hZEhpc3RvcnlGcm9tU2VydmVyKHBhdGgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEByZXR1cm5zIHtFbGVtZW50W119XG4gICAqL1xuICBmdW5jdGlvbiBhZGRSZXF1ZXN0SW5kaWNhdG9yQ2xhc3NlcyhlbHQpIHtcbiAgICBsZXQgaW5kaWNhdG9ycyA9IC8qKiBAdHlwZSBFbGVtZW50W10gKi8gKGZpbmRBdHRyaWJ1dGVUYXJnZXRzKGVsdCwgJ2h4LWluZGljYXRvcicpKVxuICAgIGlmIChpbmRpY2F0b3JzID09IG51bGwpIHtcbiAgICAgIGluZGljYXRvcnMgPSBbZWx0XVxuICAgIH1cbiAgICBmb3JFYWNoKGluZGljYXRvcnMsIGZ1bmN0aW9uKGljKSB7XG4gICAgICBjb25zdCBpbnRlcm5hbERhdGEgPSBnZXRJbnRlcm5hbERhdGEoaWMpXG4gICAgICBpbnRlcm5hbERhdGEucmVxdWVzdENvdW50ID0gKGludGVybmFsRGF0YS5yZXF1ZXN0Q291bnQgfHwgMCkgKyAxXG4gICAgICBpYy5jbGFzc0xpc3QuYWRkLmNhbGwoaWMuY2xhc3NMaXN0LCBodG14LmNvbmZpZy5yZXF1ZXN0Q2xhc3MpXG4gICAgfSlcbiAgICByZXR1cm4gaW5kaWNhdG9yc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEByZXR1cm5zIHtFbGVtZW50W119XG4gICAqL1xuICBmdW5jdGlvbiBkaXNhYmxlRWxlbWVudHMoZWx0KSB7XG4gICAgbGV0IGRpc2FibGVkRWx0cyA9IC8qKiBAdHlwZSBFbGVtZW50W10gKi8gKGZpbmRBdHRyaWJ1dGVUYXJnZXRzKGVsdCwgJ2h4LWRpc2FibGVkLWVsdCcpKVxuICAgIGlmIChkaXNhYmxlZEVsdHMgPT0gbnVsbCkge1xuICAgICAgZGlzYWJsZWRFbHRzID0gW11cbiAgICB9XG4gICAgZm9yRWFjaChkaXNhYmxlZEVsdHMsIGZ1bmN0aW9uKGRpc2FibGVkRWxlbWVudCkge1xuICAgICAgY29uc3QgaW50ZXJuYWxEYXRhID0gZ2V0SW50ZXJuYWxEYXRhKGRpc2FibGVkRWxlbWVudClcbiAgICAgIGludGVybmFsRGF0YS5yZXF1ZXN0Q291bnQgPSAoaW50ZXJuYWxEYXRhLnJlcXVlc3RDb3VudCB8fCAwKSArIDFcbiAgICAgIGRpc2FibGVkRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJycpXG4gICAgICBkaXNhYmxlZEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWRpc2FibGVkLWJ5LWh0bXgnLCAnJylcbiAgICB9KVxuICAgIHJldHVybiBkaXNhYmxlZEVsdHNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnRbXX0gaW5kaWNhdG9yc1xuICAgKiBAcGFyYW0ge0VsZW1lbnRbXX0gZGlzYWJsZWRcbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZVJlcXVlc3RJbmRpY2F0b3JzKGluZGljYXRvcnMsIGRpc2FibGVkKSB7XG4gICAgZm9yRWFjaChpbmRpY2F0b3JzLCBmdW5jdGlvbihpYykge1xuICAgICAgY29uc3QgaW50ZXJuYWxEYXRhID0gZ2V0SW50ZXJuYWxEYXRhKGljKVxuICAgICAgaW50ZXJuYWxEYXRhLnJlcXVlc3RDb3VudCA9IChpbnRlcm5hbERhdGEucmVxdWVzdENvdW50IHx8IDApIC0gMVxuICAgICAgaWYgKGludGVybmFsRGF0YS5yZXF1ZXN0Q291bnQgPT09IDApIHtcbiAgICAgICAgaWMuY2xhc3NMaXN0LnJlbW92ZS5jYWxsKGljLmNsYXNzTGlzdCwgaHRteC5jb25maWcucmVxdWVzdENsYXNzKVxuICAgICAgfVxuICAgIH0pXG4gICAgZm9yRWFjaChkaXNhYmxlZCwgZnVuY3Rpb24oZGlzYWJsZWRFbGVtZW50KSB7XG4gICAgICBjb25zdCBpbnRlcm5hbERhdGEgPSBnZXRJbnRlcm5hbERhdGEoZGlzYWJsZWRFbGVtZW50KVxuICAgICAgaW50ZXJuYWxEYXRhLnJlcXVlc3RDb3VudCA9IChpbnRlcm5hbERhdGEucmVxdWVzdENvdW50IHx8IDApIC0gMVxuICAgICAgaWYgKGludGVybmFsRGF0YS5yZXF1ZXN0Q291bnQgPT09IDApIHtcbiAgICAgICAgZGlzYWJsZWRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKVxuICAgICAgICBkaXNhYmxlZEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWRpc2FibGVkLWJ5LWh0bXgnKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJbnB1dCBWYWx1ZSBQcm9jZXNzaW5nXG4gIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudFtdfSBwcm9jZXNzZWRcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBoYXZlU2Vlbk5vZGUocHJvY2Vzc2VkLCBlbHQpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb2Nlc3NlZC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IHByb2Nlc3NlZFtpXVxuICAgICAgaWYgKG5vZGUuaXNTYW1lTm9kZShlbHQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gc2hvdWxkSW5jbHVkZShlbGVtZW50KSB7XG4gICAgLy8gQ2FzdCB0byB0cmljayB0c2MsIHVuZGVmaW5lZCB2YWx1ZXMgd2lsbCB3b3JrIGZpbmUgaGVyZVxuICAgIGNvbnN0IGVsdCA9IC8qKiBAdHlwZSB7SFRNTElucHV0RWxlbWVudH0gKi8gKGVsZW1lbnQpXG4gICAgaWYgKGVsdC5uYW1lID09PSAnJyB8fCBlbHQubmFtZSA9PSBudWxsIHx8IGVsdC5kaXNhYmxlZCB8fCBjbG9zZXN0KGVsdCwgJ2ZpZWxkc2V0W2Rpc2FibGVkXScpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgLy8gaWdub3JlIFwic3VibWl0dGVyXCIgdHlwZXMgKHNlZSBqUXVlcnkgc3JjL3NlcmlhbGl6ZS5qcylcbiAgICBpZiAoZWx0LnR5cGUgPT09ICdidXR0b24nIHx8IGVsdC50eXBlID09PSAnc3VibWl0JyB8fCBlbHQudGFnTmFtZSA9PT0gJ2ltYWdlJyB8fCBlbHQudGFnTmFtZSA9PT0gJ3Jlc2V0JyB8fCBlbHQudGFnTmFtZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKGVsdC50eXBlID09PSAnY2hlY2tib3gnIHx8IGVsdC50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICByZXR1cm4gZWx0LmNoZWNrZWRcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xBcnJheXxGb3JtRGF0YUVudHJ5VmFsdWV9IHZhbHVlXG4gICAqIEBwYXJhbSB7Rm9ybURhdGF9IGZvcm1EYXRhICovXG4gIGZ1bmN0aW9uIGFkZFZhbHVlVG9Gb3JtRGF0YShuYW1lLCB2YWx1ZSwgZm9ybURhdGEpIHtcbiAgICBpZiAobmFtZSAhPSBudWxsICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHsgZm9ybURhdGEuYXBwZW5kKG5hbWUsIHYpIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfEFycmF5fSB2YWx1ZVxuICAgKiBAcGFyYW0ge0Zvcm1EYXRhfSBmb3JtRGF0YSAqL1xuICBmdW5jdGlvbiByZW1vdmVWYWx1ZUZyb21Gb3JtRGF0YShuYW1lLCB2YWx1ZSwgZm9ybURhdGEpIHtcbiAgICBpZiAobmFtZSAhPSBudWxsICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgIGxldCB2YWx1ZXMgPSBmb3JtRGF0YS5nZXRBbGwobmFtZSlcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuZmlsdGVyKHYgPT4gdmFsdWUuaW5kZXhPZih2KSA8IDApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuZmlsdGVyKHYgPT4gdiAhPT0gdmFsdWUpXG4gICAgICB9XG4gICAgICBmb3JtRGF0YS5kZWxldGUobmFtZSlcbiAgICAgIGZvckVhY2godmFsdWVzLCB2ID0+IGZvcm1EYXRhLmFwcGVuZChuYW1lLCB2KSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50W119IHByb2Nlc3NlZFxuICAgKiBAcGFyYW0ge0Zvcm1EYXRhfSBmb3JtRGF0YVxuICAgKiBAcGFyYW0ge0h0bXhFbGVtZW50VmFsaWRhdGlvbkVycm9yW119IGVycm9yc1xuICAgKiBAcGFyYW0ge0VsZW1lbnR8SFRNTElucHV0RWxlbWVudHxIVE1MU2VsZWN0RWxlbWVudHxIVE1MRm9ybUVsZW1lbnR9IGVsdFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbGlkYXRlXG4gICAqL1xuICBmdW5jdGlvbiBwcm9jZXNzSW5wdXRWYWx1ZShwcm9jZXNzZWQsIGZvcm1EYXRhLCBlcnJvcnMsIGVsdCwgdmFsaWRhdGUpIHtcbiAgICBpZiAoZWx0ID09IG51bGwgfHwgaGF2ZVNlZW5Ob2RlKHByb2Nlc3NlZCwgZWx0KSkge1xuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3NlZC5wdXNoKGVsdClcbiAgICB9XG4gICAgaWYgKHNob3VsZEluY2x1ZGUoZWx0KSkge1xuICAgICAgY29uc3QgbmFtZSA9IGdldFJhd0F0dHJpYnV0ZShlbHQsICduYW1lJylcbiAgICAgIC8vIEB0cy1pZ25vcmUgdmFsdWUgd2lsbCBiZSB1bmRlZmluZWQgZm9yIG5vbi1pbnB1dCBlbGVtZW50cywgd2hpY2ggaXMgZmluZVxuICAgICAgbGV0IHZhbHVlID0gZWx0LnZhbHVlXG4gICAgICBpZiAoZWx0IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQgJiYgZWx0Lm11bHRpcGxlKSB7XG4gICAgICAgIHZhbHVlID0gdG9BcnJheShlbHQucXVlcnlTZWxlY3RvckFsbCgnb3B0aW9uOmNoZWNrZWQnKSkubWFwKGZ1bmN0aW9uKGUpIHsgcmV0dXJuICgvKiogQHR5cGUgSFRNTE9wdGlvbkVsZW1lbnQgKi8oZSkpLnZhbHVlIH0pXG4gICAgICB9XG4gICAgICAvLyBpbmNsdWRlIGZpbGUgaW5wdXRzXG4gICAgICBpZiAoZWx0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbHQuZmlsZXMpIHtcbiAgICAgICAgdmFsdWUgPSB0b0FycmF5KGVsdC5maWxlcylcbiAgICAgIH1cbiAgICAgIGFkZFZhbHVlVG9Gb3JtRGF0YShuYW1lLCB2YWx1ZSwgZm9ybURhdGEpXG4gICAgICBpZiAodmFsaWRhdGUpIHtcbiAgICAgICAgdmFsaWRhdGVFbGVtZW50KGVsdCwgZXJyb3JzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZWx0IGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50KSB7XG4gICAgICBmb3JFYWNoKGVsdC5lbGVtZW50cywgZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgaWYgKHByb2Nlc3NlZC5pbmRleE9mKGlucHV0KSA+PSAwKSB7XG4gICAgICAgICAgLy8gVGhlIGlucHV0IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIGFuZCBhZGRlZCB0byB0aGUgdmFsdWVzLCBidXQgdGhlIEZvcm1EYXRhIHRoYXQgd2lsbCBiZVxuICAgICAgICAgIC8vICBjb25zdHJ1Y3RlZCByaWdodCBhZnRlciBvbiB0aGUgZm9ybSwgd2lsbCBpbmNsdWRlIGl0IG9uY2UgYWdhaW4uIFNvIHJlbW92ZSB0aGF0IGlucHV0J3MgdmFsdWVcbiAgICAgICAgICAvLyAgbm93IHRvIGF2b2lkIGR1cGxpY2F0ZXNcbiAgICAgICAgICByZW1vdmVWYWx1ZUZyb21Gb3JtRGF0YShpbnB1dC5uYW1lLCBpbnB1dC52YWx1ZSwgZm9ybURhdGEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvY2Vzc2VkLnB1c2goaW5wdXQpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkYXRlKSB7XG4gICAgICAgICAgdmFsaWRhdGVFbGVtZW50KGlucHV0LCBlcnJvcnMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBuZXcgRm9ybURhdGEoZWx0KS5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUgJiYgdmFsdWUubmFtZSA9PT0gJycpIHtcbiAgICAgICAgICByZXR1cm4gLy8gaWdub3JlIG5vLW5hbWUgZmlsZXNcbiAgICAgICAgfVxuICAgICAgICBhZGRWYWx1ZVRvRm9ybURhdGEobmFtZSwgdmFsdWUsIGZvcm1EYXRhKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHBhcmFtIHtIdG14RWxlbWVudFZhbGlkYXRpb25FcnJvcltdfSBlcnJvcnNcbiAgICovXG4gIGZ1bmN0aW9uIHZhbGlkYXRlRWxlbWVudChlbHQsIGVycm9ycykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSAvKiogQHR5cGUge0hUTUxFbGVtZW50ICYgRWxlbWVudEludGVybmFsc30gKi8gKGVsdClcbiAgICBpZiAoZWxlbWVudC53aWxsVmFsaWRhdGUpIHtcbiAgICAgIHRyaWdnZXJFdmVudChlbGVtZW50LCAnaHRteDp2YWxpZGF0aW9uOnZhbGlkYXRlJylcbiAgICAgIGlmICghZWxlbWVudC5jaGVja1ZhbGlkaXR5KCkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goeyBlbHQ6IGVsZW1lbnQsIG1lc3NhZ2U6IGVsZW1lbnQudmFsaWRhdGlvbk1lc3NhZ2UsIHZhbGlkaXR5OiBlbGVtZW50LnZhbGlkaXR5IH0pXG4gICAgICAgIHRyaWdnZXJFdmVudChlbGVtZW50LCAnaHRteDp2YWxpZGF0aW9uOmZhaWxlZCcsIHsgbWVzc2FnZTogZWxlbWVudC52YWxpZGF0aW9uTWVzc2FnZSwgdmFsaWRpdHk6IGVsZW1lbnQudmFsaWRpdHkgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdmFsdWVzIGluIHRoZSBvbmUgRm9ybURhdGEgd2l0aCB0aG9zZSBmcm9tIGFub3RoZXIuXG4gICAqIEBwYXJhbSB7Rm9ybURhdGF9IHJlY2VpdmVyIHRoZSBmb3JtZGF0YSB0aGF0IHdpbGwgYmUgbXV0YXRlZFxuICAgKiBAcGFyYW0ge0Zvcm1EYXRhfSBkb25vciB0aGUgZm9ybWRhdGEgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIG92ZXJyaWRpbmcgdmFsdWVzXG4gICAqIEByZXR1cm5zIHtGb3JtRGF0YX0gdGhlIHtAbGlua2NvZGUgcmVjZWl2ZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBvdmVycmlkZUZvcm1EYXRhKHJlY2VpdmVyLCBkb25vcikge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGRvbm9yLmtleXMoKSkge1xuICAgICAgcmVjZWl2ZXIuZGVsZXRlKGtleSlcbiAgICB9XG4gICAgZG9ub3IuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICByZWNlaXZlci5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICB9KVxuICAgIHJldHVybiByZWNlaXZlclxuICB9XG5cbiAgLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR8SFRNTEZvcm1FbGVtZW50fSBlbHRcbiAqIEBwYXJhbSB7SHR0cFZlcmJ9IHZlcmJcbiAqIEByZXR1cm5zIHt7ZXJyb3JzOiBIdG14RWxlbWVudFZhbGlkYXRpb25FcnJvcltdLCBmb3JtRGF0YTogRm9ybURhdGEsIHZhbHVlczogT2JqZWN0fX1cbiAqL1xuICBmdW5jdGlvbiBnZXRJbnB1dFZhbHVlcyhlbHQsIHZlcmIpIHtcbiAgICAvKiogQHR5cGUgRWxlbWVudFtdICovXG4gICAgY29uc3QgcHJvY2Vzc2VkID0gW11cbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgY29uc3QgcHJpb3JpdHlGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgLyoqIEB0eXBlIEh0bXhFbGVtZW50VmFsaWRhdGlvbkVycm9yW10gKi9cbiAgICBjb25zdCBlcnJvcnMgPSBbXVxuICAgIGNvbnN0IGludGVybmFsRGF0YSA9IGdldEludGVybmFsRGF0YShlbHQpXG4gICAgaWYgKGludGVybmFsRGF0YS5sYXN0QnV0dG9uQ2xpY2tlZCAmJiAhYm9keUNvbnRhaW5zKGludGVybmFsRGF0YS5sYXN0QnV0dG9uQ2xpY2tlZCkpIHtcbiAgICAgIGludGVybmFsRGF0YS5sYXN0QnV0dG9uQ2xpY2tlZCA9IG51bGxcbiAgICB9XG5cbiAgICAvLyBvbmx5IHZhbGlkYXRlIHdoZW4gZm9ybSBpcyBkaXJlY3RseSBzdWJtaXR0ZWQgYW5kIG5vdmFsaWRhdGUgb3IgZm9ybW5vdmFsaWRhdGUgYXJlIG5vdCBzZXRcbiAgICAvLyBvciBpZiB0aGUgZWxlbWVudCBoYXMgYW4gZXhwbGljaXQgaHgtdmFsaWRhdGU9XCJ0cnVlXCIgb24gaXRcbiAgICBsZXQgdmFsaWRhdGUgPSAoZWx0IGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50ICYmIGVsdC5ub1ZhbGlkYXRlICE9PSB0cnVlKSB8fCBnZXRBdHRyaWJ1dGVWYWx1ZShlbHQsICdoeC12YWxpZGF0ZScpID09PSAndHJ1ZSdcbiAgICBpZiAoaW50ZXJuYWxEYXRhLmxhc3RCdXR0b25DbGlja2VkKSB7XG4gICAgICB2YWxpZGF0ZSA9IHZhbGlkYXRlICYmIGludGVybmFsRGF0YS5sYXN0QnV0dG9uQ2xpY2tlZC5mb3JtTm9WYWxpZGF0ZSAhPT0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIGZvciBhIG5vbi1HRVQgaW5jbHVkZSB0aGUgY2xvc2VzdCBmb3JtXG4gICAgaWYgKHZlcmIgIT09ICdnZXQnKSB7XG4gICAgICBwcm9jZXNzSW5wdXRWYWx1ZShwcm9jZXNzZWQsIHByaW9yaXR5Rm9ybURhdGEsIGVycm9ycywgY2xvc2VzdChlbHQsICdmb3JtJyksIHZhbGlkYXRlKVxuICAgIH1cblxuICAgIC8vIGluY2x1ZGUgdGhlIGVsZW1lbnQgaXRzZWxmXG4gICAgcHJvY2Vzc0lucHV0VmFsdWUocHJvY2Vzc2VkLCBmb3JtRGF0YSwgZXJyb3JzLCBlbHQsIHZhbGlkYXRlKVxuXG4gICAgLy8gaWYgYSBidXR0b24gb3Igc3VibWl0IHdhcyBjbGlja2VkIGxhc3QsIGluY2x1ZGUgaXRzIHZhbHVlXG4gICAgaWYgKGludGVybmFsRGF0YS5sYXN0QnV0dG9uQ2xpY2tlZCB8fCBlbHQudGFnTmFtZSA9PT0gJ0JVVFRPTicgfHxcbiAgICAoZWx0LnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgZ2V0UmF3QXR0cmlidXRlKGVsdCwgJ3R5cGUnKSA9PT0gJ3N1Ym1pdCcpKSB7XG4gICAgICBjb25zdCBidXR0b24gPSBpbnRlcm5hbERhdGEubGFzdEJ1dHRvbkNsaWNrZWQgfHwgKC8qKiBAdHlwZSBIVE1MSW5wdXRFbGVtZW50fEhUTUxCdXR0b25FbGVtZW50ICovKGVsdCkpXG4gICAgICBjb25zdCBuYW1lID0gZ2V0UmF3QXR0cmlidXRlKGJ1dHRvbiwgJ25hbWUnKVxuICAgICAgYWRkVmFsdWVUb0Zvcm1EYXRhKG5hbWUsIGJ1dHRvbi52YWx1ZSwgcHJpb3JpdHlGb3JtRGF0YSlcbiAgICB9XG5cbiAgICAvLyBpbmNsdWRlIGFueSBleHBsaWNpdCBpbmNsdWRlc1xuICAgIGNvbnN0IGluY2x1ZGVzID0gZmluZEF0dHJpYnV0ZVRhcmdldHMoZWx0LCAnaHgtaW5jbHVkZScpXG4gICAgZm9yRWFjaChpbmNsdWRlcywgZnVuY3Rpb24obm9kZSkge1xuICAgICAgcHJvY2Vzc0lucHV0VmFsdWUocHJvY2Vzc2VkLCBmb3JtRGF0YSwgZXJyb3JzLCBhc0VsZW1lbnQobm9kZSksIHZhbGlkYXRlKVxuICAgICAgLy8gaWYgYSBub24tZm9ybSBpcyBpbmNsdWRlZCwgaW5jbHVkZSBhbnkgaW5wdXQgdmFsdWVzIHdpdGhpbiBpdFxuICAgICAgaWYgKCFtYXRjaGVzKG5vZGUsICdmb3JtJykpIHtcbiAgICAgICAgZm9yRWFjaChhc1BhcmVudE5vZGUobm9kZSkucXVlcnlTZWxlY3RvckFsbChJTlBVVF9TRUxFQ1RPUiksIGZ1bmN0aW9uKGRlc2NlbmRhbnQpIHtcbiAgICAgICAgICBwcm9jZXNzSW5wdXRWYWx1ZShwcm9jZXNzZWQsIGZvcm1EYXRhLCBlcnJvcnMsIGRlc2NlbmRhbnQsIHZhbGlkYXRlKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyB2YWx1ZXMgZnJvbSBhIDxmb3JtPiB0YWtlIHByZWNlZGVuY2UsIG92ZXJyaWRpbmcgdGhlIHJlZ3VsYXIgdmFsdWVzXG4gICAgb3ZlcnJpZGVGb3JtRGF0YShmb3JtRGF0YSwgcHJpb3JpdHlGb3JtRGF0YSlcblxuICAgIHJldHVybiB7IGVycm9ycywgZm9ybURhdGEsIHZhbHVlczogZm9ybURhdGFQcm94eShmb3JtRGF0YSkgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZXR1cm5TdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHthbnl9IHJlYWxWYWx1ZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gYXBwZW5kUGFyYW0ocmV0dXJuU3RyLCBuYW1lLCByZWFsVmFsdWUpIHtcbiAgICBpZiAocmV0dXJuU3RyICE9PSAnJykge1xuICAgICAgcmV0dXJuU3RyICs9ICcmJ1xuICAgIH1cbiAgICBpZiAoU3RyaW5nKHJlYWxWYWx1ZSkgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICByZWFsVmFsdWUgPSBKU09OLnN0cmluZ2lmeShyZWFsVmFsdWUpXG4gICAgfVxuICAgIGNvbnN0IHMgPSBlbmNvZGVVUklDb21wb25lbnQocmVhbFZhbHVlKVxuICAgIHJldHVyblN0ciArPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSkgKyAnPScgKyBzXG4gICAgcmV0dXJuIHJldHVyblN0clxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Rm9ybURhdGF8T2JqZWN0fSB2YWx1ZXNcbiAgICogQHJldHVybnMgc3RyaW5nXG4gICAqL1xuICBmdW5jdGlvbiB1cmxFbmNvZGUodmFsdWVzKSB7XG4gICAgdmFsdWVzID0gZm9ybURhdGFGcm9tT2JqZWN0KHZhbHVlcylcbiAgICBsZXQgcmV0dXJuU3RyID0gJydcbiAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICByZXR1cm5TdHIgPSBhcHBlbmRQYXJhbShyZXR1cm5TdHIsIGtleSwgdmFsdWUpXG4gICAgfSlcbiAgICByZXR1cm4gcmV0dXJuU3RyXG4gIH1cblxuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBBamF4XG4gIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9tcHRcbiAqIEByZXR1cm5zIHtIdG14SGVhZGVyU3BlY2lmaWNhdGlvbn1cbiAqL1xuICBmdW5jdGlvbiBnZXRIZWFkZXJzKGVsdCwgdGFyZ2V0LCBwcm9tcHQpIHtcbiAgICAvKiogQHR5cGUgSHRteEhlYWRlclNwZWNpZmljYXRpb24gKi9cbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgJ0hYLVJlcXVlc3QnOiAndHJ1ZScsXG4gICAgICAnSFgtVHJpZ2dlcic6IGdldFJhd0F0dHJpYnV0ZShlbHQsICdpZCcpLFxuICAgICAgJ0hYLVRyaWdnZXItTmFtZSc6IGdldFJhd0F0dHJpYnV0ZShlbHQsICduYW1lJyksXG4gICAgICAnSFgtVGFyZ2V0JzogZ2V0QXR0cmlidXRlVmFsdWUodGFyZ2V0LCAnaWQnKSxcbiAgICAgICdIWC1DdXJyZW50LVVSTCc6IGdldERvY3VtZW50KCkubG9jYXRpb24uaHJlZlxuICAgIH1cbiAgICBnZXRWYWx1ZXNGb3JFbGVtZW50KGVsdCwgJ2h4LWhlYWRlcnMnLCBmYWxzZSwgaGVhZGVycylcbiAgICBpZiAocHJvbXB0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhlYWRlcnNbJ0hYLVByb21wdCddID0gcHJvbXB0XG4gICAgfVxuICAgIGlmIChnZXRJbnRlcm5hbERhdGEoZWx0KS5ib29zdGVkKSB7XG4gICAgICBoZWFkZXJzWydIWC1Cb29zdGVkJ10gPSAndHJ1ZSdcbiAgICB9XG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIC8qKlxuICogZmlsdGVyVmFsdWVzIHRha2VzIGFuIG9iamVjdCBjb250YWluaW5nIGZvcm0gaW5wdXQgdmFsdWVzXG4gKiBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3QgdGhhdCBvbmx5IGNvbnRhaW5zIGtleXMgdGhhdCBhcmVcbiAqIHNwZWNpZmllZCBieSB0aGUgY2xvc2VzdCBcImh4LXBhcmFtc1wiIGF0dHJpYnV0ZVxuICogQHBhcmFtIHtGb3JtRGF0YX0gaW5wdXRWYWx1ZXNcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gKiBAcmV0dXJucyB7Rm9ybURhdGF9XG4gKi9cbiAgZnVuY3Rpb24gZmlsdGVyVmFsdWVzKGlucHV0VmFsdWVzLCBlbHQpIHtcbiAgICBjb25zdCBwYXJhbXNWYWx1ZSA9IGdldENsb3Nlc3RBdHRyaWJ1dGVWYWx1ZShlbHQsICdoeC1wYXJhbXMnKVxuICAgIGlmIChwYXJhbXNWYWx1ZSkge1xuICAgICAgaWYgKHBhcmFtc1ZhbHVlID09PSAnbm9uZScpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGb3JtRGF0YSgpXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtc1ZhbHVlID09PSAnKicpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0VmFsdWVzXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtc1ZhbHVlLmluZGV4T2YoJ25vdCAnKSA9PT0gMCkge1xuICAgICAgICBmb3JFYWNoKHBhcmFtc1ZhbHVlLnN1YnN0cig0KS5zcGxpdCgnLCcpLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgbmFtZSA9IG5hbWUudHJpbSgpXG4gICAgICAgICAgaW5wdXRWYWx1ZXMuZGVsZXRlKG5hbWUpXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBpbnB1dFZhbHVlc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWVzID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yRWFjaChwYXJhbXNWYWx1ZS5zcGxpdCgnLCcpLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgbmFtZSA9IG5hbWUudHJpbSgpXG4gICAgICAgICAgaWYgKGlucHV0VmFsdWVzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgaW5wdXRWYWx1ZXMuZ2V0QWxsKG5hbWUpLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHsgbmV3VmFsdWVzLmFwcGVuZChuYW1lLCB2YWx1ZSkgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBuZXdWYWx1ZXNcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGlucHV0VmFsdWVzXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBpc0FuY2hvckxpbmsoZWx0KSB7XG4gICAgcmV0dXJuICEhZ2V0UmF3QXR0cmlidXRlKGVsdCwgJ2hyZWYnKSAmJiBnZXRSYXdBdHRyaWJ1dGUoZWx0LCAnaHJlZicpLmluZGV4T2YoJyMnKSA+PSAwXG4gIH1cblxuICAvKipcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gKiBAcGFyYW0ge0h0bXhTd2FwU3R5bGV9IFtzd2FwSW5mb092ZXJyaWRlXVxuICogQHJldHVybnMge0h0bXhTd2FwU3BlY2lmaWNhdGlvbn1cbiAqL1xuICBmdW5jdGlvbiBnZXRTd2FwU3BlY2lmaWNhdGlvbihlbHQsIHN3YXBJbmZvT3ZlcnJpZGUpIHtcbiAgICBjb25zdCBzd2FwSW5mbyA9IHN3YXBJbmZvT3ZlcnJpZGUgfHwgZ2V0Q2xvc2VzdEF0dHJpYnV0ZVZhbHVlKGVsdCwgJ2h4LXN3YXAnKVxuICAgIC8qKiBAdHlwZSBIdG14U3dhcFNwZWNpZmljYXRpb24gKi9cbiAgICBjb25zdCBzd2FwU3BlYyA9IHtcbiAgICAgIHN3YXBTdHlsZTogZ2V0SW50ZXJuYWxEYXRhKGVsdCkuYm9vc3RlZCA/ICdpbm5lckhUTUwnIDogaHRteC5jb25maWcuZGVmYXVsdFN3YXBTdHlsZSxcbiAgICAgIHN3YXBEZWxheTogaHRteC5jb25maWcuZGVmYXVsdFN3YXBEZWxheSxcbiAgICAgIHNldHRsZURlbGF5OiBodG14LmNvbmZpZy5kZWZhdWx0U2V0dGxlRGVsYXlcbiAgICB9XG4gICAgaWYgKGh0bXguY29uZmlnLnNjcm9sbEludG9WaWV3T25Cb29zdCAmJiBnZXRJbnRlcm5hbERhdGEoZWx0KS5ib29zdGVkICYmICFpc0FuY2hvckxpbmsoZWx0KSkge1xuICAgICAgc3dhcFNwZWMuc2hvdyA9ICd0b3AnXG4gICAgfVxuICAgIGlmIChzd2FwSW5mbykge1xuICAgICAgY29uc3Qgc3BsaXQgPSBzcGxpdE9uV2hpdGVzcGFjZShzd2FwSW5mbylcbiAgICAgIGlmIChzcGxpdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNwbGl0W2ldXG4gICAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoJ3N3YXA6JykgPT09IDApIHtcbiAgICAgICAgICAgIHN3YXBTcGVjLnN3YXBEZWxheSA9IHBhcnNlSW50ZXJ2YWwodmFsdWUuc3Vic3RyKDUpKVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZignc2V0dGxlOicpID09PSAwKSB7XG4gICAgICAgICAgICBzd2FwU3BlYy5zZXR0bGVEZWxheSA9IHBhcnNlSW50ZXJ2YWwodmFsdWUuc3Vic3RyKDcpKVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZigndHJhbnNpdGlvbjonKSA9PT0gMCkge1xuICAgICAgICAgICAgc3dhcFNwZWMudHJhbnNpdGlvbiA9IHZhbHVlLnN1YnN0cigxMSkgPT09ICd0cnVlJ1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZignaWdub3JlVGl0bGU6JykgPT09IDApIHtcbiAgICAgICAgICAgIHN3YXBTcGVjLmlnbm9yZVRpdGxlID0gdmFsdWUuc3Vic3RyKDEyKSA9PT0gJ3RydWUnXG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5pbmRleE9mKCdzY3JvbGw6JykgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbFNwZWMgPSB2YWx1ZS5zdWJzdHIoNylcbiAgICAgICAgICAgIHZhciBzcGxpdFNwZWMgPSBzY3JvbGxTcGVjLnNwbGl0KCc6JylcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbFZhbCA9IHNwbGl0U3BlYy5wb3AoKVxuICAgICAgICAgICAgdmFyIHNlbGVjdG9yVmFsID0gc3BsaXRTcGVjLmxlbmd0aCA+IDAgPyBzcGxpdFNwZWMuam9pbignOicpIDogbnVsbFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgc3dhcFNwZWMuc2Nyb2xsID0gc2Nyb2xsVmFsXG4gICAgICAgICAgICBzd2FwU3BlYy5zY3JvbGxUYXJnZXQgPSBzZWxlY3RvclZhbFxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZignc2hvdzonKSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgc2hvd1NwZWMgPSB2YWx1ZS5zdWJzdHIoNSlcbiAgICAgICAgICAgIHZhciBzcGxpdFNwZWMgPSBzaG93U3BlYy5zcGxpdCgnOicpXG4gICAgICAgICAgICBjb25zdCBzaG93VmFsID0gc3BsaXRTcGVjLnBvcCgpXG4gICAgICAgICAgICB2YXIgc2VsZWN0b3JWYWwgPSBzcGxpdFNwZWMubGVuZ3RoID4gMCA/IHNwbGl0U3BlYy5qb2luKCc6JykgOiBudWxsXG4gICAgICAgICAgICBzd2FwU3BlYy5zaG93ID0gc2hvd1ZhbFxuICAgICAgICAgICAgc3dhcFNwZWMuc2hvd1RhcmdldCA9IHNlbGVjdG9yVmFsXG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5pbmRleE9mKCdmb2N1cy1zY3JvbGw6JykgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzU2Nyb2xsVmFsID0gdmFsdWUuc3Vic3RyKCdmb2N1cy1zY3JvbGw6Jy5sZW5ndGgpXG4gICAgICAgICAgICBzd2FwU3BlYy5mb2N1c1Njcm9sbCA9IGZvY3VzU2Nyb2xsVmFsID09ICd0cnVlJ1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PSAwKSB7XG4gICAgICAgICAgICBzd2FwU3BlYy5zd2FwU3R5bGUgPSB2YWx1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dFcnJvcignVW5rbm93biBtb2RpZmllciBpbiBoeC1zd2FwOiAnICsgdmFsdWUpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzd2FwU3BlY1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiB1c2VzRm9ybURhdGEoZWx0KSB7XG4gICAgcmV0dXJuIGdldENsb3Nlc3RBdHRyaWJ1dGVWYWx1ZShlbHQsICdoeC1lbmNvZGluZycpID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScgfHxcbiAgICAobWF0Y2hlcyhlbHQsICdmb3JtJykgJiYgZ2V0UmF3QXR0cmlidXRlKGVsdCwgJ2VuY3R5cGUnKSA9PT0gJ211bHRpcGFydC9mb3JtLWRhdGEnKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7WE1MSHR0cFJlcXVlc3R9IHhoclxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcGFyYW0ge0Zvcm1EYXRhfSBmaWx0ZXJlZFBhcmFtZXRlcnNcbiAgICogQHJldHVybnMgeyp8c3RyaW5nfG51bGx9XG4gICAqL1xuICBmdW5jdGlvbiBlbmNvZGVQYXJhbXNGb3JCb2R5KHhociwgZWx0LCBmaWx0ZXJlZFBhcmFtZXRlcnMpIHtcbiAgICBsZXQgZW5jb2RlZFBhcmFtZXRlcnMgPSBudWxsXG4gICAgd2l0aEV4dGVuc2lvbnMoZWx0LCBmdW5jdGlvbihleHRlbnNpb24pIHtcbiAgICAgIGlmIChlbmNvZGVkUGFyYW1ldGVycyA9PSBudWxsKSB7XG4gICAgICAgIGVuY29kZWRQYXJhbWV0ZXJzID0gZXh0ZW5zaW9uLmVuY29kZVBhcmFtZXRlcnMoeGhyLCBmaWx0ZXJlZFBhcmFtZXRlcnMsIGVsdClcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmIChlbmNvZGVkUGFyYW1ldGVycyAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZW5jb2RlZFBhcmFtZXRlcnNcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHVzZXNGb3JtRGF0YShlbHQpKSB7XG4gICAgICAgIC8vIEZvcmNlIGNvbnZlcnNpb24gdG8gYW4gYWN0dWFsIEZvcm1EYXRhIG9iamVjdCBpbiBjYXNlIGZpbHRlcmVkUGFyYW1ldGVycyBpcyBhIGZvcm1EYXRhUHJveHlcbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9iaWdza3lzb2Z0d2FyZS9odG14L2lzc3Vlcy8yMzE3XG4gICAgICAgIHJldHVybiBvdmVycmlkZUZvcm1EYXRhKG5ldyBGb3JtRGF0YSgpLCBmb3JtRGF0YUZyb21PYmplY3QoZmlsdGVyZWRQYXJhbWV0ZXJzKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1cmxFbmNvZGUoZmlsdGVyZWRQYXJhbWV0ZXJzKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0XG4gKiBAcmV0dXJucyB7SHRteFNldHRsZUluZm99XG4gKi9cbiAgZnVuY3Rpb24gbWFrZVNldHRsZUluZm8odGFyZ2V0KSB7XG4gICAgcmV0dXJuIHsgdGFza3M6IFtdLCBlbHRzOiBbdGFyZ2V0XSB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50W119IGNvbnRlbnRcbiAgICogQHBhcmFtIHtIdG14U3dhcFNwZWNpZmljYXRpb259IHN3YXBTcGVjXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVTY3JvbGxTdGF0ZShjb250ZW50LCBzd2FwU3BlYykge1xuICAgIGNvbnN0IGZpcnN0ID0gY29udGVudFswXVxuICAgIGNvbnN0IGxhc3QgPSBjb250ZW50W2NvbnRlbnQubGVuZ3RoIC0gMV1cbiAgICBpZiAoc3dhcFNwZWMuc2Nyb2xsKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gbnVsbFxuICAgICAgaWYgKHN3YXBTcGVjLnNjcm9sbFRhcmdldCkge1xuICAgICAgICB0YXJnZXQgPSBhc0VsZW1lbnQocXVlcnlTZWxlY3RvckV4dChmaXJzdCwgc3dhcFNwZWMuc2Nyb2xsVGFyZ2V0KSlcbiAgICAgIH1cbiAgICAgIGlmIChzd2FwU3BlYy5zY3JvbGwgPT09ICd0b3AnICYmIChmaXJzdCB8fCB0YXJnZXQpKSB7XG4gICAgICAgIHRhcmdldCA9IHRhcmdldCB8fCBmaXJzdFxuICAgICAgICB0YXJnZXQuc2Nyb2xsVG9wID0gMFxuICAgICAgfVxuICAgICAgaWYgKHN3YXBTcGVjLnNjcm9sbCA9PT0gJ2JvdHRvbScgJiYgKGxhc3QgfHwgdGFyZ2V0KSkge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQgfHwgbGFzdFxuICAgICAgICB0YXJnZXQuc2Nyb2xsVG9wID0gdGFyZ2V0LnNjcm9sbEhlaWdodFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3dhcFNwZWMuc2hvdykge1xuICAgICAgdmFyIHRhcmdldCA9IG51bGxcbiAgICAgIGlmIChzd2FwU3BlYy5zaG93VGFyZ2V0KSB7XG4gICAgICAgIGxldCB0YXJnZXRTdHIgPSBzd2FwU3BlYy5zaG93VGFyZ2V0XG4gICAgICAgIGlmIChzd2FwU3BlYy5zaG93VGFyZ2V0ID09PSAnd2luZG93Jykge1xuICAgICAgICAgIHRhcmdldFN0ciA9ICdib2R5J1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldCA9IGFzRWxlbWVudChxdWVyeVNlbGVjdG9yRXh0KGZpcnN0LCB0YXJnZXRTdHIpKVxuICAgICAgfVxuICAgICAgaWYgKHN3YXBTcGVjLnNob3cgPT09ICd0b3AnICYmIChmaXJzdCB8fCB0YXJnZXQpKSB7XG4gICAgICAgIHRhcmdldCA9IHRhcmdldCB8fCBmaXJzdFxuICAgICAgICAvLyBAdHMtaWdub3JlIEZvciBzb21lIHJlYXNvbiB0c2MgZG9lc24ndCByZWNvZ25pemUgXCJpbnN0YW50XCIgYXMgYSB2YWxpZCBvcHRpb24gZm9yIG5vd1xuICAgICAgICB0YXJnZXQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ3N0YXJ0JywgYmVoYXZpb3I6IGh0bXguY29uZmlnLnNjcm9sbEJlaGF2aW9yIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3dhcFNwZWMuc2hvdyA9PT0gJ2JvdHRvbScgJiYgKGxhc3QgfHwgdGFyZ2V0KSkge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQgfHwgbGFzdFxuICAgICAgICAvLyBAdHMtaWdub3JlIEZvciBzb21lIHJlYXNvbiB0c2MgZG9lc24ndCByZWNvZ25pemUgXCJpbnN0YW50XCIgYXMgYSB2YWxpZCBvcHRpb24gZm9yIG5vd1xuICAgICAgICB0YXJnZXQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ2VuZCcsIGJlaGF2aW9yOiBodG14LmNvbmZpZy5zY3JvbGxCZWhhdmlvciB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBldmFsQXNEZWZhdWx0XG4gKiBAcGFyYW0ge09iamVjdD19IHZhbHVlc1xuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuICBmdW5jdGlvbiBnZXRWYWx1ZXNGb3JFbGVtZW50KGVsdCwgYXR0ciwgZXZhbEFzRGVmYXVsdCwgdmFsdWVzKSB7XG4gICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7XG4gICAgICB2YWx1ZXMgPSB7fVxuICAgIH1cbiAgICBpZiAoZWx0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWx1ZXNcbiAgICB9XG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZShlbHQsIGF0dHIpXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlKSB7XG4gICAgICBsZXQgc3RyID0gYXR0cmlidXRlVmFsdWUudHJpbSgpXG4gICAgICBsZXQgZXZhbHVhdGVWYWx1ZSA9IGV2YWxBc0RlZmF1bHRcbiAgICAgIGlmIChzdHIgPT09ICd1bnNldCcpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIGlmIChzdHIuaW5kZXhPZignamF2YXNjcmlwdDonKSA9PT0gMCkge1xuICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKDExKVxuICAgICAgICBldmFsdWF0ZVZhbHVlID0gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChzdHIuaW5kZXhPZignanM6JykgPT09IDApIHtcbiAgICAgICAgc3RyID0gc3RyLnN1YnN0cigzKVxuICAgICAgICBldmFsdWF0ZVZhbHVlID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHN0ci5pbmRleE9mKCd7JykgIT09IDApIHtcbiAgICAgICAgc3RyID0gJ3snICsgc3RyICsgJ30nXG4gICAgICB9XG4gICAgICBsZXQgdmFyc1ZhbHVlc1xuICAgICAgaWYgKGV2YWx1YXRlVmFsdWUpIHtcbiAgICAgICAgdmFyc1ZhbHVlcyA9IG1heWJlRXZhbChlbHQsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiAoJyArIHN0ciArICcpJykoKSB9LCB7fSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhcnNWYWx1ZXMgPSBwYXJzZUpTT04oc3RyKVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFyc1ZhbHVlcykge1xuICAgICAgICBpZiAodmFyc1ZhbHVlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgaWYgKHZhbHVlc1trZXldID09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbHVlc1trZXldID0gdmFyc1ZhbHVlc1trZXldXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZXRWYWx1ZXNGb3JFbGVtZW50KGFzRWxlbWVudChwYXJlbnRFbHQoZWx0KSksIGF0dHIsIGV2YWxBc0RlZmF1bHQsIHZhbHVlcylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fHN0cmluZ30gZWx0XG4gICAqIEBwYXJhbSB7KCkgPT4gYW55fSB0b0V2YWxcbiAgICogQHBhcmFtIHthbnk9fSBkZWZhdWx0VmFsXG4gICAqIEByZXR1cm5zIHthbnl9XG4gICAqL1xuICBmdW5jdGlvbiBtYXliZUV2YWwoZWx0LCB0b0V2YWwsIGRlZmF1bHRWYWwpIHtcbiAgICBpZiAoaHRteC5jb25maWcuYWxsb3dFdmFsKSB7XG4gICAgICByZXR1cm4gdG9FdmFsKClcbiAgICB9IGVsc2Uge1xuICAgICAgdHJpZ2dlckVycm9yRXZlbnQoZWx0LCAnaHRteDpldmFsRGlzYWxsb3dlZEVycm9yJylcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICogQHBhcmFtIHsqP30gZXhwcmVzc2lvblZhcnNcbiAqIEByZXR1cm5zXG4gKi9cbiAgZnVuY3Rpb24gZ2V0SFhWYXJzRm9yRWxlbWVudChlbHQsIGV4cHJlc3Npb25WYXJzKSB7XG4gICAgcmV0dXJuIGdldFZhbHVlc0ZvckVsZW1lbnQoZWx0LCAnaHgtdmFycycsIHRydWUsIGV4cHJlc3Npb25WYXJzKVxuICB9XG5cbiAgLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICogQHBhcmFtIHsqP30gZXhwcmVzc2lvblZhcnNcbiAqIEByZXR1cm5zXG4gKi9cbiAgZnVuY3Rpb24gZ2V0SFhWYWxzRm9yRWxlbWVudChlbHQsIGV4cHJlc3Npb25WYXJzKSB7XG4gICAgcmV0dXJuIGdldFZhbHVlc0ZvckVsZW1lbnQoZWx0LCAnaHgtdmFscycsIGZhbHNlLCBleHByZXNzaW9uVmFycylcbiAgfVxuXG4gIC8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAqIEByZXR1cm5zIHtGb3JtRGF0YX1cbiAqL1xuICBmdW5jdGlvbiBnZXRFeHByZXNzaW9uVmFycyhlbHQpIHtcbiAgICByZXR1cm4gbWVyZ2VPYmplY3RzKGdldEhYVmFyc0ZvckVsZW1lbnQoZWx0KSwgZ2V0SFhWYWxzRm9yRWxlbWVudChlbHQpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7WE1MSHR0cFJlcXVlc3R9IHhoclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bGx9IGhlYWRlclZhbHVlXG4gICAqL1xuICBmdW5jdGlvbiBzYWZlbHlTZXRIZWFkZXJWYWx1ZSh4aHIsIGhlYWRlciwgaGVhZGVyVmFsdWUpIHtcbiAgICBpZiAoaGVhZGVyVmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgaGVhZGVyVmFsdWUpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBPbiBhbiBleGNlcHRpb24sIHRyeSB0byBzZXQgdGhlIGhlYWRlciBVUkkgZW5jb2RlZCBpbnN0ZWFkXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgZW5jb2RlVVJJQ29tcG9uZW50KGhlYWRlclZhbHVlKSlcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyICsgJy1VUkktQXV0b0VuY29kZWQnLCAndHJ1ZScpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7WE1MSHR0cFJlcXVlc3R9IHhoclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiBnZXRQYXRoRnJvbVJlc3BvbnNlKHhocikge1xuICAvLyBOQjogSUUxMSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgc3R1ZmZcbiAgICBpZiAoeGhyLnJlc3BvbnNlVVJMICYmIHR5cGVvZiAoVVJMKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoeGhyLnJlc3BvbnNlVVJMKVxuICAgICAgICByZXR1cm4gdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cmlnZ2VyRXJyb3JFdmVudChnZXREb2N1bWVudCgpLmJvZHksICdodG14OmJhZFJlc3BvbnNlVXJsJywgeyB1cmw6IHhoci5yZXNwb25zZVVSTCB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSB4aHJcbiAgICogQHBhcmFtIHtSZWdFeHB9IHJlZ2V4cFxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaGFzSGVhZGVyKHhociwgcmVnZXhwKSB7XG4gICAgcmV0dXJuIHJlZ2V4cC50ZXN0KHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJc3N1ZXMgYW4gaHRteC1zdHlsZSBBSkFYIHJlcXVlc3RcbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jYWpheFxuICAgKlxuICAgKiBAcGFyYW0ge0h0dHBWZXJifSB2ZXJiXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIHRoZSBVUkwgcGF0aCB0byBtYWtlIHRoZSBBSkFYXG4gICAqIEBwYXJhbSB7RWxlbWVudHxzdHJpbmd8SHRteEFqYXhIZWxwZXJDb250ZXh0fSBjb250ZXh0IHRoZSBlbGVtZW50IHRvIHRhcmdldCAoZGVmYXVsdHMgdG8gdGhlICoqYm9keSoqKSB8IGEgc2VsZWN0b3IgZm9yIHRoZSB0YXJnZXQgfCBhIGNvbnRleHQgb2JqZWN0IHRoYXQgY29udGFpbnMgYW55IG9mIHRoZSBmb2xsb3dpbmdcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIGltbWVkaWF0ZWx5IGlmIG5vIHJlcXVlc3QgaXMgc2VudCwgb3Igd2hlbiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZVxuICAgKi9cbiAgZnVuY3Rpb24gYWpheEhlbHBlcih2ZXJiLCBwYXRoLCBjb250ZXh0KSB7XG4gICAgdmVyYiA9ICgvKiogQHR5cGUgSHR0cFZlcmIgKi8odmVyYi50b0xvd2VyQ2FzZSgpKSlcbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgaWYgKGNvbnRleHQgaW5zdGFuY2VvZiBFbGVtZW50IHx8IHR5cGVvZiBjb250ZXh0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gaXNzdWVBamF4UmVxdWVzdCh2ZXJiLCBwYXRoLCBudWxsLCBudWxsLCB7XG4gICAgICAgICAgdGFyZ2V0T3ZlcnJpZGU6IHJlc29sdmVUYXJnZXQoY29udGV4dCksXG4gICAgICAgICAgcmV0dXJuUHJvbWlzZTogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlzc3VlQWpheFJlcXVlc3QodmVyYiwgcGF0aCwgcmVzb2x2ZVRhcmdldChjb250ZXh0LnNvdXJjZSksIGNvbnRleHQuZXZlbnQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFuZGxlcjogY29udGV4dC5oYW5kbGVyLFxuICAgICAgICAgICAgaGVhZGVyczogY29udGV4dC5oZWFkZXJzLFxuICAgICAgICAgICAgdmFsdWVzOiBjb250ZXh0LnZhbHVlcyxcbiAgICAgICAgICAgIHRhcmdldE92ZXJyaWRlOiByZXNvbHZlVGFyZ2V0KGNvbnRleHQudGFyZ2V0KSxcbiAgICAgICAgICAgIHN3YXBPdmVycmlkZTogY29udGV4dC5zd2FwLFxuICAgICAgICAgICAgc2VsZWN0OiBjb250ZXh0LnNlbGVjdCxcbiAgICAgICAgICAgIHJldHVyblByb21pc2U6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaXNzdWVBamF4UmVxdWVzdCh2ZXJiLCBwYXRoLCBudWxsLCBudWxsLCB7XG4gICAgICAgIHJldHVyblByb21pc2U6IHRydWVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEByZXR1cm4ge0VsZW1lbnRbXX1cbiAgICovXG4gIGZ1bmN0aW9uIGhpZXJhcmNoeUZvckVsdChlbHQpIHtcbiAgICBjb25zdCBhcnIgPSBbXVxuICAgIHdoaWxlIChlbHQpIHtcbiAgICAgIGFyci5wdXNoKGVsdClcbiAgICAgIGVsdCA9IGVsdC5wYXJlbnRFbGVtZW50XG4gICAgfVxuICAgIHJldHVybiBhcnJcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKiBAcGFyYW0ge0h0bXhSZXF1ZXN0Q29uZmlnfSByZXF1ZXN0Q29uZmlnXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiB2ZXJpZnlQYXRoKGVsdCwgcGF0aCwgcmVxdWVzdENvbmZpZykge1xuICAgIGxldCBzYW1lSG9zdFxuICAgIGxldCB1cmxcbiAgICBpZiAodHlwZW9mIFVSTCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdXJsID0gbmV3IFVSTChwYXRoLCBkb2N1bWVudC5sb2NhdGlvbi5ocmVmKVxuICAgICAgY29uc3Qgb3JpZ2luID0gZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luXG4gICAgICBzYW1lSG9zdCA9IG9yaWdpbiA9PT0gdXJsLm9yaWdpblxuICAgIH0gZWxzZSB7XG4gICAgLy8gSUUxMSBkb2Vzbid0IHN1cHBvcnQgVVJMXG4gICAgICB1cmwgPSBwYXRoXG4gICAgICBzYW1lSG9zdCA9IHN0YXJ0c1dpdGgocGF0aCwgZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKVxuICAgIH1cblxuICAgIGlmIChodG14LmNvbmZpZy5zZWxmUmVxdWVzdHNPbmx5KSB7XG4gICAgICBpZiAoIXNhbWVIb3N0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJpZ2dlckV2ZW50KGVsdCwgJ2h0bXg6dmFsaWRhdGVVcmwnLCBtZXJnZU9iamVjdHMoeyB1cmwsIHNhbWVIb3N0IH0sIHJlcXVlc3RDb25maWcpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fEZvcm1EYXRhfSBvYmpcbiAgICogQHJldHVybiB7Rm9ybURhdGF9XG4gICAqL1xuICBmdW5jdGlvbiBmb3JtRGF0YUZyb21PYmplY3Qob2JqKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIEZvcm1EYXRhKSByZXR1cm4gb2JqXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0uZm9yRWFjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9ialtrZXldLmZvckVhY2goZnVuY3Rpb24odikgeyBmb3JtRGF0YS5hcHBlbmQoa2V5LCB2KSB9KVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcgJiYgIShvYmpba2V5XSBpbnN0YW5jZW9mIEJsb2IpKSB7XG4gICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgSlNPTi5zdHJpbmdpZnkob2JqW2tleV0pKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIG9ialtrZXldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb3JtRGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Rm9ybURhdGF9IGZvcm1EYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGZ1bmN0aW9uIGZvcm1EYXRhQXJyYXlQcm94eShmb3JtRGF0YSwgbmFtZSwgYXJyYXkpIHtcbiAgICAvLyBtdXRhdGluZyB0aGUgYXJyYXkgc2hvdWxkIG11dGF0ZSB0aGUgdW5kZXJseWluZyBmb3JtIGRhdGFcbiAgICByZXR1cm4gbmV3IFByb3h5KGFycmF5LCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKHRhcmdldCwga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnbnVtYmVyJykgcmV0dXJuIHRhcmdldFtrZXldXG4gICAgICAgIGlmIChrZXkgPT09ICdsZW5ndGgnKSByZXR1cm4gdGFyZ2V0Lmxlbmd0aFxuICAgICAgICBpZiAoa2V5ID09PSAncHVzaCcpIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHRhcmdldC5wdXNoKHZhbHVlKVxuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRhcmdldFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0uYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpXG4gICAgICAgICAgICBmb3JtRGF0YS5kZWxldGUobmFtZSlcbiAgICAgICAgICAgIHRhcmdldC5mb3JFYWNoKGZ1bmN0aW9uKHYpIHsgZm9ybURhdGEuYXBwZW5kKG5hbWUsIHYpIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldFtrZXldICYmIHRhcmdldFtrZXldLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB0YXJnZXRba2V5XVswXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0YXJnZXRba2V5XVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih0YXJnZXQsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgICB0YXJnZXRbaW5kZXhdID0gdmFsdWVcbiAgICAgICAgZm9ybURhdGEuZGVsZXRlKG5hbWUpXG4gICAgICAgIHRhcmdldC5mb3JFYWNoKGZ1bmN0aW9uKHYpIHsgZm9ybURhdGEuYXBwZW5kKG5hbWUsIHYpIH0pXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0Zvcm1EYXRhfSBmb3JtRGF0YVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cbiAgZnVuY3Rpb24gZm9ybURhdGFQcm94eShmb3JtRGF0YSkge1xuICAgIHJldHVybiBuZXcgUHJveHkoZm9ybURhdGEsIHtcbiAgICAgIGdldDogZnVuY3Rpb24odGFyZ2V0LCBuYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICAvLyBGb3J3YXJkIHN5bWJvbCBjYWxscyB0byB0aGUgRm9ybURhdGEgaXRzZWxmIGRpcmVjdGx5XG4gICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgbmFtZSlcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSA9PT0gJ3RvSlNPTicpIHtcbiAgICAgICAgICAvLyBTdXBwb3J0IEpTT04uc3RyaW5naWZ5IGNhbGwgb24gcHJveHlcbiAgICAgICAgICByZXR1cm4gKCkgPT4gT2JqZWN0LmZyb21FbnRyaWVzKGZvcm1EYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lIGluIHRhcmdldCkge1xuICAgICAgICAgIC8vIFdyYXAgaW4gZnVuY3Rpb24gd2l0aCBhcHBseSB0byBjb3JyZWN0bHkgYmluZCB0aGUgRm9ybURhdGEgY29udGV4dCwgYXMgYSBkaXJlY3QgY2FsbCB3b3VsZCByZXN1bHQgaW4gYW4gaWxsZWdhbCBpbnZvY2F0aW9uIGVycm9yXG4gICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXRbbmFtZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvcm1EYXRhW25hbWVdLmFwcGx5KGZvcm1EYXRhLCBhcmd1bWVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRbbmFtZV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJyYXkgPSBmb3JtRGF0YS5nZXRBbGwobmFtZSlcbiAgICAgICAgLy8gVGhvc2UgMiB1bmRlZmluZWQgJiBzaW5nbGUgdmFsdWUgcmV0dXJucyBhcmUgZm9yIHJldHJvLWNvbXBhdGliaWxpdHkgYXMgd2Ugd2VyZW4ndCB1c2luZyBGb3JtRGF0YSBiZWZvcmVcbiAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgfSBlbHNlIGlmIChhcnJheS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gYXJyYXlbMF1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZm9ybURhdGFBcnJheVByb3h5KHRhcmdldCwgbmFtZSwgYXJyYXkpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHRhcmdldCwgbmFtZSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHRhcmdldC5kZWxldGUobmFtZSlcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5mb3JFYWNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbih2KSB7IHRhcmdldC5hcHBlbmQobmFtZSwgdikgfSlcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICEodmFsdWUgaW5zdGFuY2VvZiBCbG9iKSkge1xuICAgICAgICAgIHRhcmdldC5hcHBlbmQobmFtZSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldC5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0sXG4gICAgICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24odGFyZ2V0LCBuYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0YXJnZXQuZGVsZXRlKG5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0sXG4gICAgICAvLyBTdXBwb3J0IE9iamVjdC5hc3NpZ24gY2FsbCBmcm9tIHByb3h5XG4gICAgICBvd25LZXlzOiBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3Qub3duS2V5cyhPYmplY3QuZnJvbUVudHJpZXModGFyZ2V0KSlcbiAgICAgIH0sXG4gICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKHRhcmdldCwgcHJvcCkge1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LmZyb21FbnRyaWVzKHRhcmdldCksIHByb3ApXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0h0dHBWZXJifSB2ZXJiXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7SHRteEFqYXhFdGN9IFtldGNdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbmZpcm1lZF1cbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGZ1bmN0aW9uIGlzc3VlQWpheFJlcXVlc3QodmVyYiwgcGF0aCwgZWx0LCBldmVudCwgZXRjLCBjb25maXJtZWQpIHtcbiAgICBsZXQgcmVzb2x2ZSA9IG51bGxcbiAgICBsZXQgcmVqZWN0ID0gbnVsbFxuICAgIGV0YyA9IGV0YyAhPSBudWxsID8gZXRjIDoge31cbiAgICBpZiAoZXRjLnJldHVyblByb21pc2UgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKF9yZXNvbHZlLCBfcmVqZWN0KSB7XG4gICAgICAgIHJlc29sdmUgPSBfcmVzb2x2ZVxuICAgICAgICByZWplY3QgPSBfcmVqZWN0XG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoZWx0ID09IG51bGwpIHtcbiAgICAgIGVsdCA9IGdldERvY3VtZW50KCkuYm9keVxuICAgIH1cbiAgICBjb25zdCByZXNwb25zZUhhbmRsZXIgPSBldGMuaGFuZGxlciB8fCBoYW5kbGVBamF4UmVzcG9uc2VcbiAgICBjb25zdCBzZWxlY3QgPSBldGMuc2VsZWN0IHx8IG51bGxcblxuICAgIGlmICghYm9keUNvbnRhaW5zKGVsdCkpIHtcbiAgICAvLyBkbyBub3QgaXNzdWUgcmVxdWVzdHMgZm9yIGVsZW1lbnRzIHJlbW92ZWQgZnJvbSB0aGUgRE9NXG4gICAgICBtYXliZUNhbGwocmVzb2x2ZSlcbiAgICAgIHJldHVybiBwcm9taXNlXG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IGV0Yy50YXJnZXRPdmVycmlkZSB8fCBhc0VsZW1lbnQoZ2V0VGFyZ2V0KGVsdCkpXG4gICAgaWYgKHRhcmdldCA9PSBudWxsIHx8IHRhcmdldCA9PSBEVU1NWV9FTFQpIHtcbiAgICAgIHRyaWdnZXJFcnJvckV2ZW50KGVsdCwgJ2h0bXg6dGFyZ2V0RXJyb3InLCB7IHRhcmdldDogZ2V0QXR0cmlidXRlVmFsdWUoZWx0LCAnaHgtdGFyZ2V0JykgfSlcbiAgICAgIG1heWJlQ2FsbChyZWplY3QpXG4gICAgICByZXR1cm4gcHJvbWlzZVxuICAgIH1cblxuICAgIGxldCBlbHREYXRhID0gZ2V0SW50ZXJuYWxEYXRhKGVsdClcbiAgICBjb25zdCBzdWJtaXR0ZXIgPSBlbHREYXRhLmxhc3RCdXR0b25DbGlja2VkXG5cbiAgICBpZiAoc3VibWl0dGVyKSB7XG4gICAgICBjb25zdCBidXR0b25QYXRoID0gZ2V0UmF3QXR0cmlidXRlKHN1Ym1pdHRlciwgJ2Zvcm1hY3Rpb24nKVxuICAgICAgaWYgKGJ1dHRvblBhdGggIT0gbnVsbCkge1xuICAgICAgICBwYXRoID0gYnV0dG9uUGF0aFxuICAgICAgfVxuXG4gICAgICBjb25zdCBidXR0b25WZXJiID0gZ2V0UmF3QXR0cmlidXRlKHN1Ym1pdHRlciwgJ2Zvcm1tZXRob2QnKVxuICAgICAgaWYgKGJ1dHRvblZlcmIgIT0gbnVsbCkge1xuICAgICAgLy8gaWdub3JlIGJ1dHRvbnMgd2l0aCBmb3JtbWV0aG9kPVwiZGlhbG9nXCJcbiAgICAgICAgaWYgKGJ1dHRvblZlcmIudG9Mb3dlckNhc2UoKSAhPT0gJ2RpYWxvZycpIHtcbiAgICAgICAgICB2ZXJiID0gKC8qKiBAdHlwZSBIdHRwVmVyYiAqLyhidXR0b25WZXJiKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpcm1RdWVzdGlvbiA9IGdldENsb3Nlc3RBdHRyaWJ1dGVWYWx1ZShlbHQsICdoeC1jb25maXJtJylcbiAgICAvLyBhbGxvdyBldmVudC1iYXNlZCBjb25maXJtYXRpb24gdy8gYSBjYWxsYmFja1xuICAgIGlmIChjb25maXJtZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaXNzdWVSZXF1ZXN0ID0gZnVuY3Rpb24oc2tpcENvbmZpcm1hdGlvbikge1xuICAgICAgICByZXR1cm4gaXNzdWVBamF4UmVxdWVzdCh2ZXJiLCBwYXRoLCBlbHQsIGV2ZW50LCBldGMsICEhc2tpcENvbmZpcm1hdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbmZpcm1EZXRhaWxzID0geyB0YXJnZXQsIGVsdCwgcGF0aCwgdmVyYiwgdHJpZ2dlcmluZ0V2ZW50OiBldmVudCwgZXRjLCBpc3N1ZVJlcXVlc3QsIHF1ZXN0aW9uOiBjb25maXJtUXVlc3Rpb24gfVxuICAgICAgaWYgKHRyaWdnZXJFdmVudChlbHQsICdodG14OmNvbmZpcm0nLCBjb25maXJtRGV0YWlscykgPT09IGZhbHNlKSB7XG4gICAgICAgIG1heWJlQ2FsbChyZXNvbHZlKVxuICAgICAgICByZXR1cm4gcHJvbWlzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBzeW5jRWx0ID0gZWx0XG4gICAgbGV0IHN5bmNTdHJhdGVneSA9IGdldENsb3Nlc3RBdHRyaWJ1dGVWYWx1ZShlbHQsICdoeC1zeW5jJylcbiAgICBsZXQgcXVldWVTdHJhdGVneSA9IG51bGxcbiAgICBsZXQgYWJvcnRhYmxlID0gZmFsc2VcbiAgICBpZiAoc3luY1N0cmF0ZWd5KSB7XG4gICAgICBjb25zdCBzeW5jU3RyaW5ncyA9IHN5bmNTdHJhdGVneS5zcGxpdCgnOicpXG4gICAgICBjb25zdCBzZWxlY3RvciA9IHN5bmNTdHJpbmdzWzBdLnRyaW0oKVxuICAgICAgaWYgKHNlbGVjdG9yID09PSAndGhpcycpIHtcbiAgICAgICAgc3luY0VsdCA9IGZpbmRUaGlzRWxlbWVudChlbHQsICdoeC1zeW5jJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN5bmNFbHQgPSBhc0VsZW1lbnQocXVlcnlTZWxlY3RvckV4dChlbHQsIHNlbGVjdG9yKSlcbiAgICAgIH1cbiAgICAgIC8vIGRlZmF1bHQgdG8gdGhlIGRyb3Agc3RyYXRlZ3lcbiAgICAgIHN5bmNTdHJhdGVneSA9IChzeW5jU3RyaW5nc1sxXSB8fCAnZHJvcCcpLnRyaW0oKVxuICAgICAgZWx0RGF0YSA9IGdldEludGVybmFsRGF0YShzeW5jRWx0KVxuICAgICAgaWYgKHN5bmNTdHJhdGVneSA9PT0gJ2Ryb3AnICYmIGVsdERhdGEueGhyICYmIGVsdERhdGEuYWJvcnRhYmxlICE9PSB0cnVlKSB7XG4gICAgICAgIG1heWJlQ2FsbChyZXNvbHZlKVxuICAgICAgICByZXR1cm4gcHJvbWlzZVxuICAgICAgfSBlbHNlIGlmIChzeW5jU3RyYXRlZ3kgPT09ICdhYm9ydCcpIHtcbiAgICAgICAgaWYgKGVsdERhdGEueGhyKSB7XG4gICAgICAgICAgbWF5YmVDYWxsKHJlc29sdmUpXG4gICAgICAgICAgcmV0dXJuIHByb21pc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhYm9ydGFibGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3luY1N0cmF0ZWd5ID09PSAncmVwbGFjZScpIHtcbiAgICAgICAgdHJpZ2dlckV2ZW50KHN5bmNFbHQsICdodG14OmFib3J0JykgLy8gYWJvcnQgdGhlIGN1cnJlbnQgcmVxdWVzdCBhbmQgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoc3luY1N0cmF0ZWd5LmluZGV4T2YoJ3F1ZXVlJykgPT09IDApIHtcbiAgICAgICAgY29uc3QgcXVldWVTdHJBcnJheSA9IHN5bmNTdHJhdGVneS5zcGxpdCgnICcpXG4gICAgICAgIHF1ZXVlU3RyYXRlZ3kgPSAocXVldWVTdHJBcnJheVsxXSB8fCAnbGFzdCcpLnRyaW0oKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbHREYXRhLnhocikge1xuICAgICAgaWYgKGVsdERhdGEuYWJvcnRhYmxlKSB7XG4gICAgICAgIHRyaWdnZXJFdmVudChzeW5jRWx0LCAnaHRteDphYm9ydCcpIC8vIGFib3J0IHRoZSBjdXJyZW50IHJlcXVlc3QgYW5kIGNvbnRpbnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocXVldWVTdHJhdGVneSA9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBldmVudERhdGEgPSBnZXRJbnRlcm5hbERhdGEoZXZlbnQpXG4gICAgICAgICAgICBpZiAoZXZlbnREYXRhICYmIGV2ZW50RGF0YS50cmlnZ2VyU3BlYyAmJiBldmVudERhdGEudHJpZ2dlclNwZWMucXVldWUpIHtcbiAgICAgICAgICAgICAgcXVldWVTdHJhdGVneSA9IGV2ZW50RGF0YS50cmlnZ2VyU3BlYy5xdWV1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocXVldWVTdHJhdGVneSA9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWV1ZVN0cmF0ZWd5ID0gJ2xhc3QnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbHREYXRhLnF1ZXVlZFJlcXVlc3RzID09IG51bGwpIHtcbiAgICAgICAgICBlbHREYXRhLnF1ZXVlZFJlcXVlc3RzID0gW11cbiAgICAgICAgfVxuICAgICAgICBpZiAocXVldWVTdHJhdGVneSA9PT0gJ2ZpcnN0JyAmJiBlbHREYXRhLnF1ZXVlZFJlcXVlc3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGVsdERhdGEucXVldWVkUmVxdWVzdHMucHVzaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlzc3VlQWpheFJlcXVlc3QodmVyYiwgcGF0aCwgZWx0LCBldmVudCwgZXRjKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAocXVldWVTdHJhdGVneSA9PT0gJ2FsbCcpIHtcbiAgICAgICAgICBlbHREYXRhLnF1ZXVlZFJlcXVlc3RzLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpc3N1ZUFqYXhSZXF1ZXN0KHZlcmIsIHBhdGgsIGVsdCwgZXZlbnQsIGV0YylcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKHF1ZXVlU3RyYXRlZ3kgPT09ICdsYXN0Jykge1xuICAgICAgICAgIGVsdERhdGEucXVldWVkUmVxdWVzdHMgPSBbXSAvLyBkdW1wIGV4aXN0aW5nIHF1ZXVlXG4gICAgICAgICAgZWx0RGF0YS5xdWV1ZWRSZXF1ZXN0cy5wdXNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaXNzdWVBamF4UmVxdWVzdCh2ZXJiLCBwYXRoLCBlbHQsIGV2ZW50LCBldGMpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBtYXliZUNhbGwocmVzb2x2ZSlcbiAgICAgICAgcmV0dXJuIHByb21pc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuICAgIGVsdERhdGEueGhyID0geGhyXG4gICAgZWx0RGF0YS5hYm9ydGFibGUgPSBhYm9ydGFibGVcbiAgICBjb25zdCBlbmRSZXF1ZXN0TG9jayA9IGZ1bmN0aW9uKCkge1xuICAgICAgZWx0RGF0YS54aHIgPSBudWxsXG4gICAgICBlbHREYXRhLmFib3J0YWJsZSA9IGZhbHNlXG4gICAgICBpZiAoZWx0RGF0YS5xdWV1ZWRSZXF1ZXN0cyAhPSBudWxsICYmXG4gICAgICBlbHREYXRhLnF1ZXVlZFJlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcXVldWVkUmVxdWVzdCA9IGVsdERhdGEucXVldWVkUmVxdWVzdHMuc2hpZnQoKVxuICAgICAgICBxdWV1ZWRSZXF1ZXN0KClcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcHJvbXB0UXVlc3Rpb24gPSBnZXRDbG9zZXN0QXR0cmlidXRlVmFsdWUoZWx0LCAnaHgtcHJvbXB0JylcbiAgICBpZiAocHJvbXB0UXVlc3Rpb24pIHtcbiAgICAgIHZhciBwcm9tcHRSZXNwb25zZSA9IHByb21wdChwcm9tcHRRdWVzdGlvbilcbiAgICAgIC8vIHByb21wdCByZXR1cm5zIG51bGwgaWYgY2FuY2VsbGVkIGFuZCBlbXB0eSBzdHJpbmcgaWYgYWNjZXB0ZWQgd2l0aCBubyBlbnRyeVxuICAgICAgaWYgKHByb21wdFJlc3BvbnNlID09PSBudWxsIHx8XG4gICAgICAhdHJpZ2dlckV2ZW50KGVsdCwgJ2h0bXg6cHJvbXB0JywgeyBwcm9tcHQ6IHByb21wdFJlc3BvbnNlLCB0YXJnZXQgfSkpIHtcbiAgICAgICAgbWF5YmVDYWxsKHJlc29sdmUpXG4gICAgICAgIGVuZFJlcXVlc3RMb2NrKClcbiAgICAgICAgcmV0dXJuIHByb21pc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlybVF1ZXN0aW9uICYmICFjb25maXJtZWQpIHtcbiAgICAgIGlmICghY29uZmlybShjb25maXJtUXVlc3Rpb24pKSB7XG4gICAgICAgIG1heWJlQ2FsbChyZXNvbHZlKVxuICAgICAgICBlbmRSZXF1ZXN0TG9jaygpXG4gICAgICAgIHJldHVybiBwcm9taXNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGhlYWRlcnMgPSBnZXRIZWFkZXJzKGVsdCwgdGFyZ2V0LCBwcm9tcHRSZXNwb25zZSlcblxuICAgIGlmICh2ZXJiICE9PSAnZ2V0JyAmJiAhdXNlc0Zvcm1EYXRhKGVsdCkpIHtcbiAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbiAgICB9XG5cbiAgICBpZiAoZXRjLmhlYWRlcnMpIHtcbiAgICAgIGhlYWRlcnMgPSBtZXJnZU9iamVjdHMoaGVhZGVycywgZXRjLmhlYWRlcnMpXG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdHMgPSBnZXRJbnB1dFZhbHVlcyhlbHQsIHZlcmIpXG4gICAgbGV0IGVycm9ycyA9IHJlc3VsdHMuZXJyb3JzXG4gICAgY29uc3QgcmF3Rm9ybURhdGEgPSByZXN1bHRzLmZvcm1EYXRhXG4gICAgaWYgKGV0Yy52YWx1ZXMpIHtcbiAgICAgIG92ZXJyaWRlRm9ybURhdGEocmF3Rm9ybURhdGEsIGZvcm1EYXRhRnJvbU9iamVjdChldGMudmFsdWVzKSlcbiAgICB9XG4gICAgY29uc3QgZXhwcmVzc2lvblZhcnMgPSBmb3JtRGF0YUZyb21PYmplY3QoZ2V0RXhwcmVzc2lvblZhcnMoZWx0KSlcbiAgICBjb25zdCBhbGxGb3JtRGF0YSA9IG92ZXJyaWRlRm9ybURhdGEocmF3Rm9ybURhdGEsIGV4cHJlc3Npb25WYXJzKVxuICAgIGxldCBmaWx0ZXJlZEZvcm1EYXRhID0gZmlsdGVyVmFsdWVzKGFsbEZvcm1EYXRhLCBlbHQpXG5cbiAgICBpZiAoaHRteC5jb25maWcuZ2V0Q2FjaGVCdXN0ZXJQYXJhbSAmJiB2ZXJiID09PSAnZ2V0Jykge1xuICAgICAgZmlsdGVyZWRGb3JtRGF0YS5zZXQoJ29yZy5odG14LmNhY2hlLWJ1c3RlcicsIGdldFJhd0F0dHJpYnV0ZSh0YXJnZXQsICdpZCcpIHx8ICd0cnVlJylcbiAgICB9XG5cbiAgICAvLyBiZWhhdmlvciBvZiBhbmNob3JzIHcvIGVtcHR5IGhyZWYgaXMgdG8gdXNlIHRoZSBjdXJyZW50IFVSTFxuICAgIGlmIChwYXRoID09IG51bGwgfHwgcGF0aCA9PT0gJycpIHtcbiAgICAgIHBhdGggPSBnZXREb2N1bWVudCgpLmxvY2F0aW9uLmhyZWZcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2NyZWRlbnRpYWxzXVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbdGltZW91dF1cbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtub0hlYWRlcnNdXG4gICAgICovXG4gICAgY29uc3QgcmVxdWVzdEF0dHJWYWx1ZXMgPSBnZXRWYWx1ZXNGb3JFbGVtZW50KGVsdCwgJ2h4LXJlcXVlc3QnKVxuXG4gICAgY29uc3QgZWx0SXNCb29zdGVkID0gZ2V0SW50ZXJuYWxEYXRhKGVsdCkuYm9vc3RlZFxuXG4gICAgbGV0IHVzZVVybFBhcmFtcyA9IGh0bXguY29uZmlnLm1ldGhvZHNUaGF0VXNlVXJsUGFyYW1zLmluZGV4T2YodmVyYikgPj0gMFxuXG4gICAgLyoqIEB0eXBlIEh0bXhSZXF1ZXN0Q29uZmlnICovXG4gICAgY29uc3QgcmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGJvb3N0ZWQ6IGVsdElzQm9vc3RlZCxcbiAgICAgIHVzZVVybFBhcmFtcyxcbiAgICAgIGZvcm1EYXRhOiBmaWx0ZXJlZEZvcm1EYXRhLFxuICAgICAgcGFyYW1ldGVyczogZm9ybURhdGFQcm94eShmaWx0ZXJlZEZvcm1EYXRhKSxcbiAgICAgIHVuZmlsdGVyZWRGb3JtRGF0YTogYWxsRm9ybURhdGEsXG4gICAgICB1bmZpbHRlcmVkUGFyYW1ldGVyczogZm9ybURhdGFQcm94eShhbGxGb3JtRGF0YSksXG4gICAgICBoZWFkZXJzLFxuICAgICAgdGFyZ2V0LFxuICAgICAgdmVyYixcbiAgICAgIGVycm9ycyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogZXRjLmNyZWRlbnRpYWxzIHx8IHJlcXVlc3RBdHRyVmFsdWVzLmNyZWRlbnRpYWxzIHx8IGh0bXguY29uZmlnLndpdGhDcmVkZW50aWFscyxcbiAgICAgIHRpbWVvdXQ6IGV0Yy50aW1lb3V0IHx8IHJlcXVlc3RBdHRyVmFsdWVzLnRpbWVvdXQgfHwgaHRteC5jb25maWcudGltZW91dCxcbiAgICAgIHBhdGgsXG4gICAgICB0cmlnZ2VyaW5nRXZlbnQ6IGV2ZW50XG4gICAgfVxuXG4gICAgaWYgKCF0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDpjb25maWdSZXF1ZXN0JywgcmVxdWVzdENvbmZpZykpIHtcbiAgICAgIG1heWJlQ2FsbChyZXNvbHZlKVxuICAgICAgZW5kUmVxdWVzdExvY2soKVxuICAgICAgcmV0dXJuIHByb21pc2VcbiAgICB9XG5cbiAgICAvLyBjb3B5IG91dCBpbiBjYXNlIHRoZSBvYmplY3Qgd2FzIG92ZXJ3cml0dGVuXG4gICAgcGF0aCA9IHJlcXVlc3RDb25maWcucGF0aFxuICAgIHZlcmIgPSByZXF1ZXN0Q29uZmlnLnZlcmJcbiAgICBoZWFkZXJzID0gcmVxdWVzdENvbmZpZy5oZWFkZXJzXG4gICAgZmlsdGVyZWRGb3JtRGF0YSA9IGZvcm1EYXRhRnJvbU9iamVjdChyZXF1ZXN0Q29uZmlnLnBhcmFtZXRlcnMpXG4gICAgZXJyb3JzID0gcmVxdWVzdENvbmZpZy5lcnJvcnNcbiAgICB1c2VVcmxQYXJhbXMgPSByZXF1ZXN0Q29uZmlnLnVzZVVybFBhcmFtc1xuXG4gICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdHJpZ2dlckV2ZW50KGVsdCwgJ2h0bXg6dmFsaWRhdGlvbjpoYWx0ZWQnLCByZXF1ZXN0Q29uZmlnKVxuICAgICAgbWF5YmVDYWxsKHJlc29sdmUpXG4gICAgICBlbmRSZXF1ZXN0TG9jaygpXG4gICAgICByZXR1cm4gcHJvbWlzZVxuICAgIH1cblxuICAgIGNvbnN0IHNwbGl0UGF0aCA9IHBhdGguc3BsaXQoJyMnKVxuICAgIGNvbnN0IHBhdGhOb0FuY2hvciA9IHNwbGl0UGF0aFswXVxuICAgIGNvbnN0IGFuY2hvciA9IHNwbGl0UGF0aFsxXVxuXG4gICAgbGV0IGZpbmFsUGF0aCA9IHBhdGhcbiAgICBpZiAodXNlVXJsUGFyYW1zKSB7XG4gICAgICBmaW5hbFBhdGggPSBwYXRoTm9BbmNob3JcbiAgICAgIGNvbnN0IGhhc1ZhbHVlcyA9ICFmaWx0ZXJlZEZvcm1EYXRhLmtleXMoKS5uZXh0KCkuZG9uZVxuICAgICAgaWYgKGhhc1ZhbHVlcykge1xuICAgICAgICBpZiAoZmluYWxQYXRoLmluZGV4T2YoJz8nKSA8IDApIHtcbiAgICAgICAgICBmaW5hbFBhdGggKz0gJz8nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmluYWxQYXRoICs9ICcmJ1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsUGF0aCArPSB1cmxFbmNvZGUoZmlsdGVyZWRGb3JtRGF0YSlcbiAgICAgICAgaWYgKGFuY2hvcikge1xuICAgICAgICAgIGZpbmFsUGF0aCArPSAnIycgKyBhbmNob3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdmVyaWZ5UGF0aChlbHQsIGZpbmFsUGF0aCwgcmVxdWVzdENvbmZpZykpIHtcbiAgICAgIHRyaWdnZXJFcnJvckV2ZW50KGVsdCwgJ2h0bXg6aW52YWxpZFBhdGgnLCByZXF1ZXN0Q29uZmlnKVxuICAgICAgbWF5YmVDYWxsKHJlamVjdClcbiAgICAgIHJldHVybiBwcm9taXNlXG4gICAgfVxuXG4gICAgeGhyLm9wZW4odmVyYi50b1VwcGVyQ2FzZSgpLCBmaW5hbFBhdGgsIHRydWUpXG4gICAgeGhyLm92ZXJyaWRlTWltZVR5cGUoJ3RleHQvaHRtbCcpXG4gICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHJlcXVlc3RDb25maWcud2l0aENyZWRlbnRpYWxzXG4gICAgeGhyLnRpbWVvdXQgPSByZXF1ZXN0Q29uZmlnLnRpbWVvdXRcblxuICAgIC8vIHJlcXVlc3QgaGVhZGVyc1xuICAgIGlmIChyZXF1ZXN0QXR0clZhbHVlcy5ub0hlYWRlcnMpIHtcbiAgICAvLyBpZ25vcmUgYWxsIGhlYWRlcnNcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICBpZiAoaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoZWFkZXIpKSB7XG4gICAgICAgICAgY29uc3QgaGVhZGVyVmFsdWUgPSBoZWFkZXJzW2hlYWRlcl1cbiAgICAgICAgICBzYWZlbHlTZXRIZWFkZXJWYWx1ZSh4aHIsIGhlYWRlciwgaGVhZGVyVmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0h0bXhSZXNwb25zZUluZm99ICovXG4gICAgY29uc3QgcmVzcG9uc2VJbmZvID0ge1xuICAgICAgeGhyLFxuICAgICAgdGFyZ2V0LFxuICAgICAgcmVxdWVzdENvbmZpZyxcbiAgICAgIGV0YyxcbiAgICAgIGJvb3N0ZWQ6IGVsdElzQm9vc3RlZCxcbiAgICAgIHNlbGVjdCxcbiAgICAgIHBhdGhJbmZvOiB7XG4gICAgICAgIHJlcXVlc3RQYXRoOiBwYXRoLFxuICAgICAgICBmaW5hbFJlcXVlc3RQYXRoOiBmaW5hbFBhdGgsXG4gICAgICAgIHJlc3BvbnNlUGF0aDogbnVsbCxcbiAgICAgICAgYW5jaG9yXG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGllcmFyY2h5ID0gaGllcmFyY2h5Rm9yRWx0KGVsdClcbiAgICAgICAgcmVzcG9uc2VJbmZvLnBhdGhJbmZvLnJlc3BvbnNlUGF0aCA9IGdldFBhdGhGcm9tUmVzcG9uc2UoeGhyKVxuICAgICAgICByZXNwb25zZUhhbmRsZXIoZWx0LCByZXNwb25zZUluZm8pXG4gICAgICAgIGlmIChyZXNwb25zZUluZm8ua2VlcEluZGljYXRvcnMgIT09IHRydWUpIHtcbiAgICAgICAgICByZW1vdmVSZXF1ZXN0SW5kaWNhdG9ycyhpbmRpY2F0b3JzLCBkaXNhYmxlRWx0cylcbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDphZnRlclJlcXVlc3QnLCByZXNwb25zZUluZm8pXG4gICAgICAgIHRyaWdnZXJFdmVudChlbHQsICdodG14OmFmdGVyT25Mb2FkJywgcmVzcG9uc2VJbmZvKVxuICAgICAgICAvLyBpZiB0aGUgYm9keSBubyBsb25nZXIgY29udGFpbnMgdGhlIGVsZW1lbnQsIHRyaWdnZXIgdGhlIGV2ZW50IG9uIHRoZSBjbG9zZXN0IHBhcmVudFxuICAgICAgICAvLyByZW1haW5pbmcgaW4gdGhlIERPTVxuICAgICAgICBpZiAoIWJvZHlDb250YWlucyhlbHQpKSB7XG4gICAgICAgICAgbGV0IHNlY29uZGFyeVRyaWdnZXJFbHQgPSBudWxsXG4gICAgICAgICAgd2hpbGUgKGhpZXJhcmNoeS5sZW5ndGggPiAwICYmIHNlY29uZGFyeVRyaWdnZXJFbHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50RWx0SW5IaWVyYXJjaHkgPSBoaWVyYXJjaHkuc2hpZnQoKVxuICAgICAgICAgICAgaWYgKGJvZHlDb250YWlucyhwYXJlbnRFbHRJbkhpZXJhcmNoeSkpIHtcbiAgICAgICAgICAgICAgc2Vjb25kYXJ5VHJpZ2dlckVsdCA9IHBhcmVudEVsdEluSGllcmFyY2h5XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzZWNvbmRhcnlUcmlnZ2VyRWx0KSB7XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoc2Vjb25kYXJ5VHJpZ2dlckVsdCwgJ2h0bXg6YWZ0ZXJSZXF1ZXN0JywgcmVzcG9uc2VJbmZvKVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KHNlY29uZGFyeVRyaWdnZXJFbHQsICdodG14OmFmdGVyT25Mb2FkJywgcmVzcG9uc2VJbmZvKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtYXliZUNhbGwocmVzb2x2ZSlcbiAgICAgICAgZW5kUmVxdWVzdExvY2soKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cmlnZ2VyRXJyb3JFdmVudChlbHQsICdodG14Om9uTG9hZEVycm9yJywgbWVyZ2VPYmplY3RzKHsgZXJyb3I6IGUgfSwgcmVzcG9uc2VJbmZvKSlcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH1cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVtb3ZlUmVxdWVzdEluZGljYXRvcnMoaW5kaWNhdG9ycywgZGlzYWJsZUVsdHMpXG4gICAgICB0cmlnZ2VyRXJyb3JFdmVudChlbHQsICdodG14OmFmdGVyUmVxdWVzdCcsIHJlc3BvbnNlSW5mbylcbiAgICAgIHRyaWdnZXJFcnJvckV2ZW50KGVsdCwgJ2h0bXg6c2VuZEVycm9yJywgcmVzcG9uc2VJbmZvKVxuICAgICAgbWF5YmVDYWxsKHJlamVjdClcbiAgICAgIGVuZFJlcXVlc3RMb2NrKClcbiAgICB9XG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlbW92ZVJlcXVlc3RJbmRpY2F0b3JzKGluZGljYXRvcnMsIGRpc2FibGVFbHRzKVxuICAgICAgdHJpZ2dlckVycm9yRXZlbnQoZWx0LCAnaHRteDphZnRlclJlcXVlc3QnLCByZXNwb25zZUluZm8pXG4gICAgICB0cmlnZ2VyRXJyb3JFdmVudChlbHQsICdodG14OnNlbmRBYm9ydCcsIHJlc3BvbnNlSW5mbylcbiAgICAgIG1heWJlQ2FsbChyZWplY3QpXG4gICAgICBlbmRSZXF1ZXN0TG9jaygpXG4gICAgfVxuICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlbW92ZVJlcXVlc3RJbmRpY2F0b3JzKGluZGljYXRvcnMsIGRpc2FibGVFbHRzKVxuICAgICAgdHJpZ2dlckVycm9yRXZlbnQoZWx0LCAnaHRteDphZnRlclJlcXVlc3QnLCByZXNwb25zZUluZm8pXG4gICAgICB0cmlnZ2VyRXJyb3JFdmVudChlbHQsICdodG14OnRpbWVvdXQnLCByZXNwb25zZUluZm8pXG4gICAgICBtYXliZUNhbGwocmVqZWN0KVxuICAgICAgZW5kUmVxdWVzdExvY2soKVxuICAgIH1cbiAgICBpZiAoIXRyaWdnZXJFdmVudChlbHQsICdodG14OmJlZm9yZVJlcXVlc3QnLCByZXNwb25zZUluZm8pKSB7XG4gICAgICBtYXliZUNhbGwocmVzb2x2ZSlcbiAgICAgIGVuZFJlcXVlc3RMb2NrKClcbiAgICAgIHJldHVybiBwcm9taXNlXG4gICAgfVxuICAgIHZhciBpbmRpY2F0b3JzID0gYWRkUmVxdWVzdEluZGljYXRvckNsYXNzZXMoZWx0KVxuICAgIHZhciBkaXNhYmxlRWx0cyA9IGRpc2FibGVFbGVtZW50cyhlbHQpXG5cbiAgICBmb3JFYWNoKFsnbG9hZHN0YXJ0JywgJ2xvYWRlbmQnLCAncHJvZ3Jlc3MnLCAnYWJvcnQnXSwgZnVuY3Rpb24oZXZlbnROYW1lKSB7XG4gICAgICBmb3JFYWNoKFt4aHIsIHhoci51cGxvYWRdLCBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIHRyaWdnZXJFdmVudChlbHQsICdodG14OnhocjonICsgZXZlbnROYW1lLCB7XG4gICAgICAgICAgICBsZW5ndGhDb21wdXRhYmxlOiBldmVudC5sZW5ndGhDb21wdXRhYmxlLFxuICAgICAgICAgICAgbG9hZGVkOiBldmVudC5sb2FkZWQsXG4gICAgICAgICAgICB0b3RhbDogZXZlbnQudG90YWxcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICAgIHRyaWdnZXJFdmVudChlbHQsICdodG14OmJlZm9yZVNlbmQnLCByZXNwb25zZUluZm8pXG4gICAgY29uc3QgcGFyYW1zID0gdXNlVXJsUGFyYW1zID8gbnVsbCA6IGVuY29kZVBhcmFtc0ZvckJvZHkoeGhyLCBlbHQsIGZpbHRlcmVkRm9ybURhdGEpXG4gICAgeGhyLnNlbmQocGFyYW1zKVxuICAgIHJldHVybiBwcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gSHRteEhpc3RvcnlVcGRhdGVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gW3R5cGVdXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtwYXRoXVxuICAgKi9cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHBhcmFtIHtIdG14UmVzcG9uc2VJbmZvfSByZXNwb25zZUluZm9cbiAgICogQHJldHVybiB7SHRteEhpc3RvcnlVcGRhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBkZXRlcm1pbmVIaXN0b3J5VXBkYXRlcyhlbHQsIHJlc3BvbnNlSW5mbykge1xuICAgIGNvbnN0IHhociA9IHJlc3BvbnNlSW5mby54aHJcblxuICAgIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBGaXJzdCBjb25zdWx0IHJlc3BvbnNlIGhlYWRlcnNcbiAgICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgbGV0IHBhdGhGcm9tSGVhZGVycyA9IG51bGxcbiAgICBsZXQgdHlwZUZyb21IZWFkZXJzID0gbnVsbFxuICAgIGlmIChoYXNIZWFkZXIoeGhyLCAvSFgtUHVzaDovaSkpIHtcbiAgICAgIHBhdGhGcm9tSGVhZGVycyA9IHhoci5nZXRSZXNwb25zZUhlYWRlcignSFgtUHVzaCcpXG4gICAgICB0eXBlRnJvbUhlYWRlcnMgPSAncHVzaCdcbiAgICB9IGVsc2UgaWYgKGhhc0hlYWRlcih4aHIsIC9IWC1QdXNoLVVybDovaSkpIHtcbiAgICAgIHBhdGhGcm9tSGVhZGVycyA9IHhoci5nZXRSZXNwb25zZUhlYWRlcignSFgtUHVzaC1VcmwnKVxuICAgICAgdHlwZUZyb21IZWFkZXJzID0gJ3B1c2gnXG4gICAgfSBlbHNlIGlmIChoYXNIZWFkZXIoeGhyLCAvSFgtUmVwbGFjZS1Vcmw6L2kpKSB7XG4gICAgICBwYXRoRnJvbUhlYWRlcnMgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0hYLVJlcGxhY2UtVXJsJylcbiAgICAgIHR5cGVGcm9tSGVhZGVycyA9ICdyZXBsYWNlJ1xuICAgIH1cblxuICAgIC8vIGlmIHRoZXJlIHdhcyBhIHJlc3BvbnNlIGhlYWRlciwgdGhhdCBoYXMgcHJpb3JpdHlcbiAgICBpZiAocGF0aEZyb21IZWFkZXJzKSB7XG4gICAgICBpZiAocGF0aEZyb21IZWFkZXJzID09PSAnZmFsc2UnKSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiB0eXBlRnJvbUhlYWRlcnMsXG4gICAgICAgICAgcGF0aDogcGF0aEZyb21IZWFkZXJzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTmV4dCByZXNvbHZlIHZpYSBET00gdmFsdWVzXG4gICAgLy89ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gcmVzcG9uc2VJbmZvLnBhdGhJbmZvLmZpbmFsUmVxdWVzdFBhdGhcbiAgICBjb25zdCByZXNwb25zZVBhdGggPSByZXNwb25zZUluZm8ucGF0aEluZm8ucmVzcG9uc2VQYXRoXG5cbiAgICBjb25zdCBwdXNoVXJsID0gZ2V0Q2xvc2VzdEF0dHJpYnV0ZVZhbHVlKGVsdCwgJ2h4LXB1c2gtdXJsJylcbiAgICBjb25zdCByZXBsYWNlVXJsID0gZ2V0Q2xvc2VzdEF0dHJpYnV0ZVZhbHVlKGVsdCwgJ2h4LXJlcGxhY2UtdXJsJylcbiAgICBjb25zdCBlbGVtZW50SXNCb29zdGVkID0gZ2V0SW50ZXJuYWxEYXRhKGVsdCkuYm9vc3RlZFxuXG4gICAgbGV0IHNhdmVUeXBlID0gbnVsbFxuICAgIGxldCBwYXRoID0gbnVsbFxuXG4gICAgaWYgKHB1c2hVcmwpIHtcbiAgICAgIHNhdmVUeXBlID0gJ3B1c2gnXG4gICAgICBwYXRoID0gcHVzaFVybFxuICAgIH0gZWxzZSBpZiAocmVwbGFjZVVybCkge1xuICAgICAgc2F2ZVR5cGUgPSAncmVwbGFjZSdcbiAgICAgIHBhdGggPSByZXBsYWNlVXJsXG4gICAgfSBlbHNlIGlmIChlbGVtZW50SXNCb29zdGVkKSB7XG4gICAgICBzYXZlVHlwZSA9ICdwdXNoJ1xuICAgICAgcGF0aCA9IHJlc3BvbnNlUGF0aCB8fCByZXF1ZXN0UGF0aCAvLyBpZiB0aGVyZSBpcyBubyByZXNwb25zZSBwYXRoLCBnbyB3aXRoIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHBhdGhcbiAgICB9XG5cbiAgICBpZiAocGF0aCkge1xuICAgIC8vIGZhbHNlIGluZGljYXRlcyBubyBwdXNoLCByZXR1cm4gZW1wdHkgb2JqZWN0XG4gICAgICBpZiAocGF0aCA9PT0gJ2ZhbHNlJykge1xuICAgICAgICByZXR1cm4ge31cbiAgICAgIH1cblxuICAgICAgLy8gdHJ1ZSBpbmRpY2F0ZXMgd2Ugd2FudCB0byBmb2xsb3cgd2hlcmV2ZXIgdGhlIHNlcnZlciBlbmRlZCB1cCBzZW5kaW5nIHVzXG4gICAgICBpZiAocGF0aCA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHBhdGggPSByZXNwb25zZVBhdGggfHwgcmVxdWVzdFBhdGggLy8gaWYgdGhlcmUgaXMgbm8gcmVzcG9uc2UgcGF0aCwgZ28gd2l0aCB0aGUgb3JpZ2luYWwgcmVxdWVzdCBwYXRoXG4gICAgICB9XG5cbiAgICAgIC8vIHJlc3RvcmUgYW55IGFuY2hvciBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3RcbiAgICAgIGlmIChyZXNwb25zZUluZm8ucGF0aEluZm8uYW5jaG9yICYmIHBhdGguaW5kZXhPZignIycpID09PSAtMSkge1xuICAgICAgICBwYXRoID0gcGF0aCArICcjJyArIHJlc3BvbnNlSW5mby5wYXRoSW5mby5hbmNob3JcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogc2F2ZVR5cGUsXG4gICAgICAgIHBhdGhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SHRteFJlc3BvbnNlSGFuZGxpbmdDb25maWd9IHJlc3BvbnNlSGFuZGxpbmdDb25maWdcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gY29kZU1hdGNoZXMocmVzcG9uc2VIYW5kbGluZ0NvbmZpZywgc3RhdHVzKSB7XG4gICAgdmFyIHJlZ0V4cCA9IG5ldyBSZWdFeHAocmVzcG9uc2VIYW5kbGluZ0NvbmZpZy5jb2RlKVxuICAgIHJldHVybiByZWdFeHAudGVzdChzdGF0dXMudG9TdHJpbmcoMTApKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7WE1MSHR0cFJlcXVlc3R9IHhoclxuICAgKiBAcmV0dXJuIHtIdG14UmVzcG9uc2VIYW5kbGluZ0NvbmZpZ31cbiAgICovXG4gIGZ1bmN0aW9uIHJlc29sdmVSZXNwb25zZUhhbmRsaW5nKHhocikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaHRteC5jb25maWcucmVzcG9uc2VIYW5kbGluZy5sZW5ndGg7IGkrKykge1xuICAgICAgLyoqIEB0eXBlIEh0bXhSZXNwb25zZUhhbmRsaW5nQ29uZmlnICovXG4gICAgICB2YXIgcmVzcG9uc2VIYW5kbGluZ0VsZW1lbnQgPSBodG14LmNvbmZpZy5yZXNwb25zZUhhbmRsaW5nW2ldXG4gICAgICBpZiAoY29kZU1hdGNoZXMocmVzcG9uc2VIYW5kbGluZ0VsZW1lbnQsIHhoci5zdGF0dXMpKSB7XG4gICAgICAgIHJldHVybiByZXNwb25zZUhhbmRsaW5nRWxlbWVudFxuICAgICAgfVxuICAgIH1cbiAgICAvLyBubyBtYXRjaGVzLCByZXR1cm4gbm8gc3dhcFxuICAgIHJldHVybiB7XG4gICAgICBzd2FwOiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZVRpdGxlKHRpdGxlKSB7XG4gICAgaWYgKHRpdGxlKSB7XG4gICAgICBjb25zdCB0aXRsZUVsdCA9IGZpbmQoJ3RpdGxlJylcbiAgICAgIGlmICh0aXRsZUVsdCkge1xuICAgICAgICB0aXRsZUVsdC5pbm5lckhUTUwgPSB0aXRsZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LnRpdGxlID0gdGl0bGVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHBhcmFtIHtIdG14UmVzcG9uc2VJbmZvfSByZXNwb25zZUluZm9cbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUFqYXhSZXNwb25zZShlbHQsIHJlc3BvbnNlSW5mbykge1xuICAgIGNvbnN0IHhociA9IHJlc3BvbnNlSW5mby54aHJcbiAgICBsZXQgdGFyZ2V0ID0gcmVzcG9uc2VJbmZvLnRhcmdldFxuICAgIGNvbnN0IGV0YyA9IHJlc3BvbnNlSW5mby5ldGNcbiAgICBjb25zdCByZXNwb25zZUluZm9TZWxlY3QgPSByZXNwb25zZUluZm8uc2VsZWN0XG5cbiAgICBpZiAoIXRyaWdnZXJFdmVudChlbHQsICdodG14OmJlZm9yZU9uTG9hZCcsIHJlc3BvbnNlSW5mbykpIHJldHVyblxuXG4gICAgaWYgKGhhc0hlYWRlcih4aHIsIC9IWC1UcmlnZ2VyOi9pKSkge1xuICAgICAgaGFuZGxlVHJpZ2dlckhlYWRlcih4aHIsICdIWC1UcmlnZ2VyJywgZWx0KVxuICAgIH1cblxuICAgIGlmIChoYXNIZWFkZXIoeGhyLCAvSFgtTG9jYXRpb246L2kpKSB7XG4gICAgICBzYXZlQ3VycmVudFBhZ2VUb0hpc3RvcnkoKVxuICAgICAgbGV0IHJlZGlyZWN0UGF0aCA9IHhoci5nZXRSZXNwb25zZUhlYWRlcignSFgtTG9jYXRpb24nKVxuICAgICAgLyoqIEB0eXBlIHtIdG14QWpheEhlbHBlckNvbnRleHQme3BhdGg6c3RyaW5nfX0gKi9cbiAgICAgIHZhciByZWRpcmVjdFN3YXBTcGVjXG4gICAgICBpZiAocmVkaXJlY3RQYXRoLmluZGV4T2YoJ3snKSA9PT0gMCkge1xuICAgICAgICByZWRpcmVjdFN3YXBTcGVjID0gcGFyc2VKU09OKHJlZGlyZWN0UGF0aClcbiAgICAgICAgLy8gd2hhdCdzIHRoZSBiZXN0IHdheSB0byB0aHJvdyBhbiBlcnJvciBpZiB0aGUgdXNlciBkaWRuJ3QgaW5jbHVkZSB0aGlzXG4gICAgICAgIHJlZGlyZWN0UGF0aCA9IHJlZGlyZWN0U3dhcFNwZWMucGF0aFxuICAgICAgICBkZWxldGUgcmVkaXJlY3RTd2FwU3BlYy5wYXRoXG4gICAgICB9XG4gICAgICBhamF4SGVscGVyKCdnZXQnLCByZWRpcmVjdFBhdGgsIHJlZGlyZWN0U3dhcFNwZWMpLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgIHB1c2hVcmxJbnRvSGlzdG9yeShyZWRpcmVjdFBhdGgpXG4gICAgICB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkUmVmcmVzaCA9IGhhc0hlYWRlcih4aHIsIC9IWC1SZWZyZXNoOi9pKSAmJiB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0hYLVJlZnJlc2gnKSA9PT0gJ3RydWUnXG5cbiAgICBpZiAoaGFzSGVhZGVyKHhociwgL0hYLVJlZGlyZWN0Oi9pKSkge1xuICAgICAgcmVzcG9uc2VJbmZvLmtlZXBJbmRpY2F0b3JzID0gdHJ1ZVxuICAgICAgbG9jYXRpb24uaHJlZiA9IHhoci5nZXRSZXNwb25zZUhlYWRlcignSFgtUmVkaXJlY3QnKVxuICAgICAgc2hvdWxkUmVmcmVzaCAmJiBsb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFJlZnJlc2gpIHtcbiAgICAgIHJlc3BvbnNlSW5mby5rZWVwSW5kaWNhdG9ycyA9IHRydWVcbiAgICAgIGxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaGFzSGVhZGVyKHhociwgL0hYLVJldGFyZ2V0Oi9pKSkge1xuICAgICAgaWYgKHhoci5nZXRSZXNwb25zZUhlYWRlcignSFgtUmV0YXJnZXQnKSA9PT0gJ3RoaXMnKSB7XG4gICAgICAgIHJlc3BvbnNlSW5mby50YXJnZXQgPSBlbHRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlSW5mby50YXJnZXQgPSBhc0VsZW1lbnQocXVlcnlTZWxlY3RvckV4dChlbHQsIHhoci5nZXRSZXNwb25zZUhlYWRlcignSFgtUmV0YXJnZXQnKSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGlzdG9yeVVwZGF0ZSA9IGRldGVybWluZUhpc3RvcnlVcGRhdGVzKGVsdCwgcmVzcG9uc2VJbmZvKVxuXG4gICAgY29uc3QgcmVzcG9uc2VIYW5kbGluZyA9IHJlc29sdmVSZXNwb25zZUhhbmRsaW5nKHhocilcbiAgICBjb25zdCBzaG91bGRTd2FwID0gcmVzcG9uc2VIYW5kbGluZy5zd2FwXG4gICAgbGV0IGlzRXJyb3IgPSAhIXJlc3BvbnNlSGFuZGxpbmcuZXJyb3JcbiAgICBsZXQgaWdub3JlVGl0bGUgPSBodG14LmNvbmZpZy5pZ25vcmVUaXRsZSB8fCByZXNwb25zZUhhbmRsaW5nLmlnbm9yZVRpdGxlXG4gICAgbGV0IHNlbGVjdE92ZXJyaWRlID0gcmVzcG9uc2VIYW5kbGluZy5zZWxlY3RcbiAgICBpZiAocmVzcG9uc2VIYW5kbGluZy50YXJnZXQpIHtcbiAgICAgIHJlc3BvbnNlSW5mby50YXJnZXQgPSBhc0VsZW1lbnQocXVlcnlTZWxlY3RvckV4dChlbHQsIHJlc3BvbnNlSGFuZGxpbmcudGFyZ2V0KSlcbiAgICB9XG4gICAgdmFyIHN3YXBPdmVycmlkZSA9IGV0Yy5zd2FwT3ZlcnJpZGVcbiAgICBpZiAoc3dhcE92ZXJyaWRlID09IG51bGwgJiYgcmVzcG9uc2VIYW5kbGluZy5zd2FwT3ZlcnJpZGUpIHtcbiAgICAgIHN3YXBPdmVycmlkZSA9IHJlc3BvbnNlSGFuZGxpbmcuc3dhcE92ZXJyaWRlXG4gICAgfVxuXG4gICAgLy8gcmVzcG9uc2UgaGVhZGVycyBvdmVycmlkZSByZXNwb25zZSBoYW5kbGluZyBjb25maWdcbiAgICBpZiAoaGFzSGVhZGVyKHhociwgL0hYLVJldGFyZ2V0Oi9pKSkge1xuICAgICAgaWYgKHhoci5nZXRSZXNwb25zZUhlYWRlcignSFgtUmV0YXJnZXQnKSA9PT0gJ3RoaXMnKSB7XG4gICAgICAgIHJlc3BvbnNlSW5mby50YXJnZXQgPSBlbHRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlSW5mby50YXJnZXQgPSBhc0VsZW1lbnQocXVlcnlTZWxlY3RvckV4dChlbHQsIHhoci5nZXRSZXNwb25zZUhlYWRlcignSFgtUmV0YXJnZXQnKSkpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNIZWFkZXIoeGhyLCAvSFgtUmVzd2FwOi9pKSkge1xuICAgICAgc3dhcE92ZXJyaWRlID0geGhyLmdldFJlc3BvbnNlSGVhZGVyKCdIWC1SZXN3YXAnKVxuICAgIH1cblxuICAgIHZhciBzZXJ2ZXJSZXNwb25zZSA9IHhoci5yZXNwb25zZVxuICAgIC8qKiBAdHlwZSBIdG14QmVmb3JlU3dhcERldGFpbHMgKi9cbiAgICB2YXIgYmVmb3JlU3dhcERldGFpbHMgPSBtZXJnZU9iamVjdHMoe1xuICAgICAgc2hvdWxkU3dhcCxcbiAgICAgIHNlcnZlclJlc3BvbnNlLFxuICAgICAgaXNFcnJvcixcbiAgICAgIGlnbm9yZVRpdGxlLFxuICAgICAgc2VsZWN0T3ZlcnJpZGVcbiAgICB9LCByZXNwb25zZUluZm8pXG5cbiAgICBpZiAocmVzcG9uc2VIYW5kbGluZy5ldmVudCAmJiAhdHJpZ2dlckV2ZW50KHRhcmdldCwgcmVzcG9uc2VIYW5kbGluZy5ldmVudCwgYmVmb3JlU3dhcERldGFpbHMpKSByZXR1cm5cblxuICAgIGlmICghdHJpZ2dlckV2ZW50KHRhcmdldCwgJ2h0bXg6YmVmb3JlU3dhcCcsIGJlZm9yZVN3YXBEZXRhaWxzKSkgcmV0dXJuXG5cbiAgICB0YXJnZXQgPSBiZWZvcmVTd2FwRGV0YWlscy50YXJnZXQgLy8gYWxsb3cgcmUtdGFyZ2V0aW5nXG4gICAgc2VydmVyUmVzcG9uc2UgPSBiZWZvcmVTd2FwRGV0YWlscy5zZXJ2ZXJSZXNwb25zZSAvLyBhbGxvdyB1cGRhdGluZyBjb250ZW50XG4gICAgaXNFcnJvciA9IGJlZm9yZVN3YXBEZXRhaWxzLmlzRXJyb3IgLy8gYWxsb3cgdXBkYXRpbmcgZXJyb3JcbiAgICBpZ25vcmVUaXRsZSA9IGJlZm9yZVN3YXBEZXRhaWxzLmlnbm9yZVRpdGxlIC8vIGFsbG93IHVwZGF0aW5nIGlnbm9yaW5nIHRpdGxlXG4gICAgc2VsZWN0T3ZlcnJpZGUgPSBiZWZvcmVTd2FwRGV0YWlscy5zZWxlY3RPdmVycmlkZSAvLyBhbGxvdyB1cGRhdGluZyBzZWxlY3Qgb3ZlcnJpZGVcblxuICAgIHJlc3BvbnNlSW5mby50YXJnZXQgPSB0YXJnZXQgLy8gTWFrZSB1cGRhdGVkIHRhcmdldCBhdmFpbGFibGUgdG8gcmVzcG9uc2UgZXZlbnRzXG4gICAgcmVzcG9uc2VJbmZvLmZhaWxlZCA9IGlzRXJyb3IgLy8gTWFrZSBmYWlsZWQgcHJvcGVydHkgYXZhaWxhYmxlIHRvIHJlc3BvbnNlIGV2ZW50c1xuICAgIHJlc3BvbnNlSW5mby5zdWNjZXNzZnVsID0gIWlzRXJyb3IgLy8gTWFrZSBzdWNjZXNzZnVsIHByb3BlcnR5IGF2YWlsYWJsZSB0byByZXNwb25zZSBldmVudHNcblxuICAgIGlmIChiZWZvcmVTd2FwRGV0YWlscy5zaG91bGRTd2FwKSB7XG4gICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjg2KSB7XG4gICAgICAgIGNhbmNlbFBvbGxpbmcoZWx0KVxuICAgICAgfVxuXG4gICAgICB3aXRoRXh0ZW5zaW9ucyhlbHQsIGZ1bmN0aW9uKGV4dGVuc2lvbikge1xuICAgICAgICBzZXJ2ZXJSZXNwb25zZSA9IGV4dGVuc2lvbi50cmFuc2Zvcm1SZXNwb25zZShzZXJ2ZXJSZXNwb25zZSwgeGhyLCBlbHQpXG4gICAgICB9KVxuXG4gICAgICAvLyBTYXZlIGN1cnJlbnQgcGFnZSBpZiB0aGVyZSB3aWxsIGJlIGEgaGlzdG9yeSB1cGRhdGVcbiAgICAgIGlmIChoaXN0b3J5VXBkYXRlLnR5cGUpIHtcbiAgICAgICAgc2F2ZUN1cnJlbnRQYWdlVG9IaXN0b3J5KClcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc0hlYWRlcih4aHIsIC9IWC1SZXN3YXA6L2kpKSB7XG4gICAgICAgIHN3YXBPdmVycmlkZSA9IHhoci5nZXRSZXNwb25zZUhlYWRlcignSFgtUmVzd2FwJylcbiAgICAgIH1cbiAgICAgIHZhciBzd2FwU3BlYyA9IGdldFN3YXBTcGVjaWZpY2F0aW9uKGVsdCwgc3dhcE92ZXJyaWRlKVxuXG4gICAgICBpZiAoIXN3YXBTcGVjLmhhc093blByb3BlcnR5KCdpZ25vcmVUaXRsZScpKSB7XG4gICAgICAgIHN3YXBTcGVjLmlnbm9yZVRpdGxlID0gaWdub3JlVGl0bGVcbiAgICAgIH1cblxuICAgICAgdGFyZ2V0LmNsYXNzTGlzdC5hZGQoaHRteC5jb25maWcuc3dhcHBpbmdDbGFzcylcblxuICAgICAgLy8gb3B0aW9uYWwgdHJhbnNpdGlvbiBBUEkgcHJvbWlzZSBjYWxsYmFja3NcbiAgICAgIGxldCBzZXR0bGVSZXNvbHZlID0gbnVsbFxuICAgICAgbGV0IHNldHRsZVJlamVjdCA9IG51bGxcblxuICAgICAgaWYgKHJlc3BvbnNlSW5mb1NlbGVjdCkge1xuICAgICAgICBzZWxlY3RPdmVycmlkZSA9IHJlc3BvbnNlSW5mb1NlbGVjdFxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzSGVhZGVyKHhociwgL0hYLVJlc2VsZWN0Oi9pKSkge1xuICAgICAgICBzZWxlY3RPdmVycmlkZSA9IHhoci5nZXRSZXNwb25zZUhlYWRlcignSFgtUmVzZWxlY3QnKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZWxlY3RPT0IgPSBnZXRDbG9zZXN0QXR0cmlidXRlVmFsdWUoZWx0LCAnaHgtc2VsZWN0LW9vYicpXG4gICAgICBjb25zdCBzZWxlY3QgPSBnZXRDbG9zZXN0QXR0cmlidXRlVmFsdWUoZWx0LCAnaHgtc2VsZWN0JylcblxuICAgICAgbGV0IGRvU3dhcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIGlmIHdlIG5lZWQgdG8gc2F2ZSBoaXN0b3J5LCBkbyBzbywgYmVmb3JlIHN3YXBwaW5nIHNvIHRoYXQgcmVsYXRpdmUgcmVzb3VyY2VzIGhhdmUgdGhlIGNvcnJlY3QgYmFzZSBVUkxcbiAgICAgICAgICBpZiAoaGlzdG9yeVVwZGF0ZS50eXBlKSB7XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoZ2V0RG9jdW1lbnQoKS5ib2R5LCAnaHRteDpiZWZvcmVIaXN0b3J5VXBkYXRlJywgbWVyZ2VPYmplY3RzKHsgaGlzdG9yeTogaGlzdG9yeVVwZGF0ZSB9LCByZXNwb25zZUluZm8pKVxuICAgICAgICAgICAgaWYgKGhpc3RvcnlVcGRhdGUudHlwZSA9PT0gJ3B1c2gnKSB7XG4gICAgICAgICAgICAgIHB1c2hVcmxJbnRvSGlzdG9yeShoaXN0b3J5VXBkYXRlLnBhdGgpXG4gICAgICAgICAgICAgIHRyaWdnZXJFdmVudChnZXREb2N1bWVudCgpLmJvZHksICdodG14OnB1c2hlZEludG9IaXN0b3J5JywgeyBwYXRoOiBoaXN0b3J5VXBkYXRlLnBhdGggfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlcGxhY2VVcmxJbkhpc3RvcnkoaGlzdG9yeVVwZGF0ZS5wYXRoKVxuICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoZ2V0RG9jdW1lbnQoKS5ib2R5LCAnaHRteDpyZXBsYWNlZEluSGlzdG9yeScsIHsgcGF0aDogaGlzdG9yeVVwZGF0ZS5wYXRoIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3dhcCh0YXJnZXQsIHNlcnZlclJlc3BvbnNlLCBzd2FwU3BlYywge1xuICAgICAgICAgICAgc2VsZWN0OiBzZWxlY3RPdmVycmlkZSB8fCBzZWxlY3QsXG4gICAgICAgICAgICBzZWxlY3RPT0IsXG4gICAgICAgICAgICBldmVudEluZm86IHJlc3BvbnNlSW5mbyxcbiAgICAgICAgICAgIGFuY2hvcjogcmVzcG9uc2VJbmZvLnBhdGhJbmZvLmFuY2hvcixcbiAgICAgICAgICAgIGNvbnRleHRFbGVtZW50OiBlbHQsXG4gICAgICAgICAgICBhZnRlclN3YXBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGlmIChoYXNIZWFkZXIoeGhyLCAvSFgtVHJpZ2dlci1BZnRlci1Td2FwOi9pKSkge1xuICAgICAgICAgICAgICAgIGxldCBmaW5hbEVsdCA9IGVsdFxuICAgICAgICAgICAgICAgIGlmICghYm9keUNvbnRhaW5zKGVsdCkpIHtcbiAgICAgICAgICAgICAgICAgIGZpbmFsRWx0ID0gZ2V0RG9jdW1lbnQoKS5ib2R5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhhbmRsZVRyaWdnZXJIZWFkZXIoeGhyLCAnSFgtVHJpZ2dlci1BZnRlci1Td2FwJywgZmluYWxFbHQpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZnRlclNldHRsZUNhbGxiYWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgaWYgKGhhc0hlYWRlcih4aHIsIC9IWC1UcmlnZ2VyLUFmdGVyLVNldHRsZTovaSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgZmluYWxFbHQgPSBlbHRcbiAgICAgICAgICAgICAgICBpZiAoIWJvZHlDb250YWlucyhlbHQpKSB7XG4gICAgICAgICAgICAgICAgICBmaW5hbEVsdCA9IGdldERvY3VtZW50KCkuYm9keVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoYW5kbGVUcmlnZ2VySGVhZGVyKHhociwgJ0hYLVRyaWdnZXItQWZ0ZXItU2V0dGxlJywgZmluYWxFbHQpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbWF5YmVDYWxsKHNldHRsZVJlc29sdmUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRyaWdnZXJFcnJvckV2ZW50KGVsdCwgJ2h0bXg6c3dhcEVycm9yJywgcmVzcG9uc2VJbmZvKVxuICAgICAgICAgIG1heWJlQ2FsbChzZXR0bGVSZWplY3QpXG4gICAgICAgICAgdGhyb3cgZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBzaG91bGRUcmFuc2l0aW9uID0gaHRteC5jb25maWcuZ2xvYmFsVmlld1RyYW5zaXRpb25zXG4gICAgICBpZiAoc3dhcFNwZWMuaGFzT3duUHJvcGVydHkoJ3RyYW5zaXRpb24nKSkge1xuICAgICAgICBzaG91bGRUcmFuc2l0aW9uID0gc3dhcFNwZWMudHJhbnNpdGlvblxuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVHJhbnNpdGlvbiAmJlxuICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDpiZWZvcmVUcmFuc2l0aW9uJywgcmVzcG9uc2VJbmZvKSAmJlxuICAgICAgICAgICAgICB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBleHBlcmltZW50YWwgZmVhdHVyZSBhdG1cbiAgICAgICAgICAgICAgZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbikge1xuICAgICAgICBjb25zdCBzZXR0bGVQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24oX3Jlc29sdmUsIF9yZWplY3QpIHtcbiAgICAgICAgICBzZXR0bGVSZXNvbHZlID0gX3Jlc29sdmVcbiAgICAgICAgICBzZXR0bGVSZWplY3QgPSBfcmVqZWN0XG4gICAgICAgIH0pXG4gICAgICAgIC8vIHdyYXAgdGhlIG9yaWdpbmFsIGRvU3dhcCgpIGluIGEgY2FsbCB0byBzdGFydFZpZXdUcmFuc2l0aW9uKClcbiAgICAgICAgY29uc3QgaW5uZXJEb1N3YXAgPSBkb1N3YXBcbiAgICAgICAgZG9Td2FwID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZSBleHBlcmltZW50YWwgZmVhdHVyZSBhdG1cbiAgICAgICAgICBkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaW5uZXJEb1N3YXAoKVxuICAgICAgICAgICAgcmV0dXJuIHNldHRsZVByb21pc2VcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2FwU3BlYy5zd2FwRGVsYXkgPiAwKSB7XG4gICAgICAgIGdldFdpbmRvdygpLnNldFRpbWVvdXQoZG9Td2FwLCBzd2FwU3BlYy5zd2FwRGVsYXkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb1N3YXAoKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNFcnJvcikge1xuICAgICAgdHJpZ2dlckVycm9yRXZlbnQoZWx0LCAnaHRteDpyZXNwb25zZUVycm9yJywgbWVyZ2VPYmplY3RzKHsgZXJyb3I6ICdSZXNwb25zZSBTdGF0dXMgRXJyb3IgQ29kZSAnICsgeGhyLnN0YXR1cyArICcgZnJvbSAnICsgcmVzcG9uc2VJbmZvLnBhdGhJbmZvLnJlcXVlc3RQYXRoIH0sIHJlc3BvbnNlSW5mbykpXG4gICAgfVxuICB9XG5cbiAgLy89ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRXh0ZW5zaW9ucyBBUElcbiAgLy89ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKiogQHR5cGUge09iamVjdDxzdHJpbmcsIEh0bXhFeHRlbnNpb24+fSAqL1xuICBjb25zdCBleHRlbnNpb25zID0ge31cblxuICAvKipcbiAgICogZXh0ZW5zaW9uQmFzZSBkZWZpbmVzIHRoZSBkZWZhdWx0IGZ1bmN0aW9ucyBmb3IgYWxsIGV4dGVuc2lvbnMuXG4gICAqIEByZXR1cm5zIHtIdG14RXh0ZW5zaW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZXh0ZW5zaW9uQmFzZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5pdDogZnVuY3Rpb24oYXBpKSB7IHJldHVybiBudWxsIH0sXG4gICAgICBnZXRTZWxlY3RvcnM6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbnVsbCB9LFxuICAgICAgb25FdmVudDogZnVuY3Rpb24obmFtZSwgZXZ0KSB7IHJldHVybiB0cnVlIH0sXG4gICAgICB0cmFuc2Zvcm1SZXNwb25zZTogZnVuY3Rpb24odGV4dCwgeGhyLCBlbHQpIHsgcmV0dXJuIHRleHQgfSxcbiAgICAgIGlzSW5saW5lU3dhcDogZnVuY3Rpb24oc3dhcFN0eWxlKSB7IHJldHVybiBmYWxzZSB9LFxuICAgICAgaGFuZGxlU3dhcDogZnVuY3Rpb24oc3dhcFN0eWxlLCB0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKSB7IHJldHVybiBmYWxzZSB9LFxuICAgICAgZW5jb2RlUGFyYW1ldGVyczogZnVuY3Rpb24oeGhyLCBwYXJhbWV0ZXJzLCBlbHQpIHsgcmV0dXJuIG51bGwgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBkZWZpbmVFeHRlbnNpb24gaW5pdGlhbGl6ZXMgdGhlIGV4dGVuc2lvbiBhbmQgYWRkcyBpdCB0byB0aGUgaHRteCByZWdpc3RyeVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vaHRteC5vcmcvYXBpLyNkZWZpbmVFeHRlbnNpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIGV4dGVuc2lvbiBuYW1lXG4gICAqIEBwYXJhbSB7SHRteEV4dGVuc2lvbn0gZXh0ZW5zaW9uIHRoZSBleHRlbnNpb24gZGVmaW5pdGlvblxuICAgKi9cbiAgZnVuY3Rpb24gZGVmaW5lRXh0ZW5zaW9uKG5hbWUsIGV4dGVuc2lvbikge1xuICAgIGlmIChleHRlbnNpb24uaW5pdCkge1xuICAgICAgZXh0ZW5zaW9uLmluaXQoaW50ZXJuYWxBUEkpXG4gICAgfVxuICAgIGV4dGVuc2lvbnNbbmFtZV0gPSBtZXJnZU9iamVjdHMoZXh0ZW5zaW9uQmFzZSgpLCBleHRlbnNpb24pXG4gIH1cblxuICAvKipcbiAgICogcmVtb3ZlRXh0ZW5zaW9uIHJlbW92ZXMgYW4gZXh0ZW5zaW9uIGZyb20gdGhlIGh0bXggcmVnaXN0cnlcbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jcmVtb3ZlRXh0ZW5zaW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmVFeHRlbnNpb24obmFtZSkge1xuICAgIGRlbGV0ZSBleHRlbnNpb25zW25hbWVdXG4gIH1cblxuICAvKipcbiAgICogZ2V0RXh0ZW5zaW9ucyBzZWFyY2hlcyB1cCB0aGUgRE9NIHRyZWUgdG8gcmV0dXJuIGFsbCBleHRlbnNpb25zIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gYSBnaXZlbiBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEBwYXJhbSB7SHRteEV4dGVuc2lvbltdPX0gZXh0ZW5zaW9uc1RvUmV0dXJuXG4gICAqIEBwYXJhbSB7c3RyaW5nW109fSBleHRlbnNpb25zVG9JZ25vcmVcbiAgICogQHJldHVybnMge0h0bXhFeHRlbnNpb25bXX1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEV4dGVuc2lvbnMoZWx0LCBleHRlbnNpb25zVG9SZXR1cm4sIGV4dGVuc2lvbnNUb0lnbm9yZSkge1xuICAgIGlmIChleHRlbnNpb25zVG9SZXR1cm4gPT0gdW5kZWZpbmVkKSB7XG4gICAgICBleHRlbnNpb25zVG9SZXR1cm4gPSBbXVxuICAgIH1cbiAgICBpZiAoZWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV4dGVuc2lvbnNUb1JldHVyblxuICAgIH1cbiAgICBpZiAoZXh0ZW5zaW9uc1RvSWdub3JlID09IHVuZGVmaW5lZCkge1xuICAgICAgZXh0ZW5zaW9uc1RvSWdub3JlID0gW11cbiAgICB9XG4gICAgY29uc3QgZXh0ZW5zaW9uc0ZvckVsZW1lbnQgPSBnZXRBdHRyaWJ1dGVWYWx1ZShlbHQsICdoeC1leHQnKVxuICAgIGlmIChleHRlbnNpb25zRm9yRWxlbWVudCkge1xuICAgICAgZm9yRWFjaChleHRlbnNpb25zRm9yRWxlbWVudC5zcGxpdCgnLCcpLCBmdW5jdGlvbihleHRlbnNpb25OYW1lKSB7XG4gICAgICAgIGV4dGVuc2lvbk5hbWUgPSBleHRlbnNpb25OYW1lLnJlcGxhY2UoLyAvZywgJycpXG4gICAgICAgIGlmIChleHRlbnNpb25OYW1lLnNsaWNlKDAsIDcpID09ICdpZ25vcmU6Jykge1xuICAgICAgICAgIGV4dGVuc2lvbnNUb0lnbm9yZS5wdXNoKGV4dGVuc2lvbk5hbWUuc2xpY2UoNykpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4dGVuc2lvbnNUb0lnbm9yZS5pbmRleE9mKGV4dGVuc2lvbk5hbWUpIDwgMCkge1xuICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbZXh0ZW5zaW9uTmFtZV1cbiAgICAgICAgICBpZiAoZXh0ZW5zaW9uICYmIGV4dGVuc2lvbnNUb1JldHVybi5pbmRleE9mKGV4dGVuc2lvbikgPCAwKSB7XG4gICAgICAgICAgICBleHRlbnNpb25zVG9SZXR1cm4ucHVzaChleHRlbnNpb24pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gZ2V0RXh0ZW5zaW9ucyhhc0VsZW1lbnQocGFyZW50RWx0KGVsdCkpLCBleHRlbnNpb25zVG9SZXR1cm4sIGV4dGVuc2lvbnNUb0lnbm9yZSlcbiAgfVxuXG4gIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEluaXRpYWxpemF0aW9uXG4gIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBpc1JlYWR5ID0gZmFsc2VcbiAgZ2V0RG9jdW1lbnQoKS5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKSB7XG4gICAgaXNSZWFkeSA9IHRydWVcbiAgfSlcblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGZ1bmN0aW9uIG5vdyBpZiBET01Db250ZW50TG9hZGVkIGhhcyBmaXJlZCwgb3RoZXJ3aXNlIGxpc3RlbiBmb3IgaXQuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gdXNlcyBpc1JlYWR5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVsaWFibGUgd2F5IHRvIGFzayB0aGUgYnJvd3NlciB3aGV0aGVyXG4gICAqIHRoZSBET01Db250ZW50TG9hZGVkIGV2ZW50IGhhcyBhbHJlYWR5IGJlZW4gZmlyZWQ7IHRoZXJlJ3MgYSBnYXAgYmV0d2VlbiBET01Db250ZW50TG9hZGVkXG4gICAqIGZpcmluZyBhbmQgcmVhZHlzdGF0ZT1jb21wbGV0ZS5cbiAgICovXG4gIGZ1bmN0aW9uIHJlYWR5KGZuKSB7XG4gICAgLy8gQ2hlY2tpbmcgcmVhZHlTdGF0ZSBoZXJlIGlzIGEgZmFpbHNhZmUgaW4gY2FzZSB0aGUgaHRteCBzY3JpcHQgdGFnIGVudGVyZWQgdGhlIERPTSBieVxuICAgIC8vIHNvbWUgbWVhbnMgb3RoZXIgdGhhbiB0aGUgaW5pdGlhbCBwYWdlIGxvYWQuXG4gICAgaWYgKGlzUmVhZHkgfHwgZ2V0RG9jdW1lbnQoKS5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XG4gICAgICBmbigpXG4gICAgfSBlbHNlIHtcbiAgICAgIGdldERvY3VtZW50KCkuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZuKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydEluZGljYXRvclN0eWxlcygpIHtcbiAgICBpZiAoaHRteC5jb25maWcuaW5jbHVkZUluZGljYXRvclN0eWxlcyAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IG5vbmNlQXR0cmlidXRlID0gaHRteC5jb25maWcuaW5saW5lU3R5bGVOb25jZSA/IGAgbm9uY2U9XCIke2h0bXguY29uZmlnLmlubGluZVN0eWxlTm9uY2V9XCJgIDogJydcbiAgICAgIGdldERvY3VtZW50KCkuaGVhZC5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsXG4gICAgICAgICc8c3R5bGUnICsgbm9uY2VBdHRyaWJ1dGUgKyAnPlxcXG4gICAgICAuJyArIGh0bXguY29uZmlnLmluZGljYXRvckNsYXNzICsgJ3tvcGFjaXR5OjB9XFxcbiAgICAgIC4nICsgaHRteC5jb25maWcucmVxdWVzdENsYXNzICsgJyAuJyArIGh0bXguY29uZmlnLmluZGljYXRvckNsYXNzICsgJ3tvcGFjaXR5OjE7IHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXMgZWFzZS1pbjt9XFxcbiAgICAgIC4nICsgaHRteC5jb25maWcucmVxdWVzdENsYXNzICsgJy4nICsgaHRteC5jb25maWcuaW5kaWNhdG9yQ2xhc3MgKyAne29wYWNpdHk6MTsgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcyBlYXNlLWluO31cXFxuICAgICAgPC9zdHlsZT4nKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE1ldGFDb25maWcoKSB7XG4gICAgLyoqIEB0eXBlIEhUTUxNZXRhRWxlbWVudCAqL1xuICAgIGNvbnN0IGVsZW1lbnQgPSBnZXREb2N1bWVudCgpLnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cImh0bXgtY29uZmlnXCJdJylcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHBhcnNlSlNPTihlbGVtZW50LmNvbnRlbnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2VNZXRhQ29uZmlnKCkge1xuICAgIGNvbnN0IG1ldGFDb25maWcgPSBnZXRNZXRhQ29uZmlnKClcbiAgICBpZiAobWV0YUNvbmZpZykge1xuICAgICAgaHRteC5jb25maWcgPSBtZXJnZU9iamVjdHMoaHRteC5jb25maWcsIG1ldGFDb25maWcpXG4gICAgfVxuICB9XG5cbiAgLy8gaW5pdGlhbGl6ZSB0aGUgZG9jdW1lbnRcbiAgcmVhZHkoZnVuY3Rpb24oKSB7XG4gICAgbWVyZ2VNZXRhQ29uZmlnKClcbiAgICBpbnNlcnRJbmRpY2F0b3JTdHlsZXMoKVxuICAgIGxldCBib2R5ID0gZ2V0RG9jdW1lbnQoKS5ib2R5XG4gICAgcHJvY2Vzc05vZGUoYm9keSlcbiAgICBjb25zdCByZXN0b3JlZEVsdHMgPSBnZXREb2N1bWVudCgpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBcIltoeC10cmlnZ2VyPSdyZXN0b3JlZCddLFtkYXRhLWh4LXRyaWdnZXI9J3Jlc3RvcmVkJ11cIlxuICAgIClcbiAgICBib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2h0bXg6YWJvcnQnLCBmdW5jdGlvbihldnQpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2dC50YXJnZXRcbiAgICAgIGNvbnN0IGludGVybmFsRGF0YSA9IGdldEludGVybmFsRGF0YSh0YXJnZXQpXG4gICAgICBpZiAoaW50ZXJuYWxEYXRhICYmIGludGVybmFsRGF0YS54aHIpIHtcbiAgICAgICAgaW50ZXJuYWxEYXRhLnhoci5hYm9ydCgpXG4gICAgICB9XG4gICAgfSlcbiAgICAvKiogQHR5cGUgeyhldjogUG9wU3RhdGVFdmVudCkgPT4gYW55fSAqL1xuICAgIGNvbnN0IG9yaWdpbmFsUG9wc3RhdGUgPSB3aW5kb3cub25wb3BzdGF0ZSA/IHdpbmRvdy5vbnBvcHN0YXRlLmJpbmQod2luZG93KSA6IG51bGxcbiAgICAvKiogQHR5cGUgeyhldjogUG9wU3RhdGVFdmVudCkgPT4gYW55fSAqL1xuICAgIHdpbmRvdy5vbnBvcHN0YXRlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5zdGF0ZSAmJiBldmVudC5zdGF0ZS5odG14KSB7XG4gICAgICAgIHJlc3RvcmVIaXN0b3J5KClcbiAgICAgICAgZm9yRWFjaChyZXN0b3JlZEVsdHMsIGZ1bmN0aW9uKGVsdCkge1xuICAgICAgICAgIHRyaWdnZXJFdmVudChlbHQsICdodG14OnJlc3RvcmVkJywge1xuICAgICAgICAgICAgZG9jdW1lbnQ6IGdldERvY3VtZW50KCksXG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnRcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsUG9wc3RhdGUpIHtcbiAgICAgICAgICBvcmlnaW5hbFBvcHN0YXRlKGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGdldFdpbmRvdygpLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICB0cmlnZ2VyRXZlbnQoYm9keSwgJ2h0bXg6bG9hZCcsIHt9KSAvLyBnaXZlIHJlYWR5IGhhbmRsZXJzIGEgY2hhbmNlIHRvIGxvYWQgdXAgYmVmb3JlIGZpcmluZyB0aGlzIGV2ZW50XG4gICAgICBib2R5ID0gbnVsbCAvLyBraWxsIHJlZmVyZW5jZSBmb3IgZ2NcbiAgICB9LCAwKVxuICB9KVxuXG4gIHJldHVybiBodG14XG59KSgpXG5cbi8qKiBAdHlwZWRlZiB7J2dldCd8J2hlYWQnfCdwb3N0J3wncHV0J3wnZGVsZXRlJ3wnY29ubmVjdCd8J29wdGlvbnMnfCd0cmFjZSd8J3BhdGNoJ30gSHR0cFZlcmIgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTd2FwT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZWxlY3RdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NlbGVjdE9PQl1cbiAqIEBwcm9wZXJ0eSB7Kn0gW2V2ZW50SW5mb11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYW5jaG9yXVxuICogQHByb3BlcnR5IHtFbGVtZW50fSBbY29udGV4dEVsZW1lbnRdXG4gKiBAcHJvcGVydHkge3N3YXBDYWxsYmFja30gW2FmdGVyU3dhcENhbGxiYWNrXVxuICogQHByb3BlcnR5IHtzd2FwQ2FsbGJhY2t9IFthZnRlclNldHRsZUNhbGxiYWNrXVxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIHN3YXBDYWxsYmFja1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeydpbm5lckhUTUwnIHwgJ291dGVySFRNTCcgfCAnYmVmb3JlYmVnaW4nIHwgJ2FmdGVyYmVnaW4nIHwgJ2JlZm9yZWVuZCcgfCAnYWZ0ZXJlbmQnIHwgJ2RlbGV0ZScgfCAnbm9uZScgfCBzdHJpbmd9IEh0bXhTd2FwU3R5bGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEh0bXhTd2FwU3BlY2lmaWNhdGlvblxuICogQHByb3BlcnR5IHtIdG14U3dhcFN0eWxlfSBzd2FwU3R5bGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzd2FwRGVsYXlcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzZXR0bGVEZWxheVxuICogQHByb3BlcnR5IHtib29sZWFufSBbdHJhbnNpdGlvbl1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lnbm9yZVRpdGxlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtoZWFkXVxuICogQHByb3BlcnR5IHsndG9wJyB8ICdib3R0b20nfSBbc2Nyb2xsXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzY3JvbGxUYXJnZXRdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Nob3ddXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Nob3dUYXJnZXRdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtmb2N1c1Njcm9sbF1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoKHRoaXM6Tm9kZSwgZXZ0OkV2ZW50KSA9PiBib29sZWFuKSAmIHtzb3VyY2U6IHN0cmluZ319IENvbmRpdGlvbmFsRnVuY3Rpb25cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEh0bXhUcmlnZ2VyU3BlY2lmaWNhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRyaWdnZXJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9sbEludGVydmFsXVxuICogQHByb3BlcnR5IHtDb25kaXRpb25hbEZ1bmN0aW9ufSBbZXZlbnRGaWx0ZXJdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjaGFuZ2VkXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbb25jZV1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2NvbnN1bWVdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2RlbGF5XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtmcm9tXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0YXJnZXRdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Rocm90dGxlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtxdWV1ZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcm9vdF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdGhyZXNob2xkXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge3tlbHQ6IEVsZW1lbnQsIG1lc3NhZ2U6IHN0cmluZywgdmFsaWRpdHk6IFZhbGlkaXR5U3RhdGV9fSBIdG14RWxlbWVudFZhbGlkYXRpb25FcnJvclxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IEh0bXhIZWFkZXJTcGVjaWZpY2F0aW9uXG4gKiBAcHJvcGVydHkgeyd0cnVlJ30gSFgtUmVxdWVzdFxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gSFgtVHJpZ2dlclxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gSFgtVHJpZ2dlci1OYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBIWC1UYXJnZXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBIWC1DdXJyZW50LVVSTFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtIWC1Qcm9tcHRdXG4gKiBAcHJvcGVydHkgeyd0cnVlJ30gW0hYLUJvb3N0ZWRdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0NvbnRlbnQtVHlwZV1cbiAqIEBwcm9wZXJ0eSB7J3RydWUnfSBbSFgtSGlzdG9yeS1SZXN0b3JlLVJlcXVlc3RdXG4gKi9cblxuLyoqIEB0eXBlZGVmIEh0bXhBamF4SGVscGVyQ29udGV4dFxuICogQHByb3BlcnR5IHtFbGVtZW50fHN0cmluZ30gW3NvdXJjZV1cbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IFtldmVudF1cbiAqIEBwcm9wZXJ0eSB7SHRteEFqYXhIYW5kbGVyfSBbaGFuZGxlcl1cbiAqIEBwcm9wZXJ0eSB7RWxlbWVudHxzdHJpbmd9IFt0YXJnZXRdXG4gKiBAcHJvcGVydHkge0h0bXhTd2FwU3R5bGV9IFtzd2FwXVxuICogQHByb3BlcnR5IHtPYmplY3R8Rm9ybURhdGF9IFt2YWx1ZXNdXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsc3RyaW5nPn0gW2hlYWRlcnNdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NlbGVjdF1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEh0bXhSZXF1ZXN0Q29uZmlnXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGJvb3N0ZWRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlVXJsUGFyYW1zXG4gKiBAcHJvcGVydHkge0Zvcm1EYXRhfSBmb3JtRGF0YVxuICogQHByb3BlcnR5IHtPYmplY3R9IHBhcmFtZXRlcnMgZm9ybURhdGEgcHJveHlcbiAqIEBwcm9wZXJ0eSB7Rm9ybURhdGF9IHVuZmlsdGVyZWRGb3JtRGF0YVxuICogQHByb3BlcnR5IHtPYmplY3R9IHVuZmlsdGVyZWRQYXJhbWV0ZXJzIHVuZmlsdGVyZWRGb3JtRGF0YSBwcm94eVxuICogQHByb3BlcnR5IHtIdG14SGVhZGVyU3BlY2lmaWNhdGlvbn0gaGVhZGVyc1xuICogQHByb3BlcnR5IHtFbGVtZW50fSB0YXJnZXRcbiAqIEBwcm9wZXJ0eSB7SHR0cFZlcmJ9IHZlcmJcbiAqIEBwcm9wZXJ0eSB7SHRteEVsZW1lbnRWYWxpZGF0aW9uRXJyb3JbXX0gZXJyb3JzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHdpdGhDcmVkZW50aWFsc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXRoXG4gKiBAcHJvcGVydHkge0V2ZW50fSB0cmlnZ2VyaW5nRXZlbnRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEh0bXhSZXNwb25zZUluZm9cbiAqIEBwcm9wZXJ0eSB7WE1MSHR0cFJlcXVlc3R9IHhoclxuICogQHByb3BlcnR5IHtFbGVtZW50fSB0YXJnZXRcbiAqIEBwcm9wZXJ0eSB7SHRteFJlcXVlc3RDb25maWd9IHJlcXVlc3RDb25maWdcbiAqIEBwcm9wZXJ0eSB7SHRteEFqYXhFdGN9IGV0Y1xuICogQHByb3BlcnR5IHtib29sZWFufSBib29zdGVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2VsZWN0XG4gKiBAcHJvcGVydHkge3tyZXF1ZXN0UGF0aDogc3RyaW5nLCBmaW5hbFJlcXVlc3RQYXRoOiBzdHJpbmcsIHJlc3BvbnNlUGF0aDogc3RyaW5nfG51bGwsIGFuY2hvcjogc3RyaW5nfX0gcGF0aEluZm9cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2ZhaWxlZF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3N1Y2Nlc3NmdWxdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtrZWVwSW5kaWNhdG9yc11cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEh0bXhBamF4RXRjXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXR1cm5Qcm9taXNlXVxuICogQHByb3BlcnR5IHtIdG14QWpheEhhbmRsZXJ9IFtoYW5kbGVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZWxlY3RdXG4gKiBAcHJvcGVydHkge0VsZW1lbnR9IFt0YXJnZXRPdmVycmlkZV1cbiAqIEBwcm9wZXJ0eSB7SHRteFN3YXBTdHlsZX0gW3N3YXBPdmVycmlkZV1cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZyxzdHJpbmc+fSBbaGVhZGVyc11cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fEZvcm1EYXRhfSBbdmFsdWVzXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbY3JlZGVudGlhbHNdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RpbWVvdXRdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBIdG14UmVzcG9uc2VIYW5kbGluZ0NvbmZpZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjb2RlXVxuICogQHByb3BlcnR5IHtib29sZWFufSBzd2FwXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtlcnJvcl1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lnbm9yZVRpdGxlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZWxlY3RdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3RhcmdldF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3dhcE92ZXJyaWRlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtldmVudF1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtIdG14UmVzcG9uc2VJbmZvICYge3Nob3VsZFN3YXA6IGJvb2xlYW4sIHNlcnZlclJlc3BvbnNlOiBhbnksIGlzRXJyb3I6IGJvb2xlYW4sIGlnbm9yZVRpdGxlOiBib29sZWFuLCBzZWxlY3RPdmVycmlkZTpzdHJpbmd9fSBIdG14QmVmb3JlU3dhcERldGFpbHNcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBIdG14QWpheEhhbmRsZXJcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gKiBAcGFyYW0ge0h0bXhSZXNwb25zZUluZm99IHJlc3BvbnNlSW5mb1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeygoKSA9PiB2b2lkKX0gSHRteFNldHRsZVRhc2tcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEh0bXhTZXR0bGVJbmZvXG4gKiBAcHJvcGVydHkge0h0bXhTZXR0bGVUYXNrW119IHRhc2tzXG4gKiBAcHJvcGVydHkge0VsZW1lbnRbXX0gZWx0c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0aXRsZV1cbiAqL1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2JpZ3NreXNvZnR3YXJlL2h0bXgtZXh0ZW5zaW9ucy9ibG9iL21haW4vUkVBRE1FLm1kXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBIdG14RXh0ZW5zaW9uXG4gKiBAcHJvcGVydHkgeyhhcGk6IGFueSkgPT4gdm9pZH0gaW5pdFxuICogQHByb3BlcnR5IHsobmFtZTogc3RyaW5nLCBldmVudDogRXZlbnR8Q3VzdG9tRXZlbnQpID0+IGJvb2xlYW59IG9uRXZlbnRcbiAqIEBwcm9wZXJ0eSB7KHRleHQ6IHN0cmluZywgeGhyOiBYTUxIdHRwUmVxdWVzdCwgZWx0OiBFbGVtZW50KSA9PiBzdHJpbmd9IHRyYW5zZm9ybVJlc3BvbnNlXG4gKiBAcHJvcGVydHkgeyhzd2FwU3R5bGU6IEh0bXhTd2FwU3R5bGUpID0+IGJvb2xlYW59IGlzSW5saW5lU3dhcFxuICogQHByb3BlcnR5IHsoc3dhcFN0eWxlOiBIdG14U3dhcFN0eWxlLCB0YXJnZXQ6IE5vZGUsIGZyYWdtZW50OiBOb2RlLCBzZXR0bGVJbmZvOiBIdG14U2V0dGxlSW5mbykgPT4gYm9vbGVhbnxOb2RlW119IGhhbmRsZVN3YXBcbiAqIEBwcm9wZXJ0eSB7KHhocjogWE1MSHR0cFJlcXVlc3QsIHBhcmFtZXRlcnM6IEZvcm1EYXRhLCBlbHQ6IE5vZGUpID0+ICp8c3RyaW5nfG51bGx9IGVuY29kZVBhcmFtZXRlcnNcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gc3RyaW5nW118bnVsbH0gZ2V0U2VsZWN0b3JzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGh0bXhcbiIsImltcG9ydCBodG14IGZyb20gXCJodG14Lm9yZ1wiO1xuXG5mdW5jdGlvbiBkZXBlbmRzT24ocGF0aFNwZWM6IGFueSwgdXJsOiBzdHJpbmcpIHtcbiAgaWYgKHBhdGhTcGVjID09PSBcImlnbm9yZVwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGRlcGVuZGVuY3lQYXRoID0gcGF0aFNwZWMuc3BsaXQoXCIvXCIpO1xuICBjb25zdCB1cmxQYXRoID0gdXJsLnNwbGl0KFwiL1wiKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cmxQYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZGVwZW5kZW5jeUVsZW1lbnQgPSBkZXBlbmRlbmN5UGF0aC5zaGlmdCgpO1xuICAgIGNvbnN0IHBhdGhFbGVtZW50ID0gdXJsUGF0aFtpXTtcbiAgICBpZiAoZGVwZW5kZW5jeUVsZW1lbnQgIT09IHBhdGhFbGVtZW50ICYmIGRlcGVuZGVuY3lFbGVtZW50ICE9PSBcIipcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBkZXBlbmRlbmN5UGF0aC5sZW5ndGggPT09IDAgfHxcbiAgICAgIChkZXBlbmRlbmN5UGF0aC5sZW5ndGggPT09IDEgJiYgZGVwZW5kZW5jeVBhdGhbMF0gPT09IFwiXCIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZWZyZXNoUGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgZWx0c1dpdGhEZXBzID0gaHRteC5maW5kQWxsKFwiW3BhdGgtZGVwc11cIik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWx0c1dpdGhEZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZWx0ID0gZWx0c1dpdGhEZXBzW2ldO1xuICAgIGlmIChkZXBlbmRzT24oZWx0LmdldEF0dHJpYnV0ZShcInBhdGgtZGVwc1wiKSwgcGF0aCkpIHtcbiAgICAgIGh0bXgudHJpZ2dlcihlbHQsIFwicGF0aC1kZXBzXCIsIG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5odG14LmRlZmluZUV4dGVuc2lvbihcInBhdGgtZGVwc1wiLCB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgb25FdmVudDogZnVuY3Rpb24gKG5hbWUsIGV2dCkge1xuICAgIGlmICghKGV2dCBpbnN0YW5jZW9mIEN1c3RvbUV2ZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gXCJodG14OmJlZm9yZU9uTG9hZFwiKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBldnQuZGV0YWlsLnJlcXVlc3RDb25maWc7XG4gICAgICAvLyBtdXRhdGluZyBjYWxsXG4gICAgICBpZiAoXG4gICAgICAgIGNvbmZpZyAmJlxuICAgICAgICBjb25maWcudmVyYiAhPT0gXCJnZXRcIiAmJlxuICAgICAgICBldnQudGFyZ2V0ICE9IG51bGwgJiZcbiAgICAgICAgZXZ0LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgJiZcbiAgICAgICAgZXZ0LnRhcmdldC5nZXRBdHRyaWJ1dGUoXCJwYXRoLWRlcHNcIikgIT09IFwiaWdub3JlXCJcbiAgICAgICkge1xuICAgICAgICByZWZyZXNoUGF0aChjb25maWcucGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG4iLCJpbXBvcnQgaHRteCwge0h0bXhTZXR0bGVJbmZvLCBIdG14U3dhcFN0eWxlfSBmcm9tIFwiaHRteC5vcmdcIjtcblxuZnVuY3Rpb24ga2ViYWJFdmVudE5hbWUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbYS16MC05XSkoW0EtWl0pL2csICckMS0kMicpLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gbWFrZUV2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBkZXRhaWw6IGFueSkge1xuICAgIGxldCBldnRcbiAgICBpZiAod2luZG93LkN1c3RvbUV2ZW50ICYmIHR5cGVvZiB3aW5kb3cuQ3VzdG9tRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogYGNvbXBvc2VkOiB0cnVlYCBoZXJlIGlzIGEgaGFjayB0byBtYWtlIGdsb2JhbCBldmVudCBoYW5kbGVycyB3b3JrIHdpdGggZXZlbnRzIGluIHNoYWRvdyBET01cbiAgICAgICAgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwgeyBidWJibGVzOiBmYWxzZSwgY2FuY2VsYWJsZTogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRldGFpbCB9KVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpXG4gICAgICAgIGV2dC5pbml0Q3VzdG9tRXZlbnQoZXZlbnROYW1lLCB0cnVlLCB0cnVlLCBkZXRhaWwpXG4gICAgfVxuICAgIHJldHVybiBldnRcbn1cblxuZnVuY3Rpb24gdHJpZ2dlckNoaWxkcmVuKHRhcmdldDogSFRNTEVsZW1lbnQsIG5hbWU6IHN0cmluZywgZXZlbnQ6IEN1c3RvbUV2ZW50LCB0cmlnZ2VyZWQ6IFNldDxIVE1MRWxlbWVudD4pIHtcbiAgICBldmVudC5kZXRhaWwubWV0YSA9ICd0cmlnZ2VyLWNoaWxkcmVuJztcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5jaGlsZHJlbikge1xuICAgICAgICBBcnJheS5mcm9tKHRhcmdldC5jaGlsZHJlbikuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2VoYWIgPSBrZWJhYkV2ZW50TmFtZShuYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGtlaGFiLnJlcGxhY2UoXCJodG14OlwiLCBcImh4LW9uOjpcIilcbiAgICAgICAgICAgIGlmICghdHJpZ2dlcmVkLmhhcyhlIGFzIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGlmKGUuaGFzQXR0cmlidXRlKGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RXZlbnQgPSBtYWtlRXZlbnQoZXZlbnROYW1lLnJlcGxhY2UoXCJoeC1vbjo6XCIsIFwiaHRteDpcIiksIGV2ZW50LmRldGFpbClcbiAgICAgICAgICAgICAgICAgICAgZS5kaXNwYXRjaEV2ZW50KG5ld0V2ZW50KVxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWQuYWRkKGUgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyQ2hpbGRyZW4oZSBhcyBIVE1MRWxlbWVudCwgbmFtZSwgZXZlbnQsIHRyaWdnZXJlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cblxuaHRteC5kZWZpbmVFeHRlbnNpb24oXCJ0cmlnZ2VyLWNoaWxkcmVuXCIsIHtcbiAgICBvbkV2ZW50OiAobmFtZSwgZXZ0OiBFdmVudCB8IEN1c3RvbUV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghKGV2dCBpbnN0YW5jZW9mIEN1c3RvbUV2ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmKGV2dC5kZXRhaWwubWV0YSA9PT0gJ3RyaWdnZXItY2hpbGRyZW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJpZ2dlcmVkID0gbmV3IFNldDxIVE1MRWxlbWVudD4oKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudCB8fCBldnQuZGV0YWlsLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgdHJpZ2dlckNoaWxkcmVuKHRhcmdldCwgbmFtZSwgZXZ0LCB0cmlnZ2VyZWQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIChhcGk6IGFueSk6IHZvaWQge1xuICAgIH0sXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGZ1bmN0aW9uIChcbiAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICB4aHI6IFhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICBlbHQ6IEVsZW1lbnQsXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfSxcbiAgICBpc0lubGluZVN3YXA6IGZ1bmN0aW9uIChzd2FwU3R5bGU6IEh0bXhTd2FwU3R5bGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlU3dhcDogZnVuY3Rpb24gKFxuICAgICAgICBzd2FwU3R5bGU6IEh0bXhTd2FwU3R5bGUsXG4gICAgICAgIHRhcmdldDogTm9kZSxcbiAgICAgICAgZnJhZ21lbnQ6IE5vZGUsXG4gICAgICAgIHNldHRsZUluZm86IEh0bXhTZXR0bGVJbmZvLFxuICAgICk6IGJvb2xlYW4gfCBOb2RlW10ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBlbmNvZGVQYXJhbWV0ZXJzOiBmdW5jdGlvbiAoXG4gICAgICAgIHhocjogWE1MSHR0cFJlcXVlc3QsXG4gICAgICAgIHBhcmFtZXRlcnM6IEZvcm1EYXRhLFxuICAgICAgICBlbHQ6IE5vZGUsXG4gICAgKSB7XG4gICAgfSxcbiAgICBnZXRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxufSk7XG4iLCJpbXBvcnQgaHRteCBmcm9tIFwiaHRteC5vcmdcIjtcblxuaHRteC5kZWZpbmVFeHRlbnNpb24oXCJkZWJ1Z1wiLCB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgb25FdmVudDogZnVuY3Rpb24gKG5hbWUsIGV2dCkge1xuICAgIGlmIChjb25zb2xlLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKG5hbWUsIGV2dCk7XG4gICAgfSBlbHNlIGlmIChjb25zb2xlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkRFQlVHOlwiLCBuYW1lLCBldnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBub29wXG4gICAgfVxuICB9LFxufSk7XG4iLCJpbXBvcnQgaHRteCBmcm9tIFwiaHRteC5vcmdcIjtcbmNvbnN0IGNvbmZpZzogYW55ID0gaHRteC5jb25maWc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vaHRteFwiKS5IdG14SW50ZXJuYWxBcGl9ICovXG5sZXQgYXBpOiBhbnk7XG5cbmNvbnN0IGF0dHJQcmVmaXggPSBcImh4LXRhcmdldC1cIjtcblxuLy8gSUUxMSBkb2Vzbid0IHN1cHBvcnQgc3RyaW5nLnN0YXJ0c1dpdGhcbmZ1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKSB7XG4gIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIHByZWZpeC5sZW5ndGgpID09PSBwcmVmaXg7XG59XG5cbi8qKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWx0XG4gKiBAcGFyYW0gcmVzcENvZGVOdW1iZXJcbiAqIEByZXR1cm5zIHtIVE1MRWxlbWVudCB8IG51bGx9XG4gKi9cbmZ1bmN0aW9uIGdldFJlc3BDb2RlVGFyZ2V0KGVsdDogRWxlbWVudCwgcmVzcENvZGVOdW1iZXI6IG51bWJlcikge1xuICBpZiAoIWVsdCB8fCAhcmVzcENvZGVOdW1iZXIpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IHJlc3BDb2RlID0gcmVzcENvZGVOdW1iZXIudG9TdHJpbmcoKTtcblxuICAvLyAnKicgaXMgdGhlIG9yaWdpbmFsIHN5bnRheCwgYXMgdGhlIG9idmlvdXMgY2hhcmFjdGVyIGZvciBhIHdpbGRjYXJkLlxuICAvLyBUaGUgJ3gnIGFsdGVybmF0aXZlIHdhcyBhZGRlZCBmb3IgbWF4aW11bSBjb21wYXRpYmlsaXR5IHdpdGggSFRNTFxuICAvLyB0ZW1wbGF0aW5nIGVuZ2luZXMsIGR1ZSB0byBhbWJpZ3VpdHkgYXJvdW5kIHdoaWNoIGNoYXJhY3RlcnMgYXJlXG4gIC8vIHN1cHBvcnRlZCBpbiBIVE1MIGF0dHJpYnV0ZXMuXG4gIC8vXG4gIC8vIFN0YXJ0IHdpdGggdGhlIG1vc3Qgc3BlY2lmaWMgcG9zc2libGUgYXR0cmlidXRlIGFuZCBnZW5lcmFsaXplIGZyb21cbiAgLy8gdGhlcmUuXG4gIGNvbnN0IGF0dHJQb3NzaWJpbGl0aWVzID0gW1xuICAgIHJlc3BDb2RlLFxuXG4gICAgcmVzcENvZGUuc3Vic3RyKDAsIDIpICsgXCIqXCIsXG4gICAgcmVzcENvZGUuc3Vic3RyKDAsIDIpICsgXCJ4XCIsXG5cbiAgICByZXNwQ29kZS5zdWJzdHIoMCwgMSkgKyBcIipcIixcbiAgICByZXNwQ29kZS5zdWJzdHIoMCwgMSkgKyBcInhcIixcbiAgICByZXNwQ29kZS5zdWJzdHIoMCwgMSkgKyBcIioqXCIsXG4gICAgcmVzcENvZGUuc3Vic3RyKDAsIDEpICsgXCJ4eFwiLFxuXG4gICAgXCIqXCIsXG4gICAgXCJ4XCIsXG4gICAgXCIqKipcIixcbiAgICBcInh4eFwiLFxuICBdO1xuICBpZiAoc3RhcnRzV2l0aChyZXNwQ29kZSwgXCI0XCIpIHx8IHN0YXJ0c1dpdGgocmVzcENvZGUsIFwiNVwiKSkge1xuICAgIGF0dHJQb3NzaWJpbGl0aWVzLnB1c2goXCJlcnJvclwiKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0clBvc3NpYmlsaXRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhdHRyID0gYXR0clByZWZpeCArIGF0dHJQb3NzaWJpbGl0aWVzW2ldO1xuICAgIGNvbnN0IGF0dHJWYWx1ZSA9IGFwaS5nZXRDbG9zZXN0QXR0cmlidXRlVmFsdWUoZWx0LCBhdHRyKTtcbiAgICBpZiAoYXR0clZhbHVlKSB7XG4gICAgICBpZiAoYXR0clZhbHVlID09PSBcInRoaXNcIikge1xuICAgICAgICByZXR1cm4gYXBpLmZpbmRUaGlzRWxlbWVudChlbHQsIGF0dHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFwaS5xdWVyeVNlbGVjdG9yRXh0KGVsdCwgYXR0clZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIEBwYXJhbSB7RXZlbnR9IGV2dCAqL1xuZnVuY3Rpb24gaGFuZGxlRXJyb3JGbGFnKGV2dDogQ3VzdG9tRXZlbnQpIHtcbiAgaWYgKGV2dC5kZXRhaWwuaXNFcnJvcikge1xuICAgIGlmIChjb25maWcucmVzcG9uc2VUYXJnZXRVbnNldHNFcnJvcikge1xuICAgICAgZXZ0LmRldGFpbC5pc0Vycm9yID0gZmFsc2U7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbmZpZy5yZXNwb25zZVRhcmdldFNldHNFcnJvcikge1xuICAgIGV2dC5kZXRhaWwuaXNFcnJvciA9IHRydWU7XG4gIH1cbn1cblxuaHRteC5kZWZpbmVFeHRlbnNpb24oXCJyZXNwb25zZS10YXJnZXRzXCIsIHtcbiAgLy8gQHRzLWlnbm9yZVxuICBpbml0OiAoYXBpUmVmKSA9PiB7XG4gICAgYXBpID0gYXBpUmVmO1xuXG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVRhcmdldFVuc2V0c0Vycm9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbmZpZy5yZXNwb25zZVRhcmdldFVuc2V0c0Vycm9yID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVRhcmdldFNldHNFcnJvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25maWcucmVzcG9uc2VUYXJnZXRTZXRzRXJyb3IgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVRhcmdldFByZWZlcnNFeGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25maWcucmVzcG9uc2VUYXJnZXRQcmVmZXJzRXhpc3RpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVRhcmdldFByZWZlcnNSZXRhcmdldEhlYWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25maWcucmVzcG9uc2VUYXJnZXRQcmVmZXJzUmV0YXJnZXRIZWFkZXIgPSB0cnVlO1xuICAgIH1cbiAgfSxcblxuICAvLyBAdHMtaWdub3JlXG4gIG9uRXZlbnQ6IChuYW1lLCBldnQpID0+IHtcbiAgICBpZiAoIShldnQgaW5zdGFuY2VvZiBDdXN0b21FdmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbmFtZSA9PT0gXCJodG14OmJlZm9yZVN3YXBcIiAmJlxuICAgICAgZXZ0LmRldGFpbC54aHIgJiZcbiAgICAgIGV2dC5kZXRhaWwueGhyLnN0YXR1cyAhPT0gMjAwXG4gICAgKSB7XG4gICAgICBpZiAoZXZ0LmRldGFpbC50YXJnZXQpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVRhcmdldFByZWZlcnNFeGlzdGluZykge1xuICAgICAgICAgIGV2dC5kZXRhaWwuc2hvdWxkU3dhcCA9IHRydWU7XG4gICAgICAgICAgaGFuZGxlRXJyb3JGbGFnKGV2dCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbmZpZy5yZXNwb25zZVRhcmdldFByZWZlcnNSZXRhcmdldEhlYWRlciAmJlxuICAgICAgICAgIGV2dC5kZXRhaWwueGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLm1hdGNoKC9IWC1SZXRhcmdldDovaSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXZ0LmRldGFpbC5zaG91bGRTd2FwID0gdHJ1ZTtcbiAgICAgICAgICBoYW5kbGVFcnJvckZsYWcoZXZ0KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFldnQuZGV0YWlsLnJlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB0YXJnZXQgPSBnZXRSZXNwQ29kZVRhcmdldChcbiAgICAgICAgZXZ0LmRldGFpbC5yZXF1ZXN0Q29uZmlnLmVsdCxcbiAgICAgICAgZXZ0LmRldGFpbC54aHIuc3RhdHVzLFxuICAgICAgKTtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgaGFuZGxlRXJyb3JGbGFnKGV2dCk7XG4gICAgICAgIGV2dC5kZXRhaWwuc2hvdWxkU3dhcCA9IHRydWU7XG4gICAgICAgIGV2dC5kZXRhaWwudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LFxufSk7XG4iLCJpbXBvcnQgaHRteCBmcm9tIFwiaHRteC5vcmdcIjtcblxuaHRteC5kZWZpbmVFeHRlbnNpb24oXCJtdXRhdGlvbi1lcnJvclwiLCB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgb25FdmVudDogKG5hbWUsIGV2dCkgPT4ge1xuICAgIGlmICghKGV2dCBpbnN0YW5jZW9mIEN1c3RvbUV2ZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gXCJodG14OmFmdGVyUmVxdWVzdFwiKSB7XG4gICAgICBpZiAoIWV2dC5kZXRhaWwgfHwgIWV2dC5kZXRhaWwueGhyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXR1cyA9IGV2dC5kZXRhaWwueGhyLnN0YXR1cztcbiAgICAgIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgICAgIGh0bXguZmluZEFsbChcIltoeC1vblxcXFw6XFxcXDptdXRhdGlvbi1lcnJvcl1cIikuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGh0bXgudHJpZ2dlcihlbGVtZW50LCBcImh0bXg6bXV0YXRpb24tZXJyb3JcIiwgeyBzdGF0dXMgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuIiwiaW1wb3J0IGh0bXggZnJvbSBcImh0bXgub3JnXCI7XG5pbXBvcnQge2NyZWF0ZVdlYlNvY2tldENsaWVudH0gZnJvbSBcIi4uL3V0aWwvd3NcIjtcblxubGV0IGxhc3RWZXJzaW9uID0gXCJcIjtcblxuaHRteC5kZWZpbmVFeHRlbnNpb24oXCJsaXZlcmVsb2FkXCIsIHtcbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGVuYWJsZWQgPSBmYWxzZVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgQXJyYXkuZnJvbShodG14LmZpbmRBbGwoXCJbaHgtZXh0XVwiKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJoeC1leHRcIik7XG4gICAgICAgICAgICBpZih2YWx1ZT8uc3BsaXQoXCIgXCIpLmluY2x1ZGVzKFwibGl2ZXJlbG9hZFwiKSkge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZighZW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnbGl2ZXJlbG9hZCBleHRlbnNpb24gaW5pdGlhbGl6ZWQuJyk7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBFdmVudFNvdXJjZSBvYmplY3QgYW5kIHBvaW50IGl0IHRvIHlvdXIgU1NFIGVuZHBvaW50XG4gICAgICAgIGNvbnN0IGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNlKCcvZGV2L2xpdmVyZWxvYWQnKTtcbiAgICAgICAgLy8gTGlzdGVuIGZvciBtZXNzYWdlcyBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgZXZlbnRTb3VyY2Uub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBldmVudC5kYXRhXG4gICAgICAgICAgICAvLyBMb2cgdGhlIG1lc3NhZ2UgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgICAgIGlmKGxhc3RWZXJzaW9uID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgbGFzdFZlcnNpb24gPSBtZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYobGFzdFZlcnNpb24gIT09IG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBsYXN0VmVyc2lvbiA9IG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgcmVsb2FkKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gSGFuZGxlIGVycm9ycyAoZS5nLiwgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQpXG4gICAgICAgIGV2ZW50U291cmNlLm9uZXJyb3IgPSBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXZlbnRTb3VyY2UgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICB9O1xuXG4gICAgfSxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb25FdmVudDogZnVuY3Rpb24gKG5hbWUsIGV2dCkge1xuXG4gICAgfSxcbn0pO1xuXG5mdW5jdGlvbiByZWxvYWQoKSB7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG59IiwiaW1wb3J0IGh0bXggZnJvbSBcImh0bXgub3JnXCI7XG5cbmNvbnN0IGV2YWxGdW5jUmVnZXggPS9fX2V2YWxfW0EtWmEtejAtOV0rXFwoW2Etel0rXFwpL2dtXG5cbmh0bXguZGVmaW5lRXh0ZW5zaW9uKFwiaHRtZ29cIiwge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvbkV2ZW50OiBmdW5jdGlvbiAobmFtZSwgZXZ0KSB7XG4gICAgICAgaWYobmFtZSA9PT0gXCJodG14OmJlZm9yZUNsZWFudXBFbGVtZW50XCIgJiYgZXZ0LnRhcmdldCkge1xuICAgICAgICAgICByZW1vdmVBc3NvY2lhdGVkU2NyaXB0cyhldnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICB9XG4gICAgfSxcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQXNzb2NpYXRlZFNjcmlwdHMoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBBcnJheS5mcm9tKGVsZW1lbnQuYXR0cmlidXRlcylcbiAgICBmb3IgKGxldCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuICAgICAgIGNvbnN0IG1hdGNoZXMgPSBhdHRyaWJ1dGUudmFsdWUubWF0Y2goZXZhbEZ1bmNSZWdleCkgfHwgW11cbiAgICAgICAgZm9yIChsZXQgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBtYXRjaC5yZXBsYWNlKFwiKClcIiwgXCJcIikucmVwbGFjZShcIih0aGlzKVwiLCBcIlwiKS5yZXBsYWNlKFwiO1wiLCBcIlwiKVxuICAgICAgICAgICAgY29uc3QgZWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpXG4gICAgICAgICAgICBpZihlbGUgJiYgZWxlLnRhZ05hbWUgPT09IFwiU0NSSVBUXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwicmVtb3ZpbmcgYXNzb2NpYXRlZCBzY3JpcHQgd2l0aCBpZFwiLCBpZClcbiAgICAgICAgICAgICAgICBlbGUucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCBodG14IGZyb20gJ2h0bXgub3JnJ1xuaW1wb3J0IHtyZW1vdmVBc3NvY2lhdGVkU2NyaXB0c30gZnJvbSBcIi4vaHRtZ29cIjtcblxuXG5cbmludGVyZmFjZSBIdG14SW50ZXJuYWxBcGkge1xuICAgIGdldEludGVybmFsRGF0YShlbHQ6IEVsZW1lbnQpOiBhbnk7XG4gICAgYm9keUNvbnRhaW5zKGVsdDogRWxlbWVudCk6IGJvb2xlYW47XG4gICAgZ2V0QXR0cmlidXRlVmFsdWUoZWx0OiBFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsO1xuICAgIHRyaWdnZXJFdmVudChlbHQ6IEVsZW1lbnQsIG5hbWU6IHN0cmluZywgZGV0YWlsPzogYW55KTogYm9vbGVhbjtcbiAgICB3aXRoRXh0ZW5zaW9ucyhlbHQ6IEVsZW1lbnQsIGNhbGxiYWNrOiAoZXh0ZW5zaW9uOiBhbnkpID0+IHZvaWQpOiB2b2lkO1xuICAgIG1ha2VTZXR0bGVJbmZvKGVsdDogRWxlbWVudCk6IGFueTtcbiAgICBtYWtlRnJhZ21lbnQoaHRtbDogc3RyaW5nKTogRG9jdW1lbnRGcmFnbWVudDtcbiAgICBvb2JTd2FwKHN3YXBTdHlsZTogc3RyaW5nLCBmcmFnbWVudDogRWxlbWVudCwgc2V0dGxlSW5mbzogYW55KTogdm9pZDtcbiAgICBzZXR0bGVJbW1lZGlhdGVseSh0YXNrczogYW55KTogdm9pZDtcbiAgICBnZXRDbG9zZXN0TWF0Y2goZWx0OiBFbGVtZW50LCBjb25kaXRpb246IChub2RlOiBFbGVtZW50KSA9PiBib29sZWFuKTogRWxlbWVudCB8IG51bGw7XG4gICAgZ2V0VHJpZ2dlclNwZWNzKGVsdDogRWxlbWVudCk6IGFueVtdO1xuICAgIGFkZFRyaWdnZXJIYW5kbGVyKGVsdDogRWxlbWVudCwgdHJpZ2dlclNwZWM6IGFueSwgbm9kZURhdGE6IGFueSwgaGFuZGxlcjogKGVsdDogRWxlbWVudCwgZXZ0OiBFdmVudCkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgZ2V0SGVhZGVycyhlbHQ6IEVsZW1lbnQsIHRhcmdldDogRWxlbWVudCk6IGFueTtcbiAgICBnZXRUYXJnZXQoZWx0OiBFbGVtZW50KTogRWxlbWVudDtcbiAgICBnZXRJbnB1dFZhbHVlcyhlbHQ6IEVsZW1lbnQsIHZlcmI6IHN0cmluZyk6IHsgZXJyb3JzOiBhbnlbXTsgdmFsdWVzOiBhbnkgfTtcbiAgICBnZXRFeHByZXNzaW9uVmFycyhlbHQ6IEVsZW1lbnQpOiBhbnk7XG4gICAgbWVyZ2VPYmplY3RzKG9iajE6IGFueSwgb2JqMjogYW55KTogYW55O1xuICAgIGZpbHRlclZhbHVlcyh2YWx1ZXM6IGFueSwgZWx0OiBFbGVtZW50KTogYW55O1xuICAgIHRyaWdnZXJFcnJvckV2ZW50KGVsdD86IEVsZW1lbnQsIG5hbWU/OiBzdHJpbmcsIGRldGFpbD86IGFueSk6IHZvaWQ7XG4gICAgaGFzQXR0cmlidXRlKGVsdDogRWxlbWVudCwgbmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBzaG91bGRDYW5jZWwoZXZ0OiBFdmVudCwgZWx0OiBFbGVtZW50KTogYm9vbGVhbjtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmludGVyZmFjZSBXZWJTb2NrZXRXcmFwcGVyIHtcbiAgICBzb2NrZXQ6IFdlYlNvY2tldDtcbiAgICBldmVudHMgOiB7IFtrZXk6IHN0cmluZ106ICgoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkKVtdIH07XG4gICAgbWVzc2FnZVF1ZXVlOiB7IG1lc3NhZ2U6IHN0cmluZzsgc2VuZEVsdDogRWxlbWVudCB8IG51bGwgfVtdO1xuICAgIHJldHJ5Q291bnQ6IG51bWJlcjtcbiAgICBzZW5kSW1tZWRpYXRlbHkobWVzc2FnZTogc3RyaW5nLCBzZW5kRWx0OiBFbGVtZW50IHwgbnVsbCk6IHZvaWQ7XG4gICAgc2VuZChtZXNzYWdlOiBzdHJpbmcsIHNlbmRFbHQ6IEVsZW1lbnQgfCBudWxsKTogdm9pZDtcbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50OiBzdHJpbmcsIGhhbmRsZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQpOiB2b2lkO1xuICAgIGhhbmRsZVF1ZXVlZE1lc3NhZ2VzKCk6IHZvaWQ7XG4gICAgaW5pdCgpOiB2b2lkO1xuICAgIGNsb3NlKCk6IHZvaWQ7XG4gICAgcHVibGljSW50ZXJmYWNlOiB7XG4gICAgICAgIHNlbmQ6IChtZXNzYWdlOiBzdHJpbmcsIHNlbmRFbHQ6IEVsZW1lbnQgfCBudWxsKSA9PiB2b2lkO1xuICAgICAgICBzZW5kSW1tZWRpYXRlbHk6IChtZXNzYWdlOiBzdHJpbmcsIHNlbmRFbHQ6IEVsZW1lbnQgfCBudWxsKSA9PiB2b2lkO1xuICAgICAgICBxdWV1ZTogeyBtZXNzYWdlOiBzdHJpbmc7IHNlbmRFbHQ6IEVsZW1lbnQgfCBudWxsIH1bXTtcbiAgICB9O1xufVxuXG5sZXQgYXBpOiBIdG14SW50ZXJuYWxBcGk7XG5cbmZ1bmN0aW9uIHNwbGl0T25XaGl0ZXNwYWNlKHRyaWdnZXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdHJpZ2dlci50cmltKCkuc3BsaXQoL1xccysvKTtcbn1cblxuZnVuY3Rpb24gZ2V0TGVnYWN5V2Vic29ja2V0VVJMKGVsdDogRWxlbWVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbGVnYWN5U1NFVmFsdWUgPSBhcGkuZ2V0QXR0cmlidXRlVmFsdWUoZWx0LCAnaHgtd3MnKTtcbiAgICBpZiAobGVnYWN5U1NFVmFsdWUpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gc3BsaXRPbldoaXRlc3BhY2UobGVnYWN5U1NFVmFsdWUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV0uc3BsaXQoLzooLispLyk7XG4gICAgICAgICAgICBpZiAodmFsdWVbMF0gPT09ICdjb25uZWN0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVXZWJTb2NrZXQoc29ja2V0RWx0OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIC8vIElmIHRoZSBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIG5vIGxvbmdlciBleGlzdHMsIHRoZW5cbiAgICAvLyBkbyBub3QgY29ubmVjdC9yZWNvbm5lY3QgdGhlIFdlYlNvY2tldC5cbiAgICBpZiAoIWFwaS5ib2R5Q29udGFpbnMoc29ja2V0RWx0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBzb3VyY2Ugc3RyYWlnaHQgZnJvbSB0aGUgZWxlbWVudCdzIHZhbHVlXG4gICAgbGV0IHdzc1NvdXJjZSA9IGFwaS5nZXRBdHRyaWJ1dGVWYWx1ZShzb2NrZXRFbHQsICd3cy1jb25uZWN0Jyk7XG5cbiAgICBpZiAod3NzU291cmNlID09IG51bGwgfHwgd3NzU291cmNlID09PSAnJykge1xuICAgICAgICBjb25zdCBsZWdhY3lTb3VyY2UgPSBnZXRMZWdhY3lXZWJzb2NrZXRVUkwoc29ja2V0RWx0KTtcbiAgICAgICAgaWYgKGxlZ2FjeVNvdXJjZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3c3NTb3VyY2UgPSBsZWdhY3lTb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHdWFyYW50ZWUgdGhhdCB0aGUgd3NzU291cmNlIHZhbHVlIGlzIGEgZnVsbHkgcXVhbGlmaWVkIFVSTFxuICAgIGlmICh3c3NTb3VyY2UuaW5kZXhPZignLycpID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGJhc2VfcGFydCA9IGxvY2F0aW9uLmhvc3RuYW1lICsgKGxvY2F0aW9uLnBvcnQgPyAnOicgKyBsb2NhdGlvbi5wb3J0IDogJycpO1xuICAgICAgICBpZiAobG9jYXRpb24ucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICAgICAgICB3c3NTb3VyY2UgPSAnd3NzOi8vJyArIGJhc2VfcGFydCArIHdzc1NvdXJjZTtcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhdGlvbi5wcm90b2NvbCA9PT0gJ2h0dHA6Jykge1xuICAgICAgICAgICAgd3NzU291cmNlID0gJ3dzOi8vJyArIGJhc2VfcGFydCArIHdzc1NvdXJjZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNvY2tldFdyYXBwZXIgPSBjcmVhdGVXZWJzb2NrZXRXcmFwcGVyKHNvY2tldEVsdCwgKCkgPT4gY3JlYXRlV2ViU29ja2V0KHdzc1NvdXJjZSkpO1xuXG4gICAgc29ja2V0V3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChtYXliZUNsb3NlV2ViU29ja2V0U291cmNlKHNvY2tldEVsdCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZSA9IChldmVudCBhcyBNZXNzYWdlRXZlbnQpLmRhdGE7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFhcGkudHJpZ2dlckV2ZW50KHNvY2tldEVsdCwgJ2h0bXg6d3NCZWZvcmVNZXNzYWdlJywge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHNvY2tldFdyYXBwZXI6IHNvY2tldFdyYXBwZXIucHVibGljSW50ZXJmYWNlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhcGkud2l0aEV4dGVuc2lvbnMoc29ja2V0RWx0LCAoZXh0ZW5zaW9uKSA9PiB7XG4gICAgICAgICAgICByZXNwb25zZSA9IGV4dGVuc2lvbi50cmFuc2Zvcm1SZXNwb25zZShyZXNwb25zZSwgbnVsbCwgc29ja2V0RWx0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc2V0dGxlSW5mbyA9IGFwaS5tYWtlU2V0dGxlSW5mbyhzb2NrZXRFbHQpO1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IGFwaS5tYWtlRnJhZ21lbnQocmVzcG9uc2UpO1xuXG4gICAgICAgIGlmIChmcmFnbWVudC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuZnJvbShmcmFnbWVudC5jaGlsZHJlbik7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXVxuICAgICAgICAgICAgICAgIGFwaS5vb2JTd2FwKGFwaS5nZXRBdHRyaWJ1dGVWYWx1ZShjaGlsZCwgJ2h4LXN3YXAtb29iJykgfHwgJ3RydWUnLCBjaGlsZHJlbltpXSwgc2V0dGxlSW5mbyk7XG4gICAgICAgICAgICAgICAgLy8gc3VwcG9ydCBodG1nbyBldmFsX18gc2NyaXB0c1xuICAgICAgICAgICAgICAgIGlmKGNoaWxkLnRhZ05hbWUgPT09ICdTQ1JJUFQnICYmIGNoaWxkLmlkLnN0YXJ0c1dpdGgoXCJfX2V2YWxcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXBpLnNldHRsZUltbWVkaWF0ZWx5KHNldHRsZUluZm8udGFza3MpO1xuICAgICAgICBhcGkudHJpZ2dlckV2ZW50KHNvY2tldEVsdCwgJ2h0bXg6d3NBZnRlck1lc3NhZ2UnLCB7XG4gICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZSxcbiAgICAgICAgICAgIHNvY2tldFdyYXBwZXI6IHNvY2tldFdyYXBwZXIucHVibGljSW50ZXJmYWNlLFxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFB1dCB0aGUgV2ViU29ja2V0IGludG8gdGhlIEhUTUwgRWxlbWVudCdzIGN1c3RvbSBkYXRhLlxuICAgIGFwaS5nZXRJbnRlcm5hbERhdGEoc29ja2V0RWx0KS53ZWJTb2NrZXQgPSBzb2NrZXRXcmFwcGVyO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVXZWJzb2NrZXRXcmFwcGVyKHNvY2tldEVsdDogSFRNTEVsZW1lbnQsIHNvY2tldEZ1bmM6ICgpID0+IFdlYlNvY2tldCk6IFdlYlNvY2tldFdyYXBwZXIge1xuICAgIGNvbnN0IHdyYXBwZXI6IFdlYlNvY2tldFdyYXBwZXIgPSB7XG4gICAgICAgIHNvY2tldDogbnVsbCBhcyB1bmtub3duIGFzIFdlYlNvY2tldCxcbiAgICAgICAgbWVzc2FnZVF1ZXVlOiBbXSxcbiAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgZXZlbnRzOiB7fSBhcyB7IFtrZXk6IHN0cmluZ106ICgoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkKVtdIH0sXG4gICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnQ6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5ldmVudHNbZXZlbnRdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudHNbZXZlbnRdID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZXZlbnRzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9LFxuICAgICAgICBzZW5kSW1tZWRpYXRlbHkobWVzc2FnZTogc3RyaW5nLCBzZW5kRWx0OiBFbGVtZW50IHwgbnVsbCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNvY2tldCkge1xuICAgICAgICAgICAgICAgIGFwaS50cmlnZ2VyRXJyb3JFdmVudChzb2NrZXRFbHQsICdodG14OndzRXJyb3InLCB7IGVycm9yOiAnTm8gc29ja2V0IGF2YWlsYWJsZScgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXNlbmRFbHQgfHxcbiAgICAgICAgICAgICAgICBhcGkudHJpZ2dlckV2ZW50KHNlbmRFbHQsICdodG14OndzQmVmb3JlU2VuZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgc29ja2V0V3JhcHBlcjogdGhpcy5wdWJsaWNJbnRlcmZhY2UsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbmRFbHQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBpLnRyaWdnZXJFdmVudChzZW5kRWx0LCAnaHRteDp3c0FmdGVyU2VuZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXRXcmFwcGVyOiB0aGlzLnB1YmxpY0ludGVyZmFjZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZW5kKG1lc3NhZ2U6IHN0cmluZywgc2VuZEVsdDogRWxlbWVudCB8IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNvY2tldC5yZWFkeVN0YXRlICE9PSB0aGlzLnNvY2tldC5PUEVOKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlUXVldWUucHVzaCh7IG1lc3NhZ2UsIHNlbmRFbHQgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZEltbWVkaWF0ZWx5KG1lc3NhZ2UsIHNlbmRFbHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVRdWV1ZWRNZXNzYWdlcygpIHtcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLm1lc3NhZ2VRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVldWVkSXRlbSA9IHRoaXMubWVzc2FnZVF1ZXVlWzBdO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvY2tldC5yZWFkeVN0YXRlID09PSB0aGlzLnNvY2tldC5PUEVOKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZEltbWVkaWF0ZWx5KHF1ZXVlZEl0ZW0ubWVzc2FnZSwgcXVldWVkSXRlbS5zZW5kRWx0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGluaXQoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zb2NrZXQgJiYgdGhpcy5zb2NrZXQucmVhZHlTdGF0ZSA9PT0gdGhpcy5zb2NrZXQuT1BFTikge1xuICAgICAgICAgICAgICAgIC8vIENsb3NlIGRpc2NhcmRlZCBzb2NrZXRcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgV2ViU29ja2V0IGFuZCBldmVudCBoYW5kbGVyc1xuICAgICAgICAgICAgY29uc3Qgc29ja2V0ID0gc29ja2V0RnVuYygpO1xuXG4gICAgICAgICAgICAvLyBUaGUgZXZlbnQudHlwZSBkZXRhaWwgaXMgYWRkZWQgZm9yIGludGVyZmFjZSBjb25mb3JtYW5jZSB3aXRoIHRoZVxuICAgICAgICAgICAgLy8gb3RoZXIgdHdvIGxpZmVjeWNsZSBldmVudHMgKG9wZW4gYW5kIGNsb3NlKSBzbyBhIHNpbmdsZSBoYW5kbGVyIG1ldGhvZFxuICAgICAgICAgICAgLy8gY2FuIGhhbmRsZSB0aGVtIHBvbHltb3JwaGljYWxseSwgaWYgcmVxdWlyZWQuXG4gICAgICAgICAgICBhcGkudHJpZ2dlckV2ZW50KHNvY2tldEVsdCwgJ2h0bXg6d3NDb25uZWN0aW5nJywgeyBldmVudDogeyB0eXBlOiAnY29ubmVjdGluZycgfSB9KTtcblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQgPSBzb2NrZXQ7XG5cbiAgICAgICAgICAgIHNvY2tldC5vbm9wZW4gPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmV0cnlDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgYXBpLnRyaWdnZXJFdmVudChzb2NrZXRFbHQsICdodG14OndzT3BlbicsIHsgZXZlbnQ6IGUsIHNvY2tldFdyYXBwZXI6IHRoaXMucHVibGljSW50ZXJmYWNlIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUXVldWVkTWVzc2FnZXMoKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHNvY2tldC5vbmNsb3NlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiBzb2NrZXQgc2hvdWxkIG5vdCBiZSBjb25uZWN0ZWQsIHN0b3AgZnVydGhlciBhdHRlbXB0cyB0byBlc3RhYmxpc2ggY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIC8vIElmIEFibm9ybWFsIENsb3N1cmUvU2VydmljZSBSZXN0YXJ0L1RyeSBBZ2FpbiBMYXRlciwgdGhlbiBzZXQgYSB0aW1lciB0byByZWNvbm5lY3QgYWZ0ZXIgYSBwYXVzZS5cbiAgICAgICAgICAgICAgICBpZiAoIW1heWJlQ2xvc2VXZWJTb2NrZXRTb3VyY2Uoc29ja2V0RWx0KSAmJiBbMTAwNiwgMTAxMiwgMTAxM10uaW5kZXhPZihlLmNvZGUpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVsYXkgPSBnZXRXZWJTb2NrZXRSZWNvbm5lY3REZWxheSh0aGlzLnJldHJ5Q291bnQpO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmV0cnlDb3VudCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBOb3RpZnkgY2xpZW50IGNvZGUgdGhhdCBjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZC4gQ2xpZW50IGNvZGUgY2FuIGluc3BlY3QgYGV2ZW50YCBmaWVsZFxuICAgICAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIGNsb3N1cmUgaGFzIGJlZW4gdmFsaWQgb3IgYWJub3JtYWxcbiAgICAgICAgICAgICAgICBhcGkudHJpZ2dlckV2ZW50KHNvY2tldEVsdCwgJ2h0bXg6d3NDbG9zZScsIHsgZXZlbnQ6IGUsIHNvY2tldFdyYXBwZXI6IHRoaXMucHVibGljSW50ZXJmYWNlIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc29ja2V0Lm9uZXJyb3IgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFwaS50cmlnZ2VyRXJyb3JFdmVudChzb2NrZXRFbHQsICdodG14OndzRXJyb3InLCB7IGVycm9yOiBlLCBzb2NrZXRXcmFwcGVyOiB0aGlzIH0pO1xuICAgICAgICAgICAgICAgIG1heWJlQ2xvc2VXZWJTb2NrZXRTb3VyY2Uoc29ja2V0RWx0KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuZXZlbnRzO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnRzW2tdLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoaywgZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xvc2UoKSB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICB9LFxuICAgICAgICBwdWJsaWNJbnRlcmZhY2U6IHt9IGFzIGFueSxcbiAgICB9O1xuXG4gICAgd3JhcHBlci5pbml0KCk7XG5cbiAgICB3cmFwcGVyLnB1YmxpY0ludGVyZmFjZSA9IHtcbiAgICAgICAgc2VuZDogd3JhcHBlci5zZW5kLmJpbmQod3JhcHBlciksXG4gICAgICAgIHNlbmRJbW1lZGlhdGVseTogd3JhcHBlci5zZW5kSW1tZWRpYXRlbHkuYmluZCh3cmFwcGVyKSxcbiAgICAgICAgcXVldWU6IHdyYXBwZXIubWVzc2FnZVF1ZXVlLFxuICAgIH07XG5cbiAgICByZXR1cm4gd3JhcHBlcjtcbn1cblxuZnVuY3Rpb24gZW5zdXJlV2ViU29ja2V0U2VuZChlbHQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgbGVnYWN5QXR0cmlidXRlID0gYXBpLmdldEF0dHJpYnV0ZVZhbHVlKGVsdCwgJ2h4LXdzJyk7XG4gICAgaWYgKGxlZ2FjeUF0dHJpYnV0ZSAmJiBsZWdhY3lBdHRyaWJ1dGUgIT09ICdzZW5kJykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgd2ViU29ja2V0UGFyZW50ID0gYXBpLmdldENsb3Nlc3RNYXRjaChlbHQsIChub2RlKSA9PiB7XG4gICAgICAgIHJldHVybiBoYXNXZWJTb2NrZXQobm9kZSBhcyBIVE1MRWxlbWVudCk7XG4gICAgfSk7XG4gICAgaWYgKHdlYlNvY2tldFBhcmVudCkge1xuICAgICAgICBwcm9jZXNzV2ViU29ja2V0U2VuZCh3ZWJTb2NrZXRQYXJlbnQgYXMgSFRNTEVsZW1lbnQsIGVsdCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBoYXNXZWJTb2NrZXQobm9kZTogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBpLmdldEludGVybmFsRGF0YShub2RlKS53ZWJTb2NrZXQgIT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1dlYlNvY2tldFNlbmQoc29ja2V0RWx0OiBIVE1MRWxlbWVudCwgc2VuZEVsdDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlRGF0YSA9IGFwaS5nZXRJbnRlcm5hbERhdGEoc2VuZEVsdCk7XG4gICAgY29uc3QgdHJpZ2dlclNwZWNzID0gYXBpLmdldFRyaWdnZXJTcGVjcyhzZW5kRWx0KTtcbiAgICB0cmlnZ2VyU3BlY3MuZm9yRWFjaCgodHMpID0+IHtcbiAgICAgICAgYXBpLmFkZFRyaWdnZXJIYW5kbGVyKHNlbmRFbHQsIHRzLCBub2RlRGF0YSwgKGVsdDogRWxlbWVudCwgZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKG1heWJlQ2xvc2VXZWJTb2NrZXRTb3VyY2Uoc29ja2V0RWx0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc29ja2V0V3JhcHBlcjogV2ViU29ja2V0V3JhcHBlciA9IGFwaS5nZXRJbnRlcm5hbERhdGEoc29ja2V0RWx0KS53ZWJTb2NrZXQ7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gYXBpLmdldEhlYWRlcnMoc2VuZEVsdCwgYXBpLmdldFRhcmdldChzZW5kRWx0KSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRzID0gYXBpLmdldElucHV0VmFsdWVzKHNlbmRFbHQsICdwb3N0Jyk7XG4gICAgICAgICAgICBjb25zdCBlcnJvcnMgPSByZXN1bHRzLmVycm9ycztcbiAgICAgICAgICAgIGNvbnN0IHJhd1BhcmFtZXRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCByZXN1bHRzLnZhbHVlcyk7XG4gICAgICAgICAgICBjb25zdCBleHByZXNzaW9uVmFycyA9IGFwaS5nZXRFeHByZXNzaW9uVmFycyhzZW5kRWx0KTtcbiAgICAgICAgICAgIGNvbnN0IGFsbFBhcmFtZXRlcnMgPSBhcGkubWVyZ2VPYmplY3RzKHJhd1BhcmFtZXRlcnMsIGV4cHJlc3Npb25WYXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUGFyYW1ldGVycyA9IGFwaS5maWx0ZXJWYWx1ZXMoYWxsUGFyYW1ldGVycywgc2VuZEVsdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbmRDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyczogZmlsdGVyZWRQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHVuZmlsdGVyZWRQYXJhbWV0ZXJzOiBhbGxQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgZXJyb3JzLFxuXG4gICAgICAgICAgICAgICAgdHJpZ2dlcmluZ0V2ZW50OiBldnQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZUJvZHk6IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgc29ja2V0V3JhcHBlcjogc29ja2V0V3JhcHBlci5wdWJsaWNJbnRlcmZhY2UsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoIWFwaS50cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDp3c0NvbmZpZ1NlbmQnLCBzZW5kQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFwaS50cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDp2YWxpZGF0aW9uOmhhbHRlZCcsIGVycm9ycyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgYm9keSA9IHNlbmRDb25maWcubWVzc2FnZUJvZHk7XG4gICAgICAgICAgICBpZiAoYm9keSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9TZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgc2VuZENvbmZpZy5wYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VuZENvbmZpZy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvU2VuZC5IRUFERVJTID0gaGVhZGVycztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KHRvU2VuZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNvY2tldFdyYXBwZXIuc2VuZChib2R5LCBlbHQgYXMgRWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChldnQgJiYgYXBpLnNob3VsZENhbmNlbChldnQsIGVsdCBhcyBFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0V2ViU29ja2V0UmVjb25uZWN0RGVsYXkocmV0cnlDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBleHAgPSBNYXRoLm1pbihyZXRyeUNvdW50LCA2KTtcbiAgICBjb25zdCBtYXhEZWxheSA9IDEwMDAgKiBNYXRoLnBvdygyLCBleHApO1xuICAgIHJldHVybiBtYXhEZWxheSAqIE1hdGgucmFuZG9tKCk7XG59XG5cbmZ1bmN0aW9uIG1heWJlQ2xvc2VXZWJTb2NrZXRTb3VyY2UoZWx0OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGlmICghYXBpLmJvZHlDb250YWlucyhlbHQpKSB7XG4gICAgICAgIGFwaS5nZXRJbnRlcm5hbERhdGEoZWx0KS53ZWJTb2NrZXQuY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlV2ViU29ja2V0KHVybDogc3RyaW5nKTogV2ViU29ja2V0IHtcbiAgICBjb25zdCBzb2NrID0gbmV3IFdlYlNvY2tldCh1cmwsIFtdKTtcbiAgICBzb2NrLmJpbmFyeVR5cGUgPSAoaHRteC5jb25maWcud3NCaW5hcnlUeXBlIHx8ICdibG9iJykgYXMgdW5rbm93biBhcyBCaW5hcnlUeXBlO1xuICAgIHJldHVybiBzb2NrO1xufVxuXG5mdW5jdGlvbiBxdWVyeUF0dHJpYnV0ZU9uVGhpc09yQ2hpbGRyZW4oZWx0OiBIVE1MRWxlbWVudCwgYXR0cmlidXRlTmFtZTogc3RyaW5nKTogSFRNTEVsZW1lbnRbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBIVE1MRWxlbWVudFtdID0gW107XG5cbiAgICAvLyBJZiB0aGUgcGFyZW50IGVsZW1lbnQgYWxzbyBjb250YWlucyB0aGUgcmVxdWVzdGVkIGF0dHJpYnV0ZSwgdGhlbiBhZGQgaXQgdG8gdGhlIHJlc3VsdHMgdG9vLlxuICAgIGlmIChhcGkuaGFzQXR0cmlidXRlKGVsdCwgYXR0cmlidXRlTmFtZSkgfHwgYXBpLmhhc0F0dHJpYnV0ZShlbHQsICdoeC13cycpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVsdCk7XG4gICAgfVxuXG4gICAgLy8gU2VhcmNoIGFsbCBjaGlsZCBub2RlcyB0aGF0IG1hdGNoIHRoZSByZXF1ZXN0ZWQgYXR0cmlidXRlXG4gICAgZWx0LnF1ZXJ5U2VsZWN0b3JBbGwoJ1snICsgYXR0cmlidXRlTmFtZSArICddLCBbZGF0YS0nICsgYXR0cmlidXRlTmFtZSArICddLCBbZGF0YS1oeC13c10sIFtoeC13c10nKS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG5vZGUgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZm9yRWFjaDxUPihhcnI6IFRbXSwgZnVuYzogKGl0ZW06IFQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAoYXJyKSB7XG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmMpO1xuICAgIH1cbn1cblxuaHRteC5kZWZpbmVFeHRlbnNpb24oJ3dzJywge1xuICAgIGluaXQ6IChhcGlSZWY6IEh0bXhJbnRlcm5hbEFwaSkgPT4ge1xuICAgICAgICAvLyBTdG9yZSByZWZlcmVuY2UgdG8gaW50ZXJuYWwgQVBJXG4gICAgICAgIGFwaSA9IGFwaVJlZjtcbiAgICB9LFxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9uRXZlbnQ6IChuYW1lOiBzdHJpbmcsIGV2dDogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50OiBFbGVtZW50ID0gZXZ0LnRhcmdldCBhcyBFbGVtZW50IHx8IChldnQgYXMgQ3VzdG9tRXZlbnQpLmRldGFpbC5lbHQ7XG5cbiAgICAgICAgaWYoIShwYXJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAvLyBUcnkgdG8gY2xvc2UgdGhlIHNvY2tldCB3aGVuIGVsZW1lbnRzIGFyZSByZW1vdmVkXG4gICAgICAgICAgICBjYXNlICdodG14OmJlZm9yZUNsZWFudXBFbGVtZW50JzpcbiAgICAgICAgICAgICAgICByZW1vdmVBc3NvY2lhdGVkU2NyaXB0cyhwYXJlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFsRGF0YSA9IGFwaS5nZXRJbnRlcm5hbERhdGEocGFyZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxEYXRhLndlYlNvY2tldCkge1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbERhdGEud2ViU29ja2V0LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgLy8gVHJ5IHRvIGNyZWF0ZSB3ZWJzb2NrZXRzIHdoZW4gZWxlbWVudHMgYXJlIHByb2Nlc3NlZFxuICAgICAgICAgICAgY2FzZSAnaHRteDpiZWZvcmVQcm9jZXNzTm9kZSc6XG4gICAgICAgICAgICAgICAgZm9yRWFjaChxdWVyeUF0dHJpYnV0ZU9uVGhpc09yQ2hpbGRyZW4ocGFyZW50LCAnd3MtY29ubmVjdCcpLCAoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZW5zdXJlV2ViU29ja2V0KGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3JFYWNoKHF1ZXJ5QXR0cmlidXRlT25UaGlzT3JDaGlsZHJlbihwYXJlbnQsICd3cy1zZW5kJyksIChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlbnN1cmVXZWJTb2NrZXRTZW5kKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG59KTtcbiIsImltcG9ydCBodG14IGZyb20gXCJodG14Lm9yZ1wiO1xuaW1wb3J0IFwiLi9odG14ZXh0ZW5zaW9ucy9wYXRoZGVwc1wiO1xuaW1wb3J0IFwiLi9odG14ZXh0ZW5zaW9ucy90cmlnZ2VyLWNoaWxkcmVuXCI7XG5pbXBvcnQgXCIuL2h0bXhleHRlbnNpb25zL2RlYnVnXCI7XG5pbXBvcnQgXCIuL2h0bXhleHRlbnNpb25zL3Jlc3BvbnNlLXRhcmdldHNcIjtcbmltcG9ydCBcIi4vaHRteGV4dGVuc2lvbnMvbXV0YXRpb24tZXJyb3JcIjtcbmltcG9ydCBcIi4vaHRteGV4dGVuc2lvbnMvbGl2ZXJlbG9hZFwiXG5pbXBvcnQgXCIuL2h0bXhleHRlbnNpb25zL2h0bWdvXCI7XG5pbXBvcnQgXCIuL2h0bXhleHRlbnNpb25zL3dzXCJcblxuZnVuY3Rpb24gd2F0Y2hVcmwoY2FsbGJhY2s6IChvbGRVcmw6IHN0cmluZywgbmV3VXJsOiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgbGV0IGxhc3RVcmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZiAhPT0gbGFzdFVybCkge1xuICAgICAgY2FsbGJhY2sobGFzdFVybCwgd2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgbGFzdFVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgIH1cbiAgfSwgMTAwKTtcbn1cblxud2F0Y2hVcmwoKF8sIG5ld1VybCkgPT4ge1xuICBvblVybENoYW5nZShuZXdVcmwpO1xufSk7XG5cbmZ1bmN0aW9uIG9uVXJsQ2hhbmdlKG5ld1VybDogc3RyaW5nKSB7XG4gIGxldCB1cmwgPSBuZXcgVVJMKG5ld1VybCk7XG5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltoeC10cmlnZ2VyXVwiKS5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgY29uc3QgdHJpZ2dlcnMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImh4LXRyaWdnZXJcIik7XG4gICAgaWYgKCF0cmlnZ2Vycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzcGxpdCA9IHRyaWdnZXJzLnNwbGl0KFwiLCBcIik7XG4gICAgaWYgKHNwbGl0LmZpbmQoKHMpID0+IHMgPT09IFwidXJsXCIpKSB7XG4gICAgICBodG14LnN3YXAoZWxlbWVudCwgXCJ1cmxcIiwge1xuICAgICAgICBzd2FwU3R5bGU6IFwib3V0ZXJIVE1MXCIsXG4gICAgICAgIHN3YXBEZWxheTogMCxcbiAgICAgICAgc2V0dGxlRGVsYXk6IDAsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVzXSBvZiB1cmwuc2VhcmNoUGFyYW1zKSB7XG4gICAgICAgIGxldCBldmVudE5hbWUgPSBcInFzOlwiICsga2V5O1xuICAgICAgICBpZiAodHJpZ2dlcnMuaW5jbHVkZXMoZXZlbnROYW1lKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwidHJpZ2dlcmluZ1wiLCBldmVudE5hbWUpO1xuICAgICAgICAgIGh0bXgudHJpZ2dlcihlbGVtZW50LCBldmVudE5hbWUsIG51bGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2h4LW1hdGNoLXFwXVwiKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgIGxldCBoYXNNYXRjaCA9IGZhbHNlO1xuICAgIGZvciAobGV0IG5hbWUgb2YgZWwuZ2V0QXR0cmlidXRlTmFtZXMoKSkge1xuICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aChcImh4LW1hdGNoLXFwLW1hcHBpbmc6XCIpKSB7XG4gICAgICAgIGxldCBtYXRjaCA9IG5hbWUucmVwbGFjZShcImh4LW1hdGNoLXFwLW1hcHBpbmc6XCIsIFwiXCIpO1xuICAgICAgICBsZXQgdmFsdWUgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChtYXRjaCk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGh0bXguc3dhcChlbCwgZWwuZ2V0QXR0cmlidXRlKG5hbWUpID8/IFwiXCIsIHtcbiAgICAgICAgICAgIHN3YXBTdHlsZTogXCJpbm5lckhUTUxcIixcbiAgICAgICAgICAgIHN3YXBEZWxheTogMCxcbiAgICAgICAgICAgIHNldHRsZURlbGF5OiAwLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGhhc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWhhc01hdGNoKSB7XG4gICAgICBsZXQgZGVmYXVsdEtleSA9IGVsLmdldEF0dHJpYnV0ZShcImh4LW1hdGNoLXFwLWRlZmF1bHRcIik7XG4gICAgICBpZiAoZGVmYXVsdEtleSkge1xuICAgICAgICBodG14LnN3YXAoXG4gICAgICAgICAgZWwsXG4gICAgICAgICAgZWwuZ2V0QXR0cmlidXRlKFwiaHgtbWF0Y2gtcXAtbWFwcGluZzpcIiArIGRlZmF1bHRLZXkpID8/IFwiXCIsXG4gICAgICAgICAgeyBzd2FwU3R5bGU6IFwiaW5uZXJIVE1MXCIsIHN3YXBEZWxheTogMCwgc2V0dGxlRGVsYXk6IDAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuIl19