101 lines
2.4 MiB
101 lines
2.4 MiB
var Bn=Object.defineProperty;var Vn=(n,e,t)=>e in n?Bn(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var F=(n,e,t)=>(Vn(n,typeof e!="symbol"?e+"":e,t),t);var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}function getAugmentedNamespace(n){if(n.__esModule)return n;var e=n.default;if(typeof e=="function"){var t=function r(){return this instanceof r?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};t.prototype=e.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(n).forEach(function(r){var o=Object.getOwnPropertyDescriptor(n,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return n[r]}})}),t}var jquery={exports:{}};/*!
|
||
* jQuery JavaScript Library v3.7.1
|
||
* https://jquery.com/
|
||
*
|
||
* Copyright OpenJS Foundation and other contributors
|
||
* Released under the MIT license
|
||
* https://jquery.org/license
|
||
*
|
||
* Date: 2023-08-28T13:37Z
|
||
*/(function(n){(function(e,t){n.exports=e.document?t(e,!0):function(r){if(!r.document)throw new Error("jQuery requires a window with a document");return t(r)}})(typeof window<"u"?window:commonjsGlobal,function(e,t){var r=[],o=Object.getPrototypeOf,s=r.slice,l=r.flat?function(i){return r.flat.call(i)}:function(i){return r.concat.apply([],i)},f=r.push,E=r.indexOf,d={},h=d.toString,y=d.hasOwnProperty,S=y.toString,O=S.call(Object),w={},x=function(a){return typeof a=="function"&&typeof a.nodeType!="number"&&typeof a.item!="function"},H=function(a){return a!=null&&a===a.window},D=e.document,Z={type:!0,src:!0,nonce:!0,noModule:!0};function V(i,a,c){c=c||D;var p,m,g=c.createElement("script");if(g.text=i,a)for(p in Z)m=a[p]||a.getAttribute&&a.getAttribute(p),m&&g.setAttribute(p,m);c.head.appendChild(g).parentNode.removeChild(g)}function Y(i){return i==null?i+"":typeof i=="object"||typeof i=="function"?d[h.call(i)]||"object":typeof i}var ne="3.7.1",B=/HTML$/i,u=function(i,a){return new u.fn.init(i,a)};u.fn=u.prototype={jquery:ne,constructor:u,length:0,toArray:function(){return s.call(this)},get:function(i){return i==null?s.call(this):i<0?this[i+this.length]:this[i]},pushStack:function(i){var a=u.merge(this.constructor(),i);return a.prevObject=this,a},each:function(i){return u.each(this,i)},map:function(i){return this.pushStack(u.map(this,function(a,c){return i.call(a,c,a)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(u.grep(this,function(i,a){return(a+1)%2}))},odd:function(){return this.pushStack(u.grep(this,function(i,a){return a%2}))},eq:function(i){var a=this.length,c=+i+(i<0?a:0);return this.pushStack(c>=0&&c<a?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:f,sort:r.sort,splice:r.splice},u.extend=u.fn.extend=function(){var i,a,c,p,m,g,_=arguments[0]||{},A=1,b=arguments.length,C=!1;for(typeof _=="boolean"&&(C=_,_=arguments[A]||{},A++),typeof _!="object"&&!x(_)&&(_={}),A===b&&(_=this,A--);A<b;A++)if((i=arguments[A])!=null)for(a in i)p=i[a],!(a==="__proto__"||_===p)&&(C&&p&&(u.isPlainObject(p)||(m=Array.isArray(p)))?(c=_[a],m&&!Array.isArray(c)?g=[]:!m&&!u.isPlainObject(c)?g={}:g=c,m=!1,_[a]=u.extend(C,g,p)):p!==void 0&&(_[a]=p));return _},u.extend({expando:"jQuery"+(ne+Math.random()).replace(/\D/g,""),isReady:!0,error:function(i){throw new Error(i)},noop:function(){},isPlainObject:function(i){var a,c;return!i||h.call(i)!=="[object Object]"?!1:(a=o(i),a?(c=y.call(a,"constructor")&&a.constructor,typeof c=="function"&&S.call(c)===O):!0)},isEmptyObject:function(i){var a;for(a in i)return!1;return!0},globalEval:function(i,a,c){V(i,{nonce:a&&a.nonce},c)},each:function(i,a){var c,p=0;if(X(i))for(c=i.length;p<c&&a.call(i[p],p,i[p])!==!1;p++);else for(p in i)if(a.call(i[p],p,i[p])===!1)break;return i},text:function(i){var a,c="",p=0,m=i.nodeType;if(!m)for(;a=i[p++];)c+=u.text(a);return m===1||m===11?i.textContent:m===9?i.documentElement.textContent:m===3||m===4?i.nodeValue:c},makeArray:function(i,a){var c=a||[];return i!=null&&(X(Object(i))?u.merge(c,typeof i=="string"?[i]:i):f.call(c,i)),c},inArray:function(i,a,c){return a==null?-1:E.call(a,i,c)},isXMLDoc:function(i){var a=i&&i.namespaceURI,c=i&&(i.ownerDocument||i).documentElement;return!B.test(a||c&&c.nodeName||"HTML")},merge:function(i,a){for(var c=+a.length,p=0,m=i.length;p<c;p++)i[m++]=a[p];return i.length=m,i},grep:function(i,a,c){for(var p,m=[],g=0,_=i.length,A=!c;g<_;g++)p=!a(i[g],g),p!==A&&m.push(i[g]);return m},map:function(i,a,c){var p,m,g=0,_=[];if(X(i))for(p=i.length;g<p;g++)m=a(i[g],g,c),m!=null&&_.push(m);else for(g in i)m=a(i[g],g,c),m!=null&&_.push(m);return l(_)},guid:1,support:w}),typeof Symbol=="function"&&(u.fn[Symbol.iterator]=r[Symbol.iterator]),u.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(i,a){d["[object "+a+"]"]=a.toLowerCase()});function X(i){var a=!!i&&"length"in i&&i.length,c=Y(i);return x(i)||H(i)?!1:c==="array"||a===0||typeof a=="number"&&a>0&&a-1 in i}function U(i,a){return i.nodeName&&i.nodeName.toLowerCase()===a.toLowerCase()}var I=r.pop,K=r.sort,q=r.splice,G="[\\x20\\t\\r\\n\\f]",oe=new RegExp("^"+G+"+|((?:^|[^\\\\])(?:\\\\.)*)"+G+"+$","g");u.contains=function(i,a){var c=a&&a.parentNode;return i===c||!!(c&&c.nodeType===1&&(i.contains?i.contains(c):i.compareDocumentPosition&&i.compareDocumentPosition(c)&16))};var ue=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function pe(i,a){return a?i==="\0"?"<22>":i.slice(0,-1)+"\\"+i.charCodeAt(i.length-1).toString(16)+" ":"\\"+i}u.escapeSelector=function(i){return(i+"").replace(ue,pe)};var le=D,ve=f;(function(){var i,a,c,p,m,g=ve,_,A,b,C,L,k=u.expando,R=0,W=0,ae=Wt(),_e=Wt(),de=Wt(),Pe=Wt(),Ne=function(v,T){return v===T&&(m=!0),0},Ye="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ze="(?:\\\\[\\da-fA-F]{1,6}"+G+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",Ee="\\["+G+"*("+ze+")(?:"+G+"*([*^$|!~]?=)"+G+`*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(`+ze+"))|)"+G+"*\\]",ht=":("+ze+`)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|`+Ee+")*)|.*)\\)|)",ye=new RegExp(G+"+","g"),Oe=new RegExp("^"+G+"*,"+G+"*"),Dt=new RegExp("^"+G+"*([>+~]|"+G+")"+G+"*"),cr=new RegExp(G+"|>"),Xe=new RegExp(ht),Pt=new RegExp("^"+ze+"$"),Qe={ID:new RegExp("^#("+ze+")"),CLASS:new RegExp("^\\.("+ze+")"),TAG:new RegExp("^("+ze+"|[*])"),ATTR:new RegExp("^"+Ee),PSEUDO:new RegExp("^"+ht),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+G+"*(even|odd|(([+-]|)(\\d*)n|)"+G+"*(?:([+-]|)"+G+"*(\\d+)|))"+G+"*\\)|)","i"),bool:new RegExp("^(?:"+Ye+")$","i"),needsContext:new RegExp("^"+G+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+G+"*((?:-\\d)?\\d*)"+G+"*\\)|)(?=[^-]|$)","i")},st=/^(?:input|select|textarea|button)$/i,at=/^h\d$/i,We=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ur=/[+~]/,nt=new RegExp("\\\\[\\da-fA-F]{1,6}"+G+"?|\\\\([^\\r\\n\\f])","g"),it=function(v,T){var N="0x"+v.slice(1)-65536;return T||(N<0?String.fromCharCode(N+65536):String.fromCharCode(N>>10|55296,N&1023|56320))},In=function(){lt()},Ln=Gt(function(v){return v.disabled===!0&&U(v,"fieldset")},{dir:"parentNode",next:"legend"});function Mn(){try{return _.activeElement}catch{}}try{g.apply(r=s.call(le.childNodes),le.childNodes),r[le.childNodes.length].nodeType}catch{g={apply:function(T,N){ve.apply(T,s.call(N))},call:function(T){ve.apply(T,s.call(arguments,1))}}}function Ae(v,T,N,P){var M,z,Q,re,J,me,se,ce=T&&T.ownerDocument,ge=T?T.nodeType:9;if(N=N||[],typeof v!="string"||!v||ge!==1&&ge!==9&&ge!==11)return N;if(!P&&(lt(T),T=T||_,b)){if(ge!==11&&(J=We.exec(v)))if(M=J[1]){if(ge===9)if(Q=T.getElementById(M)){if(Q.id===M)return g.call(N,Q),N}else return N;else if(ce&&(Q=ce.getElementById(M))&&Ae.contains(T,Q)&&Q.id===M)return g.call(N,Q),N}else{if(J[2])return g.apply(N,T.getElementsByTagName(v)),N;if((M=J[3])&&T.getElementsByClassName)return g.apply(N,T.getElementsByClassName(M)),N}if(!Pe[v+" "]&&(!C||!C.test(v))){if(se=v,ce=T,ge===1&&(cr.test(v)||Dt.test(v))){for(ce=ur.test(v)&&fr(T.parentNode)||T,(ce!=T||!w.scope)&&((re=T.getAttribute("id"))?re=u.escapeSelector(re):T.setAttribute("id",re=k)),me=It(v),z=me.length;z--;)me[z]=(re?"#"+re:":scope")+" "+Ut(me[z]);se=me.join(",")}try{return g.apply(N,ce.querySelectorAll(se)),N}catch{Pe(v,!0)}finally{re===k&&T.removeAttribute("id")}}}return zr(v.replace(oe,"$1"),T,N,P)}function Wt(){var v=[];function T(N,P){return v.push(N+" ")>a.cacheLength&&delete T[v.shift()],T[N+" "]=P}return T}function Ke(v){return v[k]=!0,v}function Tt(v){var T=_.createElement("fieldset");try{return!!v(T)}catch{return!1}finally{T.parentNode&&T.parentNode.removeChild(T),T=null}}function kn(v){return function(T){return U(T,"input")&&T.type===v}}function jn(v){return function(T){return(U(T,"input")||U(T,"button"))&&T.type===v}}function Kr(v){return function(T){return"form"in T?T.parentNode&&T.disabled===!1?"label"in T?"label"in T.parentNode?T.parentNode.disabled===v:T.disabled===v:T.isDisabled===v||T.isDisabled!==!v&&Ln(T)===v:T.disabled===v:"label"in T?T.disabled===v:!1}}function mt(v){return Ke(function(T){return T=+T,Ke(function(N,P){for(var M,z=v([],N.length,T),Q=z.length;Q--;)N[M=z[Q]]&&(N[M]=!(P[M]=N[M]))})})}function fr(v){return v&&typeof v.getElementsByTagName<"u"&&v}function lt(v){var T,N=v?v.ownerDocument||v:le;return N==_||N.nodeType!==9||!N.documentElement||(_=N,A=_.documentElement,b=!u.isXMLDoc(_),L=A.matches||A.webkitMatchesSelector||A.msMatchesSelector,A.msMatchesSelector&&le!=_&&(T=_.defaultView)&&T.top!==T&&T.addEventListener("unload",In),w.getById=Tt(function(P){return A.appendChild(P).id=u.expando,!_.getElementsByName||!_.getElementsByName(u.expando).length}),w.disconnectedMatch=Tt(function(P){return L.call(P,"*")}),w.scope=Tt(function(){return _.querySelectorAll(":scope")}),w.cssHas=Tt(function(){try{return _.querySelector(":has(*,:jqfake)"),!1}catch{return!0}}),w.getById?(a.filter.ID=function(P){var M=P.replace(nt,it);return function(z){return z.getAttribute("id")===M}},a.find.ID=function(P,M){if(typeof M.getElementById<"u"&&b){var z=M.getElementById(P);return z?[z]:[]}}):(a.filter.ID=function(P){var M=P.replace(nt,it);return function(z){var Q=typeof z.getAttributeNode<"u"&&z.getAttributeNode("id");return Q&&Q.value===M}},a.find.ID=function(P,M){if(typeof M.getElementById<"u"&&b){var z,Q,re,J=M.getElementById(P);if(J){if(z=J.getAttributeNode("id"),z&&z.value===P)return[J];for(re=M.getElementsByName(P),Q=0;J=re[Q++];)if(z=J.getAttributeNode("id"),z&&z.value===P)return[J]}return[]}}),a.find.TAG=function(P,M){return typeof M.getElementsByTagName<"u"?M.getElementsByTagName(P):M.querySelectorAll(P)},a.find.CLASS=function(P,M){if(typeof M.getElementsByClassName<"u"&&b)return M.getElementsByClassName(P)},C=[],Tt(function(P){var M;A.appendChild(P).innerHTML="<a id='"+k+"' href='' disabled='disabled'></a><select id='"+k+"-\r\\' disabled='disabled'><option selected=''></option></select>",P.querySelectorAll("[selected]").length||C.push("\\["+G+"*(?:value|"+Ye+")"),P.querySelectorAll("[id~="+k+"-]").length||C.push("~="),P.querySelectorAll("a#"+k+"+*").length||C.push(".#.+[+~]"),P.querySelectorAll(":checked").length||C.push(":checked"),M=_.createElement("input"),M.setAttribute("type","hidden"),P.appendChild(M).setAttribute("name","D"),A.appendChild(P).disabled=!0,P.querySelectorAll(":disabled").length!==2&&C.push(":enabled",":disabled"),M=_.createElement("input"),M.setAttribute("name",""),P.appendChild(M),P.querySelectorAll("[name='']").length||C.push("\\["+G+"*name"+G+"*="+G+`*(?:''|"")`)}),w.cssHas||C.push(":has"),C=C.length&&new RegExp(C.join("|")),Ne=function(P,M){if(P===M)return m=!0,0;var z=!P.compareDocumentPosition-!M.compareDocumentPosition;return z||(z=(P.ownerDocument||P)==(M.ownerDocument||M)?P.compareDocumentPosition(M):1,z&1||!w.sortDetached&&M.compareDocumentPosition(P)===z?P===_||P.ownerDocument==le&&Ae.contains(le,P)?-1:M===_||M.ownerDocument==le&&Ae.contains(le,M)?1:p?E.call(p,P)-E.call(p,M):0:z&4?-1:1)}),_}Ae.matches=function(v,T){return Ae(v,null,null,T)},Ae.matchesSelector=function(v,T){if(lt(v),b&&!Pe[T+" "]&&(!C||!C.test(T)))try{var N=L.call(v,T);if(N||w.disconnectedMatch||v.document&&v.document.nodeType!==11)return N}catch{Pe(T,!0)}return Ae(T,_,null,[v]).length>0},Ae.contains=function(v,T){return(v.ownerDocument||v)!=_&<(v),u.contains(v,T)},Ae.attr=function(v,T){(v.ownerDocument||v)!=_&<(v);var N=a.attrHandle[T.toLowerCase()],P=N&&y.call(a.attrHandle,T.toLowerCase())?N(v,T,!b):void 0;return P!==void 0?P:v.getAttribute(T)},Ae.error=function(v){throw new Error("Syntax error, unrecognized expression: "+v)},u.uniqueSort=function(v){var T,N=[],P=0,M=0;if(m=!w.sortStable,p=!w.sortStable&&s.call(v,0),K.call(v,Ne),m){for(;T=v[M++];)T===v[M]&&(P=N.push(M));for(;P--;)q.call(v,N[P],1)}return p=null,v},u.fn.uniqueSort=function(){return this.pushStack(u.uniqueSort(s.apply(this)))},a=u.expr={cacheLength:50,createPseudo:Ke,match:Qe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(v){return v[1]=v[1].replace(nt,it),v[3]=(v[3]||v[4]||v[5]||"").replace(nt,it),v[2]==="~="&&(v[3]=" "+v[3]+" "),v.slice(0,4)},CHILD:function(v){return v[1]=v[1].toLowerCase(),v[1].slice(0,3)==="nth"?(v[3]||Ae.error(v[0]),v[4]=+(v[4]?v[5]+(v[6]||1):2*(v[3]==="even"||v[3]==="odd")),v[5]=+(v[7]+v[8]||v[3]==="odd")):v[3]&&Ae.error(v[0]),v},PSEUDO:function(v){var T,N=!v[6]&&v[2];return Qe.CHILD.test(v[0])?null:(v[3]?v[2]=v[4]||v[5]||"":N&&Xe.test(N)&&(T=It(N,!0))&&(T=N.indexOf(")",N.length-T)-N.length)&&(v[0]=v[0].slice(0,T),v[2]=N.slice(0,T)),v.slice(0,3))}},filter:{TAG:function(v){var T=v.replace(nt,it).toLowerCase();return v==="*"?function(){return!0}:function(N){return U(N,T)}},CLASS:function(v){var T=ae[v+" "];return T||(T=new RegExp("(^|"+G+")"+v+"("+G+"|$)"))&&ae(v,function(N){return T.test(typeof N.className=="string"&&N.className||typeof N.getAttribute<"u"&&N.getAttribute("class")||"")})},ATTR:function(v,T,N){return function(P){var M=Ae.attr(P,v);return M==null?T==="!=":T?(M+="",T==="="?M===N:T==="!="?M!==N:T==="^="?N&&M.indexOf(N)===0:T==="*="?N&&M.indexOf(N)>-1:T==="$="?N&&M.slice(-N.length)===N:T==="~="?(" "+M.replace(ye," ")+" ").indexOf(N)>-1:T==="|="?M===N||M.slice(0,N.length+1)===N+"-":!1):!0}},CHILD:function(v,T,N,P,M){var z=v.slice(0,3)!=="nth",Q=v.slice(-4)!=="last",re=T==="of-type";return P===1&&M===0?function(J){return!!J.parentNode}:function(J,me,se){var ce,ge,ie,Se,He,Ie=z!==Q?"nextSibling":"previousSibling",Ue=J.parentNode,Je=re&&J.nodeName.toLowerCase(),wt=!se&&!re,Le=!1;if(Ue){if(z){for(;Ie;){for(ie=J;ie=ie[Ie];)if(re?U(ie,Je):ie.nodeType===1)return!1;He=Ie=v==="only"&&!He&&"nextSibling"}return!0}if(He=[Q?Ue.firstChild:Ue.lastChild],Q&&wt){for(ge=Ue[k]||(Ue[k]={}),ce=ge[v]||[],Se=ce[0]===R&&ce[1],Le=Se&&ce[2],ie=Se&&Ue.childNodes[Se];ie=++Se&&ie&&ie[Ie]||(Le=Se=0)||He.pop();)if(ie.nodeType===1&&++Le&&ie===J){ge[v]=[R,Se,Le];break}}else if(wt&&(ge=J[k]||(J[k]={}),ce=ge[v]||[],Se=ce[0]===R&&ce[1],Le=Se),Le===!1)for(;(ie=++Se&&ie&&ie[Ie]||(Le=Se=0)||He.pop())&&!((re?U(ie,Je):ie.nodeType===1)&&++Le&&(wt&&(ge=ie[k]||(ie[k]={}),ge[v]=[R,Le]),ie===J)););return Le-=M,Le===P||Le%P===0&&Le/P>=0}}},PSEUDO:function(v,T){var N,P=a.pseudos[v]||a.setFilters[v.toLowerCase()]||Ae.error("unsupported pseudo: "+v);return P[k]?P(T):P.length>1?(N=[v,v,"",T],a.setFilters.hasOwnProperty(v.toLowerCase())?Ke(function(M,z){for(var Q,re=P(M,T),J=re.length;J--;)Q=E.call(M,re[J]),M[Q]=!(z[Q]=re[J])}):function(M){return P(M,0,N)}):P}},pseudos:{not:Ke(function(v){var T=[],N=[],P=mr(v.replace(oe,"$1"));return P[k]?Ke(function(M,z,Q,re){for(var J,me=P(M,null,re,[]),se=M.length;se--;)(J=me[se])&&(M[se]=!(z[se]=J))}):function(M,z,Q){return T[0]=M,P(T,null,Q,N),T[0]=null,!N.pop()}}),has:Ke(function(v){return function(T){return Ae(v,T).length>0}}),contains:Ke(function(v){return v=v.replace(nt,it),function(T){return(T.textContent||u.text(T)).indexOf(v)>-1}}),lang:Ke(function(v){return Pt.test(v||"")||Ae.error("unsupported lang: "+v),v=v.replace(nt,it).toLowerCase(),function(T){var N;do if(N=b?T.lang:T.getAttribute("xml:lang")||T.getAttribute("lang"))return N=N.toLowerCase(),N===v||N.indexOf(v+"-")===0;while((T=T.parentNode)&&T.nodeType===1);return!1}}),target:function(v){var T=e.location&&e.location.hash;return T&&T.slice(1)===v.id},root:function(v){return v===A},focus:function(v){return v===Mn()&&_.hasFocus()&&!!(v.type||v.href||~v.tabIndex)},enabled:Kr(!1),disabled:Kr(!0),checked:function(v){return U(v,"input")&&!!v.checked||U(v,"option")&&!!v.selected},selected:function(v){return v.parentNode&&v.parentNode.selectedIndex,v.selected===!0},empty:function(v){for(v=v.firstChild;v;v=v.nextSibling)if(v.nodeType<6)return!1;return!0},parent:function(v){return!a.pseudos.empty(v)},header:function(v){return at.test(v.nodeName)},input:function(v){return st.test(v.nodeName)},button:function(v){return U(v,"input")&&v.type==="button"||U(v,"button")},text:function(v){var T;return U(v,"input")&&v.type==="text"&&((T=v.getAttribute("type"))==null||T.toLowerCase()==="text")},first:mt(function(){return[0]}),last:mt(function(v,T){return[T-1]}),eq:mt(function(v,T,N){return[N<0?N+T:N]}),even:mt(function(v,T){for(var N=0;N<T;N+=2)v.push(N);return v}),odd:mt(function(v,T){for(var N=1;N<T;N+=2)v.push(N);return v}),lt:mt(function(v,T,N){var P;for(N<0?P=N+T:N>T?P=T:P=N;--P>=0;)v.push(P);return v}),gt:mt(function(v,T,N){for(var P=N<0?N+T:N;++P<T;)v.push(P);return v})}},a.pseudos.nth=a.pseudos.eq;for(i in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})a.pseudos[i]=kn(i);for(i in{submit:!0,reset:!0})a.pseudos[i]=jn(i);function Yr(){}Yr.prototype=a.filters=a.pseudos,a.setFilters=new Yr;function It(v,T){var N,P,M,z,Q,re,J,me=_e[v+" "];if(me)return T?0:me.slice(0);for(Q=v,re=[],J=a.preFilter;Q;){(!N||(P=Oe.exec(Q)))&&(P&&(Q=Q.slice(P[0].length)||Q),re.push(M=[])),N=!1,(P=Dt.exec(Q))&&(N=P.shift(),M.push({value:N,type:P[0].replace(oe," ")}),Q=Q.slice(N.length));for(z in a.filter)(P=Qe[z].exec(Q))&&(!J[z]||(P=J[z](P)))&&(N=P.shift(),M.push({value:N,type:z,matches:P}),Q=Q.slice(N.length));if(!N)break}return T?Q.length:Q?Ae.error(v):_e(v,re).slice(0)}function Ut(v){for(var T=0,N=v.length,P="";T<N;T++)P+=v[T].value;return P}function Gt(v,T,N){var P=T.dir,M=T.next,z=M||P,Q=N&&z==="parentNode",re=W++;return T.first?function(J,me,se){for(;J=J[P];)if(J.nodeType===1||Q)return v(J,me,se);return!1}:function(J,me,se){var ce,ge,ie=[R,re];if(se){for(;J=J[P];)if((J.nodeType===1||Q)&&v(J,me,se))return!0}else for(;J=J[P];)if(J.nodeType===1||Q)if(ge=J[k]||(J[k]={}),M&&U(J,M))J=J[P]||J;else{if((ce=ge[z])&&ce[0]===R&&ce[1]===re)return ie[2]=ce[2];if(ge[z]=ie,ie[2]=v(J,me,se))return!0}return!1}}function pr(v){return v.length>1?function(T,N,P){for(var M=v.length;M--;)if(!v[M](T,N,P))return!1;return!0}:v[0]}function Hn(v,T,N){for(var P=0,M=T.length;P<M;P++)Ae(v,T[P],N);return N}function qt(v,T,N,P,M){for(var z,Q=[],re=0,J=v.length,me=T!=null;re<J;re++)(z=v[re])&&(!N||N(z,P,M))&&(Q.push(z),me&&T.push(re));return Q}function dr(v,T,N,P,M,z){return P&&!P[k]&&(P=dr(P)),M&&!M[k]&&(M=dr(M,z)),Ke(function(Q,re,J,me){var se,ce,ge,ie,Se=[],He=[],Ie=re.length,Ue=Q||Hn(T||"*",J.nodeType?[J]:J,[]),Je=v&&(Q||!T)?qt(Ue,Se,v,J,me):Ue;if(N?(ie=M||(Q?v:Ie||P)?[]:re,N(Je,ie,J,me)):ie=Je,P)for(se=qt(ie,He),P(se,[],J,me),ce=se.length;ce--;)(ge=se[ce])&&(ie[He[ce]]=!(Je[He[ce]]=ge));if(Q){if(M||v){if(M){for(se=[],ce=ie.length;ce--;)(ge=ie[ce])&&se.push(Je[ce]=ge);M(null,ie=[],se,me)}for(ce=ie.length;ce--;)(ge=ie[ce])&&(se=M?E.call(Q,ge):Se[ce])>-1&&(Q[se]=!(re[se]=ge))}}else ie=qt(ie===re?ie.splice(Ie,ie.length):ie),M?M(null,re,ie,me):g.apply(re,ie)})}function hr(v){for(var T,N,P,M=v.length,z=a.relative[v[0].type],Q=z||a.relative[" "],re=z?1:0,J=Gt(function(ce){return ce===T},Q,!0),me=Gt(function(ce){return E.call(T,ce)>-1},Q,!0),se=[function(ce,ge,ie){var Se=!z&&(ie||ge!=c)||((T=ge).nodeType?J(ce,ge,ie):me(ce,ge,ie));return T=null,Se}];re<M;re++)if(N=a.relative[v[re].type])se=[Gt(pr(se),N)];else{if(N=a.filter[v[re].type].apply(null,v[re].matches),N[k]){for(P=++re;P<M&&!a.relative[v[P].type];P++);return dr(re>1&&pr(se),re>1&&Ut(v.slice(0,re-1).concat({value:v[re-2].type===" "?"*":""})).replace(oe,"$1"),N,re<P&&hr(v.slice(re,P)),P<M&&hr(v=v.slice(P)),P<M&&Ut(v))}se.push(N)}return pr(se)}function Fn(v,T){var N=T.length>0,P=v.length>0,M=function(z,Q,re,J,me){var se,ce,ge,ie=0,Se="0",He=z&&[],Ie=[],Ue=c,Je=z||P&&a.find.TAG("*",me),wt=R+=Ue==null?1:Math.random()||.1,Le=Je.length;for(me&&(c=Q==_||Q||me);Se!==Le&&(se=Je[Se])!=null;Se++){if(P&&se){for(ce=0,!Q&&se.ownerDocument!=_&&(lt(se),re=!b);ge=v[ce++];)if(ge(se,Q||_,re)){g.call(J,se);break}me&&(R=wt)}N&&((se=!ge&&se)&&ie--,z&&He.push(se))}if(ie+=Se,N&&Se!==ie){for(ce=0;ge=T[ce++];)ge(He,Ie,Q,re);if(z){if(ie>0)for(;Se--;)He[Se]||Ie[Se]||(Ie[Se]=I.call(J));Ie=qt(Ie)}g.apply(J,Ie),me&&!z&&Ie.length>0&&ie+T.length>1&&u.uniqueSort(J)}return me&&(R=wt,c=Ue),He};return N?Ke(M):M}function mr(v,T){var N,P=[],M=[],z=de[v+" "];if(!z){for(T||(T=It(v)),N=T.length;N--;)z=hr(T[N]),z[k]?P.push(z):M.push(z);z=de(v,Fn(M,P)),z.selector=v}return z}function zr(v,T,N,P){var M,z,Q,re,J,me=typeof v=="function"&&v,se=!P&&It(v=me.selector||v);if(N=N||[],se.length===1){if(z=se[0]=se[0].slice(0),z.length>2&&(Q=z[0]).type==="ID"&&T.nodeType===9&&b&&a.relative[z[1].type]){if(T=(a.find.ID(Q.matches[0].replace(nt,it),T)||[])[0],T)me&&(T=T.parentNode);else return N;v=v.slice(z.shift().value.length)}for(M=Qe.needsContext.test(v)?0:z.length;M--&&(Q=z[M],!a.relative[re=Q.type]);)if((J=a.find[re])&&(P=J(Q.matches[0].replace(nt,it),ur.test(z[0].type)&&fr(T.parentNode)||T))){if(z.splice(M,1),v=P.length&&Ut(z),!v)return g.apply(N,P),N;break}}return(me||mr(v,se))(P,T,!b,N,!T||ur.test(v)&&fr(T.parentNode)||T),N}w.sortStable=k.split("").sort(Ne).join("")===k,lt(),w.sortDetached=Tt(function(v){return v.compareDocumentPosition(_.createElement("fieldset"))&1}),u.find=Ae,u.expr[":"]=u.expr.pseudos,u.unique=u.uniqueSort,Ae.compile=mr,Ae.select=zr,Ae.setDocument=lt,Ae.tokenize=It,Ae.escape=u.escapeSelector,Ae.getText=u.text,Ae.isXML=u.isXMLDoc,Ae.selectors=u.expr,Ae.support=u.support,Ae.uniqueSort=u.uniqueSort})();var he=function(i,a,c){for(var p=[],m=c!==void 0;(i=i[a])&&i.nodeType!==9;)if(i.nodeType===1){if(m&&u(i).is(c))break;p.push(i)}return p},Re=function(i,a){for(var c=[];i;i=i.nextSibling)i.nodeType===1&&i!==a&&c.push(i);return c},fe=u.expr.match.needsContext,be=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function we(i,a,c){return x(a)?u.grep(i,function(p,m){return!!a.call(p,m,p)!==c}):a.nodeType?u.grep(i,function(p){return p===a!==c}):typeof a!="string"?u.grep(i,function(p){return E.call(a,p)>-1!==c}):u.filter(a,i,c)}u.filter=function(i,a,c){var p=a[0];return c&&(i=":not("+i+")"),a.length===1&&p.nodeType===1?u.find.matchesSelector(p,i)?[p]:[]:u.find.matches(i,u.grep(a,function(m){return m.nodeType===1}))},u.fn.extend({find:function(i){var a,c,p=this.length,m=this;if(typeof i!="string")return this.pushStack(u(i).filter(function(){for(a=0;a<p;a++)if(u.contains(m[a],this))return!0}));for(c=this.pushStack([]),a=0;a<p;a++)u.find(i,m[a],c);return p>1?u.uniqueSort(c):c},filter:function(i){return this.pushStack(we(this,i||[],!1))},not:function(i){return this.pushStack(we(this,i||[],!0))},is:function(i){return!!we(this,typeof i=="string"&&fe.test(i)?u(i):i||[],!1).length}});var xe,j=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,ee=u.fn.init=function(i,a,c){var p,m;if(!i)return this;if(c=c||xe,typeof i=="string")if(i[0]==="<"&&i[i.length-1]===">"&&i.length>=3?p=[null,i,null]:p=j.exec(i),p&&(p[1]||!a))if(p[1]){if(a=a instanceof u?a[0]:a,u.merge(this,u.parseHTML(p[1],a&&a.nodeType?a.ownerDocument||a:D,!0)),be.test(p[1])&&u.isPlainObject(a))for(p in a)x(this[p])?this[p](a[p]):this.attr(p,a[p]);return this}else return m=D.getElementById(p[2]),m&&(this[0]=m,this.length=1),this;else return!a||a.jquery?(a||c).find(i):this.constructor(a).find(i);else{if(i.nodeType)return this[0]=i,this.length=1,this;if(x(i))return c.ready!==void 0?c.ready(i):i(u)}return u.makeArray(i,this)};ee.prototype=u.fn,xe=u(D);var Te=/^(?:parents|prev(?:Until|All))/,$e={children:!0,contents:!0,next:!0,prev:!0};u.fn.extend({has:function(i){var a=u(i,this),c=a.length;return this.filter(function(){for(var p=0;p<c;p++)if(u.contains(this,a[p]))return!0})},closest:function(i,a){var c,p=0,m=this.length,g=[],_=typeof i!="string"&&u(i);if(!fe.test(i)){for(;p<m;p++)for(c=this[p];c&&c!==a;c=c.parentNode)if(c.nodeType<11&&(_?_.index(c)>-1:c.nodeType===1&&u.find.matchesSelector(c,i))){g.push(c);break}}return this.pushStack(g.length>1?u.uniqueSort(g):g)},index:function(i){return i?typeof i=="string"?E.call(u(i),this[0]):E.call(this,i.jquery?i[0]:i):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(i,a){return this.pushStack(u.uniqueSort(u.merge(this.get(),u(i,a))))},addBack:function(i){return this.add(i==null?this.prevObject:this.prevObject.filter(i))}});function Me(i,a){for(;(i=i[a])&&i.nodeType!==1;);return i}u.each({parent:function(i){var a=i.parentNode;return a&&a.nodeType!==11?a:null},parents:function(i){return he(i,"parentNode")},parentsUntil:function(i,a,c){return he(i,"parentNode",c)},next:function(i){return Me(i,"nextSibling")},prev:function(i){return Me(i,"previousSibling")},nextAll:function(i){return he(i,"nextSibling")},prevAll:function(i){return he(i,"previousSibling")},nextUntil:function(i,a,c){return he(i,"nextSibling",c)},prevUntil:function(i,a,c){return he(i,"previousSibling",c)},siblings:function(i){return Re((i.parentNode||{}).firstChild,i)},children:function(i){return Re(i.firstChild)},contents:function(i){return i.contentDocument!=null&&o(i.contentDocument)?i.contentDocument:(U(i,"template")&&(i=i.content||i),u.merge([],i.childNodes))}},function(i,a){u.fn[i]=function(c,p){var m=u.map(this,a,c);return i.slice(-5)!=="Until"&&(p=c),p&&typeof p=="string"&&(m=u.filter(p,m)),this.length>1&&($e[i]||u.uniqueSort(m),Te.test(i)&&m.reverse()),this.pushStack(m)}});var Ce=/[^\x20\t\r\n\f]+/g;function Ze(i){var a={};return u.each(i.match(Ce)||[],function(c,p){a[p]=!0}),a}u.Callbacks=function(i){i=typeof i=="string"?Ze(i):u.extend({},i);var a,c,p,m,g=[],_=[],A=-1,b=function(){for(m=m||i.once,p=a=!0;_.length;A=-1)for(c=_.shift();++A<g.length;)g[A].apply(c[0],c[1])===!1&&i.stopOnFalse&&(A=g.length,c=!1);i.memory||(c=!1),a=!1,m&&(c?g=[]:g="")},C={add:function(){return g&&(c&&!a&&(A=g.length-1,_.push(c)),function L(k){u.each(k,function(R,W){x(W)?(!i.unique||!C.has(W))&&g.push(W):W&&W.length&&Y(W)!=="string"&&L(W)})}(arguments),c&&!a&&b()),this},remove:function(){return u.each(arguments,function(L,k){for(var R;(R=u.inArray(k,g,R))>-1;)g.splice(R,1),R<=A&&A--}),this},has:function(L){return L?u.inArray(L,g)>-1:g.length>0},empty:function(){return g&&(g=[]),this},disable:function(){return m=_=[],g=c="",this},disabled:function(){return!g},lock:function(){return m=_=[],!c&&!a&&(g=c=""),this},locked:function(){return!!m},fireWith:function(L,k){return m||(k=k||[],k=[L,k.slice?k.slice():k],_.push(k),a||b()),this},fire:function(){return C.fireWith(this,arguments),this},fired:function(){return!!p}};return C};function Fe(i){return i}function ct(i){throw i}function Lt(i,a,c,p){var m;try{i&&x(m=i.promise)?m.call(i).done(a).fail(c):i&&x(m=i.then)?m.call(i,a,c):a.apply(void 0,[i].slice(p))}catch(g){c.apply(void 0,[g])}}u.extend({Deferred:function(i){var a=[["notify","progress",u.Callbacks("memory"),u.Callbacks("memory"),2],["resolve","done",u.Callbacks("once memory"),u.Callbacks("once memory"),0,"resolved"],["reject","fail",u.Callbacks("once memory"),u.Callbacks("once memory"),1,"rejected"]],c="pending",p={state:function(){return c},always:function(){return m.done(arguments).fail(arguments),this},catch:function(g){return p.then(null,g)},pipe:function(){var g=arguments;return u.Deferred(function(_){u.each(a,function(A,b){var C=x(g[b[4]])&&g[b[4]];m[b[1]](function(){var L=C&&C.apply(this,arguments);L&&x(L.promise)?L.promise().progress(_.notify).done(_.resolve).fail(_.reject):_[b[0]+"With"](this,C?[L]:arguments)})}),g=null}).promise()},then:function(g,_,A){var b=0;function C(L,k,R,W){return function(){var ae=this,_e=arguments,de=function(){var Ne,Ye;if(!(L<b)){if(Ne=R.apply(ae,_e),Ne===k.promise())throw new TypeError("Thenable self-resolution");Ye=Ne&&(typeof Ne=="object"||typeof Ne=="function")&&Ne.then,x(Ye)?W?Ye.call(Ne,C(b,k,Fe,W),C(b,k,ct,W)):(b++,Ye.call(Ne,C(b,k,Fe,W),C(b,k,ct,W),C(b,k,Fe,k.notifyWith))):(R!==Fe&&(ae=void 0,_e=[Ne]),(W||k.resolveWith)(ae,_e))}},Pe=W?de:function(){try{de()}catch(Ne){u.Deferred.exceptionHook&&u.Deferred.exceptionHook(Ne,Pe.error),L+1>=b&&(R!==ct&&(ae=void 0,_e=[Ne]),k.rejectWith(ae,_e))}};L?Pe():(u.Deferred.getErrorHook?Pe.error=u.Deferred.getErrorHook():u.Deferred.getStackHook&&(Pe.error=u.Deferred.getStackHook()),e.setTimeout(Pe))}}return u.Deferred(function(L){a[0][3].add(C(0,L,x(A)?A:Fe,L.notifyWith)),a[1][3].add(C(0,L,x(g)?g:Fe)),a[2][3].add(C(0,L,x(_)?_:ct))}).promise()},promise:function(g){return g!=null?u.extend(g,p):p}},m={};return u.each(a,function(g,_){var A=_[2],b=_[5];p[_[1]]=A.add,b&&A.add(function(){c=b},a[3-g][2].disable,a[3-g][3].disable,a[0][2].lock,a[0][3].lock),A.add(_[3].fire),m[_[0]]=function(){return m[_[0]+"With"](this===m?void 0:this,arguments),this},m[_[0]+"With"]=A.fireWith}),p.promise(m),i&&i.call(m,m),m},when:function(i){var a=arguments.length,c=a,p=Array(c),m=s.call(arguments),g=u.Deferred(),_=function(A){return function(b){p[A]=this,m[A]=arguments.length>1?s.call(arguments):b,--a||g.resolveWith(p,m)}};if(a<=1&&(Lt(i,g.done(_(c)).resolve,g.reject,!a),g.state()==="pending"||x(m[c]&&m[c].then)))return g.then();for(;c--;)Lt(m[c],_(c),g.reject);return g.promise()}});var Kt=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;u.Deferred.exceptionHook=function(i,a){e.console&&e.console.warn&&i&&Kt.test(i.name)&&e.console.warn("jQuery.Deferred exception: "+i.message,i.stack,a)},u.readyException=function(i){e.setTimeout(function(){throw i})};var gt=u.Deferred();u.fn.ready=function(i){return gt.then(i).catch(function(a){u.readyException(a)}),this},u.extend({isReady:!1,readyWait:1,ready:function(i){(i===!0?--u.readyWait:u.isReady)||(u.isReady=!0,!(i!==!0&&--u.readyWait>0)&>.resolveWith(D,[u]))}}),u.ready.then=gt.then;function ut(){D.removeEventListener("DOMContentLoaded",ut),e.removeEventListener("load",ut),u.ready()}D.readyState==="complete"||D.readyState!=="loading"&&!D.documentElement.doScroll?e.setTimeout(u.ready):(D.addEventListener("DOMContentLoaded",ut),e.addEventListener("load",ut));var Ge=function(i,a,c,p,m,g,_){var A=0,b=i.length,C=c==null;if(Y(c)==="object"){m=!0;for(A in c)Ge(i,a,A,c[A],!0,g,_)}else if(p!==void 0&&(m=!0,x(p)||(_=!0),C&&(_?(a.call(i,p),a=null):(C=a,a=function(L,k,R){return C.call(u(L),R)})),a))for(;A<b;A++)a(i[A],c,_?p:p.call(i[A],A,a(i[A],c)));return m?i:C?a.call(i):b?a(i[0],c):g},Yt=/^-ms-/,et=/-([a-z])/g;function Et(i,a){return a.toUpperCase()}function Be(i){return i.replace(Yt,"ms-").replace(et,Et)}var ot=function(i){return i.nodeType===1||i.nodeType===9||!+i.nodeType};function tt(){this.expando=u.expando+tt.uid++}tt.uid=1,tt.prototype={cache:function(i){var a=i[this.expando];return a||(a={},ot(i)&&(i.nodeType?i[this.expando]=a:Object.defineProperty(i,this.expando,{value:a,configurable:!0}))),a},set:function(i,a,c){var p,m=this.cache(i);if(typeof a=="string")m[Be(a)]=c;else for(p in a)m[Be(p)]=a[p];return m},get:function(i,a){return a===void 0?this.cache(i):i[this.expando]&&i[this.expando][Be(a)]},access:function(i,a,c){return a===void 0||a&&typeof a=="string"&&c===void 0?this.get(i,a):(this.set(i,a,c),c!==void 0?c:a)},remove:function(i,a){var c,p=i[this.expando];if(p!==void 0){if(a!==void 0)for(Array.isArray(a)?a=a.map(Be):(a=Be(a),a=a in p?[a]:a.match(Ce)||[]),c=a.length;c--;)delete p[a[c]];(a===void 0||u.isEmptyObject(p))&&(i.nodeType?i[this.expando]=void 0:delete i[this.expando])}},hasData:function(i){var a=i[this.expando];return a!==void 0&&!u.isEmptyObject(a)}};var te=new tt,De=new tt,Mt=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,kt=/[A-Z]/g;function Xr(i){return i==="true"?!0:i==="false"?!1:i==="null"?null:i===+i+""?+i:Mt.test(i)?JSON.parse(i):i}function gr(i,a,c){var p;if(c===void 0&&i.nodeType===1)if(p="data-"+a.replace(kt,"-$&").toLowerCase(),c=i.getAttribute(p),typeof c=="string"){try{c=Xr(c)}catch{}De.set(i,a,c)}else c=void 0;return c}u.extend({hasData:function(i){return De.hasData(i)||te.hasData(i)},data:function(i,a,c){return De.access(i,a,c)},removeData:function(i,a){De.remove(i,a)},_data:function(i,a,c){return te.access(i,a,c)},_removeData:function(i,a){te.remove(i,a)}}),u.fn.extend({data:function(i,a){var c,p,m,g=this[0],_=g&&g.attributes;if(i===void 0){if(this.length&&(m=De.get(g),g.nodeType===1&&!te.get(g,"hasDataAttrs"))){for(c=_.length;c--;)_[c]&&(p=_[c].name,p.indexOf("data-")===0&&(p=Be(p.slice(5)),gr(g,p,m[p])));te.set(g,"hasDataAttrs",!0)}return m}return typeof i=="object"?this.each(function(){De.set(this,i)}):Ge(this,function(A){var b;if(g&&A===void 0)return b=De.get(g,i),b!==void 0||(b=gr(g,i),b!==void 0)?b:void 0;this.each(function(){De.set(this,i,A)})},null,a,arguments.length>1,null,!0)},removeData:function(i){return this.each(function(){De.remove(this,i)})}}),u.extend({queue:function(i,a,c){var p;if(i)return a=(a||"fx")+"queue",p=te.get(i,a),c&&(!p||Array.isArray(c)?p=te.access(i,a,u.makeArray(c)):p.push(c)),p||[]},dequeue:function(i,a){a=a||"fx";var c=u.queue(i,a),p=c.length,m=c.shift(),g=u._queueHooks(i,a),_=function(){u.dequeue(i,a)};m==="inprogress"&&(m=c.shift(),p--),m&&(a==="fx"&&c.unshift("inprogress"),delete g.stop,m.call(i,_,g)),!p&&g&&g.empty.fire()},_queueHooks:function(i,a){var c=a+"queueHooks";return te.get(i,c)||te.access(i,c,{empty:u.Callbacks("once memory").add(function(){te.remove(i,[a+"queue",c])})})}}),u.fn.extend({queue:function(i,a){var c=2;return typeof i!="string"&&(a=i,i="fx",c--),arguments.length<c?u.queue(this[0],i):a===void 0?this:this.each(function(){var p=u.queue(this,i,a);u._queueHooks(this,i),i==="fx"&&p[0]!=="inprogress"&&u.dequeue(this,i)})},dequeue:function(i){return this.each(function(){u.dequeue(this,i)})},clearQueue:function(i){return this.queue(i||"fx",[])},promise:function(i,a){var c,p=1,m=u.Deferred(),g=this,_=this.length,A=function(){--p||m.resolveWith(g,[g])};for(typeof i!="string"&&(a=i,i=void 0),i=i||"fx";_--;)c=te.get(g[_],i+"queueHooks"),c&&c.empty&&(p++,c.empty.add(A));return A(),m.promise(a)}});var Er=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,$t=new RegExp("^(?:([+-])=|)("+Er+")([a-z%]*)$","i"),rt=["Top","Right","Bottom","Left"],ft=D.documentElement,_t=function(i){return u.contains(i.ownerDocument,i)},Qr={composed:!0};ft.getRootNode&&(_t=function(i){return u.contains(i.ownerDocument,i)||i.getRootNode(Qr)===i.ownerDocument});var jt=function(i,a){return i=a||i,i.style.display==="none"||i.style.display===""&&_t(i)&&u.css(i,"display")==="none"};function _r(i,a,c,p){var m,g,_=20,A=p?function(){return p.cur()}:function(){return u.css(i,a,"")},b=A(),C=c&&c[3]||(u.cssNumber[a]?"":"px"),L=i.nodeType&&(u.cssNumber[a]||C!=="px"&&+b)&&$t.exec(u.css(i,a));if(L&&L[3]!==C){for(b=b/2,C=C||L[3],L=+b||1;_--;)u.style(i,a,L+C),(1-g)*(1-(g=A()/b||.5))<=0&&(_=0),L=L/g;L=L*2,u.style(i,a,L+C),c=c||[]}return c&&(L=+L||+b||0,m=c[1]?L+(c[1]+1)*c[2]:+c[2],p&&(p.unit=C,p.start=L,p.end=m)),m}var yr={};function Jr(i){var a,c=i.ownerDocument,p=i.nodeName,m=yr[p];return m||(a=c.body.appendChild(c.createElement(p)),m=u.css(a,"display"),a.parentNode.removeChild(a),m==="none"&&(m="block"),yr[p]=m,m)}function yt(i,a){for(var c,p,m=[],g=0,_=i.length;g<_;g++)p=i[g],p.style&&(c=p.style.display,a?(c==="none"&&(m[g]=te.get(p,"display")||null,m[g]||(p.style.display="")),p.style.display===""&&jt(p)&&(m[g]=Jr(p))):c!=="none"&&(m[g]="none",te.set(p,"display",c)));for(g=0;g<_;g++)m[g]!=null&&(i[g].style.display=m[g]);return i}u.fn.extend({show:function(){return yt(this,!0)},hide:function(){return yt(this)},toggle:function(i){return typeof i=="boolean"?i?this.show():this.hide():this.each(function(){jt(this)?u(this).show():u(this).hide()})}});var Ct=/^(?:checkbox|radio)$/i,vr=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,br=/^$|^module$|\/(?:java|ecma)script/i;(function(){var i=D.createDocumentFragment(),a=i.appendChild(D.createElement("div")),c=D.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),w.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="<textarea>x</textarea>",w.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,a.innerHTML="<option></option>",w.option=!!a.lastChild})();var Ve={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Ve.tbody=Ve.tfoot=Ve.colgroup=Ve.caption=Ve.thead,Ve.th=Ve.td,w.option||(Ve.optgroup=Ve.option=[1,"<select multiple='multiple'>","</select>"]);function ke(i,a){var c;return typeof i.getElementsByTagName<"u"?c=i.getElementsByTagName(a||"*"):typeof i.querySelectorAll<"u"?c=i.querySelectorAll(a||"*"):c=[],a===void 0||a&&U(i,a)?u.merge([i],c):c}function zt(i,a){for(var c=0,p=i.length;c<p;c++)te.set(i[c],"globalEval",!a||te.get(a[c],"globalEval"))}var Zr=/<|&#?\w+;/;function Ar(i,a,c,p,m){for(var g,_,A,b,C,L,k=a.createDocumentFragment(),R=[],W=0,ae=i.length;W<ae;W++)if(g=i[W],g||g===0)if(Y(g)==="object")u.merge(R,g.nodeType?[g]:g);else if(!Zr.test(g))R.push(a.createTextNode(g));else{for(_=_||k.appendChild(a.createElement("div")),A=(vr.exec(g)||["",""])[1].toLowerCase(),b=Ve[A]||Ve._default,_.innerHTML=b[1]+u.htmlPrefilter(g)+b[2],L=b[0];L--;)_=_.lastChild;u.merge(R,_.childNodes),_=k.firstChild,_.textContent=""}for(k.textContent="",W=0;g=R[W++];){if(p&&u.inArray(g,p)>-1){m&&m.push(g);continue}if(C=_t(g),_=ke(k.appendChild(g),"script"),C&&zt(_),c)for(L=0;g=_[L++];)br.test(g.type||"")&&c.push(g)}return k}var Sr=/^([^.]*)(?:\.(.+)|)/;function vt(){return!0}function bt(){return!1}function Xt(i,a,c,p,m,g){var _,A;if(typeof a=="object"){typeof c!="string"&&(p=p||c,c=void 0);for(A in a)Xt(i,A,c,p,a[A],g);return i}if(p==null&&m==null?(m=c,p=c=void 0):m==null&&(typeof c=="string"?(m=p,p=void 0):(m=p,p=c,c=void 0)),m===!1)m=bt;else if(!m)return i;return g===1&&(_=m,m=function(b){return u().off(b),_.apply(this,arguments)},m.guid=_.guid||(_.guid=u.guid++)),i.each(function(){u.event.add(this,a,m,p,c)})}u.event={global:{},add:function(i,a,c,p,m){var g,_,A,b,C,L,k,R,W,ae,_e,de=te.get(i);if(ot(i))for(c.handler&&(g=c,c=g.handler,m=g.selector),m&&u.find.matchesSelector(ft,m),c.guid||(c.guid=u.guid++),(b=de.events)||(b=de.events=Object.create(null)),(_=de.handle)||(_=de.handle=function(Pe){return typeof u<"u"&&u.event.triggered!==Pe.type?u.event.dispatch.apply(i,arguments):void 0}),a=(a||"").match(Ce)||[""],C=a.length;C--;)A=Sr.exec(a[C])||[],W=_e=A[1],ae=(A[2]||"").split(".").sort(),W&&(k=u.event.special[W]||{},W=(m?k.delegateType:k.bindType)||W,k=u.event.special[W]||{},L=u.extend({type:W,origType:_e,data:p,handler:c,guid:c.guid,selector:m,needsContext:m&&u.expr.match.needsContext.test(m),namespace:ae.join(".")},g),(R=b[W])||(R=b[W]=[],R.delegateCount=0,(!k.setup||k.setup.call(i,p,ae,_)===!1)&&i.addEventListener&&i.addEventListener(W,_)),k.add&&(k.add.call(i,L),L.handler.guid||(L.handler.guid=c.guid)),m?R.splice(R.delegateCount++,0,L):R.push(L),u.event.global[W]=!0)},remove:function(i,a,c,p,m){var g,_,A,b,C,L,k,R,W,ae,_e,de=te.hasData(i)&&te.get(i);if(!(!de||!(b=de.events))){for(a=(a||"").match(Ce)||[""],C=a.length;C--;){if(A=Sr.exec(a[C])||[],W=_e=A[1],ae=(A[2]||"").split(".").sort(),!W){for(W in b)u.event.remove(i,W+a[C],c,p,!0);continue}for(k=u.event.special[W]||{},W=(p?k.delegateType:k.bindType)||W,R=b[W]||[],A=A[2]&&new RegExp("(^|\\.)"+ae.join("\\.(?:.*\\.|)")+"(\\.|$)"),_=g=R.length;g--;)L=R[g],(m||_e===L.origType)&&(!c||c.guid===L.guid)&&(!A||A.test(L.namespace))&&(!p||p===L.selector||p==="**"&&L.selector)&&(R.splice(g,1),L.selector&&R.delegateCount--,k.remove&&k.remove.call(i,L));_&&!R.length&&((!k.teardown||k.teardown.call(i,ae,de.handle)===!1)&&u.removeEvent(i,W,de.handle),delete b[W])}u.isEmptyObject(b)&&te.remove(i,"handle events")}},dispatch:function(i){var a,c,p,m,g,_,A=new Array(arguments.length),b=u.event.fix(i),C=(te.get(this,"events")||Object.create(null))[b.type]||[],L=u.event.special[b.type]||{};for(A[0]=b,a=1;a<arguments.length;a++)A[a]=arguments[a];if(b.delegateTarget=this,!(L.preDispatch&&L.preDispatch.call(this,b)===!1)){for(_=u.event.handlers.call(this,b,C),a=0;(m=_[a++])&&!b.isPropagationStopped();)for(b.currentTarget=m.elem,c=0;(g=m.handlers[c++])&&!b.isImmediatePropagationStopped();)(!b.rnamespace||g.namespace===!1||b.rnamespace.test(g.namespace))&&(b.handleObj=g,b.data=g.data,p=((u.event.special[g.origType]||{}).handle||g.handler).apply(m.elem,A),p!==void 0&&(b.result=p)===!1&&(b.preventDefault(),b.stopPropagation()));return L.postDispatch&&L.postDispatch.call(this,b),b.result}},handlers:function(i,a){var c,p,m,g,_,A=[],b=a.delegateCount,C=i.target;if(b&&C.nodeType&&!(i.type==="click"&&i.button>=1)){for(;C!==this;C=C.parentNode||this)if(C.nodeType===1&&!(i.type==="click"&&C.disabled===!0)){for(g=[],_={},c=0;c<b;c++)p=a[c],m=p.selector+" ",_[m]===void 0&&(_[m]=p.needsContext?u(m,this).index(C)>-1:u.find(m,this,null,[C]).length),_[m]&&g.push(p);g.length&&A.push({elem:C,handlers:g})}}return C=this,b<a.length&&A.push({elem:C,handlers:a.slice(b)}),A},addProp:function(i,a){Object.defineProperty(u.Event.prototype,i,{enumerable:!0,configurable:!0,get:x(a)?function(){if(this.originalEvent)return a(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[i]},set:function(c){Object.defineProperty(this,i,{enumerable:!0,configurable:!0,writable:!0,value:c})}})},fix:function(i){return i[u.expando]?i:new u.Event(i)},special:{load:{noBubble:!0},click:{setup:function(i){var a=this||i;return Ct.test(a.type)&&a.click&&U(a,"input")&&Ht(a,"click",!0),!1},trigger:function(i){var a=this||i;return Ct.test(a.type)&&a.click&&U(a,"input")&&Ht(a,"click"),!0},_default:function(i){var a=i.target;return Ct.test(a.type)&&a.click&&U(a,"input")&&te.get(a,"click")||U(a,"a")}},beforeunload:{postDispatch:function(i){i.result!==void 0&&i.originalEvent&&(i.originalEvent.returnValue=i.result)}}}};function Ht(i,a,c){if(!c){te.get(i,a)===void 0&&u.event.add(i,a,vt);return}te.set(i,a,!1),u.event.add(i,a,{namespace:!1,handler:function(p){var m,g=te.get(this,a);if(p.isTrigger&1&&this[a]){if(g)(u.event.special[a]||{}).delegateType&&p.stopPropagation();else if(g=s.call(arguments),te.set(this,a,g),this[a](),m=te.get(this,a),te.set(this,a,!1),g!==m)return p.stopImmediatePropagation(),p.preventDefault(),m}else g&&(te.set(this,a,u.event.trigger(g[0],g.slice(1),this)),p.stopPropagation(),p.isImmediatePropagationStopped=vt)}})}u.removeEvent=function(i,a,c){i.removeEventListener&&i.removeEventListener(a,c)},u.Event=function(i,a){if(!(this instanceof u.Event))return new u.Event(i,a);i&&i.type?(this.originalEvent=i,this.type=i.type,this.isDefaultPrevented=i.defaultPrevented||i.defaultPrevented===void 0&&i.returnValue===!1?vt:bt,this.target=i.target&&i.target.nodeType===3?i.target.parentNode:i.target,this.currentTarget=i.currentTarget,this.relatedTarget=i.relatedTarget):this.type=i,a&&u.extend(this,a),this.timeStamp=i&&i.timeStamp||Date.now(),this[u.expando]=!0},u.Event.prototype={constructor:u.Event,isDefaultPrevented:bt,isPropagationStopped:bt,isImmediatePropagationStopped:bt,isSimulated:!1,preventDefault:function(){var i=this.originalEvent;this.isDefaultPrevented=vt,i&&!this.isSimulated&&i.preventDefault()},stopPropagation:function(){var i=this.originalEvent;this.isPropagationStopped=vt,i&&!this.isSimulated&&i.stopPropagation()},stopImmediatePropagation:function(){var i=this.originalEvent;this.isImmediatePropagationStopped=vt,i&&!this.isSimulated&&i.stopImmediatePropagation(),this.stopPropagation()}},u.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},u.event.addProp),u.each({focus:"focusin",blur:"focusout"},function(i,a){function c(p){if(D.documentMode){var m=te.get(this,"handle"),g=u.event.fix(p);g.type=p.type==="focusin"?"focus":"blur",g.isSimulated=!0,m(p),g.target===g.currentTarget&&m(g)}else u.event.simulate(a,p.target,u.event.fix(p))}u.event.special[i]={setup:function(){var p;if(Ht(this,i,!0),D.documentMode)p=te.get(this,a),p||this.addEventListener(a,c),te.set(this,a,(p||0)+1);else return!1},trigger:function(){return Ht(this,i),!0},teardown:function(){var p;if(D.documentMode)p=te.get(this,a)-1,p?te.set(this,a,p):(this.removeEventListener(a,c),te.remove(this,a));else return!1},_default:function(p){return te.get(p.target,i)},delegateType:a},u.event.special[a]={setup:function(){var p=this.ownerDocument||this.document||this,m=D.documentMode?this:p,g=te.get(m,a);g||(D.documentMode?this.addEventListener(a,c):p.addEventListener(i,c,!0)),te.set(m,a,(g||0)+1)},teardown:function(){var p=this.ownerDocument||this.document||this,m=D.documentMode?this:p,g=te.get(m,a)-1;g?te.set(m,a,g):(D.documentMode?this.removeEventListener(a,c):p.removeEventListener(i,c,!0),te.remove(m,a))}}}),u.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(i,a){u.event.special[i]={delegateType:a,bindType:a,handle:function(c){var p,m=this,g=c.relatedTarget,_=c.handleObj;return(!g||g!==m&&!u.contains(m,g))&&(c.type=_.origType,p=_.handler.apply(this,arguments),c.type=a),p}}}),u.fn.extend({on:function(i,a,c,p){return Xt(this,i,a,c,p)},one:function(i,a,c,p){return Xt(this,i,a,c,p,1)},off:function(i,a,c){var p,m;if(i&&i.preventDefault&&i.handleObj)return p=i.handleObj,u(i.delegateTarget).off(p.namespace?p.origType+"."+p.namespace:p.origType,p.selector,p.handler),this;if(typeof i=="object"){for(m in i)this.off(m,a,i[m]);return this}return(a===!1||typeof a=="function")&&(c=a,a=void 0),c===!1&&(c=bt),this.each(function(){u.event.remove(this,i,c,a)})}});var en=/<script|<style|<link/i,tn=/checked\s*(?:[^=]|=\s*.checked.)/i,rn=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Tr(i,a){return U(i,"table")&&U(a.nodeType!==11?a:a.firstChild,"tr")&&u(i).children("tbody")[0]||i}function nn(i){return i.type=(i.getAttribute("type")!==null)+"/"+i.type,i}function on(i){return(i.type||"").slice(0,5)==="true/"?i.type=i.type.slice(5):i.removeAttribute("type"),i}function wr(i,a){var c,p,m,g,_,A,b;if(a.nodeType===1){if(te.hasData(i)&&(g=te.get(i),b=g.events,b)){te.remove(a,"handle events");for(m in b)for(c=0,p=b[m].length;c<p;c++)u.event.add(a,m,b[m][c])}De.hasData(i)&&(_=De.access(i),A=u.extend({},_),De.set(a,A))}}function sn(i,a){var c=a.nodeName.toLowerCase();c==="input"&&Ct.test(i.type)?a.checked=i.checked:(c==="input"||c==="textarea")&&(a.defaultValue=i.defaultValue)}function At(i,a,c,p){a=l(a);var m,g,_,A,b,C,L=0,k=i.length,R=k-1,W=a[0],ae=x(W);if(ae||k>1&&typeof W=="string"&&!w.checkClone&&tn.test(W))return i.each(function(_e){var de=i.eq(_e);ae&&(a[0]=W.call(this,_e,de.html())),At(de,a,c,p)});if(k&&(m=Ar(a,i[0].ownerDocument,!1,i,p),g=m.firstChild,m.childNodes.length===1&&(m=g),g||p)){for(_=u.map(ke(m,"script"),nn),A=_.length;L<k;L++)b=m,L!==R&&(b=u.clone(b,!0,!0),A&&u.merge(_,ke(b,"script"))),c.call(i[L],b,L);if(A)for(C=_[_.length-1].ownerDocument,u.map(_,on),L=0;L<A;L++)b=_[L],br.test(b.type||"")&&!te.access(b,"globalEval")&&u.contains(C,b)&&(b.src&&(b.type||"").toLowerCase()!=="module"?u._evalUrl&&!b.noModule&&u._evalUrl(b.src,{nonce:b.nonce||b.getAttribute("nonce")},C):V(b.textContent.replace(rn,""),b,C))}return i}function $r(i,a,c){for(var p,m=a?u.filter(a,i):i,g=0;(p=m[g])!=null;g++)!c&&p.nodeType===1&&u.cleanData(ke(p)),p.parentNode&&(c&&_t(p)&&zt(ke(p,"script")),p.parentNode.removeChild(p));return i}u.extend({htmlPrefilter:function(i){return i},clone:function(i,a,c){var p,m,g,_,A=i.cloneNode(!0),b=_t(i);if(!w.noCloneChecked&&(i.nodeType===1||i.nodeType===11)&&!u.isXMLDoc(i))for(_=ke(A),g=ke(i),p=0,m=g.length;p<m;p++)sn(g[p],_[p]);if(a)if(c)for(g=g||ke(i),_=_||ke(A),p=0,m=g.length;p<m;p++)wr(g[p],_[p]);else wr(i,A);return _=ke(A,"script"),_.length>0&&zt(_,!b&&ke(i,"script")),A},cleanData:function(i){for(var a,c,p,m=u.event.special,g=0;(c=i[g])!==void 0;g++)if(ot(c)){if(a=c[te.expando]){if(a.events)for(p in a.events)m[p]?u.event.remove(c,p):u.removeEvent(c,p,a.handle);c[te.expando]=void 0}c[De.expando]&&(c[De.expando]=void 0)}}}),u.fn.extend({detach:function(i){return $r(this,i,!0)},remove:function(i){return $r(this,i)},text:function(i){return Ge(this,function(a){return a===void 0?u.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=a)})},null,i,arguments.length)},append:function(){return At(this,arguments,function(i){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var a=Tr(this,i);a.appendChild(i)}})},prepend:function(){return At(this,arguments,function(i){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var a=Tr(this,i);a.insertBefore(i,a.firstChild)}})},before:function(){return At(this,arguments,function(i){this.parentNode&&this.parentNode.insertBefore(i,this)})},after:function(){return At(this,arguments,function(i){this.parentNode&&this.parentNode.insertBefore(i,this.nextSibling)})},empty:function(){for(var i,a=0;(i=this[a])!=null;a++)i.nodeType===1&&(u.cleanData(ke(i,!1)),i.textContent="");return this},clone:function(i,a){return i=i??!1,a=a??i,this.map(function(){return u.clone(this,i,a)})},html:function(i){return Ge(this,function(a){var c=this[0]||{},p=0,m=this.length;if(a===void 0&&c.nodeType===1)return c.innerHTML;if(typeof a=="string"&&!en.test(a)&&!Ve[(vr.exec(a)||["",""])[1].toLowerCase()]){a=u.htmlPrefilter(a);try{for(;p<m;p++)c=this[p]||{},c.nodeType===1&&(u.cleanData(ke(c,!1)),c.innerHTML=a);c=0}catch{}}c&&this.empty().append(a)},null,i,arguments.length)},replaceWith:function(){var i=[];return At(this,arguments,function(a){var c=this.parentNode;u.inArray(this,i)<0&&(u.cleanData(ke(this)),c&&c.replaceChild(a,this))},i)}}),u.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(i,a){u.fn[i]=function(c){for(var p,m=[],g=u(c),_=g.length-1,A=0;A<=_;A++)p=A===_?this:this.clone(!0),u(g[A])[a](p),f.apply(m,p.get());return this.pushStack(m)}});var Qt=new RegExp("^("+Er+")(?!px)[a-z%]+$","i"),Jt=/^--/,Ft=function(i){var a=i.ownerDocument.defaultView;return(!a||!a.opener)&&(a=e),a.getComputedStyle(i)},Cr=function(i,a,c){var p,m,g={};for(m in a)g[m]=i.style[m],i.style[m]=a[m];p=c.call(i);for(m in a)i.style[m]=g[m];return p},an=new RegExp(rt.join("|"),"i");(function(){function i(){if(C){b.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",C.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",ft.appendChild(b).appendChild(C);var L=e.getComputedStyle(C);c=L.top!=="1%",A=a(L.marginLeft)===12,C.style.right="60%",g=a(L.right)===36,p=a(L.width)===36,C.style.position="absolute",m=a(C.offsetWidth/3)===12,ft.removeChild(b),C=null}}function a(L){return Math.round(parseFloat(L))}var c,p,m,g,_,A,b=D.createElement("div"),C=D.createElement("div");C.style&&(C.style.backgroundClip="content-box",C.cloneNode(!0).style.backgroundClip="",w.clearCloneStyle=C.style.backgroundClip==="content-box",u.extend(w,{boxSizingReliable:function(){return i(),p},pixelBoxStyles:function(){return i(),g},pixelPosition:function(){return i(),c},reliableMarginLeft:function(){return i(),A},scrollboxSize:function(){return i(),m},reliableTrDimensions:function(){var L,k,R,W;return _==null&&(L=D.createElement("table"),k=D.createElement("tr"),R=D.createElement("div"),L.style.cssText="position:absolute;left:-11111px;border-collapse:separate",k.style.cssText="box-sizing:content-box;border:1px solid",k.style.height="1px",R.style.height="9px",R.style.display="block",ft.appendChild(L).appendChild(k).appendChild(R),W=e.getComputedStyle(k),_=parseInt(W.height,10)+parseInt(W.borderTopWidth,10)+parseInt(W.borderBottomWidth,10)===k.offsetHeight,ft.removeChild(L)),_}}))})();function Ot(i,a,c){var p,m,g,_,A=Jt.test(a),b=i.style;return c=c||Ft(i),c&&(_=c.getPropertyValue(a)||c[a],A&&_&&(_=_.replace(oe,"$1")||void 0),_===""&&!_t(i)&&(_=u.style(i,a)),!w.pixelBoxStyles()&&Qt.test(_)&&an.test(a)&&(p=b.width,m=b.minWidth,g=b.maxWidth,b.minWidth=b.maxWidth=b.width=_,_=c.width,b.width=p,b.minWidth=m,b.maxWidth=g)),_!==void 0?_+"":_}function Or(i,a){return{get:function(){if(i()){delete this.get;return}return(this.get=a).apply(this,arguments)}}}var xr=["Webkit","Moz","ms"],Nr=D.createElement("div").style,Rr={};function ln(i){for(var a=i[0].toUpperCase()+i.slice(1),c=xr.length;c--;)if(i=xr[c]+a,i in Nr)return i}function Zt(i){var a=u.cssProps[i]||Rr[i];return a||(i in Nr?i:Rr[i]=ln(i)||i)}var cn=/^(none|table(?!-c[ea]).+)/,un={position:"absolute",visibility:"hidden",display:"block"},Dr={letterSpacing:"0",fontWeight:"400"};function Pr(i,a,c){var p=$t.exec(a);return p?Math.max(0,p[2]-(c||0))+(p[3]||"px"):a}function er(i,a,c,p,m,g){var _=a==="width"?1:0,A=0,b=0,C=0;if(c===(p?"border":"content"))return 0;for(;_<4;_+=2)c==="margin"&&(C+=u.css(i,c+rt[_],!0,m)),p?(c==="content"&&(b-=u.css(i,"padding"+rt[_],!0,m)),c!=="margin"&&(b-=u.css(i,"border"+rt[_]+"Width",!0,m))):(b+=u.css(i,"padding"+rt[_],!0,m),c!=="padding"?b+=u.css(i,"border"+rt[_]+"Width",!0,m):A+=u.css(i,"border"+rt[_]+"Width",!0,m));return!p&&g>=0&&(b+=Math.max(0,Math.ceil(i["offset"+a[0].toUpperCase()+a.slice(1)]-g-b-A-.5))||0),b+C}function Ir(i,a,c){var p=Ft(i),m=!w.boxSizingReliable()||c,g=m&&u.css(i,"boxSizing",!1,p)==="border-box",_=g,A=Ot(i,a,p),b="offset"+a[0].toUpperCase()+a.slice(1);if(Qt.test(A)){if(!c)return A;A="auto"}return(!w.boxSizingReliable()&&g||!w.reliableTrDimensions()&&U(i,"tr")||A==="auto"||!parseFloat(A)&&u.css(i,"display",!1,p)==="inline")&&i.getClientRects().length&&(g=u.css(i,"boxSizing",!1,p)==="border-box",_=b in i,_&&(A=i[b])),A=parseFloat(A)||0,A+er(i,a,c||(g?"border":"content"),_,p,A)+"px"}u.extend({cssHooks:{opacity:{get:function(i,a){if(a){var c=Ot(i,"opacity");return c===""?"1":c}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(i,a,c,p){if(!(!i||i.nodeType===3||i.nodeType===8||!i.style)){var m,g,_,A=Be(a),b=Jt.test(a),C=i.style;if(b||(a=Zt(A)),_=u.cssHooks[a]||u.cssHooks[A],c!==void 0){if(g=typeof c,g==="string"&&(m=$t.exec(c))&&m[1]&&(c=_r(i,a,m),g="number"),c==null||c!==c)return;g==="number"&&!b&&(c+=m&&m[3]||(u.cssNumber[A]?"":"px")),!w.clearCloneStyle&&c===""&&a.indexOf("background")===0&&(C[a]="inherit"),(!_||!("set"in _)||(c=_.set(i,c,p))!==void 0)&&(b?C.setProperty(a,c):C[a]=c)}else return _&&"get"in _&&(m=_.get(i,!1,p))!==void 0?m:C[a]}},css:function(i,a,c,p){var m,g,_,A=Be(a),b=Jt.test(a);return b||(a=Zt(A)),_=u.cssHooks[a]||u.cssHooks[A],_&&"get"in _&&(m=_.get(i,!0,c)),m===void 0&&(m=Ot(i,a,p)),m==="normal"&&a in Dr&&(m=Dr[a]),c===""||c?(g=parseFloat(m),c===!0||isFinite(g)?g||0:m):m}}),u.each(["height","width"],function(i,a){u.cssHooks[a]={get:function(c,p,m){if(p)return cn.test(u.css(c,"display"))&&(!c.getClientRects().length||!c.getBoundingClientRect().width)?Cr(c,un,function(){return Ir(c,a,m)}):Ir(c,a,m)},set:function(c,p,m){var g,_=Ft(c),A=!w.scrollboxSize()&&_.position==="absolute",b=A||m,C=b&&u.css(c,"boxSizing",!1,_)==="border-box",L=m?er(c,a,m,C,_):0;return C&&A&&(L-=Math.ceil(c["offset"+a[0].toUpperCase()+a.slice(1)]-parseFloat(_[a])-er(c,a,"border",!1,_)-.5)),L&&(g=$t.exec(p))&&(g[3]||"px")!=="px"&&(c.style[a]=p,p=u.css(c,a)),Pr(c,p,L)}}}),u.cssHooks.marginLeft=Or(w.reliableMarginLeft,function(i,a){if(a)return(parseFloat(Ot(i,"marginLeft"))||i.getBoundingClientRect().left-Cr(i,{marginLeft:0},function(){return i.getBoundingClientRect().left}))+"px"}),u.each({margin:"",padding:"",border:"Width"},function(i,a){u.cssHooks[i+a]={expand:function(c){for(var p=0,m={},g=typeof c=="string"?c.split(" "):[c];p<4;p++)m[i+rt[p]+a]=g[p]||g[p-2]||g[0];return m}},i!=="margin"&&(u.cssHooks[i+a].set=Pr)}),u.fn.extend({css:function(i,a){return Ge(this,function(c,p,m){var g,_,A={},b=0;if(Array.isArray(p)){for(g=Ft(c),_=p.length;b<_;b++)A[p[b]]=u.css(c,p[b],!1,g);return A}return m!==void 0?u.style(c,p,m):u.css(c,p)},i,a,arguments.length>1)}});function je(i,a,c,p,m){return new je.prototype.init(i,a,c,p,m)}u.Tween=je,je.prototype={constructor:je,init:function(i,a,c,p,m,g){this.elem=i,this.prop=c,this.easing=m||u.easing._default,this.options=a,this.start=this.now=this.cur(),this.end=p,this.unit=g||(u.cssNumber[c]?"":"px")},cur:function(){var i=je.propHooks[this.prop];return i&&i.get?i.get(this):je.propHooks._default.get(this)},run:function(i){var a,c=je.propHooks[this.prop];return this.options.duration?this.pos=a=u.easing[this.easing](i,this.options.duration*i,0,1,this.options.duration):this.pos=a=i,this.now=(this.end-this.start)*a+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):je.propHooks._default.set(this),this}},je.prototype.init.prototype=je.prototype,je.propHooks={_default:{get:function(i){var a;return i.elem.nodeType!==1||i.elem[i.prop]!=null&&i.elem.style[i.prop]==null?i.elem[i.prop]:(a=u.css(i.elem,i.prop,""),!a||a==="auto"?0:a)},set:function(i){u.fx.step[i.prop]?u.fx.step[i.prop](i):i.elem.nodeType===1&&(u.cssHooks[i.prop]||i.elem.style[Zt(i.prop)]!=null)?u.style(i.elem,i.prop,i.now+i.unit):i.elem[i.prop]=i.now}}},je.propHooks.scrollTop=je.propHooks.scrollLeft={set:function(i){i.elem.nodeType&&i.elem.parentNode&&(i.elem[i.prop]=i.now)}},u.easing={linear:function(i){return i},swing:function(i){return .5-Math.cos(i*Math.PI)/2},_default:"swing"},u.fx=je.prototype.init,u.fx.step={};var St,Bt,fn=/^(?:toggle|show|hide)$/,pn=/queueHooks$/;function tr(){Bt&&(D.hidden===!1&&e.requestAnimationFrame?e.requestAnimationFrame(tr):e.setTimeout(tr,u.fx.interval),u.fx.tick())}function Lr(){return e.setTimeout(function(){St=void 0}),St=Date.now()}function Vt(i,a){var c,p=0,m={height:i};for(a=a?1:0;p<4;p+=2-a)c=rt[p],m["margin"+c]=m["padding"+c]=i;return a&&(m.opacity=m.width=i),m}function Mr(i,a,c){for(var p,m=(qe.tweeners[a]||[]).concat(qe.tweeners["*"]),g=0,_=m.length;g<_;g++)if(p=m[g].call(c,a,i))return p}function dn(i,a,c){var p,m,g,_,A,b,C,L,k="width"in a||"height"in a,R=this,W={},ae=i.style,_e=i.nodeType&&jt(i),de=te.get(i,"fxshow");c.queue||(_=u._queueHooks(i,"fx"),_.unqueued==null&&(_.unqueued=0,A=_.empty.fire,_.empty.fire=function(){_.unqueued||A()}),_.unqueued++,R.always(function(){R.always(function(){_.unqueued--,u.queue(i,"fx").length||_.empty.fire()})}));for(p in a)if(m=a[p],fn.test(m)){if(delete a[p],g=g||m==="toggle",m===(_e?"hide":"show"))if(m==="show"&&de&&de[p]!==void 0)_e=!0;else continue;W[p]=de&&de[p]||u.style(i,p)}if(b=!u.isEmptyObject(a),!(!b&&u.isEmptyObject(W))){k&&i.nodeType===1&&(c.overflow=[ae.overflow,ae.overflowX,ae.overflowY],C=de&&de.display,C==null&&(C=te.get(i,"display")),L=u.css(i,"display"),L==="none"&&(C?L=C:(yt([i],!0),C=i.style.display||C,L=u.css(i,"display"),yt([i]))),(L==="inline"||L==="inline-block"&&C!=null)&&u.css(i,"float")==="none"&&(b||(R.done(function(){ae.display=C}),C==null&&(L=ae.display,C=L==="none"?"":L)),ae.display="inline-block")),c.overflow&&(ae.overflow="hidden",R.always(function(){ae.overflow=c.overflow[0],ae.overflowX=c.overflow[1],ae.overflowY=c.overflow[2]})),b=!1;for(p in W)b||(de?"hidden"in de&&(_e=de.hidden):de=te.access(i,"fxshow",{display:C}),g&&(de.hidden=!_e),_e&&yt([i],!0),R.done(function(){_e||yt([i]),te.remove(i,"fxshow");for(p in W)u.style(i,p,W[p])})),b=Mr(_e?de[p]:0,p,R),p in de||(de[p]=b.start,_e&&(b.end=b.start,b.start=0))}}function hn(i,a){var c,p,m,g,_;for(c in i)if(p=Be(c),m=a[p],g=i[c],Array.isArray(g)&&(m=g[1],g=i[c]=g[0]),c!==p&&(i[p]=g,delete i[c]),_=u.cssHooks[p],_&&"expand"in _){g=_.expand(g),delete i[p];for(c in g)c in i||(i[c]=g[c],a[c]=m)}else a[p]=m}function qe(i,a,c){var p,m,g=0,_=qe.prefilters.length,A=u.Deferred().always(function(){delete b.elem}),b=function(){if(m)return!1;for(var k=St||Lr(),R=Math.max(0,C.startTime+C.duration-k),W=R/C.duration||0,ae=1-W,_e=0,de=C.tweens.length;_e<de;_e++)C.tweens[_e].run(ae);return A.notifyWith(i,[C,ae,R]),ae<1&&de?R:(de||A.notifyWith(i,[C,1,0]),A.resolveWith(i,[C]),!1)},C=A.promise({elem:i,props:u.extend({},a),opts:u.extend(!0,{specialEasing:{},easing:u.easing._default},c),originalProperties:a,originalOptions:c,startTime:St||Lr(),duration:c.duration,tweens:[],createTween:function(k,R){var W=u.Tween(i,C.opts,k,R,C.opts.specialEasing[k]||C.opts.easing);return C.tweens.push(W),W},stop:function(k){var R=0,W=k?C.tweens.length:0;if(m)return this;for(m=!0;R<W;R++)C.tweens[R].run(1);return k?(A.notifyWith(i,[C,1,0]),A.resolveWith(i,[C,k])):A.rejectWith(i,[C,k]),this}}),L=C.props;for(hn(L,C.opts.specialEasing);g<_;g++)if(p=qe.prefilters[g].call(C,i,L,C.opts),p)return x(p.stop)&&(u._queueHooks(C.elem,C.opts.queue).stop=p.stop.bind(p)),p;return u.map(L,Mr,C),x(C.opts.start)&&C.opts.start.call(i,C),C.progress(C.opts.progress).done(C.opts.done,C.opts.complete).fail(C.opts.fail).always(C.opts.always),u.fx.timer(u.extend(b,{elem:i,anim:C,queue:C.opts.queue})),C}u.Animation=u.extend(qe,{tweeners:{"*":[function(i,a){var c=this.createTween(i,a);return _r(c.elem,i,$t.exec(a),c),c}]},tweener:function(i,a){x(i)?(a=i,i=["*"]):i=i.match(Ce);for(var c,p=0,m=i.length;p<m;p++)c=i[p],qe.tweeners[c]=qe.tweeners[c]||[],qe.tweeners[c].unshift(a)},prefilters:[dn],prefilter:function(i,a){a?qe.prefilters.unshift(i):qe.prefilters.push(i)}}),u.speed=function(i,a,c){var p=i&&typeof i=="object"?u.extend({},i):{complete:c||!c&&a||x(i)&&i,duration:i,easing:c&&a||a&&!x(a)&&a};return u.fx.off?p.duration=0:typeof p.duration!="number"&&(p.duration in u.fx.speeds?p.duration=u.fx.speeds[p.duration]:p.duration=u.fx.speeds._default),(p.queue==null||p.queue===!0)&&(p.queue="fx"),p.old=p.complete,p.complete=function(){x(p.old)&&p.old.call(this),p.queue&&u.dequeue(this,p.queue)},p},u.fn.extend({fadeTo:function(i,a,c,p){return this.filter(jt).css("opacity",0).show().end().animate({opacity:a},i,c,p)},animate:function(i,a,c,p){var m=u.isEmptyObject(i),g=u.speed(a,c,p),_=function(){var A=qe(this,u.extend({},i),g);(m||te.get(this,"finish"))&&A.stop(!0)};return _.finish=_,m||g.queue===!1?this.each(_):this.queue(g.queue,_)},stop:function(i,a,c){var p=function(m){var g=m.stop;delete m.stop,g(c)};return typeof i!="string"&&(c=a,a=i,i=void 0),a&&this.queue(i||"fx",[]),this.each(function(){var m=!0,g=i!=null&&i+"queueHooks",_=u.timers,A=te.get(this);if(g)A[g]&&A[g].stop&&p(A[g]);else for(g in A)A[g]&&A[g].stop&&pn.test(g)&&p(A[g]);for(g=_.length;g--;)_[g].elem===this&&(i==null||_[g].queue===i)&&(_[g].anim.stop(c),m=!1,_.splice(g,1));(m||!c)&&u.dequeue(this,i)})},finish:function(i){return i!==!1&&(i=i||"fx"),this.each(function(){var a,c=te.get(this),p=c[i+"queue"],m=c[i+"queueHooks"],g=u.timers,_=p?p.length:0;for(c.finish=!0,u.queue(this,i,[]),m&&m.stop&&m.stop.call(this,!0),a=g.length;a--;)g[a].elem===this&&g[a].queue===i&&(g[a].anim.stop(!0),g.splice(a,1));for(a=0;a<_;a++)p[a]&&p[a].finish&&p[a].finish.call(this);delete c.finish})}}),u.each(["toggle","show","hide"],function(i,a){var c=u.fn[a];u.fn[a]=function(p,m,g){return p==null||typeof p=="boolean"?c.apply(this,arguments):this.animate(Vt(a,!0),p,m,g)}}),u.each({slideDown:Vt("show"),slideUp:Vt("hide"),slideToggle:Vt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(i,a){u.fn[i]=function(c,p,m){return this.animate(a,c,p,m)}}),u.timers=[],u.fx.tick=function(){var i,a=0,c=u.timers;for(St=Date.now();a<c.length;a++)i=c[a],!i()&&c[a]===i&&c.splice(a--,1);c.length||u.fx.stop(),St=void 0},u.fx.timer=function(i){u.timers.push(i),u.fx.start()},u.fx.interval=13,u.fx.start=function(){Bt||(Bt=!0,tr())},u.fx.stop=function(){Bt=null},u.fx.speeds={slow:600,fast:200,_default:400},u.fn.delay=function(i,a){return i=u.fx&&u.fx.speeds[i]||i,a=a||"fx",this.queue(a,function(c,p){var m=e.setTimeout(c,i);p.stop=function(){e.clearTimeout(m)}})},function(){var i=D.createElement("input"),a=D.createElement("select"),c=a.appendChild(D.createElement("option"));i.type="checkbox",w.checkOn=i.value!=="",w.optSelected=c.selected,i=D.createElement("input"),i.value="t",i.type="radio",w.radioValue=i.value==="t"}();var kr,xt=u.expr.attrHandle;u.fn.extend({attr:function(i,a){return Ge(this,u.attr,i,a,arguments.length>1)},removeAttr:function(i){return this.each(function(){u.removeAttr(this,i)})}}),u.extend({attr:function(i,a,c){var p,m,g=i.nodeType;if(!(g===3||g===8||g===2)){if(typeof i.getAttribute>"u")return u.prop(i,a,c);if((g!==1||!u.isXMLDoc(i))&&(m=u.attrHooks[a.toLowerCase()]||(u.expr.match.bool.test(a)?kr:void 0)),c!==void 0){if(c===null){u.removeAttr(i,a);return}return m&&"set"in m&&(p=m.set(i,c,a))!==void 0?p:(i.setAttribute(a,c+""),c)}return m&&"get"in m&&(p=m.get(i,a))!==null?p:(p=u.find.attr(i,a),p??void 0)}},attrHooks:{type:{set:function(i,a){if(!w.radioValue&&a==="radio"&&U(i,"input")){var c=i.value;return i.setAttribute("type",a),c&&(i.value=c),a}}}},removeAttr:function(i,a){var c,p=0,m=a&&a.match(Ce);if(m&&i.nodeType===1)for(;c=m[p++];)i.removeAttribute(c)}}),kr={set:function(i,a,c){return a===!1?u.removeAttr(i,c):i.setAttribute(c,c),c}},u.each(u.expr.match.bool.source.match(/\w+/g),function(i,a){var c=xt[a]||u.find.attr;xt[a]=function(p,m,g){var _,A,b=m.toLowerCase();return g||(A=xt[b],xt[b]=_,_=c(p,m,g)!=null?b:null,xt[b]=A),_}});var mn=/^(?:input|select|textarea|button)$/i,gn=/^(?:a|area)$/i;u.fn.extend({prop:function(i,a){return Ge(this,u.prop,i,a,arguments.length>1)},removeProp:function(i){return this.each(function(){delete this[u.propFix[i]||i]})}}),u.extend({prop:function(i,a,c){var p,m,g=i.nodeType;if(!(g===3||g===8||g===2))return(g!==1||!u.isXMLDoc(i))&&(a=u.propFix[a]||a,m=u.propHooks[a]),c!==void 0?m&&"set"in m&&(p=m.set(i,c,a))!==void 0?p:i[a]=c:m&&"get"in m&&(p=m.get(i,a))!==null?p:i[a]},propHooks:{tabIndex:{get:function(i){var a=u.find.attr(i,"tabindex");return a?parseInt(a,10):mn.test(i.nodeName)||gn.test(i.nodeName)&&i.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),w.optSelected||(u.propHooks.selected={get:function(i){var a=i.parentNode;return a&&a.parentNode&&a.parentNode.selectedIndex,null},set:function(i){var a=i.parentNode;a&&(a.selectedIndex,a.parentNode&&a.parentNode.selectedIndex)}}),u.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){u.propFix[this.toLowerCase()]=this});function pt(i){var a=i.match(Ce)||[];return a.join(" ")}function dt(i){return i.getAttribute&&i.getAttribute("class")||""}function rr(i){return Array.isArray(i)?i:typeof i=="string"?i.match(Ce)||[]:[]}u.fn.extend({addClass:function(i){var a,c,p,m,g,_;return x(i)?this.each(function(A){u(this).addClass(i.call(this,A,dt(this)))}):(a=rr(i),a.length?this.each(function(){if(p=dt(this),c=this.nodeType===1&&" "+pt(p)+" ",c){for(g=0;g<a.length;g++)m=a[g],c.indexOf(" "+m+" ")<0&&(c+=m+" ");_=pt(c),p!==_&&this.setAttribute("class",_)}}):this)},removeClass:function(i){var a,c,p,m,g,_;return x(i)?this.each(function(A){u(this).removeClass(i.call(this,A,dt(this)))}):arguments.length?(a=rr(i),a.length?this.each(function(){if(p=dt(this),c=this.nodeType===1&&" "+pt(p)+" ",c){for(g=0;g<a.length;g++)for(m=a[g];c.indexOf(" "+m+" ")>-1;)c=c.replace(" "+m+" "," ");_=pt(c),p!==_&&this.setAttribute("class",_)}}):this):this.attr("class","")},toggleClass:function(i,a){var c,p,m,g,_=typeof i,A=_==="string"||Array.isArray(i);return x(i)?this.each(function(b){u(this).toggleClass(i.call(this,b,dt(this),a),a)}):typeof a=="boolean"&&A?a?this.addClass(i):this.removeClass(i):(c=rr(i),this.each(function(){if(A)for(g=u(this),m=0;m<c.length;m++)p=c[m],g.hasClass(p)?g.removeClass(p):g.addClass(p);else(i===void 0||_==="boolean")&&(p=dt(this),p&&te.set(this,"__className__",p),this.setAttribute&&this.setAttribute("class",p||i===!1?"":te.get(this,"__className__")||""))}))},hasClass:function(i){var a,c,p=0;for(a=" "+i+" ";c=this[p++];)if(c.nodeType===1&&(" "+pt(dt(c))+" ").indexOf(a)>-1)return!0;return!1}});var En=/\r/g;u.fn.extend({val:function(i){var a,c,p,m=this[0];return arguments.length?(p=x(i),this.each(function(g){var _;this.nodeType===1&&(p?_=i.call(this,g,u(this).val()):_=i,_==null?_="":typeof _=="number"?_+="":Array.isArray(_)&&(_=u.map(_,function(A){return A==null?"":A+""})),a=u.valHooks[this.type]||u.valHooks[this.nodeName.toLowerCase()],(!a||!("set"in a)||a.set(this,_,"value")===void 0)&&(this.value=_))})):m?(a=u.valHooks[m.type]||u.valHooks[m.nodeName.toLowerCase()],a&&"get"in a&&(c=a.get(m,"value"))!==void 0?c:(c=m.value,typeof c=="string"?c.replace(En,""):c??"")):void 0}}),u.extend({valHooks:{option:{get:function(i){var a=u.find.attr(i,"value");return a??pt(u.text(i))}},select:{get:function(i){var a,c,p,m=i.options,g=i.selectedIndex,_=i.type==="select-one",A=_?null:[],b=_?g+1:m.length;for(g<0?p=b:p=_?g:0;p<b;p++)if(c=m[p],(c.selected||p===g)&&!c.disabled&&(!c.parentNode.disabled||!U(c.parentNode,"optgroup"))){if(a=u(c).val(),_)return a;A.push(a)}return A},set:function(i,a){for(var c,p,m=i.options,g=u.makeArray(a),_=m.length;_--;)p=m[_],(p.selected=u.inArray(u.valHooks.option.get(p),g)>-1)&&(c=!0);return c||(i.selectedIndex=-1),g}}}}),u.each(["radio","checkbox"],function(){u.valHooks[this]={set:function(i,a){if(Array.isArray(a))return i.checked=u.inArray(u(i).val(),a)>-1}},w.checkOn||(u.valHooks[this].get=function(i){return i.getAttribute("value")===null?"on":i.value})});var Nt=e.location,jr={guid:Date.now()},nr=/\?/;u.parseXML=function(i){var a,c;if(!i||typeof i!="string")return null;try{a=new e.DOMParser().parseFromString(i,"text/xml")}catch{}return c=a&&a.getElementsByTagName("parsererror")[0],(!a||c)&&u.error("Invalid XML: "+(c?u.map(c.childNodes,function(p){return p.textContent}).join(`
|
||
`):i)),a};var Hr=/^(?:focusinfocus|focusoutblur)$/,Fr=function(i){i.stopPropagation()};u.extend(u.event,{trigger:function(i,a,c,p){var m,g,_,A,b,C,L,k,R=[c||D],W=y.call(i,"type")?i.type:i,ae=y.call(i,"namespace")?i.namespace.split("."):[];if(g=k=_=c=c||D,!(c.nodeType===3||c.nodeType===8)&&!Hr.test(W+u.event.triggered)&&(W.indexOf(".")>-1&&(ae=W.split("."),W=ae.shift(),ae.sort()),b=W.indexOf(":")<0&&"on"+W,i=i[u.expando]?i:new u.Event(W,typeof i=="object"&&i),i.isTrigger=p?2:3,i.namespace=ae.join("."),i.rnamespace=i.namespace?new RegExp("(^|\\.)"+ae.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,i.result=void 0,i.target||(i.target=c),a=a==null?[i]:u.makeArray(a,[i]),L=u.event.special[W]||{},!(!p&&L.trigger&&L.trigger.apply(c,a)===!1))){if(!p&&!L.noBubble&&!H(c)){for(A=L.delegateType||W,Hr.test(A+W)||(g=g.parentNode);g;g=g.parentNode)R.push(g),_=g;_===(c.ownerDocument||D)&&R.push(_.defaultView||_.parentWindow||e)}for(m=0;(g=R[m++])&&!i.isPropagationStopped();)k=g,i.type=m>1?A:L.bindType||W,C=(te.get(g,"events")||Object.create(null))[i.type]&&te.get(g,"handle"),C&&C.apply(g,a),C=b&&g[b],C&&C.apply&&ot(g)&&(i.result=C.apply(g,a),i.result===!1&&i.preventDefault());return i.type=W,!p&&!i.isDefaultPrevented()&&(!L._default||L._default.apply(R.pop(),a)===!1)&&ot(c)&&b&&x(c[W])&&!H(c)&&(_=c[b],_&&(c[b]=null),u.event.triggered=W,i.isPropagationStopped()&&k.addEventListener(W,Fr),c[W](),i.isPropagationStopped()&&k.removeEventListener(W,Fr),u.event.triggered=void 0,_&&(c[b]=_)),i.result}},simulate:function(i,a,c){var p=u.extend(new u.Event,c,{type:i,isSimulated:!0});u.event.trigger(p,null,a)}}),u.fn.extend({trigger:function(i,a){return this.each(function(){u.event.trigger(i,a,this)})},triggerHandler:function(i,a){var c=this[0];if(c)return u.event.trigger(i,a,c,!0)}});var _n=/\[\]$/,Br=/\r?\n/g,yn=/^(?:submit|button|image|reset|file)$/i,vn=/^(?:input|select|textarea|keygen)/i;function ir(i,a,c,p){var m;if(Array.isArray(a))u.each(a,function(g,_){c||_n.test(i)?p(i,_):ir(i+"["+(typeof _=="object"&&_!=null?g:"")+"]",_,c,p)});else if(!c&&Y(a)==="object")for(m in a)ir(i+"["+m+"]",a[m],c,p);else p(i,a)}u.param=function(i,a){var c,p=[],m=function(g,_){var A=x(_)?_():_;p[p.length]=encodeURIComponent(g)+"="+encodeURIComponent(A??"")};if(i==null)return"";if(Array.isArray(i)||i.jquery&&!u.isPlainObject(i))u.each(i,function(){m(this.name,this.value)});else for(c in i)ir(c,i[c],a,m);return p.join("&")},u.fn.extend({serialize:function(){return u.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var i=u.prop(this,"elements");return i?u.makeArray(i):this}).filter(function(){var i=this.type;return this.name&&!u(this).is(":disabled")&&vn.test(this.nodeName)&&!yn.test(i)&&(this.checked||!Ct.test(i))}).map(function(i,a){var c=u(this).val();return c==null?null:Array.isArray(c)?u.map(c,function(p){return{name:a.name,value:p.replace(Br,`\r
|
||
`)}}):{name:a.name,value:c.replace(Br,`\r
|
||
`)}}).get()}});var bn=/%20/g,An=/#.*$/,Sn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)$/mg,wn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,$n=/^(?:GET|HEAD)$/,Cn=/^\/\//,Vr={},or={},Wr="*/".concat("*"),sr=D.createElement("a");sr.href=Nt.href;function Ur(i){return function(a,c){typeof a!="string"&&(c=a,a="*");var p,m=0,g=a.toLowerCase().match(Ce)||[];if(x(c))for(;p=g[m++];)p[0]==="+"?(p=p.slice(1)||"*",(i[p]=i[p]||[]).unshift(c)):(i[p]=i[p]||[]).push(c)}}function Gr(i,a,c,p){var m={},g=i===or;function _(A){var b;return m[A]=!0,u.each(i[A]||[],function(C,L){var k=L(a,c,p);if(typeof k=="string"&&!g&&!m[k])return a.dataTypes.unshift(k),_(k),!1;if(g)return!(b=k)}),b}return _(a.dataTypes[0])||!m["*"]&&_("*")}function ar(i,a){var c,p,m=u.ajaxSettings.flatOptions||{};for(c in a)a[c]!==void 0&&((m[c]?i:p||(p={}))[c]=a[c]);return p&&u.extend(!0,i,p),i}function On(i,a,c){for(var p,m,g,_,A=i.contents,b=i.dataTypes;b[0]==="*";)b.shift(),p===void 0&&(p=i.mimeType||a.getResponseHeader("Content-Type"));if(p){for(m in A)if(A[m]&&A[m].test(p)){b.unshift(m);break}}if(b[0]in c)g=b[0];else{for(m in c){if(!b[0]||i.converters[m+" "+b[0]]){g=m;break}_||(_=m)}g=g||_}if(g)return g!==b[0]&&b.unshift(g),c[g]}function xn(i,a,c,p){var m,g,_,A,b,C={},L=i.dataTypes.slice();if(L[1])for(_ in i.converters)C[_.toLowerCase()]=i.converters[_];for(g=L.shift();g;)if(i.responseFields[g]&&(c[i.responseFields[g]]=a),!b&&p&&i.dataFilter&&(a=i.dataFilter(a,i.dataType)),b=g,g=L.shift(),g){if(g==="*")g=b;else if(b!=="*"&&b!==g){if(_=C[b+" "+g]||C["* "+g],!_){for(m in C)if(A=m.split(" "),A[1]===g&&(_=C[b+" "+A[0]]||C["* "+A[0]],_)){_===!0?_=C[m]:C[m]!==!0&&(g=A[0],L.unshift(A[1]));break}}if(_!==!0)if(_&&i.throws)a=_(a);else try{a=_(a)}catch(k){return{state:"parsererror",error:_?k:"No conversion from "+b+" to "+g}}}}return{state:"success",data:a}}u.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Nt.href,type:"GET",isLocal:wn.test(Nt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Wr,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":u.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(i,a){return a?ar(ar(i,u.ajaxSettings),a):ar(u.ajaxSettings,i)},ajaxPrefilter:Ur(Vr),ajaxTransport:Ur(or),ajax:function(i,a){typeof i=="object"&&(a=i,i=void 0),a=a||{};var c,p,m,g,_,A,b,C,L,k,R=u.ajaxSetup({},a),W=R.context||R,ae=R.context&&(W.nodeType||W.jquery)?u(W):u.event,_e=u.Deferred(),de=u.Callbacks("once memory"),Pe=R.statusCode||{},Ne={},Ye={},ze="canceled",Ee={readyState:0,getResponseHeader:function(ye){var Oe;if(b){if(!g)for(g={};Oe=Tn.exec(m);)g[Oe[1].toLowerCase()+" "]=(g[Oe[1].toLowerCase()+" "]||[]).concat(Oe[2]);Oe=g[ye.toLowerCase()+" "]}return Oe==null?null:Oe.join(", ")},getAllResponseHeaders:function(){return b?m:null},setRequestHeader:function(ye,Oe){return b==null&&(ye=Ye[ye.toLowerCase()]=Ye[ye.toLowerCase()]||ye,Ne[ye]=Oe),this},overrideMimeType:function(ye){return b==null&&(R.mimeType=ye),this},statusCode:function(ye){var Oe;if(ye)if(b)Ee.always(ye[Ee.status]);else for(Oe in ye)Pe[Oe]=[Pe[Oe],ye[Oe]];return this},abort:function(ye){var Oe=ye||ze;return c&&c.abort(Oe),ht(0,Oe),this}};if(_e.promise(Ee),R.url=((i||R.url||Nt.href)+"").replace(Cn,Nt.protocol+"//"),R.type=a.method||a.type||R.method||R.type,R.dataTypes=(R.dataType||"*").toLowerCase().match(Ce)||[""],R.crossDomain==null){A=D.createElement("a");try{A.href=R.url,A.href=A.href,R.crossDomain=sr.protocol+"//"+sr.host!=A.protocol+"//"+A.host}catch{R.crossDomain=!0}}if(R.data&&R.processData&&typeof R.data!="string"&&(R.data=u.param(R.data,R.traditional)),Gr(Vr,R,a,Ee),b)return Ee;C=u.event&&R.global,C&&u.active++===0&&u.event.trigger("ajaxStart"),R.type=R.type.toUpperCase(),R.hasContent=!$n.test(R.type),p=R.url.replace(An,""),R.hasContent?R.data&&R.processData&&(R.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(R.data=R.data.replace(bn,"+")):(k=R.url.slice(p.length),R.data&&(R.processData||typeof R.data=="string")&&(p+=(nr.test(p)?"&":"?")+R.data,delete R.data),R.cache===!1&&(p=p.replace(Sn,"$1"),k=(nr.test(p)?"&":"?")+"_="+jr.guid+++k),R.url=p+k),R.ifModified&&(u.lastModified[p]&&Ee.setRequestHeader("If-Modified-Since",u.lastModified[p]),u.etag[p]&&Ee.setRequestHeader("If-None-Match",u.etag[p])),(R.data&&R.hasContent&&R.contentType!==!1||a.contentType)&&Ee.setRequestHeader("Content-Type",R.contentType),Ee.setRequestHeader("Accept",R.dataTypes[0]&&R.accepts[R.dataTypes[0]]?R.accepts[R.dataTypes[0]]+(R.dataTypes[0]!=="*"?", "+Wr+"; q=0.01":""):R.accepts["*"]);for(L in R.headers)Ee.setRequestHeader(L,R.headers[L]);if(R.beforeSend&&(R.beforeSend.call(W,Ee,R)===!1||b))return Ee.abort();if(ze="abort",de.add(R.complete),Ee.done(R.success),Ee.fail(R.error),c=Gr(or,R,a,Ee),!c)ht(-1,"No Transport");else{if(Ee.readyState=1,C&&ae.trigger("ajaxSend",[Ee,R]),b)return Ee;R.async&&R.timeout>0&&(_=e.setTimeout(function(){Ee.abort("timeout")},R.timeout));try{b=!1,c.send(Ne,ht)}catch(ye){if(b)throw ye;ht(-1,ye)}}function ht(ye,Oe,Dt,cr){var Xe,Pt,Qe,st,at,We=Oe;b||(b=!0,_&&e.clearTimeout(_),c=void 0,m=cr||"",Ee.readyState=ye>0?4:0,Xe=ye>=200&&ye<300||ye===304,Dt&&(st=On(R,Ee,Dt)),!Xe&&u.inArray("script",R.dataTypes)>-1&&u.inArray("json",R.dataTypes)<0&&(R.converters["text script"]=function(){}),st=xn(R,st,Ee,Xe),Xe?(R.ifModified&&(at=Ee.getResponseHeader("Last-Modified"),at&&(u.lastModified[p]=at),at=Ee.getResponseHeader("etag"),at&&(u.etag[p]=at)),ye===204||R.type==="HEAD"?We="nocontent":ye===304?We="notmodified":(We=st.state,Pt=st.data,Qe=st.error,Xe=!Qe)):(Qe=We,(ye||!We)&&(We="error",ye<0&&(ye=0))),Ee.status=ye,Ee.statusText=(Oe||We)+"",Xe?_e.resolveWith(W,[Pt,We,Ee]):_e.rejectWith(W,[Ee,We,Qe]),Ee.statusCode(Pe),Pe=void 0,C&&ae.trigger(Xe?"ajaxSuccess":"ajaxError",[Ee,R,Xe?Pt:Qe]),de.fireWith(W,[Ee,We]),C&&(ae.trigger("ajaxComplete",[Ee,R]),--u.active||u.event.trigger("ajaxStop")))}return Ee},getJSON:function(i,a,c){return u.get(i,a,c,"json")},getScript:function(i,a){return u.get(i,void 0,a,"script")}}),u.each(["get","post"],function(i,a){u[a]=function(c,p,m,g){return x(p)&&(g=g||m,m=p,p=void 0),u.ajax(u.extend({url:c,type:a,dataType:g,data:p,success:m},u.isPlainObject(c)&&c))}}),u.ajaxPrefilter(function(i){var a;for(a in i.headers)a.toLowerCase()==="content-type"&&(i.contentType=i.headers[a]||"")}),u._evalUrl=function(i,a,c){return u.ajax({url:i,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(p){u.globalEval(p,a,c)}})},u.fn.extend({wrapAll:function(i){var a;return this[0]&&(x(i)&&(i=i.call(this[0])),a=u(i,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&a.insertBefore(this[0]),a.map(function(){for(var c=this;c.firstElementChild;)c=c.firstElementChild;return c}).append(this)),this},wrapInner:function(i){return x(i)?this.each(function(a){u(this).wrapInner(i.call(this,a))}):this.each(function(){var a=u(this),c=a.contents();c.length?c.wrapAll(i):a.append(i)})},wrap:function(i){var a=x(i);return this.each(function(c){u(this).wrapAll(a?i.call(this,c):i)})},unwrap:function(i){return this.parent(i).not("body").each(function(){u(this).replaceWith(this.childNodes)}),this}}),u.expr.pseudos.hidden=function(i){return!u.expr.pseudos.visible(i)},u.expr.pseudos.visible=function(i){return!!(i.offsetWidth||i.offsetHeight||i.getClientRects().length)},u.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch{}};var Nn={0:200,1223:204},Rt=u.ajaxSettings.xhr();w.cors=!!Rt&&"withCredentials"in Rt,w.ajax=Rt=!!Rt,u.ajaxTransport(function(i){var a,c;if(w.cors||Rt&&!i.crossDomain)return{send:function(p,m){var g,_=i.xhr();if(_.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(g in i.xhrFields)_[g]=i.xhrFields[g];i.mimeType&&_.overrideMimeType&&_.overrideMimeType(i.mimeType),!i.crossDomain&&!p["X-Requested-With"]&&(p["X-Requested-With"]="XMLHttpRequest");for(g in p)_.setRequestHeader(g,p[g]);a=function(A){return function(){a&&(a=c=_.onload=_.onerror=_.onabort=_.ontimeout=_.onreadystatechange=null,A==="abort"?_.abort():A==="error"?typeof _.status!="number"?m(0,"error"):m(_.status,_.statusText):m(Nn[_.status]||_.status,_.statusText,(_.responseType||"text")!=="text"||typeof _.responseText!="string"?{binary:_.response}:{text:_.responseText},_.getAllResponseHeaders()))}},_.onload=a(),c=_.onerror=_.ontimeout=a("error"),_.onabort!==void 0?_.onabort=c:_.onreadystatechange=function(){_.readyState===4&&e.setTimeout(function(){a&&c()})},a=a("abort");try{_.send(i.hasContent&&i.data||null)}catch(A){if(a)throw A}},abort:function(){a&&a()}}}),u.ajaxPrefilter(function(i){i.crossDomain&&(i.contents.script=!1)}),u.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(i){return u.globalEval(i),i}}}),u.ajaxPrefilter("script",function(i){i.cache===void 0&&(i.cache=!1),i.crossDomain&&(i.type="GET")}),u.ajaxTransport("script",function(i){if(i.crossDomain||i.scriptAttrs){var a,c;return{send:function(p,m){a=u("<script>").attr(i.scriptAttrs||{}).prop({charset:i.scriptCharset,src:i.url}).on("load error",c=function(g){a.remove(),c=null,g&&m(g.type==="error"?404:200,g.type)}),D.head.appendChild(a[0])},abort:function(){c&&c()}}}});var qr=[],lr=/(=)\?(?=&|$)|\?\?/;u.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var i=qr.pop()||u.expando+"_"+jr.guid++;return this[i]=!0,i}}),u.ajaxPrefilter("json jsonp",function(i,a,c){var p,m,g,_=i.jsonp!==!1&&(lr.test(i.url)?"url":typeof i.data=="string"&&(i.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&lr.test(i.data)&&"data");if(_||i.dataTypes[0]==="jsonp")return p=i.jsonpCallback=x(i.jsonpCallback)?i.jsonpCallback():i.jsonpCallback,_?i[_]=i[_].replace(lr,"$1"+p):i.jsonp!==!1&&(i.url+=(nr.test(i.url)?"&":"?")+i.jsonp+"="+p),i.converters["script json"]=function(){return g||u.error(p+" was not called"),g[0]},i.dataTypes[0]="json",m=e[p],e[p]=function(){g=arguments},c.always(function(){m===void 0?u(e).removeProp(p):e[p]=m,i[p]&&(i.jsonpCallback=a.jsonpCallback,qr.push(p)),g&&x(m)&&m(g[0]),g=m=void 0}),"script"}),w.createHTMLDocument=function(){var i=D.implementation.createHTMLDocument("").body;return i.innerHTML="<form></form><form></form>",i.childNodes.length===2}(),u.parseHTML=function(i,a,c){if(typeof i!="string")return[];typeof a=="boolean"&&(c=a,a=!1);var p,m,g;return a||(w.createHTMLDocument?(a=D.implementation.createHTMLDocument(""),p=a.createElement("base"),p.href=D.location.href,a.head.appendChild(p)):a=D),m=be.exec(i),g=!c&&[],m?[a.createElement(m[1])]:(m=Ar([i],a,g),g&&g.length&&u(g).remove(),u.merge([],m.childNodes))},u.fn.load=function(i,a,c){var p,m,g,_=this,A=i.indexOf(" ");return A>-1&&(p=pt(i.slice(A)),i=i.slice(0,A)),x(a)?(c=a,a=void 0):a&&typeof a=="object"&&(m="POST"),_.length>0&&u.ajax({url:i,type:m||"GET",dataType:"html",data:a}).done(function(b){g=arguments,_.html(p?u("<div>").append(u.parseHTML(b)).find(p):b)}).always(c&&function(b,C){_.each(function(){c.apply(this,g||[b.responseText,C,b])})}),this},u.expr.pseudos.animated=function(i){return u.grep(u.timers,function(a){return i===a.elem}).length},u.offset={setOffset:function(i,a,c){var p,m,g,_,A,b,C,L=u.css(i,"position"),k=u(i),R={};L==="static"&&(i.style.position="relative"),A=k.offset(),g=u.css(i,"top"),b=u.css(i,"left"),C=(L==="absolute"||L==="fixed")&&(g+b).indexOf("auto")>-1,C?(p=k.position(),_=p.top,m=p.left):(_=parseFloat(g)||0,m=parseFloat(b)||0),x(a)&&(a=a.call(i,c,u.extend({},A))),a.top!=null&&(R.top=a.top-A.top+_),a.left!=null&&(R.left=a.left-A.left+m),"using"in a?a.using.call(i,R):k.css(R)}},u.fn.extend({offset:function(i){if(arguments.length)return i===void 0?this:this.each(function(m){u.offset.setOffset(this,i,m)});var a,c,p=this[0];if(p)return p.getClientRects().length?(a=p.getBoundingClientRect(),c=p.ownerDocument.defaultView,{top:a.top+c.pageYOffset,left:a.left+c.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var i,a,c,p=this[0],m={top:0,left:0};if(u.css(p,"position")==="fixed")a=p.getBoundingClientRect();else{for(a=this.offset(),c=p.ownerDocument,i=p.offsetParent||c.documentElement;i&&(i===c.body||i===c.documentElement)&&u.css(i,"position")==="static";)i=i.parentNode;i&&i!==p&&i.nodeType===1&&(m=u(i).offset(),m.top+=u.css(i,"borderTopWidth",!0),m.left+=u.css(i,"borderLeftWidth",!0))}return{top:a.top-m.top-u.css(p,"marginTop",!0),left:a.left-m.left-u.css(p,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var i=this.offsetParent;i&&u.css(i,"position")==="static";)i=i.offsetParent;return i||ft})}}),u.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(i,a){var c=a==="pageYOffset";u.fn[i]=function(p){return Ge(this,function(m,g,_){var A;if(H(m)?A=m:m.nodeType===9&&(A=m.defaultView),_===void 0)return A?A[a]:m[g];A?A.scrollTo(c?A.pageXOffset:_,c?_:A.pageYOffset):m[g]=_},i,p,arguments.length)}}),u.each(["top","left"],function(i,a){u.cssHooks[a]=Or(w.pixelPosition,function(c,p){if(p)return p=Ot(c,a),Qt.test(p)?u(c).position()[a]+"px":p})}),u.each({Height:"height",Width:"width"},function(i,a){u.each({padding:"inner"+i,content:a,"":"outer"+i},function(c,p){u.fn[p]=function(m,g){var _=arguments.length&&(c||typeof m!="boolean"),A=c||(m===!0||g===!0?"margin":"border");return Ge(this,function(b,C,L){var k;return H(b)?p.indexOf("outer")===0?b["inner"+i]:b.document.documentElement["client"+i]:b.nodeType===9?(k=b.documentElement,Math.max(b.body["scroll"+i],k["scroll"+i],b.body["offset"+i],k["offset"+i],k["client"+i])):L===void 0?u.css(b,C,A):u.style(b,C,L,A)},a,_?m:void 0,_)}})}),u.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(i,a){u.fn[a]=function(c){return this.on(a,c)}}),u.fn.extend({bind:function(i,a,c){return this.on(i,null,a,c)},unbind:function(i,a){return this.off(i,null,a)},delegate:function(i,a,c,p){return this.on(a,i,c,p)},undelegate:function(i,a,c){return arguments.length===1?this.off(i,"**"):this.off(a,i||"**",c)},hover:function(i,a){return this.on("mouseenter",i).on("mouseleave",a||i)}}),u.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(i,a){u.fn[a]=function(c,p){return arguments.length>0?this.on(a,null,c,p):this.trigger(a)}});var Rn=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;u.proxy=function(i,a){var c,p,m;if(typeof a=="string"&&(c=i[a],a=i,i=c),!!x(i))return p=s.call(arguments,2),m=function(){return i.apply(a||this,p.concat(s.call(arguments)))},m.guid=i.guid=i.guid||u.guid++,m},u.holdReady=function(i){i?u.readyWait++:u.ready(!0)},u.isArray=Array.isArray,u.parseJSON=JSON.parse,u.nodeName=U,u.isFunction=x,u.isWindow=H,u.camelCase=Be,u.type=Y,u.now=Date.now,u.isNumeric=function(i){var a=u.type(i);return(a==="number"||a==="string")&&!isNaN(i-parseFloat(i))},u.trim=function(i){return i==null?"":(i+"").replace(Rn,"$1")};var Dn=e.jQuery,Pn=e.$;return u.noConflict=function(i){return e.$===u&&(e.$=Pn),i&&e.jQuery===u&&(e.jQuery=Dn),u},typeof t>"u"&&(e.jQuery=e.$=u),u})})(jquery);var jqueryExports=jquery.exports;const $=getDefaultExportFromCjs(jqueryExports),actionAddins={};class MustInputAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="必須チェック",this.actionProps=[],this.register(),this.props={field:{code:""},message:""},this.register()}async process(e,t){var l;let r={canNext:!0,result:!1};if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue))return r;this.props=e.ActionValue;const o=t.record,s=(l=o[this.props.field.code])==null?void 0:l.value;return s===void 0||s===""?(o[this.props.field.code].error=this.props.message,r):(r={canNext:!0,result:!0},r)}register(){actionAddins[this.name]=this}}new MustInputAction;class Formatter{static numberFormat(e,t){let r=Math.floor(Math.abs(e)).toString(),o=Math.abs(e).toString().split(".")[1]||"",s=e<0,l=t.includes("%");l&&(e*=100,r=Math.floor(Math.abs(e)).toString(),o=Math.abs(e).toString().split(".")[1]||"");let[f,E]=t.split(".");if(r=f?r.padStart(f.replace(/[^0]/g,"").length,"0"):r,o=o.padEnd(E?E.length:0,"0"),/,/.test(f)){const h=[];for(;r.length;)h.unshift(r.slice(-3)),r=r.slice(0,-3);r=h.join(",")}let d=E?`${r}.${o}`:r;return d=s?`-${d}`:d,l?`${d}%`:d}static dateFormat(e,t){const r=e.getFullYear(),o=e.getMonth()+1,s=e.getDate(),l=e.getHours(),f=e.getMinutes(),E=e.getSeconds(),d=e.getMilliseconds(),h=-e.getTimezoneOffset()/60,y={yyyy:r.toString(),yy:r.toString().slice(-2),MM:o.toString().padStart(2,"0"),M:o.toString(),dd:s.toString().padStart(2,"0"),d:s.toString(),HH:l.toString().padStart(2,"0"),H:l.toString(),hh:(l>12?l-12:l).toString().padStart(2,"0"),h:(l>12?l-12:l).toString(),mm:f.toString().padStart(2,"0"),m:f.toString(),ss:E.toString().padStart(2,"0"),s:E.toString(),fff:d.toString().padStart(3,"0"),zzz:(h>=0?"+":"-")+Math.abs(h).toString().padStart(2,"0")+":00"};return t.replace(/yyyy|yy|MM|M|dd|d|HH|H|hh|h|mm|m|ss|s|fff|zzz/g,S=>y[S]||S)}}class AutoNumbering{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="自動採番する",this.actionProps=[],this.register(),this.props={field:{code:""},format:"",prefix:"",suffix:"",verName:{name:""}},globalThis.window.$format=this.format,this.register()}async process(n,e,t){let r={canNext:!1,result:!1};try{if(this.actionProps=n.actionProps,!("field"in n.ActionValue)&&!("format"in n.ActionValue))return r;this.props=n.ActionValue;const o=e.record,s=await this.createNumber(this.props);return o[this.props.field.code].value=s,this.props.verName&&this.props.verName.name!==""&&(t.variables[this.props.verName.name]=s),r={canNext:!0,result:!0},r}catch(o){return console.error(o),e.error="処理中異常が発生しました。",{canNext:!1,result:!1}}}execTemplate(n){if(n===void 0)return"";const e=/\$\{([^}]+)\}/g;return n.replace(e,(t,r)=>this.execEval(t,r))}execEval(match,expr){return console.log(match),eval(expr)}format(n){const e=new Date;return Formatter.dateFormat(e,n)}async createNumber(n){let e="",t="",r="",o=1;try{o=await this.fetchNo()}catch(s){console.log(s)}return n.format!==void 0&&n.format!==""?e=Formatter.numberFormat(o,n.format):e=o.toString(10),n.prefix!==void 0&&n.prefix!==""&&(t=this.execTemplate(n.prefix)),n.suffix!==void 0&&n.suffix!==""&&(r=this.execTemplate(n.suffix)),`${t}${e}${r}`}async fetchNo(){let n=1;return await new kintone.Promise((e,t)=>{const r=kintone.api.url("/k/v1/records",!0),o={app:kintone.app.getId(),fields:["$id"],query:"limit 1"};return kintone.api(r,"GET",o).then(s=>{s.records[0]!==null&&(n=parseInt(s.records[0].$id.value,10)+1),e(n)}).catch(s=>{t(s)})})}register(){actionAddins[this.name]=this}}new AutoNumbering;class GroupNode{constructor(e,t){F(this,"index");F(this,"type");F(this,"children");F(this,"parent");F(this,"logicalOperator");this.index=0,this.type=t==null?"root":"logicgroup",this.logicalOperator=e,this.parent=t,this.children=[]}get label(){return this.logicalOperator}get header(){return this.type==="root"?"root":"generic"}get expanded(){return this.children.length>0}static fromJSON(e,t=null){const r=new GroupNode(e.logicalOperator,t);return r.index=e.index,r.children=e.children.map(o=>o.type==="logicgroup"?GroupNode.fromJSON(o,r):ConditionNode.fromJSON(o,r)),r}}class ConditionNode{constructor(e,t,r,o){F(this,"index");F(this,"type");F(this,"parent");F(this,"object");F(this,"operator");F(this,"value");this.index=0,this.type="condition",this.object=e,this.operator=t,this.value=r,this.parent=o}get logicalOperator(){return this.parent.logicalOperator}get header(){return"generic"}static fromJSON(e,t){const r=new ConditionNode(e.object,e.operator,e.value,t);return r.index=e.index,r}}class ConditionTree{constructor(){F(this,"root");F(this,"maxIndex");this.maxIndex=0,this.root=new GroupNode("AND",null)}addNode(e,t){this.maxIndex++,t.index=this.maxIndex,e.children.push(t)}removeNode(e){if(e.parent===null)throw new Error("ルートノード削除できません");{const t=e.parent,r=t.children.indexOf(e);r>-1&&t.children.splice(r,1)}}findByIndex(e){return this.findChildren(this.root,e)}findChildren(e,t){if(e.index===t)return e;for(const r of e.children){if(r.index===t)return r;if(r.type!=="condition"){const o=this.findChildren(r,t);if(o)return o}}}getMaxIndex(e){let t=e.index;return e.type!=="condition"&&e.children.forEach(o=>{const s=this.getMaxIndex(o);s>t&&(t=s)}),t}buildConditionString(e){if(e.type!=="condition"){let t="(";const r=e;for(let o=0;o<r.children.length;o++){const s=this.buildConditionString(r.children[o]);s!==""&&(t+=s,o<r.children.length-1&&(t+=` ${r.logicalOperator} `))}return t+=")",t}else{const t=e;if(t.object&&t.operator){let r=t.value;return r&&typeof r=="object"&&"label"in r&&(r=t.value.label),`${t.object.name} ${t.operator} '${r}'`}else return""}}getConditions(e){const t=[];return e.children.forEach(r=>{r.type==="condition"?t.push(r):t.push(...this.getConditions(r))}),t}getGroups(e){const t=[];return t.push(e.index),e.children.forEach(r=>{r.type!=="condition"&&t.push(...this.getGroups(r))}),t}fromJson(e){const t=JSON.parse(e);return this.root=GroupNode.fromJSON(t),this.maxIndex=this.getMaxIndex(this.root),this.root}toJson(){return JSON.stringify(this.root,(e,t)=>e==="parent"?t?t.type:null:t)}evaluate(e,t){if(e.type==="condition")return this.evaluateCondition(e,t);if(e.type==="logicgroup"||e.type==="root"){const r=e,o=r.children.map(s=>this.evaluate(s,t));if(r.logicalOperator==="AND")return o.every(s=>s);if(r.logicalOperator==="OR")return o.some(s=>s);throw new Error("Unsupported logical operator")}else throw new Error("Unsupported node type")}getObjectValue(e,t){if(!(!e||typeof e!="object"||!("objectType"in e))){if(e.objectType==="field"){const r=t.record[e.code];return r.type==="NUMBER"&&r.value!==void 0?Number(r.value):r.value}else if(e.objectType==="variable")return t.variables[e.name].value}}getConditionValue(e){if(!e||typeof e!="object")return e;if("sharedText"in e)return e.sharedText;if("label"in e)return e.label;if("value"in e)return e.value;if("name"in e)return e.name}evaluateCondition(e,t){const{object:r,operator:o,value:s}=e,l=this.getObjectValue(r,t),f=this.getConditionValue(s);switch(o){case"=":case"!=":case">":case">=":case"<":case"<=":return this.compare(o,l,f);case"contains":return this.contains(l,f);case"not contains":return!this.contains(l,f);case"start With":return this.startWith(l,f);case"not start with":return!this.startWith(l,f);case"end with":return this.endsWith(l,f);case"not end with":return this.endsWith(l,f);default:throw new Error("Unsupported operator")}}compare(e,t,r){if((t==null||t==="")&&(r==null||r==="")&&(t="",r=""),t instanceof Date){const o=new Date(r);isNaN(o.getTime())||(r=o)}else if(typeof t=="number"){const o=Number(r);isNaN(o)||(r=o)}else typeof t=="string"&&(r=String(r));switch(e){case"=":return t===r;case"!=":return t!==r;case">":return t>r;case">=":return t>=r;case"<":return t<r;case"<=":return t<=r;default:throw new Error("Unsupported operator for comparison")}}contains(e,t){return typeof e=="string"&&typeof t=="string"?e.includes(t):!1}startWith(e,t){return typeof e=="string"&&typeof t=="string"?e.startsWith(t):!1}endsWith(e,t){return typeof e=="string"&&typeof t=="string"?e.endsWith(t):!1}}class FieldShownAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="表示/非表示",this.actionProps=[],this.props={field:{code:""},show:"",condition:""},this.register()}async process(e,t,r){let o={canNext:!0,result:!1};try{return this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("show"in e.ActionValue)||(this.props=e.ActionValue,this.getConditionResult(r)&&(this.props.show==="表示"?kintone.app.record.setFieldShown(this.props.field.code,!0):this.props.show==="非表示"&&kintone.app.record.setFieldShown(this.props.field.code,!1)),o={canNext:!0,result:!0}),o}catch(s){return t.error=s,console.error(s),o.canNext=!1,o}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new FieldShownAction;class ErrorShowAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="エラー表示",this.actionProps=[],this.props={message:"",condition:""},this.register()}async process(e,t,r){let o={canNext:!0,result:!1};try{return this.actionProps=e.actionProps,!("message"in e.ActionValue)&&!("condition"in e.ActionValue)||(this.props=e.ActionValue,this.getConditionResult(r)?t.error=this.props.message:o={canNext:!1,result:!0}),o}catch(s){return t.error=s,console.error(s),o.canNext=!1,o}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new ErrorShowAction;const buttonAdd="";class ButtonAddAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="ボタンの配置",this.actionProps=[],this.props={buttonName:"",position:"",eventName:""},this.register()}async process(e,t){let r={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("buttonName"in e.ActionValue)&&!("position"in e.ActionValue))return r;this.props=e.ActionValue;let o;if(this.props.space&&this.props.space.elementId?o=kintone.app.record.getSpaceElement(this.props.space.elementId):o=kintone.app.record.getHeaderMenuSpaceElement(),!o)return r;const s=$(`<button id='${this.props.eventName}' class='alc-button-normal' >${this.props.buttonName}</button>`);this.props.position==="一番左に追加する"?$(o).prepend(s):$(o).append(s);const l=`${t.type}.customButtonClick.${this.props.eventName}`;return s.on("click",()=>{$(document).trigger(l,t)}),r}catch(o){return t.error=o,console.error(o),r.canNext=!1,r}}register(){actionAddins[this.name]=this}}new ButtonAddAction;class ConditionAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="条件式",this.actionProps=[],this.props={condition:"",verName:{name:""}},this.register()}async process(e,t,r){let o={canNext:!0,result:""};try{if(this.actionProps=e.actionProps,!("condition"in e.ActionValue)&&!("verName"in e.ActionValue))return o;this.props=e.ActionValue;const s=this.getConditionResult(r);return console.log("条件計算結果:",s),s?o={canNext:!0,result:"はい"}:o={canNext:!0,result:"いいえ"},this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=o.result),o}catch(s){return t.error=s,console.error(s),o.canNext=!1,o}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new ConditionAction;var index_browser={},platform$2={};(function(n){Object.defineProperty(n,"__esModule",{value:!0}),n.injectPlatformDeps=n.platformDeps=void 0,n.platformDeps={readFileFromPath:function(){throw new Error("not implemented")},getRequestToken:function(){throw new Error("not implemented")},getDefaultAuth:function(){throw new Error("not implemented")},buildPlatformDependentConfig:function(){throw new Error("not implemented")},buildHeaders:function(){throw new Error("not implemented")},buildFormDataValue:function(){throw new Error("not implemented")},buildBaseUrl:function(){throw new Error("not implemented")},getVersion:function(){throw new Error("not implemented")}};var e=function(t){t.readFileFromPath&&(n.platformDeps.readFileFromPath=t.readFileFromPath),t.getRequestToken&&(n.platformDeps.getRequestToken=t.getRequestToken),t.getDefaultAuth&&(n.platformDeps.getDefaultAuth=t.getDefaultAuth),t.buildPlatformDependentConfig&&(n.platformDeps.buildPlatformDependentConfig=t.buildPlatformDependentConfig),t.buildHeaders&&(n.platformDeps.buildHeaders=t.buildHeaders),t.buildFormDataValue&&(n.platformDeps.buildFormDataValue=t.buildFormDataValue),t.buildBaseUrl&&(n.platformDeps.buildBaseUrl=t.buildBaseUrl),t.getVersion&&(n.platformDeps.getVersion=t.getVersion)};n.injectPlatformDeps=e})(platform$2);var browser$2={},UnsupportedPlatformError$1={},__extends$8=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,o){r.__proto__=o}||function(r,o){for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[s]=o[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(UnsupportedPlatformError$1,"__esModule",{value:!0});UnsupportedPlatformError$1.UnsupportedPlatformError=void 0;var UnsupportedPlatformError=function(n){__extends$8(e,n);function e(t){var r=this,o="This function is not supported in ".concat(t," environment");return r=n.call(this,o)||this,Error.captureStackTrace&&Error.captureStackTrace(r,e),r.name="UnsupportedPlatformError",r.platform=t,Object.setPrototypeOf(r,e.prototype),r}return e}(Error);UnsupportedPlatformError$1.UnsupportedPlatformError=UnsupportedPlatformError;function Mime$1(){this._types=Object.create(null),this._extensions=Object.create(null);for(let n=0;n<arguments.length;n++)this.define(arguments[n]);this.define=this.define.bind(this),this.getType=this.getType.bind(this),this.getExtension=this.getExtension.bind(this)}Mime$1.prototype.define=function(n,e){for(let t in n){let r=n[t].map(function(o){return o.toLowerCase()});t=t.toLowerCase();for(let o=0;o<r.length;o++){const s=r[o];if(s[0]!=="*"){if(!e&&s in this._types)throw new Error('Attempt to change mapping for "'+s+'" extension from "'+this._types[s]+'" to "'+t+'". Pass `force=true` to allow this, otherwise remove "'+s+'" from the list of extensions for "'+t+'".');this._types[s]=t}}if(e||!this._extensions[t]){const o=r[0];this._extensions[t]=o[0]!=="*"?o:o.substr(1)}}};Mime$1.prototype.getType=function(n){n=String(n);let e=n.replace(/^.*[/\\]/,"").toLowerCase(),t=e.replace(/^.*\./,"").toLowerCase(),r=e.length<n.length;return(t.length<e.length-1||!r)&&this._types[t]||null};Mime$1.prototype.getExtension=function(n){return n=/^\s*([^;\s]*)/.test(n)&&RegExp.$1,n&&this._extensions[n.toLowerCase()]||null};var Mime_1=Mime$1,standard={"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["es","ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avif":["avif"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]};let Mime=Mime_1;var lite=new Mime(standard);const name="@kintone/rest-api-client",version="5.5.2",publishConfig={access:"public"},author={name:"Cybozu, Inc.",url:"https://cybozu.co.jp"},description="Kintone REST API client for JavaScript",main$1="lib/src/index.js",module="esm/src/index.js",browser$1="lib/src/index.browser.js",types="lib/src/index.d.ts",scripts={prebuild:"pnpm clean",build:"tsc --build --force",postbuild:"run-p build:*",lint:"eslint 'src/**/*.ts' --max-warnings 0",prepublishOnly:"run-p build:umd_*",test:"cross-env NODE_OPTIONS=--experimental-vm-modules npx jest","test:ci":"cross-env NODE_OPTIONS=--experimental-vm-modules npx jest --runInBand","build:umd_dev":"rollup -c --environment BUILD:development","build:umd_prod":"rollup -c --environment BUILD:production",clean:"rimraf lib esm umd",fix:"pnpm lint --fix",start:"pnpm build --watch"},repository={type:"git",url:"git+https://github.com/kintone/js-sdk.git",directory:"packages/rest-api-client"},files=["esm","lib","umd","index.mjs"],keywords=["kintone","rest","api-client"],license="MIT",bugs={url:"https://github.com/kintone/js-sdk/issues"},homepage="https://github.com/kintone/js-sdk/tree/main/packages/rest-api-client#readme",engines={node:">=18"},devDependencies={"@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^26.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^15.2.3","@rollup/plugin-terser":"^0.4.4","@types/core-js":"^2.5.8","@types/js-base64":"^3.3.1","@types/mime":"^3.0.4","@types/qs":"^6.9.15",rollup:"^4.18.0","rollup-plugin-ecma-version-validator":"^0.2.13","rollup-plugin-license":"^3.4.0","rollup-plugin-node-globals":"^1.4.0","rollup-plugin-polyfill-node":"^0.13.0",webpack:"^5.92.0","webpack-cli":"^5.1.4","babel-loader":"^9.1.3",vite:"^5.2.13",rimraf:"^5.0.7","cross-env":"^7.0.3"},dependencies={"core-js":"^3.37.1",axios:"^1.7.2","form-data":"^4.0.0","js-base64":"^3.7.7",mime:"^3.0.0",qs:"^6.12.1"},exports={".":{types:{import:"./esm/src/index.d.ts",require:"./lib/src/index.d.ts",default:"./lib/src/index.d.ts"},node:{import:"./index.mjs",require:"./lib/src/index.js",default:"./lib/src/index.js"},browser:"./lib/src/index.browser.js"},"./package.json":"./package.json"},require$$2={name,version,publishConfig,author,description,main:main$1,module,browser:browser$1,types,scripts,repository,files,keywords,license,bugs,homepage,engines,devDependencies,dependencies,exports};var __awaiter$5=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function o(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function f(h){try{d(r.next(h))}catch(y){l(y)}}function E(h){try{d(r.throw(h))}catch(y){l(y)}}function d(h){h.done?s(h.value):o(h.value).then(f,E)}d((r=r.apply(n,e||[])).next())})},__generator$5=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,o,s,l;return l={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function f(d){return function(h){return E([d,h])}}function E(d){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,d[0]&&(t=0)),t;)try{if(r=1,o&&(s=d[0]&2?o.return:d[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,d[1])).done)return s;switch(o=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return t.label++,{value:d[1],done:!1};case 5:t.label++,o=d[1],d=[0];continue;case 7:d=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){t.label=d[1];break}if(d[0]===6&&t.label<s[1]){t.label=s[1],s=d;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(d);break}s[2]&&t.ops.pop(),t.trys.pop();continue}d=e.call(n,t)}catch(h){d=[6,h],o=0}finally{r=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},__importDefault$3=commonjsGlobal&&commonjsGlobal.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(browser$2,"__esModule",{value:!0});browser$2.getVersion=browser$2.buildBaseUrl=browser$2.buildFormDataValue=browser$2.buildHeaders=browser$2.buildPlatformDependentConfig=browser$2.getDefaultAuth=browser$2.getRequestToken=browser$2.readFileFromPath=void 0;var UnsupportedPlatformError_1$2=UnsupportedPlatformError$1,lite_1=__importDefault$3(lite),package_json_1=__importDefault$3(require$$2),readFileFromPath=function(n){throw new UnsupportedPlatformError_1$2.UnsupportedPlatformError("Browser")};browser$2.readFileFromPath=readFileFromPath;var getRequestToken=function(){return __awaiter$5(void 0,void 0,void 0,function(){var n,e;return __generator$5(this,function(t){if(typeof kintone=="object"&&kintone!==null&&typeof kintone.getRequestToken=="function")return[2,kintone.getRequestToken()];if(typeof garoon=="object"&&garoon!==null&&typeof((e=(n=garoon.connect)===null||n===void 0?void 0:n.kintone)===null||e===void 0?void 0:e.getRequestToken)=="function")return[2,garoon.connect.kintone.getRequestToken()];throw new Error("session authentication must specify a request token")})})};browser$2.getRequestToken=getRequestToken;var getDefaultAuth=function(){return{type:"session"}};browser$2.getDefaultAuth=getDefaultAuth;var buildPlatformDependentConfig=function(){return{}};browser$2.buildPlatformDependentConfig=buildPlatformDependentConfig;var buildHeaders=function(){return{}};browser$2.buildHeaders=buildHeaders;var buildFormDataValue=function(n,e){var t={};return e&&(t.type=lite_1.default.getType(e)||void 0),new Blob([n],t)};browser$2.buildFormDataValue=buildFormDataValue;var buildBaseUrl=function(n){if(n)return n;if(location===void 0)throw new Error("The baseUrl parameter is required for this environment");var e=location.host,t=location.protocol;return"".concat(t,"//").concat(e)};browser$2.buildBaseUrl=buildBaseUrl;var getVersion=function(){return package_json_1.default.version};browser$2.getVersion=getVersion;var KintoneRestAPIClient$1={},BulkRequestClient$1={},BaseClient$1={},url={};Object.defineProperty(url,"__esModule",{value:!0});url.buildPath=void 0;var buildPath=function(n){var e=n.endpointName,t=n.guestSpaceId,r=n.preview,o=t!==void 0?"/guest/".concat(t):"",s=r?"/preview":"";return"/k".concat(o,"/v1").concat(s,"/").concat(e,".json")};url.buildPath=buildPath;var __assign$7=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$7=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o])}return n},__assign$7.apply(this,arguments)};Object.defineProperty(BaseClient$1,"__esModule",{value:!0});BaseClient$1.BaseClient=void 0;var url_1=url,BaseClient=function(){function n(e,t){this.client=e,this.guestSpaceId=t}return n.prototype.buildPathWithGuestSpaceId=function(e){return(0,url_1.buildPath)(__assign$7(__assign$7({},e),{guestSpaceId:this.guestSpaceId}))},n.prototype.buildPath=function(e){return(0,url_1.buildPath)(e)},n}();BaseClient$1.BaseClient=BaseClient;var __extends$7=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,o){r.__proto__=o}||function(r,o){for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[s]=o[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),__assign$6=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$6=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o])}return n},__assign$6.apply(this,arguments)},__rest$3=commonjsGlobal&&commonjsGlobal.__rest||function(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(n);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(n,r[o])&&(t[r[o]]=n[r[o]]);return t};Object.defineProperty(BulkRequestClient$1,"__esModule",{value:!0});BulkRequestClient$1.BulkRequestClient=void 0;var BaseClient_1$4=BaseClient$1,BulkRequestClient=function(n){__extends$7(e,n);function e(t,r){var o=n.call(this,t,r)||this;return o.REQUESTS_LENGTH_LIMIT=20,o}return e.prototype.send=function(t){var r=this,o=t.requests,s=o.map(function(f){if("endpointName"in f){var E=f.endpointName,d=__rest$3(f,["endpointName"]);return __assign$6({api:r.buildPathWithGuestSpaceId({endpointName:E})},d)}return f}),l=this.buildPathWithGuestSpaceId({endpointName:"bulkRequest"});return this.client.post(l,{requests:s})},e}(BaseClient_1$4.BaseClient);BulkRequestClient$1.BulkRequestClient=BulkRequestClient;var AppClient$1={},__extends$6=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,o){r.__proto__=o}||function(r,o){for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[s]=o[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),__assign$5=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$5=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o])}return n},__assign$5.apply(this,arguments)},__awaiter$4=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function o(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function f(h){try{d(r.next(h))}catch(y){l(y)}}function E(h){try{d(r.throw(h))}catch(y){l(y)}}function d(h){h.done?s(h.value):o(h.value).then(f,E)}d((r=r.apply(n,e||[])).next())})},__generator$4=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,o,s,l;return l={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function f(d){return function(h){return E([d,h])}}function E(d){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,d[0]&&(t=0)),t;)try{if(r=1,o&&(s=d[0]&2?o.return:d[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,d[1])).done)return s;switch(o=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return t.label++,{value:d[1],done:!1};case 5:t.label++,o=d[1],d=[0];continue;case 7:d=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){t.label=d[1];break}if(d[0]===6&&t.label<s[1]){t.label=s[1],s=d;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(d);break}s[2]&&t.ops.pop(),t.trys.pop();continue}d=e.call(n,t)}catch(h){d=[6,h],o=0}finally{r=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},__rest$2=commonjsGlobal&&commonjsGlobal.__rest||function(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(n);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(n,r[o])&&(t[r[o]]=n[r[o]]);return t};Object.defineProperty(AppClient$1,"__esModule",{value:!0});AppClient$1.AppClient=void 0;var BaseClient_1$3=BaseClient$1,AppClient=function(n){__extends$6(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.getFormFields=function(t){var r=t.preview,o=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/form/fields",preview:r});return this.client.get(s,__assign$5({},o))},e.prototype.addFormFields=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/form/fields",preview:!0});return this.client.post(r,t)},e.prototype.updateFormFields=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/form/fields",preview:!0});return this.client.put(r,t)},e.prototype.deleteFormFields=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/form/fields",preview:!0});return this.client.delete(r,t)},e.prototype.getFormLayout=function(t){var r=t.preview,o=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/form/layout",preview:r});return this.client.get(s,__assign$5({},o))},e.prototype.updateFormLayout=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/form/layout",preview:!0});return this.client.put(r,t)},e.prototype.getViews=function(t){var r=t.preview,o=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/views",preview:r});return this.client.get(s,o)},e.prototype.updateViews=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/views",preview:!0});return this.client.put(r,t)},e.prototype.getApp=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app"});return this.client.get(r,t)},e.prototype.getApps=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"apps"});return this.client.get(r,t)},e.prototype.addApp=function(t){return __awaiter$4(this,void 0,void 0,function(){var r,o,s,l,f;return __generator$4(this,function(E){switch(E.label){case 0:return r=t.name,o=t.space,s=this.buildPathWithGuestSpaceId({endpointName:"app",preview:!0}),o?(l=this.buildPathWithGuestSpaceId({endpointName:"space"}),[4,this.client.get(l,{id:o})]):[3,2];case 1:return f=E.sent().defaultThread,[2,this.client.post(s,__assign$5(__assign$5({},t),{thread:f}))];case 2:return[2,this.client.post(s,{name:r})]}})})},e.prototype.getAppSettings=function(t){var r=t.preview,o=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/settings",preview:r});return this.client.get(s,o)},e.prototype.updateAppSettings=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/settings",preview:!0});return this.client.put(r,t)},e.prototype.getProcessManagement=function(t){var r=t.preview,o=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/status",preview:r});return this.client.get(s,o)},e.prototype.updateProcessManagement=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/status",preview:!0});return this.client.put(r,t)},e.prototype.getDeployStatus=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/deploy",preview:!0});return this.client.get(r,t)},e.prototype.deployApp=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/deploy",preview:!0});return this.client.post(r,t)},e.prototype.getFieldAcl=function(t){var r=t.preview,o=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"field/acl",preview:r});return this.client.get(s,__assign$5({},o))},e.prototype.updateFieldAcl=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"field/acl",preview:!0});return this.client.put(r,t)},e.prototype.getAppAcl=function(t){var r=t.preview,o=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/acl",preview:r});return this.client.get(s,__assign$5({},o))},e.prototype.updateAppAcl=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/acl",preview:!0});return this.client.put(r,t)},e.prototype.evaluateRecordsAcl=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/acl/evaluate"});return this.client.get(r,t)},e.prototype.getRecordAcl=function(t){var r=t.preview,o=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"record/acl",preview:r});return this.client.get(s,__assign$5({},o))},e.prototype.updateRecordAcl=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/acl",preview:!0});return this.client.put(r,t)},e.prototype.getAppCustomize=function(t){var r=t.preview,o=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/customize",preview:r});return this.client.get(s,__assign$5({},o))},e.prototype.updateAppCustomize=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/customize",preview:!0});return this.client.put(r,t)},e.prototype.getGeneralNotifications=function(t){var r=t.preview,o=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/general",preview:r});return this.client.get(s,__assign$5({},o))},e.prototype.updateGeneralNotifications=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/general",preview:!0});return this.client.put(r,t)},e.prototype.getPerRecordNotifications=function(t){var r=t.preview,o=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/perRecord",preview:r});return this.client.get(s,o)},e.prototype.updatePerRecordNotifications=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/perRecord",preview:!0});return this.client.put(r,t)},e.prototype.getReminderNotifications=function(t){var r=t.preview,o=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/reminder",preview:r});return this.client.get(s,o)},e.prototype.updateReminderNotifications=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/reminder",preview:!0});return this.client.put(r,t)},e.prototype.getReports=function(t){var r=t.preview,o=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/reports",preview:r});return this.client.get(s,o)},e.prototype.updateReports=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/reports",preview:!0});return this.client.put(r,t)},e.prototype.getAppActions=function(t){var r=t.preview,o=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/actions",preview:r});return this.client.get(s,o)},e.prototype.updateAppActions=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/actions",preview:!0});return this.client.put(r,t)},e}(BaseClient_1$3.BaseClient);AppClient$1.AppClient=AppClient;var RecordClient$1={},error={},KintoneAbortSearchError$1={},__extends$5=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,o){r.__proto__=o}||function(r,o){for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[s]=o[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(KintoneAbortSearchError$1,"__esModule",{value:!0});KintoneAbortSearchError$1.KintoneAbortSearchError=void 0;var KintoneAbortSearchError=function(n){__extends$5(e,n);function e(t){var r=n.call(this,t)||this;return r.name="KintoneAbortSearchError",r.message=t,Object.setPrototypeOf(r,e.prototype),r}return e}(Error);KintoneAbortSearchError$1.KintoneAbortSearchError=KintoneAbortSearchError;var KintoneAllRecordsError$1={},__extends$4=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,o){r.__proto__=o}||function(r,o){for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[s]=o[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(KintoneAllRecordsError$1,"__esModule",{value:!0});KintoneAllRecordsError$1.KintoneAllRecordsError=void 0;var KintoneAllRecordsError=function(n){__extends$4(e,n);function e(t,r,o,s,l){var f=this,E=o-r.length,d=e.extractErrorIndex(E,s,l),h=e.buildErrorMessage(E,o,d);return f=n.call(this,h)||this,f.name="KintoneAllRecordsError",f.processedRecordsResult=t,f.unprocessedRecords=r,f.error=s,f.errorIndex=d,f.message=h,f.numOfProcessedRecords=E,f.numOfAllRecords=o,Object.setPrototypeOf(f,e.prototype),f}return e.parseErrorIndex=function(t){var r=[];return Object.keys(t).forEach(function(o){var s=o.match(/records\[(\d+)\]/);s&&r.push(Number(s[1]))}),r.length>0?Math.min.apply(Math,r):null},e.extractErrorIndex=function(t,r,o){if(r.bulkRequestIndex!==void 0&&r.errors){var s=e.parseErrorIndex(r.errors);if(s!==null)return t+r.bulkRequestIndex*o+s}},e.buildErrorMessage=function(t,r,o){var s="";return o!==void 0&&(s="An error occurred at records[".concat(o,"]. ")),s+="".concat(t,"/").concat(r," records are processed successfully"),s},e}(Error);KintoneAllRecordsError$1.KintoneAllRecordsError=KintoneAllRecordsError;var KintoneRestAPIError$1={},__extends$3=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,o){r.__proto__=o}||function(r,o){for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[s]=o[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(KintoneRestAPIError$1,"__esModule",{value:!0});KintoneRestAPIError$1.KintoneRestAPIError=void 0;var KintoneRestAPIError=function(n){__extends$3(e,n);function e(t){var r=this,o=e.buildErrorResponseDateWithIndex(t),s=o.data,l=o.bulkRequestIndex;return r=n.call(this,s.message)||this,r.name="KintoneRestAPIError",r.id=s.id,r.code=s.code,r.errors=s.errors,r.status=t.status,r.bulkRequestIndex=l,r.headers=t.headers,r.message="[".concat(t.status,"] [").concat(r.code,"] ").concat(r.message," (").concat(r.id,")"),Error.captureStackTrace&&Error.captureStackTrace(r,e),Object.setPrototypeOf(r,e.prototype),r}return e.findErrorResponseDataWithIndex=function(t){for(var r=0;r<t.length;r++)if(Object.keys(t[r]).length!==0){var o=t[r];return{data:o,bulkRequestIndex:r}}throw Error("Missing response data in `results`. This error is likely caused by a bug in Kintone REST API Client. Please file an issue.")},e.buildErrorResponseDateWithIndex=function(t){return"results"in t.data?e.findErrorResponseDataWithIndex(t.data.results):{data:t.data}},e}(Error);KintoneRestAPIError$1.KintoneRestAPIError=KintoneRestAPIError;(function(n){var e=commonjsGlobal&&commonjsGlobal.__createBinding||(Object.create?function(r,o,s,l){l===void 0&&(l=s);var f=Object.getOwnPropertyDescriptor(o,s);(!f||("get"in f?!o.__esModule:f.writable||f.configurable))&&(f={enumerable:!0,get:function(){return o[s]}}),Object.defineProperty(r,l,f)}:function(r,o,s,l){l===void 0&&(l=s),r[l]=o[s]}),t=commonjsGlobal&&commonjsGlobal.__exportStar||function(r,o){for(var s in r)s!=="default"&&!Object.prototype.hasOwnProperty.call(o,s)&&e(o,r,s)};Object.defineProperty(n,"__esModule",{value:!0}),t(KintoneAbortSearchError$1,n),t(KintoneAllRecordsError$1,n),t(KintoneRestAPIError$1,n)})(error);var __extends$2=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,o){r.__proto__=o}||function(r,o){for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[s]=o[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),__assign$4=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$4=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o])}return n},__assign$4.apply(this,arguments)},__awaiter$3=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function o(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function f(h){try{d(r.next(h))}catch(y){l(y)}}function E(h){try{d(r.throw(h))}catch(y){l(y)}}function d(h){h.done?s(h.value):o(h.value).then(f,E)}d((r=r.apply(n,e||[])).next())})},__generator$3=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,o,s,l;return l={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function f(d){return function(h){return E([d,h])}}function E(d){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,d[0]&&(t=0)),t;)try{if(r=1,o&&(s=d[0]&2?o.return:d[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,d[1])).done)return s;switch(o=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return t.label++,{value:d[1],done:!1};case 5:t.label++,o=d[1],d=[0];continue;case 7:d=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){t.label=d[1];break}if(d[0]===6&&t.label<s[1]){t.label=s[1],s=d;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(d);break}s[2]&&t.ops.pop(),t.trys.pop();continue}d=e.call(n,t)}catch(h){d=[6,h],o=0}finally{r=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},__rest$1=commonjsGlobal&&commonjsGlobal.__rest||function(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(n);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(n,r[o])&&(t[r[o]]=n[r[o]]);return t},__spreadArray=commonjsGlobal&&commonjsGlobal.__spreadArray||function(n,e,t){if(t||arguments.length===2)for(var r=0,o=e.length,s;r<o;r++)(s||!(r in e))&&(s||(s=Array.prototype.slice.call(e,0,r)),s[r]=e[r]);return n.concat(s||Array.prototype.slice.call(e))};Object.defineProperty(RecordClient$1,"__esModule",{value:!0});RecordClient$1.RecordClient=void 0;var error_1$1=error,BaseClient_1$2=BaseClient$1,ADD_RECORDS_LIMIT=100,UPDATE_RECORDS_LIMIT=100,DELETE_RECORDS_LIMIT=100,GET_RECORDS_LIMIT=500,RecordClient=function(n){__extends$2(e,n);function e(t,r,o){var s=n.call(this,t,o)||this;return s.bulkRequestClient=r,s.didWarnMaximumOffsetValue=!1,s}return e.prototype.getRecord=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record"});return this.client.get(r,t)},e.prototype.addRecord=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record"});return this.client.post(r,t)},e.prototype.updateRecord=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record"});return this.client.put(r,t)},e.prototype.upsertRecord=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,o,s,l,f,E;return __generator$3(this,function(d){switch(d.label){case 0:return r=t.app,o=t.updateKey,s=t.record,[4,this.getRecords({app:r,query:"".concat(o.field,' = "').concat(o.value,'"')})];case 1:return l=d.sent().records,l.length>0?l[0].$id.type!=="__ID__"?[3,3]:[4,this.updateRecord(t)]:[3,4];case 2:return f=d.sent().revision,[2,{id:l[0].$id.value,revision:f}];case 3:throw new Error("Missing `$id` in `getRecords` response. This error is likely caused by a bug in Kintone REST API Client. Please file an issue.");case 4:return[2,this.addRecord({app:r,record:Object.assign({},s,(E={},E[o.field]={value:o.value},E))})]}})})},e.prototype.getRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,o;return __generator$3(this,function(s){switch(s.label){case 0:return r=this.buildPathWithGuestSpaceId({endpointName:"records"}),[4,this.client.get(r,t)];case 1:return o=s.sent(),this.warnMaximumOffsetValueIfNeeded(t.query),[2,o]}})})},e.prototype.warnMaximumOffsetValueIfNeeded=function(t){if(t){var r=/offset\s+(\d+)/i,o=t.match(r);!this.didWarnMaximumOffsetValue&&o&&Number(o[1])>1e4&&(this.didWarnMaximumOffsetValue=!0,console.warn("Warning: The maximum offset value will be limited to 10,000 in the future. Please use `createCursor()` and `getRecordsByCursor()` instead."))}},e.prototype.addRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,o,s,l;return __generator$3(this,function(f){switch(f.label){case 0:return r=this.buildPathWithGuestSpaceId({endpointName:"records"}),[4,this.client.post(r,t)];case 1:return o=f.sent(),s=o.ids,l=o.revisions,[2,{ids:s,revisions:l,records:s.map(function(E,d){return{id:E,revision:l[d]}})}]}})})},e.prototype.updateRecords=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records"});return this.client.put(r,t)},e.prototype.deleteRecords=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records"});return this.client.delete(r,t)},e.prototype.createCursor=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/cursor"});return this.client.post(r,t)},e.prototype.getRecordsByCursor=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/cursor"});return this.client.get(r,t)},e.prototype.deleteCursor=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/cursor"});return this.client.delete(r,t)},e.prototype.getAllRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,o,s,l,f,E,d;return __generator$3(this,function(h){return r=t.condition,o=t.orderBy,s=t.withCursor,l=s===void 0?!0:s,f=__rest$1(t,["condition","orderBy","withCursor"]),o?l?(E=r?"".concat(r," "):"",d="".concat(E).concat(o?"order by ".concat(o):""),[2,this.getAllRecordsWithCursor(__assign$4(__assign$4({},f),{query:d}))]):[2,this.getAllRecordsWithOffset(__assign$4(__assign$4({},f),{orderBy:o,condition:r}))]:[2,this.getAllRecordsWithId(__assign$4(__assign$4({},f),{condition:r}))]})})},e.prototype.getAllRecordsWithId=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,o,s,l,f,E,d,h,y,S;return __generator$3(this,function(O){switch(O.label){case 0:r=t.fields,o=t.condition,s=__rest$1(t,["fields","condition"]),l=r,l&&l.length>0&&l.indexOf("$id")===-1&&(l=__spreadArray(__spreadArray([],l,!0),["$id"],!1)),f=o?"(".concat(o,") and "):"",E=[],d="0",O.label=1;case 1:return h="".concat(f,"$id > ").concat(d," order by $id asc limit ").concat(GET_RECORDS_LIMIT),[4,this.getRecords(__assign$4(__assign$4({},s),{fields:l,query:h}))];case 2:if(y=O.sent(),E=E.concat(y.records),y.records.length<GET_RECORDS_LIMIT)return[3,3];if(S=y.records[y.records.length-1],S.$id.type==="__ID__")d=S.$id.value;else throw new Error("Missing `$id` in `getRecords` response. This error is likely caused by a bug in Kintone REST API Client. Please file an issue.");return[3,1];case 3:return[2,E]}})})},e.prototype.getAllRecordsWithOffset=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,o,s,l,f,E,d,h;return __generator$3(this,function(y){switch(y.label){case 0:r=t.condition,o=t.orderBy,s=__rest$1(t,["condition","orderBy"]),l=r?"".concat(r," "):"",f=[],E=0,y.label=1;case 1:return d="".concat(l).concat(o?"order by ".concat(o," "):"","limit ").concat(GET_RECORDS_LIMIT," offset ").concat(E),[4,this.getRecords(__assign$4(__assign$4({},s),{query:d}))];case 2:return h=y.sent(),f=f.concat(h.records),h.records.length<GET_RECORDS_LIMIT?[3,3]:(E+=GET_RECORDS_LIMIT,[3,1]);case 3:return[2,f]}})})},e.prototype.getAllRecordsWithCursor=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,o,s,l;return __generator$3(this,function(f){switch(f.label){case 0:return[4,this.createCursor(t)];case 1:r=f.sent().id,f.label=2;case 2:f.trys.push([2,6,,8]),o=[],f.label=3;case 3:return[4,this.getRecordsByCursor({id:r})];case 4:return s=f.sent(),o=o.concat(s.records),s.next?[3,3]:[3,5];case 5:return[2,o];case 6:return l=f.sent(),[4,this.deleteCursor({id:r})];case 7:throw f.sent(),l;case 8:return[2]}})})},e.prototype.addAllRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){return __generator$3(this,function(r){if(!t.records.every(function(o){return!Array.isArray(o)&&o instanceof Object}))throw new Error("the `records` parameter must be an array of object.");return[2,this.addAllRecordsRecursive(t,t.records.length,[])]})})},e.prototype.addAllRecordsRecursive=function(t,r,o){return __awaiter$3(this,void 0,void 0,function(){var s,l,f,E,d,h;return __generator$3(this,function(y){switch(y.label){case 0:if(s=this.bulkRequestClient.REQUESTS_LENGTH_LIMIT*ADD_RECORDS_LIMIT,l=t.app,f=t.records,E=f.slice(0,s),E.length===0)return[2,{records:o}];y.label=1;case 1:return y.trys.push([1,3,,4]),[4,this.addAllRecordsWithBulkRequest({app:l,records:E})];case 2:return d=y.sent(),[3,4];case 3:throw h=y.sent(),new error_1$1.KintoneAllRecordsError({records:o},f,r,h,ADD_RECORDS_LIMIT);case 4:return[2,this.addAllRecordsRecursive({app:l,records:f.slice(s)},r,o.concat(d))]}})})},e.prototype.addAllRecordsWithBulkRequest=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,o,s;return __generator$3(this,function(l){switch(l.label){case 0:return r=this.separateArrayRecursive(ADD_RECORDS_LIMIT,[],t.records),o=r.map(function(f){return{method:"POST",endpointName:"records",payload:{app:t.app,records:f}}}),[4,this.bulkRequestClient.send({requests:o})];case 1:return s=l.sent().results,[2,s.map(function(f){var E=f.ids,d=f.revisions;return E.map(function(h,y){return{id:h,revision:d[y]}})}).reduce(function(f,E){return f.concat(E)},[])]}})})},e.prototype.updateAllRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){return __generator$3(this,function(r){return[2,this.updateAllRecordsRecursive(t,t.records.length,[])]})})},e.prototype.updateAllRecordsRecursive=function(t,r,o){return __awaiter$3(this,void 0,void 0,function(){var s,l,f,E,d,h;return __generator$3(this,function(y){switch(y.label){case 0:if(s=this.bulkRequestClient.REQUESTS_LENGTH_LIMIT*UPDATE_RECORDS_LIMIT,l=t.app,f=t.records,E=f.slice(0,s),E.length===0)return[2,{records:o}];y.label=1;case 1:return y.trys.push([1,3,,4]),[4,this.updateAllRecordsWithBulkRequest({app:l,records:E})];case 2:return d=y.sent(),[3,4];case 3:throw h=y.sent(),new error_1$1.KintoneAllRecordsError({records:o},f,r,h,UPDATE_RECORDS_LIMIT);case 4:return[2,this.updateAllRecordsRecursive({app:l,records:f.slice(s)},r,o.concat(d))]}})})},e.prototype.updateAllRecordsWithBulkRequest=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,o,s;return __generator$3(this,function(l){switch(l.label){case 0:return r=this.separateArrayRecursive(UPDATE_RECORDS_LIMIT,[],t.records),o=r.map(function(f){return{method:"PUT",endpointName:"records",payload:{app:t.app,records:f}}}),[4,this.bulkRequestClient.send({requests:o})];case 1:return s=l.sent().results,[2,s.map(function(f){return f.records}).reduce(function(f,E){return f.concat(E)},[])]}})})},e.prototype.deleteAllRecords=function(t){return this.deleteAllRecordsRecursive(t,t.records.length)},e.prototype.deleteAllRecordsRecursive=function(t,r){return __awaiter$3(this,void 0,void 0,function(){var o,s,l,f,E;return __generator$3(this,function(d){switch(d.label){case 0:if(o=this.bulkRequestClient.REQUESTS_LENGTH_LIMIT*DELETE_RECORDS_LIMIT,s=t.app,l=t.records,f=l.slice(0,o),f.length===0)return[2,{}];d.label=1;case 1:return d.trys.push([1,3,,4]),[4,this.deleteAllRecordsWithBulkRequest({app:s,records:f})];case 2:return d.sent(),[3,4];case 3:throw E=d.sent(),new error_1$1.KintoneAllRecordsError({},l,r,E,DELETE_RECORDS_LIMIT);case 4:return[2,this.deleteAllRecordsRecursive({app:s,records:l.slice(o)},r)]}})})},e.prototype.deleteAllRecordsWithBulkRequest=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,o;return __generator$3(this,function(s){switch(s.label){case 0:return r=this.separateArrayRecursive(DELETE_RECORDS_LIMIT,[],t.records),o=r.map(function(l){return{method:"DELETE",endpointName:"records",payload:{app:t.app,ids:l.map(function(f){return f.id}),revisions:l.map(function(f){return f.revision})}}}),[4,this.bulkRequestClient.send({requests:o})];case 1:return s.sent(),[2]}})})},e.prototype.separateArrayRecursive=function(t,r,o){var s=o.slice(0,t);return s.length===0?r:this.separateArrayRecursive(t,__spreadArray(__spreadArray([],r,!0),[s],!1),o.slice(t))},e.prototype.addRecordComment=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/comment"});return this.client.post(r,t)},e.prototype.deleteRecordComment=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/comment"});return this.client.delete(r,t)},e.prototype.getRecordComments=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/comments"});return this.client.get(r,t)},e.prototype.updateRecordAssignees=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/assignees"});return this.client.put(r,t)},e.prototype.updateRecordStatus=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/status"});return this.client.put(r,t)},e.prototype.updateRecordsStatus=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/status"});return this.client.put(r,t)},e}(BaseClient_1$2.BaseClient);RecordClient$1.RecordClient=RecordClient;var SpaceClient$1={},__extends$1=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,o){r.__proto__=o}||function(r,o){for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[s]=o[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(SpaceClient$1,"__esModule",{value:!0});SpaceClient$1.SpaceClient=void 0;var BaseClient_1$1=BaseClient$1,SpaceClient=function(n){__extends$1(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.getSpace=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space"});return this.client.get(r,t)},e.prototype.deleteSpace=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space"});return this.client.delete(r,t)},e.prototype.updateSpaceBody=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/body"});return this.client.put(r,t)},e.prototype.getSpaceMembers=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/members"});return this.client.get(r,t)},e.prototype.updateSpaceMembers=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/members"});return this.client.put(r,t)},e.prototype.updateThread=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/thread"});return this.client.put(r,t)},e.prototype.addThreadComment=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/thread/comment"});return this.client.post(r,t)},e.prototype.addGuests=function(t){var r=this.buildPath({endpointName:"guests"});return this.client.post(r,t)},e.prototype.deleteGuests=function(t){var r=this.buildPath({endpointName:"guests"});return this.client.delete(r,t)},e.prototype.updateSpaceGuests=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/guests"});return this.client.put(r,t)},e.prototype.addSpaceFromTemplate=function(t){var r=this.buildPath({endpointName:"template/space"});return this.client.post(r,t)},e}(BaseClient_1$1.BaseClient);SpaceClient$1.SpaceClient=SpaceClient;var FileClient$1={},browser=typeof self=="object"?self.FormData:window.FormData,__extends=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,o){r.__proto__=o}||function(r,o){for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[s]=o[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),__awaiter$2=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function o(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function f(h){try{d(r.next(h))}catch(y){l(y)}}function E(h){try{d(r.throw(h))}catch(y){l(y)}}function d(h){h.done?s(h.value):o(h.value).then(f,E)}d((r=r.apply(n,e||[])).next())})},__generator$2=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,o,s,l;return l={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function f(d){return function(h){return E([d,h])}}function E(d){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,d[0]&&(t=0)),t;)try{if(r=1,o&&(s=d[0]&2?o.return:d[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,d[1])).done)return s;switch(o=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return t.label++,{value:d[1],done:!1};case 5:t.label++,o=d[1],d=[0];continue;case 7:d=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){t.label=d[1];break}if(d[0]===6&&t.label<s[1]){t.label=s[1],s=d;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(d);break}s[2]&&t.ops.pop(),t.trys.pop();continue}d=e.call(n,t)}catch(h){d=[6,h],o=0}finally{r=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},__importDefault$2=commonjsGlobal&&commonjsGlobal.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(FileClient$1,"__esModule",{value:!0});FileClient$1.FileClient=void 0;var form_data_1$1=__importDefault$2(browser),platform_1$2=platform$2,UnsupportedPlatformError_1$1=UnsupportedPlatformError$1,BaseClient_1=BaseClient$1,FileClient=function(n){__extends(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.uploadFile=function(t){return __awaiter$2(this,void 0,void 0,function(){var r,o,s,l,h,f,E,d,h,y;return __generator$2(this,function(S){switch(S.label){case 0:if(r=this.buildPathWithGuestSpaceId({endpointName:"file"}),o=new form_data_1$1.default,!("path"in t.file))return[3,5];S.label=1;case 1:return S.trys.push([1,3,,4]),[4,platform_1$2.platformDeps.readFileFromPath(t.file.path)];case 2:return s=S.sent(),l=s.name,h=s.data,o.append("file",h,l),[3,4];case 3:throw f=S.sent(),f instanceof UnsupportedPlatformError_1$1.UnsupportedPlatformError?new Error("uploadFile doesn't allow to accept a file path in ".concat(f.platform," environment.")):f;case 4:return[3,6];case 5:E=t.file,d=E.name,h=E.data,y=platform_1$2.platformDeps.buildFormDataValue(h,d),o.append("file",y,d),S.label=6;case 6:return[2,this.client.postData(r,o)]}})})},e.prototype.downloadFile=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"file"});return this.client.getData(r,t)},e}(BaseClient_1.BaseClient);FileClient$1.FileClient=FileClient;var http={},AxiosClient$1={};function bind$2(n,e){return function(){return n.apply(e,arguments)}}const{toString}=Object.prototype,{getPrototypeOf}=Object,kindOf=(n=>e=>{const t=toString.call(e);return n[t]||(n[t]=t.slice(8,-1).toLowerCase())})(Object.create(null)),kindOfTest=n=>(n=n.toLowerCase(),e=>kindOf(e)===n),typeOfTest=n=>e=>typeof e===n,{isArray:isArray$4}=Array,isUndefined=typeOfTest("undefined");function isBuffer$1(n){return n!==null&&!isUndefined(n)&&n.constructor!==null&&!isUndefined(n.constructor)&&isFunction(n.constructor.isBuffer)&&n.constructor.isBuffer(n)}const isArrayBuffer=kindOfTest("ArrayBuffer");function isArrayBufferView(n){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(n):e=n&&n.buffer&&isArrayBuffer(n.buffer),e}const isString$1=typeOfTest("string"),isFunction=typeOfTest("function"),isNumber$1=typeOfTest("number"),isObject=n=>n!==null&&typeof n=="object",isBoolean$1=n=>n===!0||n===!1,isPlainObject=n=>{if(kindOf(n)!=="object")return!1;const e=getPrototypeOf(n);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in n)&&!(Symbol.iterator in n)},isDate$1=kindOfTest("Date"),isFile=kindOfTest("File"),isBlob=kindOfTest("Blob"),isFileList=kindOfTest("FileList"),isStream=n=>isObject(n)&&isFunction(n.pipe),isFormData=n=>{let e;return n&&(typeof FormData=="function"&&n instanceof FormData||isFunction(n.append)&&((e=kindOf(n))==="formdata"||e==="object"&&isFunction(n.toString)&&n.toString()==="[object FormData]"))},isURLSearchParams=kindOfTest("URLSearchParams"),[isReadableStream,isRequest,isResponse,isHeaders]=["ReadableStream","Request","Response","Headers"].map(kindOfTest),trim=n=>n.trim?n.trim():n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function forEach(n,e,{allOwnKeys:t=!1}={}){if(n===null||typeof n>"u")return;let r,o;if(typeof n!="object"&&(n=[n]),isArray$4(n))for(r=0,o=n.length;r<o;r++)e.call(null,n[r],r,n);else{const s=t?Object.getOwnPropertyNames(n):Object.keys(n),l=s.length;let f;for(r=0;r<l;r++)f=s[r],e.call(null,n[f],f,n)}}function findKey(n,e){e=e.toLowerCase();const t=Object.keys(n);let r=t.length,o;for(;r-- >0;)if(o=t[r],e===o.toLowerCase())return o;return null}const _global=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:commonjsGlobal)(),isContextDefined=n=>!isUndefined(n)&&n!==_global;function merge$1(){const{caseless:n}=isContextDefined(this)&&this||{},e={},t=(r,o)=>{const s=n&&findKey(e,o)||o;isPlainObject(e[s])&&isPlainObject(r)?e[s]=merge$1(e[s],r):isPlainObject(r)?e[s]=merge$1({},r):isArray$4(r)?e[s]=r.slice():e[s]=r};for(let r=0,o=arguments.length;r<o;r++)arguments[r]&&forEach(arguments[r],t);return e}const extend=(n,e,t,{allOwnKeys:r}={})=>(forEach(e,(o,s)=>{t&&isFunction(o)?n[s]=bind$2(o,t):n[s]=o},{allOwnKeys:r}),n),stripBOM=n=>(n.charCodeAt(0)===65279&&(n=n.slice(1)),n),inherits=(n,e,t,r)=>{n.prototype=Object.create(e.prototype,r),n.prototype.constructor=n,Object.defineProperty(n,"super",{value:e.prototype}),t&&Object.assign(n.prototype,t)},toFlatObject=(n,e,t,r)=>{let o,s,l;const f={};if(e=e||{},n==null)return e;do{for(o=Object.getOwnPropertyNames(n),s=o.length;s-- >0;)l=o[s],(!r||r(l,n,e))&&!f[l]&&(e[l]=n[l],f[l]=!0);n=t!==!1&&getPrototypeOf(n)}while(n&&(!t||t(n,e))&&n!==Object.prototype);return e},endsWith=(n,e,t)=>{n=String(n),(t===void 0||t>n.length)&&(t=n.length),t-=e.length;const r=n.indexOf(e,t);return r!==-1&&r===t},toArray=n=>{if(!n)return null;if(isArray$4(n))return n;let e=n.length;if(!isNumber$1(e))return null;const t=new Array(e);for(;e-- >0;)t[e]=n[e];return t},isTypedArray=(n=>e=>n&&e instanceof n)(typeof Uint8Array<"u"&&getPrototypeOf(Uint8Array)),forEachEntry=(n,e)=>{const r=(n&&n[Symbol.iterator]).call(n);let o;for(;(o=r.next())&&!o.done;){const s=o.value;e.call(n,s[0],s[1])}},matchAll=(n,e)=>{let t;const r=[];for(;(t=n.exec(e))!==null;)r.push(t);return r},isHTMLForm=kindOfTest("HTMLFormElement"),toCamelCase=n=>n.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(t,r,o){return r.toUpperCase()+o}),hasOwnProperty=(({hasOwnProperty:n})=>(e,t)=>n.call(e,t))(Object.prototype),isRegExp$2=kindOfTest("RegExp"),reduceDescriptors=(n,e)=>{const t=Object.getOwnPropertyDescriptors(n),r={};forEach(t,(o,s)=>{let l;(l=e(o,s,n))!==!1&&(r[s]=l||o)}),Object.defineProperties(n,r)},freezeMethods=n=>{reduceDescriptors(n,(e,t)=>{if(isFunction(n)&&["arguments","caller","callee"].indexOf(t)!==-1)return!1;const r=n[t];if(isFunction(r)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+t+"'")})}})},toObjectSet=(n,e)=>{const t={},r=o=>{o.forEach(s=>{t[s]=!0})};return isArray$4(n)?r(n):r(String(n).split(e)),t},noop$1=()=>{},toFiniteNumber=(n,e)=>n!=null&&Number.isFinite(n=+n)?n:e,ALPHA="abcdefghijklmnopqrstuvwxyz",DIGIT="0123456789",ALPHABET={DIGIT,ALPHA,ALPHA_DIGIT:ALPHA+ALPHA.toUpperCase()+DIGIT},generateString=(n=16,e=ALPHABET.ALPHA_DIGIT)=>{let t="";const{length:r}=e;for(;n--;)t+=e[Math.random()*r|0];return t};function isSpecCompliantForm(n){return!!(n&&isFunction(n.append)&&n[Symbol.toStringTag]==="FormData"&&n[Symbol.iterator])}const toJSONObject=n=>{const e=new Array(10),t=(r,o)=>{if(isObject(r)){if(e.indexOf(r)>=0)return;if(!("toJSON"in r)){e[o]=r;const s=isArray$4(r)?[]:{};return forEach(r,(l,f)=>{const E=t(l,o+1);!isUndefined(E)&&(s[f]=E)}),e[o]=void 0,s}}return r};return t(n,0)},isAsyncFn=kindOfTest("AsyncFunction"),isThenable=n=>n&&(isObject(n)||isFunction(n))&&isFunction(n.then)&&isFunction(n.catch);var utils$1$1={isArray:isArray$4,isArrayBuffer,isBuffer:isBuffer$1,isFormData,isArrayBufferView,isString:isString$1,isNumber:isNumber$1,isBoolean:isBoolean$1,isObject,isPlainObject,isReadableStream,isRequest,isResponse,isHeaders,isUndefined,isDate:isDate$1,isFile,isBlob,isRegExp:isRegExp$2,isFunction,isStream,isURLSearchParams,isTypedArray,isFileList,forEach,merge:merge$1,extend,trim,stripBOM,inherits,toFlatObject,kindOf,kindOfTest,endsWith,toArray,forEachEntry,matchAll,isHTMLForm,hasOwnProperty,hasOwnProp:hasOwnProperty,reduceDescriptors,freezeMethods,toObjectSet,toCamelCase,noop:noop$1,toFiniteNumber,findKey,global:_global,isContextDefined,ALPHABET,generateString,isSpecCompliantForm,toJSONObject,isAsyncFn,isThenable};function AxiosError(n,e,t,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=n,this.name="AxiosError",e&&(this.code=e),t&&(this.config=t),r&&(this.request=r),o&&(this.response=o)}utils$1$1.inherits(AxiosError,Error,{toJSON:function n(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:utils$1$1.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const prototype$1=AxiosError.prototype,descriptors={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(n=>{descriptors[n]={value:n}});Object.defineProperties(AxiosError,descriptors);Object.defineProperty(prototype$1,"isAxiosError",{value:!0});AxiosError.from=(n,e,t,r,o,s)=>{const l=Object.create(prototype$1);return utils$1$1.toFlatObject(n,l,function(E){return E!==Error.prototype},f=>f!=="isAxiosError"),AxiosError.call(l,n.message,e,t,r,o),l.cause=n,l.name=n.name,s&&Object.assign(l,s),l};var httpAdapter=null;function isVisitable(n){return utils$1$1.isPlainObject(n)||utils$1$1.isArray(n)}function removeBrackets(n){return utils$1$1.endsWith(n,"[]")?n.slice(0,-2):n}function renderKey(n,e,t){return n?n.concat(e).map(function(o,s){return o=removeBrackets(o),!t&&s?"["+o+"]":o}).join(t?".":""):e}function isFlatArray(n){return utils$1$1.isArray(n)&&!n.some(isVisitable)}const predicates=utils$1$1.toFlatObject(utils$1$1,{},null,function n(e){return/^is[A-Z]/.test(e)});function toFormData(n,e,t){if(!utils$1$1.isObject(n))throw new TypeError("target must be an object");e=e||new FormData,t=utils$1$1.toFlatObject(t,{metaTokens:!0,dots:!1,indexes:!1},!1,function(x,H){return!utils$1$1.isUndefined(H[x])});const r=t.metaTokens,o=t.visitor||h,s=t.dots,l=t.indexes,E=(t.Blob||typeof Blob<"u"&&Blob)&&utils$1$1.isSpecCompliantForm(e);if(!utils$1$1.isFunction(o))throw new TypeError("visitor must be a function");function d(w){if(w===null)return"";if(utils$1$1.isDate(w))return w.toISOString();if(!E&&utils$1$1.isBlob(w))throw new AxiosError("Blob is not supported. Use a Buffer instead.");return utils$1$1.isArrayBuffer(w)||utils$1$1.isTypedArray(w)?E&&typeof Blob=="function"?new Blob([w]):Buffer.from(w):w}function h(w,x,H){let D=w;if(w&&!H&&typeof w=="object"){if(utils$1$1.endsWith(x,"{}"))x=r?x:x.slice(0,-2),w=JSON.stringify(w);else if(utils$1$1.isArray(w)&&isFlatArray(w)||(utils$1$1.isFileList(w)||utils$1$1.endsWith(x,"[]"))&&(D=utils$1$1.toArray(w)))return x=removeBrackets(x),D.forEach(function(V,Y){!(utils$1$1.isUndefined(V)||V===null)&&e.append(l===!0?renderKey([x],Y,s):l===null?x:x+"[]",d(V))}),!1}return isVisitable(w)?!0:(e.append(renderKey(H,x,s),d(w)),!1)}const y=[],S=Object.assign(predicates,{defaultVisitor:h,convertValue:d,isVisitable});function O(w,x){if(!utils$1$1.isUndefined(w)){if(y.indexOf(w)!==-1)throw Error("Circular reference detected in "+x.join("."));y.push(w),utils$1$1.forEach(w,function(D,Z){(!(utils$1$1.isUndefined(D)||D===null)&&o.call(e,D,utils$1$1.isString(Z)?Z.trim():Z,x,S))===!0&&O(D,x?x.concat(Z):[Z])}),y.pop()}}if(!utils$1$1.isObject(n))throw new TypeError("data must be an object");return O(n),e}function encode$1(n){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(n).replace(/[!'()~]|%20|%00/g,function(r){return e[r]})}function AxiosURLSearchParams(n,e){this._pairs=[],n&&toFormData(n,this,e)}const prototype=AxiosURLSearchParams.prototype;prototype.append=function n(e,t){this._pairs.push([e,t])};prototype.toString=function n(e){const t=e?function(r){return e.call(this,r,encode$1)}:encode$1;return this._pairs.map(function(o){return t(o[0])+"="+t(o[1])},"").join("&")};function encode$2(n){return encodeURIComponent(n).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function buildURL(n,e,t){if(!e)return n;const r=t&&t.encode||encode$2,o=t&&t.serialize;let s;if(o?s=o(e,t):s=utils$1$1.isURLSearchParams(e)?e.toString():new AxiosURLSearchParams(e,t).toString(r),s){const l=n.indexOf("#");l!==-1&&(n=n.slice(0,l)),n+=(n.indexOf("?")===-1?"?":"&")+s}return n}class InterceptorManager{constructor(){this.handlers=[]}use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){utils$1$1.forEach(this.handlers,function(r){r!==null&&e(r)})}}var InterceptorManager$1=InterceptorManager,transitionalDefaults={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},URLSearchParams$1=typeof URLSearchParams<"u"?URLSearchParams:AxiosURLSearchParams,FormData$1=typeof FormData<"u"?FormData:null,Blob$1=typeof Blob<"u"?Blob:null,platform$1={isBrowser:!0,classes:{URLSearchParams:URLSearchParams$1,FormData:FormData$1,Blob:Blob$1},protocols:["http","https","file","blob","url","data"]};const hasBrowserEnv=typeof window<"u"&&typeof document<"u",hasStandardBrowserEnv=(n=>hasBrowserEnv&&["ReactNative","NativeScript","NS"].indexOf(n)<0)(typeof navigator<"u"&&navigator.product),hasStandardBrowserWebWorkerEnv=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),origin=hasBrowserEnv&&window.location.href||"http://localhost";var utils$3=Object.freeze({__proto__:null,hasBrowserEnv,hasStandardBrowserWebWorkerEnv,hasStandardBrowserEnv,origin}),platform={...utils$3,...platform$1};function toURLEncodedForm(n,e){return toFormData(n,new platform.classes.URLSearchParams,Object.assign({visitor:function(t,r,o,s){return platform.isNode&&utils$1$1.isBuffer(t)?(this.append(r,t.toString("base64")),!1):s.defaultVisitor.apply(this,arguments)}},e))}function parsePropPath(n){return utils$1$1.matchAll(/\w+|\[(\w*)]/g,n).map(e=>e[0]==="[]"?"":e[1]||e[0])}function arrayToObject$1(n){const e={},t=Object.keys(n);let r;const o=t.length;let s;for(r=0;r<o;r++)s=t[r],e[s]=n[s];return e}function formDataToJSON(n){function e(t,r,o,s){let l=t[s++];if(l==="__proto__")return!0;const f=Number.isFinite(+l),E=s>=t.length;return l=!l&&utils$1$1.isArray(o)?o.length:l,E?(utils$1$1.hasOwnProp(o,l)?o[l]=[o[l],r]:o[l]=r,!f):((!o[l]||!utils$1$1.isObject(o[l]))&&(o[l]=[]),e(t,r,o[l],s)&&utils$1$1.isArray(o[l])&&(o[l]=arrayToObject$1(o[l])),!f)}if(utils$1$1.isFormData(n)&&utils$1$1.isFunction(n.entries)){const t={};return utils$1$1.forEachEntry(n,(r,o)=>{e(parsePropPath(r),o,t,0)}),t}return null}function stringifySafely(n,e,t){if(utils$1$1.isString(n))try{return(e||JSON.parse)(n),utils$1$1.trim(n)}catch(r){if(r.name!=="SyntaxError")throw r}return(t||JSON.stringify)(n)}const defaults$2={transitional:transitionalDefaults,adapter:["xhr","http","fetch"],transformRequest:[function n(e,t){const r=t.getContentType()||"",o=r.indexOf("application/json")>-1,s=utils$1$1.isObject(e);if(s&&utils$1$1.isHTMLForm(e)&&(e=new FormData(e)),utils$1$1.isFormData(e))return o?JSON.stringify(formDataToJSON(e)):e;if(utils$1$1.isArrayBuffer(e)||utils$1$1.isBuffer(e)||utils$1$1.isStream(e)||utils$1$1.isFile(e)||utils$1$1.isBlob(e)||utils$1$1.isReadableStream(e))return e;if(utils$1$1.isArrayBufferView(e))return e.buffer;if(utils$1$1.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let f;if(s){if(r.indexOf("application/x-www-form-urlencoded")>-1)return toURLEncodedForm(e,this.formSerializer).toString();if((f=utils$1$1.isFileList(e))||r.indexOf("multipart/form-data")>-1){const E=this.env&&this.env.FormData;return toFormData(f?{"files[]":e}:e,E&&new E,this.formSerializer)}}return s||o?(t.setContentType("application/json",!1),stringifySafely(e)):e}],transformResponse:[function n(e){const t=this.transitional||defaults$2.transitional,r=t&&t.forcedJSONParsing,o=this.responseType==="json";if(utils$1$1.isResponse(e)||utils$1$1.isReadableStream(e))return e;if(e&&utils$1$1.isString(e)&&(r&&!this.responseType||o)){const l=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e)}catch(f){if(l)throw f.name==="SyntaxError"?AxiosError.from(f,AxiosError.ERR_BAD_RESPONSE,this,null,this.response):f}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:platform.classes.FormData,Blob:platform.classes.Blob},validateStatus:function n(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};utils$1$1.forEach(["delete","get","head","post","put","patch"],n=>{defaults$2.headers[n]={}});var defaults$1$1=defaults$2;const ignoreDuplicateOf=utils$1$1.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);var parseHeaders=n=>{const e={};let t,r,o;return n&&n.split(`
|
||
`).forEach(function(l){o=l.indexOf(":"),t=l.substring(0,o).trim().toLowerCase(),r=l.substring(o+1).trim(),!(!t||e[t]&&ignoreDuplicateOf[t])&&(t==="set-cookie"?e[t]?e[t].push(r):e[t]=[r]:e[t]=e[t]?e[t]+", "+r:r)}),e};const $internals=Symbol("internals");function normalizeHeader(n){return n&&String(n).trim().toLowerCase()}function normalizeValue(n){return n===!1||n==null?n:utils$1$1.isArray(n)?n.map(normalizeValue):String(n)}function parseTokens(n){const e=Object.create(null),t=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=t.exec(n);)e[r[1]]=r[2];return e}const isValidHeaderName=n=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(n.trim());function matchHeaderValue(n,e,t,r,o){if(utils$1$1.isFunction(r))return r.call(this,e,t);if(o&&(e=t),!!utils$1$1.isString(e)){if(utils$1$1.isString(r))return e.indexOf(r)!==-1;if(utils$1$1.isRegExp(r))return r.test(e)}}function formatHeader(n){return n.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,r)=>t.toUpperCase()+r)}function buildAccessors(n,e){const t=utils$1$1.toCamelCase(" "+e);["get","set","has"].forEach(r=>{Object.defineProperty(n,r+t,{value:function(o,s,l){return this[r].call(this,e,o,s,l)},configurable:!0})})}class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,t,r){const o=this;function s(f,E,d){const h=normalizeHeader(E);if(!h)throw new Error("header name must be a non-empty string");const y=utils$1$1.findKey(o,h);(!y||o[y]===void 0||d===!0||d===void 0&&o[y]!==!1)&&(o[y||E]=normalizeValue(f))}const l=(f,E)=>utils$1$1.forEach(f,(d,h)=>s(d,h,E));if(utils$1$1.isPlainObject(e)||e instanceof this.constructor)l(e,t);else if(utils$1$1.isString(e)&&(e=e.trim())&&!isValidHeaderName(e))l(parseHeaders(e),t);else if(utils$1$1.isHeaders(e))for(const[f,E]of e.entries())s(E,f,r);else e!=null&&s(t,e,r);return this}get(e,t){if(e=normalizeHeader(e),e){const r=utils$1$1.findKey(this,e);if(r){const o=this[r];if(!t)return o;if(t===!0)return parseTokens(o);if(utils$1$1.isFunction(t))return t.call(this,o,r);if(utils$1$1.isRegExp(t))return t.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=normalizeHeader(e),e){const r=utils$1$1.findKey(this,e);return!!(r&&this[r]!==void 0&&(!t||matchHeaderValue(this,this[r],r,t)))}return!1}delete(e,t){const r=this;let o=!1;function s(l){if(l=normalizeHeader(l),l){const f=utils$1$1.findKey(r,l);f&&(!t||matchHeaderValue(r,r[f],f,t))&&(delete r[f],o=!0)}}return utils$1$1.isArray(e)?e.forEach(s):s(e),o}clear(e){const t=Object.keys(this);let r=t.length,o=!1;for(;r--;){const s=t[r];(!e||matchHeaderValue(this,this[s],s,e,!0))&&(delete this[s],o=!0)}return o}normalize(e){const t=this,r={};return utils$1$1.forEach(this,(o,s)=>{const l=utils$1$1.findKey(r,s);if(l){t[l]=normalizeValue(o),delete t[s];return}const f=e?formatHeader(s):String(s).trim();f!==s&&delete t[s],t[f]=normalizeValue(o),r[f]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return utils$1$1.forEach(this,(r,o)=>{r!=null&&r!==!1&&(t[o]=e&&utils$1$1.isArray(r)?r.join(", "):r)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join(`
|
||
`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach(o=>r.set(o)),r}static accessor(e){const r=(this[$internals]=this[$internals]={accessors:{}}).accessors,o=this.prototype;function s(l){const f=normalizeHeader(l);r[f]||(buildAccessors(o,l),r[f]=!0)}return utils$1$1.isArray(e)?e.forEach(s):s(e),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);utils$1$1.reduceDescriptors(AxiosHeaders.prototype,({value:n},e)=>{let t=e[0].toUpperCase()+e.slice(1);return{get:()=>n,set(r){this[t]=r}}});utils$1$1.freezeMethods(AxiosHeaders);var AxiosHeaders$1=AxiosHeaders;function transformData(n,e){const t=this||defaults$1$1,r=e||t,o=AxiosHeaders$1.from(r.headers);let s=r.data;return utils$1$1.forEach(n,function(f){s=f.call(t,s,o.normalize(),e?e.status:void 0)}),o.normalize(),s}function isCancel(n){return!!(n&&n.__CANCEL__)}function CanceledError(n,e,t){AxiosError.call(this,n??"canceled",AxiosError.ERR_CANCELED,e,t),this.name="CanceledError"}utils$1$1.inherits(CanceledError,AxiosError,{__CANCEL__:!0});function settle(n,e,t){const r=t.config.validateStatus;!t.status||!r||r(t.status)?n(t):e(new AxiosError("Request failed with status code "+t.status,[AxiosError.ERR_BAD_REQUEST,AxiosError.ERR_BAD_RESPONSE][Math.floor(t.status/100)-4],t.config,t.request,t))}function parseProtocol(n){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(n);return e&&e[1]||""}function speedometer(n,e){n=n||10;const t=new Array(n),r=new Array(n);let o=0,s=0,l;return e=e!==void 0?e:1e3,function(E){const d=Date.now(),h=r[s];l||(l=d),t[o]=E,r[o]=d;let y=s,S=0;for(;y!==o;)S+=t[y++],y=y%n;if(o=(o+1)%n,o===s&&(s=(s+1)%n),d-l<e)return;const O=h&&d-h;return O?Math.round(S*1e3/O):void 0}}function throttle(n,e){let t=0;const r=1e3/e;let o=null;return function(){const l=this===!0,f=Date.now();if(l||f-t>r)return o&&(clearTimeout(o),o=null),t=f,n.apply(null,arguments);o||(o=setTimeout(()=>(o=null,t=Date.now(),n.apply(null,arguments)),r-(f-t)))}}var progressEventReducer=(n,e,t=3)=>{let r=0;const o=speedometer(50,250);return throttle(s=>{const l=s.loaded,f=s.lengthComputable?s.total:void 0,E=l-r,d=o(E),h=l<=f;r=l;const y={loaded:l,total:f,progress:f?l/f:void 0,bytes:E,rate:d||void 0,estimated:d&&f&&h?(f-l)/d:void 0,event:s,lengthComputable:f!=null};y[e?"download":"upload"]=!0,n(y)},t)},isURLSameOrigin=platform.hasStandardBrowserEnv?function n(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let r;function o(s){let l=s;return e&&(t.setAttribute("href",l),l=t.href),t.setAttribute("href",l),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:t.pathname.charAt(0)==="/"?t.pathname:"/"+t.pathname}}return r=o(window.location.href),function(l){const f=utils$1$1.isString(l)?o(l):l;return f.protocol===r.protocol&&f.host===r.host}}():function n(){return function(){return!0}}(),cookies=platform.hasStandardBrowserEnv?{write(n,e,t,r,o,s){const l=[n+"="+encodeURIComponent(e)];utils$1$1.isNumber(t)&&l.push("expires="+new Date(t).toGMTString()),utils$1$1.isString(r)&&l.push("path="+r),utils$1$1.isString(o)&&l.push("domain="+o),s===!0&&l.push("secure"),document.cookie=l.join("; ")},read(n){const e=document.cookie.match(new RegExp("(^|;\\s*)("+n+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(n){this.write(n,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function isAbsoluteURL(n){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(n)}function combineURLs(n,e){return e?n.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):n}function buildFullPath(n,e){return n&&!isAbsoluteURL(e)?combineURLs(n,e):e}const headersToObject=n=>n instanceof AxiosHeaders$1?{...n}:n;function mergeConfig(n,e){e=e||{};const t={};function r(d,h,y){return utils$1$1.isPlainObject(d)&&utils$1$1.isPlainObject(h)?utils$1$1.merge.call({caseless:y},d,h):utils$1$1.isPlainObject(h)?utils$1$1.merge({},h):utils$1$1.isArray(h)?h.slice():h}function o(d,h,y){if(utils$1$1.isUndefined(h)){if(!utils$1$1.isUndefined(d))return r(void 0,d,y)}else return r(d,h,y)}function s(d,h){if(!utils$1$1.isUndefined(h))return r(void 0,h)}function l(d,h){if(utils$1$1.isUndefined(h)){if(!utils$1$1.isUndefined(d))return r(void 0,d)}else return r(void 0,h)}function f(d,h,y){if(y in e)return r(d,h);if(y in n)return r(void 0,d)}const E={url:s,method:s,data:s,baseURL:l,transformRequest:l,transformResponse:l,paramsSerializer:l,timeout:l,timeoutMessage:l,withCredentials:l,withXSRFToken:l,adapter:l,responseType:l,xsrfCookieName:l,xsrfHeaderName:l,onUploadProgress:l,onDownloadProgress:l,decompress:l,maxContentLength:l,maxBodyLength:l,beforeRedirect:l,transport:l,httpAgent:l,httpsAgent:l,cancelToken:l,socketPath:l,responseEncoding:l,validateStatus:f,headers:(d,h)=>o(headersToObject(d),headersToObject(h),!0)};return utils$1$1.forEach(Object.keys(Object.assign({},n,e)),function(h){const y=E[h]||o,S=y(n[h],e[h],h);utils$1$1.isUndefined(S)&&y!==f||(t[h]=S)}),t}var resolveConfig=n=>{const e=mergeConfig({},n);let{data:t,withXSRFToken:r,xsrfHeaderName:o,xsrfCookieName:s,headers:l,auth:f}=e;e.headers=l=AxiosHeaders$1.from(l),e.url=buildURL(buildFullPath(e.baseURL,e.url),n.params,n.paramsSerializer),f&&l.set("Authorization","Basic "+btoa((f.username||"")+":"+(f.password?unescape(encodeURIComponent(f.password)):"")));let E;if(utils$1$1.isFormData(t)){if(platform.hasStandardBrowserEnv||platform.hasStandardBrowserWebWorkerEnv)l.setContentType(void 0);else if((E=l.getContentType())!==!1){const[d,...h]=E?E.split(";").map(y=>y.trim()).filter(Boolean):[];l.setContentType([d||"multipart/form-data",...h].join("; "))}}if(platform.hasStandardBrowserEnv&&(r&&utils$1$1.isFunction(r)&&(r=r(e)),r||r!==!1&&isURLSameOrigin(e.url))){const d=o&&s&&cookies.read(s);d&&l.set(o,d)}return e};const isXHRAdapterSupported=typeof XMLHttpRequest<"u";var xhrAdapter=isXHRAdapterSupported&&function(n){return new Promise(function(t,r){const o=resolveConfig(n);let s=o.data;const l=AxiosHeaders$1.from(o.headers).normalize();let{responseType:f}=o,E;function d(){o.cancelToken&&o.cancelToken.unsubscribe(E),o.signal&&o.signal.removeEventListener("abort",E)}let h=new XMLHttpRequest;h.open(o.method.toUpperCase(),o.url,!0),h.timeout=o.timeout;function y(){if(!h)return;const O=AxiosHeaders$1.from("getAllResponseHeaders"in h&&h.getAllResponseHeaders()),x={data:!f||f==="text"||f==="json"?h.responseText:h.response,status:h.status,statusText:h.statusText,headers:O,config:n,request:h};settle(function(D){t(D),d()},function(D){r(D),d()},x),h=null}"onloadend"in h?h.onloadend=y:h.onreadystatechange=function(){!h||h.readyState!==4||h.status===0&&!(h.responseURL&&h.responseURL.indexOf("file:")===0)||setTimeout(y)},h.onabort=function(){h&&(r(new AxiosError("Request aborted",AxiosError.ECONNABORTED,o,h)),h=null)},h.onerror=function(){r(new AxiosError("Network Error",AxiosError.ERR_NETWORK,o,h)),h=null},h.ontimeout=function(){let w=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const x=o.transitional||transitionalDefaults;o.timeoutErrorMessage&&(w=o.timeoutErrorMessage),r(new AxiosError(w,x.clarifyTimeoutError?AxiosError.ETIMEDOUT:AxiosError.ECONNABORTED,o,h)),h=null},s===void 0&&l.setContentType(null),"setRequestHeader"in h&&utils$1$1.forEach(l.toJSON(),function(w,x){h.setRequestHeader(x,w)}),utils$1$1.isUndefined(o.withCredentials)||(h.withCredentials=!!o.withCredentials),f&&f!=="json"&&(h.responseType=o.responseType),typeof o.onDownloadProgress=="function"&&h.addEventListener("progress",progressEventReducer(o.onDownloadProgress,!0)),typeof o.onUploadProgress=="function"&&h.upload&&h.upload.addEventListener("progress",progressEventReducer(o.onUploadProgress)),(o.cancelToken||o.signal)&&(E=O=>{h&&(r(!O||O.type?new CanceledError(null,n,h):O),h.abort(),h=null)},o.cancelToken&&o.cancelToken.subscribe(E),o.signal&&(o.signal.aborted?E():o.signal.addEventListener("abort",E)));const S=parseProtocol(o.url);if(S&&platform.protocols.indexOf(S)===-1){r(new AxiosError("Unsupported protocol "+S+":",AxiosError.ERR_BAD_REQUEST,n));return}h.send(s||null)})};const composeSignals=(n,e)=>{let t=new AbortController,r;const o=function(E){if(!r){r=!0,l();const d=E instanceof Error?E:this.reason;t.abort(d instanceof AxiosError?d:new CanceledError(d instanceof Error?d.message:d))}};let s=e&&setTimeout(()=>{o(new AxiosError(`timeout ${e} of ms exceeded`,AxiosError.ETIMEDOUT))},e);const l=()=>{n&&(s&&clearTimeout(s),s=null,n.forEach(E=>{E&&(E.removeEventListener?E.removeEventListener("abort",o):E.unsubscribe(o))}),n=null)};n.forEach(E=>E&&E.addEventListener&&E.addEventListener("abort",o));const{signal:f}=t;return f.unsubscribe=l,[f,()=>{s&&clearTimeout(s),s=null}]};var composeSignals$1=composeSignals;const streamChunk=function*(n,e){let t=n.byteLength;if(!e||t<e){yield n;return}let r=0,o;for(;r<t;)o=r+e,yield n.slice(r,o),r=o},readBytes=async function*(n,e,t){for await(const r of n)yield*streamChunk(ArrayBuffer.isView(r)?r:await t(String(r)),e)},trackStream=(n,e,t,r,o)=>{const s=readBytes(n,e,o);let l=0;return new ReadableStream({type:"bytes",async pull(f){const{done:E,value:d}=await s.next();if(E){f.close(),r();return}let h=d.byteLength;t&&t(l+=h),f.enqueue(new Uint8Array(d))},cancel(f){return r(f),s.return()}},{highWaterMark:2})},fetchProgressDecorator=(n,e)=>{const t=n!=null;return r=>setTimeout(()=>e({lengthComputable:t,total:n,loaded:r}))},isFetchSupported=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",isReadableStreamSupported=isFetchSupported&&typeof ReadableStream=="function",encodeText=isFetchSupported&&(typeof TextEncoder=="function"?(n=>e=>n.encode(e))(new TextEncoder):async n=>new Uint8Array(await new Response(n).arrayBuffer())),supportsRequestStream=isReadableStreamSupported&&(()=>{let n=!1;const e=new Request(platform.origin,{body:new ReadableStream,method:"POST",get duplex(){return n=!0,"half"}}).headers.has("Content-Type");return n&&!e})(),DEFAULT_CHUNK_SIZE=64*1024,supportsResponseStream=isReadableStreamSupported&&!!(()=>{try{return utils$1$1.isReadableStream(new Response("").body)}catch{}})(),resolvers={stream:supportsResponseStream&&(n=>n.body)};isFetchSupported&&(n=>{["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!resolvers[e]&&(resolvers[e]=utils$1$1.isFunction(n[e])?t=>t[e]():(t,r)=>{throw new AxiosError(`Response type '${e}' is not supported`,AxiosError.ERR_NOT_SUPPORT,r)})})})(new Response);const getBodyLength=async n=>{if(n==null)return 0;if(utils$1$1.isBlob(n))return n.size;if(utils$1$1.isSpecCompliantForm(n))return(await new Request(n).arrayBuffer()).byteLength;if(utils$1$1.isArrayBufferView(n))return n.byteLength;if(utils$1$1.isURLSearchParams(n)&&(n=n+""),utils$1$1.isString(n))return(await encodeText(n)).byteLength},resolveBodyLength=async(n,e)=>{const t=utils$1$1.toFiniteNumber(n.getContentLength());return t??getBodyLength(e)};var fetchAdapter=isFetchSupported&&(async n=>{let{url:e,method:t,data:r,signal:o,cancelToken:s,timeout:l,onDownloadProgress:f,onUploadProgress:E,responseType:d,headers:h,withCredentials:y="same-origin",fetchOptions:S}=resolveConfig(n);d=d?(d+"").toLowerCase():"text";let[O,w]=o||s||l?composeSignals$1([o,s],l):[],x,H;const D=()=>{!x&&setTimeout(()=>{O&&O.unsubscribe()}),x=!0};let Z;try{if(E&&supportsRequestStream&&t!=="get"&&t!=="head"&&(Z=await resolveBodyLength(h,r))!==0){let B=new Request(e,{method:"POST",body:r,duplex:"half"}),u;utils$1$1.isFormData(r)&&(u=B.headers.get("content-type"))&&h.setContentType(u),B.body&&(r=trackStream(B.body,DEFAULT_CHUNK_SIZE,fetchProgressDecorator(Z,progressEventReducer(E)),null,encodeText))}utils$1$1.isString(y)||(y=y?"cors":"omit"),H=new Request(e,{...S,signal:O,method:t.toUpperCase(),headers:h.normalize().toJSON(),body:r,duplex:"half",withCredentials:y});let V=await fetch(H);const Y=supportsResponseStream&&(d==="stream"||d==="response");if(supportsResponseStream&&(f||Y)){const B={};["status","statusText","headers"].forEach(X=>{B[X]=V[X]});const u=utils$1$1.toFiniteNumber(V.headers.get("content-length"));V=new Response(trackStream(V.body,DEFAULT_CHUNK_SIZE,f&&fetchProgressDecorator(u,progressEventReducer(f,!0)),Y&&D,encodeText),B)}d=d||"text";let ne=await resolvers[utils$1$1.findKey(resolvers,d)||"text"](V,n);return!Y&&D(),w&&w(),await new Promise((B,u)=>{settle(B,u,{data:ne,headers:AxiosHeaders$1.from(V.headers),status:V.status,statusText:V.statusText,config:n,request:H})})}catch(V){throw D(),V&&V.name==="TypeError"&&/fetch/i.test(V.message)?Object.assign(new AxiosError("Network Error",AxiosError.ERR_NETWORK,n,H),{cause:V.cause||V}):AxiosError.from(V,V&&V.code,n,H)}});const knownAdapters={http:httpAdapter,xhr:xhrAdapter,fetch:fetchAdapter};utils$1$1.forEach(knownAdapters,(n,e)=>{if(n){try{Object.defineProperty(n,"name",{value:e})}catch{}Object.defineProperty(n,"adapterName",{value:e})}});const renderReason=n=>`- ${n}`,isResolvedHandle=n=>utils$1$1.isFunction(n)||n===null||n===!1;var adapters={getAdapter:n=>{n=utils$1$1.isArray(n)?n:[n];const{length:e}=n;let t,r;const o={};for(let s=0;s<e;s++){t=n[s];let l;if(r=t,!isResolvedHandle(t)&&(r=knownAdapters[(l=String(t)).toLowerCase()],r===void 0))throw new AxiosError(`Unknown adapter '${l}'`);if(r)break;o[l||"#"+s]=r}if(!r){const s=Object.entries(o).map(([f,E])=>`adapter ${f} `+(E===!1?"is not supported by the environment":"is not available in the build"));let l=e?s.length>1?`since :
|
||
`+s.map(renderReason).join(`
|
||
`):" "+renderReason(s[0]):"as no adapter specified";throw new AxiosError("There is no suitable adapter to dispatch the request "+l,"ERR_NOT_SUPPORT")}return r},adapters:knownAdapters};function throwIfCancellationRequested(n){if(n.cancelToken&&n.cancelToken.throwIfRequested(),n.signal&&n.signal.aborted)throw new CanceledError(null,n)}function dispatchRequest(n){return throwIfCancellationRequested(n),n.headers=AxiosHeaders$1.from(n.headers),n.data=transformData.call(n,n.transformRequest),["post","put","patch"].indexOf(n.method)!==-1&&n.headers.setContentType("application/x-www-form-urlencoded",!1),adapters.getAdapter(n.adapter||defaults$1$1.adapter)(n).then(function(r){return throwIfCancellationRequested(n),r.data=transformData.call(n,n.transformResponse,r),r.headers=AxiosHeaders$1.from(r.headers),r},function(r){return isCancel(r)||(throwIfCancellationRequested(n),r&&r.response&&(r.response.data=transformData.call(n,n.transformResponse,r.response),r.response.headers=AxiosHeaders$1.from(r.response.headers))),Promise.reject(r)})}const VERSION$1="1.7.2",validators$1={};["object","boolean","number","function","string","symbol"].forEach((n,e)=>{validators$1[n]=function(r){return typeof r===n||"a"+(e<1?"n ":" ")+n}});const deprecatedWarnings={};validators$1.transitional=function n(e,t,r){function o(s,l){return"[Axios v"+VERSION$1+"] Transitional option '"+s+"'"+l+(r?". "+r:"")}return(s,l,f)=>{if(e===!1)throw new AxiosError(o(l," has been removed"+(t?" in "+t:"")),AxiosError.ERR_DEPRECATED);return t&&!deprecatedWarnings[l]&&(deprecatedWarnings[l]=!0,console.warn(o(l," has been deprecated since v"+t+" and will be removed in the near future"))),e?e(s,l,f):!0}};function assertOptions(n,e,t){if(typeof n!="object")throw new AxiosError("options must be an object",AxiosError.ERR_BAD_OPTION_VALUE);const r=Object.keys(n);let o=r.length;for(;o-- >0;){const s=r[o],l=e[s];if(l){const f=n[s],E=f===void 0||l(f,s,n);if(E!==!0)throw new AxiosError("option "+s+" must be "+E,AxiosError.ERR_BAD_OPTION_VALUE);continue}if(t!==!0)throw new AxiosError("Unknown option "+s,AxiosError.ERR_BAD_OPTION)}}var validator={assertOptions,validators:validators$1};const validators=validator.validators;class Axios{constructor(e){this.defaults=e,this.interceptors={request:new InterceptorManager$1,response:new InterceptorManager$1}}async request(e,t){try{return await this._request(e,t)}catch(r){if(r instanceof Error){let o;Error.captureStackTrace?Error.captureStackTrace(o={}):o=new Error;const s=o.stack?o.stack.replace(/^.+\n/,""):"";try{r.stack?s&&!String(r.stack).endsWith(s.replace(/^.+\n.+\n/,""))&&(r.stack+=`
|
||
`+s):r.stack=s}catch{}}throw r}}_request(e,t){typeof e=="string"?(t=t||{},t.url=e):t=e||{},t=mergeConfig(this.defaults,t);const{transitional:r,paramsSerializer:o,headers:s}=t;r!==void 0&&validator.assertOptions(r,{silentJSONParsing:validators.transitional(validators.boolean),forcedJSONParsing:validators.transitional(validators.boolean),clarifyTimeoutError:validators.transitional(validators.boolean)},!1),o!=null&&(utils$1$1.isFunction(o)?t.paramsSerializer={serialize:o}:validator.assertOptions(o,{encode:validators.function,serialize:validators.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let l=s&&utils$1$1.merge(s.common,s[t.method]);s&&utils$1$1.forEach(["delete","get","head","post","put","patch","common"],w=>{delete s[w]}),t.headers=AxiosHeaders$1.concat(l,s);const f=[];let E=!0;this.interceptors.request.forEach(function(x){typeof x.runWhen=="function"&&x.runWhen(t)===!1||(E=E&&x.synchronous,f.unshift(x.fulfilled,x.rejected))});const d=[];this.interceptors.response.forEach(function(x){d.push(x.fulfilled,x.rejected)});let h,y=0,S;if(!E){const w=[dispatchRequest.bind(this),void 0];for(w.unshift.apply(w,f),w.push.apply(w,d),S=w.length,h=Promise.resolve(t);y<S;)h=h.then(w[y++],w[y++]);return h}S=f.length;let O=t;for(y=0;y<S;){const w=f[y++],x=f[y++];try{O=w(O)}catch(H){x.call(this,H);break}}try{h=dispatchRequest.call(this,O)}catch(w){return Promise.reject(w)}for(y=0,S=d.length;y<S;)h=h.then(d[y++],d[y++]);return h}getUri(e){e=mergeConfig(this.defaults,e);const t=buildFullPath(e.baseURL,e.url);return buildURL(t,e.params,e.paramsSerializer)}}utils$1$1.forEach(["delete","get","head","options"],function n(e){Axios.prototype[e]=function(t,r){return this.request(mergeConfig(r||{},{method:e,url:t,data:(r||{}).data}))}});utils$1$1.forEach(["post","put","patch"],function n(e){function t(r){return function(s,l,f){return this.request(mergeConfig(f||{},{method:e,headers:r?{"Content-Type":"multipart/form-data"}:{},url:s,data:l}))}}Axios.prototype[e]=t(),Axios.prototype[e+"Form"]=t(!0)});var Axios$1=Axios;class CancelToken{constructor(e){if(typeof e!="function")throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(s){t=s});const r=this;this.promise.then(o=>{if(!r._listeners)return;let s=r._listeners.length;for(;s-- >0;)r._listeners[s](o);r._listeners=null}),this.promise.then=o=>{let s;const l=new Promise(f=>{r.subscribe(f),s=f}).then(o);return l.cancel=function(){r.unsubscribe(s)},l},e(function(s,l,f){r.reason||(r.reason=new CanceledError(s,l,f),t(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}static source(){let e;return{token:new CancelToken(function(o){e=o}),cancel:e}}}var CancelToken$1=CancelToken;function spread(n){return function(t){return n.apply(null,t)}}function isAxiosError(n){return utils$1$1.isObject(n)&&n.isAxiosError===!0}const HttpStatusCode={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode).forEach(([n,e])=>{HttpStatusCode[e]=n});var HttpStatusCode$1=HttpStatusCode;function createInstance(n){const e=new Axios$1(n),t=bind$2(Axios$1.prototype.request,e);return utils$1$1.extend(t,Axios$1.prototype,e,{allOwnKeys:!0}),utils$1$1.extend(t,e,null,{allOwnKeys:!0}),t.create=function(o){return createInstance(mergeConfig(n,o))},t}const axios=createInstance(defaults$1$1);axios.Axios=Axios$1;axios.CanceledError=CanceledError;axios.CancelToken=CancelToken$1;axios.isCancel=isCancel;axios.VERSION=VERSION$1;axios.toFormData=toFormData;axios.AxiosError=AxiosError;axios.Cancel=axios.CanceledError;axios.all=function n(e){return Promise.all(e)};axios.spread=spread;axios.isAxiosError=isAxiosError;axios.mergeConfig=mergeConfig;axios.AxiosHeaders=AxiosHeaders$1;axios.formToJSON=n=>formDataToJSON(utils$1$1.isHTMLForm(n)?new FormData(n):n);axios.getAdapter=adapters.getAdapter;axios.HttpStatusCode=HttpStatusCode$1;axios.default=axios;var axios_1$1=axios,__assign$3=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$3=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o])}return n},__assign$3.apply(this,arguments)},__awaiter$1=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function o(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function f(h){try{d(r.next(h))}catch(y){l(y)}}function E(h){try{d(r.throw(h))}catch(y){l(y)}}function d(h){h.done?s(h.value):o(h.value).then(f,E)}d((r=r.apply(n,e||[])).next())})},__generator$1=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,o,s,l;return l={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function f(d){return function(h){return E([d,h])}}function E(d){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,d[0]&&(t=0)),t;)try{if(r=1,o&&(s=d[0]&2?o.return:d[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,d[1])).done)return s;switch(o=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return t.label++,{value:d[1],done:!1};case 5:t.label++,o=d[1],d=[0];continue;case 7:d=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){t.label=d[1];break}if(d[0]===6&&t.label<s[1]){t.label=s[1],s=d;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(d);break}s[2]&&t.ops.pop(),t.trys.pop();continue}d=e.call(n,t)}catch(h){d=[6,h],o=0}finally{r=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},__importDefault$1=commonjsGlobal&&commonjsGlobal.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(AxiosClient$1,"__esModule",{value:!0});AxiosClient$1.AxiosClient=void 0;var axios_1=__importDefault$1(axios_1$1),AxiosClient=function(){function n(e){var t=e.responseHandler,r=e.requestConfigBuilder;this.responseHandler=t,this.requestConfigBuilder=r}return n.prototype.get=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(o){switch(o.label){case 0:return[4,this.requestConfigBuilder.build("get",e,t)];case 1:return r=o.sent(),[4,this.sendRequest(r)];case 2:return[2,o.sent()]}})})},n.prototype.getData=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(o){switch(o.label){case 0:return[4,this.requestConfigBuilder.build("get",e,t,{responseType:"arraybuffer"})];case 1:return r=o.sent(),[4,this.sendRequest(r)];case 2:return[2,o.sent()]}})})},n.prototype.post=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(o){switch(o.label){case 0:return[4,this.requestConfigBuilder.build("post",e,t)];case 1:return r=o.sent(),[4,this.sendRequest(r)];case 2:return[2,o.sent()]}})})},n.prototype.postData=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(o){switch(o.label){case 0:return[4,this.requestConfigBuilder.build("post",e,t)];case 1:return r=o.sent(),[4,this.sendRequest(r)];case 2:return[2,o.sent()]}})})},n.prototype.put=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(o){switch(o.label){case 0:return[4,this.requestConfigBuilder.build("put",e,t)];case 1:return r=o.sent(),[4,this.sendRequest(r)];case 2:return[2,o.sent()]}})})},n.prototype.delete=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(o){switch(o.label){case 0:return[4,this.requestConfigBuilder.build("delete",e,t)];case 1:return r=o.sent(),[4,this.sendRequest(r)];case 2:return[2,o.sent()]}})})},n.prototype.sendRequest=function(e){return this.responseHandler.handle((0,axios_1.default)(__assign$3(__assign$3({},e),{maxBodyLength:1/0,maxContentLength:1/0})))},n}();AxiosClient$1.AxiosClient=AxiosClient;(function(n){Object.defineProperty(n,"__esModule",{value:!0}),n.DefaultHttpClient=void 0;var e=AxiosClient$1;Object.defineProperty(n,"DefaultHttpClient",{enumerable:!0,get:function(){return e.AxiosClient}})})(http);var KintoneRequestConfigBuilder$1={},esErrors=Error,_eval=EvalError,range=RangeError,ref=ReferenceError,syntax=SyntaxError,type=TypeError,uri=URIError,shams=function n(){if(typeof Symbol!="function"||typeof Object.getOwnPropertySymbols!="function")return!1;if(typeof Symbol.iterator=="symbol")return!0;var e={},t=Symbol("test"),r=Object(t);if(typeof t=="string"||Object.prototype.toString.call(t)!=="[object Symbol]"||Object.prototype.toString.call(r)!=="[object Symbol]")return!1;var o=42;e[t]=o;for(t in e)return!1;if(typeof Object.keys=="function"&&Object.keys(e).length!==0||typeof Object.getOwnPropertyNames=="function"&&Object.getOwnPropertyNames(e).length!==0)return!1;var s=Object.getOwnPropertySymbols(e);if(s.length!==1||s[0]!==t||!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if(typeof Object.getOwnPropertyDescriptor=="function"){var l=Object.getOwnPropertyDescriptor(e,t);if(l.value!==o||l.enumerable!==!0)return!1}return!0},origSymbol=typeof Symbol<"u"&&Symbol,hasSymbolSham=shams,hasSymbols$1=function n(){return typeof origSymbol!="function"||typeof Symbol!="function"||typeof origSymbol("foo")!="symbol"||typeof Symbol("bar")!="symbol"?!1:hasSymbolSham()},test={__proto__:null,foo:{}},$Object=Object,hasProto$1=function n(){return{__proto__:test}.foo===test.foo&&!(test instanceof $Object)},ERROR_MESSAGE="Function.prototype.bind called on incompatible ",toStr$1=Object.prototype.toString,max$1=Math.max,funcType="[object Function]",concatty=function n(e,t){for(var r=[],o=0;o<e.length;o+=1)r[o]=e[o];for(var s=0;s<t.length;s+=1)r[s+e.length]=t[s];return r},slicy=function n(e,t){for(var r=[],o=t||0,s=0;o<e.length;o+=1,s+=1)r[s]=e[o];return r},joiny=function(n,e){for(var t="",r=0;r<n.length;r+=1)t+=n[r],r+1<n.length&&(t+=e);return t},implementation$1=function n(e){var t=this;if(typeof t!="function"||toStr$1.apply(t)!==funcType)throw new TypeError(ERROR_MESSAGE+t);for(var r=slicy(arguments,1),o,s=function(){if(this instanceof o){var h=t.apply(this,concatty(r,arguments));return Object(h)===h?h:this}return t.apply(e,concatty(r,arguments))},l=max$1(0,t.length-r.length),f=[],E=0;E<l;E++)f[E]="$"+E;if(o=Function("binder","return function ("+joiny(f,",")+"){ return binder.apply(this,arguments); }")(s),t.prototype){var d=function(){};d.prototype=t.prototype,o.prototype=new d,d.prototype=null}return o},implementation=implementation$1,functionBind=Function.prototype.bind||implementation,call=Function.prototype.call,$hasOwn=Object.prototype.hasOwnProperty,bind$1=functionBind,hasown=bind$1.call(call,$hasOwn),undefined$1,$Error=esErrors,$EvalError=_eval,$RangeError=range,$ReferenceError=ref,$SyntaxError$1=syntax,$TypeError$3=type,$URIError=uri,$Function=Function,getEvalledConstructor=function(n){try{return $Function('"use strict"; return ('+n+").constructor;")()}catch{}},$gOPD$1=Object.getOwnPropertyDescriptor;if($gOPD$1)try{$gOPD$1({},"")}catch{$gOPD$1=null}var throwTypeError=function(){throw new $TypeError$3},ThrowTypeError=$gOPD$1?function(){try{return arguments.callee,throwTypeError}catch{try{return $gOPD$1(arguments,"callee").get}catch{return throwTypeError}}}():throwTypeError,hasSymbols=hasSymbols$1(),hasProto=hasProto$1(),getProto=Object.getPrototypeOf||(hasProto?function(n){return n.__proto__}:null),needsEval={},TypedArray=typeof Uint8Array>"u"||!getProto?undefined$1:getProto(Uint8Array),INTRINSICS={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?undefined$1:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?undefined$1:ArrayBuffer,"%ArrayIteratorPrototype%":hasSymbols&&getProto?getProto([][Symbol.iterator]()):undefined$1,"%AsyncFromSyncIteratorPrototype%":undefined$1,"%AsyncFunction%":needsEval,"%AsyncGenerator%":needsEval,"%AsyncGeneratorFunction%":needsEval,"%AsyncIteratorPrototype%":needsEval,"%Atomics%":typeof Atomics>"u"?undefined$1:Atomics,"%BigInt%":typeof BigInt>"u"?undefined$1:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?undefined$1:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?undefined$1:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?undefined$1:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":$Error,"%eval%":eval,"%EvalError%":$EvalError,"%Float32Array%":typeof Float32Array>"u"?undefined$1:Float32Array,"%Float64Array%":typeof Float64Array>"u"?undefined$1:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?undefined$1:FinalizationRegistry,"%Function%":$Function,"%GeneratorFunction%":needsEval,"%Int8Array%":typeof Int8Array>"u"?undefined$1:Int8Array,"%Int16Array%":typeof Int16Array>"u"?undefined$1:Int16Array,"%Int32Array%":typeof Int32Array>"u"?undefined$1:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":hasSymbols&&getProto?getProto(getProto([][Symbol.iterator]())):undefined$1,"%JSON%":typeof JSON=="object"?JSON:undefined$1,"%Map%":typeof Map>"u"?undefined$1:Map,"%MapIteratorPrototype%":typeof Map>"u"||!hasSymbols||!getProto?undefined$1:getProto(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?undefined$1:Promise,"%Proxy%":typeof Proxy>"u"?undefined$1:Proxy,"%RangeError%":$RangeError,"%ReferenceError%":$ReferenceError,"%Reflect%":typeof Reflect>"u"?undefined$1:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?undefined$1:Set,"%SetIteratorPrototype%":typeof Set>"u"||!hasSymbols||!getProto?undefined$1:getProto(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?undefined$1:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":hasSymbols&&getProto?getProto(""[Symbol.iterator]()):undefined$1,"%Symbol%":hasSymbols?Symbol:undefined$1,"%SyntaxError%":$SyntaxError$1,"%ThrowTypeError%":ThrowTypeError,"%TypedArray%":TypedArray,"%TypeError%":$TypeError$3,"%Uint8Array%":typeof Uint8Array>"u"?undefined$1:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?undefined$1:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?undefined$1:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?undefined$1:Uint32Array,"%URIError%":$URIError,"%WeakMap%":typeof WeakMap>"u"?undefined$1:WeakMap,"%WeakRef%":typeof WeakRef>"u"?undefined$1:WeakRef,"%WeakSet%":typeof WeakSet>"u"?undefined$1:WeakSet};if(getProto)try{null.error}catch(n){var errorProto=getProto(getProto(n));INTRINSICS["%Error.prototype%"]=errorProto}var doEval=function n(e){var t;if(e==="%AsyncFunction%")t=getEvalledConstructor("async function () {}");else if(e==="%GeneratorFunction%")t=getEvalledConstructor("function* () {}");else if(e==="%AsyncGeneratorFunction%")t=getEvalledConstructor("async function* () {}");else if(e==="%AsyncGenerator%"){var r=n("%AsyncGeneratorFunction%");r&&(t=r.prototype)}else if(e==="%AsyncIteratorPrototype%"){var o=n("%AsyncGenerator%");o&&getProto&&(t=getProto(o.prototype))}return INTRINSICS[e]=t,t},LEGACY_ALIASES={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},bind=functionBind,hasOwn$1=hasown,$concat$1=bind.call(Function.call,Array.prototype.concat),$spliceApply=bind.call(Function.apply,Array.prototype.splice),$replace$1=bind.call(Function.call,String.prototype.replace),$strSlice=bind.call(Function.call,String.prototype.slice),$exec=bind.call(Function.call,RegExp.prototype.exec),rePropName=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,reEscapeChar=/\\(\\)?/g,stringToPath=function n(e){var t=$strSlice(e,0,1),r=$strSlice(e,-1);if(t==="%"&&r!=="%")throw new $SyntaxError$1("invalid intrinsic syntax, expected closing `%`");if(r==="%"&&t!=="%")throw new $SyntaxError$1("invalid intrinsic syntax, expected opening `%`");var o=[];return $replace$1(e,rePropName,function(s,l,f,E){o[o.length]=f?$replace$1(E,reEscapeChar,"$1"):l||s}),o},getBaseIntrinsic=function n(e,t){var r=e,o;if(hasOwn$1(LEGACY_ALIASES,r)&&(o=LEGACY_ALIASES[r],r="%"+o[0]+"%"),hasOwn$1(INTRINSICS,r)){var s=INTRINSICS[r];if(s===needsEval&&(s=doEval(r)),typeof s>"u"&&!t)throw new $TypeError$3("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:o,name:r,value:s}}throw new $SyntaxError$1("intrinsic "+e+" does not exist!")},getIntrinsic=function n(e,t){if(typeof e!="string"||e.length===0)throw new $TypeError$3("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof t!="boolean")throw new $TypeError$3('"allowMissing" argument must be a boolean');if($exec(/^%?[^%]*%?$/,e)===null)throw new $SyntaxError$1("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=stringToPath(e),o=r.length>0?r[0]:"",s=getBaseIntrinsic("%"+o+"%",t),l=s.name,f=s.value,E=!1,d=s.alias;d&&(o=d[0],$spliceApply(r,$concat$1([0,1],d)));for(var h=1,y=!0;h<r.length;h+=1){var S=r[h],O=$strSlice(S,0,1),w=$strSlice(S,-1);if((O==='"'||O==="'"||O==="`"||w==='"'||w==="'"||w==="`")&&O!==w)throw new $SyntaxError$1("property names with quotes must have matching quotes");if((S==="constructor"||!y)&&(E=!0),o+="."+S,l="%"+o+"%",hasOwn$1(INTRINSICS,l))f=INTRINSICS[l];else if(f!=null){if(!(S in f)){if(!t)throw new $TypeError$3("base intrinsic for "+e+" exists, but the property is not available.");return}if($gOPD$1&&h+1>=r.length){var x=$gOPD$1(f,S);y=!!x,y&&"get"in x&&!("originalValue"in x.get)?f=x.get:f=f[S]}else y=hasOwn$1(f,S),f=f[S];y&&!E&&(INTRINSICS[l]=f)}}return f},callBind$1={exports:{}},esDefineProperty,hasRequiredEsDefineProperty;function requireEsDefineProperty(){if(hasRequiredEsDefineProperty)return esDefineProperty;hasRequiredEsDefineProperty=1;var n=getIntrinsic,e=n("%Object.defineProperty%",!0)||!1;if(e)try{e({},"a",{value:1})}catch{e=!1}return esDefineProperty=e,esDefineProperty}var GetIntrinsic$3=getIntrinsic,$gOPD=GetIntrinsic$3("%Object.getOwnPropertyDescriptor%",!0);if($gOPD)try{$gOPD([],"length")}catch{$gOPD=null}var gopd$1=$gOPD,$defineProperty$1=requireEsDefineProperty(),$SyntaxError=syntax,$TypeError$2=type,gopd=gopd$1,defineDataProperty=function n(e,t,r){if(!e||typeof e!="object"&&typeof e!="function")throw new $TypeError$2("`obj` must be an object or a function`");if(typeof t!="string"&&typeof t!="symbol")throw new $TypeError$2("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new $TypeError$2("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new $TypeError$2("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new $TypeError$2("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new $TypeError$2("`loose`, if provided, must be a boolean");var o=arguments.length>3?arguments[3]:null,s=arguments.length>4?arguments[4]:null,l=arguments.length>5?arguments[5]:null,f=arguments.length>6?arguments[6]:!1,E=!!gopd&&gopd(e,t);if($defineProperty$1)$defineProperty$1(e,t,{configurable:l===null&&E?E.configurable:!l,enumerable:o===null&&E?E.enumerable:!o,value:r,writable:s===null&&E?E.writable:!s});else if(f||!o&&!s&&!l)e[t]=r;else throw new $SyntaxError("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")},$defineProperty=requireEsDefineProperty(),hasPropertyDescriptors=function n(){return!!$defineProperty};hasPropertyDescriptors.hasArrayLengthDefineBug=function n(){if(!$defineProperty)return null;try{return $defineProperty([],"length",{value:1}).length!==1}catch{return!0}};var hasPropertyDescriptors_1=hasPropertyDescriptors,GetIntrinsic$2=getIntrinsic,define=defineDataProperty,hasDescriptors=hasPropertyDescriptors_1(),gOPD=gopd$1,$TypeError$1=type,$floor$1=GetIntrinsic$2("%Math.floor%"),setFunctionLength=function n(e,t){if(typeof e!="function")throw new $TypeError$1("`fn` is not a function");if(typeof t!="number"||t<0||t>4294967295||$floor$1(t)!==t)throw new $TypeError$1("`length` must be a positive 32-bit integer");var r=arguments.length>2&&!!arguments[2],o=!0,s=!0;if("length"in e&&gOPD){var l=gOPD(e,"length");l&&!l.configurable&&(o=!1),l&&!l.writable&&(s=!1)}return(o||s||!r)&&(hasDescriptors?define(e,"length",t,!0,!0):define(e,"length",t)),e};(function(n){var e=functionBind,t=getIntrinsic,r=setFunctionLength,o=type,s=t("%Function.prototype.apply%"),l=t("%Function.prototype.call%"),f=t("%Reflect.apply%",!0)||e.call(l,s),E=requireEsDefineProperty(),d=t("%Math.max%");n.exports=function(S){if(typeof S!="function")throw new o("a function is required");var O=f(e,l,arguments);return r(O,1+d(0,S.length-(arguments.length-1)),!0)};var h=function(){return f(e,s,arguments)};E?E(n.exports,"apply",{value:h}):n.exports.apply=h})(callBind$1);var callBindExports=callBind$1.exports,GetIntrinsic$1=getIntrinsic,callBind=callBindExports,$indexOf=callBind(GetIntrinsic$1("String.prototype.indexOf")),callBound$1=function n(e,t){var r=GetIntrinsic$1(e,!!t);return typeof r=="function"&&$indexOf(e,".prototype.")>-1?callBind(r):r};const __viteBrowserExternal={},__viteBrowserExternal$1=Object.freeze(Object.defineProperty({__proto__:null,default:__viteBrowserExternal},Symbol.toStringTag,{value:"Module"})),require$$0=getAugmentedNamespace(__viteBrowserExternal$1);var hasMap=typeof Map=="function"&&Map.prototype,mapSizeDescriptor=Object.getOwnPropertyDescriptor&&hasMap?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,mapSize=hasMap&&mapSizeDescriptor&&typeof mapSizeDescriptor.get=="function"?mapSizeDescriptor.get:null,mapForEach=hasMap&&Map.prototype.forEach,hasSet=typeof Set=="function"&&Set.prototype,setSizeDescriptor=Object.getOwnPropertyDescriptor&&hasSet?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,setSize=hasSet&&setSizeDescriptor&&typeof setSizeDescriptor.get=="function"?setSizeDescriptor.get:null,setForEach=hasSet&&Set.prototype.forEach,hasWeakMap=typeof WeakMap=="function"&&WeakMap.prototype,weakMapHas=hasWeakMap?WeakMap.prototype.has:null,hasWeakSet=typeof WeakSet=="function"&&WeakSet.prototype,weakSetHas=hasWeakSet?WeakSet.prototype.has:null,hasWeakRef=typeof WeakRef=="function"&&WeakRef.prototype,weakRefDeref=hasWeakRef?WeakRef.prototype.deref:null,booleanValueOf=Boolean.prototype.valueOf,objectToString=Object.prototype.toString,functionToString=Function.prototype.toString,$match=String.prototype.match,$slice=String.prototype.slice,$replace=String.prototype.replace,$toUpperCase=String.prototype.toUpperCase,$toLowerCase=String.prototype.toLowerCase,$test=RegExp.prototype.test,$concat=Array.prototype.concat,$join=Array.prototype.join,$arrSlice=Array.prototype.slice,$floor=Math.floor,bigIntValueOf=typeof BigInt=="function"?BigInt.prototype.valueOf:null,gOPS=Object.getOwnPropertySymbols,symToString=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol.prototype.toString:null,hasShammedSymbols=typeof Symbol=="function"&&typeof Symbol.iterator=="object",toStringTag=typeof Symbol=="function"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===hasShammedSymbols||"symbol")?Symbol.toStringTag:null,isEnumerable=Object.prototype.propertyIsEnumerable,gPO=(typeof Reflect=="function"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(n){return n.__proto__}:null);function addNumericSeparator(n,e){if(n===1/0||n===-1/0||n!==n||n&&n>-1e3&&n<1e3||$test.call(/e/,e))return e;var t=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof n=="number"){var r=n<0?-$floor(-n):$floor(n);if(r!==n){var o=String(r),s=$slice.call(e,o.length+1);return $replace.call(o,t,"$&_")+"."+$replace.call($replace.call(s,/([0-9]{3})/g,"$&_"),/_$/,"")}}return $replace.call(e,t,"$&_")}var utilInspect=require$$0,inspectCustom=utilInspect.custom,inspectSymbol=isSymbol(inspectCustom)?inspectCustom:null,objectInspect=function n(e,t,r,o){var s=t||{};if(has$3(s,"quoteStyle")&&s.quoteStyle!=="single"&&s.quoteStyle!=="double")throw new TypeError('option "quoteStyle" must be "single" or "double"');if(has$3(s,"maxStringLength")&&(typeof s.maxStringLength=="number"?s.maxStringLength<0&&s.maxStringLength!==1/0:s.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var l=has$3(s,"customInspect")?s.customInspect:!0;if(typeof l!="boolean"&&l!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(has$3(s,"indent")&&s.indent!==null&&s.indent!==" "&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(has$3(s,"numericSeparator")&&typeof s.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var f=s.numericSeparator;if(typeof e>"u")return"undefined";if(e===null)return"null";if(typeof e=="boolean")return e?"true":"false";if(typeof e=="string")return inspectString(e,s);if(typeof e=="number"){if(e===0)return 1/0/e>0?"0":"-0";var E=String(e);return f?addNumericSeparator(e,E):E}if(typeof e=="bigint"){var d=String(e)+"n";return f?addNumericSeparator(e,d):d}var h=typeof s.depth>"u"?5:s.depth;if(typeof r>"u"&&(r=0),r>=h&&h>0&&typeof e=="object")return isArray$3(e)?"[Array]":"[Object]";var y=getIndent(s,r);if(typeof o>"u")o=[];else if(indexOf(o,e)>=0)return"[Circular]";function S(G,oe,ue){if(oe&&(o=$arrSlice.call(o),o.push(oe)),ue){var pe={depth:s.depth};return has$3(s,"quoteStyle")&&(pe.quoteStyle=s.quoteStyle),n(G,pe,r+1,o)}return n(G,s,r+1,o)}if(typeof e=="function"&&!isRegExp$1(e)){var O=nameOf(e),w=arrObjKeys(e,S);return"[Function"+(O?": "+O:" (anonymous)")+"]"+(w.length>0?" { "+$join.call(w,", ")+" }":"")}if(isSymbol(e)){var x=hasShammedSymbols?$replace.call(String(e),/^(Symbol\(.*\))_[^)]*$/,"$1"):symToString.call(e);return typeof e=="object"&&!hasShammedSymbols?markBoxed(x):x}if(isElement$2(e)){for(var H="<"+$toLowerCase.call(String(e.nodeName)),D=e.attributes||[],Z=0;Z<D.length;Z++)H+=" "+D[Z].name+"="+wrapQuotes(quote(D[Z].value),"double",s);return H+=">",e.childNodes&&e.childNodes.length&&(H+="..."),H+="</"+$toLowerCase.call(String(e.nodeName))+">",H}if(isArray$3(e)){if(e.length===0)return"[]";var V=arrObjKeys(e,S);return y&&!singleLineValues(V)?"["+indentedJoin(V,y)+"]":"[ "+$join.call(V,", ")+" ]"}if(isError(e)){var Y=arrObjKeys(e,S);return!("cause"in Error.prototype)&&"cause"in e&&!isEnumerable.call(e,"cause")?"{ ["+String(e)+"] "+$join.call($concat.call("[cause]: "+S(e.cause),Y),", ")+" }":Y.length===0?"["+String(e)+"]":"{ ["+String(e)+"] "+$join.call(Y,", ")+" }"}if(typeof e=="object"&&l){if(inspectSymbol&&typeof e[inspectSymbol]=="function"&&utilInspect)return utilInspect(e,{depth:h-r});if(l!=="symbol"&&typeof e.inspect=="function")return e.inspect()}if(isMap(e)){var ne=[];return mapForEach&&mapForEach.call(e,function(G,oe){ne.push(S(oe,e,!0)+" => "+S(G,e))}),collectionOf("Map",mapSize.call(e),ne,y)}if(isSet(e)){var B=[];return setForEach&&setForEach.call(e,function(G){B.push(S(G,e))}),collectionOf("Set",setSize.call(e),B,y)}if(isWeakMap(e))return weakCollectionOf("WeakMap");if(isWeakSet(e))return weakCollectionOf("WeakSet");if(isWeakRef(e))return weakCollectionOf("WeakRef");if(isNumber(e))return markBoxed(S(Number(e)));if(isBigInt(e))return markBoxed(S(bigIntValueOf.call(e)));if(isBoolean(e))return markBoxed(booleanValueOf.call(e));if(isString(e))return markBoxed(S(String(e)));if(typeof window<"u"&&e===window)return"{ [object Window] }";if(typeof globalThis<"u"&&e===globalThis||typeof commonjsGlobal<"u"&&e===commonjsGlobal)return"{ [object globalThis] }";if(!isDate(e)&&!isRegExp$1(e)){var u=arrObjKeys(e,S),X=gPO?gPO(e)===Object.prototype:e instanceof Object||e.constructor===Object,U=e instanceof Object?"":"null prototype",I=!X&&toStringTag&&Object(e)===e&&toStringTag in e?$slice.call(toStr(e),8,-1):U?"Object":"",K=X||typeof e.constructor!="function"?"":e.constructor.name?e.constructor.name+" ":"",q=K+(I||U?"["+$join.call($concat.call([],I||[],U||[]),": ")+"] ":"");return u.length===0?q+"{}":y?q+"{"+indentedJoin(u,y)+"}":q+"{ "+$join.call(u,", ")+" }"}return String(e)};function wrapQuotes(n,e,t){var r=(t.quoteStyle||e)==="double"?'"':"'";return r+n+r}function quote(n){return $replace.call(String(n),/"/g,""")}function isArray$3(n){return toStr(n)==="[object Array]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isDate(n){return toStr(n)==="[object Date]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isRegExp$1(n){return toStr(n)==="[object RegExp]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isError(n){return toStr(n)==="[object Error]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isString(n){return toStr(n)==="[object String]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isNumber(n){return toStr(n)==="[object Number]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isBoolean(n){return toStr(n)==="[object Boolean]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isSymbol(n){if(hasShammedSymbols)return n&&typeof n=="object"&&n instanceof Symbol;if(typeof n=="symbol")return!0;if(!n||typeof n!="object"||!symToString)return!1;try{return symToString.call(n),!0}catch{}return!1}function isBigInt(n){if(!n||typeof n!="object"||!bigIntValueOf)return!1;try{return bigIntValueOf.call(n),!0}catch{}return!1}var hasOwn=Object.prototype.hasOwnProperty||function(n){return n in this};function has$3(n,e){return hasOwn.call(n,e)}function toStr(n){return objectToString.call(n)}function nameOf(n){if(n.name)return n.name;var e=$match.call(functionToString.call(n),/^function\s*([\w$]+)/);return e?e[1]:null}function indexOf(n,e){if(n.indexOf)return n.indexOf(e);for(var t=0,r=n.length;t<r;t++)if(n[t]===e)return t;return-1}function isMap(n){if(!mapSize||!n||typeof n!="object")return!1;try{mapSize.call(n);try{setSize.call(n)}catch{return!0}return n instanceof Map}catch{}return!1}function isWeakMap(n){if(!weakMapHas||!n||typeof n!="object")return!1;try{weakMapHas.call(n,weakMapHas);try{weakSetHas.call(n,weakSetHas)}catch{return!0}return n instanceof WeakMap}catch{}return!1}function isWeakRef(n){if(!weakRefDeref||!n||typeof n!="object")return!1;try{return weakRefDeref.call(n),!0}catch{}return!1}function isSet(n){if(!setSize||!n||typeof n!="object")return!1;try{setSize.call(n);try{mapSize.call(n)}catch{return!0}return n instanceof Set}catch{}return!1}function isWeakSet(n){if(!weakSetHas||!n||typeof n!="object")return!1;try{weakSetHas.call(n,weakSetHas);try{weakMapHas.call(n,weakMapHas)}catch{return!0}return n instanceof WeakSet}catch{}return!1}function isElement$2(n){return!n||typeof n!="object"?!1:typeof HTMLElement<"u"&&n instanceof HTMLElement?!0:typeof n.nodeName=="string"&&typeof n.getAttribute=="function"}function inspectString(n,e){if(n.length>e.maxStringLength){var t=n.length-e.maxStringLength,r="... "+t+" more character"+(t>1?"s":"");return inspectString($slice.call(n,0,e.maxStringLength),e)+r}var o=$replace.call($replace.call(n,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,lowbyte);return wrapQuotes(o,"single",e)}function lowbyte(n){var e=n.charCodeAt(0),t={8:"b",9:"t",10:"n",12:"f",13:"r"}[e];return t?"\\"+t:"\\x"+(e<16?"0":"")+$toUpperCase.call(e.toString(16))}function markBoxed(n){return"Object("+n+")"}function weakCollectionOf(n){return n+" { ? }"}function collectionOf(n,e,t,r){var o=r?indentedJoin(t,r):$join.call(t,", ");return n+" ("+e+") {"+o+"}"}function singleLineValues(n){for(var e=0;e<n.length;e++)if(indexOf(n[e],`
|
||
`)>=0)return!1;return!0}function getIndent(n,e){var t;if(n.indent===" ")t=" ";else if(typeof n.indent=="number"&&n.indent>0)t=$join.call(Array(n.indent+1)," ");else return null;return{base:t,prev:$join.call(Array(e+1),t)}}function indentedJoin(n,e){if(n.length===0)return"";var t=`
|
||
`+e.prev+e.base;return t+$join.call(n,","+t)+`
|
||
`+e.prev}function arrObjKeys(n,e){var t=isArray$3(n),r=[];if(t){r.length=n.length;for(var o=0;o<n.length;o++)r[o]=has$3(n,o)?e(n[o],n):""}var s=typeof gOPS=="function"?gOPS(n):[],l;if(hasShammedSymbols){l={};for(var f=0;f<s.length;f++)l["$"+s[f]]=s[f]}for(var E in n)has$3(n,E)&&(t&&String(Number(E))===E&&E<n.length||hasShammedSymbols&&l["$"+E]instanceof Symbol||($test.call(/[^\w$]/,E)?r.push(e(E,n)+": "+e(n[E],n)):r.push(E+": "+e(n[E],n))));if(typeof gOPS=="function")for(var d=0;d<s.length;d++)isEnumerable.call(n,s[d])&&r.push("["+e(s[d])+"]: "+e(n[s[d]],n));return r}var GetIntrinsic=getIntrinsic,callBound=callBound$1,inspect=objectInspect,$TypeError=type,$WeakMap=GetIntrinsic("%WeakMap%",!0),$Map=GetIntrinsic("%Map%",!0),$weakMapGet=callBound("WeakMap.prototype.get",!0),$weakMapSet=callBound("WeakMap.prototype.set",!0),$weakMapHas=callBound("WeakMap.prototype.has",!0),$mapGet=callBound("Map.prototype.get",!0),$mapSet=callBound("Map.prototype.set",!0),$mapHas=callBound("Map.prototype.has",!0),listGetNode=function(n,e){for(var t=n,r;(r=t.next)!==null;t=r)if(r.key===e)return t.next=r.next,r.next=n.next,n.next=r,r},listGet=function(n,e){var t=listGetNode(n,e);return t&&t.value},listSet=function(n,e,t){var r=listGetNode(n,e);r?r.value=t:n.next={key:e,next:n.next,value:t}},listHas=function(n,e){return!!listGetNode(n,e)},sideChannel=function n(){var e,t,r,o={assert:function(s){if(!o.has(s))throw new $TypeError("Side channel does not contain "+inspect(s))},get:function(s){if($WeakMap&&s&&(typeof s=="object"||typeof s=="function")){if(e)return $weakMapGet(e,s)}else if($Map){if(t)return $mapGet(t,s)}else if(r)return listGet(r,s)},has:function(s){if($WeakMap&&s&&(typeof s=="object"||typeof s=="function")){if(e)return $weakMapHas(e,s)}else if($Map){if(t)return $mapHas(t,s)}else if(r)return listHas(r,s);return!1},set:function(s,l){$WeakMap&&s&&(typeof s=="object"||typeof s=="function")?(e||(e=new $WeakMap),$weakMapSet(e,s,l)):$Map?(t||(t=new $Map),$mapSet(t,s,l)):(r||(r={key:{},next:null}),listSet(r,s,l))}};return o},replace=String.prototype.replace,percentTwenties=/%20/g,Format={RFC1738:"RFC1738",RFC3986:"RFC3986"},formats$3={default:Format.RFC3986,formatters:{RFC1738:function(n){return replace.call(n,percentTwenties,"+")},RFC3986:function(n){return String(n)}},RFC1738:Format.RFC1738,RFC3986:Format.RFC3986},formats$2=formats$3,has$2=Object.prototype.hasOwnProperty,isArray$2=Array.isArray,hexTable=function(){for(var n=[],e=0;e<256;++e)n.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return n}(),compactQueue=function n(e){for(;e.length>1;){var t=e.pop(),r=t.obj[t.prop];if(isArray$2(r)){for(var o=[],s=0;s<r.length;++s)typeof r[s]<"u"&&o.push(r[s]);t.obj[t.prop]=o}}},arrayToObject=function n(e,t){for(var r=t&&t.plainObjects?Object.create(null):{},o=0;o<e.length;++o)typeof e[o]<"u"&&(r[o]=e[o]);return r},merge=function n(e,t,r){if(!t)return e;if(typeof t!="object"){if(isArray$2(e))e.push(t);else if(e&&typeof e=="object")(r&&(r.plainObjects||r.allowPrototypes)||!has$2.call(Object.prototype,t))&&(e[t]=!0);else return[e,t];return e}if(!e||typeof e!="object")return[e].concat(t);var o=e;return isArray$2(e)&&!isArray$2(t)&&(o=arrayToObject(e,r)),isArray$2(e)&&isArray$2(t)?(t.forEach(function(s,l){if(has$2.call(e,l)){var f=e[l];f&&typeof f=="object"&&s&&typeof s=="object"?e[l]=n(f,s,r):e.push(s)}else e[l]=s}),e):Object.keys(t).reduce(function(s,l){var f=t[l];return has$2.call(s,l)?s[l]=n(s[l],f,r):s[l]=f,s},o)},assign=function n(e,t){return Object.keys(t).reduce(function(r,o){return r[o]=t[o],r},e)},decode=function(n,e,t){var r=n.replace(/\+/g," ");if(t==="iso-8859-1")return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch{return r}},limit=1024,encode=function n(e,t,r,o,s){if(e.length===0)return e;var l=e;if(typeof e=="symbol"?l=Symbol.prototype.toString.call(e):typeof e!="string"&&(l=String(e)),r==="iso-8859-1")return escape(l).replace(/%u[0-9a-f]{4}/gi,function(O){return"%26%23"+parseInt(O.slice(2),16)+"%3B"});for(var f="",E=0;E<l.length;E+=limit){for(var d=l.length>=limit?l.slice(E,E+limit):l,h=[],y=0;y<d.length;++y){var S=d.charCodeAt(y);if(S===45||S===46||S===95||S===126||S>=48&&S<=57||S>=65&&S<=90||S>=97&&S<=122||s===formats$2.RFC1738&&(S===40||S===41)){h[h.length]=d.charAt(y);continue}if(S<128){h[h.length]=hexTable[S];continue}if(S<2048){h[h.length]=hexTable[192|S>>6]+hexTable[128|S&63];continue}if(S<55296||S>=57344){h[h.length]=hexTable[224|S>>12]+hexTable[128|S>>6&63]+hexTable[128|S&63];continue}y+=1,S=65536+((S&1023)<<10|d.charCodeAt(y)&1023),h[h.length]=hexTable[240|S>>18]+hexTable[128|S>>12&63]+hexTable[128|S>>6&63]+hexTable[128|S&63]}f+=h.join("")}return f},compact=function n(e){for(var t=[{obj:{o:e},prop:"o"}],r=[],o=0;o<t.length;++o)for(var s=t[o],l=s.obj[s.prop],f=Object.keys(l),E=0;E<f.length;++E){var d=f[E],h=l[d];typeof h=="object"&&h!==null&&r.indexOf(h)===-1&&(t.push({obj:l,prop:d}),r.push(h))}return compactQueue(t),e},isRegExp=function n(e){return Object.prototype.toString.call(e)==="[object RegExp]"},isBuffer=function n(e){return!e||typeof e!="object"?!1:!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},combine=function n(e,t){return[].concat(e,t)},maybeMap=function n(e,t){if(isArray$2(e)){for(var r=[],o=0;o<e.length;o+=1)r.push(t(e[o]));return r}return t(e)},utils$2={arrayToObject,assign,combine,compact,decode,encode,isBuffer,isRegExp,maybeMap,merge},getSideChannel=sideChannel,utils$1=utils$2,formats$1=formats$3,has$1=Object.prototype.hasOwnProperty,arrayPrefixGenerators={brackets:function n(e){return e+"[]"},comma:"comma",indices:function n(e,t){return e+"["+t+"]"},repeat:function n(e){return e}},isArray$1=Array.isArray,push=Array.prototype.push,pushToArray=function(n,e){push.apply(n,isArray$1(e)?e:[e])},toISO=Date.prototype.toISOString,defaultFormat=formats$1.default,defaults$1={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:utils$1.encode,encodeValuesOnly:!1,format:defaultFormat,formatter:formats$1.formatters[defaultFormat],indices:!1,serializeDate:function n(e){return toISO.call(e)},skipNulls:!1,strictNullHandling:!1},isNonNullishPrimitive=function n(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"||typeof e=="symbol"||typeof e=="bigint"},sentinel={},stringify$1=function n(e,t,r,o,s,l,f,E,d,h,y,S,O,w,x,H,D,Z){for(var V=e,Y=Z,ne=0,B=!1;(Y=Y.get(sentinel))!==void 0&&!B;){var u=Y.get(e);if(ne+=1,typeof u<"u"){if(u===ne)throw new RangeError("Cyclic object value");B=!0}typeof Y.get(sentinel)>"u"&&(ne=0)}if(typeof h=="function"?V=h(t,V):V instanceof Date?V=O(V):r==="comma"&&isArray$1(V)&&(V=utils$1.maybeMap(V,function(Re){return Re instanceof Date?O(Re):Re})),V===null){if(l)return d&&!H?d(t,defaults$1.encoder,D,"key",w):t;V=""}if(isNonNullishPrimitive(V)||utils$1.isBuffer(V)){if(d){var X=H?t:d(t,defaults$1.encoder,D,"key",w);return[x(X)+"="+x(d(V,defaults$1.encoder,D,"value",w))]}return[x(t)+"="+x(String(V))]}var U=[];if(typeof V>"u")return U;var I;if(r==="comma"&&isArray$1(V))H&&d&&(V=utils$1.maybeMap(V,d)),I=[{value:V.length>0?V.join(",")||null:void 0}];else if(isArray$1(h))I=h;else{var K=Object.keys(V);I=y?K.sort(y):K}var q=E?t.replace(/\./g,"%2E"):t,G=o&&isArray$1(V)&&V.length===1?q+"[]":q;if(s&&isArray$1(V)&&V.length===0)return G+"[]";for(var oe=0;oe<I.length;++oe){var ue=I[oe],pe=typeof ue=="object"&&typeof ue.value<"u"?ue.value:V[ue];if(!(f&&pe===null)){var le=S&&E?ue.replace(/\./g,"%2E"):ue,ve=isArray$1(V)?typeof r=="function"?r(G,le):G:G+(S?"."+le:"["+le+"]");Z.set(e,ne);var he=getSideChannel();he.set(sentinel,Z),pushToArray(U,n(pe,ve,r,o,s,l,f,E,r==="comma"&&H&&isArray$1(V)?null:d,h,y,S,O,w,x,H,D,he))}}return U},normalizeStringifyOptions=function n(e){if(!e)return defaults$1;if(typeof e.allowEmptyArrays<"u"&&typeof e.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof e.encodeDotInKeys<"u"&&typeof e.encodeDotInKeys!="boolean")throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(e.encoder!==null&&typeof e.encoder<"u"&&typeof e.encoder!="function")throw new TypeError("Encoder has to be a function.");var t=e.charset||defaults$1.charset;if(typeof e.charset<"u"&&e.charset!=="utf-8"&&e.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var r=formats$1.default;if(typeof e.format<"u"){if(!has$1.call(formats$1.formatters,e.format))throw new TypeError("Unknown format option provided.");r=e.format}var o=formats$1.formatters[r],s=defaults$1.filter;(typeof e.filter=="function"||isArray$1(e.filter))&&(s=e.filter);var l;if(e.arrayFormat in arrayPrefixGenerators?l=e.arrayFormat:"indices"in e?l=e.indices?"indices":"repeat":l=defaults$1.arrayFormat,"commaRoundTrip"in e&&typeof e.commaRoundTrip!="boolean")throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var f=typeof e.allowDots>"u"?e.encodeDotInKeys===!0?!0:defaults$1.allowDots:!!e.allowDots;return{addQueryPrefix:typeof e.addQueryPrefix=="boolean"?e.addQueryPrefix:defaults$1.addQueryPrefix,allowDots:f,allowEmptyArrays:typeof e.allowEmptyArrays=="boolean"?!!e.allowEmptyArrays:defaults$1.allowEmptyArrays,arrayFormat:l,charset:t,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:defaults$1.charsetSentinel,commaRoundTrip:e.commaRoundTrip,delimiter:typeof e.delimiter>"u"?defaults$1.delimiter:e.delimiter,encode:typeof e.encode=="boolean"?e.encode:defaults$1.encode,encodeDotInKeys:typeof e.encodeDotInKeys=="boolean"?e.encodeDotInKeys:defaults$1.encodeDotInKeys,encoder:typeof e.encoder=="function"?e.encoder:defaults$1.encoder,encodeValuesOnly:typeof e.encodeValuesOnly=="boolean"?e.encodeValuesOnly:defaults$1.encodeValuesOnly,filter:s,format:r,formatter:o,serializeDate:typeof e.serializeDate=="function"?e.serializeDate:defaults$1.serializeDate,skipNulls:typeof e.skipNulls=="boolean"?e.skipNulls:defaults$1.skipNulls,sort:typeof e.sort=="function"?e.sort:null,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:defaults$1.strictNullHandling}},stringify_1=function(n,e){var t=n,r=normalizeStringifyOptions(e),o,s;typeof r.filter=="function"?(s=r.filter,t=s("",t)):isArray$1(r.filter)&&(s=r.filter,o=s);var l=[];if(typeof t!="object"||t===null)return"";var f=arrayPrefixGenerators[r.arrayFormat],E=f==="comma"&&r.commaRoundTrip;o||(o=Object.keys(t)),r.sort&&o.sort(r.sort);for(var d=getSideChannel(),h=0;h<o.length;++h){var y=o[h];r.skipNulls&&t[y]===null||pushToArray(l,stringify$1(t[y],y,f,E,r.allowEmptyArrays,r.strictNullHandling,r.skipNulls,r.encodeDotInKeys,r.encode?r.encoder:null,r.filter,r.sort,r.allowDots,r.serializeDate,r.format,r.formatter,r.encodeValuesOnly,r.charset,d))}var S=l.join(r.delimiter),O=r.addQueryPrefix===!0?"?":"";return r.charsetSentinel&&(r.charset==="iso-8859-1"?O+="utf8=%26%2310003%3B&":O+="utf8=%E2%9C%93&"),S.length>0?O+S:""},utils=utils$2,has=Object.prototype.hasOwnProperty,isArray=Array.isArray,defaults={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:utils.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},interpretNumericEntities=function(n){return n.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(parseInt(t,10))})},parseArrayValue=function(n,e){return n&&typeof n=="string"&&e.comma&&n.indexOf(",")>-1?n.split(","):n},isoSentinel="utf8=%26%2310003%3B",charsetSentinel="utf8=%E2%9C%93",parseValues=function n(e,t){var r={__proto__:null},o=t.ignoreQueryPrefix?e.replace(/^\?/,""):e;o=o.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var s=t.parameterLimit===1/0?void 0:t.parameterLimit,l=o.split(t.delimiter,s),f=-1,E,d=t.charset;if(t.charsetSentinel)for(E=0;E<l.length;++E)l[E].indexOf("utf8=")===0&&(l[E]===charsetSentinel?d="utf-8":l[E]===isoSentinel&&(d="iso-8859-1"),f=E,E=l.length);for(E=0;E<l.length;++E)if(E!==f){var h=l[E],y=h.indexOf("]="),S=y===-1?h.indexOf("="):y+1,O,w;S===-1?(O=t.decoder(h,defaults.decoder,d,"key"),w=t.strictNullHandling?null:""):(O=t.decoder(h.slice(0,S),defaults.decoder,d,"key"),w=utils.maybeMap(parseArrayValue(h.slice(S+1),t),function(H){return t.decoder(H,defaults.decoder,d,"value")})),w&&t.interpretNumericEntities&&d==="iso-8859-1"&&(w=interpretNumericEntities(w)),h.indexOf("[]=")>-1&&(w=isArray(w)?[w]:w);var x=has.call(r,O);x&&t.duplicates==="combine"?r[O]=utils.combine(r[O],w):(!x||t.duplicates==="last")&&(r[O]=w)}return r},parseObject=function(n,e,t,r){for(var o=r?e:parseArrayValue(e,t),s=n.length-1;s>=0;--s){var l,f=n[s];if(f==="[]"&&t.parseArrays)l=t.allowEmptyArrays&&o===""?[]:[].concat(o);else{l=t.plainObjects?Object.create(null):{};var E=f.charAt(0)==="["&&f.charAt(f.length-1)==="]"?f.slice(1,-1):f,d=t.decodeDotInKeys?E.replace(/%2E/g,"."):E,h=parseInt(d,10);!t.parseArrays&&d===""?l={0:o}:!isNaN(h)&&f!==d&&String(h)===d&&h>=0&&t.parseArrays&&h<=t.arrayLimit?(l=[],l[h]=o):d!=="__proto__"&&(l[d]=o)}o=l}return o},parseKeys=function n(e,t,r,o){if(e){var s=r.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,l=/(\[[^[\]]*])/,f=/(\[[^[\]]*])/g,E=r.depth>0&&l.exec(s),d=E?s.slice(0,E.index):s,h=[];if(d){if(!r.plainObjects&&has.call(Object.prototype,d)&&!r.allowPrototypes)return;h.push(d)}for(var y=0;r.depth>0&&(E=f.exec(s))!==null&&y<r.depth;){if(y+=1,!r.plainObjects&&has.call(Object.prototype,E[1].slice(1,-1))&&!r.allowPrototypes)return;h.push(E[1])}return E&&h.push("["+s.slice(E.index)+"]"),parseObject(h,t,r,o)}},normalizeParseOptions=function n(e){if(!e)return defaults;if(typeof e.allowEmptyArrays<"u"&&typeof e.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof e.decodeDotInKeys<"u"&&typeof e.decodeDotInKeys!="boolean")throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");if(e.decoder!==null&&typeof e.decoder<"u"&&typeof e.decoder!="function")throw new TypeError("Decoder has to be a function.");if(typeof e.charset<"u"&&e.charset!=="utf-8"&&e.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=typeof e.charset>"u"?defaults.charset:e.charset,r=typeof e.duplicates>"u"?defaults.duplicates:e.duplicates;if(r!=="combine"&&r!=="first"&&r!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");var o=typeof e.allowDots>"u"?e.decodeDotInKeys===!0?!0:defaults.allowDots:!!e.allowDots;return{allowDots:o,allowEmptyArrays:typeof e.allowEmptyArrays=="boolean"?!!e.allowEmptyArrays:defaults.allowEmptyArrays,allowPrototypes:typeof e.allowPrototypes=="boolean"?e.allowPrototypes:defaults.allowPrototypes,allowSparse:typeof e.allowSparse=="boolean"?e.allowSparse:defaults.allowSparse,arrayLimit:typeof e.arrayLimit=="number"?e.arrayLimit:defaults.arrayLimit,charset:t,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:defaults.charsetSentinel,comma:typeof e.comma=="boolean"?e.comma:defaults.comma,decodeDotInKeys:typeof e.decodeDotInKeys=="boolean"?e.decodeDotInKeys:defaults.decodeDotInKeys,decoder:typeof e.decoder=="function"?e.decoder:defaults.decoder,delimiter:typeof e.delimiter=="string"||utils.isRegExp(e.delimiter)?e.delimiter:defaults.delimiter,depth:typeof e.depth=="number"||e.depth===!1?+e.depth:defaults.depth,duplicates:r,ignoreQueryPrefix:e.ignoreQueryPrefix===!0,interpretNumericEntities:typeof e.interpretNumericEntities=="boolean"?e.interpretNumericEntities:defaults.interpretNumericEntities,parameterLimit:typeof e.parameterLimit=="number"?e.parameterLimit:defaults.parameterLimit,parseArrays:e.parseArrays!==!1,plainObjects:typeof e.plainObjects=="boolean"?e.plainObjects:defaults.plainObjects,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:defaults.strictNullHandling}},parse$1=function(n,e){var t=normalizeParseOptions(e);if(n===""||n===null||typeof n>"u")return t.plainObjects?Object.create(null):{};for(var r=typeof n=="string"?parseValues(n,t):n,o=t.plainObjects?Object.create(null):{},s=Object.keys(r),l=0;l<s.length;++l){var f=s[l],E=parseKeys(f,r[f],t,typeof n=="string");o=utils.merge(o,E,t)}return t.allowSparse===!0?o:utils.compact(o)},stringify=stringify_1,parse=parse$1,formats=formats$3,lib={formats,parse,stringify},base64={exports:{}};(function(n,e){(function(t,r){n.exports=r()})(typeof self<"u"?self:typeof window<"u"?window:commonjsGlobal,function(){var t="3.7.7",r=t,o=typeof Buffer=="function",s=typeof TextDecoder=="function"?new TextDecoder:void 0,l=typeof TextEncoder=="function"?new TextEncoder:void 0,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",E=Array.prototype.slice.call(f),d=function(j){var ee={};return j.forEach(function(Te,$e){return ee[Te]=$e}),ee}(E),h=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,y=String.fromCharCode.bind(String),S=typeof Uint8Array.from=="function"?Uint8Array.from.bind(Uint8Array):function(j){return new Uint8Array(Array.prototype.slice.call(j,0))},O=function(j){return j.replace(/=/g,"").replace(/[+\/]/g,function(ee){return ee=="+"?"-":"_"})},w=function(j){return j.replace(/[^A-Za-z0-9\+\/]/g,"")},x=function(j){for(var ee,Te,$e,Me,Ce="",Ze=j.length%3,Fe=0;Fe<j.length;){if((Te=j.charCodeAt(Fe++))>255||($e=j.charCodeAt(Fe++))>255||(Me=j.charCodeAt(Fe++))>255)throw new TypeError("invalid character found");ee=Te<<16|$e<<8|Me,Ce+=E[ee>>18&63]+E[ee>>12&63]+E[ee>>6&63]+E[ee&63]}return Ze?Ce.slice(0,Ze-3)+"===".substring(Ze):Ce},H=typeof btoa=="function"?function(j){return btoa(j)}:o?function(j){return Buffer.from(j,"binary").toString("base64")}:x,D=o?function(j){return Buffer.from(j).toString("base64")}:function(j){for(var ee=4096,Te=[],$e=0,Me=j.length;$e<Me;$e+=ee)Te.push(y.apply(null,j.subarray($e,$e+ee)));return H(Te.join(""))},Z=function(j,ee){return ee===void 0&&(ee=!1),ee?O(D(j)):D(j)},V=function(j){if(j.length<2){var ee=j.charCodeAt(0);return ee<128?j:ee<2048?y(192|ee>>>6)+y(128|ee&63):y(224|ee>>>12&15)+y(128|ee>>>6&63)+y(128|ee&63)}else{var ee=65536+(j.charCodeAt(0)-55296)*1024+(j.charCodeAt(1)-56320);return y(240|ee>>>18&7)+y(128|ee>>>12&63)+y(128|ee>>>6&63)+y(128|ee&63)}},Y=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,ne=function(j){return j.replace(Y,V)},B=o?function(j){return Buffer.from(j,"utf8").toString("base64")}:l?function(j){return D(l.encode(j))}:function(j){return H(ne(j))},u=function(j,ee){return ee===void 0&&(ee=!1),ee?O(B(j)):B(j)},X=function(j){return u(j,!0)},U=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,I=function(j){switch(j.length){case 4:var ee=(7&j.charCodeAt(0))<<18|(63&j.charCodeAt(1))<<12|(63&j.charCodeAt(2))<<6|63&j.charCodeAt(3),Te=ee-65536;return y((Te>>>10)+55296)+y((Te&1023)+56320);case 3:return y((15&j.charCodeAt(0))<<12|(63&j.charCodeAt(1))<<6|63&j.charCodeAt(2));default:return y((31&j.charCodeAt(0))<<6|63&j.charCodeAt(1))}},K=function(j){return j.replace(U,I)},q=function(j){if(j=j.replace(/\s+/g,""),!h.test(j))throw new TypeError("malformed base64.");j+="==".slice(2-(j.length&3));for(var ee,Te="",$e,Me,Ce=0;Ce<j.length;)ee=d[j.charAt(Ce++)]<<18|d[j.charAt(Ce++)]<<12|($e=d[j.charAt(Ce++)])<<6|(Me=d[j.charAt(Ce++)]),Te+=$e===64?y(ee>>16&255):Me===64?y(ee>>16&255,ee>>8&255):y(ee>>16&255,ee>>8&255,ee&255);return Te},G=typeof atob=="function"?function(j){return atob(w(j))}:o?function(j){return Buffer.from(j,"base64").toString("binary")}:q,oe=o?function(j){return S(Buffer.from(j,"base64"))}:function(j){return S(G(j).split("").map(function(ee){return ee.charCodeAt(0)}))},ue=function(j){return oe(le(j))},pe=o?function(j){return Buffer.from(j,"base64").toString("utf8")}:s?function(j){return s.decode(oe(j))}:function(j){return K(G(j))},le=function(j){return w(j.replace(/[-_]/g,function(ee){return ee=="-"?"+":"/"}))},ve=function(j){return pe(le(j))},he=function(j){if(typeof j!="string")return!1;var ee=j.replace(/\s+/g,"").replace(/={0,2}$/,"");return!/[^\s0-9a-zA-Z\+/]/.test(ee)||!/[^\s0-9a-zA-Z\-_]/.test(ee)},Re=function(j){return{value:j,enumerable:!1,writable:!0,configurable:!0}},fe=function(){var j=function(ee,Te){return Object.defineProperty(String.prototype,ee,Re(Te))};j("fromBase64",function(){return ve(this)}),j("toBase64",function(ee){return u(this,ee)}),j("toBase64URI",function(){return u(this,!0)}),j("toBase64URL",function(){return u(this,!0)}),j("toUint8Array",function(){return ue(this)})},be=function(){var j=function(ee,Te){return Object.defineProperty(Uint8Array.prototype,ee,Re(Te))};j("toBase64",function(ee){return Z(this,ee)}),j("toBase64URI",function(){return Z(this,!0)}),j("toBase64URL",function(){return Z(this,!0)})},we=function(){fe(),be()},xe={version:t,VERSION:r,atob:G,atobPolyfill:q,btoa:H,btoaPolyfill:x,fromBase64:ve,toBase64:u,encode:u,encodeURI:X,encodeURL:X,utob:ne,btou:K,decode:ve,isValid:he,fromUint8Array:Z,toUint8Array:ue,extendString:fe,extendUint8Array:be,extendBuiltins:we};return xe.Base64={},Object.keys(xe).forEach(function(j){return xe.Base64[j]=xe[j]}),xe})})(base64);var base64Exports=base64.exports,__assign$2=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$2=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o])}return n},__assign$2.apply(this,arguments)},__awaiter=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function o(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function f(h){try{d(r.next(h))}catch(y){l(y)}}function E(h){try{d(r.throw(h))}catch(y){l(y)}}function d(h){h.done?s(h.value):o(h.value).then(f,E)}d((r=r.apply(n,e||[])).next())})},__generator=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,o,s,l;return l={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function f(d){return function(h){return E([d,h])}}function E(d){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,d[0]&&(t=0)),t;)try{if(r=1,o&&(s=d[0]&2?o.return:d[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,d[1])).done)return s;switch(o=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return t.label++,{value:d[1],done:!1};case 5:t.label++,o=d[1],d=[0];continue;case 7:d=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){t.label=d[1];break}if(d[0]===6&&t.label<s[1]){t.label=s[1],s=d;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(d);break}s[2]&&t.ops.pop(),t.trys.pop();continue}d=e.call(n,t)}catch(h){d=[6,h],o=0}finally{r=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},__importDefault=commonjsGlobal&&commonjsGlobal.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(KintoneRequestConfigBuilder$1,"__esModule",{value:!0});KintoneRequestConfigBuilder$1.KintoneRequestConfigBuilder=void 0;var form_data_1=__importDefault(browser),qs_1=__importDefault(lib),js_base64_1=base64Exports,platform_1$1=platform$2,DEFAULT_PROXY_PROTOCOL="http",THRESHOLD_AVOID_REQUEST_URL_TOO_LARGE=4096,KintoneRequestConfigBuilder=function(){function n(e){if(this.baseUrl=e.baseUrl,this.auth=e.auth,this.headers=this.buildHeaders({basicAuth:e.basicAuth,userAgent:e.userAgent}),"httpsAgent"in e){if("clientCertAuth"in e)throw new Error("Cannot specify clientCertAuth along with httpsAgent.");this.httpsAgent=e.httpsAgent}else"clientCertAuth"in e&&(this.clientCertAuth=e.clientCertAuth);this.proxy=e.proxy,this.requestToken=null,this.socketTimeout=e.socketTimeout}return n.prototype.build=function(e,t,r,o){return __awaiter(this,void 0,void 0,function(){var s,l,y,f,E,d,h,y,S,O,w,x,H;return __generator(this,function(D){switch(D.label){case 0:switch(s=__assign$2(__assign$2(__assign$2({method:e,headers:this.headers,url:"".concat(this.baseUrl).concat(t)},o||{}),platform_1$1.platformDeps.buildPlatformDependentConfig({httpsAgent:this.httpsAgent,clientCertAuth:this.clientCertAuth,socketTimeout:this.socketTimeout})),{proxy:this.buildProxyConfig(this.proxy)}),l=e,l){case"get":return[3,1];case"post":return[3,4];case"put":return[3,8];case"delete":return[3,10]}return[3,12];case 1:return y=this.buildRequestUrl(t,r),y.length>THRESHOLD_AVOID_REQUEST_URL_TOO_LARGE?(f=[__assign$2({},s)],w={method:"post",headers:__assign$2(__assign$2({},this.headers),{"X-HTTP-Method-Override":"GET"})},[4,this.buildData(r)]):[3,3];case 2:return[2,__assign$2.apply(void 0,f.concat([(w.data=D.sent(),w)]))];case 3:return[2,__assign$2(__assign$2({},s),{url:y})];case 4:return r instanceof form_data_1.default?[4,this.buildData(r)]:[3,6];case 5:return E=D.sent(),[2,__assign$2(__assign$2({},s),{headers:typeof E.getHeaders=="function"?__assign$2(__assign$2({},this.headers),E.getHeaders()):this.headers,data:E})];case 6:return d=[__assign$2({},s)],x={},[4,this.buildData(r)];case 7:return[2,__assign$2.apply(void 0,d.concat([(x.data=D.sent(),x)]))];case 8:return h=[__assign$2({},s)],H={},[4,this.buildData(r)];case 9:return[2,__assign$2.apply(void 0,h.concat([(H.data=D.sent(),H)]))];case 10:return S=this.buildRequestUrl,O=[t],[4,this.buildData(r)];case 11:return y=S.apply(this,O.concat([D.sent()])),[2,__assign$2(__assign$2({},s),{url:y})];case 12:throw new Error("".concat(e," method is not supported"));case 13:return[2]}})})},n.prototype.buildProxyConfig=function(e){var t;if(e!==void 0){if(e===!1)return!1;var r=e;return r.auth&&(r.auth.username.length===0||r.auth.password.length===0)&&(r.auth=void 0),r.protocol=(t=r.protocol)!==null&&t!==void 0?t:DEFAULT_PROXY_PROTOCOL,r}},n.prototype.buildRequestUrl=function(e,t){return"".concat(this.baseUrl).concat(e,"?").concat(qs_1.default.stringify(t))},n.prototype.buildData=function(e){return __awaiter(this,void 0,void 0,function(){var t;return __generator(this,function(r){switch(r.label){case 0:return this.auth.type!=="session"?[3,2]:[4,this.getRequestToken()];case 1:return t=r.sent(),e instanceof form_data_1.default?(e.append("__REQUEST_TOKEN__",t),[2,e]):[2,__assign$2({__REQUEST_TOKEN__:t},e)];case 2:return[2,e]}})})},n.prototype.buildHeaders=function(e){var t=e.basicAuth,r=e.userAgent,o=t?{Authorization:"Basic ".concat(js_base64_1.Base64.encode("".concat(t.username,":").concat(t.password)))}:{},s=platform_1$1.platformDeps.buildHeaders({userAgent:r}),l=__assign$2(__assign$2({},s),o);switch(this.auth.type){case"password":return __assign$2(__assign$2({},l),{"X-Cybozu-Authorization":js_base64_1.Base64.encode("".concat(this.auth.username,":").concat(this.auth.password))});case"apiToken":{var f=this.auth.apiToken;return Array.isArray(f)?__assign$2(__assign$2({},l),{"X-Cybozu-API-Token":f.join(",")}):__assign$2(__assign$2({},l),{"X-Cybozu-API-Token":f})}case"oAuthToken":return __assign$2(__assign$2({},l),{Authorization:"Bearer ".concat(this.auth.oAuthToken)});default:return __assign$2(__assign$2({},l),{"X-Requested-With":"XMLHttpRequest"})}},n.prototype.getRequestToken=function(){return __awaiter(this,void 0,void 0,function(){var e;return __generator(this,function(t){switch(t.label){case 0:return this.requestToken!==null?[3,2]:(e=this,[4,platform_1$1.platformDeps.getRequestToken()]);case 1:e.requestToken=t.sent(),t.label=2;case 2:return[2,this.requestToken]}})})},n}();KintoneRequestConfigBuilder$1.KintoneRequestConfigBuilder=KintoneRequestConfigBuilder;var KintoneResponseHandler$1={},__assign$1=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$1=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o])}return n},__assign$1.apply(this,arguments)},__rest=commonjsGlobal&&commonjsGlobal.__rest||function(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(n);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(n,r[o])&&(t[r[o]]=n[r[o]]);return t};Object.defineProperty(KintoneResponseHandler$1,"__esModule",{value:!0});KintoneResponseHandler$1.KintoneResponseHandler=void 0;var error_1=error,KintoneResponseHandler=function(){function n(e){var t=e.enableAbortSearchError;this.enableAbortSearchError=t}return n.prototype.handle=function(e){var t=this;return e.then(function(r){return t.handleSuccessResponse(r)},function(r){return t.handleErrorResponse(r)})},n.prototype.handleSuccessResponse=function(e){if(this.enableAbortSearchError&&/Filter aborted because of too many search results/.test(e.headers["x-cybozu-warning"]))throw new error_1.KintoneAbortSearchError(e.headers["x-cybozu-warning"]);return e.data},n.prototype.handleErrorResponse=function(e){if(!e.response)throw/mac verify failure/.test(e.toString())?new Error("invalid clientCertAuth setting"):e;var t=e.response,r=t.data,o=__rest(t,["data"]);throw typeof r=="string"?new Error("".concat(o.status,": ").concat(o.statusText)):new error_1.KintoneRestAPIError(__assign$1({data:r},o))},n}();KintoneResponseHandler$1.KintoneResponseHandler=KintoneResponseHandler;var __assign=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o])}return n},__assign.apply(this,arguments)};Object.defineProperty(KintoneRestAPIClient$1,"__esModule",{value:!0});KintoneRestAPIClient$1.KintoneRestAPIClient=void 0;var BulkRequestClient_1=BulkRequestClient$1,AppClient_1=AppClient$1,RecordClient_1=RecordClient$1,SpaceClient_1=SpaceClient$1,FileClient_1=FileClient$1,http_1=http,KintoneRequestConfigBuilder_1=KintoneRequestConfigBuilder$1,KintoneResponseHandler_1=KintoneResponseHandler$1,platform_1=platform$2,UnsupportedPlatformError_1=UnsupportedPlatformError$1,buildDiscriminatedAuth=function(n){if("username"in n)return __assign({type:"password"},n);if("apiToken"in n)return __assign({type:"apiToken"},n);if("oAuthToken"in n)return __assign({type:"oAuthToken"},n);try{return platform_1.platformDeps.getDefaultAuth()}catch(e){throw e instanceof UnsupportedPlatformError_1.UnsupportedPlatformError?new Error("session authentication is not supported in ".concat(e.platform," environment.")):e}},KintoneRestAPIClient=function(){function n(e){e===void 0&&(e={});var t,r,o;validateOptions(e),this.baseUrl=platform_1.platformDeps.buildBaseUrl(e.baseUrl).replace(/\/+$/,"");var s=buildDiscriminatedAuth((t=e.auth)!==null&&t!==void 0?t:{}),l=new KintoneRequestConfigBuilder_1.KintoneRequestConfigBuilder(__assign(__assign({},e),{baseUrl:this.baseUrl,auth:s})),f=new KintoneResponseHandler_1.KintoneResponseHandler({enableAbortSearchError:(o=(r=e.featureFlags)===null||r===void 0?void 0:r.enableAbortSearchError)!==null&&o!==void 0?o:!1}),E=new http_1.DefaultHttpClient({responseHandler:f,requestConfigBuilder:l}),d=e.guestSpaceId;this.bulkRequest_=new BulkRequestClient_1.BulkRequestClient(E,d),this.record=new RecordClient_1.RecordClient(E,this.bulkRequest_,d),this.app=new AppClient_1.AppClient(E,d),this.space=new SpaceClient_1.SpaceClient(E,d),this.file=new FileClient_1.FileClient(E,d)}return Object.defineProperty(n,"version",{get:function(){return platform_1.platformDeps.getVersion()},enumerable:!1,configurable:!0}),n.prototype.getBaseUrl=function(){return this.baseUrl},n.prototype.bulkRequest=function(e){return this.bulkRequest_.send(e)},n}();KintoneRestAPIClient$1.KintoneRestAPIClient=KintoneRestAPIClient;var validateOptions=function(n){validateBaseUrl(n.baseUrl),validateGuestSpaceId(n.guestSpaceId),validateSocketTimeout(n.socketTimeout)},validateBaseUrl=function(n){if(n!==void 0){var e=new URL(n);if(e.hostname!=="localhost"&&e.protocol!=="https:")throw new Error('The protocol of baseUrl must be "https".')}},validateGuestSpaceId=function(n){if(n===""||n===null)throw new Error("invalid guestSpaceId: got [".concat(n,"]"))},validateSocketTimeout=function(n){if(n!==void 0){var e=parseFloat(n.toString());if(isNaN(e)||e<0)throw new Error("Invalid socketTimeout. Must be a positive number.")}};(function(n){var e=commonjsGlobal&&commonjsGlobal.__createBinding||(Object.create?function(E,d,h,y){y===void 0&&(y=h);var S=Object.getOwnPropertyDescriptor(d,h);(!S||("get"in S?!d.__esModule:S.writable||S.configurable))&&(S={enumerable:!0,get:function(){return d[h]}}),Object.defineProperty(E,y,S)}:function(E,d,h,y){y===void 0&&(y=h),E[y]=d[h]}),t=commonjsGlobal&&commonjsGlobal.__setModuleDefault||(Object.create?function(E,d){Object.defineProperty(E,"default",{enumerable:!0,value:d})}:function(E,d){E.default=d}),r=commonjsGlobal&&commonjsGlobal.__importStar||function(E){if(E&&E.__esModule)return E;var d={};if(E!=null)for(var h in E)h!=="default"&&Object.prototype.hasOwnProperty.call(E,h)&&e(d,E,h);return t(d,E),d},o=commonjsGlobal&&commonjsGlobal.__exportStar||function(E,d){for(var h in E)h!=="default"&&!Object.prototype.hasOwnProperty.call(d,h)&&e(d,E,h)};Object.defineProperty(n,"__esModule",{value:!0}),n.KintoneRestAPIClient=void 0;var s=platform$2,l=r(browser$2);(0,s.injectPlatformDeps)(l);var f=KintoneRestAPIClient$1;Object.defineProperty(n,"KintoneRestAPIClient",{enumerable:!0,get:function(){return f.KintoneRestAPIClient}}),o(error,n)})(index_browser);var FieldType=(n=>(n.CALC="CALC",n.CATEGORY="CATEGORY",n.CHECK_BOX="CHECK_BOX",n.CREATED_TIME="CREATED_TIME",n.CREATOR="CREATOR",n.DATE="DATE",n.DATETIME="DATETIME",n.DROP_DOWN="DROP_DOWN",n.FILE="FILE",n.GROUP="GROUP",n.GROUP_SELECT="GROUP_SELECT",n.LINK="LINK",n.MODIFIER="MODIFIER",n.MULTI_LINE_TEXT="MULTI_LINE_TEXT",n.MULTI_SELECT="MULTI_SELECT",n.NUMBER="NUMBER",n.ORGANIZATION_SELECT="ORGANIZATION_SELECT",n.RADIO_BUTTON="RADIO_BUTTON",n.RECORD_NUMBER="RECORD_NUMBER",n.REFERENCE_TABLE="REFERENCE_TABLE",n.RICH_TEXT="RICH_TEXT",n.SINGLE_LINE_TEXT="SINGLE_LINE_TEXT",n.STATUS="STATUS",n.STATUS_ASSIGNEE="STATUS_ASSIGNEE",n.SUBTABLE="SUBTABLE",n.TIME="TIME",n.UPDATED_TIME="UPDATED_TIME",n.USER_SELECT="USER_SELECT",n))(FieldType||{}),CalcFormat=(n=>(n.NUMBER="NUMBER",n.NUMBER_DIGIT="NUMBER_DIGIT",n.DATETIME="DATETIME",n.DATE="DATE",n.TIME="TIME",n.HOUR_MINUTE="HOUR_MINUTE",n.DAY_HOUR_MINUTE="DAY_HOUR_MINUTE",n))(CalcFormat||{});class Aggregator{constructor(e,t){F(this,"data");F(this,"field");this.data=e,this.field=t}toNumberArray(){return this.data.map(t=>{const r=Number(t);if(isNaN(r))throw new Error(`フィールド「${this.field.code} 」は数値に変換できないため、計算を実行できません。`);return r})}sum(){return this.data.length===0?null:this.toNumberArray().reduce((t,r)=>t+r,0)}avg(){if(this.data.length===0)return null;const e=this.toNumberArray();return e.reduce((r,o)=>r+o,0)/e.length}max(){if(this.data.length===0)return null;if(this.field.type===FieldType.NUMBER){const e=this.toNumberArray();return Math.max(...e)}if(this.field.type===FieldType.CALC){const e=this.field;if(e.format===CalcFormat.NUMBER||e.format===CalcFormat.NUMBER_DIGIT){const t=this.toNumberArray();return Math.max(...t)}}return this.data.reduce((e,t)=>t>e?t:e,this.data[0])}min(){if(this.data.length===0)return null;if(this.field.type===FieldType.NUMBER){const e=this.toNumberArray();return Math.min(...e)}if(this.field.type===FieldType.CALC){const e=this.field;if(e.format===CalcFormat.NUMBER||e.format===CalcFormat.NUMBER_DIGIT){const t=this.toNumberArray();return Math.min(...t)}}return this.data===null||this.data.length===0?null:this.data.reduce((e,t)=>t<e?t:e,this.data[0])}count(){return this.data.length}first(){return this.data.length?this.data[0]:null}last(){return this.data.length?this.data[this.data.length-1]:null}calculate(e){switch(e){case"SUM":return this.sum();case"AVG":return this.avg();case"MAX":return this.max();case"MIN":return this.min();case"COUNT":return this.count();case"FIRST":return this.first();case"LAST":return this.last();default:return null}}}class DataProcessingAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");F(this,"getQuery",(e,t)=>{console.log(e);const r=/var\((.*?)\)/g;let o;for(;(o=r.exec(e))!==null;){const s=o[1];if(s in t)e=e.replace(o[0],t[s]);else throw new Error(`変数${s}が見つかりません`)}return console.log(e),e});F(this,"selectData",async e=>{const t=new index_browser.KintoneRestAPIClient,r=this.props.sources.fields.map(l=>l.code),o=await t.record.getAllRecords({app:this.props.sources.app.id,fields:r,condition:e}),s={};return o.forEach(l=>{for(const[f,E]of Object.entries(l))s[f]||(s[f]={type:E.type,value:[]}),s[f].value.push(E.value)}),s});this.name="データ処理",this.actionProps=[],this.props={displayName:"",condition:"",sources:{app:{id:""},fields:[]}},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.props=e.ActionValue;const o=JSON.parse(this.props.condition);let s={canNext:!0,result:""};try{if(!this.props)return s;const l=this.getQuery(o.queryString,r.variables),f=await this.selectData(l);if(console.log("data ",f),this.props.verName){const E=this.props.verName.vars.reduce((d,h)=>{const y=f[h.field.code].value,O=new Aggregator(y,h.field).calculate(h.logicalOperator.operator);return d[h.vName]=O,d},{});r.variables[this.props.verName.name]=E,console.log("context ",r)}return s}catch(l){return console.error("データ集計中例外が発生しました。",l),l instanceof Error?t.error=`データ集計中例外が発生しました。 ${l.message}`:t.error="データ集計中例外が発生しました。",s.canNext=!1,s}}register(){actionAddins[this.name]=this}}new DataProcessingAction;class DataUpdateAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"dataMappingProps");this.name="データ更新",this.actionProps=[],this.dataMappingProps={},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.dataMappingProps=e.ActionValue,console.log(r);let o={canNext:!0,result:""};try{const s=await getLookupFixedFieldCodes(this.dataMappingProps.sources.app.id);this.dataMappingProps.dataMapping.createWithNull===!0?await doUpdate(this.dataMappingProps.dataMapping.data,this.dataMappingProps.sources.app.id,r,!0,s):this.dataMappingProps.dataMapping.data.map(l=>l.isKey).find(l=>l===!0)?await doUpdate(this.dataMappingProps.dataMapping.data,this.dataMappingProps.sources.app.id,r,!1,s):await doCreate(this.dataMappingProps.dataMapping.data,this.dataMappingProps.sources.app.id,r,s)}catch(s){console.error("DataMappingAction error",s),o.canNext=!1}return console.log("dataMappingProps",this.dataMappingProps),o}register(){actionAddins[this.name]=this}}new DataUpdateAction;const getContextVarByPath=(n,e)=>e.split(".").reduce((t,r)=>(t||{})[r],n),client=new index_browser.KintoneRestAPIClient,doUpdate=async(n,e,t,r,o)=>{const s=await findUpdateField(n,e,t);if(console.log(s),s.records.length===0&&r)await doCreate(n,e,t,o);else{const l=n.filter(E=>Object.keys(E.from).length>0&&!o.includes(E.to.fields[0].code)).map(E=>E.from.objectType==="variable"?{value:getContextVarByPath(t.variables,E.from.name.name),code:E.to.fields[0].code}:{value:E.from.sharedText,code:E.to.fields[0].code}),f=s.records.map(E=>{const d={};for(const h of l)E[h.code]&&(d[h.code]={value:h.value});return{id:E.$id.value,record:d}});await client.record.updateRecords({app:e,records:f})}},findUpdateField=async(n,e,t)=>{const r=n.filter(o=>o.to.app&&o.to.fields&&o.to.fields.length>0&&o.isKey).map(o=>o.from.objectType==="variable"?`${o.to.fields[0].code} = "${getContextVarByPath(t.variables,o.from.name.name)}"`:`${o.to.fields[0].code}=${o.from.sharedText}`).join("&");return r.length===0?{records:[]}:await client.record.getRecords({app:e,query:r})},doCreate=async(n,e,t,r)=>{const o=n.filter(s=>s.from.objectType==="variable"&&s.from.name.name&&s.to.app&&s.to.fields&&s.to.fields.length>0).filter(s=>!r.includes(s.to.fields[0].code)).reduce((s,l)=>({...s,[l.to.fields[0].code]:{value:getContextVarByPath(t.variables,l.from.name.name)}}),{});o&&Object.keys(o).length>0&&await kintone.api(kintone.api.url("/k/v1/record.json",!0),"POST",{app:e,record:o})},getLookupFixedFieldCodes=async n=>await client.app.getFormFields({app:n,lang:"ja"}).then(e=>Object.values(e.properties).filter(t=>t.lookup!==void 0).flatMap(t=>t.lookup.fieldMappings.map(r=>r.field)));class CurrentFieldGetAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"currentFieldGetProps");this.name="フィールドの値を取得する",this.actionProps=[],this.currentFieldGetProps={},this.register()}async process(e,t,r){this.currentFieldGetProps=e.ActionValue,this.actionProps=e.actionProps;let o={canNext:!0,result:""};try{r.variables[this.currentFieldGetProps.verName.name]=r.record[this.currentFieldGetProps.field.code].value}catch(s){console.error("CurrentFieldGetAction error",s),o.canNext=!1}return o}register(){actionAddins[this.name]=this}}new CurrentFieldGetAction;class RegularCheckAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="正規表現チェック",this.actionProps=[],this.props={field:{code:""},message:"",regExpression:""},this.register()}async process(e,t){let r={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("regExpression"in e.ActionValue))return r;this.props=e.ActionValue;const o=t.record,s=o[this.props.field.code].value;return new RegExp(this.props.regExpression).test(s)?r={canNext:!0,result:!0}:o[this.props.field.code].error=this.props.message,r}catch(o){return t.error=o,console.error(o),r.canNext=!1,r}}register(){actionAddins[this.name]=this}}new RegularCheckAction;class MailCheckAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="メールアドレスチェック",this.actionProps=[],this.props={field:{code:""},message:"",emailCheck:""},this.register()}async process(e,t){let r={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("emailCheck"in e.ActionValue))return r;this.props=e.ActionValue;const o=t.record,s=o[this.props.field.code].value;return this.props.emailCheck==="厳格"?/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(s)||(o[this.props.field.code].error=this.props.message):this.props.emailCheck==="ゆるめ"?/^[^@]+@[^@]+$/.test(s)||(o[this.props.field.code].error=this.props.message):r={canNext:!0,result:!0},r}catch(o){return t.error=o,console.error(o),r.canNext=!1,r}}register(){actionAddins[this.name]=this}}new MailCheckAction;class StrCountCheckAciton{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="文字数チェック",this.actionProps=[],this.props={field:{code:""},message:"",maxLength:0},this.register()}async process(e,t){let r={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("strExpression"in e.ActionValue))return r;this.props=e.ActionValue;const o=t.record,s=o[this.props.field.code].value,l=this.props.maxLength;return s===void 0||s===""||(l<s.length?o[this.props.field.code].error=this.props.message:r={canNext:!0,result:!0}),r}catch(o){return t.error=o,console.error(o),r.canNext=!1,r}}register(){actionAddins[this.name]=this}}new StrCountCheckAciton;class DatetimeGetterAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="現在日時",this.actionProps=[],this.props={verName:{name:""}},this.register()}async process(e,t,r){let o={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("verName"in e.ActionValue))return o;this.props=e.ActionValue;let s=new Date;return this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=s.toISOString()),o}catch(s){return t.error=s,console.error(s),o.canNext=!1,o}}register(){actionAddins[this.name]=this}}new DatetimeGetterAction;class InsertValueAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="値を挿入する",this.actionProps=[],this.props={field:{code:""},condition:"",value:"",show:""},this.register()}checkInputBlank(e,t,r,o,s){if(t.match(/^(\s| )+?$/)!==null){if(e==="NUMBER"||e==="DATE"||e==="DATETIME"||e==="TIME"||e==="USER_SELECT"||e==="ORGANIZATION_SELECT"||e==="GROUP_SELECT"||e==="RADIO_BUTTON"||e==="DROP_DOWN"||e==="CHECK_BOX"||e==="MULTI_SELECT")throw s.record[r].error="「"+r+"」フィールドには、空白文字は挿入できません。",new Error("「"+r+"」フィールドには、空白文字は挿入できません。「値を挿入する」コンポーネントの処理を中断しました。");if(o)throw s.record[r].error="「"+r+"」フィールドは必須項目のため、空白文字は挿入できません。",new Error("「"+r+"」フィールドは必須項目のため、空白文字は挿入できません。「値を挿入する」コンポーネントの処理を中断しました。")}return!0}checkInputNumber(e,t,r){let o=Number(e);if(!isFinite(o))throw r.record[t].error="「"+t+"」フィールドに入れようとした値は、無効な日付形式です。",new Error("「"+t+"」フィールドに入れようとした値は、有効な数値ではありません。「値を挿入する」コンポーネントの処理を中断しました。");return!0}checkInputDate(e,t,r){let o=e.match(/(\d{4})-(\d{2})-(\d{2})$/),s=e.match(/(\d{4})-(\d{1})-(\d{1})$/),l=e.match(/(\d{4})-(\d{1})-(\d{2})$/),f=e.match(/(\d{4})-(\d{2})-(\d{1})$/),E=e.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).000Z/),d;if(d=new Date(e),d!==void 0&&!isNaN(d.getDate())&&o===null&&l===null&&f===null&&s===null&&E===null)throw r.record[t].error="「"+t+"」フィールドに入れようとした値は、無効な日付形式です。",new Error("「"+t+"」フィールドに入れようとした値は、無効な日付形式です。「値を挿入する」コンポーネントの処理を中断しました。");return!0}checkInputTime(e,t,r){if(e.match(/^([0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/)===null)throw r.record[t].error="「"+t+"」フィールドに入れようとした値は、無効な時刻形式です。",new Error("「"+t+"」フィールドに入れようとした値は、無効な時刻形式です。「値を挿入する」コンポーネントの処理を中断しました。");return!0}changeDateFormat(e,t,r,o){let s,l;if(l=new Date(e),l!==void 0&&!isNaN(l.getDate())){if(t==="DATETIME")return s=l.toISOString(),s;let f=e.match(/(\d{4})-(\d{1,2})-(\d{1,2})$/);if(f!==null){let E=1,d=2,h=3;return`${f[E]}-${f[d]}-${f[h]}`}}throw o.record[r].error="「"+r+"」フィールドに入れようとした値は、無効な日付形式です。",new Error("「"+r+"」フィールドに入れようとした値は、無効な日付形式です。「値を挿入する」コンポーネントの処理を中断しました。")}checkInputOption(e,t,r,o){if(t!==void 0){let l=Object.keys(t);for(var s in l)if(l[s]===e)return!0}throw o.record[r].error="「"+r+"」には、存在しない値を挿入しようとしたため、処理を中断しました。",new Error("「"+r+"」には、存在しない値を挿入しようとしたため、処理を中断しました。「値を挿入する」コンポーネントの処理を中断しました。")}async setInputUser(e){let t;try{const o=await kintone.api(kintone.api.url("/v1/users",!0),"GET",{codes:[e]});if(o.users[0].code===e&&(t=o.users[0].name),t===void 0)throw new Error}catch{return!1}return t}async setInputOrganization(e){let t;try{const o=await kintone.api(kintone.api.url("/v1/organizations.json",!0),"GET",{codes:[e]});if(o.organizations[0].code===e&&(t=o.organizations[0].name),t===void 0)throw new Error}catch{return!1}return t}async setInputGroup(e){let t;try{const o=await kintone.api(kintone.api.url("/v1/groups.json",!0),"GET",{codes:[e]});if(o.groups[0].code===e&&(t=o.groups[0].name),t===void 0)throw new Error}catch{return!1}return t}async process(e,t,r){let o={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("value"in e.ActionValue))return o;const s=1,l=3,f=this.actionProps[s].props.modelValue.type,E=this.actionProps[l].props.modelValue,d=this.getConditionResult(r);if(!d)return o;if(f===null)throw new Error("「値を挿入する」コンポーネントで、値を挿入するフィールドが指定されていなかったため、処理が中断されました。");if(f==="FILE"||f==="SUBTABLE"||f==="CATEGORY"||f==="STATUS"||f==="STATUS_ASSIGNEE"||f==="CREATOR"||f==="MODIFIER"||f==="__REVISION__"||f==="RECORD_NUMBER"||f==="__ID__"||f==="CALC"||f==="CREATED_TIME"||f==="UPDATED_TIME")throw new Error("「値を挿入する」コンポーネントで、選択されたフィールドは、値を挿入するコンポーネントでは非対応のフィールドのため、処理を中断しました。");if(E==="")throw new Error("「値を挿入する」コンポーネントで、フィールドに挿入する値が指定されていなかったため、処理が中断されました。");this.props=e.ActionValue;let h=this.props.value;const y=this.props.field.type,S=this.props.field.required,O=this.props.field.code,w=this.props.show;let x=this.props.field.options,H;if(w==="変数"&&d){if(H=r.variables[h],H===void 0)throw new Error("「"+O+"」フィールドに入れようとした変数は、無効な入力形式です。");h=H}let D,Z=[],V=this.checkInputBlank(y,h,O,S,t);if(d&&V){if(y==="SINGLE_LINE_TEXT"||y==="MULTI_LINE_TEXT"||y==="RICH_TEXT"||y==="LINK")D=h;else if(y==="NUMBER")this.checkInputNumber(h,O,t)&&(D=Number(h));else if(y==="DATE"||y==="DATETIME"){if(this.checkInputDate(h,O,t)){let Y=this.changeDateFormat(h,y,O,t);Y&&(D=Y)}}else if(y==="TIME")this.checkInputTime(h,O,t)&&(D=h);else if(y==="RADIO_BUTTON"||y==="DROP_DOWN")this.checkInputOption(h,x,O,t)&&(D=h);else if(y==="CHECK_BOX"||y==="MULTI_SELECT")this.checkInputOption(h,x,O,t)&&(Z[0]=h);else if(y==="USER_SELECT"){let Y=await this.setInputUser(h);if(Y)D=[{code:h,name:Y}];else throw t.record[O].error="ユーザー選択に、挿入しようとしたユーザー情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。",new Error("ユーザー選択に、挿入しようとしたユーザー情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。")}else if(y==="ORGANIZATION_SELECT"){let Y=await this.setInputOrganization(h);if(Y)D=[{code:h,name:Y}];else throw t.record[O].error="組織選択フィールドに、挿入しようとした組織情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。",new Error("組織選択フィールドに、挿入しようとした組織情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。")}else if(y==="GROUP_SELECT"){let Y=await this.setInputGroup(h);if(Y)D=[{code:h,name:Y}];else throw t.record[O].error="グループ選択フィールドに、挿入しようとしたグループ情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。",new Error("グループ選択フィールドに、挿入しようとしたグループ情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。")}}return d&&(D||Z)&&(D?t.record[O].value=D:Z.length>0&&(t.record[O].value=Z)),o={canNext:!0,result:!0},o}catch(s){return t.record,t.error=s.message,console.error(s),o.canNext=!0,o}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new InsertValueAction;class GetValueAciton{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="値を取得する",this.actionProps=[],this.props={field:{code:""},verName:{name:""}},this.register()}async process(e,t,r){let o={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("verName"in e.ActionValue))return o;this.props=e.ActionValue;const l=t.record[this.props.field.code].value;return this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=l),o={canNext:!0,result:!0},o}catch(s){return t.error=s,console.error(s),o.canNext=!1,o}}register(){actionAddins[this.name]=this}}new GetValueAciton;class StringJoinAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="文字結合",this.actionProps=[],this.register(),this.props={saveField:{code:""},joinField1:{code:""},joinField2:{code:""},delimiter:""},this.register()}async process(e,t){let r={canNext:!1,result:!1};try{let o=function(O,w,x,H){var D,Z,V,Y,ne,B,u,X,U,I,K,q,G,oe,ue,pe;if((((D=H.record[x])==null?void 0:D.value)===void 0||((Z=H.record[x])==null?void 0:Z.value)===null)&&(H.record[x].value=""),w==="CREATOR"||w==="MODIFIER")O=(V=H.record[x])==null?void 0:V.value.name;else if(w==="DATETIME"||w==="CREATED_TIME"||w==="UPDATED_TIME")((Y=H.record[x])==null?void 0:Y.value)!==void 0&&((ne=H.record[x])==null?void 0:ne.value)!==""?O=Formatter.dateFormat(new Date((B=H.record[x])==null?void 0:B.value),"yyyy-MM-dd HH:mm"):O=(u=H.record[x])==null?void 0:u.value;else if(w==="USER_SELECT"||w==="ORGANIZATION_SELECT"||w==="GROUP_SELECT"||w==="FILE"||w==="STATUS_ASSIGNEE")if(((X=H.record[x])==null?void 0:X.value)===void 0||((U=H.record[x])==null?void 0:U.value)==="")O=(I=H.record[x])==null?void 0:I.value;else{const le=(K=H.record[x])==null?void 0:K.value;let ve=[];for(let he=0;he<le.length;he++)ve.push(le[he].name);O=ve.join()}else if(w==="CATEGORY"||w==="CHECK_BOX"||w==="MULTI_SELECT")if(((q=H.record[x])==null?void 0:q.value)===void 0||((G=H.record[x])==null?void 0:G.value)==="")O=(oe=H.record[x])==null?void 0:oe.value;else{const le=(ue=H.record[x])==null?void 0:ue.value;let ve=[];for(let he=0;he<le.length;he++)ve.push(le[he]);O=ve.join()}else w==="STATUS"&&H.type.includes("process")?O=H.nextStatus.value:O=(pe=H.record[x])==null?void 0:pe.value;return O==null&&(O=""),O};if(this.actionProps=e.actionProps,!("saveField"in e.ActionValue)&&!("joinField1"in e.ActionValue)&&!("joinField2"in e.ActionValue))return r;this.props=e.ActionValue;const s=t.record,l=this.props.joinField1.type,f=this.props.joinField2.type,E=this.props.saveField.type;if(!(E==="SINGLE_LINE_TEXT"||E==="MULTI_LINE_TEXT"||E==="RICH_TEXT"))return t.error="[エラーメッセージ]:結合保存先対応不可。結合しません",t.type.includes("success")&&window.alert("[windows alert]:"+t.error),r={canNext:!1,result:!1},r;let d="";d=o(d,l,this.props.joinField1.code,t);let h="";h=o(h,f,this.props.joinField2.code,t);const y=this.props.delimiter;let S="";if(d===""&&h===""?S="":d===""&&h!==""?S=h:h===""&&d!==""?S=d:d!==""&&h!==""&&(S=`${d}${y}${h}`),!t.type.includes("success"))s[this.props.saveField.code].value=S,window.alert("文字結合行いました。"+this.props.joinField1.name+":"+d+","+this.props.joinField2.name+":"+h+"。");else{const O={app:t.appId,id:t.recordId,record:{[this.props.saveField.code]:{value:S}}};return await kintone.api(kintone.api.url("/k/v1/record",!0),"PUT",O).then(w=>{s[this.props.saveField.code].value=S,t.type.includes("index")?window.alert("文字結合行いました。"+this.props.joinField1.name+":"+d+","+this.props.joinField2.name+":"+h+"。一覧画面更新成功後自動リロードしません。必要に応じて手動リロードください。"):window.alert("文字結合行いました。"+this.props.joinField1.name+":"+d+","+this.props.joinField2.name+":"+h+"。")}).catch(w=>(t.error="エラーが発生しました。結合しません。システム管理者へお問合せください",window.alert(t.error+"error message:"+w),t))}return r={canNext:!0,result:!0},r}catch(o){return t.type.includes("success")&&window.alert("[windows alert]:処理中異常が発生しました。結合しません。システム担当者へお問合せください。errorメッセージ:"+o),t.error="[エラーメッセージ]:処理中異常が発生しました。結合しません。システム担当者へお問合せください。errorメッセージ:"+o,{canNext:!1,result:!1}}}register(){actionAddins[this.name]=this}}new StringJoinAction;class FullWidthAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="全角チェック",this.actionProps=[],this.props={field:{code:""}},this.register()}async process(e,t,r){var s;let o={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue))return o;this.props=e.ActionValue;const l=t.record,f=(s=l[this.props.field.code])==null?void 0:s.value;return f===void 0||f===""?o:this.containsFullWidthChars(f)?(o={canNext:!0,result:!0},o):(l[this.props.field.code].error="半角が含まれています",o.canNext=!1,o)}catch(l){return t.error=l,console.error(l),o.canNext=!1,o}}containsFullWidthChars(e){const t="^[^-~。-゚]+$";return new RegExp(t).test(e)}register(){actionAddins[this.name]=this}}new FullWidthAction;class HalfWidthAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="半角チェック",this.actionProps=[],this.props={field:{code:""}},this.register()}async process(e,t,r){var s;let o={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue))return o;this.props=e.ActionValue;const l=t.record,f=(s=l[this.props.field.code])==null?void 0:s.value;return f===void 0||f===""?o:this.containsHalfWidthChars(f)?(o={canNext:!0,result:!0},o):(l[this.props.field.code].error="全角が含まれています",o.canNext=!1,o)}catch(l){return t.error=l,console.error(l),o.canNext=!1,o}}containsHalfWidthChars(e){const t="^[-~。-゚]+$";return new RegExp(t).test(e)}register(){actionAddins[this.name]=this}}new HalfWidthAction;class LoginUserGetterAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="ログインユーザー取得",this.actionProps=[],this.register(),this.props={verName:{name:""}},this.register()}async process(e,t,r){let o={canNext:!0,result:!1};try{return this.actionProps=e.actionProps,"verName"in e.ActionValue&&(this.props=e.ActionValue,this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=kintone.getLoginUser()),o={canNext:!0,result:!0}),o}catch(s){return t.error=s.message,{canNext:!1,result:!1}}}register(){actionAddins[this.name]=this}}new LoginUserGetterAction;const autoLookup="";var modal={exports:{}},baseComponent={exports:{}},data={exports:{}};/*!
|
||
* Bootstrap data.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredData;function requireData(){return hasRequiredData||(hasRequiredData=1,function(n,e){(function(t,r){n.exports=r()})(commonjsGlobal,function(){const t=new Map;return{set(o,s,l){t.has(o)||t.set(o,new Map);const f=t.get(o);if(!f.has(s)&&f.size!==0){console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(f.keys())[0]}.`);return}f.set(s,l)},get(o,s){return t.has(o)&&t.get(o).get(s)||null},remove(o,s){if(!t.has(o))return;const l=t.get(o);l.delete(s),l.size===0&&t.delete(o)}}})}(data)),data.exports}var eventHandler={exports:{}},util={exports:{}};/*!
|
||
* Bootstrap index.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredUtil;function requireUtil(){return hasRequiredUtil||(hasRequiredUtil=1,function(n,e){(function(t,r){r(e)})(commonjsGlobal,function(t){const s="transitionend",l=I=>(I&&window.CSS&&window.CSS.escape&&(I=I.replace(/#([^\s"#']+)/g,(K,q)=>`#${CSS.escape(q)}`)),I),f=I=>I==null?`${I}`:Object.prototype.toString.call(I).match(/\s([a-z]+)/i)[1].toLowerCase(),E=I=>{do I+=Math.floor(Math.random()*1e6);while(document.getElementById(I));return I},d=I=>{if(!I)return 0;let{transitionDuration:K,transitionDelay:q}=window.getComputedStyle(I);const G=Number.parseFloat(K),oe=Number.parseFloat(q);return!G&&!oe?0:(K=K.split(",")[0],q=q.split(",")[0],(Number.parseFloat(K)+Number.parseFloat(q))*1e3)},h=I=>{I.dispatchEvent(new Event(s))},y=I=>!I||typeof I!="object"?!1:(typeof I.jquery<"u"&&(I=I[0]),typeof I.nodeType<"u"),S=I=>y(I)?I.jquery?I[0]:I:typeof I=="string"&&I.length>0?document.querySelector(l(I)):null,O=I=>{if(!y(I)||I.getClientRects().length===0)return!1;const K=getComputedStyle(I).getPropertyValue("visibility")==="visible",q=I.closest("details:not([open])");if(!q)return K;if(q!==I){const G=I.closest("summary");if(G&&G.parentNode!==q||G===null)return!1}return K},w=I=>!I||I.nodeType!==Node.ELEMENT_NODE||I.classList.contains("disabled")?!0:typeof I.disabled<"u"?I.disabled:I.hasAttribute("disabled")&&I.getAttribute("disabled")!=="false",x=I=>{if(!document.documentElement.attachShadow)return null;if(typeof I.getRootNode=="function"){const K=I.getRootNode();return K instanceof ShadowRoot?K:null}return I instanceof ShadowRoot?I:I.parentNode?x(I.parentNode):null},H=()=>{},D=I=>{I.offsetHeight},Z=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,V=[],Y=I=>{document.readyState==="loading"?(V.length||document.addEventListener("DOMContentLoaded",()=>{for(const K of V)K()}),V.push(I)):I()},ne=()=>document.documentElement.dir==="rtl",B=I=>{Y(()=>{const K=Z();if(K){const q=I.NAME,G=K.fn[q];K.fn[q]=I.jQueryInterface,K.fn[q].Constructor=I,K.fn[q].noConflict=()=>(K.fn[q]=G,I.jQueryInterface)}})},u=(I,K=[],q=I)=>typeof I=="function"?I(...K):q,X=(I,K,q=!0)=>{if(!q){u(I);return}const G=5,oe=d(K)+G;let ue=!1;const pe=({target:le})=>{le===K&&(ue=!0,K.removeEventListener(s,pe),u(I))};K.addEventListener(s,pe),setTimeout(()=>{ue||h(K)},oe)},U=(I,K,q,G)=>{const oe=I.length;let ue=I.indexOf(K);return ue===-1?!q&&G?I[oe-1]:I[0]:(ue+=q?1:-1,G&&(ue=(ue+oe)%oe),I[Math.max(0,Math.min(ue,oe-1))])};t.defineJQueryPlugin=B,t.execute=u,t.executeAfterTransition=X,t.findShadowRoot=x,t.getElement=S,t.getNextActiveElement=U,t.getTransitionDurationFromElement=d,t.getUID=E,t.getjQuery=Z,t.isDisabled=w,t.isElement=y,t.isRTL=ne,t.isVisible=O,t.noop=H,t.onDOMContentLoaded=Y,t.parseSelector=l,t.reflow=D,t.toType=f,t.triggerTransitionEnd=h,Object.defineProperty(t,Symbol.toStringTag,{value:"Module"})})}(util,util.exports)),util.exports}/*!
|
||
* Bootstrap event-handler.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredEventHandler;function requireEventHandler(){return hasRequiredEventHandler||(hasRequiredEventHandler=1,function(n,e){(function(t,r){n.exports=r(requireUtil())})(commonjsGlobal,function(t){const r=/[^.]*(?=\..*)\.|.*/,o=/\..*/,s=/::\d+$/,l={};let f=1;const E={mouseenter:"mouseover",mouseleave:"mouseout"},d=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function h(B,u){return u&&`${u}::${f++}`||B.uidEvent||f++}function y(B){const u=h(B);return B.uidEvent=u,l[u]=l[u]||{},l[u]}function S(B,u){return function X(U){return ne(U,{delegateTarget:B}),X.oneOff&&Y.off(B,U.type,u),u.apply(B,[U])}}function O(B,u,X){return function U(I){const K=B.querySelectorAll(u);for(let{target:q}=I;q&&q!==this;q=q.parentNode)for(const G of K)if(G===q)return ne(I,{delegateTarget:q}),U.oneOff&&Y.off(B,I.type,u,X),X.apply(q,[I])}}function w(B,u,X=null){return Object.values(B).find(U=>U.callable===u&&U.delegationSelector===X)}function x(B,u,X){const U=typeof u=="string",I=U?X:u||X;let K=V(B);return d.has(K)||(K=B),[U,I,K]}function H(B,u,X,U,I){if(typeof u!="string"||!B)return;let[K,q,G]=x(u,X,U);u in E&&(q=(Re=>function(fe){if(!fe.relatedTarget||fe.relatedTarget!==fe.delegateTarget&&!fe.delegateTarget.contains(fe.relatedTarget))return Re.call(this,fe)})(q));const oe=y(B),ue=oe[G]||(oe[G]={}),pe=w(ue,q,K?X:null);if(pe){pe.oneOff=pe.oneOff&&I;return}const le=h(q,u.replace(r,"")),ve=K?O(B,X,q):S(B,q);ve.delegationSelector=K?X:null,ve.callable=q,ve.oneOff=I,ve.uidEvent=le,ue[le]=ve,B.addEventListener(G,ve,K)}function D(B,u,X,U,I){const K=w(u[X],U,I);K&&(B.removeEventListener(X,K,!!I),delete u[X][K.uidEvent])}function Z(B,u,X,U){const I=u[X]||{};for(const[K,q]of Object.entries(I))K.includes(U)&&D(B,u,X,q.callable,q.delegationSelector)}function V(B){return B=B.replace(o,""),E[B]||B}const Y={on(B,u,X,U){H(B,u,X,U,!1)},one(B,u,X,U){H(B,u,X,U,!0)},off(B,u,X,U){if(typeof u!="string"||!B)return;const[I,K,q]=x(u,X,U),G=q!==u,oe=y(B),ue=oe[q]||{},pe=u.startsWith(".");if(typeof K<"u"){if(!Object.keys(ue).length)return;D(B,oe,q,K,I?X:null);return}if(pe)for(const le of Object.keys(oe))Z(B,oe,le,u.slice(1));for(const[le,ve]of Object.entries(ue)){const he=le.replace(s,"");(!G||u.includes(he))&&D(B,oe,q,ve.callable,ve.delegationSelector)}},trigger(B,u,X){if(typeof u!="string"||!B)return null;const U=t.getjQuery(),I=V(u),K=u!==I;let q=null,G=!0,oe=!0,ue=!1;K&&U&&(q=U.Event(u,X),U(B).trigger(q),G=!q.isPropagationStopped(),oe=!q.isImmediatePropagationStopped(),ue=q.isDefaultPrevented());const pe=ne(new Event(u,{bubbles:G,cancelable:!0}),X);return ue&&pe.preventDefault(),oe&&B.dispatchEvent(pe),pe.defaultPrevented&&q&&q.preventDefault(),pe}};function ne(B,u={}){for(const[X,U]of Object.entries(u))try{B[X]=U}catch{Object.defineProperty(B,X,{configurable:!0,get(){return U}})}return B}return Y})}(eventHandler)),eventHandler.exports}var config={exports:{}},manipulator={exports:{}};/*!
|
||
* Bootstrap manipulator.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredManipulator;function requireManipulator(){return hasRequiredManipulator||(hasRequiredManipulator=1,function(n,e){(function(t,r){n.exports=r()})(commonjsGlobal,function(){function t(s){if(s==="true")return!0;if(s==="false")return!1;if(s===Number(s).toString())return Number(s);if(s===""||s==="null")return null;if(typeof s!="string")return s;try{return JSON.parse(decodeURIComponent(s))}catch{return s}}function r(s){return s.replace(/[A-Z]/g,l=>`-${l.toLowerCase()}`)}return{setDataAttribute(s,l,f){s.setAttribute(`data-bs-${r(l)}`,f)},removeDataAttribute(s,l){s.removeAttribute(`data-bs-${r(l)}`)},getDataAttributes(s){if(!s)return{};const l={},f=Object.keys(s.dataset).filter(E=>E.startsWith("bs")&&!E.startsWith("bsConfig"));for(const E of f){let d=E.replace(/^bs/,"");d=d.charAt(0).toLowerCase()+d.slice(1,d.length),l[d]=t(s.dataset[E])}return l},getDataAttribute(s,l){return t(s.getAttribute(`data-bs-${r(l)}`))}}})}(manipulator)),manipulator.exports}/*!
|
||
* Bootstrap config.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredConfig;function requireConfig(){return hasRequiredConfig||(hasRequiredConfig=1,function(n,e){(function(t,r){n.exports=r(requireManipulator(),requireUtil())})(commonjsGlobal,function(t,r){class o{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(l){return l=this._mergeConfigObj(l),l=this._configAfterMerge(l),this._typeCheckConfig(l),l}_configAfterMerge(l){return l}_mergeConfigObj(l,f){const E=r.isElement(f)?t.getDataAttribute(f,"config"):{};return{...this.constructor.Default,...typeof E=="object"?E:{},...r.isElement(f)?t.getDataAttributes(f):{},...typeof l=="object"?l:{}}}_typeCheckConfig(l,f=this.constructor.DefaultType){for(const[E,d]of Object.entries(f)){const h=l[E],y=r.isElement(h)?"element":r.toType(h);if(!new RegExp(d).test(y))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${E}" provided type "${y}" but expected type "${d}".`)}}}return o})}(config)),config.exports}/*!
|
||
* Bootstrap base-component.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredBaseComponent;function requireBaseComponent(){return hasRequiredBaseComponent||(hasRequiredBaseComponent=1,function(n,e){(function(t,r){n.exports=r(requireData(),requireEventHandler(),requireConfig(),requireUtil())})(commonjsGlobal,function(t,r,o,s){const l="5.3.3";class f extends o{constructor(d,h){super(),d=s.getElement(d),d&&(this._element=d,this._config=this._getConfig(h),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),r.off(this._element,this.constructor.EVENT_KEY);for(const d of Object.getOwnPropertyNames(this))this[d]=null}_queueCallback(d,h,y=!0){s.executeAfterTransition(d,h,y)}_getConfig(d){return d=this._mergeConfigObj(d,this._element),d=this._configAfterMerge(d),this._typeCheckConfig(d),d}static getInstance(d){return t.get(s.getElement(d),this.DATA_KEY)}static getOrCreateInstance(d,h={}){return this.getInstance(d)||new this(d,typeof h=="object"?h:null)}static get VERSION(){return l}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(d){return`${d}${this.EVENT_KEY}`}}return f})}(baseComponent)),baseComponent.exports}var selectorEngine={exports:{}};/*!
|
||
* Bootstrap selector-engine.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredSelectorEngine;function requireSelectorEngine(){return hasRequiredSelectorEngine||(hasRequiredSelectorEngine=1,function(n,e){(function(t,r){n.exports=r(requireUtil())})(commonjsGlobal,function(t){const r=s=>{let l=s.getAttribute("data-bs-target");if(!l||l==="#"){let f=s.getAttribute("href");if(!f||!f.includes("#")&&!f.startsWith("."))return null;f.includes("#")&&!f.startsWith("#")&&(f=`#${f.split("#")[1]}`),l=f&&f!=="#"?f.trim():null}return l?l.split(",").map(f=>t.parseSelector(f)).join(","):null},o={find(s,l=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(l,s))},findOne(s,l=document.documentElement){return Element.prototype.querySelector.call(l,s)},children(s,l){return[].concat(...s.children).filter(f=>f.matches(l))},parents(s,l){const f=[];let E=s.parentNode.closest(l);for(;E;)f.push(E),E=E.parentNode.closest(l);return f},prev(s,l){let f=s.previousElementSibling;for(;f;){if(f.matches(l))return[f];f=f.previousElementSibling}return[]},next(s,l){let f=s.nextElementSibling;for(;f;){if(f.matches(l))return[f];f=f.nextElementSibling}return[]},focusableChildren(s){const l=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(f=>`${f}:not([tabindex^="-"])`).join(",");return this.find(l,s).filter(f=>!t.isDisabled(f)&&t.isVisible(f))},getSelectorFromElement(s){const l=r(s);return l&&o.findOne(l)?l:null},getElementFromSelector(s){const l=r(s);return l?o.findOne(l):null},getMultipleElementsFromSelector(s){const l=r(s);return l?o.find(l):[]}};return o})}(selectorEngine)),selectorEngine.exports}var backdrop={exports:{}};/*!
|
||
* Bootstrap backdrop.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredBackdrop;function requireBackdrop(){return hasRequiredBackdrop||(hasRequiredBackdrop=1,function(n,e){(function(t,r){n.exports=r(requireEventHandler(),requireConfig(),requireUtil())})(commonjsGlobal,function(t,r,o){const s="backdrop",l="fade",f="show",E=`mousedown.bs.${s}`,d={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},h={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class y extends r{constructor(O){super(),this._config=this._getConfig(O),this._isAppended=!1,this._element=null}static get Default(){return d}static get DefaultType(){return h}static get NAME(){return s}show(O){if(!this._config.isVisible){o.execute(O);return}this._append();const w=this._getElement();this._config.isAnimated&&o.reflow(w),w.classList.add(f),this._emulateAnimation(()=>{o.execute(O)})}hide(O){if(!this._config.isVisible){o.execute(O);return}this._getElement().classList.remove(f),this._emulateAnimation(()=>{this.dispose(),o.execute(O)})}dispose(){this._isAppended&&(t.off(this._element,E),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const O=document.createElement("div");O.className=this._config.className,this._config.isAnimated&&O.classList.add(l),this._element=O}return this._element}_configAfterMerge(O){return O.rootElement=o.getElement(O.rootElement),O}_append(){if(this._isAppended)return;const O=this._getElement();this._config.rootElement.append(O),t.on(O,E,()=>{o.execute(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(O){o.executeAfterTransition(O,this._getElement(),this._config.isAnimated)}}return y})}(backdrop)),backdrop.exports}var componentFunctions={exports:{}};/*!
|
||
* Bootstrap component-functions.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredComponentFunctions;function requireComponentFunctions(){return hasRequiredComponentFunctions||(hasRequiredComponentFunctions=1,function(n,e){(function(t,r){r(e,requireEventHandler(),requireSelectorEngine(),requireUtil())})(commonjsGlobal,function(t,r,o,s){const l=(f,E="hide")=>{const d=`click.dismiss${f.EVENT_KEY}`,h=f.NAME;r.on(document,d,`[data-bs-dismiss="${h}"]`,function(y){if(["A","AREA"].includes(this.tagName)&&y.preventDefault(),s.isDisabled(this))return;const S=o.getElementFromSelector(this)||this.closest(`.${h}`);f.getOrCreateInstance(S)[E]()})};t.enableDismissTrigger=l,Object.defineProperty(t,Symbol.toStringTag,{value:"Module"})})}(componentFunctions,componentFunctions.exports)),componentFunctions.exports}var focustrap={exports:{}};/*!
|
||
* Bootstrap focustrap.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredFocustrap;function requireFocustrap(){return hasRequiredFocustrap||(hasRequiredFocustrap=1,function(n,e){(function(t,r){n.exports=r(requireEventHandler(),requireSelectorEngine(),requireConfig())})(commonjsGlobal,function(t,r,o){const s="focustrap",f=".bs.focustrap",E=`focusin${f}`,d=`keydown.tab${f}`,h="Tab",y="forward",S="backward",O={autofocus:!0,trapElement:null},w={autofocus:"boolean",trapElement:"element"};class x extends o{constructor(D){super(),this._config=this._getConfig(D),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return O}static get DefaultType(){return w}static get NAME(){return s}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),t.off(document,f),t.on(document,E,D=>this._handleFocusin(D)),t.on(document,d,D=>this._handleKeydown(D)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,t.off(document,f))}_handleFocusin(D){const{trapElement:Z}=this._config;if(D.target===document||D.target===Z||Z.contains(D.target))return;const V=r.focusableChildren(Z);V.length===0?Z.focus():this._lastTabNavDirection===S?V[V.length-1].focus():V[0].focus()}_handleKeydown(D){D.key===h&&(this._lastTabNavDirection=D.shiftKey?S:y)}}return x})}(focustrap)),focustrap.exports}var scrollbar={exports:{}};/*!
|
||
* Bootstrap scrollbar.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredScrollbar;function requireScrollbar(){return hasRequiredScrollbar||(hasRequiredScrollbar=1,function(n,e){(function(t,r){n.exports=r(requireManipulator(),requireSelectorEngine(),requireUtil())})(commonjsGlobal,function(t,r,o){const s=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",l=".sticky-top",f="padding-right",E="margin-right";class d{constructor(){this._element=document.body}getWidth(){const y=document.documentElement.clientWidth;return Math.abs(window.innerWidth-y)}hide(){const y=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,f,S=>S+y),this._setElementAttributes(s,f,S=>S+y),this._setElementAttributes(l,E,S=>S-y)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,f),this._resetElementAttributes(s,f),this._resetElementAttributes(l,E)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(y,S,O){const w=this.getWidth(),x=H=>{if(H!==this._element&&window.innerWidth>H.clientWidth+w)return;this._saveInitialAttribute(H,S);const D=window.getComputedStyle(H).getPropertyValue(S);H.style.setProperty(S,`${O(Number.parseFloat(D))}px`)};this._applyManipulationCallback(y,x)}_saveInitialAttribute(y,S){const O=y.style.getPropertyValue(S);O&&t.setDataAttribute(y,S,O)}_resetElementAttributes(y,S){const O=w=>{const x=t.getDataAttribute(w,S);if(x===null){w.style.removeProperty(S);return}t.removeDataAttribute(w,S),w.style.setProperty(S,x)};this._applyManipulationCallback(y,O)}_applyManipulationCallback(y,S){if(o.isElement(y)){S(y);return}for(const O of r.find(y,this._element))S(O)}}return d})}(scrollbar)),scrollbar.exports}/*!
|
||
* Bootstrap modal.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/(function(n,e){(function(t,r){n.exports=r(requireBaseComponent(),requireEventHandler(),requireSelectorEngine(),requireBackdrop(),requireComponentFunctions(),requireFocustrap(),requireUtil(),requireScrollbar())})(commonjsGlobal,function(t,r,o,s,l,f,E,d){const h="modal",S=".bs.modal",O=".data-api",w="Escape",x=`hide${S}`,H=`hidePrevented${S}`,D=`hidden${S}`,Z=`show${S}`,V=`shown${S}`,Y=`resize${S}`,ne=`click.dismiss${S}`,B=`mousedown.dismiss${S}`,u=`keydown.dismiss${S}`,X=`click${S}${O}`,U="modal-open",I="fade",K="show",q="modal-static",G=".modal.show",oe=".modal-dialog",ue=".modal-body",pe='[data-bs-toggle="modal"]',le={backdrop:!0,focus:!0,keyboard:!0},ve={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class he extends t{constructor(fe,be){super(fe,be),this._dialog=o.findOne(oe,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new d,this._addEventListeners()}static get Default(){return le}static get DefaultType(){return ve}static get NAME(){return h}toggle(fe){return this._isShown?this.hide():this.show(fe)}show(fe){this._isShown||this._isTransitioning||r.trigger(this._element,Z,{relatedTarget:fe}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(U),this._adjustDialog(),this._backdrop.show(()=>this._showElement(fe)))}hide(){!this._isShown||this._isTransitioning||r.trigger(this._element,x).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(K),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){r.off(window,S),r.off(this._dialog,S),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new s({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new f({trapElement:this._element})}_showElement(fe){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const be=o.findOne(ue,this._dialog);be&&(be.scrollTop=0),E.reflow(this._element),this._element.classList.add(K);const we=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,r.trigger(this._element,V,{relatedTarget:fe})};this._queueCallback(we,this._dialog,this._isAnimated())}_addEventListeners(){r.on(this._element,u,fe=>{if(fe.key===w){if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}}),r.on(window,Y,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),r.on(this._element,B,fe=>{r.one(this._element,ne,be=>{if(!(this._element!==fe.target||this._element!==be.target)){if(this._config.backdrop==="static"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(U),this._resetAdjustments(),this._scrollBar.reset(),r.trigger(this._element,D)})}_isAnimated(){return this._element.classList.contains(I)}_triggerBackdropTransition(){if(r.trigger(this._element,H).defaultPrevented)return;const be=this._element.scrollHeight>document.documentElement.clientHeight,we=this._element.style.overflowY;we==="hidden"||this._element.classList.contains(q)||(be||(this._element.style.overflowY="hidden"),this._element.classList.add(q),this._queueCallback(()=>{this._element.classList.remove(q),this._queueCallback(()=>{this._element.style.overflowY=we},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const fe=this._element.scrollHeight>document.documentElement.clientHeight,be=this._scrollBar.getWidth(),we=be>0;if(we&&!fe){const xe=E.isRTL()?"paddingLeft":"paddingRight";this._element.style[xe]=`${be}px`}if(!we&&fe){const xe=E.isRTL()?"paddingRight":"paddingLeft";this._element.style[xe]=`${be}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(fe,be){return this.each(function(){const we=he.getOrCreateInstance(this,fe);if(typeof fe=="string"){if(typeof we[fe]>"u")throw new TypeError(`No method named "${fe}"`);we[fe](be)}})}}return r.on(document,X,pe,function(Re){const fe=o.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&Re.preventDefault(),r.one(fe,Z,xe=>{xe.defaultPrevented||r.one(fe,D,()=>{E.isVisible(this)&&this.focus()})});const be=o.findOne(G);be&&he.getInstance(be).hide(),he.getOrCreateInstance(fe).toggle(this)}),l.enableDismissTrigger(he),E.defineJQueryPlugin(he),he})})(modal);var top="top",bottom="bottom",right="right",left="left",auto="auto",basePlacements=[top,bottom,right,left],start="start",end="end",clippingParents="clippingParents",viewport="viewport",popper="popper",reference="reference",variationPlacements=basePlacements.reduce(function(n,e){return n.concat([e+"-"+start,e+"-"+end])},[]),placements=[].concat(basePlacements,[auto]).reduce(function(n,e){return n.concat([e,e+"-"+start,e+"-"+end])},[]),beforeRead="beforeRead",read="read",afterRead="afterRead",beforeMain="beforeMain",main="main",afterMain="afterMain",beforeWrite="beforeWrite",write="write",afterWrite="afterWrite",modifierPhases=[beforeRead,read,afterRead,beforeMain,main,afterMain,beforeWrite,write,afterWrite];function getNodeName(n){return n?(n.nodeName||"").toLowerCase():null}function getWindow(n){if(n==null)return window;if(n.toString()!=="[object Window]"){var e=n.ownerDocument;return e&&e.defaultView||window}return n}function isElement$1(n){var e=getWindow(n).Element;return n instanceof e||n instanceof Element}function isHTMLElement(n){var e=getWindow(n).HTMLElement;return n instanceof e||n instanceof HTMLElement}function isShadowRoot(n){if(typeof ShadowRoot>"u")return!1;var e=getWindow(n).ShadowRoot;return n instanceof e||n instanceof ShadowRoot}function applyStyles(n){var e=n.state;Object.keys(e.elements).forEach(function(t){var r=e.styles[t]||{},o=e.attributes[t]||{},s=e.elements[t];!isHTMLElement(s)||!getNodeName(s)||(Object.assign(s.style,r),Object.keys(o).forEach(function(l){var f=o[l];f===!1?s.removeAttribute(l):s.setAttribute(l,f===!0?"":f)}))})}function effect$2(n){var e=n.state,t={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,t.popper),e.styles=t,e.elements.arrow&&Object.assign(e.elements.arrow.style,t.arrow),function(){Object.keys(e.elements).forEach(function(r){var o=e.elements[r],s=e.attributes[r]||{},l=Object.keys(e.styles.hasOwnProperty(r)?e.styles[r]:t[r]),f=l.reduce(function(E,d){return E[d]="",E},{});!isHTMLElement(o)||!getNodeName(o)||(Object.assign(o.style,f),Object.keys(s).forEach(function(E){o.removeAttribute(E)}))})}}const applyStyles$1={name:"applyStyles",enabled:!0,phase:"write",fn:applyStyles,effect:effect$2,requires:["computeStyles"]};function getBasePlacement(n){return n.split("-")[0]}var max=Math.max,min=Math.min,round=Math.round;function getUAString(){var n=navigator.userAgentData;return n!=null&&n.brands&&Array.isArray(n.brands)?n.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function isLayoutViewport(){return!/^((?!chrome|android).)*safari/i.test(getUAString())}function getBoundingClientRect(n,e,t){e===void 0&&(e=!1),t===void 0&&(t=!1);var r=n.getBoundingClientRect(),o=1,s=1;e&&isHTMLElement(n)&&(o=n.offsetWidth>0&&round(r.width)/n.offsetWidth||1,s=n.offsetHeight>0&&round(r.height)/n.offsetHeight||1);var l=isElement$1(n)?getWindow(n):window,f=l.visualViewport,E=!isLayoutViewport()&&t,d=(r.left+(E&&f?f.offsetLeft:0))/o,h=(r.top+(E&&f?f.offsetTop:0))/s,y=r.width/o,S=r.height/s;return{width:y,height:S,top:h,right:d+y,bottom:h+S,left:d,x:d,y:h}}function getLayoutRect(n){var e=getBoundingClientRect(n),t=n.offsetWidth,r=n.offsetHeight;return Math.abs(e.width-t)<=1&&(t=e.width),Math.abs(e.height-r)<=1&&(r=e.height),{x:n.offsetLeft,y:n.offsetTop,width:t,height:r}}function contains(n,e){var t=e.getRootNode&&e.getRootNode();if(n.contains(e))return!0;if(t&&isShadowRoot(t)){var r=e;do{if(r&&n.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function getComputedStyle$1(n){return getWindow(n).getComputedStyle(n)}function isTableElement(n){return["table","td","th"].indexOf(getNodeName(n))>=0}function getDocumentElement(n){return((isElement$1(n)?n.ownerDocument:n.document)||window.document).documentElement}function getParentNode(n){return getNodeName(n)==="html"?n:n.assignedSlot||n.parentNode||(isShadowRoot(n)?n.host:null)||getDocumentElement(n)}function getTrueOffsetParent(n){return!isHTMLElement(n)||getComputedStyle$1(n).position==="fixed"?null:n.offsetParent}function getContainingBlock(n){var e=/firefox/i.test(getUAString()),t=/Trident/i.test(getUAString());if(t&&isHTMLElement(n)){var r=getComputedStyle$1(n);if(r.position==="fixed")return null}var o=getParentNode(n);for(isShadowRoot(o)&&(o=o.host);isHTMLElement(o)&&["html","body"].indexOf(getNodeName(o))<0;){var s=getComputedStyle$1(o);if(s.transform!=="none"||s.perspective!=="none"||s.contain==="paint"||["transform","perspective"].indexOf(s.willChange)!==-1||e&&s.willChange==="filter"||e&&s.filter&&s.filter!=="none")return o;o=o.parentNode}return null}function getOffsetParent(n){for(var e=getWindow(n),t=getTrueOffsetParent(n);t&&isTableElement(t)&&getComputedStyle$1(t).position==="static";)t=getTrueOffsetParent(t);return t&&(getNodeName(t)==="html"||getNodeName(t)==="body"&&getComputedStyle$1(t).position==="static")?e:t||getContainingBlock(n)||e}function getMainAxisFromPlacement(n){return["top","bottom"].indexOf(n)>=0?"x":"y"}function within(n,e,t){return max(n,min(e,t))}function withinMaxClamp(n,e,t){var r=within(n,e,t);return r>t?t:r}function getFreshSideObject(){return{top:0,right:0,bottom:0,left:0}}function mergePaddingObject(n){return Object.assign({},getFreshSideObject(),n)}function expandToHashMap(n,e){return e.reduce(function(t,r){return t[r]=n,t},{})}var toPaddingObject=function n(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,mergePaddingObject(typeof e!="number"?e:expandToHashMap(e,basePlacements))};function arrow(n){var e,t=n.state,r=n.name,o=n.options,s=t.elements.arrow,l=t.modifiersData.popperOffsets,f=getBasePlacement(t.placement),E=getMainAxisFromPlacement(f),d=[left,right].indexOf(f)>=0,h=d?"height":"width";if(!(!s||!l)){var y=toPaddingObject(o.padding,t),S=getLayoutRect(s),O=E==="y"?top:left,w=E==="y"?bottom:right,x=t.rects.reference[h]+t.rects.reference[E]-l[E]-t.rects.popper[h],H=l[E]-t.rects.reference[E],D=getOffsetParent(s),Z=D?E==="y"?D.clientHeight||0:D.clientWidth||0:0,V=x/2-H/2,Y=y[O],ne=Z-S[h]-y[w],B=Z/2-S[h]/2+V,u=within(Y,B,ne),X=E;t.modifiersData[r]=(e={},e[X]=u,e.centerOffset=u-B,e)}}function effect$1(n){var e=n.state,t=n.options,r=t.element,o=r===void 0?"[data-popper-arrow]":r;o!=null&&(typeof o=="string"&&(o=e.elements.popper.querySelector(o),!o)||contains(e.elements.popper,o)&&(e.elements.arrow=o))}const arrow$1={name:"arrow",enabled:!0,phase:"main",fn:arrow,effect:effect$1,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function getVariation(n){return n.split("-")[1]}var unsetSides={top:"auto",right:"auto",bottom:"auto",left:"auto"};function roundOffsetsByDPR(n,e){var t=n.x,r=n.y,o=e.devicePixelRatio||1;return{x:round(t*o)/o||0,y:round(r*o)/o||0}}function mapToStyles(n){var e,t=n.popper,r=n.popperRect,o=n.placement,s=n.variation,l=n.offsets,f=n.position,E=n.gpuAcceleration,d=n.adaptive,h=n.roundOffsets,y=n.isFixed,S=l.x,O=S===void 0?0:S,w=l.y,x=w===void 0?0:w,H=typeof h=="function"?h({x:O,y:x}):{x:O,y:x};O=H.x,x=H.y;var D=l.hasOwnProperty("x"),Z=l.hasOwnProperty("y"),V=left,Y=top,ne=window;if(d){var B=getOffsetParent(t),u="clientHeight",X="clientWidth";if(B===getWindow(t)&&(B=getDocumentElement(t),getComputedStyle$1(B).position!=="static"&&f==="absolute"&&(u="scrollHeight",X="scrollWidth")),B=B,o===top||(o===left||o===right)&&s===end){Y=bottom;var U=y&&B===ne&&ne.visualViewport?ne.visualViewport.height:B[u];x-=U-r.height,x*=E?1:-1}if(o===left||(o===top||o===bottom)&&s===end){V=right;var I=y&&B===ne&&ne.visualViewport?ne.visualViewport.width:B[X];O-=I-r.width,O*=E?1:-1}}var K=Object.assign({position:f},d&&unsetSides),q=h===!0?roundOffsetsByDPR({x:O,y:x},getWindow(t)):{x:O,y:x};if(O=q.x,x=q.y,E){var G;return Object.assign({},K,(G={},G[Y]=Z?"0":"",G[V]=D?"0":"",G.transform=(ne.devicePixelRatio||1)<=1?"translate("+O+"px, "+x+"px)":"translate3d("+O+"px, "+x+"px, 0)",G))}return Object.assign({},K,(e={},e[Y]=Z?x+"px":"",e[V]=D?O+"px":"",e.transform="",e))}function computeStyles(n){var e=n.state,t=n.options,r=t.gpuAcceleration,o=r===void 0?!0:r,s=t.adaptive,l=s===void 0?!0:s,f=t.roundOffsets,E=f===void 0?!0:f,d={placement:getBasePlacement(e.placement),variation:getVariation(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:o,isFixed:e.options.strategy==="fixed"};e.modifiersData.popperOffsets!=null&&(e.styles.popper=Object.assign({},e.styles.popper,mapToStyles(Object.assign({},d,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:l,roundOffsets:E})))),e.modifiersData.arrow!=null&&(e.styles.arrow=Object.assign({},e.styles.arrow,mapToStyles(Object.assign({},d,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:E})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})}const computeStyles$1={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:computeStyles,data:{}};var passive={passive:!0};function effect(n){var e=n.state,t=n.instance,r=n.options,o=r.scroll,s=o===void 0?!0:o,l=r.resize,f=l===void 0?!0:l,E=getWindow(e.elements.popper),d=[].concat(e.scrollParents.reference,e.scrollParents.popper);return s&&d.forEach(function(h){h.addEventListener("scroll",t.update,passive)}),f&&E.addEventListener("resize",t.update,passive),function(){s&&d.forEach(function(h){h.removeEventListener("scroll",t.update,passive)}),f&&E.removeEventListener("resize",t.update,passive)}}const eventListeners={name:"eventListeners",enabled:!0,phase:"write",fn:function n(){},effect,data:{}};var hash$1={left:"right",right:"left",bottom:"top",top:"bottom"};function getOppositePlacement(n){return n.replace(/left|right|bottom|top/g,function(e){return hash$1[e]})}var hash={start:"end",end:"start"};function getOppositeVariationPlacement(n){return n.replace(/start|end/g,function(e){return hash[e]})}function getWindowScroll(n){var e=getWindow(n),t=e.pageXOffset,r=e.pageYOffset;return{scrollLeft:t,scrollTop:r}}function getWindowScrollBarX(n){return getBoundingClientRect(getDocumentElement(n)).left+getWindowScroll(n).scrollLeft}function getViewportRect(n,e){var t=getWindow(n),r=getDocumentElement(n),o=t.visualViewport,s=r.clientWidth,l=r.clientHeight,f=0,E=0;if(o){s=o.width,l=o.height;var d=isLayoutViewport();(d||!d&&e==="fixed")&&(f=o.offsetLeft,E=o.offsetTop)}return{width:s,height:l,x:f+getWindowScrollBarX(n),y:E}}function getDocumentRect(n){var e,t=getDocumentElement(n),r=getWindowScroll(n),o=(e=n.ownerDocument)==null?void 0:e.body,s=max(t.scrollWidth,t.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),l=max(t.scrollHeight,t.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+getWindowScrollBarX(n),E=-r.scrollTop;return getComputedStyle$1(o||t).direction==="rtl"&&(f+=max(t.clientWidth,o?o.clientWidth:0)-s),{width:s,height:l,x:f,y:E}}function isScrollParent(n){var e=getComputedStyle$1(n),t=e.overflow,r=e.overflowX,o=e.overflowY;return/auto|scroll|overlay|hidden/.test(t+o+r)}function getScrollParent(n){return["html","body","#document"].indexOf(getNodeName(n))>=0?n.ownerDocument.body:isHTMLElement(n)&&isScrollParent(n)?n:getScrollParent(getParentNode(n))}function listScrollParents(n,e){var t;e===void 0&&(e=[]);var r=getScrollParent(n),o=r===((t=n.ownerDocument)==null?void 0:t.body),s=getWindow(r),l=o?[s].concat(s.visualViewport||[],isScrollParent(r)?r:[]):r,f=e.concat(l);return o?f:f.concat(listScrollParents(getParentNode(l)))}function rectToClientRect(n){return Object.assign({},n,{left:n.x,top:n.y,right:n.x+n.width,bottom:n.y+n.height})}function getInnerBoundingClientRect(n,e){var t=getBoundingClientRect(n,!1,e==="fixed");return t.top=t.top+n.clientTop,t.left=t.left+n.clientLeft,t.bottom=t.top+n.clientHeight,t.right=t.left+n.clientWidth,t.width=n.clientWidth,t.height=n.clientHeight,t.x=t.left,t.y=t.top,t}function getClientRectFromMixedType(n,e,t){return e===viewport?rectToClientRect(getViewportRect(n,t)):isElement$1(e)?getInnerBoundingClientRect(e,t):rectToClientRect(getDocumentRect(getDocumentElement(n)))}function getClippingParents(n){var e=listScrollParents(getParentNode(n)),t=["absolute","fixed"].indexOf(getComputedStyle$1(n).position)>=0,r=t&&isHTMLElement(n)?getOffsetParent(n):n;return isElement$1(r)?e.filter(function(o){return isElement$1(o)&&contains(o,r)&&getNodeName(o)!=="body"}):[]}function getClippingRect(n,e,t,r){var o=e==="clippingParents"?getClippingParents(n):[].concat(e),s=[].concat(o,[t]),l=s[0],f=s.reduce(function(E,d){var h=getClientRectFromMixedType(n,d,r);return E.top=max(h.top,E.top),E.right=min(h.right,E.right),E.bottom=min(h.bottom,E.bottom),E.left=max(h.left,E.left),E},getClientRectFromMixedType(n,l,r));return f.width=f.right-f.left,f.height=f.bottom-f.top,f.x=f.left,f.y=f.top,f}function computeOffsets(n){var e=n.reference,t=n.element,r=n.placement,o=r?getBasePlacement(r):null,s=r?getVariation(r):null,l=e.x+e.width/2-t.width/2,f=e.y+e.height/2-t.height/2,E;switch(o){case top:E={x:l,y:e.y-t.height};break;case bottom:E={x:l,y:e.y+e.height};break;case right:E={x:e.x+e.width,y:f};break;case left:E={x:e.x-t.width,y:f};break;default:E={x:e.x,y:e.y}}var d=o?getMainAxisFromPlacement(o):null;if(d!=null){var h=d==="y"?"height":"width";switch(s){case start:E[d]=E[d]-(e[h]/2-t[h]/2);break;case end:E[d]=E[d]+(e[h]/2-t[h]/2);break}}return E}function detectOverflow(n,e){e===void 0&&(e={});var t=e,r=t.placement,o=r===void 0?n.placement:r,s=t.strategy,l=s===void 0?n.strategy:s,f=t.boundary,E=f===void 0?clippingParents:f,d=t.rootBoundary,h=d===void 0?viewport:d,y=t.elementContext,S=y===void 0?popper:y,O=t.altBoundary,w=O===void 0?!1:O,x=t.padding,H=x===void 0?0:x,D=mergePaddingObject(typeof H!="number"?H:expandToHashMap(H,basePlacements)),Z=S===popper?reference:popper,V=n.rects.popper,Y=n.elements[w?Z:S],ne=getClippingRect(isElement$1(Y)?Y:Y.contextElement||getDocumentElement(n.elements.popper),E,h,l),B=getBoundingClientRect(n.elements.reference),u=computeOffsets({reference:B,element:V,strategy:"absolute",placement:o}),X=rectToClientRect(Object.assign({},V,u)),U=S===popper?X:B,I={top:ne.top-U.top+D.top,bottom:U.bottom-ne.bottom+D.bottom,left:ne.left-U.left+D.left,right:U.right-ne.right+D.right},K=n.modifiersData.offset;if(S===popper&&K){var q=K[o];Object.keys(I).forEach(function(G){var oe=[right,bottom].indexOf(G)>=0?1:-1,ue=[top,bottom].indexOf(G)>=0?"y":"x";I[G]+=q[ue]*oe})}return I}function computeAutoPlacement(n,e){e===void 0&&(e={});var t=e,r=t.placement,o=t.boundary,s=t.rootBoundary,l=t.padding,f=t.flipVariations,E=t.allowedAutoPlacements,d=E===void 0?placements:E,h=getVariation(r),y=h?f?variationPlacements:variationPlacements.filter(function(w){return getVariation(w)===h}):basePlacements,S=y.filter(function(w){return d.indexOf(w)>=0});S.length===0&&(S=y);var O=S.reduce(function(w,x){return w[x]=detectOverflow(n,{placement:x,boundary:o,rootBoundary:s,padding:l})[getBasePlacement(x)],w},{});return Object.keys(O).sort(function(w,x){return O[w]-O[x]})}function getExpandedFallbackPlacements(n){if(getBasePlacement(n)===auto)return[];var e=getOppositePlacement(n);return[getOppositeVariationPlacement(n),e,getOppositeVariationPlacement(e)]}function flip(n){var e=n.state,t=n.options,r=n.name;if(!e.modifiersData[r]._skip){for(var o=t.mainAxis,s=o===void 0?!0:o,l=t.altAxis,f=l===void 0?!0:l,E=t.fallbackPlacements,d=t.padding,h=t.boundary,y=t.rootBoundary,S=t.altBoundary,O=t.flipVariations,w=O===void 0?!0:O,x=t.allowedAutoPlacements,H=e.options.placement,D=getBasePlacement(H),Z=D===H,V=E||(Z||!w?[getOppositePlacement(H)]:getExpandedFallbackPlacements(H)),Y=[H].concat(V).reduce(function(xe,j){return xe.concat(getBasePlacement(j)===auto?computeAutoPlacement(e,{placement:j,boundary:h,rootBoundary:y,padding:d,flipVariations:w,allowedAutoPlacements:x}):j)},[]),ne=e.rects.reference,B=e.rects.popper,u=new Map,X=!0,U=Y[0],I=0;I<Y.length;I++){var K=Y[I],q=getBasePlacement(K),G=getVariation(K)===start,oe=[top,bottom].indexOf(q)>=0,ue=oe?"width":"height",pe=detectOverflow(e,{placement:K,boundary:h,rootBoundary:y,altBoundary:S,padding:d}),le=oe?G?right:left:G?bottom:top;ne[ue]>B[ue]&&(le=getOppositePlacement(le));var ve=getOppositePlacement(le),he=[];if(s&&he.push(pe[q]<=0),f&&he.push(pe[le]<=0,pe[ve]<=0),he.every(function(xe){return xe})){U=K,X=!1;break}u.set(K,he)}if(X)for(var Re=w?3:1,fe=function(j){var ee=Y.find(function(Te){var $e=u.get(Te);if($e)return $e.slice(0,j).every(function(Me){return Me})});if(ee)return U=ee,"break"},be=Re;be>0;be--){var we=fe(be);if(we==="break")break}e.placement!==U&&(e.modifiersData[r]._skip=!0,e.placement=U,e.reset=!0)}}const flip$1={name:"flip",enabled:!0,phase:"main",fn:flip,requiresIfExists:["offset"],data:{_skip:!1}};function getSideOffsets(n,e,t){return t===void 0&&(t={x:0,y:0}),{top:n.top-e.height-t.y,right:n.right-e.width+t.x,bottom:n.bottom-e.height+t.y,left:n.left-e.width-t.x}}function isAnySideFullyClipped(n){return[top,right,bottom,left].some(function(e){return n[e]>=0})}function hide(n){var e=n.state,t=n.name,r=e.rects.reference,o=e.rects.popper,s=e.modifiersData.preventOverflow,l=detectOverflow(e,{elementContext:"reference"}),f=detectOverflow(e,{altBoundary:!0}),E=getSideOffsets(l,r),d=getSideOffsets(f,o,s),h=isAnySideFullyClipped(E),y=isAnySideFullyClipped(d);e.modifiersData[t]={referenceClippingOffsets:E,popperEscapeOffsets:d,isReferenceHidden:h,hasPopperEscaped:y},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":y})}const hide$1={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:hide};function distanceAndSkiddingToXY(n,e,t){var r=getBasePlacement(n),o=[left,top].indexOf(r)>=0?-1:1,s=typeof t=="function"?t(Object.assign({},e,{placement:n})):t,l=s[0],f=s[1];return l=l||0,f=(f||0)*o,[left,right].indexOf(r)>=0?{x:f,y:l}:{x:l,y:f}}function offset(n){var e=n.state,t=n.options,r=n.name,o=t.offset,s=o===void 0?[0,0]:o,l=placements.reduce(function(h,y){return h[y]=distanceAndSkiddingToXY(y,e.rects,s),h},{}),f=l[e.placement],E=f.x,d=f.y;e.modifiersData.popperOffsets!=null&&(e.modifiersData.popperOffsets.x+=E,e.modifiersData.popperOffsets.y+=d),e.modifiersData[r]=l}const offset$1={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:offset};function popperOffsets(n){var e=n.state,t=n.name;e.modifiersData[t]=computeOffsets({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})}const popperOffsets$1={name:"popperOffsets",enabled:!0,phase:"read",fn:popperOffsets,data:{}};function getAltAxis(n){return n==="x"?"y":"x"}function preventOverflow(n){var e=n.state,t=n.options,r=n.name,o=t.mainAxis,s=o===void 0?!0:o,l=t.altAxis,f=l===void 0?!1:l,E=t.boundary,d=t.rootBoundary,h=t.altBoundary,y=t.padding,S=t.tether,O=S===void 0?!0:S,w=t.tetherOffset,x=w===void 0?0:w,H=detectOverflow(e,{boundary:E,rootBoundary:d,padding:y,altBoundary:h}),D=getBasePlacement(e.placement),Z=getVariation(e.placement),V=!Z,Y=getMainAxisFromPlacement(D),ne=getAltAxis(Y),B=e.modifiersData.popperOffsets,u=e.rects.reference,X=e.rects.popper,U=typeof x=="function"?x(Object.assign({},e.rects,{placement:e.placement})):x,I=typeof U=="number"?{mainAxis:U,altAxis:U}:Object.assign({mainAxis:0,altAxis:0},U),K=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,q={x:0,y:0};if(B){if(s){var G,oe=Y==="y"?top:left,ue=Y==="y"?bottom:right,pe=Y==="y"?"height":"width",le=B[Y],ve=le+H[oe],he=le-H[ue],Re=O?-X[pe]/2:0,fe=Z===start?u[pe]:X[pe],be=Z===start?-X[pe]:-u[pe],we=e.elements.arrow,xe=O&&we?getLayoutRect(we):{width:0,height:0},j=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:getFreshSideObject(),ee=j[oe],Te=j[ue],$e=within(0,u[pe],xe[pe]),Me=V?u[pe]/2-Re-$e-ee-I.mainAxis:fe-$e-ee-I.mainAxis,Ce=V?-u[pe]/2+Re+$e+Te+I.mainAxis:be+$e+Te+I.mainAxis,Ze=e.elements.arrow&&getOffsetParent(e.elements.arrow),Fe=Ze?Y==="y"?Ze.clientTop||0:Ze.clientLeft||0:0,ct=(G=K==null?void 0:K[Y])!=null?G:0,Lt=le+Me-ct-Fe,Kt=le+Ce-ct,gt=within(O?min(ve,Lt):ve,le,O?max(he,Kt):he);B[Y]=gt,q[Y]=gt-le}if(f){var ut,Ge=Y==="x"?top:left,Yt=Y==="x"?bottom:right,et=B[ne],Et=ne==="y"?"height":"width",Be=et+H[Ge],ot=et-H[Yt],tt=[top,left].indexOf(D)!==-1,te=(ut=K==null?void 0:K[ne])!=null?ut:0,De=tt?Be:et-u[Et]-X[Et]-te+I.altAxis,Mt=tt?et+u[Et]+X[Et]-te-I.altAxis:ot,kt=O&&tt?withinMaxClamp(De,et,Mt):within(O?De:Be,et,O?Mt:ot);B[ne]=kt,q[ne]=kt-et}e.modifiersData[r]=q}}const preventOverflow$1={name:"preventOverflow",enabled:!0,phase:"main",fn:preventOverflow,requiresIfExists:["offset"]};function getHTMLElementScroll(n){return{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}}function getNodeScroll(n){return n===getWindow(n)||!isHTMLElement(n)?getWindowScroll(n):getHTMLElementScroll(n)}function isElementScaled(n){var e=n.getBoundingClientRect(),t=round(e.width)/n.offsetWidth||1,r=round(e.height)/n.offsetHeight||1;return t!==1||r!==1}function getCompositeRect(n,e,t){t===void 0&&(t=!1);var r=isHTMLElement(e),o=isHTMLElement(e)&&isElementScaled(e),s=getDocumentElement(e),l=getBoundingClientRect(n,o,t),f={scrollLeft:0,scrollTop:0},E={x:0,y:0};return(r||!r&&!t)&&((getNodeName(e)!=="body"||isScrollParent(s))&&(f=getNodeScroll(e)),isHTMLElement(e)?(E=getBoundingClientRect(e,!0),E.x+=e.clientLeft,E.y+=e.clientTop):s&&(E.x=getWindowScrollBarX(s))),{x:l.left+f.scrollLeft-E.x,y:l.top+f.scrollTop-E.y,width:l.width,height:l.height}}function order(n){var e=new Map,t=new Set,r=[];n.forEach(function(s){e.set(s.name,s)});function o(s){t.add(s.name);var l=[].concat(s.requires||[],s.requiresIfExists||[]);l.forEach(function(f){if(!t.has(f)){var E=e.get(f);E&&o(E)}}),r.push(s)}return n.forEach(function(s){t.has(s.name)||o(s)}),r}function orderModifiers(n){var e=order(n);return modifierPhases.reduce(function(t,r){return t.concat(e.filter(function(o){return o.phase===r}))},[])}function debounce(n){var e;return function(){return e||(e=new Promise(function(t){Promise.resolve().then(function(){e=void 0,t(n())})})),e}}function mergeByName(n){var e=n.reduce(function(t,r){var o=t[r.name];return t[r.name]=o?Object.assign({},o,r,{options:Object.assign({},o.options,r.options),data:Object.assign({},o.data,r.data)}):r,t},{});return Object.keys(e).map(function(t){return e[t]})}var DEFAULT_OPTIONS={placement:"bottom",modifiers:[],strategy:"absolute"};function areValidElements(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];return!e.some(function(r){return!(r&&typeof r.getBoundingClientRect=="function")})}function popperGenerator(n){n===void 0&&(n={});var e=n,t=e.defaultModifiers,r=t===void 0?[]:t,o=e.defaultOptions,s=o===void 0?DEFAULT_OPTIONS:o;return function(f,E,d){d===void 0&&(d=s);var h={placement:"bottom",orderedModifiers:[],options:Object.assign({},DEFAULT_OPTIONS,s),modifiersData:{},elements:{reference:f,popper:E},attributes:{},styles:{}},y=[],S=!1,O={state:h,setOptions:function(D){var Z=typeof D=="function"?D(h.options):D;x(),h.options=Object.assign({},s,h.options,Z),h.scrollParents={reference:isElement$1(f)?listScrollParents(f):f.contextElement?listScrollParents(f.contextElement):[],popper:listScrollParents(E)};var V=orderModifiers(mergeByName([].concat(r,h.options.modifiers)));return h.orderedModifiers=V.filter(function(Y){return Y.enabled}),w(),O.update()},forceUpdate:function(){if(!S){var D=h.elements,Z=D.reference,V=D.popper;if(areValidElements(Z,V)){h.rects={reference:getCompositeRect(Z,getOffsetParent(V),h.options.strategy==="fixed"),popper:getLayoutRect(V)},h.reset=!1,h.placement=h.options.placement,h.orderedModifiers.forEach(function(I){return h.modifiersData[I.name]=Object.assign({},I.data)});for(var Y=0;Y<h.orderedModifiers.length;Y++){if(h.reset===!0){h.reset=!1,Y=-1;continue}var ne=h.orderedModifiers[Y],B=ne.fn,u=ne.options,X=u===void 0?{}:u,U=ne.name;typeof B=="function"&&(h=B({state:h,options:X,name:U,instance:O})||h)}}}},update:debounce(function(){return new Promise(function(H){O.forceUpdate(),H(h)})}),destroy:function(){x(),S=!0}};if(!areValidElements(f,E))return O;O.setOptions(d).then(function(H){!S&&d.onFirstUpdate&&d.onFirstUpdate(H)});function w(){h.orderedModifiers.forEach(function(H){var D=H.name,Z=H.options,V=Z===void 0?{}:Z,Y=H.effect;if(typeof Y=="function"){var ne=Y({state:h,name:D,instance:O,options:V}),B=function(){};y.push(ne||B)}})}function x(){y.forEach(function(H){return H()}),y=[]}return O}}var createPopper$2=popperGenerator(),defaultModifiers$1=[eventListeners,popperOffsets$1,computeStyles$1,applyStyles$1],createPopper$1=popperGenerator({defaultModifiers:defaultModifiers$1}),defaultModifiers=[eventListeners,popperOffsets$1,computeStyles$1,applyStyles$1,offset$1,flip$1,preventOverflow$1,arrow$1,hide$1],createPopper=popperGenerator({defaultModifiers});const Popper=Object.freeze(Object.defineProperty({__proto__:null,afterMain,afterRead,afterWrite,applyStyles:applyStyles$1,arrow:arrow$1,auto,basePlacements,beforeMain,beforeRead,beforeWrite,bottom,clippingParents,computeStyles:computeStyles$1,createPopper,createPopperBase:createPopper$2,createPopperLite:createPopper$1,detectOverflow,end,eventListeners,flip:flip$1,hide:hide$1,left,main,modifierPhases,offset:offset$1,placements,popper,popperGenerator,popperOffsets:popperOffsets$1,preventOverflow:preventOverflow$1,read,reference,right,start,top,variationPlacements,viewport,write},Symbol.toStringTag,{value:"Module"}));/*!
|
||
* Bootstrap v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/const elementMap=new Map,Data={set(n,e,t){elementMap.has(n)||elementMap.set(n,new Map);const r=elementMap.get(n);if(!r.has(e)&&r.size!==0){console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(r.keys())[0]}.`);return}r.set(e,t)},get(n,e){return elementMap.has(n)&&elementMap.get(n).get(e)||null},remove(n,e){if(!elementMap.has(n))return;const t=elementMap.get(n);t.delete(e),t.size===0&&elementMap.delete(n)}},MAX_UID=1e6,MILLISECONDS_MULTIPLIER=1e3,TRANSITION_END="transitionend",parseSelector=n=>(n&&window.CSS&&window.CSS.escape&&(n=n.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),n),toType=n=>n==null?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase(),getUID=n=>{do n+=Math.floor(Math.random()*MAX_UID);while(document.getElementById(n));return n},getTransitionDurationFromElement=n=>{if(!n)return 0;let{transitionDuration:e,transitionDelay:t}=window.getComputedStyle(n);const r=Number.parseFloat(e),o=Number.parseFloat(t);return!r&&!o?0:(e=e.split(",")[0],t=t.split(",")[0],(Number.parseFloat(e)+Number.parseFloat(t))*MILLISECONDS_MULTIPLIER)},triggerTransitionEnd=n=>{n.dispatchEvent(new Event(TRANSITION_END))},isElement=n=>!n||typeof n!="object"?!1:(typeof n.jquery<"u"&&(n=n[0]),typeof n.nodeType<"u"),getElement=n=>isElement(n)?n.jquery?n[0]:n:typeof n=="string"&&n.length>0?document.querySelector(parseSelector(n)):null,isVisible=n=>{if(!isElement(n)||n.getClientRects().length===0)return!1;const e=getComputedStyle(n).getPropertyValue("visibility")==="visible",t=n.closest("details:not([open])");if(!t)return e;if(t!==n){const r=n.closest("summary");if(r&&r.parentNode!==t||r===null)return!1}return e},isDisabled=n=>!n||n.nodeType!==Node.ELEMENT_NODE||n.classList.contains("disabled")?!0:typeof n.disabled<"u"?n.disabled:n.hasAttribute("disabled")&&n.getAttribute("disabled")!=="false",findShadowRoot=n=>{if(!document.documentElement.attachShadow)return null;if(typeof n.getRootNode=="function"){const e=n.getRootNode();return e instanceof ShadowRoot?e:null}return n instanceof ShadowRoot?n:n.parentNode?findShadowRoot(n.parentNode):null},noop=()=>{},reflow=n=>{n.offsetHeight},getjQuery=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,DOMContentLoadedCallbacks=[],onDOMContentLoaded=n=>{document.readyState==="loading"?(DOMContentLoadedCallbacks.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of DOMContentLoadedCallbacks)e()}),DOMContentLoadedCallbacks.push(n)):n()},isRTL=()=>document.documentElement.dir==="rtl",defineJQueryPlugin=n=>{onDOMContentLoaded(()=>{const e=getjQuery();if(e){const t=n.NAME,r=e.fn[t];e.fn[t]=n.jQueryInterface,e.fn[t].Constructor=n,e.fn[t].noConflict=()=>(e.fn[t]=r,n.jQueryInterface)}})},execute=(n,e=[],t=n)=>typeof n=="function"?n(...e):t,executeAfterTransition=(n,e,t=!0)=>{if(!t){execute(n);return}const r=5,o=getTransitionDurationFromElement(e)+r;let s=!1;const l=({target:f})=>{f===e&&(s=!0,e.removeEventListener(TRANSITION_END,l),execute(n))};e.addEventListener(TRANSITION_END,l),setTimeout(()=>{s||triggerTransitionEnd(e)},o)},getNextActiveElement=(n,e,t,r)=>{const o=n.length;let s=n.indexOf(e);return s===-1?!t&&r?n[o-1]:n[0]:(s+=t?1:-1,r&&(s=(s+o)%o),n[Math.max(0,Math.min(s,o-1))])},namespaceRegex=/[^.]*(?=\..*)\.|.*/,stripNameRegex=/\..*/,stripUidRegex=/::\d+$/,eventRegistry={};let uidEvent=1;const customEvents={mouseenter:"mouseover",mouseleave:"mouseout"},nativeEvents=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function makeEventUid(n,e){return e&&`${e}::${uidEvent++}`||n.uidEvent||uidEvent++}function getElementEvents(n){const e=makeEventUid(n);return n.uidEvent=e,eventRegistry[e]=eventRegistry[e]||{},eventRegistry[e]}function bootstrapHandler(n,e){return function t(r){return hydrateObj(r,{delegateTarget:n}),t.oneOff&&EventHandler.off(n,r.type,e),e.apply(n,[r])}}function bootstrapDelegationHandler(n,e,t){return function r(o){const s=n.querySelectorAll(e);for(let{target:l}=o;l&&l!==this;l=l.parentNode)for(const f of s)if(f===l)return hydrateObj(o,{delegateTarget:l}),r.oneOff&&EventHandler.off(n,o.type,e,t),t.apply(l,[o])}}function findHandler(n,e,t=null){return Object.values(n).find(r=>r.callable===e&&r.delegationSelector===t)}function normalizeParameters(n,e,t){const r=typeof e=="string",o=r?t:e||t;let s=getTypeEvent(n);return nativeEvents.has(s)||(s=n),[r,o,s]}function addHandler(n,e,t,r,o){if(typeof e!="string"||!n)return;let[s,l,f]=normalizeParameters(e,t,r);e in customEvents&&(l=(w=>function(x){if(!x.relatedTarget||x.relatedTarget!==x.delegateTarget&&!x.delegateTarget.contains(x.relatedTarget))return w.call(this,x)})(l));const E=getElementEvents(n),d=E[f]||(E[f]={}),h=findHandler(d,l,s?t:null);if(h){h.oneOff=h.oneOff&&o;return}const y=makeEventUid(l,e.replace(namespaceRegex,"")),S=s?bootstrapDelegationHandler(n,t,l):bootstrapHandler(n,l);S.delegationSelector=s?t:null,S.callable=l,S.oneOff=o,S.uidEvent=y,d[y]=S,n.addEventListener(f,S,s)}function removeHandler(n,e,t,r,o){const s=findHandler(e[t],r,o);s&&(n.removeEventListener(t,s,!!o),delete e[t][s.uidEvent])}function removeNamespacedHandlers(n,e,t,r){const o=e[t]||{};for(const[s,l]of Object.entries(o))s.includes(r)&&removeHandler(n,e,t,l.callable,l.delegationSelector)}function getTypeEvent(n){return n=n.replace(stripNameRegex,""),customEvents[n]||n}const EventHandler={on(n,e,t,r){addHandler(n,e,t,r,!1)},one(n,e,t,r){addHandler(n,e,t,r,!0)},off(n,e,t,r){if(typeof e!="string"||!n)return;const[o,s,l]=normalizeParameters(e,t,r),f=l!==e,E=getElementEvents(n),d=E[l]||{},h=e.startsWith(".");if(typeof s<"u"){if(!Object.keys(d).length)return;removeHandler(n,E,l,s,o?t:null);return}if(h)for(const y of Object.keys(E))removeNamespacedHandlers(n,E,y,e.slice(1));for(const[y,S]of Object.entries(d)){const O=y.replace(stripUidRegex,"");(!f||e.includes(O))&&removeHandler(n,E,l,S.callable,S.delegationSelector)}},trigger(n,e,t){if(typeof e!="string"||!n)return null;const r=getjQuery(),o=getTypeEvent(e),s=e!==o;let l=null,f=!0,E=!0,d=!1;s&&r&&(l=r.Event(e,t),r(n).trigger(l),f=!l.isPropagationStopped(),E=!l.isImmediatePropagationStopped(),d=l.isDefaultPrevented());const h=hydrateObj(new Event(e,{bubbles:f,cancelable:!0}),t);return d&&h.preventDefault(),E&&n.dispatchEvent(h),h.defaultPrevented&&l&&l.preventDefault(),h}};function hydrateObj(n,e={}){for(const[t,r]of Object.entries(e))try{n[t]=r}catch{Object.defineProperty(n,t,{configurable:!0,get(){return r}})}return n}function normalizeData(n){if(n==="true")return!0;if(n==="false")return!1;if(n===Number(n).toString())return Number(n);if(n===""||n==="null")return null;if(typeof n!="string")return n;try{return JSON.parse(decodeURIComponent(n))}catch{return n}}function normalizeDataKey(n){return n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const Manipulator={setDataAttribute(n,e,t){n.setAttribute(`data-bs-${normalizeDataKey(e)}`,t)},removeDataAttribute(n,e){n.removeAttribute(`data-bs-${normalizeDataKey(e)}`)},getDataAttributes(n){if(!n)return{};const e={},t=Object.keys(n.dataset).filter(r=>r.startsWith("bs")&&!r.startsWith("bsConfig"));for(const r of t){let o=r.replace(/^bs/,"");o=o.charAt(0).toLowerCase()+o.slice(1,o.length),e[o]=normalizeData(n.dataset[r])}return e},getDataAttribute(n,e){return normalizeData(n.getAttribute(`data-bs-${normalizeDataKey(e)}`))}};class Config{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const r=isElement(t)?Manipulator.getDataAttribute(t,"config"):{};return{...this.constructor.Default,...typeof r=="object"?r:{},...isElement(t)?Manipulator.getDataAttributes(t):{},...typeof e=="object"?e:{}}}_typeCheckConfig(e,t=this.constructor.DefaultType){for(const[r,o]of Object.entries(t)){const s=e[r],l=isElement(s)?"element":toType(s);if(!new RegExp(o).test(l))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${r}" provided type "${l}" but expected type "${o}".`)}}}const VERSION="5.3.3";class BaseComponent extends Config{constructor(e,t){super(),e=getElement(e),e&&(this._element=e,this._config=this._getConfig(t),Data.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Data.remove(this._element,this.constructor.DATA_KEY),EventHandler.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t,r=!0){executeAfterTransition(e,t,r)}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return Data.get(getElement(e),this.DATA_KEY)}static getOrCreateInstance(e,t={}){return this.getInstance(e)||new this(e,typeof t=="object"?t:null)}static get VERSION(){return VERSION}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const getSelector=n=>{let e=n.getAttribute("data-bs-target");if(!e||e==="#"){let t=n.getAttribute("href");if(!t||!t.includes("#")&&!t.startsWith("."))return null;t.includes("#")&&!t.startsWith("#")&&(t=`#${t.split("#")[1]}`),e=t&&t!=="#"?t.trim():null}return e?e.split(",").map(t=>parseSelector(t)).join(","):null},SelectorEngine={find(n,e=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(e,n))},findOne(n,e=document.documentElement){return Element.prototype.querySelector.call(e,n)},children(n,e){return[].concat(...n.children).filter(t=>t.matches(e))},parents(n,e){const t=[];let r=n.parentNode.closest(e);for(;r;)t.push(r),r=r.parentNode.closest(e);return t},prev(n,e){let t=n.previousElementSibling;for(;t;){if(t.matches(e))return[t];t=t.previousElementSibling}return[]},next(n,e){let t=n.nextElementSibling;for(;t;){if(t.matches(e))return[t];t=t.nextElementSibling}return[]},focusableChildren(n){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(t=>`${t}:not([tabindex^="-"])`).join(",");return this.find(e,n).filter(t=>!isDisabled(t)&&isVisible(t))},getSelectorFromElement(n){const e=getSelector(n);return e&&SelectorEngine.findOne(e)?e:null},getElementFromSelector(n){const e=getSelector(n);return e?SelectorEngine.findOne(e):null},getMultipleElementsFromSelector(n){const e=getSelector(n);return e?SelectorEngine.find(e):[]}},enableDismissTrigger=(n,e="hide")=>{const t=`click.dismiss${n.EVENT_KEY}`,r=n.NAME;EventHandler.on(document,t,`[data-bs-dismiss="${r}"]`,function(o){if(["A","AREA"].includes(this.tagName)&&o.preventDefault(),isDisabled(this))return;const s=SelectorEngine.getElementFromSelector(this)||this.closest(`.${r}`);n.getOrCreateInstance(s)[e]()})},NAME$f="alert",DATA_KEY$a="bs.alert",EVENT_KEY$b=`.${DATA_KEY$a}`,EVENT_CLOSE=`close${EVENT_KEY$b}`,EVENT_CLOSED=`closed${EVENT_KEY$b}`,CLASS_NAME_FADE$5="fade",CLASS_NAME_SHOW$8="show";class Alert extends BaseComponent{static get NAME(){return NAME$f}close(){if(EventHandler.trigger(this._element,EVENT_CLOSE).defaultPrevented)return;this._element.classList.remove(CLASS_NAME_SHOW$8);const t=this._element.classList.contains(CLASS_NAME_FADE$5);this._queueCallback(()=>this._destroyElement(),this._element,t)}_destroyElement(){this._element.remove(),EventHandler.trigger(this._element,EVENT_CLOSED),this.dispose()}static jQueryInterface(e){return this.each(function(){const t=Alert.getOrCreateInstance(this);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e](this)}})}}enableDismissTrigger(Alert,"close");defineJQueryPlugin(Alert);const NAME$e="button",DATA_KEY$9="bs.button",EVENT_KEY$a=`.${DATA_KEY$9}`,DATA_API_KEY$6=".data-api",CLASS_NAME_ACTIVE$3="active",SELECTOR_DATA_TOGGLE$5='[data-bs-toggle="button"]',EVENT_CLICK_DATA_API$6=`click${EVENT_KEY$a}${DATA_API_KEY$6}`;class Button extends BaseComponent{static get NAME(){return NAME$e}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle(CLASS_NAME_ACTIVE$3))}static jQueryInterface(e){return this.each(function(){const t=Button.getOrCreateInstance(this);e==="toggle"&&t[e]()})}}EventHandler.on(document,EVENT_CLICK_DATA_API$6,SELECTOR_DATA_TOGGLE$5,n=>{n.preventDefault();const e=n.target.closest(SELECTOR_DATA_TOGGLE$5);Button.getOrCreateInstance(e).toggle()});defineJQueryPlugin(Button);const NAME$d="swipe",EVENT_KEY$9=".bs.swipe",EVENT_TOUCHSTART=`touchstart${EVENT_KEY$9}`,EVENT_TOUCHMOVE=`touchmove${EVENT_KEY$9}`,EVENT_TOUCHEND=`touchend${EVENT_KEY$9}`,EVENT_POINTERDOWN=`pointerdown${EVENT_KEY$9}`,EVENT_POINTERUP=`pointerup${EVENT_KEY$9}`,POINTER_TYPE_TOUCH="touch",POINTER_TYPE_PEN="pen",CLASS_NAME_POINTER_EVENT="pointer-event",SWIPE_THRESHOLD=40,Default$c={endCallback:null,leftCallback:null,rightCallback:null},DefaultType$c={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class Swipe extends Config{constructor(e,t){super(),this._element=e,!(!e||!Swipe.isSupported())&&(this._config=this._getConfig(t),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return Default$c}static get DefaultType(){return DefaultType$c}static get NAME(){return NAME$d}dispose(){EventHandler.off(this._element,EVENT_KEY$9)}_start(e){if(!this._supportPointerEvents){this._deltaX=e.touches[0].clientX;return}this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX)}_end(e){this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX-this._deltaX),this._handleSwipe(),execute(this._config.endCallback)}_move(e){this._deltaX=e.touches&&e.touches.length>1?0:e.touches[0].clientX-this._deltaX}_handleSwipe(){const e=Math.abs(this._deltaX);if(e<=SWIPE_THRESHOLD)return;const t=e/this._deltaX;this._deltaX=0,t&&execute(t>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(EventHandler.on(this._element,EVENT_POINTERDOWN,e=>this._start(e)),EventHandler.on(this._element,EVENT_POINTERUP,e=>this._end(e)),this._element.classList.add(CLASS_NAME_POINTER_EVENT)):(EventHandler.on(this._element,EVENT_TOUCHSTART,e=>this._start(e)),EventHandler.on(this._element,EVENT_TOUCHMOVE,e=>this._move(e)),EventHandler.on(this._element,EVENT_TOUCHEND,e=>this._end(e)))}_eventIsPointerPenTouch(e){return this._supportPointerEvents&&(e.pointerType===POINTER_TYPE_PEN||e.pointerType===POINTER_TYPE_TOUCH)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const NAME$c="carousel",DATA_KEY$8="bs.carousel",EVENT_KEY$8=`.${DATA_KEY$8}`,DATA_API_KEY$5=".data-api",ARROW_LEFT_KEY$1="ArrowLeft",ARROW_RIGHT_KEY$1="ArrowRight",TOUCHEVENT_COMPAT_WAIT=500,ORDER_NEXT="next",ORDER_PREV="prev",DIRECTION_LEFT="left",DIRECTION_RIGHT="right",EVENT_SLIDE=`slide${EVENT_KEY$8}`,EVENT_SLID=`slid${EVENT_KEY$8}`,EVENT_KEYDOWN$1=`keydown${EVENT_KEY$8}`,EVENT_MOUSEENTER$1=`mouseenter${EVENT_KEY$8}`,EVENT_MOUSELEAVE$1=`mouseleave${EVENT_KEY$8}`,EVENT_DRAG_START=`dragstart${EVENT_KEY$8}`,EVENT_LOAD_DATA_API$3=`load${EVENT_KEY$8}${DATA_API_KEY$5}`,EVENT_CLICK_DATA_API$5=`click${EVENT_KEY$8}${DATA_API_KEY$5}`,CLASS_NAME_CAROUSEL="carousel",CLASS_NAME_ACTIVE$2="active",CLASS_NAME_SLIDE="slide",CLASS_NAME_END="carousel-item-end",CLASS_NAME_START="carousel-item-start",CLASS_NAME_NEXT="carousel-item-next",CLASS_NAME_PREV="carousel-item-prev",SELECTOR_ACTIVE=".active",SELECTOR_ITEM=".carousel-item",SELECTOR_ACTIVE_ITEM=SELECTOR_ACTIVE+SELECTOR_ITEM,SELECTOR_ITEM_IMG=".carousel-item img",SELECTOR_INDICATORS=".carousel-indicators",SELECTOR_DATA_SLIDE="[data-bs-slide], [data-bs-slide-to]",SELECTOR_DATA_RIDE='[data-bs-ride="carousel"]',KEY_TO_DIRECTION={[ARROW_LEFT_KEY$1]:DIRECTION_RIGHT,[ARROW_RIGHT_KEY$1]:DIRECTION_LEFT},Default$b={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},DefaultType$b={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class Carousel extends BaseComponent{constructor(e,t){super(e,t),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=SelectorEngine.findOne(SELECTOR_INDICATORS,this._element),this._addEventListeners(),this._config.ride===CLASS_NAME_CAROUSEL&&this.cycle()}static get Default(){return Default$b}static get DefaultType(){return DefaultType$b}static get NAME(){return NAME$c}next(){this._slide(ORDER_NEXT)}nextWhenVisible(){!document.hidden&&isVisible(this._element)&&this.next()}prev(){this._slide(ORDER_PREV)}pause(){this._isSliding&&triggerTransitionEnd(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){if(this._config.ride){if(this._isSliding){EventHandler.one(this._element,EVENT_SLID,()=>this.cycle());return}this.cycle()}}to(e){const t=this._getItems();if(e>t.length-1||e<0)return;if(this._isSliding){EventHandler.one(this._element,EVENT_SLID,()=>this.to(e));return}const r=this._getItemIndex(this._getActive());if(r===e)return;const o=e>r?ORDER_NEXT:ORDER_PREV;this._slide(o,t[e])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(e){return e.defaultInterval=e.interval,e}_addEventListeners(){this._config.keyboard&&EventHandler.on(this._element,EVENT_KEYDOWN$1,e=>this._keydown(e)),this._config.pause==="hover"&&(EventHandler.on(this._element,EVENT_MOUSEENTER$1,()=>this.pause()),EventHandler.on(this._element,EVENT_MOUSELEAVE$1,()=>this._maybeEnableCycle())),this._config.touch&&Swipe.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const r of SelectorEngine.find(SELECTOR_ITEM_IMG,this._element))EventHandler.on(r,EVENT_DRAG_START,o=>o.preventDefault());const t={leftCallback:()=>this._slide(this._directionToOrder(DIRECTION_LEFT)),rightCallback:()=>this._slide(this._directionToOrder(DIRECTION_RIGHT)),endCallback:()=>{this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),TOUCHEVENT_COMPAT_WAIT+this._config.interval))}};this._swipeHelper=new Swipe(this._element,t)}_keydown(e){if(/input|textarea/i.test(e.target.tagName))return;const t=KEY_TO_DIRECTION[e.key];t&&(e.preventDefault(),this._slide(this._directionToOrder(t)))}_getItemIndex(e){return this._getItems().indexOf(e)}_setActiveIndicatorElement(e){if(!this._indicatorsElement)return;const t=SelectorEngine.findOne(SELECTOR_ACTIVE,this._indicatorsElement);t.classList.remove(CLASS_NAME_ACTIVE$2),t.removeAttribute("aria-current");const r=SelectorEngine.findOne(`[data-bs-slide-to="${e}"]`,this._indicatorsElement);r&&(r.classList.add(CLASS_NAME_ACTIVE$2),r.setAttribute("aria-current","true"))}_updateInterval(){const e=this._activeElement||this._getActive();if(!e)return;const t=Number.parseInt(e.getAttribute("data-bs-interval"),10);this._config.interval=t||this._config.defaultInterval}_slide(e,t=null){if(this._isSliding)return;const r=this._getActive(),o=e===ORDER_NEXT,s=t||getNextActiveElement(this._getItems(),r,o,this._config.wrap);if(s===r)return;const l=this._getItemIndex(s),f=O=>EventHandler.trigger(this._element,O,{relatedTarget:s,direction:this._orderToDirection(e),from:this._getItemIndex(r),to:l});if(f(EVENT_SLIDE).defaultPrevented||!r||!s)return;const d=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(l),this._activeElement=s;const h=o?CLASS_NAME_START:CLASS_NAME_END,y=o?CLASS_NAME_NEXT:CLASS_NAME_PREV;s.classList.add(y),reflow(s),r.classList.add(h),s.classList.add(h);const S=()=>{s.classList.remove(h,y),s.classList.add(CLASS_NAME_ACTIVE$2),r.classList.remove(CLASS_NAME_ACTIVE$2,y,h),this._isSliding=!1,f(EVENT_SLID)};this._queueCallback(S,r,this._isAnimated()),d&&this.cycle()}_isAnimated(){return this._element.classList.contains(CLASS_NAME_SLIDE)}_getActive(){return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM,this._element)}_getItems(){return SelectorEngine.find(SELECTOR_ITEM,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(e){return isRTL()?e===DIRECTION_LEFT?ORDER_PREV:ORDER_NEXT:e===DIRECTION_LEFT?ORDER_NEXT:ORDER_PREV}_orderToDirection(e){return isRTL()?e===ORDER_PREV?DIRECTION_LEFT:DIRECTION_RIGHT:e===ORDER_PREV?DIRECTION_RIGHT:DIRECTION_LEFT}static jQueryInterface(e){return this.each(function(){const t=Carousel.getOrCreateInstance(this,e);if(typeof e=="number"){t.to(e);return}if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e]()}})}}EventHandler.on(document,EVENT_CLICK_DATA_API$5,SELECTOR_DATA_SLIDE,function(n){const e=SelectorEngine.getElementFromSelector(this);if(!e||!e.classList.contains(CLASS_NAME_CAROUSEL))return;n.preventDefault();const t=Carousel.getOrCreateInstance(e),r=this.getAttribute("data-bs-slide-to");if(r){t.to(r),t._maybeEnableCycle();return}if(Manipulator.getDataAttribute(this,"slide")==="next"){t.next(),t._maybeEnableCycle();return}t.prev(),t._maybeEnableCycle()});EventHandler.on(window,EVENT_LOAD_DATA_API$3,()=>{const n=SelectorEngine.find(SELECTOR_DATA_RIDE);for(const e of n)Carousel.getOrCreateInstance(e)});defineJQueryPlugin(Carousel);const NAME$b="collapse",DATA_KEY$7="bs.collapse",EVENT_KEY$7=`.${DATA_KEY$7}`,DATA_API_KEY$4=".data-api",EVENT_SHOW$6=`show${EVENT_KEY$7}`,EVENT_SHOWN$6=`shown${EVENT_KEY$7}`,EVENT_HIDE$6=`hide${EVENT_KEY$7}`,EVENT_HIDDEN$6=`hidden${EVENT_KEY$7}`,EVENT_CLICK_DATA_API$4=`click${EVENT_KEY$7}${DATA_API_KEY$4}`,CLASS_NAME_SHOW$7="show",CLASS_NAME_COLLAPSE="collapse",CLASS_NAME_COLLAPSING="collapsing",CLASS_NAME_COLLAPSED="collapsed",CLASS_NAME_DEEPER_CHILDREN=`:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`,CLASS_NAME_HORIZONTAL="collapse-horizontal",WIDTH="width",HEIGHT="height",SELECTOR_ACTIVES=".collapse.show, .collapse.collapsing",SELECTOR_DATA_TOGGLE$4='[data-bs-toggle="collapse"]',Default$a={parent:null,toggle:!0},DefaultType$a={parent:"(null|element)",toggle:"boolean"};class Collapse extends BaseComponent{constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const r=SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);for(const o of r){const s=SelectorEngine.getSelectorFromElement(o),l=SelectorEngine.find(s).filter(f=>f===this._element);s!==null&&l.length&&this._triggerArray.push(o)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Default$a}static get DefaultType(){return DefaultType$a}static get NAME(){return NAME$b}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(f=>f!==this._element).map(f=>Collapse.getOrCreateInstance(f,{toggle:!1}))),e.length&&e[0]._isTransitioning||EventHandler.trigger(this._element,EVENT_SHOW$6).defaultPrevented)return;for(const f of e)f.hide();const r=this._getDimension();this._element.classList.remove(CLASS_NAME_COLLAPSE),this._element.classList.add(CLASS_NAME_COLLAPSING),this._element.style[r]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const o=()=>{this._isTransitioning=!1,this._element.classList.remove(CLASS_NAME_COLLAPSING),this._element.classList.add(CLASS_NAME_COLLAPSE,CLASS_NAME_SHOW$7),this._element.style[r]="",EventHandler.trigger(this._element,EVENT_SHOWN$6)},l=`scroll${r[0].toUpperCase()+r.slice(1)}`;this._queueCallback(o,this._element,!0),this._element.style[r]=`${this._element[l]}px`}hide(){if(this._isTransitioning||!this._isShown()||EventHandler.trigger(this._element,EVENT_HIDE$6).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,reflow(this._element),this._element.classList.add(CLASS_NAME_COLLAPSING),this._element.classList.remove(CLASS_NAME_COLLAPSE,CLASS_NAME_SHOW$7);for(const o of this._triggerArray){const s=SelectorEngine.getElementFromSelector(o);s&&!this._isShown(s)&&this._addAriaAndCollapsedClass([o],!1)}this._isTransitioning=!0;const r=()=>{this._isTransitioning=!1,this._element.classList.remove(CLASS_NAME_COLLAPSING),this._element.classList.add(CLASS_NAME_COLLAPSE),EventHandler.trigger(this._element,EVENT_HIDDEN$6)};this._element.style[t]="",this._queueCallback(r,this._element,!0)}_isShown(e=this._element){return e.classList.contains(CLASS_NAME_SHOW$7)}_configAfterMerge(e){return e.toggle=!!e.toggle,e.parent=getElement(e.parent),e}_getDimension(){return this._element.classList.contains(CLASS_NAME_HORIZONTAL)?WIDTH:HEIGHT}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);for(const t of e){const r=SelectorEngine.getElementFromSelector(t);r&&this._addAriaAndCollapsedClass([t],this._isShown(r))}}_getFirstLevelChildren(e){const t=SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN,this._config.parent);return SelectorEngine.find(e,this._config.parent).filter(r=>!t.includes(r))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const r of e)r.classList.toggle(CLASS_NAME_COLLAPSED,!t),r.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return typeof e=="string"&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){const r=Collapse.getOrCreateInstance(this,t);if(typeof e=="string"){if(typeof r[e]>"u")throw new TypeError(`No method named "${e}"`);r[e]()}})}}EventHandler.on(document,EVENT_CLICK_DATA_API$4,SELECTOR_DATA_TOGGLE$4,function(n){(n.target.tagName==="A"||n.delegateTarget&&n.delegateTarget.tagName==="A")&&n.preventDefault();for(const e of SelectorEngine.getMultipleElementsFromSelector(this))Collapse.getOrCreateInstance(e,{toggle:!1}).toggle()});defineJQueryPlugin(Collapse);const NAME$a="dropdown",DATA_KEY$6="bs.dropdown",EVENT_KEY$6=`.${DATA_KEY$6}`,DATA_API_KEY$3=".data-api",ESCAPE_KEY$2="Escape",TAB_KEY$1="Tab",ARROW_UP_KEY$1="ArrowUp",ARROW_DOWN_KEY$1="ArrowDown",RIGHT_MOUSE_BUTTON=2,EVENT_HIDE$5=`hide${EVENT_KEY$6}`,EVENT_HIDDEN$5=`hidden${EVENT_KEY$6}`,EVENT_SHOW$5=`show${EVENT_KEY$6}`,EVENT_SHOWN$5=`shown${EVENT_KEY$6}`,EVENT_CLICK_DATA_API$3=`click${EVENT_KEY$6}${DATA_API_KEY$3}`,EVENT_KEYDOWN_DATA_API=`keydown${EVENT_KEY$6}${DATA_API_KEY$3}`,EVENT_KEYUP_DATA_API=`keyup${EVENT_KEY$6}${DATA_API_KEY$3}`,CLASS_NAME_SHOW$6="show",CLASS_NAME_DROPUP="dropup",CLASS_NAME_DROPEND="dropend",CLASS_NAME_DROPSTART="dropstart",CLASS_NAME_DROPUP_CENTER="dropup-center",CLASS_NAME_DROPDOWN_CENTER="dropdown-center",SELECTOR_DATA_TOGGLE$3='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',SELECTOR_DATA_TOGGLE_SHOWN=`${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`,SELECTOR_MENU=".dropdown-menu",SELECTOR_NAVBAR=".navbar",SELECTOR_NAVBAR_NAV=".navbar-nav",SELECTOR_VISIBLE_ITEMS=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",PLACEMENT_TOP=isRTL()?"top-end":"top-start",PLACEMENT_TOPEND=isRTL()?"top-start":"top-end",PLACEMENT_BOTTOM=isRTL()?"bottom-end":"bottom-start",PLACEMENT_BOTTOMEND=isRTL()?"bottom-start":"bottom-end",PLACEMENT_RIGHT=isRTL()?"left-start":"right-start",PLACEMENT_LEFT=isRTL()?"right-start":"left-start",PLACEMENT_TOPCENTER="top",PLACEMENT_BOTTOMCENTER="bottom",Default$9={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},DefaultType$9={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Dropdown extends BaseComponent{constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=SelectorEngine.next(this._element,SELECTOR_MENU)[0]||SelectorEngine.prev(this._element,SELECTOR_MENU)[0]||SelectorEngine.findOne(SELECTOR_MENU,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Default$9}static get DefaultType(){return DefaultType$9}static get NAME(){return NAME$a}toggle(){return this._isShown()?this.hide():this.show()}show(){if(isDisabled(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!EventHandler.trigger(this._element,EVENT_SHOW$5,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(SELECTOR_NAVBAR_NAV))for(const r of[].concat(...document.body.children))EventHandler.on(r,"mouseover",noop);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(CLASS_NAME_SHOW$6),this._element.classList.add(CLASS_NAME_SHOW$6),EventHandler.trigger(this._element,EVENT_SHOWN$5,e)}}hide(){if(isDisabled(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!EventHandler.trigger(this._element,EVENT_HIDE$5,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const r of[].concat(...document.body.children))EventHandler.off(r,"mouseover",noop);this._popper&&this._popper.destroy(),this._menu.classList.remove(CLASS_NAME_SHOW$6),this._element.classList.remove(CLASS_NAME_SHOW$6),this._element.setAttribute("aria-expanded","false"),Manipulator.removeDataAttribute(this._menu,"popper"),EventHandler.trigger(this._element,EVENT_HIDDEN$5,e)}}_getConfig(e){if(e=super._getConfig(e),typeof e.reference=="object"&&!isElement(e.reference)&&typeof e.reference.getBoundingClientRect!="function")throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(typeof Popper>"u")throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;this._config.reference==="parent"?e=this._parent:isElement(this._config.reference)?e=getElement(this._config.reference):typeof this._config.reference=="object"&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=createPopper(e,this._menu,t)}_isShown(){return this._menu.classList.contains(CLASS_NAME_SHOW$6)}_getPlacement(){const e=this._parent;if(e.classList.contains(CLASS_NAME_DROPEND))return PLACEMENT_RIGHT;if(e.classList.contains(CLASS_NAME_DROPSTART))return PLACEMENT_LEFT;if(e.classList.contains(CLASS_NAME_DROPUP_CENTER))return PLACEMENT_TOPCENTER;if(e.classList.contains(CLASS_NAME_DROPDOWN_CENTER))return PLACEMENT_BOTTOMCENTER;const t=getComputedStyle(this._menu).getPropertyValue("--bs-position").trim()==="end";return e.classList.contains(CLASS_NAME_DROPUP)?t?PLACEMENT_TOPEND:PLACEMENT_TOP:t?PLACEMENT_BOTTOMEND:PLACEMENT_BOTTOM}_detectNavbar(){return this._element.closest(SELECTOR_NAVBAR)!==null}_getOffset(){const{offset:e}=this._config;return typeof e=="string"?e.split(",").map(t=>Number.parseInt(t,10)):typeof e=="function"?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(Manipulator.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...execute(this._config.popperConfig,[e])}}_selectMenuItem({key:e,target:t}){const r=SelectorEngine.find(SELECTOR_VISIBLE_ITEMS,this._menu).filter(o=>isVisible(o));r.length&&getNextActiveElement(r,t,e===ARROW_DOWN_KEY$1,!r.includes(t)).focus()}static jQueryInterface(e){return this.each(function(){const t=Dropdown.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]>"u")throw new TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(e.button===RIGHT_MOUSE_BUTTON||e.type==="keyup"&&e.key!==TAB_KEY$1)return;const t=SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);for(const r of t){const o=Dropdown.getInstance(r);if(!o||o._config.autoClose===!1)continue;const s=e.composedPath(),l=s.includes(o._menu);if(s.includes(o._element)||o._config.autoClose==="inside"&&!l||o._config.autoClose==="outside"&&l||o._menu.contains(e.target)&&(e.type==="keyup"&&e.key===TAB_KEY$1||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const f={relatedTarget:o._element};e.type==="click"&&(f.clickEvent=e),o._completeHide(f)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),r=e.key===ESCAPE_KEY$2,o=[ARROW_UP_KEY$1,ARROW_DOWN_KEY$1].includes(e.key);if(!o&&!r||t&&!r)return;e.preventDefault();const s=this.matches(SELECTOR_DATA_TOGGLE$3)?this:SelectorEngine.prev(this,SELECTOR_DATA_TOGGLE$3)[0]||SelectorEngine.next(this,SELECTOR_DATA_TOGGLE$3)[0]||SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3,e.delegateTarget.parentNode),l=Dropdown.getOrCreateInstance(s);if(o){e.stopPropagation(),l.show(),l._selectMenuItem(e);return}l._isShown()&&(e.stopPropagation(),l.hide(),s.focus())}}EventHandler.on(document,EVENT_KEYDOWN_DATA_API,SELECTOR_DATA_TOGGLE$3,Dropdown.dataApiKeydownHandler);EventHandler.on(document,EVENT_KEYDOWN_DATA_API,SELECTOR_MENU,Dropdown.dataApiKeydownHandler);EventHandler.on(document,EVENT_CLICK_DATA_API$3,Dropdown.clearMenus);EventHandler.on(document,EVENT_KEYUP_DATA_API,Dropdown.clearMenus);EventHandler.on(document,EVENT_CLICK_DATA_API$3,SELECTOR_DATA_TOGGLE$3,function(n){n.preventDefault(),Dropdown.getOrCreateInstance(this).toggle()});defineJQueryPlugin(Dropdown);const NAME$9="backdrop",CLASS_NAME_FADE$4="fade",CLASS_NAME_SHOW$5="show",EVENT_MOUSEDOWN=`mousedown.bs.${NAME$9}`,Default$8={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},DefaultType$8={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Backdrop extends Config{constructor(e){super(),this._config=this._getConfig(e),this._isAppended=!1,this._element=null}static get Default(){return Default$8}static get DefaultType(){return DefaultType$8}static get NAME(){return NAME$9}show(e){if(!this._config.isVisible){execute(e);return}this._append();const t=this._getElement();this._config.isAnimated&&reflow(t),t.classList.add(CLASS_NAME_SHOW$5),this._emulateAnimation(()=>{execute(e)})}hide(e){if(!this._config.isVisible){execute(e);return}this._getElement().classList.remove(CLASS_NAME_SHOW$5),this._emulateAnimation(()=>{this.dispose(),execute(e)})}dispose(){this._isAppended&&(EventHandler.off(this._element,EVENT_MOUSEDOWN),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const e=document.createElement("div");e.className=this._config.className,this._config.isAnimated&&e.classList.add(CLASS_NAME_FADE$4),this._element=e}return this._element}_configAfterMerge(e){return e.rootElement=getElement(e.rootElement),e}_append(){if(this._isAppended)return;const e=this._getElement();this._config.rootElement.append(e),EventHandler.on(e,EVENT_MOUSEDOWN,()=>{execute(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(e){executeAfterTransition(e,this._getElement(),this._config.isAnimated)}}const NAME$8="focustrap",DATA_KEY$5="bs.focustrap",EVENT_KEY$5=`.${DATA_KEY$5}`,EVENT_FOCUSIN$2=`focusin${EVENT_KEY$5}`,EVENT_KEYDOWN_TAB=`keydown.tab${EVENT_KEY$5}`,TAB_KEY="Tab",TAB_NAV_FORWARD="forward",TAB_NAV_BACKWARD="backward",Default$7={autofocus:!0,trapElement:null},DefaultType$7={autofocus:"boolean",trapElement:"element"};class FocusTrap extends Config{constructor(e){super(),this._config=this._getConfig(e),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Default$7}static get DefaultType(){return DefaultType$7}static get NAME(){return NAME$8}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),EventHandler.off(document,EVENT_KEY$5),EventHandler.on(document,EVENT_FOCUSIN$2,e=>this._handleFocusin(e)),EventHandler.on(document,EVENT_KEYDOWN_TAB,e=>this._handleKeydown(e)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,EventHandler.off(document,EVENT_KEY$5))}_handleFocusin(e){const{trapElement:t}=this._config;if(e.target===document||e.target===t||t.contains(e.target))return;const r=SelectorEngine.focusableChildren(t);r.length===0?t.focus():this._lastTabNavDirection===TAB_NAV_BACKWARD?r[r.length-1].focus():r[0].focus()}_handleKeydown(e){e.key===TAB_KEY&&(this._lastTabNavDirection=e.shiftKey?TAB_NAV_BACKWARD:TAB_NAV_FORWARD)}}const SELECTOR_FIXED_CONTENT=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",SELECTOR_STICKY_CONTENT=".sticky-top",PROPERTY_PADDING="padding-right",PROPERTY_MARGIN="margin-right";class ScrollBarHelper{constructor(){this._element=document.body}getWidth(){const e=document.documentElement.clientWidth;return Math.abs(window.innerWidth-e)}hide(){const e=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,PROPERTY_PADDING,t=>t+e),this._setElementAttributes(SELECTOR_FIXED_CONTENT,PROPERTY_PADDING,t=>t+e),this._setElementAttributes(SELECTOR_STICKY_CONTENT,PROPERTY_MARGIN,t=>t-e)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,PROPERTY_PADDING),this._resetElementAttributes(SELECTOR_FIXED_CONTENT,PROPERTY_PADDING),this._resetElementAttributes(SELECTOR_STICKY_CONTENT,PROPERTY_MARGIN)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(e,t,r){const o=this.getWidth(),s=l=>{if(l!==this._element&&window.innerWidth>l.clientWidth+o)return;this._saveInitialAttribute(l,t);const f=window.getComputedStyle(l).getPropertyValue(t);l.style.setProperty(t,`${r(Number.parseFloat(f))}px`)};this._applyManipulationCallback(e,s)}_saveInitialAttribute(e,t){const r=e.style.getPropertyValue(t);r&&Manipulator.setDataAttribute(e,t,r)}_resetElementAttributes(e,t){const r=o=>{const s=Manipulator.getDataAttribute(o,t);if(s===null){o.style.removeProperty(t);return}Manipulator.removeDataAttribute(o,t),o.style.setProperty(t,s)};this._applyManipulationCallback(e,r)}_applyManipulationCallback(e,t){if(isElement(e)){t(e);return}for(const r of SelectorEngine.find(e,this._element))t(r)}}const NAME$7="modal",DATA_KEY$4="bs.modal",EVENT_KEY$4=`.${DATA_KEY$4}`,DATA_API_KEY$2=".data-api",ESCAPE_KEY$1="Escape",EVENT_HIDE$4=`hide${EVENT_KEY$4}`,EVENT_HIDE_PREVENTED$1=`hidePrevented${EVENT_KEY$4}`,EVENT_HIDDEN$4=`hidden${EVENT_KEY$4}`,EVENT_SHOW$4=`show${EVENT_KEY$4}`,EVENT_SHOWN$4=`shown${EVENT_KEY$4}`,EVENT_RESIZE$1=`resize${EVENT_KEY$4}`,EVENT_CLICK_DISMISS=`click.dismiss${EVENT_KEY$4}`,EVENT_MOUSEDOWN_DISMISS=`mousedown.dismiss${EVENT_KEY$4}`,EVENT_KEYDOWN_DISMISS$1=`keydown.dismiss${EVENT_KEY$4}`,EVENT_CLICK_DATA_API$2=`click${EVENT_KEY$4}${DATA_API_KEY$2}`,CLASS_NAME_OPEN="modal-open",CLASS_NAME_FADE$3="fade",CLASS_NAME_SHOW$4="show",CLASS_NAME_STATIC="modal-static",OPEN_SELECTOR$1=".modal.show",SELECTOR_DIALOG=".modal-dialog",SELECTOR_MODAL_BODY=".modal-body",SELECTOR_DATA_TOGGLE$2='[data-bs-toggle="modal"]',Default$6={backdrop:!0,focus:!0,keyboard:!0},DefaultType$6={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Modal extends BaseComponent{constructor(e,t){super(e,t),this._dialog=SelectorEngine.findOne(SELECTOR_DIALOG,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new ScrollBarHelper,this._addEventListeners()}static get Default(){return Default$6}static get DefaultType(){return DefaultType$6}static get NAME(){return NAME$7}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||this._isTransitioning||EventHandler.trigger(this._element,EVENT_SHOW$4,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(CLASS_NAME_OPEN),this._adjustDialog(),this._backdrop.show(()=>this._showElement(e)))}hide(){!this._isShown||this._isTransitioning||EventHandler.trigger(this._element,EVENT_HIDE$4).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(CLASS_NAME_SHOW$4),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){EventHandler.off(window,EVENT_KEY$4),EventHandler.off(this._dialog,EVENT_KEY$4),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Backdrop({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new FocusTrap({trapElement:this._element})}_showElement(e){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const t=SelectorEngine.findOne(SELECTOR_MODAL_BODY,this._dialog);t&&(t.scrollTop=0),reflow(this._element),this._element.classList.add(CLASS_NAME_SHOW$4);const r=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,EventHandler.trigger(this._element,EVENT_SHOWN$4,{relatedTarget:e})};this._queueCallback(r,this._dialog,this._isAnimated())}_addEventListeners(){EventHandler.on(this._element,EVENT_KEYDOWN_DISMISS$1,e=>{if(e.key===ESCAPE_KEY$1){if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}}),EventHandler.on(window,EVENT_RESIZE$1,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),EventHandler.on(this._element,EVENT_MOUSEDOWN_DISMISS,e=>{EventHandler.one(this._element,EVENT_CLICK_DISMISS,t=>{if(!(this._element!==e.target||this._element!==t.target)){if(this._config.backdrop==="static"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(CLASS_NAME_OPEN),this._resetAdjustments(),this._scrollBar.reset(),EventHandler.trigger(this._element,EVENT_HIDDEN$4)})}_isAnimated(){return this._element.classList.contains(CLASS_NAME_FADE$3)}_triggerBackdropTransition(){if(EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED$1).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,r=this._element.style.overflowY;r==="hidden"||this._element.classList.contains(CLASS_NAME_STATIC)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(CLASS_NAME_STATIC),this._queueCallback(()=>{this._element.classList.remove(CLASS_NAME_STATIC),this._queueCallback(()=>{this._element.style.overflowY=r},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._scrollBar.getWidth(),r=t>0;if(r&&!e){const o=isRTL()?"paddingLeft":"paddingRight";this._element.style[o]=`${t}px`}if(!r&&e){const o=isRTL()?"paddingRight":"paddingLeft";this._element.style[o]=`${t}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(e,t){return this.each(function(){const r=Modal.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof r[e]>"u")throw new TypeError(`No method named "${e}"`);r[e](t)}})}}EventHandler.on(document,EVENT_CLICK_DATA_API$2,SELECTOR_DATA_TOGGLE$2,function(n){const e=SelectorEngine.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&n.preventDefault(),EventHandler.one(e,EVENT_SHOW$4,o=>{o.defaultPrevented||EventHandler.one(e,EVENT_HIDDEN$4,()=>{isVisible(this)&&this.focus()})});const t=SelectorEngine.findOne(OPEN_SELECTOR$1);t&&Modal.getInstance(t).hide(),Modal.getOrCreateInstance(e).toggle(this)});enableDismissTrigger(Modal);defineJQueryPlugin(Modal);const NAME$6="offcanvas",DATA_KEY$3="bs.offcanvas",EVENT_KEY$3=`.${DATA_KEY$3}`,DATA_API_KEY$1=".data-api",EVENT_LOAD_DATA_API$2=`load${EVENT_KEY$3}${DATA_API_KEY$1}`,ESCAPE_KEY="Escape",CLASS_NAME_SHOW$3="show",CLASS_NAME_SHOWING$1="showing",CLASS_NAME_HIDING="hiding",CLASS_NAME_BACKDROP="offcanvas-backdrop",OPEN_SELECTOR=".offcanvas.show",EVENT_SHOW$3=`show${EVENT_KEY$3}`,EVENT_SHOWN$3=`shown${EVENT_KEY$3}`,EVENT_HIDE$3=`hide${EVENT_KEY$3}`,EVENT_HIDE_PREVENTED=`hidePrevented${EVENT_KEY$3}`,EVENT_HIDDEN$3=`hidden${EVENT_KEY$3}`,EVENT_RESIZE=`resize${EVENT_KEY$3}`,EVENT_CLICK_DATA_API$1=`click${EVENT_KEY$3}${DATA_API_KEY$1}`,EVENT_KEYDOWN_DISMISS=`keydown.dismiss${EVENT_KEY$3}`,SELECTOR_DATA_TOGGLE$1='[data-bs-toggle="offcanvas"]',Default$5={backdrop:!0,keyboard:!0,scroll:!1},DefaultType$5={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Offcanvas extends BaseComponent{constructor(e,t){super(e,t),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Default$5}static get DefaultType(){return DefaultType$5}static get NAME(){return NAME$6}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){if(this._isShown||EventHandler.trigger(this._element,EVENT_SHOW$3,{relatedTarget:e}).defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||new ScrollBarHelper().hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(CLASS_NAME_SHOWING$1);const r=()=>{(!this._config.scroll||this._config.backdrop)&&this._focustrap.activate(),this._element.classList.add(CLASS_NAME_SHOW$3),this._element.classList.remove(CLASS_NAME_SHOWING$1),EventHandler.trigger(this._element,EVENT_SHOWN$3,{relatedTarget:e})};this._queueCallback(r,this._element,!0)}hide(){if(!this._isShown||EventHandler.trigger(this._element,EVENT_HIDE$3).defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(CLASS_NAME_HIDING),this._backdrop.hide();const t=()=>{this._element.classList.remove(CLASS_NAME_SHOW$3,CLASS_NAME_HIDING),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||new ScrollBarHelper().reset(),EventHandler.trigger(this._element,EVENT_HIDDEN$3)};this._queueCallback(t,this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const e=()=>{if(this._config.backdrop==="static"){EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED);return}this.hide()},t=!!this._config.backdrop;return new Backdrop({className:CLASS_NAME_BACKDROP,isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?e:null})}_initializeFocusTrap(){return new FocusTrap({trapElement:this._element})}_addEventListeners(){EventHandler.on(this._element,EVENT_KEYDOWN_DISMISS,e=>{if(e.key===ESCAPE_KEY){if(this._config.keyboard){this.hide();return}EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED)}})}static jQueryInterface(e){return this.each(function(){const t=Offcanvas.getOrCreateInstance(this,e);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e](this)}})}}EventHandler.on(document,EVENT_CLICK_DATA_API$1,SELECTOR_DATA_TOGGLE$1,function(n){const e=SelectorEngine.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),isDisabled(this))return;EventHandler.one(e,EVENT_HIDDEN$3,()=>{isVisible(this)&&this.focus()});const t=SelectorEngine.findOne(OPEN_SELECTOR);t&&t!==e&&Offcanvas.getInstance(t).hide(),Offcanvas.getOrCreateInstance(e).toggle(this)});EventHandler.on(window,EVENT_LOAD_DATA_API$2,()=>{for(const n of SelectorEngine.find(OPEN_SELECTOR))Offcanvas.getOrCreateInstance(n).show()});EventHandler.on(window,EVENT_RESIZE,()=>{for(const n of SelectorEngine.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(n).position!=="fixed"&&Offcanvas.getOrCreateInstance(n).hide()});enableDismissTrigger(Offcanvas);defineJQueryPlugin(Offcanvas);const ARIA_ATTRIBUTE_PATTERN=/^aria-[\w-]*$/i,DefaultAllowlist={"*":["class","dir","id","lang","role",ARIA_ATTRIBUTE_PATTERN],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},uriAttributes=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),SAFE_URL_PATTERN=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,allowedAttribute=(n,e)=>{const t=n.nodeName.toLowerCase();return e.includes(t)?uriAttributes.has(t)?!!SAFE_URL_PATTERN.test(n.nodeValue):!0:e.filter(r=>r instanceof RegExp).some(r=>r.test(t))};function sanitizeHtml(n,e,t){if(!n.length)return n;if(t&&typeof t=="function")return t(n);const o=new window.DOMParser().parseFromString(n,"text/html"),s=[].concat(...o.body.querySelectorAll("*"));for(const l of s){const f=l.nodeName.toLowerCase();if(!Object.keys(e).includes(f)){l.remove();continue}const E=[].concat(...l.attributes),d=[].concat(e["*"]||[],e[f]||[]);for(const h of E)allowedAttribute(h,d)||l.removeAttribute(h.nodeName)}return o.body.innerHTML}const NAME$5="TemplateFactory",Default$4={allowList:DefaultAllowlist,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"<div></div>"},DefaultType$4={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},DefaultContentType={entry:"(string|element|function|null)",selector:"(string|element)"};class TemplateFactory extends Config{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Default$4}static get DefaultType(){return DefaultType$4}static get NAME(){return NAME$5}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[o,s]of Object.entries(this._config.content))this._setContent(e,s,o);const t=e.children[0],r=this._resolvePossibleFunction(this._config.extraClass);return r&&t.classList.add(...r.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,r]of Object.entries(e))super._typeCheckConfig({selector:t,entry:r},DefaultContentType)}_setContent(e,t,r){const o=SelectorEngine.findOne(r,e);if(o){if(t=this._resolvePossibleFunction(t),!t){o.remove();return}if(isElement(t)){this._putElementInTemplate(getElement(t),o);return}if(this._config.html){o.innerHTML=this._maybeSanitize(t);return}o.textContent=t}}_maybeSanitize(e){return this._config.sanitize?sanitizeHtml(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return execute(e,[this])}_putElementInTemplate(e,t){if(this._config.html){t.innerHTML="",t.append(e);return}t.textContent=e.textContent}}const NAME$4="tooltip",DISALLOWED_ATTRIBUTES=new Set(["sanitize","allowList","sanitizeFn"]),CLASS_NAME_FADE$2="fade",CLASS_NAME_MODAL="modal",CLASS_NAME_SHOW$2="show",SELECTOR_TOOLTIP_INNER=".tooltip-inner",SELECTOR_MODAL=`.${CLASS_NAME_MODAL}`,EVENT_MODAL_HIDE="hide.bs.modal",TRIGGER_HOVER="hover",TRIGGER_FOCUS="focus",TRIGGER_CLICK="click",TRIGGER_MANUAL="manual",EVENT_HIDE$2="hide",EVENT_HIDDEN$2="hidden",EVENT_SHOW$2="show",EVENT_SHOWN$2="shown",EVENT_INSERTED="inserted",EVENT_CLICK$1="click",EVENT_FOCUSIN$1="focusin",EVENT_FOCUSOUT$1="focusout",EVENT_MOUSEENTER="mouseenter",EVENT_MOUSELEAVE="mouseleave",AttachmentMap={AUTO:"auto",TOP:"top",RIGHT:isRTL()?"left":"right",BOTTOM:"bottom",LEFT:isRTL()?"right":"left"},Default$3={allowList:DefaultAllowlist,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',title:"",trigger:"hover focus"},DefaultType$3={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Tooltip extends BaseComponent{constructor(e,t){if(typeof Popper>"u")throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Default$3}static get DefaultType(){return DefaultType$3}static get NAME(){return NAME$4}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){if(this._isEnabled){if(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()){this._leave();return}this._enter()}}dispose(){clearTimeout(this._timeout),EventHandler.off(this._element.closest(SELECTOR_MODAL),EVENT_MODAL_HIDE,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!(this._isWithContent()&&this._isEnabled))return;const e=EventHandler.trigger(this._element,this.constructor.eventName(EVENT_SHOW$2)),r=(findShadowRoot(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!r)return;this._disposePopper();const o=this._getTipElement();this._element.setAttribute("aria-describedby",o.getAttribute("id"));const{container:s}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(s.append(o),EventHandler.trigger(this._element,this.constructor.eventName(EVENT_INSERTED))),this._popper=this._createPopper(o),o.classList.add(CLASS_NAME_SHOW$2),"ontouchstart"in document.documentElement)for(const f of[].concat(...document.body.children))EventHandler.on(f,"mouseover",noop);const l=()=>{EventHandler.trigger(this._element,this.constructor.eventName(EVENT_SHOWN$2)),this._isHovered===!1&&this._leave(),this._isHovered=!1};this._queueCallback(l,this.tip,this._isAnimated())}hide(){if(!this._isShown()||EventHandler.trigger(this._element,this.constructor.eventName(EVENT_HIDE$2)).defaultPrevented)return;if(this._getTipElement().classList.remove(CLASS_NAME_SHOW$2),"ontouchstart"in document.documentElement)for(const o of[].concat(...document.body.children))EventHandler.off(o,"mouseover",noop);this._activeTrigger[TRIGGER_CLICK]=!1,this._activeTrigger[TRIGGER_FOCUS]=!1,this._activeTrigger[TRIGGER_HOVER]=!1,this._isHovered=null;const r=()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),EventHandler.trigger(this._element,this.constructor.eventName(EVENT_HIDDEN$2)))};this._queueCallback(r,this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(CLASS_NAME_FADE$2,CLASS_NAME_SHOW$2),t.classList.add(`bs-${this.constructor.NAME}-auto`);const r=getUID(this.constructor.NAME).toString();return t.setAttribute("id",r),this._isAnimated()&&t.classList.add(CLASS_NAME_FADE$2),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new TemplateFactory({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[SELECTOR_TOOLTIP_INNER]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(CLASS_NAME_FADE$2)}_isShown(){return this.tip&&this.tip.classList.contains(CLASS_NAME_SHOW$2)}_createPopper(e){const t=execute(this._config.placement,[this,e,this._element]),r=AttachmentMap[t.toUpperCase()];return createPopper(this._element,e,this._getPopperConfig(r))}_getOffset(){const{offset:e}=this._config;return typeof e=="string"?e.split(",").map(t=>Number.parseInt(t,10)):typeof e=="function"?t=>e(t,this._element):e}_resolvePossibleFunction(e){return execute(e,[this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:r=>{this._getTipElement().setAttribute("data-popper-placement",r.state.placement)}}]};return{...t,...execute(this._config.popperConfig,[t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if(t==="click")EventHandler.on(this._element,this.constructor.eventName(EVENT_CLICK$1),this._config.selector,r=>{this._initializeOnDelegatedTarget(r).toggle()});else if(t!==TRIGGER_MANUAL){const r=t===TRIGGER_HOVER?this.constructor.eventName(EVENT_MOUSEENTER):this.constructor.eventName(EVENT_FOCUSIN$1),o=t===TRIGGER_HOVER?this.constructor.eventName(EVENT_MOUSELEAVE):this.constructor.eventName(EVENT_FOCUSOUT$1);EventHandler.on(this._element,r,this._config.selector,s=>{const l=this._initializeOnDelegatedTarget(s);l._activeTrigger[s.type==="focusin"?TRIGGER_FOCUS:TRIGGER_HOVER]=!0,l._enter()}),EventHandler.on(this._element,o,this._config.selector,s=>{const l=this._initializeOnDelegatedTarget(s);l._activeTrigger[s.type==="focusout"?TRIGGER_FOCUS:TRIGGER_HOVER]=l._element.contains(s.relatedTarget),l._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},EventHandler.on(this._element.closest(SELECTOR_MODAL),EVENT_MODAL_HIDE,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(!this._element.getAttribute("aria-label")&&!this._element.textContent.trim()&&this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){if(this._isShown()||this._isHovered){this._isHovered=!0;return}this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show)}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=Manipulator.getDataAttributes(this._element);for(const r of Object.keys(t))DISALLOWED_ATTRIBUTES.has(r)&&delete t[r];return e={...t,...typeof e=="object"&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=e.container===!1?document.body:getElement(e.container),typeof e.delay=="number"&&(e.delay={show:e.delay,hide:e.delay}),typeof e.title=="number"&&(e.title=e.title.toString()),typeof e.content=="number"&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,r]of Object.entries(this._config))this.constructor.Default[t]!==r&&(e[t]=r);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){const t=Tooltip.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]>"u")throw new TypeError(`No method named "${e}"`);t[e]()}})}}defineJQueryPlugin(Tooltip);const NAME$3="popover",SELECTOR_TITLE=".popover-header",SELECTOR_CONTENT=".popover-body",Default$2={...Tooltip.Default,content:"",offset:[0,8],placement:"right",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',trigger:"click"},DefaultType$2={...Tooltip.DefaultType,content:"(null|string|element|function)"};class Popover extends Tooltip{static get Default(){return Default$2}static get DefaultType(){return DefaultType$2}static get NAME(){return NAME$3}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[SELECTOR_TITLE]:this._getTitle(),[SELECTOR_CONTENT]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(e){return this.each(function(){const t=Popover.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]>"u")throw new TypeError(`No method named "${e}"`);t[e]()}})}}defineJQueryPlugin(Popover);const NAME$2="scrollspy",DATA_KEY$2="bs.scrollspy",EVENT_KEY$2=`.${DATA_KEY$2}`,DATA_API_KEY=".data-api",EVENT_ACTIVATE=`activate${EVENT_KEY$2}`,EVENT_CLICK=`click${EVENT_KEY$2}`,EVENT_LOAD_DATA_API$1=`load${EVENT_KEY$2}${DATA_API_KEY}`,CLASS_NAME_DROPDOWN_ITEM="dropdown-item",CLASS_NAME_ACTIVE$1="active",SELECTOR_DATA_SPY='[data-bs-spy="scroll"]',SELECTOR_TARGET_LINKS="[href]",SELECTOR_NAV_LIST_GROUP=".nav, .list-group",SELECTOR_NAV_LINKS=".nav-link",SELECTOR_NAV_ITEMS=".nav-item",SELECTOR_LIST_ITEMS=".list-group-item",SELECTOR_LINK_ITEMS=`${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`,SELECTOR_DROPDOWN=".dropdown",SELECTOR_DROPDOWN_TOGGLE$1=".dropdown-toggle",Default$1={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},DefaultType$1={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class ScrollSpy extends BaseComponent{constructor(e,t){super(e,t),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Default$1}static get DefaultType(){return DefaultType$1}static get NAME(){return NAME$2}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const e of this._observableSections.values())this._observer.observe(e)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(e){return e.target=getElement(e.target)||document.body,e.rootMargin=e.offset?`${e.offset}px 0px -30%`:e.rootMargin,typeof e.threshold=="string"&&(e.threshold=e.threshold.split(",").map(t=>Number.parseFloat(t))),e}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(EventHandler.off(this._config.target,EVENT_CLICK),EventHandler.on(this._config.target,EVENT_CLICK,SELECTOR_TARGET_LINKS,e=>{const t=this._observableSections.get(e.target.hash);if(t){e.preventDefault();const r=this._rootElement||window,o=t.offsetTop-this._element.offsetTop;if(r.scrollTo){r.scrollTo({top:o,behavior:"smooth"});return}r.scrollTop=o}}))}_getNewObserver(){const e={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(t=>this._observerCallback(t),e)}_observerCallback(e){const t=l=>this._targetLinks.get(`#${l.target.id}`),r=l=>{this._previousScrollData.visibleEntryTop=l.target.offsetTop,this._process(t(l))},o=(this._rootElement||document.documentElement).scrollTop,s=o>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=o;for(const l of e){if(!l.isIntersecting){this._activeTarget=null,this._clearActiveClass(t(l));continue}const f=l.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&f){if(r(l),!o)return;continue}!s&&!f&&r(l)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const e=SelectorEngine.find(SELECTOR_TARGET_LINKS,this._config.target);for(const t of e){if(!t.hash||isDisabled(t))continue;const r=SelectorEngine.findOne(decodeURI(t.hash),this._element);isVisible(r)&&(this._targetLinks.set(decodeURI(t.hash),t),this._observableSections.set(t.hash,r))}}_process(e){this._activeTarget!==e&&(this._clearActiveClass(this._config.target),this._activeTarget=e,e.classList.add(CLASS_NAME_ACTIVE$1),this._activateParents(e),EventHandler.trigger(this._element,EVENT_ACTIVATE,{relatedTarget:e}))}_activateParents(e){if(e.classList.contains(CLASS_NAME_DROPDOWN_ITEM)){SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1,e.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);return}for(const t of SelectorEngine.parents(e,SELECTOR_NAV_LIST_GROUP))for(const r of SelectorEngine.prev(t,SELECTOR_LINK_ITEMS))r.classList.add(CLASS_NAME_ACTIVE$1)}_clearActiveClass(e){e.classList.remove(CLASS_NAME_ACTIVE$1);const t=SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`,e);for(const r of t)r.classList.remove(CLASS_NAME_ACTIVE$1)}static jQueryInterface(e){return this.each(function(){const t=ScrollSpy.getOrCreateInstance(this,e);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e]()}})}}EventHandler.on(window,EVENT_LOAD_DATA_API$1,()=>{for(const n of SelectorEngine.find(SELECTOR_DATA_SPY))ScrollSpy.getOrCreateInstance(n)});defineJQueryPlugin(ScrollSpy);const NAME$1="tab",DATA_KEY$1="bs.tab",EVENT_KEY$1=`.${DATA_KEY$1}`,EVENT_HIDE$1=`hide${EVENT_KEY$1}`,EVENT_HIDDEN$1=`hidden${EVENT_KEY$1}`,EVENT_SHOW$1=`show${EVENT_KEY$1}`,EVENT_SHOWN$1=`shown${EVENT_KEY$1}`,EVENT_CLICK_DATA_API=`click${EVENT_KEY$1}`,EVENT_KEYDOWN=`keydown${EVENT_KEY$1}`,EVENT_LOAD_DATA_API=`load${EVENT_KEY$1}`,ARROW_LEFT_KEY="ArrowLeft",ARROW_RIGHT_KEY="ArrowRight",ARROW_UP_KEY="ArrowUp",ARROW_DOWN_KEY="ArrowDown",HOME_KEY="Home",END_KEY="End",CLASS_NAME_ACTIVE="active",CLASS_NAME_FADE$1="fade",CLASS_NAME_SHOW$1="show",CLASS_DROPDOWN="dropdown",SELECTOR_DROPDOWN_TOGGLE=".dropdown-toggle",SELECTOR_DROPDOWN_MENU=".dropdown-menu",NOT_SELECTOR_DROPDOWN_TOGGLE=`:not(${SELECTOR_DROPDOWN_TOGGLE})`,SELECTOR_TAB_PANEL='.list-group, .nav, [role="tablist"]',SELECTOR_OUTER=".nav-item, .list-group-item",SELECTOR_INNER=`.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`,SELECTOR_DATA_TOGGLE='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',SELECTOR_INNER_ELEM=`${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`,SELECTOR_DATA_TOGGLE_ACTIVE=`.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;class Tab extends BaseComponent{constructor(e){super(e),this._parent=this._element.closest(SELECTOR_TAB_PANEL),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),EventHandler.on(this._element,EVENT_KEYDOWN,t=>this._keydown(t)))}static get NAME(){return NAME$1}show(){const e=this._element;if(this._elemIsActive(e))return;const t=this._getActiveElem(),r=t?EventHandler.trigger(t,EVENT_HIDE$1,{relatedTarget:e}):null;EventHandler.trigger(e,EVENT_SHOW$1,{relatedTarget:t}).defaultPrevented||r&&r.defaultPrevented||(this._deactivate(t,e),this._activate(e,t))}_activate(e,t){if(!e)return;e.classList.add(CLASS_NAME_ACTIVE),this._activate(SelectorEngine.getElementFromSelector(e));const r=()=>{if(e.getAttribute("role")!=="tab"){e.classList.add(CLASS_NAME_SHOW$1);return}e.removeAttribute("tabindex"),e.setAttribute("aria-selected",!0),this._toggleDropDown(e,!0),EventHandler.trigger(e,EVENT_SHOWN$1,{relatedTarget:t})};this._queueCallback(r,e,e.classList.contains(CLASS_NAME_FADE$1))}_deactivate(e,t){if(!e)return;e.classList.remove(CLASS_NAME_ACTIVE),e.blur(),this._deactivate(SelectorEngine.getElementFromSelector(e));const r=()=>{if(e.getAttribute("role")!=="tab"){e.classList.remove(CLASS_NAME_SHOW$1);return}e.setAttribute("aria-selected",!1),e.setAttribute("tabindex","-1"),this._toggleDropDown(e,!1),EventHandler.trigger(e,EVENT_HIDDEN$1,{relatedTarget:t})};this._queueCallback(r,e,e.classList.contains(CLASS_NAME_FADE$1))}_keydown(e){if(![ARROW_LEFT_KEY,ARROW_RIGHT_KEY,ARROW_UP_KEY,ARROW_DOWN_KEY,HOME_KEY,END_KEY].includes(e.key))return;e.stopPropagation(),e.preventDefault();const t=this._getChildren().filter(o=>!isDisabled(o));let r;if([HOME_KEY,END_KEY].includes(e.key))r=t[e.key===HOME_KEY?0:t.length-1];else{const o=[ARROW_RIGHT_KEY,ARROW_DOWN_KEY].includes(e.key);r=getNextActiveElement(t,e.target,o,!0)}r&&(r.focus({preventScroll:!0}),Tab.getOrCreateInstance(r).show())}_getChildren(){return SelectorEngine.find(SELECTOR_INNER_ELEM,this._parent)}_getActiveElem(){return this._getChildren().find(e=>this._elemIsActive(e))||null}_setInitialAttributes(e,t){this._setAttributeIfNotExists(e,"role","tablist");for(const r of t)this._setInitialAttributesOnChild(r)}_setInitialAttributesOnChild(e){e=this._getInnerElement(e);const t=this._elemIsActive(e),r=this._getOuterElement(e);e.setAttribute("aria-selected",t),r!==e&&this._setAttributeIfNotExists(r,"role","presentation"),t||e.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(e,"role","tab"),this._setInitialAttributesOnTargetPanel(e)}_setInitialAttributesOnTargetPanel(e){const t=SelectorEngine.getElementFromSelector(e);t&&(this._setAttributeIfNotExists(t,"role","tabpanel"),e.id&&this._setAttributeIfNotExists(t,"aria-labelledby",`${e.id}`))}_toggleDropDown(e,t){const r=this._getOuterElement(e);if(!r.classList.contains(CLASS_DROPDOWN))return;const o=(s,l)=>{const f=SelectorEngine.findOne(s,r);f&&f.classList.toggle(l,t)};o(SELECTOR_DROPDOWN_TOGGLE,CLASS_NAME_ACTIVE),o(SELECTOR_DROPDOWN_MENU,CLASS_NAME_SHOW$1),r.setAttribute("aria-expanded",t)}_setAttributeIfNotExists(e,t,r){e.hasAttribute(t)||e.setAttribute(t,r)}_elemIsActive(e){return e.classList.contains(CLASS_NAME_ACTIVE)}_getInnerElement(e){return e.matches(SELECTOR_INNER_ELEM)?e:SelectorEngine.findOne(SELECTOR_INNER_ELEM,e)}_getOuterElement(e){return e.closest(SELECTOR_OUTER)||e}static jQueryInterface(e){return this.each(function(){const t=Tab.getOrCreateInstance(this);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e]()}})}}EventHandler.on(document,EVENT_CLICK_DATA_API,SELECTOR_DATA_TOGGLE,function(n){["A","AREA"].includes(this.tagName)&&n.preventDefault(),!isDisabled(this)&&Tab.getOrCreateInstance(this).show()});EventHandler.on(window,EVENT_LOAD_DATA_API,()=>{for(const n of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE))Tab.getOrCreateInstance(n)});defineJQueryPlugin(Tab);const NAME="toast",DATA_KEY="bs.toast",EVENT_KEY=`.${DATA_KEY}`,EVENT_MOUSEOVER=`mouseover${EVENT_KEY}`,EVENT_MOUSEOUT=`mouseout${EVENT_KEY}`,EVENT_FOCUSIN=`focusin${EVENT_KEY}`,EVENT_FOCUSOUT=`focusout${EVENT_KEY}`,EVENT_HIDE=`hide${EVENT_KEY}`,EVENT_HIDDEN=`hidden${EVENT_KEY}`,EVENT_SHOW=`show${EVENT_KEY}`,EVENT_SHOWN=`shown${EVENT_KEY}`,CLASS_NAME_FADE="fade",CLASS_NAME_HIDE="hide",CLASS_NAME_SHOW="show",CLASS_NAME_SHOWING="showing",DefaultType={animation:"boolean",autohide:"boolean",delay:"number"},Default={animation:!0,autohide:!0,delay:5e3};class Toast extends BaseComponent{constructor(e,t){super(e,t),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Default}static get DefaultType(){return DefaultType}static get NAME(){return NAME}show(){if(EventHandler.trigger(this._element,EVENT_SHOW).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add(CLASS_NAME_FADE);const t=()=>{this._element.classList.remove(CLASS_NAME_SHOWING),EventHandler.trigger(this._element,EVENT_SHOWN),this._maybeScheduleHide()};this._element.classList.remove(CLASS_NAME_HIDE),reflow(this._element),this._element.classList.add(CLASS_NAME_SHOW,CLASS_NAME_SHOWING),this._queueCallback(t,this._element,this._config.animation)}hide(){if(!this.isShown()||EventHandler.trigger(this._element,EVENT_HIDE).defaultPrevented)return;const t=()=>{this._element.classList.add(CLASS_NAME_HIDE),this._element.classList.remove(CLASS_NAME_SHOWING,CLASS_NAME_SHOW),EventHandler.trigger(this._element,EVENT_HIDDEN)};this._element.classList.add(CLASS_NAME_SHOWING),this._queueCallback(t,this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(CLASS_NAME_SHOW),super.dispose()}isShown(){return this._element.classList.contains(CLASS_NAME_SHOW)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(e,t){switch(e.type){case"mouseover":case"mouseout":{this._hasMouseInteraction=t;break}case"focusin":case"focusout":{this._hasKeyboardInteraction=t;break}}if(t){this._clearTimeout();return}const r=e.relatedTarget;this._element===r||this._element.contains(r)||this._maybeScheduleHide()}_setListeners(){EventHandler.on(this._element,EVENT_MOUSEOVER,e=>this._onInteraction(e,!0)),EventHandler.on(this._element,EVENT_MOUSEOUT,e=>this._onInteraction(e,!1)),EventHandler.on(this._element,EVENT_FOCUSIN,e=>this._onInteraction(e,!0)),EventHandler.on(this._element,EVENT_FOCUSOUT,e=>this._onInteraction(e,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each(function(){const t=Toast.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]>"u")throw new TypeError(`No method named "${e}"`);t[e](this)}})}}enableDismissTrigger(Toast);defineJQueryPlugin(Toast);class AutoLookUpAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");F(this,"makeQuery",(e,t)=>{if(typeof t=="number")return`${e.code} = ${t}`;if(typeof t=="string")return`${e.code} = "${t}"`});F(this,"getUpdateRecords",async(e,t)=>await new index_browser.KintoneRestAPIClient().record.getAllRecords({app:this.props.lookupField.app.id,fields:["$id"],condition:this.makeQuery(e,t)}));F(this,"convertForLookup",(e,t,r)=>e.map(o=>({id:Number(o.$id.value),record:{[t.code]:{value:r}}})));F(this,"updateLookupTarget",async e=>{e&&e.length>0&&new index_browser.KintoneRestAPIClient().record.updateAllRecords({app:this.props.lookupField.app.id,records:e})});F(this,"showSpinnerModel",e=>{let t=$("#alcLookupModal");if(t.length===0){const r=`
|
||
<div class="modal" id="alcLookupModal" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
|
||
<div class="modal-dialog-centered">
|
||
<div class="modal-dialog modal-content">
|
||
<div class="modal-header">
|
||
<h1 class="modal-title fs-5" id="alcLookupModalLabel">ルックアップ同期処理</h1>
|
||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<div class="row" id="app${e.id}">
|
||
<div class="spinner-border text-secondary col-1 " role="alert"></div>
|
||
<div class="col">${e.name}</div>
|
||
</div>
|
||
</div>
|
||
<div class="modal-footer">
|
||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">OK</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>`;t=$(r).appendTo("body"),t.get()[0].addEventListener("hidden.bs.modal",o=>{Modal.getOrCreateInstance(t.get()[0]).dispose(),$("#alcLookupModal").remove()})}else{const r=$("#alcLookupModal .modal-body"),o=`
|
||
<div class="row" id="app${e.id}">
|
||
<div class="spinner-border text-secondary col-1 " role="alert">
|
||
</div>
|
||
<div class="col">${e.name}</div>
|
||
<div>`;r.append(o)}Modal.getOrCreateInstance(t.get()[0]).show()});F(this,"showResult",(e,t)=>{const r=$(`#alcLookupModal .modal-body #app${e.id}`),o=` <div class="col-1 text-success">✔</div>
|
||
<div class="col">${e.name}</div>
|
||
<div class="col">更新件数:${t}件</div>`;r.html(o)});this.name="ルックアップ更新",this.actionProps=[],this.props={},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.props={...e.ActionValue,condition:JSON.parse(e.ActionValue.condition)};let o={canNext:!0,result:""};try{const s=this.props.lookupField.fields.filter(h=>h.lookup&&h.lookup.relatedApp.app===String(kintone.app.getId()));if(!s||s.length===0)throw new Error(`ルックアップの設定は不正です。${this.props.lookupField.fields[0].label} `);const l=this.props.lookupField.fields[0],f=t.record[l.lookup.relatedKeyField].value,E=await this.getUpdateRecords(l,f);if(E.length===0)return o;const d=this.convertForLookup(E,l,f);console.log("updateRecords",d),this.showSpinnerModel(this.props.lookupField.app),await this.updateLookupTarget(d),this.showResult(this.props.lookupField.app,d.length)}catch(s){console.error("ルックアップ更新中例外が発生しました。",s),s instanceof Error?t.error=s.message:t.error="ルックアップ更新中例外が発生しました。",o.canNext=!1}return console.log("autoLookupProps",this.props),o}register(){actionAddins[this.name]=this}}new AutoLookUpAction;class ActionProcess{constructor(e,t,r){F(this,"eventId");F(this,"flow");F(this,"event");F(this,"context");this.eventId=e,this.flow=t,this.event=r,this.context={record:this.event.record,variables:{}}}async exec(){const e=this.flow.getRoot();if(e===void 0||e.nextNodeIds.size===0)return;let t=e.nextNodeIds.get("");if(t===void 0)return;let r=this.flow.findNodeById(t),o={canNext:!0};for(;r!==void 0&&o.canNext;){const s=actionAddins[r.name];s!==void 0&&(o=await s.process(r,this.event,this.context));let l="";if(r.outputPoints&&r.outputPoints.length>1&&(l=o.result||""),t=r.nextNodeIds.get(l),t===void 0)return;r=this.flow.findNodeById(t)}}}class ActionProperty{constructor(e,t,r,o,s){F(this,"component");F(this,"props");this.component=e,this.props={name:t,displayName:r,placeholder:o,modelValue:s}}static defaultProperty(){return new ActionProperty("InputText","displayName","表示名","表示を入力してください","")}}class ActionNode{constructor({id:e,name:t,title:r,inputPoint:o,outputPoints:s,actionProps:l}){F(this,"id");F(this,"name");F(this,"inputPoint");F(this,"outputPoints");F(this,"actionProps");F(this,"prevNodeId");F(this,"nextNodeIds");this.id=e,this.name=t,this.inputPoint=o,this.outputPoints=s;const f=ActionProperty.defaultProperty();f.props.modelValue=r,this.actionProps=l,this.nextNodeIds=new Map}get title(){const e=this.actionProps.find(t=>t.props.name==="displayName");return e==null?void 0:e.props.modelValue}get subTitle(){return this.name}get isRoot(){return!1}get ActionValue(){const e={};return this.actionProps.forEach(t=>{e[t.props.name]=t.props.modelValue}),e}}class RootAction{constructor({id:e,name:t,title:r,subTitle:o}){F(this,"id");F(this,"name");F(this,"title");F(this,"subTitle");F(this,"inputPoint");F(this,"outputPoints");F(this,"isRoot");F(this,"actionProps");F(this,"ActionValue");F(this,"prevNodeId");F(this,"nextNodeIds");this.id=e,this.name=t,this.title=r,this.subTitle=o,this.inputPoint="",this.outputPoints=[],this.isRoot=!0,this.actionProps=[],this.ActionValue={},this.nextNodeIds=new Map}}class ActionFlow{constructor(e){F(this,"id");F(this,"actionNodes");e instanceof Array?this.actionNodes=e:this.actionNodes=[e],this.id=""}findNodeById(e){return this.actionNodes.find(t=>t.id===e)}toJSON(){return{id:this.id,actionNodes:this.actionNodes.map(e=>{const{nextNodeIds:t,...r}=e;return{...r,nextNodeIds:Array.from(t.entries())}})}}getRoot(){return this.actionNodes.find(e=>e.isRoot)}static fromJSON(e){const t=JSON.parse(e),r=t.actionNodes.map(s=>{const l=s.isRoot?new RootAction(s):new ActionNode(s);return l.nextNodeIds=new Map(Object.entries(s.nextNodeIds)),l.prevNodeId=s.prevNodeId,l.id=s.id,l}),o=new ActionFlow(r);return o.id=t.id,o}}$(function(){const n=f=>f.filter(E=>E.includes(".change.")),e=f=>f.filter(E=>E.includes(".customButtonClick.")),t=f=>f.filter(E=>!E.includes(".customButtonClick.")&&!E.includes(".change.")),r=Object.keys(alcflow),o=n(r),s=e(r),l=t(r);l.length>0&&kintone.events.on(l,async f=>{const E=alcflow[f.type],d=ActionFlow.fromJSON(E.content);return d!==void 0&&await new ActionProcess(f.type,d,f).exec(),f}),o.length>0&&kintone.events.on(o,f=>{const E=alcflow[f.type],d=ActionFlow.fromJSON(E.content);return d!==void 0&&new ActionProcess(f.type,d,f).exec(),f}),s.length>0&&s.forEach(f=>{$(document).on(f,async()=>{const E=kintone.app.record.get(),d=alcflow[f],h=ActionFlow.fromJSON(d.content);h!==void 0&&await new ActionProcess(f,h,E).exec();const y=E.record;kintone.app.record.set({record:y})})})});
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxjX3J1bnRpbWUuanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCIuLi9zcmMvYWN0aW9ucy9pbmRleC50cyIsIi4uL3NyYy9hY3Rpb25zL211c3QtaW5wdXQudHMiLCIuLi9zcmMvdXRpbC9mb3JtYXQudHMiLCIuLi9zcmMvYWN0aW9ucy9hdXRvLW51bWJlcmluZy50cyIsIi4uL3NyYy90eXBlcy9Db25kaXRpb25zLnRzIiwiLi4vc3JjL2FjdGlvbnMvZmllbGQtc2hvd24udHMiLCIuLi9zcmMvYWN0aW9ucy9lcnJvci1zaG93LnRzIiwiLi4vc3JjL2FjdGlvbnMvYnV0dG9uLWFkZC50cyIsIi4uL3NyYy9hY3Rpb25zL2NvbmRpdGlvbi1hY3Rpb24udHMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvcGxhdGZvcm0vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvcGxhdGZvcm0vVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL21pbWUvTWltZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9taW1lL3R5cGVzL3N0YW5kYXJkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL21pbWUvbGl0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9wbGF0Zm9ybS9icm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL3VybC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9jbGllbnQvQmFzZUNsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9jbGllbnQvQnVsa1JlcXVlc3RDbGllbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvY2xpZW50L0FwcENsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9lcnJvci9LaW50b25lQWJvcnRTZWFyY2hFcnJvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9lcnJvci9LaW50b25lQWxsUmVjb3Jkc0Vycm9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL2Vycm9yL0tpbnRvbmVSZXN0QVBJRXJyb3IuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvZXJyb3IvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvY2xpZW50L1JlY29yZENsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9jbGllbnQvU3BhY2VDbGllbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9icm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL2NsaWVudC9GaWxlQ2xpZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2Rpc3QvYnJvd3Nlci9heGlvcy5janMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvaHR0cC9BeGlvc0NsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9odHRwL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvZXZhbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvcmFuZ2UuanMiLCIuLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3JlZi5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvc3ludGF4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy90eXBlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy91cmkuanMiLCIuLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanMiLCIuLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvaGFzLXByb3RvL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9oYXNvd24vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1kZWZpbmUtcHJvcGVydHkvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ29wZC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9kZWZpbmUtZGF0YS1wcm9wZXJ0eS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9oYXMtcHJvcGVydHktZGVzY3JpcHRvcnMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvc2V0LWZ1bmN0aW9uLWxlbmd0aC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2NhbGxCb3VuZC5qcyIsIi4uL19fdml0ZS1icm93c2VyLWV4dGVybmFsIiwiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1pbnNwZWN0L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9xcy9saWIvZm9ybWF0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9xcy9saWIvdXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcXMvbGliL3N0cmluZ2lmeS5qcyIsIi4uL25vZGVfbW9kdWxlcy9xcy9saWIvcGFyc2UuanMiLCIuLi9ub2RlX21vZHVsZXMvcXMvbGliL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2pzLWJhc2U2NC9iYXNlNjQuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL0tpbnRvbmVSZXNwb25zZUhhbmRsZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvS2ludG9uZVJlc3RBUElDbGllbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvaW5kZXguYnJvd3Nlci5qcyIsIi4uL3NyYy90eXBlcy9GaWVsZExheW91dC50cyIsIi4uL3NyYy91dGlsL2FnZ3JlZ2F0ZXMudHMiLCIuLi9zcmMvYWN0aW9ucy9kYXRhLXByb2Nlc3NpbmcudHMiLCIuLi9zcmMvYWN0aW9ucy9kYXRhLXVwZGF0ZS50cyIsIi4uL3NyYy9hY3Rpb25zL2N1cnJlbnQtZmllbGQtZ2V0LnRzIiwiLi4vc3JjL2FjdGlvbnMvcmVndWxhci1jaGVjay50cyIsIi4uL3NyYy9hY3Rpb25zL21haWwtY2hlY2sudHMiLCIuLi9zcmMvYWN0aW9ucy9jb3VudGVyLWNoZWNrLnRzIiwiLi4vc3JjL2FjdGlvbnMvZGF0ZXRpbWUtZ2V0dGVyLnRzIiwiLi4vc3JjL2FjdGlvbnMvaW5zZXJ0LXZhbHVlLnRzIiwiLi4vc3JjL2FjdGlvbnMvdmFsdWUtZ2V0dGVyLnRzIiwiLi4vc3JjL2FjdGlvbnMvc3RyaW5nLWpvaW4udHMiLCIuLi9zcmMvYWN0aW9ucy92YWxpZGF0aW9uLWZ1bGx3aWR0aC50cyIsIi4uL3NyYy9hY3Rpb25zL3ZhbGlkYXRpb24taGFsZndpZHRoLnRzIiwiLi4vc3JjL2FjdGlvbnMvbG9naW4tdXNlci1nZXR0ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvZG9tL2RhdGEuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvdXRpbC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC9kb20vZXZlbnQtaGFuZGxlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC9kb20vbWFuaXB1bGF0b3IuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvdXRpbC9jb25maWcuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvYmFzZS1jb21wb25lbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvZG9tL3NlbGVjdG9yLWVuZ2luZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC91dGlsL2JhY2tkcm9wLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9kaXN0L3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC91dGlsL2ZvY3VzdHJhcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC91dGlsL3Njcm9sbGJhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC9tb2RhbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVTY3JvbGwuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGVib3VuY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9jcmVhdGVQb3BwZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci1saXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9wb3BwZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLmVzbS5qcyIsIi4uL3NyYy9hY3Rpb25zL2F1dG8tbG9va3VwLnRzIiwiLi4vc3JjL3R5cGVzL2FjdGlvbi1wcm9jZXNzLnRzIiwiLi4vc3JjL3R5cGVzL0FjdGlvblR5cGVzLnRzIiwiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My43LjFcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMjMtMDgtMjhUMTM6MzdaXG4gKi9cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0IHRyYWMtMTQ1NDkgZm9yIG1vcmUgaW5mby5cblx0XHRtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XG5cdFx0XHRmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6XG5cdFx0XHRmdW5jdGlvbiggdyApIHtcblx0XHRcdFx0aWYgKCAhdy5kb2N1bWVudCApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoIFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkoIHcgKTtcblx0XHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeSggZ2xvYmFsICk7XG5cdH1cblxuLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXRcbn0gKSggdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkge1xuXG4vLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjFcbi8vIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBub24tc3RyaWN0IGNvZGUgKGUuZy4sIEFTUC5ORVQgNC41KSBhY2Nlc3NlcyBzdHJpY3QgbW9kZVxuLy8gYXJndW1lbnRzLmNhbGxlZS5jYWxsZXIgKHRyYWMtMTMzMzUpLiBCdXQgYXMgb2YgalF1ZXJ5IDMuMCAoMjAxNiksIHN0cmljdCBtb2RlIHNob3VsZCBiZSBjb21tb25cbi8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLlxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnIgPSBbXTtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBmbGF0ID0gYXJyLmZsYXQgPyBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuZmxhdC5jYWxsKCBhcnJheSApO1xufSA6IGZ1bmN0aW9uKCBhcnJheSApIHtcblx0cmV0dXJuIGFyci5jb25jYXQuYXBwbHkoIFtdLCBhcnJheSApO1xufTtcblxuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XG5cbnZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NTcsIEZpcmVmb3ggPD01MlxuXHRcdC8vIEluIHNvbWUgYnJvd3NlcnMsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCA8b2JqZWN0PiBlbGVtZW50c1xuXHRcdC8vIChpLmUuLCBgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib2JqZWN0XCIgKSA9PT0gXCJmdW5jdGlvblwiYCkuXG5cdFx0Ly8gV2UgZG9uJ3Qgd2FudCB0byBjbGFzc2lmeSAqYW55KiBET00gbm9kZSBhcyBhIGZ1bmN0aW9uLlxuXHRcdC8vIFN1cHBvcnQ6IFF0V2ViIDw9My44LjUsIFdlYktpdCA8PTUzNC4zNCwgd2todG1sdG9wZGYgdG9vbCA8PTAuMTIuNVxuXHRcdC8vIFBsdXMgZm9yIG9sZCBXZWJLaXQsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCBjb2xsZWN0aW9uc1xuXHRcdC8vIChlLmcuLCBgdHlwZW9mIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGl2XCIpID09PSBcImZ1bmN0aW9uXCJgKS4gKGdoLTQ3NTYpXG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSBcIm51bWJlclwiICYmXG5cdFx0XHR0eXBlb2Ygb2JqLml0ZW0gIT09IFwiZnVuY3Rpb25cIjtcblx0fTtcblxuXG52YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiBpc1dpbmRvdyggb2JqICkge1xuXHRcdHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7XG5cdH07XG5cblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG5cblxuXHR2YXIgcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyA9IHtcblx0XHR0eXBlOiB0cnVlLFxuXHRcdHNyYzogdHJ1ZSxcblx0XHRub25jZTogdHJ1ZSxcblx0XHRub01vZHVsZTogdHJ1ZVxuXHR9O1xuXG5cdGZ1bmN0aW9uIERPTUV2YWwoIGNvZGUsIG5vZGUsIGRvYyApIHtcblx0XHRkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG5cblx0XHR2YXIgaSwgdmFsLFxuXHRcdFx0c2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIFwic2NyaXB0XCIgKTtcblxuXHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRpZiAoIG5vZGUgKSB7XG5cdFx0XHRmb3IgKCBpIGluIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA2NCssIEVkZ2UgMTgrXG5cdFx0XHRcdC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgXCJub25jZVwiIHByb3BlcnR5IG9uIHNjcmlwdHMuXG5cdFx0XHRcdC8vIE9uIHRoZSBvdGhlciBoYW5kLCBqdXN0IHVzaW5nIGBnZXRBdHRyaWJ1dGVgIGlzIG5vdCBlbm91Z2ggYXNcblx0XHRcdFx0Ly8gdGhlIGBub25jZWAgYXR0cmlidXRlIGlzIHJlc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB3aGVuZXZlciBpdFxuXHRcdFx0XHQvLyBiZWNvbWVzIGJyb3dzaW5nLWNvbnRleHQgY29ubmVjdGVkLlxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy8yMzY5XG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNub25jZS1hdHRyaWJ1dGVzXG5cdFx0XHRcdC8vIFRoZSBgbm9kZS5nZXRBdHRyaWJ1dGVgIGNoZWNrIHdhcyBhZGRlZCBmb3IgdGhlIHNha2Ugb2Zcblx0XHRcdFx0Ly8gYGpRdWVyeS5nbG9iYWxFdmFsYCBzbyB0aGF0IGl0IGNhbiBmYWtlIGEgbm9uY2UtY29udGFpbmluZyBub2RlXG5cdFx0XHRcdC8vIHZpYSBhbiBvYmplY3QuXG5cdFx0XHRcdHZhbCA9IG5vZGVbIGkgXSB8fCBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSggaSApO1xuXHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCBpLCB2YWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRkb2MuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG5cdH1cblxuXG5mdW5jdGlvbiB0b1R5cGUoIG9iaiApIHtcblx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gb2JqICsgXCJcIjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKVxuXHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xuXHRcdGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgXCJvYmplY3RcIiA6XG5cdFx0dHlwZW9mIG9iajtcbn1cbi8qIGdsb2JhbCBTeW1ib2wgKi9cbi8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsXG4vLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1vZHVsZVxuXG5cblxudmFyIHZlcnNpb24gPSBcIjMuNy4xXCIsXG5cblx0cmh0bWxTdWZmaXggPSAvSFRNTCQvaSxcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGV2ZW46IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAoIGkgKyAxICkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdG9kZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFpc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggbmFtZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cblx0XHRcdFx0XHQvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWVcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWNvcHlJc0FycmF5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBwcm92aWRlZCBjb250ZXh0OyBmYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgb25lXG5cdC8vIGlmIG5vdCBzcGVjaWZpZWQuXG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zLCBkb2MgKSB7XG5cdFx0RE9NRXZhbCggY29kZSwgeyBub25jZTogb3B0aW9ucyAmJiBvcHRpb25zLm5vbmNlIH0sIGRvYyApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblxuXHQvLyBSZXRyaWV2ZSB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXNcblx0dGV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5vZGUsXG5cdFx0XHRyZXQgPSBcIlwiLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHRpZiAoICFub2RlVHlwZSApIHtcblxuXHRcdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcblx0XHRcdHdoaWxlICggKCBub2RlID0gZWxlbVsgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0XHRyZXQgKz0galF1ZXJ5LnRleHQoIG5vZGUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS50ZXh0Q29udGVudDtcblx0XHR9XG5cdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDtcblx0XHR9XG5cdFx0aWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRcdHJldHVybiBlbGVtLm5vZGVWYWx1ZTtcblx0XHR9XG5cblx0XHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XG5cdFx0cmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApO1xuXHR9LFxuXG5cdGlzWE1MRG9jOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZXNwYWNlID0gZWxlbSAmJiBlbGVtLm5hbWVzcGFjZVVSSSxcblx0XHRcdGRvY0VsZW0gPSBlbGVtICYmICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHQvLyBBc3N1bWUgSFRNTCB3aGVuIGRvY3VtZW50RWxlbWVudCBkb2Vzbid0IHlldCBleGlzdCwgc3VjaCBhcyBpbnNpZGVcblx0XHQvLyBkb2N1bWVudCBmcmFnbWVudHMuXG5cdFx0cmV0dXJuICFyaHRtbFN1ZmZpeC50ZXN0KCBuYW1lc3BhY2UgfHwgZG9jRWxlbSAmJiBkb2NFbGVtLm5vZGVOYW1lIHx8IFwiSFRNTFwiICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gZmxhdCggcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0XHRjbGFzczJ0eXBlWyBcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0fSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0gdG9UeXBlKCBvYmogKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cblx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn1cbnZhciBwb3AgPSBhcnIucG9wO1xuXG5cbnZhciBzb3J0ID0gYXJyLnNvcnQ7XG5cblxudmFyIHNwbGljZSA9IGFyci5zcGxpY2U7XG5cblxudmFyIHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCI7XG5cblxudmFyIHJ0cmltQ1NTID0gbmV3IFJlZ0V4cChcblx0XCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICsgd2hpdGVzcGFjZSArIFwiKyRcIixcblx0XCJnXCJcbik7XG5cblxuXG5cbi8vIE5vdGU6IGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcbmpRdWVyeS5jb250YWlucyA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHR2YXIgYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cblx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdFx0Ly8gSUUgZG9lc24ndCBoYXZlIGBjb250YWluc2Agb24gU1ZHLlxuXHRcdGEuY29udGFpbnMgP1xuXHRcdFx0YS5jb250YWlucyggYnVwICkgOlxuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdCkgKTtcbn07XG5cblxuXG5cbi8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG4vLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXNcbnZhciByY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFx4ODAtXFx1RkZGRlxcdy1dL2c7XG5cbmZ1bmN0aW9uIGZjc3Nlc2NhcGUoIGNoLCBhc0NvZGVQb2ludCApIHtcblx0aWYgKCBhc0NvZGVQb2ludCApIHtcblxuXHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdGlmICggY2ggPT09IFwiXFwwXCIgKSB7XG5cdFx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHNcblx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArIGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xuXHR9XG5cblx0Ly8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBiYWNrc2xhc2gtZXNjYXBlZFxuXHRyZXR1cm4gXCJcXFxcXCIgKyBjaDtcbn1cblxualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gZnVuY3Rpb24oIHNlbCApIHtcblx0cmV0dXJuICggc2VsICsgXCJcIiApLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcbn07XG5cblxuXG5cbnZhciBwcmVmZXJyZWREb2MgPSBkb2N1bWVudCxcblx0cHVzaE5hdGl2ZSA9IHB1c2g7XG5cbiggZnVuY3Rpb24oKSB7XG5cbnZhciBpLFxuXHRFeHByLFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblx0cHVzaCA9IHB1c2hOYXRpdmUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRkb2N1bWVudCxcblx0ZG9jdW1lbnRFbGVtZW50LFxuXHRkb2N1bWVudElzSFRNTCxcblx0cmJ1Z2d5UVNBLFxuXHRtYXRjaGVzLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvLFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfFwiICtcblx0XHRcImxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jaWRlbnQtdG9rZW4tZGlhZ3JhbVxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCI/fFxcXFxcXFxcW15cXFxcclxcXFxuXFxcXGZdfFtcXFxcdy1dfFteXFwwLVxcXFx4N2ZdKStcIixcblxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV0gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblxuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblxuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRybGVhZGluZ0NvbWJpbmF0b3IgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyZGVzY2VuZCA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcInw+XCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdElEOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0Q0xBU1M6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0VEFHOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0QVRUUjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0UFNFVURPOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRDSElMRDogbmV3IFJlZ0V4cChcblx0XHRcdFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArXG5cdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArXG5cdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRib29sOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXG5cdFx0Ly8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YFxuXHRcdG5lZWRzQ29udGV4dDogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXG5cdC8vIENTUyBlc2NhcGVzXG5cdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiP3xcXFxcXFxcXChbXlxcXFxyXFxcXG5cXFxcZl0pXCIsIFwiZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBlc2NhcGUsIG5vbkhleCApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZS5zbGljZSggMSApIC0gMHgxMDAwMDtcblxuXHRcdGlmICggbm9uSGV4ICkge1xuXG5cdFx0XHQvLyBTdHJpcCB0aGUgYmFja3NsYXNoIHByZWZpeCBmcm9tIGEgbm9uLWhleCBlc2NhcGUgc2VxdWVuY2Vcblx0XHRcdHJldHVybiBub25IZXg7XG5cdFx0fVxuXG5cdFx0Ly8gUmVwbGFjZSBhIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIHRoZSBlbmNvZGVkIFVuaWNvZGUgY29kZSBwb2ludFxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTErXG5cdFx0Ly8gRm9yIHZhbHVlcyBvdXRzaWRlIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCksIG1hbnVhbGx5IGNvbnN0cnVjdCBhXG5cdFx0Ly8gc3Vycm9nYXRlIHBhaXJcblx0XHRyZXR1cm4gaGlnaCA8IDAgP1xuXHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XG5cdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzOyBzZWUgYHNldERvY3VtZW50YC5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUUvRWRnZS5cblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0aW5EaXNhYmxlZEZpZWxkc2V0ID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIG5vZGVOYW1lKCBlbGVtLCBcImZpZWxkc2V0XCIgKTtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBBY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBjYW4gdGhyb3cgdW5leHBlY3RlZGx5XG4vLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzOTNcbmZ1bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHR9IGNhdGNoICggZXJyICkgeyB9XG59XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdCggYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSApLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0ge1xuXHRcdGFwcGx5OiBmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoTmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoIGVscyApICk7XG5cdFx0fSxcblx0XHRjYWxsOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdFx0cHVzaE5hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDEgKSApO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gZmluZCggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLFxuXHRcdG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCxcblxuXHRcdC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnRcblx0XHRub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxuXHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiB8fCAhc2VsZWN0b3IgfHxcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHNcblx0aWYgKCAhc2VlZCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmICggbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoICggbSA9IG1hdGNoWyAxIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHVzaC5jYWxsKCByZXN1bHRzLCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKCBlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgJiZcblx0XHRcdFx0XHRcdFx0ZmluZC5jb250YWlucyggY29udGV4dCwgZWxlbSApICYmXG5cdFx0XHRcdFx0XHRcdGVsZW0uaWQgPT09IG0gKSB7XG5cblx0XHRcdFx0XHRcdFx0cHVzaC5jYWxsKCByZXN1bHRzLCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAyIF0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggbSA9IG1hdGNoWyAzIF0gKSAmJiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHRpZiAoICFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF0gJiZcblx0XHRcdFx0KCAhcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXG5cdFx0XHRcdC8vIHFTQSBjb25zaWRlcnMgZWxlbWVudHMgb3V0c2lkZSBhIHNjb3Bpbmcgcm9vdCB3aGVuIGV2YWx1YXRpbmcgY2hpbGQgb3Jcblx0XHRcdFx0Ly8gZGVzY2VuZGFudCBjb21iaW5hdG9ycywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC5cblx0XHRcdFx0Ly8gSW4gc3VjaCBjYXNlcywgd2Ugd29yayBhcm91bmQgdGhlIGJlaGF2aW9yIGJ5IHByZWZpeGluZyBldmVyeSBzZWxlY3RvciBpbiB0aGVcblx0XHRcdFx0Ly8gbGlzdCB3aXRoIGFuIElEIHNlbGVjdG9yIHJlZmVyZW5jaW5nIHRoZSBzY29wZSBjb250ZXh0LlxuXHRcdFx0XHQvLyBUaGUgdGVjaG5pcXVlIGhhcyB0byBiZSB1c2VkIGFzIHdlbGwgd2hlbiBhIGxlYWRpbmcgY29tYmluYXRvciBpcyB1c2VkXG5cdFx0XHRcdC8vIGFzIHN1Y2ggc2VsZWN0b3JzIGFyZSBub3QgcmVjb2duaXplZCBieSBxdWVyeVNlbGVjdG9yQWxsLlxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB0ZWNobmlxdWUuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHQoIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgfHwgcmxlYWRpbmdDb21iaW5hdG9yLnRlc3QoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblxuXHRcdFx0XHRcdC8vIFdlIGNhbiB1c2UgOnNjb3BlIGluc3RlYWQgb2YgdGhlIElEIGhhY2sgaWYgdGhlIGJyb3dzZXJcblx0XHRcdFx0XHQvLyBzdXBwb3J0cyBpdCAmIGlmIHdlJ3JlIG5vdCBjaGFuZ2luZyB0aGUgY29udGV4dC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuXG5cdFx0XHRcdFx0Ly8gc3RyaWN0LWNvbXBhcmluZyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAhPSBjb250ZXh0IHx8ICFzdXBwb3J0LnNjb3BlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFx0aWYgKCAoIG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSApICkge1xuXHRcdFx0XHRcdFx0XHRuaWQgPSBqUXVlcnkuZXNjYXBlU2VsZWN0b3IoIG5pZCApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKCBuaWQgPSBleHBhbmRvICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1sgaSBdID0gKCBuaWQgPyBcIiNcIiArIG5pZCA6IFwiOnNjb3BlXCIgKSArIFwiIFwiICtcblx0XHRcdFx0XHRcdFx0dG9TZWxlY3RvciggZ3JvdXBzWyBpIF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW1DU1MsIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzXG5cdFx0Ly8gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9pc3N1ZXMvMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblxuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKCBjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlICk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgalF1ZXJ5IHNlbGVjdG9yIG1vZHVsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBlbCApO1xuXHR9IGNhdGNoICggZSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZWwgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gbm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiAoIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSB8fCBub2RlTmFtZSggZWxlbSwgXCJidXR0b25cIiApICkgJiZcblx0XHRcdGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIDplbmFibGVkLzpkaXNhYmxlZFxuICogQHBhcmFtIHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7IGZhbHNlIGZvciA6ZW5hYmxlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZGlzYWJsZWQgKSB7XG5cblx0Ly8gS25vd24gOmRpc2FibGVkIGZhbHNlIHBvc2l0aXZlczogZmllbGRzZXRbZGlzYWJsZWRdID4gbGVnZW5kOm50aC1vZi10eXBlKG4rMikgOmNhbi1kaXNhYmxlXG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE9ubHkgY2VydGFpbiBlbGVtZW50cyBjYW4gbWF0Y2ggOmVuYWJsZWQgb3IgOmRpc2FibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZW5hYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWRpc2FibGVkXG5cdFx0aWYgKCBcImZvcm1cIiBpbiBlbGVtICkge1xuXG5cdFx0XHQvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2FibGVkbmVzcyBvbiByZWxldmFudCBub24tZGlzYWJsZWQgZWxlbWVudHM6XG5cdFx0XHQvLyAqIGxpc3RlZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNldFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NhdGVnb3J5LWxpc3RlZFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJsZWRcblx0XHRcdC8vICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LW9wdGlvbi1kaXNhYmxlZFxuXHRcdFx0Ly8gQWxsIHN1Y2ggZWxlbWVudHMgaGF2ZSBhIFwiZm9ybVwiIHByb3BlcnR5LlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Ly8gT3B0aW9uIGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlmIHByZXNlbnRcblx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5wYXJlbnROb2RlLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDYgLSAxMStcblx0XHRcdFx0Ly8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0IHByb3BlcnR5IHRvIGNoZWNrIGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnNcblx0XHRcdFx0cmV0dXJuIGVsZW0uaXNEaXNhYmxlZCA9PT0gZGlzYWJsZWQgfHxcblxuXHRcdFx0XHRcdC8vIFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1hbnVhbGx5XG5cdFx0XHRcdFx0ZWxlbS5pc0Rpc2FibGVkICE9PSAhZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdGluRGlzYWJsZWRGaWVsZHNldCggZWxlbSApID09PSBkaXNhYmxlZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXG5cdFx0Ly8gVHJ5IHRvIHdpbm5vdyBvdXQgZWxlbWVudHMgdGhhdCBjYW4ndCBiZSBkaXNhYmxlZCBiZWZvcmUgdHJ1c3RpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5LlxuXHRcdC8vIFNvbWUgdmljdGltcyBnZXQgY2F1Z2h0IGluIG91ciBuZXQgKGxhYmVsLCBsZWdlbmQsIG1lbnUsIHRyYWNrKSwgYnV0IGl0IHNob3VsZG4ndFxuXHRcdC8vIGV2ZW4gZXhpc3Qgb24gdGhlbSwgbGV0IGFsb25lIGhhdmUgYSBib29sZWFuIHZhbHVlLlxuXHRcdH0gZWxzZSBpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdH1cblxuXHRcdC8vIFJlbWFpbmluZyBlbGVtZW50cyBhcmUgbmVpdGhlciA6ZW5hYmxlZCBub3IgOmRpc2FibGVkXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkge1xuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKCBqID0gbWF0Y2hJbmRleGVzWyBpIF0gKSBdICkge1xuXHRcdFx0XHRcdHNlZWRbIGogXSA9ICEoIG1hdGNoZXNbIGogXSA9IHNlZWRbIGogXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9ICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBqUXVlcnkgc2VsZWN0b3IgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtub2RlXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5mdW5jdGlvbiBzZXREb2N1bWVudCggbm9kZSApIHtcblx0dmFyIHN1YldpbmRvdyxcblx0XHRkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCBkb2MgPT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWpRdWVyeS5pc1hNTERvYyggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBpT1MgNyBvbmx5LCBJRSA5IC0gMTErXG5cdC8vIE9sZGVyIGJyb3dzZXJzIGRpZG4ndCBzdXBwb3J0IHVucHJlZml4ZWQgYG1hdGNoZXNgLlxuXHRtYXRjaGVzID0gZG9jdW1lbnRFbGVtZW50Lm1hdGNoZXMgfHxcblx0XHRkb2N1bWVudEVsZW1lbnQud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jdW1lbnRFbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzXG5cdC8vIChzZWUgdHJhYy0xMzkzNikuXG5cdC8vIExpbWl0IHRoZSBmaXggdG8gSUUgJiBFZGdlIExlZ2FjeTsgZGVzcGl0ZSBFZGdlIDE1KyBpbXBsZW1lbnRpbmcgYG1hdGNoZXNgLFxuXHQvLyBhbGwgSUUgOSsgYW5kIEVkZ2UgTGVnYWN5IHZlcnNpb25zIGltcGxlbWVudCBgbXNNYXRjaGVzU2VsZWN0b3JgIGFzIHdlbGwuXG5cdGlmICggZG9jdW1lbnRFbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yICYmXG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdHByZWZlcnJlZERvYyAhPSBkb2N1bWVudCAmJlxuXHRcdCggc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgKSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdFx0c3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBqUXVlcnkuZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8XG5cdFx0XHQhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGpRdWVyeS5leHBhbmRvICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvclxuXHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlLlxuXHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXMuY2FsbCggZWwsIFwiKlwiICk7XG5cdH0gKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdC8vIElFL0VkZ2UgZG9uJ3Qgc3VwcG9ydCB0aGUgOnNjb3BlIHBzZXVkby1jbGFzcy5cblx0c3VwcG9ydC5zY29wZSA9IGFzc2VydCggZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOnNjb3BlXCIgKTtcblx0fSApO1xuXG5cdC8vIFN1cHBvcnQ6IENocm9tZSAxMDUgLSAxMTEgb25seSwgU2FmYXJpIDE1LjQgLSAxNi4zIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRoZSBgOmhhcygpYCBhcmd1bWVudCBpcyBwYXJzZWQgdW5mb3JnaXZpbmdseS5cblx0Ly8gV2UgaW5jbHVkZSBgKmAgaW4gdGhlIHRlc3QgdG8gZGV0ZWN0IGJ1Z2d5IGltcGxlbWVudGF0aW9ucyB0aGF0IGFyZVxuXHQvLyBfc2VsZWN0aXZlbHlfIGZvcmdpdmluZyAoc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGxpc3QgaW5jbHVkZXMgYXQgbGVhc3Rcblx0Ly8gb25lIHZhbGlkIHNlbGVjdG9yKS5cblx0Ly8gTm90ZSB0aGF0IHdlIHRyZWF0IGNvbXBsZXRlIGxhY2sgb2Ygc3VwcG9ydCBmb3IgYDpoYXMoKWAgYXMgaWYgaXQgd2VyZVxuXHQvLyBzcGVjLWNvbXBsaWFudCBzdXBwb3J0LCB3aGljaCBpcyBmaW5lIGJlY2F1c2UgdXNlIG9mIGA6aGFzKClgIGluIHN1Y2hcblx0Ly8gZW52aXJvbm1lbnRzIHdpbGwgZmFpbCBpbiB0aGUgcVNBIHBhdGggYW5kIGZhbGwgYmFjayB0byBqUXVlcnkgdHJhdmVyc2FsXG5cdC8vIGFueXdheS5cblx0c3VwcG9ydC5jc3NIYXMgPSBhc3NlcnQoIGZ1bmN0aW9uKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCBcIjpoYXMoKiw6anFmYWtlKVwiICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0gKTtcblxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maWx0ZXIuSUQgPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcImlkXCIgKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZC5JRCA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblx0XHRcdFx0cmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0RXhwci5maWx0ZXIuSUQgPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHlcblx0XHQvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0XG5cdFx0RXhwci5maW5kLklEID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1zWyBpKysgXSApICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmQuVEFHID0gZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdH1cblx0fTtcblxuXHQvLyBDbGFzc1xuXHRFeHByLmZpbmQuQ0xBU1MgPSBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0cmJ1Z2d5UVNBID0gW107XG5cblx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0XHR2YXIgaW5wdXQ7XG5cblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGVsICkuaW5uZXJIVE1MID1cblx0XHRcdFwiPGEgaWQ9J1wiICsgZXhwYW5kbyArIFwiJyBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcblx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgZGlzYWJsZWQ9J2Rpc2FibGVkJz5cIiArXG5cdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHQvLyBTdXBwb3J0OiBpT1MgPD03IC0gOCBvbmx5XG5cdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseSBpbiBzb21lIFhNTCBkb2N1bWVudHNcblx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltzZWxlY3RlZF1cIiApLmxlbmd0aCApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogaU9TIDw9NyAtIDggb25seVxuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJ+PVwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogaU9TIDggb25seVxuXHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJhI1wiICsgZXhwYW5kbyArIFwiKypcIiApLmxlbmd0aCApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIi4jLitbK35dXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0xMDUrLCBGaXJlZm94IDw9MTA0KywgU2FmYXJpIDw9MTUuNCtcblx0XHQvLyBJbiBzb21lIG9mIHRoZSBkb2N1bWVudCBraW5kcywgdGhlc2Ugc2VsZWN0b3JzIHdvdWxkbid0IHdvcmsgbmF0aXZlbHkuXG5cdFx0Ly8gVGhpcyBpcyBwcm9iYWJseSBPSyBidXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHdhbnQgdG8gbWFpbnRhaW5cblx0XHQvLyBoYW5kbGluZyB0aGVtIHRocm91Z2ggalF1ZXJ5IHRyYXZlcnNhbCBpbiBqUXVlcnkgMy54LlxuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmNoZWNrZWRcIiApLmxlbmd0aCApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjpjaGVja2VkXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcblx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExK1xuXHRcdC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0c1xuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTEwNSssIEZpcmVmb3ggPD0xMDQrLCBTYWZhcmkgPD0xNS40K1xuXHRcdC8vIEluIHNvbWUgb2YgdGhlIGRvY3VtZW50IGtpbmRzLCB0aGVzZSBzZWxlY3RvcnMgd291bGRuJ3Qgd29yayBuYXRpdmVseS5cblx0XHQvLyBUaGlzIGlzIHByb2JhYmx5IE9LIGJ1dCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2Ugd2FudCB0byBtYWludGFpblxuXHRcdC8vIGhhbmRsaW5nIHRoZW0gdGhyb3VnaCBqUXVlcnkgdHJhdmVyc2FsIGluIGpRdWVyeSAzLnguXG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmRpc2FibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUgMTEvRWRnZSBkb24ndCBmaW5kIGVsZW1lbnRzIG9uIGEgYFtuYW1lPScnXWAgcXVlcnkgaW4gc29tZSBjYXNlcy5cblx0XHQvLyBBZGRpbmcgYSB0ZW1wb3JhcnkgYXR0cmlidXRlIHRvIHRoZSBkb2N1bWVudCBiZWZvcmUgdGhlIHNlbGVjdGlvbiB3b3Jrc1xuXHRcdC8vIGFyb3VuZCB0aGUgaXNzdWUuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgSUUgMTAgJiBvbGRlciBkb24ndCBzZWVtIHRvIGhhdmUgdGhlIGlzc3VlLlxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJcIiApO1xuXHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW25hbWU9JyddXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIio9XCIgK1xuXHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHR9XG5cdH0gKTtcblxuXHRpZiAoICFzdXBwb3J0LmNzc0hhcyApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSAxMDUgLSAxMTArLCBTYWZhcmkgMTUuNCAtIDE2LjMrXG5cdFx0Ly8gT3VyIHJlZ3VsYXIgYHRyeS1jYXRjaGAgbWVjaGFuaXNtIGZhaWxzIHRvIGRldGVjdCBuYXRpdmVseS11bnN1cHBvcnRlZFxuXHRcdC8vIHBzZXVkby1jbGFzc2VzIGluc2lkZSBgOmhhcygpYCAoc3VjaCBhcyBgOmhhcyg6Y29udGFpbnMoXCJGb29cIikpYClcblx0XHQvLyBpbiBicm93c2VycyB0aGF0IHBhcnNlIHRoZSBgOmhhcygpYCBhcmd1bWVudCBhcyBhIGZvcmdpdmluZyBzZWxlY3RvciBsaXN0LlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9zZWxlY3RvcnMvI3JlbGF0aW9uYWwgbm93IHJlcXVpcmVzIHRoZSBhcmd1bWVudFxuXHRcdC8vIHRvIGJlIHBhcnNlZCB1bmZvcmdpdmluZ2x5LCBidXQgYnJvd3NlcnMgaGF2ZSBub3QgeWV0IGZ1bGx5IGFkanVzdGVkLlxuXHRcdHJidWdneVFTQS5wdXNoKCBcIjpoYXNcIiApO1xuXHR9XG5cblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbiggXCJ8XCIgKSApO1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0MTtcblxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdGlmICggY29tcGFyZSAmIDEgfHxcblx0XHRcdCggIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSApICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGEgPT09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0ZmluZC5jb250YWlucyggcHJlZmVycmVkRG9jLCBhICkgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdGlmICggYiA9PT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRmaW5kLmNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGIgKSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyXG5cdFx0XHRyZXR1cm4gc29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mLmNhbGwoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZi5jYWxsKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH07XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufVxuXG5maW5kLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBmaW5kKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xufTtcblxuZmluZC5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblxuXHRpZiAoIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggZXhwciwgdHJ1ZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmaW5kKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuZmluZC5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblxuZmluZC5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSB0cmFjLTEzODA3KVxuXHRcdHZhbCA9IGZuICYmIGhhc093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID9cblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XG5cdFx0XHR1bmRlZmluZWQ7XG5cblx0aWYgKCB2YWwgIT09IHVuZGVmaW5lZCApIHtcblx0XHRyZXR1cm4gdmFsO1xuXHR9XG5cblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG59O1xuXG5maW5kLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cbmpRdWVyeS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdC8vXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjArXG5cdC8vIFRlc3RpbmcgZm9yIGRldGVjdGluZyBkdXBsaWNhdGVzIGlzIHVucHJlZGljdGFibGUgc28gaW5zdGVhZCBhc3N1bWUgd2UgY2FuJ3Rcblx0Ly8gZGVwZW5kIG9uIGR1cGxpY2F0ZSBkZXRlY3Rpb24gaW4gYWxsIGJyb3dzZXJzIHdpdGhvdXQgYSBzdGFibGUgc29ydC5cblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuc29ydFN0YWJsZTtcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiBzbGljZS5jYWxsKCByZXN1bHRzLCAwICk7XG5cdHNvcnQuY2FsbCggcmVzdWx0cywgc29ydE9yZGVyICk7XG5cblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRzcGxpY2UuY2FsbCggcmVzdWx0cywgZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG5qUXVlcnkuZm4udW5pcXVlU29ydCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS51bmlxdWVTb3J0KCBzbGljZS5hcHBseSggdGhpcyApICkgKTtcbn07XG5cbkV4cHIgPSBqUXVlcnkuZXhwciA9IHtcblxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcblx0Y2FjaGVMZW5ndGg6IDUwLFxuXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxuXG5cdG1hdGNoOiBtYXRjaEV4cHIsXG5cblx0YXR0ckhhbmRsZToge30sXG5cblx0ZmluZDoge30sXG5cblx0cmVsYXRpdmU6IHtcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cblx0fSxcblxuXHRwcmVGaWx0ZXI6IHtcblx0XHRBVFRSOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbIDMgXSA9ICggbWF0Y2hbIDMgXSB8fCBtYXRjaFsgNCBdIHx8IG1hdGNoWyA1IF0gfHwgXCJcIiApXG5cdFx0XHRcdC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAyIF0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbIDMgXSA9IFwiIFwiICsgbWF0Y2hbIDMgXSArIFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcblx0XHR9LFxuXG5cdFx0Q0hJTEQ6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblxuXHRcdFx0LyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwcltcIkNISUxEXCJdXG5cdFx0XHRcdDEgdHlwZSAob25seXxudGh8Li4uKVxuXHRcdFx0XHQyIHdoYXQgKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdDMgYXJndW1lbnQgKGV2ZW58b2RkfFxcZCp8XFxkKm4oWystXVxcZCspP3wuLi4pXG5cdFx0XHRcdDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XFxkKm58KVxuXHRcdFx0XHQ1IHNpZ24gb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDYgeCBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NyBzaWduIG9mIHktY29tcG9uZW50XG5cdFx0XHRcdDggeSBvZiB5LWNvbXBvbmVudFxuXHRcdFx0Ki9cblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDEgXS5zbGljZSggMCwgMyApID09PSBcIm50aFwiICkge1xuXG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdFx0ZmluZC5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbIDQgXSA9ICsoIG1hdGNoWyA0IF0gP1xuXHRcdFx0XHRcdG1hdGNoWyA1IF0gKyAoIG1hdGNoWyA2IF0gfHwgMSApIDpcblx0XHRcdFx0XHQyICogKCBtYXRjaFsgMyBdID09PSBcImV2ZW5cIiB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiIClcblx0XHRcdFx0KTtcblx0XHRcdFx0bWF0Y2hbIDUgXSA9ICsoICggbWF0Y2hbIDcgXSArIG1hdGNoWyA4IF0gKSB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiICk7XG5cblx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0ZmluZC5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFBTRVVETzogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbIDYgXSAmJiBtYXRjaFsgMiBdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwci5DSElMRC50ZXN0KCBtYXRjaFsgMCBdICkgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xuXHRcdFx0aWYgKCBtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gbWF0Y2hbIDQgXSB8fCBtYXRjaFsgNSBdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblxuXHRcdFx0XHQvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KVxuXHRcdFx0XHQoIGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApICkgJiZcblxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KCBleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGggKSApIHtcblxuXHRcdFx0XHQvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleFxuXHRcdFx0XHRtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWyAyIF0gPSB1bnF1b3RlZC5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KVxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7XG5cdFx0fVxuXHR9LFxuXG5cdGZpbHRlcjoge1xuXG5cdFx0VEFHOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBleHBlY3RlZE5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBub2RlTmFtZSggZWxlbSwgZXhwZWN0ZWROb2RlTmFtZSApO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRDTEFTUzogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcblxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcblx0XHRcdFx0KCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArXG5cdFx0XHRcdFx0XCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApICkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KFxuXHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fFxuXHRcdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSApO1xuXHRcdH0sXG5cblx0XHRBVFRSOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHRcdFx0aWYgKCByZXN1bHQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiIT1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICFvcGVyYXRvciApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdCArPSBcIlwiO1xuXG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwiPVwiICkge1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHQgPT09IGNoZWNrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwiIT1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0ICE9PSBjaGVjaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIl49XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwiKj1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIiQ9XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICggXCIgXCIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsIFwiIFwiICkgKyBcIiBcIiApXG5cdFx0XHRcdFx0XHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwifD1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdENISUxEOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgX2FyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gbm9kZVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZU5hbWUoIG5vZGUsIG5hbWUgKSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKVxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gXCJvbmx5XCIgJiYgIXN0YXJ0ICYmIFwibmV4dFNpYmxpbmdcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTtcblxuXHRcdFx0XHRcdFx0Ly8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGBcblx0XHRcdFx0XHRcdGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXhcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IHBhcmVudFsgZXhwYW5kbyBdIHx8ICggcGFyZW50WyBleHBhbmRvIF0gPSB7fSApO1xuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IG91dGVyQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKCBlbGVtWyBleHBhbmRvIF0gPSB7fSApO1xuXHRcdFx0XHRcdFx0XHRcdGNhY2hlID0gb3V0ZXJDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlTmFtZSggbm9kZSwgbmFtZSApIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsrZGlmZiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFBTRVVETzogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cblx0XHRcdC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdGZpbmQuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBqUXVlcnkgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRcdHZhciBpZHgsXG5cdFx0XHRcdFx0XHRcdG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSxcblx0XHRcdFx0XHRcdFx0aSA9IG1hdGNoZWQubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlkeCA9IGluZGV4T2YuY2FsbCggc2VlZCwgbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRub3Q6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaSBdID0gISggbWF0Y2hlc1sgaSBdID0gZWxlbSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApIDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0bWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwgcmVzdWx0cyApO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvaXNzdWVzLzI5OSlcblx0XHRcdFx0XHRpbnB1dFsgMCBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0aGFzOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGZpbmQoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Y29udGFpbnM6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGpRdWVyeS50ZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gXCJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yXG5cdFx0Ly8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWVcblx0XHQvLyBiZWluZyBlcXVhbCB0byB0aGUgaWRlbnRpZmllciBDLFxuXHRcdC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgXCItXCIuXG5cdFx0Ly8gVGhlIG1hdGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlIGlzIHBlcmZvcm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuXG5cdFx0Ly8gVGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS5cIlxuXHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0bGFuZzogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHtcblxuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdCggbGFuZyB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdGZpbmQuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJ4bWw6bGFuZ1wiICkgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoIFwibGFuZ1wiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoICggZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSApICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0dGFyZ2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRyb290OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudEVsZW1lbnQ7XG5cdFx0fSxcblxuXHRcdGZvY3VzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmXG5cdFx0XHRcdGRvY3VtZW50Lmhhc0ZvY3VzKCkgJiZcblx0XHRcdFx0ISEoIGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXggKTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0ZW5hYmxlZDogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICksXG5cdFx0ZGlzYWJsZWQ6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRjaGVja2VkOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdHJldHVybiAoIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSAmJiAhIWVsZW0uY2hlY2tlZCApIHx8XG5cdFx0XHRcdCggbm9kZU5hbWUoIGVsZW0sIFwib3B0aW9uXCIgKSAmJiAhIWVsZW0uc2VsZWN0ZWQgKTtcblx0XHR9LFxuXG5cdFx0c2VsZWN0ZWQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExK1xuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG5cdFx0XHQvLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gdHJlYXQgdGhlIGRlZmF1bHQgb3B0aW9uIGFzXG5cdFx0XHQvLyBzZWxlY3RlZCB3aGVuIGluIGFuIG9wdGdyb3VwLlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0XHRcdFx0ZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLyBDb250ZW50c1xuXHRcdGVtcHR5OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zLmVtcHR5KCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRoZWFkZXI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRpbnB1dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdGJ1dHRvbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICYmIGVsZW0udHlwZSA9PT0gXCJidXR0b25cIiB8fFxuXHRcdFx0XHRub2RlTmFtZSggZWxlbSwgXCJidXR0b25cIiApO1xuXHRcdH0sXG5cblx0XHR0ZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSAmJiBlbGVtLnR5cGUgPT09IFwidGV4dFwiICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDEwIG9ubHlcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhclxuXHRcdFx0XHQvLyB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSApID09IG51bGwgfHxcblx0XHRcdFx0XHRhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRmaXJzdDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSApLFxuXG5cdFx0bGFzdDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9ICksXG5cblx0XHRlcTogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSApLFxuXG5cdFx0ZXZlbjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdG9kZDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdGx0OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGk7XG5cblx0XHRcdGlmICggYXJndW1lbnQgPCAwICkge1xuXHRcdFx0XHRpID0gYXJndW1lbnQgKyBsZW5ndGg7XG5cdFx0XHR9IGVsc2UgaWYgKCBhcmd1bWVudCA+IGxlbmd0aCApIHtcblx0XHRcdFx0aSA9IGxlbmd0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGkgPSBhcmd1bWVudDtcblx0XHRcdH1cblxuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdGd0OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyArK2kgPCBsZW5ndGg7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9IClcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zLm50aCA9IEV4cHIucHNldWRvcy5lcTtcblxuLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3NcbmZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7XG59XG5mb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbyggaSApO1xufVxuXG4vLyBFYXN5IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnNcbmZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fVxuc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVkb3M7XG5FeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpO1xuXG5mdW5jdGlvbiB0b2tlbml6ZSggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8ICggbWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFsgMCBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICggdG9rZW5zID0gW10gKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAoIG1hdGNoID0gcmxlYWRpbmdDb21iaW5hdG9yLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWyAwIF0ucmVwbGFjZSggcnRyaW1DU1MsIFwiIFwiIClcblx0XHRcdH0gKTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoICggbWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApICkgJiYgKCAhcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdCggbWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkgKSApICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0aWYgKCBwYXJzZU9ubHkgKSB7XG5cdFx0cmV0dXJuIHNvRmFyLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiBzb0ZhciA/XG5cdFx0ZmluZC5lcnJvciggc2VsZWN0b3IgKSA6XG5cblx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbIGkgXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCBvdXRlckNhY2hlLFxuXHRcdFx0XHRuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTtcblxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nXG5cdFx0XHRpZiAoIHhtbCApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8ICggZWxlbVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0aWYgKCBza2lwICYmIG5vZGVOYW1lKCBlbGVtLCBza2lwICkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKCBvbGRDYWNoZSA9IG91dGVyQ2FjaGVbIGtleSBdICkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCBuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKCBuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1sgaSBdKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWyAwIF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0ZmluZCggc2VsZWN0b3IsIGNvbnRleHRzWyBpIF0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0aWYgKCBtYXBwZWQgKSB7XG5cdFx0XHRcdFx0bWFwLnB1c2goIGkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXdVbm1hdGNoZWQ7XG59XG5cbmZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHtcblx0aWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTtcblx0fVxuXHRpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7XG5cdH1cblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSwgbWF0Y2hlck91dCxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fFxuXHRcdFx0XHRtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCBcIipcIixcblx0XHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLFxuXG5cdFx0XHQvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb25cblx0XHRcdG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgP1xuXHRcdFx0XHRjb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdGVsZW1zO1xuXG5cdFx0aWYgKCBtYXRjaGVyICkge1xuXG5cdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlclxuXHRcdFx0Ly8gb3IgcHJlZXhpc3RpbmcgcmVzdWx0cyxcblx0XHRcdG1hdGNoZXJPdXQgPSBwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFtdIDpcblxuXHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0cmVzdWx0cztcblxuXHRcdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVySW47XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoIGVsZW0gPSB0ZW1wWyBpIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwWyBpIF0gXSA9ICEoIG1hdGNoZXJJblsgcG9zdE1hcFsgaSBdIF0gPSBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goICggbWF0Y2hlckluWyBpIF0gPSBlbGVtICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKCBtYXRjaGVyT3V0ID0gW10gKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgJiZcblx0XHRcdFx0XHRcdCggdGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mLmNhbGwoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFsgaSBdICkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFsgdGVtcCBdID0gISggcmVzdWx0c1sgdGVtcCBdID0gZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHtcblx0dmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaixcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMCBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbIFwiIFwiIF0sXG5cdFx0aSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLFxuXG5cdFx0Ly8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocylcblx0XHRtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoIGNoZWNrQ29udGV4dCA9IGNvbnRleHQgKS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudFxuXHRcdFx0Ly8gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9pc3N1ZXMvMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBpIF0udHlwZSBdICkgKSB7XG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvciggZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIgKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1sgaSBdLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zWyBpIF0ubWF0Y2hlcyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxuXHRcdFx0aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBqIF0udHlwZSBdICkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzZXRNYXRjaGVyKFxuXHRcdFx0XHRcdGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLFxuXHRcdFx0XHRcdGkgPiAxICYmIHRvU2VsZWN0b3IoXG5cblx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0XHR0b2tlbnMuc2xpY2UoIDAsIGkgLSAxIClcblx0XHRcdFx0XHRcdFx0LmNvbmNhdCggeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0gKVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW1DU1MsIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKCB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZC5UQUcoIFwiKlwiLCBvdXRlcm1vc3QgKSxcblxuXHRcdFx0XHQvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlclxuXHRcdFx0XHRkaXJydW5zVW5pcXVlID0gKCBkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSApLFxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0ZXJtb3N0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0c1xuXHRcdFx0Ly8gU3VwcG9ydDogaU9TIDw9NyAtIDkgb25seVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nXG5cdFx0XHQvLyBlbGVtZW50cyBieSBpZC4gKHNlZSB0cmFjLTE0MTQyKVxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcblx0XHRcdFx0XHRqID0gMDtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHRcdFx0XHRcdFx0eG1sID0gIWRvY3VtZW50SXNIVE1MO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHB1c2guY2FsbCggcmVzdWx0cywgZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XG5cblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtICkgKSB7XG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XG5cdFx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdFx0dW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gYGlgIGlzIG5vdyB0aGUgY291bnQgb2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBpdCB0byBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gbWFrZXMgdGhlIGxhdHRlciBub25uZWdhdGl2ZS5cblx0XHRcdG1hdGNoZWRDb3VudCArPSBpO1xuXG5cdFx0XHQvLyBBcHBseSBzZXQgZmlsdGVycyB0byB1bm1hdGNoZWQgZWxlbWVudHNcblx0XHRcdC8vIE5PVEU6IFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVtZW50cyAoaS5lLiwgYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIGVxdWFscyBgaWApLCB1bmxlc3Mgd2UgZGlkbid0IHZpc2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGF2ZVxuXHRcdFx0Ly8gbm8gZWxlbWVudCBtYXRjaGVycyBhbmQgbm8gc2VlZC5cblx0XHRcdC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nIFwiMFwiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXRcblx0XHRcdC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgXCIwMFwiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMgYWxzb1xuXHRcdFx0Ly8gbnVtZXJpY2FsbHkgemVyby5cblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xuXHRcdFx0XHRqID0gMDtcblx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBzZXRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXG5cdFx0XHRcdFx0Ly8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZ1xuXHRcdFx0XHRcdGlmICggbWF0Y2hlZENvdW50ID4gMCApIHtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoICEoIHVubWF0Y2hlZFsgaSBdIHx8IHNldE1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHNldE1hdGNoZWRbIGkgXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xuXHRcdFx0XHRcdHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0c1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XG5cblx0XHRcdFx0Ly8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XG5cdFx0fTtcblxuXHRyZXR1cm4gYnlTZXQgP1xuXHRcdG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOlxuXHRcdHN1cGVyTWF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbIGkgXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsXG5cdFx0XHRtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSApO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn1cblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIGpRdWVyeSdzIGNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb25zXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggalF1ZXJ5IHNlbGVjdG9yIGNvbXBpbGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxuICovXG5mdW5jdGlvbiBzZWxlY3QoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcblx0XHRjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHNlbGVjdG9yLFxuXHRcdG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoICggc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvciApICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAgKTtcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICggdG9rZW4gPSB0b2tlbnNbIDAgXSApLnR5cGUgPT09IFwiSURcIiAmJlxuXHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIGRvY3VtZW50SXNIVE1MICYmIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMSBdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kLklEKFxuXHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0Y29udGV4dFxuXHRcdFx0KSB8fCBbXSApWyAwIF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0b2tlbiA9IHRva2Vuc1sgaSBdO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICggdHlwZSA9IHRva2VuLnR5cGUgKSBdICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggKCBmaW5kID0gRXhwci5maW5kWyB0eXBlIF0gKSApIHtcblxuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoIHNlZWQgPSBmaW5kKFxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbIDAgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1sgMCBdLnR5cGUgKSAmJlxuXHRcdFx0XHRcdFx0dGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0XHRcdFx0KSApICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcblx0XHRzZWVkLFxuXHRcdGNvbnRleHQsXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxuXHRcdHJlc3VsdHMsXG5cdFx0IWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCAtIDQuMStcbi8vIFNvcnQgc3RhYmlsaXR5XG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KCBcIlwiICkuc29ydCggc29ydE9yZGVyICkuam9pbiggXCJcIiApID09PSBleHBhbmRvO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgLSA0LjErXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICkgKSAmIDE7XG59ICk7XG5cbmpRdWVyeS5maW5kID0gZmluZDtcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZSA9IGpRdWVyeS51bmlxdWVTb3J0O1xuXG4vLyBUaGVzZSBoYXZlIGFsd2F5cyBiZWVuIHByaXZhdGUsIGJ1dCB0aGV5IHVzZWQgdG8gYmUgZG9jdW1lbnRlZCBhcyBwYXJ0IG9mXG4vLyBTaXp6bGUgc28gbGV0J3MgbWFpbnRhaW4gdGhlbSBmb3Igbm93IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBwdXJwb3Nlcy5cbmZpbmQuY29tcGlsZSA9IGNvbXBpbGU7XG5maW5kLnNlbGVjdCA9IHNlbGVjdDtcbmZpbmQuc2V0RG9jdW1lbnQgPSBzZXREb2N1bWVudDtcbmZpbmQudG9rZW5pemUgPSB0b2tlbml6ZTtcblxuZmluZC5lc2NhcGUgPSBqUXVlcnkuZXNjYXBlU2VsZWN0b3I7XG5maW5kLmdldFRleHQgPSBqUXVlcnkudGV4dDtcbmZpbmQuaXNYTUwgPSBqUXVlcnkuaXNYTUxEb2M7XG5maW5kLnNlbGVjdG9ycyA9IGpRdWVyeS5leHByO1xuZmluZC5zdXBwb3J0ID0galF1ZXJ5LnN1cHBvcnQ7XG5maW5kLnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlU29ydDtcblxuXHQvKiBlc2xpbnQtZW5hYmxlICovXG5cbn0gKSgpO1xuXG5cbnZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHtcblx0dmFyIG1hdGNoZWQgPSBbXSxcblx0XHR0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7XG5cblx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7XG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0aWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdO1xuXG5cdGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7XG5cdFx0aWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7XG5cdFx0XHRtYXRjaGVkLnB1c2goIG4gKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7XG5cbnZhciByc2luZ2xlVGFnID0gKCAvXjwoW2Etel1bXlxcL1xcMD46XFx4MjBcXHRcXHJcXG5cXGZdKilbXFx4MjBcXHRcXHJcXG5cXGZdKlxcLz8+KD86PFxcL1xcMT58KSQvaSApO1xuXG5cblxuLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3RcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkge1xuXHRpZiAoIGlzRnVuY3Rpb24oIHF1YWxpZmllciApICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIFNpbmdsZSBlbGVtZW50XG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSlcblx0aWYgKCB0eXBlb2YgcXVhbGlmaWVyICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBGaWx0ZXJlZCBkaXJlY3RseSBmb3IgYm90aCBzaW1wbGUgYW5kIGNvbXBsZXggc2VsZWN0b3JzXG5cdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcbn1cblxualF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkge1xuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XG5cblx0aWYgKCBub3QgKSB7XG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcblx0fVxuXG5cdGlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHR9ICkgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBpLCByZXQsXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdHNlbGYgPSB0aGlzO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApICk7XG5cdFx0fVxuXG5cdFx0cmV0ID0gdGhpcy5wdXNoU3RhY2soIFtdICk7XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIHJldCApIDogcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTtcblx0fSxcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTtcblx0fSxcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gISF3aW5ub3coXG5cdFx0XHR0aGlzLFxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0XG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvciApIDpcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXG5cdFx0XHRmYWxzZVxuXHRcdCkubGVuZ3RoO1xuXHR9XG59ICk7XG5cblxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcblxuXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcbnZhciByb290alF1ZXJ5LFxuXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICh0cmFjLTk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICh0cmFjLTExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPClcblx0Ly8gU2hvcnRjdXQgc2ltcGxlICNpZCBjYXNlIGZvciBzcGVlZFxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC8sXG5cblx0aW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkge1xuXHRcdHZhciBtYXRjaCwgZWxlbTtcblxuXHRcdC8vIEhBTkRMRTogJChcIlwiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKVxuXHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5XG5cdFx0Ly8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKVxuXHRcdHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7XG5cblx0XHQvLyBIYW5kbGUgSFRNTCBzdHJpbmdzXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRpZiAoIHNlbGVjdG9yWyAwIF0gPT09IFwiPFwiICYmXG5cdFx0XHRcdHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09IFwiPlwiICYmXG5cdFx0XHRcdHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xuXG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxuXHRcdFx0aWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHtcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcblx0XHRcdFx0aWYgKCBtYXRjaFsgMSBdICkge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDtcblxuXHRcdFx0XHRcdC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxuXHRcdFx0XHRcdFx0bWF0Y2hbIDEgXSxcblx0XHRcdFx0XHRcdGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KSApO1xuXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxuXHRcdFx0XHRcdGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxuXHRcdFx0fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KVxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIQU5ETEU6ICQoRE9NRWxlbWVudClcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcblx0XHRcdHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXG5cdFx0Ly8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5XG5cdFx0fSBlbHNlIGlmICggaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcblx0fTtcblxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5cbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2VcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XG5cblxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxuXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiICYmIGpRdWVyeSggc2VsZWN0b3JzICk7XG5cblx0XHQvLyBQb3NpdGlvbmFsIHNlbGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0XG5cdFx0aWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xuXHRcdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCB0YXJnZXRzID9cblx0XHRcdFx0XHRcdHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBqUXVlcnkjZmluZFxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRpZiAoIGVsZW0uY29udGVudERvY3VtZW50ICE9IG51bGwgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErXG5cdFx0XHQvLyA8b2JqZWN0PiBlbGVtZW50cyB3aXRoIG5vIGBkYXRhYCBhdHRyaWJ1dGUgaGFzIGFuIG9iamVjdFxuXHRcdFx0Ly8gYGNvbnRlbnREb2N1bWVudGAgd2l0aCBhIGBudWxsYCBwcm90b3R5cGUuXG5cdFx0XHRnZXRQcm90byggZWxlbS5jb250ZW50RG9jdW1lbnQgKSApIHtcblxuXHRcdFx0cmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50O1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5LCBpT1MgNyBvbmx5LCBBbmRyb2lkIEJyb3dzZXIgPD00LjMgb25seVxuXHRcdC8vIFRyZWF0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGFzIGEgcmVndWxhciBvbmUgaW4gYnJvd3NlcnMgdGhhdFxuXHRcdC8vIGRvbid0IHN1cHBvcnQgaXQuXG5cdFx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0ZW1wbGF0ZVwiICkgKSB7XG5cdFx0XHRlbGVtID0gZWxlbS5jb250ZW50IHx8IGVsZW07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApO1xuXHR9XG59LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcblx0XHR2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApO1xuXG5cdFx0aWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSBcIlVudGlsXCIgKSB7XG5cdFx0XHRzZWxlY3RvciA9IHVudGlsO1xuXHRcdH1cblxuXHRcdGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0bWF0Y2hlZCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBtYXRjaGVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBkdXBsaWNhdGVzXG5cdFx0XHRpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzXG5cdFx0XHRpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQucmV2ZXJzZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApO1xuXHR9O1xufSApO1xudmFyIHJub3RodG1sd2hpdGUgPSAoIC9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZyApO1xuXG5cblxuLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXNcbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7XG5cdHZhciBvYmplY3QgPSB7fTtcblx0alF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7XG5cdFx0b2JqZWN0WyBmbGFnIF0gPSB0cnVlO1xuXHR9ICk7XG5cdHJldHVybiBvYmplY3Q7XG59XG5cbi8qXG4gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKlx0b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvd1xuICpcdFx0XHR0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0XG4gKlxuICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmVcbiAqIFwiZmlyZWRcIiBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBQb3NzaWJsZSBvcHRpb25zOlxuICpcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0bWVtb3J5Olx0XHRcdHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWRcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcbiAqXHRcdFx0XHRcdHZhbHVlcyAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXG4gKlxuICpcdHN0b3BPbkZhbHNlOlx0aW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlXG4gKlxuICovXG5qUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0Ly8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZFxuXHQvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0Y3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIDpcblx0XHRqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApO1xuXG5cdHZhciAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nXG5cdFx0ZmlyaW5nLFxuXG5cdFx0Ly8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHNcblx0XHRtZW1vcnksXG5cblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZFxuXHRcdGZpcmVkLFxuXG5cdFx0Ly8gRmxhZyB0byBwcmV2ZW50IGZpcmluZ1xuXHRcdGxvY2tlZCxcblxuXHRcdC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0XG5cdFx0bGlzdCA9IFtdLFxuXG5cdFx0Ly8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHNcblx0XHRxdWV1ZSA9IFtdLFxuXG5cdFx0Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgYWRkL3JlbW92ZSBhcyBuZWVkZWQpXG5cdFx0ZmlyaW5nSW5kZXggPSAtMSxcblxuXHRcdC8vIEZpcmUgY2FsbGJhY2tzXG5cdFx0ZmlyZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbmZvcmNlIHNpbmdsZS1maXJpbmdcblx0XHRcdGxvY2tlZCA9IGxvY2tlZCB8fCBvcHRpb25zLm9uY2U7XG5cblx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLFxuXHRcdFx0Ly8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlc1xuXHRcdFx0ZmlyZWQgPSBmaXJpbmcgPSB0cnVlO1xuXHRcdFx0Zm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRcdHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb25cblx0XHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJlxuXHRcdFx0XHRcdFx0b3B0aW9ucy5zdG9wT25GYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZVxuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0XG5cdFx0XHRpZiAoICFvcHRpb25zLm1lbW9yeSApIHtcblx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGZpcmluZyA9IGZhbHNlO1xuXG5cdFx0XHQvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZFxuXHRcdFx0aWYgKCBsb2NrZWQgKSB7XG5cblx0XHRcdFx0Ly8gS2VlcCBhbiBlbXB0eSBsaXN0IGlmIHdlIGhhdmUgZGF0YSBmb3IgZnV0dXJlIGFkZCBjYWxsc1xuXHRcdFx0XHRpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxpc3QgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0XG5cdFx0c2VsZiA9IHtcblxuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmdcblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBtZW1vcnkgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQoIGZ1bmN0aW9uIGFkZCggYXJncyApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdG9UeXBlKCBhcmcgKSAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0fSApKCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHR2YXIgaW5kZXg7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xuXHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4gZm4gP1xuXHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOlxuXHRcdFx0XHRcdGxpc3QubGVuZ3RoID4gMDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3Rcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmUgYW5kIC5hZGRcblx0XHRcdC8vIEFib3J0IGFueSBjdXJyZW50L3BlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0Ly8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzXG5cdFx0XHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFsaXN0O1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZVxuXHRcdFx0Ly8gQWxzbyBkaXNhYmxlIC5hZGQgdW5sZXNzIHdlIGhhdmUgbWVtb3J5IChzaW5jZSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdClcblx0XHRcdC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdGxvY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRsb2NrZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFsb2NrZWQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XG5cdFx0XHRcdGlmICggIWxvY2tlZCApIHtcblx0XHRcdFx0XHRhcmdzID0gYXJncyB8fCBbXTtcblx0XHRcdFx0XHRhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdO1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGFyZ3MgKTtcblx0XHRcdFx0XHRpZiAoICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcblx0XHRcdGZpcmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2Vcblx0XHRcdGZpcmVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRyZXR1cm4gc2VsZjtcbn07XG5cblxuZnVuY3Rpb24gSWRlbnRpdHkoIHYgKSB7XG5cdHJldHVybiB2O1xufVxuZnVuY3Rpb24gVGhyb3dlciggZXggKSB7XG5cdHRocm93IGV4O1xufVxuXG5mdW5jdGlvbiBhZG9wdFZhbHVlKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0LCBub1ZhbHVlICkge1xuXHR2YXIgbWV0aG9kO1xuXG5cdHRyeSB7XG5cblx0XHQvLyBDaGVjayBmb3IgcHJvbWlzZSBhc3BlY3QgZmlyc3QgdG8gcHJpdmlsZWdlIHN5bmNocm9ub3VzIGJlaGF2aW9yXG5cdFx0aWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnByb21pc2UgKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlICkuZG9uZSggcmVzb2x2ZSApLmZhaWwoIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgdGhlbmFibGVzXG5cdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS50aGVuICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciBub24tdGhlbmFibGVzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29udHJvbCBgcmVzb2x2ZWAgYXJndW1lbnRzIGJ5IGxldHRpbmcgQXJyYXkjc2xpY2UgY2FzdCBib29sZWFuIGBub1ZhbHVlYCB0byBpbnRlZ2VyOlxuXHRcdFx0Ly8gKiBmYWxzZTogWyB2YWx1ZSBdLnNsaWNlKCAwICkgPT4gcmVzb2x2ZSggdmFsdWUgKVxuXHRcdFx0Ly8gKiB0cnVlOiBbIHZhbHVlIF0uc2xpY2UoIDEgKSA9PiByZXNvbHZlKClcblx0XHRcdHJlc29sdmUuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdLnNsaWNlKCBub1ZhbHVlICkgKTtcblx0XHR9XG5cblx0Ly8gRm9yIFByb21pc2VzL0ErLCBjb252ZXJ0IGV4Y2VwdGlvbnMgaW50byByZWplY3Rpb25zXG5cdC8vIFNpbmNlIGpRdWVyeS53aGVuIGRvZXNuJ3QgdW53cmFwIHRoZW5hYmxlcywgd2UgY2FuIHNraXAgdGhlIGV4dHJhIGNoZWNrcyBhcHBlYXJpbmcgaW5cblx0Ly8gRGVmZXJyZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVjdGlvbi5cblx0fSBjYXRjaCAoIHZhbHVlICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seVxuXHRcdC8vIFN0cmljdCBtb2RlIGZ1bmN0aW9ucyBpbnZva2VkIHdpdGhvdXQgLmNhbGwvLmFwcGx5IGdldCBnbG9iYWwtb2JqZWN0IGNvbnRleHRcblx0XHRyZWplY3QuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdICk7XG5cdH1cbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHtcblx0XHR2YXIgdHVwbGVzID0gW1xuXG5cdFx0XHRcdC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBjYWxsYmFja3MsXG5cdFx0XHRcdC8vIC4uLiAudGhlbiBoYW5kbGVycywgYXJndW1lbnQgaW5kZXgsIFtmaW5hbCBzdGF0ZV1cblx0XHRcdFx0WyBcIm5vdGlmeVwiLCBcInByb2dyZXNzXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksIDIgXSxcblx0XHRcdFx0WyBcInJlc29sdmVcIiwgXCJkb25lXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAwLCBcInJlc29sdmVkXCIgXSxcblx0XHRcdFx0WyBcInJlamVjdFwiLCBcImZhaWxcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDEsIFwicmVqZWN0ZWRcIiBdXG5cdFx0XHRdLFxuXHRcdFx0c3RhdGUgPSBcInBlbmRpbmdcIixcblx0XHRcdHByb21pc2UgPSB7XG5cdFx0XHRcdHN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFsd2F5czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiY2F0Y2hcIjogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRcdHJldHVybiBwcm9taXNlLnRoZW4oIG51bGwsIGZuICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRwaXBlOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7XG5cdFx0XHRcdFx0dmFyIGZucyA9IGFyZ3VtZW50cztcblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBfaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLmVycm9yICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjQuMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIHBvc3QtcmVzb2x1dGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyBlIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjFcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTdcblx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbVxuXHRcdFx0XHRcdFx0XHQvLyBzdWJzZXF1ZW50IGVycm9yc1xuXHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIGVycm9yLCBpbiBjYXNlIG9mIGV4Y2VwdGlvblxuXHRcdFx0XHRcdFx0XHRcdC8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luY1xuXHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmdldEVycm9ySG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MuZXJyb3IgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0RXJyb3JIb29rKCk7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgZGVwcmVjYXRlZCBhbGlhcyBvZiB0aGUgYWJvdmUuIFdoaWxlIHRoZSBuYW1lIHN1Z2dlc3RzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gcmV0dXJuaW5nIHRoZSBzdGFjaywgbm90IGFuIGVycm9yIGluc3RhbmNlLCBqUXVlcnkganVzdCBwYXNzZXNcblx0XHRcdFx0XHRcdFx0XHQvLyBpdCBkaXJlY3RseSB0byBgY29uc29sZS53YXJuYCBzbyBib3RoIHdpbGwgd29yazsgYW4gaW5zdGFuY2Vcblx0XHRcdFx0XHRcdFx0XHQvLyBqdXN0IGJldHRlciBjb29wZXJhdGVzIHdpdGggc291cmNlIG1hcHMuXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggalF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MuZXJyb3IgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXG5cdFx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblByb2dyZXNzIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLm5vdGlmeVdpdGhcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMSBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25GdWxmaWxsZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkZ1bGZpbGxlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDIgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUmVqZWN0ZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblJlamVjdGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdFRocm93ZXJcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWRcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdFx0XHRcdHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlZmVycmVkID0ge307XG5cblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0dmFyIGxpc3QgPSB0dXBsZVsgMiBdLFxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyA1IF07XG5cblx0XHRcdC8vIHByb21pc2UucHJvZ3Jlc3MgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZmFpbCA9IGxpc3QuYWRkXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDtcblxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXG5cdFx0XHRpZiAoIHN0YXRlU3RyaW5nICkge1xuXHRcdFx0XHRsaXN0LmFkZChcblx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlc29sdmVkXCIgKGkuZS4sIGZ1bGZpbGxlZClcblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZWplY3RlZFwiXG5cdFx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMiBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDMgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMiBdLmxvY2ssXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5sb2NrXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5maXJlXG5cdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5maXJlXG5cdFx0XHRsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5ub3RpZnlXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdCA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZWplY3RXaXRoKC4uLikgfVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmVXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xuXG5cdFx0Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueVxuXHRcdGlmICggZnVuYyApIHtcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGRvbmUhXG5cdFx0cmV0dXJuIGRlZmVycmVkO1xuXHR9LFxuXG5cdC8vIERlZmVycmVkIGhlbHBlclxuXHR3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFsdWUgKSB7XG5cdFx0dmFyXG5cblx0XHRcdC8vIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5wcm9jZXNzZWQgYXJndW1lbnRzXG5cdFx0XHRpID0gcmVtYWluaW5nLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBmdWxmaWxsbWVudCBkYXRhXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXG5cdFx0XHQvLyB0aGUgcHJpbWFyeSBEZWZlcnJlZFxuXHRcdFx0cHJpbWFyeSA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRwcmltYXJ5LnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0Ly8gU2luZ2xlLSBhbmQgZW1wdHkgYXJndW1lbnRzIGFyZSBhZG9wdGVkIGxpa2UgUHJvbWlzZS5yZXNvbHZlXG5cdFx0aWYgKCByZW1haW5pbmcgPD0gMSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBwcmltYXJ5LmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIHByaW1hcnkucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggcHJpbWFyeS5zdGF0ZSgpID09PSBcInBlbmRpbmdcIiB8fFxuXHRcdFx0XHRpc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHtcblxuXHRcdFx0XHRyZXR1cm4gcHJpbWFyeS50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBwcmltYXJ5LnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcmltYXJ5LnByb21pc2UoKTtcblx0fVxufSApO1xuXG5cbi8vIFRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIG1pc3Rha2UgZHVyaW5nIGRldmVsb3BtZW50LFxuLy8gd2FybiBhYm91dCB0aGVtIEFTQVAgcmF0aGVyIHRoYW4gc3dhbGxvd2luZyB0aGVtIGJ5IGRlZmF1bHQuXG52YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztcblxuLy8gSWYgYGpRdWVyeS5EZWZlcnJlZC5nZXRFcnJvckhvb2tgIGlzIGRlZmluZWQsIGBhc3luY0Vycm9yYCBpcyBhbiBlcnJvclxuLy8gY2FwdHVyZWQgYmVmb3JlIHRoZSBhc3luYyBiYXJyaWVyIHRvIGdldCB0aGUgb3JpZ2luYWwgZXJyb3IgY2F1c2Vcbi8vIHdoaWNoIG1heSBvdGhlcndpc2UgYmUgaGlkZGVuLlxualF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbiggZXJyb3IsIGFzeW5jRXJyb3IgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDkgb25seVxuXHQvLyBDb25zb2xlIGV4aXN0cyB3aGVuIGRldiB0b29scyBhcmUgb3Blbiwgd2hpY2ggY2FuIGhhcHBlbiBhdCBhbnkgdGltZVxuXHRpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkge1xuXHRcdHdpbmRvdy5jb25zb2xlLndhcm4oIFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIgKyBlcnJvci5tZXNzYWdlLFxuXHRcdFx0ZXJyb3Iuc3RhY2ssIGFzeW5jRXJyb3IgKTtcblx0fVxufTtcblxuXG5cblxualF1ZXJ5LnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24oIGVycm9yICkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0dGhyb3cgZXJyb3I7XG5cdH0gKTtcbn07XG5cblxuXG5cbi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeVxudmFyIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpO1xuXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XG5cblx0cmVhZHlMaXN0XG5cdFx0LnRoZW4oIGZuIClcblxuXHRcdC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgbG9va3VwXG5cdFx0Ly8gaGFwcGVucyBhdCB0aGUgdGltZSBvZiBlcnJvciBoYW5kbGluZyBpbnN0ZWFkIG9mIGNhbGxiYWNrXG5cdFx0Ly8gcmVnaXN0cmF0aW9uLlxuXHRcdC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkge1xuXHRcdFx0alF1ZXJ5LnJlYWR5RXhjZXB0aW9uKCBlcnJvciApO1xuXHRcdH0gKTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxuXHRpc1JlYWR5OiBmYWxzZSxcblxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXG5cdC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlIHRyYWMtNjc4MVxuXHRyZWFkeVdhaXQ6IDEsXG5cblx0Ly8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeVxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XG5cblx0XHQvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5XG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5XG5cdFx0alF1ZXJ5LmlzUmVhZHkgPSB0cnVlO1xuXG5cdFx0Ly8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmVcblx0XHRpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXG5cdFx0cmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW47XG5cbi8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbi8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkXG4vLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDEwIG9ubHlcbi8vIE9sZGVyIElFIHNvbWV0aW1lcyBzaWduYWxzIFwiaW50ZXJhY3RpdmVcIiB0b28gc29vblxuaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcblx0KCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7XG5cblx0Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcblxufSBlbHNlIHtcblxuXHQvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblxuXHQvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29ya1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xufVxuXG5cblxuXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cbi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvblxudmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGVsZW1zLmxlbmd0aCxcblx0XHRidWxrID0ga2V5ID09IG51bGw7XG5cblx0Ly8gU2V0cyBtYW55IHZhbHVlc1xuXHRpZiAoIHRvVHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblx0XHRmb3IgKCBpIGluIGtleSApIHtcblx0XHRcdGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApO1xuXHRcdH1cblxuXHQvLyBTZXRzIG9uZSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoICFpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmF3ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGJ1bGsgKSB7XG5cblx0XHRcdC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldFxuXHRcdFx0aWYgKCByYXcgKSB7XG5cdFx0XHRcdGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApO1xuXHRcdFx0XHRmbiA9IG51bGw7XG5cblx0XHRcdC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1bGsgPSBmbjtcblx0XHRcdFx0Zm4gPSBmdW5jdGlvbiggZWxlbSwgX2tleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0XHR2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggY2hhaW5hYmxlICkge1xuXHRcdHJldHVybiBlbGVtcztcblx0fVxuXG5cdC8vIEdldHNcblx0aWYgKCBidWxrICkge1xuXHRcdHJldHVybiBmbi5jYWxsKCBlbGVtcyApO1xuXHR9XG5cblx0cmV0dXJuIGxlbiA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0O1xufTtcblxuXG4vLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmdcbnZhciBybXNQcmVmaXggPSAvXi1tcy0vLFxuXHRyZGFzaEFscGhhID0gLy0oW2Etel0pL2c7XG5cbi8vIFVzZWQgYnkgY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKVxuZnVuY3Rpb24gZmNhbWVsQ2FzZSggX2FsbCwgbGV0dGVyICkge1xuXHRyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXNcbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcbi8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICh0cmFjLTk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSB0cmFjLTgzMzUuXG5cdFx0XHQvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cblx0XHRcdGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBpdCBpcyBhIG5vZGUgdW5saWtlbHkgdG8gYmUgc3RyaW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyXG5cdFx0XHRcdC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50XG5cdFx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XG5cdFx0XHRcdC8vIGNvbmZpZ3VyYWJsZSBtdXN0IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlXG5cdFx0XHRcdC8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHtcblx0XHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblx0c2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkge1xuXHRcdHZhciBwcm9wLFxuXHRcdFx0Y2FjaGUgPSB0aGlzLmNhY2hlKCBvd25lciApO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJnc1xuXHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggZGF0YSApIF0gPSB2YWx1ZTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvbmUtYnktb25lIHRvIHRoZSBjYWNoZSBvYmplY3Rcblx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggcHJvcCApIF0gPSBkYXRhWyBwcm9wIF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZTtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcy5jYWNoZSggb3duZXIgKSA6XG5cblx0XHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSAmJiBvd25lclsgdGhpcy5leHBhbmRvIF1bIGNhbWVsQ2FzZSgga2V5ICkgXTtcblx0fSxcblx0YWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVkXG5cdFx0Ly8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkXG5cdFx0Ly9cblx0XHQvLyBUYWtlIHRoZSBcInJlYWRcIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmVcblx0XHQvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0XG5cdFx0Ly8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleVxuXHRcdC8vXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoICgga2V5ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmdldCggb3duZXIsIGtleSApO1xuXHRcdH1cblxuXHRcdC8vIFdoZW4gdGhlIGtleSBpcyBub3QgYSBzdHJpbmcsIG9yIGJvdGggYSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzXG5cdFx0Ly8gICAyLiBBIGtleSBhbmQgdmFsdWVcblx0XHQvL1xuXHRcdHRoaXMuc2V0KCBvd25lciwga2V5LCB2YWx1ZSApO1xuXG5cdFx0Ly8gU2luY2UgdGhlIFwic2V0XCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkgcG9pbnRzXG5cdFx0Ly8gcmV0dXJuIHRoZSBleHBlY3RlZCBkYXRhIGJhc2VkIG9uIHdoaWNoIHBhdGggd2FzIHRha2VuWypdXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTtcblx0fSxcblx0cmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHR2YXIgaSxcblx0XHRcdGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0aWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGtleSApICkge1xuXG5cdFx0XHRcdC8vIElmIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzZXQgY2FtZWxDYXNlIGtleXMsIHNvIHJlbW92ZSB0aGF0LlxuXHRcdFx0XHRrZXkgPSBrZXkubWFwKCBjYW1lbENhc2UgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGtleSA9IGNhbWVsQ2FzZSgga2V5ICk7XG5cblx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZVxuXHRcdFx0XHRrZXkgPSBrZXkgaW4gY2FjaGUgP1xuXHRcdFx0XHRcdFsga2V5IF0gOlxuXHRcdFx0XHRcdCgga2V5Lm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10gKTtcblx0XHRcdH1cblxuXHRcdFx0aSA9IGtleS5sZW5ndGg7XG5cblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRkZWxldGUgY2FjaGVbIGtleVsgaSBdIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NVxuXHRcdFx0Ly8gV2Via2l0ICYgQmxpbmsgcGVyZm9ybWFuY2Ugc3VmZmVycyB3aGVuIGRlbGV0aW5nIHByb3BlcnRpZXNcblx0XHRcdC8vIGZyb20gRE9NIG5vZGVzLCBzbyBzZXQgdG8gdW5kZWZpbmVkIGluc3RlYWRcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3ODYwNyAoYnVnIHJlc3RyaWN0ZWQpXG5cdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWxldGUgb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkge1xuXHRcdHZhciBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRyZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7XG5cdH1cbn07XG52YXIgZGF0YVByaXYgPSBuZXcgRGF0YSgpO1xuXG52YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpO1xuXG5cblxuLy9cdEltcGxlbWVudGF0aW9uIFN1bW1hcnlcbi8vXG4vL1x0MS4gRW5mb3JjZSBBUEkgc3VyZmFjZSBhbmQgc2VtYW50aWMgY29tcGF0aWJpbGl0eSB3aXRoIDEuOS54IGJyYW5jaFxuLy9cdDIuIEltcHJvdmUgdGhlIG1vZHVsZSdzIG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZVxuLy9cdFx0cGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNtLlxuLy9cdDMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgXCJwcml2YXRlXCIgYW5kIFwidXNlclwiIGRhdGEuXG4vL1x0NC4gX05ldmVyXyBleHBvc2UgXCJwcml2YXRlXCIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKVxuLy9cdDUuIEF2b2lkIGV4cG9zaW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4gZXhwYW5kbyBwcm9wZXJ0aWVzKVxuLy9cdDYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNFxuXG52YXIgcmJyYWNlID0gL14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLFxuXHRybXVsdGlEYXNoID0gL1tBLVpdL2c7XG5cbmZ1bmN0aW9uIGdldERhdGEoIGRhdGEgKSB7XG5cdGlmICggZGF0YSA9PT0gXCJ0cnVlXCIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwiZmFsc2VcIiApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwibnVsbFwiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmdcblx0aWYgKCBkYXRhID09PSArZGF0YSArIFwiXCIgKSB7XG5cdFx0cmV0dXJuICtkYXRhO1xuXHR9XG5cblx0aWYgKCByYnJhY2UudGVzdCggZGF0YSApICkge1xuXHRcdHJldHVybiBKU09OLnBhcnNlKCBkYXRhICk7XG5cdH1cblxuXHRyZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHtcblx0dmFyIG5hbWU7XG5cblx0Ly8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueVxuXHQvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGVcblx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRuYW1lID0gXCJkYXRhLVwiICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsIFwiLSQmXCIgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRhdGEgPSBnZXREYXRhKCBkYXRhICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHt9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlclxuXHRcdFx0ZGF0YVVzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRhdGE7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7XG5cdH0sXG5cblx0ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFVc2VyLnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9LFxuXG5cdC8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxscyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkXG5cdC8vIHdpdGggZGlyZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLlxuXHRfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdF9yZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpLCBuYW1lLCBkYXRhLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7XG5cblx0XHQvLyBHZXRzIGFsbCB2YWx1ZXNcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSApO1xuXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVByaXYuZ2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiICkgKSB7XG5cdFx0XHRcdFx0aSA9IGF0dHJzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0XHRcdFx0Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICh0cmFjLTE0ODk0KVxuXHRcdFx0XHRcdFx0aWYgKCBhdHRyc1sgaSBdICkge1xuXHRcdFx0XHRcdFx0XHRuYW1lID0gYXR0cnNbIGkgXS5uYW1lO1xuXHRcdFx0XHRcdFx0XHRpZiAoIG5hbWUuaW5kZXhPZiggXCJkYXRhLVwiICkgPT09IDAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IGNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdC8vIFNldHMgbXVsdGlwbGUgdmFsdWVzXG5cdFx0aWYgKCB0eXBlb2Yga2V5ID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5ICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGRhdGE7XG5cblx0XHRcdC8vIFRoZSBjYWxsaW5nIGpRdWVyeSBvYmplY3QgKGVsZW1lbnQgbWF0Y2hlcykgaXMgbm90IGVtcHR5XG5cdFx0XHQvLyAoYW5kIHRoZXJlZm9yZSBoYXMgYW4gZWxlbWVudCBhcHBlYXJzIGF0IHRoaXNbIDAgXSkgYW5kIHRoZVxuXHRcdFx0Ly8gYHZhbHVlYCBwYXJhbWV0ZXIgd2FzIG5vdCB1bmRlZmluZWQuIEFuIGVtcHR5IGpRdWVyeSBvYmplY3Rcblx0XHRcdC8vIHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGZvciBlbGVtID0gdGhpc1sgMCBdIHdoaWNoIHdpbGxcblx0XHRcdC8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IHRvIHJlYWQgYSBkYXRhIGNhY2hlIGlzIG1hZGUuXG5cdFx0XHRpZiAoIGVsZW0gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXG5cdFx0XHRcdC8vIFRoZSBrZXkgd2lsbCBhbHdheXMgYmUgY2FtZWxDYXNlZCBpbiBEYXRhXG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gXCJkaXNjb3ZlclwiIHRoZSBkYXRhIGluXG5cdFx0XHRcdC8vIEhUTUw1IGN1c3RvbSBkYXRhLSogYXR0cnNcblx0XHRcdFx0ZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IHRoZSBkYXRhLi4uXG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzdG9yZSB0aGUgY2FtZWxDYXNlZCBrZXlcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXksIHZhbHVlICk7XG5cdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRhdGFVc2VyLnJlbW92ZSggdGhpcywga2V5ICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHF1ZXVlO1xuXG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0dHlwZSA9ICggdHlwZSB8fCBcImZ4XCIgKSArIFwicXVldWVcIjtcblx0XHRcdHF1ZXVlID0gZGF0YVByaXYuZ2V0KCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXBcblx0XHRcdGlmICggZGF0YSApIHtcblx0XHRcdFx0aWYgKCAhcXVldWUgfHwgQXJyYXkuaXNBcnJheSggZGF0YSApICkge1xuXHRcdFx0XHRcdHF1ZXVlID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBkYXRhICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBxdWV1ZSB8fCBbXTtcblx0XHR9XG5cdH0sXG5cblx0ZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksXG5cdFx0XHRzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCxcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKSxcblx0XHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksXG5cdFx0XHRuZXh0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7XG5cdFx0XHR9O1xuXG5cdFx0Ly8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbFxuXHRcdGlmICggZm4gPT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0c3RhcnRMZW5ndGgtLTtcblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXG5cdFx0XHQvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nXG5cdFx0XHQvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiApIHtcblx0XHRcdFx0cXVldWUudW5zaGlmdCggXCJpbnByb2dyZXNzXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvblxuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApO1xuXHRcdH1cblxuXHRcdGlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkge1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZVxuXHRfcXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dmFyIGtleSA9IHR5cGUgKyBcInF1ZXVlSG9va3NcIjtcblx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwge1xuXHRcdFx0ZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLmFkZCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgXCJxdWV1ZVwiLCBrZXkgXSApO1xuXHRcdFx0fSApXG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBzZXR0ZXIgPSAyO1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGRhdGEgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IFwiZnhcIjtcblx0XHRcdHNldHRlci0tO1xuXHRcdH1cblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbIDAgXSwgdHlwZSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcyA6XG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTtcblxuXHRcdFx0XHQvLyBFbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZVxuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiAmJiBxdWV1ZVsgMCBdICE9PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdH0sXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHR9ICk7XG5cdH0sXG5cdGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0fSxcblxuXHQvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlXG5cdC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KVxuXHRwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkge1xuXHRcdHZhciB0bXAsXG5cdFx0XHRjb3VudCA9IDEsXG5cdFx0XHRkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLFxuXHRcdFx0aSA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0cmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICEoIC0tY291bnQgKSApIHtcblx0XHRcdFx0XHRkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG9iaiA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRtcCA9IGRhdGFQcml2LmdldCggZWxlbWVudHNbIGkgXSwgdHlwZSArIFwicXVldWVIb29rc1wiICk7XG5cdFx0XHRpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7XG5cdFx0XHRcdGNvdW50Kys7XG5cdFx0XHRcdHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmVzb2x2ZSgpO1xuXHRcdHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTtcblx0fVxufSApO1xudmFyIHBudW0gPSAoIC9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvICkuc291cmNlO1xuXG52YXIgcmNzc051bSA9IG5ldyBSZWdFeHAoIFwiXig/OihbKy1dKT18KShcIiArIHBudW0gKyBcIikoW2EteiVdKikkXCIsIFwiaVwiICk7XG5cblxudmFyIGNzc0V4cGFuZCA9IFsgXCJUb3BcIiwgXCJSaWdodFwiLCBcIkJvdHRvbVwiLCBcIkxlZnRcIiBdO1xuXG52YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cblxuXHR2YXIgaXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cdFx0fSxcblx0XHRjb21wb3NlZCA9IHsgY29tcG9zZWQ6IHRydWUgfTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBpT1MgMTAuMCAtIDEwLjIgb25seVxuXHQvLyBDaGVjayBhdHRhY2htZW50IGFjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMgd2hlbiBwb3NzaWJsZSAoZ2gtMzUwNClcblx0Ly8gU3VwcG9ydDogaU9TIDEwLjAtMTAuMiBvbmx5XG5cdC8vIEVhcmx5IGlPUyAxMCB2ZXJzaW9ucyBzdXBwb3J0IGBhdHRhY2hTaGFkb3dgIGJ1dCBub3QgYGdldFJvb3ROb2RlYCxcblx0Ly8gbGVhZGluZyB0byBlcnJvcnMuIFdlIG5lZWQgdG8gY2hlY2sgZm9yIGBnZXRSb290Tm9kZWAuXG5cdGlmICggZG9jdW1lbnRFbGVtZW50LmdldFJvb3ROb2RlICkge1xuXHRcdGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Um9vdE5vZGUoIGNvbXBvc2VkICkgPT09IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHR9O1xuXHR9XG52YXIgaXNIaWRkZW5XaXRoaW5UcmVlID0gZnVuY3Rpb24oIGVsZW0sIGVsICkge1xuXG5cdFx0Ly8gaXNIaWRkZW5XaXRoaW5UcmVlIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGpRdWVyeSNmaWx0ZXIgZnVuY3Rpb247XG5cdFx0Ly8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ZWxlbSA9IGVsIHx8IGVsZW07XG5cblx0XHQvLyBJbmxpbmUgc3R5bGUgdHJ1bXBzIGFsbFxuXHRcdHJldHVybiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiIHx8XG5cdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiZcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCBjaGVjayBjb21wdXRlZCBzdHlsZVxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQzIC0gNDVcblx0XHRcdC8vIERpc2Nvbm5lY3RlZCBlbGVtZW50cyBjYW4gaGF2ZSBjb21wdXRlZCBkaXNwbGF5OiBub25lLCBzbyBmaXJzdCBjb25maXJtIHRoYXQgZWxlbSBpc1xuXHRcdFx0Ly8gaW4gdGhlIGRvY3VtZW50LlxuXHRcdFx0aXNBdHRhY2hlZCggZWxlbSApICYmXG5cblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgPT09IFwibm9uZVwiO1xuXHR9O1xuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLCBzY2FsZSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5jdXIoKTtcblx0XHRcdH0gOlxuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7XG5cdFx0XHR9LFxuXHRcdGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSxcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXG5cblx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdGluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmXG5cdFx0XHQoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK2luaXRpYWwgKSAmJlxuXHRcdFx0cmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTtcblxuXHRpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5pdGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdFx0Ly8gSGFsdmUgdGhlIGl0ZXJhdGlvbiB0YXJnZXQgdmFsdWUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgZnJvbSBDU1MgdXBwZXIgYm91bmRzIChnaC0yMTQ0KVxuXHRcdGluaXRpYWwgPSBpbml0aWFsIC8gMjtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0d2hpbGUgKCBtYXhJdGVyYXRpb25zLS0gKSB7XG5cblx0XHRcdC8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuXG5cdFx0XHQvLyBGaW5pc2ggaWYgdGhlIHNjYWxlIGVxdWFscyBvciBjcm9zc2VzIDEgKG1ha2luZyB0aGUgb2xkKm5ldyBwcm9kdWN0IG5vbi1wb3NpdGl2ZSkuXG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cdFx0XHRpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHtcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xuXG5cdFx0fVxuXG5cdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgKiAyO1xuXHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb25cblx0XHR2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG5cblxudmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xuXHR2YXIgdGVtcCxcblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxuXHRcdGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTtcblxuXHRpZiAoIGRpc3BsYXkgKSB7XG5cdFx0cmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHR0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7XG5cdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCBcImRpc3BsYXlcIiApO1xuXG5cdHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApO1xuXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0ZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0fVxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHQvLyBEZXRlcm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2Vcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXG5cdFx0XHQvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXJcblx0XHRcdC8vIGlubGluZSBvciBhYm91dC10by1iZS1yZXN0b3JlZClcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7XG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IFwibm9uZVwiO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmdcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImRpc3BsYXlcIiwgZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xuXHRcdFx0ZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKikvaSApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICksXG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5XG5cdC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICh0cmFjLTExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAodHJhYy0xNDkwMSlcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJyYWRpb1wiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwidFwiICk7XG5cblx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgb25seVxuXHQvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHNcblx0c3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZFxuXHRkaXYuaW5uZXJIVE1MID0gXCI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+XCI7XG5cdHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdC8vIElFIDw9OSByZXBsYWNlcyA8b3B0aW9uPiB0YWdzIHdpdGggdGhlaXIgY29udGVudHMgd2hlbiBpbnNlcnRlZCBvdXRzaWRlIG9mXG5cdC8vIHRoZSBzZWxlY3QgZWxlbWVudC5cblx0ZGl2LmlubmVySFRNTCA9IFwiPG9wdGlvbj48L29wdGlvbj5cIjtcblx0c3VwcG9ydC5vcHRpb24gPSAhIWRpdi5sYXN0Q2hpbGQ7XG59ICkoKTtcblxuXG4vLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAodHJhYy0xMzIwMClcbnZhciB3cmFwTWFwID0ge1xuXG5cdC8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4gdGhlXG5cdC8vIHNhbWUgd2F5IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW5cblx0Ly8gdGhpcyBieSBvbWl0dGluZyA8dGJvZHk+IG9yIG90aGVyIHJlcXVpcmVkIGVsZW1lbnRzLlxuXHR0aGVhZDogWyAxLCBcIjx0YWJsZT5cIiwgXCI8L3RhYmxlPlwiIF0sXG5cdGNvbDogWyAyLCBcIjx0YWJsZT48Y29sZ3JvdXA+XCIsIFwiPC9jb2xncm91cD48L3RhYmxlPlwiIF0sXG5cdHRyOiBbIDIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCIgXSxcblx0dGQ6IFsgMywgXCI8dGFibGU+PHRib2R5Pjx0cj5cIiwgXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXG5cdF9kZWZhdWx0OiBbIDAsIFwiXCIsIFwiXCIgXVxufTtcblxud3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDtcbndyYXBNYXAudGggPSB3cmFwTWFwLnRkO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuaWYgKCAhc3VwcG9ydC5vcHRpb24gKSB7XG5cdHdyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbiA9IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXTtcbn1cblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKHRyYWMtMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgYXR0YWNoZWQsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICh0cmFjLTEyMzkyKVxuXHRcdFx0XHR0bXAudGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnRcblx0ZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xuXG5cdGkgPSAwO1xuXHR3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkge1xuXG5cdFx0Ly8gU2tpcCBlbGVtZW50cyBhbHJlYWR5IGluIHRoZSBjb250ZXh0IGNvbGxlY3Rpb24gKHRyYWMtNDA4Nylcblx0XHRpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHtcblx0XHRcdGlmICggaWdub3JlZCApIHtcblx0XHRcdFx0aWdub3JlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRhdHRhY2hlZCA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEFwcGVuZCB0byBmcmFnbWVudFxuXHRcdHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgXCJzY3JpcHRcIiApO1xuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGlmICggYXR0YWNoZWQgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCB0bXAgKTtcblx0XHR9XG5cblx0XHQvLyBDYXB0dXJlIGV4ZWN1dGFibGVzXG5cdFx0aWYgKCBzY3JpcHRzICkge1xuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHtcblx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgXCJcIiApICkge1xuXHRcdFx0XHRcdHNjcmlwdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZyYWdtZW50O1xufVxuXG5cbnZhciBydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlxcLiguKyl8KS87XG5cbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIE9ubHkgYXR0YWNoIGV2ZW50cyB0byBvYmplY3RzIHRoYXQgYWNjZXB0IGRhdGFcblx0XHRpZiAoICFhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0gT2JqZWN0LmNyZWF0ZSggbnVsbCApO1xuXHRcdH1cblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xuXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXG5cdFx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApO1xuXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XG5cblx0XHRcdFx0aWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJlxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxuXHRcdFx0XHRcdCggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcblx0XHRcdGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcblx0XHRcdFx0XHRzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXG5cdFx0XHQvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3Rcblx0XHRcdGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKSxcblxuXHRcdFx0aGFuZGxlcnMgPSAoXG5cdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0KVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXG5cdFx0Zm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XG5cblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGhhbmRsZXJzXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xuXG5cdFx0Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXNcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG5cblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiZcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGV2ZW50IGlzIG5hbWVzcGFjZWQsIHRoZW4gZWFjaCBoYW5kbGVyIGlzIG9ubHkgaW52b2tlZCBpZiBpdCBpc1xuXHRcdFx0XHQvLyBzcGVjaWFsbHkgdW5pdmVyc2FsIG9yIGl0cyBuYW1lc3BhY2VzIGFyZSBhIHN1cGVyc2V0IG9mIHRoZSBldmVudCdzLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGhhbmRsZU9iai5uYW1lc3BhY2UgPT09IGZhbHNlIHx8XG5cdFx0XHRcdFx0ZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIGhhbmRsZU9iaiwgc2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTlcblx0XHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKVxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MlxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGlja1xuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxuXHRcdFx0ISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAodHJhYy0xMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKHRyYWMtNjkxMSwgdHJhYy04MTY1LCB0cmFjLTExMzgyLCB0cmFjLTExNzY0KVxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVlICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9ycyA9IHt9O1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKHRyYWMtMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGN1ciA9IHRoaXM7XG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHRhZGRQcm9wOiBmdW5jdGlvbiggbmFtZSwgaG9vayApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cblx0XHRcdGdldDogaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgaXNTZXR1cCApIHtcblxuXHQvLyBNaXNzaW5nIGBpc1NldHVwYCBpbmRpY2F0ZXMgYSB0cmlnZ2VyIGNhbGwsIHdoaWNoIG11c3QgZm9yY2Ugc2V0dXAgdGhyb3VnaCBqUXVlcnkuZXZlbnQuYWRkXG5cdGlmICggIWlzU2V0dXAgKSB7XG5cdFx0aWYgKCBkYXRhUHJpdi5nZXQoIGVsLCB0eXBlICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCByZXR1cm5UcnVlICk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlZ2lzdGVyIHRoZSBjb250cm9sbGVyIGFzIGEgc3BlY2lhbCB1bml2ZXJzYWwgaGFuZGxlciBmb3IgYWxsIGV2ZW50IG5hbWVzcGFjZXNcblx0ZGF0YVByaXYuc2V0KCBlbCwgdHlwZSwgZmFsc2UgKTtcblx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHtcblx0XHRuYW1lc3BhY2U6IGZhbHNlLFxuXHRcdGhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXN1bHQsXG5cdFx0XHRcdHNhdmVkID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdGlmICggKCBldmVudC5pc1RyaWdnZXIgJiAxICkgJiYgdGhpc1sgdHlwZSBdICkge1xuXG5cdFx0XHRcdC8vIEludGVycnVwdCBwcm9jZXNzaW5nIG9mIHRoZSBvdXRlciBzeW50aGV0aWMgLnRyaWdnZXIoKWVkIGV2ZW50XG5cdFx0XHRcdGlmICggIXNhdmVkICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHR0aGlzWyB0eXBlIF0oKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGZhbHNlICk7XG5cblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhbmNlbCB0aGUgb3V0ZXIgc3ludGhldGljIGV2ZW50XG5cdFx0XHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nXG5cdFx0XHRcdC8vIHRoZSBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQgKSB7XG5cblx0XHRcdFx0Ly8gLi4uYW5kIGNhcHR1cmUgdGhlIHJlc3VsdFxuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXHRcdFx0XHRcdHNhdmVkWyAwIF0sXG5cdFx0XHRcdFx0c2F2ZWQuc2xpY2UoIDEgKSxcblx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdCkgKTtcblxuXHRcdFx0XHQvLyBBYm9ydCBoYW5kbGluZyBvZiB0aGUgbmF0aXZlIGV2ZW50IGJ5IGFsbCBqUXVlcnkgaGFuZGxlcnMgd2hpbGUgYWxsb3dpbmdcblx0XHRcdFx0Ly8gbmF0aXZlIGhhbmRsZXJzIG9uIHRoZSBzYW1lIGVsZW1lbnQgdG8gcnVuLiBPbiB0YXJnZXQsIHRoaXMgaXMgYWNoaWV2ZWRcblx0XHRcdFx0Ly8gYnkgc3RvcHBpbmcgaW1tZWRpYXRlIHByb3BhZ2F0aW9uIGp1c3Qgb24gdGhlIGpRdWVyeSBldmVudC4gSG93ZXZlcixcblx0XHRcdFx0Ly8gdGhlIG5hdGl2ZSBldmVudCBpcyByZS13cmFwcGVkIGJ5IGEgalF1ZXJ5IG9uZSBvbiBlYWNoIGxldmVsIG9mIHRoZVxuXHRcdFx0XHQvLyBwcm9wYWdhdGlvbiBzbyB0aGUgb25seSB3YXkgdG8gc3RvcCBpdCBmb3IgalF1ZXJ5IGlzIHRvIHN0b3AgaXQgZm9yXG5cdFx0XHRcdC8vIGV2ZXJ5b25lIHZpYSBuYXRpdmUgYHN0b3BQcm9wYWdhdGlvbigpYC4gVGhpcyBpcyBub3QgYSBwcm9ibGVtIGZvclxuXHRcdFx0XHQvLyBmb2N1cy9ibHVyIHdoaWNoIGRvbid0IGJ1YmJsZSwgYnV0IGl0IGRvZXMgYWxzbyBzdG9wIGNsaWNrIG9uIGNoZWNrYm94ZXNcblx0XHRcdFx0Ly8gYW5kIHJhZGlvcy4gV2UgYWNjZXB0IHRoaXMgbGltaXRhdGlvbi5cblx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdGV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblxuXHQvLyBUaGlzIFwiaWZcIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHNcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcblx0fVxufTtcblxualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG5cblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXG5cdGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHlcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdFx0Ly8gQ3JlYXRlIHRhcmdldCBwcm9wZXJ0aWVzXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seVxuXHRcdC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICh0cmFjLTUwNCwgdHJhYy0xMzE0Mylcblx0XHR0aGlzLnRhcmdldCA9ICggc3JjLnRhcmdldCAmJiBzcmMudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgP1xuXHRcdFx0c3JjLnRhcmdldC5wYXJlbnROb2RlIDpcblx0XHRcdHNyYy50YXJnZXQ7XG5cblx0XHR0aGlzLmN1cnJlbnRUYXJnZXQgPSBzcmMuY3VycmVudFRhcmdldDtcblx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBzcmMucmVsYXRlZFRhcmdldDtcblxuXHQvLyBFdmVudCB0eXBlXG5cdH0gZWxzZSB7XG5cdFx0dGhpcy50eXBlID0gc3JjO1xuXHR9XG5cblx0Ly8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3Rcblx0aWYgKCBwcm9wcyApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcblx0dGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuXG5cdC8vIE1hcmsgaXQgYXMgZml4ZWRcblx0dGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7XG59O1xuXG4vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmdcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsXG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc1NpbXVsYXRlZDogZmFsc2UsXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxufTtcblxuLy8gSW5jbHVkZXMgYWxsIGNvbW1vbiBldmVudCBwcm9wcyBpbmNsdWRpbmcgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQgc3BlY2lmaWMgcHJvcHNcbmpRdWVyeS5lYWNoKCB7XG5cdGFsdEtleTogdHJ1ZSxcblx0YnViYmxlczogdHJ1ZSxcblx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0Y2hhbmdlZFRvdWNoZXM6IHRydWUsXG5cdGN0cmxLZXk6IHRydWUsXG5cdGRldGFpbDogdHJ1ZSxcblx0ZXZlbnRQaGFzZTogdHJ1ZSxcblx0bWV0YUtleTogdHJ1ZSxcblx0cGFnZVg6IHRydWUsXG5cdHBhZ2VZOiB0cnVlLFxuXHRzaGlmdEtleTogdHJ1ZSxcblx0dmlldzogdHJ1ZSxcblx0XCJjaGFyXCI6IHRydWUsXG5cdGNvZGU6IHRydWUsXG5cdGNoYXJDb2RlOiB0cnVlLFxuXHRrZXk6IHRydWUsXG5cdGtleUNvZGU6IHRydWUsXG5cdGJ1dHRvbjogdHJ1ZSxcblx0YnV0dG9uczogdHJ1ZSxcblx0Y2xpZW50WDogdHJ1ZSxcblx0Y2xpZW50WTogdHJ1ZSxcblx0b2Zmc2V0WDogdHJ1ZSxcblx0b2Zmc2V0WTogdHJ1ZSxcblx0cG9pbnRlcklkOiB0cnVlLFxuXHRwb2ludGVyVHlwZTogdHJ1ZSxcblx0c2NyZWVuWDogdHJ1ZSxcblx0c2NyZWVuWTogdHJ1ZSxcblx0dGFyZ2V0VG91Y2hlczogdHJ1ZSxcblx0dG9FbGVtZW50OiB0cnVlLFxuXHR0b3VjaGVzOiB0cnVlLFxuXHR3aGljaDogdHJ1ZVxufSwgalF1ZXJ5LmV2ZW50LmFkZFByb3AgKTtcblxualF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIHR5cGUsIGRlbGVnYXRlVHlwZSApIHtcblxuXHRmdW5jdGlvbiBmb2N1c01hcHBlZEhhbmRsZXIoIG5hdGl2ZUV2ZW50ICkge1xuXHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMStcblx0XHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBmb2N1c2luL2ZvY3Vzb3V0IGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHNcblx0XHRcdC8vIGZvY3VzL2JsdXIuIFRoaXMgaXMgYmVjYXVzZSB0aGUgZm9ybWVyIGFyZSBzeW5jaHJvbm91cyBpbiBJRSB3aGlsZSB0aGUgbGF0dGVyXG5cdFx0XHQvLyBhcmUgYXN5bmMuIEluIG90aGVyIGJyb3dzZXJzLCBhbGwgdGhvc2UgaGFuZGxlcnMgYXJlIGludm9rZWQgc3luY2hyb25vdXNseS5cblxuXHRcdFx0Ly8gYGhhbmRsZWAgZnJvbSBwcml2YXRlIGRhdGEgd291bGQgYWxyZWFkeSB3cmFwIHRoZSBldmVudCwgYnV0IHdlIG5lZWRcblx0XHRcdC8vIHRvIGNoYW5nZSB0aGUgYHR5cGVgIGhlcmUuXG5cdFx0XHR2YXIgaGFuZGxlID0gZGF0YVByaXYuZ2V0KCB0aGlzLCBcImhhbmRsZVwiICksXG5cdFx0XHRcdGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKTtcblx0XHRcdGV2ZW50LnR5cGUgPSBuYXRpdmVFdmVudC50eXBlID09PSBcImZvY3VzaW5cIiA/IFwiZm9jdXNcIiA6IFwiYmx1clwiO1xuXHRcdFx0ZXZlbnQuaXNTaW11bGF0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBGaXJzdCwgaGFuZGxlIGZvY3VzaW4vZm9jdXNvdXRcblx0XHRcdGhhbmRsZSggbmF0aXZlRXZlbnQgKTtcblxuXHRcdFx0Ly8gLi4udGhlbiwgaGFuZGxlIGZvY3VzL2JsdXJcblx0XHRcdC8vXG5cdFx0XHQvLyBmb2N1cy9ibHVyIGRvbid0IGJ1YmJsZSB3aGlsZSBmb2N1c2luL2ZvY3Vzb3V0IGRvOyBzaW11bGF0ZSB0aGUgZm9ybWVyIGJ5IG9ubHlcblx0XHRcdC8vIGludm9raW5nIHRoZSBoYW5kbGVyIGF0IHRoZSBsb3dlciBsZXZlbC5cblx0XHRcdGlmICggZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICkge1xuXG5cdFx0XHRcdC8vIFRoZSBzZXR1cCBwYXJ0IGNhbGxzIGBsZXZlcmFnZU5hdGl2ZWAsIHdoaWNoLCBpbiB0dXJuLCBjYWxsc1xuXHRcdFx0XHQvLyBgalF1ZXJ5LmV2ZW50LmFkZGAsIHNvIGV2ZW50IGhhbmRsZSB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHNldFxuXHRcdFx0XHQvLyBieSB0aGlzIHBvaW50LlxuXHRcdFx0XHRoYW5kbGUoIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gRm9yIG5vbi1JRSBicm93c2VycywgYXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudFxuXHRcdFx0Ly8gd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0LlxuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBkZWxlZ2F0ZVR5cGUsIG5hdGl2ZUV2ZW50LnRhcmdldCxcblx0XHRcdFx0alF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKSApO1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gPSB7XG5cblx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3Rcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdHZhciBhdHRhY2hlcztcblxuXHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJmb2N1c1wiLCAuLi4gKVxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImJsdXJcIiwgLi4uIClcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlLCB0cnVlICk7XG5cblx0XHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMStcblx0XHRcdFx0Ly8gV2UgdXNlIHRoZSBzYW1lIG5hdGl2ZSBoYW5kbGVyIGZvciBmb2N1c2luICYgZm9jdXMgKGFuZCBmb2N1c291dCAmIGJsdXIpXG5cdFx0XHRcdC8vIHNvIHdlIG5lZWQgdG8gY29vcmRpbmF0ZSBzZXR1cCAmIHRlYXJkb3duIHBhcnRzIGJldHdlZW4gdGhvc2UgZXZlbnRzLlxuXHRcdFx0XHQvLyBVc2UgYGRlbGVnYXRlVHlwZWAgYXMgdGhlIGtleSBhcyBgdHlwZWAgaXMgYWxyZWFkeSB1c2VkIGJ5IGBsZXZlcmFnZU5hdGl2ZWAuXG5cdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUgKTtcblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKCBkZWxlZ2F0ZVR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgZGVsZWdhdGVUeXBlLCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSApO1xuXG5cdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGF0dGFjaGVzO1xuXG5cdFx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIGRlbGVnYXRlVHlwZSApIC0gMTtcblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCBkZWxlZ2F0ZVR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggdGhpcywgZGVsZWdhdGVUeXBlICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUsIGF0dGFjaGVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGluZGljYXRlIHN0YW5kYXJkIHRlYXJkb3duIHNob3VsZCBiZSBhcHBsaWVkXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gU3VwcHJlc3MgbmF0aXZlIGZvY3VzIG9yIGJsdXIgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZVxuXHRcdC8vIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBldmVudC50YXJnZXQsIHR5cGUgKTtcblx0XHR9LFxuXG5cdFx0ZGVsZWdhdGVUeXBlOiBkZWxlZ2F0ZVR5cGVcblx0fTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcblx0Ly8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50c1xuXHQvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuXHQvL1xuXHQvLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjFcblx0Ly8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG5cdC8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuXHQvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1N1xuXHQvL1xuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdC8vIFRvIHByZXNlcnZlIHJlbGF0aXZlIGZvY3VzaW4vZm9jdXMgJiBmb2N1c291dC9ibHVyIGV2ZW50IG9yZGVyIGd1YXJhbnRlZWQgb24gdGhlIDMueCBicmFuY2gsXG5cdC8vIGF0dGFjaCBhIHNpbmdsZSBoYW5kbGVyIGZvciBib3RoIGV2ZW50cyBpbiBJRS5cblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGRlbGVnYXRlVHlwZSBdID0ge1xuXHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSGFuZGxlOiByZWd1bGFyIG5vZGVzICh2aWEgYHRoaXMub3duZXJEb2N1bWVudGApLCB3aW5kb3dcblx0XHRcdC8vICh2aWEgYHRoaXMuZG9jdW1lbnRgKSAmIGRvY3VtZW50ICh2aWEgYHRoaXNgKS5cblx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRkYXRhSG9sZGVyID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlID8gdGhpcyA6IGRvYyxcblx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5nZXQoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdFx0XHQvLyBXZSB1c2UgdGhlIHNhbWUgbmF0aXZlIGhhbmRsZXIgZm9yIGZvY3VzaW4gJiBmb2N1cyAoYW5kIGZvY3Vzb3V0ICYgYmx1cilcblx0XHRcdC8vIHNvIHdlIG5lZWQgdG8gY29vcmRpbmF0ZSBzZXR1cCAmIHRlYXJkb3duIHBhcnRzIGJldHdlZW4gdGhvc2UgZXZlbnRzLlxuXHRcdFx0Ly8gVXNlIGBkZWxlZ2F0ZVR5cGVgIGFzIHRoZSBrZXkgYXMgYHR5cGVgIGlzIGFscmVhZHkgdXNlZCBieSBgbGV2ZXJhZ2VOYXRpdmVgLlxuXHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXHRcdFx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRhdGFQcml2LnNldCggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlLCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHR9LFxuXHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRkYXRhSG9sZGVyID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlID8gdGhpcyA6IGRvYyxcblx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5nZXQoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSApIC0gMTtcblxuXHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXHRcdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkYXRhSG9sZGVyLCBkZWxlZ2F0ZVR5cGUgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFQcml2LnNldCggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlLCBhdHRhY2hlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn0gKTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxMyBvbmx5XG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCFcXFtDREFUQVxcW3xcXF1cXF0+XFxzKiQvZztcblxuLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0bm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgKSB7XG5cblx0XHRyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oIFwidGJvZHlcIiApWyAwIF0gfHwgZWxlbTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHRpZiAoICggZWxlbS50eXBlIHx8IFwiXCIgKS5zbGljZSggMCwgNSApID09PSBcInRydWUvXCIgKSB7XG5cdFx0ZWxlbS50eXBlID0gZWxlbS50eXBlLnNsaWNlKCA1ICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50cztcblxuXHRpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy5cblx0aWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHRwZGF0YU9sZCA9IGRhdGFQcml2LmdldCggc3JjICk7XG5cdFx0ZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzO1xuXG5cdFx0aWYgKCBldmVudHMgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRlc3QsIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cblx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyAyLiBDb3B5IHVzZXIgZGF0YVxuXHRpZiAoIGRhdGFVc2VyLmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHVkYXRhT2xkID0gZGF0YVVzZXIuYWNjZXNzKCBzcmMgKTtcblx0XHR1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApO1xuXG5cdFx0ZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApO1xuXHR9XG59XG5cbi8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0c1xuZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHtcblx0dmFyIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdC8vIEZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLlxuXHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHtcblx0XHRkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDtcblxuXHQvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9uc1xuXHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XG5cdFx0ZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGRvbU1hbmlwKCBjb2xsZWN0aW9uLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApIHtcblxuXHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdGFyZ3MgPSBmbGF0KCBhcmdzICk7XG5cblx0dmFyIGZyYWdtZW50LCBmaXJzdCwgc2NyaXB0cywgaGFzU2NyaXB0cywgbm9kZSwgZG9jLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBjb2xsZWN0aW9uLmxlbmd0aCxcblx0XHRpTm9DbG9uZSA9IGwgLSAxLFxuXHRcdHZhbHVlID0gYXJnc1sgMCBdLFxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0Ly8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0XG5cdGlmICggdmFsdWVJc0Z1bmN0aW9uIHx8XG5cdFx0XHQoIGwgPiAxICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc3VwcG9ydC5jaGVja0Nsb25lICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7XG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XG5cdFx0XHR9XG5cdFx0XHRkb21NYW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoIGwgKSB7XG5cdFx0ZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTtcblx0XHRmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0ZnJhZ21lbnQgPSBmaXJzdDtcblx0XHR9XG5cblx0XHQvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2tcblx0XHRpZiAoIGZpcnN0IHx8IGlnbm9yZWQgKSB7XG5cdFx0XHRzY3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgXCJzY3JpcHRcIiApLCBkaXNhYmxlU2NyaXB0ICk7XG5cdFx0XHRoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7XG5cblx0XHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW1cblx0XHRcdC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cFxuXHRcdFx0Ly8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKHRyYWMtODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmUtZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICYmICFub2RlLm5vTW9kdWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMsIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxuXHRcdFx0XHRcdFx0XHRcdH0sIGRvYyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVud3JhcCBhIENEQVRBIHNlY3Rpb24gY29udGFpbmluZyBzY3JpcHQgY29udGVudHMuIFRoaXMgc2hvdWxkbid0IGJlXG5cdFx0XHRcdFx0XHRcdC8vIG5lZWRlZCBhcyBpbiBYTUwgZG9jdW1lbnRzIHRoZXkncmUgYWxyZWFkeSBub3QgdmlzaWJsZSB3aGVuXG5cdFx0XHRcdFx0XHRcdC8vIGluc3BlY3RpbmcgZWxlbWVudCBjb250ZW50cyBhbmQgaW4gSFRNTCBkb2N1bWVudHMgdGhleSBoYXZlIG5vXG5cdFx0XHRcdFx0XHRcdC8vIG1lYW5pbmcgYnV0IHdlJ3JlIHByZXNlcnZpbmcgdGhhdCBsb2dpYyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgd2lsbCBiZSByZW1vdmVkIGNvbXBsZXRlbHkgaW4gNC4wLiBTZWUgZ2gtNDkwNC5cblx0XHRcdFx0XHRcdFx0RE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSwgbm9kZSwgZG9jICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xuXHR2YXIgbm9kZSxcblx0XHRub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sXG5cdFx0aSA9IDA7XG5cblx0Zm9yICggOyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICggbm9kZS5wYXJlbnROb2RlICkge1xuXHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBpc0F0dGFjaGVkKCBub2RlICkgKSB7XG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHR9XG5cdFx0XHRub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRyZXR1cm4gaHRtbDtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxuXHRcdFx0aW5QYWdlID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBqUXVlcnkjZmluZCBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOlxuXHRcdFx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7XG5cdH0sXG5cblx0dGV4dDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnRleHQoIHRoaXMgKSA6XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGJlZm9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcblx0XHRcdFx0ZWxlbS50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xuXHRcdGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcblxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxuXHRcdFx0XHQhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7XG5cblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF0gfHwge307XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtID0gMDtcblxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2Rcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvblxuXHRcdH0sIGlnbm9yZWQgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCgge1xuXHRhcHBlbmRUbzogXCJhcHBlbmRcIixcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxuXHRpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGVsZW1zLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xuXHRcdFx0alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgcmN1c3RvbVByb3AgPSAvXi0tLztcblxuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAodHJhYy0xNTA5OCwgdHJhYy0xNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NjRcblx0XHQvLyBEb24ndCBnZXQgdHJpY2tlZCB3aGVuIHpvb20gYWZmZWN0cyBvZmZzZXRXaWR0aCAoZ2gtNDAyOSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2Lm9mZnNldFdpZHRoIC8gMyApID09PSAxMjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKHRyYWMtODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEJlaGF2aW9yIGluIElFIDkgaXMgbW9yZSBzdWJ0bGUgdGhhbiBpbiBuZXdlciB2ZXJzaW9ucyAmIGl0IHBhc3Nlc1xuXHRcdC8vIHNvbWUgdmVyc2lvbnMgb2YgdGhpcyB0ZXN0OyBtYWtlIHN1cmUgbm90IHRvIG1ha2UgaXQgcGFzcyB0aGVyZSFcblx0XHQvL1xuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNzArXG5cdFx0Ly8gT25seSBGaXJlZm94IGluY2x1ZGVzIGJvcmRlciB3aWR0aHNcblx0XHQvLyBpbiBjb21wdXRlZCBkaW1lbnNpb25zLiAoZ2gtNDUyOSlcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGFibGUsIHRyLCB0ckNoaWxkLCB0clN0eWxlO1xuXHRcdFx0aWYgKCByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidGFibGVcIiApO1xuXHRcdFx0XHR0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidHJcIiApO1xuXHRcdFx0XHR0ckNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdFx0XHRcdHRhYmxlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlXCI7XG5cdFx0XHRcdHRyLnN0eWxlLmNzc1RleHQgPSBcImJveC1zaXppbmc6Y29udGVudC1ib3g7Ym9yZGVyOjFweCBzb2xpZFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA4Nitcblx0XHRcdFx0Ly8gSGVpZ2h0IHNldCB0aHJvdWdoIGNzc1RleHQgZG9lcyBub3QgZ2V0IGFwcGxpZWQuXG5cdFx0XHRcdC8vIENvbXB1dGVkIGhlaWdodCB0aGVuIGNvbWVzIGJhY2sgYXMgMC5cblx0XHRcdFx0dHIuc3R5bGUuaGVpZ2h0ID0gXCIxcHhcIjtcblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5oZWlnaHQgPSBcIjlweFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgOCBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEluIG91ciBib2R5QmFja2dyb3VuZC5odG1sIGlmcmFtZSxcblx0XHRcdFx0Ly8gZGlzcGxheSBmb3IgYWxsIGRpdiBlbGVtZW50cyBpcyBzZXQgdG8gXCJpbmxpbmVcIixcblx0XHRcdFx0Ly8gd2hpY2ggY2F1c2VzIGEgcHJvYmxlbSBvbmx5IGluIEFuZHJvaWQgOCBDaHJvbWUgODYuXG5cdFx0XHRcdC8vIEVuc3VyaW5nIHRoZSBkaXYgaXMgYGRpc3BsYXk6IGJsb2NrYFxuXHRcdFx0XHQvLyBnZXRzIGFyb3VuZCB0aGlzIGlzc3VlLlxuXHRcdFx0XHR0ckNoaWxkLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0XHRcdFx0ZG9jdW1lbnRFbGVtZW50XG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0YWJsZSApXG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0ciApXG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0ckNoaWxkICk7XG5cblx0XHRcdFx0dHJTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCB0ciApO1xuXHRcdFx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9ICggcGFyc2VJbnQoIHRyU3R5bGUuaGVpZ2h0LCAxMCApICtcblx0XHRcdFx0XHRwYXJzZUludCggdHJTdHlsZS5ib3JkZXJUb3BXaWR0aCwgMTAgKSArXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRyU3R5bGUuYm9yZGVyQm90dG9tV2lkdGgsIDEwICkgKSA9PT0gdHIub2Zmc2V0SGVpZ2h0O1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggdGFibGUgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbDtcblx0XHR9XG5cdH0gKTtcbn0gKSgpO1xuXG5cbmZ1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7XG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXG5cdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksIHRyYWMtMTI1MzcpXG5cdC8vICAgLmNzcygnLS1jdXN0b21Qcm9wZXJ0eSkgKGdoLTMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHQvLyBJRSBvbmx5IHN1cHBvcnRzIGBcImZsb2F0XCJgIGluIGBnZXRQcm9wZXJ0eVZhbHVlYDsgaW4gY29tcHV0ZWQgc3R5bGVzXG5cdFx0Ly8gaXQncyBvbmx5IGF2YWlsYWJsZSBhcyBgXCJjc3NGbG9hdFwiYC4gV2Ugbm8gbG9uZ2VyIG1vZGlmeSBwcm9wZXJ0aWVzXG5cdFx0Ly8gc2VudCB0byBgLmNzcygpYCBhcGFydCBmcm9tIGNhbWVsQ2FzaW5nLCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGJvdGguXG5cdFx0Ly8gTm9ybWFsbHksIHRoaXMgd291bGQgY3JlYXRlIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3I6IGlmXG5cdFx0Ly8gYGdldFByb3BlcnR5VmFsdWVgIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLCB0aGUgdmFsdWUgcmV0dXJuZWRcblx0XHQvLyBieSBgLmNzcygpYCB3b3VsZCBiZSBgdW5kZWZpbmVkYC4gVGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGZvclxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBlbGVtZW50cy4gSG93ZXZlciwgaW4gSUUgZXZlbiBkaXNjb25uZWN0ZWQgZWxlbWVudHNcblx0XHQvLyB3aXRoIG5vIHN0eWxlcyByZXR1cm4gYFwibm9uZVwiYCBmb3IgYGdldFByb3BlcnR5VmFsdWUoIFwiZmxvYXRcIiApYFxuXHRcdHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdO1xuXG5cdFx0aWYgKCBpc0N1c3RvbVByb3AgJiYgcmV0ICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDEwNSssIENocm9tZSA8PTEwNStcblx0XHRcdC8vIFNwZWMgcmVxdWlyZXMgdHJpbW1pbmcgd2hpdGVzcGFjZSBmb3IgY3VzdG9tIHByb3BlcnRpZXMgKGdoLTQ5MjYpLlxuXHRcdFx0Ly8gRmlyZWZveCBvbmx5IHRyaW1zIGxlYWRpbmcgd2hpdGVzcGFjZS4gQ2hyb21lIGp1c3QgY29sbGFwc2VzXG5cdFx0XHQvLyBib3RoIGxlYWRpbmcgJiB0cmFpbGluZyB3aGl0ZXNwYWNlIHRvIGEgc2luZ2xlIHNwYWNlLlxuXHRcdFx0Ly9cblx0XHRcdC8vIEZhbGwgYmFjayB0byBgdW5kZWZpbmVkYCBpZiBlbXB0eSBzdHJpbmcgcmV0dXJuZWQuXG5cdFx0XHQvLyBUaGlzIGNvbGxhcHNlcyBhIG1pc3NpbmcgZGVmaW5pdGlvbiB3aXRoIHByb3BlcnR5IGRlZmluZWRcblx0XHRcdC8vIGFuZCBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGJ1dCB0aGVyZSdzIG5vIHN0YW5kYXJkIEFQSVxuXHRcdFx0Ly8gYWxsb3dpbmcgdXMgdG8gZGlmZmVyZW50aWF0ZSB0aGVtIHdpdGhvdXQgYSBwZXJmb3JtYW5jZSBwZW5hbHR5XG5cdFx0XHQvLyBhbmQgcmV0dXJuaW5nIGB1bmRlZmluZWRgIGFsaWducyB3aXRoIG9sZGVyIGpRdWVyeS5cblx0XHRcdC8vXG5cdFx0XHQvLyBydHJpbUNTUyB0cmVhdHMgVSswMDBEIENBUlJJQUdFIFJFVFVSTiBhbmQgVSswMDBDIEZPUk0gRkVFRFxuXHRcdFx0Ly8gYXMgd2hpdGVzcGFjZSB3aGlsZSBDU1MgZG9lcyBub3QsIGJ1dCB0aGlzIGlzIG5vdCBhIHByb2JsZW1cblx0XHRcdC8vIGJlY2F1c2UgQ1NTIHByZXByb2Nlc3NpbmcgcmVwbGFjZXMgdGhlbSB3aXRoIFUrMDAwQSBMSU5FIEZFRURcblx0XHRcdC8vICh3aGljaCAqaXMqIENTUyB3aGl0ZXNwYWNlKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jaW5wdXQtcHJlcHJvY2Vzc2luZ1xuXHRcdFx0cmV0ID0gcmV0LnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKSB8fCB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKCByZXQgPT09IFwiXCIgJiYgIWlzQXR0YWNoZWQoIGVsZW0gKSApIHtcblx0XHRcdHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEEgdHJpYnV0ZSB0byB0aGUgXCJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzXCJcblx0XHQvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcyxcblx0XHQvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLlxuXHRcdC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzpcblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlc1xuXHRcdGlmICggIXN1cHBvcnQucGl4ZWxCb3hTdHlsZXMoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcmJveFN0eWxlLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcblx0XHRcdG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7XG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xuXG5cdFx0XHQvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcblxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7XG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cblx0XHRyZXQgKyBcIlwiIDpcblx0XHRyZXQ7XG59XG5cblxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xuXG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcblxuXHRcdFx0XHQvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWVcblx0XHRcdFx0Ly8gdG8gbWlzc2luZyBkZXBlbmRlbmN5KSwgcmVtb3ZlIGl0LlxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uXG5cdFx0XHRyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH07XG59XG5cblxudmFyIGNzc1ByZWZpeGVzID0gWyBcIldlYmtpdFwiLCBcIk1velwiLCBcIm1zXCIgXSxcblx0ZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKS5zdHlsZSxcblx0dmVuZG9yUHJvcHMgPSB7fTtcblxuLy8gUmV0dXJuIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5IG9yIHVuZGVmaW5lZFxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7XG5cblx0Ly8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lc1xuXHR2YXIgY2FwTmFtZSA9IG5hbWVbIDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLFxuXHRcdGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0bmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lO1xuXHRcdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFJldHVybiBhIHBvdGVudGlhbGx5LW1hcHBlZCBqUXVlcnkuY3NzUHJvcHMgb3IgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5XG5mdW5jdGlvbiBmaW5hbFByb3BOYW1lKCBuYW1lICkge1xuXHR2YXIgZmluYWwgPSBqUXVlcnkuY3NzUHJvcHNbIG5hbWUgXSB8fCB2ZW5kb3JQcm9wc1sgbmFtZSBdO1xuXG5cdGlmICggZmluYWwgKSB7XG5cdFx0cmV0dXJuIGZpbmFsO1xuXHR9XG5cdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdHJldHVybiBuYW1lO1xuXHR9XG5cdHJldHVybiB2ZW5kb3JQcm9wc1sgbmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB8fCBuYW1lO1xufVxuXG5cbnZhclxuXG5cdC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGVcblx0Ly8gZXhjZXB0IFwidGFibGVcIiwgXCJ0YWJsZS1jZWxsXCIsIG9yIFwidGFibGUtY2FwdGlvblwiXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxuXHRyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sXG5cdGNzc1Nob3cgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiB9LFxuXHRjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7XG5cdFx0bGV0dGVyU3BhY2luZzogXCIwXCIsXG5cdFx0Zm9udFdlaWdodDogXCI0MDBcIlxuXHR9O1xuXG5mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggX2VsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHtcblxuXHQvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuXG5cdC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludFxuXHR2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTtcblx0cmV0dXJuIG1hdGNoZXMgP1xuXG5cdFx0Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgXCJzdWJ0cmFjdFwiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3Ncblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApIDpcblx0XHR2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYm94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIGJveCwgaXNCb3JkZXJCb3gsIHN0eWxlcywgY29tcHV0ZWRWYWwgKSB7XG5cdHZhciBpID0gZGltZW5zaW9uID09PSBcIndpZHRoXCIgPyAxIDogMCxcblx0XHRleHRyYSA9IDAsXG5cdFx0ZGVsdGEgPSAwLFxuXHRcdG1hcmdpbkRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHQvLyBDb3VudCBtYXJnaW4gZGVsdGEgc2VwYXJhdGVseSB0byBvbmx5IGFkZCBpdCBhZnRlciBzY3JvbGwgZ3V0dGVyIGFkanVzdG1lbnQuXG5cdFx0Ly8gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBuZWdhdGl2ZSBtYXJnaW5zIHdvcmsgd2l0aCBgb3V0ZXJIZWlnaHQoIHRydWUgKWAgKGdoLTM5ODIpLlxuXHRcdGlmICggYm94ID09PSBcIm1hcmdpblwiICkge1xuXHRcdFx0bWFyZ2luRGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgYm94ICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBjb250ZW50LWJveCwgd2UncmUgc2Vla2luZyBcInBhZGRpbmdcIiBvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCJcblx0XHRpZiAoICFpc0JvcmRlckJveCApIHtcblxuXHRcdFx0Ly8gQWRkIHBhZGRpbmdcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBGb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiLCBhZGQgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJwYWRkaW5nXCIgKSB7XG5cdFx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEJ1dCBzdGlsbCBrZWVwIHRyYWNrIG9mIGl0IG90aGVyd2lzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXh0cmEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBib3JkZXItYm94IChjb250ZW50ICsgcGFkZGluZyArIGJvcmRlciksIHdlJ3JlIHNlZWtpbmcgXCJjb250ZW50XCIgb3Jcblx0XHQvLyBcInBhZGRpbmdcIiBvciBcIm1hcmdpblwiXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiLCBzdWJ0cmFjdCBwYWRkaW5nXG5cdFx0XHRpZiAoIGJveCA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIgb3IgXCJwYWRkaW5nXCIsIHN1YnRyYWN0IGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWNjb3VudCBmb3IgcG9zaXRpdmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlciB3aGVuIHJlcXVlc3RlZCBieSBwcm92aWRpbmcgY29tcHV0ZWRWYWxcblx0aWYgKCAhaXNCb3JkZXJCb3ggJiYgY29tcHV0ZWRWYWwgPj0gMCApIHtcblxuXHRcdC8vIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyBhIHJvdW5kZWQgc3VtIG9mIGNvbnRlbnQsIHBhZGRpbmcsIHNjcm9sbCBndXR0ZXIsIGFuZCBib3JkZXJcblx0XHQvLyBBc3N1bWluZyBpbnRlZ2VyIHNjcm9sbCBndXR0ZXIsIHN1YnRyYWN0IHRoZSByZXN0IGFuZCByb3VuZCBkb3duXG5cdFx0ZGVsdGEgKz0gTWF0aC5tYXgoIDAsIE1hdGguY2VpbChcblx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRjb21wdXRlZFZhbCAtXG5cdFx0XHRkZWx0YSAtXG5cdFx0XHRleHRyYSAtXG5cdFx0XHQwLjVcblxuXHRcdC8vIElmIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyB1bmtub3duLCB0aGVuIHdlIGNhbid0IGRldGVybWluZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyXG5cdFx0Ly8gVXNlIGFuIGV4cGxpY2l0IHplcm8gdG8gYXZvaWQgTmFOIChnaC0zOTY0KVxuXHRcdCkgKSB8fCAwO1xuXHR9XG5cblx0cmV0dXJuIGRlbHRhICsgbWFyZ2luRGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC00MzIyKS5cblx0XHQvLyBGYWtlIGNvbnRlbnQtYm94IHVudGlsIHdlIGtub3cgaXQncyBuZWVkZWQgdG8ga25vdyB0aGUgdHJ1ZSB2YWx1ZS5cblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxuXHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcblxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdGlmICggIWV4dHJhICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0dmFsID0gXCJhdXRvXCI7XG5cdH1cblxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIFVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3guXG5cdGlmICggKCAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpICYmIGlzQm9yZGVyQm94IHx8XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMCAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgaW4gc29tZSBjYXNlcyBJRSA5IGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBpc3N1ZS5cblx0XHQhc3VwcG9ydC5yZWxpYWJsZVRyRGltZW5zaW9ucygpICYmIG5vZGVOYW1lKCBlbGVtLCBcInRyXCIgKSB8fFxuXG5cdFx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdFx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHRcdHZhbCA9PT0gXCJhdXRvXCIgfHxcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgLSA0LjMgb25seVxuXHRcdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHZpc2libGUgJiBjb25uZWN0ZWRcblx0XHRlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxuXHRcdC8vIFdoZXJlIG5vdCBhdmFpbGFibGUgKGUuZy4sIFNWRyksIGFzc3VtZSB1bnJlbGlhYmxlIGJveC1zaXppbmcgYW5kIGludGVycHJldCB0aGVcblx0XHQvLyByZXRyaWV2ZWQgdmFsdWUgYXMgYSBjb250ZW50IGJveCBkaW1lbnNpb24uXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcblx0XHRpZiAoIHZhbHVlSXNCb3JkZXJCb3ggKSB7XG5cdFx0XHR2YWwgPSBlbGVtWyBvZmZzZXRQcm9wIF07XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiB0cnVlLFxuXHRcdGFzcGVjdFJhdGlvOiB0cnVlLFxuXHRcdGJvcmRlckltYWdlU2xpY2U6IHRydWUsXG5cdFx0Y29sdW1uQ291bnQ6IHRydWUsXG5cdFx0ZmxleEdyb3c6IHRydWUsXG5cdFx0ZmxleFNocmluazogdHJ1ZSxcblx0XHRmb250V2VpZ2h0OiB0cnVlLFxuXHRcdGdyaWRBcmVhOiB0cnVlLFxuXHRcdGdyaWRDb2x1bW46IHRydWUsXG5cdFx0Z3JpZENvbHVtbkVuZDogdHJ1ZSxcblx0XHRncmlkQ29sdW1uU3RhcnQ6IHRydWUsXG5cdFx0Z3JpZFJvdzogdHJ1ZSxcblx0XHRncmlkUm93RW5kOiB0cnVlLFxuXHRcdGdyaWRSb3dTdGFydDogdHJ1ZSxcblx0XHRsaW5lSGVpZ2h0OiB0cnVlLFxuXHRcdG9wYWNpdHk6IHRydWUsXG5cdFx0b3JkZXI6IHRydWUsXG5cdFx0b3JwaGFuczogdHJ1ZSxcblx0XHRzY2FsZTogdHJ1ZSxcblx0XHR3aWRvd3M6IHRydWUsXG5cdFx0ekluZGV4OiB0cnVlLFxuXHRcdHpvb206IHRydWUsXG5cblx0XHQvLyBTVkctcmVsYXRlZFxuXHRcdGZpbGxPcGFjaXR5OiB0cnVlLFxuXHRcdGZsb29kT3BhY2l0eTogdHJ1ZSxcblx0XHRzdG9wT3BhY2l0eTogdHJ1ZSxcblx0XHRzdHJva2VNaXRlcmxpbWl0OiB0cnVlLFxuXHRcdHN0cm9rZU9wYWNpdHk6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHt9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKHRyYWMtNzM0NSlcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkge1xuXHRcdFx0XHR2YWx1ZSA9IGFkanVzdENTUyggZWxlbSwgbmFtZSwgcmV0ICk7XG5cblx0XHRcdFx0Ly8gRml4ZXMgYnVnIHRyYWMtOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICh0cmFjLTcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxuXHRcdFx0Ly8gXCJweFwiIHRvIGEgZmV3IGhhcmRjb2RlZCB2YWx1ZXMuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggX2ksIGRpbWVuc2lvbiApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gfHxcblx0XHRcdFx0XHR0d2Vlbi5lbGVtLnN0eWxlWyBmaW5hbFByb3BOYW1lKCB0d2Vlbi5wcm9wICkgXSAhPSBudWxsICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIGNvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbmZ1bmN0aW9uIHNjaGVkdWxlKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XG5cdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdGpRdWVyeS5meC50aWNrKCk7XG5cdH1cbn1cblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzXG5cdFx0Ly8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS5cblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAodHJhYy0xMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSdzIG1vcmUgdG8gZG8sIHlpZWxkXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gZW1wdHkgYW5pbWF0aW9uLCBzeW50aGVzaXplIGEgZmluYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uXG5cdFx0XHRpZiAoICFsZW5ndGggKSB7XG5cdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVzb2x2ZSB0aGUgYW5pbWF0aW9uIGFuZCByZXBvcnQgaXRzIGNvbmNsdXNpb25cblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0cmVzdWx0LnN0b3AuYmluZCggcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0gRGF0ZS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblxuXHRcdC8vIFJ1biB0aGUgdGltZXIgYW5kIHNhZmVseSByZW1vdmUgaXQgd2hlbiBkb25lIChhbGxvd2luZyBmb3IgZXh0ZXJuYWwgcmVtb3ZhbClcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRqUXVlcnkuZnguc3RhcnQoKTtcbn07XG5cbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpblByb2dyZXNzID0gdHJ1ZTtcblx0c2NoZWR1bGUoKTtcbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdGluUHJvZ3Jlc3MgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cblx0Ly8gRGVmYXVsdCBzcGVlZFxuXHRfZGVmYXVsdDogNDAwXG59O1xuXG5cbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCAodHJhYy0xMjA3Milcblx0XHRcdFx0dmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ0YWJpbmRleFwiICk7XG5cblx0XHRcdFx0aWYgKCB0YWJpbmRleCApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8XG5cdFx0XHRcdFx0cmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiZcblx0XHRcdFx0XHRlbGVtLmhyZWZcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHByb3BGaXg6IHtcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcblx0XHRcImNsYXNzXCI6IFwiY2xhc3NOYW1lXCJcblx0fVxufSApO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcbi8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZFxuLy8gb24gdGhlIG9wdGlvblxuLy8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWRcbi8vIHdoZW4gaW4gYW4gb3B0Z3JvdXBcbi8vIGVzbGludCBydWxlIFwibm8tdW51c2VkLWV4cHJlc3Npb25zXCIgaXMgZGlzYWJsZWQgZm9yIHRoaXMgY29kZVxuLy8gc2luY2UgaXQgY29uc2lkZXJzIHN1Y2ggYWNjZXNzaW9ucyBub29wXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0cGFyZW50LnNlbGVjdGVkSW5kZXg7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5qUXVlcnkuZWFjaCggW1xuXHRcInRhYkluZGV4XCIsXG5cdFwicmVhZE9ubHlcIixcblx0XCJtYXhMZW5ndGhcIixcblx0XCJjZWxsU3BhY2luZ1wiLFxuXHRcImNlbGxQYWRkaW5nXCIsXG5cdFwicm93U3BhblwiLFxuXHRcImNvbFNwYW5cIixcblx0XCJ1c2VNYXBcIixcblx0XCJmcmFtZUJvcmRlclwiLFxuXHRcImNvbnRlbnRFZGl0YWJsZVwiXG5dLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpcztcbn0gKTtcblxuXG5cblxuXHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjXG5cdC8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2UtYXNjaWktd2hpdGVzcGFjZVxuXHRmdW5jdGlvbiBzdHJpcEFuZENvbGxhcHNlKCB2YWx1ZSApIHtcblx0XHR2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0XHRyZXR1cm4gdG9rZW5zLmpvaW4oIFwiIFwiICk7XG5cdH1cblxuXG5mdW5jdGlvbiBnZXRDbGFzcyggZWxlbSApIHtcblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fCBcIlwiO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VzVG9BcnJheSggdmFsdWUgKSB7XG5cdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGN1ciwgY3VyVmFsdWUsIGNsYXNzTmFtZSwgaSwgZmluYWxWYWx1ZTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc05hbWVzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGN1ciA9IHRoaXMubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblx0XHRcdFx0XHRcdGlmICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGFzc05hbWUgKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGN1ciwgY3VyVmFsdWUsIGNsYXNzTmFtZSwgaSwgZmluYWxWYWx1ZTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3NOYW1lcy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXG5cdFx0XHRcdC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpXG5cdFx0XHRcdGN1ciA9IHRoaXMubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIiApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciA9IGN1ci5yZXBsYWNlKCBcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGNsYXNzTmFtZSwgaSwgc2VsZixcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoXG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggdGhpcywgaSwgZ2V0Q2xhc3MoIHRoaXMgKSwgc3RhdGVWYWwgKSxcblx0XHRcdFx0XHRzdGF0ZVZhbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIiAmJiBpc1ZhbGlkVmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHtcblx0XHRcdFx0XHRcdHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWVcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRcdGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGlmICggY2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldFxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIsIGNsYXNzTmFtZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCxcblx0XHRcdFx0Ly8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcblx0XHRcdFx0Ly8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxuXHRcdFx0XHRpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID9cblx0XHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKHRyYWMtMTQ2ODYsIHRyYWMtMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICh0cmFjLTI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0geyBndWlkOiBEYXRlLm5vdygpIH07XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbCwgcGFyc2VyRXJyb3JFbGVtO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdHBhcnNlckVycm9yRWxlbSA9IHhtbCAmJiB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApWyAwIF07XG5cdGlmICggIXhtbCB8fCBwYXJzZXJFcnJvckVsZW0gKSB7XG5cdFx0alF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIChcblx0XHRcdHBhcnNlckVycm9yRWxlbSA/XG5cdFx0XHRcdGpRdWVyeS5tYXAoIHBhcnNlckVycm9yRWxlbS5jaGlsZE5vZGVzLCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsLnRleHRDb250ZW50O1xuXHRcdFx0XHR9ICkuam9pbiggXCJcXG5cIiApIDpcblx0XHRcdFx0ZGF0YVxuXHRcdCkgKTtcblx0fVxuXHRyZXR1cm4geG1sO1xufTtcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAodHJhYy05OTUxKVxuXHRcdC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAodHJhYy05NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsICkgKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICh0cmFjLTYxNzApXG5cdFx0XHRcdGlmICggb250eXBlICYmIGlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZFxuXHRcdFx0XHRcdHRtcCA9IGVsZW1bIG9udHlwZSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmVcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbVsgdHlwZSBdKCk7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gdG1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XG5cdH1cblxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuXHRcdH0gKTtcblx0fSxcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbnZhclxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIGFycmF5IGl0ZW0uXG5cdFx0alF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7XG5cdFx0XHRpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkge1xuXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC5cblx0XHRcdFx0YnVpbGRQYXJhbXMoXG5cdFx0XHRcdFx0cHJlZml4ICsgXCJbXCIgKyAoIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCA/IGkgOiBcIlwiICkgKyBcIl1cIixcblx0XHRcdFx0XHR2LFxuXHRcdFx0XHRcdHRyYWRpdGlvbmFsLFxuXHRcdFx0XHRcdGFkZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgdG9UeXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XG5cdH1cbn1cblxuLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2Zcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xuXHR2YXIgcHJlZml4LFxuXHRcdHMgPSBbXSxcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZU9yRnVuY3Rpb24gKSB7XG5cblx0XHRcdC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgdXNlIGl0cyByZXR1cm4gdmFsdWVcblx0XHRcdHZhciB2YWx1ZSA9IGlzRnVuY3Rpb24oIHZhbHVlT3JGdW5jdGlvbiApID9cblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uKCkgOlxuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb247XG5cblx0XHRcdHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgXCI9XCIgK1xuXHRcdFx0XHRlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcblx0XHR9O1xuXG5cdGlmICggYSA9PSBudWxsICkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0Ly8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzXG5cdFx0alF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkge1xuXHRcdFx0YWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTtcblx0XHR9ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlIFwib2xkXCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyXG5cdFx0Ly8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuXG5cdFx0Zm9yICggcHJlZml4IGluIGEgKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb25cblx0cmV0dXJuIHMuam9pbiggXCImXCIgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2VyaWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTtcblx0fSxcblx0c2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENhbiBhZGQgcHJvcEhvb2sgZm9yIFwiZWxlbWVudHNcIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHNcblx0XHRcdHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCBcImVsZW1lbnRzXCIgKTtcblx0XHRcdHJldHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzO1xuXHRcdH0gKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRcdC8vIFVzZSAuaXMoIFwiOmRpc2FibGVkXCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3Jrc1xuXHRcdFx0cmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoIFwiOmRpc2FibGVkXCIgKSAmJlxuXHRcdFx0XHRyc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYmXG5cdFx0XHRcdCggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTtcblx0XHR9ICkubWFwKCBmdW5jdGlvbiggX2ksIGVsZW0gKSB7XG5cdFx0XHR2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XG5cblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHR9ICkuZ2V0KCk7XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cjIwID0gLyUyMC9nLFxuXHRyaGFzaCA9IC8jLiokLyxcblx0cmFudGlDYWNoZSA9IC8oWz8mXSlfPVteJl0qLyxcblx0cmhlYWRlcnMgPSAvXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL21nLFxuXG5cdC8vIHRyYWMtNzY1MywgdHJhYy04MTI1LCB0cmFjLTgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvblxuXHRybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcblx0cnByb3RvY29sID0gL15cXC9cXC8vLFxuXG5cdC8qIFByZWZpbHRlcnNcblx0ICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSlcblx0ICogMikgVGhlc2UgYXJlIGNhbGxlZDpcblx0ICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydFxuXHQgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpXG5cdCAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0cHJlZmlsdGVycyA9IHt9LFxuXG5cdC8qIFRyYW5zcG9ydHMgYmluZGluZ3Ncblx0ICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0dHJhbnNwb3J0cyA9IHt9LFxuXG5cdC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKHRyYWMtMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5vcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgdHJhYy05ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IEpTT04ucGFyc2UsXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0cnVlIHVwb24gY29tcGxldGlvbilcblx0XHRcdGNvbXBsZXRlZCxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsXG5cdFx0XHR1bmNhY2hlZCxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOlxuXHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSA9XG5cdFx0XHRcdFx0XHRcdFx0XHQoIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSB8fCBbXSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5jb25jYXQoIG1hdGNoWyAyIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2guam9pbiggXCIsIFwiICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID1cblx0XHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTtcblxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAodHJhYy0xMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxuXHRcdC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZVxuXHRcdHMudXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBsb2NhdGlvbi5ocmVmICkgKyBcIlwiIClcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XG5cblx0XHQvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCB0cmFjLTEyMDA0XG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcblxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3Rcblx0XHRzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBvbiBhY2Nlc3NpbmcgdGhlIGhyZWYgcHJvcGVydHkgaWYgdXJsIGlzIG1hbGZvcm1lZCxcblx0XHRcdC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gcy51cmw7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seVxuXHRcdFx0XHQvLyBBbmNob3IncyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2ZVxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09XG5cdFx0XHRcdFx0dXJsQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgdXJsQW5jaG9yLmhvc3Q7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbixcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAodHJhYy0xNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxuXHRcdGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcblx0XHRcdHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApO1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiApICkge1xuXHRcdFx0XHRjYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhO1xuXG5cdFx0XHRcdC8vIHRyYWMtOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBvciB1cGRhdGUgYW50aS1jYWNoZSBwYXJhbSBpZiBuZWVkZWRcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdGNhY2hlVVJMID0gY2FjaGVVUkwucmVwbGFjZSggcmFudGlDYWNoZSwgXCIkMVwiICk7XG5cdFx0XHRcdHVuY2FjaGVkID0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArICggbm9uY2UuZ3VpZCsrICkgK1xuXHRcdFx0XHRcdHVuY2FjaGVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpXG5cdFx0XHRzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7XG5cblx0XHQvLyBDaGFuZ2UgJyUyMCcgdG8gJysnIGlmIHRoaXMgaXMgZW5jb2RlZCBmb3JtIGJvZHkgY29udGVudCAoZ2gtMjY1OClcblx0XHR9IGVsc2UgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJlxuXHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKS5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgKSB7XG5cdFx0XHRzLmRhdGEgPSBzLmRhdGEucmVwbGFjZSggcjIwLCBcIitcIiApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSA/XG5cdFx0XHRcdHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICtcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJlxuXHRcdFx0KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBjb21wbGV0ZWQgKSApIHtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xuXHRcdGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBsZXRlICk7XG5cdFx0anFYSFIuZG9uZSggcy5zdWNjZXNzICk7XG5cdFx0anFYSFIuZmFpbCggcy5lcnJvciApO1xuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0anFYSFIuYWJvcnQoIFwidGltZW91dFwiICk7XG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb21wbGV0ZWQgPSBmYWxzZTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgb3RoZXJzIGFzIHJlc3VsdHNcblx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xuXG5cdFx0XHQvLyBJZ25vcmUgcmVwZWF0IGludm9jYXRpb25zXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb21wbGV0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvblxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xuXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBVc2UgYSBub29wIGNvbnZlcnRlciBmb3IgbWlzc2luZyBzY3JpcHQgYnV0IG5vdCBpZiBqc29ucFxuXHRcdFx0aWYgKCAhaXNTdWNjZXNzICYmXG5cdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBcInNjcmlwdFwiLCBzLmRhdGFUeXBlcyApID4gLTEgJiZcblx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIFwianNvblwiLCBzLmRhdGFUeXBlcyApIDwgMCApIHtcblx0XHRcdFx0cy5jb252ZXJ0ZXJzWyBcInRleHQgc2NyaXB0XCIgXSA9IGZ1bmN0aW9uKCkge307XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldClcblx0XHRcdHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7XG5cblx0XHRcdC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdFx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkxhc3QtTW9kaWZpZWRcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiZXRhZ1wiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgbm8gY29udGVudFxuXHRcdFx0XHRpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gXCJIRUFEXCIgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm9jb250ZW50XCI7XG5cblx0XHRcdFx0Ly8gaWYgbm90IG1vZGlmaWVkXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vdG1vZGlmaWVkXCI7XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlO1xuXHRcdFx0XHRcdHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdGVycm9yID0gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0aXNTdWNjZXNzID0gIWVycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHNcblx0XHRcdFx0ZXJyb3IgPSBzdGF0dXNUZXh0O1xuXHRcdFx0XHRpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJlcnJvclwiO1xuXHRcdFx0XHRcdGlmICggc3RhdHVzIDwgMCApIHtcblx0XHRcdFx0XHRcdHN0YXR1cyA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0XG5cdFx0XHRqcVhIUi5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0XHRqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArIFwiXCI7XG5cblx0XHRcdC8vIFN1Y2Nlc3MvRXJyb3Jcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApO1xuXHRcdFx0c3RhdHVzQ29kZSA9IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/IFwiYWpheFN1Y2Nlc3NcIiA6IFwiYWpheEVycm9yXCIsXG5cdFx0XHRcdFx0WyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29tcGxldGVcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhDb21wbGV0ZVwiLCBbIGpxWEhSLCBzIF0gKTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcblx0XHRcdFx0aWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RvcFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ganFYSFI7XG5cdH0sXG5cblx0Z2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssIFwianNvblwiICk7XG5cdH0sXG5cblx0Z2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCBcInNjcmlwdFwiICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJnZXRcIiwgXCJwb3N0XCIgXSwgZnVuY3Rpb24oIF9pLCBtZXRob2QgKSB7XG5cdGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHtcblxuXHRcdC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBkYXRhICkgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcblx0XHRcdGNhbGxiYWNrID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpXG5cdFx0cmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXG5cdFx0fSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0dmFyIGk7XG5cdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdGlmICggaS50b0xvd2VyQ2FzZSgpID09PSBcImNvbnRlbnQtdHlwZVwiICkge1xuXHRcdFx0cy5jb250ZW50VHlwZSA9IHMuaGVhZGVyc1sgaSBdIHx8IFwiXCI7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCwgb3B0aW9ucywgZG9jICkge1xuXHRyZXR1cm4galF1ZXJ5LmFqYXgoIHtcblx0XHR1cmw6IHVybCxcblxuXHRcdC8vIE1ha2UgdGhpcyBleHBsaWNpdCwgc2luY2UgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcyB0aHJvdWdoIGFqYXhTZXR1cCAodHJhYy0xMTI2NClcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxuXHRcdGNhY2hlOiB0cnVlLFxuXHRcdGFzeW5jOiBmYWxzZSxcblx0XHRnbG9iYWw6IGZhbHNlLFxuXG5cdFx0Ly8gT25seSBldmFsdWF0ZSB0aGUgcmVzcG9uc2UgaWYgaXQgaXMgc3VjY2Vzc2Z1bCAoZ2gtNDEyNilcblx0XHQvLyBkYXRhRmlsdGVyIGlzIG5vdCBpbnZva2VkIGZvciBmYWlsdXJlIHJlc3BvbnNlcywgc28gdXNpbmcgaXQgaW5zdGVhZFxuXHRcdC8vIG9mIHRoZSBkZWZhdWx0IGNvbnZlcnRlciBpcyBrbHVkZ3kgYnV0IGl0IHdvcmtzLlxuXHRcdGNvbnZlcnRlcnM6IHtcblx0XHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oKSB7fVxuXHRcdH0sXG5cdFx0ZGF0YUZpbHRlcjogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHJlc3BvbnNlLCBvcHRpb25zLCBkb2MgKTtcblx0XHR9XG5cdH0gKTtcbn07XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgd3JhcDtcblxuXHRcdGlmICggdGhpc1sgMCBdICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRcdGh0bWwgPSBodG1sLmNhbGwoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZFxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XG5cblx0XHRcdGlmICggdGhpc1sgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcC5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IHRoaXM7XG5cblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xuXHRcdFx0XHRcdGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsZW07XG5cdFx0XHR9ICkuYXBwZW5kKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLFxuXHRcdFx0XHRjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTtcblxuXHRcdFx0aWYgKCBjb250ZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5hcHBlbmQoIGh0bWwgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIGh0bWxJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggaHRtbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sSXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApO1xuXHRcdH0gKTtcblx0fSxcblxuXHR1bndyYXA6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR0aGlzLnBhcmVudCggc2VsZWN0b3IgKS5ub3QoIFwiYm9keVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICFqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUoIGVsZW0gKTtcbn07XG5qUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICEhKCBlbGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKTtcbn07XG5cblxuXG5cbmpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxufTtcblxudmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7XG5cblx0XHQvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxuXHRcdDA6IDIwMCxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0Ly8gdHJhYy0xNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxuXHRcdDEyMjM6IDIwNFxuXHR9LFxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xuXG5zdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyU3VwcG9ydGVkICk7XG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcblxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcblxuXHRcdFx0XHR4aHIub3Blbihcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXG5cdFx0XHRcdFx0b3B0aW9ucy51cmwsXG5cdFx0XHRcdFx0b3B0aW9ucy5hc3luYyxcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxuXHRcdFx0XHRcdG9wdGlvbnMucGFzc3dvcmRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBoZWFkZXJzXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0gZXJyb3JDYWxsYmFjayA9IHhoci5vbmxvYWQgPVxuXHRcdFx0XHRcdFx0XHRcdHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub250aW1lb3V0ID1cblx0XHRcdFx0XHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgdHJhYy04NjA1LCB0cmFjLTE0MjA3XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KVxuXHRcdFx0XHRcdFx0XHRcdFx0KCB4aHIucmVzcG9uc2VUeXBlIHx8IFwidGV4dFwiICkgIT09IFwidGV4dFwiICB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGJpbmFyeTogeGhyLnJlc3BvbnNlIH0gOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IHRleHQ6IHhoci5yZXNwb25zZVRleHQgfSxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIExpc3RlbiB0byBldmVudHNcblx0XHRcdFx0eGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7XG5cdFx0XHRcdGVycm9yQ2FsbGJhY2sgPSB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XG5cdFx0XHRcdC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHNcblx0XHRcdFx0aWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCxcblx0XHRcdFx0XHRcdFx0Ly8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0XG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXG5cdFx0XHRcdFx0XHRcdC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcblxuXHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyB0cmFjLTE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBQcmV2ZW50IGF1dG8tZXhlY3V0aW9uIG9mIHNjcmlwdHMgd2hlbiBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNlZSBnaC0yNDMyKVxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTtcblx0fVxufSApO1xuXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRhY2NlcHRzOiB7XG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgXCIgK1xuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuXHR9LFxuXHRjb250ZW50czoge1xuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXG5cdH0sXG5cdGNvbnZlcnRlcnM6IHtcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHMuY2FjaGUgPSBmYWxzZTtcblx0fVxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy50eXBlID0gXCJHRVRcIjtcblx0fVxufSApO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblxuXHQvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIG9yIGZvcmNlZC1ieS1hdHRycyByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gfHwgcy5zY3JpcHRBdHRycyApIHtcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoIFwiPHNjcmlwdD5cIiApXG5cdFx0XHRcdFx0LmF0dHIoIHMuc2NyaXB0QXR0cnMgfHwge30gKVxuXHRcdFx0XHRcdC5wcm9wKCB7IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwgc3JjOiBzLnVybCB9IClcblx0XHRcdFx0XHQub24oIFwibG9hZCBlcnJvclwiLCBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UuZ3VpZCsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0Ly8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgcmVjdCwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiAoZGlzcGxheTogbm9uZSkgZWxlbWVudHMgKGdoLTIzMTApXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYVxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvclxuXHRcdGlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0XHR9XG5cblx0XHQvLyBHZXQgZG9jdW1lbnQtcmVsYXRpdmUgcG9zaXRpb24gYnkgYWRkaW5nIHZpZXdwb3J0IHNjcm9sbCB0byB2aWV3cG9ydC1yZWxhdGl2ZSBnQkNSXG5cdFx0cmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0d2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LFxuXHRcdFx0bGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0XG5cdFx0fTtcblx0fSxcblxuXHQvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveFxuXHQvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWhhdmlvciBvZiBDU1MgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsIGRvYyxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXG5cdFx0Ly8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXRcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3Rcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdGhlICpyZWFsKiBvZmZzZXQgcGFyZW50LCB3aGljaCBjYW4gYmUgdGhlIGRvY3VtZW50IG9yIGl0cyByb290IGVsZW1lbnRcblx0XHRcdC8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkXG5cdFx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHRvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiZcblx0XHRcdFx0KCBvZmZzZXRQYXJlbnQgPT09IGRvYy5ib2R5IHx8IG9mZnNldFBhcmVudCA9PT0gZG9jLmRvY3VtZW50RWxlbWVudCApICYmXG5cdFx0XHRcdGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIEluY29ycG9yYXRlIGJvcmRlcnMgaW50byBpdHMgb2Zmc2V0LCBzaW5jZSB0aGV5IGFyZSBvdXRzaWRlIGl0cyBjb250ZW50IG9yaWdpblxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXG5cdFx0XHQvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3Ncblx0XHRcdHZhciB3aW47XG5cdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW07XG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0gOS4xLCBDaHJvbWUgPD0zNyAtIDQ5XG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0N1xuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggX2ksIHByb3AgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdFx0Y29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTtcblxuXHRcdFx0XHQvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXRcblx0XHRcdFx0cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID9cblx0XHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyBcInB4XCIgOlxuXHRcdFx0XHRcdGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn0gKTtcblxuXG4vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IEhlaWdodDogXCJoZWlnaHRcIiwgV2lkdGg6IFwid2lkdGhcIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHtcblx0alF1ZXJ5LmVhY2goIHtcblx0XHRwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLFxuXHRcdGNvbnRlbnQ6IHR5cGUsXG5cdFx0XCJcIjogXCJvdXRlclwiICsgbmFtZVxuXHR9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcblxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xuXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBkb2M7XG5cblx0XHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBpbmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSlcblx0XHRcdFx0XHRyZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggXCJvdXRlclwiICkgPT09IDAgP1xuXHRcdFx0XHRcdFx0ZWxlbVsgXCJpbm5lclwiICsgbmFtZSBdIDpcblx0XHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwiYWpheFN0YXJ0XCIsXG5cdFwiYWpheFN0b3BcIixcblx0XCJhamF4Q29tcGxldGVcIixcblx0XCJhamF4RXJyb3JcIixcblx0XCJhamF4U3VjY2Vzc1wiLFxuXHRcImFqYXhTZW5kXCJcbl0sIGZ1bmN0aW9uKCBfaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59ICk7XG5cblxuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH0sXG5cblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzXG5cdFx0XHQub24oIFwibW91c2VlbnRlclwiLCBmbk92ZXIgKVxuXHRcdFx0Lm9uKCBcIm1vdXNlbGVhdmVcIiwgZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goXG5cdCggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cblx0XHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRcdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHRcdH07XG5cdH1cbik7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG4vLyBSZXF1aXJlIHRoYXQgdGhlIFwid2hpdGVzcGFjZSBydW5cIiBzdGFydHMgZnJvbSBhIG5vbi13aGl0ZXNwYWNlXG4vLyB0byBhdm9pZCBPKE5eMikgYmVoYXZpb3Igd2hlbiB0aGUgZW5naW5lIHdvdWxkIHRyeSBtYXRjaGluZyBcIlxccyskXCIgYXQgZWFjaCBzcGFjZSBwb3NpdGlvbi5cbnZhciBydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfChbXlxcc1xcdUZFRkZcXHhBMF0pW1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5qUXVlcnkudHJpbSA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcIlwiIDpcblx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApO1xufTtcblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAodHJhYy03MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAodHJhYy0xMzU2NilcbmlmICggdHlwZW9mIG5vR2xvYmFsID09PSBcInVuZGVmaW5lZFwiICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4iLCJpbXBvcnQgeyBJQWN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbmV4cG9ydCBjb25zdCBhY3Rpb25BZGRpbnMgOlJlY29yZDxzdHJpbmcsSUFjdGlvbj49e307XHJcbiIsIlxyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyAgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuXHJcbmludGVyZmFjZSBJTXVzdElucHV0UHJvcHN7XHJcbiAgICBmaWVsZDpJRmllbGQ7XHJcbiAgICBtZXNzYWdlOnN0cmluZzsgXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNdXN0SW5wdXRBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SU11c3RJbnB1dFByb3BzO1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLm5hbWU9XCLlv4XpoIjjg4Hjgqfjg4Pjgq9cIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgICAgICB0aGlzLnByb3BzPXtcclxuICAgICAgICAgICAgZmllbGQ6e2NvZGU6Jyd9LFxyXG4gICAgICAgICAgICBtZXNzYWdlOicnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6SUFjdGlvbk5vZGUsZXZlbnQ6YW55KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ21lc3NhZ2UnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSU11c3RJbnB1dFByb3BzO1xyXG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGV2ZW50LnJlY29yZDtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdPy52YWx1ZTtcclxuICAgICAgICBpZih2YWx1ZT09PXVuZGVmaW5lZCB8fCB2YWx1ZT09PScnKXtcclxuICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3I9dGhpcy5wcm9wcy5tZXNzYWdlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQ9IHtcclxuICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxuICAgIFxyXG59XHJcbm5ldyBNdXN0SW5wdXRBY3Rpb24oKTsiLCJleHBvcnQgY2xhc3MgRm9ybWF0dGVye1xyXG4gICAgc3RhdGljIG51bWJlckZvcm1hdChudW06bnVtYmVyLGZvcm1hdDpzdHJpbmcpOnN0cmluZ3tcclxuICAgICAgICBsZXQgaW50ZWdlclBhcnQgPSBNYXRoLmZsb29yKE1hdGguYWJzKG51bSkpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgbGV0IGZyYWN0aW9uUGFydCA9IE1hdGguYWJzKG51bSkudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdIHx8ICcnO1xyXG4gICAgICAgIGxldCBpc05lZ2F0aXZlID0gbnVtIDwgMDtcclxuICAgICAgICBsZXQgaXNQZXJjZW50ID0gZm9ybWF0LmluY2x1ZGVzKCclJyk7ICAgICAgIFxyXG4gICAgICAgIC8vICVcclxuICAgICAgICBpZiAoaXNQZXJjZW50KSB7XHJcbiAgICAgICAgICAgIG51bSAqPSAxMDA7XHJcbiAgICAgICAgICAgIGludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcihNYXRoLmFicyhudW0pKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBmcmFjdGlvblBhcnQgPSBNYXRoLmFicyhudW0pLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSB8fCAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5bCP5pWw44Go5pW05pWw6YOo5YiG44Gu5Yem55CGXHJcbiAgICAgICAgbGV0IFtpbnRlZ2VyRm9ybWF0LCBmcmFjdGlvbkZvcm1hdF0gPSBmb3JtYXQuc3BsaXQoJy4nKTtcclxuICAgICAgICBpbnRlZ2VyUGFydCA9IGludGVnZXJGb3JtYXQgPyBpbnRlZ2VyUGFydC5wYWRTdGFydChpbnRlZ2VyRm9ybWF0LnJlcGxhY2UoL1teMF0vZywgJycpLmxlbmd0aCwgJzAnKSA6IGludGVnZXJQYXJ0O1xyXG4gICAgICAgIGZyYWN0aW9uUGFydCA9IGZyYWN0aW9uUGFydC5wYWRFbmQoZnJhY3Rpb25Gb3JtYXQgPyBmcmFjdGlvbkZvcm1hdC5sZW5ndGggOiAwLCAnMCcpO1xyXG5cclxuICAgICAgICAvLyDjgqvjg57ljLrliIdcclxuICAgICAgICBpZiAoLywvLnRlc3QoaW50ZWdlckZvcm1hdCkpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBbXTtcclxuICAgICAgICAgICAgd2hpbGUgKGludGVnZXJQYXJ0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBwYXJ0cy51bnNoaWZ0KGludGVnZXJQYXJ0LnNsaWNlKC0zKSk7XHJcbiAgICAgICAgICAgIGludGVnZXJQYXJ0ID0gaW50ZWdlclBhcnQuc2xpY2UoMCwgLTMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGludGVnZXJQYXJ0ID0gcGFydHMuam9pbignLCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g44GZ44G544Gm57WE5ZCI44KP44GbXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZyYWN0aW9uRm9ybWF0ID8gYCR7aW50ZWdlclBhcnR9LiR7ZnJhY3Rpb25QYXJ0fWAgOiBpbnRlZ2VyUGFydDtcclxuICAgICAgICByZXN1bHQgPSBpc05lZ2F0aXZlID8gYC0ke3Jlc3VsdH1gIDogcmVzdWx0O1xyXG4gICAgICAgIHJldHVybiBpc1BlcmNlbnQgPyBgJHtyZXN1bHR9JWAgOiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICAgIFxyXG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xyXG4gICAgICAgIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IGhvdXIgPSBkYXRlLmdldEhvdXJzKCk7XHJcbiAgICAgICAgY29uc3QgbWludXRlID0gZGF0ZS5nZXRNaW51dGVzKCk7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kID0gZGF0ZS5nZXRTZWNvbmRzKCk7XHJcbiAgICAgICAgY29uc3QgbWlsbGlzZWNvbmQgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpO1xyXG4gICAgICAgIGNvbnN0IHRpbWVab25lT2Zmc2V0ID0gLWRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDYwO1xyXG4gICAgICBcclxuICAgICAgICBjb25zdCByZXBsYWNlbWVudHMgPSB7XHJcbiAgICAgICAgICAneXl5eSc6IHllYXIudG9TdHJpbmcoKSxcclxuICAgICAgICAgICd5eSc6IHllYXIudG9TdHJpbmcoKS5zbGljZSgtMiksXHJcbiAgICAgICAgICAnTU0nOiBtb250aC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAnTSc6IG1vbnRoLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAnZGQnOiBkYXkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgJ2QnOiBkYXkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICdISCc6IGhvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgJ0gnOiBob3VyLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAnaGgnOiAoaG91ciA+IDEyID8gaG91ciAtIDEyIDogaG91cikudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgJ2gnOiAoaG91ciA+IDEyID8gaG91ciAtIDEyIDogaG91cikudG9TdHJpbmcoKSxcclxuICAgICAgICAgICdtbSc6IG1pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAnbSc6IG1pbnV0ZS50b1N0cmluZygpLFxyXG4gICAgICAgICAgJ3NzJzogc2Vjb25kLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICdzJzogc2Vjb25kLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAnZmZmJzogbWlsbGlzZWNvbmQudG9TdHJpbmcoKS5wYWRTdGFydCgzLCAnMCcpLFxyXG4gICAgICAgICAgJ3p6eic6ICh0aW1lWm9uZU9mZnNldCA+PSAwID8gJysnIDogJy0nKSArIE1hdGguYWJzKHRpbWVab25lT2Zmc2V0KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykgKyAnOjAwJ1xyXG4gICAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgveXl5eXx5eXxNTXxNfGRkfGR8SEh8SHxoaHxofG1tfG18c3N8c3xmZmZ8enp6L2csIChtYXRjaCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50c1ttYXRjaCBhcyBrZXlvZiB0eXBlb2YgcmVwbGFjZW1lbnRzXSB8fCBtYXRjaDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgXHJcblxyXG59IiwiXHJcbmltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7IElGaWVsZCwgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJQ29udGV4dCwgSVZhck5hbWUgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgRm9ybWF0dGVyIH0gZnJvbSBcIi4uL3V0aWwvZm9ybWF0XCI7XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgICBpbnRlcmZhY2UgV2luZG93IHsgJGZvcm1hdDogYW55OyB9ICBcclxufVxyXG5cclxuaW50ZXJmYWNlIElBdXRvTnVtYmVyaW5nUHJvcHN7XHJcbiAgICAvL+aWh+abuOeVquWPt+OCkuagvOe0jeOBmeOCi1xyXG4gICAgZmllbGQ6SUZpZWxkO1xyXG4gICAgZm9ybWF0OnN0cmluZztcclxuICAgIHByZWZpeDpzdHJpbmc7XHJcbiAgICBzdWZmaXg6c3RyaW5nO1xyXG4gICAgdmVyTmFtZTpJVmFyTmFtZTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1dG9OdW1iZXJpbmcgaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SUF1dG9OdW1iZXJpbmdQcm9wcztcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5uYW1lPVwi6Ieq5YuV5o6h55Wq44GZ44KLXCI7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1bXTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgZm9ybWF0OicnLFxyXG4gICAgICAgICAgICBwcmVmaXg6JycsXHJcbiAgICAgICAgICAgIHN1ZmZpeDonJyxcclxuICAgICAgICAgICAgdmVyTmFtZTp7bmFtZTonJ31cclxuICAgICAgICB9XHJcbiAgICAgICAgZ2xvYmFsVGhpcy53aW5kb3cuJGZvcm1hdD10aGlzLmZvcm1hdDtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lh6bnkIbjgpLlrp/oo4XjgZnjgotcclxuICogQHBhcmFtIGFjdGlvbk5vZGUg44Ki44Kv44K344On44Oz44OO44O844OJXHJcbiAqIEBwYXJhbSBldmVudCBLaW50b25l44Gu44Kk44OZ44Oz44OIXHJcbiAqIEBwYXJhbSBjb250ZXh0IOOCs+ODs+ODhuOCreOCueODiO+8iOODrOOCs+ODvOODieOAgeWkieaVsOaDheWgseOCkuaMgeOBo+OBpuOBhOOCi++8iVxyXG4gKiBAcmV0dXJucyBcclxuICovXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6SUFjdGlvbk5vZGUsZXZlbnQ6YW55LGNvbnRleHQ6SUNvbnRleHQpOlByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgICAgIGxldCByZXN1bHQ9e1xyXG4gICAgICAgICAgICBjYW5OZXh0OmZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ2Zvcm1hdCcgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJQXV0b051bWJlcmluZ1Byb3BzO1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvY051bSA9IGF3YWl0IHRoaXMuY3JlYXRlTnVtYmVyKHRoaXMucHJvcHMpO1xyXG4gICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS52YWx1ZT1kb2NOdW07XHJcbiAgICAgICAgICAgIC8v5aSJ5pWw6Kit5a6aXHJcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMudmVyTmFtZSAmJiB0aGlzLnByb3BzLnZlck5hbWUubmFtZSE9PScnKXtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXT1kb2NOdW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3I9XCLlh6bnkIbkuK3nlbDluLjjgYznmbrnlJ/jgZfjgb7jgZfjgZ/jgIJcIjtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleGVjVGVtcGxhdGUodGVtcGxhdGU6c3RyaW5nKTpzdHJpbmd7XHJcbiAgICAgICAgaWYodGVtcGxhdGU9PT11bmRlZmluZWQpIHJldHVybiAnJztcclxuICAgICAgICBjb25zdCByZWdleCA9IC9cXCRcXHsoW159XSspXFx9L2c7XHJcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UocmVnZXgsKG1hdGNoLGV4cHIpPT57XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4ZWNFdmFsKG1hdGNoLGV4cHIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGV4ZWNFdmFsKG1hdGNoOnN0cmluZyxleHByOnN0cmluZyk6c3RyaW5ne1xyXG4gICAgICAgIGNvbnNvbGUubG9nKG1hdGNoKTtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgcmV0dXJuIGV2YWwoZXhwcik7XHJcbiAgICB9XHJcblxyXG4gICAgZm9ybWF0KHBhdHRlcm46c3RyaW5nKTpzdHJpbmd7XHJcbiAgICAgICAgY29uc3Qgbm93PW5ldyBEYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIEZvcm1hdHRlci5kYXRlRm9ybWF0KG5vdywgcGF0dGVybik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlTnVtYmVyKHByb3BzOklBdXRvTnVtYmVyaW5nUHJvcHMpe1xyXG4gICAgICAgIGxldCBudW1iZXIgOnN0cmluZz0nJztcclxuICAgICAgICBsZXQgcHJlZml4OnN0cmluZz0nJztcclxuICAgICAgICBsZXQgc3VmZml4OnN0cmluZz0nJztcclxuICAgICAgICBsZXQgbm89MTsgICAgIFxyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgbm8gPSBhd2FpdCB0aGlzLmZldGNoTm8oKTtcclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHByb3BzLmZvcm1hdCE9PXVuZGVmaW5lZCAmJiBwcm9wcy5mb3JtYXQhPT0nJyl7XHJcbiAgICAgICAgICAgIG51bWJlcj1Gb3JtYXR0ZXIubnVtYmVyRm9ybWF0KG5vLCBwcm9wcy5mb3JtYXQpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBudW1iZXI9bm8udG9TdHJpbmcoMTApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYocHJvcHMucHJlZml4IT09dW5kZWZpbmVkICYmIHByb3BzLnByZWZpeCE9PScnKXtcclxuICAgICAgICAgICAgcHJlZml4PXRoaXMuZXhlY1RlbXBsYXRlKHByb3BzLnByZWZpeCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihwcm9wcy5zdWZmaXghPT11bmRlZmluZWQgJiYgcHJvcHMuc3VmZml4IT09Jycpe1xyXG4gICAgICAgICAgICBzdWZmaXg9dGhpcy5leGVjVGVtcGxhdGUocHJvcHMuc3VmZml4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke251bWJlcn0ke3N1ZmZpeH1gO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZldGNoTm8oKTpQcm9taXNlPG51bWJlcj57XHJcbiAgICAgICAgbGV0IHJlY05vPTE7XHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCBuZXcga2ludG9uZS5Qcm9taXNlPG51bWJlcj4oKHJlc29sdmUscmVqZWN0KT0+e1xyXG4gICAgICAgICAgICBjb25zdCBhcHB1cmwgPSBraW50b25lLmFwaS51cmwoJy9rL3YxL3JlY29yZHMnLHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXM9e1xyXG4gICAgICAgICAgICAgICAgYXBwOmtpbnRvbmUuYXBwLmdldElkKCksXHJcbiAgICAgICAgICAgICAgICBmaWVsZHM6WyckaWQnXSxcclxuICAgICAgICAgICAgICAgIHF1ZXJ5OidsaW1pdCAxJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4ga2ludG9uZS5hcGkoYXBwdXJsLCdHRVQnLHBhcmFtcykudGhlbigocmVzcCk9PntcclxuICAgICAgICAgICAgICAgIGlmKHJlc3AucmVjb3Jkc1swXSE9PW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY05vID0gcGFyc2VJbnQocmVzcC5yZWNvcmRzWzBdLiRpZC52YWx1ZSwxMCkrMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVjTm8pO1xyXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpPT57XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXT10aGlzO1xyXG4gICAgfVxyXG4gICAgXHJcbn1cclxubmV3IEF1dG9OdW1iZXJpbmcoKTsiLCJpbXBvcnQgeyBJQ29udGV4dCB9IGZyb20gXCIuL0FjdGlvblR5cGVzXCI7XHJcblxyXG4vL+ODjuODvOODieeoruWIpVxyXG5leHBvcnQgZW51bSBOb2RlVHlwZXtcclxuICBSb290ID0gJ3Jvb3QnLFxyXG4gIExvZ2ljR3JvdXAgPSdsb2dpY2dyb3VwJyxcclxuICBDb25kaXRpb24gPSdjb25kaXRpb24nXHJcbn1cclxuXHJcbi8v44Ot44K444OD44Kv44Kq44Oa44Os44O844K/44O8XHJcbmV4cG9ydCBlbnVtIExvZ2ljYWxPcGVyYXRvcntcclxuICBBTkQgPSAnQU5EJyxcclxuICBPUiA9ICdPUidcclxufVxyXG5cclxuLy/mnaHku7bjgqrjg5rjg6zjg7zjgr/jg7xcclxuZXhwb3J0IGVudW0gT3BlcmF0b3J7XHJcbiAgRXF1YWwgPSAnPScsXHJcbiAgTm90RXF1YWw9JyE9JyxcclxuICBHcmVhdGVyID0gJz4nLFxyXG4gIEdyZWF0ZXJPckVxdWFsID0gJz49JyxcclxuICBMZXNzID0gJzwnLFxyXG4gIExlc3NPckVxdWFsID0gJzw9JyxcclxuICBDb250YWlucyA9ICdjb250YWlucycsXHJcbiAgTm90Q29udGFpbnMgPSAnbm90IGNvbnRhaW5zJyxcclxuICBTdGFydFdpdGggPSAnc3RhcnQgV2l0aCcsXHJcbiAgRW5kV2l0aCA9ICdlbmQgd2l0aCcsXHJcbiAgTm90U3RhcnRXaXRoID0gJ25vdCBzdGFydCB3aXRoJyxcclxuICBOb3RFbmRXaXRoID0gJ25vdCBlbmQgd2l0aCdcclxufVxyXG5cclxuXHJcbi8vIElOb2RlXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGUge1xyXG4gIGluZGV4Om51bWJlcjtcclxuICB0eXBlOiBOb2RlVHlwZTtcclxuICBoZWFkZXI6c3RyaW5nO1xyXG4gIHBhcmVudDogSU5vZGUgfCBudWxsO1xyXG4gIGxvZ2ljYWxPcGVyYXRvcjpMb2dpY2FsT3BlcmF0b3JcclxufVxyXG5cclxuLy8g44Ot44K444OD44Kv44OO44O844OJXHJcbmV4cG9ydCBjbGFzcyBHcm91cE5vZGUgaW1wbGVtZW50cyBJTm9kZSB7XHJcbiAgaW5kZXg6bnVtYmVyO1xyXG4gIHR5cGU6IE5vZGVUeXBlO1xyXG4gIGNoaWxkcmVuOiBJTm9kZVtdO1xyXG4gIHBhcmVudDogSU5vZGUgfCBudWxsO1xyXG4gIGxvZ2ljYWxPcGVyYXRvcjogTG9naWNhbE9wZXJhdG9yO1xyXG4gIGdldCBsYWJlbCgpOnN0cmluZ3tcclxuICAgIHJldHVybiB0aGlzLmxvZ2ljYWxPcGVyYXRvcjtcclxuICB9XHJcbiAgZ2V0IGhlYWRlcigpOnN0cmluZ3tcclxuICAgIHJldHVybiB0aGlzLnR5cGU9PT1Ob2RlVHlwZS5Sb290Pydyb290JzonZ2VuZXJpYyc7XHJcbiAgfVxyXG4gIGdldCBleHBhbmRlZCgpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg+MDtcclxuICB9XHJcbiAgY29uc3RydWN0b3IobG9naWNPcDpMb2dpY2FsT3BlcmF0b3IsIHBhcmVudDogSU5vZGUgfCBudWxsKSB7XHJcbiAgICB0aGlzLmluZGV4PTA7XHJcbiAgICB0aGlzLnR5cGUgPSBwYXJlbnQ9PW51bGw/Tm9kZVR5cGUuUm9vdDogTm9kZVR5cGUuTG9naWNHcm91cDtcclxuICAgIHRoaXMubG9naWNhbE9wZXJhdG9yID0gbG9naWNPcDtcclxuICAgIHRoaXMucGFyZW50PXBhcmVudDtcclxuICAgIHRoaXMuY2hpbGRyZW49W107XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUpTT04oanNvbjogYW55LCBwYXJlbnQ6IElOb2RlIHwgbnVsbCA9IG51bGwpOiBHcm91cE5vZGUge1xyXG4gICAgY29uc3Qgbm9kZSA9IG5ldyBHcm91cE5vZGUoanNvbi5sb2dpY2FsT3BlcmF0b3IsIHBhcmVudCk7XHJcbiAgICBub2RlLmluZGV4PWpzb24uaW5kZXg7XHJcbiAgICBub2RlLmNoaWxkcmVuID0ganNvbi5jaGlsZHJlbi5tYXAoKGNoaWxkSnNvbjogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBjaGlsZEpzb24udHlwZSA9PT0gTm9kZVR5cGUuTG9naWNHcm91cFxyXG4gICAgICAgID8gR3JvdXBOb2RlLmZyb21KU09OKGNoaWxkSnNvbiwgbm9kZSlcclxuICAgICAgICA6IENvbmRpdGlvbk5vZGUuZnJvbUpTT04oY2hpbGRKc29uLCBub2RlKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5vZGU7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuLy8g5p2h5Lu25byP44OO44O844OJXHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25Ob2RlIGltcGxlbWVudHMgSU5vZGUge1xyXG4gIGluZGV4OiBudW1iZXI7XHJcbiAgdHlwZTogTm9kZVR5cGU7XHJcbiAgcGFyZW50OklOb2RlO1xyXG4gIGdldCBsb2dpY2FsT3BlcmF0b3IoKTogTG9naWNhbE9wZXJhdG9ye1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmxvZ2ljYWxPcGVyYXRvcjtcclxuICB9O1xyXG4gIG9iamVjdDogYW55OyAvLyDmr5TovIPlhYNcclxuICBvcGVyYXRvcjogT3BlcmF0b3I7IC8vIOavlOi8g+WtkFxyXG4gIHZhbHVlOiBhbnk7XHJcbiAgZ2V0IGhlYWRlcigpOnN0cmluZ3tcclxuICAgIHJldHVybiAnZ2VuZXJpYyc7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihvYmplY3Q6IGFueSwgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogYW55LCBwYXJlbnQ6IEdyb3VwTm9kZSkge1xyXG4gICAgdGhpcy5pbmRleD0wO1xyXG4gICAgdGhpcy50eXBlID0gTm9kZVR5cGUuQ29uZGl0aW9uO1xyXG4gICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7XHJcbiAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLnBhcmVudD1wYXJlbnQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUpTT04oanNvbjogYW55LCBwYXJlbnQ6IEdyb3VwTm9kZSk6IENvbmRpdGlvbk5vZGUge1xyXG4gICAgY29uc3Qgbm9kZT0gbmV3IENvbmRpdGlvbk5vZGUoXHJcbiAgICAgIGpzb24ub2JqZWN0LFxyXG4gICAgICBqc29uLm9wZXJhdG9yLFxyXG4gICAgICBqc29uLnZhbHVlLFxyXG4gICAgICBwYXJlbnRcclxuICAgICk7XHJcbiAgICBub2RlLmluZGV4PWpzb24uaW5kZXg7XHJcbiAgICByZXR1cm4gbm9kZTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDmnaHku7blvI/jga7nrqHnkIbjgq/jg6njgrlcclxuICovXHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25UcmVlIHtcclxuICByb290OiBHcm91cE5vZGU7XHJcbiAgbWF4SW5kZXg6bnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubWF4SW5kZXg9MDtcclxuICAgIHRoaXMucm9vdCA9IG5ldyBHcm91cE5vZGUoTG9naWNhbE9wZXJhdG9yLkFORCwgbnVsbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDjg47jg7zjg4nov73liqBcclxuICAgKiBAcGFyYW0gcGFyZW50IFxyXG4gICAqIEBwYXJhbSBub2RlIFxyXG4gICAqL1xyXG4gIGFkZE5vZGUocGFyZW50OiBHcm91cE5vZGUsIG5vZGU6IElOb2RlKTogdm9pZCB7XHJcbiAgICB0aGlzLm1heEluZGV4Kys7XHJcbiAgICBub2RlLmluZGV4PXRoaXMubWF4SW5kZXg7XHJcbiAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqICDjg47jg7zjg4nliYrpmaRcclxuICAgKiBAcGFyYW0gbm9kZSBcclxuICAgKi9cclxuICByZW1vdmVOb2RlKG5vZGU6IElOb2RlKTogdm9pZCB7XHJcbiAgICBpZiAobm9kZS5wYXJlbnQgPT09IG51bGwpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCfjg6vjg7zjg4jjg47jg7zjg4nliYrpmaTjgafjgY3jgb7jgZvjgpMnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50IGFzIEdyb3VwTm9kZTtcclxuICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihub2RlKTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiDmnaHku7bjg4Tjg6rjg7zjgYvjgonjgqTjg7Pjg4fjgqPjgq/jgrnlgKTjgafmnaHku7bjg47jg7zjg4njgpLmpJzntKLjgZnjgotcclxuICogQHBhcmFtIGluZGV4IFxyXG4gKiBAcmV0dXJucyBcclxuICovXHJcbiAgZmluZEJ5SW5kZXgoaW5kZXg6bnVtYmVyKTpJTm9kZXx1bmRlZmluZWR7XHJcbiAgICByZXR1cm4gdGhpcy5maW5kQ2hpbGRyZW4odGhpcy5yb290LGluZGV4KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaMh+WumuOBruODjuODvOODieOCsOODq+ODvOODl+OBi+OCieOCpOODs+ODh+OCo+OCr+OCueWApOOBp+adoeS7tuODjuODvOODieOCkuaknOe0ouOBmeOCi1xyXG4gICAqIEBwYXJhbSBwYXJlbnQgXHJcbiAgICogQHBhcmFtIGluZGV4IFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGZpbmRDaGlsZHJlbihwYXJlbnQ6IEdyb3VwTm9kZSwgaW5kZXg6IG51bWJlcik6IElOb2RlIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmIChwYXJlbnQuaW5kZXggPT09IGluZGV4KSB7XHJcbiAgICAgIHJldHVybiBwYXJlbnQ7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgcGFyZW50LmNoaWxkcmVuKSB7XHJcbiAgICAgIGlmIChub2RlLmluZGV4ID09PSBpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLnR5cGUgIT09IE5vZGVUeXBlLkNvbmRpdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kTm9kZSA9IHRoaXMuZmluZENoaWxkcmVuKG5vZGUgYXMgR3JvdXBOb2RlLCBpbmRleCk7XHJcbiAgICAgICAgaWYgKGZvdW5kTm9kZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZvdW5kTm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gbm9kZSDmnIDlpKfjga7jgqTjg7Pjg4fjgqPjgq/jgrnlgKTjgpLlj5blvpfjgZnjgotcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBnZXRNYXhJbmRleChub2RlOklOb2RlKTpudW1iZXJ7XHJcbiAgICBsZXQgbWF4SW5kZXg6bnVtYmVyPW5vZGUuaW5kZXg7XHJcbiAgICBpZihub2RlLnR5cGUhPT1Ob2RlVHlwZS5Db25kaXRpb24pe1xyXG4gICAgICBjb25zdCBncm91cE5vZGUgPSBub2RlIGFzIEdyb3VwTm9kZTtcclxuICAgICAgZ3JvdXBOb2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKT0+e1xyXG4gICAgICAgICAgY29uc3QgY2hpbGRNYXggPSB0aGlzLmdldE1heEluZGV4KGNoaWxkKTtcclxuICAgICAgICAgIGlmKGNoaWxkTWF4Pm1heEluZGV4KXtcclxuICAgICAgICAgICAgbWF4SW5kZXg9Y2hpbGRNYXg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1heEluZGV4O1xyXG59XHJcblxyXG4gIC8qKlxyXG4gICAqIOadoeS7tuW8j+OCkuihqOekuuOBmeOCi1xyXG4gICAqIEBwYXJhbSBub2RlIOadoeS7tuODjuODvOODiVxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGJ1aWxkQ29uZGl0aW9uU3RyaW5nKG5vZGU6SU5vZGUpe1xyXG4gICAgaWYgKG5vZGUudHlwZSAhPT0gTm9kZVR5cGUuQ29uZGl0aW9uKSB7XHJcbiAgICAgIGxldCBjb25kaXRpb25TdHJpbmcgPSAnKCc7XHJcbiAgICAgIGNvbnN0IGdyb3VwTm9kZSA9IG5vZGUgYXMgR3JvdXBOb2RlO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyb3VwTm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkQ29uZGl0aW9uU3RyaW5nID0gdGhpcy5idWlsZENvbmRpdGlvblN0cmluZyhncm91cE5vZGUuY2hpbGRyZW5baV0pO1xyXG4gICAgICAgIGlmIChjaGlsZENvbmRpdGlvblN0cmluZyAhPT0gJycpIHtcclxuICAgICAgICAgIGNvbmRpdGlvblN0cmluZyArPSBjaGlsZENvbmRpdGlvblN0cmluZztcclxuICAgICAgICAgIGlmIChpIDwgZ3JvdXBOb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uU3RyaW5nICs9IGAgJHtncm91cE5vZGUubG9naWNhbE9wZXJhdG9yfSBgO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25kaXRpb25TdHJpbmcgKz0gJyknO1xyXG4gICAgICByZXR1cm4gY29uZGl0aW9uU3RyaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgY29uZE5vZGU9bm9kZSBhcyBDb25kaXRpb25Ob2RlO1xyXG4gICAgICBpZiAoY29uZE5vZGUub2JqZWN0ICYmIGNvbmROb2RlLm9wZXJhdG9yICkge1xyXG4gICAgICAgIGxldCB2YWx1ZT1jb25kTm9kZS52YWx1ZTtcclxuICAgICAgICBpZih2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09J29iamVjdCcgJiYgKCdsYWJlbCcgaW4gdmFsdWUpKXtcclxuICAgICAgICAgICAgdmFsdWUgPWNvbmROb2RlLnZhbHVlLmxhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYCR7Y29uZE5vZGUub2JqZWN0Lm5hbWV9ICR7Y29uZE5vZGUub3BlcmF0b3J9ICcke3ZhbHVlfSdgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiDjgZnjgbnjgabmnaHku7blvI/jgpLlj5blvpfjgZnjgotcclxuICAgKi9cclxuICBnZXRDb25kaXRpb25zKHBhcmVudDpHcm91cE5vZGUpOkNvbmRpdGlvbk5vZGVbXXtcclxuICAgIGNvbnN0IGNvbmRpTm9kZXM6Q29uZGl0aW9uTm9kZVtdPVtdO1xyXG4gICAgcGFyZW50LmNoaWxkcmVuLmZvckVhY2goKG5vZGUpPT57XHJcbiAgICAgIGlmKG5vZGUudHlwZT09PU5vZGVUeXBlLkNvbmRpdGlvbil7XHJcbiAgICAgICAgY29uZGlOb2Rlcy5wdXNoKG5vZGUgYXMgQ29uZGl0aW9uTm9kZSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGNvbmRpTm9kZXMucHVzaCguLi50aGlzLmdldENvbmRpdGlvbnMobm9kZSBhcyBHcm91cE5vZGUpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY29uZGlOb2RlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYXJlbnQg44GZ44G544Gm5p2h5Lu244Kw44Or44O844OX44KS5Y+W5b6X44GZ44KLXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBzKHBhcmVudDpHcm91cE5vZGUpOm51bWJlcltde1xyXG4gICAgY29uc3QgZ3JvdXBzOm51bWJlcltdPVtdO1xyXG4gICAgZ3JvdXBzLnB1c2gocGFyZW50LmluZGV4KTtcclxuICAgIHBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKChub2RlKT0+e1xyXG4gICAgICBpZihub2RlLnR5cGUhPT1Ob2RlVHlwZS5Db25kaXRpb24pe1xyXG4gICAgICAgIGdyb3Vwcy5wdXNoKC4uLnRoaXMuZ2V0R3JvdXBzKG5vZGUgYXMgR3JvdXBOb2RlKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGdyb3VwcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEpzb27jgYvjgonlvqnlhYNcclxuICAgKiBAcGFyYW0ganNvblN0cmluZyBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBmcm9tSnNvbihqc29uU3RyaW5nOiBzdHJpbmcpOiBJTm9kZSB7XHJcbiAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcclxuICAgIHRoaXMucm9vdCA9IEdyb3VwTm9kZS5mcm9tSlNPTihqc29uKSBhcyBHcm91cE5vZGU7XHJcbiAgICB0aGlzLm1heEluZGV4PXRoaXMuZ2V0TWF4SW5kZXgodGhpcy5yb290KTtcclxuICAgIHJldHVybiB0aGlzLnJvb3Q7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEpTT07mloflrZfliJfjgavlpInmj5vjgZnjgotcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICB0b0pzb24oKTpzdHJpbmd7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5yb290LCAoa2V5LCB2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAoa2V5ID09PSAncGFyZW50Jykge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLnR5cGUgOiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5p2h5Lu25byP44KS6KiI566X44GZ44KLXHJcbiAgICogQHBhcmFtIG5vZGUgXHJcbiAgICogQHBhcmFtIGNvbnRleHQgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZXZhbHVhdGUobm9kZTogSU5vZGUsIGNvbnRleHQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gTm9kZVR5cGUuQ29uZGl0aW9uKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmV2YWx1YXRlQ29uZGl0aW9uKG5vZGUgYXMgQ29uZGl0aW9uTm9kZSwgY29udGV4dCk7XHJcbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gTm9kZVR5cGUuTG9naWNHcm91cCB8fCBub2RlLnR5cGUgPT09IE5vZGVUeXBlLlJvb3QpIHtcclxuICAgICAgY29uc3QgZ3JvdXBOb2RlID0gbm9kZSBhcyBHcm91cE5vZGU7XHJcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBncm91cE5vZGUuY2hpbGRyZW4ubWFwKGNoaWxkID0+IHRoaXMuZXZhbHVhdGUoY2hpbGQsIGNvbnRleHQpKTtcclxuICBcclxuICAgICAgaWYgKGdyb3VwTm9kZS5sb2dpY2FsT3BlcmF0b3IgPT09IExvZ2ljYWxPcGVyYXRvci5BTkQpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5ldmVyeShyZXN1bHQgPT4gcmVzdWx0KTtcclxuICAgICAgfSBlbHNlIGlmIChncm91cE5vZGUubG9naWNhbE9wZXJhdG9yID09PSBMb2dpY2FsT3BlcmF0b3IuT1IpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5zb21lKHJlc3VsdCA9PiByZXN1bHQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgbG9naWNhbCBvcGVyYXRvcicpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG5vZGUgdHlwZScpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBDb25kaXRpb24gb2JqZWN044Gu5YCk44KS5Y+W5b6X44GZ44KLXHJcbiAgICogQHBhcmFtIG9iamVjdCBcclxuICAgKiBAcGFyYW0gY29udGV4dCBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBnZXRPYmplY3RWYWx1ZShvYmplY3Q6YW55LGNvbnRleHQ6SUNvbnRleHQpe1xyXG4gICAgaWYoIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0IT09XCJvYmplY3RcIiB8fCAhKFwib2JqZWN0VHlwZVwiIGluIG9iamVjdCkpe1xyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZihvYmplY3Qub2JqZWN0VHlwZT09PSdmaWVsZCcpe1xyXG4gICAgICBjb25zdCBmaWVsZFZhbHVlID0gY29udGV4dC5yZWNvcmRbb2JqZWN0LmNvZGVdO1xyXG4gICAgICBpZihmaWVsZFZhbHVlLnR5cGU9PT0nTlVNQkVSJyAmJiBmaWVsZFZhbHVlLnZhbHVlIT09dW5kZWZpbmVkKXtcclxuICAgICAgICByZXR1cm4gTnVtYmVyKGZpZWxkVmFsdWUudmFsdWUpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gZmllbGRWYWx1ZS52YWx1ZTtcclxuICAgICAgfSAgICAgIFxyXG4gICAgfWVsc2UgaWYob2JqZWN0Lm9iamVjdFR5cGU9PT0ndmFyaWFibGUnKXtcclxuICAgICAgcmV0dXJuIGNvbnRleHQudmFyaWFibGVzW29iamVjdC5uYW1lXS52YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOavlOi8g+OCquODluOCuOOCp+OCr+ODiOOBruWApOOCkuWPluW+l1xyXG4gICAqIEBwYXJhbSBvYmplY3QgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZ2V0Q29uZGl0aW9uVmFsdWUob2JqZWN0OmFueSl7XHJcbiAgICBpZighb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QhPT1cIm9iamVjdFwiKXtcclxuICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgIH1cclxuICAgIGlmKFwic2hhcmVkVGV4dFwiIGluIG9iamVjdCl7XHJcbiAgICAgIHJldHVybiBvYmplY3Quc2hhcmVkVGV4dDtcclxuICAgIH1cclxuICAgIGlmKFwibGFiZWxcIiBpbiBvYmplY3Qpe1xyXG4gICAgICByZXR1cm4gb2JqZWN0LmxhYmVsO1xyXG4gICAgfVxyXG4gICAgaWYoXCJ2YWx1ZVwiIGluIG9iamVjdCl7XHJcbiAgICAgIHJldHVybiBvYmplY3QudmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZihcIm5hbWVcIiBpbiBvYmplY3Qpe1xyXG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmnaHku7blvI/jgpLoqIjnrpfjgZnjgotcclxuICAgKiBAcGFyYW0gY29uZGl0aW9uIFxyXG4gICAqIEBwYXJhbSBjb250ZXh0IFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGV2YWx1YXRlQ29uZGl0aW9uKGNvbmRpdGlvbjogQ29uZGl0aW9uTm9kZSwgY29udGV4dDogSUNvbnRleHQpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHsgb2JqZWN0LCBvcGVyYXRvciwgdmFsdWUgfSA9IGNvbmRpdGlvbjtcclxuICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGhpcy5nZXRPYmplY3RWYWx1ZShvYmplY3QsY29udGV4dCk7XHJcbiAgICBjb25zdCBjb25kaXRpb25WYWx1ZSA9IHRoaXMuZ2V0Q29uZGl0aW9uVmFsdWUodmFsdWUpO1xyXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkVxdWFsOlxyXG4gICAgICBjYXNlIE9wZXJhdG9yLk5vdEVxdWFsOlxyXG4gICAgICBjYXNlIE9wZXJhdG9yLkdyZWF0ZXI6XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuR3JlYXRlck9yRXF1YWw6XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuTGVzczpcclxuICAgICAgY2FzZSBPcGVyYXRvci5MZXNzT3JFcXVhbDpcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKG9wZXJhdG9yLHRhcmdldFZhbHVlLCBjb25kaXRpb25WYWx1ZSk7XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuQ29udGFpbnM6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbnModGFyZ2V0VmFsdWUsY29uZGl0aW9uVmFsdWUpO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLk5vdENvbnRhaW5zOlxyXG4gICAgICAgIHJldHVybiAhdGhpcy5jb250YWlucyh0YXJnZXRWYWx1ZSxjb25kaXRpb25WYWx1ZSk7XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuU3RhcnRXaXRoOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0V2l0aCh0YXJnZXRWYWx1ZSxjb25kaXRpb25WYWx1ZSk7XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuTm90U3RhcnRXaXRoOlxyXG4gICAgICAgIHJldHVybiAhdGhpcy5zdGFydFdpdGgodGFyZ2V0VmFsdWUsY29uZGl0aW9uVmFsdWUpO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkVuZFdpdGg6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kc1dpdGgodGFyZ2V0VmFsdWUsY29uZGl0aW9uVmFsdWUpO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLk5vdEVuZFdpdGg6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kc1dpdGgodGFyZ2V0VmFsdWUsY29uZGl0aW9uVmFsdWUpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgb3BlcmF0b3InKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICog5q+U6LyD44KS5a6f6KGM44GZ44KLXHJcbiAgICogQHBhcmFtIG9wZXJhdG9yIFxyXG4gICAqIEBwYXJhbSB0YXJnZXRWYWx1ZSBcclxuICAgKiBAcGFyYW0gdmFsdWUgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgY29tcGFyZShvcGVyYXRvcjogT3BlcmF0b3IsIHRhcmdldFZhbHVlOiBhbnksIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIC8vIHRhcmdldFZhbHVlIOOBr+aXpeacn+aXtu+8jHZhbHVlIOOCguaXpeacn+OBq+WkieaPm+OBl+OBpuavlOi8g+OBmeOCi1xyXG4gICAgaWYodGFyZ2V0VmFsdWU9PT11bmRlZmluZWQgfHwgdGFyZ2V0VmFsdWU9PT1udWxsfHx0YXJnZXRWYWx1ZT09PScnKXtcclxuICAgICAgaWYodmFsdWU9PT11bmRlZmluZWQgfHwgdmFsdWU9PT1udWxsfHx2YWx1ZT09PScnKXtcclxuICAgICAgICB0YXJnZXRWYWx1ZT0nJztcclxuICAgICAgICB2YWx1ZT0nJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICBjb25zdCBkYXRlVmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgIGlmICghaXNOYU4oZGF0ZVZhbHVlLmdldFRpbWUoKSkpIHtcclxuICAgICAgICB2YWx1ZSA9IGRhdGVWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy90YXJnZXRWYWx1ZeOBr+aVsOWApOaZgu+8jHZhbHVlIOOCkuaVsOWApOOBq+WkieaPm+OBmeOCi1xyXG4gICAgZWxzZSBpZiAodHlwZW9mIHRhcmdldFZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICBjb25zdCBudW1iZXJWYWx1ZSA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICAgIGlmICghaXNOYU4obnVtYmVyVmFsdWUpKSB7XHJcbiAgICAgICAgdmFsdWUgPSBudW1iZXJWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIHRhcmdldFZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuRXF1YWw6XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFZhbHVlID09PSB2YWx1ZTtcclxuICAgICAgY2FzZSBPcGVyYXRvci5Ob3RFcXVhbDpcclxuICAgICAgICByZXR1cm4gdGFyZ2V0VmFsdWUgIT09IHZhbHVlO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkdyZWF0ZXI6XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFZhbHVlID4gdmFsdWU7XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuR3JlYXRlck9yRXF1YWw6XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFZhbHVlID49IHZhbHVlO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkxlc3M6XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFZhbHVlIDwgdmFsdWU7XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuTGVzc09yRXF1YWw6XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFZhbHVlIDw9IHZhbHVlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgb3BlcmF0b3IgZm9yIGNvbXBhcmlzb24nKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICog5ZCr44KA6KiI566XXHJcbiAgICogQHBhcmFtIHRhcmdldFZhbHVlIFxyXG4gICAqIEBwYXJhbSB2YWx1ZSBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBjb250YWlucyh0YXJnZXRWYWx1ZTogYW55LCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodHlwZW9mIHRhcmdldFZhbHVlID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiB0YXJnZXRWYWx1ZS5pbmNsdWRlcyh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gICAvKipcclxuICAgKiBTdGFydFdpdGjoqIjnrpdcclxuICAgKiBAcGFyYW0gdGFyZ2V0VmFsdWUgXHJcbiAgICogQHBhcmFtIHZhbHVlIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIHN0YXJ0V2l0aCh0YXJnZXRWYWx1ZTogYW55LCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodHlwZW9mIHRhcmdldFZhbHVlID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiB0YXJnZXRWYWx1ZS5zdGFydHNXaXRoKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRW5kc1dpdGjoqIjnrpdcclxuICAgKiBAcGFyYW0gdGFyZ2V0VmFsdWUgXHJcbiAgICogQHBhcmFtIHZhbHVlIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGVuZHNXaXRoKHRhcmdldFZhbHVlOiBhbnksIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICh0eXBlb2YgdGFyZ2V0VmFsdWUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIHRhcmdldFZhbHVlLmVuZHNXaXRoKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUZpZWxkLCBJQ29udGV4dCB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBDb25kaXRpb25UcmVlIH0gZnJvbSAnLi4vdHlwZXMvQ29uZGl0aW9ucyc7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJU2hvd25Qcm9wc3tcclxuICAgIGZpZWxkOklGaWVsZDtcclxuICAgIHNob3c6c3RyaW5nOyBcclxuICAgIGNvbmRpdGlvbjpzdHJpbmc7XHJcbn1cclxuLyoqXHJcbiAqIOihqOekuu+8j+mdnuihqOekuuOCouOCr+OCt+ODp+ODs1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEZpZWxkU2hvd25BY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SVNob3duUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuihqOekuu+8j+mdnuihqOekulwiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICB0aGlzLnByb3BzPXtcclxuICAgICAgICAgICAgZmllbGQ6e2NvZGU6Jyd9LFxyXG4gICAgICAgICAgICBzaG93OicnLFxyXG4gICAgICAgICAgICBjb25kaXRpb246JydcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ3Nob3cnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSVNob3duUHJvcHM7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu25byP44Gu6KiI566X57WQ5p6c44KS5Y+W5b6XXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbnRleHQpO1xyXG4gICAgICAgICAgICBpZihjb25kaXRpb25SZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5wcm9wcy5zaG93PT09J+ihqOekuicpe1xyXG4gICAgICAgICAgICAgICAgICAgIGtpbnRvbmUuYXBwLnJlY29yZC5zZXRGaWVsZFNob3duKHRoaXMucHJvcHMuZmllbGQuY29kZSx0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1lbHNlIGlmICh0aGlzLnByb3BzLnNob3c9PT0n6Z2e6KGo56S6Jyl7XHJcbiAgICAgICAgICAgICAgICAgICAga2ludG9uZS5hcHAucmVjb3JkLnNldEZpZWxkU2hvd24odGhpcy5wcm9wcy5maWVsZC5jb2RlLGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXN1bHQ9IHtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3I9ZXJyb3I7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuTmV4dD1mYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbnRleHQg5p2h5Lu25byP44KS5a6f6KGM44GZ44KLXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBnZXRDb25kaXRpb25SZXN1bHQoY29udGV4dDphbnkpOmJvb2xlYW57XHJcbiAgICAgICAgY29uc3QgdHJlZSA9dGhpcy5nZXRDb25kaXRpb24odGhpcy5wcm9wcy5jb25kaXRpb24pO1xyXG4gICAgICAgIGlmKCF0cmVlKXtcclxuICAgICAgICAgICAgLy/mnaHku7bjgpLoqK3lrprjgZXjgozjgabjgYTjgb7jgZvjgpNcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cmVlLmV2YWx1YXRlKHRyZWUucm9vdCxjb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSBjb25kaXRpb24g5p2h5Lu25byP44OE44Oq44O844KS5Y+W5b6X44GZ44KLXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBnZXRDb25kaXRpb24oY29uZGl0aW9uOnN0cmluZyk6Q29uZGl0aW9uVHJlZXxudWxse1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgY29uc3QgdHJlZSA9IG5ldyBDb25kaXRpb25UcmVlKCk7XHJcbiAgICAgICAgICAgIHRyZWUuZnJvbUpzb24oY29uZGl0aW9uKTtcclxuICAgICAgICAgICAgaWYodHJlZS5nZXRDb25kaXRpb25zKHRyZWUucm9vdCkubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyZWU7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxufVxyXG5uZXcgRmllbGRTaG93bkFjdGlvbigpOyIsIlxyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBJQWN0aW9uUHJvcGVydHksIElBY3Rpb25Ob2RlLCBJQ29udGV4dCwgSUFjdGlvblJlc3VsdCB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBDb25kaXRpb25UcmVlIH0gZnJvbSAnLi4vdHlwZXMvQ29uZGl0aW9ucyc7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJRXJyb3JTaG93UHJvcHMge1xyXG4gICAgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgY29uZGl0aW9uOiBzdHJpbmc7XHJcbn0gICBcclxuXHJcbmV4cG9ydCBjbGFzcyBFcnJvclNob3dBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uIHtcclxuICAgIG5hbWU6IHN0cmluZzsgXHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107IC8v6LCD55So5LuOaW1wb3J05a+85YWl5YWz5LqO5pi+56S657G755qE5a6a5LmJXHJcbiAgICBwcm9wczogSUVycm9yU2hvd1Byb3BzOy8v5LuO5LiK5pa555qEaW50ZXJmYWNlIOWumuS5iei/meS4qnByb3Bz5omA6ZyA6KaB5o6l5Y+X55qE5bGe5oCnXHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgLy/op6PmnoTlh73mlbDlrprkuYnpnIDopoHnmoTnsbvlkI1cclxuICAgICAgICB0aGlzLm5hbWUgPSBcIuOCqOODqeODvOihqOekulwiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBbXTtcclxuICAgICAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcclxuICAgICAgICAgICAgY29uZGl0aW9uOiAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7IC8v6YeN572u5Lul5LiK5rOo5YaM6KGoXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlIFxyXG4gICAgICogQHBhcmFtIGV2ZW50IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTogSUFjdGlvbk5vZGUsIGV2ZW50OiBhbnksIGNvbnRleHQ6IElDb250ZXh0KTogUHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7IC8v5byC5q2l5aSE55CG5p+Q5Ye95pWw5LiL55qE77yaeHjlsZ7mgKdcclxuICAgICAgICBsZXQgcmVzdWx0ID0geyBcclxuICAgICAgICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHsgLy/lsJ3or5XmiafooYzku6XkuIvku6PnoIHpg6jliIZcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcyA9IGFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcbiAgICAgICAgICAgIGlmICghKCdtZXNzYWdlJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdjb25kaXRpb24nIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7IC8v5aaC5p6cbWVzc2FnZeS7peWPimNvbmRpdGlvbuS4pOiAhemDveS4jeWtmOWcqOeahOaDheWGteS4i3JldHVyblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElFcnJvclNob3dQcm9wczsgXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbnRleHQpOyBcclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvblJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuZXJyb3IgPSB0aGlzLnByb3BzLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FuTmV4dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBldmVudC5lcnJvciA9IGVycm9yO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAqIFxyXG4gICAgKiBAcGFyYW0gY29udGV4dCDmnaHku7blvI/jgpLlrp/ooYzjgZnjgotcclxuICAgICogQHJldHVybnMgXHJcbiAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbnRleHQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHRyZWUgPSB0aGlzLmdldENvbmRpdGlvbih0aGlzLnByb3BzLmNvbmRpdGlvbik7XHJcbiAgICAgICAgaWYgKCF0cmVlKSB7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu244KS6Kit5a6a44GV44KM44Gm44GE44G+44Gb44KTXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJlZS5ldmFsdWF0ZSh0cmVlLnJvb3QsIGNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiDmnaHku7blvI/jg4Tjg6rjg7zjgpLlj5blvpfjgZnjgotcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBnZXRDb25kaXRpb24oY29uZGl0aW9uOiBzdHJpbmcpOiBDb25kaXRpb25UcmVlIHwgbnVsbCB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdHJlZSA9IG5ldyBDb25kaXRpb25UcmVlKCk7XHJcbiAgICAgICAgICAgIHRyZWUuZnJvbUpzb24oY29uZGl0aW9uKTtcclxuICAgICAgICAgICAgaWYgKHRyZWUuZ2V0Q29uZGl0aW9ucyh0cmVlLnJvb3QpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cmVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gICAgfVxyXG5cclxufVxyXG5uZXcgRXJyb3JTaG93QWN0aW9uKCk7IiwiXHJcbmltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCB7IElBY3Rpb24sIElBY3Rpb25Qcm9wZXJ0eSwgSUFjdGlvbk5vZGUsIElBY3Rpb25SZXN1bHQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IFwiLi9idXR0b24tYWRkLmNzc1wiO1xyXG5cclxuLyoqXHJcbiAqIOODnOOCv+ODs+mFjee9ruWxnuaAp+Wumue+qVxyXG4gKi9cclxuaW50ZXJmYWNlIElCdXR0b25BZGRQcm9wcyB7XHJcbiAgICAvL+ODnOOCv+ODs+ihqOekuuWQjVxyXG4gICAgYnV0dG9uTmFtZTogc3RyaW5nO1xyXG4gICAgc3BhY2U/OklTcGFjZTtcclxuICAgIC8v6YWN572u5L2N572uXHJcbiAgICBwb3NpdGlvbjogc3RyaW5nO1xyXG4gICAgLy/jgqTjg5njg7Pjg4jlkI1cclxuICAgIGV2ZW50TmFtZTpzdHJpbmdcclxufSAgIFxyXG5cclxuaW50ZXJmYWNlIElTcGFjZXtcclxuICAgIHR5cGU6c3RyaW5nLFxyXG4gICAgZWxlbWVudElkOnN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uQWRkQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgICBuYW1lOiBzdHJpbmc7IFxyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdOyBcclxuICAgIHByb3BzOiBJQnV0dG9uQWRkUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCLjg5zjgr/jg7Pjga7phY3nva5cIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzID0gW107XHJcbiAgICAgICAgdGhpcy5wcm9wcyA9IHtcclxuICAgICAgICAgICAgYnV0dG9uTmFtZTogJycsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnJyxcclxuICAgICAgICAgICAgZXZlbnROYW1lOicnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOiBJQWN0aW9uTm9kZSwgZXZlbnQ6IGFueSk6IFByb21pc2U8SUFjdGlvblJlc3VsdD4geyBcclxuICAgICAgICBsZXQgcmVzdWx0ID0geyBcclxuICAgICAgICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHsgXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBhY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnYnV0dG9uTmFtZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiYgISgncG9zaXRpb24nIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7IFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElCdXR0b25BZGRQcm9wczsgXHJcbiAgICAgICAgICAgIC8v44Oc44K/44Oz44KS6YWN572u44GZ44KLXHJcbiAgICAgICAgICAgIGxldCBidXR0b25TcGFjZTtcclxuICAgICAgICAgICAgaWYodGhpcy5wcm9wcy5zcGFjZSAmJiB0aGlzLnByb3BzLnNwYWNlLmVsZW1lbnRJZCl7XHJcbiAgICAgICAgICAgICAgICBidXR0b25TcGFjZSA9IGtpbnRvbmUuYXBwLnJlY29yZC5nZXRTcGFjZUVsZW1lbnQodGhpcy5wcm9wcy5zcGFjZS5lbGVtZW50SWQpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGJ1dHRvblNwYWNlID0ga2ludG9uZS5hcHAucmVjb3JkLmdldEhlYWRlck1lbnVTcGFjZUVsZW1lbnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighYnV0dG9uU3BhY2UpIHJldHVybiByZXN1bHQ7XHJcbiAgXHJcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9JChgPGJ1dHRvbiBpZD0nJHt0aGlzLnByb3BzLmV2ZW50TmFtZX0nIGNsYXNzPSdhbGMtYnV0dG9uLW5vcm1hbCcgPiR7dGhpcy5wcm9wcy5idXR0b25OYW1lfTwvYnV0dG9uPmApO1xyXG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnBvc2l0aW9uPT09XCLkuIDnlarlt6bjgavov73liqDjgZnjgotcIil7XHJcbiAgICAgICAgICAgICAgICAkKGJ1dHRvblNwYWNlKS5wcmVwZW5kKGJ1dHRvbik7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgJChidXR0b25TcGFjZSkuYXBwZW5kKGJ1dHRvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgY2xpY2tFdmVudE5hbWUgPSBgJHtldmVudC50eXBlfS5jdXN0b21CdXR0b25DbGljay4ke3RoaXMucHJvcHMuZXZlbnROYW1lfWA7XHJcbiAgICAgICAgICAgIGJ1dHRvbi5vbihcImNsaWNrXCIsKCk9PntcclxuICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoY2xpY2tFdmVudE5hbWUsZXZlbnQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBldmVudC5lcnJvciA9IGVycm9yO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgXHJcblxyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gICAgfVxyXG5cclxufVxyXG5uZXcgQnV0dG9uQWRkQWN0aW9uKCk7IiwiXHJcbmltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7ICBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElDb250ZXh0LCBJVmFyTmFtZSB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBDb25kaXRpb25UcmVlIH0gZnJvbSAnLi4vdHlwZXMvQ29uZGl0aW9ucyc7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJQ29uZGl0aW9ue1xyXG4gICAgY29uZGl0aW9uOnN0cmluZztcclxuICAgIHZlck5hbWU6SVZhck5hbWU7XHJcbn1cclxuLyoqXHJcbiAqIOadoeS7tuWIhuWykOOCouOCr+OCt+ODp+ODs1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbkFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczpJQ29uZGl0aW9uO1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLm5hbWU9XCLmnaHku7blvI9cIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBjb25kaXRpb246JycsXHJcbiAgICAgICAgICAgIHZlck5hbWU6e25hbWU6Jyd9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v44Ki44Kv44K344On44Oz44KS55m76Yyy44GZ44KLXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlIFxyXG4gICAgICogQHBhcmFtIGV2ZW50IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OicnXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2NvbmRpdGlvbicgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiYgISgndmVyTmFtZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJQ29uZGl0aW9uO1xyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBruioiOeul+e1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25SZXN1bHQgPSB0aGlzLmdldENvbmRpdGlvblJlc3VsdChjb250ZXh0KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLmnaHku7boqIjnrpfntZDmnpw6XCIsY29uZGl0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgaWYoY29uZGl0aW9uUmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6J+OBr+OBhCdcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6J+OBhOOBhOOBiCdcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMudmVyTmFtZSAmJiB0aGlzLnByb3BzLnZlck5hbWUubmFtZSE9PScnKXtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXT1yZXN1bHQucmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3I9ZXJyb3I7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuTmV4dD1mYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGNvbnRleHQg5p2h5Lu25byP44KS5a6f6KGM44GZ44KLXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbnRleHQ6YW55KTpib29sZWFue1xyXG4gICAgICAgIGNvbnN0IHRyZWUgPXRoaXMuZ2V0Q29uZGl0aW9uKHRoaXMucHJvcHMuY29uZGl0aW9uKTtcclxuICAgICAgICBpZighdHJlZSl7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu244KS6Kit5a6a44GV44KM44Gm44GE44G+44Gb44KTXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJlZS5ldmFsdWF0ZSh0cmVlLnJvb3QsY29udGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gY29uZGl0aW9uIOadoeS7tuW8j+ODhOODquODvOOCkuWPluW+l+OBmeOCi1xyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGdldENvbmRpdGlvbihjb25kaXRpb246c3RyaW5nKTpDb25kaXRpb25UcmVlfG51bGx7XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlID0gbmV3IENvbmRpdGlvblRyZWUoKTtcclxuICAgICAgICAgICAgdHJlZS5mcm9tSnNvbihjb25kaXRpb24pO1xyXG4gICAgICAgICAgICBpZih0cmVlLmdldENvbmRpdGlvbnModHJlZS5yb290KS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJlZTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxuICAgIFxyXG59XHJcbm5ldyBDb25kaXRpb25BY3Rpb24oKTsiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaW5qZWN0UGxhdGZvcm1EZXBzID0gZXhwb3J0cy5wbGF0Zm9ybURlcHMgPSB2b2lkIDA7XG5leHBvcnRzLnBsYXRmb3JtRGVwcyA9IHtcbiAgICByZWFkRmlsZUZyb21QYXRoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9LFxuICAgIGdldFJlcXVlc3RUb2tlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICBnZXREZWZhdWx0QXV0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICBidWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9LFxuICAgIGJ1aWxkSGVhZGVyczogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICBidWlsZEZvcm1EYXRhVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgYnVpbGRCYXNlVXJsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9LFxuICAgIGdldFZlcnNpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG59O1xudmFyIGluamVjdFBsYXRmb3JtRGVwcyA9IGZ1bmN0aW9uIChkZXBzKSB7XG4gICAgaWYgKGRlcHMucmVhZEZpbGVGcm9tUGF0aCkge1xuICAgICAgICBleHBvcnRzLnBsYXRmb3JtRGVwcy5yZWFkRmlsZUZyb21QYXRoID0gZGVwcy5yZWFkRmlsZUZyb21QYXRoO1xuICAgIH1cbiAgICBpZiAoZGVwcy5nZXRSZXF1ZXN0VG9rZW4pIHtcbiAgICAgICAgZXhwb3J0cy5wbGF0Zm9ybURlcHMuZ2V0UmVxdWVzdFRva2VuID0gZGVwcy5nZXRSZXF1ZXN0VG9rZW47XG4gICAgfVxuICAgIGlmIChkZXBzLmdldERlZmF1bHRBdXRoKSB7XG4gICAgICAgIGV4cG9ydHMucGxhdGZvcm1EZXBzLmdldERlZmF1bHRBdXRoID0gZGVwcy5nZXREZWZhdWx0QXV0aDtcbiAgICB9XG4gICAgaWYgKGRlcHMuYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZykge1xuICAgICAgICBleHBvcnRzLnBsYXRmb3JtRGVwcy5idWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnID1cbiAgICAgICAgICAgIGRlcHMuYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZztcbiAgICB9XG4gICAgaWYgKGRlcHMuYnVpbGRIZWFkZXJzKSB7XG4gICAgICAgIGV4cG9ydHMucGxhdGZvcm1EZXBzLmJ1aWxkSGVhZGVycyA9IGRlcHMuYnVpbGRIZWFkZXJzO1xuICAgIH1cbiAgICBpZiAoZGVwcy5idWlsZEZvcm1EYXRhVmFsdWUpIHtcbiAgICAgICAgZXhwb3J0cy5wbGF0Zm9ybURlcHMuYnVpbGRGb3JtRGF0YVZhbHVlID0gZGVwcy5idWlsZEZvcm1EYXRhVmFsdWU7XG4gICAgfVxuICAgIGlmIChkZXBzLmJ1aWxkQmFzZVVybCkge1xuICAgICAgICBleHBvcnRzLnBsYXRmb3JtRGVwcy5idWlsZEJhc2VVcmwgPSBkZXBzLmJ1aWxkQmFzZVVybDtcbiAgICB9XG4gICAgaWYgKGRlcHMuZ2V0VmVyc2lvbikge1xuICAgICAgICBleHBvcnRzLnBsYXRmb3JtRGVwcy5nZXRWZXJzaW9uID0gZGVwcy5nZXRWZXJzaW9uO1xuICAgIH1cbn07XG5leHBvcnRzLmluamVjdFBsYXRmb3JtRGVwcyA9IGluamVjdFBsYXRmb3JtRGVwcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yID0gdm9pZCAwO1xudmFyIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcihwbGF0Zm9ybSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgbWVzc2FnZSA9IFwiVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIFwiLmNvbmNhdChwbGF0Zm9ybSwgXCIgZW52aXJvbm1lbnRcIik7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSkgfHwgdGhpcztcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IjQ3VzdG9tX0Vycm9yX1R5cGVzXG4gICAgICAgIC8vIE1haW50YWlucyBwcm9wZXIgc3RhY2sgdHJhY2UgZm9yIHdoZXJlIG91ciBlcnJvciB3YXMgdGhyb3duIChvbmx5IGF2YWlsYWJsZSBvbiBWOClcbiAgICAgICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShfdGhpcywgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5uYW1lID0gXCJVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JcIjtcbiAgICAgICAgX3RoaXMucGxhdGZvcm0gPSBwbGF0Zm9ybTtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3dpa2kvQnJlYWtpbmctQ2hhbmdlcyNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmtcbiAgICAgICAgLy8gU2V0IHRoZSBwcm90b3R5cGUgZXhwbGljaXRseS5cbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IgPSBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IuanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBwYXJhbSB0eXBlTWFwIFtPYmplY3RdIE1hcCBvZiBNSU1FIHR5cGUgLT4gQXJyYXlbZXh0ZW5zaW9uc11cbiAqIEBwYXJhbSAuLi5cbiAqL1xuZnVuY3Rpb24gTWltZSgpIHtcbiAgdGhpcy5fdHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9leHRlbnNpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHRoaXMuZGVmaW5lKGFyZ3VtZW50c1tpXSk7XG4gIH1cblxuICB0aGlzLmRlZmluZSA9IHRoaXMuZGVmaW5lLmJpbmQodGhpcyk7XG4gIHRoaXMuZ2V0VHlwZSA9IHRoaXMuZ2V0VHlwZS5iaW5kKHRoaXMpO1xuICB0aGlzLmdldEV4dGVuc2lvbiA9IHRoaXMuZ2V0RXh0ZW5zaW9uLmJpbmQodGhpcyk7XG59XG5cbi8qKlxuICogRGVmaW5lIG1pbWV0eXBlIC0+IGV4dGVuc2lvbiBtYXBwaW5ncy4gIEVhY2gga2V5IGlzIGEgbWltZS10eXBlIHRoYXQgbWFwc1xuICogdG8gYW4gYXJyYXkgb2YgZXh0ZW5zaW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHR5cGUuICBUaGUgZmlyc3QgZXh0ZW5zaW9uIGlzXG4gKiB1c2VkIGFzIHRoZSBkZWZhdWx0IGV4dGVuc2lvbiBmb3IgdGhlIHR5cGUuXG4gKlxuICogZS5nLiBtaW1lLmRlZmluZSh7J2F1ZGlvL29nZycsIFsnb2dhJywgJ29nZycsICdzcHgnXX0pO1xuICpcbiAqIElmIGEgdHlwZSBkZWNsYXJlcyBhbiBleHRlbnNpb24gdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQsIGFuIGVycm9yIHdpbGxcbiAqIGJlIHRocm93bi4gIFRvIHN1cHByZXNzIHRoaXMgZXJyb3IgYW5kIGZvcmNlIHRoZSBleHRlbnNpb24gdG8gYmUgYXNzb2NpYXRlZFxuICogd2l0aCB0aGUgbmV3IHR5cGUsIHBhc3MgYGZvcmNlYD10cnVlLiAgQWx0ZXJuYXRpdmVseSwgeW91IG1heSBwcmVmaXggdGhlXG4gKiBleHRlbnNpb24gd2l0aCBcIipcIiB0byBtYXAgdGhlIHR5cGUgdG8gZXh0ZW5zaW9uLCB3aXRob3V0IG1hcHBpbmcgdGhlXG4gKiBleHRlbnNpb24gdG8gdGhlIHR5cGUuXG4gKlxuICogZS5nLiBtaW1lLmRlZmluZSh7J2F1ZGlvL3dhdicsIFsnd2F2J119LCB7J2F1ZGlvL3gtd2F2JywgWycqd2F2J119KTtcbiAqXG4gKlxuICogQHBhcmFtIG1hcCAoT2JqZWN0KSB0eXBlIGRlZmluaXRpb25zXG4gKiBAcGFyYW0gZm9yY2UgKEJvb2xlYW4pIGlmIHRydWUsIGZvcmNlIG92ZXJyaWRpbmcgb2YgZXhpc3RpbmcgZGVmaW5pdGlvbnNcbiAqL1xuTWltZS5wcm90b3R5cGUuZGVmaW5lID0gZnVuY3Rpb24odHlwZU1hcCwgZm9yY2UpIHtcbiAgZm9yIChsZXQgdHlwZSBpbiB0eXBlTWFwKSB7XG4gICAgbGV0IGV4dGVuc2lvbnMgPSB0eXBlTWFwW3R5cGVdLm1hcChmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdC50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuICAgIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGV4dCA9IGV4dGVuc2lvbnNbaV07XG5cbiAgICAgIC8vICcqJyBwcmVmaXggPSBub3QgdGhlIHByZWZlcnJlZCB0eXBlIGZvciB0aGlzIGV4dGVuc2lvbi4gIFNvIGZpeHVwIHRoZVxuICAgICAgLy8gZXh0ZW5zaW9uLCBhbmQgc2tpcCBpdC5cbiAgICAgIGlmIChleHRbMF0gPT09ICcqJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFmb3JjZSAmJiAoZXh0IGluIHRoaXMuX3R5cGVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0F0dGVtcHQgdG8gY2hhbmdlIG1hcHBpbmcgZm9yIFwiJyArIGV4dCArXG4gICAgICAgICAgJ1wiIGV4dGVuc2lvbiBmcm9tIFwiJyArIHRoaXMuX3R5cGVzW2V4dF0gKyAnXCIgdG8gXCInICsgdHlwZSArXG4gICAgICAgICAgJ1wiLiBQYXNzIGBmb3JjZT10cnVlYCB0byBhbGxvdyB0aGlzLCBvdGhlcndpc2UgcmVtb3ZlIFwiJyArIGV4dCArXG4gICAgICAgICAgJ1wiIGZyb20gdGhlIGxpc3Qgb2YgZXh0ZW5zaW9ucyBmb3IgXCInICsgdHlwZSArICdcIi4nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3R5cGVzW2V4dF0gPSB0eXBlO1xuICAgIH1cblxuICAgIC8vIFVzZSBmaXJzdCBleHRlbnNpb24gYXMgZGVmYXVsdFxuICAgIGlmIChmb3JjZSB8fCAhdGhpcy5fZXh0ZW5zaW9uc1t0eXBlXSkge1xuICAgICAgY29uc3QgZXh0ID0gZXh0ZW5zaW9uc1swXTtcbiAgICAgIHRoaXMuX2V4dGVuc2lvbnNbdHlwZV0gPSAoZXh0WzBdICE9PSAnKicpID8gZXh0IDogZXh0LnN1YnN0cigxKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogTG9va3VwIGEgbWltZSB0eXBlIGJhc2VkIG9uIGV4dGVuc2lvblxuICovXG5NaW1lLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24ocGF0aCkge1xuICBwYXRoID0gU3RyaW5nKHBhdGgpO1xuICBsZXQgbGFzdCA9IHBhdGgucmVwbGFjZSgvXi4qWy9cXFxcXS8sICcnKS50b0xvd2VyQ2FzZSgpO1xuICBsZXQgZXh0ID0gbGFzdC5yZXBsYWNlKC9eLipcXC4vLCAnJykudG9Mb3dlckNhc2UoKTtcblxuICBsZXQgaGFzUGF0aCA9IGxhc3QubGVuZ3RoIDwgcGF0aC5sZW5ndGg7XG4gIGxldCBoYXNEb3QgPSBleHQubGVuZ3RoIDwgbGFzdC5sZW5ndGggLSAxO1xuXG4gIHJldHVybiAoaGFzRG90IHx8ICFoYXNQYXRoKSAmJiB0aGlzLl90eXBlc1tleHRdIHx8IG51bGw7XG59O1xuXG4vKipcbiAqIFJldHVybiBmaWxlIGV4dGVuc2lvbiBhc3NvY2lhdGVkIHdpdGggYSBtaW1lIHR5cGVcbiAqL1xuTWltZS5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uID0gZnVuY3Rpb24odHlwZSkge1xuICB0eXBlID0gL15cXHMqKFteO1xcc10qKS8udGVzdCh0eXBlKSAmJiBSZWdFeHAuJDE7XG4gIHJldHVybiB0eXBlICYmIHRoaXMuX2V4dGVuc2lvbnNbdHlwZS50b0xvd2VyQ2FzZSgpXSB8fCBudWxsO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNaW1lO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XCJhcHBsaWNhdGlvbi9hbmRyZXctaW5zZXRcIjpbXCJlelwiXSxcImFwcGxpY2F0aW9uL2FwcGxpeHdhcmVcIjpbXCJhd1wiXSxcImFwcGxpY2F0aW9uL2F0b20reG1sXCI6W1wiYXRvbVwiXSxcImFwcGxpY2F0aW9uL2F0b21jYXQreG1sXCI6W1wiYXRvbWNhdFwiXSxcImFwcGxpY2F0aW9uL2F0b21kZWxldGVkK3htbFwiOltcImF0b21kZWxldGVkXCJdLFwiYXBwbGljYXRpb24vYXRvbXN2Yyt4bWxcIjpbXCJhdG9tc3ZjXCJdLFwiYXBwbGljYXRpb24vYXRzYy1kd2QreG1sXCI6W1wiZHdkXCJdLFwiYXBwbGljYXRpb24vYXRzYy1oZWxkK3htbFwiOltcImhlbGRcIl0sXCJhcHBsaWNhdGlvbi9hdHNjLXJzYXQreG1sXCI6W1wicnNhdFwiXSxcImFwcGxpY2F0aW9uL2Jkb2NcIjpbXCJiZG9jXCJdLFwiYXBwbGljYXRpb24vY2FsZW5kYXIreG1sXCI6W1wieGNzXCJdLFwiYXBwbGljYXRpb24vY2N4bWwreG1sXCI6W1wiY2N4bWxcIl0sXCJhcHBsaWNhdGlvbi9jZGZ4K3htbFwiOltcImNkZnhcIl0sXCJhcHBsaWNhdGlvbi9jZG1pLWNhcGFiaWxpdHlcIjpbXCJjZG1pYVwiXSxcImFwcGxpY2F0aW9uL2NkbWktY29udGFpbmVyXCI6W1wiY2RtaWNcIl0sXCJhcHBsaWNhdGlvbi9jZG1pLWRvbWFpblwiOltcImNkbWlkXCJdLFwiYXBwbGljYXRpb24vY2RtaS1vYmplY3RcIjpbXCJjZG1pb1wiXSxcImFwcGxpY2F0aW9uL2NkbWktcXVldWVcIjpbXCJjZG1pcVwiXSxcImFwcGxpY2F0aW9uL2N1LXNlZW1lXCI6W1wiY3VcIl0sXCJhcHBsaWNhdGlvbi9kYXNoK3htbFwiOltcIm1wZFwiXSxcImFwcGxpY2F0aW9uL2Rhdm1vdW50K3htbFwiOltcImRhdm1vdW50XCJdLFwiYXBwbGljYXRpb24vZG9jYm9vayt4bWxcIjpbXCJkYmtcIl0sXCJhcHBsaWNhdGlvbi9kc3NjK2RlclwiOltcImRzc2NcIl0sXCJhcHBsaWNhdGlvbi9kc3NjK3htbFwiOltcInhkc3NjXCJdLFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdFwiOltcImVzXCIsXCJlY21hXCJdLFwiYXBwbGljYXRpb24vZW1tYSt4bWxcIjpbXCJlbW1hXCJdLFwiYXBwbGljYXRpb24vZW1vdGlvbm1sK3htbFwiOltcImVtb3Rpb25tbFwiXSxcImFwcGxpY2F0aW9uL2VwdWIremlwXCI6W1wiZXB1YlwiXSxcImFwcGxpY2F0aW9uL2V4aVwiOltcImV4aVwiXSxcImFwcGxpY2F0aW9uL2V4cHJlc3NcIjpbXCJleHBcIl0sXCJhcHBsaWNhdGlvbi9mZHQreG1sXCI6W1wiZmR0XCJdLFwiYXBwbGljYXRpb24vZm9udC10ZHBmclwiOltcInBmclwiXSxcImFwcGxpY2F0aW9uL2dlbytqc29uXCI6W1wiZ2VvanNvblwiXSxcImFwcGxpY2F0aW9uL2dtbCt4bWxcIjpbXCJnbWxcIl0sXCJhcHBsaWNhdGlvbi9ncHgreG1sXCI6W1wiZ3B4XCJdLFwiYXBwbGljYXRpb24vZ3hmXCI6W1wiZ3hmXCJdLFwiYXBwbGljYXRpb24vZ3ppcFwiOltcImd6XCJdLFwiYXBwbGljYXRpb24vaGpzb25cIjpbXCJoanNvblwiXSxcImFwcGxpY2F0aW9uL2h5cGVyc3R1ZGlvXCI6W1wic3RrXCJdLFwiYXBwbGljYXRpb24vaW5rbWwreG1sXCI6W1wiaW5rXCIsXCJpbmttbFwiXSxcImFwcGxpY2F0aW9uL2lwZml4XCI6W1wiaXBmaXhcIl0sXCJhcHBsaWNhdGlvbi9pdHMreG1sXCI6W1wiaXRzXCJdLFwiYXBwbGljYXRpb24vamF2YS1hcmNoaXZlXCI6W1wiamFyXCIsXCJ3YXJcIixcImVhclwiXSxcImFwcGxpY2F0aW9uL2phdmEtc2VyaWFsaXplZC1vYmplY3RcIjpbXCJzZXJcIl0sXCJhcHBsaWNhdGlvbi9qYXZhLXZtXCI6W1wiY2xhc3NcIl0sXCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCI6W1wianNcIixcIm1qc1wiXSxcImFwcGxpY2F0aW9uL2pzb25cIjpbXCJqc29uXCIsXCJtYXBcIl0sXCJhcHBsaWNhdGlvbi9qc29uNVwiOltcImpzb241XCJdLFwiYXBwbGljYXRpb24vanNvbm1sK2pzb25cIjpbXCJqc29ubWxcIl0sXCJhcHBsaWNhdGlvbi9sZCtqc29uXCI6W1wianNvbmxkXCJdLFwiYXBwbGljYXRpb24vbGdyK3htbFwiOltcImxnclwiXSxcImFwcGxpY2F0aW9uL2xvc3QreG1sXCI6W1wibG9zdHhtbFwiXSxcImFwcGxpY2F0aW9uL21hYy1iaW5oZXg0MFwiOltcImhxeFwiXSxcImFwcGxpY2F0aW9uL21hYy1jb21wYWN0cHJvXCI6W1wiY3B0XCJdLFwiYXBwbGljYXRpb24vbWFkcyt4bWxcIjpbXCJtYWRzXCJdLFwiYXBwbGljYXRpb24vbWFuaWZlc3QranNvblwiOltcIndlYm1hbmlmZXN0XCJdLFwiYXBwbGljYXRpb24vbWFyY1wiOltcIm1yY1wiXSxcImFwcGxpY2F0aW9uL21hcmN4bWwreG1sXCI6W1wibXJjeFwiXSxcImFwcGxpY2F0aW9uL21hdGhlbWF0aWNhXCI6W1wibWFcIixcIm5iXCIsXCJtYlwiXSxcImFwcGxpY2F0aW9uL21hdGhtbCt4bWxcIjpbXCJtYXRobWxcIl0sXCJhcHBsaWNhdGlvbi9tYm94XCI6W1wibWJveFwiXSxcImFwcGxpY2F0aW9uL21lZGlhc2VydmVyY29udHJvbCt4bWxcIjpbXCJtc2NtbFwiXSxcImFwcGxpY2F0aW9uL21ldGFsaW5rK3htbFwiOltcIm1ldGFsaW5rXCJdLFwiYXBwbGljYXRpb24vbWV0YWxpbms0K3htbFwiOltcIm1ldGE0XCJdLFwiYXBwbGljYXRpb24vbWV0cyt4bWxcIjpbXCJtZXRzXCJdLFwiYXBwbGljYXRpb24vbW10LWFlaSt4bWxcIjpbXCJtYWVpXCJdLFwiYXBwbGljYXRpb24vbW10LXVzZCt4bWxcIjpbXCJtdXNkXCJdLFwiYXBwbGljYXRpb24vbW9kcyt4bWxcIjpbXCJtb2RzXCJdLFwiYXBwbGljYXRpb24vbXAyMVwiOltcIm0yMVwiLFwibXAyMVwiXSxcImFwcGxpY2F0aW9uL21wNFwiOltcIm1wNHNcIixcIm00cFwiXSxcImFwcGxpY2F0aW9uL21zd29yZFwiOltcImRvY1wiLFwiZG90XCJdLFwiYXBwbGljYXRpb24vbXhmXCI6W1wibXhmXCJdLFwiYXBwbGljYXRpb24vbi1xdWFkc1wiOltcIm5xXCJdLFwiYXBwbGljYXRpb24vbi10cmlwbGVzXCI6W1wibnRcIl0sXCJhcHBsaWNhdGlvbi9ub2RlXCI6W1wiY2pzXCJdLFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI6W1wiYmluXCIsXCJkbXNcIixcImxyZlwiLFwibWFyXCIsXCJzb1wiLFwiZGlzdFwiLFwiZGlzdHpcIixcInBrZ1wiLFwiYnBrXCIsXCJkdW1wXCIsXCJlbGNcIixcImRlcGxveVwiLFwiZXhlXCIsXCJkbGxcIixcImRlYlwiLFwiZG1nXCIsXCJpc29cIixcImltZ1wiLFwibXNpXCIsXCJtc3BcIixcIm1zbVwiLFwiYnVmZmVyXCJdLFwiYXBwbGljYXRpb24vb2RhXCI6W1wib2RhXCJdLFwiYXBwbGljYXRpb24vb2VicHMtcGFja2FnZSt4bWxcIjpbXCJvcGZcIl0sXCJhcHBsaWNhdGlvbi9vZ2dcIjpbXCJvZ3hcIl0sXCJhcHBsaWNhdGlvbi9vbWRvYyt4bWxcIjpbXCJvbWRvY1wiXSxcImFwcGxpY2F0aW9uL29uZW5vdGVcIjpbXCJvbmV0b2NcIixcIm9uZXRvYzJcIixcIm9uZXRtcFwiLFwib25lcGtnXCJdLFwiYXBwbGljYXRpb24vb3hwc1wiOltcIm94cHNcIl0sXCJhcHBsaWNhdGlvbi9wMnAtb3ZlcmxheSt4bWxcIjpbXCJyZWxvXCJdLFwiYXBwbGljYXRpb24vcGF0Y2gtb3BzLWVycm9yK3htbFwiOltcInhlclwiXSxcImFwcGxpY2F0aW9uL3BkZlwiOltcInBkZlwiXSxcImFwcGxpY2F0aW9uL3BncC1lbmNyeXB0ZWRcIjpbXCJwZ3BcIl0sXCJhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlXCI6W1wiYXNjXCIsXCJzaWdcIl0sXCJhcHBsaWNhdGlvbi9waWNzLXJ1bGVzXCI6W1wicHJmXCJdLFwiYXBwbGljYXRpb24vcGtjczEwXCI6W1wicDEwXCJdLFwiYXBwbGljYXRpb24vcGtjczctbWltZVwiOltcInA3bVwiLFwicDdjXCJdLFwiYXBwbGljYXRpb24vcGtjczctc2lnbmF0dXJlXCI6W1wicDdzXCJdLFwiYXBwbGljYXRpb24vcGtjczhcIjpbXCJwOFwiXSxcImFwcGxpY2F0aW9uL3BraXgtYXR0ci1jZXJ0XCI6W1wiYWNcIl0sXCJhcHBsaWNhdGlvbi9wa2l4LWNlcnRcIjpbXCJjZXJcIl0sXCJhcHBsaWNhdGlvbi9wa2l4LWNybFwiOltcImNybFwiXSxcImFwcGxpY2F0aW9uL3BraXgtcGtpcGF0aFwiOltcInBraXBhdGhcIl0sXCJhcHBsaWNhdGlvbi9wa2l4Y21wXCI6W1wicGtpXCJdLFwiYXBwbGljYXRpb24vcGxzK3htbFwiOltcInBsc1wiXSxcImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHRcIjpbXCJhaVwiLFwiZXBzXCIsXCJwc1wiXSxcImFwcGxpY2F0aW9uL3Byb3ZlbmFuY2UreG1sXCI6W1wicHJvdnhcIl0sXCJhcHBsaWNhdGlvbi9wc2tjK3htbFwiOltcInBza2N4bWxcIl0sXCJhcHBsaWNhdGlvbi9yYW1sK3lhbWxcIjpbXCJyYW1sXCJdLFwiYXBwbGljYXRpb24vcmRmK3htbFwiOltcInJkZlwiLFwib3dsXCJdLFwiYXBwbGljYXRpb24vcmVnaW5mbyt4bWxcIjpbXCJyaWZcIl0sXCJhcHBsaWNhdGlvbi9yZWxheC1uZy1jb21wYWN0LXN5bnRheFwiOltcInJuY1wiXSxcImFwcGxpY2F0aW9uL3Jlc291cmNlLWxpc3RzK3htbFwiOltcInJsXCJdLFwiYXBwbGljYXRpb24vcmVzb3VyY2UtbGlzdHMtZGlmZit4bWxcIjpbXCJybGRcIl0sXCJhcHBsaWNhdGlvbi9ybHMtc2VydmljZXMreG1sXCI6W1wicnNcIl0sXCJhcHBsaWNhdGlvbi9yb3V0ZS1hcGQreG1sXCI6W1wicmFwZFwiXSxcImFwcGxpY2F0aW9uL3JvdXRlLXMtdHNpZCt4bWxcIjpbXCJzbHNcIl0sXCJhcHBsaWNhdGlvbi9yb3V0ZS11c2QreG1sXCI6W1wicnVzZFwiXSxcImFwcGxpY2F0aW9uL3Jwa2ktZ2hvc3RidXN0ZXJzXCI6W1wiZ2JyXCJdLFwiYXBwbGljYXRpb24vcnBraS1tYW5pZmVzdFwiOltcIm1mdFwiXSxcImFwcGxpY2F0aW9uL3Jwa2ktcm9hXCI6W1wicm9hXCJdLFwiYXBwbGljYXRpb24vcnNkK3htbFwiOltcInJzZFwiXSxcImFwcGxpY2F0aW9uL3Jzcyt4bWxcIjpbXCJyc3NcIl0sXCJhcHBsaWNhdGlvbi9ydGZcIjpbXCJydGZcIl0sXCJhcHBsaWNhdGlvbi9zYm1sK3htbFwiOltcInNibWxcIl0sXCJhcHBsaWNhdGlvbi9zY3ZwLWN2LXJlcXVlc3RcIjpbXCJzY3FcIl0sXCJhcHBsaWNhdGlvbi9zY3ZwLWN2LXJlc3BvbnNlXCI6W1wic2NzXCJdLFwiYXBwbGljYXRpb24vc2N2cC12cC1yZXF1ZXN0XCI6W1wic3BxXCJdLFwiYXBwbGljYXRpb24vc2N2cC12cC1yZXNwb25zZVwiOltcInNwcFwiXSxcImFwcGxpY2F0aW9uL3NkcFwiOltcInNkcFwiXSxcImFwcGxpY2F0aW9uL3Nlbm1sK3htbFwiOltcInNlbm1seFwiXSxcImFwcGxpY2F0aW9uL3NlbnNtbCt4bWxcIjpbXCJzZW5zbWx4XCJdLFwiYXBwbGljYXRpb24vc2V0LXBheW1lbnQtaW5pdGlhdGlvblwiOltcInNldHBheVwiXSxcImFwcGxpY2F0aW9uL3NldC1yZWdpc3RyYXRpb24taW5pdGlhdGlvblwiOltcInNldHJlZ1wiXSxcImFwcGxpY2F0aW9uL3NoZit4bWxcIjpbXCJzaGZcIl0sXCJhcHBsaWNhdGlvbi9zaWV2ZVwiOltcInNpdlwiLFwic2lldmVcIl0sXCJhcHBsaWNhdGlvbi9zbWlsK3htbFwiOltcInNtaVwiLFwic21pbFwiXSxcImFwcGxpY2F0aW9uL3NwYXJxbC1xdWVyeVwiOltcInJxXCJdLFwiYXBwbGljYXRpb24vc3BhcnFsLXJlc3VsdHMreG1sXCI6W1wic3J4XCJdLFwiYXBwbGljYXRpb24vc3Jnc1wiOltcImdyYW1cIl0sXCJhcHBsaWNhdGlvbi9zcmdzK3htbFwiOltcImdyeG1sXCJdLFwiYXBwbGljYXRpb24vc3J1K3htbFwiOltcInNydVwiXSxcImFwcGxpY2F0aW9uL3NzZGwreG1sXCI6W1wic3NkbFwiXSxcImFwcGxpY2F0aW9uL3NzbWwreG1sXCI6W1wic3NtbFwiXSxcImFwcGxpY2F0aW9uL3N3aWQreG1sXCI6W1wic3dpZHRhZ1wiXSxcImFwcGxpY2F0aW9uL3RlaSt4bWxcIjpbXCJ0ZWlcIixcInRlaWNvcnB1c1wiXSxcImFwcGxpY2F0aW9uL3RocmF1ZCt4bWxcIjpbXCJ0ZmlcIl0sXCJhcHBsaWNhdGlvbi90aW1lc3RhbXBlZC1kYXRhXCI6W1widHNkXCJdLFwiYXBwbGljYXRpb24vdG9tbFwiOltcInRvbWxcIl0sXCJhcHBsaWNhdGlvbi90cmlnXCI6W1widHJpZ1wiXSxcImFwcGxpY2F0aW9uL3R0bWwreG1sXCI6W1widHRtbFwiXSxcImFwcGxpY2F0aW9uL3VianNvblwiOltcInVialwiXSxcImFwcGxpY2F0aW9uL3VyYy1yZXNzaGVldCt4bWxcIjpbXCJyc2hlZXRcIl0sXCJhcHBsaWNhdGlvbi91cmMtdGFyZ2V0ZGVzYyt4bWxcIjpbXCJ0ZFwiXSxcImFwcGxpY2F0aW9uL3ZvaWNleG1sK3htbFwiOltcInZ4bWxcIl0sXCJhcHBsaWNhdGlvbi93YXNtXCI6W1wid2FzbVwiXSxcImFwcGxpY2F0aW9uL3dpZGdldFwiOltcIndndFwiXSxcImFwcGxpY2F0aW9uL3dpbmhscFwiOltcImhscFwiXSxcImFwcGxpY2F0aW9uL3dzZGwreG1sXCI6W1wid3NkbFwiXSxcImFwcGxpY2F0aW9uL3dzcG9saWN5K3htbFwiOltcIndzcG9saWN5XCJdLFwiYXBwbGljYXRpb24veGFtbCt4bWxcIjpbXCJ4YW1sXCJdLFwiYXBwbGljYXRpb24veGNhcC1hdHQreG1sXCI6W1wieGF2XCJdLFwiYXBwbGljYXRpb24veGNhcC1jYXBzK3htbFwiOltcInhjYVwiXSxcImFwcGxpY2F0aW9uL3hjYXAtZGlmZit4bWxcIjpbXCJ4ZGZcIl0sXCJhcHBsaWNhdGlvbi94Y2FwLWVsK3htbFwiOltcInhlbFwiXSxcImFwcGxpY2F0aW9uL3hjYXAtbnMreG1sXCI6W1wieG5zXCJdLFwiYXBwbGljYXRpb24veGVuYyt4bWxcIjpbXCJ4ZW5jXCJdLFwiYXBwbGljYXRpb24veGh0bWwreG1sXCI6W1wieGh0bWxcIixcInhodFwiXSxcImFwcGxpY2F0aW9uL3hsaWZmK3htbFwiOltcInhsZlwiXSxcImFwcGxpY2F0aW9uL3htbFwiOltcInhtbFwiLFwieHNsXCIsXCJ4c2RcIixcInJuZ1wiXSxcImFwcGxpY2F0aW9uL3htbC1kdGRcIjpbXCJkdGRcIl0sXCJhcHBsaWNhdGlvbi94b3AreG1sXCI6W1wieG9wXCJdLFwiYXBwbGljYXRpb24veHByb2MreG1sXCI6W1wieHBsXCJdLFwiYXBwbGljYXRpb24veHNsdCt4bWxcIjpbXCIqeHNsXCIsXCJ4c2x0XCJdLFwiYXBwbGljYXRpb24veHNwZit4bWxcIjpbXCJ4c3BmXCJdLFwiYXBwbGljYXRpb24veHYreG1sXCI6W1wibXhtbFwiLFwieGh2bWxcIixcInh2bWxcIixcInh2bVwiXSxcImFwcGxpY2F0aW9uL3lhbmdcIjpbXCJ5YW5nXCJdLFwiYXBwbGljYXRpb24veWluK3htbFwiOltcInlpblwiXSxcImFwcGxpY2F0aW9uL3ppcFwiOltcInppcFwiXSxcImF1ZGlvLzNncHBcIjpbXCIqM2dwcFwiXSxcImF1ZGlvL2FkcGNtXCI6W1wiYWRwXCJdLFwiYXVkaW8vYW1yXCI6W1wiYW1yXCJdLFwiYXVkaW8vYmFzaWNcIjpbXCJhdVwiLFwic25kXCJdLFwiYXVkaW8vbWlkaVwiOltcIm1pZFwiLFwibWlkaVwiLFwia2FyXCIsXCJybWlcIl0sXCJhdWRpby9tb2JpbGUteG1mXCI6W1wibXhtZlwiXSxcImF1ZGlvL21wM1wiOltcIiptcDNcIl0sXCJhdWRpby9tcDRcIjpbXCJtNGFcIixcIm1wNGFcIl0sXCJhdWRpby9tcGVnXCI6W1wibXBnYVwiLFwibXAyXCIsXCJtcDJhXCIsXCJtcDNcIixcIm0yYVwiLFwibTNhXCJdLFwiYXVkaW8vb2dnXCI6W1wib2dhXCIsXCJvZ2dcIixcInNweFwiLFwib3B1c1wiXSxcImF1ZGlvL3MzbVwiOltcInMzbVwiXSxcImF1ZGlvL3NpbGtcIjpbXCJzaWxcIl0sXCJhdWRpby93YXZcIjpbXCJ3YXZcIl0sXCJhdWRpby93YXZlXCI6W1wiKndhdlwiXSxcImF1ZGlvL3dlYm1cIjpbXCJ3ZWJhXCJdLFwiYXVkaW8veG1cIjpbXCJ4bVwiXSxcImZvbnQvY29sbGVjdGlvblwiOltcInR0Y1wiXSxcImZvbnQvb3RmXCI6W1wib3RmXCJdLFwiZm9udC90dGZcIjpbXCJ0dGZcIl0sXCJmb250L3dvZmZcIjpbXCJ3b2ZmXCJdLFwiZm9udC93b2ZmMlwiOltcIndvZmYyXCJdLFwiaW1hZ2UvYWNlc1wiOltcImV4clwiXSxcImltYWdlL2FwbmdcIjpbXCJhcG5nXCJdLFwiaW1hZ2UvYXZpZlwiOltcImF2aWZcIl0sXCJpbWFnZS9ibXBcIjpbXCJibXBcIl0sXCJpbWFnZS9jZ21cIjpbXCJjZ21cIl0sXCJpbWFnZS9kaWNvbS1ybGVcIjpbXCJkcmxlXCJdLFwiaW1hZ2UvZW1mXCI6W1wiZW1mXCJdLFwiaW1hZ2UvZml0c1wiOltcImZpdHNcIl0sXCJpbWFnZS9nM2ZheFwiOltcImczXCJdLFwiaW1hZ2UvZ2lmXCI6W1wiZ2lmXCJdLFwiaW1hZ2UvaGVpY1wiOltcImhlaWNcIl0sXCJpbWFnZS9oZWljLXNlcXVlbmNlXCI6W1wiaGVpY3NcIl0sXCJpbWFnZS9oZWlmXCI6W1wiaGVpZlwiXSxcImltYWdlL2hlaWYtc2VxdWVuY2VcIjpbXCJoZWlmc1wiXSxcImltYWdlL2hlajJrXCI6W1wiaGVqMlwiXSxcImltYWdlL2hzajJcIjpbXCJoc2oyXCJdLFwiaW1hZ2UvaWVmXCI6W1wiaWVmXCJdLFwiaW1hZ2UvamxzXCI6W1wiamxzXCJdLFwiaW1hZ2UvanAyXCI6W1wianAyXCIsXCJqcGcyXCJdLFwiaW1hZ2UvanBlZ1wiOltcImpwZWdcIixcImpwZ1wiLFwianBlXCJdLFwiaW1hZ2UvanBoXCI6W1wianBoXCJdLFwiaW1hZ2UvanBoY1wiOltcImpoY1wiXSxcImltYWdlL2pwbVwiOltcImpwbVwiXSxcImltYWdlL2pweFwiOltcImpweFwiLFwianBmXCJdLFwiaW1hZ2UvanhyXCI6W1wianhyXCJdLFwiaW1hZ2UvanhyYVwiOltcImp4cmFcIl0sXCJpbWFnZS9qeHJzXCI6W1wianhyc1wiXSxcImltYWdlL2p4c1wiOltcImp4c1wiXSxcImltYWdlL2p4c2NcIjpbXCJqeHNjXCJdLFwiaW1hZ2UvanhzaVwiOltcImp4c2lcIl0sXCJpbWFnZS9qeHNzXCI6W1wianhzc1wiXSxcImltYWdlL2t0eFwiOltcImt0eFwiXSxcImltYWdlL2t0eDJcIjpbXCJrdHgyXCJdLFwiaW1hZ2UvcG5nXCI6W1wicG5nXCJdLFwiaW1hZ2Uvc2dpXCI6W1wic2dpXCJdLFwiaW1hZ2Uvc3ZnK3htbFwiOltcInN2Z1wiLFwic3ZnelwiXSxcImltYWdlL3QzOFwiOltcInQzOFwiXSxcImltYWdlL3RpZmZcIjpbXCJ0aWZcIixcInRpZmZcIl0sXCJpbWFnZS90aWZmLWZ4XCI6W1widGZ4XCJdLFwiaW1hZ2Uvd2VicFwiOltcIndlYnBcIl0sXCJpbWFnZS93bWZcIjpbXCJ3bWZcIl0sXCJtZXNzYWdlL2Rpc3Bvc2l0aW9uLW5vdGlmaWNhdGlvblwiOltcImRpc3Bvc2l0aW9uLW5vdGlmaWNhdGlvblwiXSxcIm1lc3NhZ2UvZ2xvYmFsXCI6W1widThtc2dcIl0sXCJtZXNzYWdlL2dsb2JhbC1kZWxpdmVyeS1zdGF0dXNcIjpbXCJ1OGRzblwiXSxcIm1lc3NhZ2UvZ2xvYmFsLWRpc3Bvc2l0aW9uLW5vdGlmaWNhdGlvblwiOltcInU4bWRuXCJdLFwibWVzc2FnZS9nbG9iYWwtaGVhZGVyc1wiOltcInU4aGRyXCJdLFwibWVzc2FnZS9yZmM4MjJcIjpbXCJlbWxcIixcIm1pbWVcIl0sXCJtb2RlbC8zbWZcIjpbXCIzbWZcIl0sXCJtb2RlbC9nbHRmK2pzb25cIjpbXCJnbHRmXCJdLFwibW9kZWwvZ2x0Zi1iaW5hcnlcIjpbXCJnbGJcIl0sXCJtb2RlbC9pZ2VzXCI6W1wiaWdzXCIsXCJpZ2VzXCJdLFwibW9kZWwvbWVzaFwiOltcIm1zaFwiLFwibWVzaFwiLFwic2lsb1wiXSxcIm1vZGVsL210bFwiOltcIm10bFwiXSxcIm1vZGVsL29ialwiOltcIm9ialwiXSxcIm1vZGVsL3N0ZXAreG1sXCI6W1wic3RweFwiXSxcIm1vZGVsL3N0ZXAremlwXCI6W1wic3RwelwiXSxcIm1vZGVsL3N0ZXAteG1sK3ppcFwiOltcInN0cHh6XCJdLFwibW9kZWwvc3RsXCI6W1wic3RsXCJdLFwibW9kZWwvdnJtbFwiOltcIndybFwiLFwidnJtbFwiXSxcIm1vZGVsL3gzZCtiaW5hcnlcIjpbXCIqeDNkYlwiLFwieDNkYnpcIl0sXCJtb2RlbC94M2QrZmFzdGluZm9zZXRcIjpbXCJ4M2RiXCJdLFwibW9kZWwveDNkK3ZybWxcIjpbXCIqeDNkdlwiLFwieDNkdnpcIl0sXCJtb2RlbC94M2QreG1sXCI6W1wieDNkXCIsXCJ4M2R6XCJdLFwibW9kZWwveDNkLXZybWxcIjpbXCJ4M2R2XCJdLFwidGV4dC9jYWNoZS1tYW5pZmVzdFwiOltcImFwcGNhY2hlXCIsXCJtYW5pZmVzdFwiXSxcInRleHQvY2FsZW5kYXJcIjpbXCJpY3NcIixcImlmYlwiXSxcInRleHQvY29mZmVlc2NyaXB0XCI6W1wiY29mZmVlXCIsXCJsaXRjb2ZmZWVcIl0sXCJ0ZXh0L2Nzc1wiOltcImNzc1wiXSxcInRleHQvY3N2XCI6W1wiY3N2XCJdLFwidGV4dC9odG1sXCI6W1wiaHRtbFwiLFwiaHRtXCIsXCJzaHRtbFwiXSxcInRleHQvamFkZVwiOltcImphZGVcIl0sXCJ0ZXh0L2pzeFwiOltcImpzeFwiXSxcInRleHQvbGVzc1wiOltcImxlc3NcIl0sXCJ0ZXh0L21hcmtkb3duXCI6W1wibWFya2Rvd25cIixcIm1kXCJdLFwidGV4dC9tYXRobWxcIjpbXCJtbWxcIl0sXCJ0ZXh0L21keFwiOltcIm1keFwiXSxcInRleHQvbjNcIjpbXCJuM1wiXSxcInRleHQvcGxhaW5cIjpbXCJ0eHRcIixcInRleHRcIixcImNvbmZcIixcImRlZlwiLFwibGlzdFwiLFwibG9nXCIsXCJpblwiLFwiaW5pXCJdLFwidGV4dC9yaWNodGV4dFwiOltcInJ0eFwiXSxcInRleHQvcnRmXCI6W1wiKnJ0ZlwiXSxcInRleHQvc2dtbFwiOltcInNnbWxcIixcInNnbVwiXSxcInRleHQvc2hleFwiOltcInNoZXhcIl0sXCJ0ZXh0L3NsaW1cIjpbXCJzbGltXCIsXCJzbG1cIl0sXCJ0ZXh0L3NwZHhcIjpbXCJzcGR4XCJdLFwidGV4dC9zdHlsdXNcIjpbXCJzdHlsdXNcIixcInN0eWxcIl0sXCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzXCI6W1widHN2XCJdLFwidGV4dC90cm9mZlwiOltcInRcIixcInRyXCIsXCJyb2ZmXCIsXCJtYW5cIixcIm1lXCIsXCJtc1wiXSxcInRleHQvdHVydGxlXCI6W1widHRsXCJdLFwidGV4dC91cmktbGlzdFwiOltcInVyaVwiLFwidXJpc1wiLFwidXJsc1wiXSxcInRleHQvdmNhcmRcIjpbXCJ2Y2FyZFwiXSxcInRleHQvdnR0XCI6W1widnR0XCJdLFwidGV4dC94bWxcIjpbXCIqeG1sXCJdLFwidGV4dC95YW1sXCI6W1wieWFtbFwiLFwieW1sXCJdLFwidmlkZW8vM2dwcFwiOltcIjNncFwiLFwiM2dwcFwiXSxcInZpZGVvLzNncHAyXCI6W1wiM2cyXCJdLFwidmlkZW8vaDI2MVwiOltcImgyNjFcIl0sXCJ2aWRlby9oMjYzXCI6W1wiaDI2M1wiXSxcInZpZGVvL2gyNjRcIjpbXCJoMjY0XCJdLFwidmlkZW8vaXNvLnNlZ21lbnRcIjpbXCJtNHNcIl0sXCJ2aWRlby9qcGVnXCI6W1wianBndlwiXSxcInZpZGVvL2pwbVwiOltcIipqcG1cIixcImpwZ21cIl0sXCJ2aWRlby9tajJcIjpbXCJtajJcIixcIm1qcDJcIl0sXCJ2aWRlby9tcDJ0XCI6W1widHNcIl0sXCJ2aWRlby9tcDRcIjpbXCJtcDRcIixcIm1wNHZcIixcIm1wZzRcIl0sXCJ2aWRlby9tcGVnXCI6W1wibXBlZ1wiLFwibXBnXCIsXCJtcGVcIixcIm0xdlwiLFwibTJ2XCJdLFwidmlkZW8vb2dnXCI6W1wib2d2XCJdLFwidmlkZW8vcXVpY2t0aW1lXCI6W1wicXRcIixcIm1vdlwiXSxcInZpZGVvL3dlYm1cIjpbXCJ3ZWJtXCJdfTsiLCIndXNlIHN0cmljdCc7XG5cbmxldCBNaW1lID0gcmVxdWlyZSgnLi9NaW1lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBNaW1lKHJlcXVpcmUoJy4vdHlwZXMvc3RhbmRhcmQnKSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VmVyc2lvbiA9IGV4cG9ydHMuYnVpbGRCYXNlVXJsID0gZXhwb3J0cy5idWlsZEZvcm1EYXRhVmFsdWUgPSBleHBvcnRzLmJ1aWxkSGVhZGVycyA9IGV4cG9ydHMuYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZyA9IGV4cG9ydHMuZ2V0RGVmYXVsdEF1dGggPSBleHBvcnRzLmdldFJlcXVlc3RUb2tlbiA9IGV4cG9ydHMucmVhZEZpbGVGcm9tUGF0aCA9IHZvaWQgMDtcbnZhciBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JfMSA9IHJlcXVpcmUoXCIuL1Vuc3VwcG9ydGVkUGxhdGZvcm1FcnJvclwiKTtcbnZhciBsaXRlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm1pbWUvbGl0ZVwiKSk7XG52YXIgcGFja2FnZV9qc29uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhY2thZ2UuanNvblwiKSk7XG52YXIgcmVhZEZpbGVGcm9tUGF0aCA9IGZ1bmN0aW9uIChmaWxlUGF0aCkge1xuICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JfMS5VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IoXCJCcm93c2VyXCIpO1xufTtcbmV4cG9ydHMucmVhZEZpbGVGcm9tUGF0aCA9IHJlYWRGaWxlRnJvbVBhdGg7XG52YXIgZ2V0UmVxdWVzdFRva2VuID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBraW50b25lID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBraW50b25lICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2Yga2ludG9uZS5nZXRSZXF1ZXN0VG9rZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGtpbnRvbmUuZ2V0UmVxdWVzdFRva2VuKCldO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZ2Fyb29uID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBnYXJvb24gIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiAoKF9iID0gKF9hID0gZ2Fyb29uLmNvbm5lY3QpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5raW50b25lKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZ2V0UmVxdWVzdFRva2VuKSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZ2Fyb29uLmNvbm5lY3Qua2ludG9uZS5nZXRSZXF1ZXN0VG9rZW4oKV07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2Vzc2lvbiBhdXRoZW50aWNhdGlvbiBtdXN0IHNwZWNpZnkgYSByZXF1ZXN0IHRva2VuXCIpO1xuICAgIH0pO1xufSk7IH07XG5leHBvcnRzLmdldFJlcXVlc3RUb2tlbiA9IGdldFJlcXVlc3RUb2tlbjtcbnZhciBnZXREZWZhdWx0QXV0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInNlc3Npb25cIixcbiAgICB9O1xufTtcbmV4cG9ydHMuZ2V0RGVmYXVsdEF1dGggPSBnZXREZWZhdWx0QXV0aDtcbnZhciBidWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7fTtcbn07XG5leHBvcnRzLmJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWcgPSBidWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnO1xudmFyIGJ1aWxkSGVhZGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge307XG59O1xuZXhwb3J0cy5idWlsZEhlYWRlcnMgPSBidWlsZEhlYWRlcnM7XG52YXIgYnVpbGRGb3JtRGF0YVZhbHVlID0gZnVuY3Rpb24gKGRhdGEsIGZpbGVOYW1lKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7fTtcbiAgICBpZiAoZmlsZU5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy50eXBlID0gbGl0ZV8xLmRlZmF1bHQuZ2V0VHlwZShmaWxlTmFtZSkgfHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEJsb2IoW2RhdGFdLCBvcHRpb25zKTtcbn07XG5leHBvcnRzLmJ1aWxkRm9ybURhdGFWYWx1ZSA9IGJ1aWxkRm9ybURhdGFWYWx1ZTtcbnZhciBidWlsZEJhc2VVcmwgPSBmdW5jdGlvbiAoYmFzZVVybCkge1xuICAgIGlmIChiYXNlVXJsKSB7XG4gICAgICAgIHJldHVybiBiYXNlVXJsO1xuICAgIH1cbiAgICBpZiAobG9jYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgYmFzZVVybCBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZW52aXJvbm1lbnRcIik7XG4gICAgfVxuICAgIHZhciBob3N0ID0gbG9jYXRpb24uaG9zdCwgcHJvdG9jb2wgPSBsb2NhdGlvbi5wcm90b2NvbDtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQocHJvdG9jb2wsIFwiLy9cIikuY29uY2F0KGhvc3QpO1xufTtcbmV4cG9ydHMuYnVpbGRCYXNlVXJsID0gYnVpbGRCYXNlVXJsO1xudmFyIGdldFZlcnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHBhY2thZ2VfanNvbl8xLmRlZmF1bHQudmVyc2lvbjtcbn07XG5leHBvcnRzLmdldFZlcnNpb24gPSBnZXRWZXJzaW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnJvd3Nlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYnVpbGRQYXRoID0gdm9pZCAwO1xudmFyIGJ1aWxkUGF0aCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICB2YXIgZW5kcG9pbnROYW1lID0gcGFyYW1zLmVuZHBvaW50TmFtZSwgZ3Vlc3RTcGFjZUlkID0gcGFyYW1zLmd1ZXN0U3BhY2VJZCwgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3O1xuICAgIHZhciBndWVzdFBhdGggPSBndWVzdFNwYWNlSWQgIT09IHVuZGVmaW5lZCA/IFwiL2d1ZXN0L1wiLmNvbmNhdChndWVzdFNwYWNlSWQpIDogXCJcIjtcbiAgICB2YXIgcHJldmlld1BhdGggPSBwcmV2aWV3ID8gXCIvcHJldmlld1wiIDogXCJcIjtcbiAgICByZXR1cm4gXCIva1wiLmNvbmNhdChndWVzdFBhdGgsIFwiL3YxXCIpLmNvbmNhdChwcmV2aWV3UGF0aCwgXCIvXCIpLmNvbmNhdChlbmRwb2ludE5hbWUsIFwiLmpzb25cIik7XG59O1xuZXhwb3J0cy5idWlsZFBhdGggPSBidWlsZFBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYXNlQ2xpZW50ID0gdm9pZCAwO1xudmFyIHVybF8xID0gcmVxdWlyZShcIi4uL3VybFwiKTtcbnZhciBCYXNlQ2xpZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEJhc2VDbGllbnQoY2xpZW50LCBndWVzdFNwYWNlSWQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgICAgIHRoaXMuZ3Vlc3RTcGFjZUlkID0gZ3Vlc3RTcGFjZUlkO1xuICAgIH1cbiAgICBCYXNlQ2xpZW50LnByb3RvdHlwZS5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gKDAsIHVybF8xLmJ1aWxkUGF0aCkoX19hc3NpZ24oX19hc3NpZ24oe30sIHBhcmFtcyksIHsgZ3Vlc3RTcGFjZUlkOiB0aGlzLmd1ZXN0U3BhY2VJZCB9KSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBlbmRwb2ludCBmb3IgdGhlIEFQSSB0aGF0IGRvZXMgbm90IHN1cHBvcnQgdGhlIGd1ZXN0IHNwYWNlIFVSTC5cbiAgICAgKiBPdGhlcndpc2UsIHBsZWFzZSB1c2UgYGJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWRgIGluc3RlYWQuXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBCYXNlQ2xpZW50LnByb3RvdHlwZS5idWlsZFBhdGggPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiAoMCwgdXJsXzEuYnVpbGRQYXRoKShwYXJhbXMpO1xuICAgIH07XG4gICAgcmV0dXJuIEJhc2VDbGllbnQ7XG59KCkpO1xuZXhwb3J0cy5CYXNlQ2xpZW50ID0gQmFzZUNsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJhc2VDbGllbnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQnVsa1JlcXVlc3RDbGllbnQgPSB2b2lkIDA7XG52YXIgQmFzZUNsaWVudF8xID0gcmVxdWlyZShcIi4vQmFzZUNsaWVudFwiKTtcbnZhciBCdWxrUmVxdWVzdENsaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQnVsa1JlcXVlc3RDbGllbnQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQnVsa1JlcXVlc3RDbGllbnQoY2xpZW50LCBndWVzdFNwYWNlSWQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgY2xpZW50LCBndWVzdFNwYWNlSWQpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLlJFUVVFU1RTX0xFTkdUSF9MSU1JVCA9IDIwO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEJ1bGtSZXF1ZXN0Q2xpZW50LnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgcmVxdWVzdHNQYXJhbSA9IHBhcmFtcy5yZXF1ZXN0cztcbiAgICAgICAgdmFyIHJlcXVlc3RzID0gcmVxdWVzdHNQYXJhbS5tYXAoZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgICAgICAgICAgIGlmIChcImVuZHBvaW50TmFtZVwiIGluIHJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW5kcG9pbnROYW1lID0gcmVxdWVzdC5lbmRwb2ludE5hbWUsIHJlc3QgPSBfX3Jlc3QocmVxdWVzdCwgW1wiZW5kcG9pbnROYW1lXCJdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19hc3NpZ24oeyBhcGk6IF90aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoeyBlbmRwb2ludE5hbWU6IGVuZHBvaW50TmFtZSB9KSB9LCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImJ1bGtSZXF1ZXN0XCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCB7IHJlcXVlc3RzOiByZXF1ZXN0cyB9KTtcbiAgICB9O1xuICAgIHJldHVybiBCdWxrUmVxdWVzdENsaWVudDtcbn0oQmFzZUNsaWVudF8xLkJhc2VDbGllbnQpKTtcbmV4cG9ydHMuQnVsa1JlcXVlc3RDbGllbnQgPSBCdWxrUmVxdWVzdENsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJ1bGtSZXF1ZXN0Q2xpZW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFwcENsaWVudCA9IHZvaWQgMDtcbnZhciBCYXNlQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9CYXNlQ2xpZW50XCIpO1xudmFyIEFwcENsaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXBwQ2xpZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFwcENsaWVudCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldEZvcm1GaWVsZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9mb3JtL2ZpZWxkc1wiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgX19hc3NpZ24oe30sIHJlc3QpKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuYWRkRm9ybUZpZWxkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9mb3JtL2ZpZWxkc1wiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZUZvcm1GaWVsZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9maWVsZHNcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmRlbGV0ZUZvcm1GaWVsZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9maWVsZHNcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsZXRlKHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldEZvcm1MYXlvdXQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9mb3JtL2xheW91dFwiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgX19hc3NpZ24oe30sIHJlc3QpKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlRm9ybUxheW91dCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9mb3JtL2xheW91dFwiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0Vmlld3MgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC92aWV3c1wiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcmVzdCk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZVZpZXdzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3ZpZXdzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRBcHAgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHBcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0QXBwcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcHNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuYWRkQXBwID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSwgc3BhY2UsIHBhdGgsIHNwYWNlUGF0aCwgZGVmYXVsdFRocmVhZDtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwYXJhbXMubmFtZSwgc3BhY2UgPSBwYXJhbXMuc3BhY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGFjZSkgcmV0dXJuIFszIC8qYnJlYWsqLywgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFjZVBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJzcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmNsaWVudC5nZXQoc3BhY2VQYXRoLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUaHJlYWQgPSAoX2Euc2VudCgpKS5kZWZhdWx0VGhyZWFkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgX19hc3NpZ24oX19hc3NpZ24oe30sIHBhcmFtcyksIHsgdGhyZWFkOiBkZWZhdWx0VGhyZWFkIH0pKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgeyBuYW1lOiBuYW1lIH0pXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldEFwcFNldHRpbmdzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvc2V0dGluZ3NcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHJlc3QpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVBcHBTZXR0aW5ncyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9zZXR0aW5nc1wiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0UHJvY2Vzc01hbmFnZW1lbnQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9zdGF0dXNcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHJlc3QpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVQcm9jZXNzTWFuYWdlbWVudCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9zdGF0dXNcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldERlcGxveVN0YXR1cyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9kZXBsb3lcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmRlcGxveUFwcCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9kZXBsb3lcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRGaWVsZEFjbCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiZmllbGQvYWNsXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBfX2Fzc2lnbih7fSwgcmVzdCkpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVGaWVsZEFjbCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgLy8gTk9URTogV2hlbiBleGVjdXRpbmcgdGhpcyBBUEkgd2l0aG91dCBgcHJldmlld2AsXG4gICAgICAgIC8vIGFsbCBwcmUtbGl2ZSBhcHAncyBzZXR0aW5ncyB3aWxsIGJlIGRlcGxveWVkIHRvIGxpdmUgYXBwLlxuICAgICAgICAvLyBUaGlzIGJlaGF2aW9yIG1heSBub3QgYmUgd2hhdCB0aGUgdXNlcnMgZXhwZWN0ZWQsXG4gICAgICAgIC8vIHNvIHdlIGRpc2FibGUgaXQgdGVtcG9yYXJpbHkuXG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJmaWVsZC9hY2xcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldEFwcEFjbCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2FjbFwiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgX19hc3NpZ24oe30sIHJlc3QpKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlQXBwQWNsID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAvLyBOT1RFOiBXaGVuIGV4ZWN1dGluZyB0aGlzIEFQSSB3aXRob3V0IGBwcmV2aWV3YCxcbiAgICAgICAgLy8gYWxsIHByZS1saXZlIGFwcCdzIHNldHRpbmdzIHdpbGwgYmUgZGVwbG95ZWQgdG8gbGl2ZSBhcHAuXG4gICAgICAgIC8vIFRoaXMgYmVoYXZpb3IgbWF5IG5vdCBiZSB3aGF0IHRoZSB1c2VycyBleHBlY3RlZCxcbiAgICAgICAgLy8gc28gd2UgZGlzYWJsZSBpdCB0ZW1wb3JhcmlseS5cbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9hY2xcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmV2YWx1YXRlUmVjb3Jkc0FjbCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHMvYWNsL2V2YWx1YXRlXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldFJlY29yZEFjbCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL2FjbFwiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgX19hc3NpZ24oe30sIHJlc3QpKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlUmVjb3JkQWNsID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAvLyBOT1RFOiBXaGVuIGV4ZWN1dGluZyB0aGlzIEFQSSB3aXRob3V0IGBwcmV2aWV3YCxcbiAgICAgICAgLy8gYWxsIHByZS1saXZlIGFwcCdzIHNldHRpbmdzIHdpbGwgYmUgZGVwbG95ZWQgdG8gbGl2ZSBhcHAuXG4gICAgICAgIC8vIFRoaXMgYmVoYXZpb3IgbWF5IG5vdCBiZSB3aGF0IHRoZSB1c2VycyBleHBlY3RlZCxcbiAgICAgICAgLy8gc28gd2UgZGlzYWJsZSBpdCB0ZW1wb3JhcmlseS5cbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9hY2xcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldEFwcEN1c3RvbWl6ZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2N1c3RvbWl6ZVwiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgX19hc3NpZ24oe30sIHJlc3QpKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlQXBwQ3VzdG9taXplID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2N1c3RvbWl6ZVwiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0R2VuZXJhbE5vdGlmaWNhdGlvbnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9ub3RpZmljYXRpb25zL2dlbmVyYWxcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIF9fYXNzaWduKHt9LCByZXN0KSk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZUdlbmVyYWxOb3RpZmljYXRpb25zID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvZ2VuZXJhbFwiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0UGVyUmVjb3JkTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvcGVyUmVjb3JkXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlUGVyUmVjb3JkTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9ub3RpZmljYXRpb25zL3BlclJlY29yZFwiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0UmVtaW5kZXJOb3RpZmljYXRpb25zID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvbm90aWZpY2F0aW9ucy9yZW1pbmRlclwiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcmVzdCk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZVJlbWluZGVyTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9ub3RpZmljYXRpb25zL3JlbWluZGVyXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRSZXBvcnRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvcmVwb3J0c1wiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcmVzdCk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZVJlcG9ydHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvcmVwb3J0c1wiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0QXBwQWN0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2FjdGlvbnNcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHJlc3QpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVBcHBBY3Rpb25zID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2FjdGlvbnNcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICByZXR1cm4gQXBwQ2xpZW50O1xufShCYXNlQ2xpZW50XzEuQmFzZUNsaWVudCkpO1xuZXhwb3J0cy5BcHBDbGllbnQgPSBBcHBDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BcHBDbGllbnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5LaW50b25lQWJvcnRTZWFyY2hFcnJvciA9IHZvaWQgMDtcbnZhciBLaW50b25lQWJvcnRTZWFyY2hFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoS2ludG9uZUFib3J0U2VhcmNoRXJyb3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gS2ludG9uZUFib3J0U2VhcmNoRXJyb3IobWVzc2FnZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5uYW1lID0gXCJLaW50b25lQWJvcnRTZWFyY2hFcnJvclwiO1xuICAgICAgICBfdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3dpa2kvQnJlYWtpbmctQ2hhbmdlcyNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmtcbiAgICAgICAgLy8gU2V0IHRoZSBwcm90b3R5cGUgZXhwbGljaXRseS5cbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBLaW50b25lQWJvcnRTZWFyY2hFcnJvci5wcm90b3R5cGUpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBLaW50b25lQWJvcnRTZWFyY2hFcnJvcjtcbn0oRXJyb3IpKTtcbmV4cG9ydHMuS2ludG9uZUFib3J0U2VhcmNoRXJyb3IgPSBLaW50b25lQWJvcnRTZWFyY2hFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUtpbnRvbmVBYm9ydFNlYXJjaEVycm9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuS2ludG9uZUFsbFJlY29yZHNFcnJvciA9IHZvaWQgMDtcbnZhciBLaW50b25lQWxsUmVjb3Jkc0Vycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhLaW50b25lQWxsUmVjb3Jkc0Vycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IocHJvY2Vzc2VkUmVjb3Jkc1Jlc3VsdCwgdW5wcm9jZXNzZWRSZWNvcmRzLCBudW1PZkFsbFJlY29yZHMsIGVycm9yLCBjaHVua0xlbmd0aCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgbnVtT2ZQcm9jZXNzZWRSZWNvcmRzID0gbnVtT2ZBbGxSZWNvcmRzIC0gdW5wcm9jZXNzZWRSZWNvcmRzLmxlbmd0aDtcbiAgICAgICAgdmFyIGVycm9ySW5kZXggPSBLaW50b25lQWxsUmVjb3Jkc0Vycm9yLmV4dHJhY3RFcnJvckluZGV4KG51bU9mUHJvY2Vzc2VkUmVjb3JkcywgZXJyb3IsIGNodW5rTGVuZ3RoKTtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBLaW50b25lQWxsUmVjb3Jkc0Vycm9yLmJ1aWxkRXJyb3JNZXNzYWdlKG51bU9mUHJvY2Vzc2VkUmVjb3JkcywgbnVtT2ZBbGxSZWNvcmRzLCBlcnJvckluZGV4KTtcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5uYW1lID0gXCJLaW50b25lQWxsUmVjb3Jkc0Vycm9yXCI7XG4gICAgICAgIF90aGlzLnByb2Nlc3NlZFJlY29yZHNSZXN1bHQgPSBwcm9jZXNzZWRSZWNvcmRzUmVzdWx0O1xuICAgICAgICBfdGhpcy51bnByb2Nlc3NlZFJlY29yZHMgPSB1bnByb2Nlc3NlZFJlY29yZHM7XG4gICAgICAgIF90aGlzLmVycm9yID0gZXJyb3I7XG4gICAgICAgIF90aGlzLmVycm9ySW5kZXggPSBlcnJvckluZGV4O1xuICAgICAgICBfdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgX3RoaXMubnVtT2ZQcm9jZXNzZWRSZWNvcmRzID0gbnVtT2ZQcm9jZXNzZWRSZWNvcmRzO1xuICAgICAgICBfdGhpcy5udW1PZkFsbFJlY29yZHMgPSBudW1PZkFsbFJlY29yZHM7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC93aWtpL0JyZWFraW5nLUNoYW5nZXMjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrXG4gICAgICAgIC8vIFNldCB0aGUgcHJvdG90eXBlIGV4cGxpY2l0bHkuXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgS2ludG9uZUFsbFJlY29yZHNFcnJvci5wcm90b3R5cGUpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IucGFyc2VFcnJvckluZGV4ID0gZnVuY3Rpb24gKGVycm9ycykge1xuICAgICAgICAvLyBUT0RPOiB1c2UgbWF0Y2hBbGwgYWZ0ZXIgRVMyMDIwIHN1cHBvcnRcbiAgICAgICAgdmFyIGVycm9ySW5kZXhlcyA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2goZnVuY3Rpb24gKGVycm9yS2V5KSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gZXJyb3JLZXkubWF0Y2goL3JlY29yZHNcXFsoXFxkKylcXF0vKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBlcnJvckluZGV4ZXMucHVzaChOdW1iZXIocmVzdWx0WzFdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXJyb3JJbmRleGVzLmxlbmd0aCA+IDAgPyBNYXRoLm1pbi5hcHBseShNYXRoLCBlcnJvckluZGV4ZXMpIDogbnVsbDtcbiAgICB9O1xuICAgIEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IuZXh0cmFjdEVycm9ySW5kZXggPSBmdW5jdGlvbiAobnVtT2ZQcm9jZXNzZWRSZWNvcmRzLCBlcnJvciwgY2h1bmtMZW5ndGgpIHtcbiAgICAgICAgaWYgKGVycm9yLmJ1bGtSZXF1ZXN0SW5kZXggIT09IHVuZGVmaW5lZCAmJiBlcnJvci5lcnJvcnMpIHtcbiAgICAgICAgICAgIHZhciBlcnJvclBhcnNlUmVzdWx0ID0gS2ludG9uZUFsbFJlY29yZHNFcnJvci5wYXJzZUVycm9ySW5kZXgoZXJyb3IuZXJyb3JzKTtcbiAgICAgICAgICAgIGlmIChlcnJvclBhcnNlUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChudW1PZlByb2Nlc3NlZFJlY29yZHMgK1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5idWxrUmVxdWVzdEluZGV4ICogY2h1bmtMZW5ndGggK1xuICAgICAgICAgICAgICAgICAgICBlcnJvclBhcnNlUmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgS2ludG9uZUFsbFJlY29yZHNFcnJvci5idWlsZEVycm9yTWVzc2FnZSA9IGZ1bmN0aW9uIChudW1PZlByb2Nlc3NlZFJlY29yZHMsIG51bU9mQWxsUmVjb3JkcywgZXJyb3JJbmRleCkge1xuICAgICAgICB2YXIgbWVzc2FnZSA9IFwiXCI7XG4gICAgICAgIGlmIChlcnJvckluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkFuIGVycm9yIG9jY3VycmVkIGF0IHJlY29yZHNbXCIuY29uY2F0KGVycm9ySW5kZXgsIFwiXS4gXCIpO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2UgKz0gXCJcIi5jb25jYXQobnVtT2ZQcm9jZXNzZWRSZWNvcmRzLCBcIi9cIikuY29uY2F0KG51bU9mQWxsUmVjb3JkcywgXCIgcmVjb3JkcyBhcmUgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfTtcbiAgICByZXR1cm4gS2ludG9uZUFsbFJlY29yZHNFcnJvcjtcbn0oRXJyb3IpKTtcbmV4cG9ydHMuS2ludG9uZUFsbFJlY29yZHNFcnJvciA9IEtpbnRvbmVBbGxSZWNvcmRzRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1LaW50b25lQWxsUmVjb3Jkc0Vycm9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuS2ludG9uZVJlc3RBUElFcnJvciA9IHZvaWQgMDtcbnZhciBLaW50b25lUmVzdEFQSUVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhLaW50b25lUmVzdEFQSUVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEtpbnRvbmVSZXN0QVBJRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gS2ludG9uZVJlc3RBUElFcnJvci5idWlsZEVycm9yUmVzcG9uc2VEYXRlV2l0aEluZGV4KGVycm9yKSwgZGF0YSA9IF9hLmRhdGEsIGJ1bGtSZXF1ZXN0SW5kZXggPSBfYS5idWxrUmVxdWVzdEluZGV4O1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRhdGEubWVzc2FnZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubmFtZSA9IFwiS2ludG9uZVJlc3RBUElFcnJvclwiO1xuICAgICAgICBfdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgICAgIF90aGlzLmNvZGUgPSBkYXRhLmNvZGU7XG4gICAgICAgIF90aGlzLmVycm9ycyA9IGRhdGEuZXJyb3JzO1xuICAgICAgICBfdGhpcy5zdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgICAgIF90aGlzLmJ1bGtSZXF1ZXN0SW5kZXggPSBidWxrUmVxdWVzdEluZGV4O1xuICAgICAgICBfdGhpcy5oZWFkZXJzID0gZXJyb3IuaGVhZGVycztcbiAgICAgICAgX3RoaXMubWVzc2FnZSA9IFwiW1wiLmNvbmNhdChlcnJvci5zdGF0dXMsIFwiXSBbXCIpLmNvbmNhdChfdGhpcy5jb2RlLCBcIl0gXCIpLmNvbmNhdChfdGhpcy5tZXNzYWdlLCBcIiAoXCIpLmNvbmNhdChfdGhpcy5pZCwgXCIpXCIpO1xuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9FcnJvciNDdXN0b21fRXJyb3JfVHlwZXNcbiAgICAgICAgLy8gTWFpbnRhaW5zIHByb3BlciBzdGFjayB0cmFjZSBmb3Igd2hlcmUgb3VyIGVycm9yIHdhcyB0aHJvd24gKG9ubHkgYXZhaWxhYmxlIG9uIFY4KVxuICAgICAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKF90aGlzLCBLaW50b25lUmVzdEFQSUVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvd2lraS9CcmVha2luZy1DaGFuZ2VzI2V4dGVuZGluZy1idWlsdC1pbnMtbGlrZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29ya1xuICAgICAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBleHBsaWNpdGx5LlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIEtpbnRvbmVSZXN0QVBJRXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBLaW50b25lUmVzdEFQSUVycm9yLmZpbmRFcnJvclJlc3BvbnNlRGF0YVdpdGhJbmRleCA9IGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc3VsdHNbaV0pLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcmVzdWx0c1tpXTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBkYXRhLCBidWxrUmVxdWVzdEluZGV4OiBpIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgRXJyb3IoXCJNaXNzaW5nIHJlc3BvbnNlIGRhdGEgaW4gYHJlc3VsdHNgLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gS2ludG9uZSBSRVNUIEFQSSBDbGllbnQuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICB9O1xuICAgIEtpbnRvbmVSZXN0QVBJRXJyb3IuYnVpbGRFcnJvclJlc3BvbnNlRGF0ZVdpdGhJbmRleCA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICBpZiAoXCJyZXN1bHRzXCIgaW4gZXJyb3IuZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIEtpbnRvbmVSZXN0QVBJRXJyb3IuZmluZEVycm9yUmVzcG9uc2VEYXRhV2l0aEluZGV4KGVycm9yLmRhdGEucmVzdWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZGF0YTogZXJyb3IuZGF0YSB9O1xuICAgIH07XG4gICAgcmV0dXJuIEtpbnRvbmVSZXN0QVBJRXJyb3I7XG59KEVycm9yKSk7XG5leHBvcnRzLktpbnRvbmVSZXN0QVBJRXJyb3IgPSBLaW50b25lUmVzdEFQSUVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9S2ludG9uZVJlc3RBUElFcnJvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0tpbnRvbmVBYm9ydFNlYXJjaEVycm9yXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9LaW50b25lQWxsUmVjb3Jkc0Vycm9yXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9LaW50b25lUmVzdEFQSUVycm9yXCIpLCBleHBvcnRzKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlY29yZENsaWVudCA9IHZvaWQgMDtcbnZhciBlcnJvcl8xID0gcmVxdWlyZShcIi4uL2Vycm9yXCIpO1xudmFyIEJhc2VDbGllbnRfMSA9IHJlcXVpcmUoXCIuL0Jhc2VDbGllbnRcIik7XG52YXIgQUREX1JFQ09SRFNfTElNSVQgPSAxMDA7XG52YXIgVVBEQVRFX1JFQ09SRFNfTElNSVQgPSAxMDA7XG52YXIgREVMRVRFX1JFQ09SRFNfTElNSVQgPSAxMDA7XG52YXIgR0VUX1JFQ09SRFNfTElNSVQgPSA1MDA7XG52YXIgUmVjb3JkQ2xpZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhSZWNvcmRDbGllbnQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUmVjb3JkQ2xpZW50KGNsaWVudCwgYnVsa1JlcXVlc3RDbGllbnQsIGd1ZXN0U3BhY2VJZCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBjbGllbnQsIGd1ZXN0U3BhY2VJZCkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYnVsa1JlcXVlc3RDbGllbnQgPSBidWxrUmVxdWVzdENsaWVudDtcbiAgICAgICAgX3RoaXMuZGlkV2Fybk1heGltdW1PZmZzZXRWYWx1ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZ2V0UmVjb3JkID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmFkZFJlY29yZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUudXBkYXRlUmVjb3JkID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnVwc2VydFJlY29yZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFwcCwgdXBkYXRlS2V5LCByZWNvcmQsIHJlY29yZHMsIHJldmlzaW9uO1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwID0gcGFyYW1zLmFwcCwgdXBkYXRlS2V5ID0gcGFyYW1zLnVwZGF0ZUtleSwgcmVjb3JkID0gcGFyYW1zLnJlY29yZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuZ2V0UmVjb3Jkcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeTogXCJcIi5jb25jYXQodXBkYXRlS2V5LmZpZWxkLCBcIiA9IFxcXCJcIikuY29uY2F0KHVwZGF0ZUtleS52YWx1ZSwgXCJcXFwiXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkcyA9IChfYi5zZW50KCkpLnJlY29yZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWNvcmRzLmxlbmd0aCA+IDApKSByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlY29yZHNbMF0uJGlkLnR5cGUgPT09IFwiX19JRF9fXCIpKSByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMudXBkYXRlUmVjb3JkKHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiA9IChfYi5zZW50KCkpLnJldmlzaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHsgaWQ6IHJlY29yZHNbMF0uJGlkLnZhbHVlLCByZXZpc2lvbjogcmV2aXNpb24gfV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBgJGlkYCBpbiBgZ2V0UmVjb3Jkc2AgcmVzcG9uc2UuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBLaW50b25lIFJFU1QgQVBJIENsaWVudC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmFkZFJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBhcHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkOiBPYmplY3QuYXNzaWduKHt9LCByZWNvcmQsIChfYSA9IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYVt1cGRhdGVLZXkuZmllbGRdID0geyB2YWx1ZTogdXBkYXRlS2V5LnZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hKSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gVE9ETzogYHJlY29yZHNgIHR5cGUgaW4gcmV0dXJuIHR5cGUgc2hvdWxkIGJlIGZpbHRlcmVkIGJ5IGBmaWVsZHNgLlxuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZ2V0UmVjb3JkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHBhdGgsIHJlc3BvbnNlO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2Fybk1heGltdW1PZmZzZXRWYWx1ZUlmTmVlZGVkKHBhcmFtcy5xdWVyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgcmVzcG9uc2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUud2Fybk1heGltdW1PZmZzZXRWYWx1ZUlmTmVlZGVkID0gZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgICAgdmFyIHJlZ2V4cCA9IC9vZmZzZXRcXHMrKFxcZCspL2k7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gcXVlcnkubWF0Y2gocmVnZXhwKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5kaWRXYXJuTWF4aW11bU9mZnNldFZhbHVlICYmXG4gICAgICAgICAgICAgICAgcmVzdWx0ICYmXG4gICAgICAgICAgICAgICAgTnVtYmVyKHJlc3VsdFsxXSkgPiAxMDAwMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlkV2Fybk1heGltdW1PZmZzZXRWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiV2FybmluZzogVGhlIG1heGltdW0gb2Zmc2V0IHZhbHVlIHdpbGwgYmUgbGltaXRlZCB0byAxMCwwMDAgaW4gdGhlIGZ1dHVyZS4gUGxlYXNlIHVzZSBgY3JlYXRlQ3Vyc29yKClgIGFuZCBgZ2V0UmVjb3Jkc0J5Q3Vyc29yKClgIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmFkZFJlY29yZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBwYXRoLCBfYSwgaWRzLCByZXZpc2lvbnM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgaWRzID0gX2EuaWRzLCByZXZpc2lvbnMgPSBfYS5yZXZpc2lvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHM6IGlkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb25zOiByZXZpc2lvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHM6IGlkcy5tYXAoZnVuY3Rpb24gKGlkLCBpKSB7IHJldHVybiAoeyBpZDogaWQsIHJldmlzaW9uOiByZXZpc2lvbnNbaV0gfSk7IH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUudXBkYXRlUmVjb3JkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZGVsZXRlUmVjb3JkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5kZWxldGUocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuY3JlYXRlQ3Vyc29yID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkcy9jdXJzb3JcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmdldFJlY29yZHNCeUN1cnNvciA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHMvY3Vyc29yXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmRlbGV0ZUN1cnNvciA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHMvY3Vyc29yXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsZXRlKHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmdldEFsbFJlY29yZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBjb25kaXRpb24sIG9yZGVyQnksIF9hLCB3aXRoQ3Vyc29yLCByZXN0LCBjb25kaXRpb25RdWVyeSwgcXVlcnk7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uID0gcGFyYW1zLmNvbmRpdGlvbiwgb3JkZXJCeSA9IHBhcmFtcy5vcmRlckJ5LCBfYSA9IHBhcmFtcy53aXRoQ3Vyc29yLCB3aXRoQ3Vyc29yID0gX2EgPT09IHZvaWQgMCA/IHRydWUgOiBfYSwgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcImNvbmRpdGlvblwiLCBcIm9yZGVyQnlcIiwgXCJ3aXRoQ3Vyc29yXCJdKTtcbiAgICAgICAgICAgICAgICBpZiAoIW9yZGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuZ2V0QWxsUmVjb3Jkc1dpdGhJZChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVzdCksIHsgY29uZGl0aW9uOiBjb25kaXRpb24gfSkpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHdpdGhDdXJzb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uUXVlcnkgPSBjb25kaXRpb24gPyBcIlwiLmNvbmNhdChjb25kaXRpb24sIFwiIFwiKSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gXCJcIi5jb25jYXQoY29uZGl0aW9uUXVlcnkpLmNvbmNhdChvcmRlckJ5ID8gXCJvcmRlciBieSBcIi5jb25jYXQob3JkZXJCeSkgOiBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuZ2V0QWxsUmVjb3Jkc1dpdGhDdXJzb3IoX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3QpLCB7IHF1ZXJ5OiBxdWVyeSB9KSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy5nZXRBbGxSZWNvcmRzV2l0aE9mZnNldChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVzdCksIHsgb3JkZXJCeTogb3JkZXJCeSwgY29uZGl0aW9uOiBjb25kaXRpb24gfSkpXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZ2V0QWxsUmVjb3Jkc1dpdGhJZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9yaWdpbmFsRmllbGRzLCBjb25kaXRpb24sIHJlc3QsIGZpZWxkcywgY29uZGl0aW9uUXVlcnksIGFsbFJlY29yZHMsIGxhc3RJZCwgcXVlcnksIHJlc3VsdCwgbGFzdFJlY29yZDtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRmllbGRzID0gcGFyYW1zLmZpZWxkcywgY29uZGl0aW9uID0gcGFyYW1zLmNvbmRpdGlvbiwgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcImZpZWxkc1wiLCBcImNvbmRpdGlvblwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBvcmlnaW5hbEZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCAkaWQgaWYgJGlkIGRvZXNuJ3QgZXhpc3QgaW4gZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRzICYmIGZpZWxkcy5sZW5ndGggPiAwICYmIGZpZWxkcy5pbmRleE9mKFwiJGlkXCIpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgZmllbGRzLCB0cnVlKSwgW1wiJGlkXCJdLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25RdWVyeSA9IGNvbmRpdGlvbiA/IFwiKFwiLmNvbmNhdChjb25kaXRpb24sIFwiKSBhbmQgXCIpIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RJZCA9IFwiMFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRydWUpIHJldHVybiBbMyAvKmJyZWFrKi8sIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgPSBcIlwiLmNvbmNhdChjb25kaXRpb25RdWVyeSwgXCIkaWQgPiBcIikuY29uY2F0KGxhc3RJZCwgXCIgb3JkZXIgYnkgJGlkIGFzYyBsaW1pdCBcIikuY29uY2F0KEdFVF9SRUNPUkRTX0xJTUlUKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuZ2V0UmVjb3JkcyhfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVzdCksIHsgZmllbGRzOiBmaWVsZHMsIHF1ZXJ5OiBxdWVyeSB9KSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxSZWNvcmRzID0gYWxsUmVjb3Jkcy5jb25jYXQocmVzdWx0LnJlY29yZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZWNvcmRzLmxlbmd0aCA8IEdFVF9SRUNPUkRTX0xJTUlUKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0UmVjb3JkID0gcmVzdWx0LnJlY29yZHNbcmVzdWx0LnJlY29yZHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdFJlY29yZC4kaWQudHlwZSA9PT0gXCJfX0lEX19cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RJZCA9IGxhc3RSZWNvcmQuJGlkLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBgJGlkYCBpbiBgZ2V0UmVjb3Jkc2AgcmVzcG9uc2UuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBLaW50b25lIFJFU1QgQVBJIENsaWVudC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgMV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGFsbFJlY29yZHNdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZ2V0QWxsUmVjb3Jkc1dpdGhPZmZzZXQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBjb25kaXRpb24sIG9yZGVyQnksIHJlc3QsIGNvbmRpdGlvblF1ZXJ5LCBhbGxSZWNvcmRzLCBvZmZzZXQsIHF1ZXJ5LCByZXN1bHQ7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSBwYXJhbXMuY29uZGl0aW9uLCBvcmRlckJ5ID0gcGFyYW1zLm9yZGVyQnksIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJjb25kaXRpb25cIiwgXCJvcmRlckJ5XCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblF1ZXJ5ID0gY29uZGl0aW9uID8gXCJcIi5jb25jYXQoY29uZGl0aW9uLCBcIiBcIikgOiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsUmVjb3JkcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0cnVlKSByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gXCJcIi5jb25jYXQoY29uZGl0aW9uUXVlcnkpLmNvbmNhdChvcmRlckJ5ID8gXCJvcmRlciBieSBcIi5jb25jYXQob3JkZXJCeSwgXCIgXCIpIDogXCJcIiwgXCJsaW1pdCBcIikuY29uY2F0KEdFVF9SRUNPUkRTX0xJTUlULCBcIiBvZmZzZXQgXCIpLmNvbmNhdChvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5nZXRSZWNvcmRzKF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0KSwgeyBxdWVyeTogcXVlcnkgfSkpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsUmVjb3JkcyA9IGFsbFJlY29yZHMuY29uY2F0KHJlc3VsdC5yZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVjb3Jkcy5sZW5ndGggPCBHRVRfUkVDT1JEU19MSU1JVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IEdFVF9SRUNPUkRTX0xJTUlUO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgMV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGFsbFJlY29yZHNdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZ2V0QWxsUmVjb3Jkc1dpdGhDdXJzb3IgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBpZCwgYWxsUmVjb3JkcywgcmVzdWx0LCBlcnJvcl8yO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmNyZWF0ZUN1cnNvcihwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSAoX2Euc2VudCgpKS5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFsyLCA2LCAsIDhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0cnVlKSByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuZ2V0UmVjb3Jkc0J5Q3Vyc29yKHsgaWQ6IGlkIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsUmVjb3JkcyA9IGFsbFJlY29yZHMuY29uY2F0KHJlc3VsdC5yZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDNdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMiAvKnJldHVybiovLCBhbGxSZWNvcmRzXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfMiA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuZGVsZXRlQ3Vyc29yKHsgaWQ6IGlkIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JfMjtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5hZGRBbGxSZWNvcmRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJhbXMucmVjb3Jkcy5ldmVyeShmdW5jdGlvbiAocmVjb3JkKSB7IHJldHVybiAhQXJyYXkuaXNBcnJheShyZWNvcmQpICYmIHJlY29yZCBpbnN0YW5jZW9mIE9iamVjdDsgfSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGhlIGByZWNvcmRzYCBwYXJhbWV0ZXIgbXVzdCBiZSBhbiBhcnJheSBvZiBvYmplY3QuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy5hZGRBbGxSZWNvcmRzUmVjdXJzaXZlKHBhcmFtcywgcGFyYW1zLnJlY29yZHMubGVuZ3RoLCBbXSldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5hZGRBbGxSZWNvcmRzUmVjdXJzaXZlID0gZnVuY3Rpb24gKHBhcmFtcywgbnVtT2ZBbGxSZWNvcmRzLCByZXN1bHRzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBDSFVOS19MRU5HVEgsIGFwcCwgcmVjb3JkcywgcmVjb3Jkc0NodW5rLCBuZXdSZXN1bHRzLCBlXzE7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBDSFVOS19MRU5HVEggPSB0aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50LlJFUVVFU1RTX0xFTkdUSF9MSU1JVCAqIEFERF9SRUNPUkRTX0xJTUlUO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwID0gcGFyYW1zLmFwcCwgcmVjb3JkcyA9IHBhcmFtcy5yZWNvcmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc0NodW5rID0gcmVjb3Jkcy5zbGljZSgwLCBDSFVOS19MRU5HVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZHNDaHVuay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgeyByZWNvcmRzOiByZXN1bHRzIH1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzEsIDMsICwgNF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5hZGRBbGxSZWNvcmRzV2l0aEJ1bGtSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBhcHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHM6IHJlY29yZHNDaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Jlc3VsdHMgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgZV8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yXzEuS2ludG9uZUFsbFJlY29yZHNFcnJvcih7IHJlY29yZHM6IHJlc3VsdHMgfSwgcmVjb3JkcywgbnVtT2ZBbGxSZWNvcmRzLCBlXzEsIEFERF9SRUNPUkRTX0xJTUlUKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy5hZGRBbGxSZWNvcmRzUmVjdXJzaXZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiByZWNvcmRzLnNsaWNlKENIVU5LX0xFTkdUSCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBudW1PZkFsbFJlY29yZHMsIHJlc3VsdHMuY29uY2F0KG5ld1Jlc3VsdHMpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5hZGRBbGxSZWNvcmRzV2l0aEJ1bGtSZXF1ZXN0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc2VwYXJhdGVkUmVjb3JkcywgcmVxdWVzdHMsIHJlc3VsdHM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZWRSZWNvcmRzID0gdGhpcy5zZXBhcmF0ZUFycmF5UmVjdXJzaXZlKEFERF9SRUNPUkRTX0xJTUlULCBbXSwgcGFyYW1zLnJlY29yZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMgPSBzZXBhcmF0ZWRSZWNvcmRzLm1hcChmdW5jdGlvbiAocmVjb3JkcykgeyByZXR1cm4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IHBhcmFtcy5hcHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHM6IHJlY29yZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuYnVsa1JlcXVlc3RDbGllbnQuc2VuZCh7IHJlcXVlc3RzOiByZXF1ZXN0cyB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSAoX2Euc2VudCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXN1bHRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHJlc3VsdHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZHMgPSByZXN1bHQuaWRzLCByZXZpc2lvbnMgPSByZXN1bHQucmV2aXNpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWRzLm1hcChmdW5jdGlvbiAoaWQsIGkpIHsgcmV0dXJuICh7IGlkOiBpZCwgcmV2aXNpb246IHJldmlzaW9uc1tpXSB9KTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlZHVjZShmdW5jdGlvbiAoYWNjLCByZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MuY29uY2F0KHJlY29yZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtdKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS51cGRhdGVBbGxSZWNvcmRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMudXBkYXRlQWxsUmVjb3Jkc1JlY3Vyc2l2ZShwYXJhbXMsIHBhcmFtcy5yZWNvcmRzLmxlbmd0aCwgW10pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUudXBkYXRlQWxsUmVjb3Jkc1JlY3Vyc2l2ZSA9IGZ1bmN0aW9uIChwYXJhbXMsIG51bU9mQWxsUmVjb3JkcywgcmVzdWx0cykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgQ0hVTktfTEVOR1RILCBhcHAsIHJlY29yZHMsIHJlY29yZHNDaHVuaywgbmV3UmVzdWx0cywgZV8yO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgQ0hVTktfTEVOR1RIID0gdGhpcy5idWxrUmVxdWVzdENsaWVudC5SRVFVRVNUU19MRU5HVEhfTElNSVQgKiBVUERBVEVfUkVDT1JEU19MSU1JVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcCA9IHBhcmFtcy5hcHAsIHJlY29yZHMgPSBwYXJhbXMucmVjb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHNDaHVuayA9IHJlY29yZHMuc2xpY2UoMCwgQ0hVTktfTEVOR1RIKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRzQ2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHsgcmVjb3JkczogcmVzdWx0cyB9XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFsxLCAzLCAsIDRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMudXBkYXRlQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiByZWNvcmRzQ2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdSZXN1bHRzID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGVfMiA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcl8xLktpbnRvbmVBbGxSZWNvcmRzRXJyb3IoeyByZWNvcmRzOiByZXN1bHRzIH0sIHJlY29yZHMsIG51bU9mQWxsUmVjb3JkcywgZV8yLCBVUERBVEVfUkVDT1JEU19MSU1JVCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMudXBkYXRlQWxsUmVjb3Jkc1JlY3Vyc2l2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBhcHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogcmVjb3Jkcy5zbGljZShDSFVOS19MRU5HVEgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVtT2ZBbGxSZWNvcmRzLCByZXN1bHRzLmNvbmNhdChuZXdSZXN1bHRzKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUudXBkYXRlQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlcGFyYXRlZFJlY29yZHMsIHJlcXVlc3RzLCByZXN1bHRzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVkUmVjb3JkcyA9IHRoaXMuc2VwYXJhdGVBcnJheVJlY3Vyc2l2ZShVUERBVEVfUkVDT1JEU19MSU1JVCwgW10sIHBhcmFtcy5yZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzID0gc2VwYXJhdGVkUmVjb3Jkcy5tYXAoZnVuY3Rpb24gKHJlY29yZHMpIHsgcmV0dXJuICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBVVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IHBhcmFtcy5hcHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHM6IHJlY29yZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuYnVsa1JlcXVlc3RDbGllbnQuc2VuZCh7IHJlcXVlc3RzOiByZXF1ZXN0cyB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSAoX2Euc2VudCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXN1bHRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHJlc3VsdHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocmVzdWx0KSB7IHJldHVybiByZXN1bHQucmVjb3JkczsgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlZHVjZShmdW5jdGlvbiAoYWNjLCByZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MuY29uY2F0KHJlY29yZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtdKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5kZWxldGVBbGxSZWNvcmRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVBbGxSZWNvcmRzUmVjdXJzaXZlKHBhcmFtcywgcGFyYW1zLnJlY29yZHMubGVuZ3RoKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZGVsZXRlQWxsUmVjb3Jkc1JlY3Vyc2l2ZSA9IGZ1bmN0aW9uIChwYXJhbXMsIG51bU9mQWxsUmVjb3Jkcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgQ0hVTktfTEVOR1RILCBhcHAsIHJlY29yZHMsIHJlY29yZHNDaHVuaywgZV8zO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgQ0hVTktfTEVOR1RIID0gdGhpcy5idWxrUmVxdWVzdENsaWVudC5SRVFVRVNUU19MRU5HVEhfTElNSVQgKiBERUxFVEVfUkVDT1JEU19MSU1JVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcCA9IHBhcmFtcy5hcHAsIHJlY29yZHMgPSBwYXJhbXMucmVjb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHNDaHVuayA9IHJlY29yZHMuc2xpY2UoMCwgQ0hVTktfTEVOR1RIKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRzQ2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHt9XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFsxLCAzLCAsIDRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuZGVsZXRlQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiByZWNvcmRzQ2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgZV8zID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yXzEuS2ludG9uZUFsbFJlY29yZHNFcnJvcih7fSwgcmVjb3JkcywgbnVtT2ZBbGxSZWNvcmRzLCBlXzMsIERFTEVURV9SRUNPUkRTX0xJTUlUKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy5kZWxldGVBbGxSZWNvcmRzUmVjdXJzaXZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiByZWNvcmRzLnNsaWNlKENIVU5LX0xFTkdUSCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBudW1PZkFsbFJlY29yZHMpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmRlbGV0ZUFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3QgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzZXBhcmF0ZWRSZWNvcmRzLCByZXF1ZXN0cztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlZFJlY29yZHMgPSB0aGlzLnNlcGFyYXRlQXJyYXlSZWN1cnNpdmUoREVMRVRFX1JFQ09SRFNfTElNSVQsIFtdLCBwYXJhbXMucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyA9IHNlcGFyYXRlZFJlY29yZHMubWFwKGZ1bmN0aW9uIChyZWNvcmRzKSB7IHJldHVybiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBwYXJhbXMuYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHM6IHJlY29yZHMubWFwKGZ1bmN0aW9uIChyZWNvcmQpIHsgcmV0dXJuIHJlY29yZC5pZDsgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uczogcmVjb3Jkcy5tYXAoZnVuY3Rpb24gKHJlY29yZCkgeyByZXR1cm4gcmVjb3JkLnJldmlzaW9uOyB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5idWxrUmVxdWVzdENsaWVudC5zZW5kKHsgcmVxdWVzdHM6IHJlcXVlc3RzIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuc2VwYXJhdGVBcnJheVJlY3Vyc2l2ZSA9IGZ1bmN0aW9uIChzaXplLCBzZXBhcmF0ZWQsIGFycmF5KSB7XG4gICAgICAgIHZhciBjaHVuayA9IGFycmF5LnNsaWNlKDAsIHNpemUpO1xuICAgICAgICBpZiAoY2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VwYXJhdGVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlcGFyYXRlQXJyYXlSZWN1cnNpdmUoc2l6ZSwgX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBzZXBhcmF0ZWQsIHRydWUpLCBbY2h1bmtdLCBmYWxzZSksIGFycmF5LnNsaWNlKHNpemUpKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuYWRkUmVjb3JkQ29tbWVudCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9jb21tZW50XCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5kZWxldGVSZWNvcmRDb21tZW50ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL2NvbW1lbnRcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5kZWxldGUocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZ2V0UmVjb3JkQ29tbWVudHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmQvY29tbWVudHNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUudXBkYXRlUmVjb3JkQXNzaWduZWVzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL2Fzc2lnbmVlc1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS51cGRhdGVSZWNvcmRTdGF0dXMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmQvc3RhdHVzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnVwZGF0ZVJlY29yZHNTdGF0dXMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzL3N0YXR1c1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgcmV0dXJuIFJlY29yZENsaWVudDtcbn0oQmFzZUNsaWVudF8xLkJhc2VDbGllbnQpKTtcbmV4cG9ydHMuUmVjb3JkQ2xpZW50ID0gUmVjb3JkQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVjb3JkQ2xpZW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3BhY2VDbGllbnQgPSB2b2lkIDA7XG52YXIgQmFzZUNsaWVudF8xID0gcmVxdWlyZShcIi4vQmFzZUNsaWVudFwiKTtcbnZhciBTcGFjZUNsaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3BhY2VDbGllbnQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3BhY2VDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLmdldFNwYWNlID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwic3BhY2VcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS5kZWxldGVTcGFjZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInNwYWNlXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsZXRlKHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBTcGFjZUNsaWVudC5wcm90b3R5cGUudXBkYXRlU3BhY2VCb2R5ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwic3BhY2UvYm9keVwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLmdldFNwYWNlTWVtYmVycyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInNwYWNlL21lbWJlcnNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS51cGRhdGVTcGFjZU1lbWJlcnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJzcGFjZS9tZW1iZXJzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBTcGFjZUNsaWVudC5wcm90b3R5cGUudXBkYXRlVGhyZWFkID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwic3BhY2UvdGhyZWFkXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBTcGFjZUNsaWVudC5wcm90b3R5cGUuYWRkVGhyZWFkQ29tbWVudCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInNwYWNlL3RocmVhZC9jb21tZW50XCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLmFkZEd1ZXN0cyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiZ3Vlc3RzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLmRlbGV0ZUd1ZXN0cyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiZ3Vlc3RzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsZXRlKHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBTcGFjZUNsaWVudC5wcm90b3R5cGUudXBkYXRlU3BhY2VHdWVzdHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJzcGFjZS9ndWVzdHNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS5hZGRTcGFjZUZyb21UZW1wbGF0ZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwidGVtcGxhdGUvc3BhY2VcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICByZXR1cm4gU3BhY2VDbGllbnQ7XG59KEJhc2VDbGllbnRfMS5CYXNlQ2xpZW50KSk7XG5leHBvcnRzLlNwYWNlQ2xpZW50ID0gU3BhY2VDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TcGFjZUNsaWVudC5qcy5tYXAiLCIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgPyBzZWxmLkZvcm1EYXRhIDogd2luZG93LkZvcm1EYXRhO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5GaWxlQ2xpZW50ID0gdm9pZCAwO1xudmFyIGZvcm1fZGF0YV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJmb3JtLWRhdGFcIikpO1xudmFyIHBsYXRmb3JtXzEgPSByZXF1aXJlKFwiLi4vcGxhdGZvcm1cIik7XG52YXIgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXzEgPSByZXF1aXJlKFwiLi4vcGxhdGZvcm0vVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXCIpO1xudmFyIEJhc2VDbGllbnRfMSA9IHJlcXVpcmUoXCIuL0Jhc2VDbGllbnRcIik7XG52YXIgRmlsZUNsaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRmlsZUNsaWVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBGaWxlQ2xpZW50KCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEZpbGVDbGllbnQucHJvdG90eXBlLnVwbG9hZEZpbGUgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBwYXRoLCBmb3JtRGF0YSwgX2EsIG5hbWVfMSwgZGF0YSwgZV8xLCBfYiwgbmFtZV8yLCBkYXRhLCBmaWxlRGF0YTtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhID0gbmV3IGZvcm1fZGF0YV8xLmRlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKFwicGF0aFwiIGluIHBhcmFtcy5maWxlKSkgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICBfYy5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jLnRyeXMucHVzaChbMSwgMywgLCA0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBwbGF0Zm9ybV8xLnBsYXRmb3JtRGVwcy5yZWFkRmlsZUZyb21QYXRoKHBhcmFtcy5maWxlLnBhdGgpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EgPSBfYy5zZW50KCksIG5hbWVfMSA9IF9hLm5hbWUsIGRhdGEgPSBfYS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKFwiZmlsZVwiLCBkYXRhLCBuYW1lXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGVfMSA9IF9jLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlXzEgaW5zdGFuY2VvZiBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JfMS5VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cGxvYWRGaWxlIGRvZXNuJ3QgYWxsb3cgdG8gYWNjZXB0IGEgZmlsZSBwYXRoIGluIFwiLmNvbmNhdChlXzEucGxhdGZvcm0sIFwiIGVudmlyb25tZW50LlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlXzE7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszIC8qYnJlYWsqLywgNl07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9iID0gcGFyYW1zLmZpbGUsIG5hbWVfMiA9IF9iLm5hbWUsIGRhdGEgPSBfYi5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZURhdGEgPSBwbGF0Zm9ybV8xLnBsYXRmb3JtRGVwcy5idWlsZEZvcm1EYXRhVmFsdWUoZGF0YSwgbmFtZV8yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcImZpbGVcIiwgZmlsZURhdGEsIG5hbWVfMik7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYy5sYWJlbCA9IDY7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuY2xpZW50LnBvc3REYXRhKHBhdGgsIGZvcm1EYXRhKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgRmlsZUNsaWVudC5wcm90b3R5cGUuZG93bmxvYWRGaWxlID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiZmlsZVwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldERhdGEocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIHJldHVybiBGaWxlQ2xpZW50O1xufShCYXNlQ2xpZW50XzEuQmFzZUNsaWVudCkpO1xuZXhwb3J0cy5GaWxlQ2xpZW50ID0gRmlsZUNsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZpbGVDbGllbnQuanMubWFwIiwiLy8gQXhpb3MgdjEuNy4yIENvcHlyaWdodCAoYykgMjAyNCBNYXR0IFphYnJpc2tpZSBhbmQgY29udHJpYnV0b3JzXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn07XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gIClcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG5jb25zdCBbaXNSZWFkYWJsZVN0cmVhbSwgaXNSZXF1ZXN0LCBpc1Jlc3BvbnNlLCBpc0hlYWRlcnNdID0gWydSZWFkYWJsZVN0cmVhbScsICdSZXF1ZXN0JywgJ1Jlc3BvbnNlJywgJ0hlYWRlcnMnXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufTtcblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59O1xuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59O1xuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlID0gK3ZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufTtcblxuY29uc3QgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59O1xuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF07XG4gIH1cblxuICByZXR1cm4gc3RyO1xufTtcblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH07XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59O1xuXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbnZhciB1dGlscyQxID0ge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIEFMUEhBQkVULFxuICBnZW5lcmF0ZVN0cmluZyxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGVcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzJDEuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMkMS50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbmNvbnN0IHByb3RvdHlwZSQxID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSQxLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSQxKTtcblxuICB1dGlscyQxLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG52YXIgaHR0cEFkYXB0ZXIgPSBudWxsO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMkMS5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscyQxLnRvRmxhdE9iamVjdCh1dGlscyQxLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMkMS5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMkMS50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzJDEuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMkMS5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzJDEuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMkMS5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMkMS5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzJDEuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMkMS50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMkMS5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscyQxLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzJDEuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSQxKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlJDEpO1xuICB9IDogZW5jb2RlJDE7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyJDEgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG5cbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtcyQxID0gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcblxudmFyIEZvcm1EYXRhJDEgPSB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuXG52YXIgQmxvYiQxID0gdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGw7XG5cbnZhciBwbGF0Zm9ybSQxID0ge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyQxLFxuICAgIEZvcm1EYXRhOiBGb3JtRGF0YSQxLFxuICAgIEJsb2I6IEJsb2IkMVxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcblxuY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSAoXG4gIChwcm9kdWN0KSA9PiB7XG4gICAgcmV0dXJuIGhhc0Jyb3dzZXJFbnYgJiYgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKHByb2R1Y3QpIDwgMFxuICB9KSh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmNvbnN0IG9yaWdpbiA9IGhhc0Jyb3dzZXJFbnYgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgfHwgJ2h0dHA6Ly9sb2NhbGhvc3QnO1xuXG52YXIgdXRpbHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgaGFzQnJvd3NlckVudjogaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OiBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudjogaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBvcmlnaW46IG9yaWdpblxufSk7XG5cbnZhciBwbGF0Zm9ybSA9IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtJDFcbn07XG5cbmZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscyQxLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMkMS5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMkMS5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscyQxLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscyQxLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzJDEudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMkMS5pc09iamVjdChkYXRhKTtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMkMS5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscyQxLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNCbG9iKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMkMS5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAodXRpbHMkMS5pc1Jlc3BvbnNlKGRhdGEpIHx8IHV0aWxzJDEuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMkMS5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscyQxLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG52YXIgZGVmYXVsdHMkMSA9IGRlZmF1bHRzO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzJDEudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xudmFyIHBhcnNlSGVhZGVycyA9IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMkMS50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscyQxLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZih1dGlscyQxLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzSGVhZGVycyhoZWFkZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBoZWFkZXIuZW50cmllcygpKSB7XG4gICAgICAgIHNldEhlYWRlcih2YWx1ZSwga2V5LCByZXdyaXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMkMS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMkMS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzJDEucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHt2YWx1ZX0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG51dGlscyQxLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxudmFyIEF4aW9zSGVhZGVycyQxID0gQXhpb3NIZWFkZXJzO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZm5zLCByZXNwb25zZSkge1xuICBjb25zdCBjb25maWcgPSB0aGlzIHx8IGRlZmF1bHRzJDE7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzJDEuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xufVxuXG51dGlscyQxLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5mdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbi8qKlxuICogVGhyb3R0bGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtOdW1iZXJ9IGZyZXFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgZnJlcSkge1xuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgY29uc3QgdGhyZXNob2xkID0gMTAwMCAvIGZyZXE7XG4gIGxldCB0aW1lciA9IG51bGw7XG4gIHJldHVybiBmdW5jdGlvbiB0aHJvdHRsZWQoKSB7XG4gICAgY29uc3QgZm9yY2UgPSB0aGlzID09PSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoZm9yY2UgfHwgbm93IC0gdGltZXN0YW1wID4gdGhyZXNob2xkKSB7XG4gICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGltZXN0YW1wID0gbm93O1xuICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGlmICghdGltZXIpIHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9LCB0aHJlc2hvbGQgLSAobm93IC0gdGltZXN0YW1wKSk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgcHJvZ3Jlc3NFdmVudFJlZHVjZXIgPSAobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0sIGZyZXEgPSAzKSA9PiB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIHRocm90dGxlKGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGUsXG4gICAgICBsZW5ndGhDb21wdXRhYmxlOiB0b3RhbCAhPSBudWxsXG4gICAgfTtcblxuICAgIGRhdGFbaXNEb3dubG9hZFN0cmVhbSA/ICdkb3dubG9hZCcgOiAndXBsb2FkJ10gPSB0cnVlO1xuXG4gICAgbGlzdGVuZXIoZGF0YSk7XG4gIH0sIGZyZXEpO1xufTtcblxudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbi8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgY29uc3QgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgY29uc3QgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGV0IG9yaWdpblVSTDtcblxuICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXRzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgIGxldCBocmVmID0gdXJsO1xuXG4gICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgIH1cblxuICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSAodXRpbHMkMS5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgIH07XG4gIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH0pKCk7XG5cbnZhciBjb29raWVzID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMkMS5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzJDEuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscyQxLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5mdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzJDEgPyB7IC4uLnRoaW5nIH0gOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5mdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzJDEuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMkMS5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMkMS5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIsIGNhc2VsZXNzKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfSBlbHNlIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIpID0+IG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHRydWUpXG4gIH07XG5cbiAgdXRpbHMkMS5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMkMS5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxudmFyIHJlc29sdmVDb25maWcgPSAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IG1lcmdlQ29uZmlnKHt9LCBjb25maWcpO1xuXG4gIGxldCB7ZGF0YSwgd2l0aFhTUkZUb2tlbiwgeHNyZkhlYWRlck5hbWUsIHhzcmZDb29raWVOYW1lLCBoZWFkZXJzLCBhdXRofSA9IG5ld0NvbmZpZztcblxuICBuZXdDb25maWcuaGVhZGVycyA9IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGhlYWRlcnMpO1xuXG4gIG5ld0NvbmZpZy51cmwgPSBidWlsZFVSTChidWlsZEZ1bGxQYXRoKG5ld0NvbmZpZy5iYXNlVVJMLCBuZXdDb25maWcudXJsKSwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuXG4gIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgaWYgKGF1dGgpIHtcbiAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICtcbiAgICAgIGJ0b2EoKGF1dGgudXNlcm5hbWUgfHwgJycpICsgJzonICsgKGF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYXV0aC5wYXNzd29yZCkpIDogJycpKVxuICAgICk7XG4gIH1cblxuICBsZXQgY29udGVudFR5cGU7XG5cbiAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKSkge1xuICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKHVuZGVmaW5lZCk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9IGVsc2UgaWYgKChjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAvLyBmaXggc2VtaWNvbG9uIGR1cGxpY2F0aW9uIGlzc3VlIGZvciBSZWFjdE5hdGl2ZSBGb3JtRGF0YSBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uc3QgW3R5cGUsIC4uLnRva2Vuc10gPSBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JykubWFwKHRva2VuID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKFt0eXBlIHx8ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgLi4udG9rZW5zXS5qb2luKCc7ICcpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG5cbiAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMkMS5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihuZXdDb25maWcpKTtcblxuICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4obmV3Q29uZmlnLnVybCkpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IHhzcmZIZWFkZXJOYW1lICYmIHhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZCh4c3JmQ29va2llTmFtZSk7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgaGVhZGVycy5zZXQoeHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0NvbmZpZztcbn07XG5cbmNvbnN0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCA9IHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCc7XG5cbnZhciB4aHJBZGFwdGVyID0gaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBjb25zdCBfY29uZmlnID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuICAgIGxldCByZXF1ZXN0RGF0YSA9IF9jb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oX2NvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZX0gPSBfY29uZmlnO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBfY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgX2NvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgcmVxdWVzdC5vcGVuKF9jb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIF9jb25maWcudXJsLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gX2NvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgX2NvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIF9jb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgX2NvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IF9jb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIF9jb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzJDEuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChfY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFfY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBfY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBfY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzRXZlbnRSZWR1Y2VyKF9jb25maWcub25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIF9jb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihfY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpKTtcbiAgICB9XG5cbiAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbiB8fCBfY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgX2NvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IF9jb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKF9jb25maWcudXJsKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59O1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIGxldCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGxldCBhYm9ydGVkO1xuXG4gIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAoY2FuY2VsKSB7XG4gICAgaWYgKCFhYm9ydGVkKSB7XG4gICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICBjb25zdCBlcnIgPSBjYW5jZWwgaW5zdGFuY2VvZiBFcnJvciA/IGNhbmNlbCA6IHRoaXMucmVhc29uO1xuICAgICAgY29udHJvbGxlci5hYm9ydChlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yID8gZXJyIDogbmV3IENhbmNlbGVkRXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycikpO1xuICAgIH1cbiAgfTtcblxuICBsZXQgdGltZXIgPSB0aW1lb3V0ICYmIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIG9uYWJvcnQobmV3IEF4aW9zRXJyb3IoYHRpbWVvdXQgJHt0aW1lb3V0fSBvZiBtcyBleGNlZWRlZGAsIEF4aW9zRXJyb3IuRVRJTUVET1VUKSk7XG4gIH0sIHRpbWVvdXQpO1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgIGlmIChzaWduYWxzKSB7XG4gICAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgc2lnbmFscy5mb3JFYWNoKHNpZ25hbCA9PiB7XG4gICAgICAgIHNpZ25hbCAmJlxuICAgICAgICAoc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIgPyBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSA6IHNpZ25hbC51bnN1YnNjcmliZShvbmFib3J0KSk7XG4gICAgICB9KTtcbiAgICAgIHNpZ25hbHMgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsICYmIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICYmIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpKTtcblxuICBjb25zdCB7c2lnbmFsfSA9IGNvbnRyb2xsZXI7XG5cbiAgc2lnbmFsLnVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmU7XG5cbiAgcmV0dXJuIFtzaWduYWwsICgpID0+IHtcbiAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIHRpbWVyID0gbnVsbDtcbiAgfV07XG59O1xuXG52YXIgY29tcG9zZVNpZ25hbHMkMSA9IGNvbXBvc2VTaWduYWxzO1xuXG5jb25zdCBzdHJlYW1DaHVuayA9IGZ1bmN0aW9uKiAoY2h1bmssIGNodW5rU2l6ZSkge1xuICBsZXQgbGVuID0gY2h1bmsuYnl0ZUxlbmd0aDtcblxuICBpZiAoIWNodW5rU2l6ZSB8fCBsZW4gPCBjaHVua1NpemUpIHtcbiAgICB5aWVsZCBjaHVuaztcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcG9zID0gMDtcbiAgbGV0IGVuZDtcblxuICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgZW5kID0gcG9zICsgY2h1bmtTaXplO1xuICAgIHlpZWxkIGNodW5rLnNsaWNlKHBvcywgZW5kKTtcbiAgICBwb3MgPSBlbmQ7XG4gIH1cbn07XG5cbmNvbnN0IHJlYWRCeXRlcyA9IGFzeW5jIGZ1bmN0aW9uKiAoaXRlcmFibGUsIGNodW5rU2l6ZSwgZW5jb2RlKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgaXRlcmFibGUpIHtcbiAgICB5aWVsZCogc3RyZWFtQ2h1bmsoQXJyYXlCdWZmZXIuaXNWaWV3KGNodW5rKSA/IGNodW5rIDogKGF3YWl0IGVuY29kZShTdHJpbmcoY2h1bmspKSksIGNodW5rU2l6ZSk7XG4gIH1cbn07XG5cbmNvbnN0IHRyYWNrU3RyZWFtID0gKHN0cmVhbSwgY2h1bmtTaXplLCBvblByb2dyZXNzLCBvbkZpbmlzaCwgZW5jb2RlKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gcmVhZEJ5dGVzKHN0cmVhbSwgY2h1bmtTaXplLCBlbmNvZGUpO1xuXG4gIGxldCBieXRlcyA9IDA7XG5cbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgdHlwZTogJ2J5dGVzJyxcblxuICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICBvbkZpbmlzaCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBsZW4gPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgb25Qcm9ncmVzcyAmJiBvblByb2dyZXNzKGJ5dGVzICs9IGxlbik7XG4gICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKTtcbiAgICB9LFxuICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgIG9uRmluaXNoKHJlYXNvbik7XG4gICAgICByZXR1cm4gaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgfVxuICB9LCB7XG4gICAgaGlnaFdhdGVyTWFyazogMlxuICB9KVxufTtcblxuY29uc3QgZmV0Y2hQcm9ncmVzc0RlY29yYXRvciA9ICh0b3RhbCwgZm4pID0+IHtcbiAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7XG4gIHJldHVybiAobG9hZGVkKSA9PiBzZXRUaW1lb3V0KCgpID0+IGZuKHtcbiAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgIHRvdGFsLFxuICAgIGxvYWRlZFxuICB9KSk7XG59O1xuXG5jb25zdCBpc0ZldGNoU3VwcG9ydGVkID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXF1ZXN0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXNwb25zZSA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSBpc0ZldGNoU3VwcG9ydGVkICYmIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJztcblxuLy8gdXNlZCBvbmx5IGluc2lkZSB0aGUgZmV0Y2ggYWRhcHRlclxuY29uc3QgZW5jb2RlVGV4dCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgKChlbmNvZGVyKSA9PiAoc3RyKSA9PiBlbmNvZGVyLmVuY29kZShzdHIpKShuZXcgVGV4dEVuY29kZXIoKSkgOlxuICAgIGFzeW5jIChzdHIpID0+IG5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShzdHIpLmFycmF5QnVmZmVyKCkpXG4pO1xuXG5jb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmICgoKSA9PiB7XG4gIGxldCBkdXBsZXhBY2Nlc3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgYm9keTogbmV3IFJlYWRhYmxlU3RyZWFtKCksXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgZ2V0IGR1cGxleCgpIHtcbiAgICAgIGR1cGxleEFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiAnaGFsZic7XG4gICAgfSxcbiAgfSkuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpO1xuXG4gIHJldHVybiBkdXBsZXhBY2Nlc3NlZCAmJiAhaGFzQ29udGVudFR5cGU7XG59KSgpO1xuXG5jb25zdCBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbmNvbnN0IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmICEhKCgpPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KTtcbiAgfSBjYXRjaChlcnIpIHtcbiAgICAvLyByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbn0pKCk7XG5cbmNvbnN0IHJlc29sdmVycyA9IHtcbiAgc3RyZWFtOiBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmICgocmVzKSA9PiByZXMuYm9keSlcbn07XG5cbmlzRmV0Y2hTdXBwb3J0ZWQgJiYgKCgocmVzKSA9PiB7XG4gIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2godHlwZSA9PiB7XG4gICAgIXJlc29sdmVyc1t0eXBlXSAmJiAocmVzb2x2ZXJzW3R5cGVdID0gdXRpbHMkMS5pc0Z1bmN0aW9uKHJlc1t0eXBlXSkgPyAocmVzKSA9PiByZXNbdHlwZV0oKSA6XG4gICAgICAoXywgY29uZmlnKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBSZXNwb25zZSB0eXBlICcke3R5cGV9JyBpcyBub3Qgc3VwcG9ydGVkYCwgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQsIGNvbmZpZyk7XG4gICAgICB9KTtcbiAgfSk7XG59KShuZXcgUmVzcG9uc2UpKTtcblxuY29uc3QgZ2V0Qm9keUxlbmd0aCA9IGFzeW5jIChib2R5KSA9PiB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNCbG9iKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZTtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNTcGVjQ29tcGxpYW50Rm9ybShib2R5KSkge1xuICAgIHJldHVybiAoYXdhaXQgbmV3IFJlcXVlc3QoYm9keSkuYXJyYXlCdWZmZXIoKSkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuICAgIGJvZHkgPSBib2R5ICsgJyc7XG4gIH1cblxuICBpZih1dGlscyQxLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICB9XG59O1xuXG5jb25zdCByZXNvbHZlQm9keUxlbmd0aCA9IGFzeW5jIChoZWFkZXJzLCBib2R5KSA9PiB7XG4gIGNvbnN0IGxlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG59O1xuXG52YXIgZmV0Y2hBZGFwdGVyID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAoYXN5bmMgKGNvbmZpZykgPT4ge1xuICBsZXQge1xuICAgIHVybCxcbiAgICBtZXRob2QsXG4gICAgZGF0YSxcbiAgICBzaWduYWwsXG4gICAgY2FuY2VsVG9rZW4sXG4gICAgdGltZW91dCxcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgb25VcGxvYWRQcm9ncmVzcyxcbiAgICByZXNwb25zZVR5cGUsXG4gICAgaGVhZGVycyxcbiAgICB3aXRoQ3JlZGVudGlhbHMgPSAnc2FtZS1vcmlnaW4nLFxuICAgIGZldGNoT3B0aW9uc1xuICB9ID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuXG4gIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSA/IChyZXNwb25zZVR5cGUgKyAnJykudG9Mb3dlckNhc2UoKSA6ICd0ZXh0JztcblxuICBsZXQgW2NvbXBvc2VkU2lnbmFsLCBzdG9wVGltZW91dF0gPSAoc2lnbmFsIHx8IGNhbmNlbFRva2VuIHx8IHRpbWVvdXQpID9cbiAgICBjb21wb3NlU2lnbmFscyQxKFtzaWduYWwsIGNhbmNlbFRva2VuXSwgdGltZW91dCkgOiBbXTtcblxuICBsZXQgZmluaXNoZWQsIHJlcXVlc3Q7XG5cbiAgY29uc3Qgb25GaW5pc2ggPSAoKSA9PiB7XG4gICAgIWZpbmlzaGVkICYmIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29tcG9zZWRTaWduYWwgJiYgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcblxuICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgfTtcblxuICBsZXQgcmVxdWVzdENvbnRlbnRMZW5ndGg7XG5cbiAgdHJ5IHtcbiAgICBpZiAoXG4gICAgICBvblVwbG9hZFByb2dyZXNzICYmIHN1cHBvcnRzUmVxdWVzdFN0cmVhbSAmJiBtZXRob2QgIT09ICdnZXQnICYmIG1ldGhvZCAhPT0gJ2hlYWQnICYmXG4gICAgICAocmVxdWVzdENvbnRlbnRMZW5ndGggPSBhd2FpdCByZXNvbHZlQm9keUxlbmd0aChoZWFkZXJzLCBkYXRhKSkgIT09IDBcbiAgICApIHtcbiAgICAgIGxldCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgZHVwbGV4OiBcImhhbGZcIlxuICAgICAgfSk7XG5cbiAgICAgIGxldCBjb250ZW50VHlwZUhlYWRlcjtcblxuICAgICAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKSAmJiAoY29udGVudFR5cGVIZWFkZXIgPSBfcmVxdWVzdC5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoY29udGVudFR5cGVIZWFkZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3JlcXVlc3QuYm9keSkge1xuICAgICAgICBkYXRhID0gdHJhY2tTdHJlYW0oX3JlcXVlc3QuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBmZXRjaFByb2dyZXNzRGVjb3JhdG9yKFxuICAgICAgICAgIHJlcXVlc3RDb250ZW50TGVuZ3RoLFxuICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uVXBsb2FkUHJvZ3Jlc3MpXG4gICAgICAgICksIG51bGwsIGVuY29kZVRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdXRpbHMkMS5pc1N0cmluZyh3aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHMgPyAnY29ycycgOiAnb21pdCc7XG4gICAgfVxuXG4gICAgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgLi4uZmV0Y2hPcHRpb25zLFxuICAgICAgc2lnbmFsOiBjb21wb3NlZFNpZ25hbCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLm5vcm1hbGl6ZSgpLnRvSlNPTigpLFxuICAgICAgYm9keTogZGF0YSxcbiAgICAgIGR1cGxleDogXCJoYWxmXCIsXG4gICAgICB3aXRoQ3JlZGVudGlhbHNcbiAgICB9KTtcblxuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3QpO1xuXG4gICAgY29uc3QgaXNTdHJlYW1SZXNwb25zZSA9IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScgfHwgcmVzcG9uc2VUeXBlID09PSAncmVzcG9uc2UnKTtcblxuICAgIGlmIChzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgaXNTdHJlYW1SZXNwb25zZSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICAgICAgWydzdGF0dXMnLCAnc3RhdHVzVGV4dCcsICdoZWFkZXJzJ10uZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgb3B0aW9uc1twcm9wXSA9IHJlc3BvbnNlW3Byb3BdO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlQ29udGVudExlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICByZXNwb25zZSA9IG5ldyBSZXNwb25zZShcbiAgICAgICAgdHJhY2tTdHJlYW0ocmVzcG9uc2UuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvbkRvd25sb2FkUHJvZ3Jlc3MgJiYgZmV0Y2hQcm9ncmVzc0RlY29yYXRvcihcbiAgICAgICAgICByZXNwb25zZUNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKVxuICAgICAgICApLCBpc1N0cmVhbVJlc3BvbnNlICYmIG9uRmluaXNoLCBlbmNvZGVUZXh0KSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgbGV0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHJlc29sdmVyc1t1dGlscyQxLmZpbmRLZXkocmVzb2x2ZXJzLCByZXNwb25zZVR5cGUpIHx8ICd0ZXh0J10ocmVzcG9uc2UsIGNvbmZpZyk7XG5cbiAgICAhaXNTdHJlYW1SZXNwb25zZSAmJiBvbkZpbmlzaCgpO1xuXG4gICAgc3RvcFRpbWVvdXQgJiYgc3RvcFRpbWVvdXQoKTtcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgaGVhZGVyczogQXhpb3NIZWFkZXJzJDEuZnJvbShyZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfSk7XG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgb25GaW5pc2goKTtcblxuICAgIGlmIChlcnIgJiYgZXJyLm5hbWUgPT09ICdUeXBlRXJyb3InICYmIC9mZXRjaC9pLnRlc3QoZXJyLm1lc3NhZ2UpKSB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKFxuICAgICAgICBuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCksXG4gICAgICAgIHtcbiAgICAgICAgICBjYXVzZTogZXJyLmNhdXNlIHx8IGVyclxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuXG4gICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGVyciwgZXJyICYmIGVyci5jb2RlLCBjb25maWcsIHJlcXVlc3QpO1xuICB9XG59KTtcblxuY29uc3Qga25vd25BZGFwdGVycyA9IHtcbiAgaHR0cDogaHR0cEFkYXB0ZXIsXG4gIHhocjogeGhyQWRhcHRlcixcbiAgZmV0Y2g6IGZldGNoQWRhcHRlclxufTtcblxudXRpbHMkMS5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWV9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnYWRhcHRlck5hbWUnLCB7dmFsdWV9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbmNvbnN0IGlzUmVzb2x2ZWRIYW5kbGUgPSAoYWRhcHRlcikgPT4gdXRpbHMkMS5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbnZhciBhZGFwdGVycyA9IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzKSA9PiB7XG4gICAgYWRhcHRlcnMgPSB1dGlscyQxLmlzQXJyYXkoYWRhcHRlcnMpID8gYWRhcHRlcnMgOiBbYWRhcHRlcnNdO1xuXG4gICAgY29uc3Qge2xlbmd0aH0gPSBhZGFwdGVycztcbiAgICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgICBsZXQgYWRhcHRlcjtcblxuICAgIGNvbnN0IHJlamVjdGVkUmVhc29ucyA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgbmFtZU9yQWRhcHRlciA9IGFkYXB0ZXJzW2ldO1xuICAgICAgbGV0IGlkO1xuXG4gICAgICBhZGFwdGVyID0gbmFtZU9yQWRhcHRlcjtcblxuICAgICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7XG4gICAgICAgIGFkYXB0ZXIgPSBrbm93bkFkYXB0ZXJzWyhpZCA9IFN0cmluZyhuYW1lT3JBZGFwdGVyKSkudG9Mb3dlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICAgIH1cblxuICAgIGlmICghYWRhcHRlcikge1xuXG4gICAgICBjb25zdCByZWFzb25zID0gT2JqZWN0LmVudHJpZXMocmVqZWN0ZWRSZWFzb25zKVxuICAgICAgICAubWFwKChbaWQsIHN0YXRlXSkgPT4gYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICAgICApO1xuXG4gICAgICBsZXQgcyA9IGxlbmd0aCA/XG4gICAgICAgIChyZWFzb25zLmxlbmd0aCA+IDEgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pKSA6XG4gICAgICAgICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7XG5cbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICAgJ0VSUl9OT1RfU1VQUE9SVCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkYXB0ZXI7XG4gIH0sXG4gIGFkYXB0ZXJzOiBrbm93bkFkYXB0ZXJzXG59O1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzJDEuYWRhcHRlcik7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICByZXNwb25zZVxuICAgICk7XG5cbiAgICByZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjEuNy4yXCI7XG5cbmNvbnN0IHZhbGlkYXRvcnMkMSA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9ycyQxW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMkMS50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiAodmFsdWUsIG9wdCwgb3B0cykgPT4ge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBjb25zdCBvcHQgPSBrZXlzW2ldO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWxpZGF0b3IgPSB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnMkMVxufTtcblxuY29uc3QgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5jbGFzcyBBeGlvcyB7XG4gIGNvbnN0cnVjdG9yKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlciQxKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlciQxKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15ID0ge30pIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCAnJykgOiAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrLnJlcGxhY2UoL14uK1xcbi4rXFxuLywgJycpKSkge1xuICAgICAgICAgICAgZXJyLnN0YWNrICs9ICdcXG4nICsgc3RhY2s7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaWdub3JlIHRoZSBjYXNlIHdoZXJlIFwic3RhY2tcIiBpcyBhbiB1bi13cml0YWJsZSBwcm9wZXJ0eVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBfcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICAgIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICAgIH1cblxuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCB7dHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9IG51bGwpIHtcbiAgICAgIGlmICh1dGlscyQxLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhwYXJhbXNTZXJpYWxpemVyLCB7XG4gICAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgIHNlcmlhbGl6ZTogdmFsaWRhdG9ycy5mdW5jdGlvblxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMkMS5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzJDEuZm9yRWFjaChcbiAgICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgICAgKG1ldGhvZCkgPT4ge1xuICAgICAgICBkZWxldGUgaGVhZGVyc1ttZXRob2RdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoLmFwcGx5KGNoYWluLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHJldHVybiBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuICB9XG59XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMkMS5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzJDEuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmwsXG4gICAgICAgIGRhdGFcbiAgICAgIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBnZW5lcmF0ZUhUVFBNZXRob2QoKTtcblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kICsgJ0Zvcm0nXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCh0cnVlKTtcbn0pO1xuXG52YXIgQXhpb3MkMSA9IEF4aW9zO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbnZhciBDYW5jZWxUb2tlbiQxID0gQ2FuY2VsVG9rZW47XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMkMS5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuXG5jb25zdCBIdHRwU3RhdHVzQ29kZSA9IHtcbiAgQ29udGludWU6IDEwMCxcbiAgU3dpdGNoaW5nUHJvdG9jb2xzOiAxMDEsXG4gIFByb2Nlc3Npbmc6IDEwMixcbiAgRWFybHlIaW50czogMTAzLFxuICBPazogMjAwLFxuICBDcmVhdGVkOiAyMDEsXG4gIEFjY2VwdGVkOiAyMDIsXG4gIE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjogMjAzLFxuICBOb0NvbnRlbnQ6IDIwNCxcbiAgUmVzZXRDb250ZW50OiAyMDUsXG4gIFBhcnRpYWxDb250ZW50OiAyMDYsXG4gIE11bHRpU3RhdHVzOiAyMDcsXG4gIEFscmVhZHlSZXBvcnRlZDogMjA4LFxuICBJbVVzZWQ6IDIyNixcbiAgTXVsdGlwbGVDaG9pY2VzOiAzMDAsXG4gIE1vdmVkUGVybWFuZW50bHk6IDMwMSxcbiAgRm91bmQ6IDMwMixcbiAgU2VlT3RoZXI6IDMwMyxcbiAgTm90TW9kaWZpZWQ6IDMwNCxcbiAgVXNlUHJveHk6IDMwNSxcbiAgVW51c2VkOiAzMDYsXG4gIFRlbXBvcmFyeVJlZGlyZWN0OiAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0OiAzMDgsXG4gIEJhZFJlcXVlc3Q6IDQwMCxcbiAgVW5hdXRob3JpemVkOiA0MDEsXG4gIFBheW1lbnRSZXF1aXJlZDogNDAyLFxuICBGb3JiaWRkZW46IDQwMyxcbiAgTm90Rm91bmQ6IDQwNCxcbiAgTWV0aG9kTm90QWxsb3dlZDogNDA1LFxuICBOb3RBY2NlcHRhYmxlOiA0MDYsXG4gIFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDogNDA3LFxuICBSZXF1ZXN0VGltZW91dDogNDA4LFxuICBDb25mbGljdDogNDA5LFxuICBHb25lOiA0MTAsXG4gIExlbmd0aFJlcXVpcmVkOiA0MTEsXG4gIFByZWNvbmRpdGlvbkZhaWxlZDogNDEyLFxuICBQYXlsb2FkVG9vTGFyZ2U6IDQxMyxcbiAgVXJpVG9vTG9uZzogNDE0LFxuICBVbnN1cHBvcnRlZE1lZGlhVHlwZTogNDE1LFxuICBSYW5nZU5vdFNhdGlzZmlhYmxlOiA0MTYsXG4gIEV4cGVjdGF0aW9uRmFpbGVkOiA0MTcsXG4gIEltQVRlYXBvdDogNDE4LFxuICBNaXNkaXJlY3RlZFJlcXVlc3Q6IDQyMSxcbiAgVW5wcm9jZXNzYWJsZUVudGl0eTogNDIyLFxuICBMb2NrZWQ6IDQyMyxcbiAgRmFpbGVkRGVwZW5kZW5jeTogNDI0LFxuICBUb29FYXJseTogNDI1LFxuICBVcGdyYWRlUmVxdWlyZWQ6IDQyNixcbiAgUHJlY29uZGl0aW9uUmVxdWlyZWQ6IDQyOCxcbiAgVG9vTWFueVJlcXVlc3RzOiA0MjksXG4gIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTogNDMxLFxuICBVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczogNDUxLFxuICBJbnRlcm5hbFNlcnZlckVycm9yOiA1MDAsXG4gIE5vdEltcGxlbWVudGVkOiA1MDEsXG4gIEJhZEdhdGV3YXk6IDUwMixcbiAgU2VydmljZVVuYXZhaWxhYmxlOiA1MDMsXG4gIEdhdGV3YXlUaW1lb3V0OiA1MDQsXG4gIEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOiA1MDUsXG4gIFZhcmlhbnRBbHNvTmVnb3RpYXRlczogNTA2LFxuICBJbnN1ZmZpY2llbnRTdG9yYWdlOiA1MDcsXG4gIExvb3BEZXRlY3RlZDogNTA4LFxuICBOb3RFeHRlbmRlZDogNTEwLFxuICBOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDogNTExLFxufTtcblxuT2JqZWN0LmVudHJpZXMoSHR0cFN0YXR1c0NvZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICBIdHRwU3RhdHVzQ29kZVt2YWx1ZV0gPSBrZXk7XG59KTtcblxudmFyIEh0dHBTdGF0dXNDb2RlJDEgPSBIdHRwU3RhdHVzQ29kZTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zJDEoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcyQxLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscyQxLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MkMS5wcm90b3R5cGUsIGNvbnRleHQsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzJDEuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMkMSk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcyQxO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSBDYW5jZWxlZEVycm9yO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSBDYW5jZWxUb2tlbiQxO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycyQxO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMkMS5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlJDE7XG5cbmF4aW9zLmRlZmF1bHQgPSBheGlvcztcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF4aW9zLmNqcy5tYXBcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXhpb3NDbGllbnQgPSB2b2lkIDA7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xudmFyIEF4aW9zQ2xpZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEF4aW9zQ2xpZW50KF9hKSB7XG4gICAgICAgIHZhciByZXNwb25zZUhhbmRsZXIgPSBfYS5yZXNwb25zZUhhbmRsZXIsIHJlcXVlc3RDb25maWdCdWlsZGVyID0gX2EucmVxdWVzdENvbmZpZ0J1aWxkZXI7XG4gICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyID0gcmVzcG9uc2VIYW5kbGVyO1xuICAgICAgICB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyID0gcmVxdWVzdENvbmZpZ0J1aWxkZXI7XG4gICAgfVxuICAgIEF4aW9zQ2xpZW50LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAocGF0aCwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXF1ZXN0Q29uZmlnO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyLmJ1aWxkKFwiZ2V0XCIsIHBhdGgsIHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q29uZmlnID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIChfYS5zZW50KCkpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBeGlvc0NsaWVudC5wcm90b3R5cGUuZ2V0RGF0YSA9IGZ1bmN0aW9uIChwYXRoLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlcXVlc3RDb25maWc7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMucmVxdWVzdENvbmZpZ0J1aWxkZXIuYnVpbGQoXCJnZXRcIiwgcGF0aCwgcGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImFycmF5YnVmZmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDb25maWcgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3RDb25maWcpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gWzIgLypyZXR1cm4qLywgKF9hLnNlbnQoKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEF4aW9zQ2xpZW50LnByb3RvdHlwZS5wb3N0ID0gZnVuY3Rpb24gKHBhdGgsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdENvbmZpZztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlci5idWlsZChcInBvc3RcIiwgcGF0aCwgcGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDb25maWcgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3RDb25maWcpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gWzIgLypyZXR1cm4qLywgKF9hLnNlbnQoKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEF4aW9zQ2xpZW50LnByb3RvdHlwZS5wb3N0RGF0YSA9IGZ1bmN0aW9uIChwYXRoLCBmb3JtRGF0YSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdENvbmZpZztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlci5idWlsZChcInBvc3RcIiwgcGF0aCwgZm9ybURhdGEpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENvbmZpZyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCAoX2Euc2VudCgpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQXhpb3NDbGllbnQucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChwYXRoLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlcXVlc3RDb25maWc7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMucmVxdWVzdENvbmZpZ0J1aWxkZXIuYnVpbGQoXCJwdXRcIiwgcGF0aCwgcGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDb25maWcgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3RDb25maWcpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gWzIgLypyZXR1cm4qLywgKF9hLnNlbnQoKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEF4aW9zQ2xpZW50LnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiAocGF0aCwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXF1ZXN0Q29uZmlnO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyLmJ1aWxkKFwiZGVsZXRlXCIsIHBhdGgsIHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q29uZmlnID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIChfYS5zZW50KCkpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBeGlvc0NsaWVudC5wcm90b3R5cGUuc2VuZFJlcXVlc3QgPSBmdW5jdGlvbiAocmVxdWVzdENvbmZpZykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zZUhhbmRsZXIuaGFuZGxlKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuICAgICAgICAoMCwgYXhpb3NfMS5kZWZhdWx0KShfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVxdWVzdENvbmZpZyksIHsgbWF4Qm9keUxlbmd0aDogSW5maW5pdHksIG1heENvbnRlbnRMZW5ndGg6IEluZmluaXR5IH0pKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQXhpb3NDbGllbnQ7XG59KCkpO1xuZXhwb3J0cy5BeGlvc0NsaWVudCA9IEF4aW9zQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXhpb3NDbGllbnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRlZmF1bHRIdHRwQ2xpZW50ID0gdm9pZCAwO1xudmFyIEF4aW9zQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9BeGlvc0NsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRlZmF1bHRIdHRwQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBeGlvc0NsaWVudF8xLkF4aW9zQ2xpZW50OyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vZXZhbCcpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBFdmFsRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3JhbmdlJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmdlRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3JlZicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBSZWZlcmVuY2VFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vc3ludGF4Jyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRheEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi90eXBlJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFR5cGVFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vdXJpJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFVSSUVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgY29tcGxleGl0eTogWzIsIDE4XSwgbWF4LXN0YXRlbWVudHM6IFsyLCAzM10gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJykgeyByZXR1cm4gdHJ1ZTsgfVxuXG5cdHZhciBvYmogPSB7fTtcblx0dmFyIHN5bSA9IFN5bWJvbCgndGVzdCcpO1xuXHR2YXIgc3ltT2JqID0gT2JqZWN0KHN5bSk7XG5cdGlmICh0eXBlb2Ygc3ltID09PSAnc3RyaW5nJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bU9iaikgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvb2JqZWN0LmFzc2lnbi9pc3N1ZXMvMTdcblx0Ly8gaWYgKHN5bSBpbnN0YW5jZW9mIFN5bWJvbCkgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL1dlYlJlZmxlY3Rpb24vZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzL2lzc3Vlcy80XG5cdC8vIGlmICghKHN5bU9iaiBpbnN0YW5jZW9mIFN5bWJvbCkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gaWYgKHR5cGVvZiBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyBpZiAoU3RyaW5nKHN5bSkgIT09IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1WYWwgPSA0Mjtcblx0b2JqW3N5bV0gPSBzeW1WYWw7XG5cdGZvciAoc3ltIGluIG9iaikgeyByZXR1cm4gZmFsc2U7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tdW5yZWFjaGFibGUtbG9vcFxuXHRpZiAodHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaik7XG5cdGlmIChzeW1zLmxlbmd0aCAhPT0gMSB8fCBzeW1zWzBdICE9PSBzeW0pIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqLCBzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHN5bSk7XG5cdFx0aWYgKGRlc2NyaXB0b3IudmFsdWUgIT09IHN5bVZhbCB8fCBkZXNjcmlwdG9yLmVudW1lcmFibGUgIT09IHRydWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBvcmlnU3ltYm9sID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sO1xudmFyIGhhc1N5bWJvbFNoYW0gPSByZXF1aXJlKCcuL3NoYW1zJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzTmF0aXZlU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBvcmlnU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBvcmlnU3ltYm9sKCdmb28nKSAhPT0gJ3N5bWJvbCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sKCdiYXInKSAhPT0gJ3N5bWJvbCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0cmV0dXJuIGhhc1N5bWJvbFNoYW0oKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB0ZXN0ID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdGZvbzoge31cbn07XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNQcm90bygpIHtcblx0Ly8gQHRzLWV4cGVjdC1lcnJvcjogVFMgZXJyb3JzIG9uIGFuIGluaGVyaXRlZCBwcm9wZXJ0eSBmb3Igc29tZSByZWFzb25cblx0cmV0dXJuIHsgX19wcm90b19fOiB0ZXN0IH0uZm9vID09PSB0ZXN0LmZvb1xuXHRcdCYmICEodGVzdCBpbnN0YW5jZW9mICRPYmplY3QpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxudmFyIGNvbmNhdHR5ID0gZnVuY3Rpb24gY29uY2F0dHkoYSwgYikge1xuICAgIHZhciBhcnIgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBhcnJbaV0gPSBhW2ldO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgYXJyW2ogKyBhLmxlbmd0aF0gPSBiW2pdO1xuICAgIH1cblxuICAgIHJldHVybiBhcnI7XG59O1xuXG52YXIgc2xpY3kgPSBmdW5jdGlvbiBzbGljeShhcnJMaWtlLCBvZmZzZXQpIHtcbiAgICB2YXIgYXJyID0gW107XG4gICAgZm9yICh2YXIgaSA9IG9mZnNldCB8fCAwLCBqID0gMDsgaSA8IGFyckxpa2UubGVuZ3RoOyBpICs9IDEsIGogKz0gMSkge1xuICAgICAgICBhcnJbal0gPSBhcnJMaWtlW2ldO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xufTtcblxudmFyIGpvaW55ID0gZnVuY3Rpb24gKGFyciwgam9pbmVyKSB7XG4gICAgdmFyIHN0ciA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHN0ciArPSBhcnJbaV07XG4gICAgICAgIGlmIChpICsgMSA8IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN0ciArPSBqb2luZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicgfHwgdG9TdHIuYXBwbHkodGFyZ2V0KSAhPT0gZnVuY1R5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJPUl9NRVNTQUdFICsgdGFyZ2V0KTtcbiAgICB9XG4gICAgdmFyIGFyZ3MgPSBzbGljeShhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBjb25jYXR0eShhcmdzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICBjb25jYXR0eShhcmdzLCBhcmd1bWVudHMpXG4gICAgICAgICk7XG5cbiAgICB9O1xuXG4gICAgdmFyIGJvdW5kTGVuZ3RoID0gbWF4KDAsIHRhcmdldC5sZW5ndGggLSBhcmdzLmxlbmd0aCk7XG4gICAgdmFyIGJvdW5kQXJncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRMZW5ndGg7IGkrKykge1xuICAgICAgICBib3VuZEFyZ3NbaV0gPSAnJCcgKyBpO1xuICAgIH1cblxuICAgIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBqb2lueShib3VuZEFyZ3MsICcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIHx8IGltcGxlbWVudGF0aW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xudmFyICRoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChjYWxsLCAkaGFzT3duKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycycpO1xudmFyICRFdmFsRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvZXZhbCcpO1xudmFyICRSYW5nZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3JhbmdlJyk7XG52YXIgJFJlZmVyZW5jZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3JlZicpO1xudmFyICRTeW50YXhFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9zeW50YXgnKTtcbnZhciAkVHlwZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3R5cGUnKTtcbnZhciAkVVJJRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdXJpJyk7XG5cbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG52YXIgZ2V0RXZhbGxlZENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKGV4cHJlc3Npb25TeW50YXgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gJEZ1bmN0aW9uKCdcInVzZSBzdHJpY3RcIjsgcmV0dXJuICgnICsgZXhwcmVzc2lvblN5bnRheCArICcpLmNvbnN0cnVjdG9yOycpKCk7XG5cdH0gY2F0Y2ggKGUpIHt9XG59O1xuXG52YXIgJGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuaWYgKCRnT1BEKSB7XG5cdHRyeSB7XG5cdFx0JGdPUEQoe30sICcnKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdCRnT1BEID0gbnVsbDsgLy8gdGhpcyBpcyBJRSA4LCB3aGljaCBoYXMgYSBicm9rZW4gZ09QRFxuXHR9XG59XG5cbnZhciB0aHJvd1R5cGVFcnJvciA9IGZ1bmN0aW9uICgpIHtcblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoKTtcbn07XG52YXIgVGhyb3dUeXBlRXJyb3IgPSAkZ09QRFxuXHQ/IChmdW5jdGlvbiAoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnMsIG5vLWNhbGxlciwgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0XHRhcmd1bWVudHMuY2FsbGVlOyAvLyBJRSA4IGRvZXMgbm90IHRocm93IGhlcmVcblx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHR9IGNhdGNoIChjYWxsZWVUaHJvd3MpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIElFIDggdGhyb3dzIG9uIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYXJndW1lbnRzLCAnJylcblx0XHRcdFx0cmV0dXJuICRnT1BEKGFyZ3VtZW50cywgJ2NhbGxlZScpLmdldDtcblx0XHRcdH0gY2F0Y2ggKGdPUER0aHJvd3MpIHtcblx0XHRcdFx0cmV0dXJuIHRocm93VHlwZUVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fSgpKVxuXHQ6IHRocm93VHlwZUVycm9yO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBoYXNQcm90byA9IHJlcXVpcmUoJ2hhcy1wcm90bycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCAoXG5cdGhhc1Byb3RvXG5cdFx0PyBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuXHRcdDogbnVsbFxuKTtcblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyB8fCAhZ2V0UHJvdG8gPyB1bmRlZmluZWQgOiBnZXRQcm90byhVaW50OEFycmF5KTtcblxudmFyIElOVFJJTlNJQ1MgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyAmJiBnZXRQcm90byA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCaWdJbnQ2NEFycmF5JSc6IHR5cGVvZiBCaWdJbnQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludDY0QXJyYXksXG5cdCclQmlnVWludDY0QXJyYXklJzogdHlwZW9mIEJpZ1VpbnQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ1VpbnQ2NEFycmF5LFxuXHQnJUJvb2xlYW4lJzogQm9vbGVhbixcblx0JyVEYXRhVmlldyUnOiB0eXBlb2YgRGF0YVZpZXcgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRGF0YVZpZXcsXG5cdCclRGF0ZSUnOiBEYXRlLFxuXHQnJWRlY29kZVVSSSUnOiBkZWNvZGVVUkksXG5cdCclZGVjb2RlVVJJQ29tcG9uZW50JSc6IGRlY29kZVVSSUNvbXBvbmVudCxcblx0JyVlbmNvZGVVUkklJzogZW5jb2RlVVJJLFxuXHQnJWVuY29kZVVSSUNvbXBvbmVudCUnOiBlbmNvZGVVUklDb21wb25lbnQsXG5cdCclRXJyb3IlJzogJEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6ICRFdmFsRXJyb3IsXG5cdCclRmxvYXQzMkFycmF5JSc6IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQzMkFycmF5LFxuXHQnJUZsb2F0NjRBcnJheSUnOiB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0NjRBcnJheSxcblx0JyVGaW5hbGl6YXRpb25SZWdpc3RyeSUnOiB0eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmluYWxpemF0aW9uUmVnaXN0cnksXG5cdCclRnVuY3Rpb24lJzogJEZ1bmN0aW9uLFxuXHQnJUdlbmVyYXRvckZ1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVJbnQ4QXJyYXklJzogdHlwZW9mIEludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQ4QXJyYXksXG5cdCclSW50MTZBcnJheSUnOiB0eXBlb2YgSW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQxNkFycmF5LFxuXHQnJUludDMyQXJyYXklJzogdHlwZW9mIEludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MzJBcnJheSxcblx0JyVpc0Zpbml0ZSUnOiBpc0Zpbml0ZSxcblx0JyVpc05hTiUnOiBpc05hTixcblx0JyVJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzICYmIGdldFByb3RvID8gZ2V0UHJvdG8oZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSkgOiB1bmRlZmluZWQsXG5cdCclSlNPTiUnOiB0eXBlb2YgSlNPTiA9PT0gJ29iamVjdCcgPyBKU09OIDogdW5kZWZpbmVkLFxuXHQnJU1hcCUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IE1hcCxcblx0JyVNYXBJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyB8fCAhZ2V0UHJvdG8gPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgTWFwKClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyVNYXRoJSc6IE1hdGgsXG5cdCclTnVtYmVyJSc6IE51bWJlcixcblx0JyVPYmplY3QlJzogT2JqZWN0LFxuXHQnJXBhcnNlRmxvYXQlJzogcGFyc2VGbG9hdCxcblx0JyVwYXJzZUludCUnOiBwYXJzZUludCxcblx0JyVQcm9taXNlJSc6IHR5cGVvZiBQcm9taXNlID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb21pc2UsXG5cdCclUHJveHklJzogdHlwZW9mIFByb3h5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb3h5LFxuXHQnJVJhbmdlRXJyb3IlJzogJFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogJFJlZmVyZW5jZUVycm9yLFxuXHQnJVJlZmxlY3QlJzogdHlwZW9mIFJlZmxlY3QgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUmVmbGVjdCxcblx0JyVSZWdFeHAlJzogUmVnRXhwLFxuXHQnJVNldCUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNldCxcblx0JyVTZXRJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyB8fCAhZ2V0UHJvdG8gPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgU2V0KClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlciUnOiB0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2hhcmVkQXJyYXlCdWZmZXIsXG5cdCclU3RyaW5nJSc6IFN0cmluZyxcblx0JyVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzICYmIGdldFByb3RvID8gZ2V0UHJvdG8oJydbU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVTeW1ib2wlJzogaGFzU3ltYm9scyA/IFN5bWJvbCA6IHVuZGVmaW5lZCxcblx0JyVTeW50YXhFcnJvciUnOiAkU3ludGF4RXJyb3IsXG5cdCclVGhyb3dUeXBlRXJyb3IlJzogVGhyb3dUeXBlRXJyb3IsXG5cdCclVHlwZWRBcnJheSUnOiBUeXBlZEFycmF5LFxuXHQnJVR5cGVFcnJvciUnOiAkVHlwZUVycm9yLFxuXHQnJVVpbnQ4QXJyYXklJzogdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDhBcnJheSxcblx0JyVVaW50OENsYW1wZWRBcnJheSUnOiB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDhDbGFtcGVkQXJyYXksXG5cdCclVWludDE2QXJyYXklJzogdHlwZW9mIFVpbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQxNkFycmF5LFxuXHQnJVVpbnQzMkFycmF5JSc6IHR5cGVvZiBVaW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MzJBcnJheSxcblx0JyVVUklFcnJvciUnOiAkVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbmlmIChnZXRQcm90bykge1xuXHR0cnkge1xuXHRcdG51bGwuZXJyb3I7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zaGFkb3dyZWFsbS9wdWxsLzM4NCNpc3N1ZWNvbW1lbnQtMTM2NDI2NDIyOVxuXHRcdHZhciBlcnJvclByb3RvID0gZ2V0UHJvdG8oZ2V0UHJvdG8oZSkpO1xuXHRcdElOVFJJTlNJQ1NbJyVFcnJvci5wcm90b3R5cGUlJ10gPSBlcnJvclByb3RvO1xuXHR9XG59XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4gJiYgZ2V0UHJvdG8pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHQnJUFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b3R5cGUlJzogWydBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvX2VudHJpZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZW50cmllcyddLFxuXHQnJUFycmF5UHJvdG9fZm9yRWFjaCUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdmb3JFYWNoJ10sXG5cdCclQXJyYXlQcm90b19rZXlzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2tleXMnXSxcblx0JyVBcnJheVByb3RvX3ZhbHVlcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICd2YWx1ZXMnXSxcblx0JyVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSc6IFsnQXN5bmNGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVCb29sZWFuUHJvdG90eXBlJSc6IFsnQm9vbGVhbicsICdwcm90b3R5cGUnXSxcblx0JyVEYXRhVmlld1Byb3RvdHlwZSUnOiBbJ0RhdGFWaWV3JywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGVQcm90b3R5cGUlJzogWydEYXRlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUVycm9yUHJvdG90eXBlJSc6IFsnRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRXZhbEVycm9yUHJvdG90eXBlJSc6IFsnRXZhbEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0MzJBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDY0QXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDY0QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRnVuY3Rpb25Qcm90b3R5cGUlJzogWydGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVHZW5lcmF0b3IlJzogWydHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVHZW5lcmF0b3JQcm90b3R5cGUlJzogWydHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclSW50OEFycmF5UHJvdG90eXBlJSc6IFsnSW50OEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDE2QXJyYXlQcm90b3R5cGUlJzogWydJbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDMyQXJyYXlQcm90b3R5cGUlJzogWydJbnQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUpTT05QYXJzZSUnOiBbJ0pTT04nLCAncGFyc2UnXSxcblx0JyVKU09OU3RyaW5naWZ5JSc6IFsnSlNPTicsICdzdHJpbmdpZnknXSxcblx0JyVNYXBQcm90b3R5cGUlJzogWydNYXAnLCAncHJvdG90eXBlJ10sXG5cdCclTnVtYmVyUHJvdG90eXBlJSc6IFsnTnVtYmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJU9iamVjdFByb3RvdHlwZSUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnXSxcblx0JyVPYmpQcm90b190b1N0cmluZyUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndG9TdHJpbmcnXSxcblx0JyVPYmpQcm90b192YWx1ZU9mJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd2YWx1ZU9mJ10sXG5cdCclUHJvbWlzZVByb3RvdHlwZSUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJ10sXG5cdCclUHJvbWlzZVByb3RvX3RoZW4lJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZScsICd0aGVuJ10sXG5cdCclUHJvbWlzZV9hbGwlJzogWydQcm9taXNlJywgJ2FsbCddLFxuXHQnJVByb21pc2VfcmVqZWN0JSc6IFsnUHJvbWlzZScsICdyZWplY3QnXSxcblx0JyVQcm9taXNlX3Jlc29sdmUlJzogWydQcm9taXNlJywgJ3Jlc29sdmUnXSxcblx0JyVSYW5nZUVycm9yUHJvdG90eXBlJSc6IFsnUmFuZ2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUnOiBbJ1JlZmVyZW5jZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZ0V4cFByb3RvdHlwZSUnOiBbJ1JlZ0V4cCcsICdwcm90b3R5cGUnXSxcblx0JyVTZXRQcm90b3R5cGUlJzogWydTZXQnLCAncHJvdG90eXBlJ10sXG5cdCclU2hhcmVkQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydTaGFyZWRBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVTdHJpbmdQcm90b3R5cGUlJzogWydTdHJpbmcnLCAncHJvdG90eXBlJ10sXG5cdCclU3ltYm9sUHJvdG90eXBlJSc6IFsnU3ltYm9sJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bnRheEVycm9yUHJvdG90eXBlJSc6IFsnU3ludGF4RXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVHlwZWRBcnJheVByb3RvdHlwZSUnOiBbJ1R5cGVkQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVHlwZUVycm9yUHJvdG90eXBlJSc6IFsnVHlwZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQ4QXJyYXlQcm90b3R5cGUlJzogWydVaW50OEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhDbGFtcGVkQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDE2QXJyYXlQcm90b3R5cGUlJzogWydVaW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVSSUVycm9yUHJvdG90eXBlJSc6IFsnVVJJRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclV2Vha01hcFByb3RvdHlwZSUnOiBbJ1dlYWtNYXAnLCAncHJvdG90eXBlJ10sXG5cdCclV2Vha1NldFByb3RvdHlwZSUnOiBbJ1dlYWtTZXQnLCAncHJvdG90eXBlJ11cbn07XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJ2hhc293bicpO1xudmFyICRjb25jYXQgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgQXJyYXkucHJvdG90eXBlLmNvbmNhdCk7XG52YXIgJHNwbGljZUFwcGx5ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmFwcGx5LCBBcnJheS5wcm90b3R5cGUuc3BsaWNlKTtcbnZhciAkcmVwbGFjZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyICRzdHJTbGljZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnNsaWNlKTtcbnZhciAkZXhlYyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBSZWdFeHAucHJvdG90eXBlLmV4ZWMpO1xuXG4vKiBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi80LjE3LjE1L2Rpc3QvbG9kYXNoLmpzI0w2NzM1LUw2NzQ0ICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXiUuW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JSQpKS9nO1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nOyAvKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBmdW5jdGlvbiBzdHJpbmdUb1BhdGgoc3RyaW5nKSB7XG5cdHZhciBmaXJzdCA9ICRzdHJTbGljZShzdHJpbmcsIDAsIDEpO1xuXHR2YXIgbGFzdCA9ICRzdHJTbGljZShzdHJpbmcsIC0xKTtcblx0aWYgKGZpcnN0ID09PSAnJScgJiYgbGFzdCAhPT0gJyUnKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBjbG9zaW5nIGAlYCcpO1xuXHR9IGVsc2UgaWYgKGxhc3QgPT09ICclJyAmJiBmaXJzdCAhPT0gJyUnKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBvcGVuaW5nIGAlYCcpO1xuXHR9XG5cdHZhciByZXN1bHQgPSBbXTtcblx0JHJlcGxhY2Uoc3RyaW5nLCByZVByb3BOYW1lLCBmdW5jdGlvbiAobWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuXHRcdHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHF1b3RlID8gJHJlcGxhY2Uoc3ViU3RyaW5nLCByZUVzY2FwZUNoYXIsICckMScpIDogbnVtYmVyIHx8IG1hdGNoO1xuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG4vKiBlbmQgYWRhcHRhdGlvbiAqL1xuXG52YXIgZ2V0QmFzZUludHJpbnNpYyA9IGZ1bmN0aW9uIGdldEJhc2VJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdHZhciBpbnRyaW5zaWNOYW1lID0gbmFtZTtcblx0dmFyIGFsaWFzO1xuXHRpZiAoaGFzT3duKExFR0FDWV9BTElBU0VTLCBpbnRyaW5zaWNOYW1lKSkge1xuXHRcdGFsaWFzID0gTEVHQUNZX0FMSUFTRVNbaW50cmluc2ljTmFtZV07XG5cdFx0aW50cmluc2ljTmFtZSA9ICclJyArIGFsaWFzWzBdICsgJyUnO1xuXHR9XG5cblx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNOYW1lKSkge1xuXHRcdHZhciB2YWx1ZSA9IElOVFJJTlNJQ1NbaW50cmluc2ljTmFtZV07XG5cdFx0aWYgKHZhbHVlID09PSBuZWVkc0V2YWwpIHtcblx0XHRcdHZhbHVlID0gZG9FdmFsKGludHJpbnNpY05hbWUpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyAmJiAhYWxsb3dNaXNzaW5nKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSEnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0YWxpYXM6IGFsaWFzLFxuXHRcdFx0bmFtZTogaW50cmluc2ljTmFtZSxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cblxuXHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGRvZXMgbm90IGV4aXN0IScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgbmFtZS5sZW5ndGggPT09IDApIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdHlwZW9mIGFsbG93TWlzc2luZyAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiYWxsb3dNaXNzaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtcblx0fVxuXG5cdGlmICgkZXhlYygvXiU/W14lXSolPyQvLCBuYW1lKSA9PT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2AlYCBtYXkgbm90IGJlIHByZXNlbnQgYW55d2hlcmUgYnV0IGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgaW50cmluc2ljIG5hbWUnKTtcblx0fVxuXHR2YXIgcGFydHMgPSBzdHJpbmdUb1BhdGgobmFtZSk7XG5cdHZhciBpbnRyaW5zaWNCYXNlTmFtZSA9IHBhcnRzLmxlbmd0aCA+IDAgPyBwYXJ0c1swXSA6ICcnO1xuXG5cdHZhciBpbnRyaW5zaWMgPSBnZXRCYXNlSW50cmluc2ljKCclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnLCBhbGxvd01pc3NpbmcpO1xuXHR2YXIgaW50cmluc2ljUmVhbE5hbWUgPSBpbnRyaW5zaWMubmFtZTtcblx0dmFyIHZhbHVlID0gaW50cmluc2ljLnZhbHVlO1xuXHR2YXIgc2tpcEZ1cnRoZXJDYWNoaW5nID0gZmFsc2U7XG5cblx0dmFyIGFsaWFzID0gaW50cmluc2ljLmFsaWFzO1xuXHRpZiAoYWxpYXMpIHtcblx0XHRpbnRyaW5zaWNCYXNlTmFtZSA9IGFsaWFzWzBdO1xuXHRcdCRzcGxpY2VBcHBseShwYXJ0cywgJGNvbmNhdChbMCwgMV0sIGFsaWFzKSk7XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMSwgaXNPd24gPSB0cnVlOyBpIDwgcGFydHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHR2YXIgcGFydCA9IHBhcnRzW2ldO1xuXHRcdHZhciBmaXJzdCA9ICRzdHJTbGljZShwYXJ0LCAwLCAxKTtcblx0XHR2YXIgbGFzdCA9ICRzdHJTbGljZShwYXJ0LCAtMSk7XG5cdFx0aWYgKFxuXHRcdFx0KFxuXHRcdFx0XHQoZmlyc3QgPT09ICdcIicgfHwgZmlyc3QgPT09IFwiJ1wiIHx8IGZpcnN0ID09PSAnYCcpXG5cdFx0XHRcdHx8IChsYXN0ID09PSAnXCInIHx8IGxhc3QgPT09IFwiJ1wiIHx8IGxhc3QgPT09ICdgJylcblx0XHRcdClcblx0XHRcdCYmIGZpcnN0ICE9PSBsYXN0XG5cdFx0KSB7XG5cdFx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdwcm9wZXJ0eSBuYW1lcyB3aXRoIHF1b3RlcyBtdXN0IGhhdmUgbWF0Y2hpbmcgcXVvdGVzJyk7XG5cdFx0fVxuXHRcdGlmIChwYXJ0ID09PSAnY29uc3RydWN0b3InIHx8ICFpc093bikge1xuXHRcdFx0c2tpcEZ1cnRoZXJDYWNoaW5nID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpbnRyaW5zaWNCYXNlTmFtZSArPSAnLicgKyBwYXJ0O1xuXHRcdGludHJpbnNpY1JlYWxOYW1lID0gJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJSc7XG5cblx0XHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY1JlYWxOYW1lKSkge1xuXHRcdFx0dmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY1JlYWxOYW1lXTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcblx0XHRcdGlmICghKHBhcnQgaW4gdmFsdWUpKSB7XG5cdFx0XHRcdGlmICghYWxsb3dNaXNzaW5nKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Jhc2UgaW50cmluc2ljIGZvciAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgdGhlIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUuJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZvaWQgdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCRnT1BEICYmIChpICsgMSkgPj0gcGFydHMubGVuZ3RoKSB7XG5cdFx0XHRcdHZhciBkZXNjID0gJGdPUEQodmFsdWUsIHBhcnQpO1xuXHRcdFx0XHRpc093biA9ICEhZGVzYztcblxuXHRcdFx0XHQvLyBCeSBjb252ZW50aW9uLCB3aGVuIGEgZGF0YSBwcm9wZXJ0eSBpcyBjb252ZXJ0ZWQgdG8gYW4gYWNjZXNzb3Jcblx0XHRcdFx0Ly8gcHJvcGVydHkgdG8gZW11bGF0ZSBhIGRhdGEgcHJvcGVydHkgdGhhdCBkb2VzIG5vdCBzdWZmZXIgZnJvbVxuXHRcdFx0XHQvLyB0aGUgb3ZlcnJpZGUgbWlzdGFrZSwgdGhhdCBhY2Nlc3NvcidzIGdldHRlciBpcyBtYXJrZWQgd2l0aFxuXHRcdFx0XHQvLyBhbiBgb3JpZ2luYWxWYWx1ZWAgcHJvcGVydHkuIEhlcmUsIHdoZW4gd2UgZGV0ZWN0IHRoaXMsIHdlXG5cdFx0XHRcdC8vIHVwaG9sZCB0aGUgaWxsdXNpb24gYnkgcHJldGVuZGluZyB0byBzZWUgdGhhdCBvcmlnaW5hbCBkYXRhXG5cdFx0XHRcdC8vIHByb3BlcnR5LCBpLmUuLCByZXR1cm5pbmcgdGhlIHZhbHVlIHJhdGhlciB0aGFuIHRoZSBnZXR0ZXJcblx0XHRcdFx0Ly8gaXRzZWxmLlxuXHRcdFx0XHRpZiAoaXNPd24gJiYgJ2dldCcgaW4gZGVzYyAmJiAhKCdvcmlnaW5hbFZhbHVlJyBpbiBkZXNjLmdldCkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IGRlc2MuZ2V0O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlzT3duID0gaGFzT3duKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzT3duICYmICFza2lwRnVydGhlckNhY2hpbmcpIHtcblx0XHRcdFx0SU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSkgfHwgZmFsc2U7XG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gJGRlZmluZVByb3BlcnR5O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGdPUEQgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJScsIHRydWUpO1xuXG5pZiAoJGdPUEQpIHtcblx0dHJ5IHtcblx0XHQkZ09QRChbXSwgJ2xlbmd0aCcpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZ09QRFxuXHRcdCRnT1BEID0gbnVsbDtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9ICRnT1BEO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnZXMtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbnZhciAkU3ludGF4RXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvc3ludGF4Jyk7XG52YXIgJFR5cGVFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy90eXBlJyk7XG5cbnZhciBnb3BkID0gcmVxdWlyZSgnZ29wZCcpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVEYXRhUHJvcGVydHkoXG5cdG9iaixcblx0cHJvcGVydHksXG5cdHZhbHVlXG4pIHtcblx0aWYgKCFvYmogfHwgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmogIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BvYmpgIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb25gJyk7XG5cdH1cblx0aWYgKHR5cGVvZiBwcm9wZXJ0eSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHByb3BlcnR5ICE9PSAnc3ltYm9sJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgcHJvcGVydHlgIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2xgJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIHR5cGVvZiBhcmd1bWVudHNbM10gIT09ICdib29sZWFuJyAmJiBhcmd1bWVudHNbM10gIT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYG5vbkVudW1lcmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCcpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gNCAmJiB0eXBlb2YgYXJndW1lbnRzWzRdICE9PSAnYm9vbGVhbicgJiYgYXJndW1lbnRzWzRdICE9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Bub25Xcml0YWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIHR5cGVvZiBhcmd1bWVudHNbNV0gIT09ICdib29sZWFuJyAmJiBhcmd1bWVudHNbNV0gIT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYG5vbkNvbmZpZ3VyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiA2ICYmIHR5cGVvZiBhcmd1bWVudHNbNl0gIT09ICdib29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgbG9vc2VgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4nKTtcblx0fVxuXG5cdHZhciBub25FbnVtZXJhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiBudWxsO1xuXHR2YXIgbm9uV3JpdGFibGUgPSBhcmd1bWVudHMubGVuZ3RoID4gNCA/IGFyZ3VtZW50c1s0XSA6IG51bGw7XG5cdHZhciBub25Db25maWd1cmFibGUgPSBhcmd1bWVudHMubGVuZ3RoID4gNSA/IGFyZ3VtZW50c1s1XSA6IG51bGw7XG5cdHZhciBsb29zZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA2ID8gYXJndW1lbnRzWzZdIDogZmFsc2U7XG5cblx0LyogQHR5cGUge2ZhbHNlIHwgVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj59ICovXG5cdHZhciBkZXNjID0gISFnb3BkICYmIGdvcGQob2JqLCBwcm9wZXJ0eSk7XG5cblx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eShvYmosIHByb3BlcnR5LCB7XG5cdFx0XHRjb25maWd1cmFibGU6IG5vbkNvbmZpZ3VyYWJsZSA9PT0gbnVsbCAmJiBkZXNjID8gZGVzYy5jb25maWd1cmFibGUgOiAhbm9uQ29uZmlndXJhYmxlLFxuXHRcdFx0ZW51bWVyYWJsZTogbm9uRW51bWVyYWJsZSA9PT0gbnVsbCAmJiBkZXNjID8gZGVzYy5lbnVtZXJhYmxlIDogIW5vbkVudW1lcmFibGUsXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHR3cml0YWJsZTogbm9uV3JpdGFibGUgPT09IG51bGwgJiYgZGVzYyA/IGRlc2Mud3JpdGFibGUgOiAhbm9uV3JpdGFibGVcblx0XHR9KTtcblx0fSBlbHNlIGlmIChsb29zZSB8fCAoIW5vbkVudW1lcmFibGUgJiYgIW5vbldyaXRhYmxlICYmICFub25Db25maWd1cmFibGUpKSB7XG5cdFx0Ly8gbXVzdCBmYWxsIGJhY2sgdG8gW1tTZXRdXSwgYW5kIHdhcyBub3QgZXhwbGljaXRseSBhc2tlZCB0byBtYWtlIG5vbi1lbnVtZXJhYmxlLCBub24td3JpdGFibGUsIG9yIG5vbi1jb25maWd1cmFibGVcblx0XHRvYmpbcHJvcGVydHldID0gdmFsdWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdUaGlzIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgZGVmaW5pbmcgYSBwcm9wZXJ0eSBhcyBub24tY29uZmlndXJhYmxlLCBub24td3JpdGFibGUsIG9yIG5vbi1lbnVtZXJhYmxlLicpO1xuXHR9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnZXMtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbnZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3JzID0gZnVuY3Rpb24gaGFzUHJvcGVydHlEZXNjcmlwdG9ycygpIHtcblx0cmV0dXJuICEhJGRlZmluZVByb3BlcnR5O1xufTtcblxuaGFzUHJvcGVydHlEZXNjcmlwdG9ycy5oYXNBcnJheUxlbmd0aERlZmluZUJ1ZyA9IGZ1bmN0aW9uIGhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnKCkge1xuXHQvLyBub2RlIHYwLjYgaGFzIGEgYnVnIHdoZXJlIGFycmF5IGxlbmd0aHMgY2FuIGJlIFNldCBidXQgbm90IERlZmluZWRcblx0aWYgKCEkZGVmaW5lUHJvcGVydHkpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHR0cnkge1xuXHRcdHJldHVybiAkZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHZhbHVlOiAxIH0pLmxlbmd0aCAhPT0gMTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIEluIEZpcmVmb3ggNC0yMiwgZGVmaW5pbmcgbGVuZ3RoIG9uIGFuIGFycmF5IHRocm93cyBhbiBleGNlcHRpb24uXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzUHJvcGVydHlEZXNjcmlwdG9ycztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtZGF0YS1wcm9wZXJ0eScpO1xudmFyIGhhc0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnaGFzLXByb3BlcnR5LWRlc2NyaXB0b3JzJykoKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnZ29wZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy90eXBlJyk7XG52YXIgJGZsb29yID0gR2V0SW50cmluc2ljKCclTWF0aC5mbG9vciUnKTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2V0RnVuY3Rpb25MZW5ndGgoZm4sIGxlbmd0aCkge1xuXHRpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BmbmAgaXMgbm90IGEgZnVuY3Rpb24nKTtcblx0fVxuXHRpZiAodHlwZW9mIGxlbmd0aCAhPT0gJ251bWJlcicgfHwgbGVuZ3RoIDwgMCB8fCBsZW5ndGggPiAweEZGRkZGRkZGIHx8ICRmbG9vcihsZW5ndGgpICE9PSBsZW5ndGgpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGxlbmd0aGAgbXVzdCBiZSBhIHBvc2l0aXZlIDMyLWJpdCBpbnRlZ2VyJyk7XG5cdH1cblxuXHR2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiAhIWFyZ3VtZW50c1syXTtcblxuXHR2YXIgZnVuY3Rpb25MZW5ndGhJc0NvbmZpZ3VyYWJsZSA9IHRydWU7XG5cdHZhciBmdW5jdGlvbkxlbmd0aElzV3JpdGFibGUgPSB0cnVlO1xuXHRpZiAoJ2xlbmd0aCcgaW4gZm4gJiYgZ09QRCkge1xuXHRcdHZhciBkZXNjID0gZ09QRChmbiwgJ2xlbmd0aCcpO1xuXHRcdGlmIChkZXNjICYmICFkZXNjLmNvbmZpZ3VyYWJsZSkge1xuXHRcdFx0ZnVuY3Rpb25MZW5ndGhJc0NvbmZpZ3VyYWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoZGVzYyAmJiAhZGVzYy53cml0YWJsZSkge1xuXHRcdFx0ZnVuY3Rpb25MZW5ndGhJc1dyaXRhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGZ1bmN0aW9uTGVuZ3RoSXNDb25maWd1cmFibGUgfHwgZnVuY3Rpb25MZW5ndGhJc1dyaXRhYmxlIHx8ICFsb29zZSkge1xuXHRcdGlmIChoYXNEZXNjcmlwdG9ycykge1xuXHRcdFx0ZGVmaW5lKC8qKiBAdHlwZSB7UGFyYW1ldGVyczxkZWZpbmU+WzBdfSAqLyAoZm4pLCAnbGVuZ3RoJywgbGVuZ3RoLCB0cnVlLCB0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVmaW5lKC8qKiBAdHlwZSB7UGFyYW1ldGVyczxkZWZpbmU+WzBdfSAqLyAoZm4pLCAnbGVuZ3RoJywgbGVuZ3RoKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZuO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIHNldEZ1bmN0aW9uTGVuZ3RoID0gcmVxdWlyZSgnc2V0LWZ1bmN0aW9uLWxlbmd0aCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy90eXBlJyk7XG52YXIgJGFwcGx5ID0gR2V0SW50cmluc2ljKCclRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5JScpO1xudmFyICRjYWxsID0gR2V0SW50cmluc2ljKCclRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwlJyk7XG52YXIgJHJlZmxlY3RBcHBseSA9IEdldEludHJpbnNpYygnJVJlZmxlY3QuYXBwbHklJywgdHJ1ZSkgfHwgYmluZC5jYWxsKCRjYWxsLCAkYXBwbHkpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnZXMtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgJG1heCA9IEdldEludHJpbnNpYygnJU1hdGgubWF4JScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCaW5kKG9yaWdpbmFsRnVuY3Rpb24pIHtcblx0aWYgKHR5cGVvZiBvcmlnaW5hbEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2EgZnVuY3Rpb24gaXMgcmVxdWlyZWQnKTtcblx0fVxuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdHJldHVybiBzZXRGdW5jdGlvbkxlbmd0aChcblx0XHRmdW5jLFxuXHRcdDEgKyAkbWF4KDAsIG9yaWdpbmFsRnVuY3Rpb24ubGVuZ3RoIC0gKGFyZ3VtZW50cy5sZW5ndGggLSAxKSksXG5cdFx0dHJ1ZVxuXHQpO1xufTtcblxudmFyIGFwcGx5QmluZCA9IGZ1bmN0aW9uIGFwcGx5QmluZCgpIHtcblx0cmV0dXJuICRyZWZsZWN0QXBwbHkoYmluZCwgJGFwcGx5LCBhcmd1bWVudHMpO1xufTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHQkZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdhcHBseScsIHsgdmFsdWU6IGFwcGx5QmluZCB9KTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzLmFwcGx5ID0gYXBwbHlCaW5kO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCcuLycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQmluZChHZXRJbnRyaW5zaWMoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQm91bmRJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdHZhciBpbnRyaW5zaWMgPSBHZXRJbnRyaW5zaWMobmFtZSwgISFhbGxvd01pc3NpbmcpO1xuXHRpZiAodHlwZW9mIGludHJpbnNpYyA9PT0gJ2Z1bmN0aW9uJyAmJiAkaW5kZXhPZihuYW1lLCAnLnByb3RvdHlwZS4nKSA+IC0xKSB7XG5cdFx0cmV0dXJuIGNhbGxCaW5kKGludHJpbnNpYyk7XG5cdH1cblx0cmV0dXJuIGludHJpbnNpYztcbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7fSIsInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyICRtYXRjaCA9IFN0cmluZy5wcm90b3R5cGUubWF0Y2g7XG52YXIgJHNsaWNlID0gU3RyaW5nLnByb3RvdHlwZS5zbGljZTtcbnZhciAkcmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcbnZhciAkdG9VcHBlckNhc2UgPSBTdHJpbmcucHJvdG90eXBlLnRvVXBwZXJDYXNlO1xudmFyICR0b0xvd2VyQ2FzZSA9IFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2U7XG52YXIgJHRlc3QgPSBSZWdFeHAucHJvdG90eXBlLnRlc3Q7XG52YXIgJGNvbmNhdCA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQ7XG52YXIgJGpvaW4gPSBBcnJheS5wcm90b3R5cGUuam9pbjtcbnZhciAkYXJyU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgJGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xuLy8gaWUsIGBoYXMtdG9zdHJpbmd0YWcvc2hhbXNcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnICYmICh0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSBoYXNTaGFtbWVkU3ltYm9scyA/ICdvYmplY3QnIDogJ3N5bWJvbCcpXG4gICAgPyBTeW1ib2wudG9TdHJpbmdUYWdcbiAgICA6IG51bGw7XG52YXIgaXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxudmFyIGdQTyA9ICh0eXBlb2YgUmVmbGVjdCA9PT0gJ2Z1bmN0aW9uJyA/IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgOiBPYmplY3QuZ2V0UHJvdG90eXBlT2YpIHx8IChcbiAgICBbXS5fX3Byb3RvX18gPT09IEFycmF5LnByb3RvdHlwZSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvXG4gICAgICAgID8gZnVuY3Rpb24gKE8pIHtcbiAgICAgICAgICAgIHJldHVybiBPLl9fcHJvdG9fXzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICB9XG4gICAgICAgIDogbnVsbFxuKTtcblxuZnVuY3Rpb24gYWRkTnVtZXJpY1NlcGFyYXRvcihudW0sIHN0cikge1xuICAgIGlmIChcbiAgICAgICAgbnVtID09PSBJbmZpbml0eVxuICAgICAgICB8fCBudW0gPT09IC1JbmZpbml0eVxuICAgICAgICB8fCBudW0gIT09IG51bVxuICAgICAgICB8fCAobnVtICYmIG51bSA+IC0xMDAwICYmIG51bSA8IDEwMDApXG4gICAgICAgIHx8ICR0ZXN0LmNhbGwoL2UvLCBzdHIpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIHZhciBzZXBSZWdleCA9IC9bMC05XSg/PSg/OlswLTldezN9KSsoPyFbMC05XSkpL2c7XG4gICAgaWYgKHR5cGVvZiBudW0gPT09ICdudW1iZXInKSB7XG4gICAgICAgIHZhciBpbnQgPSBudW0gPCAwID8gLSRmbG9vcigtbnVtKSA6ICRmbG9vcihudW0pOyAvLyB0cnVuYyhudW0pXG4gICAgICAgIGlmIChpbnQgIT09IG51bSkge1xuICAgICAgICAgICAgdmFyIGludFN0ciA9IFN0cmluZyhpbnQpO1xuICAgICAgICAgICAgdmFyIGRlYyA9ICRzbGljZS5jYWxsKHN0ciwgaW50U3RyLmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgcmV0dXJuICRyZXBsYWNlLmNhbGwoaW50U3RyLCBzZXBSZWdleCwgJyQmXycpICsgJy4nICsgJHJlcGxhY2UuY2FsbCgkcmVwbGFjZS5jYWxsKGRlYywgLyhbMC05XXszfSkvZywgJyQmXycpLCAvXyQvLCAnJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICRyZXBsYWNlLmNhbGwoc3RyLCBzZXBSZWdleCwgJyQmXycpO1xufVxuXG52YXIgdXRpbEluc3BlY3QgPSByZXF1aXJlKCcuL3V0aWwuaW5zcGVjdCcpO1xudmFyIGluc3BlY3RDdXN0b20gPSB1dGlsSW5zcGVjdC5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGlzU3ltYm9sKGluc3BlY3RDdXN0b20pID8gaW5zcGVjdEN1c3RvbSA6IG51bGw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5zcGVjdF8ob2JqLCBvcHRpb25zLCBkZXB0aCwgc2Vlbikge1xuICAgIHZhciBvcHRzID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIGlmIChoYXMob3B0cywgJ3F1b3RlU3R5bGUnKSAmJiAob3B0cy5xdW90ZVN0eWxlICE9PSAnc2luZ2xlJyAmJiBvcHRzLnF1b3RlU3R5bGUgIT09ICdkb3VibGUnKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJxdW90ZVN0eWxlXCIgbXVzdCBiZSBcInNpbmdsZVwiIG9yIFwiZG91YmxlXCInKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgICBoYXMob3B0cywgJ21heFN0cmluZ0xlbmd0aCcpICYmICh0eXBlb2Ygb3B0cy5tYXhTdHJpbmdMZW5ndGggPT09ICdudW1iZXInXG4gICAgICAgICAgICA/IG9wdHMubWF4U3RyaW5nTGVuZ3RoIDwgMCAmJiBvcHRzLm1heFN0cmluZ0xlbmd0aCAhPT0gSW5maW5pdHlcbiAgICAgICAgICAgIDogb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IG51bGxcbiAgICAgICAgKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJtYXhTdHJpbmdMZW5ndGhcIiwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBJbmZpbml0eSwgb3IgYG51bGxgJyk7XG4gICAgfVxuICAgIHZhciBjdXN0b21JbnNwZWN0ID0gaGFzKG9wdHMsICdjdXN0b21JbnNwZWN0JykgPyBvcHRzLmN1c3RvbUluc3BlY3QgOiB0cnVlO1xuICAgIGlmICh0eXBlb2YgY3VzdG9tSW5zcGVjdCAhPT0gJ2Jvb2xlYW4nICYmIGN1c3RvbUluc3BlY3QgIT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBcImN1c3RvbUluc3BlY3RcIiwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYHRydWVgLCBgZmFsc2VgLCBvciBgXFwnc3ltYm9sXFwnYCcpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdpbmRlbnQnKVxuICAgICAgICAmJiBvcHRzLmluZGVudCAhPT0gbnVsbFxuICAgICAgICAmJiBvcHRzLmluZGVudCAhPT0gJ1xcdCdcbiAgICAgICAgJiYgIShwYXJzZUludChvcHRzLmluZGVudCwgMTApID09PSBvcHRzLmluZGVudCAmJiBvcHRzLmluZGVudCA+IDApXG4gICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBcImluZGVudFwiIG11c3QgYmUgXCJcXFxcdFwiLCBhbiBpbnRlZ2VyID4gMCwgb3IgYG51bGxgJyk7XG4gICAgfVxuICAgIGlmIChoYXMob3B0cywgJ251bWVyaWNTZXBhcmF0b3InKSAmJiB0eXBlb2Ygb3B0cy5udW1lcmljU2VwYXJhdG9yICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibnVtZXJpY1NlcGFyYXRvclwiLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBgdHJ1ZWAgb3IgYGZhbHNlYCcpO1xuICAgIH1cbiAgICB2YXIgbnVtZXJpY1NlcGFyYXRvciA9IG9wdHMubnVtZXJpY1NlcGFyYXRvcjtcblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgfVxuICAgIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gb2JqID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGluc3BlY3RTdHJpbmcob2JqLCBvcHRzKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChvYmogPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBJbmZpbml0eSAvIG9iaiA+IDAgPyAnMCcgOiAnLTAnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdHIgPSBTdHJpbmcob2JqKTtcbiAgICAgICAgcmV0dXJuIG51bWVyaWNTZXBhcmF0b3IgPyBhZGROdW1lcmljU2VwYXJhdG9yKG9iaiwgc3RyKSA6IHN0cjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdiaWdpbnQnKSB7XG4gICAgICAgIHZhciBiaWdJbnRTdHIgPSBTdHJpbmcob2JqKSArICduJztcbiAgICAgICAgcmV0dXJuIG51bWVyaWNTZXBhcmF0b3IgPyBhZGROdW1lcmljU2VwYXJhdG9yKG9iaiwgYmlnSW50U3RyKSA6IGJpZ0ludFN0cjtcbiAgICB9XG5cbiAgICB2YXIgbWF4RGVwdGggPSB0eXBlb2Ygb3B0cy5kZXB0aCA9PT0gJ3VuZGVmaW5lZCcgPyA1IDogb3B0cy5kZXB0aDtcbiAgICBpZiAodHlwZW9mIGRlcHRoID09PSAndW5kZWZpbmVkJykgeyBkZXB0aCA9IDA7IH1cbiAgICBpZiAoZGVwdGggPj0gbWF4RGVwdGggJiYgbWF4RGVwdGggPiAwICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KG9iaikgPyAnW0FycmF5XScgOiAnW09iamVjdF0nO1xuICAgIH1cblxuICAgIHZhciBpbmRlbnQgPSBnZXRJbmRlbnQob3B0cywgZGVwdGgpO1xuXG4gICAgaWYgKHR5cGVvZiBzZWVuID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzZWVuID0gW107XG4gICAgfSBlbHNlIGlmIChpbmRleE9mKHNlZW4sIG9iaikgPj0gMCkge1xuICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3BlY3QodmFsdWUsIGZyb20sIG5vSW5kZW50KSB7XG4gICAgICAgIGlmIChmcm9tKSB7XG4gICAgICAgICAgICBzZWVuID0gJGFyclNsaWNlLmNhbGwoc2Vlbik7XG4gICAgICAgICAgICBzZWVuLnB1c2goZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vSW5kZW50KSB7XG4gICAgICAgICAgICB2YXIgbmV3T3B0cyA9IHtcbiAgICAgICAgICAgICAgICBkZXB0aDogb3B0cy5kZXB0aFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChoYXMob3B0cywgJ3F1b3RlU3R5bGUnKSkge1xuICAgICAgICAgICAgICAgIG5ld09wdHMucXVvdGVTdHlsZSA9IG9wdHMucXVvdGVTdHlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgbmV3T3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zcGVjdF8odmFsdWUsIG9wdHMsIGRlcHRoICsgMSwgc2Vlbik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicgJiYgIWlzUmVnRXhwKG9iaikpIHsgLy8gaW4gb2xkZXIgZW5naW5lcywgcmVnZXhlcyBhcmUgY2FsbGFibGVcbiAgICAgICAgdmFyIG5hbWUgPSBuYW1lT2Yob2JqKTtcbiAgICAgICAgdmFyIGtleXMgPSBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCk7XG4gICAgICAgIHJldHVybiAnW0Z1bmN0aW9uJyArIChuYW1lID8gJzogJyArIG5hbWUgOiAnIChhbm9ueW1vdXMpJykgKyAnXScgKyAoa2V5cy5sZW5ndGggPiAwID8gJyB7ICcgKyAkam9pbi5jYWxsKGtleXMsICcsICcpICsgJyB9JyA6ICcnKTtcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKG9iaikpIHtcbiAgICAgICAgdmFyIHN5bVN0cmluZyA9IGhhc1NoYW1tZWRTeW1ib2xzID8gJHJlcGxhY2UuY2FsbChTdHJpbmcob2JqKSwgL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArICR0b0xvd2VyQ2FzZS5jYWxsKFN0cmluZyhvYmoubm9kZU5hbWUpKTtcbiAgICAgICAgdmFyIGF0dHJzID0gb2JqLmF0dHJpYnV0ZXMgfHwgW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHMgKz0gJyAnICsgYXR0cnNbaV0ubmFtZSArICc9JyArIHdyYXBRdW90ZXMocXVvdGUoYXR0cnNbaV0udmFsdWUpLCAnZG91YmxlJywgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcyArPSAnPic7XG4gICAgICAgIGlmIChvYmouY2hpbGROb2RlcyAmJiBvYmouY2hpbGROb2Rlcy5sZW5ndGgpIHsgcyArPSAnLi4uJzsgfVxuICAgICAgICBzICs9ICc8LycgKyAkdG9Mb3dlckNhc2UuY2FsbChTdHJpbmcob2JqLm5vZGVOYW1lKSkgKyAnPic7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgICAgIGlmIChvYmoubGVuZ3RoID09PSAwKSB7IHJldHVybiAnW10nOyB9XG4gICAgICAgIHZhciB4cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKGluZGVudCAmJiAhc2luZ2xlTGluZVZhbHVlcyh4cykpIHtcbiAgICAgICAgICAgIHJldHVybiAnWycgKyBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkgKyAnXSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdbICcgKyAkam9pbi5jYWxsKHhzLCAnLCAnKSArICcgXSc7XG4gICAgfVxuICAgIGlmIChpc0Vycm9yKG9iaikpIHtcbiAgICAgICAgdmFyIHBhcnRzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoISgnY2F1c2UnIGluIEVycm9yLnByb3RvdHlwZSkgJiYgJ2NhdXNlJyBpbiBvYmogJiYgIWlzRW51bWVyYWJsZS5jYWxsKG9iaiwgJ2NhdXNlJykpIHtcbiAgICAgICAgICAgIHJldHVybiAneyBbJyArIFN0cmluZyhvYmopICsgJ10gJyArICRqb2luLmNhbGwoJGNvbmNhdC5jYWxsKCdbY2F1c2VdOiAnICsgaW5zcGVjdChvYmouY2F1c2UpLCBwYXJ0cyksICcsICcpICsgJyB9JztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7IHJldHVybiAnWycgKyBTdHJpbmcob2JqKSArICddJzsgfVxuICAgICAgICByZXR1cm4gJ3sgWycgKyBTdHJpbmcob2JqKSArICddICcgKyAkam9pbi5jYWxsKHBhcnRzLCAnLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicgJiYgdXRpbEluc3BlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlsSW5zcGVjdChvYmosIHsgZGVwdGg6IG1heERlcHRoIC0gZGVwdGggfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VzdG9tSW5zcGVjdCAhPT0gJ3N5bWJvbCcgJiYgdHlwZW9mIG9iai5pbnNwZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLmluc3BlY3QoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNNYXAob2JqKSkge1xuICAgICAgICB2YXIgbWFwUGFydHMgPSBbXTtcbiAgICAgICAgaWYgKG1hcEZvckVhY2gpIHtcbiAgICAgICAgICAgIG1hcEZvckVhY2guY2FsbChvYmosIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgaWYgKHNldEZvckVhY2gpIHtcbiAgICAgICAgICAgIHNldEZvckVhY2guY2FsbChvYmosIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHNldFBhcnRzLnB1c2goaW5zcGVjdCh2YWx1ZSwgb2JqKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbk9mKCdTZXQnLCBzZXRTaXplLmNhbGwob2JqKSwgc2V0UGFydHMsIGluZGVudCk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtNYXAob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha01hcCcpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrU2V0KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtTZXQnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1JlZihvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrUmVmJyk7XG4gICAgfVxuICAgIGlmIChpc051bWJlcihvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChOdW1iZXIob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoaXNCaWdJbnQob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoYmlnSW50VmFsdWVPZi5jYWxsKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQm9vbGVhbihvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoYm9vbGVhblZhbHVlT2YuY2FsbChvYmopKTtcbiAgICB9XG4gICAgaWYgKGlzU3RyaW5nKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KFN0cmluZyhvYmopKSk7XG4gICAgfVxuICAgIC8vIG5vdGU6IGluIElFIDgsIHNvbWV0aW1lcyBgZ2xvYmFsICE9PSB3aW5kb3dgIGJ1dCBib3RoIGFyZSB0aGUgcHJvdG90eXBlcyBvZiBlYWNoIG90aGVyXG4gICAgLyogZXNsaW50LWVudiBicm93c2VyICovXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIG9iaiA9PT0gd2luZG93KSB7XG4gICAgICAgIHJldHVybiAneyBbb2JqZWN0IFdpbmRvd10gfSc7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBvYmogPT09IGdsb2JhbFRoaXMpXG4gICAgICAgIHx8ICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBvYmogPT09IGdsb2JhbClcbiAgICApIHtcbiAgICAgICAgcmV0dXJuICd7IFtvYmplY3QgZ2xvYmFsVGhpc10gfSc7XG4gICAgfVxuICAgIGlmICghaXNEYXRlKG9iaikgJiYgIWlzUmVnRXhwKG9iaikpIHtcbiAgICAgICAgdmFyIHlzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICB2YXIgaXNQbGFpbk9iamVjdCA9IGdQTyA/IGdQTyhvYmopID09PSBPYmplY3QucHJvdG90eXBlIDogb2JqIGluc3RhbmNlb2YgT2JqZWN0IHx8IG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuICAgICAgICB2YXIgcHJvdG9UYWcgPSBvYmogaW5zdGFuY2VvZiBPYmplY3QgPyAnJyA6ICdudWxsIHByb3RvdHlwZSc7XG4gICAgICAgIHZhciBzdHJpbmdUYWcgPSAhaXNQbGFpbk9iamVjdCAmJiB0b1N0cmluZ1RhZyAmJiBPYmplY3Qob2JqKSA9PT0gb2JqICYmIHRvU3RyaW5nVGFnIGluIG9iaiA/ICRzbGljZS5jYWxsKHRvU3RyKG9iaiksIDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyAkam9pbi5jYWxsKCRjb25jYXQuY2FsbChbXSwgc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSksICc6ICcpICsgJ10gJyA6ICcnKTtcbiAgICAgICAgaWYgKHlzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gdGFnICsgJ3t9JzsgfVxuICAgICAgICBpZiAoaW5kZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFnICsgJ3snICsgaW5kZW50ZWRKb2luKHlzLCBpbmRlbnQpICsgJ30nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWcgKyAneyAnICsgJGpvaW4uY2FsbCh5cywgJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuICRyZXBsYWNlLmNhbGwoU3RyaW5nKHMpLCAvXCIvZywgJyZxdW90OycpO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5KG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRGF0ZShvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IERhdGVdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzUmVnRXhwKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Vycm9yKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzU3RyaW5nKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgU3RyaW5nXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc051bWJlcihvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IE51bWJlcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNCb29sZWFuKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuXG4vLyBTeW1ib2wgYW5kIEJpZ0ludCBkbyBoYXZlIFN5bWJvbC50b1N0cmluZ1RhZyBieSBzcGVjLCBzbyB0aGF0IGNhbid0IGJlIHVzZWQgdG8gZWxpbWluYXRlIGZhbHNlIHBvc2l0aXZlc1xuZnVuY3Rpb24gaXNTeW1ib2wob2JqKSB7XG4gICAgaWYgKGhhc1NoYW1tZWRTeW1ib2xzKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqIGluc3RhbmNlb2YgU3ltYm9sO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8ICFzeW1Ub1N0cmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHN5bVRvU3RyaW5nLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQmlnSW50KG9iaikge1xuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8ICFiaWdJbnRWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgYmlnSW50VmFsdWVPZi5jYWxsKG9iaik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSB8fCBmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBrZXkgaW4gdGhpczsgfTtcbmZ1bmN0aW9uIGhhcyhvYmosIGtleSkge1xuICAgIHJldHVybiBoYXNPd24uY2FsbChvYmosIGtleSk7XG59XG5cbmZ1bmN0aW9uIHRvU3RyKG9iaikge1xuICAgIHJldHVybiBvYmplY3RUb1N0cmluZy5jYWxsKG9iaik7XG59XG5cbmZ1bmN0aW9uIG5hbWVPZihmKSB7XG4gICAgaWYgKGYubmFtZSkgeyByZXR1cm4gZi5uYW1lOyB9XG4gICAgdmFyIG0gPSAkbWF0Y2guY2FsbChmdW5jdGlvblRvU3RyaW5nLmNhbGwoZiksIC9eZnVuY3Rpb25cXHMqKFtcXHckXSspLyk7XG4gICAgaWYgKG0pIHsgcmV0dXJuIG1bMV07IH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaW5kZXhPZih4cywgeCkge1xuICAgIGlmICh4cy5pbmRleE9mKSB7IHJldHVybiB4cy5pbmRleE9mKHgpOyB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKHhzW2ldID09PSB4KSB7IHJldHVybiBpOyB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gaXNNYXAoeCkge1xuICAgIGlmICghbWFwU2l6ZSB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBtYXBTaXplLmNhbGwoeCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzZXRTaXplLmNhbGwoeCk7XG4gICAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4IGluc3RhbmNlb2YgTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrTWFwKHgpIHtcbiAgICBpZiAoIXdlYWtNYXBIYXMgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgd2Vha01hcEhhcy5jYWxsKHgsIHdlYWtNYXBIYXMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2Vha1NldEhhcy5jYWxsKHgsIHdlYWtTZXRIYXMpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFdlYWtNYXA7IC8vIGNvcmUtanMgd29ya2Fyb3VuZCwgcHJlLXYyLjUuMFxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1dlYWtSZWYoeCkge1xuICAgIGlmICghd2Vha1JlZkRlcmVmIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtSZWZEZXJlZi5jYWxsKHgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNTZXQoeCkge1xuICAgIGlmICghc2V0U2l6ZSB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBzZXRTaXplLmNhbGwoeCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtYXBTaXplLmNhbGwoeCk7XG4gICAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4IGluc3RhbmNlb2YgU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrU2V0KHgpIHtcbiAgICBpZiAoIXdlYWtTZXRIYXMgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgd2Vha1NldEhhcy5jYWxsKHgsIHdlYWtTZXRIYXMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2Vha01hcEhhcy5jYWxsKHgsIHdlYWtNYXBIYXMpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFdlYWtTZXQ7IC8vIGNvcmUtanMgd29ya2Fyb3VuZCwgcHJlLXYyLjUuMFxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnQoeCkge1xuICAgIGlmICgheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgeCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIHgubm9kZU5hbWUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB4LmdldEF0dHJpYnV0ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaW5zcGVjdFN0cmluZyhzdHIsIG9wdHMpIHtcbiAgICBpZiAoc3RyLmxlbmd0aCA+IG9wdHMubWF4U3RyaW5nTGVuZ3RoKSB7XG4gICAgICAgIHZhciByZW1haW5pbmcgPSBzdHIubGVuZ3RoIC0gb3B0cy5tYXhTdHJpbmdMZW5ndGg7XG4gICAgICAgIHZhciB0cmFpbGVyID0gJy4uLiAnICsgcmVtYWluaW5nICsgJyBtb3JlIGNoYXJhY3RlcicgKyAocmVtYWluaW5nID4gMSA/ICdzJyA6ICcnKTtcbiAgICAgICAgcmV0dXJuIGluc3BlY3RTdHJpbmcoJHNsaWNlLmNhbGwoc3RyLCAwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9ICRyZXBsYWNlLmNhbGwoJHJlcGxhY2UuY2FsbChzdHIsIC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLCAvW1xceDAwLVxceDFmXS9nLCBsb3dieXRlKTtcbiAgICByZXR1cm4gd3JhcFF1b3RlcyhzLCAnc2luZ2xlJywgb3B0cyk7XG59XG5cbmZ1bmN0aW9uIGxvd2J5dGUoYykge1xuICAgIHZhciBuID0gYy5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB4ID0ge1xuICAgICAgICA4OiAnYicsXG4gICAgICAgIDk6ICd0JyxcbiAgICAgICAgMTA6ICduJyxcbiAgICAgICAgMTI6ICdmJyxcbiAgICAgICAgMTM6ICdyJ1xuICAgIH1bbl07XG4gICAgaWYgKHgpIHsgcmV0dXJuICdcXFxcJyArIHg7IH1cbiAgICByZXR1cm4gJ1xcXFx4JyArIChuIDwgMHgxMCA/ICcwJyA6ICcnKSArICR0b1VwcGVyQ2FzZS5jYWxsKG4udG9TdHJpbmcoMTYpKTtcbn1cblxuZnVuY3Rpb24gbWFya0JveGVkKHN0cikge1xuICAgIHJldHVybiAnT2JqZWN0KCcgKyBzdHIgKyAnKSc7XG59XG5cbmZ1bmN0aW9uIHdlYWtDb2xsZWN0aW9uT2YodHlwZSkge1xuICAgIHJldHVybiB0eXBlICsgJyB7ID8gfSc7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3Rpb25PZih0eXBlLCBzaXplLCBlbnRyaWVzLCBpbmRlbnQpIHtcbiAgICB2YXIgam9pbmVkRW50cmllcyA9IGluZGVudCA/IGluZGVudGVkSm9pbihlbnRyaWVzLCBpbmRlbnQpIDogJGpvaW4uY2FsbChlbnRyaWVzLCAnLCAnKTtcbiAgICByZXR1cm4gdHlwZSArICcgKCcgKyBzaXplICsgJykgeycgKyBqb2luZWRFbnRyaWVzICsgJ30nO1xufVxuXG5mdW5jdGlvbiBzaW5nbGVMaW5lVmFsdWVzKHhzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaW5kZXhPZih4c1tpXSwgJ1xcbicpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKSB7XG4gICAgdmFyIGJhc2VJbmRlbnQ7XG4gICAgaWYgKG9wdHMuaW5kZW50ID09PSAnXFx0Jykge1xuICAgICAgICBiYXNlSW5kZW50ID0gJ1xcdCc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0cy5pbmRlbnQgPT09ICdudW1iZXInICYmIG9wdHMuaW5kZW50ID4gMCkge1xuICAgICAgICBiYXNlSW5kZW50ID0gJGpvaW4uY2FsbChBcnJheShvcHRzLmluZGVudCArIDEpLCAnICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiAkam9pbi5jYWxsKEFycmF5KGRlcHRoICsgMSksIGJhc2VJbmRlbnQpXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaW5kZW50ZWRKb2luKHhzLCBpbmRlbnQpIHtcbiAgICBpZiAoeHMubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJzsgfVxuICAgIHZhciBsaW5lSm9pbmVyID0gJ1xcbicgKyBpbmRlbnQucHJldiArIGluZGVudC5iYXNlO1xuICAgIHJldHVybiBsaW5lSm9pbmVyICsgJGpvaW4uY2FsbCh4cywgJywnICsgbGluZUpvaW5lcikgKyAnXFxuJyArIGluZGVudC5wcmV2O1xufVxuXG5mdW5jdGlvbiBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCkge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkob2JqKTtcbiAgICB2YXIgeHMgPSBbXTtcbiAgICBpZiAoaXNBcnIpIHtcbiAgICAgICAgeHMubGVuZ3RoID0gb2JqLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHhzW2ldID0gaGFzKG9iaiwgaSkgPyBpbnNwZWN0KG9ialtpXSwgb2JqKSA6ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBzeW1zID0gdHlwZW9mIGdPUFMgPT09ICdmdW5jdGlvbicgPyBnT1BTKG9iaikgOiBbXTtcbiAgICB2YXIgc3ltTWFwO1xuICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scykge1xuICAgICAgICBzeW1NYXAgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzeW1zLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBzeW1NYXBbJyQnICsgc3ltc1trXV0gPSBzeW1zW2tdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgIGlmICghaGFzKG9iaiwga2V5KSkgeyBjb250aW51ZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICBpZiAoaXNBcnIgJiYgU3RyaW5nKE51bWJlcihrZXkpKSA9PT0ga2V5ICYmIGtleSA8IG9iai5sZW5ndGgpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGhhc1NoYW1tZWRTeW1ib2xzICYmIHN5bU1hcFsnJCcgKyBrZXldIGluc3RhbmNlb2YgU3ltYm9sKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRvIHByZXZlbnQgc2hhbW1lZCBTeW1ib2xzLCB3aGljaCBhcmUgc3RvcmVkIGFzIHN0cmluZ3MsIGZyb20gYmVpbmcgaW5jbHVkZWQgaW4gdGhlIHN0cmluZyBrZXkgc2VjdGlvblxuICAgICAgICAgICAgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoJHRlc3QuY2FsbCgvW15cXHckXS8sIGtleSkpIHtcbiAgICAgICAgICAgIHhzLnB1c2goaW5zcGVjdChrZXksIG9iaikgKyAnOiAnICsgaW5zcGVjdChvYmpba2V5XSwgb2JqKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB4cy5wdXNoKGtleSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGdPUFMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzeW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoaXNFbnVtZXJhYmxlLmNhbGwob2JqLCBzeW1zW2pdKSkge1xuICAgICAgICAgICAgICAgIHhzLnB1c2goJ1snICsgaW5zcGVjdChzeW1zW2pdKSArICddOiAnICsgaW5zcGVjdChvYmpbc3ltc1tqXV0sIG9iaikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB4cztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3R5cGUnKTtcbnZhciAkV2Vha01hcCA9IEdldEludHJpbnNpYygnJVdlYWtNYXAlJywgdHJ1ZSk7XG52YXIgJE1hcCA9IEdldEludHJpbnNpYygnJU1hcCUnLCB0cnVlKTtcblxudmFyICR3ZWFrTWFwR2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcFNldCA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuc2V0JywgdHJ1ZSk7XG52YXIgJHdlYWtNYXBIYXMgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmhhcycsIHRydWUpO1xudmFyICRtYXBHZXQgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuZ2V0JywgdHJ1ZSk7XG52YXIgJG1hcFNldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkbWFwSGFzID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLmhhcycsIHRydWUpO1xuXG4vKlxuKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4ga2V5LlxuKlxuKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkIGFnYWluIHdlIGRvbid0IG5lZWQgdG8gdHJhdmVyc2UgdGhlIHdob2xlIGxpc3QuIEJ5IGRvaW5nIHNvLCBhbGwgdGhlIHJlY2VudGx5IHVzZWQgbm9kZXMgY2FuIGJlIGFjY2Vzc2VkIHJlbGF0aXZlbHkgcXVpY2tseS5cbiovXG4vKiogQHR5cGUge2ltcG9ydCgnLicpLmxpc3RHZXROb2RlfSAqL1xudmFyIGxpc3RHZXROb2RlID0gZnVuY3Rpb24gKGxpc3QsIGtleSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG5cdC8qKiBAdHlwZSB7dHlwZW9mIGxpc3QgfCBOb25OdWxsYWJsZTwodHlwZW9mIGxpc3QpWyduZXh0J10+fSAqL1xuXHR2YXIgcHJldiA9IGxpc3Q7XG5cdC8qKiBAdHlwZSB7KHR5cGVvZiBsaXN0KVsnbmV4dCddfSAqL1xuXHR2YXIgY3Vycjtcblx0Zm9yICg7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXBhcmVuc1xuXHRcdFx0Y3Vyci5uZXh0ID0gLyoqIEB0eXBlIHtOb25OdWxsYWJsZTx0eXBlb2YgbGlzdC5uZXh0Pn0gKi8gKGxpc3QubmV4dCk7XG5cdFx0XHRsaXN0Lm5leHQgPSBjdXJyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRyZXR1cm4gY3Vycjtcblx0XHR9XG5cdH1cbn07XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJykubGlzdEdldH0gKi9cbnZhciBsaXN0R2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSkge1xuXHR2YXIgbm9kZSA9IGxpc3RHZXROb2RlKG9iamVjdHMsIGtleSk7XG5cdHJldHVybiBub2RlICYmIG5vZGUudmFsdWU7XG59O1xuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKS5saXN0U2V0fSAqL1xudmFyIGxpc3RTZXQgPSBmdW5jdGlvbiAob2JqZWN0cywga2V5LCB2YWx1ZSkge1xuXHR2YXIgbm9kZSA9IGxpc3RHZXROb2RlKG9iamVjdHMsIGtleSk7XG5cdGlmIChub2RlKSB7XG5cdFx0bm9kZS52YWx1ZSA9IHZhbHVlO1xuXHR9IGVsc2Uge1xuXHRcdC8vIFByZXBlbmQgdGhlIG5ldyBub2RlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3Rcblx0XHRvYmplY3RzLm5leHQgPSAvKiogQHR5cGUge2ltcG9ydCgnLicpLkxpc3ROb2RlPHR5cGVvZiB2YWx1ZT59ICovICh7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ24sIG5vLWV4dHJhLXBhcmVuc1xuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHRuZXh0OiBvYmplY3RzLm5leHQsXG5cdFx0XHR2YWx1ZTogdmFsdWVcblx0XHR9KTtcblx0fVxufTtcbi8qKiBAdHlwZSB7aW1wb3J0KCcuJykubGlzdEhhc30gKi9cbnZhciBsaXN0SGFzID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSkge1xuXHRyZXR1cm4gISFsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xufTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdC8qKiBAdHlwZSB7V2Vha01hcDxvYmplY3QsIHVua25vd24+fSAqLyB2YXIgJHdtO1xuXHQvKiogQHR5cGUge01hcDxvYmplY3QsIHVua25vd24+fSAqLyB2YXIgJG07XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuJykuUm9vdE5vZGU8dW5rbm93bj59ICovIHZhciAkbztcblxuXHQvKiogQHR5cGUge2ltcG9ydCgnLicpLkNoYW5uZWx9ICovXG5cdHZhciBjaGFubmVsID0ge1xuXHRcdGFzc2VydDogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCFjaGFubmVsLmhhcyhrZXkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdTaWRlIGNoYW5uZWwgZG9lcyBub3QgY29udGFpbiAnICsgaW5zcGVjdChrZXkpKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGdldDogZnVuY3Rpb24gKGtleSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG5cdFx0XHRpZiAoJFdlYWtNYXAgJiYga2V5ICYmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyB8fCB0eXBlb2Yga2V5ID09PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHRpZiAoJHdtKSB7XG5cdFx0XHRcdFx0cmV0dXJuICR3ZWFrTWFwR2V0KCR3bSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICgkTWFwKSB7XG5cdFx0XHRcdGlmICgkbSkge1xuXHRcdFx0XHRcdHJldHVybiAkbWFwR2V0KCRtLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoJG8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1sb25lbHktaWZcblx0XHRcdFx0XHRyZXR1cm4gbGlzdEdldCgkbywga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aGFzOiBmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRpZiAoJFdlYWtNYXAgJiYga2V5ICYmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyB8fCB0eXBlb2Yga2V5ID09PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHRpZiAoJHdtKSB7XG5cdFx0XHRcdFx0cmV0dXJuICR3ZWFrTWFwSGFzKCR3bSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICgkTWFwKSB7XG5cdFx0XHRcdGlmICgkbSkge1xuXHRcdFx0XHRcdHJldHVybiAkbWFwSGFzKCRtLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoJG8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1sb25lbHktaWZcblx0XHRcdFx0XHRyZXR1cm4gbGlzdEhhcygkbywga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCEkd20pIHtcblx0XHRcdFx0XHQkd20gPSBuZXcgJFdlYWtNYXAoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQkd2Vha01hcFNldCgkd20sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmICgkTWFwKSB7XG5cdFx0XHRcdGlmICghJG0pIHtcblx0XHRcdFx0XHQkbSA9IG5ldyAkTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JG1hcFNldCgkbSwga2V5LCB2YWx1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoISRvKSB7XG5cdFx0XHRcdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHNwZWNpYWwtY2FzZSBoYW5kbGluZyBvZiB0aGUgZmlyc3Qgbm9kZTogd2UgY2FuIGFsd2F5cyByZWZlciB0byBpdCBhcyAocHJldmlvdXMgbm9kZSkubmV4dCwgaW5zdGVhZCBvZiBzb21ldGhpbmcgbGlrZSAobGlzdCkuaGVhZFxuXHRcdFx0XHRcdCRvID0geyBrZXk6IHt9LCBuZXh0OiBudWxsIH07XG5cdFx0XHRcdH1cblx0XHRcdFx0bGlzdFNldCgkbywga2V5LCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gY2hhbm5lbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xudmFyIHBlcmNlbnRUd2VudGllcyA9IC8lMjAvZztcblxudmFyIEZvcm1hdCA9IHtcbiAgICBSRkMxNzM4OiAnUkZDMTczOCcsXG4gICAgUkZDMzk4NjogJ1JGQzM5ODYnXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAnZGVmYXVsdCc6IEZvcm1hdC5SRkMzOTg2LFxuICAgIGZvcm1hdHRlcnM6IHtcbiAgICAgICAgUkZDMTczODogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVwbGFjZS5jYWxsKHZhbHVlLCBwZXJjZW50VHdlbnRpZXMsICcrJyk7XG4gICAgICAgIH0sXG4gICAgICAgIFJGQzM5ODY6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFJGQzE3Mzg6IEZvcm1hdC5SRkMxNzM4LFxuICAgIFJGQzM5ODY6IEZvcm1hdC5SRkMzOTg2XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxudmFyIGhleFRhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gICAgICAgIGFycmF5LnB1c2goJyUnICsgKChpIDwgMTYgPyAnMCcgOiAnJykgKyBpLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufSgpKTtcblxudmFyIGNvbXBhY3RRdWV1ZSA9IGZ1bmN0aW9uIGNvbXBhY3RRdWV1ZShxdWV1ZSkge1xuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHZhciBpdGVtID0gcXVldWUucG9wKCk7XG4gICAgICAgIHZhciBvYmogPSBpdGVtLm9ialtpdGVtLnByb3BdO1xuXG4gICAgICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIHZhciBjb21wYWN0ZWQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvYmoubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9ialtqXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGFjdGVkLnB1c2gob2JqW2pdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0ZW0ub2JqW2l0ZW0ucHJvcF0gPSBjb21wYWN0ZWQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgYXJyYXlUb09iamVjdCA9IGZ1bmN0aW9uIGFycmF5VG9PYmplY3Qoc291cmNlLCBvcHRpb25zKSB7XG4gICAgdmFyIG9iaiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VbaV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBvYmpbaV0gPSBzb3VyY2VbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxudmFyIG1lcmdlID0gZnVuY3Rpb24gbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAvKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgICAgICB0YXJnZXQucHVzaChzb3VyY2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zICYmIChvcHRpb25zLnBsYWluT2JqZWN0cyB8fCBvcHRpb25zLmFsbG93UHJvdG90eXBlcykpIHx8ICFoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W3NvdXJjZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFt0YXJnZXQsIHNvdXJjZV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0IHx8IHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBbdGFyZ2V0XS5jb25jYXQoc291cmNlKTtcbiAgICB9XG5cbiAgICB2YXIgbWVyZ2VUYXJnZXQgPSB0YXJnZXQ7XG4gICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiAhaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgIG1lcmdlVGFyZ2V0ID0gYXJyYXlUb09iamVjdCh0YXJnZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5KHRhcmdldCkgJiYgaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgIHNvdXJjZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpKSB7XG4gICAgICAgICAgICBpZiAoaGFzLmNhbGwodGFyZ2V0LCBpKSkge1xuICAgICAgICAgICAgICAgIHZhciB0YXJnZXRJdGVtID0gdGFyZ2V0W2ldO1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRJdGVtICYmIHR5cGVvZiB0YXJnZXRJdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbaV0gPSBtZXJnZSh0YXJnZXRJdGVtLCBpdGVtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldFtpXSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc291cmNlW2tleV07XG5cbiAgICAgICAgaWYgKGhhcy5jYWxsKGFjYywga2V5KSkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSBtZXJnZShhY2Nba2V5XSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG1lcmdlVGFyZ2V0KTtcbn07XG5cbnZhciBhc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ25TaW5nbGVTb3VyY2UodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgICAgIGFjY1trZXldID0gc291cmNlW2tleV07XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgdGFyZ2V0KTtcbn07XG5cbnZhciBkZWNvZGUgPSBmdW5jdGlvbiAoc3RyLCBkZWNvZGVyLCBjaGFyc2V0KSB7XG4gICAgdmFyIHN0cldpdGhvdXRQbHVzID0gc3RyLnJlcGxhY2UoL1xcKy9nLCAnICcpO1xuICAgIGlmIChjaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgLy8gdW5lc2NhcGUgbmV2ZXIgdGhyb3dzLCBubyB0cnkuLi5jYXRjaCBuZWVkZWQ6XG4gICAgICAgIHJldHVybiBzdHJXaXRob3V0UGx1cy5yZXBsYWNlKC8lWzAtOWEtZl17Mn0vZ2ksIHVuZXNjYXBlKTtcbiAgICB9XG4gICAgLy8gdXRmLThcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cldpdGhvdXRQbHVzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBzdHJXaXRob3V0UGx1cztcbiAgICB9XG59O1xuXG52YXIgbGltaXQgPSAxMDI0O1xuXG4vKiBlc2xpbnQgb3BlcmF0b3ItbGluZWJyZWFrOiBbMiwgXCJiZWZvcmVcIl0gKi9cblxudmFyIGVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHIsIGRlZmF1bHRFbmNvZGVyLCBjaGFyc2V0LCBraW5kLCBmb3JtYXQpIHtcbiAgICAvLyBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBCcmlhbiBXaGl0ZSAobXNjZGV4KSBmb3IgdGhlIGlvLmpzIGNvcmUgcXVlcnlzdHJpbmcgbGlicmFyeS5cbiAgICAvLyBJdCBoYXMgYmVlbiBhZGFwdGVkIGhlcmUgZm9yIHN0cmljdGVyIGFkaGVyZW5jZSB0byBSRkMgMzk4NlxuICAgIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgdmFyIHN0cmluZyA9IHN0cjtcbiAgICBpZiAodHlwZW9mIHN0ciA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgc3RyaW5nID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN0cik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgICAgICBzdHJpbmcgPSBTdHJpbmcoc3RyKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIHJldHVybiBlc2NhcGUoc3RyaW5nKS5yZXBsYWNlKC8ldVswLTlhLWZdezR9L2dpLCBmdW5jdGlvbiAoJDApIHtcbiAgICAgICAgICAgIHJldHVybiAnJTI2JTIzJyArIHBhcnNlSW50KCQwLnNsaWNlKDIpLCAxNikgKyAnJTNCJztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIG91dCA9ICcnO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3RyaW5nLmxlbmd0aDsgaiArPSBsaW1pdCkge1xuICAgICAgICB2YXIgc2VnbWVudCA9IHN0cmluZy5sZW5ndGggPj0gbGltaXQgPyBzdHJpbmcuc2xpY2UoaiwgaiArIGxpbWl0KSA6IHN0cmluZztcbiAgICAgICAgdmFyIGFyciA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdmFyIGMgPSBzZWdtZW50LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgYyA9PT0gMHgyRCAvLyAtXG4gICAgICAgICAgICAgICAgfHwgYyA9PT0gMHgyRSAvLyAuXG4gICAgICAgICAgICAgICAgfHwgYyA9PT0gMHg1RiAvLyBfXG4gICAgICAgICAgICAgICAgfHwgYyA9PT0gMHg3RSAvLyB+XG4gICAgICAgICAgICAgICAgfHwgKGMgPj0gMHgzMCAmJiBjIDw9IDB4MzkpIC8vIDAtOVxuICAgICAgICAgICAgICAgIHx8IChjID49IDB4NDEgJiYgYyA8PSAweDVBKSAvLyBhLXpcbiAgICAgICAgICAgICAgICB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg3QSkgLy8gQS1aXG4gICAgICAgICAgICAgICAgfHwgKGZvcm1hdCA9PT0gZm9ybWF0cy5SRkMxNzM4ICYmIChjID09PSAweDI4IHx8IGMgPT09IDB4MjkpKSAvLyAoIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGFyclthcnIubGVuZ3RoXSA9IHNlZ21lbnQuY2hhckF0KGkpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgICAgICAgICAgICBhcnJbYXJyLmxlbmd0aF0gPSBoZXhUYWJsZVtjXTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgICAgICAgICAgIGFyclthcnIubGVuZ3RoXSA9IGhleFRhYmxlWzB4QzAgfCAoYyA+PiA2KV1cbiAgICAgICAgICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV07XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjIDwgMHhEODAwIHx8IGMgPj0gMHhFMDAwKSB7XG4gICAgICAgICAgICAgICAgYXJyW2Fyci5sZW5ndGhdID0gaGV4VGFibGVbMHhFMCB8IChjID4+IDEyKV1cbiAgICAgICAgICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzRildXG4gICAgICAgICAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgICBjID0gMHgxMDAwMCArICgoKGMgJiAweDNGRikgPDwgMTApIHwgKHNlZ21lbnQuY2hhckNvZGVBdChpKSAmIDB4M0ZGKSk7XG5cbiAgICAgICAgICAgIGFyclthcnIubGVuZ3RoXSA9IGhleFRhYmxlWzB4RjAgfCAoYyA+PiAxOCldXG4gICAgICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDEyKSAmIDB4M0YpXVxuICAgICAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiA2KSAmIDB4M0YpXVxuICAgICAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0ICs9IGFyci5qb2luKCcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxudmFyIGNvbXBhY3QgPSBmdW5jdGlvbiBjb21wYWN0KHZhbHVlKSB7XG4gICAgdmFyIHF1ZXVlID0gW3sgb2JqOiB7IG86IHZhbHVlIH0sIHByb3A6ICdvJyB9XTtcbiAgICB2YXIgcmVmcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlW2ldO1xuICAgICAgICB2YXIgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXTtcblxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5cy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbal07XG4gICAgICAgICAgICB2YXIgdmFsID0gb2JqW2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsICYmIHJlZnMuaW5kZXhPZih2YWwpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2goeyBvYmo6IG9iaiwgcHJvcDoga2V5IH0pO1xuICAgICAgICAgICAgICAgIHJlZnMucHVzaCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcGFjdFF1ZXVlKHF1ZXVlKTtcblxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBpc1JlZ0V4cCA9IGZ1bmN0aW9uIGlzUmVnRXhwKG9iaikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59O1xuXG52YXIgaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlcihvYmopIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhKG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iaikpO1xufTtcblxudmFyIGNvbWJpbmUgPSBmdW5jdGlvbiBjb21iaW5lKGEsIGIpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KGEsIGIpO1xufTtcblxudmFyIG1heWJlTWFwID0gZnVuY3Rpb24gbWF5YmVNYXAodmFsLCBmbikge1xuICAgIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFyIG1hcHBlZCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgbWFwcGVkLnB1c2goZm4odmFsW2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcHBlZDtcbiAgICB9XG4gICAgcmV0dXJuIGZuKHZhbCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhcnJheVRvT2JqZWN0OiBhcnJheVRvT2JqZWN0LFxuICAgIGFzc2lnbjogYXNzaWduLFxuICAgIGNvbWJpbmU6IGNvbWJpbmUsXG4gICAgY29tcGFjdDogY29tcGFjdCxcbiAgICBkZWNvZGU6IGRlY29kZSxcbiAgICBlbmNvZGU6IGVuY29kZSxcbiAgICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gICAgaXNSZWdFeHA6IGlzUmVnRXhwLFxuICAgIG1heWJlTWFwOiBtYXliZU1hcCxcbiAgICBtZXJnZTogbWVyZ2Vcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBnZXRTaWRlQ2hhbm5lbCA9IHJlcXVpcmUoJ3NpZGUtY2hhbm5lbCcpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGZvcm1hdHMgPSByZXF1aXJlKCcuL2Zvcm1hdHMnKTtcbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgYXJyYXlQcmVmaXhHZW5lcmF0b3JzID0ge1xuICAgIGJyYWNrZXRzOiBmdW5jdGlvbiBicmFja2V0cyhwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArICdbXSc7XG4gICAgfSxcbiAgICBjb21tYTogJ2NvbW1hJyxcbiAgICBpbmRpY2VzOiBmdW5jdGlvbiBpbmRpY2VzKHByZWZpeCwga2V5KSB7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyAnWycgKyBrZXkgKyAnXSc7XG4gICAgfSxcbiAgICByZXBlYXQ6IGZ1bmN0aW9uIHJlcGVhdChwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeDtcbiAgICB9XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG52YXIgcHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoO1xudmFyIHB1c2hUb0FycmF5ID0gZnVuY3Rpb24gKGFyciwgdmFsdWVPckFycmF5KSB7XG4gICAgcHVzaC5hcHBseShhcnIsIGlzQXJyYXkodmFsdWVPckFycmF5KSA/IHZhbHVlT3JBcnJheSA6IFt2YWx1ZU9yQXJyYXldKTtcbn07XG5cbnZhciB0b0lTTyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgZGVmYXVsdEZvcm1hdCA9IGZvcm1hdHNbJ2RlZmF1bHQnXTtcbnZhciBkZWZhdWx0cyA9IHtcbiAgICBhZGRRdWVyeVByZWZpeDogZmFsc2UsXG4gICAgYWxsb3dEb3RzOiBmYWxzZSxcbiAgICBhbGxvd0VtcHR5QXJyYXlzOiBmYWxzZSxcbiAgICBhcnJheUZvcm1hdDogJ2luZGljZXMnLFxuICAgIGNoYXJzZXQ6ICd1dGYtOCcsXG4gICAgY2hhcnNldFNlbnRpbmVsOiBmYWxzZSxcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBlbmNvZGU6IHRydWUsXG4gICAgZW5jb2RlRG90SW5LZXlzOiBmYWxzZSxcbiAgICBlbmNvZGVyOiB1dGlscy5lbmNvZGUsXG4gICAgZW5jb2RlVmFsdWVzT25seTogZmFsc2UsXG4gICAgZm9ybWF0OiBkZWZhdWx0Rm9ybWF0LFxuICAgIGZvcm1hdHRlcjogZm9ybWF0cy5mb3JtYXR0ZXJzW2RlZmF1bHRGb3JtYXRdLFxuICAgIC8vIGRlcHJlY2F0ZWRcbiAgICBpbmRpY2VzOiBmYWxzZSxcbiAgICBzZXJpYWxpemVEYXRlOiBmdW5jdGlvbiBzZXJpYWxpemVEYXRlKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRvSVNPLmNhbGwoZGF0ZSk7XG4gICAgfSxcbiAgICBza2lwTnVsbHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBpc05vbk51bGxpc2hQcmltaXRpdmUgPSBmdW5jdGlvbiBpc05vbk51bGxpc2hQcmltaXRpdmUodikge1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ3N0cmluZydcbiAgICAgICAgfHwgdHlwZW9mIHYgPT09ICdudW1iZXInXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnYm9vbGVhbidcbiAgICAgICAgfHwgdHlwZW9mIHYgPT09ICdzeW1ib2wnXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnYmlnaW50Jztcbn07XG5cbnZhciBzZW50aW5lbCA9IHt9O1xuXG52YXIgc3RyaW5naWZ5ID0gZnVuY3Rpb24gc3RyaW5naWZ5KFxuICAgIG9iamVjdCxcbiAgICBwcmVmaXgsXG4gICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICBjb21tYVJvdW5kVHJpcCxcbiAgICBhbGxvd0VtcHR5QXJyYXlzLFxuICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICBza2lwTnVsbHMsXG4gICAgZW5jb2RlRG90SW5LZXlzLFxuICAgIGVuY29kZXIsXG4gICAgZmlsdGVyLFxuICAgIHNvcnQsXG4gICAgYWxsb3dEb3RzLFxuICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgZm9ybWF0LFxuICAgIGZvcm1hdHRlcixcbiAgICBlbmNvZGVWYWx1ZXNPbmx5LFxuICAgIGNoYXJzZXQsXG4gICAgc2lkZUNoYW5uZWxcbikge1xuICAgIHZhciBvYmogPSBvYmplY3Q7XG5cbiAgICB2YXIgdG1wU2MgPSBzaWRlQ2hhbm5lbDtcbiAgICB2YXIgc3RlcCA9IDA7XG4gICAgdmFyIGZpbmRGbGFnID0gZmFsc2U7XG4gICAgd2hpbGUgKCh0bXBTYyA9IHRtcFNjLmdldChzZW50aW5lbCkpICE9PSB2b2lkIHVuZGVmaW5lZCAmJiAhZmluZEZsYWcpIHtcbiAgICAgICAgLy8gV2hlcmUgb2JqZWN0IGxhc3QgYXBwZWFyZWQgaW4gdGhlIHJlZiB0cmVlXG4gICAgICAgIHZhciBwb3MgPSB0bXBTYy5nZXQob2JqZWN0KTtcbiAgICAgICAgc3RlcCArPSAxO1xuICAgICAgICBpZiAodHlwZW9mIHBvcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChwb3MgPT09IHN0ZXApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQ3ljbGljIG9iamVjdCB2YWx1ZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaW5kRmxhZyA9IHRydWU7IC8vIEJyZWFrIHdoaWxlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0bXBTYy5nZXQoc2VudGluZWwpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgc3RlcCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvYmogPSBmaWx0ZXIocHJlZml4LCBvYmopO1xuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBvYmogPSBzZXJpYWxpemVEYXRlKG9iaik7XG4gICAgfSBlbHNlIGlmIChnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIGlzQXJyYXkob2JqKSkge1xuICAgICAgICBvYmogPSB1dGlscy5tYXliZU1hcChvYmosIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgICBpZiAoc3RyaWN0TnVsbEhhbmRsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlciAmJiAhZW5jb2RlVmFsdWVzT25seSA/IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0LCAna2V5JywgZm9ybWF0KSA6IHByZWZpeDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9iaiA9ICcnO1xuICAgIH1cblxuICAgIGlmIChpc05vbk51bGxpc2hQcmltaXRpdmUob2JqKSB8fCB1dGlscy5pc0J1ZmZlcihvYmopKSB7XG4gICAgICAgIGlmIChlbmNvZGVyKSB7XG4gICAgICAgICAgICB2YXIga2V5VmFsdWUgPSBlbmNvZGVWYWx1ZXNPbmx5ID8gcHJlZml4IDogZW5jb2RlcihwcmVmaXgsIGRlZmF1bHRzLmVuY29kZXIsIGNoYXJzZXQsICdrZXknLCBmb3JtYXQpO1xuICAgICAgICAgICAgcmV0dXJuIFtmb3JtYXR0ZXIoa2V5VmFsdWUpICsgJz0nICsgZm9ybWF0dGVyKGVuY29kZXIob2JqLCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0LCAndmFsdWUnLCBmb3JtYXQpKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtmb3JtYXR0ZXIocHJlZml4KSArICc9JyArIGZvcm1hdHRlcihTdHJpbmcob2JqKSldO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZXMgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cblxuICAgIHZhciBvYmpLZXlzO1xuICAgIGlmIChnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIGlzQXJyYXkob2JqKSkge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGpvaW4gZWxlbWVudHMgaW5cbiAgICAgICAgaWYgKGVuY29kZVZhbHVlc09ubHkgJiYgZW5jb2Rlcikge1xuICAgICAgICAgICAgb2JqID0gdXRpbHMubWF5YmVNYXAob2JqLCBlbmNvZGVyKTtcbiAgICAgICAgfVxuICAgICAgICBvYmpLZXlzID0gW3sgdmFsdWU6IG9iai5sZW5ndGggPiAwID8gb2JqLmpvaW4oJywnKSB8fCBudWxsIDogdm9pZCB1bmRlZmluZWQgfV07XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KGZpbHRlcikpIHtcbiAgICAgICAgb2JqS2V5cyA9IGZpbHRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIG9iaktleXMgPSBzb3J0ID8ga2V5cy5zb3J0KHNvcnQpIDoga2V5cztcbiAgICB9XG5cbiAgICB2YXIgZW5jb2RlZFByZWZpeCA9IGVuY29kZURvdEluS2V5cyA/IHByZWZpeC5yZXBsYWNlKC9cXC4vZywgJyUyRScpIDogcHJlZml4O1xuXG4gICAgdmFyIGFkanVzdGVkUHJlZml4ID0gY29tbWFSb3VuZFRyaXAgJiYgaXNBcnJheShvYmopICYmIG9iai5sZW5ndGggPT09IDEgPyBlbmNvZGVkUHJlZml4ICsgJ1tdJyA6IGVuY29kZWRQcmVmaXg7XG5cbiAgICBpZiAoYWxsb3dFbXB0eUFycmF5cyAmJiBpc0FycmF5KG9iaikgJiYgb2JqLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYWRqdXN0ZWRQcmVmaXggKyAnW10nO1xuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgb2JqS2V5cy5sZW5ndGg7ICsraikge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tqXTtcbiAgICAgICAgdmFyIHZhbHVlID0gdHlwZW9mIGtleSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGtleS52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgPyBrZXkudmFsdWUgOiBvYmpba2V5XTtcblxuICAgICAgICBpZiAoc2tpcE51bGxzICYmIHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBlbmNvZGVkS2V5ID0gYWxsb3dEb3RzICYmIGVuY29kZURvdEluS2V5cyA/IGtleS5yZXBsYWNlKC9cXC4vZywgJyUyRScpIDoga2V5O1xuICAgICAgICB2YXIga2V5UHJlZml4ID0gaXNBcnJheShvYmopXG4gICAgICAgICAgICA/IHR5cGVvZiBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnZnVuY3Rpb24nID8gZ2VuZXJhdGVBcnJheVByZWZpeChhZGp1c3RlZFByZWZpeCwgZW5jb2RlZEtleSkgOiBhZGp1c3RlZFByZWZpeFxuICAgICAgICAgICAgOiBhZGp1c3RlZFByZWZpeCArIChhbGxvd0RvdHMgPyAnLicgKyBlbmNvZGVkS2V5IDogJ1snICsgZW5jb2RlZEtleSArICddJyk7XG5cbiAgICAgICAgc2lkZUNoYW5uZWwuc2V0KG9iamVjdCwgc3RlcCk7XG4gICAgICAgIHZhciB2YWx1ZVNpZGVDaGFubmVsID0gZ2V0U2lkZUNoYW5uZWwoKTtcbiAgICAgICAgdmFsdWVTaWRlQ2hhbm5lbC5zZXQoc2VudGluZWwsIHNpZGVDaGFubmVsKTtcbiAgICAgICAgcHVzaFRvQXJyYXkodmFsdWVzLCBzdHJpbmdpZnkoXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGtleVByZWZpeCxcbiAgICAgICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgICAgICAgICBjb21tYVJvdW5kVHJpcCxcbiAgICAgICAgICAgIGFsbG93RW1wdHlBcnJheXMsXG4gICAgICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICBlbmNvZGVEb3RJbktleXMsXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIGVuY29kZVZhbHVlc09ubHkgJiYgaXNBcnJheShvYmopID8gbnVsbCA6IGVuY29kZXIsXG4gICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgYWxsb3dEb3RzLFxuICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICAgIGZvcm1hdHRlcixcbiAgICAgICAgICAgIGVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICBjaGFyc2V0LFxuICAgICAgICAgICAgdmFsdWVTaWRlQ2hhbm5lbFxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzO1xufTtcblxudmFyIG5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMgPSBmdW5jdGlvbiBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zKG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0cy5hbGxvd0VtcHR5QXJyYXlzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0cy5hbGxvd0VtcHR5QXJyYXlzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYGFsbG93RW1wdHlBcnJheXNgIG9wdGlvbiBjYW4gb25seSBiZSBgdHJ1ZWAgb3IgYGZhbHNlYCwgd2hlbiBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0cy5lbmNvZGVEb3RJbktleXMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvcHRzLmVuY29kZURvdEluS2V5cyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BlbmNvZGVEb3RJbktleXNgIG9wdGlvbiBjYW4gb25seSBiZSBgdHJ1ZWAgb3IgYGZhbHNlYCwgd2hlbiBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmVuY29kZXIgIT09IG51bGwgJiYgdHlwZW9mIG9wdHMuZW5jb2RlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdHMuZW5jb2RlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFbmNvZGVyIGhhcyB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIHZhciBjaGFyc2V0ID0gb3B0cy5jaGFyc2V0IHx8IGRlZmF1bHRzLmNoYXJzZXQ7XG4gICAgaWYgKHR5cGVvZiBvcHRzLmNoYXJzZXQgIT09ICd1bmRlZmluZWQnICYmIG9wdHMuY2hhcnNldCAhPT0gJ3V0Zi04JyAmJiBvcHRzLmNoYXJzZXQgIT09ICdpc28tODg1OS0xJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgY2hhcnNldCBvcHRpb24gbXVzdCBiZSBlaXRoZXIgdXRmLTgsIGlzby04ODU5LTEsIG9yIHVuZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXQgPSBmb3JtYXRzWydkZWZhdWx0J107XG4gICAgaWYgKHR5cGVvZiBvcHRzLmZvcm1hdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKCFoYXMuY2FsbChmb3JtYXRzLmZvcm1hdHRlcnMsIG9wdHMuZm9ybWF0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBmb3JtYXQgb3B0aW9uIHByb3ZpZGVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1hdCA9IG9wdHMuZm9ybWF0O1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0cy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cbiAgICB2YXIgZmlsdGVyID0gZGVmYXVsdHMuZmlsdGVyO1xuICAgIGlmICh0eXBlb2Ygb3B0cy5maWx0ZXIgPT09ICdmdW5jdGlvbicgfHwgaXNBcnJheShvcHRzLmZpbHRlcikpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0cy5maWx0ZXI7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5Rm9ybWF0O1xuICAgIGlmIChvcHRzLmFycmF5Rm9ybWF0IGluIGFycmF5UHJlZml4R2VuZXJhdG9ycykge1xuICAgICAgICBhcnJheUZvcm1hdCA9IG9wdHMuYXJyYXlGb3JtYXQ7XG4gICAgfSBlbHNlIGlmICgnaW5kaWNlcycgaW4gb3B0cykge1xuICAgICAgICBhcnJheUZvcm1hdCA9IG9wdHMuaW5kaWNlcyA/ICdpbmRpY2VzJyA6ICdyZXBlYXQnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gZGVmYXVsdHMuYXJyYXlGb3JtYXQ7XG4gICAgfVxuXG4gICAgaWYgKCdjb21tYVJvdW5kVHJpcCcgaW4gb3B0cyAmJiB0eXBlb2Ygb3B0cy5jb21tYVJvdW5kVHJpcCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Bjb21tYVJvdW5kVHJpcGAgbXVzdCBiZSBhIGJvb2xlYW4sIG9yIGFic2VudCcpO1xuICAgIH1cblxuICAgIHZhciBhbGxvd0RvdHMgPSB0eXBlb2Ygb3B0cy5hbGxvd0RvdHMgPT09ICd1bmRlZmluZWQnID8gb3B0cy5lbmNvZGVEb3RJbktleXMgPT09IHRydWUgPyB0cnVlIDogZGVmYXVsdHMuYWxsb3dEb3RzIDogISFvcHRzLmFsbG93RG90cztcblxuICAgIHJldHVybiB7XG4gICAgICAgIGFkZFF1ZXJ5UHJlZml4OiB0eXBlb2Ygb3B0cy5hZGRRdWVyeVByZWZpeCA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5hZGRRdWVyeVByZWZpeCA6IGRlZmF1bHRzLmFkZFF1ZXJ5UHJlZml4LFxuICAgICAgICBhbGxvd0RvdHM6IGFsbG93RG90cyxcbiAgICAgICAgYWxsb3dFbXB0eUFycmF5czogdHlwZW9mIG9wdHMuYWxsb3dFbXB0eUFycmF5cyA9PT0gJ2Jvb2xlYW4nID8gISFvcHRzLmFsbG93RW1wdHlBcnJheXMgOiBkZWZhdWx0cy5hbGxvd0VtcHR5QXJyYXlzLFxuICAgICAgICBhcnJheUZvcm1hdDogYXJyYXlGb3JtYXQsXG4gICAgICAgIGNoYXJzZXQ6IGNoYXJzZXQsXG4gICAgICAgIGNoYXJzZXRTZW50aW5lbDogdHlwZW9mIG9wdHMuY2hhcnNldFNlbnRpbmVsID09PSAnYm9vbGVhbicgPyBvcHRzLmNoYXJzZXRTZW50aW5lbCA6IGRlZmF1bHRzLmNoYXJzZXRTZW50aW5lbCxcbiAgICAgICAgY29tbWFSb3VuZFRyaXA6IG9wdHMuY29tbWFSb3VuZFRyaXAsXG4gICAgICAgIGRlbGltaXRlcjogdHlwZW9mIG9wdHMuZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmRlbGltaXRlciA6IG9wdHMuZGVsaW1pdGVyLFxuICAgICAgICBlbmNvZGU6IHR5cGVvZiBvcHRzLmVuY29kZSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5lbmNvZGUgOiBkZWZhdWx0cy5lbmNvZGUsXG4gICAgICAgIGVuY29kZURvdEluS2V5czogdHlwZW9mIG9wdHMuZW5jb2RlRG90SW5LZXlzID09PSAnYm9vbGVhbicgPyBvcHRzLmVuY29kZURvdEluS2V5cyA6IGRlZmF1bHRzLmVuY29kZURvdEluS2V5cyxcbiAgICAgICAgZW5jb2RlcjogdHlwZW9mIG9wdHMuZW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMuZW5jb2RlciA6IGRlZmF1bHRzLmVuY29kZXIsXG4gICAgICAgIGVuY29kZVZhbHVlc09ubHk6IHR5cGVvZiBvcHRzLmVuY29kZVZhbHVlc09ubHkgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlVmFsdWVzT25seSA6IGRlZmF1bHRzLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIsXG4gICAgICAgIHNlcmlhbGl6ZURhdGU6IHR5cGVvZiBvcHRzLnNlcmlhbGl6ZURhdGUgPT09ICdmdW5jdGlvbicgPyBvcHRzLnNlcmlhbGl6ZURhdGUgOiBkZWZhdWx0cy5zZXJpYWxpemVEYXRlLFxuICAgICAgICBza2lwTnVsbHM6IHR5cGVvZiBvcHRzLnNraXBOdWxscyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5za2lwTnVsbHMgOiBkZWZhdWx0cy5za2lwTnVsbHMsXG4gICAgICAgIHNvcnQ6IHR5cGVvZiBvcHRzLnNvcnQgPT09ICdmdW5jdGlvbicgPyBvcHRzLnNvcnQgOiBudWxsLFxuICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IHR5cGVvZiBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgOiBkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmdcbiAgICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBvcHRzKSB7XG4gICAgdmFyIG9iaiA9IG9iamVjdDtcbiAgICB2YXIgb3B0aW9ucyA9IG5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMob3B0cyk7XG5cbiAgICB2YXIgb2JqS2V5cztcbiAgICB2YXIgZmlsdGVyO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmaWx0ZXIgPSBvcHRpb25zLmZpbHRlcjtcbiAgICAgICAgb2JqID0gZmlsdGVyKCcnLCBvYmopO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvcHRpb25zLmZpbHRlcikpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaktleXMgPSBmaWx0ZXI7XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHZhciBnZW5lcmF0ZUFycmF5UHJlZml4ID0gYXJyYXlQcmVmaXhHZW5lcmF0b3JzW29wdGlvbnMuYXJyYXlGb3JtYXRdO1xuICAgIHZhciBjb21tYVJvdW5kVHJpcCA9IGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdjb21tYScgJiYgb3B0aW9ucy5jb21tYVJvdW5kVHJpcDtcblxuICAgIGlmICghb2JqS2V5cykge1xuICAgICAgICBvYmpLZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zb3J0KSB7XG4gICAgICAgIG9iaktleXMuc29ydChvcHRpb25zLnNvcnQpO1xuICAgIH1cblxuICAgIHZhciBzaWRlQ2hhbm5lbCA9IGdldFNpZGVDaGFubmVsKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpLZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBvYmpLZXlzW2ldO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnNraXBOdWxscyAmJiBvYmpba2V5XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVzaFRvQXJyYXkoa2V5cywgc3RyaW5naWZ5KFxuICAgICAgICAgICAgb2JqW2tleV0sXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgY29tbWFSb3VuZFRyaXAsXG4gICAgICAgICAgICBvcHRpb25zLmFsbG93RW1wdHlBcnJheXMsXG4gICAgICAgICAgICBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgIG9wdGlvbnMuc2tpcE51bGxzLFxuICAgICAgICAgICAgb3B0aW9ucy5lbmNvZGVEb3RJbktleXMsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZSA/IG9wdGlvbnMuZW5jb2RlciA6IG51bGwsXG4gICAgICAgICAgICBvcHRpb25zLmZpbHRlcixcbiAgICAgICAgICAgIG9wdGlvbnMuc29ydCxcbiAgICAgICAgICAgIG9wdGlvbnMuYWxsb3dEb3RzLFxuICAgICAgICAgICAgb3B0aW9ucy5zZXJpYWxpemVEYXRlLFxuICAgICAgICAgICAgb3B0aW9ucy5mb3JtYXQsXG4gICAgICAgICAgICBvcHRpb25zLmZvcm1hdHRlcixcbiAgICAgICAgICAgIG9wdGlvbnMuZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgICAgIG9wdGlvbnMuY2hhcnNldCxcbiAgICAgICAgICAgIHNpZGVDaGFubmVsXG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIHZhciBqb2luZWQgPSBrZXlzLmpvaW4ob3B0aW9ucy5kZWxpbWl0ZXIpO1xuICAgIHZhciBwcmVmaXggPSBvcHRpb25zLmFkZFF1ZXJ5UHJlZml4ID09PSB0cnVlID8gJz8nIDogJyc7XG5cbiAgICBpZiAob3B0aW9ucy5jaGFyc2V0U2VudGluZWwpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgICAgICAvLyBlbmNvZGVVUklDb21wb25lbnQoJyYjMTAwMDM7JyksIHRoZSBcIm51bWVyaWMgZW50aXR5XCIgcmVwcmVzZW50YXRpb24gb2YgYSBjaGVja21hcmtcbiAgICAgICAgICAgIHByZWZpeCArPSAndXRmOD0lMjYlMjMxMDAwMyUzQiYnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCfinJMnKVxuICAgICAgICAgICAgcHJlZml4ICs9ICd1dGY4PSVFMiU5QyU5MyYnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvaW5lZC5sZW5ndGggPiAwID8gcHJlZml4ICsgam9pbmVkIDogJyc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG52YXIgZGVmYXVsdHMgPSB7XG4gICAgYWxsb3dEb3RzOiBmYWxzZSxcbiAgICBhbGxvd0VtcHR5QXJyYXlzOiBmYWxzZSxcbiAgICBhbGxvd1Byb3RvdHlwZXM6IGZhbHNlLFxuICAgIGFsbG93U3BhcnNlOiBmYWxzZSxcbiAgICBhcnJheUxpbWl0OiAyMCxcbiAgICBjaGFyc2V0OiAndXRmLTgnLFxuICAgIGNoYXJzZXRTZW50aW5lbDogZmFsc2UsXG4gICAgY29tbWE6IGZhbHNlLFxuICAgIGRlY29kZURvdEluS2V5czogZmFsc2UsXG4gICAgZGVjb2RlcjogdXRpbHMuZGVjb2RlLFxuICAgIGRlbGltaXRlcjogJyYnLFxuICAgIGRlcHRoOiA1LFxuICAgIGR1cGxpY2F0ZXM6ICdjb21iaW5lJyxcbiAgICBpZ25vcmVRdWVyeVByZWZpeDogZmFsc2UsXG4gICAgaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzOiBmYWxzZSxcbiAgICBwYXJhbWV0ZXJMaW1pdDogMTAwMCxcbiAgICBwYXJzZUFycmF5czogdHJ1ZSxcbiAgICBwbGFpbk9iamVjdHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBpbnRlcnByZXROdW1lcmljRW50aXRpZXMgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8mIyhcXGQrKTsvZywgZnVuY3Rpb24gKCQwLCBudW1iZXJTdHIpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobnVtYmVyU3RyLCAxMCkpO1xuICAgIH0pO1xufTtcblxudmFyIHBhcnNlQXJyYXlWYWx1ZSA9IGZ1bmN0aW9uICh2YWwsIG9wdGlvbnMpIHtcbiAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIG9wdGlvbnMuY29tbWEgJiYgdmFsLmluZGV4T2YoJywnKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB2YWwuc3BsaXQoJywnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsO1xufTtcblxuLy8gVGhpcyBpcyB3aGF0IGJyb3dzZXJzIHdpbGwgc3VibWl0IHdoZW4gdGhlIOKckyBjaGFyYWN0ZXIgb2NjdXJzIGluIGFuXG4vLyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgYm9keSBhbmQgdGhlIGVuY29kaW5nIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmdcbi8vIHRoZSBmb3JtIGlzIGlzby04ODU5LTEsIG9yIHdoZW4gdGhlIHN1Ym1pdHRlZCBmb3JtIGhhcyBhbiBhY2NlcHQtY2hhcnNldFxuLy8gYXR0cmlidXRlIG9mIGlzby04ODU5LTEuIFByZXN1bWFibHkgYWxzbyB3aXRoIG90aGVyIGNoYXJzZXRzIHRoYXQgZG8gbm90IGNvbnRhaW5cbi8vIHRoZSDinJMgY2hhcmFjdGVyLCBzdWNoIGFzIHVzLWFzY2lpLlxudmFyIGlzb1NlbnRpbmVsID0gJ3V0Zjg9JTI2JTIzMTAwMDMlM0InOyAvLyBlbmNvZGVVUklDb21wb25lbnQoJyYjMTAwMDM7JylcblxuLy8gVGhlc2UgYXJlIHRoZSBwZXJjZW50LWVuY29kZWQgdXRmLTggb2N0ZXRzIHJlcHJlc2VudGluZyBhIGNoZWNrbWFyaywgaW5kaWNhdGluZyB0aGF0IHRoZSByZXF1ZXN0IGFjdHVhbGx5IGlzIHV0Zi04IGVuY29kZWQuXG52YXIgY2hhcnNldFNlbnRpbmVsID0gJ3V0Zjg9JUUyJTlDJTkzJzsgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCfinJMnKVxuXG52YXIgcGFyc2VWYWx1ZXMgPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nVmFsdWVzKHN0ciwgb3B0aW9ucykge1xuICAgIHZhciBvYmogPSB7IF9fcHJvdG9fXzogbnVsbCB9O1xuXG4gICAgdmFyIGNsZWFuU3RyID0gb3B0aW9ucy5pZ25vcmVRdWVyeVByZWZpeCA/IHN0ci5yZXBsYWNlKC9eXFw/LywgJycpIDogc3RyO1xuICAgIGNsZWFuU3RyID0gY2xlYW5TdHIucmVwbGFjZSgvJTVCL2dpLCAnWycpLnJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbiAgICB2YXIgbGltaXQgPSBvcHRpb25zLnBhcmFtZXRlckxpbWl0ID09PSBJbmZpbml0eSA/IHVuZGVmaW5lZCA6IG9wdGlvbnMucGFyYW1ldGVyTGltaXQ7XG4gICAgdmFyIHBhcnRzID0gY2xlYW5TdHIuc3BsaXQob3B0aW9ucy5kZWxpbWl0ZXIsIGxpbWl0KTtcbiAgICB2YXIgc2tpcEluZGV4ID0gLTE7IC8vIEtlZXAgdHJhY2sgb2Ygd2hlcmUgdGhlIHV0Zjggc2VudGluZWwgd2FzIGZvdW5kXG4gICAgdmFyIGk7XG5cbiAgICB2YXIgY2hhcnNldCA9IG9wdGlvbnMuY2hhcnNldDtcbiAgICBpZiAob3B0aW9ucy5jaGFyc2V0U2VudGluZWwpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAocGFydHNbaV0uaW5kZXhPZigndXRmOD0nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0c1tpXSA9PT0gY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSAndXRmLTgnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydHNbaV0gPT09IGlzb1NlbnRpbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSAnaXNvLTg4NTktMSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNraXBJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgaSA9IHBhcnRzLmxlbmd0aDsgLy8gVGhlIGVzbGludCBzZXR0aW5ncyBkbyBub3QgYWxsb3cgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGkgPT09IHNraXBJbmRleCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTtcblxuICAgICAgICB2YXIgYnJhY2tldEVxdWFsc1BvcyA9IHBhcnQuaW5kZXhPZignXT0nKTtcbiAgICAgICAgdmFyIHBvcyA9IGJyYWNrZXRFcXVhbHNQb3MgPT09IC0xID8gcGFydC5pbmRleE9mKCc9JykgOiBicmFja2V0RXF1YWxzUG9zICsgMTtcblxuICAgICAgICB2YXIga2V5LCB2YWw7XG4gICAgICAgIGlmIChwb3MgPT09IC0xKSB7XG4gICAgICAgICAgICBrZXkgPSBvcHRpb25zLmRlY29kZXIocGFydCwgZGVmYXVsdHMuZGVjb2RlciwgY2hhcnNldCwgJ2tleScpO1xuICAgICAgICAgICAgdmFsID0gb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcgPyBudWxsIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXkgPSBvcHRpb25zLmRlY29kZXIocGFydC5zbGljZSgwLCBwb3MpLCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0LCAna2V5Jyk7XG4gICAgICAgICAgICB2YWwgPSB1dGlscy5tYXliZU1hcChcbiAgICAgICAgICAgICAgICBwYXJzZUFycmF5VmFsdWUocGFydC5zbGljZShwb3MgKyAxKSwgb3B0aW9ucyksXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVuY29kZWRWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZGVjb2RlcihlbmNvZGVkVmFsLCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0LCAndmFsdWUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbCAmJiBvcHRpb25zLmludGVycHJldE51bWVyaWNFbnRpdGllcyAmJiBjaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgICAgIHZhbCA9IGludGVycHJldE51bWVyaWNFbnRpdGllcyh2YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnQuaW5kZXhPZignW109JykgPiAtMSkge1xuICAgICAgICAgICAgdmFsID0gaXNBcnJheSh2YWwpID8gW3ZhbF0gOiB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZXhpc3RpbmcgPSBoYXMuY2FsbChvYmosIGtleSk7XG4gICAgICAgIGlmIChleGlzdGluZyAmJiBvcHRpb25zLmR1cGxpY2F0ZXMgPT09ICdjb21iaW5lJykge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB1dGlscy5jb21iaW5lKG9ialtrZXldLCB2YWwpO1xuICAgICAgICB9IGVsc2UgaWYgKCFleGlzdGluZyB8fCBvcHRpb25zLmR1cGxpY2F0ZXMgPT09ICdsYXN0Jykge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxudmFyIHBhcnNlT2JqZWN0ID0gZnVuY3Rpb24gKGNoYWluLCB2YWwsIG9wdGlvbnMsIHZhbHVlc1BhcnNlZCkge1xuICAgIHZhciBsZWFmID0gdmFsdWVzUGFyc2VkID8gdmFsIDogcGFyc2VBcnJheVZhbHVlKHZhbCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBpID0gY2hhaW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIG9iajtcbiAgICAgICAgdmFyIHJvb3QgPSBjaGFpbltpXTtcblxuICAgICAgICBpZiAocm9vdCA9PT0gJ1tdJyAmJiBvcHRpb25zLnBhcnNlQXJyYXlzKSB7XG4gICAgICAgICAgICBvYmogPSBvcHRpb25zLmFsbG93RW1wdHlBcnJheXMgJiYgbGVhZiA9PT0gJycgPyBbXSA6IFtdLmNvbmNhdChsZWFmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgICAgICAgICAgdmFyIGNsZWFuUm9vdCA9IHJvb3QuY2hhckF0KDApID09PSAnWycgJiYgcm9vdC5jaGFyQXQocm9vdC5sZW5ndGggLSAxKSA9PT0gJ10nID8gcm9vdC5zbGljZSgxLCAtMSkgOiByb290O1xuICAgICAgICAgICAgdmFyIGRlY29kZWRSb290ID0gb3B0aW9ucy5kZWNvZGVEb3RJbktleXMgPyBjbGVhblJvb3QucmVwbGFjZSgvJTJFL2csICcuJykgOiBjbGVhblJvb3Q7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBwYXJzZUludChkZWNvZGVkUm9vdCwgMTApO1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnBhcnNlQXJyYXlzICYmIGRlY29kZWRSb290ID09PSAnJykge1xuICAgICAgICAgICAgICAgIG9iaiA9IHsgMDogbGVhZiB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAhaXNOYU4oaW5kZXgpXG4gICAgICAgICAgICAgICAgJiYgcm9vdCAhPT0gZGVjb2RlZFJvb3RcbiAgICAgICAgICAgICAgICAmJiBTdHJpbmcoaW5kZXgpID09PSBkZWNvZGVkUm9vdFxuICAgICAgICAgICAgICAgICYmIGluZGV4ID49IDBcbiAgICAgICAgICAgICAgICAmJiAob3B0aW9ucy5wYXJzZUFycmF5cyAmJiBpbmRleCA8PSBvcHRpb25zLmFycmF5TGltaXQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBvYmogPSBbXTtcbiAgICAgICAgICAgICAgICBvYmpbaW5kZXhdID0gbGVhZjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVjb2RlZFJvb3QgIT09ICdfX3Byb3RvX18nKSB7XG4gICAgICAgICAgICAgICAgb2JqW2RlY29kZWRSb290XSA9IGxlYWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZWFmID0gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiBsZWFmO1xufTtcblxudmFyIHBhcnNlS2V5cyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdLZXlzKGdpdmVuS2V5LCB2YWwsIG9wdGlvbnMsIHZhbHVlc1BhcnNlZCkge1xuICAgIGlmICghZ2l2ZW5LZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRyYW5zZm9ybSBkb3Qgbm90YXRpb24gdG8gYnJhY2tldCBub3RhdGlvblxuICAgIHZhciBrZXkgPSBvcHRpb25zLmFsbG93RG90cyA/IGdpdmVuS2V5LnJlcGxhY2UoL1xcLihbXi5bXSspL2csICdbJDFdJykgOiBnaXZlbktleTtcblxuICAgIC8vIFRoZSByZWdleCBjaHVua3NcblxuICAgIHZhciBicmFja2V0cyA9IC8oXFxbW15bXFxdXSpdKS87XG4gICAgdmFyIGNoaWxkID0gLyhcXFtbXltcXF1dKl0pL2c7XG5cbiAgICAvLyBHZXQgdGhlIHBhcmVudFxuXG4gICAgdmFyIHNlZ21lbnQgPSBvcHRpb25zLmRlcHRoID4gMCAmJiBicmFja2V0cy5leGVjKGtleSk7XG4gICAgdmFyIHBhcmVudCA9IHNlZ21lbnQgPyBrZXkuc2xpY2UoMCwgc2VnbWVudC5pbmRleCkgOiBrZXk7XG5cbiAgICAvLyBTdGFzaCB0aGUgcGFyZW50IGlmIGl0IGV4aXN0c1xuXG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGFyZW4ndCB1c2luZyBwbGFpbiBvYmplY3RzLCBvcHRpb25hbGx5IHByZWZpeCBrZXlzIHRoYXQgd291bGQgb3ZlcndyaXRlIG9iamVjdCBwcm90b3R5cGUgcHJvcGVydGllc1xuICAgICAgICBpZiAoIW9wdGlvbnMucGxhaW5PYmplY3RzICYmIGhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHBhcmVudCkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBrZXlzLnB1c2gocGFyZW50KTtcbiAgICB9XG5cbiAgICAvLyBMb29wIHRocm91Z2ggY2hpbGRyZW4gYXBwZW5kaW5nIHRvIHRoZSBhcnJheSB1bnRpbCB3ZSBoaXQgZGVwdGhcblxuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAob3B0aW9ucy5kZXB0aCA+IDAgJiYgKHNlZ21lbnQgPSBjaGlsZC5leGVjKGtleSkpICE9PSBudWxsICYmIGkgPCBvcHRpb25zLmRlcHRoKSB7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBzZWdtZW50WzFdLnNsaWNlKDEsIC0xKSkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5cy5wdXNoKHNlZ21lbnRbMV0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlJ3MgYSByZW1haW5kZXIsIGp1c3QgYWRkIHdoYXRldmVyIGlzIGxlZnRcblxuICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIGtleXMucHVzaCgnWycgKyBrZXkuc2xpY2Uoc2VnbWVudC5pbmRleCkgKyAnXScpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU9iamVjdChrZXlzLCB2YWwsIG9wdGlvbnMsIHZhbHVlc1BhcnNlZCk7XG59O1xuXG52YXIgbm9ybWFsaXplUGFyc2VPcHRpb25zID0gZnVuY3Rpb24gbm9ybWFsaXplUGFyc2VPcHRpb25zKG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0cy5hbGxvd0VtcHR5QXJyYXlzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0cy5hbGxvd0VtcHR5QXJyYXlzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYGFsbG93RW1wdHlBcnJheXNgIG9wdGlvbiBjYW4gb25seSBiZSBgdHJ1ZWAgb3IgYGZhbHNlYCwgd2hlbiBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0cy5kZWNvZGVEb3RJbktleXMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvcHRzLmRlY29kZURvdEluS2V5cyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BkZWNvZGVEb3RJbktleXNgIG9wdGlvbiBjYW4gb25seSBiZSBgdHJ1ZWAgb3IgYGZhbHNlYCwgd2hlbiBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmRlY29kZXIgIT09IG51bGwgJiYgdHlwZW9mIG9wdHMuZGVjb2RlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdHMuZGVjb2RlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEZWNvZGVyIGhhcyB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0cy5jaGFyc2V0ICE9PSAndW5kZWZpbmVkJyAmJiBvcHRzLmNoYXJzZXQgIT09ICd1dGYtOCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGNoYXJzZXQgb3B0aW9uIG11c3QgYmUgZWl0aGVyIHV0Zi04LCBpc28tODg1OS0xLCBvciB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgdmFyIGNoYXJzZXQgPSB0eXBlb2Ygb3B0cy5jaGFyc2V0ID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmNoYXJzZXQgOiBvcHRzLmNoYXJzZXQ7XG5cbiAgICB2YXIgZHVwbGljYXRlcyA9IHR5cGVvZiBvcHRzLmR1cGxpY2F0ZXMgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuZHVwbGljYXRlcyA6IG9wdHMuZHVwbGljYXRlcztcblxuICAgIGlmIChkdXBsaWNhdGVzICE9PSAnY29tYmluZScgJiYgZHVwbGljYXRlcyAhPT0gJ2ZpcnN0JyAmJiBkdXBsaWNhdGVzICE9PSAnbGFzdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGR1cGxpY2F0ZXMgb3B0aW9uIG11c3QgYmUgZWl0aGVyIGNvbWJpbmUsIGZpcnN0LCBvciBsYXN0Jyk7XG4gICAgfVxuXG4gICAgdmFyIGFsbG93RG90cyA9IHR5cGVvZiBvcHRzLmFsbG93RG90cyA9PT0gJ3VuZGVmaW5lZCcgPyBvcHRzLmRlY29kZURvdEluS2V5cyA9PT0gdHJ1ZSA/IHRydWUgOiBkZWZhdWx0cy5hbGxvd0RvdHMgOiAhIW9wdHMuYWxsb3dEb3RzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWxsb3dEb3RzOiBhbGxvd0RvdHMsXG4gICAgICAgIGFsbG93RW1wdHlBcnJheXM6IHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgPT09ICdib29sZWFuJyA/ICEhb3B0cy5hbGxvd0VtcHR5QXJyYXlzIDogZGVmYXVsdHMuYWxsb3dFbXB0eUFycmF5cyxcbiAgICAgICAgYWxsb3dQcm90b3R5cGVzOiB0eXBlb2Ygb3B0cy5hbGxvd1Byb3RvdHlwZXMgPT09ICdib29sZWFuJyA/IG9wdHMuYWxsb3dQcm90b3R5cGVzIDogZGVmYXVsdHMuYWxsb3dQcm90b3R5cGVzLFxuICAgICAgICBhbGxvd1NwYXJzZTogdHlwZW9mIG9wdHMuYWxsb3dTcGFyc2UgPT09ICdib29sZWFuJyA/IG9wdHMuYWxsb3dTcGFyc2UgOiBkZWZhdWx0cy5hbGxvd1NwYXJzZSxcbiAgICAgICAgYXJyYXlMaW1pdDogdHlwZW9mIG9wdHMuYXJyYXlMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRzLmFycmF5TGltaXQgOiBkZWZhdWx0cy5hcnJheUxpbWl0LFxuICAgICAgICBjaGFyc2V0OiBjaGFyc2V0LFxuICAgICAgICBjaGFyc2V0U2VudGluZWw6IHR5cGVvZiBvcHRzLmNoYXJzZXRTZW50aW5lbCA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5jaGFyc2V0U2VudGluZWwgOiBkZWZhdWx0cy5jaGFyc2V0U2VudGluZWwsXG4gICAgICAgIGNvbW1hOiB0eXBlb2Ygb3B0cy5jb21tYSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5jb21tYSA6IGRlZmF1bHRzLmNvbW1hLFxuICAgICAgICBkZWNvZGVEb3RJbktleXM6IHR5cGVvZiBvcHRzLmRlY29kZURvdEluS2V5cyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5kZWNvZGVEb3RJbktleXMgOiBkZWZhdWx0cy5kZWNvZGVEb3RJbktleXMsXG4gICAgICAgIGRlY29kZXI6IHR5cGVvZiBvcHRzLmRlY29kZXIgPT09ICdmdW5jdGlvbicgPyBvcHRzLmRlY29kZXIgOiBkZWZhdWx0cy5kZWNvZGVyLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3N0cmluZycgfHwgdXRpbHMuaXNSZWdFeHAob3B0cy5kZWxpbWl0ZXIpID8gb3B0cy5kZWxpbWl0ZXIgOiBkZWZhdWx0cy5kZWxpbWl0ZXIsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvbiwgbm8tZXh0cmEtcGFyZW5zXG4gICAgICAgIGRlcHRoOiAodHlwZW9mIG9wdHMuZGVwdGggPT09ICdudW1iZXInIHx8IG9wdHMuZGVwdGggPT09IGZhbHNlKSA/ICtvcHRzLmRlcHRoIDogZGVmYXVsdHMuZGVwdGgsXG4gICAgICAgIGR1cGxpY2F0ZXM6IGR1cGxpY2F0ZXMsXG4gICAgICAgIGlnbm9yZVF1ZXJ5UHJlZml4OiBvcHRzLmlnbm9yZVF1ZXJ5UHJlZml4ID09PSB0cnVlLFxuICAgICAgICBpbnRlcnByZXROdW1lcmljRW50aXRpZXM6IHR5cGVvZiBvcHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgOiBkZWZhdWx0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMsXG4gICAgICAgIHBhcmFtZXRlckxpbWl0OiB0eXBlb2Ygb3B0cy5wYXJhbWV0ZXJMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRzLnBhcmFtZXRlckxpbWl0IDogZGVmYXVsdHMucGFyYW1ldGVyTGltaXQsXG4gICAgICAgIHBhcnNlQXJyYXlzOiBvcHRzLnBhcnNlQXJyYXlzICE9PSBmYWxzZSxcbiAgICAgICAgcGxhaW5PYmplY3RzOiB0eXBlb2Ygb3B0cy5wbGFpbk9iamVjdHMgPT09ICdib29sZWFuJyA/IG9wdHMucGxhaW5PYmplY3RzIDogZGVmYXVsdHMucGxhaW5PYmplY3RzLFxuICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IHR5cGVvZiBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgOiBkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmdcbiAgICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cyk7XG5cbiAgICBpZiAoc3RyID09PSAnJyB8fCBzdHIgPT09IG51bGwgfHwgdHlwZW9mIHN0ciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgIH1cblxuICAgIHZhciB0ZW1wT2JqID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyBwYXJzZVZhbHVlcyhzdHIsIG9wdGlvbnMpIDogc3RyO1xuICAgIHZhciBvYmogPSBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUga2V5cyBhbmQgc2V0dXAgdGhlIG5ldyBvYmplY3RcblxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGVtcE9iaik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICB2YXIgbmV3T2JqID0gcGFyc2VLZXlzKGtleSwgdGVtcE9ialtrZXldLCBvcHRpb25zLCB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyk7XG4gICAgICAgIG9iaiA9IHV0aWxzLm1lcmdlKG9iaiwgbmV3T2JqLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hbGxvd1NwYXJzZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiB1dGlscy5jb21wYWN0KG9iaik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9zdHJpbmdpZnknKTtcbnZhciBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKTtcbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGZvcm1hdHM6IGZvcm1hdHMsXG4gICAgcGFyc2U6IHBhcnNlLFxuICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5XG59O1xuIiwiLy9cbi8vIFRISVMgRklMRSBJUyBBVVRPTUFUSUNBTExZIEdFTkVSQVRFRCEgRE8gTk9UIEVESVQgQlkgSEFORCFcbi8vXG47XG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpXG4gICAgICAgIDogdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kXG4gICAgICAgICAgICA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgICAgICAgICAvLyBjZi4gaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpL2pzLWJhc2U2NC9pc3N1ZXMvMTE5XG4gICAgICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIGV4aXN0aW5nIHZlcnNpb24gZm9yIG5vQ29uZmxpY3QoKVxuICAgICAgICAgICAgICAgIHZhciBfQmFzZTY0ID0gZ2xvYmFsLkJhc2U2NDtcbiAgICAgICAgICAgICAgICB2YXIgZ0Jhc2U2NCA9IGZhY3RvcnkoKTtcbiAgICAgICAgICAgICAgICBnQmFzZTY0Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbC5CYXNlNjQgPSBfQmFzZTY0O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0Jhc2U2NDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChnbG9iYWwuTWV0ZW9yKSB7IC8vIE1ldGVvci5qc1xuICAgICAgICAgICAgICAgICAgICBCYXNlNjQgPSBnQmFzZTY0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBnbG9iYWwuQmFzZTY0ID0gZ0Jhc2U2NDtcbiAgICAgICAgICAgIH0pKCk7XG59KCh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmXG4gICAgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvd1xuICAgICAgICA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsXG4gICAgICAgICAgICA6IHRoaXMpLCBmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8qKlxuICAgICAqICBiYXNlNjQudHNcbiAgICAgKlxuICAgICAqICBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuXG4gICAgICogICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICAgICAqXG4gICAgICogIFJlZmVyZW5jZXM6XG4gICAgICogICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjRcbiAgICAgKlxuICAgICAqIEBhdXRob3IgRGFuIEtvZ2FpIChodHRwczovL2dpdGh1Yi5jb20vZGFua29nYWkpXG4gICAgICovXG4gICAgdmFyIHZlcnNpb24gPSAnMy43LjcnO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBsb3dlcmNhc2UgYHZlcnNpb25gLlxuICAgICAqL1xuICAgIHZhciBWRVJTSU9OID0gdmVyc2lvbjtcbiAgICB2YXIgX2hhc0J1ZmZlciA9IHR5cGVvZiBCdWZmZXIgPT09ICdmdW5jdGlvbic7XG4gICAgdmFyIF9URCA9IHR5cGVvZiBUZXh0RGVjb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBUZXh0RGVjb2RlcigpIDogdW5kZWZpbmVkO1xuICAgIHZhciBfVEUgPSB0eXBlb2YgVGV4dEVuY29kZXIgPT09ICdmdW5jdGlvbicgPyBuZXcgVGV4dEVuY29kZXIoKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgYjY0Y2ggPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO1xuICAgIHZhciBiNjRjaHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiNjRjaCk7XG4gICAgdmFyIGI2NHRhYiA9IChmdW5jdGlvbiAoYSkge1xuICAgICAgICB2YXIgdGFiID0ge307XG4gICAgICAgIGEuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgeyByZXR1cm4gdGFiW2NdID0gaTsgfSk7XG4gICAgICAgIHJldHVybiB0YWI7XG4gICAgfSkoYjY0Y2hzKTtcbiAgICB2YXIgYjY0cmUgPSAvXig/OltBLVphLXpcXGQrXFwvXXs0fSkqPyg/OltBLVphLXpcXGQrXFwvXXsyfSg/Oj09KT98W0EtWmEtelxcZCtcXC9dezN9PT8pPyQvO1xuICAgIHZhciBfZnJvbUNDID0gU3RyaW5nLmZyb21DaGFyQ29kZS5iaW5kKFN0cmluZyk7XG4gICAgdmFyIF9VOEFmcm9tID0gdHlwZW9mIFVpbnQ4QXJyYXkuZnJvbSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IFVpbnQ4QXJyYXkuZnJvbS5iaW5kKFVpbnQ4QXJyYXkpXG4gICAgICAgIDogZnVuY3Rpb24gKGl0KSB7IHJldHVybiBuZXcgVWludDhBcnJheShBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpdCwgMCkpOyB9O1xuICAgIHZhciBfbWtVcmlTYWZlID0gZnVuY3Rpb24gKHNyYykgeyByZXR1cm4gc3JjXG4gICAgICAgIC5yZXBsYWNlKC89L2csICcnKS5yZXBsYWNlKC9bK1xcL10vZywgZnVuY3Rpb24gKG0wKSB7IHJldHVybiBtMCA9PSAnKycgPyAnLScgOiAnXyc7IH0pOyB9O1xuICAgIHZhciBfdGlkeUI2NCA9IGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLnJlcGxhY2UoL1teQS1aYS16MC05XFwrXFwvXS9nLCAnJyk7IH07XG4gICAgLyoqXG4gICAgICogcG9seWZpbGwgdmVyc2lvbiBvZiBgYnRvYWBcbiAgICAgKi9cbiAgICB2YXIgYnRvYVBvbHlmaWxsID0gZnVuY3Rpb24gKGJpbikge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygncG9seWZpbGxlZCcpO1xuICAgICAgICB2YXIgdTMyLCBjMCwgYzEsIGMyLCBhc2MgPSAnJztcbiAgICAgICAgdmFyIHBhZCA9IGJpbi5sZW5ndGggJSAzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJpbi5sZW5ndGg7KSB7XG4gICAgICAgICAgICBpZiAoKGMwID0gYmluLmNoYXJDb2RlQXQoaSsrKSkgPiAyNTUgfHxcbiAgICAgICAgICAgICAgICAoYzEgPSBiaW4uY2hhckNvZGVBdChpKyspKSA+IDI1NSB8fFxuICAgICAgICAgICAgICAgIChjMiA9IGJpbi5jaGFyQ29kZUF0KGkrKykpID4gMjU1KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgY2hhcmFjdGVyIGZvdW5kJyk7XG4gICAgICAgICAgICB1MzIgPSAoYzAgPDwgMTYpIHwgKGMxIDw8IDgpIHwgYzI7XG4gICAgICAgICAgICBhc2MgKz0gYjY0Y2hzW3UzMiA+PiAxOCAmIDYzXVxuICAgICAgICAgICAgICAgICsgYjY0Y2hzW3UzMiA+PiAxMiAmIDYzXVxuICAgICAgICAgICAgICAgICsgYjY0Y2hzW3UzMiA+PiA2ICYgNjNdXG4gICAgICAgICAgICAgICAgKyBiNjRjaHNbdTMyICYgNjNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYWQgPyBhc2Muc2xpY2UoMCwgcGFkIC0gMykgKyBcIj09PVwiLnN1YnN0cmluZyhwYWQpIDogYXNjO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogZG9lcyB3aGF0IGB3aW5kb3cuYnRvYWAgb2Ygd2ViIGJyb3dzZXJzIGRvLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiaW4gYmluYXJ5IHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NC1lbmNvZGVkIHN0cmluZ1xuICAgICAqL1xuICAgIHZhciBfYnRvYSA9IHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nID8gZnVuY3Rpb24gKGJpbikgeyByZXR1cm4gYnRvYShiaW4pOyB9XG4gICAgICAgIDogX2hhc0J1ZmZlciA/IGZ1bmN0aW9uIChiaW4pIHsgcmV0dXJuIEJ1ZmZlci5mcm9tKGJpbiwgJ2JpbmFyeScpLnRvU3RyaW5nKCdiYXNlNjQnKTsgfVxuICAgICAgICAgICAgOiBidG9hUG9seWZpbGw7XG4gICAgdmFyIF9mcm9tVWludDhBcnJheSA9IF9oYXNCdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiAodThhKSB7IHJldHVybiBCdWZmZXIuZnJvbSh1OGEpLnRvU3RyaW5nKCdiYXNlNjQnKTsgfVxuICAgICAgICA6IGZ1bmN0aW9uICh1OGEpIHtcbiAgICAgICAgICAgIC8vIGNmLiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMjcxMDAwMS9ob3ctdG8tY29udmVydC11aW50OC1hcnJheS10by1iYXNlNjQtZW5jb2RlZC1zdHJpbmcvMTI3MTMzMjYjMTI3MTMzMjZcbiAgICAgICAgICAgIHZhciBtYXhhcmdzID0gMHgxMDAwO1xuICAgICAgICAgICAgdmFyIHN0cnMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdThhLmxlbmd0aDsgaSA8IGw7IGkgKz0gbWF4YXJncykge1xuICAgICAgICAgICAgICAgIHN0cnMucHVzaChfZnJvbUNDLmFwcGx5KG51bGwsIHU4YS5zdWJhcnJheShpLCBpICsgbWF4YXJncykpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfYnRvYShzdHJzLmpvaW4oJycpKTtcbiAgICAgICAgfTtcbiAgICAvKipcbiAgICAgKiBjb252ZXJ0cyBhIFVpbnQ4QXJyYXkgdG8gYSBCYXNlNjQgc3RyaW5nLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VybHNhZmVdIFVSTC1hbmQtZmlsZW5hbWUtc2FmZSBhIGxhIFJGQzQ2NDggwqc1XG4gICAgICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0IHN0cmluZ1xuICAgICAqL1xuICAgIHZhciBmcm9tVWludDhBcnJheSA9IGZ1bmN0aW9uICh1OGEsIHVybHNhZmUpIHtcbiAgICAgICAgaWYgKHVybHNhZmUgPT09IHZvaWQgMCkgeyB1cmxzYWZlID0gZmFsc2U7IH1cbiAgICAgICAgcmV0dXJuIHVybHNhZmUgPyBfbWtVcmlTYWZlKF9mcm9tVWludDhBcnJheSh1OGEpKSA6IF9mcm9tVWludDhBcnJheSh1OGEpO1xuICAgIH07XG4gICAgLy8gVGhpcyB0cmljayBpcyBmb3VuZCBicm9rZW4gaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpL2pzLWJhc2U2NC9pc3N1ZXMvMTMwXG4gICAgLy8gY29uc3QgdXRvYiA9IChzcmM6IHN0cmluZykgPT4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHNyYykpO1xuICAgIC8vIHJldmVydGluZyBnb29kIG9sZCBmYXRpb25lZCByZWdleHBcbiAgICB2YXIgY2JfdXRvYiA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmIChjLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHZhciBjYyA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgIHJldHVybiBjYyA8IDB4ODAgPyBjXG4gICAgICAgICAgICAgICAgOiBjYyA8IDB4ODAwID8gKF9mcm9tQ0MoMHhjMCB8IChjYyA+Pj4gNikpXG4gICAgICAgICAgICAgICAgICAgICsgX2Zyb21DQygweDgwIHwgKGNjICYgMHgzZikpKVxuICAgICAgICAgICAgICAgICAgICA6IChfZnJvbUNDKDB4ZTAgfCAoKGNjID4+PiAxMikgJiAweDBmKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICsgX2Zyb21DQygweDgwIHwgKChjYyA+Pj4gNikgJiAweDNmKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICsgX2Zyb21DQygweDgwIHwgKGNjICYgMHgzZikpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjYyA9IDB4MTAwMDBcbiAgICAgICAgICAgICAgICArIChjLmNoYXJDb2RlQXQoMCkgLSAweEQ4MDApICogMHg0MDBcbiAgICAgICAgICAgICAgICArIChjLmNoYXJDb2RlQXQoMSkgLSAweERDMDApO1xuICAgICAgICAgICAgcmV0dXJuIChfZnJvbUNDKDB4ZjAgfCAoKGNjID4+PiAxOCkgJiAweDA3KSlcbiAgICAgICAgICAgICAgICArIF9mcm9tQ0MoMHg4MCB8ICgoY2MgPj4+IDEyKSAmIDB4M2YpKVxuICAgICAgICAgICAgICAgICsgX2Zyb21DQygweDgwIHwgKChjYyA+Pj4gNikgJiAweDNmKSlcbiAgICAgICAgICAgICAgICArIF9mcm9tQ0MoMHg4MCB8IChjYyAmIDB4M2YpKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciByZV91dG9iID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRkZdfFteXFx4MDAtXFx4N0ZdL2c7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgc2hvdWxkIGhhdmUgYmVlbiBpbnRlcm5hbCB1c2Ugb25seS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIFVURi04IHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFVURi0xNiBzdHJpbmdcbiAgICAgKi9cbiAgICB2YXIgdXRvYiA9IGZ1bmN0aW9uICh1KSB7IHJldHVybiB1LnJlcGxhY2UocmVfdXRvYiwgY2JfdXRvYik7IH07XG4gICAgLy9cbiAgICB2YXIgX2VuY29kZSA9IF9oYXNCdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiAocykgeyByZXR1cm4gQnVmZmVyLmZyb20ocywgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7IH1cbiAgICAgICAgOiBfVEVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKHMpIHsgcmV0dXJuIF9mcm9tVWludDhBcnJheShfVEUuZW5jb2RlKHMpKTsgfVxuICAgICAgICAgICAgOiBmdW5jdGlvbiAocykgeyByZXR1cm4gX2J0b2EodXRvYihzKSk7IH07XG4gICAgLyoqXG4gICAgICogY29udmVydHMgYSBVVEYtOC1lbmNvZGVkIHN0cmluZyB0byBhIEJhc2U2NCBzdHJpbmcuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXJsc2FmZV0gaWYgYHRydWVgIG1ha2UgdGhlIHJlc3VsdCBVUkwtc2FmZVxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NCBzdHJpbmdcbiAgICAgKi9cbiAgICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKHNyYywgdXJsc2FmZSkge1xuICAgICAgICBpZiAodXJsc2FmZSA9PT0gdm9pZCAwKSB7IHVybHNhZmUgPSBmYWxzZTsgfVxuICAgICAgICByZXR1cm4gdXJsc2FmZVxuICAgICAgICAgICAgPyBfbWtVcmlTYWZlKF9lbmNvZGUoc3JjKSlcbiAgICAgICAgICAgIDogX2VuY29kZShzcmMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogY29udmVydHMgYSBVVEYtOC1lbmNvZGVkIHN0cmluZyB0byBVUkwtc2FmZSBCYXNlNjQgUkZDNDY0OCDCpzUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0IHN0cmluZ1xuICAgICAqL1xuICAgIHZhciBlbmNvZGVVUkkgPSBmdW5jdGlvbiAoc3JjKSB7IHJldHVybiBlbmNvZGUoc3JjLCB0cnVlKTsgfTtcbiAgICAvLyBUaGlzIHRyaWNrIGlzIGZvdW5kIGJyb2tlbiBodHRwczovL2dpdGh1Yi5jb20vZGFua29nYWkvanMtYmFzZTY0L2lzc3Vlcy8xMzBcbiAgICAvLyBjb25zdCBidG91ID0gKHNyYzogc3RyaW5nKSA9PiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHNyYykpO1xuICAgIC8vIHJldmVydGluZyBnb29kIG9sZCBmYXRpb25lZCByZWdleHBcbiAgICB2YXIgcmVfYnRvdSA9IC9bXFx4QzAtXFx4REZdW1xceDgwLVxceEJGXXxbXFx4RTAtXFx4RUZdW1xceDgwLVxceEJGXXsyfXxbXFx4RjAtXFx4RjddW1xceDgwLVxceEJGXXszfS9nO1xuICAgIHZhciBjYl9idG91ID0gZnVuY3Rpb24gKGNjY2MpIHtcbiAgICAgICAgc3dpdGNoIChjY2NjLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIHZhciBjcCA9ICgoMHgwNyAmIGNjY2MuY2hhckNvZGVBdCgwKSkgPDwgMTgpXG4gICAgICAgICAgICAgICAgICAgIHwgKCgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDEpKSA8PCAxMilcbiAgICAgICAgICAgICAgICAgICAgfCAoKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMikpIDw8IDYpXG4gICAgICAgICAgICAgICAgICAgIHwgKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMykpLCBvZmZzZXQgPSBjcCAtIDB4MTAwMDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChfZnJvbUNDKChvZmZzZXQgPj4+IDEwKSArIDB4RDgwMClcbiAgICAgICAgICAgICAgICAgICAgKyBfZnJvbUNDKChvZmZzZXQgJiAweDNGRikgKyAweERDMDApKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICByZXR1cm4gX2Zyb21DQygoKDB4MGYgJiBjY2NjLmNoYXJDb2RlQXQoMCkpIDw8IDEyKVxuICAgICAgICAgICAgICAgICAgICB8ICgoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSkgPDwgNilcbiAgICAgICAgICAgICAgICAgICAgfCAoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgyKSkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gX2Zyb21DQygoKDB4MWYgJiBjY2NjLmNoYXJDb2RlQXQoMCkpIDw8IDYpXG4gICAgICAgICAgICAgICAgICAgIHwgKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMSkpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgc2hvdWxkIGhhdmUgYmVlbiBpbnRlcm5hbCB1c2Ugb25seS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIFVURi0xNiBzdHJpbmdcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBVVEYtOCBzdHJpbmdcbiAgICAgKi9cbiAgICB2YXIgYnRvdSA9IGZ1bmN0aW9uIChiKSB7IHJldHVybiBiLnJlcGxhY2UocmVfYnRvdSwgY2JfYnRvdSk7IH07XG4gICAgLyoqXG4gICAgICogcG9seWZpbGwgdmVyc2lvbiBvZiBgYXRvYmBcbiAgICAgKi9cbiAgICB2YXIgYXRvYlBvbHlmaWxsID0gZnVuY3Rpb24gKGFzYykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygncG9seWZpbGxlZCcpO1xuICAgICAgICBhc2MgPSBhc2MucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gICAgICAgIGlmICghYjY0cmUudGVzdChhc2MpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWFsZm9ybWVkIGJhc2U2NC4nKTtcbiAgICAgICAgYXNjICs9ICc9PScuc2xpY2UoMiAtIChhc2MubGVuZ3RoICYgMykpO1xuICAgICAgICB2YXIgdTI0LCBiaW4gPSAnJywgcjEsIHIyO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzYy5sZW5ndGg7KSB7XG4gICAgICAgICAgICB1MjQgPSBiNjR0YWJbYXNjLmNoYXJBdChpKyspXSA8PCAxOFxuICAgICAgICAgICAgICAgIHwgYjY0dGFiW2FzYy5jaGFyQXQoaSsrKV0gPDwgMTJcbiAgICAgICAgICAgICAgICB8IChyMSA9IGI2NHRhYlthc2MuY2hhckF0KGkrKyldKSA8PCA2XG4gICAgICAgICAgICAgICAgfCAocjIgPSBiNjR0YWJbYXNjLmNoYXJBdChpKyspXSk7XG4gICAgICAgICAgICBiaW4gKz0gcjEgPT09IDY0ID8gX2Zyb21DQyh1MjQgPj4gMTYgJiAyNTUpXG4gICAgICAgICAgICAgICAgOiByMiA9PT0gNjQgPyBfZnJvbUNDKHUyNCA+PiAxNiAmIDI1NSwgdTI0ID4+IDggJiAyNTUpXG4gICAgICAgICAgICAgICAgICAgIDogX2Zyb21DQyh1MjQgPj4gMTYgJiAyNTUsIHUyNCA+PiA4ICYgMjU1LCB1MjQgJiAyNTUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiaW47XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBkb2VzIHdoYXQgYHdpbmRvdy5hdG9iYCBvZiB3ZWIgYnJvd3NlcnMgZG8uXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGFzYyBCYXNlNjQtZW5jb2RlZCBzdHJpbmdcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBiaW5hcnkgc3RyaW5nXG4gICAgICovXG4gICAgdmFyIF9hdG9iID0gdHlwZW9mIGF0b2IgPT09ICdmdW5jdGlvbicgPyBmdW5jdGlvbiAoYXNjKSB7IHJldHVybiBhdG9iKF90aWR5QjY0KGFzYykpOyB9XG4gICAgICAgIDogX2hhc0J1ZmZlciA/IGZ1bmN0aW9uIChhc2MpIHsgcmV0dXJuIEJ1ZmZlci5mcm9tKGFzYywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdiaW5hcnknKTsgfVxuICAgICAgICAgICAgOiBhdG9iUG9seWZpbGw7XG4gICAgLy9cbiAgICB2YXIgX3RvVWludDhBcnJheSA9IF9oYXNCdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiAoYSkgeyByZXR1cm4gX1U4QWZyb20oQnVmZmVyLmZyb20oYSwgJ2Jhc2U2NCcpKTsgfVxuICAgICAgICA6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfVThBZnJvbShfYXRvYihhKS5zcGxpdCgnJykubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmNoYXJDb2RlQXQoMCk7IH0pKTsgfTtcbiAgICAvKipcbiAgICAgKiBjb252ZXJ0cyBhIEJhc2U2NCBzdHJpbmcgdG8gYSBVaW50OEFycmF5LlxuICAgICAqL1xuICAgIHZhciB0b1VpbnQ4QXJyYXkgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gX3RvVWludDhBcnJheShfdW5VUkkoYSkpOyB9O1xuICAgIC8vXG4gICAgdmFyIF9kZWNvZGUgPSBfaGFzQnVmZmVyXG4gICAgICAgID8gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIEJ1ZmZlci5mcm9tKGEsICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpOyB9XG4gICAgICAgIDogX1REXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfVEQuZGVjb2RlKF90b1VpbnQ4QXJyYXkoYSkpOyB9XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBidG91KF9hdG9iKGEpKTsgfTtcbiAgICB2YXIgX3VuVVJJID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIF90aWR5QjY0KGEucmVwbGFjZSgvWy1fXS9nLCBmdW5jdGlvbiAobTApIHsgcmV0dXJuIG0wID09ICctJyA/ICcrJyA6ICcvJzsgfSkpOyB9O1xuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIGEgQmFzZTY0IHN0cmluZyB0byBhIFVURi04IHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3JjIEJhc2U2NCBzdHJpbmcuICBCb3RoIG5vcm1hbCBhbmQgVVJMLXNhZmUgYXJlIHN1cHBvcnRlZFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFVURi04IHN0cmluZ1xuICAgICAqL1xuICAgIHZhciBkZWNvZGUgPSBmdW5jdGlvbiAoc3JjKSB7IHJldHVybiBfZGVjb2RlKF91blVSSShzcmMpKTsgfTtcbiAgICAvKipcbiAgICAgKiBjaGVjayBpZiBhIHZhbHVlIGlzIGEgdmFsaWQgQmFzZTY0IHN0cmluZ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzcmMgYSB2YWx1ZSB0byBjaGVja1xuICAgICAgKi9cbiAgICB2YXIgaXNWYWxpZCA9IGZ1bmN0aW9uIChzcmMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzcmMgIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgcyA9IHNyYy5yZXBsYWNlKC9cXHMrL2csICcnKS5yZXBsYWNlKC89ezAsMn0kLywgJycpO1xuICAgICAgICByZXR1cm4gIS9bXlxcczAtOWEtekEtWlxcKy9dLy50ZXN0KHMpIHx8ICEvW15cXHMwLTlhLXpBLVpcXC1fXS8udGVzdChzKTtcbiAgICB9O1xuICAgIC8vXG4gICAgdmFyIF9ub0VudW0gPSBmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHYsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBleHRlbmQgU3RyaW5nLnByb3RvdHlwZSB3aXRoIHJlbGV2YW50IG1ldGhvZHNcbiAgICAgKi9cbiAgICB2YXIgZXh0ZW5kU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2FkZCA9IGZ1bmN0aW9uIChuYW1lLCBib2R5KSB7IHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RyaW5nLnByb3RvdHlwZSwgbmFtZSwgX25vRW51bShib2R5KSk7IH07XG4gICAgICAgIF9hZGQoJ2Zyb21CYXNlNjQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWNvZGUodGhpcyk7IH0pO1xuICAgICAgICBfYWRkKCd0b0Jhc2U2NCcsIGZ1bmN0aW9uICh1cmxzYWZlKSB7IHJldHVybiBlbmNvZGUodGhpcywgdXJsc2FmZSk7IH0pO1xuICAgICAgICBfYWRkKCd0b0Jhc2U2NFVSSScsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVuY29kZSh0aGlzLCB0cnVlKTsgfSk7XG4gICAgICAgIF9hZGQoJ3RvQmFzZTY0VVJMJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZW5jb2RlKHRoaXMsIHRydWUpOyB9KTtcbiAgICAgICAgX2FkZCgndG9VaW50OEFycmF5JywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdG9VaW50OEFycmF5KHRoaXMpOyB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIGV4dGVuZCBVaW50OEFycmF5LnByb3RvdHlwZSB3aXRoIHJlbGV2YW50IG1ldGhvZHNcbiAgICAgKi9cbiAgICB2YXIgZXh0ZW5kVWludDhBcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hZGQgPSBmdW5jdGlvbiAobmFtZSwgYm9keSkgeyByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFVpbnQ4QXJyYXkucHJvdG90eXBlLCBuYW1lLCBfbm9FbnVtKGJvZHkpKTsgfTtcbiAgICAgICAgX2FkZCgndG9CYXNlNjQnLCBmdW5jdGlvbiAodXJsc2FmZSkgeyByZXR1cm4gZnJvbVVpbnQ4QXJyYXkodGhpcywgdXJsc2FmZSk7IH0pO1xuICAgICAgICBfYWRkKCd0b0Jhc2U2NFVSSScsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZyb21VaW50OEFycmF5KHRoaXMsIHRydWUpOyB9KTtcbiAgICAgICAgX2FkZCgndG9CYXNlNjRVUkwnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBmcm9tVWludDhBcnJheSh0aGlzLCB0cnVlKTsgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBleHRlbmQgQnVpbHRpbiBwcm90b3R5cGVzIHdpdGggcmVsZXZhbnQgbWV0aG9kc1xuICAgICAqL1xuICAgIHZhciBleHRlbmRCdWlsdGlucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXh0ZW5kU3RyaW5nKCk7XG4gICAgICAgIGV4dGVuZFVpbnQ4QXJyYXkoKTtcbiAgICB9O1xuICAgIHZhciBnQmFzZTY0ID0ge1xuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLFxuICAgICAgICBWRVJTSU9OOiBWRVJTSU9OLFxuICAgICAgICBhdG9iOiBfYXRvYixcbiAgICAgICAgYXRvYlBvbHlmaWxsOiBhdG9iUG9seWZpbGwsXG4gICAgICAgIGJ0b2E6IF9idG9hLFxuICAgICAgICBidG9hUG9seWZpbGw6IGJ0b2FQb2x5ZmlsbCxcbiAgICAgICAgZnJvbUJhc2U2NDogZGVjb2RlLFxuICAgICAgICB0b0Jhc2U2NDogZW5jb2RlLFxuICAgICAgICBlbmNvZGU6IGVuY29kZSxcbiAgICAgICAgZW5jb2RlVVJJOiBlbmNvZGVVUkksXG4gICAgICAgIGVuY29kZVVSTDogZW5jb2RlVVJJLFxuICAgICAgICB1dG9iOiB1dG9iLFxuICAgICAgICBidG91OiBidG91LFxuICAgICAgICBkZWNvZGU6IGRlY29kZSxcbiAgICAgICAgaXNWYWxpZDogaXNWYWxpZCxcbiAgICAgICAgZnJvbVVpbnQ4QXJyYXk6IGZyb21VaW50OEFycmF5LFxuICAgICAgICB0b1VpbnQ4QXJyYXk6IHRvVWludDhBcnJheSxcbiAgICAgICAgZXh0ZW5kU3RyaW5nOiBleHRlbmRTdHJpbmcsXG4gICAgICAgIGV4dGVuZFVpbnQ4QXJyYXk6IGV4dGVuZFVpbnQ4QXJyYXksXG4gICAgICAgIGV4dGVuZEJ1aWx0aW5zOiBleHRlbmRCdWlsdGluc1xuICAgIH07XG4gICAgLy9cbiAgICAvLyBleHBvcnQgQmFzZTY0IHRvIHRoZSBuYW1lc3BhY2VcbiAgICAvL1xuICAgIC8vIEVTNSBpcyB5ZXQgdG8gaGF2ZSBPYmplY3QuYXNzaWduKCkgdGhhdCBtYXkgbWFrZSB0cmFuc3BpbGVycyB1bmhhcHB5LlxuICAgIC8vIGdCYXNlNjQuQmFzZTY0ID0gT2JqZWN0LmFzc2lnbih7fSwgZ0Jhc2U2NCk7XG4gICAgZ0Jhc2U2NC5CYXNlNjQgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhnQmFzZTY0KS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IHJldHVybiBnQmFzZTY0LkJhc2U2NFtrXSA9IGdCYXNlNjRba107IH0pO1xuICAgIHJldHVybiBnQmFzZTY0O1xufSkpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5LaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIgPSB2b2lkIDA7XG52YXIgZm9ybV9kYXRhXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImZvcm0tZGF0YVwiKSk7XG52YXIgcXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicXNcIikpO1xudmFyIGpzX2Jhc2U2NF8xID0gcmVxdWlyZShcImpzLWJhc2U2NFwiKTtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm0vXCIpO1xudmFyIERFRkFVTFRfUFJPWFlfUFJPVE9DT0wgPSBcImh0dHBcIjtcbnZhciBUSFJFU0hPTERfQVZPSURfUkVRVUVTVF9VUkxfVE9PX0xBUkdFID0gNDA5NjtcbnZhciBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xuICAgICAgICB0aGlzLmF1dGggPSBvcHRpb25zLmF1dGg7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IHRoaXMuYnVpbGRIZWFkZXJzKHtcbiAgICAgICAgICAgIGJhc2ljQXV0aDogb3B0aW9ucy5iYXNpY0F1dGgsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6IG9wdGlvbnMudXNlckFnZW50LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKFwiaHR0cHNBZ2VudFwiIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChcImNsaWVudENlcnRBdXRoXCIgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzcGVjaWZ5IGNsaWVudENlcnRBdXRoIGFsb25nIHdpdGggaHR0cHNBZ2VudC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmh0dHBzQWdlbnQgPSBvcHRpb25zLmh0dHBzQWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoXCJjbGllbnRDZXJ0QXV0aFwiIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY2xpZW50Q2VydEF1dGggPSBvcHRpb25zLmNsaWVudENlcnRBdXRoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJveHkgPSBvcHRpb25zLnByb3h5O1xuICAgICAgICB0aGlzLnJlcXVlc3RUb2tlbiA9IG51bGw7XG4gICAgICAgIHRoaXMuc29ja2V0VGltZW91dCA9IG9wdGlvbnMuc29ja2V0VGltZW91dDtcbiAgICB9XG4gICAgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uIChtZXRob2QsIHBhdGgsIHBhcmFtcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdENvbmZpZywgX2EsIHJlcXVlc3RVcmwsIF9iLCBmb3JtRGF0YSwgX2MsIF9kLCByZXF1ZXN0VXJsLCBfZSwgX2Y7XG4gICAgICAgICAgICB2YXIgX2csIF9oLCBfajtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2spIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9rLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbihfX2Fzc2lnbih7IG1ldGhvZDogbWV0aG9kLCBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsIHVybDogXCJcIi5jb25jYXQodGhpcy5iYXNlVXJsKS5jb25jYXQocGF0aCkgfSwgKG9wdGlvbnMgPyBvcHRpb25zIDoge30pKSwgcGxhdGZvcm1fMS5wbGF0Zm9ybURlcHMuYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHNBZ2VudDogdGhpcy5odHRwc0FnZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudENlcnRBdXRoOiB0aGlzLmNsaWVudENlcnRBdXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldFRpbWVvdXQ6IHRoaXMuc29ja2V0VGltZW91dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKSwgeyBwcm94eTogdGhpcy5idWlsZFByb3h5Q29uZmlnKHRoaXMucHJveHkpIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2EgPSBtZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImdldFwiOiByZXR1cm4gWzMgLypicmVhayovLCAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicG9zdFwiOiByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicHV0XCI6IHJldHVybiBbMyAvKmJyZWFrKi8sIDhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJkZWxldGVcIjogcmV0dXJuIFszIC8qYnJlYWsqLywgMTBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgMTJdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0VXJsID0gdGhpcy5idWlsZFJlcXVlc3RVcmwocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlcXVlc3RVcmwubGVuZ3RoID4gVEhSRVNIT0xEX0FWT0lEX1JFUVVFU1RfVVJMX1RPT19MQVJHRSkpIHJldHVybiBbMyAvKmJyZWFrKi8sIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2IgPSBbX19hc3NpZ24oe30sIHJlcXVlc3RDb25maWcpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9nID0geyBtZXRob2Q6IFwicG9zdFwiLCBoZWFkZXJzOiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGhpcy5oZWFkZXJzKSwgeyBcIlgtSFRUUC1NZXRob2QtT3ZlcnJpZGVcIjogXCJHRVRcIiB9KSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5idWlsZERhdGEocGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9fYXNzaWduLmFwcGx5KHZvaWQgMCwgX2IuY29uY2F0KFsoX2cuZGF0YSA9IF9rLnNlbnQoKSwgX2cpXSkpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzIgLypyZXR1cm4qLywgX19hc3NpZ24oX19hc3NpZ24oe30sIHJlcXVlc3RDb25maWcpLCB7IHVybDogcmVxdWVzdFVybCB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHBhcmFtcyBpbnN0YW5jZW9mIGZvcm1fZGF0YV8xLmRlZmF1bHQpKSByZXR1cm4gWzMgLypicmVhayovLCA2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuYnVpbGREYXRhKHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YSA9IF9rLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVxdWVzdENvbmZpZyksIHsgaGVhZGVyczogXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGZvcm1EYXRhLmdldEhlYWRlcnMgZG9lcyBub3QgZXhpc3QgaW4gYSBicm93c2VyIGVudmlyb25tZW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZm9ybURhdGEuZ2V0SGVhZGVycyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aGlzLmhlYWRlcnMpLCBmb3JtRGF0YS5nZXRIZWFkZXJzKCkpIDogdGhpcy5oZWFkZXJzLCBkYXRhOiBmb3JtRGF0YSB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jID0gW19fYXNzaWduKHt9LCByZXF1ZXN0Q29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgICAgICBfaCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5idWlsZERhdGEocGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNzogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9fYXNzaWduLmFwcGx5KHZvaWQgMCwgX2MuY29uY2F0KFsoX2guZGF0YSA9IF9rLnNlbnQoKSwgX2gpXSkpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICAgICAgX2QgPSBbX19hc3NpZ24oe30sIHJlcXVlc3RDb25maWcpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9qID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmJ1aWxkRGF0YShwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA5OiByZXR1cm4gWzIgLypyZXR1cm4qLywgX19hc3NpZ24uYXBwbHkodm9pZCAwLCBfZC5jb25jYXQoWyhfai5kYXRhID0gX2suc2VudCgpLCBfaildKSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2UgPSB0aGlzLmJ1aWxkUmVxdWVzdFVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9mID0gW3BhdGhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5idWlsZERhdGEocGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0VXJsID0gX2UuYXBwbHkodGhpcywgX2YuY29uY2F0KFtfay5zZW50KCldKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgX19hc3NpZ24oX19hc3NpZ24oe30sIHJlcXVlc3RDb25maWcpLCB7IHVybDogcmVxdWVzdFVybCB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiXCIuY29uY2F0KG1ldGhvZCwgXCIgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgX2subGFiZWwgPSAxMztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlci5wcm90b3R5cGUuYnVpbGRQcm94eUNvbmZpZyA9IGZ1bmN0aW9uIChwcm94eUNvbmZpZykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChwcm94eUNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm94eUNvbmZpZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJveHkgPSBwcm94eUNvbmZpZztcbiAgICAgICAgaWYgKHByb3h5LmF1dGggJiZcbiAgICAgICAgICAgIChwcm94eS5hdXRoLnVzZXJuYW1lLmxlbmd0aCA9PT0gMCB8fCBwcm94eS5hdXRoLnBhc3N3b3JkLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHByb3h5LmF1dGggPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHJveHkucHJvdG9jb2wgPSAoX2EgPSBwcm94eS5wcm90b2NvbCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9QUk9YWV9QUk9UT0NPTDtcbiAgICAgICAgcmV0dXJuIHByb3h5O1xuICAgIH07XG4gICAgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyLnByb3RvdHlwZS5idWlsZFJlcXVlc3RVcmwgPSBmdW5jdGlvbiAocGF0aCwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBcIlwiLmNvbmNhdCh0aGlzLmJhc2VVcmwpLmNvbmNhdChwYXRoLCBcIj9cIikuY29uY2F0KHFzXzEuZGVmYXVsdC5zdHJpbmdpZnkocGFyYW1zKSk7XG4gICAgfTtcbiAgICBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIucHJvdG90eXBlLmJ1aWxkRGF0YSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlcXVlc3RUb2tlbjtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHRoaXMuYXV0aC50eXBlID09PSBcInNlc3Npb25cIikpIHJldHVybiBbMyAvKmJyZWFrKi8sIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5nZXRSZXF1ZXN0VG9rZW4oKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RUb2tlbiA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMgaW5zdGFuY2VvZiBmb3JtX2RhdGFfMS5kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChcIl9fUkVRVUVTVF9UT0tFTl9fXCIsIHJlcXVlc3RUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHBhcmFtc107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgX19hc3NpZ24oeyBfX1JFUVVFU1RfVE9LRU5fXzogcmVxdWVzdFRva2VuIH0sIHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCBwYXJhbXNdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlci5wcm90b3R5cGUuYnVpbGRIZWFkZXJzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgYmFzaWNBdXRoID0gcGFyYW1zLmJhc2ljQXV0aCwgdXNlckFnZW50ID0gcGFyYW1zLnVzZXJBZ2VudDtcbiAgICAgICAgdmFyIGJhc2ljQXV0aEhlYWRlcnMgPSBiYXNpY0F1dGhcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IFwiQmFzaWMgXCIuY29uY2F0KGpzX2Jhc2U2NF8xLkJhc2U2NC5lbmNvZGUoXCJcIi5jb25jYXQoYmFzaWNBdXRoLnVzZXJuYW1lLCBcIjpcIikuY29uY2F0KGJhc2ljQXV0aC5wYXNzd29yZCkpKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge307XG4gICAgICAgIHZhciBwbGF0Zm9ybURlcHNIZWFkZXJzID0gcGxhdGZvcm1fMS5wbGF0Zm9ybURlcHMuYnVpbGRIZWFkZXJzKHsgdXNlckFnZW50OiB1c2VyQWdlbnQgfSk7XG4gICAgICAgIHZhciBjb21tb25IZWFkZXJzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHBsYXRmb3JtRGVwc0hlYWRlcnMpLCBiYXNpY0F1dGhIZWFkZXJzKTtcbiAgICAgICAgc3dpdGNoICh0aGlzLmF1dGgudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInBhc3N3b3JkXCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbW1vbkhlYWRlcnMpLCB7IFwiWC1DeWJvenUtQXV0aG9yaXphdGlvblwiOiBqc19iYXNlNjRfMS5CYXNlNjQuZW5jb2RlKFwiXCIuY29uY2F0KHRoaXMuYXV0aC51c2VybmFtZSwgXCI6XCIpLmNvbmNhdCh0aGlzLmF1dGgucGFzc3dvcmQpKSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJhcGlUb2tlblwiOiB7XG4gICAgICAgICAgICAgICAgdmFyIGFwaVRva2VuID0gdGhpcy5hdXRoLmFwaVRva2VuO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFwaVRva2VuKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbW1vbkhlYWRlcnMpLCB7IFwiWC1DeWJvenUtQVBJLVRva2VuXCI6IGFwaVRva2VuLmpvaW4oXCIsXCIpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbW1vbkhlYWRlcnMpLCB7IFwiWC1DeWJvenUtQVBJLVRva2VuXCI6IGFwaVRva2VuIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm9BdXRoVG9rZW5cIjoge1xuICAgICAgICAgICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY29tbW9uSGVhZGVycyksIHsgQXV0aG9yaXphdGlvbjogXCJCZWFyZXIgXCIuY29uY2F0KHRoaXMuYXV0aC5vQXV0aFRva2VuKSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbW1vbkhlYWRlcnMpLCB7IFwiWC1SZXF1ZXN0ZWQtV2l0aFwiOiBcIlhNTEh0dHBSZXF1ZXN0XCIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlci5wcm90b3R5cGUuZ2V0UmVxdWVzdFRva2VuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0aGlzLnJlcXVlc3RUb2tlbiA9PT0gbnVsbCkpIHJldHVybiBbMyAvKmJyZWFrKi8sIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2EgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgcGxhdGZvcm1fMS5wbGF0Zm9ybURlcHMuZ2V0UmVxdWVzdFRva2VuKCldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5yZXF1ZXN0VG9rZW4gPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMucmVxdWVzdFRva2VuXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyO1xufSgpKTtcbmV4cG9ydHMuS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyID0gS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9S2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuS2ludG9uZVJlc3BvbnNlSGFuZGxlciA9IHZvaWQgMDtcbnZhciBlcnJvcl8xID0gcmVxdWlyZShcIi4vZXJyb3JcIik7XG52YXIgS2ludG9uZVJlc3BvbnNlSGFuZGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBLaW50b25lUmVzcG9uc2VIYW5kbGVyKF9hKSB7XG4gICAgICAgIHZhciBlbmFibGVBYm9ydFNlYXJjaEVycm9yID0gX2EuZW5hYmxlQWJvcnRTZWFyY2hFcnJvcjtcbiAgICAgICAgdGhpcy5lbmFibGVBYm9ydFNlYXJjaEVycm9yID0gZW5hYmxlQWJvcnRTZWFyY2hFcnJvcjtcbiAgICB9XG4gICAgS2ludG9uZVJlc3BvbnNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiByZXNwb25zZS50aGVuKGZ1bmN0aW9uIChyZXMpIHsgcmV0dXJuIF90aGlzLmhhbmRsZVN1Y2Nlc3NSZXNwb25zZShyZXMpOyB9LCBmdW5jdGlvbiAoZXJyb3IpIHsgcmV0dXJuIF90aGlzLmhhbmRsZUVycm9yUmVzcG9uc2UoZXJyb3IpOyB9KTtcbiAgICB9O1xuICAgIEtpbnRvbmVSZXNwb25zZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZVN1Y2Nlc3NSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICBpZiAodGhpcy5lbmFibGVBYm9ydFNlYXJjaEVycm9yICYmXG4gICAgICAgICAgICAvRmlsdGVyIGFib3J0ZWQgYmVjYXVzZSBvZiB0b28gbWFueSBzZWFyY2ggcmVzdWx0cy8udGVzdChyZXNwb25zZS5oZWFkZXJzW1wieC1jeWJvenUtd2FybmluZ1wiXSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcl8xLktpbnRvbmVBYm9ydFNlYXJjaEVycm9yKHJlc3BvbnNlLmhlYWRlcnNbXCJ4LWN5Ym96dS13YXJuaW5nXCJdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9O1xuICAgIEtpbnRvbmVSZXNwb25zZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUVycm9yUmVzcG9uc2UgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gRklYTUU6IGZpbmQgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGlzIGVycm9yXG4gICAgICAgICAgICBpZiAoL21hYyB2ZXJpZnkgZmFpbHVyZS8udGVzdChlcnJvci50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2xpZW50Q2VydEF1dGggc2V0dGluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvclJlc3BvbnNlID0gZXJyb3IucmVzcG9uc2U7XG4gICAgICAgIHZhciBkYXRhID0gZXJyb3JSZXNwb25zZS5kYXRhLCByZXN0ID0gX19yZXN0KGVycm9yUmVzcG9uc2UsIFtcImRhdGFcIl0pO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlwiLmNvbmNhdChyZXN0LnN0YXR1cywgXCI6IFwiKS5jb25jYXQocmVzdC5zdGF0dXNUZXh0KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IGVycm9yXzEuS2ludG9uZVJlc3RBUElFcnJvcihfX2Fzc2lnbih7IGRhdGE6IGRhdGEgfSwgcmVzdCkpO1xuICAgIH07XG4gICAgcmV0dXJuIEtpbnRvbmVSZXNwb25zZUhhbmRsZXI7XG59KCkpO1xuZXhwb3J0cy5LaW50b25lUmVzcG9uc2VIYW5kbGVyID0gS2ludG9uZVJlc3BvbnNlSGFuZGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUtpbnRvbmVSZXNwb25zZUhhbmRsZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5LaW50b25lUmVzdEFQSUNsaWVudCA9IHZvaWQgMDtcbnZhciBCdWxrUmVxdWVzdENsaWVudF8xID0gcmVxdWlyZShcIi4vY2xpZW50L0J1bGtSZXF1ZXN0Q2xpZW50XCIpO1xudmFyIEFwcENsaWVudF8xID0gcmVxdWlyZShcIi4vY2xpZW50L0FwcENsaWVudFwiKTtcbnZhciBSZWNvcmRDbGllbnRfMSA9IHJlcXVpcmUoXCIuL2NsaWVudC9SZWNvcmRDbGllbnRcIik7XG52YXIgU3BhY2VDbGllbnRfMSA9IHJlcXVpcmUoXCIuL2NsaWVudC9TcGFjZUNsaWVudFwiKTtcbnZhciBGaWxlQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9jbGllbnQvRmlsZUNsaWVudFwiKTtcbnZhciBodHRwXzEgPSByZXF1aXJlKFwiLi9odHRwL1wiKTtcbnZhciBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXJfMSA9IHJlcXVpcmUoXCIuL0tpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlclwiKTtcbnZhciBLaW50b25lUmVzcG9uc2VIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9LaW50b25lUmVzcG9uc2VIYW5kbGVyXCIpO1xudmFyIHBsYXRmb3JtXzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybVwiKTtcbnZhciBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JfMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtL1Vuc3VwcG9ydGVkUGxhdGZvcm1FcnJvclwiKTtcbnZhciBidWlsZERpc2NyaW1pbmF0ZWRBdXRoID0gZnVuY3Rpb24gKGF1dGgpIHtcbiAgICBpZiAoXCJ1c2VybmFtZVwiIGluIGF1dGgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXNzaWduKHsgdHlwZTogXCJwYXNzd29yZFwiIH0sIGF1dGgpO1xuICAgIH1cbiAgICBpZiAoXCJhcGlUb2tlblwiIGluIGF1dGgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXNzaWduKHsgdHlwZTogXCJhcGlUb2tlblwiIH0sIGF1dGgpO1xuICAgIH1cbiAgICBpZiAoXCJvQXV0aFRva2VuXCIgaW4gYXV0aCkge1xuICAgICAgICByZXR1cm4gX19hc3NpZ24oeyB0eXBlOiBcIm9BdXRoVG9rZW5cIiB9LCBhdXRoKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHBsYXRmb3JtXzEucGxhdGZvcm1EZXBzLmdldERlZmF1bHRBdXRoKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXzEuVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXNzaW9uIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gXCIuY29uY2F0KGUucGxhdGZvcm0sIFwiIGVudmlyb25tZW50LlwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICB9XG59O1xudmFyIEtpbnRvbmVSZXN0QVBJQ2xpZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEtpbnRvbmVSZXN0QVBJQ2xpZW50KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gcGxhdGZvcm1fMS5wbGF0Zm9ybURlcHNcbiAgICAgICAgICAgIC5idWlsZEJhc2VVcmwob3B0aW9ucy5iYXNlVXJsKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLyskLywgXCJcIik7IC8vIFJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICAgICAgICB2YXIgYXV0aCA9IGJ1aWxkRGlzY3JpbWluYXRlZEF1dGgoKF9hID0gb3B0aW9ucy5hdXRoKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSk7XG4gICAgICAgIHZhciByZXF1ZXN0Q29uZmlnQnVpbGRlciA9IG5ldyBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXJfMS5LaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIoX19hc3NpZ24oX19hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGJhc2VVcmw6IHRoaXMuYmFzZVVybCwgYXV0aDogYXV0aCB9KSk7XG4gICAgICAgIHZhciByZXNwb25zZUhhbmRsZXIgPSBuZXcgS2ludG9uZVJlc3BvbnNlSGFuZGxlcl8xLktpbnRvbmVSZXNwb25zZUhhbmRsZXIoe1xuICAgICAgICAgICAgZW5hYmxlQWJvcnRTZWFyY2hFcnJvcjogKF9jID0gKF9iID0gb3B0aW9ucy5mZWF0dXJlRmxhZ3MpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5lbmFibGVBYm9ydFNlYXJjaEVycm9yKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBodHRwQ2xpZW50ID0gbmV3IGh0dHBfMS5EZWZhdWx0SHR0cENsaWVudCh7XG4gICAgICAgICAgICByZXNwb25zZUhhbmRsZXI6IHJlc3BvbnNlSGFuZGxlcixcbiAgICAgICAgICAgIHJlcXVlc3RDb25maWdCdWlsZGVyOiByZXF1ZXN0Q29uZmlnQnVpbGRlcixcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBndWVzdFNwYWNlSWQgPSBvcHRpb25zLmd1ZXN0U3BhY2VJZDtcbiAgICAgICAgdGhpcy5idWxrUmVxdWVzdF8gPSBuZXcgQnVsa1JlcXVlc3RDbGllbnRfMS5CdWxrUmVxdWVzdENsaWVudChodHRwQ2xpZW50LCBndWVzdFNwYWNlSWQpO1xuICAgICAgICB0aGlzLnJlY29yZCA9IG5ldyBSZWNvcmRDbGllbnRfMS5SZWNvcmRDbGllbnQoaHR0cENsaWVudCwgdGhpcy5idWxrUmVxdWVzdF8sIGd1ZXN0U3BhY2VJZCk7XG4gICAgICAgIHRoaXMuYXBwID0gbmV3IEFwcENsaWVudF8xLkFwcENsaWVudChodHRwQ2xpZW50LCBndWVzdFNwYWNlSWQpO1xuICAgICAgICB0aGlzLnNwYWNlID0gbmV3IFNwYWNlQ2xpZW50XzEuU3BhY2VDbGllbnQoaHR0cENsaWVudCwgZ3Vlc3RTcGFjZUlkKTtcbiAgICAgICAgdGhpcy5maWxlID0gbmV3IEZpbGVDbGllbnRfMS5GaWxlQ2xpZW50KGh0dHBDbGllbnQsIGd1ZXN0U3BhY2VJZCk7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShLaW50b25lUmVzdEFQSUNsaWVudCwgXCJ2ZXJzaW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcGxhdGZvcm1fMS5wbGF0Zm9ybURlcHMuZ2V0VmVyc2lvbigpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgS2ludG9uZVJlc3RBUElDbGllbnQucHJvdG90eXBlLmdldEJhc2VVcmwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmw7XG4gICAgfTtcbiAgICBLaW50b25lUmVzdEFQSUNsaWVudC5wcm90b3R5cGUuYnVsa1JlcXVlc3QgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1bGtSZXF1ZXN0Xy5zZW5kKHBhcmFtcyk7XG4gICAgfTtcbiAgICByZXR1cm4gS2ludG9uZVJlc3RBUElDbGllbnQ7XG59KCkpO1xuZXhwb3J0cy5LaW50b25lUmVzdEFQSUNsaWVudCA9IEtpbnRvbmVSZXN0QVBJQ2xpZW50O1xudmFyIHZhbGlkYXRlT3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVCYXNlVXJsKG9wdGlvbnMuYmFzZVVybCk7XG4gICAgdmFsaWRhdGVHdWVzdFNwYWNlSWQob3B0aW9ucy5ndWVzdFNwYWNlSWQpO1xuICAgIHZhbGlkYXRlU29ja2V0VGltZW91dChvcHRpb25zLnNvY2tldFRpbWVvdXQpO1xufTtcbnZhciB2YWxpZGF0ZUJhc2VVcmwgPSBmdW5jdGlvbiAoYmFzZVVybCkge1xuICAgIGlmIChiYXNlVXJsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdXJsID0gbmV3IFVSTChiYXNlVXJsKTtcbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBcImxvY2FsaG9zdFwiICYmIHVybC5wcm90b2NvbCAhPT0gXCJodHRwczpcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm90b2NvbCBvZiBiYXNlVXJsIG11c3QgYmUgXCJodHRwc1wiLicpO1xuICAgIH1cbn07XG52YXIgdmFsaWRhdGVHdWVzdFNwYWNlSWQgPSBmdW5jdGlvbiAoZ3Vlc3RTcGFjZUlkKSB7XG4gICAgaWYgKGd1ZXN0U3BhY2VJZCA9PT0gXCJcIiB8fCBndWVzdFNwYWNlSWQgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBndWVzdFNwYWNlSWQ6IGdvdCBbXCIuY29uY2F0KGd1ZXN0U3BhY2VJZCwgXCJdXCIpKTtcbiAgICB9XG59O1xudmFyIHZhbGlkYXRlU29ja2V0VGltZW91dCA9IGZ1bmN0aW9uIChzb2NrZXRUaW1lb3V0KSB7XG4gICAgaWYgKHNvY2tldFRpbWVvdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBudW1iZXIgPSBwYXJzZUZsb2F0KHNvY2tldFRpbWVvdXQudG9TdHJpbmcoKSk7XG4gICAgaWYgKGlzTmFOKG51bWJlcikgfHwgbnVtYmVyIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHNvY2tldFRpbWVvdXQuIE11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIuXCIpO1xuICAgIH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1LaW50b25lUmVzdEFQSUNsaWVudC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuS2ludG9uZVJlc3RBUElDbGllbnQgPSB2b2lkIDA7XG52YXIgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtL1wiKTtcbnZhciBicm93c2VyRGVwcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9wbGF0Zm9ybS9icm93c2VyXCIpKTtcbigwLCBwbGF0Zm9ybV8xLmluamVjdFBsYXRmb3JtRGVwcykoYnJvd3NlckRlcHMpO1xudmFyIEtpbnRvbmVSZXN0QVBJQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9LaW50b25lUmVzdEFQSUNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktpbnRvbmVSZXN0QVBJQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBLaW50b25lUmVzdEFQSUNsaWVudF8xLktpbnRvbmVSZXN0QVBJQ2xpZW50OyB9IH0pO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Vycm9yXCIpLCBleHBvcnRzKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmJyb3dzZXIuanMubWFwIiwiLy8gc3JjL3R5cGVzL2ZpZWxkLmQudHNcclxuXHJcbmV4cG9ydCBlbnVtIEZpZWxkVHlwZSB7XHJcbiAgICBDQUxDID0gXCJDQUxDXCIsXHJcbiAgICBDQVRFR09SWSA9IFwiQ0FURUdPUllcIixcclxuICAgIENIRUNLX0JPWCA9IFwiQ0hFQ0tfQk9YXCIsXHJcbiAgICBDUkVBVEVEX1RJTUUgPSBcIkNSRUFURURfVElNRVwiLFxyXG4gICAgQ1JFQVRPUiA9IFwiQ1JFQVRPUlwiLFxyXG4gICAgREFURSA9IFwiREFURVwiLFxyXG4gICAgREFURVRJTUUgPSBcIkRBVEVUSU1FXCIsXHJcbiAgICBEUk9QX0RPV04gPSBcIkRST1BfRE9XTlwiLFxyXG4gICAgRklMRSA9IFwiRklMRVwiLFxyXG4gICAgR1JPVVAgPSBcIkdST1VQXCIsXHJcbiAgICBHUk9VUF9TRUxFQ1QgPSBcIkdST1VQX1NFTEVDVFwiLFxyXG4gICAgTElOSyA9IFwiTElOS1wiLFxyXG4gICAgTU9ESUZJRVIgPSBcIk1PRElGSUVSXCIsXHJcbiAgICBNVUxUSV9MSU5FX1RFWFQgPSBcIk1VTFRJX0xJTkVfVEVYVFwiLFxyXG4gICAgTVVMVElfU0VMRUNUID0gXCJNVUxUSV9TRUxFQ1RcIixcclxuICAgIE5VTUJFUiA9IFwiTlVNQkVSXCIsXHJcbiAgICBPUkdBTklaQVRJT05fU0VMRUNUID0gXCJPUkdBTklaQVRJT05fU0VMRUNUXCIsXHJcbiAgICBSQURJT19CVVRUT04gPSBcIlJBRElPX0JVVFRPTlwiLFxyXG4gICAgUkVDT1JEX05VTUJFUiA9IFwiUkVDT1JEX05VTUJFUlwiLFxyXG4gICAgUkVGRVJFTkNFX1RBQkxFID0gXCJSRUZFUkVOQ0VfVEFCTEVcIixcclxuICAgIFJJQ0hfVEVYVCA9IFwiUklDSF9URVhUXCIsXHJcbiAgICBTSU5HTEVfTElORV9URVhUID0gXCJTSU5HTEVfTElORV9URVhUXCIsXHJcbiAgICBTVEFUVVMgPSBcIlNUQVRVU1wiLFxyXG4gICAgU1RBVFVTX0FTU0lHTkVFID0gXCJTVEFUVVNfQVNTSUdORUVcIixcclxuICAgIFNVQlRBQkxFID0gXCJTVUJUQUJMRVwiLFxyXG4gICAgVElNRSA9IFwiVElNRVwiLFxyXG4gICAgVVBEQVRFRF9USU1FID0gXCJVUERBVEVEX1RJTUVcIixcclxuICAgIFVTRVJfU0VMRUNUID0gXCJVU0VSX1NFTEVDVFwiXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIENhbGNGb3JtYXR7XHJcbiAgICBOVU1CRVIgPSBcIk5VTUJFUlwiLFxyXG4gICAgTlVNQkVSX0RJR0lUID0gXCJOVU1CRVJfRElHSVRcIixcclxuICAgIERBVEVUSU1FID0gXCJEQVRFVElNRVwiLFxyXG4gICAgREFURSA9IFwiREFURVwiLFxyXG4gICAgVElNRSA9IFwiVElNRVwiLFxyXG4gICAgSE9VUl9NSU5VVEU9IFwiSE9VUl9NSU5VVEVcIixcclxuICAgIERBWV9IT1VSX01JTlVURT0gXCJEQVlfSE9VUl9NSU5VVEVcIlxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkRm9ybSB7XHJcbiAgICBjb2RlOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBGaWVsZFR5cGU7XHJcbiAgICByZXF1aXJlZD86IGJvb2xlYW47XHJcbiAgICBub0xhYmVsPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25Gb3Jte1xyXG4gICAgaW5kZXg6IHN0cmluZztcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5Rm9ybSB7XHJcbiAgICBjb2RlOiBzdHJpbmc7XHJcbiAgICB0eXBlOiAnVVNFUicgfCAnT1JHQU5JWkFUSU9OJyB8ICdHUk9VUCcgfCAnRlVOQ1RJT04nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhbGNGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgdW5pdD86IHN0cmluZztcclxuICAgIGV4cHJlc3Npb24/OiBzdHJpbmc7XHJcbiAgICBmb3JtYXQ/OkNhbGNGb3JtYXQ7XHJcbiAgICB1bml0UG9zaXRpb24/OiAnQkVGT1JFJyB8ICdBRlRFUic7XHJcbiAgICBkaXNwbGF5U2NhbGU/OiBzdHJpbmc7XHJcbiAgICBoaWRlRXhwcmVzc2lvbj86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2F0ZWdvcnlGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZUZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XHJcbiAgICB1bmlxdWU/OiBib29sZWFuO1xyXG4gICAgZGVmYXVsdE5vd1ZhbHVlPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEYXRldGltZUZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XHJcbiAgICB1bmlxdWU/OiBib29sZWFuO1xyXG4gICAgZGVmYXVsdE5vd1ZhbHVlPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEZWNpbWFsRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIG1heFZhbHVlPzogc3RyaW5nO1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG4gICAgdW5pdFBvc2l0aW9uPzogJ0JFRk9SRScgfCAnQUZURVInO1xyXG4gICAgbWluVmFsdWU/OiBzdHJpbmc7XHJcbiAgICB1bml0Pzogc3RyaW5nO1xyXG4gICAgdW5pcXVlPzogYm9vbGVhbjtcclxuICAgIGRpc3BsYXlTY2FsZT86IHN0cmluZztcclxuICAgIGRpZ2l0PzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFZGl0b3JGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUZvcm0ge1xyXG4gICAgY29kZTogc3RyaW5nO1xyXG4gICAgdHlwZTogJ1VTRVInIHwgJ09SR0FOSVpBVElPTicgfCAnR1JPVVAnIHwgJ0ZVTkNUSU9OJztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWVsZE1hcHBpbmdGb3JtIHtcclxuICAgIHJlbGF0ZWRGaWVsZDogc3RyaW5nO1xyXG4gICAgZmllbGQ6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWxlRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIHRodW1ibmFpbFNpemU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgb3Blbkdyb3VwPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cFNlbGVjdEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBlbnRpdGllczogRW50aXR5Rm9ybVtdO1xyXG4gICAgZGVmYXVsdFZhbHVlPzogRW50aXR5Rm9ybVtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExpbmtGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgcHJvdG9jb2w/OiAnV0VCJyB8ICdDQUxMJyB8ICdNQUlMJztcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICAgIG1pbkxlbmd0aD86IHN0cmluZztcclxuICAgIHVuaXF1ZT86IGJvb2xlYW47XHJcbiAgICBtYXhMZW5ndGg/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGxvb2t1cDoge1xyXG4gICAgICAgIGxvb2t1cFBpY2tlckZpZWxkczogc3RyaW5nW107XHJcbiAgICAgICAgcmVsYXRlZEtleUZpZWxkOiBzdHJpbmc7XHJcbiAgICAgICAgcmVsYXRlZEFwcDoge1xyXG4gICAgICAgICAgICBhcHA6IHN0cmluZztcclxuICAgICAgICAgICAgY29kZTogc3RyaW5nO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZmllbGRNYXBwaW5nczogRmllbGRNYXBwaW5nRm9ybVtdO1xyXG4gICAgICAgIHNvcnQ/OiBzdHJpbmc7XHJcbiAgICAgICAgZmlsdGVyQ29uZD86IHN0cmluZztcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTW9kaWZpZWRBdEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7fVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNb2RpZmllckZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7fVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNdWx0aXBsZUNoZWNrRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZ1tdO1xyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICAgIFtrZXk6IHN0cmluZ106IE9wdGlvbkZvcm07XHJcbiAgICB9O1xyXG4gICAgYWxpZ24/OiAnSE9SSVpPTlRBTCcgfCAnVkVSVElDQUwnO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpcGxlTGluZVRleHRGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpcGxlU2VsZWN0RmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZ1tdO1xyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICAgIFtrZXk6IHN0cmluZ106IE9wdGlvbkZvcm07XHJcbiAgICB9O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6YXRpb25TZWxlY3RGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZW50aXRpZXM6IEVudGl0eUZvcm1bXTtcclxuICAgIGRlZmF1bHRWYWx1ZT86IEVudGl0eUZvcm1bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRJZEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7fVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWZlcmVuY2VUYWJsZUZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICByZWZlcmVuY2VUYWJsZToge1xyXG4gICAgICAgIGNvbmRpdGlvbjoge1xyXG4gICAgICAgICAgICByZWxhdGVkRmllbGQ6IHN0cmluZztcclxuICAgICAgICAgICAgZmllbGQ6IHN0cmluZztcclxuICAgICAgICB9O1xyXG4gICAgICAgIHNpemU/OiBzdHJpbmc7XHJcbiAgICAgICAgcmVsYXRlZEFwcDoge1xyXG4gICAgICAgICAgICBhcHA6IHN0cmluZztcclxuICAgICAgICAgICAgY29kZTogc3RyaW5nO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgc29ydD86IHN0cmluZztcclxuICAgICAgICBmaWx0ZXJDb25kPzogc3RyaW5nO1xyXG4gICAgICAgIGRpc3BsYXlGaWVsZHM6IHN0cmluZ1tdO1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTaW5nbGVDaGVja0ZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XHJcbiAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgW2tleTogc3RyaW5nXTogT3B0aW9uRm9ybTtcclxuICAgIH07XHJcbiAgICBhbGlnbj86ICdIT1JJWk9OVEFMJyB8ICdWRVJUSUNBTCc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2luZ2xlTGluZVRleHRGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZXhwcmVzc2lvbj86IHN0cmluZztcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICAgIG1pbkxlbmd0aD86IHN0cmluZztcclxuICAgIHVuaXF1ZT86IGJvb2xlYW47XHJcbiAgICBtYXhMZW5ndGg/OiBzdHJpbmc7XHJcbiAgICBoaWRlRXhwcmVzc2lvbj86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2luZ2xlU2VsZWN0RmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBPcHRpb25Gb3JtO1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdGF0dXNBc3NpZ25lZUZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBlbmFibGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdGF0dXNGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGZpZWxkczoge1xyXG4gICAgICAgIFtrZXk6IHN0cmluZ106IENhbGNGaWVsZEZvcm0gfCBDYXRlZ29yeUZpZWxkRm9ybSB8IERhdGVGaWVsZEZvcm0gfCBEYXRldGltZUZpZWxkRm9ybSB8IERlY2ltYWxGaWVsZEZvcm0gfCBFZGl0b3JGaWVsZEZvcm0gfCBGaWxlRmllbGRGb3JtIHwgR3JvdXBGaWVsZEZvcm0gfCBHcm91cFNlbGVjdEZpZWxkRm9ybSB8IExpbmtGaWVsZEZvcm0gfCBMb29rdXBGaWVsZEZvcm0gfCBNb2RpZmllZEF0RmllbGRGb3JtIHwgTW9kaWZpZXJGaWVsZEZvcm0gfCBNdWx0aXBsZUNoZWNrRmllbGRGb3JtIHwgTXVsdGlwbGVMaW5lVGV4dEZpZWxkRm9ybSB8IE11bHRpcGxlU2VsZWN0RmllbGRGb3JtIHwgT3JnYW5pemF0aW9uU2VsZWN0RmllbGRGb3JtIHwgUmVjb3JkSWRGaWVsZEZvcm0gfCBSZWZlcmVuY2VUYWJsZUZpZWxkRm9ybSB8IFNpbmdsZUNoZWNrRmllbGRGb3JtIHwgU2luZ2xlTGluZVRleHRGaWVsZEZvcm0gfCBTaW5nbGVTZWxlY3RGaWVsZEZvcm0gfCBTdGF0dXNBc3NpZ25lZUZpZWxkRm9ybSB8IFN0YXR1c0ZpZWxkRm9ybSB8IFRhYmxlRm9ybSB8IFRpbWVGaWVsZEZvcm0gfCBVc2VyU2VsZWN0RmllbGRGb3JtO1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUaW1lRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICAgIGRlZmF1bHROb3dWYWx1ZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXNlclNlbGVjdEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBlbnRpdGllczogRW50aXR5Rm9ybVtdO1xyXG4gICAgZGVmYXVsdFZhbHVlPzogRW50aXR5Rm9ybVtdO1xyXG59IiwiaW1wb3J0IHsgRmllbGRGb3JtLENhbGNGaWVsZEZvcm0sRmllbGRUeXBlLCBDYWxjRm9ybWF0fSBmcm9tIFwiLi4vdHlwZXMvRmllbGRMYXlvdXRcIjtcclxuXHJcbi8qKlxyXG4gKiDpm4boqIjmk43kvZzlrZBcclxuICovXHJcbmV4cG9ydCBlbnVtIE9wZXJhdG9yIHtcclxuICAgIFNVTSA9IFwiU1VNXCIsXHJcbiAgICBBVkcgPSBcIkFWR1wiLFxyXG4gICAgTUFYID0gXCJNQVhcIixcclxuICAgIE1JTiA9IFwiTUlOXCIsXHJcbiAgICBDT1VOVCA9IFwiQ09VTlRcIixcclxuICAgIEZJUlNUID0gXCJGSVJTVFwiLFxyXG4gICAgTEFTVCA9IFwiTEFTVFwiXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDpm4boqIjplqLmlbBcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgQWdncmVnYXRvciB7XHJcbiAgICBwcml2YXRlIGRhdGE6IHN0cmluZ1tdO1xyXG4gICAgcHJpdmF0ZSBmaWVsZDogRmllbGRGb3JtO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IHN0cmluZ1tdLCBmaWVsZDogRmllbGRGb3JtKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLmZpZWxkID0gZmllbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b051bWJlckFycmF5KCk6IG51bWJlcltdIHtcclxuICAgICAgICBjb25zdCBudW1iZXJBcnJheSA9IHRoaXMuZGF0YS5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bSA9IE51bWJlcihpdGVtKTtcclxuICAgICAgICAgICAgaWYgKGlzTmFOKG51bSkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg44OV44Kj44O844Or44OJ44CMJHt0aGlzLmZpZWxkLmNvZGV9IOOAjeOBr+aVsOWApOOBq+WkieaPm+OBp+OBjeOBquOBhOOBn+OCgeOAgeioiOeul+OCkuWun+ihjOOBp+OBjeOBvuOBm+OCk+OAgmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudW07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBudW1iZXJBcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN1bSgpOiBudW1iZXIgfCBudWxsIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgbnVtYmVyQXJyYXkgPSB0aGlzLnRvTnVtYmVyQXJyYXkoKTtcclxuICAgICAgICByZXR1cm4gbnVtYmVyQXJyYXkucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICsgdmFsLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGF2ZygpOiBudW1iZXIgfCBudWxsIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgbnVtYmVyQXJyYXkgPSB0aGlzLnRvTnVtYmVyQXJyYXkoKTtcclxuICAgICAgICBjb25zdCB0b3RhbCA9IG51bWJlckFycmF5LnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIHZhbCwgMCk7XHJcbiAgICAgICAgcmV0dXJuIHRvdGFsIC8gbnVtYmVyQXJyYXkubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWF4KCk6IG51bWJlciB8IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5maWVsZC50eXBlID09PSBGaWVsZFR5cGUuTlVNQkVSICkge1xyXG4gICAgICAgICAgICBjb25zdCBudW1iZXJBcnJheSA9IHRoaXMudG9OdW1iZXJBcnJheSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoLi4ubnVtYmVyQXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmZpZWxkLnR5cGU9PT1GaWVsZFR5cGUuQ0FMQyl7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbGNGaWVsZCA9IHRoaXMuZmllbGQgYXMgQ2FsY0ZpZWxkRm9ybTtcclxuICAgICAgICAgICAgaWYoY2FsY0ZpZWxkLmZvcm1hdD09PUNhbGNGb3JtYXQuTlVNQkVSIHx8IGNhbGNGaWVsZC5mb3JtYXQ9PT1DYWxjRm9ybWF0Lk5VTUJFUl9ESUdJVCl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJBcnJheSA9IHRoaXMudG9OdW1iZXJBcnJheSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLm51bWJlckFycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnJlZHVjZSgobWF4LCBpdGVtKSA9PiAoaXRlbSA+IG1heCA/IGl0ZW0gOiBtYXgpLCB0aGlzLmRhdGFbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWluKCk6IG51bWJlciB8IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5maWVsZC50eXBlID09PSBGaWVsZFR5cGUuTlVNQkVSICkge1xyXG4gICAgICAgICAgICBjb25zdCBudW1iZXJBcnJheSA9IHRoaXMudG9OdW1iZXJBcnJheSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oLi4ubnVtYmVyQXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmZpZWxkLnR5cGU9PT1GaWVsZFR5cGUuQ0FMQyl7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbGNGaWVsZCA9IHRoaXMuZmllbGQgYXMgQ2FsY0ZpZWxkRm9ybTtcclxuICAgICAgICAgICAgaWYoY2FsY0ZpZWxkLmZvcm1hdD09PUNhbGNGb3JtYXQuTlVNQkVSIHx8IGNhbGNGaWVsZC5mb3JtYXQ9PT1DYWxjRm9ybWF0Lk5VTUJFUl9ESUdJVCl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJBcnJheSA9IHRoaXMudG9OdW1iZXJBcnJheSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKC4uLm51bWJlckFycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmRhdGE9PT1udWxsIHx8IHRoaXMuZGF0YS5sZW5ndGg9PT0wKXtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEucmVkdWNlKChtaW4sIGl0ZW0pID0+IChpdGVtIDwgbWluID8gaXRlbSA6IG1pbiksIHRoaXMuZGF0YVswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb3VudCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlyc3QoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPyB0aGlzLmRhdGFbMF0gOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbGFzdCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aCA/IHRoaXMuZGF0YVt0aGlzLmRhdGEubGVuZ3RoIC0gMV0gOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYWxjdWxhdGUob3BlcmF0b3I6IE9wZXJhdG9yKTogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuU1VNOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdW0oKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuQVZHOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hdmcoKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuTUFYOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1heCgpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5NSU46XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWluKCk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIE9wZXJhdG9yLkNPVU5UOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdW50KCk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIE9wZXJhdG9yLkZJUlNUOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcnN0KCk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIE9wZXJhdG9yLkxBU1Q6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdCgpO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtcclxuICBJQWN0aW9uLFxyXG4gIElBY3Rpb25SZXN1bHQsXHJcbiAgSUFjdGlvbk5vZGUsXHJcbiAgSUFjdGlvblByb3BlcnR5LFxyXG4gIElDb250ZXh0LFxyXG59IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQge0tpbnRvbmVSZXN0QVBJQ2xpZW50fSBmcm9tICdAa2ludG9uZS9yZXN0LWFwaS1jbGllbnQnO1xyXG5pbXBvcnQgeyBBZ2dyZWdhdG9yLE9wZXJhdG9yfSBmcm9tICcuLi91dGlsL2FnZ3JlZ2F0ZXMnO1xyXG5pbXBvcnQgeyBGaWVsZEZvcm0gfSBmcm9tIFwiLi4vdHlwZXMvRmllbGRMYXlvdXRcIjtcclxuXHJcbmludGVyZmFjZSBJRGF0YVByb2Nlc3NpbmdQcm9wcyB7XHJcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICBzb3VyY2VzOiBTb3VyY2VzO1xyXG4gIGNvbmRpdGlvbjogc3RyaW5nO1xyXG4gIHZlck5hbWU/OiBWZXJOYW1lO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ29uZGl0aW9uIHtcclxuICBxdWVyeVN0cmluZzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVmVyTmFtZSB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGFjdGlvbk5hbWU6IHN0cmluZztcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gIHZhcnM6IFZhcltdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVmFyIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGZpZWxkOiBGaWVsZEZvcm07XHJcbiAgbG9naWNhbE9wZXJhdG9yOiBDYWxjT3BlcmF0b3I7XHJcbiAgdk5hbWU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIENhbGNPcGVyYXRvciB7XHJcbiAgb3BlcmF0b3I6IE9wZXJhdG9yO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBTb3VyY2VzIHtcclxuICBhcHA6IEFwcDtcclxuICBmaWVsZHM6IEZpZWxkRm9ybVtdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQXBwIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbnR5cGUgUmVzdWx0ID0ge1xyXG4gIFtrZXk6IHN0cmluZ106IHtcclxuICAgIHR5cGU6IHN0cmluZztcclxuICAgIHZhbHVlOiBhbnlbXTtcclxuICB9O1xyXG59O1xyXG5cclxudHlwZSBBbnlPYmplY3QgPSB7XHJcbiAgW2tleTogc3RyaW5nXTogYW55O1xyXG59O1xyXG5cclxuZXhwb3J0IGNsYXNzIERhdGFQcm9jZXNzaW5nQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICBwcm9wczogSURhdGFQcm9jZXNzaW5nUHJvcHMgO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubmFtZSA9IFwi44OH44O844K/5Yem55CGXCI7XHJcbiAgICB0aGlzLmFjdGlvblByb3BzID0gW107XHJcbiAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICBkaXNwbGF5TmFtZTonJyxcclxuICAgICAgY29uZGl0aW9uOicnLFxyXG4gICAgICBzb3VyY2VzOntcclxuICAgICAgICBhcHA6e1xyXG4gICAgICAgICAgaWQ6XCJcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmllbGRzOltdXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcHJvY2VzcyhcclxuICAgIG5vZGVzOiBJQWN0aW9uTm9kZSxcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBjb250ZXh0OiBJQ29udGV4dFxyXG4gICk6IFByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IG5vZGVzLmFjdGlvblByb3BzO1xyXG5cclxuICAgIHRoaXMucHJvcHMgPSBub2Rlcy5BY3Rpb25WYWx1ZSBhcyBJRGF0YVByb2Nlc3NpbmdQcm9wcztcclxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IEpTT04ucGFyc2UodGhpcy5wcm9wcy5jb25kaXRpb24pIGFzIENvbmRpdGlvbjtcclxuICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgIGNhbk5leHQ6IHRydWUsXHJcbiAgICAgIHJlc3VsdDogXCJcIixcclxuICAgIH0gYXMgSUFjdGlvblJlc3VsdDtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5wcm9wcykge1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRRdWVyeShjb25kaXRpb24ucXVlcnlTdHJpbmcsY29udGV4dC52YXJpYWJsZXMpO1xyXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5zZWxlY3REYXRhKHF1ZXJ5KTtcclxuICAgICAgXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiZGF0YSBcIiwgZGF0YSk7XHJcblxyXG4gICAgICBpZih0aGlzLnByb3BzLnZlck5hbWUpe1xyXG4gICAgICAgICBjb25zdCB2YXJWYWx1ZXM9IHRoaXMucHJvcHMudmVyTmFtZS52YXJzLnJlZHVjZSgoYWNjLCBmKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzPWRhdGFbZi5maWVsZC5jb2RlXS52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgYWdnID0gbmV3IEFnZ3JlZ2F0b3IoZGF0YXMsZi5maWVsZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGFnZy5jYWxjdWxhdGUoZi5sb2dpY2FsT3BlcmF0b3Iub3BlcmF0b3IpXHJcbiAgICAgICAgICAgIGFjY1tmLnZOYW1lXT1yZXN1bHQ7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICB9LCB7fSBhcyBBbnlPYmplY3QpO1xyXG4gICAgICAgICAgY29udGV4dC52YXJpYWJsZXNbdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWVdPXZhclZhbHVlcztcclxuICAgICAgICBjb25zb2xlLmxvZyhcImNvbnRleHQgXCIsIGNvbnRleHQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwi44OH44O844K/6ZuG6KiI5Lit5L6L5aSW44GM55m655Sf44GX44G+44GX44Gf44CCXCIsIGVycm9yKTtcclxuICAgICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcil7XHJcbiAgICAgICAgZXZlbnQuZXJyb3IgPSBg44OH44O844K/6ZuG6KiI5Lit5L6L5aSW44GM55m655Sf44GX44G+44GX44Gf44CCICR7ZXJyb3IubWVzc2FnZX1gO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBldmVudC5lcnJvciA9IFwi44OH44O844K/6ZuG6KiI5Lit5L6L5aSW44GM55m655Sf44GX44G+44GX44Gf44CCXCI7XHJcbiAgICAgIH1cclxuICAgICAgcmVzdWx0LmNhbk5leHQgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBzdHIgXHJcbiAgICogQHBhcmFtIHZhcnMgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZ2V0UXVlcnkgPSAoc3RyOiBzdHJpbmcsIHZhcnM6IGFueSkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coc3RyKTtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL3ZhclxcKCguKj8pXFwpL2c7XHJcbiAgICBsZXQgbWF0Y2g7XHJcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCB2YXJOYW1lID0gbWF0Y2hbMV07XHJcbiAgICAgIGlmICh2YXJOYW1lIGluIHZhcnMpIHtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShtYXRjaFswXSwgdmFyc1t2YXJOYW1lXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDlpInmlbAke3Zhck5hbWV944GM6KaL44Gk44GL44KK44G+44Gb44KTYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHN0cik7XHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIOODh+ODvOOCv+OCkuWPluW+l+OBmeOCi1xyXG4gICAqIEBwYXJhbSBxdWVyeSBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBzZWxlY3REYXRhID0gYXN5bmMgKCBxdWVyeT86IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgYXBpID0gbmV3IEtpbnRvbmVSZXN0QVBJQ2xpZW50KCk7XHJcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLnByb3BzLnNvdXJjZXMuZmllbGRzLm1hcCgoZmllbGQpPT5maWVsZC5jb2RlKTtcclxuICAgIGNvbnN0IHJlc3AgPSAgYXdhaXQgYXBpLnJlY29yZC5nZXRBbGxSZWNvcmRzKHtcclxuICAgICAgICBhcHA6IHRoaXMucHJvcHMuc291cmNlcy5hcHAuaWQsXHJcbiAgICAgICAgZmllbGRzOmZpZWxkcyxcclxuICAgICAgICBjb25kaXRpb246cXVlcnlcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IHJlc3VsdDogUmVzdWx0ID0ge307XHJcbiAgICAgIHJlc3AuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICBpZiAoIXJlc3VsdFtrZXldKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0geyB0eXBlOiB2YWx1ZS50eXBlLCB2YWx1ZTogW10gfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc3VsdFtrZXldLnZhbHVlLnB1c2godmFsdWUudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgXHJcbiAgfTtcclxuXHJcbiAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXSA9IHRoaXM7XHJcbiAgfVxyXG59XHJcblxyXG5uZXcgRGF0YVByb2Nlc3NpbmdBY3Rpb24oKTsiLCJpbXBvcnQge1xyXG4gIElBY3Rpb24sXHJcbiAgSUFjdGlvblJlc3VsdCxcclxuICBJQWN0aW9uTm9kZSxcclxuICBJQWN0aW9uUHJvcGVydHksXHJcbiAgSUNvbnRleHQsXHJcbn0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbmltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7IEtpbnRvbmVSZXN0QVBJQ2xpZW50IH0gZnJvbSBcIkBraW50b25lL3Jlc3QtYXBpLWNsaWVudFwiO1xyXG5pbXBvcnQgeyBMb29rdXAgfSBmcm9tIFwiQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvS2ludG9uZUZpZWxkcy90eXBlcy9wcm9wZXJ0eVwiO1xyXG5cclxuaW50ZXJmYWNlIFByb3BzIHtcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gIHNvdXJjZXM6IFNvdXJjZXM7XHJcbiAgZGF0YU1hcHBpbmc6IERhdGFNYXBwaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRGF0YU1hcHBpbmcge1xyXG4gIGRhdGE6IE1hcHBpbmdbXTtcclxuICBjcmVhdGVXaXRoTnVsbDogYm9vbGVhbjtcclxufVxyXG5cclxuaW50ZXJmYWNlIE1hcHBpbmcge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgZnJvbTogRnJvbTtcclxuICB0bzogVG87XHJcbiAgaXNLZXk6IGJvb2xlYW47XHJcbn1cclxuXHJcbmludGVyZmFjZSBUbyB7XHJcbiAgYXBwOiBBcHA7XHJcbiAgZmllbGRzOiB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICBjb2RlOiBzdHJpbmc7XHJcbiAgICBsYWJlbDogc3RyaW5nO1xyXG4gICAgbm9MYWJlbDogYm9vbGVhbjtcclxuICAgIHJlcXVpcmVkOiBib29sZWFuO1xyXG4gICAgbWluTGVuZ3RoOiBzdHJpbmc7XHJcbiAgICBtYXhMZW5ndGg6IHN0cmluZztcclxuICAgIGV4cHJlc3Npb246IHN0cmluZztcclxuICAgIGhpZGVFeHByZXNzaW9uOiBib29sZWFuO1xyXG4gICAgdW5pcXVlOiBib29sZWFuO1xyXG4gICAgZGVmYXVsdFZhbHVlOiBzdHJpbmc7XHJcbiAgfVtdO1xyXG4gIGlzRGlhbG9nVmlzaWJsZTogYm9vbGVhbjtcclxufVxyXG5cclxuaW50ZXJmYWNlIEZyb20ge1xyXG4gIHNoYXJlZFRleHQ6IHN0cmluZztcclxuICBfdDogc3RyaW5nO1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgb2JqZWN0VHlwZTogc3RyaW5nO1xyXG4gIG5hbWU6IHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICB9O1xyXG4gIGFjdGlvbk5hbWU6IHN0cmluZztcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgU291cmNlcyB7XHJcbiAgYXBwOiBBcHA7XHJcbn1cclxuXHJcbmludGVyZmFjZSBBcHAge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgY3JlYXRlZGF0ZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRGF0YVVwZGF0ZUFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb24ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgZGF0YU1hcHBpbmdQcm9wczogUHJvcHM7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLm5hbWUgPSBcIuODh+ODvOOCv+abtOaWsFwiO1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgdGhpcy5kYXRhTWFwcGluZ1Byb3BzID0ge30gYXMgUHJvcHM7XHJcbiAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwcm9jZXNzKFxyXG4gICAgcHJvcDogSUFjdGlvbk5vZGUsXHJcbiAgICBldmVudDogYW55LFxyXG4gICAgY29udGV4dDogSUNvbnRleHRcclxuICApOiBQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBwcm9wLmFjdGlvblByb3BzO1xyXG4gICAgdGhpcy5kYXRhTWFwcGluZ1Byb3BzID0gcHJvcC5BY3Rpb25WYWx1ZSBhcyBQcm9wcztcclxuICAgIGNvbnNvbGUubG9nKGNvbnRleHQpO1xyXG4gICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgcmVzdWx0OiBcIlwiLFxyXG4gICAgfSBhcyBJQWN0aW9uUmVzdWx0O1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbG9va3VwRml4ZWRGaWVsZENvZGVzID0gYXdhaXQgZ2V0TG9va3VwRml4ZWRGaWVsZENvZGVzKFxyXG4gICAgICAgIHRoaXMuZGF0YU1hcHBpbmdQcm9wcy5zb3VyY2VzLmFwcC5pZFxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gY3JlYXRlV2l0aE51bGwg44GM5pyJ5Yq544Gq5aC05ZCI44Gv44CBNCDnlarnm67jga7jg5Hjg6njg6Hjg7zjgr/jg7zjgpIgdHJ1ZSDjgavjgZfjgaYgZG9VcGRhdGUg6Zai5pWw44OW44Op44Oz44OB44KS5a6f6KGM44GX44G+44GZ44CCXHJcbiAgICAgIGlmICh0aGlzLmRhdGFNYXBwaW5nUHJvcHMuZGF0YU1hcHBpbmcuY3JlYXRlV2l0aE51bGwgPT09IHRydWUpIHtcclxuICAgICAgICBhd2FpdCBkb1VwZGF0ZShcclxuICAgICAgICAgIHRoaXMuZGF0YU1hcHBpbmdQcm9wcy5kYXRhTWFwcGluZy5kYXRhLFxyXG4gICAgICAgICAgdGhpcy5kYXRhTWFwcGluZ1Byb3BzLnNvdXJjZXMuYXBwLmlkLFxyXG4gICAgICAgICAgY29udGV4dCxcclxuICAgICAgICAgIHRydWUsIC8vIOOCreODvOOBjOOBquOBhOWgtOWQiOOAgeOBvuOBn+OBr+OCreODvOOBp+OCv+ODvOOCsuODg+ODiOOBjOimi+OBpOOBi+OCieOBquOBhOWgtOWQiOOBq+OAgeODnuODg+ODlOODs+OCsOadoeS7tuOBq+OCiOOBo+OBpuaWsOOBl+OBhOODrOOCs+ODvOODieOCkuS9nOaIkOOBmeOCi+OBi+OBqeOBhuOBi+OCkuaxuuWumuOBmeOCi+OBn+OCgeOBq+S9v+eUqOOBleOCjOOBvuOBmeOAglxyXG4gICAgICAgICAgbG9va3VwRml4ZWRGaWVsZENvZGVzXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAvLyDjgq3jg7zjgYzjgarjgYTjgajmm7TmlrDlr77osaHjgpLlj5blvpfjgafjgY3jgarjgYTjgZ/jgoHjgIHjgZPjga7mmYLngrnjgafjga7jgb/mm7TmlrDjgYzooYzjgo/jgozjgb7jgZnjgIIgZG9VcGRhdGUg6Zai5pWw44GuIDQg55Wq55uu44Gu44OR44Op44Oh44O844K/44O844GvIGZhbHNlIOOBp+OBmeOAglxyXG4gICAgICAgIHRoaXMuZGF0YU1hcHBpbmdQcm9wcy5kYXRhTWFwcGluZy5kYXRhXHJcbiAgICAgICAgICAubWFwKChtKSA9PiBtLmlzS2V5KVxyXG4gICAgICAgICAgLmZpbmQoKGlzS2V5KSA9PiBpc0tleSA9PT0gdHJ1ZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgYXdhaXQgZG9VcGRhdGUoXHJcbiAgICAgICAgICB0aGlzLmRhdGFNYXBwaW5nUHJvcHMuZGF0YU1hcHBpbmcuZGF0YSxcclxuICAgICAgICAgIHRoaXMuZGF0YU1hcHBpbmdQcm9wcy5zb3VyY2VzLmFwcC5pZCxcclxuICAgICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgIGxvb2t1cEZpeGVkRmllbGRDb2Rlc1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXdhaXQgZG9DcmVhdGUoXHJcbiAgICAgICAgICB0aGlzLmRhdGFNYXBwaW5nUHJvcHMuZGF0YU1hcHBpbmcuZGF0YSxcclxuICAgICAgICAgIHRoaXMuZGF0YU1hcHBpbmdQcm9wcy5zb3VyY2VzLmFwcC5pZCxcclxuICAgICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAgICBsb29rdXBGaXhlZEZpZWxkQ29kZXNcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRGF0YU1hcHBpbmdBY3Rpb24gZXJyb3JcIiwgZXJyb3IpO1xyXG4gICAgICByZXN1bHQuY2FuTmV4dCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coXCJkYXRhTWFwcGluZ1Byb3BzXCIsIHRoaXMuZGF0YU1hcHBpbmdQcm9wcyk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gIH1cclxufVxyXG5cclxubmV3IERhdGFVcGRhdGVBY3Rpb24oKTtcclxuXHJcbmNvbnN0IGdldENvbnRleHRWYXJCeVBhdGggPSAob2JqOiBhbnksIHBhdGg6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBwYXRoLnNwbGl0KFwiLlwiKS5yZWR1Y2UoKG8sIGspID0+IChvIHx8IHt9KVtrXSwgb2JqKTtcclxufTtcclxuXHJcbmludGVyZmFjZSBVcGRhdGVSZWNvcmQge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgcmVjb3JkOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiB7XHJcbiAgICAgIHZhbHVlOiBhbnk7XHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuXHJcbmNvbnN0IGNsaWVudCA9IG5ldyBLaW50b25lUmVzdEFQSUNsaWVudCgpO1xyXG5cclxuY29uc3QgZG9VcGRhdGUgPSBhc3luYyAoXHJcbiAgbWFwcGluZ0RhdGE6IE1hcHBpbmdbXSxcclxuICBhcHBJZDogc3RyaW5nLFxyXG4gIGNvbnRleHQ6IGFueSxcclxuICBuZWVkQ3JlYXRlOiBib29sZWFuLFxyXG4gIGxvb2t1cEZpeGVkRmllbGRDb2Rlczogc3RyaW5nW11cclxuKSA9PiB7XHJcbiAgY29uc3QgdGFyZ2V0RmllbGQgPSBhd2FpdCBmaW5kVXBkYXRlRmllbGQobWFwcGluZ0RhdGEsIGFwcElkLCBjb250ZXh0KTtcclxuICBjb25zb2xlLmxvZyh0YXJnZXRGaWVsZCk7XHJcbiAgaWYgKHRhcmdldEZpZWxkLnJlY29yZHMubGVuZ3RoID09PSAwICYmIG5lZWRDcmVhdGUpIHtcclxuICAgIGF3YWl0IGRvQ3JlYXRlKG1hcHBpbmdEYXRhLCBhcHBJZCwgY29udGV4dCwgbG9va3VwRml4ZWRGaWVsZENvZGVzKTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8g44Oe44OD44OU44Oz44Kw44OH44O844K/44KS5Y2Y57SU44Gq44Kq44OW44K444Kn44Kv44OI44Gr5Yem55CG44GX44CB44K944O844K55YCk44GM5aSJ5pWw44Gu5aC05ZCI44Gv5aSJ5pWw44KS572u44GN5o+b44GI44G+44GZ44CCXHJcbiAgICBjb25zdCBtYXBwaW5nUnVsZXMgPSBtYXBwaW5nRGF0YVxyXG4gICAgICAuZmlsdGVyKFxyXG4gICAgICAgIChtKSA9PlxyXG4gICAgICAgICAgT2JqZWN0LmtleXMobS5mcm9tKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAhbG9va3VwRml4ZWRGaWVsZENvZGVzLmluY2x1ZGVzKG0udG8uZmllbGRzWzBdLmNvZGUpXHJcbiAgICAgIClcclxuICAgICAgLm1hcCgobSkgPT4ge1xyXG4gICAgICAgIGlmIChtLmZyb20ub2JqZWN0VHlwZSA9PT0gXCJ2YXJpYWJsZVwiKSB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTogZ2V0Q29udGV4dFZhckJ5UGF0aChjb250ZXh0LnZhcmlhYmxlcywgbS5mcm9tLm5hbWUubmFtZSksXHJcbiAgICAgICAgICAgIGNvZGU6IG0udG8uZmllbGRzWzBdLmNvZGUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTogbS5mcm9tLnNoYXJlZFRleHQsXHJcbiAgICAgICAgICAgIGNvZGU6IG0udG8uZmllbGRzWzBdLmNvZGUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlUmVjb3JkczogVXBkYXRlUmVjb3JkW10gPSB0YXJnZXRGaWVsZC5yZWNvcmRzLm1hcChcclxuICAgICAgKHRhcmdldFJlY29yZCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZVJlY29yZDogVXBkYXRlUmVjb3JkW1wicmVjb3JkXCJdID0ge307XHJcblxyXG4gICAgICAgIC8vIOODnuODg+ODlOODs+OCsOWGheOBruODq+ODvOODq+OBq+ODkuODg+ODiOOBl+OBn+ODleOCo+ODvOODq+ODieOBruOBv+OBjOabtOaWsOOBleOCjOOBvuOBmeOAglxyXG4gICAgICAgIGZvciAoY29uc3QgbWFwcGluZyBvZiBtYXBwaW5nUnVsZXMpIHtcclxuICAgICAgICAgIGlmICh0YXJnZXRSZWNvcmRbbWFwcGluZy5jb2RlXSkge1xyXG4gICAgICAgICAgICB1cGRhdGVSZWNvcmRbbWFwcGluZy5jb2RlXSA9IHtcclxuICAgICAgICAgICAgICB2YWx1ZTogbWFwcGluZy52YWx1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBpZDogdGFyZ2V0UmVjb3JkLiRpZC52YWx1ZSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICByZWNvcmQ6IHVwZGF0ZVJlY29yZCxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGF3YWl0IGNsaWVudC5yZWNvcmQudXBkYXRlUmVjb3Jkcyh7XHJcbiAgICAgIGFwcDogYXBwSWQsXHJcbiAgICAgIHJlY29yZHM6IHVwZGF0ZVJlY29yZHMsXHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBmaW5kVXBkYXRlRmllbGQgPSBhc3luYyAoXHJcbiAgbWFwcGluZ0RhdGE6IE1hcHBpbmdbXSxcclxuICBhcHBJZDogc3RyaW5nLFxyXG4gIGNvbnRleHQ6IGFueVxyXG4pID0+IHtcclxuICBjb25zdCBxdWVyeVN0ciA9IG1hcHBpbmdEYXRhXHJcbiAgICAuZmlsdGVyKChtKSA9PiBtLnRvLmFwcCAmJiBtLnRvLmZpZWxkcyAmJiBtLnRvLmZpZWxkcy5sZW5ndGggPiAwICYmIG0uaXNLZXkpXHJcbiAgICAubWFwKChtKSA9PiB7XHJcbiAgICAgIGlmIChtLmZyb20ub2JqZWN0VHlwZSA9PT0gXCJ2YXJpYWJsZVwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke20udG8uZmllbGRzWzBdLmNvZGV9ID0gXCIke2dldENvbnRleHRWYXJCeVBhdGgoXHJcbiAgICAgICAgICBjb250ZXh0LnZhcmlhYmxlcyxcclxuICAgICAgICAgIG0uZnJvbS5uYW1lLm5hbWVcclxuICAgICAgICApfVwiYDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYCR7bS50by5maWVsZHNbMF0uY29kZX09JHttLmZyb20uc2hhcmVkVGV4dH1gO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgLmpvaW4oXCImXCIpO1xyXG4gIC8vIOaknOe0ouadoeS7tuOBjOepuuOBruWgtOWQiOOBr+WFqOODrOOCs+ODvOODieOCkui/lOOBmeOBn+OCgeOAgeaknOe0ouWvvuixoeOBjOimi+OBpOOBi+OCieOBquOBhOWgtOWQiOOBr+aknOe0ouOBr+ihjOOCj+OCjOOBvuOBm+OCk+OAglxyXG4gIGlmIChxdWVyeVN0ci5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlY29yZHM6IFtdLFxyXG4gICAgfTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZWNvcmQuZ2V0UmVjb3Jkcyh7XHJcbiAgICAgIGFwcDogYXBwSWQsXHJcbiAgICAgIC8vIHF1ZXJ5OiB1bmRlZmluZWRcclxuICAgICAgcXVlcnk6IHF1ZXJ5U3RyLFxyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgZG9DcmVhdGUgPSBhc3luYyAoXHJcbiAgbWFwcGluZ0RhdGE6IE1hcHBpbmdbXSxcclxuICBhcHBJZDogc3RyaW5nLFxyXG4gIGNvbnRleHQ6IGFueSxcclxuICBsb29rdXBGaXhlZEZpZWxkQ29kZXM6IHN0cmluZ1tdXHJcbikgPT4ge1xyXG4gIGNvbnN0IHJlY29yZCA9IG1hcHBpbmdEYXRhXHJcbiAgICAuZmlsdGVyKFxyXG4gICAgICAoaXRlbSkgPT5cclxuICAgICAgICBpdGVtLmZyb20ub2JqZWN0VHlwZSA9PT0gXCJ2YXJpYWJsZVwiICYmXHJcbiAgICAgICAgaXRlbS5mcm9tLm5hbWUubmFtZSAmJlxyXG4gICAgICAgIGl0ZW0udG8uYXBwICYmXHJcbiAgICAgICAgaXRlbS50by5maWVsZHMgJiZcclxuICAgICAgICBpdGVtLnRvLmZpZWxkcy5sZW5ndGggPiAwXHJcbiAgICApXHJcbiAgICAuZmlsdGVyKChpdGVtKSA9PiAhbG9va3VwRml4ZWRGaWVsZENvZGVzLmluY2x1ZGVzKGl0ZW0udG8uZmllbGRzWzBdLmNvZGUpKVxyXG4gICAgLnJlZHVjZSgoYWNjdW11bGF0b3IsIGl0ZW0pID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5hY2N1bXVsYXRvcixcclxuICAgICAgICBbaXRlbS50by5maWVsZHNbMF0uY29kZV06IHtcclxuICAgICAgICAgIHZhbHVlOiBnZXRDb250ZXh0VmFyQnlQYXRoKGNvbnRleHQudmFyaWFibGVzLCBpdGVtLmZyb20ubmFtZS5uYW1lKSxcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgfSwge30pO1xyXG4gIGlmIChyZWNvcmQgJiYgT2JqZWN0LmtleXMocmVjb3JkKS5sZW5ndGggPiAwKSB7XHJcbiAgICBhd2FpdCBraW50b25lLmFwaShraW50b25lLmFwaS51cmwoXCIvay92MS9yZWNvcmQuanNvblwiLCB0cnVlKSwgXCJQT1NUXCIsIHtcclxuICAgICAgYXBwOiBhcHBJZCxcclxuICAgICAgcmVjb3JkOiByZWNvcmQsXHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBnZXRMb29rdXBGaXhlZEZpZWxkQ29kZXMgPSBhc3luYyAoYXBwSWQ6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBhd2FpdCBjbGllbnQuYXBwXHJcbiAgICAuZ2V0Rm9ybUZpZWxkcyh7IGFwcDogYXBwSWQsIGxhbmc6IFwiamFcIiB9KVxyXG4gICAgLnRoZW4oKHJlc3ApID0+XHJcbiAgICAgIE9iamVjdC52YWx1ZXMocmVzcC5wcm9wZXJ0aWVzKVxyXG4gICAgICAgIC5maWx0ZXIoKGYpID0+IChmIGFzIExvb2t1cCkubG9va3VwICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgLmZsYXRNYXAoKGYpID0+IChmIGFzIExvb2t1cCkubG9va3VwLmZpZWxkTWFwcGluZ3MubWFwKChtKSA9PiBtLmZpZWxkKSlcclxuICAgICk7XHJcbn07XHJcbiIsImltcG9ydCB7XHJcbiAgSUFjdGlvbixcclxuICBJQWN0aW9uUmVzdWx0LFxyXG4gIElBY3Rpb25Ob2RlLFxyXG4gIElBY3Rpb25Qcm9wZXJ0eSxcclxuICBJQ29udGV4dCxcclxufSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuXHJcblxyXG5pbnRlcmZhY2UgUHJvcHMge1xyXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgZmllbGQ6IEZpZWxkO1xyXG4gIHZlck5hbWU6IFZlck5hbWU7XHJcbn1cclxuXHJcbmludGVyZmFjZSBWZXJOYW1lIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBGaWVsZCB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHR5cGU6IHN0cmluZztcclxuICBjb2RlOiBzdHJpbmc7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBub0xhYmVsOiBib29sZWFuO1xyXG4gIHJlcXVpcmVkOiBib29sZWFuO1xyXG4gIG1pbkxlbmd0aDogc3RyaW5nO1xyXG4gIG1heExlbmd0aDogc3RyaW5nO1xyXG4gIGV4cHJlc3Npb246IHN0cmluZztcclxuICBoaWRlRXhwcmVzc2lvbjogYm9vbGVhbjtcclxuICB1bmlxdWU6IGJvb2xlYW47XHJcbiAgZGVmYXVsdFZhbHVlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDdXJyZW50RmllbGRHZXRBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gIGN1cnJlbnRGaWVsZEdldFByb3BzOiBQcm9wcztcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubmFtZSA9IFwi44OV44Kj44O844Or44OJ44Gu5YCk44KS5Y+W5b6X44GZ44KLXCI7XHJcbiAgICB0aGlzLmFjdGlvblByb3BzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnRGaWVsZEdldFByb3BzID0ge30gYXMgUHJvcHM7XHJcbiAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwcm9jZXNzKFxyXG4gICAgcHJvcDogSUFjdGlvbk5vZGUsXHJcbiAgICBldmVudDogYW55LFxyXG4gICAgY29udGV4dDogSUNvbnRleHRcclxuICApOiBQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgIHRoaXMuY3VycmVudEZpZWxkR2V0UHJvcHMgPSBwcm9wLkFjdGlvblZhbHVlIGFzIFByb3BzO1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IHByb3AuYWN0aW9uUHJvcHM7XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgcmVzdWx0OiBcIlwiLFxyXG4gICAgfSBhcyBJQWN0aW9uUmVzdWx0O1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICBjb250ZXh0LnZhcmlhYmxlc1t0aGlzLmN1cnJlbnRGaWVsZEdldFByb3BzLnZlck5hbWUubmFtZV0gPSBjb250ZXh0LnJlY29yZFt0aGlzLmN1cnJlbnRGaWVsZEdldFByb3BzLmZpZWxkLmNvZGVdLnZhbHVlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkN1cnJlbnRGaWVsZEdldEFjdGlvbiBlcnJvclwiLCBlcnJvcik7XHJcbiAgICAgIHJlc3VsdC5jYW5OZXh0ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXSA9IHRoaXM7XHJcbiAgfVxyXG59XHJcblxyXG5uZXcgQ3VycmVudEZpZWxkR2V0QWN0aW9uKCk7XHJcbiIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7ICBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJUmVndWxhckNoZWNrUHJvcHN7XHJcbiAgICBmaWVsZDpJRmllbGQ7Ly/jg4Hjgqfjg4Pjgq/jgZnjgovjg5XjgqPjg7zjg6vjg4njga7lr77osaFcclxuICAgIG1lc3NhZ2U6c3RyaW5nOy8v44Ko44Op44O844Oh44OD44K744O844K4XHJcbiAgICByZWdFeHByZXNzaW9uOnN0cmluZzsvL+ato+imj+ihqOePvuW8j1xyXG59XHJcbi8qKlxyXG4gKiDmraPopo/ooajnj77jg4Hjgqfjg4Pjgq/jgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBSZWd1bGFyQ2hlY2tBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SVJlZ3VsYXJDaGVja1Byb3BzO1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLm5hbWU9XCLmraPopo/ooajnj77jg4Hjgqfjg4Pjgq9cIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBmaWVsZDp7Y29kZTonJ30sXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6JycsXHJcbiAgICAgICAgICAgIHJlZ0V4cHJlc3Npb246JydcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdtZXNzYWdlJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdyZWdFeHByZXNzaW9uJ2luIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSVJlZ3VsYXJDaGVja1Byb3BzO1xyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBruioiOeul+e1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCh0aGlzLnByb3BzLnJlZ0V4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICBpZighcmVnZXgudGVzdCh2YWx1ZSkpe1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3I9dGhpcy5wcm9wcy5tZXNzYWdlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICBldmVudC5lcnJvcj1lcnJvcjtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PWZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXT10aGlzO1xyXG4gICAgfVxyXG4gICAgXHJcbn1cclxubmV3IFJlZ3VsYXJDaGVja0FjdGlvbigpO1xyXG4iLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWxnuaAp+Wumue+qVxyXG4gKi9cclxuaW50ZXJmYWNlIElNYWlsQ2hlY2tQcm9wcyB7XHJcbiAgICBmaWVsZDogSUZpZWxkOy8v44OB44Kn44OD44Kv44GZ44KL44OV44Kj44O844Or44OJ44Gu5a++6LGhXHJcbiAgICBtZXNzYWdlOiBzdHJpbmc7Ly/jgqjjg6njg7zjg6Hjg4Pjgrvjg7zjgrhcclxuICAgIGVtYWlsQ2hlY2s6c3RyaW5nO1xyXG59XHJcbi8qKlxyXG4gKiDjg6Hjg7zjg6vjgqLjg4njg6zjgrnjg4Hjgqfjg4Pjgq/jgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBNYWlsQ2hlY2tBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOiBJTWFpbENoZWNrUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIuODoeODvOODq+OCouODieODrOOCueODgeOCp+ODg+OCr1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBbXTtcclxuICAgICAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAgICAgICBmaWVsZDogeyBjb2RlOiAnJyB9LFxyXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcclxuICAgICAgICAgICAgZW1haWxDaGVjazonJ1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+OCouOCr+OCt+ODp+ODs+OCkueZu+mMsuOBmeOCi1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog44Ki44Kv44K344On44Oz44Gu5a6f6KGM44KS5ZG844Gz5Ye644GZXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTm9kZSBcclxuICAgICAqIEBwYXJhbSBldmVudCBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6IElBY3Rpb25Ob2RlLCBldmVudDogYW55KTogUHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiBmYWxzZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBhY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG5cclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdtZXNzYWdlJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdlbWFpbENoZWNrJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElNYWlsQ2hlY2tQcm9wcztcclxuICAgICAgICAgICAgLy/mnaHku7blvI/jga7oqIjnrpfntZDmnpzjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuZW1haWxDaGVjayA9PT0gJ+WOs+agvCcpIHtcclxuICAgICAgICAgICAgICAgIGlmICghL15bYS16QS1aMC05Xy1dK0BbYS16QS1aMC05Xy1dKyhcXC5bYS16QS1aMC05Xy1dKykrJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5lcnJvciA9IHRoaXMucHJvcHMubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmVtYWlsQ2hlY2sgPT09ICfjgobjgovjgoEnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIS9eW15AXStAW15AXSskLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLmVycm9yID0gdGhpcy5wcm9wcy5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbk5leHQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBldmVudC5lcnJvciA9IGVycm9yO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gICAgfVxyXG5cclxufVxyXG5uZXcgTWFpbENoZWNrQWN0aW9uKCk7XHJcbiIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7ICBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJU3RyQ291bnRDaGVja1Byb3Bze1xyXG4gICAgZmllbGQ6SUZpZWxkOy8v44OB44Kn44OD44Kv44GZ44KL44OV44Kj44O844Or44OJ44Gu5a++6LGhXHJcbiAgICBtZXNzYWdlOnN0cmluZzsvL+OCqOODqeODvOODoeODg+OCu+ODvOOCuFxyXG4gICAgbWF4TGVuZ3RoOm51bWJlcjsvL1xyXG59XHJcbi8qKlxyXG4gKiDmraPopo/ooajnj77jg4Hjgqfjg4Pjgq/jgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBTdHJDb3VudENoZWNrQWNpdG9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOklTdHJDb3VudENoZWNrUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuaWh+Wtl+aVsOODgeOCp+ODg+OCr1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgbWVzc2FnZTonJyxcclxuICAgICAgICAgICAgbWF4TGVuZ3RoOjBcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdtZXNzYWdlJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdzdHJFeHByZXNzaW9uJ2luIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElTdHJDb3VudENoZWNrUHJvcHM7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu25byP44Gu6KiI566X57WQ5p6c44KS5Y+W5b6XXHJcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGV2ZW50LnJlY29yZDtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgbWF4TGVuZ3RoID0gdGhpcy5wcm9wcy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnICl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihtYXhMZW5ndGggPCB2YWx1ZS5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3IgPSB0aGlzLnByb3BzLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIGV2ZW50LmVycm9yPWVycm9yO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbiAgICBcclxufVxyXG5uZXcgU3RyQ291bnRDaGVja0FjaXRvbigpO1xyXG4iLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQgLElDb250ZXh0LCBJVmFyTmFtZX0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJRGF0ZXRpbWVHZXR0ZXJQcm9wcyB7XHJcbiAgICAvKirlpInmlbDjga7lkI3liY0gKi9cclxuICAgIHZlck5hbWU6SVZhck5hbWU7XHJcbn1cclxuLyoqXHJcbiAqIOePvuWcqOaXpeaZguOCkuWPluW+l+OBmeOCi+OCouOCr+OCt+ODp+ODs1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIERhdGV0aW1lR2V0dGVyQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczogSURhdGV0aW1lR2V0dGVyUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIuePvuWcqOaXpeaZglwiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBbXTtcclxuICAgICAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAgICAgICB2ZXJOYW1lOntuYW1lOicnfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOiBJQWN0aW9uTm9kZSwgZXZlbnQ6IGFueSxjb250ZXh0OklDb250ZXh0KTogUHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiBmYWxzZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBhY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG5cclxuICAgICAgICAgICAgaWYgKCEoJ3Zlck5hbWUnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElEYXRldGltZUdldHRlclByb3BzO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnZlck5hbWUgJiYgdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWUhPT0nJyl7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnZhcmlhYmxlc1t0aGlzLnByb3BzLnZlck5hbWUubmFtZV09dG9kYXkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdID0gdGhpcztcclxuICAgIH1cclxuXHJcbn1cclxubmV3IERhdGV0aW1lR2V0dGVyQWN0aW9uKCk7XHJcbiIsIlxyXG5cclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUZpZWxkLCBJQ29udGV4dCB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBDb25kaXRpb25UcmVlIH0gZnJvbSAnLi4vdHlwZXMvQ29uZGl0aW9ucyc7XHJcblxyXG5cclxuXHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJSW5zZXJ0VmFsdWVQcm9wc3tcclxuICAgIGZpZWxkOklGaWVsZDtcclxuICAgIGNvbmRpdGlvbjpzdHJpbmc7XHJcbiAgICB2YWx1ZTpzdHJpbmc7XHJcbiAgICBzaG93OnN0cmluZztcclxufVxyXG4vKipcclxuICpcclxuICovXHJcbmV4cG9ydCBjbGFzcyBJbnNlcnRWYWx1ZUFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczpJSW5zZXJ0VmFsdWVQcm9wcztcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5uYW1lPVwi5YCk44KS5oy/5YWl44GZ44KLXCI7Ly8gRELjgavnmbvpjLLjgZfjgZ/jgqLjgq/jgrfjg6fjg7PlkI1cclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIC8v44OX44Ot44OR44OG44Kj5bGe5oCn44Gu5Yid5pyf5YyWXHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgY29uZGl0aW9uOicnLFxyXG4gICAgICAgICAgICB2YWx1ZTonJyxcclxuICAgICAgICAgICAgc2hvdzonJ1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+OCouOCr+OCt+ODp+ODs+OCkueZu+mMsuOBmeOCi1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOepuueZveaWh+Wtl+OCkuepuueZveaWh+Wtl+OBjOmdnuWvvuW/nOOBruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOBquOBhOOBi+OAgeW/hemgiOmgheebruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOBquOBhOOBi+ODgeOCp+ODg+OCr+OBmeOCi1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0VmFsdWUgLSDmjL/lhaXjgZnjgovlgKRcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC3lhaXlipvlgKTjgYzmnInlirnjgarml6Xku5jlvaLlvI/jga7loLTlkIjjga90cnVl44KS6L+U44GX44CB44Gd44GG44Gn44Gq44GE5aC05ZCI44Gv5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgKi9cclxuICAgIGNoZWNrSW5wdXRCbGFuayhmaWVsZFR5cGUgOnN0cmluZyB8IHVuZGVmaW5lZCxpbnB1dFZhbHVlIDpzdHJpbmcsZmllbGRDb2RlIDpzdHJpbmcsZmllbGRSZXF1aXJlZCA6Ym9vbGVhbiB8IHVuZGVmaW5lZCxldmVudCA6YW55KTogYm9vbGVhbntcclxuICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr1xyXG4gICAgICAgIGxldCBibGFua0NoZWNrPSBpbnB1dFZhbHVlLm1hdGNoKC9eKFxcc3zjgIApKz8kLyk7Ly/ljYrop5Ljgrnjg5rjg7zjgrnjg7vjgr/jg5bmloflrZfjg7vmlLnooYzjg7vmlLnjg5rjg7zjgrjjg7vlhajop5Ljgrnjg5rjg7zjgrlcclxuXHJcbiAgICAgICAgaWYoYmxhbmtDaGVjayAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgIC8v56m655m95paH5a2X44KS56m655m95paH5a2X44GM6Z2e5a++5b+c44Gu44OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gm44GE44KL5aC05ZCI44CB5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgICAgICAgIGlmKGZpZWxkVHlwZSA9PT0gXCJOVU1CRVJcIiB8fCBmaWVsZFR5cGUgPT09IFwiREFURVwiIHx8IGZpZWxkVHlwZSA9PT0gXCJEQVRFVElNRVwiIHx8IGZpZWxkVHlwZSA9PT0gXCJUSU1FXCIgfHwgZmllbGRUeXBlID09PSBcIlVTRVJfU0VMRUNUXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgZmllbGRUeXBlID09PSBcIk9SR0FOSVpBVElPTl9TRUxFQ1RcIiB8fCBmaWVsZFR5cGUgPT09IFwiR1JPVVBfU0VMRUNUXCIgfHwgZmllbGRUeXBlID09PSBcIlJBRElPX0JVVFRPTlwiIHx8IGZpZWxkVHlwZSA9PT0gXCJEUk9QX0RPV05cIiB8fCBmaWVsZFR5cGUgPT09IFwiQ0hFQ0tfQk9YXCIgfHwgZmllbGRUeXBlID09PSBcIk1VTFRJX1NFTEVDVFwiKXtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddID0gXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBq+OBr+OAgeepuueZveaWh+Wtl+OBr+aMv+WFpeOBp+OBjeOBvuOBm+OCk+OAglwiOyAvL+ODrOOCs+ODvOODieOBq+OCqOODqeODvOOCkuihqOekulxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavjga/jgIHnqbrnmb3mloflrZfjga/mjL/lhaXjgafjgY3jgb7jgZvjgpPjgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcblxyXG4gICAgICAgICAgICAvL+epuueZveaWh+Wtl+OCkuW/hemgiOmgheebruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOCi+WgtOWQiOOAgeS+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFJlcXVpcmVkKXtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddID0gXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBr+W/hemgiOmgheebruOBruOBn+OCgeOAgeepuueZveaWh+Wtl+OBr+aMv+WFpeOBp+OBjeOBvuOBm+OCk+OAglwiOyAvL+ODrOOCs+ODvOODieOBq+OCqOODqeODvOOCkuihqOekulxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njga/lv4XpoIjpoIXnm67jga7jgZ/jgoHjgIHnqbrnmb3mloflrZfjga/mjL/lhaXjgafjgY3jgb7jgZvjgpPjgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5YWl5Yqb5YCk44GM5Y2K6KeS5pWw5a2X44GL44OB44Kn44OD44Kv44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAtIOaMv+WFpeOBmeOCi+WApFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gLeWFpeWKm+WApOOBjOacieWKueOBquaVsOWApOOBruWgtOWQiOOBr3RydWXjgpLov5TjgZfjgIHjgZ3jgYbjgafjgarjgYTloLTlkIjjga/kvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAqL1xyXG4gICAgY2hlY2tJbnB1dE51bWJlcihpbnB1dFZhbHVlIDpzdHJpbmcsZmllbGRDb2RlIDpzdHJpbmcsZXZlbnQgOmFueSk6IGJvb2xlYW57XHJcbiAgICAgICAgbGV0IGlucHV0TnVtYmVyVmFsdWUgPSBOdW1iZXIoaW5wdXRWYWx1ZSk7Ly/mlbDlgKTlnovjgavlpInmj5tcclxuXHJcbiAgICAgICAgLy/mnInpmZDmlbDjgYvjganjgYbjgYvliKTlrppzXHJcbiAgICAgICAgaWYoIWlzRmluaXRlKGlucHV0TnVtYmVyVmFsdWUpKXtcclxuICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV1bJ2Vycm9yJ10gPSBcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gr5YWl44KM44KI44GG44Go44GX44Gf5YCk44Gv44CB54Sh5Yq544Gq5pel5LuY5b2i5byP44Gn44GZ44CCXCI7IC8v44Os44Kz44O844OJ44Gr44Ko44Op44O844KS6KGo56S6XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gr5YWl44KM44KI44GG44Go44GX44Gf5YCk44Gv44CB5pyJ5Yq544Gq5pWw5YCk44Gn44Gv44GC44KK44G+44Gb44KT44CC44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gu5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiog5YWl5Yqb5YCk44GM5pyJ5Yq544Gq5pel5LuY5b2i5byP44GL44OB44Kn44OD44Kv44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAtIOaMv+WFpeOBmeOCi+WApFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gLeWFpeWKm+WApOOBjOacieWKueOBquaXpeS7mOW9ouW8j+OBruWgtOWQiOOBr3RydWXjgpLov5TjgZfjgIHjgZ3jgYbjgafjgarjgYTloLTlkIjjga/kvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAqL1xyXG4gICAgY2hlY2tJbnB1dERhdGUoaW5wdXRWYWx1ZSA6c3RyaW5nLGZpZWxkQ29kZSA6c3RyaW5nLGV2ZW50IDphbnkpOiBib29sZWFue1xyXG4gICAgICAgIC8v5q2j6KaP6KGo54++44OB44Kn44OD44KvXHJcbiAgICAgICAgbGV0IHR3b0RpZ2l0TW9udGhEYXkgPSBpbnB1dFZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KSQvKTsvLzTmoYHjga7mlbDlrZctMuahgeOBruaVsOWtly0y5qGB44Gu5pWw5a2XXHJcbiAgICAgICAgbGV0IHNpbmdsZURpZ2l0TW9udGhEYXkgPSBpbnB1dFZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezF9KS0oXFxkezF9KSQvKTsvLzTmoYHjga7mlbDlrZctMeahgeOBruaVsOWtly0y5qGB44Gu5pWw5a2XXHJcbiAgICAgICAgbGV0IHNpbmdsZURpZ2l0TW9udGggPSBpbnB1dFZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezF9KS0oXFxkezJ9KSQvKTsvLzTmoYHjga7mlbDlrZctMeahgeOBruaVsOWtly0y5qGB44Gu5pWw5a2XXHJcbiAgICAgICAgbGV0IHNpbmdsZURpZ2l0RGF5ID0gaW5wdXRWYWx1ZS5tYXRjaCgvKFxcZHs0fSktKFxcZHsyfSktKFxcZHsxfSkkLyk7Ly805qGB44Gu5pWw5a2XLTLmoYHjga7mlbDlrZctMeahgeOBruaVsOWtl1xyXG4gICAgICAgIGxldCBkYXRlVGltZSA9IGlucHV0VmFsdWUubWF0Y2goLyhcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0pLjAwMFovKTsvL+aZguWIu+WFpeOCiuOBrlVUQ+OBruaXpeS7mOW9ouW8j1xyXG4gICAgICAgIGxldCBkYXRlO1xyXG4gICAgICAgIC8vZGF0ZeWei+OBq+WkieaPm1xyXG4gICAgICAgIGRhdGUgPSBuZXcgRGF0ZShpbnB1dFZhbHVlKTtcclxuXHJcbiAgICAgICAgLy9kYXRl5Z6L5aSJ5o+b44Gn44GN44Gf44GL56K66KqNXHJcbiAgICAgICAgaWYoZGF0ZSAhPT0gdW5kZWZpbmVkICYmICFpc05hTihkYXRlLmdldERhdGUoKSkpe1xyXG4gICAgICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr+eiuuiqjVxyXG4gICAgICAgICAgICBpZih0d29EaWdpdE1vbnRoRGF5ID09PSBudWxsICYmIHNpbmdsZURpZ2l0TW9udGggPT09IG51bGwgJiYgc2luZ2xlRGlnaXREYXkgPT09IG51bGwgJiYgc2luZ2xlRGlnaXRNb250aERheSA9PT0gbnVsbCAmJiBkYXRlVGltZSA9PT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV1bJ2Vycm9yJ10gPSBcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gr5YWl44KM44KI44GG44Go44GX44Gf5YCk44Gv44CB54Sh5Yq544Gq5pel5LuY5b2i5byP44Gn44GZ44CCXCI7IC8v44Os44Kz44O844OJ44Gr44Ko44Op44O844KS6KGo56S6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lgKTjga/jgIHnhKHlirnjgarml6Xku5jlvaLlvI/jgafjgZnjgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIOWFpeWKm+WApOOBjOacieWKueOBquaZguWIu+W9ouW8j+OBi+ODgeOCp+ODg+OCr+OBmeOCi+mWouaVsFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0VmFsdWUgLSDmjL/lhaXjgZnjgovlgKRcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC3lhaXlipvlgKTjgYzmnInlirnjgarml6Xku5jlvaLlvI/jga7loLTlkIjjga90cnVl44KS6L+U44GX44CB44Gd44GG44Gn44Gq44GE5aC05ZCI44Gv5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgKi9cclxuICAgIGNoZWNrSW5wdXRUaW1lKGlucHV0VmFsdWUgOnN0cmluZyxmaWVsZENvZGUgOnN0cmluZyxldmVudCA6YW55KTogYm9vbGVhbntcclxuICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr1xyXG4gICAgICAgIGxldCB0aW1lRm9ybWF0ID1pbnB1dFZhbHVlLm1hdGNoKC9eKFswLTldfDFbMC05XXwyWzAtM10pOlswLTVdWzAtOV0kLyk7XHJcblxyXG4gICAgICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr+eiuuiqjVxyXG4gICAgICAgICAgICBpZih0aW1lRm9ybWF0ID09PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXSA9IFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lgKTjga/jgIHnhKHlirnjgarmmYLliLvlvaLlvI/jgafjgZnjgIJcIjsgLy/jg6zjgrPjg7zjg4njgavjgqjjg6njg7zjgpLooajnpLpcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBq+WFpeOCjOOCiOOBhuOBqOOBl+OBn+WApOOBr+OAgeeEoeWKueOBquaZguWIu+W9ouW8j+OBp+OBmeOAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5YWl5Yqb5YCk44Gu44OV44Kj44O844Or44OJ44K/44Kk44OX44GMREFURVRJTUXjgafjgYLjgozjgbDjgIHmmYLliLvjgYLjgorjga7ml6Xku5jlvaLlvI/lpInmj5vjgZfjgIFEQVRF44Gn44GC44KM44Gw5pmC5Yi744Gq44GX44Gu5pel5LuY5b2i5byP5aSJ5o+b44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAt5oy/5YWl44GZ44KL5YCkXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRUeXBlICAt44OV44Kj44O844Or44OJ44K/44Kk44OXXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IC3lhaXlipvlgKTjgYzml6Xku5jlvaLlvI/jgavlpInmj5vjgafjgY3jgZ/loLTlkIjjga/mloflrZfliJfjgpLov5TjgZfjgIHjgZ3jgYbjgafjgarjgYTloLTlkIjjga/kvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAqL1xyXG4gICAgY2hhbmdlRGF0ZUZvcm1hdChpbnB1dFZhbHVlIDpzdHJpbmcsIGZpZWxkVHlwZSA6c3RyaW5nLGZpZWxkQ29kZSA6c3RyaW5nLGV2ZW50IDphbnkpOiBzdHJpbmd7XHJcbiAgICAgICAgbGV0IGRhdGVUaW1lO1xyXG4gICAgICAgIGxldCBkYXRlO1xyXG5cclxuICAgICAgICAvL+aMv+WFpeOBmeOCi+WApOOCkmRhdGXlnovjgavlpInmj5tcclxuICAgICAgICBkYXRlID0gbmV3IERhdGUoaW5wdXRWYWx1ZSk7XHJcbiAgICAgICAgLy9kYXRl5Z6L5aSJ5o+b44Gn44GN44Gf44GL56K66KqNXHJcbiAgICAgICAgaWYoZGF0ZSAhPT0gdW5kZWZpbmVkICYmICFpc05hTihkYXRlLmdldERhdGUoKSkpe1xyXG5cclxuICAgICAgICAgICAgLy/ml6XmmYLjg5XjgqPjg7zjg6vjg4njga7loLTlkIjjgIHmmYLliLvjgYLjgorjga7ml6Xku5jlvaLlvI/lpInmj5tcclxuICAgICAgICAgICAgaWYoZmllbGRUeXBlID09PSBcIkRBVEVUSU1FXCIpe1xyXG4gICAgICAgICAgICAgICAgZGF0ZVRpbWUgPWRhdGUudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlVGltZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy/ml6Xku5jjg5XjgqPjg7zjg6vjg4njga7loLTlkIjjgIHmmYLliLvjgarjgZfjga7ml6Xku5jlvaLlvI/lpInmj5tcclxuICAgICAgICAgICAgbGV0IGRhdGVBcnJheT1pbnB1dFZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSkkLyk7Ly805qGB44Gu5pWw5a2XLTHvvZ4y5qGB44Gu5pWw5a2XLTHvvZ4y5qGB44Gu5pWw5a2XXHJcbiAgICAgICAgICAgIGlmKGRhdGVBcnJheSAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICBsZXQgeWVhckluZGV4ID0gMTtcclxuICAgICAgICAgICAgICAgIGxldCBtb250aEluZGV4ID0gMjtcclxuICAgICAgICAgICAgICAgIGxldCBkYXlJbmRleCA9IDM7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZUZvcm1hdHRlZD1gJHtkYXRlQXJyYXlbeWVhckluZGV4XX0tJHtkYXRlQXJyYXlbbW9udGhJbmRleF19LSR7ZGF0ZUFycmF5W2RheUluZGV4XX1gXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZUZvcm1hdHRlZDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddID0gXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBq+WFpeOCjOOCiOOBhuOBqOOBl+OBn+WApOOBr+OAgeeEoeWKueOBquaXpeS7mOW9ouW8j+OBp+OBmeOAglwiOyAvL+ODrOOCs+ODvOODieOBq+OCqOODqeODvOOCkuihqOekulxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gr5YWl44KM44KI44GG44Go44GX44Gf5YCk44Gv44CB54Sh5Yq544Gq5pel5LuY5b2i5byP44Gn44GZ44CC44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gu5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5YWl5Yqb5YCk44GM44OV44Kj44O844Or44OJ44K/44Kk44OXKOODqeOCuOOCquODnOOCv+ODs+ODu+ODieODreODg+ODl+ODgOOCpuODs+ODu+ikh+aVsOmBuOaKnuODu+ODieODreODg+ODl+ODgOOCpuODsynjga7pgbjmip7ogqLjgavlrZjlnKjjgZnjgovlgKTjgYvjg4Hjgqfjg4Pjgq/jgZnjgovplqLmlbBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFZhbHVlIC0g5oy/5YWl44GZ44KL5YCkXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSAt5YWl5Yqb5YCk44GM5pyJ5Yq544Gq5YCk44Gu5aC05ZCI44GvdHJ1ZeOCkui/lOOBl+OAgeOBneOBhuOBp+OBquOBhOWgtOWQiOOBr+S+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICovXHJcbiAgICBjaGVja0lucHV0T3B0aW9uKGlucHV0VmFsdWUgOnN0cmluZyxmaWVsZE9wdGlvbnMgOnN0cmluZyB8IHVuZGVmaW5lZCxmaWVsZENvZGUgOnN0cmluZyxldmVudCA6YW55KTogYm9vbGVhbiB7XHJcblxyXG4gICAgICAgIC8v5YWl5Yqb5YCk44GM6YG45oqe6IKi44Gr5a2Y5Zyo44GZ44KL5YCk44GL44OB44Kn44OD44Kv44GX44CB5a2Y5Zyo44GX44Gf44KJdHJ1ZeOCkui/lOOBmVxyXG4gICAgICAgIGlmKGZpZWxkT3B0aW9ucyAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBPYmplY3Qua2V5cyhmaWVsZE9wdGlvbnMpO1xyXG4gICAgICAgICAgICBmb3IodmFyIG9wdGlvbnNJbmRleCBpbiBvcHRpb25zKXtcclxuICAgICAgICAgICAgICAgIGlmKG9wdGlvbnNbb3B0aW9uc0luZGV4XSA9PT0gaW5wdXRWYWx1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddPVwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjgavjga/jgIHlrZjlnKjjgZfjgarjgYTlgKTjgpLmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/jgZ/jgoHjgIHlh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIjtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuOBq+OBr+OAgeWtmOWcqOOBl+OBquOBhOWApOOCkuaMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+OBn+OCgeOAgeWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWFpeWKm+WApOOBjOODleOCo+ODvOODq+ODieOCv+OCpOODlyjjg6bjg7zjgrbjg7zpgbjmip4p44Gn44CB44Om44O844K244O85oOF5aCx44Gr5a2Y5Zyo44GZ44KL5YCk44GL44OB44Kn44OD44Kv44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAtIOaMv+WFpeOBmeOCi+WApFxyXG4gICAgICogQHJldHVybiB7c3RyaW5nIHwgYm9vbGVhbn0g5YWl5Yqb5YCk44GM55m76Yyy44GV44KM44Gm44GE44KL44Om44O844K244O85oOF5aCx44GL44KJ6KaL44Gk44GL44Gj44Gf5aC05ZCI44CBdHJ1ZeOCkui/lOOBl+OAgeimi+OBpOOBi+OCieOBquOBi+OBo+OBn+WgtOWQiOOAgWZhbHNl44KS6L+U44GZXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNldElucHV0VXNlcihpbnB1dFZhbHVlIDpzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IGJvb2xlYW4+e1xyXG5cclxuICAgICAgICAvL+ODpuODvOOCtuODvOWQjeOCkuagvOe0jeOBmeOCi+WkieaVsFxyXG4gICAgICAgIGxldCB1c2Vyc05hbWU7XHJcbiAgICAgICAgY29uc3QgdXNlcnNJbmZvQ29sdW1uSW5kZXg9MDtcclxuXHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL0FQSeOBp+ODpuODvOOCtuODvOaDheWgseOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICBjb25zdCByZXNwID1hd2FpdCBraW50b25lLmFwaShraW50b25lLmFwaS51cmwoJy92MS91c2VycycsIHRydWUpLCAnR0VUJywge2NvZGVzOltpbnB1dFZhbHVlIF19KVxyXG5cclxuICAgICAgICAgICAgLy/lhaXlipvjgZXjgozjgZ/jg63jgrDjgqTjg7PlkI0o44Oh44O844Or44Ki44OJ44Os44K5KeOBjOODpuODvOOCtuODvOaDheWgseOBq+eZu+mMsuOBleOCjOOBpuOBhOOCi+WgtOWQiOOAgeOBneOBruODpuODvOOCtuODvOWQjeOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICBpZiAocmVzcC51c2Vyc1t1c2Vyc0luZm9Db2x1bW5JbmRleF0uY29kZSA9PT0gaW5wdXRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdXNlcnNOYW1lPXJlc3AudXNlcnNbdXNlcnNJbmZvQ29sdW1uSW5kZXhdLm5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v44Om44O844K244O85ZCN44GM5Y+W5b6X44Gn44GN44Gf5aC05ZCI44CB44Ot44Kw44Kk44Oz5ZCN44Go44Om44O844K244O85ZCN44KS44OV44Kj44O844Or44OJ44Gr44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgIGlmKHVzZXJzTmFtZSA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWNhdGNoe1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXNlcnNOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5YWl5Yqb5YCk44GM44OV44Kj44O844Or44OJ44K/44Kk44OXKOe1hOe5lOmBuOaKninjgafjgIHntYTnuZTmg4XloLHjgavlrZjlnKjjgZnjgovlgKTjgYvjg4Hjgqfjg4Pjgq/jgZnjgovplqLmlbBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFZhbHVlIC0g5oy/5YWl44GZ44KL5YCkXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmcgfCBib29sZWFufSDlhaXlipvlgKTjgYznmbvpjLLjgZXjgozjgabjgYTjgovntYTnuZTmg4XloLHjgYvjgonopovjgaTjgYvjgaPjgZ/loLTlkIjjgIF0cnVl44KS6L+U44GX44CB6KaL44Gk44GL44KJ44Gq44GL44Gj44Gf5aC05ZCI44CBZmFsc2XjgpLov5TjgZlcclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2V0SW5wdXRPcmdhbml6YXRpb24oaW5wdXRWYWx1ZSA6c3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBib29sZWFuPntcclxuXHJcbiAgICAgICAgLy/ntYTnuZTlkI3jgpLmoLzntI3jgZnjgovlpInmlbBcclxuICAgICAgICBsZXQgb3JnYW5pemF0aW9uTmFtZTtcclxuICAgICAgICBjb25zdCBvcmdhbml6YXRpb25zSW5mb0NvbHVtbkluZGV4PTA7XHJcblxyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy9BUEnjgafntYTnuZTmg4XloLHjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgY29uc3QgcmVzcCA9YXdhaXQga2ludG9uZS5hcGkoa2ludG9uZS5hcGkudXJsKCcvdjEvb3JnYW5pemF0aW9ucy5qc29uJywgdHJ1ZSksICdHRVQnLCB7Y29kZXM6W2lucHV0VmFsdWUgXX0pXHJcblxyXG4gICAgICAgICAgICAvL+WFpeWKm+OBleOCjOOBn+e1hOe5lOOCs+ODvOODieOBjOe1hOe5lOaDheWgseOBq+eZu+mMsuOBleOCjOOBpuOBhOOCi+WgtOWQiOOAgeOBneOBrue1hOe5lOWQjeOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3Aub3JnYW5pemF0aW9uc1tvcmdhbml6YXRpb25zSW5mb0NvbHVtbkluZGV4XS5jb2RlID09PSBpbnB1dFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3JnYW5pemF0aW9uTmFtZT1yZXNwLm9yZ2FuaXphdGlvbnNbb3JnYW5pemF0aW9uc0luZm9Db2x1bW5JbmRleF0ubmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v57WE57mU5ZCN44GM5Y+W5b6X44Gn44GN44Gf5aC05ZCI44CB57WE57mU44Kz44O844OJ44Go57WE57mU5ZCN44KS44OV44Kj44O844Or44OJ44Gr44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgIGlmKG9yZ2FuaXphdGlvbk5hbWUgPT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1jYXRjaHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9yZ2FuaXphdGlvbk5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlhaXlipvlgKTjgYzjg5XjgqPjg7zjg6vjg4njgr/jgqTjg5co44Kw44Or44O844OX6YG45oqeKeOBp+OAgeOCsOODq+ODvOODl+aDheWgseOBq+WtmOWcqOOBmeOCi+WApOOBi+ODgeOCp+ODg+OCr+OBmeOCi+mWouaVsFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0VmFsdWUgLSDmjL/lhaXjgZnjgovlgKRcclxuICAgICAqIEByZXR1cm4ge3N0cmluZyB8IGJvb2xlYW59IOWFpeWKm+WApOOBjOeZu+mMsuOBleOCjOOBpuOBhOOCi+OCsOODq+ODvOODl+aDheWgseOBi+OCieimi+OBpOOBi+OBo+OBn+WgtOWQiOOAgXRydWXjgpLov5TjgZfjgIHopovjgaTjgYvjgonjgarjgYvjgaPjgZ/loLTlkIjjgIFmYWxzZeOCkui/lOOBmVxyXG4gICAgICovXHJcbiAgICBhc3luYyBzZXRJbnB1dEdyb3VwKGlucHV0VmFsdWUgOnN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgYm9vbGVhbj57XHJcblxyXG4gICAgICAgIC8v44Kw44Or44O844OX5ZCN44KS5qC857SN44GZ44KL5aSJ5pWwXHJcbiAgICAgICAgbGV0IGdyb3Vwc05hbWU7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBzSW5mb0NvbHVtbkluZGV4PTA7XHJcblxyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy9BUEnjgafjgrDjg6vjg7zjg5fmg4XloLHjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgY29uc3QgcmVzcCA9YXdhaXQga2ludG9uZS5hcGkoa2ludG9uZS5hcGkudXJsKCcvdjEvZ3JvdXBzLmpzb24nLCB0cnVlKSwgJ0dFVCcsIHtjb2RlczpbaW5wdXRWYWx1ZSBdfSlcclxuXHJcbiAgICAgICAgICAgIC8v5YWl5Yqb44GV44KM44Gf44Kw44Or44O844OX44Kz44O844OJ44GM44Kw44Or44O844OX5oOF5aCx44Gr55m76Yyy44GV44KM44Gm44GE44KL5aC05ZCI44CB44Gd44Gu44Kw44Or44O844OX5ZCN44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIGlmIChyZXNwLmdyb3Vwc1tncm91cHNJbmZvQ29sdW1uSW5kZXhdLmNvZGUgPT09IGlucHV0VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGdyb3Vwc05hbWU9cmVzcC5ncm91cHNbZ3JvdXBzSW5mb0NvbHVtbkluZGV4XS5uYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL+OCsOODq+ODvOODl+WQjeOBjOWPluW+l+OBp+OBjeOBn+WgtOWQiOOAgeOCsOODq+ODvOODl+OCs+ODvOODieOBqOOCsOODq+ODvOODl+WQjeOCkuODleOCo+ODvOODq+ODieOBq+OCu+ODg+ODiOOBmeOCi1xyXG4gICAgICAgICAgICBpZihncm91cHNOYW1lID09PSB1bmRlZmluZWQpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9Y2F0Y2h7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBncm91cHNOYW1lO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlXHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcblxyXG4gICAgICAgIGxldCByZXN1bHQ9e1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDpmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL+WxnuaAp+ioreWumuOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzID0gYWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCd2YWx1ZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZmllbGRDb2x1bW5JbmRleD0xO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUNvbHVtbkluZGV4PTM7XHJcblxyXG4gICAgICAgICAgICAvL+ODl+ODreODkeODhuOCo+OBp+mBuOaKnuOBleOCjOOBn+ODleOCo+ODvOODq+ODiVxyXG4gICAgICAgICAgICBjb25zdCBmaWVsZD10aGlzLmFjdGlvblByb3BzW2ZpZWxkQ29sdW1uSW5kZXhdLnByb3BzLm1vZGVsVmFsdWUudHlwZTtcclxuICAgICAgICAgICAgLy/jg5fjg63jg5Hjg4bjgqPjga7mjL/lhaXjgZnjgovlgKRcclxuICAgICAgICAgICAgY29uc3QgdmFsdWU9dGhpcy5hY3Rpb25Qcm9wc1t2YWx1ZUNvbHVtbkluZGV4XS5wcm9wcy5tb2RlbFZhbHVlO1xyXG5cclxuICAgICAgICAgICAgLy/mnaHku7blvI/jga7ntZDmnpzjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uUmVzdWx0ID0gdGhpcy5nZXRDb25kaXRpb25SZXN1bHQoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmKCFjb25kaXRpb25SZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy/jg5fjg63jg5Hjg4bjgqPjga7lgKTjgpLmjL/lhaXjgZnjgovjg5XjgqPjg7zjg6vjg4njgYzmnKrpgbjmip7jga7loLTlkIjjgIHkvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAgICAgICAgaWYoZmllbGQgPT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gn44CB5YCk44KS5oy/5YWl44GZ44KL44OV44Kj44O844Or44OJ44GM5oyH5a6a44GV44KM44Gm44GE44Gq44GL44Gj44Gf44Gf44KB44CB5Yem55CG44GM5Lit5pat44GV44KM44G+44GX44Gf44CCXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL+ODl+ODreODkeODhuOCo+OBruWApOOCkuaMv+WFpeOBmeOCi+ODleOCo+ODvOODq+ODieOBjOmdnuWvvuW/nOODleOCo+ODvOODq+ODieOBruWgtOWQiOOAgeS+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICAgICAgICAvL+a3u+S7mOODleOCoeOCpOODq+ODu+ODhuODvOODluODq+ODu+OCq+ODhuOCtOODquODvOODu+OCueODhuODvOOCv+OCueODu+S9nOaIkOiAheODu+abtOaWsOiAheODu+S9nOalreiAheODu+ODquODk+OCuOODp+ODs+eVquWPt+ODu+ODrOOCs+ODvOODieeVquWPt+ODu+ODrOOCs+ODvOODiUlE44O76KiI566X44O75L2c5oiQ5pel5pmC44O75pu05paw5pel5pmC44OV44Kj44O844Or44OJ44GM6YG45oqe44GV44KM44Gm44GE44KL5aC05ZCI44CB5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgICAgICAgIGlmKGZpZWxkID09PSBcIkZJTEVcIiB8fCBmaWVsZCA9PT0gXCJTVUJUQUJMRVwiIHx8IGZpZWxkID09PSBcIkNBVEVHT1JZXCIgfHwgZmllbGQgPT09IFwiU1RBVFVTXCJcclxuICAgICAgICAgICAgICAgICAgICB8fCBmaWVsZCA9PT0gXCJTVEFUVVNfQVNTSUdORUVcIiB8fCBmaWVsZCA9PT0gXCJDUkVBVE9SXCIgfHwgZmllbGQgPT09IFwiTU9ESUZJRVJcIiB8fCBmaWVsZCA9PT0gXCJfX1JFVklTSU9OX19cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCBmaWVsZCA9PT0gXCJSRUNPUkRfTlVNQkVSXCJ8fCBmaWVsZCA9PT0gXCJfX0lEX19cIiB8fCBmaWVsZCA9PT1cIkNBTENcIiB8fCBmaWVsZCA9PT0gXCJDUkVBVEVEX1RJTUVcIiB8fCBmaWVsZCA9PT0gXCJVUERBVEVEX1RJTUVcIiApe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gn44CB6YG45oqe44GV44KM44Gf44OV44Kj44O844Or44OJ44Gv44CB5YCk44KS5oy/5YWl44GZ44KL44Kz44Oz44Od44O844ON44Oz44OI44Gn44Gv6Z2e5a++5b+c44Gu44OV44Kj44O844Or44OJ44Gu44Gf44KB44CB5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL+ODl+ODreODkeODhuOCo+OBruaMv+WFpeOBmeOCi+WApOOBjOacquWFpeWKm+OBruWgtOWQiOOAgeS+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICAgICAgICBpZih2YWx1ZSA9PT0gXCJcIil7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjgafjgIHjg5XjgqPjg7zjg6vjg4njgavmjL/lhaXjgZnjgovlgKTjgYzmjIflrprjgZXjgozjgabjgYTjgarjgYvjgaPjgZ/jgZ/jgoHjgIHlh6bnkIbjgYzkuK3mlq3jgZXjgozjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v5pei5a6a44Gu44OX44Ot44OR44OG44Kj44Gu44Kk44Oz44K/44O844OV44Kn44O844K544G45aSJ5o+b44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElJbnNlcnRWYWx1ZVByb3BzO1xyXG5cclxuICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovlgKTjgpLlj5blvpdcclxuICAgICAgICAgICAgbGV0IGZpZWxkVmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlO1xyXG4gICAgICAgICAgICAvL+ODleOCo+ODvOODq+ODieOBrueorumhnuOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLnR5cGU7XHJcbiAgICAgICAgICAgIC8v44OV44Kj44O844Or44OJ44GM5b+F6aCI6aCF55uu44Gq44Gu44GL5Y+W5b6XXHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUmVxdWlyZWQ9dGhpcy5wcm9wcy5maWVsZC5yZXF1aXJlZDtcclxuICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovjg5XjgqPjg7zjg6vjg4njga7jgrPjg7zjg4njgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgZmllbGRDb2RlPXRoaXMucHJvcHMuZmllbGQuY29kZTtcclxuICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovlgKTjga7lvaLlvI/vvIjmiYvlhaXlipvjgYvlpInmlbDvvInjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgaW5zZXJ0VmFsdWVUeXBlPXRoaXMucHJvcHMuc2hvdztcclxuICAgICAgICAgICAgLy/jg6njgrjjgqrjg5zjgr/jg7Pjg7vjg4Hjgqfjg4Pjgq/jg5zjg4Pjgq/jgrnjg7vopIfmlbDpgbjmip7jg7vjg4njg63jg4Pjg5fjg4Djgqbjg7Pjga7pgbjmip7ogqLjgpLlj5blvpdcclxuICAgICAgICAgICAgbGV0IGZpZWxkT3B0aW9ucyA9dGhpcy5wcm9wcy5maWVsZC5vcHRpb25zO1xyXG4gICAgICAgICAgICAvL+WkieaVsOOBruWApOOCkuagvOe0jeOBmeOCi1xyXG4gICAgICAgICAgICBsZXQgdmFyaWFibGVWYWx1ZTtcclxuXHJcbiAgICAgICAgICAgIC8v5aSJ5pWw44Gu5aC05ZCI44CB5YCk44GM5Y+W5b6X44Gn44GN44KL44GL44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgIGlmKGluc2VydFZhbHVlVHlwZSA9PT0gXCLlpInmlbBcIiAmJiBjb25kaXRpb25SZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVWYWx1ZSA9IGNvbnRleHQudmFyaWFibGVzW2ZpZWxkVmFsdWVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKHZhcmlhYmxlVmFsdWUgPT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lpInmlbDjga/jgIHnhKHlirnjgarlhaXlipvlvaLlvI/jgafjgZnjgIJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gdmFyaWFibGVWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy/lhaXlipvlgKTjg4Hjgqfjg4Pjgq/lvozjgIHlvaLlvI/lpInmj5vjgIHlnovlpInmj5vjgZfjgZ/lgKTjgpLmoLzntI3jgZnjgovlpInmlbBcclxuICAgICAgICAgICAgbGV0IGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZTtcclxuICAgICAgICAgICAgLy/lhaXlipvlgKTjg4Hjgqfjg4Pjgq/lvozjgIHlvaLlvI/lpInmj5vjgIHlnovlpInmj5vjgZfjgZ/lgKTjgpLmoLzntI3jgZnjgovphY3liJdcclxuICAgICAgICAgICAgbGV0IGNvcnJlY3RWYWx1ZXMgOnN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgIC8v5YWl5Yqb44Ko44Op44O877yI56m655m95paH5a2X44Gu5re35YWl77yJ44GM44Gq44GE44GT44Go44KS44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgIGxldCBub3RJbnB1dEVycm9yPXRoaXMuY2hlY2tJbnB1dEJsYW5rKGZpZWxkVHlwZSxmaWVsZFZhbHVlLGZpZWxkQ29kZSxmaWVsZFJlcXVpcmVkLGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIC8v5p2h5Lu25byP44Gu57WQ5p6c44GMdHJ1ZeOAgeWFpeWKm+OCqOODqeODvO+8iOepuueZveaWh+Wtl+OBrua3t+WFpe+8ieOBjOOBquOBhOWgtOWQiOOAgeaMv+WFpeOBmeOCi+WApOOCkuODleOCo+ODvOODq+ODieOCv+OCpOODl+WIpeOBq+ODgeOCp+ODg+OCr+OBmeOCi1xyXG4gICAgICAgICAgICBpZihjb25kaXRpb25SZXN1bHQgJiYgbm90SW5wdXRFcnJvcil7XHJcblxyXG4gICAgICAgICAgICAgICAgLy/mloflrZfliJflnovjga7jg5XjgqPjg7zjg6vjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgabjgYTjgovlgKTjgYzpganliIfjga7loLTlkIjjgIFjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgIGlmKGZpZWxkVHlwZSA9PT0gXCJTSU5HTEVfTElORV9URVhUXCIgfHwgZmllbGRUeXBlID09PSBcIk1VTFRJX0xJTkVfVEVYVFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJSSUNIX1RFWFRcIiB8fCBmaWVsZFR5cGUgPT09IFwiTElOS1wiICl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29ycmVjdEZvcm1hdHRlZFZhbHVlID0gZmllbGRWYWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvL+aVsOWApOWei+OBruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOCi+WApOOBjOmBqeWIh+OBruWgtOWQiOOAgeaVsOWApOWei+OBq+Wei+WkieaPm+OBl+OBpmNvcnJlY3RGb3JtYXR0ZWRWYWx1ZeOBq+S7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoZmllbGRUeXBlID09PSBcIk5VTUJFUlwiICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jaGVja0lucHV0TnVtYmVyKGZpZWxkVmFsdWUsZmllbGRDb2RlLGV2ZW50KSl7Ly/lhaXlipvlgKTjg4Hjgqfjg4Pjgq9cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdEZvcm1hdHRlZFZhbHVlID0gTnVtYmVyKGZpZWxkVmFsdWUpOy8v5Z6L5aSJ5o+bXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v5pel5LuY44O75pel5pmC5Z6L44Gu44OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gm44GE44KL5YCk44GM6YGp5YiH44Gu5aC05ZCI44CB5oyH5a6a44Gu5pel5LuY44O75pel5pmC44Gr5b2i5byP5aSJ5o+b44GX44GmY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiREFURVwiIHx8IGZpZWxkVHlwZSA9PT0gXCJEQVRFVElNRVwiICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jaGVja0lucHV0RGF0ZShmaWVsZFZhbHVlLGZpZWxkQ29kZSxldmVudCkpey8v5YWl5Yqb5YCk44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JtYXR0ZWREYXRlID0gdGhpcy5jaGFuZ2VEYXRlRm9ybWF0KGZpZWxkVmFsdWUsZmllbGRUeXBlLGZpZWxkQ29kZSxldmVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZm9ybWF0dGVkRGF0ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0Rm9ybWF0dGVkVmFsdWUgPSBmb3JtYXR0ZWREYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy/mmYLliLvjg5XjgqPjg7zjg6vjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgabjgYTjgovlgKTjgYzpganliIfjga7loLTlkIjjgIFjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGZpZWxkVHlwZSA9PT0gXCJUSU1FXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuY2hlY2tJbnB1dFRpbWUoZmllbGRWYWx1ZSxmaWVsZENvZGUsZXZlbnQpKXsvL+WFpeWKm+WApOODgeOCp+ODg+OCr1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0Rm9ybWF0dGVkVmFsdWUgPSBmaWVsZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvL+ODqeOCuOOCquODnOOCv+ODs+ODu+ODieODreODg+ODl+ODgOOCpuODs+OBruODleOCo+ODvOODq+ODieOBrumBuOaKnuiCouOBqOWFpeWKm+WApOOBjOS4gOiHtOOBl+OBn+WgtOWQiOOAgWNvcnJlY3RGb3JtYXR0ZWRWYWx1ZeOBq+S7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoZmllbGRUeXBlID09PSBcIlJBRElPX0JVVFRPTlwiIHx8IGZpZWxkVHlwZSA9PT0gXCJEUk9QX0RPV05cIil7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jaGVja0lucHV0T3B0aW9uKGZpZWxkVmFsdWUsZmllbGRPcHRpb25zLGZpZWxkQ29kZSxldmVudCkpey8v5YWl5Yqb5YCk44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZSA9IGZpZWxkVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v44OB44Kn44OD44Kv44Oc44OD44Kv44K544O76KSH5pWw6YG45oqe44Gu44OV44Kj44O844Or44OJ44Gu6YG45oqe6IKi44Go5YWl5Yqb5YCk44GM5LiA6Ie044GX44Gf5aC05ZCI44CBY29ycmVjdFZhbHVlc+OBrumFjeWIl+OBq+S7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoZmllbGRUeXBlID09PSBcIkNIRUNLX0JPWFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJNVUxUSV9TRUxFQ1RcIiApe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuY2hlY2tJbnB1dE9wdGlvbihmaWVsZFZhbHVlLGZpZWxkT3B0aW9ucyxmaWVsZENvZGUsZXZlbnQpKXsvL+WFpeWKm+WApOODgeOCp+ODg+OCr1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0VmFsdWVzWzBdID0gZmllbGRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy/jg6bjg7zjgrbjg7zmg4XloLHjg5XjgqPjg7zjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/lgKTjgYzpganliIfjgarloLTlkIjjgIFjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGZpZWxkVHlwZSA9PT0gXCJVU0VSX1NFTEVDVFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAvL+aMv+WFpeOBmeOCi+WApOOBjOODpuODvOOCtuODvOaDheWgseOBi+OCieimi+OBpOOBi+OCjOOBsOOAgeODpuODvOOCtuODvOWQjeOCkuagvOe0jVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1c2Vycz1hd2FpdCB0aGlzLnNldElucHV0VXNlcihmaWVsZFZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy/jg6bjg7zjgrbjg7zlkI3jgYzmoLzntI3jgafjgY3jgabjgYTjgovloLTlkIjjgIHjg63jgrDjgqTjg7PlkI3jgajjg6bjg7zjgrbjg7zlkI3jgpJjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgICAgICBpZighdXNlcnMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXT1cIuODpuODvOOCtuODvOmBuOaKnuOBq+OAgeaMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+ODpuODvOOCtuODvOaDheWgseOBr+imi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBn+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjg6bjg7zjgrbjg7zpgbjmip7jgavjgIHmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/jg6bjg7zjgrbjg7zmg4XloLHjga/opovjgaTjgYvjgorjgb7jgZvjgpPjgafjgZfjgZ/jgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZT1beyBjb2RlOiBmaWVsZFZhbHVlLCBuYW1lOiB1c2VycyB9XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy/ntYTnuZTmg4XloLHjg5XjgqPjg7zjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/lgKTjgYzpganliIfjgarloLTlkIjjgIFjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGZpZWxkVHlwZSA9PT0gXCJPUkdBTklaQVRJT05fU0VMRUNUXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8v5oy/5YWl44GZ44KL5YCk44GM57WE57mU5oOF5aCx44GL44KJ6KaL44Gk44GL44KM44Gw44CB57WE57mU5ZCN44KS5qC857SNXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9yZ2FuaXphdGlvbnM9YXdhaXQgdGhpcy5zZXRJbnB1dE9yZ2FuaXphdGlvbihmaWVsZFZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy/ntYTnuZTlkI3jgYzmoLzntI3jgafjgY3jgabjgYTjgovloLTlkIjjgIHntYTnuZTjgrPjg7zjg4njgajntYTnuZTlkI3jgpJjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgICAgICBpZighb3JnYW5pemF0aW9ucyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddPVwi57WE57mU6YG45oqe44OV44Kj44O844Or44OJ44Gr44CB5oy/5YWl44GX44KI44GG44Go44GX44Gf57WE57mU5oOF5aCx44Gv6KaL44Gk44GL44KK44G+44Gb44KT44Gn44GX44Gf44CC44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gu5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIue1hOe5lOmBuOaKnuODleOCo+ODvOODq+ODieOBq+OAgeaMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+e1hOe5lOaDheWgseOBr+imi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBn+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdEZvcm1hdHRlZFZhbHVlPVt7IGNvZGU6IGZpZWxkVmFsdWUsIG5hbWU6IG9yZ2FuaXphdGlvbnN9XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy/jgrDjg6vjg7zjg5fmg4XloLHjg5XjgqPjg7zjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/lgKTjgYzpganliIfjgarloLTlkIjjgIFjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGZpZWxkVHlwZSA9PT0gXCJHUk9VUF9TRUxFQ1RcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovlgKTjgYzjgrDjg6vjg7zjg5fmg4XloLHjgYvjgonopovjgaTjgYvjgozjgbDjgIHjgrDjg6vjg7zjg5flkI3jgpLmoLzntI1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBzPWF3YWl0IHRoaXMuc2V0SW5wdXRHcm91cChmaWVsZFZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy/jgrDjg6vjg7zjg5flkI3jgYzmoLzntI3jgafjgY3jgabjgYTjgovloLTlkIjjgIHjgrDjg6vjg7zjg5fjgrPjg7zjg4njgajjgrDjg6vjg7zjg5flkI3jgpJjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgICAgICBpZighZ3JvdXBzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV1bJ2Vycm9yJ109XCLjgrDjg6vjg7zjg5fpgbjmip7jg5XjgqPjg7zjg6vjg4njgavjgIHmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/jgrDjg6vjg7zjg5fmg4XloLHjga/opovjgaTjgYvjgorjgb7jgZvjgpPjgafjgZfjgZ/jgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44Kw44Or44O844OX6YG45oqe44OV44Kj44O844Or44OJ44Gr44CB5oy/5YWl44GX44KI44GG44Go44GX44Gf44Kw44Or44O844OX5oOF5aCx44Gv6KaL44Gk44GL44KK44G+44Gb44KT44Gn44GX44Gf44CC44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gu5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0Rm9ybWF0dGVkVmFsdWU9W3sgY29kZTogZmllbGRWYWx1ZSwgbmFtZTogZ3JvdXBzfV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBrue1kOaenOOBjHRydWXjgYvjgaTmjL/lhaXjgZnjgovlgKTjgYzlpInmj5vjgafjgY3jgZ/loLTlkIjjgIHjg5XjgqPjg7zjg6vjg4nvvIjjg6njgrjjgqrjg5zjgr/jg7Pjg7vjg4njg63jg4Pjg5fjg4Djgqbjg7Pjg7vjg4Hjgqfjg4Pjgq/jg5zjg4Pjgq/jgrnjg7vopIfmlbDpgbjmip7jg7vmloflrZfliJfkuIDooYzjg7vmloflrZfliJfopIfmlbDooYzjg7vjg6rjg4Pjg4Hjgqjjg4fjgqPjgr/jg7vmlbDlgKTjg7vml6Xku5jjg7vml6XmmYLjg7vmmYLliLvvvInjgavjgrvjg4Pjg4hcclxuICAgICAgICAgICAgaWYoY29uZGl0aW9uUmVzdWx0ICYmIChjb3JyZWN0Rm9ybWF0dGVkVmFsdWUgfHwgY29ycmVjdFZhbHVlcykpe1xyXG4gICAgICAgICAgICAgICAgLy/mnaHku7blvI/jga7ntZDmnpzjgYx0dXJl44GL44Gk44CB5YCk44KS5q2j44GX44GE5b2i5byP44Gr5aSJ5o+b44Gn44GN44Gf5aC05ZCI44CB44OV44Kj44O844Or44OJ44Gr5YCk44KS44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgICAgICBpZihjb3JyZWN0Rm9ybWF0dGVkVmFsdWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdLnZhbHVlID0gY29ycmVjdEZvcm1hdHRlZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgLy/mnaHku7blvI/jga7ntZDmnpzjgYx0dXJl44GL44Gk44CB5YCk44KS5q2j44GX44GE5b2i5byP77yI6YWN5YiX77yJ44Gr5aSJ5o+b44Gn44GN44Gf5aC05ZCI44CB44OV44Kj44O844Or44OJ44Gr5YCk77yI6YWN5YiX77yJ44KS44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihjb3JyZWN0VmFsdWVzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdLnZhbHVlID0gY29ycmVjdFZhbHVlcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yOmFueSl7XHJcbiAgICAgICAgICAgIGV2ZW50LnJlY29yZDtcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3I9ZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PXRydWU7Ly/mrKHjga7jg47jg7zjg4njga/lh6bnkIbjgpLntprjgZHjgotcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb250ZXh0IOadoeS7tuW8j+OCkuWun+ihjOOBmeOCi1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbnRleHQ6YW55KTpib29sZWFue1xyXG4gICAgICAgIC8v44OX44Ot44OR44OG44KjYGNvbmRpdGlvbmDjgYvjgonmnaHku7bjg4Tjg6rjg7zjgpLlj5blvpfjgZnjgotcclxuICAgICAgICBjb25zdCB0cmVlID10aGlzLmdldENvbmRpdGlvbih0aGlzLnByb3BzLmNvbmRpdGlvbik7XHJcbiAgICAgICAgaWYoIXRyZWUpe1xyXG4gICAgICAgICAgICAvL+adoeS7tuOCkuioreWumuOBleOCjOOBpuOBhOOBvuOBm+OCk1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRyZWUuZXZhbHVhdGUodHJlZS5yb290LGNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiDmnaHku7blvI/jg4Tjg6rjg7zjgpLlj5blvpfjgZnjgotcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldENvbmRpdGlvbihjb25kaXRpb246c3RyaW5nKTpDb25kaXRpb25UcmVlfG51bGx7XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlID0gbmV3IENvbmRpdGlvblRyZWUoKTtcclxuICAgICAgICAgICAgdHJlZS5mcm9tSnNvbihjb25kaXRpb24pO1xyXG4gICAgICAgICAgICBpZih0cmVlLmdldENvbmRpdGlvbnModHJlZS5yb290KS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJlZTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXT10aGlzO1xyXG4gICAgfVxyXG5cclxufVxyXG5uZXcgSW5zZXJ0VmFsdWVBY3Rpb24oKTsiLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyAgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQsIElDb250ZXh0LCBJVmFyTmFtZX0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJR2V0VmFsdWVQcm9wc3tcclxuICAgIGZpZWxkOklGaWVsZDsvL+ODgeOCp+ODg+OCr+OBmeOCi+ODleOCo+ODvOODq+ODieOBruWvvuixoVxyXG4gICAgdmVyTmFtZTpJVmFyTmFtZTtcclxufVxyXG4vKipcclxuICog5q2j6KaP6KGo54++44OB44Kn44OD44Kv44Ki44Kv44K344On44OzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgR2V0VmFsdWVBY2l0b24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SUdldFZhbHVlUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuWApOOCkuWPluW+l+OBmeOCi1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgdmVyTmFtZTp7bmFtZTonJ31cclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ3Zlck5hbWUnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElHZXRWYWx1ZVByb3BzO1xyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBruioiOeul+e1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0udmFsdWU7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMudmVyTmFtZSAmJiB0aGlzLnByb3BzLnZlck5hbWUubmFtZSE9PScnKXtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIGV2ZW50LmVycm9yPWVycm9yO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbiAgICBcclxufVxyXG5uZXcgR2V0VmFsdWVBY2l0b24oKTtcclxuIiwiaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgSUZpZWxkLCBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHkgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgRm9ybWF0dGVyIH0gZnJvbSBcIi4uL3V0aWwvZm9ybWF0XCI7XHJcblxyXG4vL+WPs1VJ55S76Z2icHJvcGVydHnjga5uYW1lOuWei++8mlxyXG5pbnRlcmZhY2UgSVN0cmluZ0pvaW5Qcm9wc3tcclxuICAgIC8v5L+d5a2Y5YWI44OV44Kj44O844Or44OJXHJcbiAgICBzYXZlRmllbGQ6SUZpZWxkO1xyXG4gICAgLy/ntZDlkIjlhYPjg5XjgqPjg7zjg6vjg4kxXHJcbiAgICBqb2luRmllbGQxOklGaWVsZDtcclxuICAgIC8v57WQ5ZCI5YWD44OV44Kj44O844Or44OJMlxyXG4gICAgam9pbkZpZWxkMjpJRmllbGQ7XHJcbiAgICAvL+WMuuWIh+OCiuaWh+Wtl1xyXG4gICAgZGVsaW1pdGVyOnN0cmluZztcclxufVxyXG5cclxuLy9JQWN0aW9u44Kk44Oz44K/44OV44Kn44O844K544KS5a6f6KOF44GZ44KL5paw44GX44GE44Kv44Op44K5QWN0aW9u44KS5L2c5oiQ77yaXHJcbmV4cG9ydCBjbGFzcyBTdHJpbmdKb2luQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIC8vaW1wb3J044GL44KJ5bCO5YWl6aGV56S65a6a576pXHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICAvL+S4iuaWueOBrmludGVyZmFjZSBQcm9wc+OBi+OCieOAgXByb3Bz5Y+X44GR44KL5bGe5oCn44KS5a6a576p77yaXHJcbiAgICBwcm9wczpJU3RyaW5nSm9pblByb3BzO1xyXG4gICAgLy/plqLmlbDlrprnvqnjgavlv4XopoHjgarpoZ7lkI3jgpLmp4vnr4nvvJpcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgLy9wZ0FkbWluRELjgavnmbvpjLLjgZfjgZ/jgqLjgq/jgrfjg6fjg7PlkI0obmFtZS9zdWJ0aXRsZSnkuIDoh7TjgZnjgovlv4XopoHjgYzjgYLjgovvvJpcclxuICAgICAgICB0aGlzLm5hbWU9XCLmloflrZfntZDlkIhcIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgICAgICAvL+ODl+ODreODkeODhuOCo+WxnuaAp+WIneacn+WMlu+8mlxyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBzYXZlRmllbGQ6e2NvZGU6Jyd9LFxyXG4gICAgICAgICAgICBqb2luRmllbGQxOntjb2RlOicnfSxcclxuICAgICAgICAgICAgam9pbkZpZWxkMjp7Y29kZTonJ30sXHJcbiAgICAgICAgICAgIGRlbGltaXRlcjonJ1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+ODquOCu+ODg+ODiOS4iuiomOeZu+mMsuihqO+8mlxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWHpueQhuOCkuWun+ijheOBmeOCi1xyXG4gKiBAcGFyYW0gYWN0aW9uTm9kZSDjgqLjgq/jgrfjg6fjg7Pjg47jg7zjg4lcclxuICogQHBhcmFtIGV2ZW50IEtpbnRvbmXjga7jgqTjg5njg7Pjg4hcclxuICogQHBhcmFtIGNvbnRleHQg44Kz44Oz44OG44Kt44K544OI77yI44Os44Kz44O844OJ44CB5aSJ5pWw5oOF5aCx44KS5oyB44Gj44Gm44GE44KL77yJXHJcbiAqIEByZXR1cm5zIFxyXG4gKi9cclxuICAgIC8v6Z2e5ZCM5pyf5Yem55CG44GC44KL6Zai5pWw5LiL44Gu44GC44KL5bGe5oCn77yaXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6SUFjdGlvbk5vZGUsZXZlbnQ6YW55KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgLy/lvozntpnlh6bnkIbkuI3lj6/vvJpcclxuICAgICAgICAgICAgY2FuTmV4dDpmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KL77yaXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgLy/jg5fjg63jg5Hjg4bjgqPoqK3lrprjga7jg4fjg7zjgr/lnovjga/lv4XopoHjgarmg4XloLHlkKvjgoHjgb7jgZnjgYvvvJ/lhajpg6jkuI3lrZjlnKjmmYJyZXR1cm46XHJcbiAgICAgICAgICAgIGlmICghKCdzYXZlRmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ2pvaW5GaWVsZDEnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ2pvaW5GaWVsZDInIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v5pei5a6a44Gu44OX44Ot44OR44OG44Kj44Gu44Kk44Oz44K/44OV44Kn44O844K544G45aSJ5o+b77yaXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElTdHJpbmdKb2luUHJvcHM7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGV2ZW50LnJlY29yZDtcclxuXHJcbiAgICAgICAgICAgIC8va2ludG9uZeODleOCo+ODvOODq+ODieOCv+OCpOODl+WPluW+l++8mlxyXG4gICAgICAgICAgICBjb25zdCBqb2luRmllbGQxdHlwZT10aGlzLnByb3BzLmpvaW5GaWVsZDEudHlwZTtcclxuICAgICAgICAgICAgY29uc3Qgam9pbkZpZWxkMnR5cGU9dGhpcy5wcm9wcy5qb2luRmllbGQyLnR5cGU7XHJcbiAgICAgICAgICAgIGNvbnN0IHNhdmVGaWVsZHR5cGU9dGhpcy5wcm9wcy5zYXZlRmllbGQudHlwZTtcclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgICAvLyAvL+S/neWtmOWFiOODleOCo+ODvOODq+ODieOBr+aWh+Wtl+WIl+ODleOCo+ODvOODq+ODieOBp+OBr+OBquOBhOWgtOWQiOOAgeOCqOODqeODvOeZuueUn++8mlxyXG4gICAgICAgICAgICBpZighKHNhdmVGaWVsZHR5cGU9PT0nU0lOR0xFX0xJTkVfVEVYVCd8fHNhdmVGaWVsZHR5cGU9PT0nTVVMVElfTElORV9URVhUJ3x8c2F2ZUZpZWxkdHlwZT09PSdSSUNIX1RFWFQnKSl7XHJcbiAgICAgICAgICAgICAgICBldmVudC5lcnJvcj0nW+OCqOODqeODvOODoeODg+OCu+ODvOOCuF3vvJrntZDlkIjkv53lrZjlhYjlr77lv5zkuI3lj6/jgILntZDlkIjjgZfjgb7jgZvjgpMnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUuaW5jbHVkZXMoJ3N1Y2Nlc3MnKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0KFwiW3dpbmRvd3MgYWxlcnRd77yaXCIrZXZlbnQuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbk5leHQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvL+WApOWPluW+l+aWueazleWumue+qe+8mlxyXG4gICAgZnVuY3Rpb24gZ2V0VmFsdWUodmFsdWU6c3RyaW5nLHR5cGU6c3RyaW5nfHVuZGVmaW5lZCxmaWVsZENvZGU6c3RyaW5nLGV2ZW50OmFueSl7XHJcbiAgICAgICAgaWYoZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlPT09dW5kZWZpbmVkfHxldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU9PT1udWxsKXtcclxuICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0udmFsdWU9Jyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v5L2c5oiQ6ICF44CB5pu05paw6ICF77yaXHJcbiAgICAgICAgaWYodHlwZT09PSdDUkVBVE9SJ3x8dHlwZT09PSdNT0RJRklFUicpe1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZS5uYW1lO1xyXG4gICAgICAgIC8v5pel5pmC44CB5L2c5oiQ5pel5pmC44CB5pu05paw5pel5pmC77yaXHJcbiAgICAgICAgfWVsc2UgaWYodHlwZT09PSdEQVRFVElNRSd8fHR5cGU9PT0nQ1JFQVRFRF9USU1FJ3x8dHlwZT09PSdVUERBVEVEX1RJTUUnKXtcclxuICAgICAgICAgICAgaWYoZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlIT09dW5kZWZpbmVkICYmIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZSE9PScnKXtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gRm9ybWF0dGVyLmRhdGVGb3JtYXQobmV3IERhdGUoZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlKSwneXl5eS1NTS1kZCBISDptbScpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9ZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIC8v44Om44O844K26YG45oqe44CB57WE57mU6YG45oqe44CB44Kw44Or44O844OX6YG45oqe44CB5re75LuY44OV44Kh44Kk44Or5ZCN44CB5L2c5qWt6ICF44CB44Kr44OG44K044Oq44O877yaXHJcbiAgICAgICAgfWVsc2UgaWYodHlwZT09PSdVU0VSX1NFTEVDVCd8fHR5cGU9PT0nT1JHQU5JWkFUSU9OX1NFTEVDVCd8fHR5cGU9PT0nR1JPVVBfU0VMRUNUJ3x8dHlwZT09PSdGSUxFJ3x8dHlwZT09PSdTVEFUVVNfQVNTSUdORUUnKXtcclxuICAgICAgICAgICAgaWYoZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlPT09dW5kZWZpbmVkIHx8IGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZT09PScnKXtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vdG90ZXh0PWV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGxldCBhcnI9W107XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGk9MDtpPG1vdG90ZXh0Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKG1vdG90ZXh0W2ldLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy/phY3liJfopoHntKDjgpIs44Gn6YCj57WQ44GX44Gm5paH5a2X5YiX44KS5L2c5oiQ77yaXHJcbiAgICAgICAgICAgICAgICB2YWx1ZT1hcnIuam9pbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgLy/jgqvjg4bjgrTjg6rjg7zjgIHjg4Hjgqfjg4Pjgq/jg5zjg4Pjgq/jgrnjgIHopIfmlbDpgbjmip7vvJpcclxuICAgICAgICB9ZWxzZSBpZih0eXBlPT09J0NBVEVHT1JZJ3x8dHlwZT09PSdDSEVDS19CT1gnfHx0eXBlPT09J01VTFRJX1NFTEVDVCcpe1xyXG4gICAgICAgICAgICBpZihldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU9PT11bmRlZmluZWQgfHwgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlPT09Jycpe1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW90b3RleHQ9ZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgbGV0IGFycj1bXTtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8bW90b3RleHQubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2gobW90b3RleHRbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy/phY3liJfopoHntKDjgpIs44Gn6YCj57WQ44GX44Gm5paH5a2X5YiX44KS5L2c5oiQ77yaXHJcbiAgICAgICAgICAgICAgICB2YWx1ZT1hcnIuam9pbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgLy/oqbPntLDnlLvpnaLjg5fjg63jgrvjgrnlrp/ooYzlvozjga7jgrnjg4bjg7zjgr/jgrnvvJpcclxuICAgICAgICB9ZWxzZSBpZih0eXBlPT09J1NUQVRVUycmJmV2ZW50LnR5cGUuaW5jbHVkZXMoJ3Byb2Nlc3MnKSl7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZXZlbnQubmV4dFN0YXR1cy52YWx1ZTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFsdWUgPSBldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZT09PXVuZGVmaW5lZCB8fCB2YWx1ZT09PW51bGwpe1xyXG4gICAgICAgICAgICB2YWx1ZT0nJztcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICByZXR1cm4gdmFsdWU7ICAgICBcclxuICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgICAvL+WApOWPluW+l+aWueazleWRvOWHuu+8mlxyXG4gICAgICAgICAgICBsZXQgam9pblZhbHVlMTpzdHJpbmc9Jyc7XHJcbiAgICAgICAgICAgIGpvaW5WYWx1ZTE9Z2V0VmFsdWUoam9pblZhbHVlMSxqb2luRmllbGQxdHlwZSx0aGlzLnByb3BzLmpvaW5GaWVsZDEuY29kZSxldmVudCk7XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgICAgbGV0IGpvaW5WYWx1ZTI6c3RyaW5nPScnO1xyXG4gICAgICAgICAgICBqb2luVmFsdWUyPWdldFZhbHVlKGpvaW5WYWx1ZTIsam9pbkZpZWxkMnR5cGUsdGhpcy5wcm9wcy5qb2luRmllbGQyLmNvZGUsZXZlbnQpO1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgICAgIGNvbnN0IGNvblN0cmluZyA9IHRoaXMucHJvcHMuZGVsaW1pdGVyO1xyXG4gICAgICAgICAgICBsZXQgc2F2ZVZhbHVlOnN0cmluZz0nJztcclxuICAgICAgICAgICAgLy/liY3lvozntZDlkIjlhYPjgYznqbrnmb3jgarjgonljLrliIfjgormloflrZfjgoLnqbrnmb3jgavjgZnjgoso5L6LOjEtOOOBrjjnhKHjgYTjgarjgokx44CCMS0444GuMeeEoeOBhOOBquOCiTjjgIIx56m655m9OOOBrjjnhKHjgYTjgarjgokx44CC57WQ5ZCI5YWD5YWo6YOo56m655m944Gq44KJ5YWo6YOo56m655m9KTpcclxuICAgICAgICAgICAgaWYoam9pblZhbHVlMT09PScnJiZqb2luVmFsdWUyPT09Jycpe1xyXG4gICAgICAgICAgICAgICAgc2F2ZVZhbHVlPScnO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihqb2luVmFsdWUxPT09JycmJmpvaW5WYWx1ZTIhPT0nJyl7XHJcbiAgICAgICAgICAgICAgICBzYXZlVmFsdWU9am9pblZhbHVlMjtcclxuICAgICAgICAgICAgfWVsc2UgaWYoam9pblZhbHVlMj09PScnJiZqb2luVmFsdWUxIT09Jycpe1xyXG4gICAgICAgICAgICAgICAgc2F2ZVZhbHVlPWpvaW5WYWx1ZTE7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGpvaW5WYWx1ZTEhPT0nJyYmam9pblZhbHVlMiE9PScnKXtcclxuICAgICAgICAgICAgICAgIHNhdmVWYWx1ZT1gJHtqb2luVmFsdWUxfSR7Y29uU3RyaW5nfSR7am9pblZhbHVlMn1gXHJcbiAgICAgICAgICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgICAgIC8v5paw6KaPL+abtOaWsC/kuIDopqfkv53lrZjmiJDlip/lvozjga7ku6XlpJbjga5ldmVudOOBp1BVVOS9v+eUqOOBl+OBquOBhO+8mlxyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LnR5cGUuaW5jbHVkZXMoJ3N1Y2Nlc3MnKSl7XHJcbiAgICAgICAgICAgICAgICAgLy/kv53lrZjlhYjjg5XjgqPjg7zjg6vjg4njgavlgKTjgrvjg4Pjg4jvvJpcclxuICAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5zYXZlRmllbGQuY29kZV0udmFsdWU9c2F2ZVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgIHdpbmRvdy5hbGVydChcIuaWh+Wtl+e1kOWQiOihjOOBhOOBvuOBl+OBn+OAglwiK3RoaXMucHJvcHMuam9pbkZpZWxkMS5uYW1lK1wiOlwiK2pvaW5WYWx1ZTErXCIsXCIrdGhpcy5wcm9wcy5qb2luRmllbGQyLm5hbWUrXCI6XCIram9pblZhbHVlMitcIuOAglwiKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXM9e1xyXG4gICAgICAgICAgICAgICAgICAgIFwiYXBwXCI6ZXZlbnQuYXBwSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJpZFwiOmV2ZW50LnJlY29yZElkLFxyXG4gICAgICAgICAgICAgICAgICAgIFwicmVjb3JkXCI6e1t0aGlzLnByb3BzLnNhdmVGaWVsZC5jb2RlXTp7XCJ2YWx1ZVwiOnNhdmVWYWx1ZX19XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGtpbnRvbmUuYXBpKGtpbnRvbmUuYXBpLnVybCgnL2svdjEvcmVjb3JkJyx0cnVlKSwnUFVUJyxwYXJhbXMpLnRoZW4oKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvL2tpbnRvbmXkv53lrZjlhYjjg5XjgqPjg7zjg6vjg4nlrZjlnKjnorroqo3vvJpcclxuICAgICAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5zYXZlRmllbGQuY29kZV0udmFsdWU9c2F2ZVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC50eXBlLmluY2x1ZGVzKCdpbmRleCcpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0KFwi5paH5a2X57WQ5ZCI6KGM44GE44G+44GX44Gf44CCXCIrdGhpcy5wcm9wcy5qb2luRmllbGQxLm5hbWUrXCI6XCIram9pblZhbHVlMStcIixcIit0aGlzLnByb3BzLmpvaW5GaWVsZDIubmFtZStcIjpcIitqb2luVmFsdWUyK1wi44CC5LiA6Kan55S76Z2i5pu05paw5oiQ5Yqf5b6M6Ieq5YuV44Oq44Ot44O844OJ44GX44G+44Gb44KT44CC5b+F6KaB44Gr5b+c44GY44Gm5omL5YuV44Oq44Ot44O844OJ44GP44Gg44GV44GE44CCXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWxlcnQoXCLmloflrZfntZDlkIjooYzjgYTjgb7jgZfjgZ/jgIJcIit0aGlzLnByb3BzLmpvaW5GaWVsZDEubmFtZStcIjpcIitqb2luVmFsdWUxK1wiLFwiK3RoaXMucHJvcHMuam9pbkZpZWxkMi5uYW1lK1wiOlwiK2pvaW5WYWx1ZTIrXCLjgIJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+S4gOimp+eUu+mdouabtOaWsOaIkOWKn+W+jOODquODreODvOODie+8mlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIChldmVudC50eXBlLmluY2x1ZGVzKCdpbmRleCcpKXtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgZXZlbnQudXJsID0gbG9jYXRpb24uaHJlZi5lbmRzV2l0aCgnLycpIHx8IGxvY2F0aW9uLmhyZWYuZW5kc1dpdGgoJyYnKSA/XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGxvY2F0aW9uLmhyZWYuc2xpY2UoMCwgLTEpIDpcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgbG9jYXRpb24uaHJlZiArIChsb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnLycpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmVycm9yID0gJ+OCqOODqeODvOOBjOeZuueUn+OBl+OBvuOBl+OBn+OAgue1kOWQiOOBl+OBvuOBm+OCk+OAguOCt+OCueODhuODoOeuoeeQhuiAheOBuOOBiuWVj+WQiOOBm+OBj+OBoOOBleOBhCc7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0KGV2ZW50LmVycm9yK1wiZXJyb3IgbWVzc2FnZe+8mlwiK2Vycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXs7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50eXBlLmluY2x1ZGVzKCdzdWNjZXNzJykpe1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0KFwiW3dpbmRvd3MgYWxlcnRd77ya5Yem55CG5Lit55Ww5bi444GM55m655Sf44GX44G+44GX44Gf44CC57WQ5ZCI44GX44G+44Gb44KT44CC44K344K544OG44Og5ouF5b2T6ICF44G444GK5ZWP5ZCI44Gb44GP44Gg44GV44GE44CCZXJyb3Ljg6Hjg4Pjgrvjg7zjgrjvvJpcIitlcnJvcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBldmVudC5lcnJvcj1cIlvjgqjjg6njg7zjg6Hjg4Pjgrvjg7zjgrhd77ya5Yem55CG5Lit55Ww5bi444GM55m655Sf44GX44G+44GX44Gf44CC57WQ5ZCI44GX44G+44Gb44KT44CC44K344K544OG44Og5ouF5b2T6ICF44G444GK5ZWP5ZCI44Gb44GP44Gg44GV44GE44CCZXJyb3Ljg6Hjg4Pjgrvjg7zjgrjvvJpcIitlcnJvcjtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IFN0cmluZ0pvaW5BY3Rpb24oKTsiLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyAgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQsIElDb250ZXh0IH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcblxyXG4vL+OCr+ODqeOCueWQjeOCkuioreioiOabuOOBq+aPg+OBiOOCi1xyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5bGe5oCn5a6a576pXHJcbiAqL1xyXG4gICAgaW50ZXJmYWNlIEZ1bGxXaWR0aFByb3Bze1xyXG4gICAgICAgIC8vY2hlY2tPcHRpb246QXJyYXk8c3RyaW5nPixcclxuICAgICAgICBmaWVsZDpJRmllbGRcclxuICAgIH1cclxuLyoqXHJcbiAqIOWFqOinkuODgeOCp+ODg+OCr+OCouOCr+OCt+ODp+ODs1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEZ1bGxXaWR0aEFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczpGdWxsV2lkdGhQcm9wcztcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5uYW1lPVwi5YWo6KeS44OB44Kn44OD44KvXCI7IC8qIHBnYWRtaW7jga5uYW1l44Go5ZCM5qeYICAqL1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIC8vY2hlY2tPcHRpb246W10sXHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL+OCouOCr+OCt+ODp+ODs+OCkueZu+mMsuOBmeOCi1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog44Ki44Kv44K344On44Oz44Gu5a6f6KGM44KS5ZG844Gz5Ye644GZXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTm9kZVxyXG4gICAgICogQHBhcmFtIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6SUFjdGlvbk5vZGUsZXZlbnQ6YW55LGNvbnRleHQ6SUNvbnRleHQpOlByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgICAgIGxldCByZXN1bHQ9e1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDpmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL+WxnuaAp+ioreWumuOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzPWFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcbiAgICAgICAgICAgIGlmICghKCdmaWVsZCcgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgRnVsbFdpZHRoUHJvcHM7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu25byP44Gu6KiI566X57WQ5p6c44KS5Y+W5b6XXHJcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGV2ZW50LnJlY29yZDtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXT8udmFsdWU7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu25YiG5bKQXHJcbiAgICAgICAgICAgIC8v5pyq5YWl5Yqb5pmC44Gv5L2V44KC5Yem55CG44KS44Gb44Ga57WC5LqGXHJcbiAgICAgICAgICAgIGlmKHZhbHVlPT09dW5kZWZpbmVkIHx8IHZhbHVlPT09Jycpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL+WNiuinkuOBjOWQq+OBvuOCjOOBpuOBhOOBn+WgtOWQiHJlc3VsdOOBjGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNvbnRhaW5zRnVsbFdpZHRoQ2hhcnModmFsdWUpKXtcclxuICAgICAgICAgICAgICAgIC8v44Ko44Op44O85pmC44Gr5Ye65Yqb44GV44KM44KL5paH5a2X6Kit5a6aXHJcbiAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5lcnJvcj1cIuWNiuinkuOBjOWQq+OBvuOCjOOBpuOBhOOBvuOBmVwiO1xyXG4gICAgICAgICAgICAgICAgLy/mrKHjga7lh6bnkIbjgpLkuK3mraLjgZnjgovlgKToqK3lrppcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PWZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3Jlc3VsdOODl+ODreODkeODhuOCo+aMh+WumlxyXG4gICAgICAgICAgICByZXN1bHQ9IHtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcblxyXG4gICAgICAgIC8v5L6L5aSW5Yem55CGXHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3I9ZXJyb3I7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuTmV4dD1mYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyDlhajjgablhajop5Ljga7mloflrZfliJfjga7loLTlkIjjga90cnVl44CB44Gd44GG44Gn44Gq44GE5aC05ZCI44GvZmFsc2VcclxuICAgIGNvbnRhaW5zRnVsbFdpZHRoQ2hhcnModGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XHJcblxyXG4gICAgICAgIC8vIOWNiuinkuiLseaVsOWtl+OCq+ODiuiomOWPt+OCkumZpOWkllxyXG4gICAgICAgIGNvbnN0IGNoZWNrUmVnZXg9XCJeW15cXHgwMS1cXHg3RVxcdUZGNjEtXFx1RkY5Rl0rJFwiO1xyXG5cclxuICAgICAgICAvL+ato+imj+ihqOePvuOCquODluOCuOOCp+OCr+ODiOeUn+aIkFxyXG4gICAgICAgIGNvbnN0IGZ1bGxXaWR0aFJlZ2V4ID0gbmV3IFJlZ0V4cChjaGVja1JlZ2V4KTtcclxuXHJcbiAgICAgICAgLy/mraPopo/ooajnj77jg4Hjgqfjg4Pjgq9cclxuICAgICAgICByZXR1cm4gZnVsbFdpZHRoUmVnZXgudGVzdCh0ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICAvL+aIu+OCiuWApOOCkuaMgeOBn+OBquOBhOOBn+OCgXZvaWTlnotcclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IEZ1bGxXaWR0aEFjdGlvbigpOyIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7ICBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZCwgSUNvbnRleHQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuXHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbiAgICBpbnRlcmZhY2UgSGFsZldpZHRoUHJvcHN7XHJcbiAgICAgICAgZmllbGQ6SUZpZWxkXHJcbiAgICB9XHJcbi8qKlxyXG4gKiDljYrop5Ljg4Hjgqfjg4Pjgq/jgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBIYWxmV2lkdGhBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SGFsZldpZHRoUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuWNiuinkuODgeOCp+ODg+OCr1wiOyAvKiBwZ2FkbWlu44GubmFtZeOBqOWQjOanmCAgKi9cclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBmaWVsZDp7Y29kZTonJ31cclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGVcclxuICAgICAqIEBwYXJhbSBldmVudFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIEhhbGZXaWR0aFByb3BzO1xyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBruioiOeul+e1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAvL+adoeS7tuWIhuWykFxyXG4gICAgICAgICAgICAvL+acquWFpeWKm+aZguOBr+S9leOCguWHpueQhuOCkuOBm+OBmue1guS6hlxyXG4gICAgICAgICAgICBpZih2YWx1ZT09PXVuZGVmaW5lZCB8fCB2YWx1ZT09PScnKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy/lhajop5LjgYzlkKvjgb7jgozjgabjgYTjgZ/loLTlkIjkv53lrZjlh6bnkIbkuK3mraIo44Ko44Op44O85Yem55CGKVxyXG4gICAgICAgICAgICBpZighdGhpcy5jb250YWluc0hhbGZXaWR0aENoYXJzKHZhbHVlKSl7XHJcbiAgICAgICAgICAgICAgICAvL+OCqOODqeODvOaZguOBq+WHuuWKm+OBleOCjOOCi+aWh+Wtl+ioreWumlxyXG4gICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3I9XCLlhajop5LjgYzlkKvjgb7jgozjgabjgYTjgb7jgZlcIjtcclxuICAgICAgICAgICAgICAgIC8v5qyh44Gu5Yem55CG44KS5Lit5q2i44GZ44KL5YCk6Kit5a6aXHJcbiAgICAgICAgICAgICAgICByZXN1bHQuY2FuTmV4dD1mYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy/ljYrop5Ljga7loLTlkIjllY/poYzjgarjgY/lrp/ooYxcclxuICAgICAgICAgICAgLy9yZXN1bHTjg5fjg63jg5Hjg4bjgqPmjIflrppcclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OnRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIC8v5L6L5aSW5Yem55CGXHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3I9ZXJyb3I7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuTmV4dD1mYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyDlhajjgablhajop5Ljga7mloflrZfliJfjga7loLTlkIjjga90cnVl44CB44Gd44GG44Gn44Gq44GE5aC05ZCI44GvZmFsc2VcclxuICAgIGNvbnRhaW5zSGFsZldpZHRoQ2hhcnModGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNoZWNrUmVnZXggPSBcIl5bXFx4MDEtXFx4N0VcXHVGRjYxLVxcdUZGOUZdKyRcIjtcclxuICAgICAgICAvL+ato+imj+ihqOePvuOCquODluOCuOOCp+OCr+ODiOeUn+aIkFxyXG4gICAgICAgIGNvbnN0IGhhbGZXaWR0aFJlZ2V4ID0gbmV3IFJlZ0V4cChjaGVja1JlZ2V4KTtcclxuXHJcbiAgICAgICAgLy/mraPopo/ooajnj77jg4Hjgqfjg4Pjgq9cclxuICAgICAgICByZXR1cm4gaGFsZldpZHRoUmVnZXgudGVzdCh0ZXh0KTtcclxuICAgIH1cclxuICAgIC8v5oi744KK5YCk44KS5oyB44Gf44Gq44GE44Gf44KBdm9pZOWei1xyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxufVxyXG5uZXcgSGFsZldpZHRoQWN0aW9uKCk7IiwiaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgSUZpZWxkLElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSxJQ29udGV4dCxJVmFyTmFtZX0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8v5Y+zVUnnlLvpnaJwcm9wZXJ0eeOBrm5hbWU65Z6L77yaXHJcbmludGVyZmFjZSBJTG9naW5Vc2VyR2V0dGVyUHJvcHN7XHJcbiAgICAvL+WkieaVsOWQjeOBq+OCu+ODg+ODiO+8muWApOOBjOOCquODluOCuOOCp+OCr+ODiOOBruW9ouW8j1xyXG4gICAgdmVyTmFtZTpJVmFyTmFtZTtcclxufVxyXG4vL0lBY3Rpb27jgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjgpLlrp/oo4XjgZnjgovmlrDjgZfjgYTjgq/jg6njgrlBY3Rpb27jgpLkvZzmiJDvvJpcclxuZXhwb3J0IGNsYXNzIExvZ2luVXNlckdldHRlckFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICAvL2ltcG9ydOOBi+OCieWwjuWFpemhleekuuWumue+qVxyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgLy/kuIrmlrnjga5pbnRlcmZhY2UgUHJvcHPjgYvjgonjgIFwcm9wc+WPl+OBkeOCi+WxnuaAp+OCkuWumue+qe+8mlxyXG4gICAgcHJvcHM6SUxvZ2luVXNlckdldHRlclByb3BzO1xyXG4gICAgLy/plqLmlbDlrprnvqnjgavlv4XopoHjgarpoZ7lkI3jgpLmp4vnr4nvvJpcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgLy9wZ0FkbWluRELjgavnmbvpjLLjgZfjgZ/jgqLjgq/jgrfjg6fjg7PlkI0obmFtZS9zdWJ0aXRsZSnkuIDoh7TjgZnjgovlv4XopoHjgYzjgYLjgovvvJpcclxuICAgICAgICB0aGlzLm5hbWU9XCLjg63jgrDjgqTjg7Pjg6bjg7zjgrbjg7zlj5blvpdcIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgICAgICAvL+ODl+ODreODkeODhuOCo+WxnuaAp+WIneacn+WMlu+8mlxyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICB2ZXJOYW1lOntuYW1lOicnfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL+ODquOCu+ODg+ODiOS4iuiomOeZu+mMsuihqO+8mlxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWHpueQhuOCkuWun+ijheOBmeOCi1xyXG4gKiBAcGFyYW0gYWN0aW9uTm9kZSDjgqLjgq/jgrfjg6fjg7Pjg47jg7zjg4lcclxuICogQHBhcmFtIGV2ZW50IEtpbnRvbmXjga7jgqTjg5njg7Pjg4hcclxuICogQHBhcmFtIGNvbnRleHQg44Kz44Oz44OG44Kt44K544OI77yI44Os44Kz44O844OJ44CB5aSJ5pWw5oOF5aCx44KS5oyB44Gj44Gm44GE44KL77yJXHJcbiAqIEByZXR1cm5zIFxyXG4gKi9cclxu44CA44CALy/pnZ7lkIzmnJ/lh6bnkIbjgYLjgovplqLmlbDkuIvjga7jgYLjgovlsZ7mgKfvvJpcclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KL77yaXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgLy/jg5fjg63jg5Hjg4bjgqPoqK3lrprjga7jg4fjg7zjgr/lnovjga/lv4XopoHjgarmg4XloLHlkKvjgoHjgb7jgZnjgYvvvJ/lhajpg6jkuI3lrZjlnKjmmYJyZXR1cm46XHJcbiAgICAgICAgICAgIGlmICghKCd2ZXJOYW1lJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8v5pei5a6a44Gu44OX44Ot44OR44OG44Kj44Gu44Kk44Oz44K/44OV44Kn44O844K544G45aSJ5o+b77yaXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElMb2dpblVzZXJHZXR0ZXJQcm9wcztcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgICAgaWYodGhpcy5wcm9wcy52ZXJOYW1lJiZ0aGlzLnByb3BzLnZlck5hbWUubmFtZSE9PScnKXtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXT1raW50b25lLmdldExvZ2luVXNlcigpO1xyXG4gICAgICAgICAgICAgICAgLy8gd2luZG93LmFsZXJ0KFwi5aSJ5pWw5ZCNXCIrdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWUrXCLjga7lgKTjga9cIitjb250ZXh0LnZhcmlhYmxlc1t0aGlzLnByb3BzLnZlck5hbWUubmFtZV0rXCLjgafjgZlcIik7XHJcbiAgICAgICAgICAgICAgICAvLyBldmVudC5yZWNvcmRbXCLlpInmlbDpgYvnlKjlhYjjga7jg6bjg7zjgrbpgbjmip7jg5XjgqPjg7zjg6vjg4lcIl0udmFsdWU9IFt7Y29kZTpjb250ZXh0LnZhcmlhYmxlc1t0aGlzLnByb3BzLnZlck5hbWUubmFtZV0uY29kZX1dO1xyXG4gICAgICAgICAgICB9XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OnRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgIH1jYXRjaChlcnJvcjphbnkpeztcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3I9ZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IExvZ2luVXNlckdldHRlckFjdGlvbigpOyIsIi8qIVxuICAqIEJvb3RzdHJhcCBkYXRhLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5EYXRhID0gZmFjdG9yeSgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIGRvbS9kYXRhLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAvKipcbiAgICogQ29uc3RhbnRzXG4gICAqL1xuXG4gIGNvbnN0IGVsZW1lbnRNYXAgPSBuZXcgTWFwKCk7XG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgc2V0KGVsZW1lbnQsIGtleSwgaW5zdGFuY2UpIHtcbiAgICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudE1hcC5zZXQoZWxlbWVudCwgbmV3IE1hcCgpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudCk7XG5cbiAgICAgIC8vIG1ha2UgaXQgY2xlYXIgd2Ugb25seSB3YW50IG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudFxuICAgICAgLy8gY2FuIGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBtdWx0aXBsZSBrZXkvaW5zdGFuY2VzIGFyZSBmaW5lIHRvIGJlIHVzZWRcbiAgICAgIGlmICghaW5zdGFuY2VNYXAuaGFzKGtleSkgJiYgaW5zdGFuY2VNYXAuc2l6ZSAhPT0gMCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKGBCb290c3RyYXAgZG9lc24ndCBhbGxvdyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIHBlciBlbGVtZW50LiBCb3VuZCBpbnN0YW5jZTogJHtBcnJheS5mcm9tKGluc3RhbmNlTWFwLmtleXMoKSlbMF19LmApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpbnN0YW5jZU1hcC5zZXQoa2V5LCBpbnN0YW5jZSk7XG4gICAgfSxcbiAgICBnZXQoZWxlbWVudCwga2V5KSB7XG4gICAgICBpZiAoZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpLmdldChrZXkpIHx8IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZShlbGVtZW50LCBrZXkpIHtcbiAgICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KTtcbiAgICAgIGluc3RhbmNlTWFwLmRlbGV0ZShrZXkpO1xuXG4gICAgICAvLyBmcmVlIHVwIGVsZW1lbnQgcmVmZXJlbmNlcyBpZiB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIGxlZnQgZm9yIGFuIGVsZW1lbnRcbiAgICAgIGlmIChpbnN0YW5jZU1hcC5zaXplID09PSAwKSB7XG4gICAgICAgIGVsZW1lbnRNYXAuZGVsZXRlKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gZGF0YTtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YS5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBpbmRleC5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5JbmRleCA9IHt9KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgdXRpbC9pbmRleC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgY29uc3QgTUFYX1VJRCA9IDEwMDAwMDA7XG4gIGNvbnN0IE1JTExJU0VDT05EU19NVUxUSVBMSUVSID0gMTAwMDtcbiAgY29uc3QgVFJBTlNJVElPTl9FTkQgPSAndHJhbnNpdGlvbmVuZCc7XG5cbiAgLyoqXG4gICAqIFByb3Blcmx5IGVzY2FwZSBJRHMgc2VsZWN0b3JzIHRvIGhhbmRsZSB3ZWlyZCBJRHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBjb25zdCBwYXJzZVNlbGVjdG9yID0gc2VsZWN0b3IgPT4ge1xuICAgIGlmIChzZWxlY3RvciAmJiB3aW5kb3cuQ1NTICYmIHdpbmRvdy5DU1MuZXNjYXBlKSB7XG4gICAgICAvLyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yIG5lZWRzIGVzY2FwaW5nIHRvIGhhbmRsZSBJRHMgKGh0bWw1KykgY29udGFpbmluZyBmb3IgaW5zdGFuY2UgL1xuICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5yZXBsYWNlKC8jKFteXFxzXCIjJ10rKS9nLCAobWF0Y2gsIGlkKSA9PiBgIyR7Q1NTLmVzY2FwZShpZCl9YCk7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RvcjtcbiAgfTtcblxuICAvLyBTaG91dC1vdXQgQW5ndXMgQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcbiAgY29uc3QgdG9UeXBlID0gb2JqZWN0ID0+IHtcbiAgICBpZiAob2JqZWN0ID09PSBudWxsIHx8IG9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYCR7b2JqZWN0fWA7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKTtcbiAgfTtcblxuICAvKipcbiAgICogUHVibGljIFV0aWwgQVBJXG4gICAqL1xuXG4gIGNvbnN0IGdldFVJRCA9IHByZWZpeCA9PiB7XG4gICAgZG8ge1xuICAgICAgcHJlZml4ICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE1BWF9VSUQpO1xuICAgIH0gd2hpbGUgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByZWZpeCkpO1xuICAgIHJldHVybiBwcmVmaXg7XG4gIH07XG4gIGNvbnN0IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvLyBHZXQgdHJhbnNpdGlvbi1kdXJhdGlvbiBvZiB0aGUgZWxlbWVudFxuICAgIGxldCB7XG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICB0cmFuc2l0aW9uRGVsYXlcbiAgICB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KTtcblxuICAgIC8vIFJldHVybiAwIGlmIGVsZW1lbnQgb3IgdHJhbnNpdGlvbiBkdXJhdGlvbiBpcyBub3QgZm91bmRcbiAgICBpZiAoIWZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uICYmICFmbG9hdFRyYW5zaXRpb25EZWxheSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLy8gSWYgbXVsdGlwbGUgZHVyYXRpb25zIGFyZSBkZWZpbmVkLCB0YWtlIHRoZSBmaXJzdFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbi5zcGxpdCgnLCcpWzBdO1xuICAgIHRyYW5zaXRpb25EZWxheSA9IHRyYW5zaXRpb25EZWxheS5zcGxpdCgnLCcpWzBdO1xuICAgIHJldHVybiAoTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkR1cmF0aW9uKSArIE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSkpICogTUlMTElTRUNPTkRTX01VTFRJUExJRVI7XG4gIH07XG4gIGNvbnN0IHRyaWdnZXJUcmFuc2l0aW9uRW5kID0gZWxlbWVudCA9PiB7XG4gICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChUUkFOU0lUSU9OX0VORCkpO1xuICB9O1xuICBjb25zdCBpc0VsZW1lbnQgPSBvYmplY3QgPT4ge1xuICAgIGlmICghb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqZWN0LmpxdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9iamVjdCA9IG9iamVjdFswXTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3Qubm9kZVR5cGUgIT09ICd1bmRlZmluZWQnO1xuICB9O1xuICBjb25zdCBnZXRFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgICAvLyBpdCdzIGEgalF1ZXJ5IG9iamVjdCBvciBhIG5vZGUgZWxlbWVudFxuICAgIGlmIChpc0VsZW1lbnQob2JqZWN0KSkge1xuICAgICAgcmV0dXJuIG9iamVjdC5qcXVlcnkgPyBvYmplY3RbMF0gOiBvYmplY3Q7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJyAmJiBvYmplY3QubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGFyc2VTZWxlY3RvcihvYmplY3QpKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIGNvbnN0IGlzVmlzaWJsZSA9IGVsZW1lbnQgPT4ge1xuICAgIGlmICghaXNFbGVtZW50KGVsZW1lbnQpIHx8IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudElzVmlzaWJsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAndmlzaWJsZSc7XG4gICAgLy8gSGFuZGxlIGBkZXRhaWxzYCBlbGVtZW50IGFzIGl0cyBjb250ZW50IG1heSBmYWxzaWUgYXBwZWFyIHZpc2libGUgd2hlbiBpdCBpcyBjbG9zZWRcbiAgICBjb25zdCBjbG9zZWREZXRhaWxzID0gZWxlbWVudC5jbG9zZXN0KCdkZXRhaWxzOm5vdChbb3Blbl0pJyk7XG4gICAgaWYgKCFjbG9zZWREZXRhaWxzKSB7XG4gICAgICByZXR1cm4gZWxlbWVudElzVmlzaWJsZTtcbiAgICB9XG4gICAgaWYgKGNsb3NlZERldGFpbHMgIT09IGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHN1bW1hcnkgPSBlbGVtZW50LmNsb3Nlc3QoJ3N1bW1hcnknKTtcbiAgICAgIGlmIChzdW1tYXJ5ICYmIHN1bW1hcnkucGFyZW50Tm9kZSAhPT0gY2xvc2VkRGV0YWlscykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoc3VtbWFyeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50SXNWaXNpYmxlO1xuICB9O1xuICBjb25zdCBpc0Rpc2FibGVkID0gZWxlbWVudCA9PiB7XG4gICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50LmRpc2FibGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGVsZW1lbnQuZGlzYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSAhPT0gJ2ZhbHNlJztcbiAgfTtcbiAgY29uc3QgZmluZFNoYWRvd1Jvb3QgPSBlbGVtZW50ID0+IHtcbiAgICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuICAgIGlmICh0eXBlb2YgZWxlbWVudC5nZXRSb290Tm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3Qgcm9vdCA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcbiAgICAgIHJldHVybiByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBudWxsO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8vIHdoZW4gd2UgZG9uJ3QgZmluZCBhIHNoYWRvdyByb290XG4gICAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKTtcbiAgfTtcbiAgY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBUcmljayB0byByZXN0YXJ0IGFuIGVsZW1lbnQncyBhbmltYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy5jaGFyaXN0aGVvLmlvL2Jsb2cvMjAyMS8wMi9yZXN0YXJ0LWEtY3NzLWFuaW1hdGlvbi13aXRoLWphdmFzY3JpcHQvI3Jlc3RhcnRpbmctYS1jc3MtYW5pbWF0aW9uXG4gICAqL1xuICBjb25zdCByZWZsb3cgPSBlbGVtZW50ID0+IHtcbiAgICBlbGVtZW50Lm9mZnNldEhlaWdodDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgfTtcbiAgY29uc3QgZ2V0alF1ZXJ5ID0gKCkgPT4ge1xuICAgIGlmICh3aW5kb3cualF1ZXJ5ICYmICFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgnZGF0YS1icy1uby1qcXVlcnknKSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5qUXVlcnk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuICBjb25zdCBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzID0gW107XG4gIGNvbnN0IG9uRE9NQ29udGVudExvYWRlZCA9IGNhbGxiYWNrID0+IHtcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICAvLyBhZGQgbGlzdGVuZXIgb24gdGhlIGZpcnN0IGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgaXMgaW4gbG9hZGluZyBzdGF0ZVxuICAgICAgaWYgKCFET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcykge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGlzUlRMID0gKCkgPT4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PT0gJ3J0bCc7XG4gIGNvbnN0IGRlZmluZUpRdWVyeVBsdWdpbiA9IHBsdWdpbiA9PiB7XG4gICAgb25ET01Db250ZW50TG9hZGVkKCgpID0+IHtcbiAgICAgIGNvbnN0ICQgPSBnZXRqUXVlcnkoKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCQpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHBsdWdpbi5OQU1FO1xuICAgICAgICBjb25zdCBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkLmZuW25hbWVdO1xuICAgICAgICAkLmZuW25hbWVdID0gcGx1Z2luLmpRdWVyeUludGVyZmFjZTtcbiAgICAgICAgJC5mbltuYW1lXS5Db25zdHJ1Y3RvciA9IHBsdWdpbjtcbiAgICAgICAgJC5mbltuYW1lXS5ub0NvbmZsaWN0ID0gKCkgPT4ge1xuICAgICAgICAgICQuZm5bbmFtZV0gPSBKUVVFUllfTk9fQ09ORkxJQ1Q7XG4gICAgICAgICAgcmV0dXJuIHBsdWdpbi5qUXVlcnlJbnRlcmZhY2U7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGV4ZWN1dGUgPSAocG9zc2libGVDYWxsYmFjaywgYXJncyA9IFtdLCBkZWZhdWx0VmFsdWUgPSBwb3NzaWJsZUNhbGxiYWNrKSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiBwb3NzaWJsZUNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gcG9zc2libGVDYWxsYmFjayguLi5hcmdzKSA6IGRlZmF1bHRWYWx1ZTtcbiAgfTtcbiAgY29uc3QgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiA9IChjYWxsYmFjaywgdHJhbnNpdGlvbkVsZW1lbnQsIHdhaXRGb3JUcmFuc2l0aW9uID0gdHJ1ZSkgPT4ge1xuICAgIGlmICghd2FpdEZvclRyYW5zaXRpb24pIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkdXJhdGlvblBhZGRpbmcgPSA1O1xuICAgIGNvbnN0IGVtdWxhdGVkRHVyYXRpb24gPSBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0cmFuc2l0aW9uRWxlbWVudCkgKyBkdXJhdGlvblBhZGRpbmc7XG4gICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoe1xuICAgICAgdGFyZ2V0XG4gICAgfSkgPT4ge1xuICAgICAgaWYgKHRhcmdldCAhPT0gdHJhbnNpdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIHRyYW5zaXRpb25FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpO1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgfTtcbiAgICB0cmFuc2l0aW9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIHRyaWdnZXJUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25FbGVtZW50KTtcbiAgICAgIH1cbiAgICB9LCBlbXVsYXRlZER1cmF0aW9uKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBwcmV2aW91cy9uZXh0IGVsZW1lbnQgb2YgYSBsaXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5fSBsaXN0ICAgIFRoZSBsaXN0IG9mIGVsZW1lbnRzXG4gICAqIEBwYXJhbSBhY3RpdmVFbGVtZW50ICAgVGhlIGFjdGl2ZSBlbGVtZW50XG4gICAqIEBwYXJhbSBzaG91bGRHZXROZXh0ICAgQ2hvb3NlIHRvIGdldCBuZXh0IG9yIHByZXZpb3VzIGVsZW1lbnRcbiAgICogQHBhcmFtIGlzQ3ljbGVBbGxvd2VkXG4gICAqIEByZXR1cm4ge0VsZW1lbnR8ZWxlbX0gVGhlIHByb3BlciBlbGVtZW50XG4gICAqL1xuICBjb25zdCBnZXROZXh0QWN0aXZlRWxlbWVudCA9IChsaXN0LCBhY3RpdmVFbGVtZW50LCBzaG91bGRHZXROZXh0LCBpc0N5Y2xlQWxsb3dlZCkgPT4ge1xuICAgIGNvbnN0IGxpc3RMZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICBsZXQgaW5kZXggPSBsaXN0LmluZGV4T2YoYWN0aXZlRWxlbWVudCk7XG5cbiAgICAvLyBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlzdCByZXR1cm4gYW4gZWxlbWVudFxuICAgIC8vIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIGFuZCBpZiBjeWNsZSBpcyBhbGxvd2VkXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuICFzaG91bGRHZXROZXh0ICYmIGlzQ3ljbGVBbGxvd2VkID8gbGlzdFtsaXN0TGVuZ3RoIC0gMV0gOiBsaXN0WzBdO1xuICAgIH1cbiAgICBpbmRleCArPSBzaG91bGRHZXROZXh0ID8gMSA6IC0xO1xuICAgIGlmIChpc0N5Y2xlQWxsb3dlZCkge1xuICAgICAgaW5kZXggPSAoaW5kZXggKyBsaXN0TGVuZ3RoKSAlIGxpc3RMZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBsaXN0W01hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBsaXN0TGVuZ3RoIC0gMSkpXTtcbiAgfTtcblxuICBleHBvcnRzLmRlZmluZUpRdWVyeVBsdWdpbiA9IGRlZmluZUpRdWVyeVBsdWdpbjtcbiAgZXhwb3J0cy5leGVjdXRlID0gZXhlY3V0ZTtcbiAgZXhwb3J0cy5leGVjdXRlQWZ0ZXJUcmFuc2l0aW9uID0gZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbjtcbiAgZXhwb3J0cy5maW5kU2hhZG93Um9vdCA9IGZpbmRTaGFkb3dSb290O1xuICBleHBvcnRzLmdldEVsZW1lbnQgPSBnZXRFbGVtZW50O1xuICBleHBvcnRzLmdldE5leHRBY3RpdmVFbGVtZW50ID0gZ2V0TmV4dEFjdGl2ZUVsZW1lbnQ7XG4gIGV4cG9ydHMuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQgPSBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudDtcbiAgZXhwb3J0cy5nZXRVSUQgPSBnZXRVSUQ7XG4gIGV4cG9ydHMuZ2V0alF1ZXJ5ID0gZ2V0alF1ZXJ5O1xuICBleHBvcnRzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICBleHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbiAgZXhwb3J0cy5pc1JUTCA9IGlzUlRMO1xuICBleHBvcnRzLmlzVmlzaWJsZSA9IGlzVmlzaWJsZTtcbiAgZXhwb3J0cy5ub29wID0gbm9vcDtcbiAgZXhwb3J0cy5vbkRPTUNvbnRlbnRMb2FkZWQgPSBvbkRPTUNvbnRlbnRMb2FkZWQ7XG4gIGV4cG9ydHMucGFyc2VTZWxlY3RvciA9IHBhcnNlU2VsZWN0b3I7XG4gIGV4cG9ydHMucmVmbG93ID0gcmVmbG93O1xuICBleHBvcnRzLnRvVHlwZSA9IHRvVHlwZTtcbiAgZXhwb3J0cy50cmlnZ2VyVHJhbnNpdGlvbkVuZCA9IHRyaWdnZXJUcmFuc2l0aW9uRW5kO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBldmVudC1oYW5kbGVyLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi4vdXRpbC9pbmRleC5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL3V0aWwvaW5kZXgnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuRXZlbnRIYW5kbGVyID0gZmFjdG9yeShnbG9iYWwuSW5kZXgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoaW5kZXhfanMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgZG9tL2V2ZW50LWhhbmRsZXIuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIENvbnN0YW50c1xuICAgKi9cblxuICBjb25zdCBuYW1lc3BhY2VSZWdleCA9IC9bXi5dKig/PVxcLi4qKVxcLnwuKi87XG4gIGNvbnN0IHN0cmlwTmFtZVJlZ2V4ID0gL1xcLi4qLztcbiAgY29uc3Qgc3RyaXBVaWRSZWdleCA9IC86OlxcZCskLztcbiAgY29uc3QgZXZlbnRSZWdpc3RyeSA9IHt9OyAvLyBFdmVudHMgc3RvcmFnZVxuICBsZXQgdWlkRXZlbnQgPSAxO1xuICBjb25zdCBjdXN0b21FdmVudHMgPSB7XG4gICAgbW91c2VlbnRlcjogJ21vdXNlb3ZlcicsXG4gICAgbW91c2VsZWF2ZTogJ21vdXNlb3V0J1xuICB9O1xuICBjb25zdCBuYXRpdmVFdmVudHMgPSBuZXcgU2V0KFsnY2xpY2snLCAnZGJsY2xpY2snLCAnbW91c2V1cCcsICdtb3VzZWRvd24nLCAnY29udGV4dG1lbnUnLCAnbW91c2V3aGVlbCcsICdET01Nb3VzZVNjcm9sbCcsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2Vtb3ZlJywgJ3NlbGVjdHN0YXJ0JywgJ3NlbGVjdGVuZCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ29yaWVudGF0aW9uY2hhbmdlJywgJ3RvdWNoc3RhcnQnLCAndG91Y2htb3ZlJywgJ3RvdWNoZW5kJywgJ3RvdWNoY2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJtb3ZlJywgJ3BvaW50ZXJ1cCcsICdwb2ludGVybGVhdmUnLCAncG9pbnRlcmNhbmNlbCcsICdnZXN0dXJlc3RhcnQnLCAnZ2VzdHVyZWNoYW5nZScsICdnZXN0dXJlZW5kJywgJ2ZvY3VzJywgJ2JsdXInLCAnY2hhbmdlJywgJ3Jlc2V0JywgJ3NlbGVjdCcsICdzdWJtaXQnLCAnZm9jdXNpbicsICdmb2N1c291dCcsICdsb2FkJywgJ3VubG9hZCcsICdiZWZvcmV1bmxvYWQnLCAncmVzaXplJywgJ21vdmUnLCAnRE9NQ29udGVudExvYWRlZCcsICdyZWFkeXN0YXRlY2hhbmdlJywgJ2Vycm9yJywgJ2Fib3J0JywgJ3Njcm9sbCddKTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBtZXRob2RzXG4gICAqL1xuXG4gIGZ1bmN0aW9uIG1ha2VFdmVudFVpZChlbGVtZW50LCB1aWQpIHtcbiAgICByZXR1cm4gdWlkICYmIGAke3VpZH06OiR7dWlkRXZlbnQrK31gIHx8IGVsZW1lbnQudWlkRXZlbnQgfHwgdWlkRXZlbnQrKztcbiAgfVxuICBmdW5jdGlvbiBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpIHtcbiAgICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoZWxlbWVudCk7XG4gICAgZWxlbWVudC51aWRFdmVudCA9IHVpZDtcbiAgICBldmVudFJlZ2lzdHJ5W3VpZF0gPSBldmVudFJlZ2lzdHJ5W3VpZF0gfHwge307XG4gICAgcmV0dXJuIGV2ZW50UmVnaXN0cnlbdWlkXTtcbiAgfVxuICBmdW5jdGlvbiBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIGh5ZHJhdGVPYmooZXZlbnQsIHtcbiAgICAgICAgZGVsZWdhdGVUYXJnZXQ6IGVsZW1lbnRcbiAgICAgIH0pO1xuICAgICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgZm4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZuLmFwcGx5KGVsZW1lbnQsIFtldmVudF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgc2VsZWN0b3IsIGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGRvbUVsZW1lbnRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgICAgIGZvciAobGV0IHtcbiAgICAgICAgdGFyZ2V0XG4gICAgICB9ID0gZXZlbnQ7IHRhcmdldCAmJiB0YXJnZXQgIT09IHRoaXM7IHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlKSB7XG4gICAgICAgIGZvciAoY29uc3QgZG9tRWxlbWVudCBvZiBkb21FbGVtZW50cykge1xuICAgICAgICAgIGlmIChkb21FbGVtZW50ICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoeWRyYXRlT2JqKGV2ZW50LCB7XG4gICAgICAgICAgICBkZWxlZ2F0ZVRhcmdldDogdGFyZ2V0XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICAgICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsIGV2ZW50LnR5cGUsIHNlbGVjdG9yLCBmbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0YXJnZXQsIFtldmVudF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBmaW5kSGFuZGxlcihldmVudHMsIGNhbGxhYmxlLCBkZWxlZ2F0aW9uU2VsZWN0b3IgPSBudWxsKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZXZlbnRzKS5maW5kKGV2ZW50ID0+IGV2ZW50LmNhbGxhYmxlID09PSBjYWxsYWJsZSAmJiBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IgPT09IGRlbGVnYXRpb25TZWxlY3Rvcik7XG4gIH1cbiAgZnVuY3Rpb24gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgY29uc3QgaXNEZWxlZ2F0ZWQgPSB0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZyc7XG4gICAgLy8gVE9ETzogdG9vbHRpcCBwYXNzZXMgYGZhbHNlYCBpbnN0ZWFkIG9mIHNlbGVjdG9yLCBzbyB3ZSBuZWVkIHRvIGNoZWNrXG4gICAgY29uc3QgY2FsbGFibGUgPSBpc0RlbGVnYXRlZCA/IGRlbGVnYXRpb25GdW5jdGlvbiA6IGhhbmRsZXIgfHwgZGVsZWdhdGlvbkZ1bmN0aW9uO1xuICAgIGxldCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQob3JpZ2luYWxUeXBlRXZlbnQpO1xuICAgIGlmICghbmF0aXZlRXZlbnRzLmhhcyh0eXBlRXZlbnQpKSB7XG4gICAgICB0eXBlRXZlbnQgPSBvcmlnaW5hbFR5cGVFdmVudDtcbiAgICB9XG4gICAgcmV0dXJuIFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF07XG4gIH1cbiAgZnVuY3Rpb24gYWRkSGFuZGxlcihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBvbmVPZmYpIHtcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XSA9IG5vcm1hbGl6ZVBhcmFtZXRlcnMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbik7XG5cbiAgICAvLyBpbiBjYXNlIG9mIG1vdXNlZW50ZXIgb3IgbW91c2VsZWF2ZSB3cmFwIHRoZSBoYW5kbGVyIHdpdGhpbiBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGZvciBpdHMgRE9NIHBvc2l0aW9uXG4gICAgLy8gdGhpcyBwcmV2ZW50cyB0aGUgaGFuZGxlciBmcm9tIGJlaW5nIGRpc3BhdGNoZWQgdGhlIHNhbWUgd2F5IGFzIG1vdXNlb3ZlciBvciBtb3VzZW91dCBkb2VzXG4gICAgaWYgKG9yaWdpbmFsVHlwZUV2ZW50IGluIGN1c3RvbUV2ZW50cykge1xuICAgICAgY29uc3Qgd3JhcEZ1bmN0aW9uID0gZm4gPT4ge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCFldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50LnJlbGF0ZWRUYXJnZXQgIT09IGV2ZW50LmRlbGVnYXRlVGFyZ2V0ICYmICFldmVudC5kZWxlZ2F0ZVRhcmdldC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjYWxsYWJsZSA9IHdyYXBGdW5jdGlvbihjYWxsYWJsZSk7XG4gICAgfVxuICAgIGNvbnN0IGV2ZW50cyA9IGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCk7XG4gICAgY29uc3QgaGFuZGxlcnMgPSBldmVudHNbdHlwZUV2ZW50XSB8fCAoZXZlbnRzW3R5cGVFdmVudF0gPSB7fSk7XG4gICAgY29uc3QgcHJldmlvdXNGdW5jdGlvbiA9IGZpbmRIYW5kbGVyKGhhbmRsZXJzLCBjYWxsYWJsZSwgaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbCk7XG4gICAgaWYgKHByZXZpb3VzRnVuY3Rpb24pIHtcbiAgICAgIHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmID0gcHJldmlvdXNGdW5jdGlvbi5vbmVPZmYgJiYgb25lT2ZmO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoY2FsbGFibGUsIG9yaWdpbmFsVHlwZUV2ZW50LnJlcGxhY2UobmFtZXNwYWNlUmVnZXgsICcnKSk7XG4gICAgY29uc3QgZm4gPSBpc0RlbGVnYXRlZCA/IGJvb3RzdHJhcERlbGVnYXRpb25IYW5kbGVyKGVsZW1lbnQsIGhhbmRsZXIsIGNhbGxhYmxlKSA6IGJvb3RzdHJhcEhhbmRsZXIoZWxlbWVudCwgY2FsbGFibGUpO1xuICAgIGZuLmRlbGVnYXRpb25TZWxlY3RvciA9IGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGw7XG4gICAgZm4uY2FsbGFibGUgPSBjYWxsYWJsZTtcbiAgICBmbi5vbmVPZmYgPSBvbmVPZmY7XG4gICAgZm4udWlkRXZlbnQgPSB1aWQ7XG4gICAgaGFuZGxlcnNbdWlkXSA9IGZuO1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBpc0RlbGVnYXRlZCk7XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKSB7XG4gICAgY29uc3QgZm4gPSBmaW5kSGFuZGxlcihldmVudHNbdHlwZUV2ZW50XSwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKTtcbiAgICBpZiAoIWZuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBCb29sZWFuKGRlbGVnYXRpb25TZWxlY3RvcikpO1xuICAgIGRlbGV0ZSBldmVudHNbdHlwZUV2ZW50XVtmbi51aWRFdmVudF07XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBuYW1lc3BhY2UpIHtcbiAgICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9O1xuICAgIGZvciAoY29uc3QgW2hhbmRsZXJLZXksIGV2ZW50XSBvZiBPYmplY3QuZW50cmllcyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICAgIGlmIChoYW5kbGVyS2V5LmluY2x1ZGVzKG5hbWVzcGFjZSkpIHtcbiAgICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQuY2FsbGFibGUsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdldFR5cGVFdmVudChldmVudCkge1xuICAgIC8vIGFsbG93IHRvIGdldCB0aGUgbmF0aXZlIGV2ZW50cyBmcm9tIG5hbWVzcGFjZWQgZXZlbnRzICgnY2xpY2suYnMuYnV0dG9uJyAtLT4gJ2NsaWNrJylcbiAgICBldmVudCA9IGV2ZW50LnJlcGxhY2Uoc3RyaXBOYW1lUmVnZXgsICcnKTtcbiAgICByZXR1cm4gY3VzdG9tRXZlbnRzW2V2ZW50XSB8fCBldmVudDtcbiAgfVxuICBjb25zdCBFdmVudEhhbmRsZXIgPSB7XG4gICAgb24oZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBmYWxzZSk7XG4gICAgfSxcbiAgICBvbmUoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCB0cnVlKTtcbiAgICB9LFxuICAgIG9mZihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKTtcbiAgICAgIGNvbnN0IGluTmFtZXNwYWNlID0gdHlwZUV2ZW50ICE9PSBvcmlnaW5hbFR5cGVFdmVudDtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCk7XG4gICAgICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9O1xuICAgICAgY29uc3QgaXNOYW1lc3BhY2UgPSBvcmlnaW5hbFR5cGVFdmVudC5zdGFydHNXaXRoKCcuJyk7XG4gICAgICBpZiAodHlwZW9mIGNhbGxhYmxlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBTaW1wbGVzdCBjYXNlOiBoYW5kbGVyIGlzIHBhc3NlZCwgcmVtb3ZlIHRoYXQgbGlzdGVuZXIgT05MWS5cbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhzdG9yZUVsZW1lbnRFdmVudCkubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGNhbGxhYmxlLCBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzTmFtZXNwYWNlKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudEV2ZW50IG9mIE9iamVjdC5rZXlzKGV2ZW50cykpIHtcbiAgICAgICAgICByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCBlbGVtZW50RXZlbnQsIG9yaWdpbmFsVHlwZUV2ZW50LnNsaWNlKDEpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBba2V5SGFuZGxlcnMsIGV2ZW50XSBvZiBPYmplY3QuZW50cmllcyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcktleSA9IGtleUhhbmRsZXJzLnJlcGxhY2Uoc3RyaXBVaWRSZWdleCwgJycpO1xuICAgICAgICBpZiAoIWluTmFtZXNwYWNlIHx8IG9yaWdpbmFsVHlwZUV2ZW50LmluY2x1ZGVzKGhhbmRsZXJLZXkpKSB7XG4gICAgICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQuY2FsbGFibGUsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHRyaWdnZXIoZWxlbWVudCwgZXZlbnQsIGFyZ3MpIHtcbiAgICAgIGlmICh0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgJCA9IGluZGV4X2pzLmdldGpRdWVyeSgpO1xuICAgICAgY29uc3QgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KGV2ZW50KTtcbiAgICAgIGNvbnN0IGluTmFtZXNwYWNlID0gZXZlbnQgIT09IHR5cGVFdmVudDtcbiAgICAgIGxldCBqUXVlcnlFdmVudCA9IG51bGw7XG4gICAgICBsZXQgYnViYmxlcyA9IHRydWU7XG4gICAgICBsZXQgbmF0aXZlRGlzcGF0Y2ggPSB0cnVlO1xuICAgICAgbGV0IGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICAgIGlmIChpbk5hbWVzcGFjZSAmJiAkKSB7XG4gICAgICAgIGpRdWVyeUV2ZW50ID0gJC5FdmVudChldmVudCwgYXJncyk7XG4gICAgICAgICQoZWxlbWVudCkudHJpZ2dlcihqUXVlcnlFdmVudCk7XG4gICAgICAgIGJ1YmJsZXMgPSAhalF1ZXJ5RXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtcbiAgICAgICAgbmF0aXZlRGlzcGF0Y2ggPSAhalF1ZXJ5RXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTtcbiAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IGpRdWVyeUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgZXZ0ID0gaHlkcmF0ZU9iaihuZXcgRXZlbnQoZXZlbnQsIHtcbiAgICAgICAgYnViYmxlcyxcbiAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgfSksIGFyZ3MpO1xuICAgICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICBpZiAobmF0aXZlRGlzcGF0Y2gpIHtcbiAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZ0LmRlZmF1bHRQcmV2ZW50ZWQgJiYgalF1ZXJ5RXZlbnQpIHtcbiAgICAgICAgalF1ZXJ5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBldnQ7XG4gICAgfVxuICB9O1xuICBmdW5jdGlvbiBoeWRyYXRlT2JqKG9iaiwgbWV0YSA9IHt9KSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICB9IGNhdGNoIChfdW51c2VkKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBFdmVudEhhbmRsZXI7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZW50LWhhbmRsZXIuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgbWFuaXB1bGF0b3IuanMgdjUuMy4zIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjQgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLk1hbmlwdWxhdG9yID0gZmFjdG9yeSgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIGRvbS9tYW5pcHVsYXRvci5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplRGF0YSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gTnVtYmVyKHZhbHVlKS50b1N0cmluZygpKSB7XG4gICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICAgIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbm9ybWFsaXplRGF0YUtleShrZXkpIHtcbiAgICByZXR1cm4ga2V5LnJlcGxhY2UoL1tBLVpdL2csIGNociA9PiBgLSR7Y2hyLnRvTG93ZXJDYXNlKCl9YCk7XG4gIH1cbiAgY29uc3QgTWFuaXB1bGF0b3IgPSB7XG4gICAgc2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXksIHZhbHVlKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gLCB2YWx1ZSk7XG4gICAgfSxcbiAgICByZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCk7XG4gICAgfSxcbiAgICBnZXREYXRhQXR0cmlidXRlcyhlbGVtZW50KSB7XG4gICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgY29uc3QgYnNLZXlzID0gT2JqZWN0LmtleXMoZWxlbWVudC5kYXRhc2V0KS5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdicycpICYmICFrZXkuc3RhcnRzV2l0aCgnYnNDb25maWcnKSk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBic0tleXMpIHtcbiAgICAgICAgbGV0IHB1cmVLZXkgPSBrZXkucmVwbGFjZSgvXmJzLywgJycpO1xuICAgICAgICBwdXJlS2V5ID0gcHVyZUtleS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHB1cmVLZXkuc2xpY2UoMSwgcHVyZUtleS5sZW5ndGgpO1xuICAgICAgICBhdHRyaWJ1dGVzW3B1cmVLZXldID0gbm9ybWFsaXplRGF0YShlbGVtZW50LmRhdGFzZXRba2V5XSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9LFxuICAgIGdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YShlbGVtZW50LmdldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gKSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBNYW5pcHVsYXRvcjtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFuaXB1bGF0b3IuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgY29uZmlnLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi4vZG9tL21hbmlwdWxhdG9yLmpzJyksIHJlcXVpcmUoJy4vaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9kb20vbWFuaXB1bGF0b3InLCAnLi9pbmRleCddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Db25maWcgPSBmYWN0b3J5KGdsb2JhbC5NYW5pcHVsYXRvciwgZ2xvYmFsLkluZGV4KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKE1hbmlwdWxhdG9yLCBpbmRleF9qcykgeyAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCB1dGlsL2NvbmZpZy5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cblxuICAvKipcbiAgICogQ2xhc3MgZGVmaW5pdGlvblxuICAgKi9cblxuICBjbGFzcyBDb25maWcge1xuICAgIC8vIEdldHRlcnNcbiAgICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGhhdmUgdG8gaW1wbGVtZW50IHRoZSBzdGF0aWMgbWV0aG9kIFwiTkFNRVwiLCBmb3IgZWFjaCBjb21wb25lbnQhJyk7XG4gICAgfVxuICAgIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcpO1xuICAgICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICAgIF9tZXJnZUNvbmZpZ09iaihjb25maWcsIGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGpzb25Db25maWcgPSBpbmRleF9qcy5pc0VsZW1lbnQoZWxlbWVudCkgPyBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsICdjb25maWcnKSA6IHt9OyAvLyB0cnkgdG8gcGFyc2VcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LFxuICAgICAgICAuLi4odHlwZW9mIGpzb25Db25maWcgPT09ICdvYmplY3QnID8ganNvbkNvbmZpZyA6IHt9KSxcbiAgICAgICAgLi4uKGluZGV4X2pzLmlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKGVsZW1lbnQpIDoge30pLFxuICAgICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICAgIH07XG4gICAgfVxuICAgIF90eXBlQ2hlY2tDb25maWcoY29uZmlnLCBjb25maWdUeXBlcyA9IHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpIHtcbiAgICAgIGZvciAoY29uc3QgW3Byb3BlcnR5LCBleHBlY3RlZFR5cGVzXSBvZiBPYmplY3QuZW50cmllcyhjb25maWdUeXBlcykpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdbcHJvcGVydHldO1xuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSBpbmRleF9qcy5pc0VsZW1lbnQodmFsdWUpID8gJ2VsZW1lbnQnIDogaW5kZXhfanMudG9UeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKCFuZXcgUmVnRXhwKGV4cGVjdGVkVHlwZXMpLnRlc3QodmFsdWVUeXBlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCIke3Byb3BlcnR5fVwiIHByb3ZpZGVkIHR5cGUgXCIke3ZhbHVlVHlwZX1cIiBidXQgZXhwZWN0ZWQgdHlwZSBcIiR7ZXhwZWN0ZWRUeXBlc31cIi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBDb25maWc7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZy5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBiYXNlLWNvbXBvbmVudC5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJy4vZG9tL2RhdGEuanMnKSwgcmVxdWlyZSgnLi9kb20vZXZlbnQtaGFuZGxlci5qcycpLCByZXF1aXJlKCcuL3V0aWwvY29uZmlnLmpzJyksIHJlcXVpcmUoJy4vdXRpbC9pbmRleC5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4vZG9tL2RhdGEnLCAnLi9kb20vZXZlbnQtaGFuZGxlcicsICcuL3V0aWwvY29uZmlnJywgJy4vdXRpbC9pbmRleCddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5CYXNlQ29tcG9uZW50ID0gZmFjdG9yeShnbG9iYWwuRGF0YSwgZ2xvYmFsLkV2ZW50SGFuZGxlciwgZ2xvYmFsLkNvbmZpZywgZ2xvYmFsLkluZGV4KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKERhdGEsIEV2ZW50SGFuZGxlciwgQ29uZmlnLCBpbmRleF9qcykgeyAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCBiYXNlLWNvbXBvbmVudC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cblxuICAvKipcbiAgICogQ29uc3RhbnRzXG4gICAqL1xuXG4gIGNvbnN0IFZFUlNJT04gPSAnNS4zLjMnO1xuXG4gIC8qKlxuICAgKiBDbGFzcyBkZWZpbml0aW9uXG4gICAqL1xuXG4gIGNsYXNzIEJhc2VDb21wb25lbnQgZXh0ZW5kcyBDb25maWcge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIGVsZW1lbnQgPSBpbmRleF9qcy5nZXRFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICBEYXRhLnNldCh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBQdWJsaWNcbiAgICBkaXNwb3NlKCkge1xuICAgICAgRGF0YS5yZW1vdmUodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSk7XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRVZFTlRfS0VZKTtcbiAgICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7XG4gICAgICAgIHRoaXNbcHJvcGVydHlOYW1lXSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIF9xdWV1ZUNhbGxiYWNrKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkID0gdHJ1ZSkge1xuICAgICAgaW5kZXhfanMuZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgZWxlbWVudCwgaXNBbmltYXRlZCk7XG4gICAgfVxuICAgIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcsIHRoaXMuX2VsZW1lbnQpO1xuICAgICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIC8vIFN0YXRpY1xuICAgIHN0YXRpYyBnZXRJbnN0YW5jZShlbGVtZW50KSB7XG4gICAgICByZXR1cm4gRGF0YS5nZXQoaW5kZXhfanMuZ2V0RWxlbWVudChlbGVtZW50KSwgdGhpcy5EQVRBX0tFWSk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIGNvbmZpZyA9IHt9KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJbnN0YW5jZShlbGVtZW50KSB8fCBuZXcgdGhpcyhlbGVtZW50LCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IG51bGwpO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgICByZXR1cm4gVkVSU0lPTjtcbiAgICB9XG4gICAgc3RhdGljIGdldCBEQVRBX0tFWSgpIHtcbiAgICAgIHJldHVybiBgYnMuJHt0aGlzLk5BTUV9YDtcbiAgICB9XG4gICAgc3RhdGljIGdldCBFVkVOVF9LRVkoKSB7XG4gICAgICByZXR1cm4gYC4ke3RoaXMuREFUQV9LRVl9YDtcbiAgICB9XG4gICAgc3RhdGljIGV2ZW50TmFtZShuYW1lKSB7XG4gICAgICByZXR1cm4gYCR7bmFtZX0ke3RoaXMuRVZFTlRfS0VZfWA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEJhc2VDb21wb25lbnQ7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhc2UtY29tcG9uZW50LmpzLm1hcFxuIiwiLyohXG4gICogQm9vdHN0cmFwIHNlbGVjdG9yLWVuZ2luZS5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJy4uL3V0aWwvaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi91dGlsL2luZGV4J10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLlNlbGVjdG9yRW5naW5lID0gZmFjdG9yeShnbG9iYWwuSW5kZXgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoaW5kZXhfanMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgZG9tL3NlbGVjdG9yLWVuZ2luZS5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgY29uc3QgZ2V0U2VsZWN0b3IgPSBlbGVtZW50ID0+IHtcbiAgICBsZXQgc2VsZWN0b3IgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy10YXJnZXQnKTtcbiAgICBpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSAnIycpIHtcbiAgICAgIGxldCBocmVmQXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblxuICAgICAgLy8gVGhlIG9ubHkgdmFsaWQgY29udGVudCB0aGF0IGNvdWxkIGRvdWJsZSBhcyBhIHNlbGVjdG9yIGFyZSBJRHMgb3IgY2xhc3NlcyxcbiAgICAgIC8vIHNvIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgd2l0aCBgI2Agb3IgYC5gLiBJZiBhIFwicmVhbFwiIFVSTCBpcyB1c2VkIGFzIHRoZSBzZWxlY3RvcixcbiAgICAgIC8vIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCB3aWxsIHJpZ2h0ZnVsbHkgY29tcGxhaW4gaXQgaXMgaW52YWxpZC5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzMyMjczXG4gICAgICBpZiAoIWhyZWZBdHRyaWJ1dGUgfHwgIWhyZWZBdHRyaWJ1dGUuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHJpYnV0ZS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIEp1c3QgaW4gY2FzZSBzb21lIENNUyBwdXRzIG91dCBhIGZ1bGwgVVJMIHdpdGggdGhlIGFuY2hvciBhcHBlbmRlZFxuICAgICAgaWYgKGhyZWZBdHRyaWJ1dGUuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHJpYnV0ZS5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgICAgaHJlZkF0dHJpYnV0ZSA9IGAjJHtocmVmQXR0cmlidXRlLnNwbGl0KCcjJylbMV19YDtcbiAgICAgIH1cbiAgICAgIHNlbGVjdG9yID0gaHJlZkF0dHJpYnV0ZSAmJiBocmVmQXR0cmlidXRlICE9PSAnIycgPyBocmVmQXR0cmlidXRlLnRyaW0oKSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RvciA/IHNlbGVjdG9yLnNwbGl0KCcsJykubWFwKHNlbCA9PiBpbmRleF9qcy5wYXJzZVNlbGVjdG9yKHNlbCkpLmpvaW4oJywnKSA6IG51bGw7XG4gIH07XG4gIGNvbnN0IFNlbGVjdG9yRW5naW5lID0ge1xuICAgIGZpbmQoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQoLi4uRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbC5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKSk7XG4gICAgfSxcbiAgICBmaW5kT25lKHNlbGVjdG9yLCBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICByZXR1cm4gRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3Rvci5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKTtcbiAgICB9LFxuICAgIGNoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gW10uY29uY2F0KC4uLmVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihjaGlsZCA9PiBjaGlsZC5tYXRjaGVzKHNlbGVjdG9yKSk7XG4gICAgfSxcbiAgICBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICBjb25zdCBwYXJlbnRzID0gW107XG4gICAgICBsZXQgYW5jZXN0b3IgPSBlbGVtZW50LnBhcmVudE5vZGUuY2xvc2VzdChzZWxlY3Rvcik7XG4gICAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAgICAgICAgcGFyZW50cy5wdXNoKGFuY2VzdG9yKTtcbiAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmVudHM7XG4gICAgfSxcbiAgICBwcmV2KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICBsZXQgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICB3aGlsZSAocHJldmlvdXMpIHtcbiAgICAgICAgaWYgKHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuIFtwcmV2aW91c107XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0sXG4gICAgLy8gVE9ETzogdGhpcyBpcyBub3cgdW51c2VkOyByZW1vdmUgbGF0ZXIgYWxvbmcgd2l0aCBwcmV2KClcbiAgICBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICBsZXQgbmV4dCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgd2hpbGUgKG5leHQpIHtcbiAgICAgICAgaWYgKG5leHQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gW25leHRdO1xuICAgICAgICB9XG4gICAgICAgIG5leHQgPSBuZXh0Lm5leHRFbGVtZW50U2libGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICAgIGZvY3VzYWJsZUNoaWxkcmVuKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGZvY3VzYWJsZXMgPSBbJ2EnLCAnYnV0dG9uJywgJ2lucHV0JywgJ3RleHRhcmVhJywgJ3NlbGVjdCcsICdkZXRhaWxzJywgJ1t0YWJpbmRleF0nLCAnW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nXS5tYXAoc2VsZWN0b3IgPT4gYCR7c2VsZWN0b3J9Om5vdChbdGFiaW5kZXhePVwiLVwiXSlgKS5qb2luKCcsJyk7XG4gICAgICByZXR1cm4gdGhpcy5maW5kKGZvY3VzYWJsZXMsIGVsZW1lbnQpLmZpbHRlcihlbCA9PiAhaW5kZXhfanMuaXNEaXNhYmxlZChlbCkgJiYgaW5kZXhfanMuaXNWaXNpYmxlKGVsKSk7XG4gICAgfSxcbiAgICBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IpID8gc2VsZWN0b3IgOiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICByZXR1cm4gc2VsZWN0b3IgPyBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yKSA6IG51bGw7XG4gICAgfSxcbiAgICBnZXRNdWx0aXBsZUVsZW1lbnRzRnJvbVNlbGVjdG9yKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICByZXR1cm4gc2VsZWN0b3IgPyBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yKSA6IFtdO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU2VsZWN0b3JFbmdpbmU7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbGVjdG9yLWVuZ2luZS5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBiYWNrZHJvcC5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJy4uL2RvbS9ldmVudC1oYW5kbGVyLmpzJyksIHJlcXVpcmUoJy4vY29uZmlnLmpzJyksIHJlcXVpcmUoJy4vaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9kb20vZXZlbnQtaGFuZGxlcicsICcuL2NvbmZpZycsICcuL2luZGV4J10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLkJhY2tkcm9wID0gZmFjdG9yeShnbG9iYWwuRXZlbnRIYW5kbGVyLCBnbG9iYWwuQ29uZmlnLCBnbG9iYWwuSW5kZXgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoRXZlbnRIYW5kbGVyLCBDb25maWcsIGluZGV4X2pzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIHV0aWwvYmFja2Ryb3AuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIENvbnN0YW50c1xuICAgKi9cblxuICBjb25zdCBOQU1FID0gJ2JhY2tkcm9wJztcbiAgY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnO1xuICBjb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdyc7XG4gIGNvbnN0IEVWRU5UX01PVVNFRE9XTiA9IGBtb3VzZWRvd24uYnMuJHtOQU1FfWA7XG4gIGNvbnN0IERlZmF1bHQgPSB7XG4gICAgY2xhc3NOYW1lOiAnbW9kYWwtYmFja2Ryb3AnLFxuICAgIGNsaWNrQ2FsbGJhY2s6IG51bGwsXG4gICAgaXNBbmltYXRlZDogZmFsc2UsXG4gICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgIC8vIGlmIGZhbHNlLCB3ZSB1c2UgdGhlIGJhY2tkcm9wIGhlbHBlciB3aXRob3V0IGFkZGluZyBhbnkgZWxlbWVudCB0byB0aGUgZG9tXG4gICAgcm9vdEVsZW1lbnQ6ICdib2R5JyAvLyBnaXZlIHRoZSBjaG9pY2UgdG8gcGxhY2UgYmFja2Ryb3AgdW5kZXIgZGlmZmVyZW50IGVsZW1lbnRzXG4gIH07XG4gIGNvbnN0IERlZmF1bHRUeXBlID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgY2xpY2tDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gICAgaXNBbmltYXRlZDogJ2Jvb2xlYW4nLFxuICAgIGlzVmlzaWJsZTogJ2Jvb2xlYW4nLFxuICAgIHJvb3RFbGVtZW50OiAnKGVsZW1lbnR8c3RyaW5nKSdcbiAgfTtcblxuICAvKipcbiAgICogQ2xhc3MgZGVmaW5pdGlvblxuICAgKi9cblxuICBjbGFzcyBCYWNrZHJvcCBleHRlbmRzIENvbmZpZyB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICB0aGlzLl9pc0FwcGVuZGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBHZXR0ZXJzXG4gICAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgICAgcmV0dXJuIERlZmF1bHQ7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgICByZXR1cm4gRGVmYXVsdFR5cGU7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICAgIHJldHVybiBOQU1FO1xuICAgIH1cblxuICAgIC8vIFB1YmxpY1xuICAgIHNob3coY2FsbGJhY2spIHtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgICBpbmRleF9qcy5leGVjdXRlKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fYXBwZW5kKCk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpO1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKSB7XG4gICAgICAgIGluZGV4X2pzLnJlZmxvdyhlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpO1xuICAgICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICAgIGluZGV4X2pzLmV4ZWN1dGUoY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGhpZGUoY2FsbGJhY2spIHtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgICBpbmRleF9qcy5leGVjdXRlKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICAgICAgaW5kZXhfanMuZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZGlzcG9zZSgpIHtcbiAgICAgIGlmICghdGhpcy5faXNBcHBlbmRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTik7XG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZSgpO1xuICAgICAgdGhpcy5faXNBcHBlbmRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFByaXZhdGVcbiAgICBfZ2V0RWxlbWVudCgpIHtcbiAgICAgIGlmICghdGhpcy5fZWxlbWVudCkge1xuICAgICAgICBjb25zdCBiYWNrZHJvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBiYWNrZHJvcC5jbGFzc05hbWUgPSB0aGlzLl9jb25maWcuY2xhc3NOYW1lO1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpIHtcbiAgICAgICAgICBiYWNrZHJvcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IGJhY2tkcm9wO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7XG4gICAgfVxuICAgIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgICAgLy8gdXNlIGdldEVsZW1lbnQoKSB3aXRoIHRoZSBkZWZhdWx0IFwiYm9keVwiIHRvIGdldCBhIGZyZXNoIEVsZW1lbnQgb24gZWFjaCBpbnN0YW50aWF0aW9uXG4gICAgICBjb25maWcucm9vdEVsZW1lbnQgPSBpbmRleF9qcy5nZXRFbGVtZW50KGNvbmZpZy5yb290RWxlbWVudCk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgICBfYXBwZW5kKCkge1xuICAgICAgaWYgKHRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2dldEVsZW1lbnQoKTtcbiAgICAgIHRoaXMuX2NvbmZpZy5yb290RWxlbWVudC5hcHBlbmQoZWxlbWVudCk7XG4gICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOLCAoKSA9PiB7XG4gICAgICAgIGluZGV4X2pzLmV4ZWN1dGUodGhpcy5fY29uZmlnLmNsaWNrQ2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9pc0FwcGVuZGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgX2VtdWxhdGVBbmltYXRpb24oY2FsbGJhY2spIHtcbiAgICAgIGluZGV4X2pzLmV4ZWN1dGVBZnRlclRyYW5zaXRpb24oY2FsbGJhY2ssIHRoaXMuX2dldEVsZW1lbnQoKSwgdGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBCYWNrZHJvcDtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmFja2Ryb3AuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgY29tcG9uZW50LWZ1bmN0aW9ucy5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzLCByZXF1aXJlKCcuLi9kb20vZXZlbnQtaGFuZGxlci5qcycpLCByZXF1aXJlKCcuLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJyksIHJlcXVpcmUoJy4vaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJywgJy4uL2RvbS9ldmVudC1oYW5kbGVyJywgJy4uL2RvbS9zZWxlY3Rvci1lbmdpbmUnLCAnLi9pbmRleCddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsLkNvbXBvbmVudEZ1bmN0aW9ucyA9IHt9LCBnbG9iYWwuRXZlbnRIYW5kbGVyLCBnbG9iYWwuU2VsZWN0b3JFbmdpbmUsIGdsb2JhbC5JbmRleCkpO1xufSkodGhpcywgKGZ1bmN0aW9uIChleHBvcnRzLCBFdmVudEhhbmRsZXIsIFNlbGVjdG9yRW5naW5lLCBpbmRleF9qcykgeyAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCB1dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIGNvbnN0IGVuYWJsZURpc21pc3NUcmlnZ2VyID0gKGNvbXBvbmVudCwgbWV0aG9kID0gJ2hpZGUnKSA9PiB7XG4gICAgY29uc3QgY2xpY2tFdmVudCA9IGBjbGljay5kaXNtaXNzJHtjb21wb25lbnQuRVZFTlRfS0VZfWA7XG4gICAgY29uc3QgbmFtZSA9IGNvbXBvbmVudC5OQU1FO1xuICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgY2xpY2tFdmVudCwgYFtkYXRhLWJzLWRpc21pc3M9XCIke25hbWV9XCJdYCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXhfanMuaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpIHx8IHRoaXMuY2xvc2VzdChgLiR7bmFtZX1gKTtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50LmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KTtcblxuICAgICAgLy8gTWV0aG9kIGFyZ3VtZW50IGlzIGxlZnQsIGZvciBBbGVydCBhbmQgb25seSwgYXMgaXQgZG9lc24ndCBpbXBsZW1lbnQgdGhlICdoaWRlJyBtZXRob2RcbiAgICAgIGluc3RhbmNlW21ldGhvZF0oKTtcbiAgICB9KTtcbiAgfTtcblxuICBleHBvcnRzLmVuYWJsZURpc21pc3NUcmlnZ2VyID0gZW5hYmxlRGlzbWlzc1RyaWdnZXI7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBvbmVudC1mdW5jdGlvbnMuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgZm9jdXN0cmFwLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi4vZG9tL2V2ZW50LWhhbmRsZXIuanMnKSwgcmVxdWlyZSgnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZS5qcycpLCByZXF1aXJlKCcuL2NvbmZpZy5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL2RvbS9ldmVudC1oYW5kbGVyJywgJy4uL2RvbS9zZWxlY3Rvci1lbmdpbmUnLCAnLi9jb25maWcnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuRm9jdXN0cmFwID0gZmFjdG9yeShnbG9iYWwuRXZlbnRIYW5kbGVyLCBnbG9iYWwuU2VsZWN0b3JFbmdpbmUsIGdsb2JhbC5Db25maWcpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoRXZlbnRIYW5kbGVyLCBTZWxlY3RvckVuZ2luZSwgQ29uZmlnKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIHV0aWwvZm9jdXN0cmFwLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBDb25zdGFudHNcbiAgICovXG5cbiAgY29uc3QgTkFNRSA9ICdmb2N1c3RyYXAnO1xuICBjb25zdCBEQVRBX0tFWSA9ICdicy5mb2N1c3RyYXAnO1xuICBjb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YDtcbiAgY29uc3QgRVZFTlRfRk9DVVNJTiA9IGBmb2N1c2luJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfS0VZRE9XTl9UQUIgPSBga2V5ZG93bi50YWIke0VWRU5UX0tFWX1gO1xuICBjb25zdCBUQUJfS0VZID0gJ1RhYic7XG4gIGNvbnN0IFRBQl9OQVZfRk9SV0FSRCA9ICdmb3J3YXJkJztcbiAgY29uc3QgVEFCX05BVl9CQUNLV0FSRCA9ICdiYWNrd2FyZCc7XG4gIGNvbnN0IERlZmF1bHQgPSB7XG4gICAgYXV0b2ZvY3VzOiB0cnVlLFxuICAgIHRyYXBFbGVtZW50OiBudWxsIC8vIFRoZSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG4gIH07XG4gIGNvbnN0IERlZmF1bHRUeXBlID0ge1xuICAgIGF1dG9mb2N1czogJ2Jvb2xlYW4nLFxuICAgIHRyYXBFbGVtZW50OiAnZWxlbWVudCdcbiAgfTtcblxuICAvKipcbiAgICogQ2xhc3MgZGVmaW5pdGlvblxuICAgKi9cblxuICBjbGFzcyBGb2N1c1RyYXAgZXh0ZW5kcyBDb25maWcge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIEdldHRlcnNcbiAgICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgICByZXR1cm4gRGVmYXVsdDtcbiAgICB9XG4gICAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICAgIHJldHVybiBEZWZhdWx0VHlwZTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgICAgcmV0dXJuIE5BTUU7XG4gICAgfVxuXG4gICAgLy8gUHVibGljXG4gICAgYWN0aXZhdGUoKSB7XG4gICAgICBpZiAodGhpcy5faXNBY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5hdXRvZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnLnRyYXBFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkpOyAvLyBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGZvY3VzIGxvb3BcbiAgICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlRm9jdXNpbihldmVudCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX1RBQiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlS2V5ZG93bihldmVudCkpO1xuICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgICBkZWFjdGl2YXRlKCkge1xuICAgICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgRXZlbnRIYW5kbGVyLm9mZihkb2N1bWVudCwgRVZFTlRfS0VZKTtcbiAgICB9XG5cbiAgICAvLyBQcml2YXRlXG4gICAgX2hhbmRsZUZvY3VzaW4oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdHJhcEVsZW1lbnRcbiAgICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBkb2N1bWVudCB8fCBldmVudC50YXJnZXQgPT09IHRyYXBFbGVtZW50IHx8IHRyYXBFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudHMgPSBTZWxlY3RvckVuZ2luZS5mb2N1c2FibGVDaGlsZHJlbih0cmFwRWxlbWVudCk7XG4gICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRyYXBFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPT09IFRBQl9OQVZfQkFDS1dBUkQpIHtcbiAgICAgICAgZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIF9oYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSBUQUJfS0VZKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPSBldmVudC5zaGlmdEtleSA/IFRBQl9OQVZfQkFDS1dBUkQgOiBUQUJfTkFWX0ZPUldBUkQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEZvY3VzVHJhcDtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9jdXN0cmFwLmpzLm1hcFxuIiwiLyohXG4gICogQm9vdHN0cmFwIHNjcm9sbGJhci5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJy4uL2RvbS9tYW5pcHVsYXRvci5qcycpLCByZXF1aXJlKCcuLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJyksIHJlcXVpcmUoJy4vaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9kb20vbWFuaXB1bGF0b3InLCAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZScsICcuL2luZGV4J10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLlNjcm9sbGJhciA9IGZhY3RvcnkoZ2xvYmFsLk1hbmlwdWxhdG9yLCBnbG9iYWwuU2VsZWN0b3JFbmdpbmUsIGdsb2JhbC5JbmRleCkpO1xufSkodGhpcywgKGZ1bmN0aW9uIChNYW5pcHVsYXRvciwgU2VsZWN0b3JFbmdpbmUsIGluZGV4X2pzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIHV0aWwvc2Nyb2xsQmFyLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBDb25zdGFudHNcbiAgICovXG5cbiAgY29uc3QgU0VMRUNUT1JfRklYRURfQ09OVEVOVCA9ICcuZml4ZWQtdG9wLCAuZml4ZWQtYm90dG9tLCAuaXMtZml4ZWQsIC5zdGlja3ktdG9wJztcbiAgY29uc3QgU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQgPSAnLnN0aWNreS10b3AnO1xuICBjb25zdCBQUk9QRVJUWV9QQURESU5HID0gJ3BhZGRpbmctcmlnaHQnO1xuICBjb25zdCBQUk9QRVJUWV9NQVJHSU4gPSAnbWFyZ2luLXJpZ2h0JztcblxuICAvKipcbiAgICogQ2xhc3MgZGVmaW5pdGlvblxuICAgKi9cblxuICBjbGFzcyBTY3JvbGxCYXJIZWxwZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5fZWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgLy8gUHVibGljXG4gICAgZ2V0V2lkdGgoKSB7XG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2lubmVyV2lkdGgjdXNhZ2Vfbm90ZXNcbiAgICAgIGNvbnN0IGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICByZXR1cm4gTWF0aC5hYnMod2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudFdpZHRoKTtcbiAgICB9XG4gICAgaGlkZSgpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xuICAgICAgdGhpcy5fZGlzYWJsZU92ZXJGbG93KCk7XG4gICAgICAvLyBnaXZlIHBhZGRpbmcgdG8gZWxlbWVudCB0byBiYWxhbmNlIHRoZSBoaWRkZW4gc2Nyb2xsYmFyIHdpZHRoXG4gICAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCBQUk9QRVJUWV9QQURESU5HLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpO1xuICAgICAgLy8gdHJpY2s6IFdlIGFkanVzdCBwb3NpdGl2ZSBwYWRkaW5nUmlnaHQgYW5kIG5lZ2F0aXZlIG1hcmdpblJpZ2h0IHRvIHN0aWNreS10b3AgZWxlbWVudHMgdG8ga2VlcCBzaG93aW5nIGZ1bGx3aWR0aFxuICAgICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgUFJPUEVSVFlfUEFERElORywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSArIHdpZHRoKTtcbiAgICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCBQUk9QRVJUWV9NQVJHSU4sIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgLSB3aWR0aCk7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKTtcbiAgICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgUFJPUEVSVFlfUEFERElORyk7XG4gICAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsIFBST1BFUlRZX1BBRERJTkcpO1xuICAgICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgUFJPUEVSVFlfTUFSR0lOKTtcbiAgICB9XG4gICAgaXNPdmVyZmxvd2luZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFdpZHRoKCkgPiAwO1xuICAgIH1cblxuICAgIC8vIFByaXZhdGVcbiAgICBfZGlzYWJsZU92ZXJGbG93KCkge1xuICAgICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUodGhpcy5fZWxlbWVudCwgJ292ZXJmbG93Jyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgfVxuICAgIF9zZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xuICAgICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnQgJiYgd2luZG93LmlubmVyV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoICsgc2Nyb2xsYmFyV2lkdGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSk7XG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRWYWx1ZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0eSk7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVQcm9wZXJ0eSwgYCR7Y2FsbGJhY2soTnVtYmVyLnBhcnNlRmxvYXQoY2FsY3VsYXRlZFZhbHVlKSl9cHhgKTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjayk7XG4gICAgfVxuICAgIF9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KSB7XG4gICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgICAgIGlmIChhY3R1YWxWYWx1ZSkge1xuICAgICAgICBNYW5pcHVsYXRvci5zZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHksIGFjdHVhbFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoc2VsZWN0b3IsIHN0eWxlUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHJlbW92ZSB0aGUgcHJvcGVydHkgaWYgdGhlIHZhbHVlIGlzIGBudWxsYDsgdGhlIHZhbHVlIGNhbiBhbHNvIGJlIHplcm9cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZVByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spO1xuICAgIH1cbiAgICBfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgY2FsbEJhY2spIHtcbiAgICAgIGlmIChpbmRleF9qcy5pc0VsZW1lbnQoc2VsZWN0b3IpKSB7XG4gICAgICAgIGNhbGxCYWNrKHNlbGVjdG9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBzZWwgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvciwgdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgICAgY2FsbEJhY2soc2VsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2Nyb2xsQmFySGVscGVyO1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY3JvbGxiYXIuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgbW9kYWwuanMgdjUuMy4zIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjQgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCcuL2Jhc2UtY29tcG9uZW50LmpzJyksIHJlcXVpcmUoJy4vZG9tL2V2ZW50LWhhbmRsZXIuanMnKSwgcmVxdWlyZSgnLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJyksIHJlcXVpcmUoJy4vdXRpbC9iYWNrZHJvcC5qcycpLCByZXF1aXJlKCcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qcycpLCByZXF1aXJlKCcuL3V0aWwvZm9jdXN0cmFwLmpzJyksIHJlcXVpcmUoJy4vdXRpbC9pbmRleC5qcycpLCByZXF1aXJlKCcuL3V0aWwvc2Nyb2xsYmFyLmpzJykpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi9iYXNlLWNvbXBvbmVudCcsICcuL2RvbS9ldmVudC1oYW5kbGVyJywgJy4vZG9tL3NlbGVjdG9yLWVuZ2luZScsICcuL3V0aWwvYmFja2Ryb3AnLCAnLi91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMnLCAnLi91dGlsL2ZvY3VzdHJhcCcsICcuL3V0aWwvaW5kZXgnLCAnLi91dGlsL3Njcm9sbGJhciddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Nb2RhbCA9IGZhY3RvcnkoZ2xvYmFsLkJhc2VDb21wb25lbnQsIGdsb2JhbC5FdmVudEhhbmRsZXIsIGdsb2JhbC5TZWxlY3RvckVuZ2luZSwgZ2xvYmFsLkJhY2tkcm9wLCBnbG9iYWwuQ29tcG9uZW50RnVuY3Rpb25zLCBnbG9iYWwuRm9jdXN0cmFwLCBnbG9iYWwuSW5kZXgsIGdsb2JhbC5TY3JvbGxiYXIpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoQmFzZUNvbXBvbmVudCwgRXZlbnRIYW5kbGVyLCBTZWxlY3RvckVuZ2luZSwgQmFja2Ryb3AsIGNvbXBvbmVudEZ1bmN0aW9uc19qcywgRm9jdXNUcmFwLCBpbmRleF9qcywgU2Nyb2xsQmFySGVscGVyKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIG1vZGFsLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBDb25zdGFudHNcbiAgICovXG5cbiAgY29uc3QgTkFNRSA9ICdtb2RhbCc7XG4gIGNvbnN0IERBVEFfS0VZID0gJ2JzLm1vZGFsJztcbiAgY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWA7XG4gIGNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuICBjb25zdCBFU0NBUEVfS0VZID0gJ0VzY2FwZSc7XG4gIGNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWA7XG4gIGNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9SRVNJWkUgPSBgcmVzaXplJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfQ0xJQ0tfRElTTUlTUyA9IGBjbGljay5kaXNtaXNzJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MgPSBgbW91c2Vkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9LRVlET1dOX0RJU01JU1MgPSBga2V5ZG93bi5kaXNtaXNzJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gO1xuICBjb25zdCBDTEFTU19OQU1FX09QRU4gPSAnbW9kYWwtb3Blbic7XG4gIGNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJztcbiAgY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnO1xuICBjb25zdCBDTEFTU19OQU1FX1NUQVRJQyA9ICdtb2RhbC1zdGF0aWMnO1xuICBjb25zdCBPUEVOX1NFTEVDVE9SID0gJy5tb2RhbC5zaG93JztcbiAgY29uc3QgU0VMRUNUT1JfRElBTE9HID0gJy5tb2RhbC1kaWFsb2cnO1xuICBjb25zdCBTRUxFQ1RPUl9NT0RBTF9CT0RZID0gJy5tb2RhbC1ib2R5JztcbiAgY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIl0nO1xuICBjb25zdCBEZWZhdWx0ID0ge1xuICAgIGJhY2tkcm9wOiB0cnVlLFxuICAgIGZvY3VzOiB0cnVlLFxuICAgIGtleWJvYXJkOiB0cnVlXG4gIH07XG4gIGNvbnN0IERlZmF1bHRUeXBlID0ge1xuICAgIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gICAgZm9jdXM6ICdib29sZWFuJyxcbiAgICBrZXlib2FyZDogJ2Jvb2xlYW4nXG4gIH07XG5cbiAgLyoqXG4gICAqIENsYXNzIGRlZmluaXRpb25cbiAgICovXG5cbiAgY2xhc3MgTW9kYWwgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgICB0aGlzLl9kaWFsb2cgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RJQUxPRywgdGhpcy5fZWxlbWVudCk7XG4gICAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpO1xuICAgICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpO1xuICAgICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9zY3JvbGxCYXIgPSBuZXcgU2Nyb2xsQmFySGVscGVyKCk7XG4gICAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIC8vIEdldHRlcnNcbiAgICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgICByZXR1cm4gRGVmYXVsdDtcbiAgICB9XG4gICAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICAgIHJldHVybiBEZWZhdWx0VHlwZTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgICAgcmV0dXJuIE5BTUU7XG4gICAgfVxuXG4gICAgLy8gUHVibGljXG4gICAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldCk7XG4gICAgfVxuICAgIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgICAgaWYgKHRoaXMuX2lzU2hvd24gfHwgdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1csIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldFxuICAgICAgfSk7XG4gICAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNTaG93biA9IHRydWU7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgICAgdGhpcy5fc2Nyb2xsQmFyLmhpZGUoKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX09QRU4pO1xuICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgICB0aGlzLl9iYWNrZHJvcC5zaG93KCgpID0+IHRoaXMuX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpKTtcbiAgICB9XG4gICAgaGlkZSgpIHtcbiAgICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSk7XG4gICAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4gdGhpcy5faGlkZU1vZGFsKCksIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gICAgfVxuICAgIGRpc3Bvc2UoKSB7XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKHdpbmRvdywgRVZFTlRfS0VZKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZGlhbG9nLCBFVkVOVF9LRVkpO1xuICAgICAgdGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgaGFuZGxlVXBkYXRlKCkge1xuICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgfVxuXG4gICAgLy8gUHJpdmF0ZVxuICAgIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgICAgaXNWaXNpYmxlOiBCb29sZWFuKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCksXG4gICAgICAgIC8vICdzdGF0aWMnIG9wdGlvbiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdHJ1ZSwgYW5kIGJvb2xlYW5zIHdpbGwga2VlcCB0aGVpciB2YWx1ZSxcbiAgICAgICAgaXNBbmltYXRlZDogdGhpcy5faXNBbmltYXRlZCgpXG4gICAgICB9KTtcbiAgICB9XG4gICAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgICByZXR1cm4gbmV3IEZvY3VzVHJhcCh7XG4gICAgICAgIHRyYXBFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgICB9KTtcbiAgICB9XG4gICAgX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIC8vIHRyeSB0byBhcHBlbmQgZHluYW1pYyBtb2RhbFxuICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCB0cnVlKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpO1xuICAgICAgdGhpcy5fZWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgICAgY29uc3QgbW9kYWxCb2R5ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NT0RBTF9CT0RZLCB0aGlzLl9kaWFsb2cpO1xuICAgICAgaWYgKG1vZGFsQm9keSkge1xuICAgICAgICBtb2RhbEJvZHkuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH1cbiAgICAgIGluZGV4X2pzLnJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpO1xuICAgICAgY29uc3QgdHJhbnNpdGlvbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmZvY3VzKSB7XG4gICAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKHRyYW5zaXRpb25Db21wbGV0ZSwgdGhpcy5fZGlhbG9nLCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICAgIH1cbiAgICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCk7XG4gICAgICB9KTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX1JFU0laRSwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNTaG93biAmJiAhdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICAgIC8vIGEgYmFkIHRyaWNrIHRvIHNlZ3JlZ2F0ZSBjbGlja3MgdGhhdCBtYXkgc3RhcnQgaW5zaWRlIGRpYWxvZyBidXQgZW5kIG91dHNpZGUsIGFuZCBhdm9pZCBsaXN0ZW4gdG8gc2Nyb2xsYmFyIGNsaWNrc1xuICAgICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMSUNLX0RJU01JU1MsIGV2ZW50MiA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQgIT09IGV2ZW50LnRhcmdldCB8fCB0aGlzLl9lbGVtZW50ICE9PSBldmVudDIudGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3AgPT09ICdzdGF0aWMnKSB7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgX2hpZGVNb2RhbCgpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJyk7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9PUEVOKTtcbiAgICAgICAgdGhpcy5fcmVzZXRBZGp1c3RtZW50cygpO1xuICAgICAgICB0aGlzLl9zY3JvbGxCYXIucmVzZXQoKTtcbiAgICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBfaXNBbmltYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpO1xuICAgIH1cbiAgICBfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpIHtcbiAgICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEKTtcbiAgICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBpbml0aWFsT3ZlcmZsb3dZID0gdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1k7XG4gICAgICAvLyByZXR1cm4gaWYgdGhlIGZvbGxvd2luZyBiYWNrZ3JvdW5kIHRyYW5zaXRpb24gaGFzbid0IHlldCBjb21wbGV0ZWRcbiAgICAgIGlmIChpbml0aWFsT3ZlcmZsb3dZID09PSAnaGlkZGVuJyB8fCB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NUQVRJQykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJztcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NUQVRJQyk7XG4gICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU1RBVElDKTtcbiAgICAgICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBpbml0aWFsT3ZlcmZsb3dZO1xuICAgICAgICB9LCB0aGlzLl9kaWFsb2cpO1xuICAgICAgfSwgdGhpcy5fZGlhbG9nKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gaGFuZGxlIG92ZXJmbG93aW5nIG1vZGFsc1xuICAgICAqL1xuXG4gICAgX2FkanVzdERpYWxvZygpIHtcbiAgICAgIGNvbnN0IGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5fc2Nyb2xsQmFyLmdldFdpZHRoKCk7XG4gICAgICBjb25zdCBpc0JvZHlPdmVyZmxvd2luZyA9IHNjcm9sbGJhcldpZHRoID4gMDtcbiAgICAgIGlmIChpc0JvZHlPdmVyZmxvd2luZyAmJiAhaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5ID0gaW5kZXhfanMuaXNSVEwoKSA/ICdwYWRkaW5nTGVmdCcgOiAncGFkZGluZ1JpZ2h0JztcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBgJHtzY3JvbGxiYXJXaWR0aH1weGA7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQm9keU92ZXJmbG93aW5nICYmIGlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGluZGV4X2pzLmlzUlRMKCkgPyAncGFkZGluZ1JpZ2h0JyA6ICdwYWRkaW5nTGVmdCc7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gYCR7c2Nyb2xsYmFyV2lkdGh9cHhgO1xuICAgICAgfVxuICAgIH1cbiAgICBfcmVzZXRBZGp1c3RtZW50cygpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJyc7XG4gICAgfVxuXG4gICAgLy8gU3RhdGljXG4gICAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcsIHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW2NvbmZpZ10ocmVsYXRlZFRhcmdldCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAgICovXG5cbiAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcyk7XG4gICAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX1NIT1csIHNob3dFdmVudCA9PiB7XG4gICAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgLy8gb25seSByZWdpc3RlciBmb2N1cyByZXN0b3JlciBpZiBtb2RhbCB3aWxsIGFjdHVhbGx5IGdldCBzaG93blxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfSElEREVOLCAoKSA9PiB7XG4gICAgICAgIGlmIChpbmRleF9qcy5pc1Zpc2libGUodGhpcykpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBtb2RhbCB0b2dnbGVyIHdoaWxlIGFub3RoZXIgb25lIGlzIG9wZW5cbiAgICBjb25zdCBhbHJlYWR5T3BlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoT1BFTl9TRUxFQ1RPUik7XG4gICAgaWYgKGFscmVhZHlPcGVuKSB7XG4gICAgICBNb2RhbC5nZXRJbnN0YW5jZShhbHJlYWR5T3BlbikuaGlkZSgpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuICAgIGRhdGEudG9nZ2xlKHRoaXMpO1xuICB9KTtcbiAgY29tcG9uZW50RnVuY3Rpb25zX2pzLmVuYWJsZURpc21pc3NUcmlnZ2VyKE1vZGFsKTtcblxuICAvKipcbiAgICogalF1ZXJ5XG4gICAqL1xuXG4gIGluZGV4X2pzLmRlZmluZUpRdWVyeVBsdWdpbihNb2RhbCk7XG5cbiAgcmV0dXJuIE1vZGFsO1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tb2RhbC5qcy5tYXBcbiIsImV4cG9ydCB2YXIgdG9wID0gJ3RvcCc7XG5leHBvcnQgdmFyIGJvdHRvbSA9ICdib3R0b20nO1xuZXhwb3J0IHZhciByaWdodCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIGxlZnQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIGF1dG8gPSAnYXV0byc7XG5leHBvcnQgdmFyIGJhc2VQbGFjZW1lbnRzID0gW3RvcCwgYm90dG9tLCByaWdodCwgbGVmdF07XG5leHBvcnQgdmFyIHN0YXJ0ID0gJ3N0YXJ0JztcbmV4cG9ydCB2YXIgZW5kID0gJ2VuZCc7XG5leHBvcnQgdmFyIGNsaXBwaW5nUGFyZW50cyA9ICdjbGlwcGluZ1BhcmVudHMnO1xuZXhwb3J0IHZhciB2aWV3cG9ydCA9ICd2aWV3cG9ydCc7XG5leHBvcnQgdmFyIHBvcHBlciA9ICdwb3BwZXInO1xuZXhwb3J0IHZhciByZWZlcmVuY2UgPSAncmVmZXJlbmNlJztcbmV4cG9ydCB2YXIgdmFyaWF0aW9uUGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9iYXNlUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pO1xuZXhwb3J0IHZhciBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL1tdLmNvbmNhdChiYXNlUGxhY2VtZW50cywgW2F1dG9dKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQsIHBsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7IC8vIG1vZGlmaWVycyB0aGF0IG5lZWQgdG8gcmVhZCB0aGUgRE9NXG5cbmV4cG9ydCB2YXIgYmVmb3JlUmVhZCA9ICdiZWZvcmVSZWFkJztcbmV4cG9ydCB2YXIgcmVhZCA9ICdyZWFkJztcbmV4cG9ydCB2YXIgYWZ0ZXJSZWFkID0gJ2FmdGVyUmVhZCc7IC8vIHB1cmUtbG9naWMgbW9kaWZpZXJzXG5cbmV4cG9ydCB2YXIgYmVmb3JlTWFpbiA9ICdiZWZvcmVNYWluJztcbmV4cG9ydCB2YXIgbWFpbiA9ICdtYWluJztcbmV4cG9ydCB2YXIgYWZ0ZXJNYWluID0gJ2FmdGVyTWFpbic7IC8vIG1vZGlmaWVyIHdpdGggdGhlIHB1cnBvc2UgdG8gd3JpdGUgdG8gdGhlIERPTSAob3Igd3JpdGUgaW50byBhIGZyYW1ld29yayBzdGF0ZSlcblxuZXhwb3J0IHZhciBiZWZvcmVXcml0ZSA9ICdiZWZvcmVXcml0ZSc7XG5leHBvcnQgdmFyIHdyaXRlID0gJ3dyaXRlJztcbmV4cG9ydCB2YXIgYWZ0ZXJXcml0ZSA9ICdhZnRlcldyaXRlJztcbmV4cG9ydCB2YXIgbW9kaWZpZXJQaGFzZXMgPSBbYmVmb3JlUmVhZCwgcmVhZCwgYWZ0ZXJSZWFkLCBiZWZvcmVNYWluLCBtYWluLCBhZnRlck1haW4sIGJlZm9yZVdyaXRlLCB3cml0ZSwgYWZ0ZXJXcml0ZV07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3Qobm9kZSkge1xuICAvLyBJRSAxMSBoYXMgbm8gU2hhZG93Um9vdFxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuU2hhZG93Um9vdDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xufVxuXG5leHBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9OyIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdG8gZXh0ZW5kIHRoaXMgcHJvcGVydHksIGJ1dCBpdCdzIHRoZSBtb3N0XG4gICAgLy8gZWZmZWN0aXZlIHdheSB0byBhcHBseSBzdHlsZXMgdG8gYW4gSFRNTEVsZW1lbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cblxuXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGU7XG4gIHZhciBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICBpZiAoc3RhdGUuZWxlbWVudHMuYXJyb3cpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgICB2YXIgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUuc3R5bGVzLmhhc093blByb3BlcnR5KG5hbWUpID8gc3RhdGUuc3R5bGVzW25hbWVdIDogaW5pdGlhbFN0eWxlc1tuYW1lXSk7IC8vIFNldCBhbGwgdmFsdWVzIHRvIGFuIGVtcHR5IHN0cmluZyB0byB1bnNldCB0aGVtXG5cbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlLCBwcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZVtwcm9wZXJ0eV0gPSAnJztcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSwge30pOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBhcHBseVN0eWxlcyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTsiLCJpbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59IiwiZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCB2YXIgbWluID0gTWF0aC5taW47XG5leHBvcnQgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgdmFyIHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuXG4gIGlmICh1YURhdGEgIT0gbnVsbCAmJiB1YURhdGEuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwiaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTGF5b3V0Vmlld3BvcnQoKSB7XG4gIHJldHVybiAhL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChnZXRVQVN0cmluZygpKTtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cblxuICB2YXIgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSAxO1xuICB2YXIgc2NhbGVZID0gMTtcblxuICBpZiAoaW5jbHVkZVNjYWxlICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBzY2FsZVggPSBlbGVtZW50Lm9mZnNldFdpZHRoID4gMCA/IHJvdW5kKGNsaWVudFJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxIDogMTtcbiAgICBzY2FsZVkgPSBlbGVtZW50Lm9mZnNldEhlaWdodCA+IDAgPyByb3VuZChjbGllbnRSZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxIDogMTtcbiAgfVxuXG4gIHZhciBfcmVmID0gaXNFbGVtZW50KGVsZW1lbnQpID8gZ2V0V2luZG93KGVsZW1lbnQpIDogd2luZG93LFxuICAgICAgdmlzdWFsVmlld3BvcnQgPSBfcmVmLnZpc3VhbFZpZXdwb3J0O1xuXG4gIHZhciBhZGRWaXN1YWxPZmZzZXRzID0gIWlzTGF5b3V0Vmlld3BvcnQoKSAmJiBpc0ZpeGVkU3RyYXRlZ3k7XG4gIHZhciB4ID0gKGNsaWVudFJlY3QubGVmdCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCA6IDApKSAvIHNjYWxlWDtcbiAgdmFyIHkgPSAoY2xpZW50UmVjdC50b3AgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcCA6IDApKSAvIHNjYWxlWTtcbiAgdmFyIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlWDtcbiAgdmFyIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGVZO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgbGVmdDogeCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwiaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGFpbnMocGFyZW50LCBjaGlsZCkge1xuICB2YXIgcm9vdE5vZGUgPSBjaGlsZC5nZXRSb290Tm9kZSAmJiBjaGlsZC5nZXRSb290Tm9kZSgpOyAvLyBGaXJzdCwgYXR0ZW1wdCB3aXRoIGZhc3RlciBuYXRpdmUgbWV0aG9kXG5cbiAgaWYgKHBhcmVudC5jb250YWlucyhjaGlsZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyB0aGVuIGZhbGxiYWNrIHRvIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiB3aXRoIFNoYWRvdyBET00gc3VwcG9ydFxuICBlbHNlIGlmIChyb290Tm9kZSAmJiBpc1NoYWRvd1Jvb3Qocm9vdE5vZGUpKSB7XG4gICAgICB2YXIgbmV4dCA9IGNoaWxkO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChuZXh0ICYmIHBhcmVudC5pc1NhbWVOb2RlKG5leHQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddOiBuZWVkIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhpcy4uLlxuXG5cbiAgICAgICAgbmV4dCA9IG5leHQucGFyZW50Tm9kZSB8fCBuZXh0Lmhvc3Q7XG4gICAgICB9IHdoaWxlIChuZXh0KTtcbiAgICB9IC8vIEdpdmUgdXAsIHRoZSByZXN1bHQgaXMgZmFsc2VcblxuXG4gIHJldHVybiBmYWxzZTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsImltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSB7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgcmV0dXJuICgoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5vd25lckRvY3VtZW50IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIGVsZW1lbnQuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkuZG9jdW1lbnRFbGVtZW50O1xufSIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBhcmVudE5vZGUoZWxlbWVudCkge1xuICBpZiAoZ2V0Tm9kZU5hbWUoZWxlbWVudCkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuICgvLyB0aGlzIGlzIGEgcXVpY2tlciAoYnV0IGxlc3MgdHlwZSBzYWZlKSB3YXkgdG8gc2F2ZSBxdWl0ZSBzb21lIGJ5dGVzIGZyb20gdGhlIGJ1bmRsZVxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICBlbGVtZW50LmFzc2lnbmVkU2xvdCB8fCAvLyBzdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZVxuICAgIGVsZW1lbnQucGFyZW50Tm9kZSB8fCAoIC8vIERPTSBFbGVtZW50IGRldGVjdGVkXG4gICAgaXNTaGFkb3dSb290KGVsZW1lbnQpID8gZWxlbWVudC5ob3N0IDogbnVsbCkgfHwgLy8gU2hhZG93Um9vdCBkZXRlY3RlZFxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBIVE1MRWxlbWVudCBpcyBhIE5vZGVcbiAgICBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgLy8gZmFsbGJhY2tcblxuICApO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPj0gMCA/ICd4JyA6ICd5Jztcbn0iLCJpbXBvcnQgeyBtYXggYXMgbWF0aE1heCwgbWluIGFzIG1hdGhNaW4gfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluKG1pbiwgdmFsdWUsIG1heCkge1xuICByZXR1cm4gbWF0aE1heChtaW4sIG1hdGhNaW4odmFsdWUsIG1heCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbk1heENsYW1wKG1pbiwgdmFsdWUsIG1heCkge1xuICB2YXIgdiA9IHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpO1xuICByZXR1cm4gdiA+IG1heCA/IG1heCA6IHY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSIsImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4cGFuZFRvSGFzaE1hcCh2YWx1ZSwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKGhhc2hNYXAsIGtleSkge1xuICAgIGhhc2hNYXBba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBoYXNoTWFwO1xuICB9LCB7fSk7XG59IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn0iLCJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmLCB3aW4pIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55O1xuICB2YXIgZHByID0gd2luLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4ICogZHByKSAvIGRwciB8fCAwLFxuICAgIHk6IHJvdW5kKHkgKiBkcHIpIC8gZHByIHx8IDBcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBfT2JqZWN0JGFzc2lnbjI7XG5cbiAgdmFyIHBvcHBlciA9IF9yZWYyLnBvcHBlcixcbiAgICAgIHBvcHBlclJlY3QgPSBfcmVmMi5wb3BwZXJSZWN0LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgICAgdmFyaWF0aW9uID0gX3JlZjIudmFyaWF0aW9uLFxuICAgICAgb2Zmc2V0cyA9IF9yZWYyLm9mZnNldHMsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYyLnBvc2l0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX3JlZjIuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgYWRhcHRpdmUgPSBfcmVmMi5hZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9yZWYyLnJvdW5kT2Zmc2V0cyxcbiAgICAgIGlzRml4ZWQgPSBfcmVmMi5pc0ZpeGVkO1xuICB2YXIgX29mZnNldHMkeCA9IG9mZnNldHMueCxcbiAgICAgIHggPSBfb2Zmc2V0cyR4ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeCxcbiAgICAgIF9vZmZzZXRzJHkgPSBvZmZzZXRzLnksXG4gICAgICB5ID0gX29mZnNldHMkeSA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHk7XG5cbiAgdmFyIF9yZWYzID0gdHlwZW9mIHJvdW5kT2Zmc2V0cyA9PT0gJ2Z1bmN0aW9uJyA/IHJvdW5kT2Zmc2V0cyh7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmMy54O1xuICB5ID0gX3JlZjMueTtcbiAgdmFyIGhhc1ggPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd4Jyk7XG4gIHZhciBoYXNZID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneScpO1xuICB2YXIgc2lkZVggPSBsZWZ0O1xuICB2YXIgc2lkZVkgPSB0b3A7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG5cbiAgaWYgKGFkYXB0aXZlKSB7XG4gICAgdmFyIG9mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChwb3BwZXIpO1xuICAgIHZhciBoZWlnaHRQcm9wID0gJ2NsaWVudEhlaWdodCc7XG4gICAgdmFyIHdpZHRoUHJvcCA9ICdjbGllbnRXaWR0aCc7XG5cbiAgICBpZiAob2Zmc2V0UGFyZW50ID09PSBnZXRXaW5kb3cocG9wcGVyKSkge1xuICAgICAgb2Zmc2V0UGFyZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KHBvcHBlcik7XG5cbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gIT09ICdzdGF0aWMnICYmIHBvc2l0aW9uID09PSAnYWJzb2x1dGUnKSB7XG4gICAgICAgIGhlaWdodFByb3AgPSAnc2Nyb2xsSGVpZ2h0JztcbiAgICAgICAgd2lkdGhQcm9wID0gJ3Njcm9sbFdpZHRoJztcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhc3RdOiBmb3JjZSB0eXBlIHJlZmluZW1lbnQsIHdlIGNvbXBhcmUgb2Zmc2V0UGFyZW50IHdpdGggd2luZG93IGFib3ZlLCBidXQgRmxvdyBkb2Vzbid0IGRldGVjdCBpdFxuXG5cbiAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSB0b3AgfHwgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCBwbGFjZW1lbnQgPT09IHJpZ2h0KSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVkgPSBib3R0b207XG4gICAgICB2YXIgb2Zmc2V0WSA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LmhlaWdodCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W2hlaWdodFByb3BdO1xuICAgICAgeSAtPSBvZmZzZXRZIC0gcG9wcGVyUmVjdC5oZWlnaHQ7XG4gICAgICB5ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSBsZWZ0IHx8IChwbGFjZW1lbnQgPT09IHRvcCB8fCBwbGFjZW1lbnQgPT09IGJvdHRvbSkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVYID0gcmlnaHQ7XG4gICAgICB2YXIgb2Zmc2V0WCA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LndpZHRoIDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbd2lkdGhQcm9wXTtcbiAgICAgIHggLT0gb2Zmc2V0WCAtIHBvcHBlclJlY3Qud2lkdGg7XG4gICAgICB4ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tbW9uU3R5bGVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH0sIGFkYXB0aXZlICYmIHVuc2V0U2lkZXMpO1xuXG4gIHZhciBfcmVmNCA9IHJvdW5kT2Zmc2V0cyA9PT0gdHJ1ZSA/IHJvdW5kT2Zmc2V0c0J5RFBSKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSwgZ2V0V2luZG93KHBvcHBlcikpIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmNC54O1xuICB5ID0gX3JlZjQueTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMSA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNSkge1xuICB2YXIgc3RhdGUgPSBfcmVmNS5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNS5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvbixcbiAgICBpc0ZpeGVkOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciBwYXNzaXZlID0ge1xuICBwYXNzaXZlOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgaW5zdGFuY2UgPSBfcmVmLmluc3RhbmNlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJHNjcm9sbCA9IG9wdGlvbnMuc2Nyb2xsLFxuICAgICAgc2Nyb2xsID0gX29wdGlvbnMkc2Nyb2xsID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkc2Nyb2xsLFxuICAgICAgX29wdGlvbnMkcmVzaXplID0gb3B0aW9ucy5yZXNpemUsXG4gICAgICByZXNpemUgPSBfb3B0aW9ucyRyZXNpemUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyZXNpemU7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coc3RhdGUuZWxlbWVudHMucG9wcGVyKTtcbiAgdmFyIHNjcm9sbFBhcmVudHMgPSBbXS5jb25jYXQoc3RhdGUuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsIHN0YXRlLnNjcm9sbFBhcmVudHMucG9wcGVyKTtcblxuICBpZiAoc2Nyb2xsKSB7XG4gICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgIHNjcm9sbFBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlc2l6ZSkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgICBzY3JvbGxQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXNpemUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH1cbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2V2ZW50TGlzdGVuZXJzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBmdW5jdGlvbiBmbigpIHt9LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgZGF0YToge31cbn07IiwidmFyIGhhc2ggPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwidmFyIGhhc2ggPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGwobm9kZSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbi5wYWdlWU9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wXG4gIH07XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSB7XG4gIC8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbiAgLy8gaW5jb3JyZWN0IGZvciBSVEwuXG4gIC8vIFBvcHBlciAxIGlzIGJyb2tlbiBpbiB0aGlzIGNhc2UgYW5kIG5ldmVyIGhhZCBhIGJ1ZyByZXBvcnQgc28gbGV0J3MgYXNzdW1lXG4gIC8vIGl0J3Mgbm90IGFuIGlzc3VlLiBJIGRvbid0IHRoaW5rIGFueW9uZSBldmVyIHNwZWNpZmllcyB3aWR0aCBvbiA8aHRtbD5cbiAgLy8gYW55d2F5LlxuICAvLyBCcm93c2VycyB3aGVyZSB0aGUgbGVmdCBzY3JvbGxiYXIgZG9lc24ndCBjYXVzZSBhbiBpc3N1ZSByZXBvcnQgYDBgIGZvclxuICAvLyB0aGlzIChlLmcuIEVkZ2UgMjAxOSwgSUUxMSwgU2FmYXJpKVxuICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGdldFdpbmRvd1Njcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gRmlyZWZveCB3YW50cyB1cyB0byBjaGVjayBgLXhgIGFuZCBgLXlgIHZhcmlhdGlvbnMgYXMgd2VsbFxuICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvdyxcbiAgICAgIG92ZXJmbG93WCA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WCxcbiAgICAgIG92ZXJmbG93WSA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WTtcblxuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVuLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKTtcbn0iLCJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsImltcG9ydCBnZXRTY3JvbGxQYXJlbnQgZnJvbSBcIi4vZ2V0U2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG4vKlxuZ2l2ZW4gYSBET00gZWxlbWVudCwgcmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBzY3JvbGwgcGFyZW50cywgdXAgdGhlIGxpc3Qgb2YgYW5jZXNvcnNcbnVudGlsIHdlIGdldCB0byB0aGUgdG9wIHdpbmRvdyBvYmplY3QuIFRoaXMgbGlzdCBpcyB3aGF0IHdlIGF0dGFjaCBzY3JvbGwgbGlzdGVuZXJzXG50bywgYmVjYXVzZSBpZiBhbnkgb2YgdGhlc2UgcGFyZW50IGVsZW1lbnRzIHNjcm9sbCwgd2UnbGwgbmVlZCB0byByZS1jYWxjdWxhdGUgdGhlXG5yZWZlcmVuY2UgZWxlbWVudCdzIHBvc2l0aW9uLlxuKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFNjcm9sbFBhcmVudHMoZWxlbWVudCwgbGlzdCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cblxuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpO1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50ID09PSAoKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5KTtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhzY3JvbGxQYXJlbnQpO1xuICB2YXIgdGFyZ2V0ID0gaXNCb2R5ID8gW3dpbl0uY29uY2F0KHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNTY3JvbGxQYXJlbnQoc2Nyb2xsUGFyZW50KSA/IHNjcm9sbFBhcmVudCA6IFtdKSA6IHNjcm9sbFBhcmVudDtcbiAgdmFyIHVwZGF0ZWRMaXN0ID0gbGlzdC5jb25jYXQodGFyZ2V0KTtcbiAgcmV0dXJuIGlzQm9keSA/IHVwZGF0ZWRMaXN0IDogLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IGlzQm9keSB0ZWxscyB1cyB0YXJnZXQgd2lsbCBiZSBhbiBIVE1MRWxlbWVudCBoZXJlXG4gIHVwZGF0ZWRMaXN0LmNvbmNhdChsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKHRhcmdldCkpKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJlY3QsIHtcbiAgICBsZWZ0OiByZWN0LngsXG4gICAgdG9wOiByZWN0LnksXG4gICAgcmlnaHQ6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiByZWN0LnkgKyByZWN0LmhlaWdodFxuICB9KTtcbn0iLCJpbXBvcnQgeyB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZpZXdwb3J0UmVjdCBmcm9tIFwiLi9nZXRWaWV3cG9ydFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudFJlY3QgZnJvbSBcIi4vZ2V0RG9jdW1lbnRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi4vdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBmYWxzZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICByZWN0LnRvcCA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC53aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QueCA9IHJlY3QubGVmdDtcbiAgcmVjdC55ID0gcmVjdC50b3A7XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydCA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSkgOiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSA6IHJlY3RUb0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkpO1xufSAvLyBBIFwiY2xpcHBpbmcgcGFyZW50XCIgaXMgYW4gb3ZlcmZsb3dhYmxlIGNvbnRhaW5lciB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2l0aCBhIHBvc2l0aW9uIGRpZmZlcmVudCBmcm9tXG4vLyBgaW5pdGlhbGBcblxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkge1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIHZhciBjYW5Fc2NhcGVDbGlwcGluZyA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pID49IDA7XG4gIHZhciBjbGlwcGVyRWxlbWVudCA9IGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIGlmICghaXNFbGVtZW50KGNsaXBwZXJFbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuXG5cbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNsaXBwaW5nUGFyZW50KSB7XG4gICAgcmV0dXJuIGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgJiYgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJiBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5JztcbiAgfSk7XG59IC8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIHBhcmVudHNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoZWxlbWVudCwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpIHtcbiAgdmFyIG1haW5DbGlwcGluZ1BhcmVudHMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nUGFyZW50cycgPyBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gW10uY29uY2F0KG1haW5DbGlwcGluZ1BhcmVudHMsIFtyb290Qm91bmRhcnldKTtcbiAgdmFyIGZpcnN0Q2xpcHBpbmdQYXJlbnQgPSBjbGlwcGluZ1BhcmVudHNbMF07XG4gIHZhciBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ1BhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2NSZWN0LCBjbGlwcGluZ1BhcmVudCkge1xuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBmaXJzdENsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkpO1xuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG4gIHJldHVybiBjbGlwcGluZ1JlY3Q7XG59IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59IiwiaW1wb3J0IGdldENsaXBwaW5nUmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBjbGlwcGluZ1BhcmVudHMsIHJlZmVyZW5jZSwgcG9wcGVyLCBib3R0b20sIHRvcCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi9leHBhbmRUb0hhc2hNYXAuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIF9vcHRpb25zJHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zJHBsYWNlbWVudCA9PT0gdm9pZCAwID8gc3RhdGUucGxhY2VtZW50IDogX29wdGlvbnMkcGxhY2VtZW50LFxuICAgICAgX29wdGlvbnMkc3RyYXRlZ3kgPSBfb3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIHN0cmF0ZWd5ID0gX29wdGlvbnMkc3RyYXRlZ3kgPT09IHZvaWQgMCA/IHN0YXRlLnN0cmF0ZWd5IDogX29wdGlvbnMkc3RyYXRlZ3ksXG4gICAgICBfb3B0aW9ucyRib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucyRib3VuZGFyeSA9PT0gdm9pZCAwID8gY2xpcHBpbmdQYXJlbnRzIDogX29wdGlvbnMkYm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRyb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucyRyb290Qm91bmRhcnkgPT09IHZvaWQgMCA/IHZpZXdwb3J0IDogX29wdGlvbnMkcm9vdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZWxlbWVudENvbnRlID0gX29wdGlvbnMuZWxlbWVudENvbnRleHQsXG4gICAgICBlbGVtZW50Q29udGV4dCA9IF9vcHRpb25zJGVsZW1lbnRDb250ZSA9PT0gdm9pZCAwID8gcG9wcGVyIDogX29wdGlvbnMkZWxlbWVudENvbnRlLFxuICAgICAgX29wdGlvbnMkYWx0Qm91bmRhcnkgPSBfb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMkYWx0Qm91bmRhcnkgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucyRwYWRkaW5nID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkcGFkZGluZztcbiAgdmFyIHBhZGRpbmdPYmplY3QgPSBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xuICB2YXIgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyByZWZlcmVuY2UgOiBwb3BwZXI7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgdmFyIGNsaXBwaW5nQ2xpZW50UmVjdCA9IGdldENsaXBwaW5nUmVjdChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCBnZXREb2N1bWVudEVsZW1lbnQoc3RhdGUuZWxlbWVudHMucG9wcGVyKSwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpO1xuICB2YXIgcmVmZXJlbmNlQ2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChzdGF0ZS5lbGVtZW50cy5yZWZlcmVuY2UpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHJlZmVyZW5jZUNsaWVudFJlY3QsXG4gICAgZWxlbWVudDogcG9wcGVyUmVjdCxcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KTtcbiAgdmFyIHBvcHBlckNsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KE9iamVjdC5hc3NpZ24oe30sIHBvcHBlclJlY3QsIHBvcHBlck9mZnNldHMpKTtcbiAgdmFyIGVsZW1lbnRDbGllbnRSZWN0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHBvcHBlckNsaWVudFJlY3QgOiByZWZlcmVuY2VDbGllbnRSZWN0OyAvLyBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyByZWN0XG4gIC8vIDAgb3IgbmVnYXRpdmUgPSB3aXRoaW4gdGhlIGNsaXBwaW5nIHJlY3RcblxuICB2YXIgb3ZlcmZsb3dPZmZzZXRzID0ge1xuICAgIHRvcDogY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wLFxuICAgIGJvdHRvbTogZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tLFxuICAgIGxlZnQ6IGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCxcbiAgICByaWdodDogZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0XG4gIH07XG4gIHZhciBvZmZzZXREYXRhID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQ7IC8vIE9mZnNldHMgY2FuIGJlIGFwcGxpZWQgb25seSB0byB0aGUgcG9wcGVyIGVsZW1lbnRcblxuICBpZiAoZWxlbWVudENvbnRleHQgPT09IHBvcHBlciAmJiBvZmZzZXREYXRhKSB7XG4gICAgdmFyIG9mZnNldCA9IG9mZnNldERhdGFbcGxhY2VtZW50XTtcbiAgICBPYmplY3Qua2V5cyhvdmVyZmxvd09mZnNldHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIG11bHRpcGx5ID0gW3JpZ2h0LCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gMSA6IC0xO1xuICAgICAgdmFyIGF4aXMgPSBbdG9wLCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gJ3knIDogJ3gnO1xuICAgICAgb3ZlcmZsb3dPZmZzZXRzW2tleV0gKz0gb2Zmc2V0W2F4aXNdICogbXVsdGlwbHk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gb3ZlcmZsb3dPZmZzZXRzO1xufSIsImltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyB2YXJpYXRpb25QbGFjZW1lbnRzLCBiYXNlUGxhY2VtZW50cywgcGxhY2VtZW50cyBhcyBhbGxQbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9IF9vcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9PT0gdm9pZCAwID8gYWxsUGxhY2VtZW50cyA6IF9vcHRpb25zJGFsbG93ZWRBdXRvUDtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpO1xuICB2YXIgcGxhY2VtZW50cyA9IHZhcmlhdGlvbiA/IGZsaXBWYXJpYXRpb25zID8gdmFyaWF0aW9uUGxhY2VtZW50cyA6IHZhcmlhdGlvblBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHZhcmlhdGlvbjtcbiAgfSkgOiBiYXNlUGxhY2VtZW50cztcbiAgdmFyIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhbGxvd2VkQXV0b1BsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpID49IDA7XG4gIH0pO1xuXG4gIGlmIChhbGxvd2VkUGxhY2VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IEZsb3cgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIHR3byBhcnJheSB1bmlvbnMuLi5cblxuXG4gIHZhciBvdmVyZmxvd3MgPSBhbGxvd2VkUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KVtnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCldO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG92ZXJmbG93cykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBvdmVyZmxvd3NbYV0gLSBvdmVyZmxvd3NbYl07XG4gIH0pO1xufSIsImltcG9ydCBnZXRPcHBvc2l0ZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgY29tcHV0ZUF1dG9QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyBib3R0b20sIHRvcCwgc3RhcnQsIHJpZ2h0LCBsZWZ0LCBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgaWYgKGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0bykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5cbmZ1bmN0aW9uIGZsaXAoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgPSBvcHRpb25zLmZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9IG9wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGZsaXBWYXJpYXRpbyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IG9wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzO1xuICB2YXIgcHJlZmVycmVkUGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gYmFzZVBsYWNlbWVudCA9PT0gcHJlZmVycmVkUGxhY2VtZW50O1xuICB2YXIgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBWYXJpYXRpb25zID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocHJlZmVycmVkUGxhY2VtZW50KSk7XG4gIHZhciBwbGFjZW1lbnRzID0gW3ByZWZlcnJlZFBsYWNlbWVudF0uY29uY2F0KGZhbGxiYWNrUGxhY2VtZW50cykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0byA/IGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zOiBmbGlwVmFyaWF0aW9ucyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50czogYWxsb3dlZEF1dG9QbGFjZW1lbnRzXG4gICAgfSkgOiBwbGFjZW1lbnQpO1xuICB9LCBbXSk7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGNoZWNrc01hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIG1ha2VGYWxsYmFja0NoZWNrcyA9IHRydWU7XG4gIHZhciBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzWzBdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGxhY2VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwbGFjZW1lbnQgPSBwbGFjZW1lbnRzW2ldO1xuXG4gICAgdmFyIF9iYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gICAgdmFyIGlzU3RhcnRWYXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gc3RhcnQ7XG4gICAgdmFyIGlzVmVydGljYWwgPSBbdG9wLCBib3R0b21dLmluZGV4T2YoX2Jhc2VQbGFjZW1lbnQpID49IDA7XG4gICAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSk7XG4gICAgdmFyIG1haW5WYXJpYXRpb25TaWRlID0gaXNWZXJ0aWNhbCA/IGlzU3RhcnRWYXJpYXRpb24gPyByaWdodCA6IGxlZnQgOiBpc1N0YXJ0VmFyaWF0aW9uID8gYm90dG9tIDogdG9wO1xuXG4gICAgaWYgKHJlZmVyZW5jZVJlY3RbbGVuXSA+IHBvcHBlclJlY3RbbGVuXSkge1xuICAgICAgbWFpblZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgfVxuXG4gICAgdmFyIGFsdFZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgdmFyIGNoZWNrcyA9IFtdO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W19iYXNlUGxhY2VtZW50XSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1ttYWluVmFyaWF0aW9uU2lkZV0gPD0gMCwgb3ZlcmZsb3dbYWx0VmFyaWF0aW9uU2lkZV0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrcy5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgIHJldHVybiBjaGVjaztcbiAgICB9KSkge1xuICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgbWFrZUZhbGxiYWNrQ2hlY2tzID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjaGVja3NNYXAuc2V0KHBsYWNlbWVudCwgY2hlY2tzKTtcbiAgfVxuXG4gIGlmIChtYWtlRmFsbGJhY2tDaGVja3MpIHtcbiAgICAvLyBgMmAgbWF5IGJlIGRlc2lyZWQgaW4gc29tZSBjYXNlcyDigJMgcmVzZWFyY2ggbGF0ZXJcbiAgICB2YXIgbnVtYmVyT2ZDaGVja3MgPSBmbGlwVmFyaWF0aW9ucyA/IDMgOiAxO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX2kpIHtcbiAgICAgIHZhciBmaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50cy5maW5kKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICAgICAgdmFyIGNoZWNrcyA9IGNoZWNrc01hcC5nZXQocGxhY2VtZW50KTtcblxuICAgICAgICBpZiAoY2hlY2tzKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrcy5zbGljZSgwLCBfaSkuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZml0dGluZ1BsYWNlbWVudCkge1xuICAgICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBmaXR0aW5nUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBfaSA9IG51bWJlck9mQ2hlY2tzOyBfaSA+IDA7IF9pLS0pIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoX2kpO1xuXG4gICAgICBpZiAoX3JldCA9PT0gXCJicmVha1wiKSBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUucGxhY2VtZW50ICE9PSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwID0gdHJ1ZTtcbiAgICBzdGF0ZS5wbGFjZW1lbnQgPSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgc3RhdGUucmVzZXQgPSB0cnVlO1xuICB9XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdmbGlwJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGZsaXAsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J10sXG4gIGRhdGE6IHtcbiAgICBfc2tpcDogZmFsc2VcbiAgfVxufTsiLCJpbXBvcnQgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QsIHByZXZlbnRlZE9mZnNldHMpIHtcbiAgaWYgKHByZXZlbnRlZE9mZnNldHMgPT09IHZvaWQgMCkge1xuICAgIHByZXZlbnRlZE9mZnNldHMgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQgLSBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCArIHByZXZlbnRlZE9mZnNldHMueCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0ICsgcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoIC0gcHJldmVudGVkT2Zmc2V0cy54XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF0uc29tZShmdW5jdGlvbiAoc2lkZSkge1xuICAgIHJldHVybiBvdmVyZmxvd1tzaWRlXSA+PSAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGlkZShfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBwcmV2ZW50ZWRPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3c7XG4gIHZhciByZWZlcmVuY2VPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gIH0pO1xuICB2YXIgcG9wcGVyQWx0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gIH0pO1xuICB2YXIgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocmVmZXJlbmNlT3ZlcmZsb3csIHJlZmVyZW5jZVJlY3QpO1xuICB2YXIgcG9wcGVyRXNjYXBlT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHBvcHBlckFsdE92ZXJmbG93LCBwb3BwZXJSZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKTtcbiAgdmFyIGlzUmVmZXJlbmNlSGlkZGVuID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyk7XG4gIHZhciBoYXNQb3BwZXJFc2NhcGVkID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHBvcHBlckVzY2FwZU9mZnNldHMpO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0czogcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHM6IHBvcHBlckVzY2FwZU9mZnNldHMsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW46IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgIGhhc1BvcHBlckVzY2FwZWQ6IGhhc1BvcHBlckVzY2FwZWRcbiAgfTtcbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1yZWZlcmVuY2UtaGlkZGVuJzogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgJ2RhdGEtcG9wcGVyLWVzY2FwZWQnOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnaGlkZScsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J10sXG4gIGZuOiBoaWRlXG59OyIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBwbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBzdGFydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEFsdEF4aXMgZnJvbSBcIi4uL3V0aWxzL2dldEFsdEF4aXMuanNcIjtcbmltcG9ydCB7IHdpdGhpbiwgd2l0aGluTWF4Q2xhbXAgfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi4vdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5pbXBvcnQgeyBtaW4gYXMgbWF0aE1pbiwgbWF4IGFzIG1hdGhNYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXIgPSBvcHRpb25zLnRldGhlcixcbiAgICAgIHRldGhlciA9IF9vcHRpb25zJHRldGhlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHRldGhlcixcbiAgICAgIF9vcHRpb25zJHRldGhlck9mZnNldCA9IG9wdGlvbnMudGV0aGVyT2Zmc2V0LFxuICAgICAgdGV0aGVyT2Zmc2V0ID0gX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkdGV0aGVyT2Zmc2V0O1xuICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeVxuICB9KTtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9ICF2YXJpYXRpb247XG4gIHZhciBtYWluQXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGFsdEF4aXMgPSBnZXRBbHRBeGlzKG1haW5BeGlzKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IHRldGhlck9mZnNldChPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHRldGhlck9mZnNldDtcbiAgdmFyIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXRWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHRldGhlck9mZnNldFZhbHVlLFxuICAgIGFsdEF4aXM6IHRldGhlck9mZnNldFZhbHVlXG4gIH0gOiBPYmplY3QuYXNzaWduKHtcbiAgICBtYWluQXhpczogMCxcbiAgICBhbHRBeGlzOiAwXG4gIH0sIHRldGhlck9mZnNldFZhbHVlKTtcbiAgdmFyIG9mZnNldE1vZGlmaWVyU3RhdGUgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldCA/IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0W3N0YXRlLnBsYWNlbWVudF0gOiBudWxsO1xuICB2YXIgZGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQ7XG5cbiAgICB2YXIgbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgICB2YXIgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc107XG4gICAgdmFyIG1pbiA9IG9mZnNldCArIG92ZXJmbG93W21haW5TaWRlXTtcbiAgICB2YXIgbWF4ID0gb2Zmc2V0IC0gb3ZlcmZsb3dbYWx0U2lkZV07XG4gICAgdmFyIGFkZGl0aXZlID0gdGV0aGVyID8gLXBvcHBlclJlY3RbbGVuXSAvIDIgOiAwO1xuICAgIHZhciBtaW5MZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gcmVmZXJlbmNlUmVjdFtsZW5dIDogcG9wcGVyUmVjdFtsZW5dO1xuICAgIHZhciBtYXhMZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gLXBvcHBlclJlY3RbbGVuXSA6IC1yZWZlcmVuY2VSZWN0W2xlbl07IC8vIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgYXJyb3cgaW4gdGhlIGNhbGN1bGF0aW9uIHNvIHRoZSBhcnJvdyBkb2Vzbid0IGdvXG4gICAgLy8gb3V0c2lkZSB0aGUgcmVmZXJlbmNlIGJvdW5kc1xuXG4gICAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICAgIHZhciBhcnJvd1JlY3QgPSB0ZXRoZXIgJiYgYXJyb3dFbGVtZW50ID8gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICAgIHZhciBhcnJvd1BhZGRpbmdPYmplY3QgPSBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10gPyBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10ucGFkZGluZyA6IGdldEZyZXNoU2lkZU9iamVjdCgpO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNaW4gPSBhcnJvd1BhZGRpbmdPYmplY3RbbWFpblNpZGVdO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNYXggPSBhcnJvd1BhZGRpbmdPYmplY3RbYWx0U2lkZV07IC8vIElmIHRoZSByZWZlcmVuY2UgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgYXJyb3cgbGVuZ3RoLCB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaW5jbHVkZSBpdHMgZnVsbCBzaXplIGluIHRoZSBjYWxjdWxhdGlvbi4gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbFxuICAgIC8vIGFuZCBuZWFyIHRoZSBlZGdlIG9mIGEgYm91bmRhcnksIHRoZSBwb3BwZXIgY2FuIG92ZXJmbG93IGV2ZW4gaWYgdGhlXG4gICAgLy8gcmVmZXJlbmNlIGlzIG5vdCBvdmVyZmxvd2luZyBhcyB3ZWxsIChlLmcuIHZpcnR1YWwgZWxlbWVudHMgd2l0aCBub1xuICAgIC8vIHdpZHRoIG9yIGhlaWdodClcblxuICAgIHZhciBhcnJvd0xlbiA9IHdpdGhpbigwLCByZWZlcmVuY2VSZWN0W2xlbl0sIGFycm93UmVjdFtsZW5dKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiAtIGFkZGl0aXZlIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgbWF4T2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gLXJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgKyBhZGRpdGl2ZSArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWF4TGVuICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICB2YXIgY2xpZW50T2Zmc2V0ID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBtYWluQXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDAgOiAwO1xuICAgIHZhciBvZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJCA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbbWFpbkF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkIDogMDtcbiAgICB2YXIgdGV0aGVyTWluID0gb2Zmc2V0ICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICB2YXIgdGV0aGVyTWF4ID0gb2Zmc2V0ICsgbWF4T2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZTtcbiAgICB2YXIgcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKHRldGhlciA/IG1hdGhNaW4obWluLCB0ZXRoZXJNaW4pIDogbWluLCBvZmZzZXQsIHRldGhlciA/IG1hdGhNYXgobWF4LCB0ZXRoZXJNYXgpIDogbWF4KTtcbiAgICBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgfVxuXG4gIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkMjtcblxuICAgIHZhciBfbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gdG9wIDogbGVmdDtcblxuICAgIHZhciBfYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcblxuICAgIHZhciBfb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1thbHRBeGlzXTtcblxuICAgIHZhciBfbGVuID0gYWx0QXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgdmFyIF9taW4gPSBfb2Zmc2V0ICsgb3ZlcmZsb3dbX21haW5TaWRlXTtcblxuICAgIHZhciBfbWF4ID0gX29mZnNldCAtIG92ZXJmbG93W19hbHRTaWRlXTtcblxuICAgIHZhciBpc09yaWdpblNpZGUgPSBbdG9wLCBsZWZ0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVthbHRBeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJDIgOiAwO1xuXG4gICAgdmFyIF90ZXRoZXJNaW4gPSBpc09yaWdpblNpZGUgPyBfbWluIDogX29mZnNldCAtIHJlZmVyZW5jZVJlY3RbX2xlbl0gLSBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcztcblxuICAgIHZhciBfdGV0aGVyTWF4ID0gaXNPcmlnaW5TaWRlID8gX29mZnNldCArIHJlZmVyZW5jZVJlY3RbX2xlbl0gKyBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcyA6IF9tYXg7XG5cbiAgICB2YXIgX3ByZXZlbnRlZE9mZnNldCA9IHRldGhlciAmJiBpc09yaWdpblNpZGUgPyB3aXRoaW5NYXhDbGFtcChfdGV0aGVyTWluLCBfb2Zmc2V0LCBfdGV0aGVyTWF4KSA6IHdpdGhpbih0ZXRoZXIgPyBfdGV0aGVyTWluIDogX21pbiwgX29mZnNldCwgdGV0aGVyID8gX3RldGhlck1heCA6IF9tYXgpO1xuXG4gICAgcG9wcGVyT2Zmc2V0c1thbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVthbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQgLSBfb2Zmc2V0O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogcHJldmVudE92ZXJmbG93LFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEhUTUxFbGVtZW50U2Nyb2xsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRIVE1MRWxlbWVudFNjcm9sbCBmcm9tIFwiLi9nZXRIVE1MRWxlbWVudFNjcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChub2RlKSB7XG4gIGlmIChub2RlID09PSBnZXRXaW5kb3cobm9kZSkgfHwgIWlzSFRNTEVsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gZ2V0V2luZG93U2Nyb2xsKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudFNjcm9sbChub2RlKTtcbiAgfVxufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZVNjcm9sbCBmcm9tIFwiLi9nZXROb2RlU2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNjYWxlZChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IHJvdW5kKHJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcm91bmQocmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCwgaXNGaXhlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59IiwiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07IiwiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXNdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsiLCJpbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7XG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSBcIi4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tIFwiLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanNcIjtcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanNcIjtcbmltcG9ydCBvZmZzZXQgZnJvbSBcIi4vbW9kaWZpZXJzL29mZnNldC5qc1wiO1xuaW1wb3J0IGZsaXAgZnJvbSBcIi4vbW9kaWZpZXJzL2ZsaXAuanNcIjtcbmltcG9ydCBwcmV2ZW50T3ZlcmZsb3cgZnJvbSBcIi4vbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGFycm93IGZyb20gXCIuL21vZGlmaWVycy9hcnJvdy5qc1wiO1xuaW1wb3J0IGhpZGUgZnJvbSBcIi4vbW9kaWZpZXJzL2hpZGUuanNcIjtcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0gW2V2ZW50TGlzdGVuZXJzLCBwb3BwZXJPZmZzZXRzLCBjb21wdXRlU3R5bGVzLCBhcHBseVN0eWxlcywgb2Zmc2V0LCBmbGlwLCBwcmV2ZW50T3ZlcmZsb3csIGFycm93LCBoaWRlXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyIsIi8qIVxuICAqIEJvb3RzdHJhcCB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuaW1wb3J0ICogYXMgUG9wcGVyIGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9kYXRhLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBlbGVtZW50TWFwID0gbmV3IE1hcCgpO1xuY29uc3QgRGF0YSA9IHtcbiAgc2V0KGVsZW1lbnQsIGtleSwgaW5zdGFuY2UpIHtcbiAgICBpZiAoIWVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICBlbGVtZW50TWFwLnNldChlbGVtZW50LCBuZXcgTWFwKCkpO1xuICAgIH1cbiAgICBjb25zdCBpbnN0YW5jZU1hcCA9IGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpO1xuXG4gICAgLy8gbWFrZSBpdCBjbGVhciB3ZSBvbmx5IHdhbnQgb25lIGluc3RhbmNlIHBlciBlbGVtZW50XG4gICAgLy8gY2FuIGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBtdWx0aXBsZSBrZXkvaW5zdGFuY2VzIGFyZSBmaW5lIHRvIGJlIHVzZWRcbiAgICBpZiAoIWluc3RhbmNlTWFwLmhhcyhrZXkpICYmIGluc3RhbmNlTWFwLnNpemUgIT09IDApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKGBCb290c3RyYXAgZG9lc24ndCBhbGxvdyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIHBlciBlbGVtZW50LiBCb3VuZCBpbnN0YW5jZTogJHtBcnJheS5mcm9tKGluc3RhbmNlTWFwLmtleXMoKSlbMF19LmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbnN0YW5jZU1hcC5zZXQoa2V5LCBpbnN0YW5jZSk7XG4gIH0sXG4gIGdldChlbGVtZW50LCBrZXkpIHtcbiAgICBpZiAoZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBlbGVtZW50TWFwLmdldChlbGVtZW50KS5nZXQoa2V5KSB8fCBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgcmVtb3ZlKGVsZW1lbnQsIGtleSkge1xuICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KTtcbiAgICBpbnN0YW5jZU1hcC5kZWxldGUoa2V5KTtcblxuICAgIC8vIGZyZWUgdXAgZWxlbWVudCByZWZlcmVuY2VzIGlmIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgbGVmdCBmb3IgYW4gZWxlbWVudFxuICAgIGlmIChpbnN0YW5jZU1hcC5zaXplID09PSAwKSB7XG4gICAgICBlbGVtZW50TWFwLmRlbGV0ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2luZGV4LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTUFYX1VJRCA9IDEwMDAwMDA7XG5jb25zdCBNSUxMSVNFQ09ORFNfTVVMVElQTElFUiA9IDEwMDA7XG5jb25zdCBUUkFOU0lUSU9OX0VORCA9ICd0cmFuc2l0aW9uZW5kJztcblxuLyoqXG4gKiBQcm9wZXJseSBlc2NhcGUgSURzIHNlbGVjdG9ycyB0byBoYW5kbGUgd2VpcmQgSURzXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmNvbnN0IHBhcnNlU2VsZWN0b3IgPSBzZWxlY3RvciA9PiB7XG4gIGlmIChzZWxlY3RvciAmJiB3aW5kb3cuQ1NTICYmIHdpbmRvdy5DU1MuZXNjYXBlKSB7XG4gICAgLy8gZG9jdW1lbnQucXVlcnlTZWxlY3RvciBuZWVkcyBlc2NhcGluZyB0byBoYW5kbGUgSURzIChodG1sNSspIGNvbnRhaW5pbmcgZm9yIGluc3RhbmNlIC9cbiAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnJlcGxhY2UoLyMoW15cXHNcIiMnXSspL2csIChtYXRjaCwgaWQpID0+IGAjJHtDU1MuZXNjYXBlKGlkKX1gKTtcbiAgfVxuICByZXR1cm4gc2VsZWN0b3I7XG59O1xuXG4vLyBTaG91dC1vdXQgQW5ndXMgQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcbmNvbnN0IHRvVHlwZSA9IG9iamVjdCA9PiB7XG4gIGlmIChvYmplY3QgPT09IG51bGwgfHwgb2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7b2JqZWN0fWA7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpLm1hdGNoKC9cXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBQdWJsaWMgVXRpbCBBUElcbiAqL1xuXG5jb25zdCBnZXRVSUQgPSBwcmVmaXggPT4ge1xuICBkbyB7XG4gICAgcHJlZml4ICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE1BWF9VSUQpO1xuICB9IHdoaWxlIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmVmaXgpKTtcbiAgcmV0dXJuIHByZWZpeDtcbn07XG5jb25zdCBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8vIEdldCB0cmFuc2l0aW9uLWR1cmF0aW9uIG9mIHRoZSBlbGVtZW50XG4gIGxldCB7XG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgIHRyYW5zaXRpb25EZWxheVxuICB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRGVsYXkgPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpO1xuXG4gIC8vIFJldHVybiAwIGlmIGVsZW1lbnQgb3IgdHJhbnNpdGlvbiBkdXJhdGlvbiBpcyBub3QgZm91bmRcbiAgaWYgKCFmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiAmJiAhZmxvYXRUcmFuc2l0aW9uRGVsYXkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8vIElmIG11bHRpcGxlIGR1cmF0aW9ucyBhcmUgZGVmaW5lZCwgdGFrZSB0aGUgZmlyc3RcbiAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uLnNwbGl0KCcsJylbMF07XG4gIHRyYW5zaXRpb25EZWxheSA9IHRyYW5zaXRpb25EZWxheS5zcGxpdCgnLCcpWzBdO1xuICByZXR1cm4gKE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbikgKyBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpKSAqIE1JTExJU0VDT05EU19NVUxUSVBMSUVSO1xufTtcbmNvbnN0IHRyaWdnZXJUcmFuc2l0aW9uRW5kID0gZWxlbWVudCA9PiB7XG4gIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoVFJBTlNJVElPTl9FTkQpKTtcbn07XG5jb25zdCBpc0VsZW1lbnQgPSBvYmplY3QgPT4ge1xuICBpZiAoIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIG9iamVjdC5qcXVlcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0WzBdO1xuICB9XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0Lm5vZGVUeXBlICE9PSAndW5kZWZpbmVkJztcbn07XG5jb25zdCBnZXRFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgLy8gaXQncyBhIGpRdWVyeSBvYmplY3Qgb3IgYSBub2RlIGVsZW1lbnRcbiAgaWYgKGlzRWxlbWVudChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdC5qcXVlcnkgPyBvYmplY3RbMF0gOiBvYmplY3Q7XG4gIH1cbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGFyc2VTZWxlY3RvcihvYmplY3QpKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5jb25zdCBpc1Zpc2libGUgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFpc0VsZW1lbnQoZWxlbWVudCkgfHwgZWxlbWVudC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBlbGVtZW50SXNWaXNpYmxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCd2aXNpYmlsaXR5JykgPT09ICd2aXNpYmxlJztcbiAgLy8gSGFuZGxlIGBkZXRhaWxzYCBlbGVtZW50IGFzIGl0cyBjb250ZW50IG1heSBmYWxzaWUgYXBwZWFyIHZpc2libGUgd2hlbiBpdCBpcyBjbG9zZWRcbiAgY29uc3QgY2xvc2VkRGV0YWlscyA9IGVsZW1lbnQuY2xvc2VzdCgnZGV0YWlsczpub3QoW29wZW5dKScpO1xuICBpZiAoIWNsb3NlZERldGFpbHMpIHtcbiAgICByZXR1cm4gZWxlbWVudElzVmlzaWJsZTtcbiAgfVxuICBpZiAoY2xvc2VkRGV0YWlscyAhPT0gZWxlbWVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSBlbGVtZW50LmNsb3Nlc3QoJ3N1bW1hcnknKTtcbiAgICBpZiAoc3VtbWFyeSAmJiBzdW1tYXJ5LnBhcmVudE5vZGUgIT09IGNsb3NlZERldGFpbHMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHN1bW1hcnkgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnRJc1Zpc2libGU7XG59O1xuY29uc3QgaXNEaXNhYmxlZCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIGVsZW1lbnQuZGlzYWJsZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuZGlzYWJsZWQ7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlZCcpICE9PSAnZmFsc2UnO1xufTtcbmNvbnN0IGZpbmRTaGFkb3dSb290ID0gZWxlbWVudCA9PiB7XG4gIGlmICghZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmF0dGFjaFNoYWRvdykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2FuIGZpbmQgdGhlIHNoYWRvdyByb290IG90aGVyd2lzZSBpdCdsbCByZXR1cm4gdGhlIGRvY3VtZW50XG4gIGlmICh0eXBlb2YgZWxlbWVudC5nZXRSb290Tm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IHJvb3QgPSBlbGVtZW50LmdldFJvb3ROb2RlKCk7XG4gICAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IG51bGw7XG4gIH1cbiAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICAvLyB3aGVuIHdlIGRvbid0IGZpbmQgYSBzaGFkb3cgcm9vdFxuICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBmaW5kU2hhZG93Um9vdChlbGVtZW50LnBhcmVudE5vZGUpO1xufTtcbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuLyoqXG4gKiBUcmljayB0byByZXN0YXJ0IGFuIGVsZW1lbnQncyBhbmltYXRpb25cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHZvaWRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmNoYXJpc3RoZW8uaW8vYmxvZy8yMDIxLzAyL3Jlc3RhcnQtYS1jc3MtYW5pbWF0aW9uLXdpdGgtamF2YXNjcmlwdC8jcmVzdGFydGluZy1hLWNzcy1hbmltYXRpb25cbiAqL1xuY29uc3QgcmVmbG93ID0gZWxlbWVudCA9PiB7XG4gIGVsZW1lbnQub2Zmc2V0SGVpZ2h0OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xufTtcbmNvbnN0IGdldGpRdWVyeSA9ICgpID0+IHtcbiAgaWYgKHdpbmRvdy5qUXVlcnkgJiYgIWRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCdkYXRhLWJzLW5vLWpxdWVyeScpKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5qUXVlcnk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuY29uc3QgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcyA9IFtdO1xuY29uc3Qgb25ET01Db250ZW50TG9hZGVkID0gY2FsbGJhY2sgPT4ge1xuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgLy8gYWRkIGxpc3RlbmVyIG9uIHRoZSBmaXJzdCBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGlzIGluIGxvYWRpbmcgc3RhdGVcbiAgICBpZiAoIURPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MpIHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygpO1xuICB9XG59O1xuY29uc3QgaXNSVEwgPSAoKSA9PiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGlyID09PSAncnRsJztcbmNvbnN0IGRlZmluZUpRdWVyeVBsdWdpbiA9IHBsdWdpbiA9PiB7XG4gIG9uRE9NQ29udGVudExvYWRlZCgoKSA9PiB7XG4gICAgY29uc3QgJCA9IGdldGpRdWVyeSgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICgkKSB7XG4gICAgICBjb25zdCBuYW1lID0gcGx1Z2luLk5BTUU7XG4gICAgICBjb25zdCBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkLmZuW25hbWVdO1xuICAgICAgJC5mbltuYW1lXSA9IHBsdWdpbi5qUXVlcnlJbnRlcmZhY2U7XG4gICAgICAkLmZuW25hbWVdLkNvbnN0cnVjdG9yID0gcGx1Z2luO1xuICAgICAgJC5mbltuYW1lXS5ub0NvbmZsaWN0ID0gKCkgPT4ge1xuICAgICAgICAkLmZuW25hbWVdID0gSlFVRVJZX05PX0NPTkZMSUNUO1xuICAgICAgICByZXR1cm4gcGx1Z2luLmpRdWVyeUludGVyZmFjZTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBleGVjdXRlID0gKHBvc3NpYmxlQ2FsbGJhY2ssIGFyZ3MgPSBbXSwgZGVmYXVsdFZhbHVlID0gcG9zc2libGVDYWxsYmFjaykgPT4ge1xuICByZXR1cm4gdHlwZW9mIHBvc3NpYmxlQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBwb3NzaWJsZUNhbGxiYWNrKC4uLmFyZ3MpIDogZGVmYXVsdFZhbHVlO1xufTtcbmNvbnN0IGV4ZWN1dGVBZnRlclRyYW5zaXRpb24gPSAoY2FsbGJhY2ssIHRyYW5zaXRpb25FbGVtZW50LCB3YWl0Rm9yVHJhbnNpdGlvbiA9IHRydWUpID0+IHtcbiAgaWYgKCF3YWl0Rm9yVHJhbnNpdGlvbikge1xuICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBkdXJhdGlvblBhZGRpbmcgPSA1O1xuICBjb25zdCBlbXVsYXRlZER1cmF0aW9uID0gZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodHJhbnNpdGlvbkVsZW1lbnQpICsgZHVyYXRpb25QYWRkaW5nO1xuICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gIGNvbnN0IGhhbmRsZXIgPSAoe1xuICAgIHRhcmdldFxuICB9KSA9PiB7XG4gICAgaWYgKHRhcmdldCAhPT0gdHJhbnNpdGlvbkVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICB0cmFuc2l0aW9uRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKTtcbiAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgfTtcbiAgdHJhbnNpdGlvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihUUkFOU0lUSU9OX0VORCwgaGFuZGxlcik7XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRWxlbWVudCk7XG4gICAgfVxuICB9LCBlbXVsYXRlZER1cmF0aW9uKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwcmV2aW91cy9uZXh0IGVsZW1lbnQgb2YgYSBsaXN0LlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IGxpc3QgICAgVGhlIGxpc3Qgb2YgZWxlbWVudHNcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50ICAgVGhlIGFjdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gc2hvdWxkR2V0TmV4dCAgIENob29zZSB0byBnZXQgbmV4dCBvciBwcmV2aW91cyBlbGVtZW50XG4gKiBAcGFyYW0gaXNDeWNsZUFsbG93ZWRcbiAqIEByZXR1cm4ge0VsZW1lbnR8ZWxlbX0gVGhlIHByb3BlciBlbGVtZW50XG4gKi9cbmNvbnN0IGdldE5leHRBY3RpdmVFbGVtZW50ID0gKGxpc3QsIGFjdGl2ZUVsZW1lbnQsIHNob3VsZEdldE5leHQsIGlzQ3ljbGVBbGxvd2VkKSA9PiB7XG4gIGNvbnN0IGxpc3RMZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gbGlzdC5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpO1xuXG4gIC8vIGlmIHRoZSBlbGVtZW50IGRvZXMgbm90IGV4aXN0IGluIHRoZSBsaXN0IHJldHVybiBhbiBlbGVtZW50XG4gIC8vIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIGFuZCBpZiBjeWNsZSBpcyBhbGxvd2VkXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gIXNob3VsZEdldE5leHQgJiYgaXNDeWNsZUFsbG93ZWQgPyBsaXN0W2xpc3RMZW5ndGggLSAxXSA6IGxpc3RbMF07XG4gIH1cbiAgaW5kZXggKz0gc2hvdWxkR2V0TmV4dCA/IDEgOiAtMTtcbiAgaWYgKGlzQ3ljbGVBbGxvd2VkKSB7XG4gICAgaW5kZXggPSAoaW5kZXggKyBsaXN0TGVuZ3RoKSAlIGxpc3RMZW5ndGg7XG4gIH1cbiAgcmV0dXJuIGxpc3RbTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGxpc3RMZW5ndGggLSAxKSldO1xufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9ldmVudC1oYW5kbGVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IG5hbWVzcGFjZVJlZ2V4ID0gL1teLl0qKD89XFwuLiopXFwufC4qLztcbmNvbnN0IHN0cmlwTmFtZVJlZ2V4ID0gL1xcLi4qLztcbmNvbnN0IHN0cmlwVWlkUmVnZXggPSAvOjpcXGQrJC87XG5jb25zdCBldmVudFJlZ2lzdHJ5ID0ge307IC8vIEV2ZW50cyBzdG9yYWdlXG5sZXQgdWlkRXZlbnQgPSAxO1xuY29uc3QgY3VzdG9tRXZlbnRzID0ge1xuICBtb3VzZWVudGVyOiAnbW91c2VvdmVyJyxcbiAgbW91c2VsZWF2ZTogJ21vdXNlb3V0J1xufTtcbmNvbnN0IG5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoWydjbGljaycsICdkYmxjbGljaycsICdtb3VzZXVwJywgJ21vdXNlZG93bicsICdjb250ZXh0bWVudScsICdtb3VzZXdoZWVsJywgJ0RPTU1vdXNlU2Nyb2xsJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdtb3VzZW1vdmUnLCAnc2VsZWN0c3RhcnQnLCAnc2VsZWN0ZW5kJywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnb3JpZW50YXRpb25jaGFuZ2UnLCAndG91Y2hzdGFydCcsICd0b3VjaG1vdmUnLCAndG91Y2hlbmQnLCAndG91Y2hjYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlcm1vdmUnLCAncG9pbnRlcnVwJywgJ3BvaW50ZXJsZWF2ZScsICdwb2ludGVyY2FuY2VsJywgJ2dlc3R1cmVzdGFydCcsICdnZXN0dXJlY2hhbmdlJywgJ2dlc3R1cmVlbmQnLCAnZm9jdXMnLCAnYmx1cicsICdjaGFuZ2UnLCAncmVzZXQnLCAnc2VsZWN0JywgJ3N1Ym1pdCcsICdmb2N1c2luJywgJ2ZvY3Vzb3V0JywgJ2xvYWQnLCAndW5sb2FkJywgJ2JlZm9yZXVubG9hZCcsICdyZXNpemUnLCAnbW92ZScsICdET01Db250ZW50TG9hZGVkJywgJ3JlYWR5c3RhdGVjaGFuZ2UnLCAnZXJyb3InLCAnYWJvcnQnLCAnc2Nyb2xsJ10pO1xuXG4vKipcbiAqIFByaXZhdGUgbWV0aG9kc1xuICovXG5cbmZ1bmN0aW9uIG1ha2VFdmVudFVpZChlbGVtZW50LCB1aWQpIHtcbiAgcmV0dXJuIHVpZCAmJiBgJHt1aWR9Ojoke3VpZEV2ZW50Kyt9YCB8fCBlbGVtZW50LnVpZEV2ZW50IHx8IHVpZEV2ZW50Kys7XG59XG5mdW5jdGlvbiBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpIHtcbiAgY29uc3QgdWlkID0gbWFrZUV2ZW50VWlkKGVsZW1lbnQpO1xuICBlbGVtZW50LnVpZEV2ZW50ID0gdWlkO1xuICBldmVudFJlZ2lzdHJ5W3VpZF0gPSBldmVudFJlZ2lzdHJ5W3VpZF0gfHwge307XG4gIHJldHVybiBldmVudFJlZ2lzdHJ5W3VpZF07XG59XG5mdW5jdGlvbiBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG4gICAgaHlkcmF0ZU9iaihldmVudCwge1xuICAgICAgZGVsZWdhdGVUYXJnZXQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgICBpZiAoaGFuZGxlci5vbmVPZmYpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkoZWxlbWVudCwgW2V2ZW50XSk7XG4gIH07XG59XG5mdW5jdGlvbiBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBzZWxlY3RvciwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gICAgZm9yIChsZXQge1xuICAgICAgdGFyZ2V0XG4gICAgfSA9IGV2ZW50OyB0YXJnZXQgJiYgdGFyZ2V0ICE9PSB0aGlzOyB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZSkge1xuICAgICAgZm9yIChjb25zdCBkb21FbGVtZW50IG9mIGRvbUVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50ICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBoeWRyYXRlT2JqKGV2ZW50LCB7XG4gICAgICAgICAgZGVsZWdhdGVUYXJnZXQ6IHRhcmdldFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBzZWxlY3RvciwgZm4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbi5hcHBseSh0YXJnZXQsIFtldmVudF0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRIYW5kbGVyKGV2ZW50cywgY2FsbGFibGUsIGRlbGVnYXRpb25TZWxlY3RvciA9IG51bGwpIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZXZlbnRzKS5maW5kKGV2ZW50ID0+IGV2ZW50LmNhbGxhYmxlID09PSBjYWxsYWJsZSAmJiBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IgPT09IGRlbGVnYXRpb25TZWxlY3Rvcik7XG59XG5mdW5jdGlvbiBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgY29uc3QgaXNEZWxlZ2F0ZWQgPSB0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZyc7XG4gIC8vIFRPRE86IHRvb2x0aXAgcGFzc2VzIGBmYWxzZWAgaW5zdGVhZCBvZiBzZWxlY3Rvciwgc28gd2UgbmVlZCB0byBjaGVja1xuICBjb25zdCBjYWxsYWJsZSA9IGlzRGVsZWdhdGVkID8gZGVsZWdhdGlvbkZ1bmN0aW9uIDogaGFuZGxlciB8fCBkZWxlZ2F0aW9uRnVuY3Rpb247XG4gIGxldCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQob3JpZ2luYWxUeXBlRXZlbnQpO1xuICBpZiAoIW5hdGl2ZUV2ZW50cy5oYXModHlwZUV2ZW50KSkge1xuICAgIHR5cGVFdmVudCA9IG9yaWdpbmFsVHlwZUV2ZW50O1xuICB9XG4gIHJldHVybiBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdO1xufVxuZnVuY3Rpb24gYWRkSGFuZGxlcihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBvbmVPZmYpIHtcbiAgaWYgKHR5cGVvZiBvcmlnaW5hbFR5cGVFdmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pO1xuXG4gIC8vIGluIGNhc2Ugb2YgbW91c2VlbnRlciBvciBtb3VzZWxlYXZlIHdyYXAgdGhlIGhhbmRsZXIgd2l0aGluIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgZm9yIGl0cyBET00gcG9zaXRpb25cbiAgLy8gdGhpcyBwcmV2ZW50cyB0aGUgaGFuZGxlciBmcm9tIGJlaW5nIGRpc3BhdGNoZWQgdGhlIHNhbWUgd2F5IGFzIG1vdXNlb3ZlciBvciBtb3VzZW91dCBkb2VzXG4gIGlmIChvcmlnaW5hbFR5cGVFdmVudCBpbiBjdXN0b21FdmVudHMpIHtcbiAgICBjb25zdCB3cmFwRnVuY3Rpb24gPSBmbiA9PiB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQucmVsYXRlZFRhcmdldCB8fCBldmVudC5yZWxhdGVkVGFyZ2V0ICE9PSBldmVudC5kZWxlZ2F0ZVRhcmdldCAmJiAhZXZlbnQuZGVsZWdhdGVUYXJnZXQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjYWxsYWJsZSA9IHdyYXBGdW5jdGlvbihjYWxsYWJsZSk7XG4gIH1cbiAgY29uc3QgZXZlbnRzID0gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KTtcbiAgY29uc3QgaGFuZGxlcnMgPSBldmVudHNbdHlwZUV2ZW50XSB8fCAoZXZlbnRzW3R5cGVFdmVudF0gPSB7fSk7XG4gIGNvbnN0IHByZXZpb3VzRnVuY3Rpb24gPSBmaW5kSGFuZGxlcihoYW5kbGVycywgY2FsbGFibGUsIGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGwpO1xuICBpZiAocHJldmlvdXNGdW5jdGlvbikge1xuICAgIHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmID0gcHJldmlvdXNGdW5jdGlvbi5vbmVPZmYgJiYgb25lT2ZmO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoY2FsbGFibGUsIG9yaWdpbmFsVHlwZUV2ZW50LnJlcGxhY2UobmFtZXNwYWNlUmVnZXgsICcnKSk7XG4gIGNvbnN0IGZuID0gaXNEZWxlZ2F0ZWQgPyBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBoYW5kbGVyLCBjYWxsYWJsZSkgOiBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGNhbGxhYmxlKTtcbiAgZm4uZGVsZWdhdGlvblNlbGVjdG9yID0gaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbDtcbiAgZm4uY2FsbGFibGUgPSBjYWxsYWJsZTtcbiAgZm4ub25lT2ZmID0gb25lT2ZmO1xuICBmbi51aWRFdmVudCA9IHVpZDtcbiAgaGFuZGxlcnNbdWlkXSA9IGZuO1xuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZUV2ZW50LCBmbiwgaXNEZWxlZ2F0ZWQpO1xufVxuZnVuY3Rpb24gcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKSB7XG4gIGNvbnN0IGZuID0gZmluZEhhbmRsZXIoZXZlbnRzW3R5cGVFdmVudF0sIGhhbmRsZXIsIGRlbGVnYXRpb25TZWxlY3Rvcik7XG4gIGlmICghZm4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIEJvb2xlYW4oZGVsZWdhdGlvblNlbGVjdG9yKSk7XG4gIGRlbGV0ZSBldmVudHNbdHlwZUV2ZW50XVtmbi51aWRFdmVudF07XG59XG5mdW5jdGlvbiByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIG5hbWVzcGFjZSkge1xuICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9O1xuICBmb3IgKGNvbnN0IFtoYW5kbGVyS2V5LCBldmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc3RvcmVFbGVtZW50RXZlbnQpKSB7XG4gICAgaWYgKGhhbmRsZXJLZXkuaW5jbHVkZXMobmFtZXNwYWNlKSkge1xuICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQuY2FsbGFibGUsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3Rvcik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRUeXBlRXZlbnQoZXZlbnQpIHtcbiAgLy8gYWxsb3cgdG8gZ2V0IHRoZSBuYXRpdmUgZXZlbnRzIGZyb20gbmFtZXNwYWNlZCBldmVudHMgKCdjbGljay5icy5idXR0b24nIC0tPiAnY2xpY2snKVxuICBldmVudCA9IGV2ZW50LnJlcGxhY2Uoc3RyaXBOYW1lUmVnZXgsICcnKTtcbiAgcmV0dXJuIGN1c3RvbUV2ZW50c1tldmVudF0gfHwgZXZlbnQ7XG59XG5jb25zdCBFdmVudEhhbmRsZXIgPSB7XG4gIG9uKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIGZhbHNlKTtcbiAgfSxcbiAgb25lKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIHRydWUpO1xuICB9LFxuICBvZmYoZWxlbWVudCwgb3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxUeXBlRXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pO1xuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gdHlwZUV2ZW50ICE9PSBvcmlnaW5hbFR5cGVFdmVudDtcbiAgICBjb25zdCBldmVudHMgPSBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpO1xuICAgIGNvbnN0IHN0b3JlRWxlbWVudEV2ZW50ID0gZXZlbnRzW3R5cGVFdmVudF0gfHwge307XG4gICAgY29uc3QgaXNOYW1lc3BhY2UgPSBvcmlnaW5hbFR5cGVFdmVudC5zdGFydHNXaXRoKCcuJyk7XG4gICAgaWYgKHR5cGVvZiBjYWxsYWJsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIFNpbXBsZXN0IGNhc2U6IGhhbmRsZXIgaXMgcGFzc2VkLCByZW1vdmUgdGhhdCBsaXN0ZW5lciBPTkxZLlxuICAgICAgaWYgKCFPYmplY3Qua2V5cyhzdG9yZUVsZW1lbnRFdmVudCkubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGNhbGxhYmxlLCBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzTmFtZXNwYWNlKSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnRFdmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgIHJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyhlbGVtZW50LCBldmVudHMsIGVsZW1lbnRFdmVudCwgb3JpZ2luYWxUeXBlRXZlbnQuc2xpY2UoMSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXlIYW5kbGVycywgZXZlbnRdIG9mIE9iamVjdC5lbnRyaWVzKHN0b3JlRWxlbWVudEV2ZW50KSkge1xuICAgICAgY29uc3QgaGFuZGxlcktleSA9IGtleUhhbmRsZXJzLnJlcGxhY2Uoc3RyaXBVaWRSZWdleCwgJycpO1xuICAgICAgaWYgKCFpbk5hbWVzcGFjZSB8fCBvcmlnaW5hbFR5cGVFdmVudC5pbmNsdWRlcyhoYW5kbGVyS2V5KSkge1xuICAgICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5jYWxsYWJsZSwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHRyaWdnZXIoZWxlbWVudCwgZXZlbnQsIGFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0ICQgPSBnZXRqUXVlcnkoKTtcbiAgICBjb25zdCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQoZXZlbnQpO1xuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gZXZlbnQgIT09IHR5cGVFdmVudDtcbiAgICBsZXQgalF1ZXJ5RXZlbnQgPSBudWxsO1xuICAgIGxldCBidWJibGVzID0gdHJ1ZTtcbiAgICBsZXQgbmF0aXZlRGlzcGF0Y2ggPSB0cnVlO1xuICAgIGxldCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgaWYgKGluTmFtZXNwYWNlICYmICQpIHtcbiAgICAgIGpRdWVyeUV2ZW50ID0gJC5FdmVudChldmVudCwgYXJncyk7XG4gICAgICAkKGVsZW1lbnQpLnRyaWdnZXIoalF1ZXJ5RXZlbnQpO1xuICAgICAgYnViYmxlcyA9ICFqUXVlcnlFdmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO1xuICAgICAgbmF0aXZlRGlzcGF0Y2ggPSAhalF1ZXJ5RXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTtcbiAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSBqUXVlcnlFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKTtcbiAgICB9XG4gICAgY29uc3QgZXZ0ID0gaHlkcmF0ZU9iaihuZXcgRXZlbnQoZXZlbnQsIHtcbiAgICAgIGJ1YmJsZXMsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgfSksIGFyZ3MpO1xuICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKG5hdGl2ZURpc3BhdGNoKSB7XG4gICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICB9XG4gICAgaWYgKGV2dC5kZWZhdWx0UHJldmVudGVkICYmIGpRdWVyeUV2ZW50KSB7XG4gICAgICBqUXVlcnlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICByZXR1cm4gZXZ0O1xuICB9XG59O1xuZnVuY3Rpb24gaHlkcmF0ZU9iaihvYmosIG1ldGEgPSB7fSkge1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRhKSkge1xuICAgIHRyeSB7XG4gICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZG9tL21hbmlwdWxhdG9yLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodmFsdWUgPT09IE51bWJlcih2YWx1ZSkudG9TdHJpbmcoKSkge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICB9XG4gIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09ICdudWxsJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGFLZXkoa2V5KSB7XG4gIHJldHVybiBrZXkucmVwbGFjZSgvW0EtWl0vZywgY2hyID0+IGAtJHtjaHIudG9Mb3dlckNhc2UoKX1gKTtcbn1cbmNvbnN0IE1hbmlwdWxhdG9yID0ge1xuICBzZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gLCB2YWx1ZSk7XG4gIH0sXG4gIHJlbW92ZURhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCk7XG4gIH0sXG4gIGdldERhdGFBdHRyaWJ1dGVzKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgIGNvbnN0IGJzS2V5cyA9IE9iamVjdC5rZXlzKGVsZW1lbnQuZGF0YXNldCkuZmlsdGVyKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgnYnMnKSAmJiAha2V5LnN0YXJ0c1dpdGgoJ2JzQ29uZmlnJykpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGJzS2V5cykge1xuICAgICAgbGV0IHB1cmVLZXkgPSBrZXkucmVwbGFjZSgvXmJzLywgJycpO1xuICAgICAgcHVyZUtleSA9IHB1cmVLZXkuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBwdXJlS2V5LnNsaWNlKDEsIHB1cmVLZXkubGVuZ3RoKTtcbiAgICAgIGF0dHJpYnV0ZXNbcHVyZUtleV0gPSBub3JtYWxpemVEYXRhKGVsZW1lbnQuZGF0YXNldFtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gIH0sXG4gIGdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZURhdGEoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCkpO1xuICB9XG59O1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9jb25maWcuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENvbmZpZyB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIHN0YXRpYyBtZXRob2QgXCJOQU1FXCIsIGZvciBlYWNoIGNvbXBvbmVudCEnKTtcbiAgfVxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHRoaXMuX21lcmdlQ29uZmlnT2JqKGNvbmZpZyk7XG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgIHRoaXMuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfbWVyZ2VDb25maWdPYmooY29uZmlnLCBlbGVtZW50KSB7XG4gICAgY29uc3QganNvbkNvbmZpZyA9IGlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgJ2NvbmZpZycpIDoge307IC8vIHRyeSB0byBwYXJzZVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCxcbiAgICAgIC4uLih0eXBlb2YganNvbkNvbmZpZyA9PT0gJ29iamVjdCcgPyBqc29uQ29uZmlnIDoge30pLFxuICAgICAgLi4uKGlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKGVsZW1lbnQpIDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDoge30pXG4gICAgfTtcbiAgfVxuICBfdHlwZUNoZWNrQ29uZmlnKGNvbmZpZywgY29uZmlnVHlwZXMgPSB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSB7XG4gICAgZm9yIChjb25zdCBbcHJvcGVydHksIGV4cGVjdGVkVHlwZXNdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZ1R5cGVzKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdbcHJvcGVydHldO1xuICAgICAgY29uc3QgdmFsdWVUeXBlID0gaXNFbGVtZW50KHZhbHVlKSA/ICdlbGVtZW50JyA6IHRvVHlwZSh2YWx1ZSk7XG4gICAgICBpZiAoIW5ldyBSZWdFeHAoZXhwZWN0ZWRUeXBlcykudGVzdCh2YWx1ZVR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCIke3Byb3BlcnR5fVwiIHByb3ZpZGVkIHR5cGUgXCIke3ZhbHVlVHlwZX1cIiBidXQgZXhwZWN0ZWQgdHlwZSBcIiR7ZXhwZWN0ZWRUeXBlc31cIi5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGJhc2UtY29tcG9uZW50LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IFZFUlNJT04gPSAnNS4zLjMnO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBCYXNlQ29tcG9uZW50IGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICBlbGVtZW50ID0gZ2V0RWxlbWVudChlbGVtZW50KTtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgRGF0YS5zZXQodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSwgdGhpcyk7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZGlzcG9zZSgpIHtcbiAgICBEYXRhLnJlbW92ZSh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZKTtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRVZFTlRfS0VZKTtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkge1xuICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgX3F1ZXVlQ2FsbGJhY2soY2FsbGJhY2ssIGVsZW1lbnQsIGlzQW5pbWF0ZWQgPSB0cnVlKSB7XG4gICAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgZWxlbWVudCwgaXNBbmltYXRlZCk7XG4gIH1cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcsIHRoaXMuX2VsZW1lbnQpO1xuICAgIGNvbmZpZyA9IHRoaXMuX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKTtcbiAgICB0aGlzLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBnZXRJbnN0YW5jZShlbGVtZW50KSB7XG4gICAgcmV0dXJuIERhdGEuZ2V0KGdldEVsZW1lbnQoZWxlbWVudCksIHRoaXMuREFUQV9LRVkpO1xuICB9XG4gIHN0YXRpYyBnZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIGNvbmZpZyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2UoZWxlbWVudCkgfHwgbmV3IHRoaXMoZWxlbWVudCwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgcmV0dXJuIFZFUlNJT047XG4gIH1cbiAgc3RhdGljIGdldCBEQVRBX0tFWSgpIHtcbiAgICByZXR1cm4gYGJzLiR7dGhpcy5OQU1FfWA7XG4gIH1cbiAgc3RhdGljIGdldCBFVkVOVF9LRVkoKSB7XG4gICAgcmV0dXJuIGAuJHt0aGlzLkRBVEFfS0VZfWA7XG4gIH1cbiAgc3RhdGljIGV2ZW50TmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIGAke25hbWV9JHt0aGlzLkVWRU5UX0tFWX1gO1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vc2VsZWN0b3ItZW5naW5lLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgZ2V0U2VsZWN0b3IgPSBlbGVtZW50ID0+IHtcbiAgbGV0IHNlbGVjdG9yID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdGFyZ2V0Jyk7XG4gIGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICcjJykge1xuICAgIGxldCBocmVmQXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblxuICAgIC8vIFRoZSBvbmx5IHZhbGlkIGNvbnRlbnQgdGhhdCBjb3VsZCBkb3VibGUgYXMgYSBzZWxlY3RvciBhcmUgSURzIG9yIGNsYXNzZXMsXG4gICAgLy8gc28gZXZlcnl0aGluZyBzdGFydGluZyB3aXRoIGAjYCBvciBgLmAuIElmIGEgXCJyZWFsXCIgVVJMIGlzIHVzZWQgYXMgdGhlIHNlbGVjdG9yLFxuICAgIC8vIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCB3aWxsIHJpZ2h0ZnVsbHkgY29tcGxhaW4gaXQgaXMgaW52YWxpZC5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8zMjI3M1xuICAgIGlmICghaHJlZkF0dHJpYnV0ZSB8fCAhaHJlZkF0dHJpYnV0ZS5pbmNsdWRlcygnIycpICYmICFocmVmQXR0cmlidXRlLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gSnVzdCBpbiBjYXNlIHNvbWUgQ01TIHB1dHMgb3V0IGEgZnVsbCBVUkwgd2l0aCB0aGUgYW5jaG9yIGFwcGVuZGVkXG4gICAgaWYgKGhyZWZBdHRyaWJ1dGUuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHJpYnV0ZS5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgIGhyZWZBdHRyaWJ1dGUgPSBgIyR7aHJlZkF0dHJpYnV0ZS5zcGxpdCgnIycpWzFdfWA7XG4gICAgfVxuICAgIHNlbGVjdG9yID0gaHJlZkF0dHJpYnV0ZSAmJiBocmVmQXR0cmlidXRlICE9PSAnIycgPyBocmVmQXR0cmlidXRlLnRyaW0oKSA6IG51bGw7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdG9yID8gc2VsZWN0b3Iuc3BsaXQoJywnKS5tYXAoc2VsID0+IHBhcnNlU2VsZWN0b3Ioc2VsKSkuam9pbignLCcpIDogbnVsbDtcbn07XG5jb25zdCBTZWxlY3RvckVuZ2luZSA9IHtcbiAgZmluZChzZWxlY3RvciwgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiBbXS5jb25jYXQoLi4uRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbC5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKSk7XG4gIH0sXG4gIGZpbmRPbmUoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3Rvci5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKTtcbiAgfSxcbiAgY2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLmVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihjaGlsZCA9PiBjaGlsZC5tYXRjaGVzKHNlbGVjdG9yKSk7XG4gIH0sXG4gIHBhcmVudHMoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCBwYXJlbnRzID0gW107XG4gICAgbGV0IGFuY2VzdG9yID0gZWxlbWVudC5wYXJlbnROb2RlLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgcGFyZW50cy5wdXNoKGFuY2VzdG9yKTtcbiAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZS5jbG9zZXN0KHNlbGVjdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG4gIH0sXG4gIHByZXYoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBsZXQgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgd2hpbGUgKHByZXZpb3VzKSB7XG4gICAgICBpZiAocHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtwcmV2aW91c107XG4gICAgICB9XG4gICAgICBwcmV2aW91cyA9IHByZXZpb3VzLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfSxcbiAgLy8gVE9ETzogdGhpcyBpcyBub3cgdW51c2VkOyByZW1vdmUgbGF0ZXIgYWxvbmcgd2l0aCBwcmV2KClcbiAgbmV4dChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGxldCBuZXh0ID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgd2hpbGUgKG5leHQpIHtcbiAgICAgIGlmIChuZXh0Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBbbmV4dF07XG4gICAgICB9XG4gICAgICBuZXh0ID0gbmV4dC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfSxcbiAgZm9jdXNhYmxlQ2hpbGRyZW4oZWxlbWVudCkge1xuICAgIGNvbnN0IGZvY3VzYWJsZXMgPSBbJ2EnLCAnYnV0dG9uJywgJ2lucHV0JywgJ3RleHRhcmVhJywgJ3NlbGVjdCcsICdkZXRhaWxzJywgJ1t0YWJpbmRleF0nLCAnW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nXS5tYXAoc2VsZWN0b3IgPT4gYCR7c2VsZWN0b3J9Om5vdChbdGFiaW5kZXhePVwiLVwiXSlgKS5qb2luKCcsJyk7XG4gICAgcmV0dXJuIHRoaXMuZmluZChmb2N1c2FibGVzLCBlbGVtZW50KS5maWx0ZXIoZWwgPT4gIWlzRGlzYWJsZWQoZWwpICYmIGlzVmlzaWJsZShlbCkpO1xuICB9LFxuICBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yKGVsZW1lbnQpO1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IpID8gc2VsZWN0b3IgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KTtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yKSA6IG51bGw7XG4gIH0sXG4gIGdldE11bHRpcGxlRWxlbWVudHNGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgcmV0dXJuIHNlbGVjdG9yID8gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvcikgOiBbXTtcbiAgfVxufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IGVuYWJsZURpc21pc3NUcmlnZ2VyID0gKGNvbXBvbmVudCwgbWV0aG9kID0gJ2hpZGUnKSA9PiB7XG4gIGNvbnN0IGNsaWNrRXZlbnQgPSBgY2xpY2suZGlzbWlzcyR7Y29tcG9uZW50LkVWRU5UX0tFWX1gO1xuICBjb25zdCBuYW1lID0gY29tcG9uZW50Lk5BTUU7XG4gIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgY2xpY2tFdmVudCwgYFtkYXRhLWJzLWRpc21pc3M9XCIke25hbWV9XCJdYCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKSB8fCB0aGlzLmNsb3Nlc3QoYC4ke25hbWV9YCk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuXG4gICAgLy8gTWV0aG9kIGFyZ3VtZW50IGlzIGxlZnQsIGZvciBBbGVydCBhbmQgb25seSwgYXMgaXQgZG9lc24ndCBpbXBsZW1lbnQgdGhlICdoaWRlJyBtZXRob2RcbiAgICBpbnN0YW5jZVttZXRob2RdKCk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGFsZXJ0LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkZiA9ICdhbGVydCc7XG5jb25zdCBEQVRBX0tFWSRhID0gJ2JzLmFsZXJ0JztcbmNvbnN0IEVWRU5UX0tFWSRiID0gYC4ke0RBVEFfS0VZJGF9YDtcbmNvbnN0IEVWRU5UX0NMT1NFID0gYGNsb3NlJHtFVkVOVF9LRVkkYn1gO1xuY29uc3QgRVZFTlRfQ0xPU0VEID0gYGNsb3NlZCR7RVZFTlRfS0VZJGJ9YDtcbmNvbnN0IENMQVNTX05BTUVfRkFERSQ1ID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDggPSAnc2hvdyc7XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEFsZXJ0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGY7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgY2xvc2UoKSB7XG4gICAgY29uc3QgY2xvc2VFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFKTtcbiAgICBpZiAoY2xvc2VFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckOCk7XG4gICAgY29uc3QgaXNBbmltYXRlZCA9IHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQ1KTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHRoaXMuX2Rlc3Ryb3lFbGVtZW50KCksIHRoaXMuX2VsZW1lbnQsIGlzQW5pbWF0ZWQpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZGVzdHJveUVsZW1lbnQoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKTtcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTE9TRUQpO1xuICAgIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQWxlcnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoQWxlcnQsICdjbG9zZScpO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihBbGVydCk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBidXR0b24uanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRlID0gJ2J1dHRvbic7XG5jb25zdCBEQVRBX0tFWSQ5ID0gJ2JzLmJ1dHRvbic7XG5jb25zdCBFVkVOVF9LRVkkYSA9IGAuJHtEQVRBX0tFWSQ5fWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkNiA9ICcuZGF0YS1hcGknO1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUkMyA9ICdhY3RpdmUnO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkNSA9ICdbZGF0YS1icy10b2dnbGU9XCJidXR0b25cIl0nO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNiA9IGBjbGljayR7RVZFTlRfS0VZJGF9JHtEQVRBX0FQSV9LRVkkNn1gO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBCdXR0b24gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkZTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUoKSB7XG4gICAgLy8gVG9nZ2xlIGNsYXNzIGFuZCBzeW5jIHRoZSBgYXJpYS1wcmVzc2VkYCBhdHRyaWJ1dGUgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBgLnRvZ2dsZSgpYCBtZXRob2RcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKENMQVNTX05BTUVfQUNUSVZFJDMpKTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IEJ1dHRvbi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpO1xuICAgICAgaWYgKGNvbmZpZyA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNiwgU0VMRUNUT1JfREFUQV9UT0dHTEUkNSwgZXZlbnQgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBjb25zdCBidXR0b24gPSBldmVudC50YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ1KTtcbiAgY29uc3QgZGF0YSA9IEJ1dHRvbi5nZXRPckNyZWF0ZUluc3RhbmNlKGJ1dHRvbik7XG4gIGRhdGEudG9nZ2xlKCk7XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQnV0dG9uKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvc3dpcGUuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRkID0gJ3N3aXBlJztcbmNvbnN0IEVWRU5UX0tFWSQ5ID0gJy5icy5zd2lwZSc7XG5jb25zdCBFVkVOVF9UT1VDSFNUQVJUID0gYHRvdWNoc3RhcnQke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBFVkVOVF9UT1VDSE1PVkUgPSBgdG91Y2htb3ZlJHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgRVZFTlRfVE9VQ0hFTkQgPSBgdG91Y2hlbmQke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBFVkVOVF9QT0lOVEVSRE9XTiA9IGBwb2ludGVyZG93biR7RVZFTlRfS0VZJDl9YDtcbmNvbnN0IEVWRU5UX1BPSU5URVJVUCA9IGBwb2ludGVydXAke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBQT0lOVEVSX1RZUEVfVE9VQ0ggPSAndG91Y2gnO1xuY29uc3QgUE9JTlRFUl9UWVBFX1BFTiA9ICdwZW4nO1xuY29uc3QgQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UID0gJ3BvaW50ZXItZXZlbnQnO1xuY29uc3QgU1dJUEVfVEhSRVNIT0xEID0gNDA7XG5jb25zdCBEZWZhdWx0JGMgPSB7XG4gIGVuZENhbGxiYWNrOiBudWxsLFxuICBsZWZ0Q2FsbGJhY2s6IG51bGwsXG4gIHJpZ2h0Q2FsbGJhY2s6IG51bGxcbn07XG5jb25zdCBEZWZhdWx0VHlwZSRjID0ge1xuICBlbmRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIGxlZnRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIHJpZ2h0Q2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTd2lwZSBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFTd2lwZS5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2RlbHRhWCA9IDA7XG4gICAgdGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMgPSBCb29sZWFuKHdpbmRvdy5Qb2ludGVyRXZlbnQpO1xuICAgIHRoaXMuX2luaXRFdmVudHMoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JGM7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkYztcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkZDtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBkaXNwb3NlKCkge1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZJDkpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfc3RhcnQoZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQuY2xpZW50WDtcbiAgICB9XG4gIH1cbiAgX2VuZChldmVudCkge1xuICAgIGlmICh0aGlzLl9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuX2RlbHRhWDtcbiAgICB9XG4gICAgdGhpcy5faGFuZGxlU3dpcGUoKTtcbiAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5lbmRDYWxsYmFjayk7XG4gIH1cbiAgX21vdmUoZXZlbnQpIHtcbiAgICB0aGlzLl9kZWx0YVggPSBldmVudC50b3VjaGVzICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMSA/IDAgOiBldmVudC50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9kZWx0YVg7XG4gIH1cbiAgX2hhbmRsZVN3aXBlKCkge1xuICAgIGNvbnN0IGFic0RlbHRhWCA9IE1hdGguYWJzKHRoaXMuX2RlbHRhWCk7XG4gICAgaWYgKGFic0RlbHRhWCA8PSBTV0lQRV9USFJFU0hPTEQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGlyZWN0aW9uID0gYWJzRGVsdGFYIC8gdGhpcy5fZGVsdGFYO1xuICAgIHRoaXMuX2RlbHRhWCA9IDA7XG4gICAgaWYgKCFkaXJlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhlY3V0ZShkaXJlY3Rpb24gPiAwID8gdGhpcy5fY29uZmlnLnJpZ2h0Q2FsbGJhY2sgOiB0aGlzLl9jb25maWcubGVmdENhbGxiYWNrKTtcbiAgfVxuICBfaW5pdEV2ZW50cygpIHtcbiAgICBpZiAodGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSRE9XTiwgZXZlbnQgPT4gdGhpcy5fc3RhcnQoZXZlbnQpKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSVVAsIGV2ZW50ID0+IHRoaXMuX2VuZChldmVudCkpO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSFNUQVJULCBldmVudCA9PiB0aGlzLl9zdGFydChldmVudCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1RPVUNITU9WRSwgZXZlbnQgPT4gdGhpcy5fbW92ZShldmVudCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1RPVUNIRU5ELCBldmVudCA9PiB0aGlzLl9lbmQoZXZlbnQpKTtcbiAgICB9XG4gIH1cbiAgX2V2ZW50SXNQb2ludGVyUGVuVG91Y2goZXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMgJiYgKGV2ZW50LnBvaW50ZXJUeXBlID09PSBQT0lOVEVSX1RZUEVfUEVOIHx8IGV2ZW50LnBvaW50ZXJUeXBlID09PSBQT0lOVEVSX1RZUEVfVE9VQ0gpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBpc1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDA7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGNhcm91c2VsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkYyA9ICdjYXJvdXNlbCc7XG5jb25zdCBEQVRBX0tFWSQ4ID0gJ2JzLmNhcm91c2VsJztcbmNvbnN0IEVWRU5UX0tFWSQ4ID0gYC4ke0RBVEFfS0VZJDh9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQ1ID0gJy5kYXRhLWFwaSc7XG5jb25zdCBBUlJPV19MRUZUX0tFWSQxID0gJ0Fycm93TGVmdCc7XG5jb25zdCBBUlJPV19SSUdIVF9LRVkkMSA9ICdBcnJvd1JpZ2h0JztcbmNvbnN0IFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgPSA1MDA7IC8vIFRpbWUgZm9yIG1vdXNlIGNvbXBhdCBldmVudHMgdG8gZmlyZSBhZnRlciB0b3VjaFxuXG5jb25zdCBPUkRFUl9ORVhUID0gJ25leHQnO1xuY29uc3QgT1JERVJfUFJFViA9ICdwcmV2JztcbmNvbnN0IERJUkVDVElPTl9MRUZUID0gJ2xlZnQnO1xuY29uc3QgRElSRUNUSU9OX1JJR0hUID0gJ3JpZ2h0JztcbmNvbnN0IEVWRU5UX1NMSURFID0gYHNsaWRlJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfU0xJRCA9IGBzbGlkJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTiQxID0gYGtleWRvd24ke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9NT1VTRUVOVEVSJDEgPSBgbW91c2VlbnRlciR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX01PVVNFTEVBVkUkMSA9IGBtb3VzZWxlYXZlJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfRFJBR19TVEFSVCA9IGBkcmFnc3RhcnQke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJJDMgPSBgbG9hZCR7RVZFTlRfS0VZJDh9JHtEQVRBX0FQSV9LRVkkNX1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNSA9IGBjbGljayR7RVZFTlRfS0VZJDh9JHtEQVRBX0FQSV9LRVkkNX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9DQVJPVVNFTCA9ICdjYXJvdXNlbCc7XG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSQyID0gJ2FjdGl2ZSc7XG5jb25zdCBDTEFTU19OQU1FX1NMSURFID0gJ3NsaWRlJztcbmNvbnN0IENMQVNTX05BTUVfRU5EID0gJ2Nhcm91c2VsLWl0ZW0tZW5kJztcbmNvbnN0IENMQVNTX05BTUVfU1RBUlQgPSAnY2Fyb3VzZWwtaXRlbS1zdGFydCc7XG5jb25zdCBDTEFTU19OQU1FX05FWFQgPSAnY2Fyb3VzZWwtaXRlbS1uZXh0JztcbmNvbnN0IENMQVNTX05BTUVfUFJFViA9ICdjYXJvdXNlbC1pdGVtLXByZXYnO1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFID0gJy5hY3RpdmUnO1xuY29uc3QgU0VMRUNUT1JfSVRFTSA9ICcuY2Fyb3VzZWwtaXRlbSc7XG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkVfSVRFTSA9IFNFTEVDVE9SX0FDVElWRSArIFNFTEVDVE9SX0lURU07XG5jb25zdCBTRUxFQ1RPUl9JVEVNX0lNRyA9ICcuY2Fyb3VzZWwtaXRlbSBpbWcnO1xuY29uc3QgU0VMRUNUT1JfSU5ESUNBVE9SUyA9ICcuY2Fyb3VzZWwtaW5kaWNhdG9ycyc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NMSURFID0gJ1tkYXRhLWJzLXNsaWRlXSwgW2RhdGEtYnMtc2xpZGUtdG9dJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfUklERSA9ICdbZGF0YS1icy1yaWRlPVwiY2Fyb3VzZWxcIl0nO1xuY29uc3QgS0VZX1RPX0RJUkVDVElPTiA9IHtcbiAgW0FSUk9XX0xFRlRfS0VZJDFdOiBESVJFQ1RJT05fUklHSFQsXG4gIFtBUlJPV19SSUdIVF9LRVkkMV06IERJUkVDVElPTl9MRUZUXG59O1xuY29uc3QgRGVmYXVsdCRiID0ge1xuICBpbnRlcnZhbDogNTAwMCxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHBhdXNlOiAnaG92ZXInLFxuICByaWRlOiBmYWxzZSxcbiAgdG91Y2g6IHRydWUsXG4gIHdyYXA6IHRydWVcbn07XG5jb25zdCBEZWZhdWx0VHlwZSRiID0ge1xuICBpbnRlcnZhbDogJyhudW1iZXJ8Ym9vbGVhbiknLFxuICAvLyBUT0RPOnY2IHJlbW92ZSBib29sZWFuIHN1cHBvcnRcbiAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgcGF1c2U6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgcmlkZTogJyhib29sZWFufHN0cmluZyknLFxuICB0b3VjaDogJ2Jvb2xlYW4nLFxuICB3cmFwOiAnYm9vbGVhbidcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENhcm91c2VsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLl9zd2lwZUhlbHBlciA9IG51bGw7XG4gICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0lORElDQVRPUlMsIHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5yaWRlID09PSBDTEFTU19OQU1FX0NBUk9VU0VMKSB7XG4gICAgICB0aGlzLmN5Y2xlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkYjtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSRiO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRjO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIG5leHQoKSB7XG4gICAgdGhpcy5fc2xpZGUoT1JERVJfTkVYVCk7XG4gIH1cbiAgbmV4dFdoZW5WaXNpYmxlKCkge1xuICAgIC8vIEZJWE1FIFRPRE8gdXNlIGBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGVgXG4gICAgLy8gRG9uJ3QgY2FsbCBuZXh0IHdoZW4gdGhlIHBhZ2UgaXNuJ3QgdmlzaWJsZVxuICAgIC8vIG9yIHRoZSBjYXJvdXNlbCBvciBpdHMgcGFyZW50IGlzbid0IHZpc2libGVcbiAgICBpZiAoIWRvY3VtZW50LmhpZGRlbiAmJiBpc1Zpc2libGUodGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cbiAgfVxuICBwcmV2KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX1BSRVYpO1xuICB9XG4gIHBhdXNlKCkge1xuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIHRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhckludGVydmFsKCk7XG4gIH1cbiAgY3ljbGUoKSB7XG4gICAgdGhpcy5fY2xlYXJJbnRlcnZhbCgpO1xuICAgIHRoaXMuX3VwZGF0ZUludGVydmFsKCk7XG4gICAgdGhpcy5faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLm5leHRXaGVuVmlzaWJsZSgpLCB0aGlzLl9jb25maWcuaW50ZXJ2YWwpO1xuICB9XG4gIF9tYXliZUVuYWJsZUN5Y2xlKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnJpZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLmN5Y2xlKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmN5Y2xlKCk7XG4gIH1cbiAgdG8oaW5kZXgpIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2dldEl0ZW1zKCk7XG4gICAgaWYgKGluZGV4ID4gaXRlbXMubGVuZ3RoIC0gMSB8fCBpbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLnRvKGluZGV4KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2dldEFjdGl2ZSgpKTtcbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IGluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9yZGVyID0gaW5kZXggPiBhY3RpdmVJbmRleCA/IE9SREVSX05FWFQgOiBPUkRFUl9QUkVWO1xuICAgIHRoaXMuX3NsaWRlKG9yZGVyLCBpdGVtc1tpbmRleF0pO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMuX3N3aXBlSGVscGVyKSB7XG4gICAgICB0aGlzLl9zd2lwZUhlbHBlci5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLmRlZmF1bHRJbnRlcnZhbCA9IGNvbmZpZy5pbnRlcnZhbDtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTiQxLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdob3ZlcicpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRUVOVEVSJDEsICgpID0+IHRoaXMucGF1c2UoKSk7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VMRUFWRSQxLCAoKSA9PiB0aGlzLl9tYXliZUVuYWJsZUN5Y2xlKCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnRvdWNoICYmIFN3aXBlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9XG4gIH1cbiAgX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgZm9yIChjb25zdCBpbWcgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JVEVNX0lNRywgdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbihpbWcsIEVWRU5UX0RSQUdfU1RBUlQsIGV2ZW50ID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpO1xuICAgIH1cbiAgICBjb25zdCBlbmRDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgIT09ICdob3ZlcicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBpdCdzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2UsIG1vdXNlZW50ZXIvbGVhdmUgYXJlIGZpcmVkIGFzXG4gICAgICAvLyBwYXJ0IG9mIHRoZSBtb3VzZSBjb21wYXRpYmlsaXR5IGV2ZW50cyBvbiBmaXJzdCB0YXAgLSB0aGUgY2Fyb3VzZWxcbiAgICAgIC8vIHdvdWxkIHN0b3AgY3ljbGluZyB1bnRpbCB1c2VyIHRhcHBlZCBvdXQgb2YgaXQ7XG4gICAgICAvLyBoZXJlLCB3ZSBsaXN0ZW4gZm9yIHRvdWNoZW5kLCBleHBsaWNpdGx5IHBhdXNlIHRoZSBjYXJvdXNlbFxuICAgICAgLy8gKGFzIGlmIGl0J3MgdGhlIHNlY29uZCB0aW1lIHdlIHRhcCBvbiBpdCwgbW91c2VlbnRlciBjb21wYXQgZXZlbnRcbiAgICAgIC8vIGlzIE5PVCBmaXJlZCkgYW5kIGFmdGVyIGEgdGltZW91dCAodG8gYWxsb3cgZm9yIG1vdXNlIGNvbXBhdGliaWxpdHlcbiAgICAgIC8vIGV2ZW50cyB0byBmaXJlKSB3ZSBleHBsaWNpdGx5IHJlc3RhcnQgY3ljbGluZ1xuXG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICBpZiAodGhpcy50b3VjaFRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG91Y2hUaW1lb3V0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLl9tYXliZUVuYWJsZUN5Y2xlKCksIFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgKyB0aGlzLl9jb25maWcuaW50ZXJ2YWwpO1xuICAgIH07XG4gICAgY29uc3Qgc3dpcGVDb25maWcgPSB7XG4gICAgICBsZWZ0Q2FsbGJhY2s6ICgpID0+IHRoaXMuX3NsaWRlKHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoRElSRUNUSU9OX0xFRlQpKSxcbiAgICAgIHJpZ2h0Q2FsbGJhY2s6ICgpID0+IHRoaXMuX3NsaWRlKHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoRElSRUNUSU9OX1JJR0hUKSksXG4gICAgICBlbmRDYWxsYmFjazogZW5kQ2FsbEJhY2tcbiAgICB9O1xuICAgIHRoaXMuX3N3aXBlSGVscGVyID0gbmV3IFN3aXBlKHRoaXMuX2VsZW1lbnQsIHN3aXBlQ29uZmlnKTtcbiAgfVxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaXJlY3Rpb24gPSBLRVlfVE9fRElSRUNUSU9OW2V2ZW50LmtleV07XG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuX3NsaWRlKHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoZGlyZWN0aW9uKSk7XG4gICAgfVxuICB9XG4gIF9nZXRJdGVtSW5kZXgoZWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtcygpLmluZGV4T2YoZWxlbWVudCk7XG4gIH1cbiAgX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQoaW5kZXgpIHtcbiAgICBpZiAoIXRoaXMuX2luZGljYXRvcnNFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUluZGljYXRvciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFLCB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCk7XG4gICAgYWN0aXZlSW5kaWNhdG9yLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUkMik7XG4gICAgYWN0aXZlSW5kaWNhdG9yLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50Jyk7XG4gICAgY29uc3QgbmV3QWN0aXZlSW5kaWNhdG9yID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShgW2RhdGEtYnMtc2xpZGUtdG89XCIke2luZGV4fVwiXWAsIHRoaXMuX2luZGljYXRvcnNFbGVtZW50KTtcbiAgICBpZiAobmV3QWN0aXZlSW5kaWNhdG9yKSB7XG4gICAgICBuZXdBY3RpdmVJbmRpY2F0b3IuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSQyKTtcbiAgICAgIG5ld0FjdGl2ZUluZGljYXRvci5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsICd0cnVlJyk7XG4gICAgfVxuICB9XG4gIF91cGRhdGVJbnRlcnZhbCgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fYWN0aXZlRWxlbWVudCB8fCB0aGlzLl9nZXRBY3RpdmUoKTtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudEludGVydmFsID0gTnVtYmVyLnBhcnNlSW50KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLWludGVydmFsJyksIDEwKTtcbiAgICB0aGlzLl9jb25maWcuaW50ZXJ2YWwgPSBlbGVtZW50SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbDtcbiAgfVxuICBfc2xpZGUob3JkZXIsIGVsZW1lbnQgPSBudWxsKSB7XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdGhpcy5fZ2V0QWN0aXZlKCk7XG4gICAgY29uc3QgaXNOZXh0ID0gb3JkZXIgPT09IE9SREVSX05FWFQ7XG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBlbGVtZW50IHx8IGdldE5leHRBY3RpdmVFbGVtZW50KHRoaXMuX2dldEl0ZW1zKCksIGFjdGl2ZUVsZW1lbnQsIGlzTmV4dCwgdGhpcy5fY29uZmlnLndyYXApO1xuICAgIGlmIChuZXh0RWxlbWVudCA9PT0gYWN0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0RWxlbWVudEluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KG5leHRFbGVtZW50KTtcbiAgICBjb25zdCB0cmlnZ2VyRXZlbnQgPSBldmVudE5hbWUgPT4ge1xuICAgICAgcmV0dXJuIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIGV2ZW50TmFtZSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiBuZXh0RWxlbWVudCxcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl9vcmRlclRvRGlyZWN0aW9uKG9yZGVyKSxcbiAgICAgICAgZnJvbTogdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpLFxuICAgICAgICB0bzogbmV4dEVsZW1lbnRJbmRleFxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzbGlkZUV2ZW50ID0gdHJpZ2dlckV2ZW50KEVWRU5UX1NMSURFKTtcbiAgICBpZiAoc2xpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCAhbmV4dEVsZW1lbnQpIHtcbiAgICAgIC8vIFNvbWUgd2VpcmRuZXNzIGlzIGhhcHBlbmluZywgc28gd2UgYmFpbFxuICAgICAgLy8gVE9ETzogY2hhbmdlIHRlc3RzIHRoYXQgdXNlIGVtcHR5IGRpdnMgdG8gYXZvaWQgdGhpcyBjaGVja1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc0N5Y2xpbmcgPSBCb29sZWFuKHRoaXMuX2ludGVydmFsKTtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5faXNTbGlkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KG5leHRFbGVtZW50SW5kZXgpO1xuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBuZXh0RWxlbWVudDtcbiAgICBjb25zdCBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IGlzTmV4dCA/IENMQVNTX05BTUVfU1RBUlQgOiBDTEFTU19OQU1FX0VORDtcbiAgICBjb25zdCBvcmRlckNsYXNzTmFtZSA9IGlzTmV4dCA/IENMQVNTX05BTUVfTkVYVCA6IENMQVNTX05BTUVfUFJFVjtcbiAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKG9yZGVyQ2xhc3NOYW1lKTtcbiAgICByZWZsb3cobmV4dEVsZW1lbnQpO1xuICAgIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZGlyZWN0aW9uYWxDbGFzc05hbWUsIG9yZGVyQ2xhc3NOYW1lKTtcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMik7XG4gICAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUkMiwgb3JkZXJDbGFzc05hbWUsIGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgdHJpZ2dlckV2ZW50KEVWRU5UX1NMSUQpO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxCYWNrLCBhY3RpdmVFbGVtZW50LCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgIHRoaXMuY3ljbGUoKTtcbiAgICB9XG4gIH1cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0xJREUpO1xuICB9XG4gIF9nZXRBY3RpdmUoKSB7XG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFX0lURU0sIHRoaXMuX2VsZW1lbnQpO1xuICB9XG4gIF9nZXRJdGVtcygpIHtcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JVEVNLCB0aGlzLl9lbGVtZW50KTtcbiAgfVxuICBfY2xlYXJJbnRlcnZhbCgpIHtcbiAgICBpZiAodGhpcy5faW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuICBfZGlyZWN0aW9uVG9PcmRlcihkaXJlY3Rpb24pIHtcbiAgICBpZiAoaXNSVEwoKSkge1xuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQgPyBPUkRFUl9QUkVWIDogT1JERVJfTkVYVDtcbiAgICB9XG4gICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQgPyBPUkRFUl9ORVhUIDogT1JERVJfUFJFVjtcbiAgfVxuICBfb3JkZXJUb0RpcmVjdGlvbihvcmRlcikge1xuICAgIGlmIChpc1JUTCgpKSB7XG4gICAgICByZXR1cm4gb3JkZXIgPT09IE9SREVSX1BSRVYgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgICB9XG4gICAgcmV0dXJuIG9yZGVyID09PSBPUkRFUl9QUkVWID8gRElSRUNUSU9OX1JJR0hUIDogRElSRUNUSU9OX0xFRlQ7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZGF0YS50byhjb25maWcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQ1LCBTRUxFQ1RPUl9EQVRBX1NMSURFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKTtcbiAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9DQVJPVVNFTCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgY29uc3QgY2Fyb3VzZWwgPSBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldCk7XG4gIGNvbnN0IHNsaWRlSW5kZXggPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1icy1zbGlkZS10bycpO1xuICBpZiAoc2xpZGVJbmRleCkge1xuICAgIGNhcm91c2VsLnRvKHNsaWRlSW5kZXgpO1xuICAgIGNhcm91c2VsLl9tYXliZUVuYWJsZUN5Y2xlKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKHRoaXMsICdzbGlkZScpID09PSAnbmV4dCcpIHtcbiAgICBjYXJvdXNlbC5uZXh0KCk7XG4gICAgY2Fyb3VzZWwuX21heWJlRW5hYmxlQ3ljbGUoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY2Fyb3VzZWwucHJldigpO1xuICBjYXJvdXNlbC5fbWF5YmVFbmFibGVDeWNsZSgpO1xufSk7XG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJJDMsICgpID0+IHtcbiAgY29uc3QgY2Fyb3VzZWxzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1JJREUpO1xuICBmb3IgKGNvbnN0IGNhcm91c2VsIG9mIGNhcm91c2Vscykge1xuICAgIENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UoY2Fyb3VzZWwpO1xuICB9XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ2Fyb3VzZWwpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgY29sbGFwc2UuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRiID0gJ2NvbGxhcHNlJztcbmNvbnN0IERBVEFfS0VZJDcgPSAnYnMuY29sbGFwc2UnO1xuY29uc3QgRVZFTlRfS0VZJDcgPSBgLiR7REFUQV9LRVkkN31gO1xuY29uc3QgREFUQV9BUElfS0VZJDQgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVWRU5UX1NIT1ckNiA9IGBzaG93JHtFVkVOVF9LRVkkN31gO1xuY29uc3QgRVZFTlRfU0hPV04kNiA9IGBzaG93biR7RVZFTlRfS0VZJDd9YDtcbmNvbnN0IEVWRU5UX0hJREUkNiA9IGBoaWRlJHtFVkVOVF9LRVkkN31gO1xuY29uc3QgRVZFTlRfSElEREVOJDYgPSBgaGlkZGVuJHtFVkVOVF9LRVkkN31gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNCA9IGBjbGljayR7RVZFTlRfS0VZJDd9JHtEQVRBX0FQSV9LRVkkNH1gO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDcgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNFID0gJ2NvbGxhcHNlJztcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0lORyA9ICdjb2xsYXBzaW5nJztcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0VEID0gJ2NvbGxhcHNlZCc7XG5jb25zdCBDTEFTU19OQU1FX0RFRVBFUl9DSElMRFJFTiA9IGA6c2NvcGUgLiR7Q0xBU1NfTkFNRV9DT0xMQVBTRX0gLiR7Q0xBU1NfTkFNRV9DT0xMQVBTRX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9IT1JJWk9OVEFMID0gJ2NvbGxhcHNlLWhvcml6b250YWwnO1xuY29uc3QgV0lEVEggPSAnd2lkdGgnO1xuY29uc3QgSEVJR0hUID0gJ2hlaWdodCc7XG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkVTID0gJy5jb2xsYXBzZS5zaG93LCAuY29sbGFwc2UuY29sbGFwc2luZyc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ0ID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCJdJztcbmNvbnN0IERlZmF1bHQkYSA9IHtcbiAgcGFyZW50OiBudWxsLFxuICB0b2dnbGU6IHRydWVcbn07XG5jb25zdCBEZWZhdWx0VHlwZSRhID0ge1xuICBwYXJlbnQ6ICcobnVsbHxlbGVtZW50KScsXG4gIHRvZ2dsZTogJ2Jvb2xlYW4nXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDb2xsYXBzZSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3RyaWdnZXJBcnJheSA9IFtdO1xuICAgIGNvbnN0IHRvZ2dsZUxpc3QgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFJDQpO1xuICAgIGZvciAoY29uc3QgZWxlbSBvZiB0b2dnbGVMaXN0KSB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IFNlbGVjdG9yRW5naW5lLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbSk7XG4gICAgICBjb25zdCBmaWx0ZXJFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvcikuZmlsdGVyKGZvdW5kRWxlbWVudCA9PiBmb3VuZEVsZW1lbnQgPT09IHRoaXMuX2VsZW1lbnQpO1xuICAgICAgaWYgKHNlbGVjdG9yICE9PSBudWxsICYmIGZpbHRlckVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJBcnJheS5wdXNoKGVsZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9pbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl90cmlnZ2VyQXJyYXksIHRoaXMuX2lzU2hvd24oKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcudG9nZ2xlKSB7XG4gICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JGE7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkYTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkYjtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH1cbiAgfVxuICBzaG93KCkge1xuICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBhY3RpdmVDaGlsZHJlbiA9IFtdO1xuXG4gICAgLy8gZmluZCBhY3RpdmUgY2hpbGRyZW5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgYWN0aXZlQ2hpbGRyZW4gPSB0aGlzLl9nZXRGaXJzdExldmVsQ2hpbGRyZW4oU0VMRUNUT1JfQUNUSVZFUykuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudCAhPT0gdGhpcy5fZWxlbWVudCkubWFwKGVsZW1lbnQgPT4gQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCB7XG4gICAgICAgIHRvZ2dsZTogZmFsc2VcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgaWYgKGFjdGl2ZUNoaWxkcmVuLmxlbmd0aCAmJiBhY3RpdmVDaGlsZHJlblswXS5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XJDYpO1xuICAgIGlmIChzdGFydEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhY3RpdmVJbnN0YW5jZSBvZiBhY3RpdmVDaGlsZHJlbikge1xuICAgICAgYWN0aXZlSW5zdGFuY2UuaGlkZSgpO1xuICAgIH1cbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTRSk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0lORyk7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gMDtcbiAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LCB0cnVlKTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1ckNyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJztcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOJDYpO1xuICAgIH07XG4gICAgY29uc3QgY2FwaXRhbGl6ZWREaW1lbnNpb24gPSBkaW1lbnNpb25bMF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSgxKTtcbiAgICBjb25zdCBzY3JvbGxTaXplID0gYHNjcm9sbCR7Y2FwaXRhbGl6ZWREaW1lbnNpb259YDtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0cnVlKTtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSBgJHt0aGlzLl9lbGVtZW50W3Njcm9sbFNpemVdfXB4YDtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGFydEV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSQ2KTtcbiAgICBpZiAoc3RhcnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IGAke3RoaXMuX2VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZGltZW5zaW9uXX1weGA7XG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNJTkcpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1ckNyk7XG4gICAgZm9yIChjb25zdCB0cmlnZ2VyIG9mIHRoaXMuX3RyaWdnZXJBcnJheSkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodHJpZ2dlcik7XG4gICAgICBpZiAoZWxlbWVudCAmJiAhdGhpcy5faXNTaG93bihlbGVtZW50KSkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW3RyaWdnZXJdLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNJTkcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0UpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOJDYpO1xuICAgIH07XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gJyc7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdHJ1ZSk7XG4gIH1cbiAgX2lzU2hvd24oZWxlbWVudCA9IHRoaXMuX2VsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XJDcpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICBjb25maWcudG9nZ2xlID0gQm9vbGVhbihjb25maWcudG9nZ2xlKTsgLy8gQ29lcmNlIHN0cmluZyB2YWx1ZXNcbiAgICBjb25maWcucGFyZW50ID0gZ2V0RWxlbWVudChjb25maWcucGFyZW50KTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9nZXREaW1lbnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfSE9SSVpPTlRBTCkgPyBXSURUSCA6IEhFSUdIVDtcbiAgfVxuICBfaW5pdGlhbGl6ZUNoaWxkcmVuKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldEZpcnN0TGV2ZWxDaGlsZHJlbihTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ0KTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KTtcbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW2VsZW1lbnRdLCB0aGlzLl9pc1Nob3duKHNlbGVjdGVkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9nZXRGaXJzdExldmVsQ2hpbGRyZW4oc2VsZWN0b3IpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmQoQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4sIHRoaXMuX2NvbmZpZy5wYXJlbnQpO1xuICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBpZiBncmVhdGVyIGRlcHRoXG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IsIHRoaXMuX2NvbmZpZy5wYXJlbnQpLmZpbHRlcihlbGVtZW50ID0+ICFjaGlsZHJlbi5pbmNsdWRlcyhlbGVtZW50KSk7XG4gIH1cbiAgX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0cmlnZ2VyQXJyYXksIGlzT3Blbikge1xuICAgIGlmICghdHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdHJpZ2dlckFycmF5KSB7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoQ0xBU1NfTkFNRV9DT0xMQVBTRUQsICFpc09wZW4pO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIGNvbnN0IF9jb25maWcgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycgJiYgL3Nob3d8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICBfY29uZmlnLnRvZ2dsZSA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIF9jb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNCwgU0VMRUNUT1JfREFUQV9UT0dHTEUkNCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIC8vIHByZXZlbnREZWZhdWx0IG9ubHkgZm9yIDxhPiBlbGVtZW50cyAod2hpY2ggY2hhbmdlIHRoZSBVUkwpIG5vdCBpbnNpZGUgdGhlIGNvbGxhcHNpYmxlIGVsZW1lbnRcbiAgaWYgKGV2ZW50LnRhcmdldC50YWdOYW1lID09PSAnQScgfHwgZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgZXZlbnQuZGVsZWdhdGVUYXJnZXQudGFnTmFtZSA9PT0gJ0EnKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU2VsZWN0b3JFbmdpbmUuZ2V0TXVsdGlwbGVFbGVtZW50c0Zyb21TZWxlY3Rvcih0aGlzKSkge1xuICAgIENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwge1xuICAgICAgdG9nZ2xlOiBmYWxzZVxuICAgIH0pLnRvZ2dsZSgpO1xuICB9XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ29sbGFwc2UpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZHJvcGRvd24uanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRhID0gJ2Ryb3Bkb3duJztcbmNvbnN0IERBVEFfS0VZJDYgPSAnYnMuZHJvcGRvd24nO1xuY29uc3QgRVZFTlRfS0VZJDYgPSBgLiR7REFUQV9LRVkkNn1gO1xuY29uc3QgREFUQV9BUElfS0VZJDMgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVTQ0FQRV9LRVkkMiA9ICdFc2NhcGUnO1xuY29uc3QgVEFCX0tFWSQxID0gJ1RhYic7XG5jb25zdCBBUlJPV19VUF9LRVkkMSA9ICdBcnJvd1VwJztcbmNvbnN0IEFSUk9XX0RPV05fS0VZJDEgPSAnQXJyb3dEb3duJztcbmNvbnN0IFJJR0hUX01PVVNFX0JVVFRPTiA9IDI7IC8vIE1vdXNlRXZlbnQuYnV0dG9uIHZhbHVlIGZvciB0aGUgc2Vjb25kYXJ5IGJ1dHRvbiwgdXN1YWxseSB0aGUgcmlnaHQgYnV0dG9uXG5cbmNvbnN0IEVWRU5UX0hJREUkNSA9IGBoaWRlJHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfSElEREVOJDUgPSBgaGlkZGVuJHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfU0hPVyQ1ID0gYHNob3cke0VWRU5UX0tFWSQ2fWA7XG5jb25zdCBFVkVOVF9TSE9XTiQ1ID0gYHNob3duJHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMyA9IGBjbGljayR7RVZFTlRfS0VZJDZ9JHtEQVRBX0FQSV9LRVkkM31gO1xuY29uc3QgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSA9IGBrZXlkb3duJHtFVkVOVF9LRVkkNn0ke0RBVEFfQVBJX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9LRVlVUF9EQVRBX0FQSSA9IGBrZXl1cCR7RVZFTlRfS0VZJDZ9JHtEQVRBX0FQSV9LRVkkM31gO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDYgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX0RST1BVUCA9ICdkcm9wdXAnO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRU5EID0gJ2Ryb3BlbmQnO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QU1RBUlQgPSAnZHJvcHN0YXJ0JztcbmNvbnN0IENMQVNTX05BTUVfRFJPUFVQX0NFTlRFUiA9ICdkcm9wdXAtY2VudGVyJztcbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fQ0VOVEVSID0gJ2Ryb3Bkb3duLWNlbnRlcic7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJdOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFX1NIT1dOID0gYCR7U0VMRUNUT1JfREFUQV9UT0dHTEUkM30uJHtDTEFTU19OQU1FX1NIT1ckNn1gO1xuY29uc3QgU0VMRUNUT1JfTUVOVSA9ICcuZHJvcGRvd24tbWVudSc7XG5jb25zdCBTRUxFQ1RPUl9OQVZCQVIgPSAnLm5hdmJhcic7XG5jb25zdCBTRUxFQ1RPUl9OQVZCQVJfTkFWID0gJy5uYXZiYXItbmF2JztcbmNvbnN0IFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMgPSAnLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZCknO1xuY29uc3QgUExBQ0VNRU5UX1RPUCA9IGlzUlRMKCkgPyAndG9wLWVuZCcgOiAndG9wLXN0YXJ0JztcbmNvbnN0IFBMQUNFTUVOVF9UT1BFTkQgPSBpc1JUTCgpID8gJ3RvcC1zdGFydCcgOiAndG9wLWVuZCc7XG5jb25zdCBQTEFDRU1FTlRfQk9UVE9NID0gaXNSVEwoKSA/ICdib3R0b20tZW5kJyA6ICdib3R0b20tc3RhcnQnO1xuY29uc3QgUExBQ0VNRU5UX0JPVFRPTUVORCA9IGlzUlRMKCkgPyAnYm90dG9tLXN0YXJ0JyA6ICdib3R0b20tZW5kJztcbmNvbnN0IFBMQUNFTUVOVF9SSUdIVCA9IGlzUlRMKCkgPyAnbGVmdC1zdGFydCcgOiAncmlnaHQtc3RhcnQnO1xuY29uc3QgUExBQ0VNRU5UX0xFRlQgPSBpc1JUTCgpID8gJ3JpZ2h0LXN0YXJ0JyA6ICdsZWZ0LXN0YXJ0JztcbmNvbnN0IFBMQUNFTUVOVF9UT1BDRU5URVIgPSAndG9wJztcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01DRU5URVIgPSAnYm90dG9tJztcbmNvbnN0IERlZmF1bHQkOSA9IHtcbiAgYXV0b0Nsb3NlOiB0cnVlLFxuICBib3VuZGFyeTogJ2NsaXBwaW5nUGFyZW50cycsXG4gIGRpc3BsYXk6ICdkeW5hbWljJyxcbiAgb2Zmc2V0OiBbMCwgMl0sXG4gIHBvcHBlckNvbmZpZzogbnVsbCxcbiAgcmVmZXJlbmNlOiAndG9nZ2xlJ1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDkgPSB7XG4gIGF1dG9DbG9zZTogJyhib29sZWFufHN0cmluZyknLFxuICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICBkaXNwbGF5OiAnc3RyaW5nJyxcbiAgb2Zmc2V0OiAnKGFycmF5fHN0cmluZ3xmdW5jdGlvbiknLFxuICBwb3BwZXJDb25maWc6ICcobnVsbHxvYmplY3R8ZnVuY3Rpb24pJyxcbiAgcmVmZXJlbmNlOiAnKHN0cmluZ3xlbGVtZW50fG9iamVjdCknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBEcm9wZG93biBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlOyAvLyBkcm9wZG93biB3cmFwcGVyXG4gICAgLy8gVE9ETzogdjYgcmV2ZXJ0ICMzNzAxMSAmIGNoYW5nZSBtYXJrdXAgaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvNS4zL2Zvcm1zL2lucHV0LWdyb3VwL1xuICAgIHRoaXMuX21lbnUgPSBTZWxlY3RvckVuZ2luZS5uZXh0KHRoaXMuX2VsZW1lbnQsIFNFTEVDVE9SX01FTlUpWzBdIHx8IFNlbGVjdG9yRW5naW5lLnByZXYodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF0gfHwgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NRU5VLCB0aGlzLl9wYXJlbnQpO1xuICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ5O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDk7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGE7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duKCkgPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdygpO1xuICB9XG4gIHNob3coKSB7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcy5fZWxlbWVudCkgfHwgdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgfTtcbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XJDUsIHJlbGF0ZWRUYXJnZXQpO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jcmVhdGVQb3BwZXIoKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRlbGVnYXRpb24gb24gaU9TXG4gICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAhdGhpcy5fcGFyZW50LmNsb3Nlc3QoU0VMRUNUT1JfTkFWQkFSX05BVikpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgdGhpcy5fbWVudS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDYpO1xuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOJDUsIHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcy5fZWxlbWVudCkgfHwgIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH07XG4gICAgdGhpcy5fY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG4gIHVwZGF0ZSgpIHtcbiAgICB0aGlzLl9pbk5hdmJhciA9IHRoaXMuX2RldGVjdE5hdmJhcigpO1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb21wbGV0ZUhpZGUocmVsYXRlZFRhcmdldCkge1xuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUkNSwgcmVsYXRlZFRhcmdldCk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XG4gICAgfVxuICAgIHRoaXMuX21lbnUuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckNik7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgIE1hbmlwdWxhdG9yLnJlbW92ZURhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicpO1xuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiQ1LCByZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHN1cGVyLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWZlcmVuY2UgPT09ICdvYmplY3QnICYmICFpc0VsZW1lbnQoY29uZmlnLnJlZmVyZW5jZSkgJiYgdHlwZW9mIGNvbmZpZy5yZWZlcmVuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBQb3BwZXIgdmlydHVhbCBlbGVtZW50cyByZXF1aXJlIGEgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG1ldGhvZFxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtOQU1FJGEudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcInJlZmVyZW5jZVwiIHByb3ZpZGVkIHR5cGUgXCJvYmplY3RcIiB3aXRob3V0IGEgcmVxdWlyZWQgXCJnZXRCb3VuZGluZ0NsaWVudFJlY3RcIiBtZXRob2QuYCk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2NyZWF0ZVBvcHBlcigpIHtcbiAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgZHJvcGRvd25zIHJlcXVpcmUgUG9wcGVyIChodHRwczovL3BvcHBlci5qcy5vcmcpJyk7XG4gICAgfVxuICAgIGxldCByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcbiAgICBpZiAodGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ3BhcmVudCcpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9wYXJlbnQ7XG4gICAgfSBlbHNlIGlmIChpc0VsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSkpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSBnZXRFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UgPT09ICdvYmplY3QnKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fY29uZmlnLnJlZmVyZW5jZTtcbiAgICB9XG4gICAgY29uc3QgcG9wcGVyQ29uZmlnID0gdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKCk7XG4gICAgdGhpcy5fcG9wcGVyID0gUG9wcGVyLmNyZWF0ZVBvcHBlcihyZWZlcmVuY2VFbGVtZW50LCB0aGlzLl9tZW51LCBwb3BwZXJDb25maWcpO1xuICB9XG4gIF9pc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLl9tZW51LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1ckNik7XG4gIH1cbiAgX2dldFBsYWNlbWVudCgpIHtcbiAgICBjb25zdCBwYXJlbnREcm9wZG93biA9IHRoaXMuX3BhcmVudDtcbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUEVORCkpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfUklHSFQ7XG4gICAgfVxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QU1RBUlQpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0xFRlQ7XG4gICAgfVxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QVVBfQ0VOVEVSKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9UT1BDRU5URVI7XG4gICAgfVxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9DRU5URVIpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0JPVFRPTUNFTlRFUjtcbiAgICB9XG5cbiAgICAvLyBXZSBuZWVkIHRvIHRyaW0gdGhlIHZhbHVlIGJlY2F1c2UgY3VzdG9tIHByb3BlcnRpZXMgY2FuIGFsc28gaW5jbHVkZSBzcGFjZXNcbiAgICBjb25zdCBpc0VuZCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fbWVudSkuZ2V0UHJvcGVydHlWYWx1ZSgnLS1icy1wb3NpdGlvbicpLnRyaW0oKSA9PT0gJ2VuZCc7XG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUCkpIHtcbiAgICAgIHJldHVybiBpc0VuZCA/IFBMQUNFTUVOVF9UT1BFTkQgOiBQTEFDRU1FTlRfVE9QO1xuICAgIH1cbiAgICByZXR1cm4gaXNFbmQgPyBQTEFDRU1FTlRfQk9UVE9NRU5EIDogUExBQ0VNRU5UX0JPVFRPTTtcbiAgfVxuICBfZGV0ZWN0TmF2YmFyKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTkFWQkFSKSAhPT0gbnVsbDtcbiAgfVxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9mZnNldFxuICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gb2Zmc2V0LnNwbGl0KCcsJykubWFwKHZhbHVlID0+IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBwb3BwZXJEYXRhID0+IG9mZnNldChwb3BwZXJEYXRhLCB0aGlzLl9lbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuICBfZ2V0UG9wcGVyQ29uZmlnKCkge1xuICAgIGNvbnN0IGRlZmF1bHRCc1BvcHBlckNvbmZpZyA9IHtcbiAgICAgIHBsYWNlbWVudDogdGhpcy5fZ2V0UGxhY2VtZW50KCksXG4gICAgICBtb2RpZmllcnM6IFt7XG4gICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYm91bmRhcnk6IHRoaXMuX2NvbmZpZy5ib3VuZGFyeVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgb2Zmc2V0OiB0aGlzLl9nZXRPZmZzZXQoKVxuICAgICAgICB9XG4gICAgICB9XVxuICAgIH07XG5cbiAgICAvLyBEaXNhYmxlIFBvcHBlciBpZiB3ZSBoYXZlIGEgc3RhdGljIGRpc3BsYXkgb3IgRHJvcGRvd24gaXMgaW4gTmF2YmFyXG4gICAgaWYgKHRoaXMuX2luTmF2YmFyIHx8IHRoaXMuX2NvbmZpZy5kaXNwbGF5ID09PSAnc3RhdGljJykge1xuICAgICAgTWFuaXB1bGF0b3Iuc2V0RGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCAncG9wcGVyJywgJ3N0YXRpYycpOyAvLyBUT0RPOiB2NiByZW1vdmVcbiAgICAgIGRlZmF1bHRCc1BvcHBlckNvbmZpZy5tb2RpZmllcnMgPSBbe1xuICAgICAgICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfV07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0QnNQb3BwZXJDb25maWcsXG4gICAgICAuLi5leGVjdXRlKHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcsIFtkZWZhdWx0QnNQb3BwZXJDb25maWddKVxuICAgIH07XG4gIH1cbiAgX3NlbGVjdE1lbnVJdGVtKHtcbiAgICBrZXksXG4gICAgdGFyZ2V0XG4gIH0pIHtcbiAgICBjb25zdCBpdGVtcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfVklTSUJMRV9JVEVNUywgdGhpcy5fbWVudSkuZmlsdGVyKGVsZW1lbnQgPT4gaXNWaXNpYmxlKGVsZW1lbnQpKTtcbiAgICBpZiAoIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRhcmdldCBpc24ndCBpbmNsdWRlZCBpbiBpdGVtcyAoZS5nLiB3aGVuIGV4cGFuZGluZyB0aGUgZHJvcGRvd24pXG4gICAgLy8gYWxsb3cgY3ljbGluZyB0byBnZXQgdGhlIGxhc3QgaXRlbSBpbiBjYXNlIGtleSBlcXVhbHMgQVJST1dfVVBfS0VZXG4gICAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQoaXRlbXMsIHRhcmdldCwga2V5ID09PSBBUlJPV19ET1dOX0tFWSQxLCAhaXRlbXMuaW5jbHVkZXModGFyZ2V0KSkuZm9jdXMoKTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgIH0pO1xuICB9XG4gIHN0YXRpYyBjbGVhck1lbnVzKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gUklHSFRfTU9VU0VfQlVUVE9OIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgZXZlbnQua2V5ICE9PSBUQUJfS0VZJDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3BlblRvZ2dsZXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFX1NIT1dOKTtcbiAgICBmb3IgKGNvbnN0IHRvZ2dsZSBvZiBvcGVuVG9nZ2xlcykge1xuICAgICAgY29uc3QgY29udGV4dCA9IERyb3Bkb3duLmdldEluc3RhbmNlKHRvZ2dsZSk7XG4gICAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wb3NlZFBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcbiAgICAgIGNvbnN0IGlzTWVudVRhcmdldCA9IGNvbXBvc2VkUGF0aC5pbmNsdWRlcyhjb250ZXh0Ll9tZW51KTtcbiAgICAgIGlmIChjb21wb3NlZFBhdGguaW5jbHVkZXMoY29udGV4dC5fZWxlbWVudCkgfHwgY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gJ2luc2lkZScgJiYgIWlzTWVudVRhcmdldCB8fCBjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSAnb3V0c2lkZScgJiYgaXNNZW51VGFyZ2V0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUYWIgbmF2aWdhdGlvbiB0aHJvdWdoIHRoZSBkcm9wZG93biBtZW51IG9yIGV2ZW50cyBmcm9tIGNvbnRhaW5lZCBpbnB1dHMgc2hvdWxkbid0IGNsb3NlIHRoZSBtZW51XG4gICAgICBpZiAoY29udGV4dC5fbWVudS5jb250YWlucyhldmVudC50YXJnZXQpICYmIChldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LmtleSA9PT0gVEFCX0tFWSQxIHx8IC9pbnB1dHxzZWxlY3R8b3B0aW9ufHRleHRhcmVhfGZvcm0vaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiBjb250ZXh0Ll9lbGVtZW50XG4gICAgICB9O1xuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldC5jbGlja0V2ZW50ID0gZXZlbnQ7XG4gICAgICB9XG4gICAgICBjb250ZXh0Ll9jb21wbGV0ZUhpZGUocmVsYXRlZFRhcmdldCk7XG4gICAgfVxuICB9XG4gIHN0YXRpYyBkYXRhQXBpS2V5ZG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAvLyBJZiBub3QgYW4gVVAgfCBET1dOIHwgRVNDQVBFIGtleSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgLy8gSWYgaW5wdXQvdGV4dGFyZWEgJiYgaWYga2V5IGlzIG90aGVyIHRoYW4gRVNDQVBFID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcblxuICAgIGNvbnN0IGlzSW5wdXQgPSAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKTtcbiAgICBjb25zdCBpc0VzY2FwZUV2ZW50ID0gZXZlbnQua2V5ID09PSBFU0NBUEVfS0VZJDI7XG4gICAgY29uc3QgaXNVcE9yRG93bkV2ZW50ID0gW0FSUk9XX1VQX0tFWSQxLCBBUlJPV19ET1dOX0tFWSQxXS5pbmNsdWRlcyhldmVudC5rZXkpO1xuICAgIGlmICghaXNVcE9yRG93bkV2ZW50ICYmICFpc0VzY2FwZUV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0lucHV0ICYmICFpc0VzY2FwZUV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBUT0RPOiB2NiByZXZlcnQgIzM3MDExICYgY2hhbmdlIG1hcmt1cCBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy81LjMvZm9ybXMvaW5wdXQtZ3JvdXAvXG4gICAgY29uc3QgZ2V0VG9nZ2xlQnV0dG9uID0gdGhpcy5tYXRjaGVzKFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMpID8gdGhpcyA6IFNlbGVjdG9yRW5naW5lLnByZXYodGhpcywgU0VMRUNUT1JfREFUQV9UT0dHTEUkMylbMF0gfHwgU2VsZWN0b3JFbmdpbmUubmV4dCh0aGlzLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzKVswXSB8fCBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMsIGV2ZW50LmRlbGVnYXRlVGFyZ2V0LnBhcmVudE5vZGUpO1xuICAgIGNvbnN0IGluc3RhbmNlID0gRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZShnZXRUb2dnbGVCdXR0b24pO1xuICAgIGlmIChpc1VwT3JEb3duRXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaW5zdGFuY2Uuc2hvdygpO1xuICAgICAgaW5zdGFuY2UuX3NlbGVjdE1lbnVJdGVtKGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGluc3RhbmNlLl9pc1Nob3duKCkpIHtcbiAgICAgIC8vIGVsc2UgaXMgZXNjYXBlIGFuZCB3ZSBjaGVjayBpZiBpdCBpcyBzaG93blxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpbnN0YW5jZS5oaWRlKCk7XG4gICAgICBnZXRUb2dnbGVCdXR0b24uZm9jdXMoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUkMywgRHJvcGRvd24uZGF0YUFwaUtleWRvd25IYW5kbGVyKTtcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSwgU0VMRUNUT1JfTUVOVSwgRHJvcGRvd24uZGF0YUFwaUtleWRvd25IYW5kbGVyKTtcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMywgRHJvcGRvd24uY2xlYXJNZW51cyk7XG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWVVQX0RBVEFfQVBJLCBEcm9wZG93bi5jbGVhck1lbnVzKTtcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMywgU0VMRUNUT1JfREFUQV9UT0dHTEUkMywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcykudG9nZ2xlKCk7XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oRHJvcGRvd24pO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9iYWNrZHJvcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDkgPSAnYmFja2Ryb3AnO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFJDQgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckNSA9ICdzaG93JztcbmNvbnN0IEVWRU5UX01PVVNFRE9XTiA9IGBtb3VzZWRvd24uYnMuJHtOQU1FJDl9YDtcbmNvbnN0IERlZmF1bHQkOCA9IHtcbiAgY2xhc3NOYW1lOiAnbW9kYWwtYmFja2Ryb3AnLFxuICBjbGlja0NhbGxiYWNrOiBudWxsLFxuICBpc0FuaW1hdGVkOiBmYWxzZSxcbiAgaXNWaXNpYmxlOiB0cnVlLFxuICAvLyBpZiBmYWxzZSwgd2UgdXNlIHRoZSBiYWNrZHJvcCBoZWxwZXIgd2l0aG91dCBhZGRpbmcgYW55IGVsZW1lbnQgdG8gdGhlIGRvbVxuICByb290RWxlbWVudDogJ2JvZHknIC8vIGdpdmUgdGhlIGNob2ljZSB0byBwbGFjZSBiYWNrZHJvcCB1bmRlciBkaWZmZXJlbnQgZWxlbWVudHNcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ4ID0ge1xuICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICBjbGlja0NhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJyxcbiAgaXNBbmltYXRlZDogJ2Jvb2xlYW4nLFxuICBpc1Zpc2libGU6ICdib29sZWFuJyxcbiAgcm9vdEVsZW1lbnQ6ICcoZWxlbWVudHxzdHJpbmcpJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQmFja2Ryb3AgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDg7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkODtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkOTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBzaG93KGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuaXNWaXNpYmxlKSB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fYXBwZW5kKCk7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2dldEVsZW1lbnQoKTtcbiAgICBpZiAodGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpIHtcbiAgICAgIHJlZmxvdyhlbGVtZW50KTtcbiAgICB9XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQ1KTtcbiAgICB0aGlzLl9lbXVsYXRlQW5pbWF0aW9uKCgpID0+IHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG4gIGhpZGUoY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5pc1Zpc2libGUpIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9nZXRFbGVtZW50KCkuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckNSk7XG4gICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOKTtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZSgpO1xuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2dldEVsZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50KSB7XG4gICAgICBjb25zdCBiYWNrZHJvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgYmFja2Ryb3AuY2xhc3NOYW1lID0gdGhpcy5fY29uZmlnLmNsYXNzTmFtZTtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgICBiYWNrZHJvcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSQ0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBiYWNrZHJvcDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7XG4gIH1cbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgLy8gdXNlIGdldEVsZW1lbnQoKSB3aXRoIHRoZSBkZWZhdWx0IFwiYm9keVwiIHRvIGdldCBhIGZyZXNoIEVsZW1lbnQgb24gZWFjaCBpbnN0YW50aWF0aW9uXG4gICAgY29uZmlnLnJvb3RFbGVtZW50ID0gZ2V0RWxlbWVudChjb25maWcucm9vdEVsZW1lbnQpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2FwcGVuZCgpIHtcbiAgICBpZiAodGhpcy5faXNBcHBlbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpO1xuICAgIHRoaXMuX2NvbmZpZy5yb290RWxlbWVudC5hcHBlbmQoZWxlbWVudCk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKGVsZW1lbnQsIEVWRU5UX01PVVNFRE9XTiwgKCkgPT4ge1xuICAgICAgZXhlY3V0ZSh0aGlzLl9jb25maWcuY2xpY2tDYWxsYmFjayk7XG4gICAgfSk7XG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IHRydWU7XG4gIH1cbiAgX2VtdWxhdGVBbmltYXRpb24oY2FsbGJhY2spIHtcbiAgICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCB0aGlzLl9nZXRFbGVtZW50KCksIHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKTtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9mb2N1c3RyYXAuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ4ID0gJ2ZvY3VzdHJhcCc7XG5jb25zdCBEQVRBX0tFWSQ1ID0gJ2JzLmZvY3VzdHJhcCc7XG5jb25zdCBFVkVOVF9LRVkkNSA9IGAuJHtEQVRBX0tFWSQ1fWA7XG5jb25zdCBFVkVOVF9GT0NVU0lOJDIgPSBgZm9jdXNpbiR7RVZFTlRfS0VZJDV9YDtcbmNvbnN0IEVWRU5UX0tFWURPV05fVEFCID0gYGtleWRvd24udGFiJHtFVkVOVF9LRVkkNX1gO1xuY29uc3QgVEFCX0tFWSA9ICdUYWInO1xuY29uc3QgVEFCX05BVl9GT1JXQVJEID0gJ2ZvcndhcmQnO1xuY29uc3QgVEFCX05BVl9CQUNLV0FSRCA9ICdiYWNrd2FyZCc7XG5jb25zdCBEZWZhdWx0JDcgPSB7XG4gIGF1dG9mb2N1czogdHJ1ZSxcbiAgdHJhcEVsZW1lbnQ6IG51bGwgLy8gVGhlIGVsZW1lbnQgdG8gdHJhcCBmb2N1cyBpbnNpZGUgb2Zcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ3ID0ge1xuICBhdXRvZm9jdXM6ICdib29sZWFuJyxcbiAgdHJhcEVsZW1lbnQ6ICdlbGVtZW50J1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgRm9jdXNUcmFwIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPSBudWxsO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkNztcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ3O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ4O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGFjdGl2YXRlKCkge1xuICAgIGlmICh0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLmF1dG9mb2N1cykge1xuICAgICAgdGhpcy5fY29uZmlnLnRyYXBFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSQ1KTsgLy8gZ3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBmb2N1cyBsb29wXG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9GT0NVU0lOJDIsIGV2ZW50ID0+IHRoaXMuX2hhbmRsZUZvY3VzaW4oZXZlbnQpKTtcbiAgICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fVEFCLCBldmVudCA9PiB0aGlzLl9oYW5kbGVLZXlkb3duKGV2ZW50KSk7XG4gICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlO1xuICB9XG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSQ1KTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2hhbmRsZUZvY3VzaW4oZXZlbnQpIHtcbiAgICBjb25zdCB7XG4gICAgICB0cmFwRWxlbWVudFxuICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZG9jdW1lbnQgfHwgZXZlbnQudGFyZ2V0ID09PSB0cmFwRWxlbWVudCB8fCB0cmFwRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRzID0gU2VsZWN0b3JFbmdpbmUuZm9jdXNhYmxlQ2hpbGRyZW4odHJhcEVsZW1lbnQpO1xuICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRyYXBFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID09PSBUQUJfTkFWX0JBQ0tXQVJEKSB7XG4gICAgICBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50c1swXS5mb2N1cygpO1xuICAgIH1cbiAgfVxuICBfaGFuZGxlS2V5ZG93bihldmVudCkge1xuICAgIGlmIChldmVudC5rZXkgIT09IFRBQl9LRVkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IGV2ZW50LnNoaWZ0S2V5ID8gVEFCX05BVl9CQUNLV0FSRCA6IFRBQl9OQVZfRk9SV0FSRDtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9zY3JvbGxCYXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgU0VMRUNUT1JfRklYRURfQ09OVEVOVCA9ICcuZml4ZWQtdG9wLCAuZml4ZWQtYm90dG9tLCAuaXMtZml4ZWQsIC5zdGlja3ktdG9wJztcbmNvbnN0IFNFTEVDVE9SX1NUSUNLWV9DT05URU5UID0gJy5zdGlja3ktdG9wJztcbmNvbnN0IFBST1BFUlRZX1BBRERJTkcgPSAncGFkZGluZy1yaWdodCc7XG5jb25zdCBQUk9QRVJUWV9NQVJHSU4gPSAnbWFyZ2luLXJpZ2h0JztcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgU2Nyb2xsQmFySGVscGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZ2V0V2lkdGgoKSB7XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9pbm5lcldpZHRoI3VzYWdlX25vdGVzXG4gICAgY29uc3QgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICByZXR1cm4gTWF0aC5hYnMod2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudFdpZHRoKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xuICAgIHRoaXMuX2Rpc2FibGVPdmVyRmxvdygpO1xuICAgIC8vIGdpdmUgcGFkZGluZyB0byBlbGVtZW50IHRvIGJhbGFuY2UgdGhlIGhpZGRlbiBzY3JvbGxiYXIgd2lkdGhcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCBQUk9QRVJUWV9QQURESU5HLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpO1xuICAgIC8vIHRyaWNrOiBXZSBhZGp1c3QgcG9zaXRpdmUgcGFkZGluZ1JpZ2h0IGFuZCBuZWdhdGl2ZSBtYXJnaW5SaWdodCB0byBzdGlja3ktdG9wIGVsZW1lbnRzIHRvIGtlZXAgc2hvd2luZyBmdWxsd2lkdGhcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9GSVhFRF9DT05URU5ULCBQUk9QRVJUWV9QQURESU5HLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpO1xuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCBQUk9QRVJUWV9NQVJHSU4sIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgLSB3aWR0aCk7XG4gIH1cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKTtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsIFBST1BFUlRZX1BBRERJTkcpO1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgUFJPUEVSVFlfUEFERElORyk7XG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgUFJPUEVSVFlfTUFSR0lOKTtcbiAgfVxuICBpc092ZXJmbG93aW5nKCkge1xuICAgIHJldHVybiB0aGlzLmdldFdpZHRoKCkgPiAwO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZGlzYWJsZU92ZXJGbG93KCkge1xuICAgIHRoaXMuX3NhdmVJbml0aWFsQXR0cmlidXRlKHRoaXMuX2VsZW1lbnQsICdvdmVyZmxvdycpO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgfVxuICBfc2V0RWxlbWVudEF0dHJpYnV0ZXMoc2VsZWN0b3IsIHN0eWxlUHJvcGVydHksIGNhbGxiYWNrKSB7XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSB0aGlzLmdldFdpZHRoKCk7XG4gICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgIGlmIChlbGVtZW50ICE9PSB0aGlzLl9lbGVtZW50ICYmIHdpbmRvdy5pbm5lcldpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCArIHNjcm9sbGJhcldpZHRoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NhdmVJbml0aWFsQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpO1xuICAgICAgY29uc3QgY2FsY3VsYXRlZFZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVQcm9wZXJ0eSwgYCR7Y2FsbGJhY2soTnVtYmVyLnBhcnNlRmxvYXQoY2FsY3VsYXRlZFZhbHVlKSl9cHhgKTtcbiAgICB9O1xuICAgIHRoaXMuX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIG1hbmlwdWxhdGlvbkNhbGxCYWNrKTtcbiAgfVxuICBfc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gZWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlUHJvcGVydHkpO1xuICAgIGlmIChhY3R1YWxWYWx1ZSkge1xuICAgICAgTWFuaXB1bGF0b3Iuc2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5LCBhY3R1YWxWYWx1ZSk7XG4gICAgfVxuICB9XG4gIF9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHNlbGVjdG9yLCBzdHlsZVByb3BlcnR5KSB7XG4gICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byByZW1vdmUgdGhlIHByb3BlcnR5IGlmIHRoZSB2YWx1ZSBpcyBgbnVsbGA7IHRoZSB2YWx1ZSBjYW4gYWxzbyBiZSB6ZXJvXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVQcm9wZXJ0eSwgdmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spO1xuICB9XG4gIF9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBjYWxsQmFjaykge1xuICAgIGlmIChpc0VsZW1lbnQoc2VsZWN0b3IpKSB7XG4gICAgICBjYWxsQmFjayhzZWxlY3Rvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2VsIG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IsIHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBjYWxsQmFjayhzZWwpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgbW9kYWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ3ID0gJ21vZGFsJztcbmNvbnN0IERBVEFfS0VZJDQgPSAnYnMubW9kYWwnO1xuY29uc3QgRVZFTlRfS0VZJDQgPSBgLiR7REFUQV9LRVkkNH1gO1xuY29uc3QgREFUQV9BUElfS0VZJDIgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVTQ0FQRV9LRVkkMSA9ICdFc2NhcGUnO1xuY29uc3QgRVZFTlRfSElERSQ0ID0gYGhpZGUke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9ISURFX1BSRVZFTlRFRCQxID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9ISURERU4kNCA9IGBoaWRkZW4ke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9TSE9XJDQgPSBgc2hvdyR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX1NIT1dOJDQgPSBgc2hvd24ke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9SRVNJWkUkMSA9IGByZXNpemUke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9DTElDS19ESVNNSVNTID0gYGNsaWNrLmRpc21pc3Mke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9NT1VTRURPV05fRElTTUlTUyA9IGBtb3VzZWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyQxID0gYGtleWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDIgPSBgY2xpY2ske0VWRU5UX0tFWSQ0fSR7REFUQV9BUElfS0VZJDJ9YDtcbmNvbnN0IENMQVNTX05BTUVfT1BFTiA9ICdtb2RhbC1vcGVuJztcbmNvbnN0IENMQVNTX05BTUVfRkFERSQzID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDQgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX1NUQVRJQyA9ICdtb2RhbC1zdGF0aWMnO1xuY29uc3QgT1BFTl9TRUxFQ1RPUiQxID0gJy5tb2RhbC5zaG93JztcbmNvbnN0IFNFTEVDVE9SX0RJQUxPRyA9ICcubW9kYWwtZGlhbG9nJztcbmNvbnN0IFNFTEVDVE9SX01PREFMX0JPRFkgPSAnLm1vZGFsLWJvZHknO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkMiA9ICdbZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiXSc7XG5jb25zdCBEZWZhdWx0JDYgPSB7XG4gIGJhY2tkcm9wOiB0cnVlLFxuICBmb2N1czogdHJ1ZSxcbiAga2V5Ym9hcmQ6IHRydWVcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ2ID0ge1xuICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICBmb2N1czogJ2Jvb2xlYW4nLFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBNb2RhbCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX2RpYWxvZyA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRElBTE9HLCB0aGlzLl9lbGVtZW50KTtcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpO1xuICAgIHRoaXMuX2ZvY3VzdHJhcCA9IHRoaXMuX2luaXRpYWxpemVGb2N1c1RyYXAoKTtcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fc2Nyb2xsQmFyID0gbmV3IFNjcm9sbEJhckhlbHBlcigpO1xuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ2O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDY7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDc7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XJDQsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICB9KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNTaG93biA9IHRydWU7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9zY3JvbGxCYXIuaGlkZSgpO1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX09QRU4pO1xuICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuICAgIHRoaXMuX2JhY2tkcm9wLnNob3coKCkgPT4gdGhpcy5fc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFJDQpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckNCk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9oaWRlTW9kYWwoKSwgdGhpcy5fZWxlbWVudCwgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIEV2ZW50SGFuZGxlci5vZmYod2luZG93LCBFVkVOVF9LRVkkNCk7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9kaWFsb2csIEVWRU5UX0tFWSQ0KTtcbiAgICB0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKCk7XG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cbiAgaGFuZGxlVXBkYXRlKCkge1xuICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaW5pdGlhbGl6ZUJhY2tEcm9wKCkge1xuICAgIHJldHVybiBuZXcgQmFja2Ryb3Aoe1xuICAgICAgaXNWaXNpYmxlOiBCb29sZWFuKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCksXG4gICAgICAvLyAnc3RhdGljJyBvcHRpb24gd2lsbCBiZSB0cmFuc2xhdGVkIHRvIHRydWUsIGFuZCBib29sZWFucyB3aWxsIGtlZXAgdGhlaXIgdmFsdWUsXG4gICAgICBpc0FuaW1hdGVkOiB0aGlzLl9pc0FuaW1hdGVkKClcbiAgICB9KTtcbiAgfVxuICBfaW5pdGlhbGl6ZUZvY3VzVHJhcCgpIHtcbiAgICByZXR1cm4gbmV3IEZvY3VzVHJhcCh7XG4gICAgICB0cmFwRWxlbWVudDogdGhpcy5fZWxlbWVudFxuICAgIH0pO1xuICB9XG4gIF9zaG93RWxlbWVudChyZWxhdGVkVGFyZ2V0KSB7XG4gICAgLy8gdHJ5IHRvIGFwcGVuZCBkeW5hbWljIG1vZGFsXG4gICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZCh0aGlzLl9lbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICBjb25zdCBtb2RhbEJvZHkgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX01PREFMX0JPRFksIHRoaXMuX2RpYWxvZyk7XG4gICAgaWYgKG1vZGFsQm9keSkge1xuICAgICAgbW9kYWxCb2R5LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDQpO1xuICAgIGNvbnN0IHRyYW5zaXRpb25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOJDQsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKHRyYW5zaXRpb25Db21wbGV0ZSwgdGhpcy5fZGlhbG9nLCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICB9XG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTJDEsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkkMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCk7XG4gICAgfSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFJDEsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1Nob3duICYmICF0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICAvLyBhIGJhZCB0cmljayB0byBzZWdyZWdhdGUgY2xpY2tzIHRoYXQgbWF5IHN0YXJ0IGluc2lkZSBkaWFsb2cgYnV0IGVuZCBvdXRzaWRlLCBhbmQgYXZvaWQgbGlzdGVuIHRvIHNjcm9sbGJhciBjbGlja3NcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfQ0xJQ0tfRElTTUlTUywgZXZlbnQyID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQgIT09IGV2ZW50LnRhcmdldCB8fCB0aGlzLl9lbGVtZW50ICE9PSBldmVudDIudGFyZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3AgPT09ICdzdGF0aWMnKSB7XG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wKSB7XG4gICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIF9oaWRlTW9kYWwoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1vZGFsJyk7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9iYWNrZHJvcC5oaWRlKCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX09QRU4pO1xuICAgICAgdGhpcy5fcmVzZXRBZGp1c3RtZW50cygpO1xuICAgICAgdGhpcy5fc2Nyb2xsQmFyLnJlc2V0KCk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4kNCk7XG4gICAgfSk7XG4gIH1cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQzKTtcbiAgfVxuICBfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpIHtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRCQxKTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNNb2RhbE92ZXJmbG93aW5nID0gdGhpcy5fZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IGluaXRpYWxPdmVyZmxvd1kgPSB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WTtcbiAgICAvLyByZXR1cm4gaWYgdGhlIGZvbGxvd2luZyBiYWNrZ3JvdW5kIHRyYW5zaXRpb24gaGFzbid0IHlldCBjb21wbGV0ZWRcbiAgICBpZiAoaW5pdGlhbE92ZXJmbG93WSA9PT0gJ2hpZGRlbicgfHwgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TVEFUSUMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9ICdoaWRkZW4nO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TVEFUSUMpO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU1RBVElDKTtcbiAgICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IGluaXRpYWxPdmVyZmxvd1k7XG4gICAgICB9LCB0aGlzLl9kaWFsb2cpO1xuICAgIH0sIHRoaXMuX2RpYWxvZyk7XG4gICAgdGhpcy5fZWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgdXNlZCB0byBoYW5kbGUgb3ZlcmZsb3dpbmcgbW9kYWxzXG4gICAqL1xuXG4gIF9hZGp1c3REaWFsb2coKSB7XG4gICAgY29uc3QgaXNNb2RhbE92ZXJmbG93aW5nID0gdGhpcy5fZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5fc2Nyb2xsQmFyLmdldFdpZHRoKCk7XG4gICAgY29uc3QgaXNCb2R5T3ZlcmZsb3dpbmcgPSBzY3JvbGxiYXJXaWR0aCA+IDA7XG4gICAgaWYgKGlzQm9keU92ZXJmbG93aW5nICYmICFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gaXNSVEwoKSA/ICdwYWRkaW5nTGVmdCcgOiAncGFkZGluZ1JpZ2h0JztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gYCR7c2Nyb2xsYmFyV2lkdGh9cHhgO1xuICAgIH1cbiAgICBpZiAoIWlzQm9keU92ZXJmbG93aW5nICYmIGlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBpc1JUTCgpID8gJ3BhZGRpbmdSaWdodCcgOiAncGFkZGluZ0xlZnQnO1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBgJHtzY3JvbGxiYXJXaWR0aH1weGA7XG4gICAgfVxuICB9XG4gIF9yZXNldEFkanVzdG1lbnRzKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJztcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9ICcnO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnLCByZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKHJlbGF0ZWRUYXJnZXQpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDIsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDIsIGZ1bmN0aW9uIChldmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpO1xuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfU0hPVyQ0LCBzaG93RXZlbnQgPT4ge1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgLy8gb25seSByZWdpc3RlciBmb2N1cyByZXN0b3JlciBpZiBtb2RhbCB3aWxsIGFjdHVhbGx5IGdldCBzaG93blxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfSElEREVOJDQsICgpID0+IHtcbiAgICAgIGlmIChpc1Zpc2libGUodGhpcykpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICAvLyBhdm9pZCBjb25mbGljdCB3aGVuIGNsaWNraW5nIG1vZGFsIHRvZ2dsZXIgd2hpbGUgYW5vdGhlciBvbmUgaXMgb3BlblxuICBjb25zdCBhbHJlYWR5T3BlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoT1BFTl9TRUxFQ1RPUiQxKTtcbiAgaWYgKGFscmVhZHlPcGVuKSB7XG4gICAgTW9kYWwuZ2V0SW5zdGFuY2UoYWxyZWFkeU9wZW4pLmhpZGUoKTtcbiAgfVxuICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuICBkYXRhLnRvZ2dsZSh0aGlzKTtcbn0pO1xuZW5hYmxlRGlzbWlzc1RyaWdnZXIoTW9kYWwpO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihNb2RhbCk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBvZmZjYW52YXMuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ2ID0gJ29mZmNhbnZhcyc7XG5jb25zdCBEQVRBX0tFWSQzID0gJ2JzLm9mZmNhbnZhcyc7XG5jb25zdCBFVkVOVF9LRVkkMyA9IGAuJHtEQVRBX0tFWSQzfWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkMSA9ICcuZGF0YS1hcGknO1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSQyID0gYGxvYWQke0VWRU5UX0tFWSQzfSR7REFUQV9BUElfS0VZJDF9YDtcbmNvbnN0IEVTQ0FQRV9LRVkgPSAnRXNjYXBlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQzID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XSU5HJDEgPSAnc2hvd2luZyc7XG5jb25zdCBDTEFTU19OQU1FX0hJRElORyA9ICdoaWRpbmcnO1xuY29uc3QgQ0xBU1NfTkFNRV9CQUNLRFJPUCA9ICdvZmZjYW52YXMtYmFja2Ryb3AnO1xuY29uc3QgT1BFTl9TRUxFQ1RPUiA9ICcub2ZmY2FudmFzLnNob3cnO1xuY29uc3QgRVZFTlRfU0hPVyQzID0gYHNob3cke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9TSE9XTiQzID0gYHNob3duJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfSElERSQzID0gYGhpZGUke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9ISURFX1BSRVZFTlRFRCA9IGBoaWRlUHJldmVudGVkJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfSElEREVOJDMgPSBgaGlkZGVuJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfUkVTSVpFID0gYHJlc2l6ZSR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDEgPSBgY2xpY2ske0VWRU5UX0tFWSQzfSR7REFUQV9BUElfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQxID0gJ1tkYXRhLWJzLXRvZ2dsZT1cIm9mZmNhbnZhc1wiXSc7XG5jb25zdCBEZWZhdWx0JDUgPSB7XG4gIGJhY2tkcm9wOiB0cnVlLFxuICBrZXlib2FyZDogdHJ1ZSxcbiAgc2Nyb2xsOiBmYWxzZVxufTtcbmNvbnN0IERlZmF1bHRUeXBlJDUgPSB7XG4gIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gIHNjcm9sbDogJ2Jvb2xlYW4nXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBPZmZjYW52YXMgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgdGhpcy5fYmFja2Ryb3AgPSB0aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKTtcbiAgICB0aGlzLl9mb2N1c3RyYXAgPSB0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKCk7XG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDU7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkNTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkNjtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldCk7XG4gIH1cbiAgc2hvdyhyZWxhdGVkVGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyQzLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0XG4gICAgfSk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzU2hvd24gPSB0cnVlO1xuICAgIHRoaXMuX2JhY2tkcm9wLnNob3coKTtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwpIHtcbiAgICAgIG5ldyBTY3JvbGxCYXJIZWxwZXIoKS5oaWRlKCk7XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgdHJ1ZSk7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJyk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPV0lORyQxKTtcbiAgICBjb25zdCBjb21wbGV0ZUNhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsIHx8IHRoaXMuX2NvbmZpZy5iYWNrZHJvcCkge1xuICAgICAgICB0aGlzLl9mb2N1c3RyYXAuYWN0aXZhdGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckMyk7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XSU5HJDEpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04kMywge1xuICAgICAgICByZWxhdGVkVGFyZ2V0XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsQmFjaywgdGhpcy5fZWxlbWVudCwgdHJ1ZSk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSQzKTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICB0aGlzLl9lbGVtZW50LmJsdXIoKTtcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfSElESU5HKTtcbiAgICB0aGlzLl9iYWNrZHJvcC5oaWRlKCk7XG4gICAgY29uc3QgY29tcGxldGVDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckMywgQ0xBU1NfTkFNRV9ISURJTkcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJyk7XG4gICAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwpIHtcbiAgICAgICAgbmV3IFNjcm9sbEJhckhlbHBlcigpLnJlc2V0KCk7XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4kMyk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbGJhY2ssIHRoaXMuX2VsZW1lbnQsIHRydWUpO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaW5pdGlhbGl6ZUJhY2tEcm9wKCkge1xuICAgIGNvbnN0IGNsaWNrQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH07XG5cbiAgICAvLyAnc3RhdGljJyBvcHRpb24gd2lsbCBiZSB0cmFuc2xhdGVkIHRvIHRydWUsIGFuZCBib29sZWFucyB3aWxsIGtlZXAgdGhlaXIgdmFsdWVcbiAgICBjb25zdCBpc1Zpc2libGUgPSBCb29sZWFuKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCk7XG4gICAgcmV0dXJuIG5ldyBCYWNrZHJvcCh7XG4gICAgICBjbGFzc05hbWU6IENMQVNTX05BTUVfQkFDS0RST1AsXG4gICAgICBpc1Zpc2libGUsXG4gICAgICBpc0FuaW1hdGVkOiB0cnVlLFxuICAgICAgcm9vdEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgIGNsaWNrQ2FsbGJhY2s6IGlzVmlzaWJsZSA/IGNsaWNrQ2FsbGJhY2sgOiBudWxsXG4gICAgfSk7XG4gIH1cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KTtcbiAgfVxuICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV05fRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gRVNDQVBFX0tFWSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKHRoaXMpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDEsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDEsIGZ1bmN0aW9uIChldmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpO1xuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfSElEREVOJDMsICgpID0+IHtcbiAgICAvLyBmb2N1cyBvbiB0cmlnZ2VyIHdoZW4gaXQgaXMgY2xvc2VkXG4gICAgaWYgKGlzVmlzaWJsZSh0aGlzKSkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBhIHRvZ2dsZXIgb2YgYW4gb2ZmY2FudmFzLCB3aGlsZSBhbm90aGVyIGlzIG9wZW5cbiAgY29uc3QgYWxyZWFkeU9wZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKE9QRU5fU0VMRUNUT1IpO1xuICBpZiAoYWxyZWFkeU9wZW4gJiYgYWxyZWFkeU9wZW4gIT09IHRhcmdldCkge1xuICAgIE9mZmNhbnZhcy5nZXRJbnN0YW5jZShhbHJlYWR5T3BlbikuaGlkZSgpO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuICBkYXRhLnRvZ2dsZSh0aGlzKTtcbn0pO1xuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSQyLCAoKSA9PiB7XG4gIGZvciAoY29uc3Qgc2VsZWN0b3Igb2YgU2VsZWN0b3JFbmdpbmUuZmluZChPUEVOX1NFTEVDVE9SKSkge1xuICAgIE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHNlbGVjdG9yKS5zaG93KCk7XG4gIH1cbn0pO1xuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKCdbYXJpYS1tb2RhbF1bY2xhc3MqPXNob3ddW2NsYXNzKj1vZmZjYW52YXMtXScpKSB7XG4gICAgaWYgKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gIT09ICdmaXhlZCcpIHtcbiAgICAgIE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQpLmhpZGUoKTtcbiAgICB9XG4gIH1cbn0pO1xuZW5hYmxlRGlzbWlzc1RyaWdnZXIoT2ZmY2FudmFzKTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oT2ZmY2FudmFzKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvc2FuaXRpemVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuLy8ganMtZG9jcy1zdGFydCBhbGxvdy1saXN0XG5jb25zdCBBUklBX0FUVFJJQlVURV9QQVRURVJOID0gL15hcmlhLVtcXHctXSokL2k7XG5jb25zdCBEZWZhdWx0QWxsb3dsaXN0ID0ge1xuICAvLyBHbG9iYWwgYXR0cmlidXRlcyBhbGxvd2VkIG9uIGFueSBzdXBwbGllZCBlbGVtZW50IGJlbG93LlxuICAnKic6IFsnY2xhc3MnLCAnZGlyJywgJ2lkJywgJ2xhbmcnLCAncm9sZScsIEFSSUFfQVRUUklCVVRFX1BBVFRFUk5dLFxuICBhOiBbJ3RhcmdldCcsICdocmVmJywgJ3RpdGxlJywgJ3JlbCddLFxuICBhcmVhOiBbXSxcbiAgYjogW10sXG4gIGJyOiBbXSxcbiAgY29sOiBbXSxcbiAgY29kZTogW10sXG4gIGRkOiBbXSxcbiAgZGl2OiBbXSxcbiAgZGw6IFtdLFxuICBkdDogW10sXG4gIGVtOiBbXSxcbiAgaHI6IFtdLFxuICBoMTogW10sXG4gIGgyOiBbXSxcbiAgaDM6IFtdLFxuICBoNDogW10sXG4gIGg1OiBbXSxcbiAgaDY6IFtdLFxuICBpOiBbXSxcbiAgaW1nOiBbJ3NyYycsICdzcmNzZXQnLCAnYWx0JywgJ3RpdGxlJywgJ3dpZHRoJywgJ2hlaWdodCddLFxuICBsaTogW10sXG4gIG9sOiBbXSxcbiAgcDogW10sXG4gIHByZTogW10sXG4gIHM6IFtdLFxuICBzbWFsbDogW10sXG4gIHNwYW46IFtdLFxuICBzdWI6IFtdLFxuICBzdXA6IFtdLFxuICBzdHJvbmc6IFtdLFxuICB1OiBbXSxcbiAgdWw6IFtdXG59O1xuLy8ganMtZG9jcy1lbmQgYWxsb3ctbGlzdFxuXG5jb25zdCB1cmlBdHRyaWJ1dGVzID0gbmV3IFNldChbJ2JhY2tncm91bmQnLCAnY2l0ZScsICdocmVmJywgJ2l0ZW10eXBlJywgJ2xvbmdkZXNjJywgJ3Bvc3RlcicsICdzcmMnLCAneGxpbms6aHJlZiddKTtcblxuLyoqXG4gKiBBIHBhdHRlcm4gdGhhdCByZWNvZ25pemVzIFVSTHMgdGhhdCBhcmUgc2FmZSB3cnQuIFhTUyBpbiBVUkwgbmF2aWdhdGlvblxuICogY29udGV4dHMuXG4gKlxuICogU2hvdXQtb3V0IHRvIEFuZ3VsYXIgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzE1LjIuOC9wYWNrYWdlcy9jb3JlL3NyYy9zYW5pdGl6YXRpb24vdXJsX3Nhbml0aXplci50cyNMMzhcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vYmV0dGVyLXJlZ2V4XG5jb25zdCBTQUZFX1VSTF9QQVRURVJOID0gL14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjovPyNdKig/OlsvPyNdfCQpKS9pO1xuY29uc3QgYWxsb3dlZEF0dHJpYnV0ZSA9IChhdHRyaWJ1dGUsIGFsbG93ZWRBdHRyaWJ1dGVMaXN0KSA9PiB7XG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgaWYgKHVyaUF0dHJpYnV0ZXMuaGFzKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICByZXR1cm4gQm9vbGVhbihTQUZFX1VSTF9QQVRURVJOLnRlc3QoYXR0cmlidXRlLm5vZGVWYWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGEgcmVndWxhciBleHByZXNzaW9uIHZhbGlkYXRlcyB0aGUgYXR0cmlidXRlLlxuICByZXR1cm4gYWxsb3dlZEF0dHJpYnV0ZUxpc3QuZmlsdGVyKGF0dHJpYnV0ZVJlZ2V4ID0+IGF0dHJpYnV0ZVJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKS5zb21lKHJlZ2V4ID0+IHJlZ2V4LnRlc3QoYXR0cmlidXRlTmFtZSkpO1xufTtcbmZ1bmN0aW9uIHNhbml0aXplSHRtbCh1bnNhZmVIdG1sLCBhbGxvd0xpc3QsIHNhbml0aXplRnVuY3Rpb24pIHtcbiAgaWYgKCF1bnNhZmVIdG1sLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnNhZmVIdG1sO1xuICB9XG4gIGlmIChzYW5pdGl6ZUZ1bmN0aW9uICYmIHR5cGVvZiBzYW5pdGl6ZUZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHNhbml0aXplRnVuY3Rpb24odW5zYWZlSHRtbCk7XG4gIH1cbiAgY29uc3QgZG9tUGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcbiAgY29uc3QgY3JlYXRlZERvY3VtZW50ID0gZG9tUGFyc2VyLnBhcnNlRnJvbVN0cmluZyh1bnNhZmVIdG1sLCAndGV4dC9odG1sJyk7XG4gIGNvbnN0IGVsZW1lbnRzID0gW10uY29uY2F0KC4uLmNyZWF0ZWREb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSk7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IGVsZW1lbnROYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghT2JqZWN0LmtleXMoYWxsb3dMaXN0KS5pbmNsdWRlcyhlbGVtZW50TmFtZSkpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgYXR0cmlidXRlTGlzdCA9IFtdLmNvbmNhdCguLi5lbGVtZW50LmF0dHJpYnV0ZXMpO1xuICAgIGNvbnN0IGFsbG93ZWRBdHRyaWJ1dGVzID0gW10uY29uY2F0KGFsbG93TGlzdFsnKiddIHx8IFtdLCBhbGxvd0xpc3RbZWxlbWVudE5hbWVdIHx8IFtdKTtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVMaXN0KSB7XG4gICAgICBpZiAoIWFsbG93ZWRBdHRyaWJ1dGUoYXR0cmlidXRlLCBhbGxvd2VkQXR0cmlidXRlcykpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlLm5vZGVOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZWREb2N1bWVudC5ib2R5LmlubmVySFRNTDtcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvdGVtcGxhdGUtZmFjdG9yeS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDUgPSAnVGVtcGxhdGVGYWN0b3J5JztcbmNvbnN0IERlZmF1bHQkNCA9IHtcbiAgYWxsb3dMaXN0OiBEZWZhdWx0QWxsb3dsaXN0LFxuICBjb250ZW50OiB7fSxcbiAgLy8geyBzZWxlY3RvciA6IHRleHQgLCAgc2VsZWN0b3IyIDogdGV4dDIgLCB9XG4gIGV4dHJhQ2xhc3M6ICcnLFxuICBodG1sOiBmYWxzZSxcbiAgc2FuaXRpemU6IHRydWUsXG4gIHNhbml0aXplRm46IG51bGwsXG4gIHRlbXBsYXRlOiAnPGRpdj48L2Rpdj4nXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkNCA9IHtcbiAgYWxsb3dMaXN0OiAnb2JqZWN0JyxcbiAgY29udGVudDogJ29iamVjdCcsXG4gIGV4dHJhQ2xhc3M6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIGh0bWw6ICdib29sZWFuJyxcbiAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgc2FuaXRpemVGbjogJyhudWxsfGZ1bmN0aW9uKScsXG4gIHRlbXBsYXRlOiAnc3RyaW5nJ1xufTtcbmNvbnN0IERlZmF1bHRDb250ZW50VHlwZSA9IHtcbiAgZW50cnk6ICcoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb258bnVsbCknLFxuICBzZWxlY3RvcjogJyhzdHJpbmd8ZWxlbWVudCknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUZW1wbGF0ZUZhY3RvcnkgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkNDtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ0O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ1O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fY29uZmlnLmNvbnRlbnQpLm1hcChjb25maWcgPT4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24oY29uZmlnKSkuZmlsdGVyKEJvb2xlYW4pO1xuICB9XG4gIGhhc0NvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGVudCgpLmxlbmd0aCA+IDA7XG4gIH1cbiAgY2hhbmdlQ29udGVudChjb250ZW50KSB7XG4gICAgdGhpcy5fY2hlY2tDb250ZW50KGNvbnRlbnQpO1xuICAgIHRoaXMuX2NvbmZpZy5jb250ZW50ID0ge1xuICAgICAgLi4udGhpcy5fY29uZmlnLmNvbnRlbnQsXG4gICAgICAuLi5jb250ZW50XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB0b0h0bWwoKSB7XG4gICAgY29uc3QgdGVtcGxhdGVXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGVtcGxhdGVXcmFwcGVyLmlubmVySFRNTCA9IHRoaXMuX21heWJlU2FuaXRpemUodGhpcy5fY29uZmlnLnRlbXBsYXRlKTtcbiAgICBmb3IgKGNvbnN0IFtzZWxlY3RvciwgdGV4dF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnLmNvbnRlbnQpKSB7XG4gICAgICB0aGlzLl9zZXRDb250ZW50KHRlbXBsYXRlV3JhcHBlciwgdGV4dCwgc2VsZWN0b3IpO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRlbXBsYXRlV3JhcHBlci5jaGlsZHJlblswXTtcbiAgICBjb25zdCBleHRyYUNsYXNzID0gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmV4dHJhQ2xhc3MpO1xuICAgIGlmIChleHRyYUNsYXNzKSB7XG4gICAgICB0ZW1wbGF0ZS5jbGFzc0xpc3QuYWRkKC4uLmV4dHJhQ2xhc3Muc3BsaXQoJyAnKSk7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX3R5cGVDaGVja0NvbmZpZyhjb25maWcpIHtcbiAgICBzdXBlci5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5fY2hlY2tDb250ZW50KGNvbmZpZy5jb250ZW50KTtcbiAgfVxuICBfY2hlY2tDb250ZW50KGFyZykge1xuICAgIGZvciAoY29uc3QgW3NlbGVjdG9yLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhhcmcpKSB7XG4gICAgICBzdXBlci5fdHlwZUNoZWNrQ29uZmlnKHtcbiAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgIGVudHJ5OiBjb250ZW50XG4gICAgICB9LCBEZWZhdWx0Q29udGVudFR5cGUpO1xuICAgIH1cbiAgfVxuICBfc2V0Q29udGVudCh0ZW1wbGF0ZSwgY29udGVudCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZUVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yLCB0ZW1wbGF0ZSk7XG4gICAgaWYgKCF0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29udGVudCA9IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGNvbnRlbnQpO1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNFbGVtZW50KGNvbnRlbnQpKSB7XG4gICAgICB0aGlzLl9wdXRFbGVtZW50SW5UZW1wbGF0ZShnZXRFbGVtZW50KGNvbnRlbnQpLCB0ZW1wbGF0ZUVsZW1lbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLmh0bWwpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLl9tYXliZVNhbml0aXplKGNvbnRlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ZW1wbGF0ZUVsZW1lbnQudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICB9XG4gIF9tYXliZVNhbml0aXplKGFyZykge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuc2FuaXRpemUgPyBzYW5pdGl6ZUh0bWwoYXJnLCB0aGlzLl9jb25maWcuYWxsb3dMaXN0LCB0aGlzLl9jb25maWcuc2FuaXRpemVGbikgOiBhcmc7XG4gIH1cbiAgX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBleGVjdXRlKGFyZywgW3RoaXNdKTtcbiAgfVxuICBfcHV0RWxlbWVudEluVGVtcGxhdGUoZWxlbWVudCwgdGVtcGxhdGVFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuYXBwZW5kKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ZW1wbGF0ZUVsZW1lbnQudGV4dENvbnRlbnQgPSBlbGVtZW50LnRleHRDb250ZW50O1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB0b29sdGlwLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkNCA9ICd0b29sdGlwJztcbmNvbnN0IERJU0FMTE9XRURfQVRUUklCVVRFUyA9IG5ldyBTZXQoWydzYW5pdGl6ZScsICdhbGxvd0xpc3QnLCAnc2FuaXRpemVGbiddKTtcbmNvbnN0IENMQVNTX05BTUVfRkFERSQyID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9NT0RBTCA9ICdtb2RhbCc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckMiA9ICdzaG93JztcbmNvbnN0IFNFTEVDVE9SX1RPT0xUSVBfSU5ORVIgPSAnLnRvb2x0aXAtaW5uZXInO1xuY29uc3QgU0VMRUNUT1JfTU9EQUwgPSBgLiR7Q0xBU1NfTkFNRV9NT0RBTH1gO1xuY29uc3QgRVZFTlRfTU9EQUxfSElERSA9ICdoaWRlLmJzLm1vZGFsJztcbmNvbnN0IFRSSUdHRVJfSE9WRVIgPSAnaG92ZXInO1xuY29uc3QgVFJJR0dFUl9GT0NVUyA9ICdmb2N1cyc7XG5jb25zdCBUUklHR0VSX0NMSUNLID0gJ2NsaWNrJztcbmNvbnN0IFRSSUdHRVJfTUFOVUFMID0gJ21hbnVhbCc7XG5jb25zdCBFVkVOVF9ISURFJDIgPSAnaGlkZSc7XG5jb25zdCBFVkVOVF9ISURERU4kMiA9ICdoaWRkZW4nO1xuY29uc3QgRVZFTlRfU0hPVyQyID0gJ3Nob3cnO1xuY29uc3QgRVZFTlRfU0hPV04kMiA9ICdzaG93bic7XG5jb25zdCBFVkVOVF9JTlNFUlRFRCA9ICdpbnNlcnRlZCc7XG5jb25zdCBFVkVOVF9DTElDSyQxID0gJ2NsaWNrJztcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4kMSA9ICdmb2N1c2luJztcbmNvbnN0IEVWRU5UX0ZPQ1VTT1VUJDEgPSAnZm9jdXNvdXQnO1xuY29uc3QgRVZFTlRfTU9VU0VFTlRFUiA9ICdtb3VzZWVudGVyJztcbmNvbnN0IEVWRU5UX01PVVNFTEVBVkUgPSAnbW91c2VsZWF2ZSc7XG5jb25zdCBBdHRhY2htZW50TWFwID0ge1xuICBBVVRPOiAnYXV0bycsXG4gIFRPUDogJ3RvcCcsXG4gIFJJR0hUOiBpc1JUTCgpID8gJ2xlZnQnIDogJ3JpZ2h0JyxcbiAgQk9UVE9NOiAnYm90dG9tJyxcbiAgTEVGVDogaXNSVEwoKSA/ICdyaWdodCcgOiAnbGVmdCdcbn07XG5jb25zdCBEZWZhdWx0JDMgPSB7XG4gIGFsbG93TGlzdDogRGVmYXVsdEFsbG93bGlzdCxcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBib3VuZGFyeTogJ2NsaXBwaW5nUGFyZW50cycsXG4gIGNvbnRhaW5lcjogZmFsc2UsXG4gIGN1c3RvbUNsYXNzOiAnJyxcbiAgZGVsYXk6IDAsXG4gIGZhbGxiYWNrUGxhY2VtZW50czogWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXSxcbiAgaHRtbDogZmFsc2UsXG4gIG9mZnNldDogWzAsIDZdLFxuICBwbGFjZW1lbnQ6ICd0b3AnLFxuICBwb3BwZXJDb25maWc6IG51bGwsXG4gIHNhbml0aXplOiB0cnVlLFxuICBzYW5pdGl6ZUZuOiBudWxsLFxuICBzZWxlY3RvcjogZmFsc2UsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPicgKyAnPGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj4nICsgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+JyArICc8L2Rpdj4nLFxuICB0aXRsZTogJycsXG4gIHRyaWdnZXI6ICdob3ZlciBmb2N1cydcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQzID0ge1xuICBhbGxvd0xpc3Q6ICdvYmplY3QnLFxuICBhbmltYXRpb246ICdib29sZWFuJyxcbiAgYm91bmRhcnk6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgY29udGFpbmVyOiAnKHN0cmluZ3xlbGVtZW50fGJvb2xlYW4pJyxcbiAgY3VzdG9tQ2xhc3M6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIGRlbGF5OiAnKG51bWJlcnxvYmplY3QpJyxcbiAgZmFsbGJhY2tQbGFjZW1lbnRzOiAnYXJyYXknLFxuICBodG1sOiAnYm9vbGVhbicsXG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcGxhY2VtZW50OiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBwb3BwZXJDb25maWc6ICcobnVsbHxvYmplY3R8ZnVuY3Rpb24pJyxcbiAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgc2FuaXRpemVGbjogJyhudWxsfGZ1bmN0aW9uKScsXG4gIHNlbGVjdG9yOiAnKHN0cmluZ3xib29sZWFuKScsXG4gIHRlbXBsYXRlOiAnc3RyaW5nJyxcbiAgdGl0bGU6ICcoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pJyxcbiAgdHJpZ2dlcjogJ3N0cmluZydcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRvb2x0aXAgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIHRvb2x0aXBzIHJlcXVpcmUgUG9wcGVyIChodHRwczovL3BvcHBlci5qcy5vcmcpJyk7XG4gICAgfVxuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZTtcbiAgICB0aGlzLl90aW1lb3V0ID0gMDtcbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXIgPSB7fTtcbiAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgIHRoaXMuX3RlbXBsYXRlRmFjdG9yeSA9IG51bGw7XG4gICAgdGhpcy5fbmV3Q29udGVudCA9IG51bGw7XG5cbiAgICAvLyBQcm90ZWN0ZWRcbiAgICB0aGlzLnRpcCA9IG51bGw7XG4gICAgdGhpcy5fc2V0TGlzdGVuZXJzKCk7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuc2VsZWN0b3IpIHtcbiAgICAgIHRoaXMuX2ZpeFRpdGxlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkMztcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQzO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ0O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGVuYWJsZSgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlO1xuICB9XG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2U7XG4gIH1cbiAgdG9nZ2xlRW5hYmxlZCgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSAhdGhpcy5faXNFbmFibGVkO1xuICB9XG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyLmNsaWNrID0gIXRoaXMuX2FjdGl2ZVRyaWdnZXIuY2xpY2s7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgdGhpcy5fbGVhdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZW50ZXIoKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9NT0RBTCksIEVWRU5UX01PREFMX0hJREUsIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIpO1xuICAgIGlmICh0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgndGl0bGUnLCB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpKTtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpO1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuICBzaG93KCkge1xuICAgIGlmICh0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgdXNlIHNob3cgb24gdmlzaWJsZSBlbGVtZW50cycpO1xuICAgIH1cbiAgICBpZiAoISh0aGlzLl9pc1dpdGhDb250ZW50KCkgJiYgdGhpcy5faXNFbmFibGVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9TSE9XJDIpKTtcbiAgICBjb25zdCBzaGFkb3dSb290ID0gZmluZFNoYWRvd1Jvb3QodGhpcy5fZWxlbWVudCk7XG4gICAgY29uc3QgaXNJblRoZURvbSA9IChzaGFkb3dSb290IHx8IHRoaXMuX2VsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCAhaXNJblRoZURvbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHY2IHJlbW92ZSB0aGlzIG9yIG1ha2UgaXQgb3B0aW9uYWxcbiAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKCk7XG4gICAgY29uc3QgdGlwID0gdGhpcy5fZ2V0VGlwRWxlbWVudCgpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGlwLmdldEF0dHJpYnV0ZSgnaWQnKSk7XG4gICAgY29uc3Qge1xuICAgICAgY29udGFpbmVyXG4gICAgfSA9IHRoaXMuX2NvbmZpZztcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnModGhpcy50aXApKSB7XG4gICAgICBjb250YWluZXIuYXBwZW5kKHRpcCk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9JTlNFUlRFRCkpO1xuICAgIH1cbiAgICB0aGlzLl9wb3BwZXIgPSB0aGlzLl9jcmVhdGVQb3BwZXIodGlwKTtcbiAgICB0aXAuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckMik7XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgYWRkIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJlbjtcbiAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMi9tb3VzZV9ldmVudF9idWIuaHRtbFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9TSE9XTiQyKSk7XG4gICAgICBpZiAodGhpcy5faXNIb3ZlcmVkID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9sZWF2ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNIb3ZlcmVkID0gZmFsc2U7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLnRpcCwgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0hJREUkMikpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUaXBFbGVtZW50KCk7XG4gICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDIpO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9DTElDS10gPSBmYWxzZTtcbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyW1RSSUdHRVJfRk9DVVNdID0gZmFsc2U7XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0hPVkVSXSA9IGZhbHNlO1xuICAgIHRoaXMuX2lzSG92ZXJlZCA9IG51bGw7IC8vIGl0IGlzIGEgdHJpY2sgdG8gc3VwcG9ydCBtYW51YWwgdHJpZ2dlcmluZ1xuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9ISURERU4kMikpO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy50aXAsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gIH1cbiAgdXBkYXRlKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBQcm90ZWN0ZWRcbiAgX2lzV2l0aENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZ2V0VGl0bGUoKSk7XG4gIH1cbiAgX2dldFRpcEVsZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLnRpcCkge1xuICAgICAgdGhpcy50aXAgPSB0aGlzLl9jcmVhdGVUaXBFbGVtZW50KHRoaXMuX25ld0NvbnRlbnQgfHwgdGhpcy5fZ2V0Q29udGVudEZvclRlbXBsYXRlKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50aXA7XG4gIH1cbiAgX2NyZWF0ZVRpcEVsZW1lbnQoY29udGVudCkge1xuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRlbXBsYXRlRmFjdG9yeShjb250ZW50KS50b0h0bWwoKTtcblxuICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzIGNoZWNrIGluIHY2XG4gICAgaWYgKCF0aXApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0aXAuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0ZBREUkMiwgQ0xBU1NfTkFNRV9TSE9XJDIpO1xuICAgIC8vIFRPRE86IHY2IHRoZSBmb2xsb3dpbmcgY2FuIGJlIGFjaGlldmVkIHdpdGggQ1NTIG9ubHlcbiAgICB0aXAuY2xhc3NMaXN0LmFkZChgYnMtJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9LWF1dG9gKTtcbiAgICBjb25zdCB0aXBJZCA9IGdldFVJRCh0aGlzLmNvbnN0cnVjdG9yLk5BTUUpLnRvU3RyaW5nKCk7XG4gICAgdGlwLnNldEF0dHJpYnV0ZSgnaWQnLCB0aXBJZCk7XG4gICAgaWYgKHRoaXMuX2lzQW5pbWF0ZWQoKSkge1xuICAgICAgdGlwLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9GQURFJDIpO1xuICAgIH1cbiAgICByZXR1cm4gdGlwO1xuICB9XG4gIHNldENvbnRlbnQoY29udGVudCkge1xuICAgIHRoaXMuX25ld0NvbnRlbnQgPSBjb250ZW50O1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKTtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH1cbiAgfVxuICBfZ2V0VGVtcGxhdGVGYWN0b3J5KGNvbnRlbnQpIHtcbiAgICBpZiAodGhpcy5fdGVtcGxhdGVGYWN0b3J5KSB7XG4gICAgICB0aGlzLl90ZW1wbGF0ZUZhY3RvcnkuY2hhbmdlQ29udGVudChjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5ID0gbmV3IFRlbXBsYXRlRmFjdG9yeSh7XG4gICAgICAgIC4uLnRoaXMuX2NvbmZpZyxcbiAgICAgICAgLy8gdGhlIGBjb250ZW50YCB2YXIgaGFzIHRvIGJlIGFmdGVyIGB0aGlzLl9jb25maWdgXG4gICAgICAgIC8vIHRvIG92ZXJyaWRlIGNvbmZpZy5jb250ZW50IGluIGNhc2Ugb2YgcG9wb3ZlclxuICAgICAgICBjb250ZW50LFxuICAgICAgICBleHRyYUNsYXNzOiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuY3VzdG9tQ2xhc3MpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlRmFjdG9yeTtcbiAgfVxuICBfZ2V0Q29udGVudEZvclRlbXBsYXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBbU0VMRUNUT1JfVE9PTFRJUF9JTk5FUl06IHRoaXMuX2dldFRpdGxlKClcbiAgICB9O1xuICB9XG4gIF9nZXRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLnRpdGxlKSB8fCB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuZ2V0T3JDcmVhdGVJbnN0YW5jZShldmVudC5kZWxlZ2F0ZVRhcmdldCwgdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSk7XG4gIH1cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5hbmltYXRpb24gfHwgdGhpcy50aXAgJiYgdGhpcy50aXAuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQyKTtcbiAgfVxuICBfaXNTaG93bigpIHtcbiAgICByZXR1cm4gdGhpcy50aXAgJiYgdGhpcy50aXAuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVyQyKTtcbiAgfVxuICBfY3JlYXRlUG9wcGVyKHRpcCkge1xuICAgIGNvbnN0IHBsYWNlbWVudCA9IGV4ZWN1dGUodGhpcy5fY29uZmlnLnBsYWNlbWVudCwgW3RoaXMsIHRpcCwgdGhpcy5fZWxlbWVudF0pO1xuICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBBdHRhY2htZW50TWFwW3BsYWNlbWVudC50b1VwcGVyQ2FzZSgpXTtcbiAgICByZXR1cm4gUG9wcGVyLmNyZWF0ZVBvcHBlcih0aGlzLl9lbGVtZW50LCB0aXAsIHRoaXMuX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSk7XG4gIH1cbiAgX2dldE9mZnNldCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBvZmZzZXRcbiAgICB9ID0gdGhpcy5fY29uZmlnO1xuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcG9wcGVyRGF0YSA9PiBvZmZzZXQocG9wcGVyRGF0YSwgdGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cbiAgX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBleGVjdXRlKGFyZywgW3RoaXMuX2VsZW1lbnRdKTtcbiAgfVxuICBfZ2V0UG9wcGVyQ29uZmlnKGF0dGFjaG1lbnQpIHtcbiAgICBjb25zdCBkZWZhdWx0QnNQb3BwZXJDb25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IGF0dGFjaG1lbnQsXG4gICAgICBtb2RpZmllcnM6IFt7XG4gICAgICAgIG5hbWU6ICdmbGlwJyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogdGhpcy5fY29uZmlnLmZhbGxiYWNrUGxhY2VtZW50c1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgb2Zmc2V0OiB0aGlzLl9nZXRPZmZzZXQoKVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYm91bmRhcnk6IHRoaXMuX2NvbmZpZy5ib3VuZGFyeVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdhcnJvdycsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBlbGVtZW50OiBgLiR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfS1hcnJvd2BcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAncHJlU2V0UGxhY2VtZW50JyxcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgcGhhc2U6ICdiZWZvcmVNYWluJyxcbiAgICAgICAgZm46IGRhdGEgPT4ge1xuICAgICAgICAgIC8vIFByZS1zZXQgUG9wcGVyJ3MgcGxhY2VtZW50IGF0dHJpYnV0ZSBpbiBvcmRlciB0byByZWFkIHRoZSBhcnJvdyBzaXplcyBwcm9wZXJseS5cbiAgICAgICAgICAvLyBPdGhlcndpc2UsIFBvcHBlciBtaXhlcyB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCBkaW1lbnNpb25zIHNpbmNlIHRoZSBpbml0aWFsIGFycm93IHN0eWxlIGlzIGZvciB0b3AgcGxhY2VtZW50XG4gICAgICAgICAgdGhpcy5fZ2V0VGlwRWxlbWVudCgpLnNldEF0dHJpYnV0ZSgnZGF0YS1wb3BwZXItcGxhY2VtZW50JywgZGF0YS5zdGF0ZS5wbGFjZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRCc1BvcHBlckNvbmZpZyxcbiAgICAgIC4uLmV4ZWN1dGUodGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZywgW2RlZmF1bHRCc1BvcHBlckNvbmZpZ10pXG4gICAgfTtcbiAgfVxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IHRyaWdnZXJzID0gdGhpcy5fY29uZmlnLnRyaWdnZXIuc3BsaXQoJyAnKTtcbiAgICBmb3IgKGNvbnN0IHRyaWdnZXIgb2YgdHJpZ2dlcnMpIHtcbiAgICAgIGlmICh0cmlnZ2VyID09PSAnY2xpY2snKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9DTElDSyQxKSwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCk7XG4gICAgICAgICAgY29udGV4dC50b2dnbGUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRyaWdnZXIgIT09IFRSSUdHRVJfTUFOVUFMKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50SW4gPSB0cmlnZ2VyID09PSBUUklHR0VSX0hPVkVSID8gdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfTU9VU0VFTlRFUikgOiB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU0lOJDEpO1xuICAgICAgICBjb25zdCBldmVudE91dCA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgPyB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9NT1VTRUxFQVZFKSA6IHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0ZPQ1VTT1VUJDEpO1xuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgZXZlbnRJbiwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCk7XG4gICAgICAgICAgY29udGV4dC5fYWN0aXZlVHJpZ2dlcltldmVudC50eXBlID09PSAnZm9jdXNpbicgPyBUUklHR0VSX0ZPQ1VTIDogVFJJR0dFUl9IT1ZFUl0gPSB0cnVlO1xuICAgICAgICAgIGNvbnRleHQuX2VudGVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgZXZlbnRPdXQsIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpO1xuICAgICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXJbZXZlbnQudHlwZSA9PT0gJ2ZvY3Vzb3V0JyA/IFRSSUdHRVJfRk9DVVMgOiBUUklHR0VSX0hPVkVSXSA9IGNvbnRleHQuX2VsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCk7XG4gICAgICAgICAgY29udGV4dC5fbGVhdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKTtcbiAgfVxuICBfZml4VGl0bGUoKSB7XG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgICBpZiAoIXRpdGxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSAmJiAhdGhpcy5fZWxlbWVudC50ZXh0Q29udGVudC50cmltKCkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdGl0bGUpO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScsIHRpdGxlKTsgLy8gRE8gTk9UIFVTRSBJVC4gSXMgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgfVxuICBfZW50ZXIoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSB8fCB0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgIHRoaXMuX2lzSG92ZXJlZCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzSG92ZXJlZCA9IHRydWU7XG4gICAgdGhpcy5fc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheS5zaG93KTtcbiAgfVxuICBfbGVhdmUoKSB7XG4gICAgaWYgKHRoaXMuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheS5oaWRlKTtcbiAgfVxuICBfc2V0VGltZW91dChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGhhbmRsZXIsIHRpbWVvdXQpO1xuICB9XG4gIF9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2FjdGl2ZVRyaWdnZXIpLmluY2x1ZGVzKHRydWUpO1xuICB9XG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uc3QgZGF0YUF0dHJpYnV0ZXMgPSBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KTtcbiAgICBmb3IgKGNvbnN0IGRhdGFBdHRyaWJ1dGUgb2YgT2JqZWN0LmtleXMoZGF0YUF0dHJpYnV0ZXMpKSB7XG4gICAgICBpZiAoRElTQUxMT1dFRF9BVFRSSUJVVEVTLmhhcyhkYXRhQXR0cmlidXRlKSkge1xuICAgICAgICBkZWxldGUgZGF0YUF0dHJpYnV0ZXNbZGF0YUF0dHJpYnV0ZV07XG4gICAgICB9XG4gICAgfVxuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLmRhdGFBdHRyaWJ1dGVzLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KVxuICAgIH07XG4gICAgY29uZmlnID0gdGhpcy5fbWVyZ2VDb25maWdPYmooY29uZmlnKTtcbiAgICBjb25maWcgPSB0aGlzLl9jb25maWdBZnRlck1lcmdlKGNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICBjb25maWcuY29udGFpbmVyID0gY29uZmlnLmNvbnRhaW5lciA9PT0gZmFsc2UgPyBkb2N1bWVudC5ib2R5IDogZ2V0RWxlbWVudChjb25maWcuY29udGFpbmVyKTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5kZWxheSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbmZpZy5kZWxheSA9IHtcbiAgICAgICAgc2hvdzogY29uZmlnLmRlbGF5LFxuICAgICAgICBoaWRlOiBjb25maWcuZGVsYXlcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLnRpdGxlID0gY29uZmlnLnRpdGxlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnLmNvbnRlbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcuY29udGVudCA9IGNvbmZpZy5jb250ZW50LnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2dldERlbGVnYXRlQ29uZmlnKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZykpIHtcbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRba2V5XSAhPT0gdmFsdWUpIHtcbiAgICAgICAgY29uZmlnW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uZmlnLnNlbGVjdG9yID0gZmFsc2U7XG4gICAgY29uZmlnLnRyaWdnZXIgPSAnbWFudWFsJztcblxuICAgIC8vIEluIHRoZSBmdXR1cmUgY2FuIGJlIHJlcGxhY2VkIHdpdGg6XG4gICAgLy8gY29uc3Qga2V5c1dpdGhEaWZmZXJlbnRWYWx1ZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcpLmZpbHRlcihlbnRyeSA9PiB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRbZW50cnlbMF1dICE9PSB0aGlzLl9jb25maWdbZW50cnlbMF1dKVxuICAgIC8vIGBPYmplY3QuZnJvbUVudHJpZXMoa2V5c1dpdGhEaWZmZXJlbnRWYWx1ZXMpYFxuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2Rpc3Bvc2VQb3BwZXIoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLnRpcCkge1xuICAgICAgdGhpcy50aXAucmVtb3ZlKCk7XG4gICAgICB0aGlzLnRpcCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gVG9vbHRpcC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUb29sdGlwKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHBvcG92ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQzID0gJ3BvcG92ZXInO1xuY29uc3QgU0VMRUNUT1JfVElUTEUgPSAnLnBvcG92ZXItaGVhZGVyJztcbmNvbnN0IFNFTEVDVE9SX0NPTlRFTlQgPSAnLnBvcG92ZXItYm9keSc7XG5jb25zdCBEZWZhdWx0JDIgPSB7XG4gIC4uLlRvb2x0aXAuRGVmYXVsdCxcbiAgY29udGVudDogJycsXG4gIG9mZnNldDogWzAsIDhdLFxuICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPicgKyAnPGRpdiBjbGFzcz1cInBvcG92ZXItYXJyb3dcIj48L2Rpdj4nICsgJzxoMyBjbGFzcz1cInBvcG92ZXItaGVhZGVyXCI+PC9oMz4nICsgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWJvZHlcIj48L2Rpdj4nICsgJzwvZGl2PicsXG4gIHRyaWdnZXI6ICdjbGljaydcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQyID0ge1xuICAuLi5Ub29sdGlwLkRlZmF1bHRUeXBlLFxuICBjb250ZW50OiAnKG51bGx8c3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgUG9wb3ZlciBleHRlbmRzIFRvb2x0aXAge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQyO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDI7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDM7XG4gIH1cblxuICAvLyBPdmVycmlkZXNcbiAgX2lzV2l0aENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFRpdGxlKCkgfHwgdGhpcy5fZ2V0Q29udGVudCgpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZ2V0Q29udGVudEZvclRlbXBsYXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBbU0VMRUNUT1JfVElUTEVdOiB0aGlzLl9nZXRUaXRsZSgpLFxuICAgICAgW1NFTEVDVE9SX0NPTlRFTlRdOiB0aGlzLl9nZXRDb250ZW50KClcbiAgICB9O1xuICB9XG4gIF9nZXRDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuY29udGVudCk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBQb3BvdmVyLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFBvcG92ZXIpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgc2Nyb2xsc3B5LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkMiA9ICdzY3JvbGxzcHknO1xuY29uc3QgREFUQV9LRVkkMiA9ICdicy5zY3JvbGxzcHknO1xuY29uc3QgRVZFTlRfS0VZJDIgPSBgLiR7REFUQV9LRVkkMn1gO1xuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFVkVOVF9BQ1RJVkFURSA9IGBhY3RpdmF0ZSR7RVZFTlRfS0VZJDJ9YDtcbmNvbnN0IEVWRU5UX0NMSUNLID0gYGNsaWNrJHtFVkVOVF9LRVkkMn1gO1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSQxID0gYGxvYWQke0VWRU5UX0tFWSQyfSR7REFUQV9BUElfS0VZfWA7XG5jb25zdCBDTEFTU19OQU1FX0RST1BET1dOX0lURU0gPSAnZHJvcGRvd24taXRlbSc7XG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSQxID0gJ2FjdGl2ZSc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NQWSA9ICdbZGF0YS1icy1zcHk9XCJzY3JvbGxcIl0nO1xuY29uc3QgU0VMRUNUT1JfVEFSR0VUX0xJTktTID0gJ1tocmVmXSc7XG5jb25zdCBTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCA9ICcubmF2LCAubGlzdC1ncm91cCc7XG5jb25zdCBTRUxFQ1RPUl9OQVZfTElOS1MgPSAnLm5hdi1saW5rJztcbmNvbnN0IFNFTEVDVE9SX05BVl9JVEVNUyA9ICcubmF2LWl0ZW0nO1xuY29uc3QgU0VMRUNUT1JfTElTVF9JVEVNUyA9ICcubGlzdC1ncm91cC1pdGVtJztcbmNvbnN0IFNFTEVDVE9SX0xJTktfSVRFTVMgPSBgJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX05BVl9JVEVNU30gPiAke1NFTEVDVE9SX05BVl9MSU5LU30sICR7U0VMRUNUT1JfTElTVF9JVEVNU31gO1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV04gPSAnLmRyb3Bkb3duJztcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSQxID0gJy5kcm9wZG93bi10b2dnbGUnO1xuY29uc3QgRGVmYXVsdCQxID0ge1xuICBvZmZzZXQ6IG51bGwsXG4gIC8vIFRPRE86IHY2IEBkZXByZWNhdGVkLCBrZWVwIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zXG4gIHJvb3RNYXJnaW46ICcwcHggMHB4IC0yNSUnLFxuICBzbW9vdGhTY3JvbGw6IGZhbHNlLFxuICB0YXJnZXQ6IG51bGwsXG4gIHRocmVzaG9sZDogWzAuMSwgMC41LCAxXVxufTtcbmNvbnN0IERlZmF1bHRUeXBlJDEgPSB7XG4gIG9mZnNldDogJyhudW1iZXJ8bnVsbCknLFxuICAvLyBUT0RPIHY2IEBkZXByZWNhdGVkLCBrZWVwIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zXG4gIHJvb3RNYXJnaW46ICdzdHJpbmcnLFxuICBzbW9vdGhTY3JvbGw6ICdib29sZWFuJyxcbiAgdGFyZ2V0OiAnZWxlbWVudCcsXG4gIHRocmVzaG9sZDogJ2FycmF5J1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgU2Nyb2xsU3B5IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG5cbiAgICAvLyB0aGlzLl9lbGVtZW50IGlzIHRoZSBvYnNlcnZhYmxlc0NvbnRhaW5lciBhbmQgY29uZmlnLnRhcmdldCB0aGUgbWVudSBsaW5rcyB3cmFwcGVyXG4gICAgdGhpcy5fdGFyZ2V0TGlua3MgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX3Jvb3RFbGVtZW50ID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9lbGVtZW50KS5vdmVyZmxvd1kgPT09ICd2aXNpYmxlJyA/IG51bGwgOiB0aGlzLl9lbGVtZW50O1xuICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGw7XG4gICAgdGhpcy5fb2JzZXJ2ZXIgPSBudWxsO1xuICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YSA9IHtcbiAgICAgIHZpc2libGVFbnRyeVRvcDogMCxcbiAgICAgIHBhcmVudFNjcm9sbFRvcDogMFxuICAgIH07XG4gICAgdGhpcy5yZWZyZXNoKCk7IC8vIGluaXRpYWxpemVcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDE7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkMTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkMjtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICByZWZyZXNoKCkge1xuICAgIHRoaXMuX2luaXRpYWxpemVUYXJnZXRzQW5kT2JzZXJ2YWJsZXMoKTtcbiAgICB0aGlzLl9tYXliZUVuYWJsZVNtb290aFNjcm9sbCgpO1xuICAgIGlmICh0aGlzLl9vYnNlcnZlcikge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vYnNlcnZlciA9IHRoaXMuX2dldE5ld09ic2VydmVyKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIHRoaXMuX29ic2VydmVyLm9ic2VydmUoc2VjdGlvbik7XG4gICAgfVxuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgLy8gVE9ETzogb24gdjYgdGFyZ2V0IHNob3VsZCBiZSBnaXZlbiBleHBsaWNpdGx5ICYgcmVtb3ZlIHRoZSB7dGFyZ2V0OiAnc3MtdGFyZ2V0J30gY2FzZVxuICAgIGNvbmZpZy50YXJnZXQgPSBnZXRFbGVtZW50KGNvbmZpZy50YXJnZXQpIHx8IGRvY3VtZW50LmJvZHk7XG5cbiAgICAvLyBUT0RPOiB2NiBPbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zLiBVc2Ugcm9vdE1hcmdpbiBvbmx5XG4gICAgY29uZmlnLnJvb3RNYXJnaW4gPSBjb25maWcub2Zmc2V0ID8gYCR7Y29uZmlnLm9mZnNldH1weCAwcHggLTMwJWAgOiBjb25maWcucm9vdE1hcmdpbjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy50aHJlc2hvbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcudGhyZXNob2xkID0gY29uZmlnLnRocmVzaG9sZC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9tYXliZUVuYWJsZVNtb290aFNjcm9sbCgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5zbW9vdGhTY3JvbGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB1bnJlZ2lzdGVyIGFueSBwcmV2aW91cyBsaXN0ZW5lcnNcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2NvbmZpZy50YXJnZXQsIEVWRU5UX0NMSUNLKTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fY29uZmlnLnRhcmdldCwgRVZFTlRfQ0xJQ0ssIFNFTEVDVE9SX1RBUkdFVF9MSU5LUywgZXZlbnQgPT4ge1xuICAgICAgY29uc3Qgb2JzZXJ2YWJsZVNlY3Rpb24gPSB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMuZ2V0KGV2ZW50LnRhcmdldC5oYXNoKTtcbiAgICAgIGlmIChvYnNlcnZhYmxlU2VjdGlvbikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCByb290ID0gdGhpcy5fcm9vdEVsZW1lbnQgfHwgd2luZG93O1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBvYnNlcnZhYmxlU2VjdGlvbi5vZmZzZXRUb3AgLSB0aGlzLl9lbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgaWYgKHJvb3Quc2Nyb2xsVG8pIHtcbiAgICAgICAgICByb290LnNjcm9sbFRvKHtcbiAgICAgICAgICAgIHRvcDogaGVpZ2h0LFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hyb21lIDYwIGRvZXNuJ3Qgc3VwcG9ydCBgc2Nyb2xsVG9gXG4gICAgICAgIHJvb3Quc2Nyb2xsVG9wID0gaGVpZ2h0O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIF9nZXROZXdPYnNlcnZlcigpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdDogdGhpcy5fcm9vdEVsZW1lbnQsXG4gICAgICB0aHJlc2hvbGQ6IHRoaXMuX2NvbmZpZy50aHJlc2hvbGQsXG4gICAgICByb290TWFyZ2luOiB0aGlzLl9jb25maWcucm9vdE1hcmdpblxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihlbnRyaWVzID0+IHRoaXMuX29ic2VydmVyQ2FsbGJhY2soZW50cmllcyksIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gVGhlIGxvZ2ljIG9mIHNlbGVjdGlvblxuICBfb2JzZXJ2ZXJDYWxsYmFjayhlbnRyaWVzKSB7XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGVudHJ5ID0+IHRoaXMuX3RhcmdldExpbmtzLmdldChgIyR7ZW50cnkudGFyZ2V0LmlkfWApO1xuICAgIGNvbnN0IGFjdGl2YXRlID0gZW50cnkgPT4ge1xuICAgICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnZpc2libGVFbnRyeVRvcCA9IGVudHJ5LnRhcmdldC5vZmZzZXRUb3A7XG4gICAgICB0aGlzLl9wcm9jZXNzKHRhcmdldEVsZW1lbnQoZW50cnkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHBhcmVudFNjcm9sbFRvcCA9ICh0aGlzLl9yb290RWxlbWVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLnNjcm9sbFRvcDtcbiAgICBjb25zdCB1c2VyU2Nyb2xsc0Rvd24gPSBwYXJlbnRTY3JvbGxUb3AgPj0gdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnBhcmVudFNjcm9sbFRvcDtcbiAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEucGFyZW50U2Nyb2xsVG9wID0gcGFyZW50U2Nyb2xsVG9wO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgaWYgKCFlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLl9jbGVhckFjdGl2ZUNsYXNzKHRhcmdldEVsZW1lbnQoZW50cnkpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBlbnRyeUlzTG93ZXJUaGFuUHJldmlvdXMgPSBlbnRyeS50YXJnZXQub2Zmc2V0VG9wID49IHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS52aXNpYmxlRW50cnlUb3A7XG4gICAgICAvLyBpZiB3ZSBhcmUgc2Nyb2xsaW5nIGRvd24sIHBpY2sgdGhlIGJpZ2dlciBvZmZzZXRUb3BcbiAgICAgIGlmICh1c2VyU2Nyb2xsc0Rvd24gJiYgZW50cnlJc0xvd2VyVGhhblByZXZpb3VzKSB7XG4gICAgICAgIGFjdGl2YXRlKGVudHJ5KTtcbiAgICAgICAgLy8gaWYgcGFyZW50IGlzbid0IHNjcm9sbGVkLCBsZXQncyBrZWVwIHRoZSBmaXJzdCB2aXNpYmxlIGl0ZW0sIGJyZWFraW5nIHRoZSBpdGVyYXRpb25cbiAgICAgICAgaWYgKCFwYXJlbnRTY3JvbGxUb3ApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGFyZSBzY3JvbGxpbmcgdXAsIHBpY2sgdGhlIHNtYWxsZXN0IG9mZnNldFRvcFxuICAgICAgaWYgKCF1c2VyU2Nyb2xsc0Rvd24gJiYgIWVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzKCkge1xuICAgIHRoaXMuX3RhcmdldExpbmtzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCB0YXJnZXRMaW5rcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfVEFSR0VUX0xJTktTLCB0aGlzLl9jb25maWcudGFyZ2V0KTtcbiAgICBmb3IgKGNvbnN0IGFuY2hvciBvZiB0YXJnZXRMaW5rcykge1xuICAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIGFuY2hvciBoYXMgYW4gaWQgYW5kIGlzIG5vdCBkaXNhYmxlZFxuICAgICAgaWYgKCFhbmNob3IuaGFzaCB8fCBpc0Rpc2FibGVkKGFuY2hvcikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBvYnNlcnZhYmxlU2VjdGlvbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoZGVjb2RlVVJJKGFuY2hvci5oYXNoKSwgdGhpcy5fZWxlbWVudCk7XG5cbiAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBvYnNlcnZhYmxlU2VjdGlvbiBleGlzdHMgJiBpcyB2aXNpYmxlXG4gICAgICBpZiAoaXNWaXNpYmxlKG9ic2VydmFibGVTZWN0aW9uKSkge1xuICAgICAgICB0aGlzLl90YXJnZXRMaW5rcy5zZXQoZGVjb2RlVVJJKGFuY2hvci5oYXNoKSwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnNldChhbmNob3IuaGFzaCwgb2JzZXJ2YWJsZVNlY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfcHJvY2Vzcyh0YXJnZXQpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlVGFyZ2V0ID09PSB0YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY2xlYXJBY3RpdmVDbGFzcyh0aGlzLl9jb25maWcudGFyZ2V0KTtcbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSB0YXJnZXQ7XG4gICAgdGFyZ2V0LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgdGhpcy5fYWN0aXZhdGVQYXJlbnRzKHRhcmdldCk7XG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfQUNUSVZBVEUsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRhcmdldFxuICAgIH0pO1xuICB9XG4gIF9hY3RpdmF0ZVBhcmVudHModGFyZ2V0KSB7XG4gICAgLy8gQWN0aXZhdGUgZHJvcGRvd24gcGFyZW50c1xuICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUERPV05fSVRFTSkpIHtcbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFJDEsIHRhcmdldC5jbG9zZXN0KFNFTEVDVE9SX0RST1BET1dOKSkuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSQxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaXN0R3JvdXAgb2YgU2VsZWN0b3JFbmdpbmUucGFyZW50cyh0YXJnZXQsIFNFTEVDVE9SX05BVl9MSVNUX0dST1VQKSkge1xuICAgICAgLy8gU2V0IHRyaWdnZXJlZCBsaW5rcyBwYXJlbnRzIGFzIGFjdGl2ZVxuICAgICAgLy8gV2l0aCBib3RoIDx1bD4gYW5kIDxuYXY+IG1hcmt1cCBhIHBhcmVudCBpcyB0aGUgcHJldmlvdXMgc2libGluZyBvZiBhbnkgbmF2IGFuY2VzdG9yXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgU2VsZWN0b3JFbmdpbmUucHJldihsaXN0R3JvdXAsIFNFTEVDVE9SX0xJTktfSVRFTVMpKSB7XG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSQxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX2NsZWFyQWN0aXZlQ2xhc3MocGFyZW50KSB7XG4gICAgcGFyZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgY29uc3QgYWN0aXZlTm9kZXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKGAke1NFTEVDVE9SX1RBUkdFVF9MSU5LU30uJHtDTEFTU19OQU1FX0FDVElWRSQxfWAsIHBhcmVudCk7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIGFjdGl2ZU5vZGVzKSB7XG4gICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gU2Nyb2xsU3B5LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJJDEsICgpID0+IHtcbiAgZm9yIChjb25zdCBzcHkgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1NQWSkpIHtcbiAgICBTY3JvbGxTcHkuZ2V0T3JDcmVhdGVJbnN0YW5jZShzcHkpO1xuICB9XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oU2Nyb2xsU3B5KTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHRhYi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDEgPSAndGFiJztcbmNvbnN0IERBVEFfS0VZJDEgPSAnYnMudGFiJztcbmNvbnN0IEVWRU5UX0tFWSQxID0gYC4ke0RBVEFfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0hJREUkMSA9IGBoaWRlJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfSElEREVOJDEgPSBgaGlkZGVuJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfU0hPVyQxID0gYHNob3cke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9TSE9XTiQxID0gYHNob3duJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9LRVlET1dOID0gYGtleWRvd24ke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJID0gYGxvYWQke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBBUlJPV19MRUZUX0tFWSA9ICdBcnJvd0xlZnQnO1xuY29uc3QgQVJST1dfUklHSFRfS0VZID0gJ0Fycm93UmlnaHQnO1xuY29uc3QgQVJST1dfVVBfS0VZID0gJ0Fycm93VXAnO1xuY29uc3QgQVJST1dfRE9XTl9LRVkgPSAnQXJyb3dEb3duJztcbmNvbnN0IEhPTUVfS0VZID0gJ0hvbWUnO1xuY29uc3QgRU5EX0tFWSA9ICdFbmQnO1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJztcbmNvbnN0IENMQVNTX05BTUVfRkFERSQxID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDEgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19EUk9QRE9XTiA9ICdkcm9wZG93bic7XG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSAnLmRyb3Bkb3duLXRvZ2dsZSc7XG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9NRU5VID0gJy5kcm9wZG93bi1tZW51JztcbmNvbnN0IE5PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSBgOm5vdCgke1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX0pYDtcbmNvbnN0IFNFTEVDVE9SX1RBQl9QQU5FTCA9ICcubGlzdC1ncm91cCwgLm5hdiwgW3JvbGU9XCJ0YWJsaXN0XCJdJztcbmNvbnN0IFNFTEVDVE9SX09VVEVSID0gJy5uYXYtaXRlbSwgLmxpc3QtZ3JvdXAtaXRlbSc7XG5jb25zdCBTRUxFQ1RPUl9JTk5FUiA9IGAubmF2LWxpbmske05PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9LCAubGlzdC1ncm91cC1pdGVtJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfSwgW3JvbGU9XCJ0YWJcIl0ke05PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9YDtcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cInRhYlwiXSwgW2RhdGEtYnMtdG9nZ2xlPVwicGlsbFwiXSwgW2RhdGEtYnMtdG9nZ2xlPVwibGlzdFwiXSc7IC8vIFRPRE86IGNvdWxkIG9ubHkgYmUgYHRhYmAgaW4gdjZcbmNvbnN0IFNFTEVDVE9SX0lOTkVSX0VMRU0gPSBgJHtTRUxFQ1RPUl9JTk5FUn0sICR7U0VMRUNUT1JfREFUQV9UT0dHTEV9YDtcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFX0FDVElWRSA9IGAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJ0YWJcIl0sIC4ke0NMQVNTX05BTUVfQUNUSVZFfVtkYXRhLWJzLXRvZ2dsZT1cInBpbGxcIl0sIC4ke0NMQVNTX05BTUVfQUNUSVZFfVtkYXRhLWJzLXRvZ2dsZT1cImxpc3RcIl1gO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUYWIgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCkge1xuICAgIHN1cGVyKGVsZW1lbnQpO1xuICAgIHRoaXMuX3BhcmVudCA9IHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9UQUJfUEFORUwpO1xuICAgIGlmICghdGhpcy5fcGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgICAvLyBUT0RPOiBzaG91bGQgdGhyb3cgZXhjZXB0aW9uIGluIHY2XG4gICAgICAvLyB0aHJvdyBuZXcgVHlwZUVycm9yKGAke2VsZW1lbnQub3V0ZXJIVE1MfSBoYXMgbm90IGEgdmFsaWQgcGFyZW50ICR7U0VMRUNUT1JfSU5ORVJfRUxFTX1gKVxuICAgIH1cblxuICAgIC8vIFNldCB1cCBpbml0aWFsIGFyaWEgYXR0cmlidXRlc1xuICAgIHRoaXMuX3NldEluaXRpYWxBdHRyaWJ1dGVzKHRoaXMuX3BhcmVudCwgdGhpcy5fZ2V0Q2hpbGRyZW4oKSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV04sIGV2ZW50ID0+IHRoaXMuX2tleWRvd24oZXZlbnQpKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDE7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdygpIHtcbiAgICAvLyBTaG93cyB0aGlzIGVsZW0gYW5kIGRlYWN0aXZhdGUgdGhlIGFjdGl2ZSBzaWJsaW5nIGlmIGV4aXN0c1xuICAgIGNvbnN0IGlubmVyRWxlbSA9IHRoaXMuX2VsZW1lbnQ7XG4gICAgaWYgKHRoaXMuX2VsZW1Jc0FjdGl2ZShpbm5lckVsZW0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2VhcmNoIGZvciBhY3RpdmUgdGFiIG9uIHNhbWUgcGFyZW50IHRvIGRlYWN0aXZhdGUgaXRcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLl9nZXRBY3RpdmVFbGVtKCk7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gYWN0aXZlID8gRXZlbnRIYW5kbGVyLnRyaWdnZXIoYWN0aXZlLCBFVkVOVF9ISURFJDEsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IGlubmVyRWxlbVxuICAgIH0pIDogbnVsbDtcbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcihpbm5lckVsZW0sIEVWRU5UX1NIT1ckMSwge1xuICAgICAgcmVsYXRlZFRhcmdldDogYWN0aXZlXG4gICAgfSk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkIHx8IGhpZGVFdmVudCAmJiBoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kZWFjdGl2YXRlKGFjdGl2ZSwgaW5uZXJFbGVtKTtcbiAgICB0aGlzLl9hY3RpdmF0ZShpbm5lckVsZW0sIGFjdGl2ZSk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9hY3RpdmF0ZShlbGVtZW50LCByZWxhdGVkRWxlbSkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICAgIHRoaXMuX2FjdGl2YXRlKFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkpOyAvLyBTZWFyY2ggYW5kIGFjdGl2YXRlL3Nob3cgdGhlIHByb3BlciBzZWN0aW9uXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgncm9sZScpICE9PSAndGFiJykge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgdHJ1ZSk7XG4gICAgICB0aGlzLl90b2dnbGVEcm9wRG93bihlbGVtZW50LCB0cnVlKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKGVsZW1lbnQsIEVWRU5UX1NIT1dOJDEsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogcmVsYXRlZEVsZW1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgZWxlbWVudCwgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFJDEpKTtcbiAgfVxuICBfZGVhY3RpdmF0ZShlbGVtZW50LCByZWxhdGVkRWxlbSkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICAgIGVsZW1lbnQuYmx1cigpO1xuICAgIHRoaXMuX2RlYWN0aXZhdGUoU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KSk7IC8vIFNlYXJjaCBhbmQgZGVhY3RpdmF0ZSB0aGUgc2hvd24gc2VjdGlvbiB0b29cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgIT09ICd0YWInKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgZmFsc2UpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICB0aGlzLl90b2dnbGVEcm9wRG93bihlbGVtZW50LCBmYWxzZSk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcihlbGVtZW50LCBFVkVOVF9ISURERU4kMSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkRWxlbVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCBlbGVtZW50LCBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkMSkpO1xuICB9XG4gIF9rZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKCFbQVJST1dfTEVGVF9LRVksIEFSUk9XX1JJR0hUX0tFWSwgQVJST1dfVVBfS0VZLCBBUlJPV19ET1dOX0tFWSwgSE9NRV9LRVksIEVORF9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIHN0b3BQcm9wYWdhdGlvbi9wcmV2ZW50RGVmYXVsdCBib3RoIGFkZGVkIHRvIHN1cHBvcnQgdXAvZG93biBrZXlzIHdpdGhvdXQgc2Nyb2xsaW5nIHRoZSBwYWdlXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldENoaWxkcmVuKCkuZmlsdGVyKGVsZW1lbnQgPT4gIWlzRGlzYWJsZWQoZWxlbWVudCkpO1xuICAgIGxldCBuZXh0QWN0aXZlRWxlbWVudDtcbiAgICBpZiAoW0hPTUVfS0VZLCBFTkRfS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBuZXh0QWN0aXZlRWxlbWVudCA9IGNoaWxkcmVuW2V2ZW50LmtleSA9PT0gSE9NRV9LRVkgPyAwIDogY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlzTmV4dCA9IFtBUlJPV19SSUdIVF9LRVksIEFSUk9XX0RPV05fS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpO1xuICAgICAgbmV4dEFjdGl2ZUVsZW1lbnQgPSBnZXROZXh0QWN0aXZlRWxlbWVudChjaGlsZHJlbiwgZXZlbnQudGFyZ2V0LCBpc05leHQsIHRydWUpO1xuICAgIH1cbiAgICBpZiAobmV4dEFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIG5leHRBY3RpdmVFbGVtZW50LmZvY3VzKHtcbiAgICAgICAgcHJldmVudFNjcm9sbDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZShuZXh0QWN0aXZlRWxlbWVudCkuc2hvdygpO1xuICAgIH1cbiAgfVxuICBfZ2V0Q2hpbGRyZW4oKSB7XG4gICAgLy8gY29sbGVjdGlvbiBvZiBpbm5lciBlbGVtZW50c1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lOTkVSX0VMRU0sIHRoaXMuX3BhcmVudCk7XG4gIH1cbiAgX2dldEFjdGl2ZUVsZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENoaWxkcmVuKCkuZmluZChjaGlsZCA9PiB0aGlzLl9lbGVtSXNBY3RpdmUoY2hpbGQpKSB8fCBudWxsO1xuICB9XG4gIF9zZXRJbml0aWFsQXR0cmlidXRlcyhwYXJlbnQsIGNoaWxkcmVuKSB7XG4gICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMocGFyZW50LCAncm9sZScsICd0YWJsaXN0Jyk7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPbkNoaWxkKGNoaWxkKTtcbiAgICB9XG4gIH1cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzT25DaGlsZChjaGlsZCkge1xuICAgIGNoaWxkID0gdGhpcy5fZ2V0SW5uZXJFbGVtZW50KGNoaWxkKTtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuX2VsZW1Jc0FjdGl2ZShjaGlsZCk7XG4gICAgY29uc3Qgb3V0ZXJFbGVtID0gdGhpcy5fZ2V0T3V0ZXJFbGVtZW50KGNoaWxkKTtcbiAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBpc0FjdGl2ZSk7XG4gICAgaWYgKG91dGVyRWxlbSAhPT0gY2hpbGQpIHtcbiAgICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKG91dGVyRWxlbSwgJ3JvbGUnLCAncHJlc2VudGF0aW9uJyk7XG4gICAgfVxuICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMoY2hpbGQsICdyb2xlJywgJ3RhYicpO1xuXG4gICAgLy8gc2V0IGF0dHJpYnV0ZXMgdG8gdGhlIHJlbGF0ZWQgcGFuZWwgdG9vXG4gICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPblRhcmdldFBhbmVsKGNoaWxkKTtcbiAgfVxuICBfc2V0SW5pdGlhbEF0dHJpYnV0ZXNPblRhcmdldFBhbmVsKGNoaWxkKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihjaGlsZCk7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHModGFyZ2V0LCAncm9sZScsICd0YWJwYW5lbCcpO1xuICAgIGlmIChjaGlsZC5pZCkge1xuICAgICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHModGFyZ2V0LCAnYXJpYS1sYWJlbGxlZGJ5JywgYCR7Y2hpbGQuaWR9YCk7XG4gICAgfVxuICB9XG4gIF90b2dnbGVEcm9wRG93bihlbGVtZW50LCBvcGVuKSB7XG4gICAgY29uc3Qgb3V0ZXJFbGVtID0gdGhpcy5fZ2V0T3V0ZXJFbGVtZW50KGVsZW1lbnQpO1xuICAgIGlmICghb3V0ZXJFbGVtLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19EUk9QRE9XTikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdG9nZ2xlID0gKHNlbGVjdG9yLCBjbGFzc05hbWUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yLCBvdXRlckVsZW0pO1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSwgb3Blbik7XG4gICAgICB9XG4gICAgfTtcbiAgICB0b2dnbGUoU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFLCBDTEFTU19OQU1FX0FDVElWRSk7XG4gICAgdG9nZ2xlKFNFTEVDVE9SX0RST1BET1dOX01FTlUsIENMQVNTX05BTUVfU0hPVyQxKTtcbiAgICBvdXRlckVsZW0uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgb3Blbik7XG4gIH1cbiAgX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKGVsZW1lbnQsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSkpIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICBfZWxlbUlzQWN0aXZlKGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICB9XG5cbiAgLy8gVHJ5IHRvIGdldCB0aGUgaW5uZXIgZWxlbWVudCAodXN1YWxseSB0aGUgLm5hdi1saW5rKVxuICBfZ2V0SW5uZXJFbGVtZW50KGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5tYXRjaGVzKFNFTEVDVE9SX0lOTkVSX0VMRU0pID8gZWxlbSA6IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfSU5ORVJfRUxFTSwgZWxlbSk7XG4gIH1cblxuICAvLyBUcnkgdG8gZ2V0IHRoZSBvdXRlciBlbGVtZW50ICh1c3VhbGx5IHRoZSAubmF2LWl0ZW0pXG4gIF9nZXRPdXRlckVsZW1lbnQoZWxlbSkge1xuICAgIHJldHVybiBlbGVtLmNsb3Nlc3QoU0VMRUNUT1JfT1VURVIpIHx8IGVsZW07XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpLnNob3coKTtcbn0pO1xuXG4vKipcbiAqIEluaXRpYWxpemUgb24gZm9jdXNcbiAqL1xuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRV9BQ1RJVkUpKSB7XG4gICAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCk7XG4gIH1cbn0pO1xuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oVGFiKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHRvYXN0LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAndG9hc3QnO1xuY29uc3QgREFUQV9LRVkgPSAnYnMudG9hc3QnO1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWA7XG5jb25zdCBFVkVOVF9NT1VTRU9WRVIgPSBgbW91c2VvdmVyJHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX01PVVNFT1VUID0gYG1vdXNlb3V0JHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4gPSBgZm9jdXNpbiR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9GT0NVU09VVCA9IGBmb2N1c291dCR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9ISURFID0gJ2hpZGUnOyAvLyBAZGVwcmVjYXRlZCAtIGtlcHQgaGVyZSBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XSU5HID0gJ3Nob3dpbmcnO1xuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICBhdXRvaGlkZTogJ2Jvb2xlYW4nLFxuICBkZWxheTogJ251bWJlcidcbn07XG5jb25zdCBEZWZhdWx0ID0ge1xuICBhbmltYXRpb246IHRydWUsXG4gIGF1dG9oaWRlOiB0cnVlLFxuICBkZWxheTogNTAwMFxufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVG9hc3QgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuX3NldExpc3RlbmVycygpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQ7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGU7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHNob3coKSB7XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpO1xuICAgIGlmICh0aGlzLl9jb25maWcuYW5pbWF0aW9uKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9GQURFKTtcbiAgICB9XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XSU5HKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOKTtcbiAgICAgIHRoaXMuX21heWJlU2NoZWR1bGVIaWRlKCk7XG4gICAgfTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9ISURFKTsgLy8gQGRlcHJlY2F0ZWRcbiAgICByZWZsb3codGhpcy5fZWxlbWVudCk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVywgQ0xBU1NfTkFNRV9TSE9XSU5HKTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9jb25maWcuYW5pbWF0aW9uKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfSElERSk7IC8vIEBkZXByZWNhdGVkXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XSU5HLCBDTEFTU19OQU1FX1NIT1cpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKTtcbiAgICB9O1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkcpO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2NvbmZpZy5hbmltYXRpb24pO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fY2xlYXJUaW1lb3V0KCk7XG4gICAgaWYgKHRoaXMuaXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICB9XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG4gIGlzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVyk7XG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX21heWJlU2NoZWR1bGVIaWRlKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmF1dG9oaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uIHx8IHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5KTtcbiAgfVxuICBfb25JbnRlcmFjdGlvbihldmVudCwgaXNJbnRlcmFjdGluZykge1xuICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb24gPSBpc0ludGVyYWN0aW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24gPSBpc0ludGVyYWN0aW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0ludGVyYWN0aW5nKSB7XG4gICAgICB0aGlzLl9jbGVhclRpbWVvdXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIGlmICh0aGlzLl9lbGVtZW50ID09PSBuZXh0RWxlbWVudCB8fCB0aGlzLl9lbGVtZW50LmNvbnRhaW5zKG5leHRFbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpO1xuICB9XG4gIF9zZXRMaXN0ZW5lcnMoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFT1ZFUiwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgdHJ1ZSkpO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRU9VVCwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgZmFsc2UpKTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgdHJ1ZSkpO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9GT0NVU09VVCwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgZmFsc2UpKTtcbiAgfVxuICBfY2xlYXJUaW1lb3V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvYXN0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbY29uZmlnXSh0aGlzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoVG9hc3QpO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUb2FzdCk7XG5cbmV4cG9ydCB7IEFsZXJ0LCBCdXR0b24sIENhcm91c2VsLCBDb2xsYXBzZSwgRHJvcGRvd24sIE1vZGFsLCBPZmZjYW52YXMsIFBvcG92ZXIsIFNjcm9sbFNweSwgVGFiLCBUb2FzdCwgVG9vbHRpcCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vdHN0cmFwLmVzbS5qcy5tYXBcbiIsImltcG9ydCB7XHJcbiAgSUFjdGlvbixcclxuICBJQWN0aW9uUmVzdWx0LFxyXG4gIElBY3Rpb25Ob2RlLFxyXG4gIElBY3Rpb25Qcm9wZXJ0eSxcclxuICBJQ29udGV4dCxcclxuICBJRmllbGQsXHJcbn0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcblxyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgdHlwZSB7IFJlY29yZH0gZnJvbSBcIkBraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL2NsaWVudC90eXBlc1wiO1xyXG5pbXBvcnQgeyBLaW50b25lUmVzdEFQSUNsaWVudH0gZnJvbSBcIkBraW50b25lL3Jlc3QtYXBpLWNsaWVudFwiO1xyXG5pbXBvcnQgXCIuL2F1dG8tbG9va3VwLnNjc3NcIjtcclxuaW1wb3J0IFwiYm9vdHN0cmFwL2pzL2Rpc3QvbW9kYWxcIjtcclxuLy8gaW1wb3J0IFwiYm9vdHN0cmFwL2pzL2Rpc3Qvc3Bpbm5lclwiO1xyXG5pbXBvcnQge01vZGFsfSBmcm9tIFwiYm9vdHN0cmFwXCJcclxuaW1wb3J0ICQgZnJvbSBcImpxdWVyeVwiO1xyXG5cclxuaW50ZXJmYWNlIFByb3BzIHtcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gIGxvb2t1cEZpZWxkOiBMb29rdXBGaWVsZDtcclxuICBjb25kaXRpb246IENvbmRpdGlvbjtcclxufVxyXG5cclxuaW50ZXJmYWNlIENvbmRpdGlvbiB7XHJcbiAgcXVlcnlTdHJpbmc6IHN0cmluZztcclxuICBpbmRleDogbnVtYmVyO1xyXG4gIHR5cGU6IHN0cmluZztcclxuICBjaGlsZHJlbjogQ2hpbGRbXTtcclxuICBwYXJlbnQ6IG51bGw7XHJcbiAgbG9naWNhbE9wZXJhdG9yOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDaGlsZCB7XHJcbiAgaW5kZXg6IG51bWJlcjtcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgcGFyZW50OiBzdHJpbmc7XHJcbiAgb2JqZWN0OiBhbnk7XHJcbiAgb3BlcmF0b3I6IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgTG9va3VwRmllbGQge1xyXG4gIGFwcDogQXBwO1xyXG4gIGZpZWxkczogRmllbGRbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIEZpZWxkIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIGNvZGU6IHN0cmluZztcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIG5vTGFiZWw6IGJvb2xlYW47XHJcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XHJcbiAgbG9va3VwOiBMb29rdXA7XHJcbn0gXHJcblxyXG5pbnRlcmZhY2UgTG9va3VwIHtcclxuICByZWxhdGVkQXBwOiBSZWxhdGVkQXBwO1xyXG4gIHJlbGF0ZWRLZXlGaWVsZDogc3RyaW5nO1xyXG4gIGZpZWxkTWFwcGluZ3M6IEZpZWxkTWFwcGluZ1tdO1xyXG4gIGxvb2t1cFBpY2tlckZpZWxkczogYW55W107XHJcbiAgZmlsdGVyQ29uZDogc3RyaW5nO1xyXG4gIHNvcnQ6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIEZpZWxkTWFwcGluZyB7XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICByZWxhdGVkRmllbGQ6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFJlbGF0ZWRBcHAge1xyXG4gIGFwcDogc3RyaW5nO1xyXG4gIGNvZGU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIEFwcCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICBjcmVhdGVkYXRlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRvTG9va1VwQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICBwcm9wczogUHJvcHM7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLm5hbWUgPSBcIuODq+ODg+OCr+OCouODg+ODl+abtOaWsFwiO1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgdGhpcy5wcm9wcyA9IHt9IGFzIFByb3BzO1xyXG4gICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqKlxyXG4gICAqIOOCouOCr+OCu+OCueOBruODoeOCpOODs+OBruWHpueQhumWouaVsFxyXG4gICAqL1xyXG4gIGFzeW5jIHByb2Nlc3MoXHJcbiAgICBwcm9wOiBJQWN0aW9uTm9kZSxcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBjb250ZXh0OiBJQ29udGV4dFxyXG4gICk6IFByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IHByb3AuYWN0aW9uUHJvcHM7XHJcbiAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAuLi5wcm9wLkFjdGlvblZhbHVlLFxyXG4gICAgICBjb25kaXRpb246IEpTT04ucGFyc2UoKHByb3AuQWN0aW9uVmFsdWUgYXMgYW55KS5jb25kaXRpb24pLFxyXG4gICAgfSBhcyBQcm9wcztcclxuICAgIC8vIGNvbnNvbGUubG9nKGNvbnRleHQpO1xyXG5cclxuICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgIGNhbk5leHQ6IHRydWUsXHJcbiAgICAgIHJlc3VsdDogXCJcIixcclxuICAgIH0gYXMgSUFjdGlvblJlc3VsdDtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGxvb2tVcEZpZWxkcyA9IHRoaXMucHJvcHMubG9va3VwRmllbGQuZmllbGRzLmZpbHRlcihcclxuICAgICAgICAoZikgPT4gZi5sb29rdXAgJiYgZi5sb29rdXAucmVsYXRlZEFwcC5hcHAgPT09IFN0cmluZyhraW50b25lLmFwcC5nZXRJZCgpKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWxvb2tVcEZpZWxkcyB8fCBsb29rVXBGaWVsZHMubGVuZ3RoPT09MCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGDjg6vjg4Pjgq/jgqLjg4Pjg5fjga7oqK3lrprjga/kuI3mraPjgafjgZnjgIIke3RoaXMucHJvcHMubG9va3VwRmllbGQuZmllbGRzWzBdLmxhYmVsfSBgXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBsb29rVXBGaWVsZCA9IHRoaXMucHJvcHMubG9va3VwRmllbGQuZmllbGRzWzBdOyBcclxuICAgICAgY29uc3Qga2V5ID0gZXZlbnQucmVjb3JkW2xvb2tVcEZpZWxkLmxvb2t1cC5yZWxhdGVkS2V5RmllbGRdLnZhbHVlO1xyXG4gICAgICBjb25zdCB0YXJnZXRSZWNvcmRzID0gYXdhaXQgdGhpcy5nZXRVcGRhdGVSZWNvcmRzKGxvb2tVcEZpZWxkLCBrZXkpO1xyXG4gICAgICAvL+abtOaWsOWvvuixoeOBjOOBquOBhOaZguOBq+OCueOCreODg+ODl1xyXG4gICAgICBpZih0YXJnZXRSZWNvcmRzLmxlbmd0aD09PTApe1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdXBkYXRlUmVjb3JkcyA9IHRoaXMuY29udmVydEZvckxvb2t1cCh0YXJnZXRSZWNvcmRzLGxvb2tVcEZpZWxkLGtleSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwidXBkYXRlUmVjb3Jkc1wiLCB1cGRhdGVSZWNvcmRzKTtcclxuICAgICAgdGhpcy5zaG93U3Bpbm5lck1vZGVsKHRoaXMucHJvcHMubG9va3VwRmllbGQuYXBwKTtcclxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVMb29rdXBUYXJnZXQodXBkYXRlUmVjb3Jkcyk7XHJcbiAgICAgIHRoaXMuc2hvd1Jlc3VsdCh0aGlzLnByb3BzLmxvb2t1cEZpZWxkLmFwcCx1cGRhdGVSZWNvcmRzLmxlbmd0aCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCLjg6vjg4Pjgq/jgqLjg4Pjg5fmm7TmlrDkuK3kvovlpJbjgYznmbrnlJ/jgZfjgb7jgZfjgZ/jgIJcIiwgZXJyb3IpO1xyXG4gICAgICAgIGlmKGVycm9yIGluc3RhbmNlb2YgRXJyb3Ipe1xyXG4gICAgICAgICAgZXZlbnQuZXJyb3IgPSBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgZXZlbnQuZXJyb3IgPSBcIuODq+ODg+OCr+OCouODg+ODl+abtOaWsOS4reS+i+WkluOBjOeZuueUn+OBl+OBvuOBl+OBn+OAglwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuY2FuTmV4dCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coXCJhdXRvTG9va3VwUHJvcHNcIiwgdGhpcy5wcm9wcyk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUkVTVCBBUEnnlKjjgq/jgqjjg6rkvZzmiJBcclxuICAgKiBUT0RPOuWFsemAmumWouaVsOOBqOOBl+OBpuS9nOaIkFxyXG4gICAqIEBwYXJhbSBsb29rVXBGaWVsZCBcclxuICAgKiBAcGFyYW0ga2V5IFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIG1ha2VRdWVyeT0obG9va1VwRmllbGQ6RmllbGQsa2V5OmFueSk9PntcclxuICAgIGlmKHR5cGVvZiBrZXk9PT0nbnVtYmVyJyl7XHJcbiAgICAgIHJldHVybiBgJHtsb29rVXBGaWVsZC5jb2RlfSA9ICR7a2V5fWBcclxuICAgIH1cclxuICAgIGlmKHR5cGVvZiBrZXk9PT0nc3RyaW5nJyl7XHJcbiAgICAgIHJldHVybiBgJHtsb29rVXBGaWVsZC5jb2RlfSA9IFwiJHtrZXl9XCJgXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmm7TmlrDlr77osaHjga7jg6zjgrPjg7zjg4njgpLlj5blvpfjgZnjgotcclxuICAgKi9cclxuICBnZXRVcGRhdGVSZWNvcmRzID0gYXN5bmMgKGxvb2tVcEZpZWxkOkZpZWxkLGtleTphbnkpOlByb21pc2U8IFJlY29yZFtdPj0+e1xyXG4gICAgY29uc3QgY2xpZW50PW5ldyBLaW50b25lUmVzdEFQSUNsaWVudCgpO1xyXG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5yZWNvcmQuZ2V0QWxsUmVjb3Jkcyh7XHJcbiAgICAgIGFwcDp0aGlzLnByb3BzLmxvb2t1cEZpZWxkLmFwcC5pZCxcclxuICAgICAgZmllbGRzOltcIiRpZFwiXSxcclxuICAgICAgY29uZGl0aW9uOnRoaXMubWFrZVF1ZXJ5KGxvb2tVcEZpZWxkLGtleSlcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3A7XHJcbiAgfVxyXG5cclxuIC8qKlxyXG4gICog44Or44OD44Kv44Ki44OD44OX5pu05paw55So44Os44Kz44O844OJ44Gr5aSJ5o+b44GZ44KLXHJcbiAgKiBAcGFyYW0gdGFyZ2V0UmVjb3JkcyDmm7TmlrDlr77osaHjg6zjgrPjg7zjg4lcclxuICAqIEBwYXJhbSBsb29rVXBGaWVsZCDjg6vjg4Pjgq/jgqLjg4Pjg5fjg5XjgqPjg7zjg6vjg4lcclxuICAqIEBwYXJhbSBrZXkg44Or44OD44Kv44Ki44OD44OX44OV44Kj44O844Or44OJ44Gu5YCkXHJcbiAgKiBAcmV0dXJucyBcclxuICAqL1xyXG4gIGNvbnZlcnRGb3JMb29rdXAgPSAodGFyZ2V0UmVjb3JkczpSZWNvcmRbXSxsb29rVXBGaWVsZDpGaWVsZCxrZXk6YW55KTpBcnJheTxhbnk+PT57XHJcbiAgICByZXR1cm4gdGFyZ2V0UmVjb3Jkcy5tYXAoKHIpID0+ICh7XHJcbiAgICAgIGlkOiBOdW1iZXIocltcIiRpZFwiXS52YWx1ZSksXHJcbiAgICAgIHJlY29yZDogeyBbbG9va1VwRmllbGQuY29kZV06IHsgdmFsdWU6IGtleSB9IH0sXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDjg6vjg4Pjgq/jgqLjg4Pjg5flhYjjgpLmm7TmlrDjgZnjgotcclxuICAgKiBAcGFyYW0gdXBkYXRlUmVjb3JkcyBcclxuICAgKi9cclxuICB1cGRhdGVMb29rdXBUYXJnZXQgPSBhc3luYyAodXBkYXRlUmVjb3JkczpBcnJheTxhbnk+KT0+e1xyXG4gICAgaWYgKHVwZGF0ZVJlY29yZHMgJiYgdXBkYXRlUmVjb3Jkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGNsaWVudD1uZXcgS2ludG9uZVJlc3RBUElDbGllbnQoKTtcclxuICAgICAgY2xpZW50LnJlY29yZC51cGRhdGVBbGxSZWNvcmRzKHtcclxuICAgICAgICBhcHA6dGhpcy5wcm9wcy5sb29rdXBGaWVsZC5hcHAuaWQsXHJcbiAgICAgICAgcmVjb3Jkczp1cGRhdGVSZWNvcmRzXHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBhd2FpdCBraW50b25lLmFwaShraW50b25lLmFwaS51cmwoXCIvay92MS9yZWNvcmRzLmpzb25cIiwgdHJ1ZSksIFwiUFVUXCIsIHtcclxuICAgICAgLy8gICBhcHA6IHRoaXMucHJvcHMubG9va3VwRmllbGQuYXBwLmlkLFxyXG4gICAgICAvLyAgIHJlY29yZHM6IHVwZGF0ZVJlY29yZHNcclxuICAgICAgLy8gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmm7TmlrDkuK3jga7jg4DjgqTjgqLjg63jgrDooajnpLpcclxuICAgKiBAcGFyYW0gYXBwIFxyXG4gICAqL1xyXG4gIHNob3dTcGlubmVyTW9kZWwgPSAoYXBwOkFwcCkgPT4ge1xyXG4gICAgbGV0IGRpYWxvZyA9ICQoXCIjYWxjTG9va3VwTW9kYWxcIik7XHJcbiAgICBpZihkaWFsb2cubGVuZ3RoPT09MCl7XHJcbiAgICAgIGNvbnN0IG1vZGFsSFRNTCA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJhbGNMb29rdXBNb2RhbFwiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWxhYmVsbGVkYnk9XCJzdGF0aWNCYWNrZHJvcExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJtb2RhbC10aXRsZSBmcy01XCIgaWQ9XCJhbGNMb29rdXBNb2RhbExhYmVsXCI+44Or44OD44Kv44Ki44OD44OX5ZCM5pyf5Yem55CGPC9oMT5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBpZD1cImFwcCR7YXBwLmlkfVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1zZWNvbmRhcnkgY29sLTEgXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj4ke2FwcC5uYW1lfTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5PSzwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5gO1xyXG4gICAgICBkaWFsb2cgPSAkKG1vZGFsSFRNTCkuYXBwZW5kVG8oXCJib2R5XCIpO1xyXG4gICAgICBkaWFsb2cuZ2V0KClbMF0uYWRkRXZlbnRMaXN0ZW5lcignaGlkZGVuLmJzLm1vZGFsJywoZXYpPT57XHJcbiAgICAgICAgTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZShkaWFsb2cuZ2V0KClbMF0pLmRpc3Bvc2UoKTtcclxuICAgICAgICAkKFwiI2FsY0xvb2t1cE1vZGFsXCIpLnJlbW92ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1lbHNle1xyXG4gICAgICBjb25zdCBkaWFsb2dCb2R5PSQoXCIjYWxjTG9va3VwTW9kYWwgLm1vZGFsLWJvZHlcIik7XHJcbiAgICAgIGNvbnN0IGh0bWxyb3c9YCBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBpZD1cImFwcCR7YXBwLmlkfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1zZWNvbmRhcnkgY29sLTEgXCIgcm9sZT1cImFsZXJ0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+JHthcHAubmFtZX08L2Rpdj5cclxuICAgICAgICAgIDxkaXY+YDtcclxuICAgICAgZGlhbG9nQm9keS5hcHBlbmQoaHRtbHJvdyk7XHJcbiAgICB9XHJcbiAgICBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKGRpYWxvZy5nZXQoKVswXSkuc2hvdygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5pu05paw57WQ5p6c44KS6KGo56S644GZ44KLXHJcbiAgICogQHBhcmFtIGFwcCDjgIDmm7TmlrDlhYjjgqLjg5fjg6rmg4XloLFcclxuICAgKiBAcGFyYW0gY291bnQg5pu05paw5Lu25pWwXHJcbiAgICovXHJcbiAgc2hvd1Jlc3VsdD0oYXBwOkFwcCxjb3VudDpudW1iZXIpPT57XHJcbiAgICBjb25zdCBkaWFsb2dCb2R5PSQoYCNhbGNMb29rdXBNb2RhbCAubW9kYWwtYm9keSAjYXBwJHthcHAuaWR9YCk7XHJcbiAgICBjb25zdCBodG1sPWAgICAgPGRpdiBjbGFzcz1cImNvbC0xIHRleHQtc3VjY2Vzc1wiPuKclDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj4ke2FwcC5uYW1lfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj7mm7TmlrDku7bmlbA6JHtjb3VudH3ku7Y8L2Rpdj5gO1xyXG4gICAgZGlhbG9nQm9keS5odG1sKGh0bWwpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXSA9IHRoaXM7XHJcbiAgfVxyXG59XHJcblxyXG5uZXcgQXV0b0xvb2tVcEFjdGlvbigpOyIsIlxyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLi4vYWN0aW9uc1wiO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvbXVzdC1pbnB1dCc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9hdXRvLW51bWJlcmluZyc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9maWVsZC1zaG93bic7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9lcnJvci1zaG93JztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2J1dHRvbi1hZGQnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvY29uZGl0aW9uLWFjdGlvbic7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9kYXRhLXByb2Nlc3NpbmcnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvZGF0YS11cGRhdGUnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvY3VycmVudC1maWVsZC1nZXQnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvcmVndWxhci1jaGVjayc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9tYWlsLWNoZWNrJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2NvdW50ZXItY2hlY2snO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvZGF0ZXRpbWUtZ2V0dGVyJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2luc2VydC12YWx1ZSc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy92YWx1ZS1nZXR0ZXInO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvc3RyaW5nLWpvaW4nO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvdmFsaWRhdGlvbi1mdWxsd2lkdGgnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvdmFsaWRhdGlvbi1oYWxmd2lkdGgnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvbG9naW4tdXNlci1nZXR0ZXInO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvYXV0by1sb29rdXAnO1xyXG5cclxuaW1wb3J0IHsgQWN0aW9uRmxvdyxJQWN0aW9uRmxvdywgSUFjdGlvblJlc3VsdCxJQ29udGV4dCB9IGZyb20gXCIuL0FjdGlvblR5cGVzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQWN0aW9uUHJvY2Vzc3tcclxuICAgIGV2ZW50SWQ6c3RyaW5nO1xyXG4gICAgZmxvdzpJQWN0aW9uRmxvdztcclxuICAgIGV2ZW50OmFueTtcclxuICAgIGNvbnRleHQ6SUNvbnRleHQ7XHJcbiAgICBjb25zdHJ1Y3RvcihldmVudElkOnN0cmluZyxmbG93OkFjdGlvbkZsb3csZXZlbnQ6YW55KXtcclxuICAgICAgICB0aGlzLmV2ZW50SWQ9ZXZlbnRJZDtcclxuICAgICAgICB0aGlzLmZsb3c9ZmxvdztcclxuICAgICAgICB0aGlzLmV2ZW50PWV2ZW50O1xyXG4gICAgICAgIHRoaXMuY29udGV4dD17XHJcbiAgICAgICAgICAgIHJlY29yZDp0aGlzLmV2ZW50LnJlY29yZCxcclxuICAgICAgICAgICAgdmFyaWFibGVzOnt9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGFzeW5jIGV4ZWMoKXtcclxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5mbG93LmdldFJvb3QoKTtcclxuICAgICAgICBpZihyb290PT09dW5kZWZpbmVkIHx8IHJvb3QubmV4dE5vZGVJZHMuc2l6ZT09PTApe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBpZD1yb290Lm5leHROb2RlSWRzLmdldCgnJyk7XHJcbiAgICAgICAgaWYoaWQ9PT11bmRlZmluZWQpIHJldHVybjtcclxuICAgICAgICBsZXQgbmV4dEFjdGlvbiA9IHRoaXMuZmxvdy5maW5kTm9kZUJ5SWQoaWQpOyBcclxuICAgICAgICBsZXQgcmVzdWx0OklBY3Rpb25SZXN1bHQ9e1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHdoaWxlKG5leHRBY3Rpb24hPT11bmRlZmluZWQgJiYgcmVzdWx0LmNhbk5leHQpe1xyXG4gICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGFjdGlvbkFkZGluc1tuZXh0QWN0aW9uLm5hbWVdO1xyXG4gICAgICAgICAgIGlmKGFjdGlvbiE9PXVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGFjdGlvbi5wcm9jZXNzKG5leHRBY3Rpb24sdGhpcy5ldmVudCx0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgICBsZXQgbmV4dElucHV0ID0gJyc7XHJcbiAgICAgICAgICAgLy9vdXRwdXRQb2ludHPkuIDjgaTku6XkuIrjga7loLTlkIjjgIHmrKHjga5JbnB1dFBvaW5044Gv5oi744KK5YCk44KS6Kit5a6a44GZ44KLXHJcbiAgICAgICAgICAgaWYobmV4dEFjdGlvbi5vdXRwdXRQb2ludHMgJiYgbmV4dEFjdGlvbi5vdXRwdXRQb2ludHMubGVuZ3RoPjEpe1xyXG4gICAgICAgICAgICAgbmV4dElucHV0ID0gcmVzdWx0LnJlc3VsdHx8Jyc7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICAgIGlkPW5leHRBY3Rpb24ubmV4dE5vZGVJZHMuZ2V0KG5leHRJbnB1dCk7XHJcbiAgICAgICAgICAgaWYoaWQ9PT11bmRlZmluZWQpIHJldHVybjtcclxuICAgICAgICAgICBuZXh0QWN0aW9uID0gdGhpcy5mbG93LmZpbmROb2RlQnlJZChpZCk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn0iLCJcclxuLyoqXHJcbiAqIOOCouODl+ODquaDheWgsVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBBcHBJbmZvIHtcclxuICBhcHBJZDogc3RyaW5nO1xyXG4gIGNvZGU/OiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuKiDjgqLjgq/jgrfjg6fjg7Pjga7jg5fjg63jg5Hjg4bjgqPlrprnvqlcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGlvblByb3BlcnR5IHtcclxuICBjb21wb25lbnQ6IHN0cmluZztcclxuICBwcm9wczoge1xyXG4gICAgLy/jg5fjg63jg5Hjg4bjgqPlkI1cclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIC8v44OX44Ot44OR44OG44Kj6KGo56S65ZCNXHJcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gICAgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuICAgIC8v44OX44Ot44OR44OG44Kj6Kit5a6a5YCkXHJcbiAgICBtb2RlbFZhbHVlOiBhbnk7XHJcbiAgfTtcclxufVxyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44K/44Kk44OX5a6a576pXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBY3Rpb25Ob2RlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIC8v44Ki44Kv44K344On44Oz5ZCNXHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgc3ViVGl0bGU6IHN0cmluZztcclxuICBpbnB1dFBvaW50OiBzdHJpbmc7XHJcbiAgLy/lh7rlipvjg53jgqTjg7Pjg4jvvIjmnaHku7bliIblspDku6XlpJbmnKrkvb/nlKjvvIlcclxuICBvdXRwdXRQb2ludHM6IEFycmF5PHN0cmluZz47XHJcbiAgLy/jg6vjg7zjg4jjgqLjgq/jgrfjg6fjg7PvvIhLaW50b25lIGV2ZW5077yJXHJcbiAgaXNSb290OiBib29sZWFuO1xyXG4gIC8v44Ki44Kv44K344On44Oz44Gu44OX44Ot44OR44OG44Kj5a6a576pXHJcbiAgYWN0aW9uUHJvcHM6IEFycmF5PElBY3Rpb25Qcm9wZXJ0eT47XHJcbiAgLy/jgqLjgq/jgrfjg6fjg7Pjga7jg5fjg63jg5Hjg4bjgqPoqK3lrprlgKTmir3lh7pcclxuICBBY3Rpb25WYWx1ZTogb2JqZWN0XHJcbiAgcHJldk5vZGVJZD86IHN0cmluZztcclxuICBuZXh0Tm9kZUlkczogTWFwPHN0cmluZywgc3RyaW5nPjtcclxufVxyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44OV44Ot44O844Gu5a6a576pXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBY3Rpb25GbG93IHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGFjdGlvbk5vZGVzOiBJQWN0aW9uTm9kZVtdO1xyXG4gIGZpbmROb2RlQnlJZChpZDogc3RyaW5nKTogSUFjdGlvbk5vZGUgfCB1bmRlZmluZWQ7XHJcbiAgdG9KU09OKCk6IGFueTtcclxuICBnZXRSb290KCk6IElBY3Rpb25Ob2RlIHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBY3Rpb25SZXN1bHR7XHJcbiAgY2FuTmV4dDpib29sZWFuO1xyXG4gIHJlc3VsdD86YW55O1xyXG59XHJcblxyXG4vKipcclxuICog44Kz44Oz44OG44Kt44K544OIXHJcbiAqIOODrOOCs+ODvOODieOBqOODleODreODvOOBruWkieaVsOOCkuaMgeOBpFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQ29udGV4dHtcclxuICByZWNvcmQ6YW55LFxyXG4gIHZhcmlhYmxlczphbnlcclxufVxyXG5cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruOCpOODs+OCv+ODvOODleOCp+ODvOOCuVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQWN0aW9ue1xyXG4gIC8v44Ki44Kv44K344On44Oz44Gu5ZCN5YmN77yI44Om44O844OL44OD44Kv5ZCN44GM5b+F6KaB77yJXHJcbiAgbmFtZTpzdHJpbmc7XHJcbiAgLy/lsZ7mgKfoqK3lrprmg4XloLFcclxuICBhY3Rpb25Qcm9wczogQXJyYXk8SUFjdGlvblByb3BlcnR5PjtcclxuICAvL+OCouOCr+OCt+ODp+ODs+OBruODl+ODreOCu+OCueWun+ihjOmWouaVsFxyXG4gIHByb2Nlc3MocHJvcDpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PjtcclxuICAvL+OCouOCr+OCt+ODp+ODs+OBrueZu+mMsumWouaVsFxyXG4gIHJlZ2lzdGVyKCk6dm9pZDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZpZWxke1xyXG4gIG5hbWU/OnN0cmluZztcclxuICBjb2RlOnN0cmluZztcclxuICB0eXBlPzpzdHJpbmc7XHJcbiAgcmVxdWlyZWQ/OmJvb2xlYW47XHJcbiAgb3B0aW9ucz86c3RyaW5nO1xyXG59XHJcbi8v5aSJ5pWw44Gu44Kk44Oz44K/44O844OV44Kn44O844K5XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZhck5hbWV7XHJcbiAgbmFtZTpzdHJpbmc7XHJcbiAgZmllbGRzPzpJVmFyTmFtZVtdO1xyXG59XHJcblxyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu44OX44Ot44OR44OG44Kj5a6a576p44Gr5Z+644Gl44GE44Gf44Kv44Op44K5XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQWN0aW9uUHJvcGVydHkgaW1wbGVtZW50cyBJQWN0aW9uUHJvcGVydHkge1xyXG4gIGNvbXBvbmVudDogc3RyaW5nO1xyXG4gIHByb3BzOiB7XHJcbiAgICAvLyDjg5fjg63jg5Hjg4bjgqPlkI1cclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIC8vIOODl+ODreODkeODhuOCo+ihqOekuuWQjVxyXG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgICAvLyDjg5fjg63jg5Hjg4bjgqPoqK3lrprlgKRcclxuICAgIG1vZGVsVmFsdWU6IGFueTtcclxuICB9O1xyXG5cclxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnR5KCk6IElBY3Rpb25Qcm9wZXJ0eSB7XHJcbiAgICByZXR1cm4gbmV3IEFjdGlvblByb3BlcnR5KCdJbnB1dFRleHQnLCAnZGlzcGxheU5hbWUnLCAn6KGo56S65ZCNJywgJ+ihqOekuuOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhCcsICcnKTtcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGNvbXBvbmVudDogc3RyaW5nLFxyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgZGlzcGxheU5hbWU6IHN0cmluZyxcclxuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmcsXHJcbiAgICBtb2RlbFZhbHVlOiBhbnlcclxuICApIHtcclxuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xyXG4gICAgdGhpcy5wcm9wcyA9IHtcclxuICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgZGlzcGxheU5hbWU6IGRpc3BsYXlOYW1lLFxyXG4gICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXHJcbiAgICAgIG1vZGVsVmFsdWU6IG1vZGVsVmFsdWVcclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogSUFjdGlvbk5vZGXjga7lrp/oo4XjgIFSb290QWN0aW9uTm9kZeS7peWkluOBruOCouOCr+OCt+ODp+ODs+Wumue+qVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFjdGlvbk5vZGUgaW1wbGVtZW50cyBJQWN0aW9uTm9kZSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwcm9wID0gdGhpcy5hY3Rpb25Qcm9wcy5maW5kKChwcm9wKSA9PiBwcm9wLnByb3BzLm5hbWUgPT09IFwiZGlzcGxheU5hbWVcIik7XHJcbiAgICByZXR1cm4gcHJvcD8ucHJvcHMubW9kZWxWYWx1ZTtcclxuICB9O1xyXG4gIGdldCBzdWJUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICB9O1xyXG4gIGlucHV0UG9pbnQ6IHN0cmluZztcclxuICAvL+WHuuWKm+ODneOCpOODs+ODiO+8iOadoeS7tuWIhuWykOS7peWkluacquS9v+eUqO+8iVxyXG4gIG91dHB1dFBvaW50czogQXJyYXk8c3RyaW5nPjtcclxuICBhY3Rpb25Qcm9wczogQXJyYXk8SUFjdGlvblByb3BlcnR5PjtcclxuICBnZXQgaXNSb290KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH07XHJcbiAgZ2V0IEFjdGlvblZhbHVlKCk6IG9iamVjdCB7XHJcbiAgICBjb25zdCBwcm9wVmFsdWU6IGFueSA9IHt9O1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBwcm9wVmFsdWVbdmFsdWUucHJvcHMubmFtZV0gPSB2YWx1ZS5wcm9wcy5tb2RlbFZhbHVlXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9wVmFsdWU7XHJcbiAgfTtcclxuICBwcmV2Tm9kZUlkPzogc3RyaW5nO1xyXG4gIG5leHROb2RlSWRzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAge2lkLG5hbWUsdGl0bGUsaW5wdXRQb2ludCxvdXRwdXRQb2ludHMsYWN0aW9uUHJvcHN9OlxyXG4gICAge1xyXG4gICAgICBpZDpzdHJpbmcsXHJcbiAgICAgIG5hbWU6IHN0cmluZyxcclxuICAgICAgdGl0bGU6IHN0cmluZyxcclxuICAgICAgaW5wdXRQb2ludDogc3RyaW5nLFxyXG4gICAgICBvdXRwdXRQb2ludHM6IEFycmF5PHN0cmluZz4sXHJcbiAgICAgIGFjdGlvblByb3BzOiBBcnJheTxJQWN0aW9uUHJvcGVydHk+fVxyXG4gICkge1xyXG4gICAgdGhpcy5pZD1pZDtcclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB0aGlzLmlucHV0UG9pbnQgPSBpbnB1dFBvaW50O1xyXG4gICAgdGhpcy5vdXRwdXRQb2ludHMgPSBvdXRwdXRQb2ludHM7XHJcbiAgICBjb25zdCBkZWZQcm9wID0gQWN0aW9uUHJvcGVydHkuZGVmYXVsdFByb3BlcnR5KCk7XHJcbiAgICBkZWZQcm9wLnByb3BzLm1vZGVsVmFsdWUgPSB0aXRsZTtcclxuICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBhY3Rpb25Qcm9wcztcclxuICAgIHRoaXMubmV4dE5vZGVJZHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gIH1cclxuXHJcbn1cclxuLyoqXHJcbiAqIOODq+ODvOODiOOCouOCr+OCt+ODp+ODs+Wumue+qVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFJvb3RBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uTm9kZSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBzdWJUaXRsZTogc3RyaW5nO1xyXG4gIGlucHV0UG9pbnQ6IHN0cmluZztcclxuICAvL+WHuuWKm+ODneOCpOODs+ODiO+8iOadoeS7tuWIhuWykOS7peWkluacquS9v+eUqO+8iVxyXG4gIG91dHB1dFBvaW50czogQXJyYXk8c3RyaW5nPjtcclxuICBpc1Jvb3Q6IGJvb2xlYW47XHJcbiAgYWN0aW9uUHJvcHM6IEFycmF5PElBY3Rpb25Qcm9wZXJ0eT47XHJcbiAgQWN0aW9uVmFsdWU6IG9iamVjdDtcclxuICBwcmV2Tm9kZUlkPzogc3RyaW5nID0gdW5kZWZpbmVkO1xyXG4gIG5leHROb2RlSWRzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAge2lkLG5hbWUsdGl0bGUsc3ViVGl0bGV9OntcclxuICAgICAgaWQ6c3RyaW5nLFxyXG4gICAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICAgIHRpdGxlOiBzdHJpbmcsXHJcbiAgICAgIHN1YlRpdGxlOiBzdHJpbmd9XHJcbiAgKSB7XHJcbiAgICB0aGlzLmlkID0gaWQ7XHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgdGhpcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgdGhpcy5zdWJUaXRsZSA9IHN1YlRpdGxlO1xyXG4gICAgdGhpcy5pbnB1dFBvaW50ID0gJyc7XHJcbiAgICB0aGlzLm91dHB1dFBvaW50cyA9IFtdO1xyXG4gICAgdGhpcy5pc1Jvb3QgPSB0cnVlO1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgdGhpcy5BY3Rpb25WYWx1ZSA9IHt9O1xyXG4gICAgdGhpcy5uZXh0Tm9kZUlkcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44OV44Ot44O844Gu5a6a576pXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQWN0aW9uRmxvdyBpbXBsZW1lbnRzIElBY3Rpb25GbG93IHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGFjdGlvbk5vZGVzOiBBcnJheTxJQWN0aW9uTm9kZT47XHJcbiAgY29uc3RydWN0b3IoYWN0aW9uTm9kZXM6IEFycmF5PElBY3Rpb25Ob2RlPiB8IFJvb3RBY3Rpb24pIHtcclxuICAgIGlmIChhY3Rpb25Ob2RlcyBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uTm9kZXMgPSBhY3Rpb25Ob2RlcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uTm9kZXMgPSBbYWN0aW9uTm9kZXNdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pZCA9ICcnO1xyXG4gIH1cclxuICAvKioqXHJcbiAgICogSUTjgadBY3Rpb25Ob2Rl44KS5Y+W5b6X44GZ44KLXHJcbiAgICovXHJcbiAgZmluZE5vZGVCeUlkKGlkOiBzdHJpbmcpOiBJQWN0aW9uTm9kZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3Rpb25Ob2Rlcy5maW5kKChub2RlKSA9PiBub2RlLmlkID09PSBpZCk7XHJcbiAgfVxyXG5cclxuICB0b0pTT04oKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgYWN0aW9uTm9kZXM6IHRoaXMuYWN0aW9uTm9kZXMubWFwKG5vZGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgbmV4dE5vZGVJZHMsIC4uLnJlc3QgfSA9IG5vZGU7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnJlc3QsXHJcbiAgICAgICAgICBuZXh0Tm9kZUlkczogQXJyYXkuZnJvbShuZXh0Tm9kZUlkcy5lbnRyaWVzKCkpXHJcbiAgICAgICAgfTtcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRSb290KCk6IElBY3Rpb25Ob2RlIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGlvbk5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlzUm9vdClcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uOiBzdHJpbmcpOiBBY3Rpb25GbG93IHtcclxuICAgIGNvbnN0IHBhcnNlZE9iamVjdCA9IEpTT04ucGFyc2UoanNvbik7XHJcblxyXG4gICAgY29uc3QgYWN0aW9uTm9kZXMgPSBwYXJzZWRPYmplY3QuYWN0aW9uTm9kZXMubWFwKChub2RlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgbm9kZUNsYXNzID0gIW5vZGUuaXNSb290ID8gbmV3IEFjdGlvbk5vZGUobm9kZSlcclxuICAgICAgICA6IG5ldyBSb290QWN0aW9uKG5vZGUpO1xyXG4gICAgICBub2RlQ2xhc3MubmV4dE5vZGVJZHMgPSBuZXcgTWFwPHN0cmluZyxzdHJpbmc+KE9iamVjdC5lbnRyaWVzKG5vZGUubmV4dE5vZGVJZHMpKTtcclxuICAgICAgbm9kZUNsYXNzLnByZXZOb2RlSWQgPSBub2RlLnByZXZOb2RlSWQ7XHJcbiAgICAgIG5vZGVDbGFzcy5pZCA9IG5vZGUuaWQ7XHJcbiAgICAgIHJldHVybiBub2RlQ2xhc3M7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGFjdGlvbkZsb3cgPSBuZXcgQWN0aW9uRmxvdyhhY3Rpb25Ob2Rlcyk7XHJcbiAgICBhY3Rpb25GbG93LmlkID0gcGFyc2VkT2JqZWN0LmlkO1xyXG4gICAgcmV0dXJuIGFjdGlvbkZsb3c7XHJcbiAgfVxyXG59XHJcblxyXG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQgeyBBY3Rpb25Qcm9jZXNzIH0gZnJvbSAnLi90eXBlcy9hY3Rpb24tcHJvY2Vzcyc7XHJcbmltcG9ydCB7IEFjdGlvbkZsb3cgfSBmcm9tICcuL3R5cGVzL0FjdGlvblR5cGVzJztcclxuaW1wb3J0IHsgRmxvd0luZm8gfSBmcm9tICcuL3R5cGVzL2Zsb3dTZXR0aW5nJztcclxuXHJcbmRlY2xhcmUgY29uc3QgYWxjZmxvdyA6IHtcclxuICBba2V5OnN0cmluZ106Rmxvd0luZm9cclxufTtcclxuXHJcbiQoZnVuY3Rpb24gKCl7XHJcbiAgICBjb25zdCBnZXRDaGFuZ2VFdmVudHM9KGV2ZW50czpzdHJpbmdbXSk9PntcclxuICAgICAgcmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KT0+ZXZlbnQuaW5jbHVkZXMoXCIuY2hhbmdlLlwiKSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBnZXRDbGlja0V2ZW50cz0oZXZlbnRzOnN0cmluZ1tdKT0+e1xyXG4gICAgICByZXR1cm4gZXZlbnRzLmZpbHRlcigoZXZlbnQpPT5ldmVudC5pbmNsdWRlcyhcIi5jdXN0b21CdXR0b25DbGljay5cIikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ2V0S2ludG9uZUV2ZW50cz0oZXZlbnRzOnN0cmluZ1tdKT0+e1xyXG4gICAgICByZXR1cm4gZXZlbnRzLmZpbHRlcigoZXZlbnQpPT57XHJcbiAgICAgICAgcmV0dXJuICFldmVudC5pbmNsdWRlcyhcIi5jdXN0b21CdXR0b25DbGljay5cIikgJiYgIWV2ZW50LmluY2x1ZGVzKFwiLmNoYW5nZS5cIilcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBldmVudHM9T2JqZWN0LmtleXMoYWxjZmxvdyk7XHJcbiAgICBjb25zdCBjaGFuZ2VFdmVudHMgPSBnZXRDaGFuZ2VFdmVudHMoZXZlbnRzKTtcclxuICAgIGNvbnN0IGNsaWNrRXZlbnRzID0gZ2V0Q2xpY2tFdmVudHMoZXZlbnRzKTtcclxuICAgIGNvbnN0IGtpbnRvbmVFdmVudHMgPSBnZXRLaW50b25lRXZlbnRzKGV2ZW50cyk7XHJcbiAgICBpZihraW50b25lRXZlbnRzLmxlbmd0aD4wICl7XHJcbiAgICAgIC8v6YCa5bi4S2ludG9uZeOCpOODmeODs+ODiOOCkuODkOODs+ODiVxyXG4gICAgICBraW50b25lLmV2ZW50cy5vbihraW50b25lRXZlbnRzLGFzeW5jIChldmVudDphbnkpPT57XHJcbiAgICAgICAgY29uc3QgZmxvd2luZm8gPSBhbGNmbG93W2V2ZW50LnR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGZsb3c9QWN0aW9uRmxvdy5mcm9tSlNPTihmbG93aW5mby5jb250ZW50KTtcclxuICAgICAgICBpZihmbG93IT09dW5kZWZpbmVkKXtcclxuICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSBuZXcgQWN0aW9uUHJvY2VzcyhldmVudC50eXBlLGZsb3csZXZlbnQpO1xyXG4gICAgICAgICAgYXdhaXQgcHJvY2Vzcy5leGVjKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBldmVudDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZihjaGFuZ2VFdmVudHMubGVuZ3RoPjApe1xyXG4gICAgICAvL+WApOWkieabtOOCpOODmeODs+ODiOOCkuODkOODs+ODieOBmeOCi1xyXG4gICAgICBraW50b25lLmV2ZW50cy5vbihjaGFuZ2VFdmVudHMsKGV2ZW50OmFueSk9PntcclxuICAgICAgICBjb25zdCBmbG93aW5mbyA9IGFsY2Zsb3dbZXZlbnQudHlwZV07XHJcbiAgICAgICAgY29uc3QgZmxvdz1BY3Rpb25GbG93LmZyb21KU09OKGZsb3dpbmZvLmNvbnRlbnQpO1xyXG4gICAgICAgIGlmKGZsb3chPT11bmRlZmluZWQpe1xyXG4gICAgICAgICAgY29uc3QgcHJvY2VzcyA9IG5ldyBBY3Rpb25Qcm9jZXNzKGV2ZW50LnR5cGUsZmxvdyxldmVudCk7XHJcbiAgICAgICAgICBwcm9jZXNzLmV4ZWMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmKGNsaWNrRXZlbnRzLmxlbmd0aD4wKXtcclxuICAgICAgY2xpY2tFdmVudHMuZm9yRWFjaCgoZXZlbnROYW1lOnN0cmluZyk9PntcclxuICAgICAgICAkKGRvY3VtZW50KS5vbihldmVudE5hbWUsYXN5bmMgKCk9PntcclxuICAgICAgICAgIGNvbnN0IGV2ZW50PWtpbnRvbmUuYXBwLnJlY29yZC5nZXQoKTtcclxuICAgICAgICAgIGNvbnN0IGZsb3dpbmZvID0gYWxjZmxvd1tldmVudE5hbWVdO1xyXG4gICAgICAgICAgY29uc3QgZmxvdz1BY3Rpb25GbG93LmZyb21KU09OKGZsb3dpbmZvLmNvbnRlbnQpO1xyXG4gICAgICAgICAgaWYoZmxvdyE9PXVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSBuZXcgQWN0aW9uUHJvY2VzcyhldmVudE5hbWUsZmxvdyxldmVudCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHByb2Nlc3MuZXhlYygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAga2ludG9uZS5hcHAucmVjb3JkLnNldCh7cmVjb3JkfSlcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbn0pOyJdLCJuYW1lcyI6WyJnbG9iYWwiLCJmYWN0b3J5IiwibW9kdWxlIiwidyIsInRoaXMiLCJ3aW5kb3ciLCJub0dsb2JhbCIsImFyciIsImdldFByb3RvIiwic2xpY2UiLCJmbGF0IiwiYXJyYXkiLCJwdXNoIiwiaW5kZXhPZiIsImNsYXNzMnR5cGUiLCJ0b1N0cmluZyIsImhhc093biIsImZuVG9TdHJpbmciLCJPYmplY3RGdW5jdGlvblN0cmluZyIsInN1cHBvcnQiLCJpc0Z1bmN0aW9uIiwib2JqIiwiaXNXaW5kb3ciLCJkb2N1bWVudCIsInByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMiLCJET01FdmFsIiwiY29kZSIsIm5vZGUiLCJkb2MiLCJpIiwidmFsIiwic2NyaXB0IiwidG9UeXBlIiwidmVyc2lvbiIsInJodG1sU3VmZml4IiwialF1ZXJ5Iiwic2VsZWN0b3IiLCJjb250ZXh0IiwibnVtIiwiZWxlbXMiLCJyZXQiLCJjYWxsYmFjayIsImVsZW0iLCJfZWxlbSIsImxlbiIsImoiLCJvcHRpb25zIiwibmFtZSIsInNyYyIsImNvcHkiLCJjb3B5SXNBcnJheSIsImNsb25lIiwidGFyZ2V0IiwibGVuZ3RoIiwiZGVlcCIsIm1zZyIsInByb3RvIiwiQ3RvciIsImlzQXJyYXlMaWtlIiwibm9kZVR5cGUiLCJyZXN1bHRzIiwibmFtZXNwYWNlIiwiZG9jRWxlbSIsImZpcnN0Iiwic2Vjb25kIiwiaW52ZXJ0IiwiY2FsbGJhY2tJbnZlcnNlIiwibWF0Y2hlcyIsImNhbGxiYWNrRXhwZWN0IiwiYXJnIiwidmFsdWUiLCJfaSIsInR5cGUiLCJub2RlTmFtZSIsInBvcCIsInNvcnQiLCJzcGxpY2UiLCJ3aGl0ZXNwYWNlIiwicnRyaW1DU1MiLCJhIiwiYiIsImJ1cCIsInJjc3Nlc2NhcGUiLCJmY3NzZXNjYXBlIiwiY2giLCJhc0NvZGVQb2ludCIsInNlbCIsInByZWZlcnJlZERvYyIsInB1c2hOYXRpdmUiLCJFeHByIiwib3V0ZXJtb3N0Q29udGV4dCIsInNvcnRJbnB1dCIsImhhc0R1cGxpY2F0ZSIsImRvY3VtZW50RWxlbWVudCIsImRvY3VtZW50SXNIVE1MIiwicmJ1Z2d5UVNBIiwiZXhwYW5kbyIsImRpcnJ1bnMiLCJkb25lIiwiY2xhc3NDYWNoZSIsImNyZWF0ZUNhY2hlIiwidG9rZW5DYWNoZSIsImNvbXBpbGVyQ2FjaGUiLCJub25uYXRpdmVTZWxlY3RvckNhY2hlIiwic29ydE9yZGVyIiwiYm9vbGVhbnMiLCJpZGVudGlmaWVyIiwiYXR0cmlidXRlcyIsInBzZXVkb3MiLCJyd2hpdGVzcGFjZSIsInJjb21tYSIsInJsZWFkaW5nQ29tYmluYXRvciIsInJkZXNjZW5kIiwicnBzZXVkbyIsInJpZGVudGlmaWVyIiwibWF0Y2hFeHByIiwicmlucHV0cyIsInJoZWFkZXIiLCJycXVpY2tFeHByIiwicnNpYmxpbmciLCJydW5lc2NhcGUiLCJmdW5lc2NhcGUiLCJlc2NhcGUiLCJub25IZXgiLCJoaWdoIiwidW5sb2FkSGFuZGxlciIsInNldERvY3VtZW50IiwiaW5EaXNhYmxlZEZpZWxkc2V0IiwiYWRkQ29tYmluYXRvciIsInNhZmVBY3RpdmVFbGVtZW50IiwiZWxzIiwiZmluZCIsInNlZWQiLCJtIiwibmlkIiwibWF0Y2giLCJncm91cHMiLCJuZXdTZWxlY3RvciIsIm5ld0NvbnRleHQiLCJ0ZXN0Q29udGV4dCIsInRva2VuaXplIiwidG9TZWxlY3RvciIsInNlbGVjdCIsImtleXMiLCJjYWNoZSIsImtleSIsIm1hcmtGdW5jdGlvbiIsImZuIiwiYXNzZXJ0IiwiZWwiLCJjcmVhdGVJbnB1dFBzZXVkbyIsImNyZWF0ZUJ1dHRvblBzZXVkbyIsImNyZWF0ZURpc2FibGVkUHNldWRvIiwiZGlzYWJsZWQiLCJjcmVhdGVQb3NpdGlvbmFsUHNldWRvIiwiYXJndW1lbnQiLCJtYXRjaEluZGV4ZXMiLCJzdWJXaW5kb3ciLCJpZCIsImF0dHJJZCIsInRhZyIsImNsYXNzTmFtZSIsImlucHV0IiwiY29tcGFyZSIsImV4cHIiLCJlbGVtZW50cyIsImR1cGxpY2F0ZXMiLCJleGNlc3MiLCJ1bnF1b3RlZCIsIm5vZGVOYW1lU2VsZWN0b3IiLCJleHBlY3RlZE5vZGVOYW1lIiwicGF0dGVybiIsIm9wZXJhdG9yIiwiY2hlY2siLCJyZXN1bHQiLCJ3aGF0IiwiX2FyZ3VtZW50IiwibGFzdCIsInNpbXBsZSIsImZvcndhcmQiLCJvZlR5cGUiLCJfY29udGV4dCIsInhtbCIsIm91dGVyQ2FjaGUiLCJub2RlSW5kZXgiLCJzdGFydCIsImRpciIsInBhcmVudCIsInVzZUNhY2hlIiwiZGlmZiIsInBzZXVkbyIsImFyZ3MiLCJpZHgiLCJtYXRjaGVkIiwibWF0Y2hlciIsImNvbXBpbGUiLCJ1bm1hdGNoZWQiLCJ0ZXh0IiwibGFuZyIsImVsZW1MYW5nIiwiaGFzaCIsImF0dHIiLCJfbWF0Y2hJbmRleGVzIiwic2V0RmlsdGVycyIsInBhcnNlT25seSIsInRva2VucyIsInNvRmFyIiwicHJlRmlsdGVycyIsImNhY2hlZCIsImNvbWJpbmF0b3IiLCJiYXNlIiwic2tpcCIsImNoZWNrTm9uRWxlbWVudHMiLCJkb25lTmFtZSIsIm9sZENhY2hlIiwibmV3Q2FjaGUiLCJlbGVtZW50TWF0Y2hlciIsIm1hdGNoZXJzIiwibXVsdGlwbGVDb250ZXh0cyIsImNvbnRleHRzIiwiY29uZGVuc2UiLCJtYXAiLCJmaWx0ZXIiLCJuZXdVbm1hdGNoZWQiLCJtYXBwZWQiLCJzZXRNYXRjaGVyIiwicHJlRmlsdGVyIiwicG9zdEZpbHRlciIsInBvc3RGaW5kZXIiLCJwb3N0U2VsZWN0b3IiLCJ0ZW1wIiwibWF0Y2hlck91dCIsInByZU1hcCIsInBvc3RNYXAiLCJwcmVleGlzdGluZyIsIm1hdGNoZXJJbiIsIm1hdGNoZXJGcm9tVG9rZW5zIiwiY2hlY2tDb250ZXh0IiwibGVhZGluZ1JlbGF0aXZlIiwiaW1wbGljaXRSZWxhdGl2ZSIsIm1hdGNoQ29udGV4dCIsIm1hdGNoQW55Q29udGV4dCIsIm1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyIsImVsZW1lbnRNYXRjaGVycyIsInNldE1hdGNoZXJzIiwiYnlTZXQiLCJieUVsZW1lbnQiLCJzdXBlck1hdGNoZXIiLCJvdXRlcm1vc3QiLCJtYXRjaGVkQ291bnQiLCJzZXRNYXRjaGVkIiwiY29udGV4dEJhY2t1cCIsImRpcnJ1bnNVbmlxdWUiLCJ0b2tlbiIsImNvbXBpbGVkIiwidW50aWwiLCJ0cnVuY2F0ZSIsInNpYmxpbmdzIiwibiIsInJuZWVkc0NvbnRleHQiLCJyc2luZ2xlVGFnIiwid2lubm93IiwicXVhbGlmaWVyIiwibm90Iiwic2VsZiIsInJvb3RqUXVlcnkiLCJpbml0Iiwicm9vdCIsInJwYXJlbnRzcHJldiIsImd1YXJhbnRlZWRVbmlxdWUiLCJ0YXJnZXRzIiwibCIsInNlbGVjdG9ycyIsImN1ciIsInNpYmxpbmciLCJybm90aHRtbHdoaXRlIiwiY3JlYXRlT3B0aW9ucyIsIm9iamVjdCIsIl8iLCJmbGFnIiwiZmlyaW5nIiwibWVtb3J5IiwiZmlyZWQiLCJsb2NrZWQiLCJsaXN0IiwicXVldWUiLCJmaXJpbmdJbmRleCIsImZpcmUiLCJhZGQiLCJpbmRleCIsIklkZW50aXR5IiwidiIsIlRocm93ZXIiLCJleCIsImFkb3B0VmFsdWUiLCJyZXNvbHZlIiwicmVqZWN0Iiwibm9WYWx1ZSIsIm1ldGhvZCIsImZ1bmMiLCJ0dXBsZXMiLCJzdGF0ZSIsInByb21pc2UiLCJkZWZlcnJlZCIsImZucyIsIm5ld0RlZmVyIiwidHVwbGUiLCJyZXR1cm5lZCIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsIm9uUHJvZ3Jlc3MiLCJtYXhEZXB0aCIsImRlcHRoIiwiaGFuZGxlciIsInNwZWNpYWwiLCJ0aGF0IiwibWlnaHRUaHJvdyIsInRoZW4iLCJwcm9jZXNzIiwiZSIsInN0YXRlU3RyaW5nIiwic2luZ2xlVmFsdWUiLCJyZW1haW5pbmciLCJyZXNvbHZlQ29udGV4dHMiLCJyZXNvbHZlVmFsdWVzIiwicHJpbWFyeSIsInVwZGF0ZUZ1bmMiLCJyZXJyb3JOYW1lcyIsImVycm9yIiwiYXN5bmNFcnJvciIsInJlYWR5TGlzdCIsIndhaXQiLCJjb21wbGV0ZWQiLCJhY2Nlc3MiLCJjaGFpbmFibGUiLCJlbXB0eUdldCIsInJhdyIsImJ1bGsiLCJfa2V5Iiwicm1zUHJlZml4IiwicmRhc2hBbHBoYSIsImZjYW1lbENhc2UiLCJfYWxsIiwibGV0dGVyIiwiY2FtZWxDYXNlIiwic3RyaW5nIiwiYWNjZXB0RGF0YSIsIm93bmVyIiwiRGF0YSIsImRhdGEiLCJwcm9wIiwiZGF0YVByaXYiLCJkYXRhVXNlciIsInJicmFjZSIsInJtdWx0aURhc2giLCJnZXREYXRhIiwiZGF0YUF0dHIiLCJhdHRycyIsInN0YXJ0TGVuZ3RoIiwiaG9va3MiLCJuZXh0Iiwic2V0dGVyIiwidG1wIiwiY291bnQiLCJkZWZlciIsInBudW0iLCJyY3NzTnVtIiwiY3NzRXhwYW5kIiwiaXNBdHRhY2hlZCIsImNvbXBvc2VkIiwiaXNIaWRkZW5XaXRoaW5UcmVlIiwiYWRqdXN0Q1NTIiwidmFsdWVQYXJ0cyIsInR3ZWVuIiwiYWRqdXN0ZWQiLCJzY2FsZSIsIm1heEl0ZXJhdGlvbnMiLCJjdXJyZW50VmFsdWUiLCJpbml0aWFsIiwidW5pdCIsImluaXRpYWxJblVuaXQiLCJkZWZhdWx0RGlzcGxheU1hcCIsImdldERlZmF1bHREaXNwbGF5IiwiZGlzcGxheSIsInNob3dIaWRlIiwic2hvdyIsInZhbHVlcyIsInJjaGVja2FibGVUeXBlIiwicnRhZ05hbWUiLCJyc2NyaXB0VHlwZSIsImZyYWdtZW50IiwiZGl2Iiwid3JhcE1hcCIsImdldEFsbCIsInNldEdsb2JhbEV2YWwiLCJyZWZFbGVtZW50cyIsInJodG1sIiwiYnVpbGRGcmFnbWVudCIsInNjcmlwdHMiLCJzZWxlY3Rpb24iLCJpZ25vcmVkIiwid3JhcCIsImF0dGFjaGVkIiwibm9kZXMiLCJydHlwZW5hbWVzcGFjZSIsInJldHVyblRydWUiLCJyZXR1cm5GYWxzZSIsIm9uIiwidHlwZXMiLCJvbmUiLCJvcmlnRm4iLCJldmVudCIsImhhbmRsZU9iakluIiwiZXZlbnRIYW5kbGUiLCJldmVudHMiLCJ0IiwiaGFuZGxlT2JqIiwiaGFuZGxlcnMiLCJuYW1lc3BhY2VzIiwib3JpZ1R5cGUiLCJlbGVtRGF0YSIsIm1hcHBlZFR5cGVzIiwib3JpZ0NvdW50IiwibmF0aXZlRXZlbnQiLCJoYW5kbGVyUXVldWUiLCJtYXRjaGVkSGFuZGxlcnMiLCJtYXRjaGVkU2VsZWN0b3JzIiwiZGVsZWdhdGVDb3VudCIsImhvb2siLCJvcmlnaW5hbEV2ZW50IiwibGV2ZXJhZ2VOYXRpdmUiLCJpc1NldHVwIiwic2F2ZWQiLCJoYW5kbGUiLCJwcm9wcyIsImRlbGVnYXRlVHlwZSIsImZvY3VzTWFwcGVkSGFuZGxlciIsImF0dGFjaGVzIiwiZGF0YUhvbGRlciIsIm9yaWciLCJmaXgiLCJyZWxhdGVkIiwicm5vSW5uZXJodG1sIiwicmNoZWNrZWQiLCJyY2xlYW5TY3JpcHQiLCJtYW5pcHVsYXRpb25UYXJnZXQiLCJjb250ZW50IiwiZGlzYWJsZVNjcmlwdCIsInJlc3RvcmVTY3JpcHQiLCJjbG9uZUNvcHlFdmVudCIsImRlc3QiLCJwZGF0YU9sZCIsInVkYXRhT2xkIiwidWRhdGFDdXIiLCJmaXhJbnB1dCIsImRvbU1hbmlwIiwiY29sbGVjdGlvbiIsImhhc1NjcmlwdHMiLCJpTm9DbG9uZSIsInZhbHVlSXNGdW5jdGlvbiIsInJlbW92ZSIsImtlZXBEYXRhIiwiaHRtbCIsImRhdGFBbmRFdmVudHMiLCJkZWVwRGF0YUFuZEV2ZW50cyIsInNyY0VsZW1lbnRzIiwiZGVzdEVsZW1lbnRzIiwiaW5QYWdlIiwib3JpZ2luYWwiLCJpbnNlcnQiLCJybnVtbm9ucHgiLCJyY3VzdG9tUHJvcCIsImdldFN0eWxlcyIsInZpZXciLCJzd2FwIiwib2xkIiwicmJveFN0eWxlIiwiY29tcHV0ZVN0eWxlVGVzdHMiLCJjb250YWluZXIiLCJkaXZTdHlsZSIsInBpeGVsUG9zaXRpb25WYWwiLCJyZWxpYWJsZU1hcmdpbkxlZnRWYWwiLCJyb3VuZFBpeGVsTWVhc3VyZXMiLCJwaXhlbEJveFN0eWxlc1ZhbCIsImJveFNpemluZ1JlbGlhYmxlVmFsIiwic2Nyb2xsYm94U2l6ZVZhbCIsIm1lYXN1cmUiLCJyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCIsInRhYmxlIiwidHIiLCJ0ckNoaWxkIiwidHJTdHlsZSIsImN1ckNTUyIsImNvbXB1dGVkIiwid2lkdGgiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwiaXNDdXN0b21Qcm9wIiwic3R5bGUiLCJhZGRHZXRIb29rSWYiLCJjb25kaXRpb25GbiIsImhvb2tGbiIsImNzc1ByZWZpeGVzIiwiZW1wdHlTdHlsZSIsInZlbmRvclByb3BzIiwidmVuZG9yUHJvcE5hbWUiLCJjYXBOYW1lIiwiZmluYWxQcm9wTmFtZSIsImZpbmFsIiwicmRpc3BsYXlzd2FwIiwiY3NzU2hvdyIsImNzc05vcm1hbFRyYW5zZm9ybSIsInNldFBvc2l0aXZlTnVtYmVyIiwic3VidHJhY3QiLCJib3hNb2RlbEFkanVzdG1lbnQiLCJkaW1lbnNpb24iLCJib3giLCJpc0JvcmRlckJveCIsInN0eWxlcyIsImNvbXB1dGVkVmFsIiwiZXh0cmEiLCJkZWx0YSIsIm1hcmdpbkRlbHRhIiwiZ2V0V2lkdGhPckhlaWdodCIsImJveFNpemluZ05lZWRlZCIsInZhbHVlSXNCb3JkZXJCb3giLCJvZmZzZXRQcm9wIiwib3JpZ05hbWUiLCJzY3JvbGxib3hTaXplQnVnZ3kiLCJwcmVmaXgiLCJzdWZmaXgiLCJleHBhbmRlZCIsInBhcnRzIiwiVHdlZW4iLCJlbmQiLCJlYXNpbmciLCJwZXJjZW50IiwiZWFzZWQiLCJwIiwiZnhOb3ciLCJpblByb2dyZXNzIiwicmZ4dHlwZXMiLCJycnVuIiwic2NoZWR1bGUiLCJjcmVhdGVGeE5vdyIsImdlbkZ4IiwiaW5jbHVkZVdpZHRoIiwid2hpY2giLCJjcmVhdGVUd2VlbiIsImFuaW1hdGlvbiIsIkFuaW1hdGlvbiIsImRlZmF1bHRQcmVmaWx0ZXIiLCJvcHRzIiwidG9nZ2xlIiwib2xkZmlyZSIsInByb3BUd2VlbiIsInJlc3RvcmVEaXNwbGF5IiwiaXNCb3giLCJhbmltIiwiaGlkZGVuIiwiZGF0YVNob3ciLCJwcm9wRmlsdGVyIiwic3BlY2lhbEVhc2luZyIsInByb3BlcnRpZXMiLCJzdG9wcGVkIiwidGljayIsImN1cnJlbnRUaW1lIiwiZ290b0VuZCIsInByZXBlbmQiLCJzcGVlZCIsIm9wdCIsInRvIiwiZW1wdHkiLCJvcHRhbGwiLCJkb0FuaW1hdGlvbiIsImNsZWFyUXVldWUiLCJzdG9wUXVldWUiLCJzdG9wIiwiZGVxdWV1ZSIsInRpbWVycyIsImNzc0ZuIiwidGltZXIiLCJ0aW1lIiwidGltZW91dCIsImJvb2xIb29rIiwiYXR0ckhhbmRsZSIsIm5UeXBlIiwiYXR0ck5hbWVzIiwiZ2V0dGVyIiwiaXNYTUwiLCJsb3dlcmNhc2VOYW1lIiwicmZvY3VzYWJsZSIsInJjbGlja2FibGUiLCJ0YWJpbmRleCIsInN0cmlwQW5kQ29sbGFwc2UiLCJnZXRDbGFzcyIsImNsYXNzZXNUb0FycmF5IiwiY2xhc3NOYW1lcyIsImN1clZhbHVlIiwiZmluYWxWYWx1ZSIsInN0YXRlVmFsIiwiaXNWYWxpZFZhbHVlIiwicnJldHVybiIsIm9wdGlvbiIsIm1heCIsIm9wdGlvblNldCIsImxvY2F0aW9uIiwibm9uY2UiLCJycXVlcnkiLCJwYXJzZXJFcnJvckVsZW0iLCJyZm9jdXNNb3JwaCIsInN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrIiwib25seUhhbmRsZXJzIiwiYnViYmxlVHlwZSIsIm9udHlwZSIsImxhc3RFbGVtZW50IiwiZXZlbnRQYXRoIiwicmJyYWNrZXQiLCJyQ1JMRiIsInJzdWJtaXR0ZXJUeXBlcyIsInJzdWJtaXR0YWJsZSIsImJ1aWxkUGFyYW1zIiwidHJhZGl0aW9uYWwiLCJzIiwidmFsdWVPckZ1bmN0aW9uIiwicjIwIiwicmhhc2giLCJyYW50aUNhY2hlIiwicmhlYWRlcnMiLCJybG9jYWxQcm90b2NvbCIsInJub0NvbnRlbnQiLCJycHJvdG9jb2wiLCJwcmVmaWx0ZXJzIiwidHJhbnNwb3J0cyIsImFsbFR5cGVzIiwib3JpZ2luQW5jaG9yIiwiYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwic3RydWN0dXJlIiwiZGF0YVR5cGVFeHByZXNzaW9uIiwiZGF0YVR5cGUiLCJkYXRhVHlwZXMiLCJpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsIm9yaWdpbmFsT3B0aW9ucyIsImpxWEhSIiwiaW5zcGVjdGVkIiwic2Vla2luZ1RyYW5zcG9ydCIsImluc3BlY3QiLCJzZWxlY3RlZCIsInByZWZpbHRlck9yRmFjdG9yeSIsImRhdGFUeXBlT3JUcmFuc3BvcnQiLCJhamF4RXh0ZW5kIiwiZmxhdE9wdGlvbnMiLCJhamF4SGFuZGxlUmVzcG9uc2VzIiwicmVzcG9uc2VzIiwiY3QiLCJmaW5hbERhdGFUeXBlIiwiZmlyc3REYXRhVHlwZSIsImNvbnRlbnRzIiwiYWpheENvbnZlcnQiLCJyZXNwb25zZSIsImlzU3VjY2VzcyIsImNvbnYyIiwiY3VycmVudCIsImNvbnYiLCJwcmV2IiwiY29udmVydGVycyIsInNldHRpbmdzIiwidXJsIiwidHJhbnNwb3J0IiwiY2FjaGVVUkwiLCJyZXNwb25zZUhlYWRlcnNTdHJpbmciLCJyZXNwb25zZUhlYWRlcnMiLCJ0aW1lb3V0VGltZXIiLCJ1cmxBbmNob3IiLCJmaXJlR2xvYmFscyIsInVuY2FjaGVkIiwiY2FsbGJhY2tDb250ZXh0IiwiZ2xvYmFsRXZlbnRDb250ZXh0IiwiY29tcGxldGVEZWZlcnJlZCIsInN0YXR1c0NvZGUiLCJyZXF1ZXN0SGVhZGVycyIsInJlcXVlc3RIZWFkZXJzTmFtZXMiLCJzdHJBYm9ydCIsInN0YXR1c1RleHQiLCJmaW5hbFRleHQiLCJzdGF0dXMiLCJuYXRpdmVTdGF0dXNUZXh0IiwiaGVhZGVycyIsInN1Y2Nlc3MiLCJtb2RpZmllZCIsImh0bWxJc0Z1bmN0aW9uIiwieGhyU3VjY2Vzc1N0YXR1cyIsInhoclN1cHBvcnRlZCIsImVycm9yQ2FsbGJhY2siLCJjb21wbGV0ZSIsInhociIsImV2dCIsIm9sZENhbGxiYWNrcyIsInJqc29ucCIsIm9yaWdpbmFsU2V0dGluZ3MiLCJjYWxsYmFja05hbWUiLCJvdmVyd3JpdHRlbiIsInJlc3BvbnNlQ29udGFpbmVyIiwianNvblByb3AiLCJib2R5Iiwia2VlcFNjcmlwdHMiLCJwYXJzZWQiLCJwYXJhbXMiLCJvZmYiLCJyZXNwb25zZVRleHQiLCJjdXJQb3NpdGlvbiIsImN1ckxlZnQiLCJjdXJDU1NUb3AiLCJjdXJUb3AiLCJjdXJPZmZzZXQiLCJjdXJDU1NMZWZ0IiwiY2FsY3VsYXRlUG9zaXRpb24iLCJwb3NpdGlvbiIsImN1ckVsZW0iLCJyZWN0Iiwid2luIiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0IiwicGFyZW50T2Zmc2V0IiwidG9wIiwiZGVmYXVsdEV4dHJhIiwiZnVuY05hbWUiLCJtYXJnaW4iLCJmbk92ZXIiLCJmbk91dCIsInJ0cmltIiwicHJveHkiLCJob2xkIiwiX2pRdWVyeSIsIl8kIiwiX19wdWJsaWNGaWVsZCIsImFjdGlvbk5vZGUiLCJyZWNvcmQiLCJfYSIsImZvcm1hdCIsImludGVnZXJQYXJ0IiwiZnJhY3Rpb25QYXJ0IiwiaXNOZWdhdGl2ZSIsImlzUGVyY2VudCIsImludGVnZXJGb3JtYXQiLCJmcmFjdGlvbkZvcm1hdCIsImRhdGUiLCJ5ZWFyIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwibWlsbGlzZWNvbmQiLCJ0aW1lWm9uZU9mZnNldCIsInJlcGxhY2VtZW50cyIsImRvY051bSIsInRlbXBsYXRlIiwicmVnZXgiLCJub3ciLCJudW1iZXIiLCJubyIsInJlY05vIiwiYXBwdXJsIiwicmVzcCIsImxvZ2ljT3AiLCJqc29uIiwiY2hpbGRKc29uIiwiZm91bmROb2RlIiwibWF4SW5kZXgiLCJjaGlsZCIsImNoaWxkTWF4IiwiY29uZGl0aW9uU3RyaW5nIiwiZ3JvdXBOb2RlIiwiY2hpbGRDb25kaXRpb25TdHJpbmciLCJjb25kTm9kZSIsImNvbmRpTm9kZXMiLCJqc29uU3RyaW5nIiwiZmllbGRWYWx1ZSIsImNvbmRpdGlvbiIsInRhcmdldFZhbHVlIiwiY29uZGl0aW9uVmFsdWUiLCJkYXRlVmFsdWUiLCJudW1iZXJWYWx1ZSIsInRyZWUiLCJidXR0b25TcGFjZSIsImJ1dHRvbiIsImNsaWNrRXZlbnROYW1lIiwiY29uZGl0aW9uUmVzdWx0IiwiZXhwb3J0cyIsImluamVjdFBsYXRmb3JtRGVwcyIsImRlcHMiLCJfX2V4dGVuZHMiLCJleHRlbmRTdGF0aWNzIiwiZCIsIl9fIiwiVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXzEiLCJfc3VwZXIiLCJVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IiLCJwbGF0Zm9ybSIsIl90aGlzIiwibWVzc2FnZSIsIk1pbWUiLCJ0eXBlTWFwIiwiZm9yY2UiLCJleHRlbnNpb25zIiwiZXh0IiwicGF0aCIsImhhc1BhdGgiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwiZnVsZmlsbGVkIiwic3RlcCIsInJlamVjdGVkIiwiX19nZW5lcmF0b3IiLCJmIiwieSIsImciLCJ2ZXJiIiwib3AiLCJfX2ltcG9ydERlZmF1bHQiLCJtb2QiLCJicm93c2VyIiwiZmlsZVBhdGgiLCJfYiIsIl9jIiwiZmlsZU5hbWUiLCJiYXNlVXJsIiwiaG9zdCIsInByb3RvY29sIiwiZW5kcG9pbnROYW1lIiwiZ3Vlc3RTcGFjZUlkIiwicHJldmlldyIsImd1ZXN0UGF0aCIsInByZXZpZXdQYXRoIiwiX19hc3NpZ24iLCJCYXNlQ2xpZW50XzEiLCJCYXNlQ2xpZW50IiwiY2xpZW50IiwiX19yZXN0IiwiQnVsa1JlcXVlc3RDbGllbnRfMSIsIkJ1bGtSZXF1ZXN0Q2xpZW50IiwicmVxdWVzdHNQYXJhbSIsInJlcXVlc3RzIiwicmVxdWVzdCIsInJlc3QiLCJBcHBDbGllbnRfMSIsIkFwcENsaWVudCIsInNwYWNlIiwic3BhY2VQYXRoIiwiZGVmYXVsdFRocmVhZCIsIktpbnRvbmVBYm9ydFNlYXJjaEVycm9yXzEiLCJLaW50b25lQWJvcnRTZWFyY2hFcnJvciIsIktpbnRvbmVBbGxSZWNvcmRzRXJyb3JfMSIsIktpbnRvbmVBbGxSZWNvcmRzRXJyb3IiLCJwcm9jZXNzZWRSZWNvcmRzUmVzdWx0IiwidW5wcm9jZXNzZWRSZWNvcmRzIiwibnVtT2ZBbGxSZWNvcmRzIiwiY2h1bmtMZW5ndGgiLCJudW1PZlByb2Nlc3NlZFJlY29yZHMiLCJlcnJvckluZGV4IiwiZXJyb3JzIiwiZXJyb3JJbmRleGVzIiwiZXJyb3JLZXkiLCJlcnJvclBhcnNlUmVzdWx0IiwiS2ludG9uZVJlc3RBUElFcnJvcl8xIiwiS2ludG9uZVJlc3RBUElFcnJvciIsImJ1bGtSZXF1ZXN0SW5kZXgiLCJfX2NyZWF0ZUJpbmRpbmciLCJvIiwiayIsImsyIiwiZGVzYyIsIl9fZXhwb3J0U3RhciIsInJlcXVpcmUkJDIiLCJmcm9tIiwicGFjayIsImFyIiwiUmVjb3JkQ2xpZW50XzEiLCJlcnJvcl8xIiwiUmVjb3JkQ2xpZW50IiwiYnVsa1JlcXVlc3RDbGllbnQiLCJhcHAiLCJ1cGRhdGVLZXkiLCJyZWNvcmRzIiwicmV2aXNpb24iLCJxdWVyeSIsInJlZ2V4cCIsImlkcyIsInJldmlzaW9ucyIsIm9yZGVyQnkiLCJ3aXRoQ3Vyc29yIiwiY29uZGl0aW9uUXVlcnkiLCJvcmlnaW5hbEZpZWxkcyIsImZpZWxkcyIsImFsbFJlY29yZHMiLCJsYXN0SWQiLCJsYXN0UmVjb3JkIiwiZXJyb3JfMiIsIkNIVU5LX0xFTkdUSCIsInJlY29yZHNDaHVuayIsIm5ld1Jlc3VsdHMiLCJlXzEiLCJzZXBhcmF0ZWRSZWNvcmRzIiwiYWNjIiwiZV8yIiwiZV8zIiwic2l6ZSIsInNlcGFyYXRlZCIsImNodW5rIiwiU3BhY2VDbGllbnRfMSIsIlNwYWNlQ2xpZW50IiwiRmlsZUNsaWVudF8xIiwiZm9ybV9kYXRhXzEiLCJwbGF0Zm9ybV8xIiwicmVxdWlyZSQkMyIsIkZpbGVDbGllbnQiLCJmb3JtRGF0YSIsIm5hbWVfMSIsIm5hbWVfMiIsImZpbGVEYXRhIiwiYmluZCIsInRoaW5nIiwic3RyIiwiaXNBcnJheSIsImlzQnVmZmVyIiwiaXNTdHJpbmciLCJpc051bWJlciIsImlzQm9vbGVhbiIsInByb3RvdHlwZSIsImlzRGF0ZSIsImtpbmQiLCJhbGxPd25LZXlzIiwibWVyZ2UiLCJjYXNlbGVzcyIsImFzc2lnblZhbHVlIiwidGFyZ2V0S2V5IiwiY29uc3RydWN0b3IiLCJzdXBlckNvbnN0cnVjdG9yIiwiZGVzY3JpcHRvcnMiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwibWVyZ2VkIiwic2VhcmNoU3RyaW5nIiwibGFzdEluZGV4IiwiVHlwZWRBcnJheSIsIml0ZXJhdG9yIiwicGFpciIsInJlZ0V4cCIsInAxIiwicDIiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUmVnRXhwIiwicmVkdWNlciIsInJlZHVjZWREZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJhcnJheU9yU3RyaW5nIiwiZGVsaW1pdGVyIiwiZGVmaW5lIiwibm9vcCIsImRlZmF1bHRWYWx1ZSIsImFscGhhYmV0Iiwic3RhY2siLCJ2aXNpdCIsInNvdXJjZSIsInJlZHVjZWRWYWx1ZSIsInV0aWxzJDEiLCJjb25maWciLCJ0b0pTT04iLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJkb3RzIiwibWV0YVRva2VucyIsInZpc2l0b3IiLCJkZWZhdWx0VmlzaXRvciIsImluZGV4ZXMiLCJ1c2VCbG9iIiwiY29udmVydFZhbHVlIiwiZXhwb3NlZEhlbHBlcnMiLCJidWlsZCIsImNoYXJNYXAiLCJhcHBlbmQiLCJlbmNvZGVyIiwiX2VuY29kZSIsImVuY29kZSIsInNlcmlhbGl6ZUZuIiwic2VyaWFsaXplZFBhcmFtcyIsImhhc2htYXJrSW5kZXgiLCJoIiwicHJvZHVjdCIsInV0aWxzIiwiaGVscGVycyIsImFycmF5VG9PYmplY3QiLCJidWlsZFBhdGgiLCJpc051bWVyaWNLZXkiLCJpc0xhc3QiLCJyYXdWYWx1ZSIsInBhcnNlciIsImRlZmF1bHRzIiwidHJhbnNmb3JtUmVxdWVzdCIsImNvbnRlbnRUeXBlIiwiaGFzSlNPTkNvbnRlbnRUeXBlIiwiaXNPYmplY3RQYXlsb2FkIiwiaXNGaWxlTGlzdCIsIl9Gb3JtRGF0YSIsInRyYW5zZm9ybVJlc3BvbnNlIiwidHJhbnNpdGlvbmFsIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJKU09OUmVxdWVzdGVkIiwic3RyaWN0SlNPTlBhcnNpbmciLCJ2YWxpZGF0ZVN0YXR1cyIsImRlZmF1bHRzJDEiLCJyYXdIZWFkZXJzIiwibGluZSIsImhlYWRlciIsInRva2Vuc1JFIiwiaXNIZWFkZXJOYW1lRmlsdGVyIiwiY2hhciIsImFjY2Vzc29yTmFtZSIsIm1ldGhvZE5hbWUiLCJhcmcxIiwiYXJnMiIsImFyZzMiLCJ2YWx1ZU9yUmV3cml0ZSIsInJld3JpdGUiLCJzZXRIZWFkZXIiLCJfdmFsdWUiLCJfaGVhZGVyIiwiX3Jld3JpdGUiLCJsSGVhZGVyIiwic2V0SGVhZGVycyIsImRlbGV0ZWQiLCJkZWxldGVIZWFkZXIiLCJub3JtYWxpemVkIiwiYXNTdHJpbmdzIiwiYWNjZXNzb3JzIiwiZGVmaW5lQWNjZXNzb3IiLCJoZWFkZXJWYWx1ZSIsInNhbXBsZXNDb3VudCIsIm1pbiIsImJ5dGVzIiwidGltZXN0YW1wcyIsImhlYWQiLCJ0YWlsIiwiZmlyc3RTYW1wbGVUUyIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJmcmVxIiwidGltZXN0YW1wIiwidGhyZXNob2xkIiwibGlzdGVuZXIiLCJpc0Rvd25sb2FkU3RyZWFtIiwiYnl0ZXNOb3RpZmllZCIsIl9zcGVlZG9tZXRlciIsImxvYWRlZCIsInRvdGFsIiwicHJvZ3Jlc3NCeXRlcyIsInJhdGUiLCJpblJhbmdlIiwic3RhbmRhcmRCcm93c2VyRW52IiwibXNpZSIsInVybFBhcnNpbmdOb2RlIiwib3JpZ2luVVJMIiwicmVzb2x2ZVVSTCIsImhyZWYiLCJyZXF1ZXN0VVJMIiwibm9uU3RhbmRhcmRCcm93c2VyRW52IiwiZXhwaXJlcyIsImRvbWFpbiIsInNlY3VyZSIsImNvb2tpZSIsImJhc2VVUkwiLCJyZWxhdGl2ZVVSTCIsInJlcXVlc3RlZFVSTCIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsImNvbmZpZ1ZhbHVlIiwibmV3Q29uZmlnIiwid2l0aFhTUkZUb2tlbiIsInhzcmZIZWFkZXJOYW1lIiwieHNyZkNvb2tpZU5hbWUiLCJhdXRoIiwieHNyZlZhbHVlIiwiX2NvbmZpZyIsInJlcXVlc3REYXRhIiwicmVzcG9uc2VUeXBlIiwib25DYW5jZWxlZCIsIm9ubG9hZGVuZCIsImVyciIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJjYW5jZWwiLCJzaWduYWxzIiwiY29udHJvbGxlciIsImFib3J0ZWQiLCJvbmFib3J0IiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJjaHVua1NpemUiLCJwb3MiLCJpdGVyYWJsZSIsInN0cmVhbSIsIm9uRmluaXNoIiwicmVhc29uIiwibGVuZ3RoQ29tcHV0YWJsZSIsImR1cGxleEFjY2Vzc2VkIiwiaGFzQ29udGVudFR5cGUiLCJyZXMiLCJjYW5jZWxUb2tlbiIsIm9uRG93bmxvYWRQcm9ncmVzcyIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ3aXRoQ3JlZGVudGlhbHMiLCJmZXRjaE9wdGlvbnMiLCJjb21wb3NlZFNpZ25hbCIsInN0b3BUaW1lb3V0IiwiZmluaXNoZWQiLCJyZXF1ZXN0Q29udGVudExlbmd0aCIsIl9yZXF1ZXN0IiwiY29udGVudFR5cGVIZWFkZXIiLCJpc1N0cmVhbVJlc3BvbnNlIiwicmVzcG9uc2VDb250ZW50TGVuZ3RoIiwicmVzcG9uc2VEYXRhIiwiYWRhcHRlciIsImFkYXB0ZXJzIiwibmFtZU9yQWRhcHRlciIsInJlamVjdGVkUmVhc29ucyIsInJlYXNvbnMiLCJWRVJTSU9OIiwidmFsaWRhdG9yIiwiZm9ybWF0TWVzc2FnZSIsInNjaGVtYSIsImFsbG93VW5rbm93biIsImluc3RhbmNlQ29uZmlnIiwiY29uZmlnT3JVcmwiLCJkdW1teSIsInBhcmFtc1NlcmlhbGl6ZXIiLCJjb250ZXh0SGVhZGVycyIsInJlcXVlc3RJbnRlcmNlcHRvckNoYWluIiwic3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzIiwiaW50ZXJjZXB0b3IiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJjaGFpbiIsImZ1bGxQYXRoIiwiZm9yRWFjaE1ldGhvZE5vRGF0YSIsImZvckVhY2hNZXRob2RXaXRoRGF0YSIsImdlbmVyYXRlSFRUUE1ldGhvZCIsImlzRm9ybSIsImV4ZWN1dG9yIiwicmVzb2x2ZVByb21pc2UiLCJvbmZ1bGZpbGxlZCIsIl9yZXNvbHZlIiwiYyIsInBheWxvYWQiLCJkZWZhdWx0Q29uZmlnIiwiaW5zdGFuY2UiLCJhbGwiLCJwcm9taXNlcyIsImF4aW9zXzEiLCJBeGlvc0NsaWVudF8xIiwiQXhpb3NDbGllbnQiLCJyZXNwb25zZUhhbmRsZXIiLCJyZXF1ZXN0Q29uZmlnQnVpbGRlciIsInJlcXVlc3RDb25maWciLCJoYXNTeW1ib2xzIiwic3ltIiwic3ltT2JqIiwic3ltVmFsIiwic3ltcyIsImhhc05hdGl2ZVN5bWJvbHMiLCJoYXNQcm90byIsInRvU3RyIiwiY29uY2F0dHkiLCJzbGljeSIsImFyckxpa2UiLCJqb2luZXIiLCJpbXBsZW1lbnRhdGlvbiIsImJvdW5kIiwiYmluZGVyIiwiYm91bmRMZW5ndGgiLCJib3VuZEFyZ3MiLCJFbXB0eSIsInVuZGVmaW5lZCIsIiRTeW50YXhFcnJvciIsInJlcXVpcmUkJDQiLCIkVHlwZUVycm9yIiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJleHByZXNzaW9uU3ludGF4IiwiJGdPUEQiLCJyZXF1aXJlJCQ3IiwicmVxdWlyZSQkOCIsIngiLCJkb0V2YWwiLCJnZW4iLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCIkY29uY2F0IiwiJHJlcGxhY2UiLCJzdHJpbmdUb1BhdGgiLCJxdW90ZSIsInN1YlN0cmluZyIsImdldEJhc2VJbnRyaW5zaWMiLCJhbGxvd01pc3NpbmciLCJpbnRyaW5zaWNOYW1lIiwiYWxpYXMiLCJHZXRJbnRyaW5zaWMiLCJpbnRyaW5zaWNCYXNlTmFtZSIsImludHJpbnNpYyIsImludHJpbnNpY1JlYWxOYW1lIiwic2tpcEZ1cnRoZXJDYWNoaW5nIiwiaXNPd24iLCJwYXJ0IiwiJGRlZmluZVByb3BlcnR5IiwiZ29wZCIsImRlZmluZURhdGFQcm9wZXJ0eSIsInByb3BlcnR5Iiwibm9uRW51bWVyYWJsZSIsIm5vbldyaXRhYmxlIiwibm9uQ29uZmlndXJhYmxlIiwibG9vc2UiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3JzIiwiaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWciLCIkZmxvb3IiLCJzZXRGdW5jdGlvbkxlbmd0aCIsImZ1bmN0aW9uTGVuZ3RoSXNDb25maWd1cmFibGUiLCJmdW5jdGlvbkxlbmd0aElzV3JpdGFibGUiLCIkYXBwbHkiLCIkY2FsbCIsIiRyZWZsZWN0QXBwbHkiLCIkbWF4Iiwib3JpZ2luYWxGdW5jdGlvbiIsImFwcGx5QmluZCIsImNhbGxCb3VuZCIsImNhbGxCb3VuZEludHJpbnNpYyIsIk8iLCJzZXBSZWdleCIsImludCIsImludFN0ciIsImRlYyIsImluc3BlY3RfIiwic2VlbiIsImhhcyIsImN1c3RvbUluc3BlY3QiLCJudW1lcmljU2VwYXJhdG9yIiwiYmlnSW50U3RyIiwiaW5kZW50Iiwibm9JbmRlbnQiLCJuZXdPcHRzIiwic3ltU3RyaW5nIiwiaXNFbGVtZW50IiwieHMiLCJtYXBQYXJ0cyIsInNldFBhcnRzIiwieXMiLCJpc1BsYWluT2JqZWN0IiwicHJvdG9UYWciLCJzdHJpbmdUYWciLCJjb25zdHJ1Y3RvclRhZyIsImRlZmF1bHRTdHlsZSIsInF1b3RlQ2hhciIsInRyYWlsZXIiLCJlbnRyaWVzIiwiam9pbmVkRW50cmllcyIsImJhc2VJbmRlbnQiLCJsaW5lSm9pbmVyIiwiaXNBcnIiLCJzeW1NYXAiLCJjdXJyIiwib2JqZWN0cyIsImdldFNpZGVDaGFubmVsIiwiJHdtIiwiJG0iLCIkbyIsImNoYW5uZWwiLCJmb3JtYXRzIiwiY29tcGFjdFF1ZXVlIiwiaXRlbSIsImNvbXBhY3RlZCIsIm1lcmdlVGFyZ2V0IiwidGFyZ2V0SXRlbSIsImFzc2lnblNpbmdsZVNvdXJjZSIsImRlY29kZXIiLCJjaGFyc2V0Iiwic3RyV2l0aG91dFBsdXMiLCJkZWZhdWx0RW5jb2RlciIsIiQwIiwib3V0Iiwic2VnbWVudCIsImNvbXBhY3QiLCJyZWZzIiwiY29tYmluZSIsIm1heWJlTWFwIiwiYnJhY2tldHMiLCJpbmRpY2VzIiwicmVwZWF0IiwidmFsdWVPckFycmF5Iiwic2VyaWFsaXplRGF0ZSIsImlzTm9uTnVsbGlzaFByaW1pdGl2ZSIsInN0cmluZ2lmeSIsImdlbmVyYXRlQXJyYXlQcmVmaXgiLCJjb21tYVJvdW5kVHJpcCIsImFsbG93RW1wdHlBcnJheXMiLCJzdHJpY3ROdWxsSGFuZGxpbmciLCJza2lwTnVsbHMiLCJlbmNvZGVEb3RJbktleXMiLCJhbGxvd0RvdHMiLCJmb3JtYXR0ZXIiLCJlbmNvZGVWYWx1ZXNPbmx5Iiwic2lkZUNoYW5uZWwiLCJ0bXBTYyIsImZpbmRGbGFnIiwia2V5VmFsdWUiLCJvYmpLZXlzIiwiZW5jb2RlZFByZWZpeCIsImFkanVzdGVkUHJlZml4IiwiZW5jb2RlZEtleSIsImtleVByZWZpeCIsInZhbHVlU2lkZUNoYW5uZWwiLCJub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zIiwiYXJyYXlGb3JtYXQiLCJqb2luZWQiLCJudW1iZXJTdHIiLCJwYXJzZVF1ZXJ5U3RyaW5nVmFsdWVzIiwiY2xlYW5TdHIiLCJsaW1pdCIsInNraXBJbmRleCIsImJyYWNrZXRFcXVhbHNQb3MiLCJlbmNvZGVkVmFsIiwiZXhpc3RpbmciLCJ2YWx1ZXNQYXJzZWQiLCJsZWFmIiwiY2xlYW5Sb290IiwiZGVjb2RlZFJvb3QiLCJwYXJzZVF1ZXJ5U3RyaW5nS2V5cyIsImdpdmVuS2V5Iiwibm9ybWFsaXplUGFyc2VPcHRpb25zIiwicGFyc2UiLCJ0ZW1wT2JqIiwibmV3T2JqIiwiX2hhc0J1ZmZlciIsIl9URCIsIl9URSIsImI2NGNoIiwiYjY0Y2hzIiwiYjY0dGFiIiwidGFiIiwiYjY0cmUiLCJfZnJvbUNDIiwiX1U4QWZyb20iLCJpdCIsIl9ta1VyaVNhZmUiLCJtMCIsIl90aWR5QjY0IiwiYnRvYVBvbHlmaWxsIiwiYmluIiwidTMyIiwiYzAiLCJjMSIsImMyIiwiYXNjIiwicGFkIiwiX2J0b2EiLCJfZnJvbVVpbnQ4QXJyYXkiLCJ1OGEiLCJtYXhhcmdzIiwic3RycyIsImZyb21VaW50OEFycmF5IiwidXJsc2FmZSIsImNiX3V0b2IiLCJjYyIsInJlX3V0b2IiLCJ1dG9iIiwidSIsImVuY29kZVVSSSIsInJlX2J0b3UiLCJjYl9idG91IiwiY2NjYyIsImNwIiwiYnRvdSIsImF0b2JQb2x5ZmlsbCIsInUyNCIsInIxIiwicjIiLCJfYXRvYiIsIl90b1VpbnQ4QXJyYXkiLCJ0b1VpbnQ4QXJyYXkiLCJfdW5VUkkiLCJfZGVjb2RlIiwiZGVjb2RlIiwiaXNWYWxpZCIsIl9ub0VudW0iLCJleHRlbmRTdHJpbmciLCJfYWRkIiwiZXh0ZW5kVWludDhBcnJheSIsImV4dGVuZEJ1aWx0aW5zIiwiZ0Jhc2U2NCIsIktpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlcl8xIiwiS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyIiwicmVxdWVzdFVybCIsIl9kIiwiX2UiLCJfZiIsIl9nIiwiX2giLCJfaiIsIl9rIiwicHJveHlDb25maWciLCJyZXF1ZXN0VG9rZW4iLCJiYXNpY0F1dGgiLCJ1c2VyQWdlbnQiLCJiYXNpY0F1dGhIZWFkZXJzIiwicGxhdGZvcm1EZXBzSGVhZGVycyIsImNvbW1vbkhlYWRlcnMiLCJhcGlUb2tlbiIsIktpbnRvbmVSZXNwb25zZUhhbmRsZXJfMSIsIktpbnRvbmVSZXNwb25zZUhhbmRsZXIiLCJlbmFibGVBYm9ydFNlYXJjaEVycm9yIiwiZXJyb3JSZXNwb25zZSIsIktpbnRvbmVSZXN0QVBJQ2xpZW50XzEiLCJLaW50b25lUmVzdEFQSUNsaWVudCIsImh0dHBDbGllbnQiLCJzb2NrZXRUaW1lb3V0IiwiX19zZXRNb2R1bGVEZWZhdWx0IiwiX19pbXBvcnRTdGFyIiwiYnJvd3NlckRlcHMiLCJGaWVsZFR5cGUiLCJDYWxjRm9ybWF0IiwiZmllbGQiLCJudW1iZXJBcnJheSIsImNhbGNGaWVsZCIsInZhcnMiLCJ2YXJOYW1lIiwiYXBpIiwiZWxlbWVudCIsInZhclZhbHVlcyIsImRhdGFzIiwibG9va3VwRml4ZWRGaWVsZENvZGVzIiwiaXNLZXkiLCJtYXBwaW5nRGF0YSIsImFwcElkIiwibmVlZENyZWF0ZSIsInRhcmdldEZpZWxkIiwibWFwcGluZ1J1bGVzIiwidXBkYXRlUmVjb3JkcyIsInRhcmdldFJlY29yZCIsInVwZGF0ZVJlY29yZCIsIm1hcHBpbmciLCJxdWVyeVN0ciIsImFjY3VtdWxhdG9yIiwibWF4TGVuZ3RoIiwidG9kYXkiLCJmaWVsZFR5cGUiLCJpbnB1dFZhbHVlIiwiZmllbGRDb2RlIiwiZmllbGRSZXF1aXJlZCIsImlucHV0TnVtYmVyVmFsdWUiLCJ0d29EaWdpdE1vbnRoRGF5Iiwic2luZ2xlRGlnaXRNb250aERheSIsInNpbmdsZURpZ2l0TW9udGgiLCJzaW5nbGVEaWdpdERheSIsImRhdGVUaW1lIiwiZGF0ZUFycmF5IiwieWVhckluZGV4IiwibW9udGhJbmRleCIsImRheUluZGV4IiwiZmllbGRPcHRpb25zIiwib3B0aW9uc0luZGV4IiwidXNlcnNOYW1lIiwib3JnYW5pemF0aW9uTmFtZSIsImdyb3Vwc05hbWUiLCJmaWVsZENvbHVtbkluZGV4IiwidmFsdWVDb2x1bW5JbmRleCIsImluc2VydFZhbHVlVHlwZSIsInZhcmlhYmxlVmFsdWUiLCJjb3JyZWN0Rm9ybWF0dGVkVmFsdWUiLCJjb3JyZWN0VmFsdWVzIiwibm90SW5wdXRFcnJvciIsImZvcm1hdHRlZERhdGUiLCJ1c2VycyIsIm9yZ2FuaXphdGlvbnMiLCJnZXRWYWx1ZSIsIm1vdG90ZXh0Iiwiam9pbkZpZWxkMXR5cGUiLCJqb2luRmllbGQydHlwZSIsInNhdmVGaWVsZHR5cGUiLCJqb2luVmFsdWUxIiwiam9pblZhbHVlMiIsImNvblN0cmluZyIsInNhdmVWYWx1ZSIsImNoZWNrUmVnZXgiLCJlbGVtZW50TWFwIiwiaW5zdGFuY2VNYXAiLCJUUkFOU0lUSU9OX0VORCIsInBhcnNlU2VsZWN0b3IiLCJnZXRVSUQiLCJnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCIsInRyYW5zaXRpb25EdXJhdGlvbiIsInRyYW5zaXRpb25EZWxheSIsImZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uIiwiZmxvYXRUcmFuc2l0aW9uRGVsYXkiLCJ0cmlnZ2VyVHJhbnNpdGlvbkVuZCIsImdldEVsZW1lbnQiLCJpc1Zpc2libGUiLCJlbGVtZW50SXNWaXNpYmxlIiwiY2xvc2VkRGV0YWlscyIsInN1bW1hcnkiLCJpc0Rpc2FibGVkIiwiZmluZFNoYWRvd1Jvb3QiLCJyZWZsb3ciLCJnZXRqUXVlcnkiLCJET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzIiwib25ET01Db250ZW50TG9hZGVkIiwiaXNSVEwiLCJkZWZpbmVKUXVlcnlQbHVnaW4iLCJwbHVnaW4iLCIkIiwiSlFVRVJZX05PX0NPTkZMSUNUIiwiZXhlY3V0ZSIsInBvc3NpYmxlQ2FsbGJhY2siLCJleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uIiwidHJhbnNpdGlvbkVsZW1lbnQiLCJ3YWl0Rm9yVHJhbnNpdGlvbiIsImR1cmF0aW9uUGFkZGluZyIsImVtdWxhdGVkRHVyYXRpb24iLCJjYWxsZWQiLCJnZXROZXh0QWN0aXZlRWxlbWVudCIsImFjdGl2ZUVsZW1lbnQiLCJzaG91bGRHZXROZXh0IiwiaXNDeWNsZUFsbG93ZWQiLCJsaXN0TGVuZ3RoIiwiaW5kZXhfanMiLCJuYW1lc3BhY2VSZWdleCIsInN0cmlwTmFtZVJlZ2V4Iiwic3RyaXBVaWRSZWdleCIsImV2ZW50UmVnaXN0cnkiLCJ1aWRFdmVudCIsImN1c3RvbUV2ZW50cyIsIm5hdGl2ZUV2ZW50cyIsIm1ha2VFdmVudFVpZCIsInVpZCIsImdldEVsZW1lbnRFdmVudHMiLCJib290c3RyYXBIYW5kbGVyIiwiaHlkcmF0ZU9iaiIsIkV2ZW50SGFuZGxlciIsImJvb3RzdHJhcERlbGVnYXRpb25IYW5kbGVyIiwiZG9tRWxlbWVudHMiLCJkb21FbGVtZW50IiwiZmluZEhhbmRsZXIiLCJjYWxsYWJsZSIsImRlbGVnYXRpb25TZWxlY3RvciIsIm5vcm1hbGl6ZVBhcmFtZXRlcnMiLCJvcmlnaW5hbFR5cGVFdmVudCIsImRlbGVnYXRpb25GdW5jdGlvbiIsImlzRGVsZWdhdGVkIiwidHlwZUV2ZW50IiwiZ2V0VHlwZUV2ZW50IiwiYWRkSGFuZGxlciIsIm9uZU9mZiIsInByZXZpb3VzRnVuY3Rpb24iLCJyZW1vdmVIYW5kbGVyIiwicmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzIiwic3RvcmVFbGVtZW50RXZlbnQiLCJoYW5kbGVyS2V5IiwiaW5OYW1lc3BhY2UiLCJpc05hbWVzcGFjZSIsImVsZW1lbnRFdmVudCIsImtleUhhbmRsZXJzIiwialF1ZXJ5RXZlbnQiLCJidWJibGVzIiwibmF0aXZlRGlzcGF0Y2giLCJkZWZhdWx0UHJldmVudGVkIiwibWV0YSIsIm5vcm1hbGl6ZURhdGEiLCJub3JtYWxpemVEYXRhS2V5IiwiY2hyIiwiYnNLZXlzIiwicHVyZUtleSIsIk1hbmlwdWxhdG9yIiwiQ29uZmlnIiwianNvbkNvbmZpZyIsImNvbmZpZ1R5cGVzIiwiZXhwZWN0ZWRUeXBlcyIsInZhbHVlVHlwZSIsIkJhc2VDb21wb25lbnQiLCJwcm9wZXJ0eU5hbWUiLCJpc0FuaW1hdGVkIiwiZ2V0U2VsZWN0b3IiLCJocmVmQXR0cmlidXRlIiwiU2VsZWN0b3JFbmdpbmUiLCJwYXJlbnRzIiwiYW5jZXN0b3IiLCJwcmV2aW91cyIsImZvY3VzYWJsZXMiLCJOQU1FIiwiQ0xBU1NfTkFNRV9GQURFIiwiQ0xBU1NfTkFNRV9TSE9XIiwiRVZFTlRfTU9VU0VET1dOIiwiRGVmYXVsdCIsIkRlZmF1bHRUeXBlIiwiQmFja2Ryb3AiLCJiYWNrZHJvcCIsImVuYWJsZURpc21pc3NUcmlnZ2VyIiwiY29tcG9uZW50IiwiY2xpY2tFdmVudCIsIkVWRU5UX0tFWSIsIkVWRU5UX0ZPQ1VTSU4iLCJFVkVOVF9LRVlET1dOX1RBQiIsIlRBQl9LRVkiLCJUQUJfTkFWX0ZPUldBUkQiLCJUQUJfTkFWX0JBQ0tXQVJEIiwiRm9jdXNUcmFwIiwidHJhcEVsZW1lbnQiLCJTRUxFQ1RPUl9GSVhFRF9DT05URU5UIiwiU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQiLCJQUk9QRVJUWV9QQURESU5HIiwiUFJPUEVSVFlfTUFSR0lOIiwiU2Nyb2xsQmFySGVscGVyIiwiZG9jdW1lbnRXaWR0aCIsImNhbGN1bGF0ZWRWYWx1ZSIsInN0eWxlUHJvcGVydHkiLCJzY3JvbGxiYXJXaWR0aCIsIm1hbmlwdWxhdGlvbkNhbGxCYWNrIiwiYWN0dWFsVmFsdWUiLCJjYWxsQmFjayIsImNvbXBvbmVudEZ1bmN0aW9uc19qcyIsIkRBVEFfQVBJX0tFWSIsIkVTQ0FQRV9LRVkiLCJFVkVOVF9ISURFIiwiRVZFTlRfSElERV9QUkVWRU5URUQiLCJFVkVOVF9ISURERU4iLCJFVkVOVF9TSE9XIiwiRVZFTlRfU0hPV04iLCJFVkVOVF9SRVNJWkUiLCJFVkVOVF9DTElDS19ESVNNSVNTIiwiRVZFTlRfTU9VU0VET1dOX0RJU01JU1MiLCJFVkVOVF9LRVlET1dOX0RJU01JU1MiLCJFVkVOVF9DTElDS19EQVRBX0FQSSIsIkNMQVNTX05BTUVfT1BFTiIsIkNMQVNTX05BTUVfU1RBVElDIiwiT1BFTl9TRUxFQ1RPUiIsIlNFTEVDVE9SX0RJQUxPRyIsIlNFTEVDVE9SX01PREFMX0JPRFkiLCJTRUxFQ1RPUl9EQVRBX1RPR0dMRSIsIk1vZGFsIiwicmVsYXRlZFRhcmdldCIsIm1vZGFsQm9keSIsInRyYW5zaXRpb25Db21wbGV0ZSIsImV2ZW50MiIsImlzTW9kYWxPdmVyZmxvd2luZyIsImluaXRpYWxPdmVyZmxvd1kiLCJpc0JvZHlPdmVyZmxvd2luZyIsInNob3dFdmVudCIsImFscmVhZHlPcGVuIiwicGxhY2VtZW50Iiwib3duZXJEb2N1bWVudCIsIk93bkVsZW1lbnQiLCJfcmVmIiwiZWZmZWN0IiwiX3JlZjIiLCJpbml0aWFsU3R5bGVzIiwic3R5bGVQcm9wZXJ0aWVzIiwiYXR0cmlidXRlIiwidWFEYXRhIiwiaW5jbHVkZVNjYWxlIiwiaXNGaXhlZFN0cmF0ZWd5IiwiY2xpZW50UmVjdCIsInNjYWxlWCIsInNjYWxlWSIsInZpc3VhbFZpZXdwb3J0IiwiYWRkVmlzdWFsT2Zmc2V0cyIsImhlaWdodCIsInJvb3ROb2RlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImlzRmlyZWZveCIsImlzSUUiLCJlbGVtZW50Q3NzIiwiY3VycmVudE5vZGUiLCJjc3MiLCJtYXRoTWF4IiwibWF0aE1pbiIsInBhZGRpbmdPYmplY3QiLCJoYXNoTWFwIiwidG9QYWRkaW5nT2JqZWN0IiwicGFkZGluZyIsIl9zdGF0ZSRtb2RpZmllcnNEYXRhJCIsImFycm93RWxlbWVudCIsInBvcHBlck9mZnNldHMiLCJiYXNlUGxhY2VtZW50IiwiYXhpcyIsImlzVmVydGljYWwiLCJhcnJvd1JlY3QiLCJtaW5Qcm9wIiwibWF4UHJvcCIsImVuZERpZmYiLCJzdGFydERpZmYiLCJhcnJvd09mZnNldFBhcmVudCIsImNsaWVudFNpemUiLCJjZW50ZXJUb1JlZmVyZW5jZSIsImNlbnRlciIsImF4aXNQcm9wIiwiX29wdGlvbnMkZWxlbWVudCIsImRwciIsIl9PYmplY3QkYXNzaWduMiIsInBvcHBlciIsInBvcHBlclJlY3QiLCJ2YXJpYXRpb24iLCJvZmZzZXRzIiwiZ3B1QWNjZWxlcmF0aW9uIiwiYWRhcHRpdmUiLCJyb3VuZE9mZnNldHMiLCJpc0ZpeGVkIiwiX29mZnNldHMkeCIsIl9vZmZzZXRzJHkiLCJfcmVmMyIsImhhc1giLCJoYXNZIiwic2lkZVgiLCJzaWRlWSIsImhlaWdodFByb3AiLCJ3aWR0aFByb3AiLCJvZmZzZXRZIiwib2Zmc2V0WCIsImNvbW1vblN0eWxlcyIsIl9yZWY0IiwiX09iamVjdCRhc3NpZ24iLCJfcmVmNSIsIl9vcHRpb25zJGdwdUFjY2VsZXJhdCIsIl9vcHRpb25zJGFkYXB0aXZlIiwiX29wdGlvbnMkcm91bmRPZmZzZXRzIiwiX29wdGlvbnMkc2Nyb2xsIiwic2Nyb2xsIiwiX29wdGlvbnMkcmVzaXplIiwicmVzaXplIiwic2Nyb2xsUGFyZW50cyIsInNjcm9sbFBhcmVudCIsInNjcm9sbExlZnQiLCJzY3JvbGxUb3AiLCJzdHJhdGVneSIsImxheW91dFZpZXdwb3J0IiwiX2VsZW1lbnQkb3duZXJEb2N1bWVuIiwid2luU2Nyb2xsIiwiX2dldENvbXB1dGVkU3R5bGUiLCJvdmVyZmxvdyIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImlzQm9keSIsInVwZGF0ZWRMaXN0IiwiY2xpcHBpbmdQYXJlbnQiLCJjbGlwcGluZ1BhcmVudHMiLCJjYW5Fc2NhcGVDbGlwcGluZyIsImNsaXBwZXJFbGVtZW50IiwiYm91bmRhcnkiLCJyb290Qm91bmRhcnkiLCJtYWluQ2xpcHBpbmdQYXJlbnRzIiwiZmlyc3RDbGlwcGluZ1BhcmVudCIsImNsaXBwaW5nUmVjdCIsImFjY1JlY3QiLCJyZWZlcmVuY2UiLCJjb21tb25YIiwiY29tbW9uWSIsIm1haW5BeGlzIiwiX29wdGlvbnMiLCJfb3B0aW9ucyRwbGFjZW1lbnQiLCJfb3B0aW9ucyRzdHJhdGVneSIsIl9vcHRpb25zJGJvdW5kYXJ5IiwiX29wdGlvbnMkcm9vdEJvdW5kYXJ5IiwiX29wdGlvbnMkZWxlbWVudENvbnRlIiwiZWxlbWVudENvbnRleHQiLCJfb3B0aW9ucyRhbHRCb3VuZGFyeSIsImFsdEJvdW5kYXJ5IiwiX29wdGlvbnMkcGFkZGluZyIsImFsdENvbnRleHQiLCJjbGlwcGluZ0NsaWVudFJlY3QiLCJyZWZlcmVuY2VDbGllbnRSZWN0IiwicG9wcGVyQ2xpZW50UmVjdCIsImVsZW1lbnRDbGllbnRSZWN0Iiwib3ZlcmZsb3dPZmZzZXRzIiwib2Zmc2V0RGF0YSIsIm11bHRpcGx5IiwiZmxpcFZhcmlhdGlvbnMiLCJfb3B0aW9ucyRhbGxvd2VkQXV0b1AiLCJhbGxvd2VkQXV0b1BsYWNlbWVudHMiLCJhbGxQbGFjZW1lbnRzIiwicGxhY2VtZW50cyIsImFsbG93ZWRQbGFjZW1lbnRzIiwib3ZlcmZsb3dzIiwib3Bwb3NpdGVQbGFjZW1lbnQiLCJfb3B0aW9ucyRtYWluQXhpcyIsImNoZWNrTWFpbkF4aXMiLCJfb3B0aW9ucyRhbHRBeGlzIiwiY2hlY2tBbHRBeGlzIiwic3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIiwiX29wdGlvbnMkZmxpcFZhcmlhdGlvIiwicHJlZmVycmVkUGxhY2VtZW50IiwiaXNCYXNlUGxhY2VtZW50IiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwicmVmZXJlbmNlUmVjdCIsImNoZWNrc01hcCIsIm1ha2VGYWxsYmFja0NoZWNrcyIsImZpcnN0Rml0dGluZ1BsYWNlbWVudCIsIl9iYXNlUGxhY2VtZW50IiwiaXNTdGFydFZhcmlhdGlvbiIsIm1haW5WYXJpYXRpb25TaWRlIiwiYWx0VmFyaWF0aW9uU2lkZSIsImNoZWNrcyIsIm51bWJlck9mQ2hlY2tzIiwiX2xvb3AiLCJmaXR0aW5nUGxhY2VtZW50IiwiX3JldCIsInByZXZlbnRlZE9mZnNldHMiLCJzaWRlIiwicmVmZXJlbmNlT3ZlcmZsb3ciLCJwb3BwZXJBbHRPdmVyZmxvdyIsInJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyIsInBvcHBlckVzY2FwZU9mZnNldHMiLCJpc1JlZmVyZW5jZUhpZGRlbiIsImhhc1BvcHBlckVzY2FwZWQiLCJyZWN0cyIsImludmVydERpc3RhbmNlIiwic2tpZGRpbmciLCJkaXN0YW5jZSIsIl9vcHRpb25zJG9mZnNldCIsIl9kYXRhJHN0YXRlJHBsYWNlbWVudCIsIl9vcHRpb25zJHRldGhlciIsInRldGhlciIsIl9vcHRpb25zJHRldGhlck9mZnNldCIsInRldGhlck9mZnNldCIsImFsdEF4aXMiLCJ0ZXRoZXJPZmZzZXRWYWx1ZSIsIm5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSIsIm9mZnNldE1vZGlmaWVyU3RhdGUiLCJfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQiLCJtYWluU2lkZSIsImFsdFNpZGUiLCJhZGRpdGl2ZSIsIm1pbkxlbiIsIm1heExlbiIsImFycm93UGFkZGluZ09iamVjdCIsImFycm93UGFkZGluZ01pbiIsImFycm93UGFkZGluZ01heCIsImFycm93TGVuIiwibWluT2Zmc2V0IiwibWF4T2Zmc2V0IiwiY2xpZW50T2Zmc2V0Iiwib2Zmc2V0TW9kaWZpZXJWYWx1ZSIsInRldGhlck1pbiIsInRldGhlck1heCIsInByZXZlbnRlZE9mZnNldCIsIl9vZmZzZXRNb2RpZmllclN0YXRlJDIiLCJfbWFpblNpZGUiLCJfYWx0U2lkZSIsIl9vZmZzZXQiLCJfbGVuIiwiX21pbiIsIl9tYXgiLCJpc09yaWdpblNpZGUiLCJfb2Zmc2V0TW9kaWZpZXJWYWx1ZSIsIl90ZXRoZXJNaW4iLCJfdGV0aGVyTWF4IiwiX3ByZXZlbnRlZE9mZnNldCIsImVsZW1lbnRPclZpcnR1YWxFbGVtZW50IiwiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCJvZmZzZXRQYXJlbnRJc1NjYWxlZCIsIm1vZGlmaWVycyIsInZpc2l0ZWQiLCJtb2RpZmllciIsInJlcXVpcmVzIiwiZGVwIiwiZGVwTW9kaWZpZXIiLCJvcmRlcmVkTW9kaWZpZXJzIiwicGhhc2UiLCJwZW5kaW5nIiwiZ2VuZXJhdG9yT3B0aW9ucyIsIl9nZW5lcmF0b3JPcHRpb25zIiwiX2dlbmVyYXRvck9wdGlvbnMkZGVmIiwiZGVmYXVsdE1vZGlmaWVycyIsIl9nZW5lcmF0b3JPcHRpb25zJGRlZjIiLCJkZWZhdWx0T3B0aW9ucyIsImVmZmVjdENsZWFudXBGbnMiLCJpc0Rlc3Ryb3llZCIsInNldE9wdGlvbnNBY3Rpb24iLCJjbGVhbnVwTW9kaWZpZXJFZmZlY3RzIiwicnVuTW9kaWZpZXJFZmZlY3RzIiwiX3N0YXRlJGVsZW1lbnRzIiwiX3N0YXRlJG9yZGVyZWRNb2RpZmllIiwiX3N0YXRlJG9yZGVyZWRNb2RpZmllMiIsIl9yZWYkb3B0aW9ucyIsImNsZWFudXBGbiIsIm5vb3BGbiIsImNyZWF0ZVBvcHBlciIsImNvbXB1dGVTdHlsZXMiLCJhcHBseVN0eWxlcyIsImZsaXAiLCJwcmV2ZW50T3ZlcmZsb3ciLCJhcnJvdyIsImhpZGUiLCJhYnNEZWx0YVgiLCJkaXJlY3Rpb24iLCJpdGVtcyIsImFjdGl2ZUluZGV4Iiwib3JkZXIiLCJpbWciLCJzd2lwZUNvbmZpZyIsImFjdGl2ZUluZGljYXRvciIsIm5ld0FjdGl2ZUluZGljYXRvciIsImVsZW1lbnRJbnRlcnZhbCIsImlzTmV4dCIsIm5leHRFbGVtZW50IiwibmV4dEVsZW1lbnRJbmRleCIsInRyaWdnZXJFdmVudCIsImV2ZW50TmFtZSIsImlzQ3ljbGluZyIsImRpcmVjdGlvbmFsQ2xhc3NOYW1lIiwib3JkZXJDbGFzc05hbWUiLCJjb21wbGV0ZUNhbGxCYWNrIiwiY2Fyb3VzZWwiLCJzbGlkZUluZGV4IiwiY2Fyb3VzZWxzIiwidG9nZ2xlTGlzdCIsImZpbHRlckVsZW1lbnQiLCJmb3VuZEVsZW1lbnQiLCJhY3RpdmVDaGlsZHJlbiIsImFjdGl2ZUluc3RhbmNlIiwic2Nyb2xsU2l6ZSIsInRyaWdnZXIiLCJjaGlsZHJlbiIsInRyaWdnZXJBcnJheSIsImlzT3BlbiIsInJlZmVyZW5jZUVsZW1lbnQiLCJwb3BwZXJDb25maWciLCJQb3BwZXIuY3JlYXRlUG9wcGVyIiwicGFyZW50RHJvcGRvd24iLCJpc0VuZCIsInBvcHBlckRhdGEiLCJkZWZhdWx0QnNQb3BwZXJDb25maWciLCJvcGVuVG9nZ2xlcyIsImNvbXBvc2VkUGF0aCIsImlzTWVudVRhcmdldCIsImlzSW5wdXQiLCJpc0VzY2FwZUV2ZW50IiwiaXNVcE9yRG93bkV2ZW50IiwiZ2V0VG9nZ2xlQnV0dG9uIiwiY29tcGxldGVDYWxsYmFjayIsImNsaWNrQ2FsbGJhY2siLCJhbGxvd2VkQXR0cmlidXRlTGlzdCIsImF0dHJpYnV0ZU5hbWUiLCJhdHRyaWJ1dGVSZWdleCIsInVuc2FmZUh0bWwiLCJhbGxvd0xpc3QiLCJzYW5pdGl6ZUZ1bmN0aW9uIiwiY3JlYXRlZERvY3VtZW50IiwiZWxlbWVudE5hbWUiLCJhdHRyaWJ1dGVMaXN0IiwiYWxsb3dlZEF0dHJpYnV0ZXMiLCJ0ZW1wbGF0ZVdyYXBwZXIiLCJleHRyYUNsYXNzIiwidGVtcGxhdGVFbGVtZW50IiwiaXNJblRoZURvbSIsInRpcCIsInRpcElkIiwiYXR0YWNobWVudCIsInRyaWdnZXJzIiwiZXZlbnRJbiIsImV2ZW50T3V0IiwidGl0bGUiLCJkYXRhQXR0cmlidXRlcyIsImRhdGFBdHRyaWJ1dGUiLCJzZWN0aW9uIiwib2JzZXJ2YWJsZVNlY3Rpb24iLCJ0YXJnZXRFbGVtZW50IiwiZW50cnkiLCJhY3RpdmF0ZSIsInBhcmVudFNjcm9sbFRvcCIsInVzZXJTY3JvbGxzRG93biIsImVudHJ5SXNMb3dlclRoYW5QcmV2aW91cyIsInRhcmdldExpbmtzIiwiYW5jaG9yIiwibGlzdEdyb3VwIiwiYWN0aXZlTm9kZXMiLCJzcHkiLCJpbm5lckVsZW0iLCJhY3RpdmUiLCJoaWRlRXZlbnQiLCJyZWxhdGVkRWxlbSIsIm5leHRBY3RpdmVFbGVtZW50IiwiaXNBY3RpdmUiLCJvdXRlckVsZW0iLCJvcGVuIiwiaXNJbnRlcmFjdGluZyIsImxvb2tVcEZpZWxkIiwidGFyZ2V0UmVjb3JkcyIsInIiLCJkaWFsb2ciLCJtb2RhbEhUTUwiLCJldiIsImRpYWxvZ0JvZHkiLCJodG1scm93IiwibG9va1VwRmllbGRzIiwiZXZlbnRJZCIsImZsb3ciLCJuZXh0QWN0aW9uIiwiYWN0aW9uIiwibmV4dElucHV0IiwiZGlzcGxheU5hbWUiLCJwbGFjZWhvbGRlciIsIm1vZGVsVmFsdWUiLCJpbnB1dFBvaW50Iiwib3V0cHV0UG9pbnRzIiwiYWN0aW9uUHJvcHMiLCJkZWZQcm9wIiwicHJvcFZhbHVlIiwic3ViVGl0bGUiLCJhY3Rpb25Ob2RlcyIsIm5leHROb2RlSWRzIiwicGFyc2VkT2JqZWN0Iiwibm9kZUNsYXNzIiwiYWN0aW9uRmxvdyIsImdldENoYW5nZUV2ZW50cyIsImdldENsaWNrRXZlbnRzIiwiZ2V0S2ludG9uZUV2ZW50cyIsImNoYW5nZUV2ZW50cyIsImNsaWNrRXZlbnRzIiwia2ludG9uZUV2ZW50cyIsImZsb3dpbmZvIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7aUJBVUUsU0FBVUEsRUFBUUMsRUFBVSxDQWE1QkMsRUFBQSxRQUFpQkYsRUFBTyxTQUN2QkMsRUFBU0QsRUFBUSxFQUFNLEVBQ3ZCLFNBQVVHLEVBQUksQ0FDYixHQUFLLENBQUNBLEVBQUUsU0FDUCxNQUFNLElBQUksTUFB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LE1BQU0sTUFBTSxLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU0sTUFBTSxNQUFNLE1BQU0sRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTSxNQUFNLEVBQUUsYUFBYSxDQUFDLE9BQU8sTUFBTSxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTSxF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QUFLL2pELENBQUssRUFDL0MsS0FBSyxFQUVSQSxDQUFBLENBQ1IsRUFFQXFsRCxFQUFZLE9BQU8sR0FDUkEsRUFBQSxRQUFTL0csR0FBbUIsQ0FDdEMsRUFBRSxRQUFRLEVBQUUsR0FBR0EsRUFBVSxTQUFVLENBQ2pDLE1BQU10K0MsRUFBTSxRQUFRLElBQUksT0FBTyxJQUFJLEVBQzdCdWxELEVBQVcsUUFBUWpILENBQVMsRUFDNUJ5RixFQUFLLFdBQVcsU0FBU3dCLEVBQVMsT0FBTyxFQUM1Q3hCLElBQU8sUUFFUixNQURnQixJQUFJLGNBQWN6RixFQUFVeUYsRUFBSy9qRCxDQUFLLEVBQ3hDLE9BRWhCLE1BQU1zVSxFQUFTdFUsRUFBTSxPQUNyQixRQUFRLElBQUksT0FBTyxJQUFJLENBQUMsT0FBQXNVLENBQU8sQ0FBQSxDQUFBLENBQ2hDLENBQUEsQ0FDRixDQUVQLENBQUMiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxMjcsMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0N119
|