hochzeit/dist/index.bundle.js
2022-07-15 21:31:09 +02:00

55 lines
3.3 MiB
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

!function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=161)}([function(e,t,n){var i;
/*!
* jQuery JavaScript Library v3.6.0
* https://jquery.com/
*
* Includes Sizzle.js
* https://sizzlejs.com/
*
* Copyright OpenJS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2021-03-02T17:08Z
*/!function(t,n){"use strict";"object"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:this,(function(n,r){"use strict";var o=[],a=Object.getPrototypeOf,s=o.slice,l=o.flat?function(e){return o.flat.call(e)}:function(e){return o.concat.apply([],e)},u=o.push,c=o.indexOf,d={},f=d.toString,h=d.hasOwnProperty,p=h.toString,m=p.call(Object),g={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},b=n.document,w={type:!0,src:!0,nonce:!0,noModule:!0};function k(e,t,n){var i,r,o=(n=n||b).createElement("script");if(o.text=e,t)for(i in w)(r=t[i]||t.getAttribute&&t.getAttribute(i))&&o.setAttribute(i,r);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?d[f.call(e)]||"object":typeof e}var _=function(e,t){return new _.fn.init(e,t)};function C(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}_.fn=_.prototype={jquery:"3.6.0",constructor:_,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=_.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return _.each(this,e)},map:function(e){return this.pushStack(_.map(this,(function(t,n){return e.call(t,n,t)})))},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(_.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(_.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:o.sort,splice:o.splice},_.extend=_.fn.extend=function(){var e,t,n,i,r,o,a=arguments[0]||{},s=1,l=arguments.length,u=!1;for("boolean"==typeof a&&(u=a,a=arguments[s]||{},s++),"object"==typeof a||v(a)||(a={}),s===l&&(a=this,s--);s<l;s++)if(null!=(e=arguments[s]))for(t in e)i=e[t],"__proto__"!==t&&a!==i&&(u&&i&&(_.isPlainObject(i)||(r=Array.isArray(i)))?(n=a[t],o=r&&!Array.isArray(n)?[]:r||_.isPlainObject(n)?n:{},r=!1,a[t]=_.extend(u,o,i)):void 0!==i&&(a[t]=i));return a},_.extend({expando:"jQuery"+("3.6.0"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==f.call(e))&&(!(t=a(e))||"function"==typeof(n=h.call(t,"constructor")&&t.constructor)&&p.call(n)===m)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){k(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,i=0;if(C(e))for(n=e.length;i<n&&!1!==t.call(e[i],i,e[i]);i++);else for(i in e)if(!1===t.call(e[i],i,e[i]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?_.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:c.call(t,e,n)},merge:function(e,t){for(var n=+t.length,i=0,r=e.length;i<n;i++)e[r++]=t[i];return e.length=r,e},grep:function(e,t,n){for(var i=[],r=0,o=e.length,a=!n;r<o;r++)!t(e[r],r)!==a&&i.push(e[r]);return i},map:function(e,t,n){var i,r,o=0,a=[];if(C(e))for(i=e.length;o<i;o++)null!=(r=t(e[o],o,n))&&a.push(r);else for(o in e)null!=(r=t(e[o],o,n))&&a.push(r);return l(a)},guid:1,support:g}),"function"==typeof Symbol&&(_.fn[Symbol.iterator]=o[Symbol.iterator]),_.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),(function(e,t){d["[object "+t+"]"]=t.toLowerCase()}));var E=
/*!
* Sizzle CSS Selector Engine v2.3.6
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://js.foundation/
*
* Date: 2021-02-16
*/
function(e){var t,n,i,r,o,a,s,l,u,c,d,f,h,p,m,g,v,y,b,w="sizzle"+1*new Date,k=e.document,x=0,_=0,C=le(),E=le(),S=le(),T=le(),O=function(e,t){return e===t&&(d=!0),0},z={}.hasOwnProperty,P=[],$=P.pop,A=P.push,M=P.push,L=P.slice,N=function(e,t){for(var n=0,i=e.length;n<i;n++)if(e[n]===t)return n;return-1},I="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",D="[\\x20\\t\\r\\n\\f]",j="(?:\\\\[\\da-fA-F]{1,6}"+D+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",R="\\["+D+"*("+j+")(?:"+D+"*([*^$|!~]?=)"+D+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+j+"))|)"+D+"*\\]",F=":("+j+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+R+")*)|.*)\\)|)",H=new RegExp(D+"+","g"),B=new RegExp("^"+D+"+|((?:^|[^\\\\])(?:\\\\.)*)"+D+"+$","g"),q=new RegExp("^"+D+"*,"+D+"*"),W=new RegExp("^"+D+"*([>+~]|"+D+")"+D+"*"),V=new RegExp(D+"|>"),U=new RegExp(F),G=new RegExp("^"+j+"$"),Q={ID:new RegExp("^#("+j+")"),CLASS:new RegExp("^\\.("+j+")"),TAG:new RegExp("^("+j+"|[*])"),ATTR:new RegExp("^"+R),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+D+"*(even|odd|(([+-]|)(\\d*)n|)"+D+"*(?:([+-]|)"+D+"*(\\d+)|))"+D+"*\\)|)","i"),bool:new RegExp("^(?:"+I+")$","i"),needsContext:new RegExp("^"+D+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+D+"*((?:-\\d)?\\d*)"+D+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,K=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+D+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},ie=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,re=function(e,t){return t?"\0"===e?"<22>":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){f()},ae=we((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{M.apply(P=L.call(k.childNodes),k.childNodes),P[k.childNodes.length].nodeType}catch(e){M={apply:P.length?function(e,t){A.apply(e,L.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}function se(e,t,i,r){var o,s,u,c,d,p,v,y=t&&t.ownerDocument,k=t?t.nodeType:9;if(i=i||[],"string"!=typeof e||!e||1!==k&&9!==k&&11!==k)return i;if(!r&&(f(t),t=t||h,m)){if(11!==k&&(d=J.exec(e)))if(o=d[1]){if(9===k){if(!(u=t.getElementById(o)))return i;if(u.id===o)return i.push(u),i}else if(y&&(u=y.getElementById(o))&&b(t,u)&&u.id===o)return i.push(u),i}else{if(d[2])return M.apply(i,t.getElementsByTagName(e)),i;if((o=d[3])&&n.getElementsByClassName&&t.getElementsByClassName)return M.apply(i,t.getElementsByClassName(o)),i}if(n.qsa&&!T[e+" "]&&(!g||!g.test(e))&&(1!==k||"object"!==t.nodeName.toLowerCase())){if(v=e,y=t,1===k&&(V.test(e)||W.test(e))){for((y=ee.test(e)&&ve(t.parentNode)||t)===t&&n.scope||((c=t.getAttribute("id"))?c=c.replace(ie,re):t.setAttribute("id",c=w)),s=(p=a(e)).length;s--;)p[s]=(c?"#"+c:":scope")+" "+be(p[s]);v=p.join(",")}try{return M.apply(i,y.querySelectorAll(v)),i}catch(t){T(e,!0)}finally{c===w&&t.removeAttribute("id")}}}return l(e.replace(B,"$1"),t,i,r)}function le(){var e=[];return function t(n,r){return e.push(n+" ")>i.cacheLength&&delete t[e.shift()],t[n+" "]=r}}function ue(e){return e[w]=!0,e}function ce(e){var t=h.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function de(e,t){for(var n=e.split("|"),r=n.length;r--;)i.attrHandle[n[r]]=t}function fe(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function he(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function me(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ae(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function ge(e){return ue((function(t){return t=+t,ue((function(n,i){for(var r,o=e([],n.length,t),a=o.length;a--;)n[r=o[a]]&&(n[r]=!(i[r]=n[r]))}))}))}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=se.support={},o=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},f=se.setDocument=function(e){var t,r,a=e?e.ownerDocument||e:k;return a!=h&&9===a.nodeType&&a.documentElement?(p=(h=a).documentElement,m=!o(h),k!=h&&(r=h.defaultView)&&r.top!==r&&(r.addEventListener?r.addEventListener("unload",oe,!1):r.attachEvent&&r.attachEvent("onunload",oe)),n.scope=ce((function(e){return p.appendChild(e).appendChild(h.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),n.attributes=ce((function(e){return e.className="i",!e.getAttribute("className")})),n.getElementsByTagName=ce((function(e){return e.appendChild(h.createComment("")),!e.getElementsByTagName("*").length})),n.getElementsByClassName=Z.test(h.getElementsByClassName),n.getById=ce((function(e){return p.appendChild(e).id=w,!h.getElementsByName||!h.getElementsByName(w).length})),n.getById?(i.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},i.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n=t.getElementById(e);return n?[n]:[]}}):(i.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},i.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n,i,r,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(r=t.getElementsByName(e),i=0;o=r[i++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),i.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[r++];)1===n.nodeType&&i.push(n);return i}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&m)return t.getElementsByClassName(e)},v=[],g=[],(n.qsa=Z.test(h.querySelectorAll))&&(ce((function(e){var t;p.appendChild(e).innerHTML="<a id='"+w+"'></a><select id='"+w+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+D+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+D+"*(?:value|"+I+")"),e.querySelectorAll("[id~="+w+"-]").length||g.push("~="),(t=h.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||g.push("\\["+D+"*name"+D+"*="+D+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+w+"+*").length||g.push(".#.+[+~]"),e.querySelectorAll("\\\f"),g.push("[\\r\\n\\f]")})),ce((function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=h.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+D+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),p.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")}))),(n.matchesSelector=Z.test(y=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&ce((function(e){n.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),v.push("!=",F)})),g=g.length&&new RegExp(g.join("|")),v=v.length&&new RegExp(v.join("|")),t=Z.test(p.compareDocumentPosition),b=t||Z.test(p.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},O=t?function(e,t){if(e===t)return d=!0,0;var i=!e.compareDocumentPosition-!t.compareDocumentPosition;return i||(1&(i=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===i?e==h||e.ownerDocument==k&&b(k,e)?-1:t==h||t.ownerDocument==k&&b(k,t)?1:c?N(c,e)-N(c,t):0:4&i?-1:1)}:function(e,t){if(e===t)return d=!0,0;var n,i=0,r=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!r||!o)return e==h?-1:t==h?1:r?-1:o?1:c?N(c,e)-N(c,t):0;if(r===o)return fe(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[i]===s[i];)i++;return i?fe(a[i],s[i]):a[i]==k?-1:s[i]==k?1:0},h):h},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(f(e),n.matchesSelector&&m&&!T[t+" "]&&(!v||!v.test(t))&&(!g||!g.test(t)))try{var i=y.call(e,t);if(i||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){T(t,!0)}return se(t,h,null,[e]).length>0},se.contains=function(e,t){return(e.ownerDocument||e)!=h&&f(e),b(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=h&&f(e);var r=i.attrHandle[t.toLowerCase()],o=r&&z.call(i.attrHandle,t.toLowerCase())?r(e,t,!m):void 0;return void 0!==o?o:n.attributes||!m?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},se.escape=function(e){return(e+"").replace(ie,re)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,i=[],r=0,o=0;if(d=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(O),d){for(;t=e[o++];)t===e[o]&&(r=i.push(o));for(;r--;)e.splice(i[r],1)}return c=null,e},r=se.getText=function(e){var t,n="",i=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=r(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[i++];)n+=r(t);return n},(i=se.selectors={cacheLength:50,createPseudo:ue,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&U.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=new RegExp("(^|"+D+")"+e+"("+D+"|$)"))&&C(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(i){var r=se.attr(i,e);return null==r?"!="===t:!t||(r+="","="===t?r===n:"!="===t?r!==n:"^="===t?n&&0===r.indexOf(n):"*="===t?n&&r.indexOf(n)>-1:"$="===t?n&&r.slice(-n.length)===n:"~="===t?(" "+r.replace(H," ")+" ").indexOf(n)>-1:"|="===t&&(r===n||r.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,i,r){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===i&&0===r?function(e){return!!e.parentNode}:function(t,n,l){var u,c,d,f,h,p,m=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s,b=!1;if(g){if(o){for(;m;){for(f=t;f=f[m];)if(s?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[a?g.firstChild:g.lastChild],a&&y){for(b=(h=(u=(c=(d=(f=g)[w]||(f[w]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]||[])[0]===x&&u[1])&&u[2],f=h&&g.childNodes[h];f=++h&&f&&f[m]||(b=h=0)||p.pop();)if(1===f.nodeType&&++b&&f===t){c[e]=[x,h,b];break}}else if(y&&(b=h=(u=(c=(d=(f=t)[w]||(f[w]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]||[])[0]===x&&u[1]),!1===b)for(;(f=++h&&f&&f[m]||(b=h=0)||p.pop())&&((s?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++b||(y&&((c=(d=f[w]||(f[w]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]=[x,b]),f!==t)););return(b-=r)===i||b%i==0&&b/i>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return r[w]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ue((function(e,n){for(var i,o=r(e,t),a=o.length;a--;)e[i=N(e,o[a])]=!(n[i]=o[a])})):function(e){return r(e,0,n)}):r}},pseudos:{not:ue((function(e){var t=[],n=[],i=s(e.replace(B,"$1"));return i[w]?ue((function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))})):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}})),has:ue((function(e){return function(t){return se(e,t).length>0}})),contains:ue((function(e){return e=e.replace(te,ne),function(t){return(t.textContent||r(t)).indexOf(e)>-1}})),lang:ue((function(e){return G.test(e||"")||se.error("unsupported lang: "+e),e=e.replace(te,ne).toLowerCase(),function(t){var n;do{if(n=m?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===p},focus:function(e){return e===h.activeElement&&(!h.hasFocus||h.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:me(!1),disabled:me(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return X.test(e.nodeName)},input:function(e){return K.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ge((function(){return[0]})),last:ge((function(e,t){return[t-1]})),eq:ge((function(e,t,n){return[n<0?n+t:n]})),even:ge((function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e})),odd:ge((function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e})),lt:ge((function(e,t,n){for(var i=n<0?n+t:n>t?t:n;--i>=0;)e.push(i);return e})),gt:ge((function(e,t,n){for(var i=n<0?n+t:n;++i<t;)e.push(i);return e}))}}).pseudos.nth=i.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[t]=he(t);for(t in{submit:!0,reset:!0})i.pseudos[t]=pe(t);function ye(){}function be(e){for(var t=0,n=e.length,i="";t<n;t++)i+=e[t].value;return i}function we(e,t,n){var i=t.dir,r=t.next,o=r||i,a=n&&"parentNode"===o,s=_++;return t.first?function(t,n,r){for(;t=t[i];)if(1===t.nodeType||a)return e(t,n,r);return!1}:function(t,n,l){var u,c,d,f=[x,s];if(l){for(;t=t[i];)if((1===t.nodeType||a)&&e(t,n,l))return!0}else for(;t=t[i];)if(1===t.nodeType||a)if(c=(d=t[w]||(t[w]={}))[t.uniqueID]||(d[t.uniqueID]={}),r&&r===t.nodeName.toLowerCase())t=t[i]||t;else{if((u=c[o])&&u[0]===x&&u[1]===s)return f[2]=u[2];if(c[o]=f,f[2]=e(t,n,l))return!0}return!1}}function ke(e){return e.length>1?function(t,n,i){for(var r=e.length;r--;)if(!e[r](t,n,i))return!1;return!0}:e[0]}function xe(e,t,n,i,r){for(var o,a=[],s=0,l=e.length,u=null!=t;s<l;s++)(o=e[s])&&(n&&!n(o,i,r)||(a.push(o),u&&t.push(s)));return a}function _e(e,t,n,i,r,o){return i&&!i[w]&&(i=_e(i)),r&&!r[w]&&(r=_e(r,o)),ue((function(o,a,s,l){var u,c,d,f=[],h=[],p=a.length,m=o||function(e,t,n){for(var i=0,r=t.length;i<r;i++)se(e,t[i],n);return n}(t||"*",s.nodeType?[s]:s,[]),g=!e||!o&&t?m:xe(m,f,e,s,l),v=n?r||(o?e:p||i)?[]:a:g;if(n&&n(g,v,s,l),i)for(u=xe(v,h),i(u,[],s,l),c=u.length;c--;)(d=u[c])&&(v[h[c]]=!(g[h[c]]=d));if(o){if(r||e){if(r){for(u=[],c=v.length;c--;)(d=v[c])&&u.push(g[c]=d);r(null,v=[],u,l)}for(c=v.length;c--;)(d=v[c])&&(u=r?N(o,d):f[c])>-1&&(o[u]=!(a[u]=d))}}else v=xe(v===a?v.splice(p,v.length):v),r?r(null,a,v,l):M.apply(a,v)}))}function Ce(e){for(var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],l=a?1:0,c=we((function(e){return e===t}),s,!0),d=we((function(e){return N(t,e)>-1}),s,!0),f=[function(e,n,i){var r=!a&&(i||n!==u)||((t=n).nodeType?c(e,n,i):d(e,n,i));return t=null,r}];l<o;l++)if(n=i.relative[e[l].type])f=[we(ke(f),n)];else{if((n=i.filter[e[l].type].apply(null,e[l].matches))[w]){for(r=++l;r<o&&!i.relative[e[r].type];r++);return _e(l>1&&ke(f),l>1&&be(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(B,"$1"),n,l<r&&Ce(e.slice(l,r)),r<o&&Ce(e=e.slice(r)),r<o&&be(e))}f.push(n)}return ke(f)}return ye.prototype=i.filters=i.pseudos,i.setFilters=new ye,a=se.tokenize=function(e,t){var n,r,o,a,s,l,u,c=E[e+" "];if(c)return t?0:c.slice(0);for(s=e,l=[],u=i.preFilter;s;){for(a in n&&!(r=q.exec(s))||(r&&(s=s.slice(r[0].length)||s),l.push(o=[])),n=!1,(r=W.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(B," ")}),s=s.slice(n.length)),i.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?se.error(e):E(e,l).slice(0)},s=se.compile=function(e,t){var n,r=[],o=[],s=S[e+" "];if(!s){for(t||(t=a(e)),n=t.length;n--;)(s=Ce(t[n]))[w]?r.push(s):o.push(s);(s=S(e,function(e,t){var n=t.length>0,r=e.length>0,o=function(o,a,s,l,c){var d,p,g,v=0,y="0",b=o&&[],w=[],k=u,_=o||r&&i.find.TAG("*",c),C=x+=null==k?1:Math.random()||.1,E=_.length;for(c&&(u=a==h||a||c);y!==E&&null!=(d=_[y]);y++){if(r&&d){for(p=0,a||d.ownerDocument==h||(f(d),s=!m);g=e[p++];)if(g(d,a||h,s)){l.push(d);break}c&&(x=C)}n&&((d=!g&&d)&&v--,o&&b.push(d))}if(v+=y,n&&y!==v){for(p=0;g=t[p++];)g(b,w,a,s);if(o){if(v>0)for(;y--;)b[y]||w[y]||(w[y]=$.call(l));w=xe(w)}M.apply(l,w),c&&!o&&w.length>0&&v+t.length>1&&se.uniqueSort(l)}return c&&(x=C,u=k),b};return n?ue(o):o}(o,r))).selector=e}return s},l=se.select=function(e,t,n,r){var o,l,u,c,d,f="function"==typeof e&&e,h=!r&&a(e=f.selector||e);if(n=n||[],1===h.length){if((l=h[0]=h[0].slice(0)).length>2&&"ID"===(u=l[0]).type&&9===t.nodeType&&m&&i.relative[l[1].type]){if(!(t=(i.find.ID(u.matches[0].replace(te,ne),t)||[])[0]))return n;f&&(t=t.parentNode),e=e.slice(l.shift().value.length)}for(o=Q.needsContext.test(e)?0:l.length;o--&&(u=l[o],!i.relative[c=u.type]);)if((d=i.find[c])&&(r=d(u.matches[0].replace(te,ne),ee.test(l[0].type)&&ve(t.parentNode)||t))){if(l.splice(o,1),!(e=r.length&&be(l)))return M.apply(n,r),n;break}}return(f||s(e,h))(r,t,!m,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},n.sortStable=w.split("").sort(O).join("")===w,n.detectDuplicates=!!d,f(),n.sortDetached=ce((function(e){return 1&e.compareDocumentPosition(h.createElement("fieldset"))})),ce((function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")}))||de("type|href|height|width",(function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),n.attributes&&ce((function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||de("value",(function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),ce((function(e){return null==e.getAttribute("disabled")}))||de(I,(function(e,t,n){var i;if(!n)return!0===e[t]?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null})),se}(n);_.find=E,_.expr=E.selectors,_.expr[":"]=_.expr.pseudos,_.uniqueSort=_.unique=E.uniqueSort,_.text=E.getText,_.isXMLDoc=E.isXML,_.contains=E.contains,_.escapeSelector=E.escape;var S=function(e,t,n){for(var i=[],r=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(r&&_(e).is(n))break;i.push(e)}return i},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},O=_.expr.match.needsContext;function z(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var P=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function $(e,t,n){return v(t)?_.grep(e,(function(e,i){return!!t.call(e,i,e)!==n})):t.nodeType?_.grep(e,(function(e){return e===t!==n})):"string"!=typeof t?_.grep(e,(function(e){return c.call(t,e)>-1!==n})):_.filter(t,e,n)}_.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?_.find.matchesSelector(i,e)?[i]:[]:_.find.matches(e,_.grep(t,(function(e){return 1===e.nodeType})))},_.fn.extend({find:function(e){var t,n,i=this.length,r=this;if("string"!=typeof e)return this.pushStack(_(e).filter((function(){for(t=0;t<i;t++)if(_.contains(r[t],this))return!0})));for(n=this.pushStack([]),t=0;t<i;t++)_.find(e,r[t],n);return i>1?_.uniqueSort(n):n},filter:function(e){return this.pushStack($(this,e||[],!1))},not:function(e){return this.pushStack($(this,e||[],!0))},is:function(e){return!!$(this,"string"==typeof e&&O.test(e)?_(e):e||[],!1).length}});var A,M=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(_.fn.init=function(e,t,n){var i,r;if(!e)return this;if(n=n||A,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:M.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof _?t[0]:t,_.merge(this,_.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:b,!0)),P.test(i[1])&&_.isPlainObject(t))for(i in t)v(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(r=b.getElementById(i[2]))&&(this[0]=r,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(_):_.makeArray(e,this)}).prototype=_.fn,A=_(b);var L=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function I(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}_.fn.extend({has:function(e){var t=_(e,this),n=t.length;return this.filter((function(){for(var e=0;e<n;e++)if(_.contains(this,t[e]))return!0}))},closest:function(e,t){var n,i=0,r=this.length,o=[],a="string"!=typeof e&&_(e);if(!O.test(e))for(;i<r;i++)for(n=this[i];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&_.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?_.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?c.call(_(e),this[0]):c.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(_.uniqueSort(_.merge(this.get(),_(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),_.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return S(e,"parentNode")},parentsUntil:function(e,t,n){return S(e,"parentNode",n)},next:function(e){return I(e,"nextSibling")},prev:function(e){return I(e,"previousSibling")},nextAll:function(e){return S(e,"nextSibling")},prevAll:function(e){return S(e,"previousSibling")},nextUntil:function(e,t,n){return S(e,"nextSibling",n)},prevUntil:function(e,t,n){return S(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&a(e.contentDocument)?e.contentDocument:(z(e,"template")&&(e=e.content||e),_.merge([],e.childNodes))}},(function(e,t){_.fn[e]=function(n,i){var r=_.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(r=_.filter(i,r)),this.length>1&&(N[e]||_.uniqueSort(r),L.test(e)&&r.reverse()),this.pushStack(r)}}));var D=/[^\x20\t\r\n\f]+/g;function j(e){return e}function R(e){throw e}function F(e,t,n,i){var r;try{e&&v(r=e.promise)?r.call(e).done(t).fail(n):e&&v(r=e.then)?r.call(e,t,n):t.apply(void 0,[e].slice(i))}catch(e){n.apply(void 0,[e])}}_.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return _.each(e.match(D)||[],(function(e,n){t[n]=!0})),t}(e):_.extend({},e);var t,n,i,r,o=[],a=[],s=-1,l=function(){for(r=r||e.once,i=t=!0;a.length;s=-1)for(n=a.shift();++s<o.length;)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1);e.memory||(n=!1),t=!1,r&&(o=n?[]:"")},u={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){_.each(n,(function(n,i){v(i)?e.unique&&u.has(i)||o.push(i):i&&i.length&&"string"!==x(i)&&t(i)}))}(arguments),n&&!t&&l()),this},remove:function(){return _.each(arguments,(function(e,t){for(var n;(n=_.inArray(t,o,n))>-1;)o.splice(n,1),n<=s&&s--})),this},has:function(e){return e?_.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return r=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return r=a=[],n||t||(o=n=""),this},locked:function(){return!!r},fireWith:function(e,n){return r||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||l()),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!i}};return u},_.extend({Deferred:function(e){var t=[["notify","progress",_.Callbacks("memory"),_.Callbacks("memory"),2],["resolve","done",_.Callbacks("once memory"),_.Callbacks("once memory"),0,"resolved"],["reject","fail",_.Callbacks("once memory"),_.Callbacks("once memory"),1,"rejected"]],i="pending",r={state:function(){return i},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return r.then(null,e)},pipe:function(){var e=arguments;return _.Deferred((function(n){_.each(t,(function(t,i){var r=v(e[i[4]])&&e[i[4]];o[i[1]]((function(){var e=r&&r.apply(this,arguments);e&&v(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[i[0]+"With"](this,r?[e]:arguments)}))})),e=null})).promise()},then:function(e,i,r){var o=0;function a(e,t,i,r){return function(){var s=this,l=arguments,u=function(){var n,u;if(!(e<o)){if((n=i.apply(s,l))===t.promise())throw new TypeError("Thenable self-resolution");u=n&&("object"==typeof n||"function"==typeof n)&&n.then,v(u)?r?u.call(n,a(o,t,j,r),a(o,t,R,r)):(o++,u.call(n,a(o,t,j,r),a(o,t,R,r),a(o,t,j,t.notifyWith))):(i!==j&&(s=void 0,l=[n]),(r||t.resolveWith)(s,l))}},c=r?u:function(){try{u()}catch(n){_.Deferred.exceptionHook&&_.Deferred.exceptionHook(n,c.stackTrace),e+1>=o&&(i!==R&&(s=void 0,l=[n]),t.rejectWith(s,l))}};e?c():(_.Deferred.getStackHook&&(c.stackTrace=_.Deferred.getStackHook()),n.setTimeout(c))}}return _.Deferred((function(n){t[0][3].add(a(0,n,v(r)?r:j,n.notifyWith)),t[1][3].add(a(0,n,v(e)?e:j)),t[2][3].add(a(0,n,v(i)?i:R))})).promise()},promise:function(e){return null!=e?_.extend(e,r):r}},o={};return _.each(t,(function(e,n){var a=n[2],s=n[5];r[n[1]]=a.add,s&&a.add((function(){i=s}),t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),a.add(n[3].fire),o[n[0]]=function(){return o[n[0]+"With"](this===o?void 0:this,arguments),this},o[n[0]+"With"]=a.fireWith})),r.promise(o),e&&e.call(o,o),o},when:function(e){var t=arguments.length,n=t,i=Array(n),r=s.call(arguments),o=_.Deferred(),a=function(e){return function(n){i[e]=this,r[e]=arguments.length>1?s.call(arguments):n,--t||o.resolveWith(i,r)}};if(t<=1&&(F(e,o.done(a(n)).resolve,o.reject,!t),"pending"===o.state()||v(r[n]&&r[n].then)))return o.then();for(;n--;)F(r[n],a(n),o.reject);return o.promise()}});var H=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;_.Deferred.exceptionHook=function(e,t){n.console&&n.console.warn&&e&&H.test(e.name)&&n.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},_.readyException=function(e){n.setTimeout((function(){throw e}))};var B=_.Deferred();function q(){b.removeEventListener("DOMContentLoaded",q),n.removeEventListener("load",q),_.ready()}_.fn.ready=function(e){return B.then(e).catch((function(e){_.readyException(e)})),this},_.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--_.readyWait:_.isReady)||(_.isReady=!0,!0!==e&&--_.readyWait>0||B.resolveWith(b,[_]))}}),_.ready.then=B.then,"complete"===b.readyState||"loading"!==b.readyState&&!b.documentElement.doScroll?n.setTimeout(_.ready):(b.addEventListener("DOMContentLoaded",q),n.addEventListener("load",q));var W=function(e,t,n,i,r,o,a){var s=0,l=e.length,u=null==n;if("object"===x(n))for(s in r=!0,n)W(e,t,s,n[s],!0,o,a);else if(void 0!==i&&(r=!0,v(i)||(a=!0),u&&(a?(t.call(e,i),t=null):(u=t,t=function(e,t,n){return u.call(_(e),n)})),t))for(;s<l;s++)t(e[s],n,a?i:i.call(e[s],s,t(e[s],n)));return r?e:u?t.call(e):l?t(e[0],n):o},V=/^-ms-/,U=/-([a-z])/g;function G(e,t){return t.toUpperCase()}function Q(e){return e.replace(V,"ms-").replace(U,G)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function K(){this.expando=_.expando+K.uid++}K.uid=1,K.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var i,r=this.cache(e);if("string"==typeof t)r[Q(t)]=n;else for(i in t)r[Q(i)]=t[i];return r},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][Q(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,i=e[this.expando];if(void 0!==i){if(void 0!==t){n=(t=Array.isArray(t)?t.map(Q):(t=Q(t))in i?[t]:t.match(D)||[]).length;for(;n--;)delete i[t[n]]}(void 0===t||_.isEmptyObject(i))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!_.isEmptyObject(t)}};var X=new K,Z=new K,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ee=/[A-Z]/g;function te(e,t,n){var i;if(void 0===n&&1===e.nodeType)if(i="data-"+t.replace(ee,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(i))){try{n=function(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:J.test(e)?JSON.parse(e):e)}(n)}catch(e){}Z.set(e,t,n)}else n=void 0;return n}_.extend({hasData:function(e){return Z.hasData(e)||X.hasData(e)},data:function(e,t,n){return Z.access(e,t,n)},removeData:function(e,t){Z.remove(e,t)},_data:function(e,t,n){return X.access(e,t,n)},_removeData:function(e,t){X.remove(e,t)}}),_.fn.extend({data:function(e,t){var n,i,r,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(r=Z.get(o),1===o.nodeType&&!X.get(o,"hasDataAttrs"))){for(n=a.length;n--;)a[n]&&0===(i=a[n].name).indexOf("data-")&&(i=Q(i.slice(5)),te(o,i,r[i]));X.set(o,"hasDataAttrs",!0)}return r}return"object"==typeof e?this.each((function(){Z.set(this,e)})):W(this,(function(t){var n;if(o&&void 0===t)return void 0!==(n=Z.get(o,e))||void 0!==(n=te(o,e))?n:void 0;this.each((function(){Z.set(this,e,t)}))}),null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each((function(){Z.remove(this,e)}))}}),_.extend({queue:function(e,t,n){var i;if(e)return t=(t||"fx")+"queue",i=X.get(e,t),n&&(!i||Array.isArray(n)?i=X.access(e,t,_.makeArray(n)):i.push(n)),i||[]},dequeue:function(e,t){t=t||"fx";var n=_.queue(e,t),i=n.length,r=n.shift(),o=_._queueHooks(e,t);"inprogress"===r&&(r=n.shift(),i--),r&&("fx"===t&&n.unshift("inprogress"),delete o.stop,r.call(e,(function(){_.dequeue(e,t)}),o)),!i&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return X.get(e,n)||X.access(e,n,{empty:_.Callbacks("once memory").add((function(){X.remove(e,[t+"queue",n])}))})}}),_.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?_.queue(this[0],e):void 0===t?this:this.each((function(){var n=_.queue(this,e,t);_._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&_.dequeue(this,e)}))},dequeue:function(e){return this.each((function(){_.dequeue(this,e)}))},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,i=1,r=_.Deferred(),o=this,a=this.length,s=function(){--i||r.resolveWith(o,[o])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";a--;)(n=X.get(o[a],e+"queueHooks"))&&n.empty&&(i++,n.empty.add(s));return s(),r.promise(t)}});var ne=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ie=new RegExp("^(?:([+-])=|)("+ne+")([a-z%]*)$","i"),re=["Top","Right","Bottom","Left"],oe=b.documentElement,ae=function(e){return _.contains(e.ownerDocument,e)},se={composed:!0};oe.getRootNode&&(ae=function(e){return _.contains(e.ownerDocument,e)||e.getRootNode(se)===e.ownerDocument});var le=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ae(e)&&"none"===_.css(e,"display")};function ue(e,t,n,i){var r,o,a=20,s=i?function(){return i.cur()}:function(){return _.css(e,t,"")},l=s(),u=n&&n[3]||(_.cssNumber[t]?"":"px"),c=e.nodeType&&(_.cssNumber[t]||"px"!==u&&+l)&&ie.exec(_.css(e,t));if(c&&c[3]!==u){for(l/=2,u=u||c[3],c=+l||1;a--;)_.style(e,t,c+u),(1-o)*(1-(o=s()/l||.5))<=0&&(a=0),c/=o;c*=2,_.style(e,t,c+u),n=n||[]}return n&&(c=+c||+l||0,r=n[1]?c+(n[1]+1)*n[2]:+n[2],i&&(i.unit=u,i.start=c,i.end=r)),r}var ce={};function de(e){var t,n=e.ownerDocument,i=e.nodeName,r=ce[i];return r||(t=n.body.appendChild(n.createElement(i)),r=_.css(t,"display"),t.parentNode.removeChild(t),"none"===r&&(r="block"),ce[i]=r,r)}function fe(e,t){for(var n,i,r=[],o=0,a=e.length;o<a;o++)(i=e[o]).style&&(n=i.style.display,t?("none"===n&&(r[o]=X.get(i,"display")||null,r[o]||(i.style.display="")),""===i.style.display&&le(i)&&(r[o]=de(i))):"none"!==n&&(r[o]="none",X.set(i,"display",n)));for(o=0;o<a;o++)null!=r[o]&&(e[o].style.display=r[o]);return e}_.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each((function(){le(this)?_(this).show():_(this).hide()}))}});var he,pe,me=/^(?:checkbox|radio)$/i,ge=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,ve=/^$|^module$|\/(?:java|ecma)script/i;he=b.createDocumentFragment().appendChild(b.createElement("div")),(pe=b.createElement("input")).setAttribute("type","radio"),pe.setAttribute("checked","checked"),pe.setAttribute("name","t"),he.appendChild(pe),g.checkClone=he.cloneNode(!0).cloneNode(!0).lastChild.checked,he.innerHTML="<textarea>x</textarea>",g.noCloneChecked=!!he.cloneNode(!0).lastChild.defaultValue,he.innerHTML="<option></option>",g.option=!!he.lastChild;var ye={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,"",""]};function be(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&z(e,t)?_.merge([e],n):n}function we(e,t){for(var n=0,i=e.length;n<i;n++)X.set(e[n],"globalEval",!t||X.get(t[n],"globalEval"))}ye.tbody=ye.tfoot=ye.colgroup=ye.caption=ye.thead,ye.th=ye.td,g.option||(ye.optgroup=ye.option=[1,"<select multiple='multiple'>","</select>"]);var ke=/<|&#?\w+;/;function xe(e,t,n,i,r){for(var o,a,s,l,u,c,d=t.createDocumentFragment(),f=[],h=0,p=e.length;h<p;h++)if((o=e[h])||0===o)if("object"===x(o))_.merge(f,o.nodeType?[o]:o);else if(ke.test(o)){for(a=a||d.appendChild(t.createElement("div")),s=(ge.exec(o)||["",""])[1].toLowerCase(),l=ye[s]||ye._default,a.innerHTML=l[1]+_.htmlPrefilter(o)+l[2],c=l[0];c--;)a=a.lastChild;_.merge(f,a.childNodes),(a=d.firstChild).textContent=""}else f.push(t.createTextNode(o));for(d.textContent="",h=0;o=f[h++];)if(i&&_.inArray(o,i)>-1)r&&r.push(o);else if(u=ae(o),a=be(d.appendChild(o),"script"),u&&we(a),n)for(c=0;o=a[c++];)ve.test(o.type||"")&&n.push(o);return d}var _e=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return b.activeElement}catch(e){}}()==("focus"===t)}function Te(e,t,n,i,r,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(i=i||n,n=void 0),t)Te(e,s,n,i,t[s],o);return e}if(null==i&&null==r?(r=n,i=n=void 0):null==r&&("string"==typeof n?(r=i,i=void 0):(r=i,i=n,n=void 0)),!1===r)r=Ee;else if(!r)return e;return 1===o&&(a=r,(r=function(e){return _().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=_.guid++)),e.each((function(){_.event.add(this,t,r,i,n)}))}function Oe(e,t,n){n?(X.set(e,t,!1),_.event.add(e,t,{namespace:!1,handler:function(e){var i,r,o=X.get(this,t);if(1&e.isTrigger&&this[t]){if(o.length)(_.event.special[t]||{}).delegateType&&e.stopPropagation();else if(o=s.call(arguments),X.set(this,t,o),i=n(this,t),this[t](),o!==(r=X.get(this,t))||i?X.set(this,t,!1):r={},o!==r)return e.stopImmediatePropagation(),e.preventDefault(),r&&r.value}else o.length&&(X.set(this,t,{value:_.event.trigger(_.extend(o[0],_.Event.prototype),o.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===X.get(e,t)&&_.event.add(e,t,Ce)}_.event={global:{},add:function(e,t,n,i,r){var o,a,s,l,u,c,d,f,h,p,m,g=X.get(e);if(Y(e))for(n.handler&&(n=(o=n).handler,r=o.selector),r&&_.find.matchesSelector(oe,r),n.guid||(n.guid=_.guid++),(l=g.events)||(l=g.events=Object.create(null)),(a=g.handle)||(a=g.handle=function(t){return void 0!==_&&_.event.triggered!==t.type?_.event.dispatch.apply(e,arguments):void 0}),u=(t=(t||"").match(D)||[""]).length;u--;)h=m=(s=_e.exec(t[u])||[])[1],p=(s[2]||"").split(".").sort(),h&&(d=_.event.special[h]||{},h=(r?d.delegateType:d.bindType)||h,d=_.event.special[h]||{},c=_.extend({type:h,origType:m,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&_.expr.match.needsContext.test(r),namespace:p.join(".")},o),(f=l[h])||((f=l[h]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(e,i,p,a)||e.addEventListener&&e.addEventListener(h,a)),d.add&&(d.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),r?f.splice(f.delegateCount++,0,c):f.push(c),_.event.global[h]=!0)},remove:function(e,t,n,i,r){var o,a,s,l,u,c,d,f,h,p,m,g=X.hasData(e)&&X.get(e);if(g&&(l=g.events)){for(u=(t=(t||"").match(D)||[""]).length;u--;)if(h=m=(s=_e.exec(t[u])||[])[1],p=(s[2]||"").split(".").sort(),h){for(d=_.event.special[h]||{},f=l[h=(i?d.delegateType:d.bindType)||h]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=f.length;o--;)c=f[o],!r&&m!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||i&&i!==c.selector&&("**"!==i||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,d.remove&&d.remove.call(e,c));a&&!f.length&&(d.teardown&&!1!==d.teardown.call(e,p,g.handle)||_.removeEvent(e,h,g.handle),delete l[h])}else for(h in l)_.event.remove(e,h+t[u],n,i,!0);_.isEmptyObject(l)&&X.remove(e,"handle events")}},dispatch:function(e){var t,n,i,r,o,a,s=new Array(arguments.length),l=_.event.fix(e),u=(X.get(this,"events")||Object.create(null))[l.type]||[],c=_.event.special[l.type]||{};for(s[0]=l,t=1;t<arguments.length;t++)s[t]=arguments[t];if(l.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,l)){for(a=_.event.handlers.call(this,l,u),t=0;(r=a[t++])&&!l.isPropagationStopped();)for(l.currentTarget=r.elem,n=0;(o=r.handlers[n++])&&!l.isImmediatePropagationStopped();)l.rnamespace&&!1!==o.namespace&&!l.rnamespace.test(o.namespace)||(l.handleObj=o,l.data=o.data,void 0!==(i=((_.event.special[o.origType]||{}).handle||o.handler).apply(r.elem,s))&&!1===(l.result=i)&&(l.preventDefault(),l.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,l),l.result}},handlers:function(e,t){var n,i,r,o,a,s=[],l=t.delegateCount,u=e.target;if(l&&u.nodeType&&!("click"===e.type&&e.button>=1))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&("click"!==e.type||!0!==u.disabled)){for(o=[],a={},n=0;n<l;n++)void 0===a[r=(i=t[n]).selector+" "]&&(a[r]=i.needsContext?_(r,this).index(u)>-1:_.find(r,this,null,[u]).length),a[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return u=this,l<t.length&&s.push({elem:u,handlers:t.slice(l)}),s},addProp:function(e,t){Object.defineProperty(_.Event.prototype,e,{enumerable:!0,configurable:!0,get:v(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[_.expando]?e:new _.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return me.test(t.type)&&t.click&&z(t,"input")&&Oe(t,"click",Ce),!1},trigger:function(e){var t=this||e;return me.test(t.type)&&t.click&&z(t,"input")&&Oe(t,"click"),!0},_default:function(e){var t=e.target;return me.test(t.type)&&t.click&&z(t,"input")&&X.get(t,"click")||z(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},_.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},_.Event=function(e,t){if(!(this instanceof _.Event))return new _.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&_.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[_.expando]=!0},_.Event.prototype={constructor:_.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},_.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},_.event.addProp),_.each({focus:"focusin",blur:"focusout"},(function(e,t){_.event.special[e]={setup:function(){return Oe(this,e,Se),!1},trigger:function(){return Oe(this,e),!0},_default:function(){return!0},delegateType:t}})),_.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},(function(e,t){_.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,i=this,r=e.relatedTarget,o=e.handleObj;return r&&(r===i||_.contains(i,r))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}})),_.fn.extend({on:function(e,t,n,i){return Te(this,e,t,n,i)},one:function(e,t,n,i){return Te(this,e,t,n,i,1)},off:function(e,t,n){var i,r;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,_(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(r in e)this.off(r,t,e[r]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each((function(){_.event.remove(this,e,n,t)}))}});var ze=/<script|<style|<link/i,Pe=/checked\s*(?:[^=]|=\s*.checked.)/i,$e=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ae(e,t){return z(e,"table")&&z(11!==t.nodeType?t:t.firstChild,"tr")&&_(e).children("tbody")[0]||e}function Me(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Le(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Ne(e,t){var n,i,r,o,a,s;if(1===t.nodeType){if(X.hasData(e)&&(s=X.get(e).events))for(r in X.remove(t,"handle events"),s)for(n=0,i=s[r].length;n<i;n++)_.event.add(t,r,s[r][n]);Z.hasData(e)&&(o=Z.access(e),a=_.extend({},o),Z.set(t,a))}}function Ie(e,t){var n=t.nodeName.toLowerCase();"input"===n&&me.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function De(e,t,n,i){t=l(t);var r,o,a,s,u,c,d=0,f=e.length,h=f-1,p=t[0],m=v(p);if(m||f>1&&"string"==typeof p&&!g.checkClone&&Pe.test(p))return e.each((function(r){var o=e.eq(r);m&&(t[0]=p.call(this,r,o.html())),De(o,t,n,i)}));if(f&&(o=(r=xe(t,e[0].ownerDocument,!1,e,i)).firstChild,1===r.childNodes.length&&(r=o),o||i)){for(s=(a=_.map(be(r,"script"),Me)).length;d<f;d++)u=r,d!==h&&(u=_.clone(u,!0,!0),s&&_.merge(a,be(u,"script"))),n.call(e[d],u,d);if(s)for(c=a[a.length-1].ownerDocument,_.map(a,Le),d=0;d<s;d++)u=a[d],ve.test(u.type||"")&&!X.access(u,"globalEval")&&_.contains(c,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?_._evalUrl&&!u.noModule&&_._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},c):k(u.textContent.replace($e,""),u,c))}return e}function je(e,t,n){for(var i,r=t?_.filter(t,e):e,o=0;null!=(i=r[o]);o++)n||1!==i.nodeType||_.cleanData(be(i)),i.parentNode&&(n&&ae(i)&&we(be(i,"script")),i.parentNode.removeChild(i));return e}_.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var i,r,o,a,s=e.cloneNode(!0),l=ae(e);if(!(g.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||_.isXMLDoc(e)))for(a=be(s),i=0,r=(o=be(e)).length;i<r;i++)Ie(o[i],a[i]);if(t)if(n)for(o=o||be(e),a=a||be(s),i=0,r=o.length;i<r;i++)Ne(o[i],a[i]);else Ne(e,s);return(a=be(s,"script")).length>0&&we(a,!l&&be(e,"script")),s},cleanData:function(e){for(var t,n,i,r=_.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[X.expando]){if(t.events)for(i in t.events)r[i]?_.event.remove(n,i):_.removeEvent(n,i,t.handle);n[X.expando]=void 0}n[Z.expando]&&(n[Z.expando]=void 0)}}}),_.fn.extend({detach:function(e){return je(this,e,!0)},remove:function(e){return je(this,e)},text:function(e){return W(this,(function(e){return void 0===e?_.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return De(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Ae(this,e).appendChild(e)}))},prepend:function(){return De(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Ae(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return De(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return De(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(_.cleanData(be(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return _.clone(this,e,t)}))},html:function(e){return W(this,(function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ze.test(e)&&!ye[(ge.exec(e)||["",""])[1].toLowerCase()]){e=_.htmlPrefilter(e);try{for(;n<i;n++)1===(t=this[n]||{}).nodeType&&(_.cleanData(be(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)}),null,e,arguments.length)},replaceWith:function(){var e=[];return De(this,arguments,(function(t){var n=this.parentNode;_.inArray(this,e)<0&&(_.cleanData(be(this)),n&&n.replaceChild(t,this))}),e)}}),_.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},(function(e,t){_.fn[e]=function(e){for(var n,i=[],r=_(e),o=r.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),_(r[a])[t](n),u.apply(i,n.get());return this.pushStack(i)}}));var Re=new RegExp("^("+ne+")(?!px)[a-z%]+$","i"),Fe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=n),t.getComputedStyle(e)},He=function(e,t,n){var i,r,o={};for(r in t)o[r]=e.style[r],e.style[r]=t[r];for(r in i=n.call(e),t)e.style[r]=o[r];return i},Be=new RegExp(re.join("|"),"i");function qe(e,t,n){var i,r,o,a,s=e.style;return(n=n||Fe(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ae(e)||(a=_.style(e,t)),!g.pixelBoxStyles()&&Re.test(a)&&Be.test(t)&&(i=s.width,r=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=i,s.minWidth=r,s.maxWidth=o)),void 0!==a?a+"":a}function We(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(c){u.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%",oe.appendChild(u).appendChild(c);var e=n.getComputedStyle(c);i="1%"!==e.top,l=12===t(e.marginLeft),c.style.right="60%",a=36===t(e.right),r=36===t(e.width),c.style.position="absolute",o=12===t(c.offsetWidth/3),oe.removeChild(u),c=null}}function t(e){return Math.round(parseFloat(e))}var i,r,o,a,s,l,u=b.createElement("div"),c=b.createElement("div");c.style&&(c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",g.clearCloneStyle="content-box"===c.style.backgroundClip,_.extend(g,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),a},pixelPosition:function(){return e(),i},reliableMarginLeft:function(){return e(),l},scrollboxSize:function(){return e(),o},reliableTrDimensions:function(){var e,t,i,r;return null==s&&(e=b.createElement("table"),t=b.createElement("tr"),i=b.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",i.style.height="9px",i.style.display="block",oe.appendChild(e).appendChild(t).appendChild(i),r=n.getComputedStyle(t),s=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,oe.removeChild(e)),s}}))}();var Ve=["Webkit","Moz","ms"],Ue=b.createElement("div").style,Ge={};function Qe(e){var t=_.cssProps[e]||Ge[e];return t||(e in Ue?e:Ge[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),n=Ve.length;n--;)if((e=Ve[n]+t)in Ue)return e}(e)||e)}var Ye=/^(none|table(?!-c[ea]).+)/,Ke=/^--/,Xe={position:"absolute",visibility:"hidden",display:"block"},Ze={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var i=ie.exec(t);return i?Math.max(0,i[2]-(n||0))+(i[3]||"px"):t}function et(e,t,n,i,r,o){var a="width"===t?1:0,s=0,l=0;if(n===(i?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=_.css(e,n+re[a],!0,r)),i?("content"===n&&(l-=_.css(e,"padding"+re[a],!0,r)),"margin"!==n&&(l-=_.css(e,"border"+re[a]+"Width",!0,r))):(l+=_.css(e,"padding"+re[a],!0,r),"padding"!==n?l+=_.css(e,"border"+re[a]+"Width",!0,r):s+=_.css(e,"border"+re[a]+"Width",!0,r));return!i&&o>=0&&(l+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-l-s-.5))||0),l}function tt(e,t,n){var i=Fe(e),r=(!g.boxSizingReliable()||n)&&"border-box"===_.css(e,"boxSizing",!1,i),o=r,a=qe(e,t,i),s="offset"+t[0].toUpperCase()+t.slice(1);if(Re.test(a)){if(!n)return a;a="auto"}return(!g.boxSizingReliable()&&r||!g.reliableTrDimensions()&&z(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===_.css(e,"display",!1,i))&&e.getClientRects().length&&(r="border-box"===_.css(e,"boxSizing",!1,i),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+et(e,t,n||(r?"border":"content"),o,i,a)+"px"}function nt(e,t,n,i,r){return new nt.prototype.init(e,t,n,i,r)}_.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=qe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!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,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var r,o,a,s=Q(t),l=Ke.test(t),u=e.style;if(l||(t=Qe(s)),a=_.cssHooks[t]||_.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(r=a.get(e,!1,i))?r:u[t];"string"===(o=typeof n)&&(r=ie.exec(n))&&r[1]&&(n=ue(e,t,r),o="number"),null!=n&&n==n&&("number"!==o||l||(n+=r&&r[3]||(_.cssNumber[s]?"":"px")),g.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,i))||(l?u.setProperty(t,n):u[t]=n))}},css:function(e,t,n,i){var r,o,a,s=Q(t);return Ke.test(t)||(t=Qe(s)),(a=_.cssHooks[t]||_.cssHooks[s])&&"get"in a&&(r=a.get(e,!0,n)),void 0===r&&(r=qe(e,t,i)),"normal"===r&&t in Ze&&(r=Ze[t]),""===n||n?(o=parseFloat(r),!0===n||isFinite(o)?o||0:r):r}}),_.each(["height","width"],(function(e,t){_.cssHooks[t]={get:function(e,n,i){if(n)return!Ye.test(_.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?tt(e,t,i):He(e,Xe,(function(){return tt(e,t,i)}))},set:function(e,n,i){var r,o=Fe(e),a=!g.scrollboxSize()&&"absolute"===o.position,s=(a||i)&&"border-box"===_.css(e,"boxSizing",!1,o),l=i?et(e,t,i,s,o):0;return s&&a&&(l-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-et(e,t,"border",!1,o)-.5)),l&&(r=ie.exec(n))&&"px"!==(r[3]||"px")&&(e.style[t]=n,n=_.css(e,t)),Je(0,n,l)}}})),_.cssHooks.marginLeft=We(g.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(qe(e,"marginLeft"))||e.getBoundingClientRect().left-He(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+"px"})),_.each({margin:"",padding:"",border:"Width"},(function(e,t){_.cssHooks[e+t]={expand:function(n){for(var i=0,r={},o="string"==typeof n?n.split(" "):[n];i<4;i++)r[e+re[i]+t]=o[i]||o[i-2]||o[0];return r}},"margin"!==e&&(_.cssHooks[e+t].set=Je)})),_.fn.extend({css:function(e,t){return W(this,(function(e,t,n){var i,r,o={},a=0;if(Array.isArray(t)){for(i=Fe(e),r=t.length;a<r;a++)o[t[a]]=_.css(e,t[a],!1,i);return o}return void 0!==n?_.style(e,t,n):_.css(e,t)}),e,t,arguments.length>1)}}),_.Tween=nt,nt.prototype={constructor:nt,init:function(e,t,n,i,r,o){this.elem=e,this.prop=n,this.easing=r||_.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=i,this.unit=o||(_.cssNumber[n]?"":"px")},cur:function(){var e=nt.propHooks[this.prop];return e&&e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n=nt.propHooks[this.prop];return this.options.duration?this.pos=t=_.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):nt.propHooks._default.set(this),this}},nt.prototype.init.prototype=nt.prototype,nt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=_.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){_.fx.step[e.prop]?_.fx.step[e.prop](e):1!==e.elem.nodeType||!_.cssHooks[e.prop]&&null==e.elem.style[Qe(e.prop)]?e.elem[e.prop]=e.now:_.style(e.elem,e.prop,e.now+e.unit)}}},nt.propHooks.scrollTop=nt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},_.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},_.fx=nt.prototype.init,_.fx.step={};var it,rt,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){rt&&(!1===b.hidden&&n.requestAnimationFrame?n.requestAnimationFrame(st):n.setTimeout(st,_.fx.interval),_.fx.tick())}function lt(){return n.setTimeout((function(){it=void 0})),it=Date.now()}function ut(e,t){var n,i=0,r={height:e};for(t=t?1:0;i<4;i+=2-t)r["margin"+(n=re[i])]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function ct(e,t,n){for(var i,r=(dt.tweeners[t]||[]).concat(dt.tweeners["*"]),o=0,a=r.length;o<a;o++)if(i=r[o].call(n,t,e))return i}function dt(e,t,n){var i,r,o=0,a=dt.prefilters.length,s=_.Deferred().always((function(){delete l.elem})),l=function(){if(r)return!1;for(var t=it||lt(),n=Math.max(0,u.startTime+u.duration-t),i=1-(n/u.duration||0),o=0,a=u.tweens.length;o<a;o++)u.tweens[o].run(i);return s.notifyWith(e,[u,i,n]),i<1&&a?n:(a||s.notifyWith(e,[u,1,0]),s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:_.extend({},t),opts:_.extend(!0,{specialEasing:{},easing:_.easing._default},n),originalProperties:t,originalOptions:n,startTime:it||lt(),duration:n.duration,tweens:[],createTween:function(t,n){var i=_.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(i),i},stop:function(t){var n=0,i=t?u.tweens.length:0;if(r)return this;for(r=!0;n<i;n++)u.tweens[n].run(1);return t?(s.notifyWith(e,[u,1,0]),s.resolveWith(e,[u,t])):s.rejectWith(e,[u,t]),this}}),c=u.props;for(!function(e,t){var n,i,r,o,a;for(n in e)if(r=t[i=Q(n)],o=e[n],Array.isArray(o)&&(r=o[1],o=e[n]=o[0]),n!==i&&(e[i]=o,delete e[n]),(a=_.cssHooks[i])&&"expand"in a)for(n in o=a.expand(o),delete e[i],o)n in e||(e[n]=o[n],t[n]=r);else t[i]=r}(c,u.opts.specialEasing);o<a;o++)if(i=dt.prefilters[o].call(u,e,c,u.opts))return v(i.stop)&&(_._queueHooks(u.elem,u.opts.queue).stop=i.stop.bind(i)),i;return _.map(c,ct,u),v(u.opts.start)&&u.opts.start.call(e,u),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always),_.fx.timer(_.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u}_.Animation=_.extend(dt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=["*"]):e=e.match(D);for(var n,i=0,r=e.length;i<r;i++)n=e[i],dt.tweeners[n]=dt.tweeners[n]||[],dt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var i,r,o,a,s,l,u,c,d="width"in t||"height"in t,f=this,h={},p=e.style,m=e.nodeType&&le(e),g=X.get(e,"fxshow");for(i in n.queue||(null==(a=_._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,f.always((function(){f.always((function(){a.unqueued--,_.queue(e,"fx").length||a.empty.fire()}))}))),t)if(r=t[i],ot.test(r)){if(delete t[i],o=o||"toggle"===r,r===(m?"hide":"show")){if("show"!==r||!g||void 0===g[i])continue;m=!0}h[i]=g&&g[i]||_.style(e,i)}if((l=!_.isEmptyObject(t))||!_.isEmptyObject(h))for(i in d&&1===e.nodeType&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],null==(u=g&&g.display)&&(u=X.get(e,"display")),"none"===(c=_.css(e,"display"))&&(u?c=u:(fe([e],!0),u=e.style.display||u,c=_.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=u)&&"none"===_.css(e,"float")&&(l||(f.done((function(){p.display=u})),null==u&&(c=p.display,u="none"===c?"":c)),p.display="inline-block")),n.overflow&&(p.overflow="hidden",f.always((function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}))),l=!1,h)l||(g?"hidden"in g&&(m=g.hidden):g=X.access(e,"fxshow",{display:u}),o&&(g.hidden=!m),m&&fe([e],!0),f.done((function(){for(i in m||fe([e]),X.remove(e,"fxshow"),h)_.style(e,i,h[i])}))),l=ct(m?g[i]:0,i,f),i in g||(g[i]=l.start,m&&(l.end=l.start,l.start=0))}],prefilter:function(e,t){t?dt.prefilters.unshift(e):dt.prefilters.push(e)}}),_.speed=function(e,t,n){var i=e&&"object"==typeof e?_.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return _.fx.off?i.duration=0:"number"!=typeof i.duration&&(i.duration in _.fx.speeds?i.duration=_.fx.speeds[i.duration]:i.duration=_.fx.speeds._default),null!=i.queue&&!0!==i.queue||(i.queue="fx"),i.old=i.complete,i.complete=function(){v(i.old)&&i.old.call(this),i.queue&&_.dequeue(this,i.queue)},i},_.fn.extend({fadeTo:function(e,t,n,i){return this.filter(le).css("opacity",0).show().end().animate({opacity:t},e,n,i)},animate:function(e,t,n,i){var r=_.isEmptyObject(e),o=_.speed(t,n,i),a=function(){var t=dt(this,_.extend({},e),o);(r||X.get(this,"finish"))&&t.stop(!0)};return a.finish=a,r||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var i=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&this.queue(e||"fx",[]),this.each((function(){var t=!0,r=null!=e&&e+"queueHooks",o=_.timers,a=X.get(this);if(r)a[r]&&a[r].stop&&i(a[r]);else for(r in a)a[r]&&a[r].stop&&at.test(r)&&i(a[r]);for(r=o.length;r--;)o[r].elem!==this||null!=e&&o[r].queue!==e||(o[r].anim.stop(n),t=!1,o.splice(r,1));!t&&n||_.dequeue(this,e)}))},finish:function(e){return!1!==e&&(e=e||"fx"),this.each((function(){var t,n=X.get(this),i=n[e+"queue"],r=n[e+"queueHooks"],o=_.timers,a=i?i.length:0;for(n.finish=!0,_.queue(this,e,[]),r&&r.stop&&r.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)i[t]&&i[t].finish&&i[t].finish.call(this);delete n.finish}))}}),_.each(["toggle","show","hide"],(function(e,t){var n=_.fn[t];_.fn[t]=function(e,i,r){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,i,r)}})),_.each({slideDown:ut("show"),slideUp:ut("hide"),slideToggle:ut("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},(function(e,t){_.fn[e]=function(e,n,i){return this.animate(t,e,n,i)}})),_.timers=[],_.fx.tick=function(){var e,t=0,n=_.timers;for(it=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||_.fx.stop(),it=void 0},_.fx.timer=function(e){_.timers.push(e),_.fx.start()},_.fx.interval=13,_.fx.start=function(){rt||(rt=!0,st())},_.fx.stop=function(){rt=null},_.fx.speeds={slow:600,fast:200,_default:400},_.fn.delay=function(e,t){return e=_.fx&&_.fx.speeds[e]||e,t=t||"fx",this.queue(t,(function(t,i){var r=n.setTimeout(t,e);i.stop=function(){n.clearTimeout(r)}}))},function(){var e=b.createElement("input"),t=b.createElement("select").appendChild(b.createElement("option"));e.type="checkbox",g.checkOn=""!==e.value,g.optSelected=t.selected,(e=b.createElement("input")).value="t",e.type="radio",g.radioValue="t"===e.value}();var ft,ht=_.expr.attrHandle;_.fn.extend({attr:function(e,t){return W(this,_.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each((function(){_.removeAttr(this,e)}))}}),_.extend({attr:function(e,t,n){var i,r,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?_.prop(e,t,n):(1===o&&_.isXMLDoc(e)||(r=_.attrHooks[t.toLowerCase()]||(_.expr.match.bool.test(t)?ft:void 0)),void 0!==n?null===n?void _.removeAttr(e,t):r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:(e.setAttribute(t,n+""),n):r&&"get"in r&&null!==(i=r.get(e,t))?i:null==(i=_.find.attr(e,t))?void 0:i)},attrHooks:{type:{set:function(e,t){if(!g.radioValue&&"radio"===t&&z(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,i=0,r=t&&t.match(D);if(r&&1===e.nodeType)for(;n=r[i++];)e.removeAttribute(n)}}),ft={set:function(e,t,n){return!1===t?_.removeAttr(e,n):e.setAttribute(n,n),n}},_.each(_.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=ht[t]||_.find.attr;ht[t]=function(e,t,i){var r,o,a=t.toLowerCase();return i||(o=ht[a],ht[a]=r,r=null!=n(e,t,i)?a:null,ht[a]=o),r}}));var pt=/^(?:input|select|textarea|button)$/i,mt=/^(?:a|area)$/i;function gt(e){return(e.match(D)||[]).join(" ")}function vt(e){return e.getAttribute&&e.getAttribute("class")||""}function yt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(D)||[]}_.fn.extend({prop:function(e,t){return W(this,_.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[_.propFix[e]||e]}))}}),_.extend({prop:function(e,t,n){var i,r,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&_.isXMLDoc(e)||(t=_.propFix[t]||t,r=_.propHooks[t]),void 0!==n?r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:e[t]=n:r&&"get"in r&&null!==(i=r.get(e,t))?i:e[t]},propHooks:{tabIndex:{get:function(e){var t=_.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||mt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),g.optSelected||(_.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),_.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){_.propFix[this.toLowerCase()]=this})),_.fn.extend({addClass:function(e){var t,n,i,r,o,a,s,l=0;if(v(e))return this.each((function(t){_(this).addClass(e.call(this,t,vt(this)))}));if((t=yt(e)).length)for(;n=this[l++];)if(r=vt(n),i=1===n.nodeType&&" "+gt(r)+" "){for(a=0;o=t[a++];)i.indexOf(" "+o+" ")<0&&(i+=o+" ");r!==(s=gt(i))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,i,r,o,a,s,l=0;if(v(e))return this.each((function(t){_(this).removeClass(e.call(this,t,vt(this)))}));if(!arguments.length)return this.attr("class","");if((t=yt(e)).length)for(;n=this[l++];)if(r=vt(n),i=1===n.nodeType&&" "+gt(r)+" "){for(a=0;o=t[a++];)for(;i.indexOf(" "+o+" ")>-1;)i=i.replace(" "+o+" "," ");r!==(s=gt(i))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,i="string"===n||Array.isArray(e);return"boolean"==typeof t&&i?t?this.addClass(e):this.removeClass(e):v(e)?this.each((function(n){_(this).toggleClass(e.call(this,n,vt(this),t),t)})):this.each((function(){var t,r,o,a;if(i)for(r=0,o=_(this),a=yt(e);t=a[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||((t=vt(this))&&X.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":X.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,i=0;for(t=" "+e+" ";n=this[i++];)if(1===n.nodeType&&(" "+gt(vt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;_.fn.extend({val:function(e){var t,n,i,r=this[0];return arguments.length?(i=v(e),this.each((function(n){var r;1===this.nodeType&&(null==(r=i?e.call(this,n,_(this).val()):e)?r="":"number"==typeof r?r+="":Array.isArray(r)&&(r=_.map(r,(function(e){return null==e?"":e+""}))),(t=_.valHooks[this.type]||_.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,r,"value")||(this.value=r))}))):r?(t=_.valHooks[r.type]||_.valHooks[r.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(r,"value"))?n:"string"==typeof(n=r.value)?n.replace(bt,""):null==n?"":n:void 0}}),_.extend({valHooks:{option:{get:function(e){var t=_.find.attr(e,"value");return null!=t?t:gt(_.text(e))}},select:{get:function(e){var t,n,i,r=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],l=a?o+1:r.length;for(i=o<0?l:a?o:0;i<l;i++)if(((n=r[i]).selected||i===o)&&!n.disabled&&(!n.parentNode.disabled||!z(n.parentNode,"optgroup"))){if(t=_(n).val(),a)return t;s.push(t)}return s},set:function(e,t){for(var n,i,r=e.options,o=_.makeArray(t),a=r.length;a--;)((i=r[a]).selected=_.inArray(_.valHooks.option.get(i),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),_.each(["radio","checkbox"],(function(){_.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=_.inArray(_(e).val(),t)>-1}},g.checkOn||(_.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),g.focusin="onfocusin"in n;var wt=/^(?:focusinfocus|focusoutblur)$/,kt=function(e){e.stopPropagation()};_.extend(_.event,{trigger:function(e,t,i,r){var o,a,s,l,u,c,d,f,p=[i||b],m=h.call(e,"type")?e.type:e,g=h.call(e,"namespace")?e.namespace.split("."):[];if(a=f=s=i=i||b,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+_.event.triggered)&&(m.indexOf(".")>-1&&(g=m.split("."),m=g.shift(),g.sort()),u=m.indexOf(":")<0&&"on"+m,(e=e[_.expando]?e:new _.Event(m,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=g.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),t=null==t?[e]:_.makeArray(t,[e]),d=_.event.special[m]||{},r||!d.trigger||!1!==d.trigger.apply(i,t))){if(!r&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(a=a.parentNode);a;a=a.parentNode)p.push(a),s=a;s===(i.ownerDocument||b)&&p.push(s.defaultView||s.parentWindow||n)}for(o=0;(a=p[o++])&&!e.isPropagationStopped();)f=a,e.type=o>1?l:d.bindType||m,(c=(X.get(a,"events")||Object.create(null))[e.type]&&X.get(a,"handle"))&&c.apply(a,t),(c=u&&a[u])&&c.apply&&Y(a)&&(e.result=c.apply(a,t),!1===e.result&&e.preventDefault());return e.type=m,r||e.isDefaultPrevented()||d._default&&!1!==d._default.apply(p.pop(),t)||!Y(i)||u&&v(i[m])&&!y(i)&&((s=i[u])&&(i[u]=null),_.event.triggered=m,e.isPropagationStopped()&&f.addEventListener(m,kt),i[m](),e.isPropagationStopped()&&f.removeEventListener(m,kt),_.event.triggered=void 0,s&&(i[u]=s)),e.result}},simulate:function(e,t,n){var i=_.extend(new _.Event,n,{type:e,isSimulated:!0});_.event.trigger(i,null,t)}}),_.fn.extend({trigger:function(e,t){return this.each((function(){_.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return _.event.trigger(e,t,n,!0)}}),g.focusin||_.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){_.event.simulate(t,e.target,_.event.fix(e))};_.event.special[t]={setup:function(){var i=this.ownerDocument||this.document||this,r=X.access(i,t);r||i.addEventListener(e,n,!0),X.access(i,t,(r||0)+1)},teardown:function(){var i=this.ownerDocument||this.document||this,r=X.access(i,t)-1;r?X.access(i,t,r):(i.removeEventListener(e,n,!0),X.remove(i,t))}}}));var xt=n.location,_t={guid:Date.now()},Ct=/\?/;_.parseXML=function(e){var t,i;if(!e||"string"!=typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,"text/xml")}catch(e){}return i=t&&t.getElementsByTagName("parsererror")[0],t&&!i||_.error("Invalid XML: "+(i?_.map(i.childNodes,(function(e){return e.textContent})).join("\n"):e)),t};var Et=/\[\]$/,St=/\r?\n/g,Tt=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function zt(e,t,n,i){var r;if(Array.isArray(t))_.each(t,(function(t,r){n||Et.test(e)?i(e,r):zt(e+"["+("object"==typeof r&&null!=r?t:"")+"]",r,n,i)}));else if(n||"object"!==x(t))i(e,t);else for(r in t)zt(e+"["+r+"]",t[r],n,i)}_.param=function(e,t){var n,i=[],r=function(e,t){var n=v(t)?t():t;i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!_.isPlainObject(e))_.each(e,(function(){r(this.name,this.value)}));else for(n in e)zt(n,e[n],t,r);return i.join("&")},_.fn.extend({serialize:function(){return _.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=_.prop(this,"elements");return e?_.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!_(this).is(":disabled")&&Ot.test(this.nodeName)&&!Tt.test(e)&&(this.checked||!me.test(e))})).map((function(e,t){var n=_(this).val();return null==n?null:Array.isArray(n)?_.map(n,(function(e){return{name:t.name,value:e.replace(St,"\r\n")}})):{name:t.name,value:n.replace(St,"\r\n")}})).get()}});var Pt=/%20/g,$t=/#.*$/,At=/([?&])_=[^&]*/,Mt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Nt=/^\/\//,It={},Dt={},jt="*/".concat("*"),Rt=b.createElement("a");function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var i,r=0,o=t.toLowerCase().match(D)||[];if(v(n))for(;i=o[r++];)"+"===i[0]?(i=i.slice(1)||"*",(e[i]=e[i]||[]).unshift(n)):(e[i]=e[i]||[]).push(n)}}function Ht(e,t,n,i){var r={},o=e===Dt;function a(s){var l;return r[s]=!0,_.each(e[s]||[],(function(e,s){var u=s(t,n,i);return"string"!=typeof u||o||r[u]?o?!(l=u):void 0:(t.dataTypes.unshift(u),a(u),!1)})),l}return a(t.dataTypes[0])||!r["*"]&&a("*")}function Bt(e,t){var n,i,r=_.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((r[n]?e:i||(i={}))[n]=t[n]);return i&&_.extend(!0,e,i),e}Rt.href=xt.href,_.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:xt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(xt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":jt,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":_.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Bt(Bt(e,_.ajaxSettings),t):Bt(_.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Dt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var i,r,o,a,s,l,u,c,d,f,h=_.ajaxSetup({},t),p=h.context||h,m=h.context&&(p.nodeType||p.jquery)?_(p):_.event,g=_.Deferred(),v=_.Callbacks("once memory"),y=h.statusCode||{},w={},k={},x="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(u){if(!a)for(a={};t=Mt.exec(o);)a[t[1].toLowerCase()+" "]=(a[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=a[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return u?o:null},setRequestHeader:function(e,t){return null==u&&(e=k[e.toLowerCase()]=k[e.toLowerCase()]||e,w[e]=t),this},overrideMimeType:function(e){return null==u&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(u)C.always(e[C.status]);else for(t in e)y[t]=[y[t],e[t]];return this},abort:function(e){var t=e||x;return i&&i.abort(t),E(0,t),this}};if(g.promise(C),h.url=((e||h.url||xt.href)+"").replace(Nt,xt.protocol+"//"),h.type=t.method||t.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(D)||[""],null==h.crossDomain){l=b.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Rt.protocol+"//"+Rt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=_.param(h.data,h.traditional)),Ht(It,h,t,C),u)return C;for(d in(c=_.event&&h.global)&&0==_.active++&&_.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Lt.test(h.type),r=h.url.replace($t,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Pt,"+")):(f=h.url.slice(r.length),h.data&&(h.processData||"string"==typeof h.data)&&(r+=(Ct.test(r)?"&":"?")+h.data,delete h.data),!1===h.cache&&(r=r.replace(At,"$1"),f=(Ct.test(r)?"&":"?")+"_="+_t.guid+++f),h.url=r+f),h.ifModified&&(_.lastModified[r]&&C.setRequestHeader("If-Modified-Since",_.lastModified[r]),_.etag[r]&&C.setRequestHeader("If-None-Match",_.etag[r])),(h.data&&h.hasContent&&!1!==h.contentType||t.contentType)&&C.setRequestHeader("Content-Type",h.contentType),C.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+jt+"; q=0.01":""):h.accepts["*"]),h.headers)C.setRequestHeader(d,h.headers[d]);if(h.beforeSend&&(!1===h.beforeSend.call(p,C,h)||u))return C.abort();if(x="abort",v.add(h.complete),C.done(h.success),C.fail(h.error),i=Ht(Dt,h,t,C)){if(C.readyState=1,c&&m.trigger("ajaxSend",[C,h]),u)return C;h.async&&h.timeout>0&&(s=n.setTimeout((function(){C.abort("timeout")}),h.timeout));try{u=!1,i.send(w,E)}catch(e){if(u)throw e;E(-1,e)}}else E(-1,"No Transport");function E(e,t,a,l){var d,f,b,w,k,x=t;u||(u=!0,s&&n.clearTimeout(s),i=void 0,o=l||"",C.readyState=e>0?4:0,d=e>=200&&e<300||304===e,a&&(w=function(e,t,n){for(var i,r,o,a,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===i&&(i=e.mimeType||t.getResponseHeader("Content-Type"));if(i)for(r in s)if(s[r]&&s[r].test(i)){l.unshift(r);break}if(l[0]in n)o=l[0];else{for(r in n){if(!l[0]||e.converters[r+" "+l[0]]){o=r;break}a||(a=r)}o=o||a}if(o)return o!==l[0]&&l.unshift(o),n[o]}(h,C,a)),!d&&_.inArray("script",h.dataTypes)>-1&&_.inArray("json",h.dataTypes)<0&&(h.converters["text script"]=function(){}),w=function(e,t,n,i){var r,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&i&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(!(a=u[l+" "+o]||u["* "+o]))for(r in u)if((s=r.split(" "))[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){!0===a?a=u[r]:!0!==u[r]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}(h,w,C,d),d?(h.ifModified&&((k=C.getResponseHeader("Last-Modified"))&&(_.lastModified[r]=k),(k=C.getResponseHeader("etag"))&&(_.etag[r]=k)),204===e||"HEAD"===h.type?x="nocontent":304===e?x="notmodified":(x=w.state,f=w.data,d=!(b=w.error))):(b=x,!e&&x||(x="error",e<0&&(e=0))),C.status=e,C.statusText=(t||x)+"",d?g.resolveWith(p,[f,x,C]):g.rejectWith(p,[C,x,b]),C.statusCode(y),y=void 0,c&&m.trigger(d?"ajaxSuccess":"ajaxError",[C,h,d?f:b]),v.fireWith(p,[C,x]),c&&(m.trigger("ajaxComplete",[C,h]),--_.active||_.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return _.get(e,t,n,"json")},getScript:function(e,t){return _.get(e,void 0,t,"script")}}),_.each(["get","post"],(function(e,t){_[t]=function(e,n,i,r){return v(n)&&(r=r||i,i=n,n=void 0),_.ajax(_.extend({url:e,type:t,dataType:r,data:n,success:i},_.isPlainObject(e)&&e))}})),_.ajaxPrefilter((function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")})),_._evalUrl=function(e,t,n){return _.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){_.globalEval(e,t,n)}})},_.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=_(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return v(e)?this.each((function(t){_(this).wrapInner(e.call(this,t))})):this.each((function(){var t=_(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=v(e);return this.each((function(n){_(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(e){return this.parent(e).not("body").each((function(){_(this).replaceWith(this.childNodes)})),this}}),_.expr.pseudos.hidden=function(e){return!_.expr.pseudos.visible(e)},_.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},_.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var qt={0:200,1223:204},Wt=_.ajaxSettings.xhr();g.cors=!!Wt&&"withCredentials"in Wt,g.ajax=Wt=!!Wt,_.ajaxTransport((function(e){var t,i;if(g.cors||Wt&&!e.crossDomain)return{send:function(r,o){var a,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)s[a]=e.xhrFields[a];for(a in e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||r["X-Requested-With"]||(r["X-Requested-With"]="XMLHttpRequest"),r)s.setRequestHeader(a,r[a]);t=function(e){return function(){t&&(t=i=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(qt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=t(),i=s.onerror=s.ontimeout=t("error"),void 0!==s.onabort?s.onabort=i:s.onreadystatechange=function(){4===s.readyState&&n.setTimeout((function(){t&&i()}))},t=t("abort");try{s.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}})),_.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=!1)})),_.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return _.globalEval(e),e}}}),_.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),_.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(i,r){t=_("<script>").attr(e.scriptAttrs||{}).prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&r("error"===e.type?404:200,e.type)}),b.head.appendChild(t[0])},abort:function(){n&&n()}}}));var Vt,Ut=[],Gt=/(=)\?(?=&|$)|\?\?/;_.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Ut.pop()||_.expando+"_"+_t.guid++;return this[e]=!0,e}}),_.ajaxPrefilter("json jsonp",(function(e,t,i){var r,o,a,s=!1!==e.jsonp&&(Gt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gt.test(e.data)&&"data");if(s||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(Gt,"$1"+r):!1!==e.jsonp&&(e.url+=(Ct.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return a||_.error(r+" was not called"),a[0]},e.dataTypes[0]="json",o=n[r],n[r]=function(){a=arguments},i.always((function(){void 0===o?_(n).removeProp(r):n[r]=o,e[r]&&(e.jsonpCallback=t.jsonpCallback,Ut.push(r)),a&&v(o)&&o(a[0]),a=o=void 0})),"script"})),g.createHTMLDocument=((Vt=b.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Vt.childNodes.length),_.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(g.createHTMLDocument?((i=(t=b.implementation.createHTMLDocument("")).createElement("base")).href=b.location.href,t.head.appendChild(i)):t=b),o=!n&&[],(r=P.exec(e))?[t.createElement(r[1])]:(r=xe([e],t,o),o&&o.length&&_(o).remove(),_.merge([],r.childNodes)));var i,r,o},_.fn.load=function(e,t,n){var i,r,o,a=this,s=e.indexOf(" ");return s>-1&&(i=gt(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(r="POST"),a.length>0&&_.ajax({url:e,type:r||"GET",dataType:"html",data:t}).done((function(e){o=arguments,a.html(i?_("<div>").append(_.parseHTML(e)).find(i):e)})).always(n&&function(e,t){a.each((function(){n.apply(this,o||[e.responseText,t,e])}))}),this},_.expr.pseudos.animated=function(e){return _.grep(_.timers,(function(t){return e===t.elem})).length},_.offset={setOffset:function(e,t,n){var i,r,o,a,s,l,u=_.css(e,"position"),c=_(e),d={};"static"===u&&(e.style.position="relative"),s=c.offset(),o=_.css(e,"top"),l=_.css(e,"left"),("absolute"===u||"fixed"===u)&&(o+l).indexOf("auto")>-1?(a=(i=c.position()).top,r=i.left):(a=parseFloat(o)||0,r=parseFloat(l)||0),v(t)&&(t=t.call(e,n,_.extend({},s))),null!=t.top&&(d.top=t.top-s.top+a),null!=t.left&&(d.left=t.left-s.left+r),"using"in t?t.using.call(e,d):c.css(d)}},_.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){_.offset.setOffset(this,e,t)}));var t,n,i=this[0];return i?i.getClientRects().length?(t=i.getBoundingClientRect(),n=i.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,i=this[0],r={top:0,left:0};if("fixed"===_.css(i,"position"))t=i.getBoundingClientRect();else{for(t=this.offset(),n=i.ownerDocument,e=i.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===_.css(e,"position");)e=e.parentNode;e&&e!==i&&1===e.nodeType&&((r=_(e).offset()).top+=_.css(e,"borderTopWidth",!0),r.left+=_.css(e,"borderLeftWidth",!0))}return{top:t.top-r.top-_.css(i,"marginTop",!0),left:t.left-r.left-_.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent;e&&"static"===_.css(e,"position");)e=e.offsetParent;return e||oe}))}}),_.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},(function(e,t){var n="pageYOffset"===t;_.fn[e]=function(i){return W(this,(function(e,i,r){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===r)return o?o[t]:e[i];o?o.scrollTo(n?o.pageXOffset:r,n?r:o.pageYOffset):e[i]=r}),e,i,arguments.length)}})),_.each(["top","left"],(function(e,t){_.cssHooks[t]=We(g.pixelPosition,(function(e,n){if(n)return n=qe(e,t),Re.test(n)?_(e).position()[t]+"px":n}))})),_.each({Height:"height",Width:"width"},(function(e,t){_.each({padding:"inner"+e,content:t,"":"outer"+e},(function(n,i){_.fn[i]=function(r,o){var a=arguments.length&&(n||"boolean"!=typeof r),s=n||(!0===r||!0===o?"margin":"border");return W(this,(function(t,n,r){var o;return y(t)?0===i.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===r?_.css(t,n,s):_.style(t,n,r,s)}),t,a?r:void 0,a)}}))})),_.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],(function(e,t){_.fn[t]=function(e){return this.on(t,e)}})),_.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,i){return this.on(t,e,n,i)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),_.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(e,t){_.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}));var Qt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;_.proxy=function(e,t){var n,i,r;if("string"==typeof t&&(n=e[t],t=e,e=n),v(e))return i=s.call(arguments,2),(r=function(){return e.apply(t||this,i.concat(s.call(arguments)))}).guid=e.guid=e.guid||_.guid++,r},_.holdReady=function(e){e?_.readyWait++:_.ready(!0)},_.isArray=Array.isArray,_.parseJSON=JSON.parse,_.nodeName=z,_.isFunction=v,_.isWindow=y,_.camelCase=Q,_.type=x,_.now=Date.now,_.isNumeric=function(e){var t=_.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},_.trim=function(e){return null==e?"":(e+"").replace(Qt,"")},void 0===(i=function(){return _}.apply(t,[]))||(e.exports=i);var Yt=n.jQuery,Kt=n.$;return _.noConflict=function(e){return n.$===_&&(n.$=Kt),e&&n.jQuery===_&&(n.jQuery=Yt),_},void 0===r&&(n.jQuery=n.$=_),_}))},function(e,t,n){"use strict";e.exports=n(65)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();t.default=function(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];var l=t||{},u=l.css,c=l.className,d=h(l,["css","className"]);return u?s.default.createElement(b,{css:u,render:function(t){var n=c?t?c+" "+t:c:t;return a.createElement.apply(void 0,[e,n?i({},d,{className:n}):d].concat(r))}}):a.createElement.apply(void 0,[e,t].concat(r))},t.hydrate=function(e,t,n){v=!0,(0,l.hydrate)(e,t,(function(){v=!1,n&&n()}))};var o=f(n(3)),a=n(1),s=f(a),l=n(4),u=f(n(71)),c=f(n(98)),d=f(n(24));function f(e){return e&&e.__esModule?e:{default:e}}function h(e,t){var n={};for(var i in e)t.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i]);return n}function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function m(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var g="undefined"!=typeof window,v=!1,y=(0,c.default)({}).className,b=function(e){function t(){var e,n,i;p(this,t);for(var r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=arguments[a];return n=i=m(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(o))),i.glam=i.context.glam||new u.default(g?{document:document}:void 0),m(i,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,[{key:"getChildContext",value:function(){return{glam:this.glam}}},{key:"componentWillUnmount",value:function(){this.flush&&this.flush()}},{key:"render",value:function(){var e=this,t=this.props.css,n=(0,c.default)(t),i=n.className===y?"":n.className,r=this.props.render(i);if(!g||g&&v){if(this.glam.isTagged(n.className))return r;this.glam.tag(n.className),this.flush=function(){return e.glam.insert(n)};var o=(0,d.default)(n).join("");return o?a.Children.toArray([s.default.createElement("style",{dangerouslySetInnerHTML:{__html:o}}),r]):r}return this.glam.insert(n),r}}]),t}(s.default.Component);b.displayName="css",b.contextTypes={glam:o.default.object},b.childContextTypes={glam:o.default.object}},function(e,t,n){e.exports=n(69)()},function(e,t,n){"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE){0;try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}}(),e.exports=n(66)},function(e,t,n){var i=n(122),r=n(33),o=n(129);o="function"==typeof o.default?o.default:o;var a={lowerCaseAttributeNames:!1};function s(e,t){if("string"!=typeof e)throw new TypeError("First argument must be a string");return""===e?[]:i(o(e,(t=t||{}).htmlparser2||a),t)}s.domToReact=i,s.htmlToDOM=o,s.attributesToProps=r,s.Element=n(133).Element,e.exports=s,e.exports.default=s},,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return"string"==typeof e&&i.test(e)};var i=/-webkit-|-moz-|-ms-/;e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),o=d(n(102)),a=d(n(103)),s=d(n(28)),l=d(n(19)),u=d(n(106)),c=n(11);function d(e){return e&&e.__esModule?e:{default:e}}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function h(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function p(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var m=n(107)("transform"),g="undefined"!=typeof window,v=function(e){function t(){return f(this,t),h(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return p(t,e),r(t,[{key:"getStyles",value:function(e){var t,n,i,r=this.pager.getPositionValue(e),o=r.x,a=r.y,s=this.pager.getTrackSize(),l=(i="translate3d("+o+"px, "+a+"px, 0)",(n=m)in(t={})?Object.defineProperty(t,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[n]=i,t);if(s){var u=this.pager.options,c=u.axis,d=u.viewsToShow;l["x"===c?"width":"height"]="auto"===d?s:this.pager.views.length/d*100+"%"}return l}}]),t}(u.default),y=function(e){function t(e){var n=e.index,i=function(e,t){var n={};for(var i in e)t.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i]);return n}(e,["index"]);f(this,t);var r=h(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,i));return r.index=n,r.inBounds=!0,r.tabbableChildren=[],r.setCurrent(!1),r.setVisible(!1),r.setTarget(),r.setOrigin(),setTimeout((function(){r.tabbableChildren=(0,a.default)(r.node),r.setTabbableChildren()})),r}return p(t,e),r(t,[{key:"setCurrent",value:function(e){this.isCurrent=e}},{key:"setVisible",value:function(e){this.isVisible=e,this.setTabbableChildren()}},{key:"setTabbableChildren",value:function(){for(var e=0;e<this.tabbableChildren.length;e++)this.tabbableChildren[e].tabIndex=this.isCurrent?0:-1}},{key:"setTarget",value:function(){var e=this.pager.options,t=e.align,n=(e.viewsToShow,this.pager.getStartCoords(this.index));t&&(n+=this.pager.getAlignOffset(this)),this.target=n}},{key:"setOrigin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pager.trackPosition;this.origin=this.target-e}},{key:"getStyles",value:function(){var e=this.pager.options,t=e.axis,n=e.viewsToShow,r=e.infinite,o={};return"x"===t&&(o.display="inline-block",o.verticalAlign="top"),"auto"!==n&&(o["x"===t?"width":"height"]=100/this.pager.views.length+"%"),r&&!this.inBounds&&(o.position="relative",o["y"===t?"top":"left"]=this.getPosition()),i({},o,this.pager.animationBus.getStyles(this))}}]),t}(u.default),b={viewsToShow:1,viewsToMove:1,align:0,contain:!1,axis:"x",autoSize:!1,animations:[],infinite:!1,instant:!1,swipe:!0,swipeThreshold:.5,flickTimeout:300,accessibility:!0},w=function(){function e(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};f(this,e),this.hydrate=function(){t.frame.setSize(),t.track.setSize(),t.views.forEach((function(e){e.setSize(),e.setTarget()})),t.setPositionValue(),t.setViewStyles(),t.emit("hydrated")};var r=(0,o.default)();this.on=r.on,this.emit=r.emit,this.off=r.off,this.views=[],this.currentIndex=0,this.currentView=null,this.currentTween=0,this.trackPosition=0,this.isSwiping=!1,this.options=i({},b,n),this.animationBus=new s.default({animations:this.options.animations,origin:function(e){return e.origin}}),g&&(this.resizeObserver=new l.default((function(){t.hydrate()})))}return r(e,[{key:"setOptions",value:function(e){var t=this.options;this.options=i({},this.options,e),this.animationBus.animations=this.options.animations,t.viewsToShow!==this.options.viewsToShow&&this.emit("viewChange",this.getCurrentIndicies())}},{key:"addFrame",value:function(e){this.frame=new u.default({node:e,pager:this})}},{key:"addTrack",value:function(e){this.track=new v({node:e,pager:this})}},{key:"addView",value:function(e){var t=this.views.length,n=new y({node:e,index:t,pager:this});return this.views.push(n),this.currentView||this.setCurrentView({index:t,suppressEvent:!0}),g&&this.resizeObserver.observe(e),this.emit("viewAdded"),n}},{key:"removeView",value:function(e){this.views=this.views.filter((function(t){return e!==t})),g&&this.resizeObserver.disconnect(e.node),this.emit("viewRemoved")}},{key:"prev",value:function(){this.setCurrentView({direction:-1})}},{key:"next",value:function(){this.setCurrentView({direction:1})}},{key:"setCurrentView",value:function(e){var t=e.direction,n=void 0===t?0:t,i=e.index,r=void 0===i?this.currentIndex:i,o=e.suppressEvent,a=void 0!==o&&o,s=this.options,l=s.viewsToMove,u=s.infinite,d=r+n*l,f=this.currentIndex,h=u?d:(0,c.clamp)(d,0,this.views.length-1),p=this.getView(f),m=this.getView(h);this.currentIndex=h,this.currentView=m,p.setCurrent(!1),m.setCurrent(!0);var g=h,v=h+l-1;(0,c.range)(g,v,this.views.length);this.views.forEach((function(e,t){e.setVisible(t===h)})),this.setPositionValue(),a||this.emit("viewChange",this.getCurrentIndicies())}},{key:"setPositionValue",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.currentView?this.currentView.target:0;if(!this.isSwiping){var t=this.options,n=t.viewsToShow,i=t.autoSize,r=t.infinite,o=t.contain,a=this.getTrackSize();if(r&&(e-=(Math.floor(this.currentIndex/this.views.length)||0)*a),o){var s="auto"===n&&i||n<=1?0:this.getFrameSize({autoSize:!1});e=(0,c.clamp)(e,s-a,0)}}this.trackPosition=e}},{key:"setViewStyles",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=this.options,n=t.infinite,i=t.align,r=(this.getFrameSize(),this.getTrackSize()),o=(0,c.modulo)(e,-r);this.views.reduce((function(t,a,s){var l=a.getSize(),u=t+l,c=t;return u+l*i<Math.abs(o)?(n&&(c+=r-t),a.inBounds=!1):a.inBounds=!0,a.setPosition(c),a.setOrigin(e),u}),0)}},{key:"getNumericViewsToShow",value:function(){return isNaN(this.options.viewsToShow)?1:this.options.viewsToShow}},{key:"getMaxDimensions",value:function(e){var t=this,n=this.options.axis,i=[],r=[];return e.forEach((function(e){var n=isNaN(e)?e:t.getView(e);i.push(n.getSize("width")),r.push(n.getSize("height"))})),{width:"x"===n?(0,c.sum)(i):(0,c.max)(i),height:"y"===n?(0,c.sum)(r):(0,c.max)(r)}}},{key:"getCurrentIndicies",value:function(){var e=this.options,t=e.infinite,n=e.contain,i=[],r=isNaN(this.options.viewsToShow)?1:this.options.viewsToShow,o=this.currentIndex,a=this.currentIndex+(r-1);if(n){o=(0,c.clamp)(o,0,this.views.length-r),a=(0,c.clamp)(a,0,this.views.length-1);for(var s=o;s<=a;s++)i.push(s)}else for(var l=o;l<=a;l++)i.push(t?(0,c.modulo)(l,this.views.length):(0,c.clamp)(l,0,this.views.length-1));return i}},{key:"getFrameSize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.autoSize,n=void 0===t?this.options.autoSize:t,i=e.fullSize,r=void 0!==i&&i,o={width:0,height:0};if(this.views.length)if(n){var a=this.getCurrentIndicies();o=this.getMaxDimensions(a)}else this.frame&&(o={width:this.frame.getSize("width"),height:this.frame.getSize("height")});return r?o:o["x"===this.options.axis?"width":"height"]}},{key:"getTrackSize",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=e?this.views.length:this.views.length-1,n=0;return this.views.slice(0,t).forEach((function(e){n+=e.getSize()})),n}},{key:"getView",value:function(e){return this.views[(0,c.modulo)(e,this.views.length)]}},{key:"getStartCoords",value:function(e){var t=0;return this.views.slice(0,e).forEach((function(e){t-=e.getSize()})),t}},{key:"getAlignOffset",value:function(e){return(this.getFrameSize({autoSize:!1})-e.getSize())*this.options.align}},{key:"getPositionValue",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.trackPosition,t=this.options,n=t.infinite,i=(t.contain,{x:0,y:0});if(this.currentTween=e,n){var r=this.getTrackSize();e=(0,c.modulo)(e,-r)||0}return this.emit("scroll",{progress:e/this.getTrackSize(!1),position:e}),i[this.options.axis]=e,i}},{key:"resetViewIndex",value:function(){this.setCurrentView({index:(0,c.modulo)(this.currentIndex,this.views.length),suppressEvent:!0})}}]),e}();t.default=w,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.utils=t.AnimatedView=t.View=t.Track=t.Frame=t.ViewPager=void 0;var i=u(n(101)),r=u(n(108)),o=u(n(118)),a=u(n(120)),s=u(n(121)),l=u(n(11));function u(e){return e&&e.__esModule?e:{default:e}}t.ViewPager=i.default,t.Frame=r.default,t.Track=o.default,t.View=a.default,t.AnimatedView=s.default,t.utils=l.default},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]="number"==typeof e[n]?e[n]:e[n].val);return t},e.exports=t.default},function(e,t,n){"use strict";function i(e,t){return(e%t+t)%t}Object.defineProperty(t,"__esModule",{value:!0}),t.modulo=i,t.clamp=function(e,t,n){return Math.min(Math.max(t,e),n)},t.sum=function(e){return e.reduce((function(e,t){return e+t}),0)},t.max=function(e){return Math.max.apply(null,e)},t.range=function(e,t,n){return[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(Array(1+t-e))).map((function(t){return n?i(e+t,n):e+t}))}},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=0);return t},e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t,n,r,o,a,s){var l=n+(-o*(t-r)+-a*n)*e,u=t+l*e;if(Math.abs(l)<s&&Math.abs(u-r)<s)return i[0]=r,i[1]=0,i;return i[0]=u,i[1]=l,i};var i=[0,0];e.exports=t.default},function(e,t,n){(function(t){(function(){var n,i,r;"undefined"!=typeof performance&&null!==performance&&performance.now?e.exports=function(){return performance.now()}:null!=t&&t.hrtime?(e.exports=function(){return(n()-r)/1e6},i=t.hrtime,r=(n=function(){var e;return 1e9*(e=i())[0]+e[1]})()):Date.now?(e.exports=function(){return Date.now()-r},r=Date.now()):(e.exports=function(){return(new Date).getTime()-r},r=(new Date).getTime())}).call(this)}).call(this,n(31))},function(e,t,n){(function(t){for(var i=n(110),r="undefined"==typeof window?t:window,o=["moz","webkit"],a="AnimationFrame",s=r["request"+a],l=r["cancel"+a]||r["cancelRequest"+a],u=0;!s&&u<o.length;u++)s=r[o[u]+"Request"+a],l=r[o[u]+"Cancel"+a]||r[o[u]+"CancelRequest"+a];if(!s||!l){var c=0,d=0,f=[];s=function(e){if(0===f.length){var t=i(),n=Math.max(0,1e3/60-(t-c));c=n+t,setTimeout((function(){var e=f.slice(0);f.length=0;for(var t=0;t<e.length;t++)if(!e[t].cancelled)try{e[t].callback(c)}catch(e){setTimeout((function(){throw e}),0)}}),Math.round(n))}return f.push({handle:++d,callback:e,cancelled:!1}),d},l=function(e){for(var t=0;t<f.length;t++)f[t].handle===e&&(f[t].cancelled=!0)}}e.exports=function(e){return s.call(r,e)},e.exports.cancel=function(){l.apply(r,arguments)},e.exports.polyfill=function(e){e||(e=r),e.requestAnimationFrame=s,e.cancelAnimationFrame=l}}).call(this,n(29))},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t,n){for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){if(0!==n[i])return!1;var r="number"==typeof t[i]?t[i]:t[i].val;if(e[i]!==r)return!1}return!0},e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n){for(var i in t)t.hasOwnProperty(i)&&!n[i]&&(e[i]=t[i]);return e},e.exports=t.default},function(e,t,n){"use strict";e.exports=function(e,t){return t||(t={}),"string"!=typeof(e=e&&e.__esModule?e.default:e)?e:(t.hash&&(e+=t.hash),t.maybeNeedQuotes&&/[\t\n\f\r "'=<>`]/.test(e)?'"'.concat(e,'"'):e)}},function(e,t,n){"use strict";n.r(t),function(e){var n=function(){if("undefined"!=typeof Map)return Map;function e(e,t){var n=-1;return e.some((function(e,i){return e[0]===t&&(n=i,!0)})),n}return function(){function t(){this.__entries__=[]}var n={size:{configurable:!0}};return n.size.get=function(){return this.__entries__.length},t.prototype.get=function(t){var n=e(this.__entries__,t),i=this.__entries__[n];return i&&i[1]},t.prototype.set=function(t,n){var i=e(this.__entries__,t);~i?this.__entries__[i][1]=n:this.__entries__.push([t,n])},t.prototype.delete=function(t){var n=this.__entries__,i=e(n,t);~i&&n.splice(i,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){void 0===t&&(t=null);for(var n=0,i=this.__entries__;n<i.length;n+=1){var r=i[n];e.call(t,r[1],r[0])}},Object.defineProperties(t.prototype,n),t}()}(),i="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,r=void 0!==e&&e.Math===Math?e:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")(),o="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(r):function(e){return setTimeout((function(){return e(Date.now())}),1e3/60)},a=["top","right","bottom","left","width","height","size","weight"],s="undefined"!=typeof MutationObserver,l=function(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(e,t){var n=!1,i=!1,r=0;function a(){n&&(n=!1,e()),i&&l()}function s(){o(a)}function l(){var e=Date.now();if(n){if(e-r<2)return;i=!0}else n=!0,i=!1,setTimeout(s,t);r=e}return l}(this.refresh.bind(this),20)};l.prototype.addObserver=function(e){~this.observers_.indexOf(e)||this.observers_.push(e),this.connected_||this.connect_()},l.prototype.removeObserver=function(e){var t=this.observers_,n=t.indexOf(e);~n&&t.splice(n,1),!t.length&&this.connected_&&this.disconnect_()},l.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},l.prototype.updateObservers_=function(){var e=this.observers_.filter((function(e){return e.gatherActive(),e.hasActive()}));return e.forEach((function(e){return e.broadcastActive()})),e.length>0},l.prototype.connect_=function(){i&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),s?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},l.prototype.disconnect_=function(){i&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},l.prototype.onTransitionEnd_=function(e){var t=e.propertyName;void 0===t&&(t=""),a.some((function(e){return!!~t.indexOf(e)}))&&this.refresh()},l.getInstance=function(){return this.instance_||(this.instance_=new l),this.instance_},l.instance_=null;var u=function(e,t){for(var n=0,i=Object.keys(t);n<i.length;n+=1){var r=i[n];Object.defineProperty(e,r,{value:t[r],enumerable:!1,writable:!1,configurable:!0})}return e},c=function(e){return e&&e.ownerDocument&&e.ownerDocument.defaultView||r},d=v(0,0,0,0);function f(e){return parseFloat(e)||0}function h(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return t.reduce((function(t,n){return t+f(e["border-"+n+"-width"])}),0)}function p(e){var t=e.clientWidth,n=e.clientHeight;if(!t&&!n)return d;var i=c(e).getComputedStyle(e),r=function(e){for(var t={},n=0,i=["top","right","bottom","left"];n<i.length;n+=1){var r=i[n],o=e["padding-"+r];t[r]=f(o)}return t}(i),o=r.left+r.right,a=r.top+r.bottom,s=f(i.width),l=f(i.height);if("border-box"===i.boxSizing&&(Math.round(s+o)!==t&&(s-=h(i,"left","right")+o),Math.round(l+a)!==n&&(l-=h(i,"top","bottom")+a)),!function(e){return e===c(e).document.documentElement}(e)){var u=Math.round(s+o)-t,p=Math.round(l+a)-n;1!==Math.abs(u)&&(s-=u),1!==Math.abs(p)&&(l-=p)}return v(r.left,r.top,s,l)}var m="undefined"!=typeof SVGGraphicsElement?function(e){return e instanceof c(e).SVGGraphicsElement}:function(e){return e instanceof c(e).SVGElement&&"function"==typeof e.getBBox};function g(e){return i?m(e)?function(e){var t=e.getBBox();return v(0,0,t.width,t.height)}(e):p(e):d}function v(e,t,n,i){return{x:e,y:t,width:n,height:i}}var y=function(e){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=v(0,0,0,0),this.target=e};y.prototype.isActive=function(){var e=g(this.target);return this.contentRect_=e,e.width!==this.broadcastWidth||e.height!==this.broadcastHeight},y.prototype.broadcastRect=function(){var e=this.contentRect_;return this.broadcastWidth=e.width,this.broadcastHeight=e.height,e};var b=function(e,t){var n,i,r,o,a,s,l,c=(i=(n=t).x,r=n.y,o=n.width,a=n.height,s="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,l=Object.create(s.prototype),u(l,{x:i,y:r,width:o,height:a,top:r,right:i+o,bottom:a+r,left:i}),l);u(this,{target:e,contentRect:c})},w=function(e,t,i){if(this.activeObservations_=[],this.observations_=new n,"function"!=typeof e)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=e,this.controller_=t,this.callbackCtx_=i};w.prototype.observe=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(e instanceof c(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)||(t.set(e,new y(e)),this.controller_.addObserver(this),this.controller_.refresh())}},w.prototype.unobserve=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(e instanceof c(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)&&(t.delete(e),t.size||this.controller_.removeObserver(this))}},w.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},w.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach((function(t){t.isActive()&&e.activeObservations_.push(t)}))},w.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,t=this.activeObservations_.map((function(e){return new b(e.target,e.broadcastRect())}));this.callback_.call(e,t,e),this.clearActive()}},w.prototype.clearActive=function(){this.activeObservations_.splice(0)},w.prototype.hasActive=function(){return this.activeObservations_.length>0};var k="undefined"!=typeof WeakMap?new WeakMap:new n,x=function(e){if(!(this instanceof x))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var t=l.getInstance(),n=new w(e,t,this);k.set(this,n)};["observe","unobserve","disconnect"].forEach((function(e){x.prototype[e]=function(){return(t=k.get(this))[e].apply(t,arguments);var t}}));var _=void 0!==r.ResizeObserver?r.ResizeObserver:x;t.default=_}.call(this,n(29))},function(e,t,n){"use strict";var i;t.storeFocus=function(){i=document.activeElement},t.clearStoredFocus=function(){i=null},t.restoreFocus=function(){if(i){try{i.focus()}catch(e){}i=null}}},,,function(e,t,n){"use strict";
/*
object-assign
(c) Sindre Sorhus
@license MIT
*/var i=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var i={};return"abcdefghijklmnopqrst".split("").forEach((function(e){i[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},i)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,l=a(e),u=1;u<arguments.length;u++){for(var c in n=Object(arguments[u]))r.call(n,c)&&(l[c]=n[c]);if(i){s=i(n);for(var d=0;d<s.length;d++)o.call(n,s[d])&&(l[s[d]]=n[s[d]])}}return l}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.simulations=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];o=!!e},t.default=function(e){var t=e.className,n=e.parsed;return function e(t,n){var i=[],r=n.plain,o=n.selects,a=n.medias,s=n.supports;r&&i.push(c({style:r,selector:u(t)}));o&&Object.keys(o).forEach((function(e){return i.push(c({style:o[e],selector:u(t,e)}))}));a&&Object.keys(a).forEach((function(n){return i.push(n+"{"+e(t,a[n]).join("")+"}")}));s&&Object.keys(s).forEach((function(n){return i.push(n+"{"+e(t,s[n]).join("")+"}")}));return i}(t,n)};var i=n(25),r=n(81),o=!1;function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e.toLowerCase().replace(/[^a-z0-9]/g,t)}var s=/[(),]|"(?:\\.|[^"\n])*"|'(?:\\.|[^'\n])*'|\/\*[\s\S]*?\*\//g;function l(e){if(-1===e.indexOf(","))return[e];for(var t,n=[],i=[],r=0;t=s.exec(e);)switch(t[0]){case"(":r++;break;case")":r--;break;case",":if(r)break;n.push(t.index)}for(t=n.length;t--;)i.unshift(e.slice(n[t]+1)),e=e.slice(0,n[t]);return i.unshift(e),i}function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(!e&&t)return t.replace(/\&/g,"");if(e&&!t)return"."+e;var n=l(t).map((function(t){return t.indexOf("&")>=0?t.replace(/\&/gm,"."+e):"."+e+t})).join(",");return o&&/^\&\:/.exec(t)&&!/\s/.exec(t)&&(n+=",."+e+"[data-simulate-"+a(t)+"]"),n}function c(e){var t=(0,r.prefixes)((0,r.fallbacks)((0,r.contentWrap)(e)));return t.selector+"{"+(0,i.createMarkupForStyles)(t.style)+"}"}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.processStyleName=void 0,t.createMarkupForStyles=function(e,t){var n="";for(var r in e){var o=0===r.indexOf("--");if(e.hasOwnProperty(r)&&"label"!==r){var a=e[r];0,null!=a&&(o?n+=r+":"+a+";":(n+=s(r)+":",n+=(0,i.default)(r,a,t)+";"))}}return n||null};a(n(73));var i=a(n(75)),r=a(n(78)),o=a(n(80));a(n(26));function a(e){return e&&e.__esModule?e:{default:e}}var s=t.processStyleName=(0,o.default)(r.default)},function(e,t,n){"use strict";var i=n(77);e.exports=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),o=n(104),a=(i=o)&&i.__esModule?i:{default:i};var s={perspective:"px",rotate:"deg",rotateX:"deg",rotateY:"deg",rotateZ:"deg",scale:"",scaleX:"",scaleY:"",scaleZ:"",skew:"deg",skewX:"deg",skewY:"deg",translateX:"px",translateY:"px",translateZ:"px"},l=Object.keys(s),u=function(){function e(t){var n=t.animations,i=t.element,r=t.origin;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.animations=n,this.element=i,this.origin=r}return r(e,[{key:"getStyles",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.element,t=this.origin(e),n=[],i={};return this.animations.forEach((function(e){var r=e.prop,o=e.unit||s[r]||"",u=(0,a.default)(e.stops)(t);l.indexOf(r)>-1?n.push(r+"("+u+o+")"):i[r]=""+u+o})),n.length&&(i.transform=n.join(" ")),i}},{key:"applyStyles",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.element,t=this.getStyles(e);Object.keys(t).forEach((function(n){return e.style[n]=t[n]}))}}]),e}();t.default=u,e.exports=t.default},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e.default:e}t.__esModule=!0;var r=n(109);t.Motion=i(r);var o=n(111);t.StaggeredMotion=i(o);var a=n(112);t.TransitionMotion=i(a);var s=n(114);t.spring=i(s);var l=n(32);t.presets=i(l);var u=n(10);t.stripStyle=i(u);var c=n(115);t.reorderKeys=i(c)},function(e,t){var n,i,r=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(e){n=o}try{i="function"==typeof clearTimeout?clearTimeout:a}catch(e){i=a}}();var l,u=[],c=!1,d=-1;function f(){c&&l&&(c=!1,l.length?u=l.concat(u):d=-1,u.length&&h())}function h(){if(!c){var e=s(f);c=!0;for(var t=u.length;t;){for(l=u,u=[];++d<t;)l&&l[d].run();d=-1,t=u.length}l=null,c=!1,function(e){if(i===clearTimeout)return clearTimeout(e);if((i===a||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(e);try{i(e)}catch(t){try{return i.call(null,e)}catch(t){return i.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function m(){}r.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];u.push(new p(e,t)),1!==u.length||c||s(h)},p.prototype.run=function(){this.fun.apply(null,this.array)},r.title="browser",r.browser=!0,r.env={},r.argv=[],r.version="",r.versions={},r.on=m,r.addListener=m,r.once=m,r.off=m,r.removeListener=m,r.removeAllListeners=m,r.emit=m,r.prependListener=m,r.prependOnceListener=m,r.listeners=function(e){return[]},r.binding=function(e){throw new Error("process.binding is not supported")},r.cwd=function(){return"/"},r.chdir=function(e){throw new Error("process.chdir is not supported")},r.umask=function(){return 0}},function(e,t,n){"use strict";t.__esModule=!0,t.default={noWobble:{stiffness:170,damping:26},gentle:{stiffness:120,damping:14},wobbly:{stiffness:180,damping:12},stiff:{stiffness:210,damping:20}},e.exports=t.default},function(e,t,n){var i=n(123),r=n(34);function o(e){return i.possibleStandardNames[e]}e.exports=function(e){var t,n,a,s,l,u={},c=(e=e||{}).type&&{reset:!0,submit:!0}[e.type];for(t in e)if(a=e[t],i.isCustomAttribute(t))u[t]=a;else if(s=o(n=t.toLowerCase()))switch(l=i.getPropertyInfo(s),"checked"!==s&&"value"!==s||c||(s=o("default"+n)),u[s]=a,l&&l.type){case i.BOOLEAN:u[s]=!0;break;case i.OVERLOADED_BOOLEAN:""===a&&(u[s]=!0)}else r.PRESERVE_CUSTOM_ATTRIBUTES&&(u[t]=a);return r.setStyleProp(e.style,u),u}},function(e,t,n){var i=n(1),r=n(125).default;var o={reactCompat:!0};var a=i.version.split(".")[0]>=16,s=new Set(["tr","tbody","thead","tfoot","colgroup","table","head","html","frameset"]);e.exports={PRESERVE_CUSTOM_ATTRIBUTES:a,invertObject:function(e,t){if(!e||"object"!=typeof e)throw new TypeError("First argument must be an object");var n,i,r="function"==typeof t,o={},a={};for(n in e)i=e[n],r&&(o=t(n,i))&&2===o.length?a[o[0]]=o[1]:"string"==typeof i&&(a[i]=n);return a},isCustomComponent:function(e,t){if(-1===e.indexOf("-"))return t&&"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}},setStyleProp:function(e,t){if(null!=e)try{t.style=r(e,o)}catch(e){t.style={}}},canTextBeChildOfNode:function(e){return!s.has(e.name)},elementsWithNoTextChildren:s}},function(e,t,n){for(var i,r=n(131),o=n(132),a=r.CASE_SENSITIVE_TAG_NAMES,s=o.Comment,l=o.Element,u=o.ProcessingInstruction,c=o.Text,d={},f=0,h=a.length;f<h;f++)i=a[f],d[i.toLowerCase()]=i;function p(e){for(var t,n={},i=0,r=e.length;i<r;i++)n[(t=e[i]).name]=t.value;return n}function m(e){var t=function(e){return d[e]}(e=e.toLowerCase());return t||e}e.exports={formatAttributes:p,formatDOM:function e(t,n,i){n=n||null;for(var r=[],o=0,a=t.length;o<a;o++){var d,f=t[o];switch(f.nodeType){case 1:(d=new l(m(f.nodeName),p(f.attributes))).children=e(f.childNodes,d);break;case 3:d=new c(f.nodeValue);break;case 8:d=new s(f.nodeValue);break;default:continue}var h=r[o-1]||null;h&&(h.next=d),d.parent=n,d.prev=h,d.next=null,r.push(d)}return i&&((d=new u(i.substring(0,i.indexOf(" ")).toLowerCase(),i)).next=r[0]||null,d.parent=n,r.unshift(d),r[1]&&(r[1].prev=r[0])),r},isIE:function(){return/(MSIE |Trident\/|Edge\/)/.test(navigator.userAgent)}}},function(e,t,n){"use strict";var i;Object.defineProperty(t,"__esModule",{value:!0}),t.Doctype=t.CDATA=t.Tag=t.Style=t.Script=t.Comment=t.Directive=t.Text=t.Root=t.isTag=t.ElementType=void 0,function(e){e.Root="root",e.Text="text",e.Directive="directive",e.Comment="comment",e.Script="script",e.Style="style",e.Tag="tag",e.CDATA="cdata",e.Doctype="doctype"}(i=t.ElementType||(t.ElementType={})),t.isTag=function(e){return e.type===i.Tag||e.type===i.Script||e.type===i.Style},t.Root=i.Root,t.Text=i.Text,t.Directive=i.Directive,t.Comment=i.Comment,t.Script=i.Script,t.Style=i.Style,t.Tag=i.Tag,t.CDATA=i.CDATA,t.Doctype=i.Doctype},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/unterkunft.46465e0a.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/geschenke.b9f53bae.jpg"},function(e,t,n){var i=n(130),r=n(35).formatDOM,o=/<(![a-zA-Z\s]+)>/;e.exports=function(e){if("string"!=typeof e)throw new TypeError("First argument must be a string");if(""===e)return[];var t,n=e.match(o);return n&&n[1]&&(t=n[1]),r(i(e),null,t)}},,,,,,function(e,t,n){"use strict";n.r(t),t.default=[{id:3,isBought:!1,image:n(46).default,name:"Go Pro Hero 9 black",description:"Eine Go Pro Hero 9 Action Cam in schwarz",link:"https://gopro.com/de/de/shop/cameras/hero9-black/CHDHX-901-master.html",version:0},{id:4,isBought:!1,image:n(47).default,name:"Go Pro Zubehör",description:"Go Pro Abenteuer Kit mit schwimmendem Handgriff, Kopfgurt, QuickClip und Tasche",link:"https://gopro.com/de/de/shop/mounts-accessories/adventure-kit/AKTES-002.html",version:0},{id:5,isBought:!1,image:n(48).default,name:"Messerblock",description:"ZWILLING Selbstschärfender Messerblock, 7-tlg. In schwarz",link:"https://www.otto.de/p/zwilling-messerblock-gourmet-selbstschaerfend-7-tlg-weiss-selbstschaerfend-scharfe-messer-eisgehaertete-klinge-C1197649235/#variationId=1197649236",version:0},{id:11,isBought:!1,image:n(49).default,name:"Großer Kochtopf",description:"Tefal A70546 Duetto, ein großer Kochtopf, der circa 5l fasst (wie im Link oder ähnlich)",link:"https://www.amazon.de/dp/B00V6GF7UU/",version:0},{id:13,isBought:!1,image:n(50).default,name:"Studienbibel",description:"MacArthur Studienbibel mit Schlachter 2000 Übersetzung",link:"https://www.scm-shop.de/macarthur-studienbibel-schlachter-2000-7485697.html",version:0},{id:20,isBought:!1,image:n(51).default,name:"Bang! The Bullet",description:"Das Bang! Grundspiel mit Erweiterungen",link:"https://www.thalia.de/shop/home/artikeldetails/A1017416573",version:0},{id:21,isBought:!1,image:n(52).default,name:"Codenames XXL",description:"Condenames XXL mit extra großen Bildkarten",link:"https://www.thalia.de/shop/home/artikeldetails/A1052674361",version:0},{id:23,isBought:!1,image:n(53).default,name:"Staubsaugerroboter mit Wischfunktion",description:"Staubsaugerroboter Roborock S5 Max mit Wischfunktion in schwarz",link:"https://www.idealo.de/preisvergleich/OffersOfProduct/200074714_-s5-max-schwarz-roborock.html",version:0},{id:24,isBought:!1,image:n(54).default,name:"Weltkarte",description:"Weltkarte als Poster (197 x 116,5 cm)",link:"https://www.amazon.de/Weltkarte-Klassische-Vorderseite-laminiert-118/dp/B014FW44H8/ref=sr_1_14?keywords=weltkarte%2Bposter&qid=1642886702&sr=8-14&th=1",version:0},{id:25,isBought:!1,image:n(55).default,name:"4 Korkplatten für die Weltkarte",description:"Vier Korkplatten 60x 100 cm, als Unterlage zur Weltkarte",link:"https://www.amazon.de/Schadstofffrei-Antistatisch-Bastel-Unterlage-Trittschalld%C3%A4mmung-Wandverkleidung/dp/B079ND27TG/ref=pb_allspark_purchase_sims_desktop_2/258-0765775-0428551",version:0},{id:26,isBought:!1,image:n(56).default,name:"4 Sitzkissen",description:"4 Sitzkissen für unsere Wohnzimmerstühle",link:"https://jysk.de/wohnaccessoires/sitzkissen/sitzkissen-kejserlind-o34-lammfell-weiss",version:0},{id:27,isBought:!1,image:n(57).default,name:"12 Stoffservieten",description:"12 weiße Stoffservietten aus 100% Bio-Baumwolle",link:"https://www.bewusstgruen.de/12-stoffservietten-aus-100-bio-baumwolle/",version:0},{id:28,isBought:!1,image:n(58).default,name:"WMF Nudelzange",description:"Nudelzange von WMF",link:"https://www.wmf.com/de/nudelzange-bistro.html",version:0},{id:29,isBought:!1,image:n(59).default,name:"Eisportionierer",description:"Eisportionierer mit Kugel-Auswurf Funktion (wie im Link oder ähnlich)",link:"https://www.fackelmann.de/fackelmann-eisportionierer-mit-kugel-auswurf-funktion-oe5cm",version:0},{id:30,isBought:!1,image:n(60).default,name:"Blechgießkanne",description:"Eine Blechgießkann mit max. 2l Füllvolumen zum Blumengießen in der Wohnung",link:"https://www.bauhaus.info/giesskannen/zimmergiesskanne/p/16640093",version:0},{id:31,isBought:!1,image:n(61).default,name:"Saftpresse Thermomix",description:"Saftpressen-Aufsatz für den Thermomix",link:"https://www.wundermix.de/thermomix-zubehoer/zubereiten-aufbewahren/1372/saftpresse-fuer-thermomix-tm6/tm5?",version:0},{id:32,isBought:!1,image:n(62).default,name:"Buch „Du+Ich in Ewigkeit“",description:"Buch „Du + Ich in Ewigkeit“",link:"https://www.thalia.de/shop/home/artikeldetails/A1038260264",version:0},{id:33,isBought:!1,image:n(63).default,name:"Mehrfachverwendbares Backpapier",description:"Spülmaschinenfestes, mehrfachverwendbares Backpapier",link:"https://www.amazon.de/Pritogo-Dauerbackfolie-Backunterlage-sp%C3%BClmaschinenfest-antihaftbeschichtet/dp/B07GNVHQKQ/ref=pd_sbs_3/259-2377249-7131115",version:0},{id:34,isBought:!1,image:n(64).default,name:"Großes Bienenwachstuch",description:"Ein großes Bienenwachstuch (mind. 50x40cm) zum Abdecken unserer Auflaufform (Link als Beispiel)",link:"https://pachamama-laden.de/de/item/wildwax-xl-50x40cm-bienenwachstucher-versch-designs",version:0}]},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/GoPro.ed440f46.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/AdventureKit_GoPro.5817a5cd.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Messerblock.37f276b4.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/großer_Topf.217106a4.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/studienbibel.a9d43b53.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Bang.0bebac95.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Codenames.0ee52eef.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Staubsaugerroboter.c4afafb7.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Weltkarte.c48c0da4.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Korkplatte.55ad6adc.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Sitzkissen.565f053f.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Stoffservietten.067d196a.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Nudelzange.0833958c.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Eisportionierer.46351c85.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Gießkanne.236ad5de.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Saftpresse.26718040.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Buch.c49ed945.jpeg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Backpapier.910a2c78.png"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/Bienenwachstuch.113b116a.jpeg"},function(e,t,n){"use strict";
/** @license React v17.0.2
* react.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var i=n(23),r=60103,o=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var a=60109,s=60110,l=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;r=d("react.element"),o=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),a=d("react.provider"),s=d("react.context"),l=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function h(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var p={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m={};function g(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||p}function v(){}function y(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||p}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(h(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=g.prototype;var b=y.prototype=new v;b.constructor=y,i(b,g.prototype),b.isPureReactComponent=!0;var w={current:null},k=Object.prototype.hasOwnProperty,x={key:!0,ref:!0,__self:!0,__source:!0};function _(e,t,n){var i,o={},a=null,s=null;if(null!=t)for(i in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(a=""+t.key),t)k.call(t,i)&&!x.hasOwnProperty(i)&&(o[i]=t[i]);var l=arguments.length-2;if(1===l)o.children=n;else if(1<l){for(var u=Array(l),c=0;c<l;c++)u[c]=arguments[c+2];o.children=u}if(e&&e.defaultProps)for(i in l=e.defaultProps)void 0===o[i]&&(o[i]=l[i]);return{$$typeof:r,type:e,key:a,ref:s,props:o,_owner:w.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===r}var E=/\/+/g;function S(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function T(e,t,n,i,a){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l=!1;if(null===e)l=!0;else switch(s){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case r:case o:l=!0}}if(l)return a=a(l=e),e=""===i?"."+S(l,0):i,Array.isArray(a)?(n="",null!=e&&(n=e.replace(E,"$&/")+"/"),T(a,t,n,"",(function(e){return e}))):null!=a&&(C(a)&&(a=function(e,t){return{$$typeof:r,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(a,n+(!a.key||l&&l.key===a.key?"":(""+a.key).replace(E,"$&/")+"/")+e)),t.push(a)),1;if(l=0,i=""===i?".":i+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=i+S(s=e[u],u);l+=T(s,t,n,c,a)}else if("function"==typeof(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e)))for(e=c.call(e),u=0;!(s=e.next()).done;)l+=T(s=s.value,t,n,c=i+S(s,u++),a);else if("object"===s)throw t=""+e,Error(h(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return l}function O(e,t,n){if(null==e)return e;var i=[],r=0;return T(e,i,"","",(function(e){return t.call(n,e,r++)})),i}function z(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var P={current:null};function $(){var e=P.current;if(null===e)throw Error(h(321));return e}var A={ReactCurrentDispatcher:P,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:i};t.Children={map:O,forEach:function(e,t,n){O(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return O(e,(function(){t++})),t},toArray:function(e){return O(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error(h(143));return e}},t.Component=g,t.PureComponent=y,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=A,t.cloneElement=function(e,t,n){if(null==e)throw Error(h(267,e));var o=i({},e.props),a=e.key,s=e.ref,l=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,l=w.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)k.call(t,c)&&!x.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];o.children=u}return{$$typeof:r,type:e.type,key:a,ref:s,props:o,_owner:l}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:s,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:a,_context:e},e.Consumer=e},t.createElement=_,t.createFactory=function(e){var t=_.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:l,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:z}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return $().useCallback(e,t)},t.useContext=function(e,t){return $().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return $().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return $().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return $().useLayoutEffect(e,t)},t.useMemo=function(e,t){return $().useMemo(e,t)},t.useReducer=function(e,t,n){return $().useReducer(e,t,n)},t.useRef=function(e){return $().useRef(e)},t.useState=function(e){return $().useState(e)},t.version="17.0.2"},function(e,t,n){"use strict";
/** @license React v17.0.2
* react-dom.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var i=n(1),r=n(23),o=n(67);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!i)throw Error(a(227));var s=new Set,l={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(l[e]=t,e=0;e<t.length;e++)s.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,h=Object.prototype.hasOwnProperty,p={},m={};function g(e,t,n,i,r,o,a){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=i,this.attributeNamespace=r,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=a}var v={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){v[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];v[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){v[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){v[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){v[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){v[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){v[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){v[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){v[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var y=/[\-:]([a-z])/g;function b(e){return e[1].toUpperCase()}function w(e,t,n,i){var r=v.hasOwnProperty(t)?v[t]:null;(null!==r?0===r.type:!i&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,i){if(null==t||function(e,t,n,i){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!i&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,i))return!0;if(i)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,r,i)&&(n=null),i||null===r?function(e){return!!h.call(m,e)||!h.call(p,e)&&(f.test(e)?m[e]=!0:(p[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):r.mustUseProperty?e[r.propertyName]=null===n?3!==r.type&&"":n:(t=r.attributeName,i=r.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(r=r.type)||4===r&&!0===n?"":""+n,i?e.setAttributeNS(i,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(y,b);v[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(y,b);v[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(y,b);v[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){v[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),v.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){v[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var k=i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,x=60103,_=60106,C=60107,E=60108,S=60114,T=60109,O=60110,z=60112,P=60113,$=60120,A=60115,M=60116,L=60121,N=60128,I=60129,D=60130,j=60131;if("function"==typeof Symbol&&Symbol.for){var R=Symbol.for;x=R("react.element"),_=R("react.portal"),C=R("react.fragment"),E=R("react.strict_mode"),S=R("react.profiler"),T=R("react.provider"),O=R("react.context"),z=R("react.forward_ref"),P=R("react.suspense"),$=R("react.suspense_list"),A=R("react.memo"),M=R("react.lazy"),L=R("react.block"),R("react.scope"),N=R("react.opaque.id"),I=R("react.debug_trace_mode"),D=R("react.offscreen"),j=R("react.legacy_hidden")}var F,H="function"==typeof Symbol&&Symbol.iterator;function B(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=H&&e[H]||e["@@iterator"])?e:null}function q(e){if(void 0===F)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);F=t&&t[1]||""}return"\n"+F+e}var W=!1;function V(e,t){if(!e||W)return"";W=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(e){var i=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){i=e}e.call(t.prototype)}else{try{throw Error()}catch(e){i=e}e()}}catch(e){if(e&&i&&"string"==typeof e.stack){for(var r=e.stack.split("\n"),o=i.stack.split("\n"),a=r.length-1,s=o.length-1;1<=a&&0<=s&&r[a]!==o[s];)s--;for(;1<=a&&0<=s;a--,s--)if(r[a]!==o[s]){if(1!==a||1!==s)do{if(a--,0>--s||r[a]!==o[s])return"\n"+r[a].replace(" at new "," at ")}while(1<=a&&0<=s);break}}}finally{W=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?q(e):""}function U(e){switch(e.tag){case 5:return q(e.type);case 16:return q("Lazy");case 13:return q("Suspense");case 19:return q("SuspenseList");case 0:case 2:case 15:return e=V(e.type,!1);case 11:return e=V(e.type.render,!1);case 22:return e=V(e.type._render,!1);case 1:return e=V(e.type,!0);default:return""}}function G(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case C:return"Fragment";case _:return"Portal";case S:return"Profiler";case E:return"StrictMode";case P:return"Suspense";case $:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case O:return(e.displayName||"Context")+".Consumer";case T:return(e._context.displayName||"Context")+".Provider";case z:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case A:return G(e.type);case L:return G(e._render);case M:t=e._payload,e=e._init;try{return G(e(t))}catch(e){}}return null}function Q(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function Y(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function K(e){e._valueTracker||(e._valueTracker=function(e){var t=Y(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),i=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var r=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return r.call(this)},set:function(e){i=""+e,o.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return i},setValue:function(e){i=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function X(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),i="";return e&&(i=Y(e)?e.checked?"true":"false":e.value),(e=i)!==n&&(t.setValue(e),!0)}function Z(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return r({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,i=null!=t.checked?t.checked:t.defaultChecked;n=Q(null!=t.value?t.value:n),e._wrapperState={initialChecked:i,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=Q(t.value),i=t.type;if(null!=n)"number"===i?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===i||"reset"===i)return void e.removeAttribute("value");t.hasOwnProperty("value")?re(e,t.type,n):t.hasOwnProperty("defaultValue")&&re(e,t.type,Q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function ie(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var i=t.type;if(!("submit"!==i&&"reset"!==i||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function re(e,t,n){"number"===t&&Z(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function oe(e,t){return e=r({children:void 0},t),(t=function(e){var t="";return i.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ae(e,t,n,i){if(e=e.options,t){t={};for(var r=0;r<n.length;r++)t["$"+n[r]]=!0;for(n=0;n<e.length;n++)r=t.hasOwnProperty("$"+e[n].value),e[n].selected!==r&&(e[n].selected=r),r&&i&&(e[n].defaultSelected=!0)}else{for(n=""+Q(n),t=null,r=0;r<e.length;r++){if(e[r].value===n)return e[r].selected=!0,void(i&&(e[r].defaultSelected=!0));null!==t||e[r].disabled||(t=e[r])}null!==t&&(t.selected=!0)}}function se(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return r({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function le(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:Q(n)}}function ue(e,t){var n=Q(t.value),i=Q(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=i&&(e.defaultValue=""+i)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de="http://www.w3.org/1999/xhtml",fe="http://www.w3.org/2000/svg";function he(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function pe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?he(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,ge=function(e){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(t,n,i,r){MSApp.execUnsafeLocalFunction((function(){return e(t,n)}))}:e}((function(e,t){if(e.namespaceURI!==fe||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}}));function ve(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ye={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},be=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ye.hasOwnProperty(e)&&ye[e]?(""+t).trim():t+"px"}function ke(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var i=0===n.indexOf("--"),r=we(n,t[n],i);"float"===n&&(n="cssFloat"),i?e.setProperty(n,r):e[n]=r}}Object.keys(ye).forEach((function(e){be.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ye[t]=ye[e]}))}));var xe=r({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function _e(e,t){if(t){if(xe[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function Ce(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Ee(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Se=null,Te=null,Oe=null;function ze(e){if(e=Zi(e)){if("function"!=typeof Se)throw Error(a(280));var t=e.stateNode;t&&(t=er(t),Se(e.stateNode,e.type,t))}}function Pe(e){Te?Oe?Oe.push(e):Oe=[e]:Te=e}function $e(){if(Te){var e=Te,t=Oe;if(Oe=Te=null,ze(e),t)for(e=0;e<t.length;e++)ze(t[e])}}function Ae(e,t){return e(t)}function Me(e,t,n,i,r){return e(t,n,i,r)}function Le(){}var Ne=Ae,Ie=!1,De=!1;function je(){null===Te&&null===Oe||(Le(),$e())}function Re(e,t){var n=e.stateNode;if(null===n)return null;var i=er(n);if(null===i)return null;n=i[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(i=!i.disabled)||(i=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!i;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}var Fe=!1;if(d)try{var He={};Object.defineProperty(He,"passive",{get:function(){Fe=!0}}),window.addEventListener("test",He,He),window.removeEventListener("test",He,He)}catch(e){Fe=!1}function Be(e,t,n,i,r,o,a,s,l){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(e){this.onError(e)}}var qe=!1,We=null,Ve=!1,Ue=null,Ge={onError:function(e){qe=!0,We=e}};function Qe(e,t,n,i,r,o,a,s,l){qe=!1,We=null,Be.apply(Ge,arguments)}function Ye(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ke(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Xe(e){if(Ye(e)!==e)throw Error(a(188))}function Ze(e){if(!(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ye(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,i=t;;){var r=n.return;if(null===r)break;var o=r.alternate;if(null===o){if(null!==(i=r.return)){n=i;continue}break}if(r.child===o.child){for(o=r.child;o;){if(o===n)return Xe(r),e;if(o===i)return Xe(r),t;o=o.sibling}throw Error(a(188))}if(n.return!==i.return)n=r,i=o;else{for(var s=!1,l=r.child;l;){if(l===n){s=!0,n=r,i=o;break}if(l===i){s=!0,i=r,n=o;break}l=l.sibling}if(!s){for(l=o.child;l;){if(l===n){s=!0,n=o,i=r;break}if(l===i){s=!0,i=o,n=r;break}l=l.sibling}if(!s)throw Error(a(189))}}if(n.alternate!==i)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e)))return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,it,rt=!1,ot=[],at=null,st=null,lt=null,ut=new Map,ct=new Map,dt=[],ft="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function ht(e,t,n,i,r){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:r,targetContainers:[i]}}function pt(e,t){switch(e){case"focusin":case"focusout":at=null;break;case"dragenter":case"dragleave":st=null;break;case"mouseover":case"mouseout":lt=null;break;case"pointerover":case"pointerout":ut.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ct.delete(t.pointerId)}}function mt(e,t,n,i,r,o){return null===e||e.nativeEvent!==o?(e=ht(t,n,i,r,o),null!==t&&(null!==(t=Zi(t))&&tt(t)),e):(e.eventSystemFlags|=i,t=e.targetContainers,null!==r&&-1===t.indexOf(r)&&t.push(r),e)}function gt(e){var t=Xi(e.target);if(null!==t){var n=Ye(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ke(n)))return e.blockedOn=t,void it(e.lanePriority,(function(){o.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function vt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Zt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=Zi(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function yt(e,t,n){vt(e)&&n.delete(t)}function bt(){for(rt=!1;0<ot.length;){var e=ot[0];if(null!==e.blockedOn){null!==(e=Zi(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Zt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&ot.shift()}null!==at&&vt(at)&&(at=null),null!==st&&vt(st)&&(st=null),null!==lt&&vt(lt)&&(lt=null),ut.forEach(yt),ct.forEach(yt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,rt||(rt=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,bt)))}function kt(e){function t(t){return wt(t,e)}if(0<ot.length){wt(ot[0],e);for(var n=1;n<ot.length;n++){var i=ot[n];i.blockedOn===e&&(i.blockedOn=null)}}for(null!==at&&wt(at,e),null!==st&&wt(st,e),null!==lt&&wt(lt,e),ut.forEach(t),ct.forEach(t),n=0;n<dt.length;n++)(i=dt[n]).blockedOn===e&&(i.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)gt(n),null===n.blockedOn&&dt.shift()}function xt(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var _t={animationend:xt("Animation","AnimationEnd"),animationiteration:xt("Animation","AnimationIteration"),animationstart:xt("Animation","AnimationStart"),transitionend:xt("Transition","TransitionEnd")},Ct={},Et={};function St(e){if(Ct[e])return Ct[e];if(!_t[e])return e;var t,n=_t[e];for(t in n)if(n.hasOwnProperty(t)&&t in Et)return Ct[e]=n[t];return e}d&&(Et=document.createElement("div").style,"AnimationEvent"in window||(delete _t.animationend.animation,delete _t.animationiteration.animation,delete _t.animationstart.animation),"TransitionEvent"in window||delete _t.transitionend.transition);var Tt=St("animationend"),Ot=St("animationiteration"),zt=St("animationstart"),Pt=St("transitionend"),$t=new Map,At=new Map,Mt=["abort","abort",Tt,"animationEnd",Ot,"animationIteration",zt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Pt,"transitionEnd","waiting","waiting"];function Lt(e,t){for(var n=0;n<e.length;n+=2){var i=e[n],r=e[n+1];r="on"+(r[0].toUpperCase()+r.slice(1)),At.set(i,t),$t.set(i,r),u(r,[i])}}(0,o.unstable_now)();var Nt=8;function It(e){if(0!=(1&e))return Nt=15,1;if(0!=(2&e))return Nt=14,2;if(0!=(4&e))return Nt=13,4;var t=24&e;return 0!==t?(Nt=12,t):0!=(32&e)?(Nt=11,32):0!==(t=192&e)?(Nt=10,t):0!=(256&e)?(Nt=9,256):0!==(t=3584&e)?(Nt=8,t):0!=(4096&e)?(Nt=7,4096):0!==(t=4186112&e)?(Nt=6,t):0!==(t=62914560&e)?(Nt=5,t):67108864&e?(Nt=4,67108864):0!=(134217728&e)?(Nt=3,134217728):0!==(t=805306368&e)?(Nt=2,t):0!=(1073741824&e)?(Nt=1,1073741824):(Nt=8,e)}function Dt(e,t){var n=e.pendingLanes;if(0===n)return Nt=0;var i=0,r=0,o=e.expiredLanes,a=e.suspendedLanes,s=e.pingedLanes;if(0!==o)i=o,r=Nt=15;else if(0!==(o=134217727&n)){var l=o&~a;0!==l?(i=It(l),r=Nt):0!==(s&=o)&&(i=It(s),r=Nt)}else 0!==(o=n&~a)?(i=It(o),r=Nt):0!==s&&(i=It(s),r=Nt);if(0===i)return 0;if(i=n&((0>(i=31-qt(i))?0:1<<i)<<1)-1,0!==t&&t!==i&&0==(t&a)){if(It(t),r<=Nt)return t;Nt=r}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=i;0<t;)r=1<<(n=31-qt(t)),i|=e[n],t&=~r;return i}function jt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Rt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=Ft(24&~t))?Rt(10,t):e;case 10:return 0===(e=Ft(192&~t))?Rt(8,t):e;case 8:return 0===(e=Ft(3584&~t))&&(0===(e=Ft(4186112&~t))&&(e=512)),e;case 2:return 0===(t=Ft(805306368&~t))&&(t=268435456),t}throw Error(a(358,e))}function Ft(e){return e&-e}function Ht(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Bt(e,t,n){e.pendingLanes|=t;var i=t-1;e.suspendedLanes&=i,e.pingedLanes&=i,(e=e.eventTimes)[t=31-qt(t)]=n}var qt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Wt(e)/Vt|0)|0},Wt=Math.log,Vt=Math.LN2;var Ut=o.unstable_UserBlockingPriority,Gt=o.unstable_runWithPriority,Qt=!0;function Yt(e,t,n,i){Ie||Le();var r=Xt,o=Ie;Ie=!0;try{Me(r,e,t,n,i)}finally{(Ie=o)||je()}}function Kt(e,t,n,i){Gt(Ut,Xt.bind(null,e,t,n,i))}function Xt(e,t,n,i){var r;if(Qt)if((r=0==(4&t))&&0<ot.length&&-1<ft.indexOf(e))e=ht(null,e,t,n,i),ot.push(e);else{var o=Zt(e,t,n,i);if(null===o)r&&pt(e,i);else{if(r){if(-1<ft.indexOf(e))return e=ht(o,e,t,n,i),void ot.push(e);if(function(e,t,n,i,r){switch(t){case"focusin":return at=mt(at,e,t,n,i,r),!0;case"dragenter":return st=mt(st,e,t,n,i,r),!0;case"mouseover":return lt=mt(lt,e,t,n,i,r),!0;case"pointerover":var o=r.pointerId;return ut.set(o,mt(ut.get(o)||null,e,t,n,i,r)),!0;case"gotpointercapture":return o=r.pointerId,ct.set(o,mt(ct.get(o)||null,e,t,n,i,r)),!0}return!1}(o,e,t,n,i))return;pt(e,i)}Pi(e,t,i,null,n)}}}function Zt(e,t,n,i){var r=Ee(i);if(null!==(r=Xi(r))){var o=Ye(r);if(null===o)r=null;else{var a=o.tag;if(13===a){if(null!==(r=Ke(o)))return r;r=null}else if(3===a){if(o.stateNode.hydrate)return 3===o.tag?o.stateNode.containerInfo:null;r=null}else o!==r&&(r=null)}}return Pi(e,t,i,r,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,i=n.length,r="value"in Jt?Jt.value:Jt.textContent,o=r.length;for(e=0;e<i&&n[e]===r[e];e++);var a=i-e;for(t=1;t<=a&&n[i-t]===r[o-t];t++);return tn=r.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function an(){return!1}function sn(e){function t(t,n,i,r,o){for(var a in this._reactName=t,this._targetInst=i,this.type=n,this.nativeEvent=r,this.target=o,this.currentTarget=null,e)e.hasOwnProperty(a)&&(t=e[a],this[a]=t?t(r):r[a]);return this.isDefaultPrevented=(null!=r.defaultPrevented?r.defaultPrevented:!1===r.returnValue)?on:an,this.isPropagationStopped=an,this}return r(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var ln,un,cn,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},fn=sn(dn),hn=r({},dn,{view:0,detail:0}),pn=sn(hn),mn=r({},hn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Sn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cn&&(cn&&"mousemove"===e.type?(ln=e.screenX-cn.screenX,un=e.screenY-cn.screenY):un=ln=0,cn=e),ln)},movementY:function(e){return"movementY"in e?e.movementY:un}}),gn=sn(mn),vn=sn(r({},mn,{dataTransfer:0})),yn=sn(r({},hn,{relatedTarget:0})),bn=sn(r({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=sn(r({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}})),kn=sn(r({},dn,{data:0})),xn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},_n={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Cn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function En(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Cn[e])&&!!t[e]}function Sn(){return En}var Tn=sn(r({},hn,{key:function(e){if(e.key){var t=xn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?_n[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Sn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}})),On=sn(r({},mn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),zn=sn(r({},hn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Sn})),Pn=sn(r({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),$n=sn(r({},mn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0})),An=[9,13,27,32],Mn=d&&"CompositionEvent"in window,Ln=null;d&&"documentMode"in document&&(Ln=document.documentMode);var Nn=d&&"TextEvent"in window&&!Ln,In=d&&(!Mn||Ln&&8<Ln&&11>=Ln),Dn=String.fromCharCode(32),jn=!1;function Rn(e,t){switch(e){case"keyup":return-1!==An.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Fn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Hn=!1;var Bn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function qn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Bn[e.type]:"textarea"===t}function Wn(e,t,n,i){Pe(i),0<(t=Ai(t,"onChange")).length&&(n=new fn("onChange","change",null,n,i),e.push({event:n,listeners:t}))}var Vn=null,Un=null;function Gn(e){Ci(e,0)}function Qn(e){if(X(Ji(e)))return e}function Yn(e,t){if("change"===e)return t}var Kn=!1;if(d){var Xn;if(d){var Zn="oninput"in document;if(!Zn){var Jn=document.createElement("div");Jn.setAttribute("oninput","return;"),Zn="function"==typeof Jn.oninput}Xn=Zn}else Xn=!1;Kn=Xn&&(!document.documentMode||9<document.documentMode)}function ei(){Vn&&(Vn.detachEvent("onpropertychange",ti),Un=Vn=null)}function ti(e){if("value"===e.propertyName&&Qn(Un)){var t=[];if(Wn(t,Un,e,Ee(e)),e=Gn,Ie)e(t);else{Ie=!0;try{Ae(e,t)}finally{Ie=!1,je()}}}}function ni(e,t,n){"focusin"===e?(ei(),Un=n,(Vn=t).attachEvent("onpropertychange",ti)):"focusout"===e&&ei()}function ii(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Qn(Un)}function ri(e,t){if("click"===e)return Qn(t)}function oi(e,t){if("input"===e||"change"===e)return Qn(t)}var ai="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},si=Object.prototype.hasOwnProperty;function li(e,t){if(ai(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),i=Object.keys(t);if(n.length!==i.length)return!1;for(i=0;i<n.length;i++)if(!si.call(t,n[i])||!ai(e[n[i]],t[n[i]]))return!1;return!0}function ui(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ci(e,t){var n,i=ui(e);for(e=0;i;){if(3===i.nodeType){if(n=e+i.textContent.length,e<=t&&n>=t)return{node:i,offset:t-e};e=n}e:{for(;i;){if(i.nextSibling){i=i.nextSibling;break e}i=i.parentNode}i=void 0}i=ui(i)}}function di(){for(var e=window,t=Z();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(e){n=!1}if(!n)break;t=Z((e=t.contentWindow).document)}return t}function fi(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var hi=d&&"documentMode"in document&&11>=document.documentMode,pi=null,mi=null,gi=null,vi=!1;function yi(e,t,n){var i=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;vi||null==pi||pi!==Z(i)||("selectionStart"in(i=pi)&&fi(i)?i={start:i.selectionStart,end:i.selectionEnd}:i={anchorNode:(i=(i.ownerDocument&&i.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:i.anchorOffset,focusNode:i.focusNode,focusOffset:i.focusOffset},gi&&li(gi,i)||(gi=i,0<(i=Ai(mi,"onSelect")).length&&(t=new fn("onSelect","select",null,t,n),e.push({event:t,listeners:i}),t.target=pi)))}Lt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Lt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Lt(Mt,2);for(var bi="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),wi=0;wi<bi.length;wi++)At.set(bi[wi],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var ki="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),xi=new Set("cancel close invalid load scroll toggle".split(" ").concat(ki));function _i(e,t,n){var i=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,i,r,o,s,l,u){if(Qe.apply(this,arguments),qe){if(!qe)throw Error(a(198));var c=We;qe=!1,We=null,Ve||(Ve=!0,Ue=c)}}(i,t,void 0,e),e.currentTarget=null}function Ci(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var i=e[n],r=i.event;i=i.listeners;e:{var o=void 0;if(t)for(var a=i.length-1;0<=a;a--){var s=i[a],l=s.instance,u=s.currentTarget;if(s=s.listener,l!==o&&r.isPropagationStopped())break e;_i(r,s,u),o=l}else for(a=0;a<i.length;a++){if(l=(s=i[a]).instance,u=s.currentTarget,s=s.listener,l!==o&&r.isPropagationStopped())break e;_i(r,s,u),o=l}}}if(Ve)throw e=Ue,Ve=!1,Ue=null,e}function Ei(e,t){var n=tr(t),i=e+"__bubble";n.has(i)||(zi(t,e,2,!1),n.add(i))}var Si="_reactListening"+Math.random().toString(36).slice(2);function Ti(e){e[Si]||(e[Si]=!0,s.forEach((function(t){xi.has(t)||Oi(t,!1,e,null),Oi(t,!0,e,null)})))}function Oi(e,t,n,i){var r=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,o=n;if("selectionchange"===e&&9!==n.nodeType&&(o=n.ownerDocument),null!==i&&!t&&xi.has(e)){if("scroll"!==e)return;r|=2,o=i}var a=tr(o),s=e+"__"+(t?"capture":"bubble");a.has(s)||(t&&(r|=4),zi(o,e,r,t),a.add(s))}function zi(e,t,n,i){var r=At.get(t);switch(void 0===r?2:r){case 0:r=Yt;break;case 1:r=Kt;break;default:r=Xt}n=r.bind(null,t,n,e),r=void 0,!Fe||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(r=!0),i?void 0!==r?e.addEventListener(t,n,{capture:!0,passive:r}):e.addEventListener(t,n,!0):void 0!==r?e.addEventListener(t,n,{passive:r}):e.addEventListener(t,n,!1)}function Pi(e,t,n,i,r){var o=i;if(0==(1&t)&&0==(2&t)&&null!==i)e:for(;;){if(null===i)return;var a=i.tag;if(3===a||4===a){var s=i.stateNode.containerInfo;if(s===r||8===s.nodeType&&s.parentNode===r)break;if(4===a)for(a=i.return;null!==a;){var l=a.tag;if((3===l||4===l)&&((l=a.stateNode.containerInfo)===r||8===l.nodeType&&l.parentNode===r))return;a=a.return}for(;null!==s;){if(null===(a=Xi(s)))return;if(5===(l=a.tag)||6===l){i=o=a;continue e}s=s.parentNode}}i=i.return}!function(e,t,n){if(De)return e(t,n);De=!0;try{Ne(e,t,n)}finally{De=!1,je()}}((function(){var i=o,r=Ee(n),a=[];e:{var s=$t.get(e);if(void 0!==s){var l=fn,u=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":l=Tn;break;case"focusin":u="focus",l=yn;break;case"focusout":u="blur",l=yn;break;case"beforeblur":case"afterblur":l=yn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=gn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=vn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=zn;break;case Tt:case Ot:case zt:l=bn;break;case Pt:l=Pn;break;case"scroll":l=pn;break;case"wheel":l=$n;break;case"copy":case"cut":case"paste":l=wn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=On}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==s?s+"Capture":null:s;c=[];for(var h,p=i;null!==p;){var m=(h=p).stateNode;if(5===h.tag&&null!==m&&(h=m,null!==f&&(null!=(m=Re(p,f))&&c.push($i(p,m,h)))),d)break;p=p.return}0<c.length&&(s=new l(s,u,null,n,r),a.push({event:s,listeners:c}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!Xi(u)&&!u[Yi])&&(l||s)&&(s=r.window===r?r:(s=r.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=i,null!==(u=(u=n.relatedTarget||n.toElement)?Xi(u):null)&&(u!==(d=Ye(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(l=null,u=i),l!==u)){if(c=gn,m="onMouseLeave",f="onMouseEnter",p="mouse","pointerout"!==e&&"pointerover"!==e||(c=On,m="onPointerLeave",f="onPointerEnter",p="pointer"),d=null==l?s:Ji(l),h=null==u?s:Ji(u),(s=new c(m,p+"leave",l,n,r)).target=d,s.relatedTarget=h,m=null,Xi(r)===i&&((c=new c(f,p+"enter",u,n,r)).target=h,c.relatedTarget=d,m=c),d=m,l&&u)e:{for(f=u,p=0,h=c=l;h;h=Mi(h))p++;for(h=0,m=f;m;m=Mi(m))h++;for(;0<p-h;)c=Mi(c),p--;for(;0<h-p;)f=Mi(f),h--;for(;p--;){if(c===f||null!==f&&c===f.alternate)break e;c=Mi(c),f=Mi(f)}c=null}else c=null;null!==l&&Li(a,s,l,c,!1),null!==u&&null!==d&&Li(a,d,u,c,!0)}if("select"===(l=(s=i?Ji(i):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var g=Yn;else if(qn(s))if(Kn)g=oi;else{g=ii;var v=ni}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(g=ri);switch(g&&(g=g(e,i))?Wn(a,g,n,r):(v&&v(e,s,i),"focusout"===e&&(v=s._wrapperState)&&v.controlled&&"number"===s.type&&re(s,"number",s.value)),v=i?Ji(i):window,e){case"focusin":(qn(v)||"true"===v.contentEditable)&&(pi=v,mi=i,gi=null);break;case"focusout":gi=mi=pi=null;break;case"mousedown":vi=!0;break;case"contextmenu":case"mouseup":case"dragend":vi=!1,yi(a,n,r);break;case"selectionchange":if(hi)break;case"keydown":case"keyup":yi(a,n,r)}var y;if(Mn)e:{switch(e){case"compositionstart":var b="onCompositionStart";break e;case"compositionend":b="onCompositionEnd";break e;case"compositionupdate":b="onCompositionUpdate";break e}b=void 0}else Hn?Rn(e,n)&&(b="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(b="onCompositionStart");b&&(In&&"ko"!==n.locale&&(Hn||"onCompositionStart"!==b?"onCompositionEnd"===b&&Hn&&(y=nn()):(en="value"in(Jt=r)?Jt.value:Jt.textContent,Hn=!0)),0<(v=Ai(i,b)).length&&(b=new kn(b,e,null,n,r),a.push({event:b,listeners:v}),y?b.data=y:null!==(y=Fn(n))&&(b.data=y))),(y=Nn?function(e,t){switch(e){case"compositionend":return Fn(t);case"keypress":return 32!==t.which?null:(jn=!0,Dn);case"textInput":return(e=t.data)===Dn&&jn?null:e;default:return null}}(e,n):function(e,t){if(Hn)return"compositionend"===e||!Mn&&Rn(e,t)?(e=nn(),tn=en=Jt=null,Hn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return In&&"ko"!==t.locale?null:t.data;default:return null}}(e,n))&&(0<(i=Ai(i,"onBeforeInput")).length&&(r=new kn("onBeforeInput","beforeinput",null,n,r),a.push({event:r,listeners:i}),r.data=y))}Ci(a,t)}))}function $i(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Ai(e,t){for(var n=t+"Capture",i=[];null!==e;){var r=e,o=r.stateNode;5===r.tag&&null!==o&&(r=o,null!=(o=Re(e,n))&&i.unshift($i(e,o,r)),null!=(o=Re(e,t))&&i.push($i(e,o,r))),e=e.return}return i}function Mi(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Li(e,t,n,i,r){for(var o=t._reactName,a=[];null!==n&&n!==i;){var s=n,l=s.alternate,u=s.stateNode;if(null!==l&&l===i)break;5===s.tag&&null!==u&&(s=u,r?null!=(l=Re(n,o))&&a.unshift($i(n,l,s)):r||null!=(l=Re(n,o))&&a.push($i(n,l,s))),n=n.return}0!==a.length&&e.push({event:t,listeners:a})}function Ni(){}var Ii=null,Di=null;function ji(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Ri(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Fi="function"==typeof setTimeout?setTimeout:void 0,Hi="function"==typeof clearTimeout?clearTimeout:void 0;function Bi(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function qi(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Wi(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Vi=0;var Ui=Math.random().toString(36).slice(2),Gi="__reactFiber$"+Ui,Qi="__reactProps$"+Ui,Yi="__reactContainer$"+Ui,Ki="__reactEvents$"+Ui;function Xi(e){var t=e[Gi];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Yi]||n[Gi]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Wi(e);null!==e;){if(n=e[Gi])return n;e=Wi(e)}return t}n=(e=n).parentNode}return null}function Zi(e){return!(e=e[Gi]||e[Yi])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function Ji(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function er(e){return e[Qi]||null}function tr(e){var t=e[Ki];return void 0===t&&(t=e[Ki]=new Set),t}var nr=[],ir=-1;function rr(e){return{current:e}}function or(e){0>ir||(e.current=nr[ir],nr[ir]=null,ir--)}function ar(e,t){ir++,nr[ir]=e.current,e.current=t}var sr={},lr=rr(sr),ur=rr(!1),cr=sr;function dr(e,t){var n=e.type.contextTypes;if(!n)return sr;var i=e.stateNode;if(i&&i.__reactInternalMemoizedUnmaskedChildContext===t)return i.__reactInternalMemoizedMaskedChildContext;var r,o={};for(r in n)o[r]=t[r];return i&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function fr(e){return null!=(e=e.childContextTypes)}function hr(){or(ur),or(lr)}function pr(e,t,n){if(lr.current!==sr)throw Error(a(168));ar(lr,t),ar(ur,n)}function mr(e,t,n){var i=e.stateNode;if(e=t.childContextTypes,"function"!=typeof i.getChildContext)return n;for(var o in i=i.getChildContext())if(!(o in e))throw Error(a(108,G(t)||"Unknown",o));return r({},n,i)}function gr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||sr,cr=lr.current,ar(lr,e),ar(ur,ur.current),!0}function vr(e,t,n){var i=e.stateNode;if(!i)throw Error(a(169));n?(e=mr(e,t,cr),i.__reactInternalMemoizedMergedChildContext=e,or(ur),or(lr),ar(lr,e)):or(ur),ar(ur,n)}var yr=null,br=null,wr=o.unstable_runWithPriority,kr=o.unstable_scheduleCallback,xr=o.unstable_cancelCallback,_r=o.unstable_shouldYield,Cr=o.unstable_requestPaint,Er=o.unstable_now,Sr=o.unstable_getCurrentPriorityLevel,Tr=o.unstable_ImmediatePriority,Or=o.unstable_UserBlockingPriority,zr=o.unstable_NormalPriority,Pr=o.unstable_LowPriority,$r=o.unstable_IdlePriority,Ar={},Mr=void 0!==Cr?Cr:function(){},Lr=null,Nr=null,Ir=!1,Dr=Er(),jr=1e4>Dr?Er:function(){return Er()-Dr};function Rr(){switch(Sr()){case Tr:return 99;case Or:return 98;case zr:return 97;case Pr:return 96;case $r:return 95;default:throw Error(a(332))}}function Fr(e){switch(e){case 99:return Tr;case 98:return Or;case 97:return zr;case 96:return Pr;case 95:return $r;default:throw Error(a(332))}}function Hr(e,t){return e=Fr(e),wr(e,t)}function Br(e,t,n){return e=Fr(e),kr(e,t,n)}function qr(){if(null!==Nr){var e=Nr;Nr=null,xr(e)}Wr()}function Wr(){if(!Ir&&null!==Lr){Ir=!0;var e=0;try{var t=Lr;Hr(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Lr=null}catch(t){throw null!==Lr&&(Lr=Lr.slice(e+1)),kr(Tr,qr),t}finally{Ir=!1}}}var Vr=k.ReactCurrentBatchConfig;function Ur(e,t){if(e&&e.defaultProps){for(var n in t=r({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Gr=rr(null),Qr=null,Yr=null,Kr=null;function Xr(){Kr=Yr=Qr=null}function Zr(e){var t=Gr.current;or(Gr),e.type._context._currentValue=t}function Jr(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function eo(e,t){Qr=e,Kr=Yr=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Aa=!0),e.firstContext=null)}function to(e,t){if(Kr!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(Kr=e,t=1073741823),t={context:e,observedBits:t,next:null},null===Yr){if(null===Qr)throw Error(a(308));Yr=t,Qr.dependencies={lanes:0,firstContext:t,responders:null}}else Yr=Yr.next=t;return e._currentValue}var no=!1;function io(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ro(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function oo(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function ao(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function so(e,t){var n=e.updateQueue,i=e.alternate;if(null!==i&&n===(i=i.updateQueue)){var r=null,o=null;if(null!==(n=n.firstBaseUpdate)){do{var a={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===o?r=o=a:o=o.next=a,n=n.next}while(null!==n);null===o?r=o=t:o=o.next=t}else r=o=t;return n={baseState:i.baseState,firstBaseUpdate:r,lastBaseUpdate:o,shared:i.shared,effects:i.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function lo(e,t,n,i){var o=e.updateQueue;no=!1;var a=o.firstBaseUpdate,s=o.lastBaseUpdate,l=o.shared.pending;if(null!==l){o.shared.pending=null;var u=l,c=u.next;u.next=null,null===s?a=c:s.next=c,s=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==s&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==a){for(f=o.baseState,s=0,d=c=u=null;;){l=a.lane;var h=a.eventTime;if((i&l)===l){null!==d&&(d=d.next={eventTime:h,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var p=e,m=a;switch(l=t,h=n,m.tag){case 1:if("function"==typeof(p=m.payload)){f=p.call(h,f,l);break e}f=p;break e;case 3:p.flags=-4097&p.flags|64;case 0:if(null==(l="function"==typeof(p=m.payload)?p.call(h,f,l):p))break e;f=r({},f,l);break e;case 2:no=!0}}null!==a.callback&&(e.flags|=32,null===(l=o.effects)?o.effects=[a]:l.push(a))}else h={eventTime:h,lane:l,tag:a.tag,payload:a.payload,callback:a.callback,next:null},null===d?(c=d=h,u=f):d=d.next=h,s|=l;if(null===(a=a.next)){if(null===(l=o.shared.pending))break;a=l.next,l.next=null,o.lastBaseUpdate=l,o.shared.pending=null}}null===d&&(u=f),o.baseState=u,o.firstBaseUpdate=c,o.lastBaseUpdate=d,Ls|=s,e.lanes=s,e.memoizedState=f}}function uo(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var i=e[t],r=i.callback;if(null!==r){if(i.callback=null,i=n,"function"!=typeof r)throw Error(a(191,r));r.call(i)}}}var co=(new i.Component).refs;function fo(e,t,n,i){n=null==(n=n(i,t=e.memoizedState))?t:r({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ho={isMounted:function(e){return!!(e=e._reactInternals)&&Ye(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var i=ol(),r=al(e),o=oo(i,r);o.payload=t,null!=n&&(o.callback=n),ao(e,o),sl(e,r,i)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var i=ol(),r=al(e),o=oo(i,r);o.tag=1,o.payload=t,null!=n&&(o.callback=n),ao(e,o),sl(e,r,i)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=ol(),i=al(e),r=oo(n,i);r.tag=2,null!=t&&(r.callback=t),ao(e,r),sl(e,i,n)}};function po(e,t,n,i,r,o,a){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(i,o,a):!t.prototype||!t.prototype.isPureReactComponent||(!li(n,i)||!li(r,o))}function mo(e,t,n){var i=!1,r=sr,o=t.contextType;return"object"==typeof o&&null!==o?o=to(o):(r=fr(t)?cr:lr.current,o=(i=null!=(i=t.contextTypes))?dr(e,r):sr),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ho,e.stateNode=t,t._reactInternals=e,i&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=r,e.__reactInternalMemoizedMaskedChildContext=o),t}function go(e,t,n,i){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,i),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,i),t.state!==e&&ho.enqueueReplaceState(t,t.state,null)}function vo(e,t,n,i){var r=e.stateNode;r.props=n,r.state=e.memoizedState,r.refs=co,io(e);var o=t.contextType;"object"==typeof o&&null!==o?r.context=to(o):(o=fr(t)?cr:lr.current,r.context=dr(e,o)),lo(e,n,r,i),r.state=e.memoizedState,"function"==typeof(o=t.getDerivedStateFromProps)&&(fo(e,t,o,n),r.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof r.getSnapshotBeforeUpdate||"function"!=typeof r.UNSAFE_componentWillMount&&"function"!=typeof r.componentWillMount||(t=r.state,"function"==typeof r.componentWillMount&&r.componentWillMount(),"function"==typeof r.UNSAFE_componentWillMount&&r.UNSAFE_componentWillMount(),t!==r.state&&ho.enqueueReplaceState(r,r.state,null),lo(e,n,r,i),r.state=e.memoizedState),"function"==typeof r.componentDidMount&&(e.flags|=4)}var yo=Array.isArray;function bo(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var i=n.stateNode}if(!i)throw Error(a(147,e));var r=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===r?t.ref:((t=function(e){var t=i.refs;t===co&&(t=i.refs={}),null===e?delete t[r]:t[r]=e})._stringRef=r,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function wo(e,t){if("textarea"!==e.type)throw Error(a(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function ko(e){function t(t,n){if(e){var i=t.lastEffect;null!==i?(i.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,i){if(!e)return null;for(;null!==i;)t(n,i),i=i.sibling;return null}function i(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function r(e,t){return(e=Rl(e,t)).index=0,e.sibling=null,e}function o(t,n,i){return t.index=i,e?null!==(i=t.alternate)?(i=i.index)<n?(t.flags=2,n):i:(t.flags=2,n):n}function s(t){return e&&null===t.alternate&&(t.flags=2),t}function l(e,t,n,i){return null===t||6!==t.tag?((t=ql(n,e.mode,i)).return=e,t):((t=r(t,n)).return=e,t)}function u(e,t,n,i){return null!==t&&t.elementType===n.type?((i=r(t,n.props)).ref=bo(e,t,n),i.return=e,i):((i=Fl(n.type,n.key,n.props,null,e.mode,i)).ref=bo(e,t,n),i.return=e,i)}function c(e,t,n,i){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Wl(n,e.mode,i)).return=e,t):((t=r(t,n.children||[])).return=e,t)}function d(e,t,n,i,o){return null===t||7!==t.tag?((t=Hl(n,e.mode,i,o)).return=e,t):((t=r(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=ql(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case x:return(n=Fl(t.type,t.key,t.props,null,e.mode,n)).ref=bo(e,null,t),n.return=e,n;case _:return(t=Wl(t,e.mode,n)).return=e,t}if(yo(t)||B(t))return(t=Hl(t,e.mode,n,null)).return=e,t;wo(e,t)}return null}function h(e,t,n,i){var r=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==r?null:l(e,t,""+n,i);if("object"==typeof n&&null!==n){switch(n.$$typeof){case x:return n.key===r?n.type===C?d(e,t,n.props.children,i,r):u(e,t,n,i):null;case _:return n.key===r?c(e,t,n,i):null}if(yo(n)||B(n))return null!==r?null:d(e,t,n,i,null);wo(e,n)}return null}function p(e,t,n,i,r){if("string"==typeof i||"number"==typeof i)return l(t,e=e.get(n)||null,""+i,r);if("object"==typeof i&&null!==i){switch(i.$$typeof){case x:return e=e.get(null===i.key?n:i.key)||null,i.type===C?d(t,e,i.props.children,r,i.key):u(t,e,i,r);case _:return c(t,e=e.get(null===i.key?n:i.key)||null,i,r)}if(yo(i)||B(i))return d(t,e=e.get(n)||null,i,r,null);wo(t,i)}return null}function m(r,a,s,l){for(var u=null,c=null,d=a,m=a=0,g=null;null!==d&&m<s.length;m++){d.index>m?(g=d,d=null):g=d.sibling;var v=h(r,d,s[m],l);if(null===v){null===d&&(d=g);break}e&&d&&null===v.alternate&&t(r,d),a=o(v,a,m),null===c?u=v:c.sibling=v,c=v,d=g}if(m===s.length)return n(r,d),u;if(null===d){for(;m<s.length;m++)null!==(d=f(r,s[m],l))&&(a=o(d,a,m),null===c?u=d:c.sibling=d,c=d);return u}for(d=i(r,d);m<s.length;m++)null!==(g=p(d,r,m,s[m],l))&&(e&&null!==g.alternate&&d.delete(null===g.key?m:g.key),a=o(g,a,m),null===c?u=g:c.sibling=g,c=g);return e&&d.forEach((function(e){return t(r,e)})),u}function g(r,s,l,u){var c=B(l);if("function"!=typeof c)throw Error(a(150));if(null==(l=c.call(l)))throw Error(a(151));for(var d=c=null,m=s,g=s=0,v=null,y=l.next();null!==m&&!y.done;g++,y=l.next()){m.index>g?(v=m,m=null):v=m.sibling;var b=h(r,m,y.value,u);if(null===b){null===m&&(m=v);break}e&&m&&null===b.alternate&&t(r,m),s=o(b,s,g),null===d?c=b:d.sibling=b,d=b,m=v}if(y.done)return n(r,m),c;if(null===m){for(;!y.done;g++,y=l.next())null!==(y=f(r,y.value,u))&&(s=o(y,s,g),null===d?c=y:d.sibling=y,d=y);return c}for(m=i(r,m);!y.done;g++,y=l.next())null!==(y=p(m,r,g,y.value,u))&&(e&&null!==y.alternate&&m.delete(null===y.key?g:y.key),s=o(y,s,g),null===d?c=y:d.sibling=y,d=y);return e&&m.forEach((function(e){return t(r,e)})),c}return function(e,i,o,l){var u="object"==typeof o&&null!==o&&o.type===C&&null===o.key;u&&(o=o.props.children);var c="object"==typeof o&&null!==o;if(c)switch(o.$$typeof){case x:e:{for(c=o.key,u=i;null!==u;){if(u.key===c){switch(u.tag){case 7:if(o.type===C){n(e,u.sibling),(i=r(u,o.props.children)).return=e,e=i;break e}break;default:if(u.elementType===o.type){n(e,u.sibling),(i=r(u,o.props)).ref=bo(e,u,o),i.return=e,e=i;break e}}n(e,u);break}t(e,u),u=u.sibling}o.type===C?((i=Hl(o.props.children,e.mode,l,o.key)).return=e,e=i):((l=Fl(o.type,o.key,o.props,null,e.mode,l)).ref=bo(e,i,o),l.return=e,e=l)}return s(e);case _:e:{for(u=o.key;null!==i;){if(i.key===u){if(4===i.tag&&i.stateNode.containerInfo===o.containerInfo&&i.stateNode.implementation===o.implementation){n(e,i.sibling),(i=r(i,o.children||[])).return=e,e=i;break e}n(e,i);break}t(e,i),i=i.sibling}(i=Wl(o,e.mode,l)).return=e,e=i}return s(e)}if("string"==typeof o||"number"==typeof o)return o=""+o,null!==i&&6===i.tag?(n(e,i.sibling),(i=r(i,o)).return=e,e=i):(n(e,i),(i=ql(o,e.mode,l)).return=e,e=i),s(e);if(yo(o))return m(e,i,o,l);if(B(o))return g(e,i,o,l);if(c&&wo(e,o),void 0===o&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(a(152,G(e.type)||"Component"))}return n(e,i)}}var xo=ko(!0),_o=ko(!1),Co={},Eo=rr(Co),So=rr(Co),To=rr(Co);function Oo(e){if(e===Co)throw Error(a(174));return e}function zo(e,t){switch(ar(To,t),ar(So,e),ar(Eo,Co),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:pe(null,"");break;default:t=pe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}or(Eo),ar(Eo,t)}function Po(){or(Eo),or(So),or(To)}function $o(e){Oo(To.current);var t=Oo(Eo.current),n=pe(t,e.type);t!==n&&(ar(So,e),ar(Eo,n))}function Ao(e){So.current===e&&(or(Eo),or(So))}var Mo=rr(0);function Lo(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var No=null,Io=null,Do=!1;function jo(e,t){var n=Dl(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Ro(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);case 13:default:return!1}}function Fo(e){if(Do){var t=Io;if(t){var n=t;if(!Ro(e,t)){if(!(t=qi(n.nextSibling))||!Ro(e,t))return e.flags=-1025&e.flags|2,Do=!1,void(No=e);jo(No,n)}No=e,Io=qi(t.firstChild)}else e.flags=-1025&e.flags|2,Do=!1,No=e}}function Ho(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;No=e}function Bo(e){if(e!==No)return!1;if(!Do)return Ho(e),Do=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Ri(t,e.memoizedProps))for(t=Io;t;)jo(e,t),t=qi(t.nextSibling);if(Ho(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){Io=qi(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}Io=null}}else Io=No?qi(e.stateNode.nextSibling):null;return!0}function qo(){Io=No=null,Do=!1}var Wo=[];function Vo(){for(var e=0;e<Wo.length;e++)Wo[e]._workInProgressVersionPrimary=null;Wo.length=0}var Uo=k.ReactCurrentDispatcher,Go=k.ReactCurrentBatchConfig,Qo=0,Yo=null,Ko=null,Xo=null,Zo=!1,Jo=!1;function ea(){throw Error(a(321))}function ta(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ai(e[n],t[n]))return!1;return!0}function na(e,t,n,i,r,o){if(Qo=o,Yo=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Uo.current=null===e||null===e.memoizedState?Oa:za,e=n(i,r),Jo){o=0;do{if(Jo=!1,!(25>o))throw Error(a(301));o+=1,Xo=Ko=null,t.updateQueue=null,Uo.current=Pa,e=n(i,r)}while(Jo)}if(Uo.current=Ta,t=null!==Ko&&null!==Ko.next,Qo=0,Xo=Ko=Yo=null,Zo=!1,t)throw Error(a(300));return e}function ia(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===Xo?Yo.memoizedState=Xo=e:Xo=Xo.next=e,Xo}function ra(){if(null===Ko){var e=Yo.alternate;e=null!==e?e.memoizedState:null}else e=Ko.next;var t=null===Xo?Yo.memoizedState:Xo.next;if(null!==t)Xo=t,Ko=e;else{if(null===e)throw Error(a(310));e={memoizedState:(Ko=e).memoizedState,baseState:Ko.baseState,baseQueue:Ko.baseQueue,queue:Ko.queue,next:null},null===Xo?Yo.memoizedState=Xo=e:Xo=Xo.next=e}return Xo}function oa(e,t){return"function"==typeof t?t(e):t}function aa(e){var t=ra(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var i=Ko,r=i.baseQueue,o=n.pending;if(null!==o){if(null!==r){var s=r.next;r.next=o.next,o.next=s}i.baseQueue=r=o,n.pending=null}if(null!==r){r=r.next,i=i.baseState;var l=s=o=null,u=r;do{var c=u.lane;if((Qo&c)===c)null!==l&&(l=l.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),i=u.eagerReducer===e?u.eagerState:e(i,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===l?(s=l=d,o=i):l=l.next=d,Yo.lanes|=c,Ls|=c}u=u.next}while(null!==u&&u!==r);null===l?o=i:l.next=s,ai(i,t.memoizedState)||(Aa=!0),t.memoizedState=i,t.baseState=o,t.baseQueue=l,n.lastRenderedState=i}return[t.memoizedState,n.dispatch]}function sa(e){var t=ra(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var i=n.dispatch,r=n.pending,o=t.memoizedState;if(null!==r){n.pending=null;var s=r=r.next;do{o=e(o,s.action),s=s.next}while(s!==r);ai(o,t.memoizedState)||(Aa=!0),t.memoizedState=o,null===t.baseQueue&&(t.baseState=o),n.lastRenderedState=o}return[o,i]}function la(e,t,n){var i=t._getVersion;i=i(t._source);var r=t._workInProgressVersionPrimary;if(null!==r?e=r===i:(e=e.mutableReadLanes,(e=(Qo&e)===e)&&(t._workInProgressVersionPrimary=i,Wo.push(t))),e)return n(t._source);throw Wo.push(t),Error(a(350))}function ua(e,t,n,i){var r=Ss;if(null===r)throw Error(a(349));var o=t._getVersion,s=o(t._source),l=Uo.current,u=l.useState((function(){return la(r,t,n)})),c=u[1],d=u[0];u=Xo;var f=e.memoizedState,h=f.refs,p=h.getSnapshot,m=f.source;f=f.subscribe;var g=Yo;return e.memoizedState={refs:h,source:t,subscribe:i},l.useEffect((function(){h.getSnapshot=n,h.setSnapshot=c;var e=o(t._source);if(!ai(s,e)){e=n(t._source),ai(d,e)||(c(e),e=al(g),r.mutableReadLanes|=e&r.pendingLanes),e=r.mutableReadLanes,r.entangledLanes|=e;for(var i=r.entanglements,a=e;0<a;){var l=31-qt(a),u=1<<l;i[l]|=e,a&=~u}}}),[n,t,i]),l.useEffect((function(){return i(t._source,(function(){var e=h.getSnapshot,n=h.setSnapshot;try{n(e(t._source));var i=al(g);r.mutableReadLanes|=i&r.pendingLanes}catch(e){n((function(){throw e}))}}))}),[t,i]),ai(p,n)&&ai(m,t)&&ai(f,i)||((e={pending:null,dispatch:null,lastRenderedReducer:oa,lastRenderedState:d}).dispatch=c=Sa.bind(null,Yo,e),u.queue=e,u.baseQueue=null,d=la(r,t,n),u.memoizedState=u.baseState=d),d}function ca(e,t,n){return ua(ra(),e,t,n)}function da(e){var t=ia();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:oa,lastRenderedState:e}).dispatch=Sa.bind(null,Yo,e),[t.memoizedState,e]}function fa(e,t,n,i){return e={tag:e,create:t,destroy:n,deps:i,next:null},null===(t=Yo.updateQueue)?(t={lastEffect:null},Yo.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(i=n.next,n.next=e,e.next=i,t.lastEffect=e),e}function ha(e){return e={current:e},ia().memoizedState=e}function pa(){return ra().memoizedState}function ma(e,t,n,i){var r=ia();Yo.flags|=e,r.memoizedState=fa(1|t,n,void 0,void 0===i?null:i)}function ga(e,t,n,i){var r=ra();i=void 0===i?null:i;var o=void 0;if(null!==Ko){var a=Ko.memoizedState;if(o=a.destroy,null!==i&&ta(i,a.deps))return void fa(t,n,o,i)}Yo.flags|=e,r.memoizedState=fa(1|t,n,o,i)}function va(e,t){return ma(516,4,e,t)}function ya(e,t){return ga(516,4,e,t)}function ba(e,t){return ga(4,2,e,t)}function wa(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function ka(e,t,n){return n=null!=n?n.concat([e]):null,ga(4,2,wa.bind(null,t,e),n)}function xa(){}function _a(e,t){var n=ra();t=void 0===t?null:t;var i=n.memoizedState;return null!==i&&null!==t&&ta(t,i[1])?i[0]:(n.memoizedState=[e,t],e)}function Ca(e,t){var n=ra();t=void 0===t?null:t;var i=n.memoizedState;return null!==i&&null!==t&&ta(t,i[1])?i[0]:(e=e(),n.memoizedState=[e,t],e)}function Ea(e,t){var n=Rr();Hr(98>n?98:n,(function(){e(!0)})),Hr(97<n?97:n,(function(){var n=Go.transition;Go.transition=1;try{e(!1),t()}finally{Go.transition=n}}))}function Sa(e,t,n){var i=ol(),r=al(e),o={lane:r,action:n,eagerReducer:null,eagerState:null,next:null},a=t.pending;if(null===a?o.next=o:(o.next=a.next,a.next=o),t.pending=o,a=e.alternate,e===Yo||null!==a&&a===Yo)Jo=Zo=!0;else{if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var s=t.lastRenderedState,l=a(s,n);if(o.eagerReducer=a,o.eagerState=l,ai(l,s))return}catch(e){}sl(e,r,i)}}var Ta={readContext:to,useCallback:ea,useContext:ea,useEffect:ea,useImperativeHandle:ea,useLayoutEffect:ea,useMemo:ea,useReducer:ea,useRef:ea,useState:ea,useDebugValue:ea,useDeferredValue:ea,useTransition:ea,useMutableSource:ea,useOpaqueIdentifier:ea,unstable_isNewReconciler:!1},Oa={readContext:to,useCallback:function(e,t){return ia().memoizedState=[e,void 0===t?null:t],e},useContext:to,useEffect:va,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,ma(4,2,wa.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ma(4,2,e,t)},useMemo:function(e,t){var n=ia();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var i=ia();return t=void 0!==n?n(t):t,i.memoizedState=i.baseState=t,e=(e=i.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Sa.bind(null,Yo,e),[i.memoizedState,e]},useRef:ha,useState:da,useDebugValue:xa,useDeferredValue:function(e){var t=da(e),n=t[0],i=t[1];return va((function(){var t=Go.transition;Go.transition=1;try{i(e)}finally{Go.transition=t}}),[e]),n},useTransition:function(){var e=da(!1),t=e[0];return ha(e=Ea.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var i=ia();return i.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},ua(i,e,t,n)},useOpaqueIdentifier:function(){if(Do){var e=!1,t=function(e){return{$$typeof:N,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Vi++).toString(36))),Error(a(355))})),n=da(t)[1];return 0==(2&Yo.mode)&&(Yo.flags|=516,fa(5,(function(){n("r:"+(Vi++).toString(36))}),void 0,null)),t}return da(t="r:"+(Vi++).toString(36)),t},unstable_isNewReconciler:!1},za={readContext:to,useCallback:_a,useContext:to,useEffect:ya,useImperativeHandle:ka,useLayoutEffect:ba,useMemo:Ca,useReducer:aa,useRef:pa,useState:function(){return aa(oa)},useDebugValue:xa,useDeferredValue:function(e){var t=aa(oa),n=t[0],i=t[1];return ya((function(){var t=Go.transition;Go.transition=1;try{i(e)}finally{Go.transition=t}}),[e]),n},useTransition:function(){var e=aa(oa)[0];return[pa().current,e]},useMutableSource:ca,useOpaqueIdentifier:function(){return aa(oa)[0]},unstable_isNewReconciler:!1},Pa={readContext:to,useCallback:_a,useContext:to,useEffect:ya,useImperativeHandle:ka,useLayoutEffect:ba,useMemo:Ca,useReducer:sa,useRef:pa,useState:function(){return sa(oa)},useDebugValue:xa,useDeferredValue:function(e){var t=sa(oa),n=t[0],i=t[1];return ya((function(){var t=Go.transition;Go.transition=1;try{i(e)}finally{Go.transition=t}}),[e]),n},useTransition:function(){var e=sa(oa)[0];return[pa().current,e]},useMutableSource:ca,useOpaqueIdentifier:function(){return sa(oa)[0]},unstable_isNewReconciler:!1},$a=k.ReactCurrentOwner,Aa=!1;function Ma(e,t,n,i){t.child=null===e?_o(t,null,n,i):xo(t,e.child,n,i)}function La(e,t,n,i,r){n=n.render;var o=t.ref;return eo(t,r),i=na(e,t,n,i,o,r),null===e||Aa?(t.flags|=1,Ma(e,t,i,r),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~r,es(e,t,r))}function Na(e,t,n,i,r,o){if(null===e){var a=n.type;return"function"!=typeof a||jl(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Fl(n.type,null,i,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,Ia(e,t,a,i,r,o))}return a=e.child,0==(r&o)&&(r=a.memoizedProps,(n=null!==(n=n.compare)?n:li)(r,i)&&e.ref===t.ref)?es(e,t,o):(t.flags|=1,(e=Rl(a,i)).ref=t.ref,e.return=t,t.child=e)}function Ia(e,t,n,i,r,o){if(null!==e&&li(e.memoizedProps,i)&&e.ref===t.ref){if(Aa=!1,0==(o&r))return t.lanes=e.lanes,es(e,t,o);0!=(16384&e.flags)&&(Aa=!0)}return Ra(e,t,n,i,o)}function Da(e,t,n){var i=t.pendingProps,r=i.children,o=null!==e?e.memoizedState:null;if("hidden"===i.mode||"unstable-defer-without-hiding"===i.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},ml(t,n);else{if(0==(1073741824&n))return e=null!==o?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},ml(t,e),null;t.memoizedState={baseLanes:0},ml(t,null!==o?o.baseLanes:n)}else null!==o?(i=o.baseLanes|n,t.memoizedState=null):i=n,ml(t,i);return Ma(e,t,r,n),t.child}function ja(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Ra(e,t,n,i,r){var o=fr(n)?cr:lr.current;return o=dr(t,o),eo(t,r),n=na(e,t,n,i,o,r),null===e||Aa?(t.flags|=1,Ma(e,t,n,r),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~r,es(e,t,r))}function Fa(e,t,n,i,r){if(fr(n)){var o=!0;gr(t)}else o=!1;if(eo(t,r),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),mo(t,n,i),vo(t,n,i,r),i=!0;else if(null===e){var a=t.stateNode,s=t.memoizedProps;a.props=s;var l=a.context,u=n.contextType;"object"==typeof u&&null!==u?u=to(u):u=dr(t,u=fr(n)?cr:lr.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof a.getSnapshotBeforeUpdate;d||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(s!==i||l!==u)&&go(t,a,i,u),no=!1;var f=t.memoizedState;a.state=f,lo(t,i,a,r),l=t.memoizedState,s!==i||f!==l||ur.current||no?("function"==typeof c&&(fo(t,n,c,i),l=t.memoizedState),(s=no||po(t,n,s,i,f,l,u))?(d||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||("function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),"function"==typeof a.componentDidMount&&(t.flags|=4)):("function"==typeof a.componentDidMount&&(t.flags|=4),t.memoizedProps=i,t.memoizedState=l),a.props=i,a.state=l,a.context=u,i=s):("function"==typeof a.componentDidMount&&(t.flags|=4),i=!1)}else{a=t.stateNode,ro(e,t),s=t.memoizedProps,u=t.type===t.elementType?s:Ur(t.type,s),a.props=u,d=t.pendingProps,f=a.context,"object"==typeof(l=n.contextType)&&null!==l?l=to(l):l=dr(t,l=fr(n)?cr:lr.current);var h=n.getDerivedStateFromProps;(c="function"==typeof h||"function"==typeof a.getSnapshotBeforeUpdate)||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(s!==d||f!==l)&&go(t,a,i,l),no=!1,f=t.memoizedState,a.state=f,lo(t,i,a,r);var p=t.memoizedState;s!==d||f!==p||ur.current||no?("function"==typeof h&&(fo(t,n,h,i),p=t.memoizedState),(u=no||po(t,n,u,i,f,p,l))?(c||"function"!=typeof a.UNSAFE_componentWillUpdate&&"function"!=typeof a.componentWillUpdate||("function"==typeof a.componentWillUpdate&&a.componentWillUpdate(i,p,l),"function"==typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(i,p,l)),"function"==typeof a.componentDidUpdate&&(t.flags|=4),"function"==typeof a.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof a.componentDidUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof a.getSnapshotBeforeUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=i,t.memoizedState=p),a.props=i,a.state=p,a.context=l,i=u):("function"!=typeof a.componentDidUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof a.getSnapshotBeforeUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),i=!1)}return Ha(e,t,n,i,o,r)}function Ha(e,t,n,i,r,o){ja(e,t);var a=0!=(64&t.flags);if(!i&&!a)return r&&vr(t,n,!1),es(e,t,o);i=t.stateNode,$a.current=t;var s=a&&"function"!=typeof n.getDerivedStateFromError?null:i.render();return t.flags|=1,null!==e&&a?(t.child=xo(t,e.child,null,o),t.child=xo(t,null,s,o)):Ma(e,t,s,o),t.memoizedState=i.state,r&&vr(t,n,!0),t.child}function Ba(e){var t=e.stateNode;t.pendingContext?pr(0,t.pendingContext,t.pendingContext!==t.context):t.context&&pr(0,t.context,!1),zo(e,t.containerInfo)}var qa,Wa,Va,Ua={dehydrated:null,retryLane:0};function Ga(e,t,n){var i,r=t.pendingProps,o=Mo.current,a=!1;return(i=0!=(64&t.flags))||(i=(null===e||null!==e.memoizedState)&&0!=(2&o)),i?(a=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===r.fallback||!0===r.unstable_avoidThisFallback||(o|=1),ar(Mo,1&o),null===e?(void 0!==r.fallback&&Fo(t),e=r.children,o=r.fallback,a?(e=Qa(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ua,e):"number"==typeof r.unstable_expectedLoadTime?(e=Qa(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ua,t.lanes=33554432,e):((n=Bl({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,a?(r=Ka(e,t,r.children,r.fallback,n),a=t.child,o=e.child.memoizedState,a.memoizedState=null===o?{baseLanes:n}:{baseLanes:o.baseLanes|n},a.childLanes=e.childLanes&~n,t.memoizedState=Ua,r):(n=Ya(e,t,r.children,n),t.memoizedState=null,n))}function Qa(e,t,n,i){var r=e.mode,o=e.child;return t={mode:"hidden",children:t},0==(2&r)&&null!==o?(o.childLanes=0,o.pendingProps=t):o=Bl(t,r,0,null),n=Hl(n,r,i,null),o.return=e,n.return=e,o.sibling=n,e.child=o,n}function Ya(e,t,n,i){var r=e.child;return e=r.sibling,n=Rl(r,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=i),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function Ka(e,t,n,i,r){var o=t.mode,a=e.child;e=a.sibling;var s={mode:"hidden",children:n};return 0==(2&o)&&t.child!==a?((n=t.child).childLanes=0,n.pendingProps=s,null!==(a=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=a,a.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Rl(a,s),null!==e?i=Rl(e,i):(i=Hl(i,o,r,null)).flags|=2,i.return=t,n.return=t,n.sibling=i,t.child=n,i}function Xa(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),Jr(e.return,t)}function Za(e,t,n,i,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:i,tail:n,tailMode:r,lastEffect:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=i,a.tail=n,a.tailMode=r,a.lastEffect=o)}function Ja(e,t,n){var i=t.pendingProps,r=i.revealOrder,o=i.tail;if(Ma(e,t,i.children,n),0!=(2&(i=Mo.current)))i=1&i|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Xa(e,n);else if(19===e.tag)Xa(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}i&=1}if(ar(Mo,i),0==(2&t.mode))t.memoizedState=null;else switch(r){case"forwards":for(n=t.child,r=null;null!==n;)null!==(e=n.alternate)&&null===Lo(e)&&(r=n),n=n.sibling;null===(n=r)?(r=t.child,t.child=null):(r=n.sibling,n.sibling=null),Za(t,!1,r,n,o,t.lastEffect);break;case"backwards":for(n=null,r=t.child,t.child=null;null!==r;){if(null!==(e=r.alternate)&&null===Lo(e)){t.child=r;break}e=r.sibling,r.sibling=n,n=r,r=e}Za(t,!0,n,null,o,t.lastEffect);break;case"together":Za(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function es(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Ls|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=Rl(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Rl(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function ts(e,t){if(!Do)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var i=null;null!==n;)null!==n.alternate&&(i=n),n=n.sibling;null===i?t||null===e.tail?e.tail=null:e.tail.sibling=null:i.sibling=null}}function ns(e,t,n){var i=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return fr(t.type)&&hr(),null;case 3:return Po(),or(ur),or(lr),Vo(),(i=t.stateNode).pendingContext&&(i.context=i.pendingContext,i.pendingContext=null),null!==e&&null!==e.child||(Bo(t)?t.flags|=4:i.hydrate||(t.flags|=256)),null;case 5:Ao(t);var o=Oo(To.current);if(n=t.type,null!==e&&null!=t.stateNode)Wa(e,t,n,i),e.ref!==t.ref&&(t.flags|=128);else{if(!i){if(null===t.stateNode)throw Error(a(166));return null}if(e=Oo(Eo.current),Bo(t)){i=t.stateNode,n=t.type;var s=t.memoizedProps;switch(i[Gi]=t,i[Qi]=s,n){case"dialog":Ei("cancel",i),Ei("close",i);break;case"iframe":case"object":case"embed":Ei("load",i);break;case"video":case"audio":for(e=0;e<ki.length;e++)Ei(ki[e],i);break;case"source":Ei("error",i);break;case"img":case"image":case"link":Ei("error",i),Ei("load",i);break;case"details":Ei("toggle",i);break;case"input":ee(i,s),Ei("invalid",i);break;case"select":i._wrapperState={wasMultiple:!!s.multiple},Ei("invalid",i);break;case"textarea":le(i,s),Ei("invalid",i)}for(var u in _e(n,s),e=null,s)s.hasOwnProperty(u)&&(o=s[u],"children"===u?"string"==typeof o?i.textContent!==o&&(e=["children",o]):"number"==typeof o&&i.textContent!==""+o&&(e=["children",""+o]):l.hasOwnProperty(u)&&null!=o&&"onScroll"===u&&Ei("scroll",i));switch(n){case"input":K(i),ie(i,s,!0);break;case"textarea":K(i),ce(i);break;case"select":case"option":break;default:"function"==typeof s.onClick&&(i.onclick=Ni)}i=e,t.updateQueue=i,null!==i&&(t.flags|=4)}else{switch(u=9===o.nodeType?o:o.ownerDocument,e===de&&(e=he(n)),e===de?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof i.is?e=u.createElement(n,{is:i.is}):(e=u.createElement(n),"select"===n&&(u=e,i.multiple?u.multiple=!0:i.size&&(u.size=i.size))):e=u.createElementNS(e,n),e[Gi]=t,e[Qi]=i,qa(e,t),t.stateNode=e,u=Ce(n,i),n){case"dialog":Ei("cancel",e),Ei("close",e),o=i;break;case"iframe":case"object":case"embed":Ei("load",e),o=i;break;case"video":case"audio":for(o=0;o<ki.length;o++)Ei(ki[o],e);o=i;break;case"source":Ei("error",e),o=i;break;case"img":case"image":case"link":Ei("error",e),Ei("load",e),o=i;break;case"details":Ei("toggle",e),o=i;break;case"input":ee(e,i),o=J(e,i),Ei("invalid",e);break;case"option":o=oe(e,i);break;case"select":e._wrapperState={wasMultiple:!!i.multiple},o=r({},i,{value:void 0}),Ei("invalid",e);break;case"textarea":le(e,i),o=se(e,i),Ei("invalid",e);break;default:o=i}_e(n,o);var c=o;for(s in c)if(c.hasOwnProperty(s)){var d=c[s];"style"===s?ke(e,d):"dangerouslySetInnerHTML"===s?null!=(d=d?d.__html:void 0)&&ge(e,d):"children"===s?"string"==typeof d?("textarea"!==n||""!==d)&&ve(e,d):"number"==typeof d&&ve(e,""+d):"suppressContentEditableWarning"!==s&&"suppressHydrationWarning"!==s&&"autoFocus"!==s&&(l.hasOwnProperty(s)?null!=d&&"onScroll"===s&&Ei("scroll",e):null!=d&&w(e,s,d,u))}switch(n){case"input":K(e),ie(e,i,!1);break;case"textarea":K(e),ce(e);break;case"option":null!=i.value&&e.setAttribute("value",""+Q(i.value));break;case"select":e.multiple=!!i.multiple,null!=(s=i.value)?ae(e,!!i.multiple,s,!1):null!=i.defaultValue&&ae(e,!!i.multiple,i.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Ni)}ji(n,i)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Va(0,t,e.memoizedProps,i);else{if("string"!=typeof i&&null===t.stateNode)throw Error(a(166));n=Oo(To.current),Oo(Eo.current),Bo(t)?(i=t.stateNode,n=t.memoizedProps,i[Gi]=t,i.nodeValue!==n&&(t.flags|=4)):((i=(9===n.nodeType?n:n.ownerDocument).createTextNode(i))[Gi]=t,t.stateNode=i)}return null;case 13:return or(Mo),i=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(i=null!==i,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Bo(t):n=null!==e.memoizedState,i&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Mo.current)?0===$s&&($s=3):(0!==$s&&3!==$s||($s=4),null===Ss||0==(134217727&Ls)&&0==(134217727&Ns)||dl(Ss,Os))),(i||n)&&(t.flags|=4),null);case 4:return Po(),null===e&&Ti(t.stateNode.containerInfo),null;case 10:return Zr(t),null;case 17:return fr(t.type)&&hr(),null;case 19:if(or(Mo),null===(i=t.memoizedState))return null;if(s=0!=(64&t.flags),null===(u=i.rendering))if(s)ts(i,!1);else{if(0!==$s||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Lo(e))){for(t.flags|=64,ts(i,!1),null!==(s=u.updateQueue)&&(t.updateQueue=s,t.flags|=4),null===i.lastEffect&&(t.firstEffect=null),t.lastEffect=i.lastEffect,i=n,n=t.child;null!==n;)e=i,(s=n).flags&=2,s.nextEffect=null,s.firstEffect=null,s.lastEffect=null,null===(u=s.alternate)?(s.childLanes=0,s.lanes=e,s.child=null,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=u.childLanes,s.lanes=u.lanes,s.child=u.child,s.memoizedProps=u.memoizedProps,s.memoizedState=u.memoizedState,s.updateQueue=u.updateQueue,s.type=u.type,e=u.dependencies,s.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return ar(Mo,1&Mo.current|2),t.child}e=e.sibling}null!==i.tail&&jr()>Rs&&(t.flags|=64,s=!0,ts(i,!1),t.lanes=33554432)}else{if(!s)if(null!==(e=Lo(u))){if(t.flags|=64,s=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),ts(i,!0),null===i.tail&&"hidden"===i.tailMode&&!u.alternate&&!Do)return null!==(t=t.lastEffect=i.lastEffect)&&(t.nextEffect=null),null}else 2*jr()-i.renderingStartTime>Rs&&1073741824!==n&&(t.flags|=64,s=!0,ts(i,!1),t.lanes=33554432);i.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=i.last)?n.sibling=u:t.child=u,i.last=u)}return null!==i.tail?(n=i.tail,i.rendering=n,i.tail=n.sibling,i.lastEffect=t.lastEffect,i.renderingStartTime=jr(),n.sibling=null,t=Mo.current,ar(Mo,s?1&t|2:1&t),n):null;case 23:case 24:return gl(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==i.mode&&(t.flags|=4),null}throw Error(a(156,t.tag))}function is(e){switch(e.tag){case 1:fr(e.type)&&hr();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Po(),or(ur),or(lr),Vo(),0!=(64&(t=e.flags)))throw Error(a(285));return e.flags=-4097&t|64,e;case 5:return Ao(e),null;case 13:return or(Mo),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return or(Mo),null;case 4:return Po(),null;case 10:return Zr(e),null;case 23:case 24:return gl(),null;default:return null}}function rs(e,t){try{var n="",i=t;do{n+=U(i),i=i.return}while(i);var r=n}catch(e){r="\nError generating stack: "+e.message+"\n"+e.stack}return{value:e,source:t,stack:r}}function os(e,t){try{console.error(t.value)}catch(e){setTimeout((function(){throw e}))}}qa=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Wa=function(e,t,n,i){var o=e.memoizedProps;if(o!==i){e=t.stateNode,Oo(Eo.current);var a,s=null;switch(n){case"input":o=J(e,o),i=J(e,i),s=[];break;case"option":o=oe(e,o),i=oe(e,i),s=[];break;case"select":o=r({},o,{value:void 0}),i=r({},i,{value:void 0}),s=[];break;case"textarea":o=se(e,o),i=se(e,i),s=[];break;default:"function"!=typeof o.onClick&&"function"==typeof i.onClick&&(e.onclick=Ni)}for(d in _e(n,i),n=null,o)if(!i.hasOwnProperty(d)&&o.hasOwnProperty(d)&&null!=o[d])if("style"===d){var u=o[d];for(a in u)u.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(l.hasOwnProperty(d)?s||(s=[]):(s=s||[]).push(d,null));for(d in i){var c=i[d];if(u=null!=o?o[d]:void 0,i.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(a in u)!u.hasOwnProperty(a)||c&&c.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in c)c.hasOwnProperty(a)&&u[a]!==c[a]&&(n||(n={}),n[a]=c[a])}else n||(s||(s=[]),s.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(s=s||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(s=s||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(l.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Ei("scroll",e),s||u===c||(s=[])):"object"==typeof c&&null!==c&&c.$$typeof===N?c.toString():(s=s||[]).push(d,c))}n&&(s=s||[]).push("style",n);var d=s;(t.updateQueue=d)&&(t.flags|=4)}},Va=function(e,t,n,i){n!==i&&(t.flags|=4)};var as="function"==typeof WeakMap?WeakMap:Map;function ss(e,t,n){(n=oo(-1,n)).tag=3,n.payload={element:null};var i=t.value;return n.callback=function(){qs||(qs=!0,Ws=i),os(0,t)},n}function ls(e,t,n){(n=oo(-1,n)).tag=3;var i=e.type.getDerivedStateFromError;if("function"==typeof i){var r=t.value;n.payload=function(){return os(0,t),i(r)}}var o=e.stateNode;return null!==o&&"function"==typeof o.componentDidCatch&&(n.callback=function(){"function"!=typeof i&&(null===Vs?Vs=new Set([this]):Vs.add(this),os(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var us="function"==typeof WeakSet?WeakSet:Set;function cs(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(t){Ml(e,t)}else t.current=null}function ds(e,t){switch(t.tag){case 0:case 11:case 15:case 22:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,i=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ur(t.type,n),i),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Bi(t.stateNode.containerInfo));case 5:case 6:case 4:case 17:return}throw Error(a(163))}function fs(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var i=e.create;e.destroy=i()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var r=e;i=r.next,0!=(4&(r=r.tag))&&0!=(1&r)&&(Pl(n,e),zl(n,e)),e=i}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(i=n.elementType===n.type?t.memoizedProps:Ur(n.type,t.memoizedProps),e.componentDidUpdate(i,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&uo(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:e=n.child.stateNode;break;case 1:e=n.child.stateNode}uo(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&ji(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&kt(n)))));case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(a(163))}function hs(e,t){for(var n=e;;){if(5===n.tag){var i=n.stateNode;if(t)"function"==typeof(i=i.style).setProperty?i.setProperty("display","none","important"):i.display="none";else{i=n.stateNode;var r=n.memoizedProps.style;r=null!=r&&r.hasOwnProperty("display")?r.display:null,i.style.display=we("display",r)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function ps(e,t){if(br&&"function"==typeof br.onCommitFiberUnmount)try{br.onCommitFiberUnmount(yr,t)}catch(e){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var i=n,r=i.destroy;if(i=i.tag,void 0!==r)if(0!=(4&i))Pl(t,n);else{i=t;try{r()}catch(e){Ml(i,e)}}n=n.next}while(n!==e)}break;case 1:if(cs(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(e){Ml(t,e)}break;case 5:cs(t);break;case 4:ys(e,t)}}function ms(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function gs(e){return 5===e.tag||3===e.tag||4===e.tag}function vs(e){e:{for(var t=e.return;null!==t;){if(gs(t))break e;t=t.return}throw Error(a(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var i=!1;break;case 3:case 4:t=t.containerInfo,i=!0;break;default:throw Error(a(161))}16&n.flags&&(ve(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||gs(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}i?function e(t,n,i){var r=t.tag,o=5===r||6===r;if(o)t=o?t.stateNode:t.stateNode.instance,n?8===i.nodeType?i.parentNode.insertBefore(t,n):i.insertBefore(t,n):(8===i.nodeType?(n=i.parentNode).insertBefore(t,i):(n=i).appendChild(t),null!==(i=i._reactRootContainer)&&void 0!==i||null!==n.onclick||(n.onclick=Ni));else if(4!==r&&null!==(t=t.child))for(e(t,n,i),t=t.sibling;null!==t;)e(t,n,i),t=t.sibling}(e,n,t):function e(t,n,i){var r=t.tag,o=5===r||6===r;if(o)t=o?t.stateNode:t.stateNode.instance,n?i.insertBefore(t,n):i.appendChild(t);else if(4!==r&&null!==(t=t.child))for(e(t,n,i),t=t.sibling;null!==t;)e(t,n,i),t=t.sibling}(e,n,t)}function ys(e,t){for(var n,i,r=t,o=!1;;){if(!o){o=r.return;e:for(;;){if(null===o)throw Error(a(160));switch(n=o.stateNode,o.tag){case 5:i=!1;break e;case 3:case 4:n=n.containerInfo,i=!0;break e}o=o.return}o=!0}if(5===r.tag||6===r.tag){e:for(var s=e,l=r,u=l;;)if(ps(s,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===l)break e;for(;null===u.sibling;){if(null===u.return||u.return===l)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}i?(s=n,l=r.stateNode,8===s.nodeType?s.parentNode.removeChild(l):s.removeChild(l)):n.removeChild(r.stateNode)}else if(4===r.tag){if(null!==r.child){n=r.stateNode.containerInfo,i=!0,r.child.return=r,r=r.child;continue}}else if(ps(e,r),null!==r.child){r.child.return=r,r=r.child;continue}if(r===t)break;for(;null===r.sibling;){if(null===r.return||r.return===t)return;4===(r=r.return).tag&&(o=!1)}r.sibling.return=r.return,r=r.sibling}}function bs(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var i=n=n.next;do{3==(3&i.tag)&&(e=i.destroy,i.destroy=void 0,void 0!==e&&e()),i=i.next}while(i!==n)}return;case 1:return;case 5:if(null!=(n=t.stateNode)){i=t.memoizedProps;var r=null!==e?e.memoizedProps:i;e=t.type;var o=t.updateQueue;if(t.updateQueue=null,null!==o){for(n[Qi]=i,"input"===e&&"radio"===i.type&&null!=i.name&&te(n,i),Ce(e,r),t=Ce(e,i),r=0;r<o.length;r+=2){var s=o[r],l=o[r+1];"style"===s?ke(n,l):"dangerouslySetInnerHTML"===s?ge(n,l):"children"===s?ve(n,l):w(n,s,l,t)}switch(e){case"input":ne(n,i);break;case"textarea":ue(n,i);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!i.multiple,null!=(o=i.value)?ae(n,!!i.multiple,o,!1):e!==!!i.multiple&&(null!=i.defaultValue?ae(n,!!i.multiple,i.defaultValue,!0):ae(n,!!i.multiple,i.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(a(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,kt(n.containerInfo)));case 12:return;case 13:return null!==t.memoizedState&&(js=jr(),hs(t.child,!0)),void ws(t);case 19:return void ws(t);case 17:return;case 23:case 24:return void hs(t,null!==t.memoizedState)}throw Error(a(163))}function ws(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new us),t.forEach((function(t){var i=Nl.bind(null,e,t);n.has(t)||(n.add(t),t.then(i,i))}))}}function ks(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var xs=Math.ceil,_s=k.ReactCurrentDispatcher,Cs=k.ReactCurrentOwner,Es=0,Ss=null,Ts=null,Os=0,zs=0,Ps=rr(0),$s=0,As=null,Ms=0,Ls=0,Ns=0,Is=0,Ds=null,js=0,Rs=1/0;function Fs(){Rs=jr()+500}var Hs,Bs=null,qs=!1,Ws=null,Vs=null,Us=!1,Gs=null,Qs=90,Ys=[],Ks=[],Xs=null,Zs=0,Js=null,el=-1,tl=0,nl=0,il=null,rl=!1;function ol(){return 0!=(48&Es)?jr():-1!==el?el:el=jr()}function al(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Rr()?1:2;if(0===tl&&(tl=Ms),0!==Vr.transition){0!==nl&&(nl=null!==Ds?Ds.pendingLanes:0),e=tl;var t=4186112&~nl;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Rr(),0!=(4&Es)&&98===e?e=Rt(12,tl):e=Rt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),tl),e}function sl(e,t,n){if(50<Zs)throw Zs=0,Js=null,Error(a(185));if(null===(e=ll(e,t)))return null;Bt(e,t,n),e===Ss&&(Ns|=t,4===$s&&dl(e,Os));var i=Rr();1===t?0!=(8&Es)&&0==(48&Es)?fl(e):(ul(e,n),0===Es&&(Fs(),qr())):(0==(4&Es)||98!==i&&99!==i||(null===Xs?Xs=new Set([e]):Xs.add(e)),ul(e,n)),Ds=e}function ll(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function ul(e,t){for(var n=e.callbackNode,i=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,s=e.pendingLanes;0<s;){var l=31-qt(s),u=1<<l,c=o[l];if(-1===c){if(0==(u&i)||0!=(u&r)){c=t,It(u);var d=Nt;o[l]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);s&=~u}if(i=Dt(e,e===Ss?Os:0),t=Nt,0===i)null!==n&&(n!==Ar&&xr(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Ar&&xr(n)}15===t?(n=fl.bind(null,e),null===Lr?(Lr=[n],Nr=kr(Tr,Wr)):Lr.push(n),n=Ar):14===t?n=Br(99,fl.bind(null,e)):n=Br(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(a(358,e))}}(t),cl.bind(null,e)),e.callbackPriority=t,e.callbackNode=n}}function cl(e){if(el=-1,nl=tl=0,0!=(48&Es))throw Error(a(327));var t=e.callbackNode;if(Ol()&&e.callbackNode!==t)return null;var n=Dt(e,e===Ss?Os:0);if(0===n)return null;var i=n,r=Es;Es|=16;var o=bl();for(Ss===e&&Os===i||(Fs(),vl(e,i));;)try{xl();break}catch(t){yl(e,t)}if(Xr(),_s.current=o,Es=r,null!==Ts?i=0:(Ss=null,Os=0,i=$s),0!=(Ms&Ns))vl(e,0);else if(0!==i){if(2===i&&(Es|=64,e.hydrate&&(e.hydrate=!1,Bi(e.containerInfo)),0!==(n=jt(e))&&(i=wl(e,n))),1===i)throw t=As,vl(e,0),dl(e,n),ul(e,jr()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,i){case 0:case 1:throw Error(a(345));case 2:El(e);break;case 3:if(dl(e,n),(62914560&n)===n&&10<(i=js+500-jr())){if(0!==Dt(e,0))break;if(((r=e.suspendedLanes)&n)!==n){ol(),e.pingedLanes|=e.suspendedLanes&r;break}e.timeoutHandle=Fi(El.bind(null,e),i);break}El(e);break;case 4:if(dl(e,n),(4186112&n)===n)break;for(i=e.eventTimes,r=-1;0<n;){var s=31-qt(n);o=1<<s,(s=i[s])>r&&(r=s),n&=~o}if(n=r,10<(n=(120>(n=jr()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*xs(n/1960))-n)){e.timeoutHandle=Fi(El.bind(null,e),n);break}El(e);break;case 5:El(e);break;default:throw Error(a(329))}}return ul(e,jr()),e.callbackNode===t?cl.bind(null,e):null}function dl(e,t){for(t&=~Is,t&=~Ns,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-qt(t),i=1<<n;e[n]=-1,t&=~i}}function fl(e){if(0!=(48&Es))throw Error(a(327));if(Ol(),e===Ss&&0!=(e.expiredLanes&Os)){var t=Os,n=wl(e,t);0!=(Ms&Ns)&&(n=wl(e,t=Dt(e,t)))}else n=wl(e,t=Dt(e,0));if(0!==e.tag&&2===n&&(Es|=64,e.hydrate&&(e.hydrate=!1,Bi(e.containerInfo)),0!==(t=jt(e))&&(n=wl(e,t))),1===n)throw n=As,vl(e,0),dl(e,t),ul(e,jr()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,El(e),ul(e,jr()),null}function hl(e,t){var n=Es;Es|=1;try{return e(t)}finally{0===(Es=n)&&(Fs(),qr())}}function pl(e,t){var n=Es;Es&=-2,Es|=8;try{return e(t)}finally{0===(Es=n)&&(Fs(),qr())}}function ml(e,t){ar(Ps,zs),zs|=t,Ms|=t}function gl(){zs=Ps.current,or(Ps)}function vl(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Hi(n)),null!==Ts)for(n=Ts.return;null!==n;){var i=n;switch(i.tag){case 1:null!=(i=i.type.childContextTypes)&&hr();break;case 3:Po(),or(ur),or(lr),Vo();break;case 5:Ao(i);break;case 4:Po();break;case 13:case 19:or(Mo);break;case 10:Zr(i);break;case 23:case 24:gl()}n=n.return}Ss=e,Ts=Rl(e.current,null),Os=zs=Ms=t,$s=0,As=null,Is=Ns=Ls=0}function yl(e,t){for(;;){var n=Ts;try{if(Xr(),Uo.current=Ta,Zo){for(var i=Yo.memoizedState;null!==i;){var r=i.queue;null!==r&&(r.pending=null),i=i.next}Zo=!1}if(Qo=0,Xo=Ko=Yo=null,Jo=!1,Cs.current=null,null===n||null===n.return){$s=1,As=t,Ts=null;break}e:{var o=e,a=n.return,s=n,l=t;if(t=Os,s.flags|=2048,s.firstEffect=s.lastEffect=null,null!==l&&"object"==typeof l&&"function"==typeof l.then){var u=l;if(0==(2&s.mode)){var c=s.alternate;c?(s.updateQueue=c.updateQueue,s.memoizedState=c.memoizedState,s.lanes=c.lanes):(s.updateQueue=null,s.memoizedState=null)}var d=0!=(1&Mo.current),f=a;do{var h;if(h=13===f.tag){var p=f.memoizedState;if(null!==p)h=null!==p.dehydrated;else{var m=f.memoizedProps;h=void 0!==m.fallback&&(!0!==m.unstable_avoidThisFallback||!d)}}if(h){var g=f.updateQueue;if(null===g){var v=new Set;v.add(u),f.updateQueue=v}else g.add(u);if(0==(2&f.mode)){if(f.flags|=64,s.flags|=16384,s.flags&=-2981,1===s.tag)if(null===s.alternate)s.tag=17;else{var y=oo(-1,1);y.tag=2,ao(s,y)}s.lanes|=1;break e}l=void 0,s=t;var b=o.pingCache;if(null===b?(b=o.pingCache=new as,l=new Set,b.set(u,l)):void 0===(l=b.get(u))&&(l=new Set,b.set(u,l)),!l.has(s)){l.add(s);var w=Ll.bind(null,o,u,s);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);l=Error((G(s.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==$s&&($s=2),l=rs(l,s),f=a;do{switch(f.tag){case 3:o=l,f.flags|=4096,t&=-t,f.lanes|=t,so(f,ss(0,o,t));break e;case 1:o=l;var k=f.type,x=f.stateNode;if(0==(64&f.flags)&&("function"==typeof k.getDerivedStateFromError||null!==x&&"function"==typeof x.componentDidCatch&&(null===Vs||!Vs.has(x)))){f.flags|=4096,t&=-t,f.lanes|=t,so(f,ls(f,o,t));break e}}f=f.return}while(null!==f)}Cl(n)}catch(e){t=e,Ts===n&&null!==n&&(Ts=n=n.return);continue}break}}function bl(){var e=_s.current;return _s.current=Ta,null===e?Ta:e}function wl(e,t){var n=Es;Es|=16;var i=bl();for(Ss===e&&Os===t||vl(e,t);;)try{kl();break}catch(t){yl(e,t)}if(Xr(),Es=n,_s.current=i,null!==Ts)throw Error(a(261));return Ss=null,Os=0,$s}function kl(){for(;null!==Ts;)_l(Ts)}function xl(){for(;null!==Ts&&!_r();)_l(Ts)}function _l(e){var t=Hs(e.alternate,e,zs);e.memoizedProps=e.pendingProps,null===t?Cl(e):Ts=t,Cs.current=null}function Cl(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ns(n,t,zs)))return void(Ts=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&zs)||0==(4&n.mode)){for(var i=0,r=n.child;null!==r;)i|=r.lanes|r.childLanes,r=r.sibling;n.childLanes=i}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=is(t)))return n.flags&=2047,void(Ts=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Ts=t);Ts=t=e}while(null!==t);0===$s&&($s=5)}function El(e){var t=Rr();return Hr(99,Sl.bind(null,e,t)),null}function Sl(e,t){do{Ol()}while(null!==Gs);if(0!=(48&Es))throw Error(a(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null;var i=n.lanes|n.childLanes,r=i,o=e.pendingLanes&~r;e.pendingLanes=r,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=r,e.mutableReadLanes&=r,e.entangledLanes&=r,r=e.entanglements;for(var s=e.eventTimes,l=e.expirationTimes;0<o;){var u=31-qt(o),c=1<<u;r[u]=0,s[u]=-1,l[u]=-1,o&=~c}if(null!==Xs&&0==(24&i)&&Xs.has(e)&&Xs.delete(e),e===Ss&&(Ts=Ss=null,Os=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,i=n.firstEffect):i=n:i=n.firstEffect,null!==i){if(r=Es,Es|=32,Cs.current=null,Ii=Qt,fi(s=di())){if("selectionStart"in s)l={start:s.selectionStart,end:s.selectionEnd};else e:if(l=(l=s.ownerDocument)&&l.defaultView||window,(c=l.getSelection&&l.getSelection())&&0!==c.rangeCount){l=c.anchorNode,o=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{l.nodeType,u.nodeType}catch(e){l=null;break e}var d=0,f=-1,h=-1,p=0,m=0,g=s,v=null;t:for(;;){for(var y;g!==l||0!==o&&3!==g.nodeType||(f=d+o),g!==u||0!==c&&3!==g.nodeType||(h=d+c),3===g.nodeType&&(d+=g.nodeValue.length),null!==(y=g.firstChild);)v=g,g=y;for(;;){if(g===s)break t;if(v===l&&++p===o&&(f=d),v===u&&++m===c&&(h=d),null!==(y=g.nextSibling))break;v=(g=v).parentNode}g=y}l=-1===f||-1===h?null:{start:f,end:h}}else l=null;l=l||{start:0,end:0}}else l=null;Di={focusedElem:s,selectionRange:l},Qt=!1,il=null,rl=!1,Bs=i;do{try{Tl()}catch(e){if(null===Bs)throw Error(a(330));Ml(Bs,e),Bs=Bs.nextEffect}}while(null!==Bs);il=null,Bs=i;do{try{for(s=e;null!==Bs;){var b=Bs.flags;if(16&b&&ve(Bs.stateNode,""),128&b){var w=Bs.alternate;if(null!==w){var k=w.ref;null!==k&&("function"==typeof k?k(null):k.current=null)}}switch(1038&b){case 2:vs(Bs),Bs.flags&=-3;break;case 6:vs(Bs),Bs.flags&=-3,bs(Bs.alternate,Bs);break;case 1024:Bs.flags&=-1025;break;case 1028:Bs.flags&=-1025,bs(Bs.alternate,Bs);break;case 4:bs(Bs.alternate,Bs);break;case 8:ys(s,l=Bs);var x=l.alternate;ms(l),null!==x&&ms(x)}Bs=Bs.nextEffect}}catch(e){if(null===Bs)throw Error(a(330));Ml(Bs,e),Bs=Bs.nextEffect}}while(null!==Bs);if(k=Di,w=di(),b=k.focusedElem,s=k.selectionRange,w!==b&&b&&b.ownerDocument&&function e(t,n){return!(!t||!n)&&(t===n||(!t||3!==t.nodeType)&&(n&&3===n.nodeType?e(t,n.parentNode):"contains"in t?t.contains(n):!!t.compareDocumentPosition&&!!(16&t.compareDocumentPosition(n))))}(b.ownerDocument.documentElement,b)){null!==s&&fi(b)&&(w=s.start,void 0===(k=s.end)&&(k=w),"selectionStart"in b?(b.selectionStart=w,b.selectionEnd=Math.min(k,b.value.length)):(k=(w=b.ownerDocument||document)&&w.defaultView||window).getSelection&&(k=k.getSelection(),l=b.textContent.length,x=Math.min(s.start,l),s=void 0===s.end?x:Math.min(s.end,l),!k.extend&&x>s&&(l=s,s=x,x=l),l=ci(b,x),o=ci(b,s),l&&o&&(1!==k.rangeCount||k.anchorNode!==l.node||k.anchorOffset!==l.offset||k.focusNode!==o.node||k.focusOffset!==o.offset)&&((w=w.createRange()).setStart(l.node,l.offset),k.removeAllRanges(),x>s?(k.addRange(w),k.extend(o.node,o.offset)):(w.setEnd(o.node,o.offset),k.addRange(w))))),w=[];for(k=b;k=k.parentNode;)1===k.nodeType&&w.push({element:k,left:k.scrollLeft,top:k.scrollTop});for("function"==typeof b.focus&&b.focus(),b=0;b<w.length;b++)(k=w[b]).element.scrollLeft=k.left,k.element.scrollTop=k.top}Qt=!!Ii,Di=Ii=null,e.current=n,Bs=i;do{try{for(b=e;null!==Bs;){var _=Bs.flags;if(36&_&&fs(b,Bs.alternate,Bs),128&_){w=void 0;var C=Bs.ref;if(null!==C){var E=Bs.stateNode;switch(Bs.tag){case 5:w=E;break;default:w=E}"function"==typeof C?C(w):C.current=w}}Bs=Bs.nextEffect}}catch(e){if(null===Bs)throw Error(a(330));Ml(Bs,e),Bs=Bs.nextEffect}}while(null!==Bs);Bs=null,Mr(),Es=r}else e.current=n;if(Us)Us=!1,Gs=e,Qs=t;else for(Bs=i;null!==Bs;)t=Bs.nextEffect,Bs.nextEffect=null,8&Bs.flags&&((_=Bs).sibling=null,_.stateNode=null),Bs=t;if(0===(i=e.pendingLanes)&&(Vs=null),1===i?e===Js?Zs++:(Zs=0,Js=e):Zs=0,n=n.stateNode,br&&"function"==typeof br.onCommitFiberRoot)try{br.onCommitFiberRoot(yr,n,void 0,64==(64&n.current.flags))}catch(e){}if(ul(e,jr()),qs)throw qs=!1,e=Ws,Ws=null,e;return 0!=(8&Es)||qr(),null}function Tl(){for(;null!==Bs;){var e=Bs.alternate;rl||null===il||(0!=(8&Bs.flags)?Je(Bs,il)&&(rl=!0):13===Bs.tag&&ks(e,Bs)&&Je(Bs,il)&&(rl=!0));var t=Bs.flags;0!=(256&t)&&ds(e,Bs),0==(512&t)||Us||(Us=!0,Br(97,(function(){return Ol(),null}))),Bs=Bs.nextEffect}}function Ol(){if(90!==Qs){var e=97<Qs?97:Qs;return Qs=90,Hr(e,$l)}return!1}function zl(e,t){Ys.push(t,e),Us||(Us=!0,Br(97,(function(){return Ol(),null})))}function Pl(e,t){Ks.push(t,e),Us||(Us=!0,Br(97,(function(){return Ol(),null})))}function $l(){if(null===Gs)return!1;var e=Gs;if(Gs=null,0!=(48&Es))throw Error(a(331));var t=Es;Es|=32;var n=Ks;Ks=[];for(var i=0;i<n.length;i+=2){var r=n[i],o=n[i+1],s=r.destroy;if(r.destroy=void 0,"function"==typeof s)try{s()}catch(e){if(null===o)throw Error(a(330));Ml(o,e)}}for(n=Ys,Ys=[],i=0;i<n.length;i+=2){r=n[i],o=n[i+1];try{var l=r.create;r.destroy=l()}catch(e){if(null===o)throw Error(a(330));Ml(o,e)}}for(l=e.current.firstEffect;null!==l;)e=l.nextEffect,l.nextEffect=null,8&l.flags&&(l.sibling=null,l.stateNode=null),l=e;return Es=t,qr(),!0}function Al(e,t,n){ao(e,t=ss(0,t=rs(n,t),1)),t=ol(),null!==(e=ll(e,1))&&(Bt(e,1,t),ul(e,t))}function Ml(e,t){if(3===e.tag)Al(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Al(n,e,t);break}if(1===n.tag){var i=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof i.componentDidCatch&&(null===Vs||!Vs.has(i))){var r=ls(n,e=rs(t,e),1);if(ao(n,r),r=ol(),null!==(n=ll(n,1)))Bt(n,1,r),ul(n,r);else if("function"==typeof i.componentDidCatch&&(null===Vs||!Vs.has(i)))try{i.componentDidCatch(t,e)}catch(e){}break}}n=n.return}}function Ll(e,t,n){var i=e.pingCache;null!==i&&i.delete(t),t=ol(),e.pingedLanes|=e.suspendedLanes&n,Ss===e&&(Os&n)===n&&(4===$s||3===$s&&(62914560&Os)===Os&&500>jr()-js?vl(e,0):Is|=n),ul(e,t)}function Nl(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Rr()?1:2:(0===tl&&(tl=Ms),0===(t=Ft(62914560&~tl))&&(t=4194304))),n=ol(),null!==(e=ll(e,t))&&(Bt(e,t,n),ul(e,n))}function Il(e,t,n,i){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=i,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Dl(e,t,n,i){return new Il(e,t,n,i)}function jl(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Rl(e,t){var n=e.alternate;return null===n?((n=Dl(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Fl(e,t,n,i,r,o){var s=2;if(i=e,"function"==typeof e)jl(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case C:return Hl(n.children,r,o,t);case I:s=8,r|=16;break;case E:s=8,r|=1;break;case S:return(e=Dl(12,n,t,8|r)).elementType=S,e.type=S,e.lanes=o,e;case P:return(e=Dl(13,n,t,r)).type=P,e.elementType=P,e.lanes=o,e;case $:return(e=Dl(19,n,t,r)).elementType=$,e.lanes=o,e;case D:return Bl(n,r,o,t);case j:return(e=Dl(24,n,t,r)).elementType=j,e.lanes=o,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case T:s=10;break e;case O:s=9;break e;case z:s=11;break e;case A:s=14;break e;case M:s=16,i=null;break e;case L:s=22;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Dl(s,n,t,r)).elementType=e,t.type=i,t.lanes=o,t}function Hl(e,t,n,i){return(e=Dl(7,e,i,t)).lanes=n,e}function Bl(e,t,n,i){return(e=Dl(23,e,i,t)).elementType=D,e.lanes=n,e}function ql(e,t,n){return(e=Dl(6,e,null,t)).lanes=n,e}function Wl(e,t,n){return(t=Dl(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Vl(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ht(0),this.expirationTimes=Ht(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ht(0),this.mutableSourceEagerHydrationData=null}function Ul(e,t,n){var i=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:_,key:null==i?null:""+i,children:e,containerInfo:t,implementation:n}}function Gl(e,t,n,i){var r=t.current,o=ol(),s=al(r);e:if(n){t:{if(Ye(n=n._reactInternals)!==n||1!==n.tag)throw Error(a(170));var l=n;do{switch(l.tag){case 3:l=l.stateNode.context;break t;case 1:if(fr(l.type)){l=l.stateNode.__reactInternalMemoizedMergedChildContext;break t}}l=l.return}while(null!==l);throw Error(a(171))}if(1===n.tag){var u=n.type;if(fr(u)){n=mr(n,u,l);break e}}n=l}else n=sr;return null===t.context?t.context=n:t.pendingContext=n,(t=oo(o,s)).payload={element:e},null!==(i=void 0===i?null:i)&&(t.callback=i),ao(r,t),sl(r,s,o),s}function Ql(e){if(!(e=e.current).child)return null;switch(e.child.tag){case 5:default:return e.child.stateNode}}function Yl(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Kl(e,t){Yl(e,t),(e=e.alternate)&&Yl(e,t)}function Xl(e,t,n){var i=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Vl(e,t,null!=n&&!0===n.hydrate),t=Dl(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,io(t),e[Yi]=n.current,Ti(8===e.nodeType?e.parentNode:e),i)for(e=0;e<i.length;e++){var r=(t=i[e])._getVersion;r=r(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,r]:n.mutableSourceEagerHydrationData.push(t,r)}this._internalRoot=n}function Zl(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Jl(e,t,n,i,r){var o=n._reactRootContainer;if(o){var a=o._internalRoot;if("function"==typeof r){var s=r;r=function(){var e=Ql(a);s.call(e)}}Gl(t,a,e,r)}else{if(o=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new Xl(e,0,t?{hydrate:!0}:void 0)}(n,i),a=o._internalRoot,"function"==typeof r){var l=r;r=function(){var e=Ql(a);l.call(e)}}pl((function(){Gl(t,a,e,r)}))}return Ql(a)}function eu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Zl(t))throw Error(a(200));return Ul(e,t,null,n)}Hs=function(e,t,n){var i=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||ur.current)Aa=!0;else{if(0==(n&i)){switch(Aa=!1,t.tag){case 3:Ba(t),qo();break;case 5:$o(t);break;case 1:fr(t.type)&&gr(t);break;case 4:zo(t,t.stateNode.containerInfo);break;case 10:i=t.memoizedProps.value;var r=t.type._context;ar(Gr,r._currentValue),r._currentValue=i;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Ga(e,t,n):(ar(Mo,1&Mo.current),null!==(t=es(e,t,n))?t.sibling:null);ar(Mo,1&Mo.current);break;case 19:if(i=0!=(n&t.childLanes),0!=(64&e.flags)){if(i)return Ja(e,t,n);t.flags|=64}if(null!==(r=t.memoizedState)&&(r.rendering=null,r.tail=null,r.lastEffect=null),ar(Mo,Mo.current),i)break;return null;case 23:case 24:return t.lanes=0,Da(e,t,n)}return es(e,t,n)}Aa=0!=(16384&e.flags)}else Aa=!1;switch(t.lanes=0,t.tag){case 2:if(i=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,r=dr(t,lr.current),eo(t,n),r=na(null,t,i,e,r,n),t.flags|=1,"object"==typeof r&&null!==r&&"function"==typeof r.render&&void 0===r.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,fr(i)){var o=!0;gr(t)}else o=!1;t.memoizedState=null!==r.state&&void 0!==r.state?r.state:null,io(t);var s=i.getDerivedStateFromProps;"function"==typeof s&&fo(t,i,s,e),r.updater=ho,t.stateNode=r,r._reactInternals=t,vo(t,i,e,n),t=Ha(null,t,i,!0,o,n)}else t.tag=0,Ma(null,t,r,n),t=t.child;return t;case 16:r=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return jl(e)?1:0;if(null!=e){if((e=e.$$typeof)===z)return 11;if(e===A)return 14}return 2}(r),e=Ur(r,e),o){case 0:t=Ra(null,t,r,e,n);break e;case 1:t=Fa(null,t,r,e,n);break e;case 11:t=La(null,t,r,e,n);break e;case 14:t=Na(null,t,r,Ur(r.type,e),i,n);break e}throw Error(a(306,r,""))}return t;case 0:return i=t.type,r=t.pendingProps,Ra(e,t,i,r=t.elementType===i?r:Ur(i,r),n);case 1:return i=t.type,r=t.pendingProps,Fa(e,t,i,r=t.elementType===i?r:Ur(i,r),n);case 3:if(Ba(t),i=t.updateQueue,null===e||null===i)throw Error(a(282));if(i=t.pendingProps,r=null!==(r=t.memoizedState)?r.element:null,ro(e,t),lo(t,i,null,n),(i=t.memoizedState.element)===r)qo(),t=es(e,t,n);else{if((o=(r=t.stateNode).hydrate)&&(Io=qi(t.stateNode.containerInfo.firstChild),No=t,o=Do=!0),o){if(null!=(e=r.mutableSourceEagerHydrationData))for(r=0;r<e.length;r+=2)(o=e[r])._workInProgressVersionPrimary=e[r+1],Wo.push(o);for(n=_o(t,null,i,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Ma(e,t,i,n),qo();t=t.child}return t;case 5:return $o(t),null===e&&Fo(t),i=t.type,r=t.pendingProps,o=null!==e?e.memoizedProps:null,s=r.children,Ri(i,r)?s=null:null!==o&&Ri(i,o)&&(t.flags|=16),ja(e,t),Ma(e,t,s,n),t.child;case 6:return null===e&&Fo(t),null;case 13:return Ga(e,t,n);case 4:return zo(t,t.stateNode.containerInfo),i=t.pendingProps,null===e?t.child=xo(t,null,i,n):Ma(e,t,i,n),t.child;case 11:return i=t.type,r=t.pendingProps,La(e,t,i,r=t.elementType===i?r:Ur(i,r),n);case 7:return Ma(e,t,t.pendingProps,n),t.child;case 8:case 12:return Ma(e,t,t.pendingProps.children,n),t.child;case 10:e:{i=t.type._context,r=t.pendingProps,s=t.memoizedProps,o=r.value;var l=t.type._context;if(ar(Gr,l._currentValue),l._currentValue=o,null!==s)if(l=s.value,0===(o=ai(l,o)?0:0|("function"==typeof i._calculateChangedBits?i._calculateChangedBits(l,o):1073741823))){if(s.children===r.children&&!ur.current){t=es(e,t,n);break e}}else for(null!==(l=t.child)&&(l.return=t);null!==l;){var u=l.dependencies;if(null!==u){s=l.child;for(var c=u.firstContext;null!==c;){if(c.context===i&&0!=(c.observedBits&o)){1===l.tag&&((c=oo(-1,n&-n)).tag=2,ao(l,c)),l.lanes|=n,null!==(c=l.alternate)&&(c.lanes|=n),Jr(l.return,n),u.lanes|=n;break}c=c.next}}else s=10===l.tag&&l.type===t.type?null:l.child;if(null!==s)s.return=l;else for(s=l;null!==s;){if(s===t){s=null;break}if(null!==(l=s.sibling)){l.return=s.return,s=l;break}s=s.return}l=s}Ma(e,t,r.children,n),t=t.child}return t;case 9:return r=t.type,i=(o=t.pendingProps).children,eo(t,n),i=i(r=to(r,o.unstable_observedBits)),t.flags|=1,Ma(e,t,i,n),t.child;case 14:return o=Ur(r=t.type,t.pendingProps),Na(e,t,r,o=Ur(r.type,o),i,n);case 15:return Ia(e,t,t.type,t.pendingProps,i,n);case 17:return i=t.type,r=t.pendingProps,r=t.elementType===i?r:Ur(i,r),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,fr(i)?(e=!0,gr(t)):e=!1,eo(t,n),mo(t,i,r),vo(t,i,r,n),Ha(null,t,i,!0,e,n);case 19:return Ja(e,t,n);case 23:case 24:return Da(e,t,n)}throw Error(a(156,t.tag))},Xl.prototype.render=function(e){Gl(e,this._internalRoot,null,null)},Xl.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Gl(null,e,null,(function(){t[Yi]=null}))},et=function(e){13===e.tag&&(sl(e,4,ol()),Kl(e,4))},tt=function(e){13===e.tag&&(sl(e,67108864,ol()),Kl(e,67108864))},nt=function(e){if(13===e.tag){var t=ol(),n=al(e);sl(e,n,t),Kl(e,n)}},it=function(e,t){return t()},Se=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var i=n[t];if(i!==e&&i.form===e.form){var r=er(i);if(!r)throw Error(a(90));X(i),ne(i,r)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ae(e,!!n.multiple,t,!1)}},Ae=hl,Me=function(e,t,n,i,r){var o=Es;Es|=4;try{return Hr(98,e.bind(null,t,n,i,r))}finally{0===(Es=o)&&(Fs(),qr())}},Le=function(){0==(49&Es)&&(function(){if(null!==Xs){var e=Xs;Xs=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,ul(e,jr())}))}qr()}(),Ol())},Ne=function(e,t){var n=Es;Es|=2;try{return e(t)}finally{0===(Es=n)&&(Fs(),qr())}};var tu={Events:[Zi,Ji,er,Pe,$e,Ol,{current:!1}]},nu={findFiberByHostInstance:Xi,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},iu={bundleType:nu.bundleType,version:nu.version,rendererPackageName:nu.rendererPackageName,rendererConfig:nu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:k.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Ze(e))?null:e.stateNode},findFiberByHostInstance:nu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ru=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ru.isDisabled&&ru.supportsFiber)try{yr=ru.inject(iu),br=ru}catch(e){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tu,t.createPortal=eu,t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw Error(a(268,Object.keys(e)))}return e=null===(e=Ze(t))?null:e.stateNode},t.flushSync=function(e,t){var n=Es;if(0!=(48&n))return e(t);Es|=1;try{if(e)return Hr(99,e.bind(null,t))}finally{Es=n,qr()}},t.hydrate=function(e,t,n){if(!Zl(t))throw Error(a(200));return Jl(null,e,t,!0,n)},t.render=function(e,t,n){if(!Zl(t))throw Error(a(200));return Jl(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Zl(e))throw Error(a(40));return!!e._reactRootContainer&&(pl((function(){Jl(null,null,e,!1,(function(){e._reactRootContainer=null,e[Yi]=null}))})),!0)},t.unstable_batchedUpdates=hl,t.unstable_createPortal=function(e,t){return eu(e,t,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)},t.unstable_renderSubtreeIntoContainer=function(e,t,n,i){if(!Zl(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return Jl(e,t,n,!1,i)},t.version="17.0.2"},function(e,t,n){"use strict";e.exports=n(68)},function(e,t,n){"use strict";
/** @license React v0.20.2
* scheduler.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var i,r,o,a;if("object"==typeof performance&&"function"==typeof performance.now){var s=performance;t.unstable_now=function(){return s.now()}}else{var l=Date,u=l.now();t.unstable_now=function(){return l.now()-u}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var c=null,d=null,f=function(){if(null!==c)try{var e=t.unstable_now();c(!0,e),c=null}catch(e){throw setTimeout(f,0),e}};i=function(e){null!==c?setTimeout(i,0,e):(c=e,setTimeout(f,0))},r=function(e,t){d=setTimeout(e,t)},o=function(){clearTimeout(d)},t.unstable_shouldYield=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var h=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var g=!1,v=null,y=-1,b=5,w=0;t.unstable_shouldYield=function(){return t.unstable_now()>=w},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):b=0<e?Math.floor(1e3/e):5};var k=new MessageChannel,x=k.port2;k.port1.onmessage=function(){if(null!==v){var e=t.unstable_now();w=e+b;try{v(!0,e)?x.postMessage(null):(g=!1,v=null)}catch(e){throw x.postMessage(null),e}}else g=!1},i=function(e){v=e,g||(g=!0,x.postMessage(null))},r=function(e,n){y=h((function(){e(t.unstable_now())}),n)},o=function(){p(y),y=-1}}function _(e,t){var n=e.length;e.push(t);e:for(;;){var i=n-1>>>1,r=e[i];if(!(void 0!==r&&0<S(r,t)))break e;e[i]=t,e[n]=r,n=i}}function C(e){return void 0===(e=e[0])?null:e}function E(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var i=0,r=e.length;i<r;){var o=2*(i+1)-1,a=e[o],s=o+1,l=e[s];if(void 0!==a&&0>S(a,n))void 0!==l&&0>S(l,a)?(e[i]=l,e[s]=n,i=s):(e[i]=a,e[o]=n,i=o);else{if(!(void 0!==l&&0>S(l,n)))break e;e[i]=l,e[s]=n,i=s}}}return t}return null}function S(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var T=[],O=[],z=1,P=null,$=3,A=!1,M=!1,L=!1;function N(e){for(var t=C(O);null!==t;){if(null===t.callback)E(O);else{if(!(t.startTime<=e))break;E(O),t.sortIndex=t.expirationTime,_(T,t)}t=C(O)}}function I(e){if(L=!1,N(e),!M)if(null!==C(T))M=!0,i(D);else{var t=C(O);null!==t&&r(I,t.startTime-e)}}function D(e,n){M=!1,L&&(L=!1,o()),A=!0;var i=$;try{for(N(n),P=C(T);null!==P&&(!(P.expirationTime>n)||e&&!t.unstable_shouldYield());){var a=P.callback;if("function"==typeof a){P.callback=null,$=P.priorityLevel;var s=a(P.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?P.callback=s:P===C(T)&&E(T),N(n)}else E(T);P=C(T)}if(null!==P)var l=!0;else{var u=C(O);null!==u&&r(I,u.startTime-n),l=!1}return l}finally{P=null,$=i,A=!1}}var j=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){M||A||(M=!0,i(D))},t.unstable_getCurrentPriorityLevel=function(){return $},t.unstable_getFirstCallbackNode=function(){return C(T)},t.unstable_next=function(e){switch($){case 1:case 2:case 3:var t=3;break;default:t=$}var n=$;$=t;try{return e()}finally{$=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=j,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=$;$=e;try{return t()}finally{$=n}},t.unstable_scheduleCallback=function(e,n,a){var s=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?s+a:s:a=s,e){case 1:var l=-1;break;case 2:l=250;break;case 5:l=1073741823;break;case 4:l=1e4;break;default:l=5e3}return e={id:z++,callback:n,priorityLevel:e,startTime:a,expirationTime:l=a+l,sortIndex:-1},a>s?(e.sortIndex=a,_(O,e),null===C(T)&&e===C(O)&&(L?o():L=!0,r(I,a-s))):(e.sortIndex=l,_(T,e),M||A||(M=!0,i(D))),e},t.unstable_wrapCallback=function(e){var t=$;return function(){var n=$;$=t;try{return e.apply(this,arguments)}finally{$=n}}}},function(e,t,n){"use strict";var i=n(70);function r(){}function o(){}o.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,o,a){if(a!==i){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:r};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),r=a(n(72)),o=a(n(24));function a(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var l="undefined"!=typeof window,u=new WeakMap,c=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(s(this,e),this.props=t,l){var n=this.props.document,i=u.get(n);if(i)return i;u.set(n,this),this.sheet=new r.default({document:n})}this.inserted={},this.tagged={}}return i(e,[{key:"hydrate",value:function(e){var t=this;e.forEach((function(e){return t.inserted[e]=!0}))}},{key:"tag",value:function(e){this.tagged[e]=!0}},{key:"isTagged",value:function(e){return this.tagged[e]}},{key:"insert",value:function(e){var t=this;if(!this.inserted[e.className]){var n=(0,o.default)(e);l&&n.forEach((function(e){return t.sheet.insert(e)})),this.inserted[e.className]=!0}}}]),e}();t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e){return e[e.length-1]}var a="undefined"!=typeof window,s=function(){if(a){var e=document.createElement("div");return e.innerHTML="\x3c!--[if lt IE 10]><i></i><![endif]--\x3e",1===e.getElementsByTagName("i").length}return!1}(),l=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.document,i=t.speedy,o=void 0===i||i,a=t.maxLength,l=void 0===a?s?4e3:65e3:a;r(this,e),this.document=n,this.isSpeedy=o,this.tags=[],this.maxLength=l,this.ctr=0,this.inject()}return i(e,[{key:"makeStyleTag",value:function(){var e=this.document.createElement("style");return e.type="text/css",e.setAttribute("data-glamor",""),e.appendChild(this.document.createTextNode("")),(this.document.head||this.document.getElementsByTagName("head")[0]).appendChild(e),e}},{key:"sheetForTag",value:function(e){if(e.sheet)return e.sheet;for(var t=0;t<this.document.styleSheets.length;t++)if(this.document.styleSheets[t].ownerNode===e)return this.document.styleSheets[t]}},{key:"getSheet",value:function(){return this.sheetForTag(o(this.tags))}},{key:"inject",value:function(){if(this.injected)throw new Error("already injected");this.tags[0]=this.makeStyleTag(),this.injected=!0}},{key:"_insert",value:function(e){try{var t=this.getSheet();t&&t.insertRule(e,-1!==e.indexOf("@import")?0:t.cssRules.length)}catch(e){0}}},{key:"insert",value:function(e){var t=this.getSheet();if(this.isSpeedy&&t&&t.insertRule)this._insert(e);else if(-1!==e.indexOf("@import")){var n=o(this.tags);n.insertBefore(this.document.createTextNode(e),n.firstChild)}else o(this.tags).appendChild(this.document.createTextNode(e));this.ctr++,this.ctr%this.maxLength==0&&this.tags.push(this.makeStyleTag())}},{key:"rules",value:function(){var e=this,t=[];return this.tags.forEach((function(n){return t.splice.apply(t,[t.length,0].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(Array.from(e.sheetForTag(n).cssRules))))})),t}}]),e}();t.default=l},function(e,t,n){"use strict";var i=n(74),r=/^-ms-/;e.exports=function(e){return i(e.replace(r,"ms-"))}},function(e,t,n){"use strict";var i=/-(.)/g;e.exports=function(e){return e.replace(i,(function(e,t){return t.toUpperCase()}))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(76));r(n(26));function r(e){return e&&e.__esModule?e:{default:e}}var o=i.default.isUnitlessNumber;t.default=function(e,t,n){return null==t||"boolean"==typeof t||""===t?"":isNaN(t)||0===t||o.hasOwnProperty(e)&&o[e]?""+t:("string"==typeof t&&(t=t.trim()),t+"px")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowStart:!0,gridRowEnd:!0,gridColumn:!0,gridColumnStart:!0,gridColumnEnd:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0};var r=["Webkit","ms","Moz","O"];Object.keys(i).forEach((function(e){r.forEach((function(t){i[function(e,t){return e+t.charAt(0).toUpperCase()+t.substring(1)}(t,e)]=i[e]}))}));var o={isUnitlessNumber:i,shorthandPropertyExpansions:{background:{backgroundAttachment:!0,backgroundColor:!0,backgroundImage:!0,backgroundPositionX:!0,backgroundPositionY:!0,backgroundRepeat:!0},backgroundPosition:{backgroundPositionX:!0,backgroundPositionY:!0},border:{borderWidth:!0,borderStyle:!0,borderColor:!0},borderBottom:{borderBottomWidth:!0,borderBottomStyle:!0,borderBottomColor:!0},borderLeft:{borderLeftWidth:!0,borderLeftStyle:!0,borderLeftColor:!0},borderRight:{borderRightWidth:!0,borderRightStyle:!0,borderRightColor:!0},borderTop:{borderTopWidth:!0,borderTopStyle:!0,borderTopColor:!0},font:{fontStyle:!0,fontVariant:!0,fontWeight:!0,fontSize:!0,lineHeight:!0,fontFamily:!0},outline:{outlineWidth:!0,outlineStyle:!0,outlineColor:!0}}};t.default=o},function(e,t,n){"use strict";function i(e){return function(){return e}}var r=function(){};r.thatReturns=i,r.thatReturnsFalse=i(!1),r.thatReturnsTrue=i(!0),r.thatReturnsNull=i(null),r.thatReturnsThis=function(){return this},r.thatReturnsArgument=function(e){return e},e.exports=r},function(e,t,n){"use strict";var i=n(79),r=/^ms-/;e.exports=function(e){return i(e).replace(r,"-ms-")}},function(e,t,n){"use strict";var i=/([A-Z])/g;e.exports=function(e){return e.replace(i,"-$1").toLowerCase()}},function(e,t,n){"use strict";e.exports=function(e){var t={};return function(n){return t.hasOwnProperty(n)||(t[n]=e.call(this,n)),t[n]}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e};t.fallbacks=function(e){if(Object.keys(e.style).map((function(t){return Array.isArray(e.style[t])})).indexOf(!0)>=0){var t=e.style,n=Object.keys(t).reduce((function(e,n){return e[n]=Array.isArray(t[n])?t[n].join("; "+(0,o.processStyleName)(n)+": "):t[n],e}),{});return i({},e,{style:n})}return e},t.contentWrap=function(e){if(e.style.content){var t=e.style.content;return l.indexOf(t)>=0||/^(attr|calc|counters?|url)\(/.test(t)?e:t.charAt(0)!==t.charAt(t.length-1)||'"'!==t.charAt(0)&&"'"!==t.charAt(0)?i({},e,{style:i({},e.style,{content:'"'+t+'"'})}):e}return e},t.prefixes=function(e){return i({},e,{style:(0,s.default)(i({},e.style))})};var r,o=n(25),a=n(82),s=(r=a)&&r.__esModule?r:{default:r};var l=["normal","none","counter","open-quote","close-quote","no-open-quote","no-close-quote","initial","inherit"]},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){for(var t in e){var n=e[t],i=(0,o.default)(v,t,n,e,y);i&&(e[t]=i),(0,r.default)(y,t,e)}return e};var i=g(n(83)),r=g(n(84)),o=g(n(85)),a=g(n(86)),s=g(n(87)),l=g(n(88)),u=g(n(89)),c=g(n(90)),d=g(n(91)),f=g(n(92)),h=g(n(93)),p=g(n(94)),m=g(n(95));function g(e){return e&&e.__esModule?e:{default:e}}var v=[s.default,a.default,l.default,c.default,d.default,f.default,h.default,p.default,m.default,u.default],y=i.default.prefixMap},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=["Webkit"],r=["Moz"],o=["ms"],a=["Webkit","Moz"],s=["Webkit","ms"],l=["Webkit","Moz","ms"];t.default={plugins:[],prefixMap:{appearance:a,userSelect:l,textEmphasisPosition:i,textEmphasis:i,textEmphasisStyle:i,textEmphasisColor:i,boxDecorationBreak:i,clipPath:i,maskImage:i,maskMode:i,maskRepeat:i,maskPosition:i,maskClip:i,maskOrigin:i,maskSize:i,maskComposite:i,mask:i,maskBorderSource:i,maskBorderMode:i,maskBorderSlice:i,maskBorderWidth:i,maskBorderOutset:i,maskBorderRepeat:i,maskBorder:i,maskType:i,textDecorationStyle:i,textDecorationSkip:i,textDecorationLine:i,textDecorationColor:i,filter:i,fontFeatureSettings:i,breakAfter:l,breakBefore:l,breakInside:l,columnCount:a,columnFill:a,columnGap:a,columnRule:a,columnRuleColor:a,columnRuleStyle:a,columnRuleWidth:a,columns:a,columnSpan:a,columnWidth:a,writingMode:s,flex:i,flexBasis:i,flexDirection:i,flexGrow:i,flexFlow:i,flexShrink:i,flexWrap:i,alignContent:i,alignItems:i,alignSelf:i,justifyContent:i,order:i,transform:i,transformOrigin:i,transformOriginX:i,transformOriginY:i,backfaceVisibility:i,perspective:i,perspectiveOrigin:i,transformStyle:i,transformOriginZ:i,animation:i,animationDelay:i,animationDirection:i,animationFillMode:i,animationDuration:i,animationIterationCount:i,animationName:i,animationPlayState:i,animationTimingFunction:i,backdropFilter:i,fontKerning:i,scrollSnapType:s,scrollSnapPointsX:s,scrollSnapPointsY:s,scrollSnapDestination:s,scrollSnapCoordinate:s,shapeImageThreshold:i,shapeImageMargin:i,shapeImageOutside:i,hyphens:l,flowInto:s,flowFrom:s,regionFragment:s,textAlignLast:r,tabSize:r,wrapFlow:o,wrapThrough:o,wrapMargin:o,gridTemplateColumns:o,gridTemplateRows:o,gridTemplateAreas:o,gridTemplate:o,gridAutoColumns:o,gridAutoRows:o,gridAutoFlow:o,grid:o,gridRowStart:o,gridColumnStart:o,gridRowEnd:o,gridRow:o,gridColumn:o,gridColumnEnd:o,gridColumnGap:o,gridRowGap:o,gridArea:o,gridGap:o,textSizeAdjust:s,borderImage:i,borderImageOutset:i,borderImageRepeat:i,borderImageSlice:i,borderImageSource:i,borderImageWidth:i,transitionDelay:i,transitionDuration:i,transitionProperty:i,transitionTimingFunction:i}},e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n){if(e.hasOwnProperty(t))for(var i=e[t],r=0,a=i.length;r<a;++r)n[i[r]+(0,o.default)(t)]=n[t]};var i,r=n(27),o=(i=r)&&i.__esModule?i:{default:i};e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n,i,r){for(var o=0,a=e.length;o<a;++o){var s=e[o](t,n,i,r);if(s)return s}},e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if("cursor"===e&&r.hasOwnProperty(t))return i.map((function(e){return e+t}))};var i=["-webkit-","-moz-",""],r={"zoom-in":!0,"zoom-out":!0,grab:!0,grabbing:!0};e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if("string"==typeof t&&!(0,o.default)(t)&&t.indexOf("cross-fade(")>-1)return a.map((function(e){return t.replace(/cross-fade\(/g,e+"cross-fade(")}))};var i,r=n(7),o=(i=r)&&i.__esModule?i:{default:i};var a=["-webkit-",""];e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if("string"==typeof t&&!(0,o.default)(t)&&t.indexOf("filter(")>-1)return a.map((function(e){return t.replace(/filter\(/g,e+"filter(")}))};var i,r=n(7),o=(i=r)&&i.__esModule?i:{default:i};var a=["-webkit-",""];e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if("display"===e&&i.hasOwnProperty(t))return i[t]};var i={flex:["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex","flex"],"inline-flex":["-webkit-inline-box","-moz-inline-box","-ms-inline-flexbox","-webkit-inline-flex","inline-flex"]};e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n){"flexDirection"===e&&"string"==typeof t&&(t.indexOf("column")>-1?n.WebkitBoxOrient="vertical":n.WebkitBoxOrient="horizontal",t.indexOf("reverse")>-1?n.WebkitBoxDirection="reverse":n.WebkitBoxDirection="normal");r.hasOwnProperty(e)&&(n[r[e]]=i[t]||t)};var i={"space-around":"justify","space-between":"justify","flex-start":"start","flex-end":"end","wrap-reverse":"multiple",wrap:"multiple"},r={alignItems:"WebkitBoxAlign",justifyContent:"WebkitBoxPack",flexWrap:"WebkitBoxLines"};e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if("string"==typeof t&&!(0,o.default)(t)&&s.test(t))return a.map((function(e){return e+t}))};var i,r=n(7),o=(i=r)&&i.__esModule?i:{default:i};var a=["-webkit-","-moz-",""],s=/linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/;e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if("string"==typeof t&&!(0,o.default)(t)&&t.indexOf("image-set(")>-1)return a.map((function(e){return t.replace(/image-set\(/g,e+"image-set(")}))};var i,r=n(7),o=(i=r)&&i.__esModule?i:{default:i};var a=["-webkit-",""];e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if("position"===e&&"sticky"===t)return["-webkit-sticky","sticky"]},e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(r.hasOwnProperty(e)&&o.hasOwnProperty(t))return i.map((function(e){return e+t}))};var i=["-webkit-","-moz-",""],r={maxHeight:!0,maxWidth:!0,width:!0,height:!0,columnWidth:!0,minWidth:!0,minHeight:!0},o={"min-content":!0,"max-content":!0,"fill-available":!0,"fit-content":!0,"contain-floats":!0};e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n,a){if("string"==typeof t&&s.hasOwnProperty(e)){var u=function(e,t){if((0,r.default)(e))return e;for(var n=e.split(/,(?![^()]*(?:\([^()]*\))?\))/g),o=0,a=n.length;o<a;++o){var s=n[o],u=[s];for(var c in t){var d=(0,i.default)(c);if(s.indexOf(d)>-1&&"order"!==d)for(var f=t[c],h=0,p=f.length;h<p;++h)u.unshift(s.replace(d,l[f[h]]+d))}n[o]=u.join(",")}return n.join(",")}(t,a),c=u.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter((function(e){return!/-moz-|-ms-/.test(e)})).join(",");if(e.indexOf("Webkit")>-1)return c;var d=u.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter((function(e){return!/-webkit-|-ms-/.test(e)})).join(",");return e.indexOf("Moz")>-1?d:(n["Webkit"+(0,o.default)(e)]=c,n["Moz"+(0,o.default)(e)]=d,u)}};var i=a(n(96)),r=a(n(7)),o=a(n(27));function a(e){return e&&e.__esModule?e:{default:e}}var s={transition:!0,transitionProperty:!0,WebkitTransition:!0,WebkitTransitionProperty:!0,MozTransition:!0,MozTransitionProperty:!0},l={Webkit:"-webkit-",Moz:"-moz-",ms:"-ms-"};e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return(0,o.default)(e)};var i,r=n(97),o=(i=r)&&i.__esModule?i:{default:i};e.exports=t.default},function(e,t,n){"use strict";n.r(t);var i=/[A-Z]/g,r=/^ms-/,o={};function a(e){return"-"+e.toLowerCase()}t.default=function(e){if(o.hasOwnProperty(e))return o[e];var t=e.replace(i,a);return o[e]=r.test(t)?"-"+t:t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.cssLabels=function(e){a=!!e},t.default=function(e){var t=function e(t){var n=void 0,i=void 0,r=void 0,o=void 0;return Object.keys(t).forEach((function(s){s.indexOf("&")>=0?(i=i||{})[s]=t[s]:0===s.indexOf("@media")?(r=r||{})[s]=e(t[s]):0===s.indexOf("@supports")?(o=o||{})[s]=e(t[s]):"label"===s?t.label.length>0&&((n=n||{}).label=a?t.label.join("."):""):(n=n||{})[s]=t[s]})),{plain:n,selects:i,medias:r,supports:o}}(function e(t,n){var r=n.selector,o=void 0===r?"":r,l=n.mq,u=void 0===l?"":l,f=n.supp,h=void 0===f?"":f,p=n.inputs,m=void 0===p?{}:p;return(!Array.isArray(m)?[m]:(0,i.default)(m)).filter((function(e){return!!e})).forEach((function(n){var i=n;Object.keys(i||{}).forEach((function(n){if(function(e){for(var t=[":",".","[",">"," "],n=!1,i=e.charAt(0),r=0;r<t.length;r++)if(i===t[r]){n=!0;break}return n||e.indexOf("&")>=0}(n))s[n]&&s[n].forEach((function(r){return e(t,{selector:c(o,r),mq:u,supp:h,inputs:i[n]})})),e(t,{selector:c(o,n),mq:u,supp:h,inputs:i[n]});else if(function(e){return 0===e.indexOf("@media")}(n))e(t,{selector:o,mq:(l=u,f=n,l?"@media "+l.substring(6)+" and "+f.substring(6):f),supp:h,inputs:i[n]});else if(function(e){return 0===e.indexOf("@supports")}(n))e(t,{selector:o,mq:u,supp:d(h,n),inputs:i[n]});else{var r=t;h&&(r[h]=r[h]||{},r=r[h]),u&&(r[u]=r[u]||{},r=r[u]),o&&(r[o]=r[o]||{},r=r[o]),"label"===n?a&&(t.label=t.label.concat(i.label)):r[n]=i[n]}var l,f}))})),t}({label:[]},{inputs:e}));return{className:"css-"+(0,r.default)(t),parsed:t}};var i=o(n(99)),r=o(n(100));function o(e){return e&&e.__esModule?e:{default:e}}var a=!1;var s={"::placeholder":["::-webkit-input-placeholder","::-moz-placeholder","::-ms-input-placeholder"],":fullscreen":[":-webkit-full-screen",":-moz-full-screen",":-ms-fullscreen"]};var l=/[(),]|"(?:\\.|[^"\n])*"|'(?:\\.|[^'\n])*'|\/\*[\s\S]*?\*\//g;function u(e){if(-1===e.indexOf(","))return[e];for(var t,n=[],i=[],r=0;t=l.exec(e);)switch(t[0]){case"(":r++;break;case")":r--;break;case",":if(r)break;n.push(t.index)}for(t=n.length;t--;)i.unshift(e.slice(n[t]+1)),e=e.slice(0,n[t]);return i.unshift(e),i}function c(e,t){var n=u(e).map((function(e){return e.indexOf("&")>=0?e:"&"+e}));return u(t).map((function(e){return e.indexOf("&")>=0?e:"&"+e})).reduce((function(e,t){return e.concat(n.map((function(e){return t.replace(/\&/g,e)})))}),[]).join(",")}function d(e,t){return e?"@supports "+e.substring(9)+" and "+t.substring(9):t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function e(t){for(var n=[],i=0;i<t.length;i++)n=Array.isArray(t[i])?n.concat(e(t[i])):n.concat(t[i]);return n}},function(e,t,n){"use strict";function i(e,t){return e.charCodeAt(t++)+(e.charCodeAt(t++)<<8)+(e.charCodeAt(t++)<<16)+(e.charCodeAt(t)<<24)}function r(e,t){return e.charCodeAt(t++)+(e.charCodeAt(t++)<<8)}function o(e,t){return(65535&(e|=0))*(t|=0)+(((e>>>16)*t&65535)<<16)|0}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=JSON.stringify(e);return function(e,t){var n=1540483477,a=t^e.length,s=e.length,l=0;for(;s>=4;){var u=i(e,l);u=o(u,n),u=o(u^=u>>>24,n),a=o(a,n),a^=u,l+=4,s-=4}switch(s){case 3:a^=r(e,l),a=o(a^=e.charCodeAt(l+2)<<16,n);break;case 2:a=o(a^=r(e,l),n);break;case 1:a=o(a^=e.charCodeAt(l),n)}return a=o(a^=a>>>13,n),(a^=a>>>15)>>>0}(t,t.length).toString(36)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),r=n(1),o=(s(r),s(n(3))),a=s(n(8));function s(e){return e&&e.__esModule?e:{default:e}}var l=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e)),i=new a.default,r=function(){return n.forceUpdate()};return i.on("viewChange",r),i.on("hydrated",r),n._pager=i,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),i(t,[{key:"getChildContext",value:function(){return{pager:this._pager}}},{key:"componentDidMount",value:function(){var e=this;requestAnimationFrame((function(){e._pager.hydrate()}))}},{key:"getInstance",value:function(){return this._pager}},{key:"render",value:function(){var e=this.props,t=e.tag,n=function(e,t){var n={};for(var i in e)t.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i]);return n}(e,["tag"]);return(0,r.createElement)(t,n)}}]),t}(r.Component);l.childContextTypes={pager:o.default.instanceOf(a.default)},l.propTypes={tag:o.default.string},l.defaultProps={tag:"div"},t.default=l,e.exports=t.default},function(e,t,n){"use strict";n.r(t),t.default=function(e){return e=e||Object.create(null),{on:function(t,n){(e[t]||(e[t]=[])).push(n)},off:function(t,n){e[t]&&e[t].splice(e[t].indexOf(n)>>>0,1)},emit:function(t,n){(e[t]||[]).slice().map((function(e){e(n)})),(e["*"]||[]).slice().map((function(e){e(t,n)}))}}}},function(e,t){e.exports=function(e,t){t=t||{};var n,i,r=e.ownerDocument||e,o=[],a=[],s=function(e){var t=[];return function(n){if(n===e.documentElement)return!1;var i=e.defaultView.getComputedStyle(n);return!!function n(i,r){if(i===e.documentElement)return!1;for(var o=0,a=t.length;o<a;o++)if(t[o][0]===i)return t[o][1];var s=!1;return"none"===(r=r||e.defaultView.getComputedStyle(i)).display?s=!0:i.parentNode&&(s=n(i.parentNode)),t.push([i,s]),s}(n,i)||"hidden"===i.visibility}}(r),l=["input","select","a[href]","textarea","button","[tabindex]"],u=e.querySelectorAll(l.join(","));if(t.includeContainer){var c=Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector;l.some((function(t){return c.call(e,t)}))&&(u=Array.prototype.slice.apply(u)).unshift(e)}for(var d=0,f=u.length;d<f;d++)n=u[d],(i=parseInt(n.getAttribute("tabindex"),10)||n.tabIndex)<0||"INPUT"===n.tagName&&"hidden"===n.type||n.disabled||s(n,r)||(0===i?o.push(n):a.push({index:d,tabIndex:i,node:n}));var h=a.sort((function(e,t){return e.tabIndex===t.tabIndex?e.index-t.index:e.tabIndex-t.tabIndex})).map((function(e){return e.node}));return Array.prototype.push.apply(h,o),h}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&s.return&&s.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};t.default=function(e){var t=[],n=[],o=[],a=[];e.forEach((function(e){var i=r(e,2),s=i[0],l=i[1];t.push(s),isNaN(l)?(n.push(parseInt(l.substr(1,2),16)),o.push(parseInt(l.substr(3,2),16)),a.push(parseInt(l.substr(5,2),16))):n.push(l)}));var l=(0,s.default)(t,n);if(!o.length||!a.length)return function(e){return l(e)};var u=(c=(0,s.default)(t,o),d=(0,s.default)(t,a),{v:function(e){return"rgb("+Math.round(l(e))+", "+Math.round(c(e))+", "+Math.round(d(e))+")"}});if("object"===(void 0===u?"undefined":i(u)))return u.v;var c,d};var o,a=n(105),s=(o=a)&&o.__esModule?o:{default:o};e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){return function(n){if(n<=e[0])return t[0];if(n>=e[e.length-1])return t[e.length-1];for(var i=0,r=e.length-1;r-i>1;){var o=i+r>>1;n<e[o]?r=o:i=o}return t[i]+(t[r]-t[i])/(e[r]-e[i])*(n-e[i])}},e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();var r=function(){function e(t){var n=t.node,i=t.pager,r=t.width,o=t.height;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.node=n,this.pager=i,this.x=this.y=0,this.setSize(r,o)}return i(e,[{key:"setSize",value:function(e,t){this.width=e||this.node.offsetWidth,this.height=t||this.node.offsetHeight}},{key:"setPosition",value:function(e){this[this.pager.options.axis]=e}},{key:"getSize",value:function(e){return"width"===e||"height"===e?this[e]:this["x"===this.pager.options.axis?"width":"height"]}},{key:"getPosition",value:function(){return this[this.pager.options.axis]}}]),e}();t.default=r,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if("undefined"==typeof document)return e;var t=document.createElement("p").style,n=["ms","O","Moz","Webkit"];if(""===t[e])return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(var i=n.length;i--;)if(""===t[n[i]+e])return n[i]+e},e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),o=n(1),a=p(o),s=p(n(3)),l=n(4),u=n(30),c=p(n(8)),d=p(n(116)),f=p(n(117)),h=p(n(17));function p(e){return e&&e.__esModule?e:{default:e}}var m={tag:s.default.any,autoSize:s.default.oneOf([!0,!1,"width","height"]),accessibility:s.default.bool,springConfig:s.default.objectOf(s.default.number)},g=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n._setFrameSize=function(){var e=n.context.pager.getFrameSize({fullSize:!0});e.width&&e.height&&n.setState(e,(function(){n.state.instant&&n.setState({instant:!1})}))},n.state={width:0,height:0,instant:!0},n._hydrate=!1,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,[{key:"componentWillMount",value:function(){var e=this.context.pager,t=this.props,n=t.autoSize,i=t.accessibility;e.setOptions({autoSize:n,accessibility:i}),this._swipe=new d.default(e),this._keyboard=new f.default(e)}},{key:"componentDidMount",value:function(){var e=this.context.pager;e.addFrame((0,l.findDOMNode)(this)),this._setFrameSize(),e.on("viewChange",this._setFrameSize),e.on("hydrated",this._setFrameSize)}},{key:"componentWillReceiveProps",value:function(e){var t=e.autoSize,n=e.accessibility;this.props.autoSize===t&&this.props.accessibility===n||(this.context.pager.setOptions({autoSize:t,accessibility:n}),this._hydrate=!0)}},{key:"componentDidUpdate",value:function(e){this._hydrate&&(this.context.pager.hydrate(),this._hydrate=!1)}},{key:"_getFrameStyle",value:function(){var e=this.props.springConfig,t=this.state,n=t.width,i=t.height,r=t.instant;return{maxWidth:r?n:(0,u.spring)(n,e),height:r?i:(0,u.spring)(i,e)}}},{key:"_renderFrame",value:function(e){this.context.pager;var t=this.props,n=t.tag,r=t.accessibility,a=(0,h.default)(i({},this._swipe.getEvents(),this._keyboard.getEvents(),{tabIndex:r?0:null}),this.props,m);return(0,o.createElement)(n,i({},a,{style:i({},e,a.style)}))}},{key:"render",value:function(){var e=this,t=this.props.autoSize,n=(this.state.height,{position:"relative",overflow:"hidden"});return t?a.default.createElement(u.Motion,{style:this._getFrameStyle()},(function(i){return!0!==t&&"width"!==t||!i.maxWidth||(n.maxWidth=i.maxWidth),!0!==t&&"height"!==t||!i.height||(n.height=i.height),e._renderFrame(n)})):this._renderFrame(n)}}]),t}(o.Component);g.contextTypes={pager:s.default.instanceOf(c.default)},g.propTypes=m,g.defaultProps={tag:"div",autoSize:!1,accessibility:!0,springConfig:u.presets.noWobble},t.default=g,e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();function o(e){return e&&e.__esModule?e:{default:e}}var a=o(n(12)),s=o(n(10)),l=o(n(13)),u=o(n(14)),c=o(n(15)),d=o(n(16)),f=o(n(1)),h=o(n(3)),p=function(e){function t(n){var r=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),e.call(this,n),this.wasAnimating=!1,this.animationID=null,this.prevTime=0,this.accumulatedTime=0,this.unreadPropStyle=null,this.clearUnreadPropStyle=function(e){var t=!1,n=r.state,o=n.currentStyle,a=n.currentVelocity,s=n.lastIdealStyle,l=n.lastIdealVelocity;for(var u in e)if(Object.prototype.hasOwnProperty.call(e,u)){var c=e[u];"number"==typeof c&&(t||(t=!0,o=i({},o),a=i({},a),s=i({},s),l=i({},l)),o[u]=c,a[u]=0,s[u]=c,l[u]=0)}t&&r.setState({currentStyle:o,currentVelocity:a,lastIdealStyle:s,lastIdealVelocity:l})},this.startAnimationIfNecessary=function(){r.animationID=c.default((function(e){var t=r.props.style;if(d.default(r.state.currentStyle,t,r.state.currentVelocity))return r.wasAnimating&&r.props.onRest&&r.props.onRest(),r.animationID=null,r.wasAnimating=!1,void(r.accumulatedTime=0);r.wasAnimating=!0;var n=e||u.default(),i=n-r.prevTime;if(r.prevTime=n,r.accumulatedTime=r.accumulatedTime+i,r.accumulatedTime>1e3/60*10&&(r.accumulatedTime=0),0===r.accumulatedTime)return r.animationID=null,void r.startAnimationIfNecessary();var o=(r.accumulatedTime-Math.floor(r.accumulatedTime/(1e3/60))*(1e3/60))/(1e3/60),a=Math.floor(r.accumulatedTime/(1e3/60)),s={},c={},f={},h={};for(var p in t)if(Object.prototype.hasOwnProperty.call(t,p)){var m=t[p];if("number"==typeof m)f[p]=m,h[p]=0,s[p]=m,c[p]=0;else{for(var g=r.state.lastIdealStyle[p],v=r.state.lastIdealVelocity[p],y=0;y<a;y++){var b=l.default(1e3/60/1e3,g,v,m.val,m.stiffness,m.damping,m.precision);g=b[0],v=b[1]}var w=l.default(1e3/60/1e3,g,v,m.val,m.stiffness,m.damping,m.precision),k=w[0],x=w[1];f[p]=g+(k-g)*o,h[p]=v+(x-v)*o,s[p]=g,c[p]=v}}r.animationID=null,r.accumulatedTime-=a*(1e3/60),r.setState({currentStyle:f,currentVelocity:h,lastIdealStyle:s,lastIdealVelocity:c}),r.unreadPropStyle=null,r.startAnimationIfNecessary()}))},this.state=this.defaultState()}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,null,[{key:"propTypes",value:{defaultStyle:h.default.objectOf(h.default.number),style:h.default.objectOf(h.default.oneOfType([h.default.number,h.default.object])).isRequired,children:h.default.func.isRequired,onRest:h.default.func},enumerable:!0}]),t.prototype.defaultState=function(){var e=this.props,t=e.defaultStyle,n=e.style,i=t||s.default(n),r=a.default(i);return{currentStyle:i,currentVelocity:r,lastIdealStyle:i,lastIdealVelocity:r}},t.prototype.componentDidMount=function(){this.prevTime=u.default(),this.startAnimationIfNecessary()},t.prototype.componentWillReceiveProps=function(e){null!=this.unreadPropStyle&&this.clearUnreadPropStyle(this.unreadPropStyle),this.unreadPropStyle=e.style,null==this.animationID&&(this.prevTime=u.default(),this.startAnimationIfNecessary())},t.prototype.componentWillUnmount=function(){null!=this.animationID&&(c.default.cancel(this.animationID),this.animationID=null)},t.prototype.render=function(){var e=this.props.children(this.state.currentStyle);return e&&f.default.Children.only(e)},t}(f.default.Component);t.default=p,e.exports=t.default},function(e,t,n){(function(t){(function(){var n,i,r,o,a,s;"undefined"!=typeof performance&&null!==performance&&performance.now?e.exports=function(){return performance.now()}:null!=t&&t.hrtime?(e.exports=function(){return(n()-a)/1e6},i=t.hrtime,o=(n=function(){var e;return 1e9*(e=i())[0]+e[1]})(),s=1e9*t.uptime(),a=o-s):Date.now?(e.exports=function(){return Date.now()-r},r=Date.now()):(e.exports=function(){return(new Date).getTime()-r},r=(new Date).getTime())}).call(this)}).call(this,n(31))},function(e,t,n){"use strict";t.__esModule=!0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();function o(e){return e&&e.__esModule?e:{default:e}}var a=o(n(12)),s=o(n(10)),l=o(n(13)),u=o(n(14)),c=o(n(15)),d=o(n(16)),f=o(n(1)),h=o(n(3));var p=function(e){function t(n){var r=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),e.call(this,n),this.animationID=null,this.prevTime=0,this.accumulatedTime=0,this.unreadPropStyles=null,this.clearUnreadPropStyle=function(e){for(var t=r.state,n=t.currentStyles,o=t.currentVelocities,a=t.lastIdealStyles,s=t.lastIdealVelocities,l=!1,u=0;u<e.length;u++){var c=e[u],d=!1;for(var f in c)if(Object.prototype.hasOwnProperty.call(c,f)){var h=c[f];"number"==typeof h&&(d||(d=!0,l=!0,n[u]=i({},n[u]),o[u]=i({},o[u]),a[u]=i({},a[u]),s[u]=i({},s[u])),n[u][f]=h,o[u][f]=0,a[u][f]=h,s[u][f]=0)}}l&&r.setState({currentStyles:n,currentVelocities:o,lastIdealStyles:a,lastIdealVelocities:s})},this.startAnimationIfNecessary=function(){r.animationID=c.default((function(e){var t=r.props.styles(r.state.lastIdealStyles);if(function(e,t,n){for(var i=0;i<e.length;i++)if(!d.default(e[i],t[i],n[i]))return!1;return!0}(r.state.currentStyles,t,r.state.currentVelocities))return r.animationID=null,void(r.accumulatedTime=0);var n=e||u.default(),i=n-r.prevTime;if(r.prevTime=n,r.accumulatedTime=r.accumulatedTime+i,r.accumulatedTime>1e3/60*10&&(r.accumulatedTime=0),0===r.accumulatedTime)return r.animationID=null,void r.startAnimationIfNecessary();for(var o=(r.accumulatedTime-Math.floor(r.accumulatedTime/(1e3/60))*(1e3/60))/(1e3/60),a=Math.floor(r.accumulatedTime/(1e3/60)),s=[],c=[],f=[],h=[],p=0;p<t.length;p++){var m=t[p],g={},v={},y={},b={};for(var w in m)if(Object.prototype.hasOwnProperty.call(m,w)){var k=m[w];if("number"==typeof k)g[w]=k,v[w]=0,y[w]=k,b[w]=0;else{for(var x=r.state.lastIdealStyles[p][w],_=r.state.lastIdealVelocities[p][w],C=0;C<a;C++){var E=l.default(1e3/60/1e3,x,_,k.val,k.stiffness,k.damping,k.precision);x=E[0],_=E[1]}var S=l.default(1e3/60/1e3,x,_,k.val,k.stiffness,k.damping,k.precision),T=S[0],O=S[1];g[w]=x+(T-x)*o,v[w]=_+(O-_)*o,y[w]=x,b[w]=_}}f[p]=g,h[p]=v,s[p]=y,c[p]=b}r.animationID=null,r.accumulatedTime-=a*(1e3/60),r.setState({currentStyles:f,currentVelocities:h,lastIdealStyles:s,lastIdealVelocities:c}),r.unreadPropStyles=null,r.startAnimationIfNecessary()}))},this.state=this.defaultState()}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,null,[{key:"propTypes",value:{defaultStyles:h.default.arrayOf(h.default.objectOf(h.default.number)),styles:h.default.func.isRequired,children:h.default.func.isRequired},enumerable:!0}]),t.prototype.defaultState=function(){var e=this.props,t=e.defaultStyles,n=e.styles,i=t||n().map(s.default),r=i.map((function(e){return a.default(e)}));return{currentStyles:i,currentVelocities:r,lastIdealStyles:i,lastIdealVelocities:r}},t.prototype.componentDidMount=function(){this.prevTime=u.default(),this.startAnimationIfNecessary()},t.prototype.componentWillReceiveProps=function(e){null!=this.unreadPropStyles&&this.clearUnreadPropStyle(this.unreadPropStyles),this.unreadPropStyles=e.styles(this.state.lastIdealStyles),null==this.animationID&&(this.prevTime=u.default(),this.startAnimationIfNecessary())},t.prototype.componentWillUnmount=function(){null!=this.animationID&&(c.default.cancel(this.animationID),this.animationID=null)},t.prototype.render=function(){var e=this.props.children(this.state.currentStyles);return e&&f.default.Children.only(e)},t}(f.default.Component);t.default=p,e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();function o(e){return e&&e.__esModule?e:{default:e}}var a=o(n(12)),s=o(n(10)),l=o(n(13)),u=o(n(113)),c=o(n(14)),d=o(n(15)),f=o(n(16)),h=o(n(1)),p=o(n(3));function m(e,t,n){var i=t;return null==i?e.map((function(e,t){return{key:e.key,data:e.data,style:n[t]}})):e.map((function(e,t){for(var r=0;r<i.length;r++)if(i[r].key===e.key)return{key:i[r].key,data:i[r].data,style:n[t]};return{key:e.key,data:e.data,style:n[t]}}))}function g(e,t,n,i,r,o,s,l,c){for(var d=u.default(i,r,(function(e,i){var r=t(i);return null==r||f.default(o[e],r,s[e])?(n({key:i.key,data:i.data}),null):{key:i.key,data:i.data,style:r}})),h=[],p=[],m=[],g=[],v=0;v<d.length;v++){for(var y=d[v],b=null,w=0;w<i.length;w++)if(i[w].key===y.key){b=w;break}if(null==b){var k=e(y);h[v]=k,m[v]=k;var x=a.default(y.style);p[v]=x,g[v]=x}else h[v]=o[b],m[v]=l[b],p[v]=s[b],g[v]=c[b]}return[d,h,p,m,g]}var v=function(e){function t(n){var r=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),e.call(this,n),this.unmounting=!1,this.animationID=null,this.prevTime=0,this.accumulatedTime=0,this.unreadPropStyles=null,this.clearUnreadPropStyle=function(e){for(var t=g(r.props.willEnter,r.props.willLeave,r.props.didLeave,r.state.mergedPropsStyles,e,r.state.currentStyles,r.state.currentVelocities,r.state.lastIdealStyles,r.state.lastIdealVelocities),n=t[0],o=t[1],a=t[2],s=t[3],l=t[4],u=0;u<e.length;u++){var c=e[u].style,d=!1;for(var f in c)if(Object.prototype.hasOwnProperty.call(c,f)){var h=c[f];"number"==typeof h&&(d||(d=!0,o[u]=i({},o[u]),a[u]=i({},a[u]),s[u]=i({},s[u]),l[u]=i({},l[u]),n[u]={key:n[u].key,data:n[u].data,style:i({},n[u].style)}),o[u][f]=h,a[u][f]=0,s[u][f]=h,l[u][f]=0,n[u].style[f]=h)}}r.setState({currentStyles:o,currentVelocities:a,mergedPropsStyles:n,lastIdealStyles:s,lastIdealVelocities:l})},this.startAnimationIfNecessary=function(){r.unmounting||(r.animationID=d.default((function(e){if(!r.unmounting){var t=r.props.styles,n="function"==typeof t?t(m(r.state.mergedPropsStyles,r.unreadPropStyles,r.state.lastIdealStyles)):t;if(function(e,t,n,i){if(i.length!==t.length)return!1;for(var r=0;r<i.length;r++)if(i[r].key!==t[r].key)return!1;for(r=0;r<i.length;r++)if(!f.default(e[r],t[r].style,n[r]))return!1;return!0}(r.state.currentStyles,n,r.state.currentVelocities,r.state.mergedPropsStyles))return r.animationID=null,void(r.accumulatedTime=0);var i=e||c.default(),o=i-r.prevTime;if(r.prevTime=i,r.accumulatedTime=r.accumulatedTime+o,r.accumulatedTime>1e3/60*10&&(r.accumulatedTime=0),0===r.accumulatedTime)return r.animationID=null,void r.startAnimationIfNecessary();for(var a=(r.accumulatedTime-Math.floor(r.accumulatedTime/(1e3/60))*(1e3/60))/(1e3/60),s=Math.floor(r.accumulatedTime/(1e3/60)),u=g(r.props.willEnter,r.props.willLeave,r.props.didLeave,r.state.mergedPropsStyles,n,r.state.currentStyles,r.state.currentVelocities,r.state.lastIdealStyles,r.state.lastIdealVelocities),d=u[0],h=u[1],p=u[2],v=u[3],y=u[4],b=0;b<d.length;b++){var w=d[b].style,k={},x={},_={},C={};for(var E in w)if(Object.prototype.hasOwnProperty.call(w,E)){var S=w[E];if("number"==typeof S)k[E]=S,x[E]=0,_[E]=S,C[E]=0;else{for(var T=v[b][E],O=y[b][E],z=0;z<s;z++){var P=l.default(1e3/60/1e3,T,O,S.val,S.stiffness,S.damping,S.precision);T=P[0],O=P[1]}var $=l.default(1e3/60/1e3,T,O,S.val,S.stiffness,S.damping,S.precision),A=$[0],M=$[1];k[E]=T+(A-T)*a,x[E]=O+(M-O)*a,_[E]=T,C[E]=O}}v[b]=_,y[b]=C,h[b]=k,p[b]=x}r.animationID=null,r.accumulatedTime-=s*(1e3/60),r.setState({currentStyles:h,currentVelocities:p,lastIdealStyles:v,lastIdealVelocities:y,mergedPropsStyles:d}),r.unreadPropStyles=null,r.startAnimationIfNecessary()}})))},this.state=this.defaultState()}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,null,[{key:"propTypes",value:{defaultStyles:p.default.arrayOf(p.default.shape({key:p.default.string.isRequired,data:p.default.any,style:p.default.objectOf(p.default.number).isRequired})),styles:p.default.oneOfType([p.default.func,p.default.arrayOf(p.default.shape({key:p.default.string.isRequired,data:p.default.any,style:p.default.objectOf(p.default.oneOfType([p.default.number,p.default.object])).isRequired}))]).isRequired,children:p.default.func.isRequired,willEnter:p.default.func,willLeave:p.default.func,didLeave:p.default.func},enumerable:!0},{key:"defaultProps",value:{willEnter:function(e){return s.default(e.style)},willLeave:function(){return null},didLeave:function(){}},enumerable:!0}]),t.prototype.defaultState=function(){var e=this.props,t=e.defaultStyles,n=e.styles,i=e.willEnter,r=e.willLeave,o=e.didLeave,l="function"==typeof n?n(t):n,u=void 0;u=null==t?l:t.map((function(e){for(var t=0;t<l.length;t++)if(l[t].key===e.key)return l[t];return e}));var c=null==t?l.map((function(e){return s.default(e.style)})):t.map((function(e){return s.default(e.style)})),d=null==t?l.map((function(e){return a.default(e.style)})):t.map((function(e){return a.default(e.style)})),f=g(i,r,o,u,l,c,d,c,d),h=f[0];return{currentStyles:f[1],currentVelocities:f[2],lastIdealStyles:f[3],lastIdealVelocities:f[4],mergedPropsStyles:h}},t.prototype.componentDidMount=function(){this.prevTime=c.default(),this.startAnimationIfNecessary()},t.prototype.componentWillReceiveProps=function(e){this.unreadPropStyles&&this.clearUnreadPropStyle(this.unreadPropStyles);var t=e.styles;this.unreadPropStyles="function"==typeof t?t(m(this.state.mergedPropsStyles,this.unreadPropStyles,this.state.lastIdealStyles)):t,null==this.animationID&&(this.prevTime=c.default(),this.startAnimationIfNecessary())},t.prototype.componentWillUnmount=function(){this.unmounting=!0,null!=this.animationID&&(d.default.cancel(this.animationID),this.animationID=null)},t.prototype.render=function(){var e=m(this.state.mergedPropsStyles,this.unreadPropStyles,this.state.currentStyles),t=this.props.children(e);return t&&h.default.Children.only(t)},t}(h.default.Component);t.default=v,e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t,n){for(var i={},r=0;r<e.length;r++)i[e[r].key]=r;var o={};for(r=0;r<t.length;r++)o[t[r].key]=r;var a=[];for(r=0;r<t.length;r++)a[r]=t[r];for(r=0;r<e.length;r++)if(!Object.prototype.hasOwnProperty.call(o,e[r].key)){var s=n(r,e[r]);null!=s&&a.push(s)}return a.sort((function(e,n){var r=o[e.key],a=o[n.key],s=i[e.key],l=i[n.key];if(null!=r&&null!=a)return o[e.key]-o[n.key];if(null!=s&&null!=l)return i[e.key]-i[n.key];if(null!=r){for(var u=0;u<t.length;u++){var c=t[u].key;if(Object.prototype.hasOwnProperty.call(i,c)){if(r<o[c]&&l>i[c])return-1;if(r>o[c]&&l<i[c])return 1}}return 1}for(u=0;u<t.length;u++){c=t[u].key;if(Object.prototype.hasOwnProperty.call(i,c)){if(a<o[c]&&s>i[c])return 1;if(a>o[c]&&s<i[c])return-1}}return-1}))},e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e};t.default=function(e,t){return i({},s,t,{val:e})};var r,o=n(32),a=(r=o)&&r.__esModule?r:{default:r},s=i({},a.default.noWobble,{precision:.01});e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(){0};e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();function r(e){return e.touches&&e.touches[0]||e}var o=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._onSwipeStart=function(e){var t=r(e),i=t.pageX,o=t.pageY;n.pager.isSwiping=!0,n._swipeStart={x:i,y:o},n._swipeDiff={x:0,y:0},n._isFlick=!0,setTimeout((function(){n._isFlick=!1}),n.pager.options.flickTimeout),n.pager.emit("swipeStart")},this._onSwipeMove=function(e){if(n.pager.isSwiping){var t=n.pager.options,i=t.swipeThreshold,o=t.axis,a=r(e),s=a.pageX,l=a.pageY;if(n._trackStart||(n._trackStart=n.pager.currentTween),n._swipeDiff={x:n._swipeStart.x-s,y:n._swipeStart.y-l},n._isSwipe(i)){e.preventDefault(),e.stopPropagation();var u=n._swipeDiff[o],c=n._trackStart-u;n.pager.setPositionValue(c),n.pager.emit("swipeMove")}}},this._onSwipeEnd=function(){var e=n.pager.options,t=e.swipeThreshold,i=e.viewsToMove,r=e.axis,o=(e.infinite,n._isFlick?t:n.pager.currentView.getSize()*i*t);n.pager.isSwiping=!1,n._trackStart=!1,(n._swipeDiff.x||n._swipeDiff.y)&&(n._isSwipe(o)?n._swipeDiff[r]<0?n.pager.prev():n.pager.next():n.pager.setPositionValue()),n.pager.emit("swipeEnd")},this._onSwipePast=function(){n.pager.isSwiping&&n._onSwipeEnd()},this.pager=t,this._trackStart=!1,this._swipeStart=this._swipeDiff={x:0,y:0}}return i(e,[{key:"_isSwipe",value:function(e){var t=this._swipeDiff,n=t.x,i=t.y;return"x"===this.pager.options.axis?Math.abs(n)>Math.max(e,Math.abs(i)):Math.abs(n)<Math.max(e,Math.abs(i))}},{key:"getEvents",value:function(){var e=this.pager.options.swipe,t={};return!0!==e&&"mouse"!==e||(t.onMouseDown=this._onSwipeStart,t.onMouseMove=this._onSwipeMove,t.onMouseUp=this._onSwipeEnd,t.onMouseLeave=this._onSwipePast),!0!==e&&"touch"!==e||(t.onTouchStart=this._onSwipeStart,t.onTouchMove=this._onSwipeMove,t.onTouchEnd=this._onSwipeEnd),t}}]),e}();t.default=o,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),r=n(11);var o=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._handleKeyDown=function(e){switch(e.key){case"ArrowUp":case"ArrowLeft":return void n.pager.prev();case"ArrowDown":case"ArrowRight":case" ":return void n.pager.next();case"Home":return void n.pager.setCurrentView({index:0});case"End":return void n.pager.setCurrentView({index:n.pager.views.length-1})}for(var t=(0,r.clamp)(n.pager.views.length,0,9),i=1;i<=t;i++)+e.key===i&&n.pager.setCurrentView({index:i-1})},this.pager=t}return i(e,[{key:"getEvents",value:function(){var e={};return this.pager.options.accessibility&&(e.onKeyDown=this._handleKeyDown),e}}]),e}();t.default=o,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},o=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),a=n(1),s=p(a),l=p(n(3)),u=n(4),c=n(30),d=p(n(8)),f=p(n(119)),h=p(n(17));function p(e){return e&&e.__esModule?e:{default:e}}function m(e,t){var n={};for(var i in e)t.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i]);return n}function g(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function y(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var b=function(){return null},w={tag:l.default.any,currentView:l.default.any,viewsToShow:l.default.oneOfType([l.default.number,l.default.oneOf(["auto"])]),viewsToMove:l.default.number,align:l.default.number,contain:l.default.bool,axis:l.default.oneOf(["x","y"]),animations:l.default.array,infinite:l.default.bool,instant:l.default.bool,swipe:l.default.oneOf([!0,!1,"mouse","touch"]),swipeThreshold:l.default.number,flickTimeout:l.default.number,springConfig:l.default.objectOf(l.default.number),onSwipeStart:l.default.func,onSwipeMove:l.default.func,onSwipeEnd:l.default.func,onScroll:l.default.func,onViewChange:l.default.func,onRest:l.default.func},k=function(e){function t(){var e,n,i;g(this,t);for(var r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=arguments[a];return n=i=v(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(o))),i.state={x:0,y:0},v(i,n)}return y(t,e),o(t,[{key:"componentWillReceiveProps",value:function(e){var t=this,n=e.trackPosition,i=this.context.pager;i.setViewStyles(n),this.props.trackPosition!==n&&requestAnimationFrame((function(){return t.props.onScroll(n/i.getTrackSize(!1)*-1,n)}))}},{key:"_renderViews",value:function(){return a.Children.map(this.props.children,(function(e){return e}))}},{key:"render",value:function(){var e=this.context.pager,t=this.props,n=t.tag,i=t.trackPosition,o=(t.children,m(t,["tag","trackPosition","children"])),s=r({},o.style);return e.track&&(s=r({},s,e.track.getStyles(i))),(0,a.createElement)(n,r({},o,{style:s}),this._renderViews())}}]),t}(a.Component);k.propTypes=w,k.contextTypes={pager:l.default.instanceOf(d.default)};var x=function(e){function t(){var e,n,i;g(this,t);for(var r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=arguments[a];return n=i=v(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(o))),i.state={instant:!1},i._currentTween=0,i._hydrate=!1,i._handleOnRest=function(){i.props.infinite&&!i.state.instant&&(i.context.pager.resetViewIndex(),i._setValueInstantly(!0,!0)),i.props.onRest()},v(i,n)}return y(t,e),o(t,[{key:"componentWillMount",value:function(){this.context.pager.setOptions(this.props)}},{key:"componentDidMount",value:function(){var e=this,t=this.context.pager;t.addTrack((0,u.findDOMNode)(this)),this.scrollTo((0,f.default)(this.props.currentView,this.props.children)),t.on("hydrated",(function(){return e._setValueInstantly(!0,!0)})),t.on("swipeMove",(function(){return e._setValueInstantly(!0)})),t.on("swipeEnd",(function(){return e._setValueInstantly(!1)})),t.on("swipeStart",this.props.onSwipeStart),t.on("swipeMove",this.props.onSwipeMove),t.on("swipeEnd",this.props.onSwipeEnd),t.on("viewChange",this.props.onViewChange)}},{key:"componentWillReceiveProps",value:function(e){var t,n,r=e.currentView,o=e.instant,a=e.children;this.props.instant!==o&&this._setValueInstantly(o),void 0!==(void 0===r?"undefined":i(r))&&this.props.currentView!==r&&this.scrollTo((0,f.default)(r,a)),t=this.props,n=e,(t.viewsToShow!==n.viewsToShow||t.viewsToMove!==n.viewsToMove||t.align!==n.align||t.axis!==n.axis||t.animations!==n.animations||t.infinite!==n.infinite||t.swipe!==n.swipe||t.swipeThreshold!==n.swipeThreshold||t.flickTimeout!==n.flickTimeout)&&(this.context.pager.setOptions(e),this._hydrate=!0)}},{key:"componentDidUpdate",value:function(e){this._hydrate&&(this.context.pager.hydrate(),this._hydrate=!1)}},{key:"prev",value:function(){this.context.pager.prev()}},{key:"next",value:function(){this.context.pager.next()}},{key:"scrollTo",value:function(e){this.context.pager.setCurrentView({index:e})}},{key:"_setValueInstantly",value:function(e,t){var n=this;this.setState({instant:e},(function(){t&&n.setState({instant:!1})}))}},{key:"_getTrackStyle",value:function(){var e=this.context.pager.trackPosition;return this.state.instant||(e=(0,c.spring)(e,this.props.springConfig)),{trackPosition:e}}},{key:"render",value:function(){var e=this.props,t=e.tag,n=e.onScroll,i=m(e,["tag","onScroll"]);return s.default.createElement(c.Motion,{style:this._getTrackStyle(),onRest:this._handleOnRest},(function(e){var r=e.trackPosition;return(0,a.createElement)(k,(0,h.default)({trackPosition:r,tag:t,onScroll:n},i,w))}))}}]),t}(a.Component);x.propTypes=w,x.defaultProps={tag:"div",currentView:0,viewsToShow:1,viewsToMove:1,align:0,contain:!1,axis:"x",infinite:!1,instant:!1,swipe:!0,swipeThreshold:.5,flickTimeout:300,springConfig:c.presets.noWobble,onSwipeStart:b,onSwipeMove:b,onSwipeEnd:b,onScroll:b,onViewChange:b,onRest:b},x.contextTypes={pager:l.default.instanceOf(d.default)},t.default=x,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=null;return i.Children.forEach(t,(function(t,i){t.key!==e&&i!==e||(n=i)})),n};var i=n(1);e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),o=n(1),a=(u(o),u(n(3))),s=n(4),l=u(n(8));function u(e){return e&&e.__esModule?e:{default:e}}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var f=function(e){function t(){var e,n,i;c(this,t);for(var r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=arguments[a];return n=i=d(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(o))),i._viewAdded=!1,i._viewInstance=null,d(i,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,[{key:"getChildContext",value:function(){return{view:this._viewInstance}}},{key:"componentDidMount",value:function(){this._viewInstance=this.context.pager.addView((0,s.findDOMNode)(this)),this._viewAdded=!0,this.forceUpdate()}},{key:"componentWillUnmount",value:function(){this.context.pager.removeView(this._viewInstance)}},{key:"render",value:function(){var e=this.context.pager.options,t=(e.viewsToShow,e.axis,this.props),n=t.tag,r=(t.trackSize,function(e,t){var n={};for(var i in e)t.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i]);return n}(t,["tag","trackSize"])),a=i({},r.style);return this._viewAdded||(a.visibility="hidden",a.pointerEvents="none"),this._viewInstance&&(a=i({},a,this._viewInstance.getStyles())),(0,o.createElement)(n,i({},r,{style:a}))}}]),t}(o.Component);f.contextTypes={pager:a.default.instanceOf(l.default)},f.childContextTypes={view:a.default.any},f.propTypes={tag:a.default.any},f.defaultProps={tag:"div"},t.default=f,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),o=n(1),a=(c(o),c(n(3))),s=c(n(28)),l=c(n(8)),u=c(n(17));function c(e){return e&&e.__esModule?e:{default:e}}function d(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var h={tag:a.default.string,index:a.default.number,animations:a.default.array},p=function(e){function t(){return d(this,t),f(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,[{key:"componentWillMount",value:function(){var e=this.props.animations;e.length&&(this._animationBus=new s.default({animations:e,origin:function(e){return e.origin}}))}},{key:"render",value:function(){var e=this.props,t=e.tag,n=e.index,r=function(e,t){var n={};for(var i in e)t.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i]);return n}(e,["tag","index"]),a=i({},r.style);if(this._animationBus){var s=this.context.view||this.context.pager.getView(n);s&&(a=i({},r.style,this._animationBus.getStyles(s)))}return(0,o.createElement)(t,(0,u.default)({style:a},this.props,h))}}]),t}(o.Component);p.contextTypes={pager:a.default.instanceOf(l.default),view:a.default.any},p.propTypes=h,p.defaultProps={tag:"div",animations:[]},t.default=p,e.exports=t.default},function(e,t,n){var i=n(1),r=n(33),o=n(34),a=o.setStyleProp,s=o.canTextBeChildOfNode;function l(e){return o.PRESERVE_CUSTOM_ATTRIBUTES&&"tag"===e.type&&o.isCustomComponent(e.name,e.attribs)}e.exports=function e(t,n){for(var o,u,c,d,f,h=(n=n||{}).library||i,p=h.cloneElement,m=h.createElement,g=h.isValidElement,v=[],y="function"==typeof n.replace,b=n.trim,w=0,k=t.length;w<k;w++)if(o=t[w],y&&g(c=n.replace(o)))k>1&&(c=p(c,{key:c.key||w})),v.push(c);else if("text"!==o.type){switch(d=o.attribs,l(o)?a(d.style,d):d&&(d=r(d)),f=null,o.type){case"script":case"style":o.children[0]&&(d.dangerouslySetInnerHTML={__html:o.children[0].data});break;case"tag":"textarea"===o.name&&o.children[0]?d.defaultValue=o.children[0].data:o.children&&o.children.length&&(f=e(o.children,n));break;default:continue}k>1&&(d.key=w),v.push(m(o.name,d,f))}else{if((u=!o.data.trim().length)&&o.parent&&!s(o.parent))continue;if(b&&u)continue;v.push(o.data)}return 1===v.length?v[0]:v}},function(e,t,n){"use strict";function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var i,r,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(i=n.next()).done)&&(o.push(i.value),!t||o.length!==t);a=!0);}catch(e){s=!0,r=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw r}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return r(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}Object.defineProperty(t,"__esModule",{value:!0});function o(e,t,n,i,r,o,a){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=i,this.attributeNamespace=r,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=a}var a={};["children","dangerouslySetInnerHTML","defaultValue","defaultChecked","innerHTML","suppressContentEditableWarning","suppressHydrationWarning","style"].forEach((function(e){a[e]=new o(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=i(e,2),n=t[0],r=t[1];a[n]=new o(n,1,!1,r,null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){a[e]=new o(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){a[e]=new o(e,2,!1,e,null,!1,!1)})),["allowFullScreen","async","autoFocus","autoPlay","controls","default","defer","disabled","disablePictureInPicture","disableRemotePlayback","formNoValidate","hidden","loop","noModule","noValidate","open","playsInline","readOnly","required","reversed","scoped","seamless","itemScope"].forEach((function(e){a[e]=new o(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){a[e]=new o(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){a[e]=new o(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){a[e]=new o(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){a[e]=new o(e,5,!1,e.toLowerCase(),null,!1,!1)}));var s=/[\-\:]([a-z])/g,l=function(e){return e[1].toUpperCase()};["accent-height","alignment-baseline","arabic-form","baseline-shift","cap-height","clip-path","clip-rule","color-interpolation","color-interpolation-filters","color-profile","color-rendering","dominant-baseline","enable-background","fill-opacity","fill-rule","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-name","glyph-orientation-horizontal","glyph-orientation-vertical","horiz-adv-x","horiz-origin-x","image-rendering","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","overline-position","overline-thickness","paint-order","panose-1","pointer-events","rendering-intent","shape-rendering","stop-color","stop-opacity","strikethrough-position","strikethrough-thickness","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","underline-position","underline-thickness","unicode-bidi","unicode-range","units-per-em","v-alphabetic","v-hanging","v-ideographic","v-mathematical","vector-effect","vert-adv-y","vert-origin-x","vert-origin-y","word-spacing","writing-mode","xmlns:xlink","x-height"].forEach((function(e){var t=e.replace(s,l);a[t]=new o(t,1,!1,e,null,!1,!1)})),["xlink:actuate","xlink:arcrole","xlink:role","xlink:show","xlink:title","xlink:type"].forEach((function(e){var t=e.replace(s,l);a[t]=new o(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(s,l);a[t]=new o(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){a[e]=new o(e,1,!1,e.toLowerCase(),null,!1,!1)}));a.xlinkHref=new o("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){a[e]=new o(e,1,!1,e.toLowerCase(),null,!0,!0)}));var u=n(124),c=u.CAMELCASE,d=u.SAME,f=u.possibleStandardNames,h=RegExp.prototype.test.bind(new RegExp("^(data|aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$")),p=Object.keys(f).reduce((function(e,t){var n=f[t];return n===d?e[t]=t:n===c?e[t.toLowerCase()]=t:e[t]=n,e}),{});t.BOOLEAN=3,t.BOOLEANISH_STRING=2,t.NUMERIC=5,t.OVERLOADED_BOOLEAN=4,t.POSITIVE_NUMERIC=6,t.RESERVED=0,t.STRING=1,t.getPropertyInfo=function(e){return a.hasOwnProperty(e)?a[e]:null},t.isCustomAttribute=h,t.possibleStandardNames=p},function(e,t){t.SAME=0;t.CAMELCASE=1,t.possibleStandardNames={accept:0,acceptCharset:1,"accept-charset":"acceptCharset",accessKey:1,action:0,allowFullScreen:1,alt:0,as:0,async:0,autoCapitalize:1,autoComplete:1,autoCorrect:1,autoFocus:1,autoPlay:1,autoSave:1,capture:0,cellPadding:1,cellSpacing:1,challenge:0,charSet:1,checked:0,children:0,cite:0,class:"className",classID:1,className:1,cols:0,colSpan:1,content:0,contentEditable:1,contextMenu:1,controls:0,controlsList:1,coords:0,crossOrigin:1,dangerouslySetInnerHTML:1,data:0,dateTime:1,default:0,defaultChecked:1,defaultValue:1,defer:0,dir:0,disabled:0,disablePictureInPicture:1,disableRemotePlayback:1,download:0,draggable:0,encType:1,enterKeyHint:1,for:"htmlFor",form:0,formMethod:1,formAction:1,formEncType:1,formNoValidate:1,formTarget:1,frameBorder:1,headers:0,height:0,hidden:0,high:0,href:0,hrefLang:1,htmlFor:1,httpEquiv:1,"http-equiv":"httpEquiv",icon:0,id:0,innerHTML:1,inputMode:1,integrity:0,is:0,itemID:1,itemProp:1,itemRef:1,itemScope:1,itemType:1,keyParams:1,keyType:1,kind:0,label:0,lang:0,list:0,loop:0,low:0,manifest:0,marginWidth:1,marginHeight:1,max:0,maxLength:1,media:0,mediaGroup:1,method:0,min:0,minLength:1,multiple:0,muted:0,name:0,noModule:1,nonce:0,noValidate:1,open:0,optimum:0,pattern:0,placeholder:0,playsInline:1,poster:0,preload:0,profile:0,radioGroup:1,readOnly:1,referrerPolicy:1,rel:0,required:0,reversed:0,role:0,rows:0,rowSpan:1,sandbox:0,scope:0,scoped:0,scrolling:0,seamless:0,selected:0,shape:0,size:0,sizes:0,span:0,spellCheck:1,src:0,srcDoc:1,srcLang:1,srcSet:1,start:0,step:0,style:0,summary:0,tabIndex:1,target:0,title:0,type:0,useMap:1,value:0,width:0,wmode:0,wrap:0,about:0,accentHeight:1,"accent-height":"accentHeight",accumulate:0,additive:0,alignmentBaseline:1,"alignment-baseline":"alignmentBaseline",allowReorder:1,alphabetic:0,amplitude:0,arabicForm:1,"arabic-form":"arabicForm",ascent:0,attributeName:1,attributeType:1,autoReverse:1,azimuth:0,baseFrequency:1,baselineShift:1,"baseline-shift":"baselineShift",baseProfile:1,bbox:0,begin:0,bias:0,by:0,calcMode:1,capHeight:1,"cap-height":"capHeight",clip:0,clipPath:1,"clip-path":"clipPath",clipPathUnits:1,clipRule:1,"clip-rule":"clipRule",color:0,colorInterpolation:1,"color-interpolation":"colorInterpolation",colorInterpolationFilters:1,"color-interpolation-filters":"colorInterpolationFilters",colorProfile:1,"color-profile":"colorProfile",colorRendering:1,"color-rendering":"colorRendering",contentScriptType:1,contentStyleType:1,cursor:0,cx:0,cy:0,d:0,datatype:0,decelerate:0,descent:0,diffuseConstant:1,direction:0,display:0,divisor:0,dominantBaseline:1,"dominant-baseline":"dominantBaseline",dur:0,dx:0,dy:0,edgeMode:1,elevation:0,enableBackground:1,"enable-background":"enableBackground",end:0,exponent:0,externalResourcesRequired:1,fill:0,fillOpacity:1,"fill-opacity":"fillOpacity",fillRule:1,"fill-rule":"fillRule",filter:0,filterRes:1,filterUnits:1,floodOpacity:1,"flood-opacity":"floodOpacity",floodColor:1,"flood-color":"floodColor",focusable:0,fontFamily:1,"font-family":"fontFamily",fontSize:1,"font-size":"fontSize",fontSizeAdjust:1,"font-size-adjust":"fontSizeAdjust",fontStretch:1,"font-stretch":"fontStretch",fontStyle:1,"font-style":"fontStyle",fontVariant:1,"font-variant":"fontVariant",fontWeight:1,"font-weight":"fontWeight",format:0,from:0,fx:0,fy:0,g1:0,g2:0,glyphName:1,"glyph-name":"glyphName",glyphOrientationHorizontal:1,"glyph-orientation-horizontal":"glyphOrientationHorizontal",glyphOrientationVertical:1,"glyph-orientation-vertical":"glyphOrientationVertical",glyphRef:1,gradientTransform:1,gradientUnits:1,hanging:0,horizAdvX:1,"horiz-adv-x":"horizAdvX",horizOriginX:1,"horiz-origin-x":"horizOriginX",ideographic:0,imageRendering:1,"image-rendering":"imageRendering",in2:0,in:0,inlist:0,intercept:0,k1:0,k2:0,k3:0,k4:0,k:0,kernelMatrix:1,kernelUnitLength:1,kerning:0,keyPoints:1,keySplines:1,keyTimes:1,lengthAdjust:1,letterSpacing:1,"letter-spacing":"letterSpacing",lightingColor:1,"lighting-color":"lightingColor",limitingConeAngle:1,local:0,markerEnd:1,"marker-end":"markerEnd",markerHeight:1,markerMid:1,"marker-mid":"markerMid",markerStart:1,"marker-start":"markerStart",markerUnits:1,markerWidth:1,mask:0,maskContentUnits:1,maskUnits:1,mathematical:0,mode:0,numOctaves:1,offset:0,opacity:0,operator:0,order:0,orient:0,orientation:0,origin:0,overflow:0,overlinePosition:1,"overline-position":"overlinePosition",overlineThickness:1,"overline-thickness":"overlineThickness",paintOrder:1,"paint-order":"paintOrder",panose1:0,"panose-1":"panose1",pathLength:1,patternContentUnits:1,patternTransform:1,patternUnits:1,pointerEvents:1,"pointer-events":"pointerEvents",points:0,pointsAtX:1,pointsAtY:1,pointsAtZ:1,prefix:0,preserveAlpha:1,preserveAspectRatio:1,primitiveUnits:1,property:0,r:0,radius:0,refX:1,refY:1,renderingIntent:1,"rendering-intent":"renderingIntent",repeatCount:1,repeatDur:1,requiredExtensions:1,requiredFeatures:1,resource:0,restart:0,result:0,results:0,rotate:0,rx:0,ry:0,scale:0,security:0,seed:0,shapeRendering:1,"shape-rendering":"shapeRendering",slope:0,spacing:0,specularConstant:1,specularExponent:1,speed:0,spreadMethod:1,startOffset:1,stdDeviation:1,stemh:0,stemv:0,stitchTiles:1,stopColor:1,"stop-color":"stopColor",stopOpacity:1,"stop-opacity":"stopOpacity",strikethroughPosition:1,"strikethrough-position":"strikethroughPosition",strikethroughThickness:1,"strikethrough-thickness":"strikethroughThickness",string:0,stroke:0,strokeDasharray:1,"stroke-dasharray":"strokeDasharray",strokeDashoffset:1,"stroke-dashoffset":"strokeDashoffset",strokeLinecap:1,"stroke-linecap":"strokeLinecap",strokeLinejoin:1,"stroke-linejoin":"strokeLinejoin",strokeMiterlimit:1,"stroke-miterlimit":"strokeMiterlimit",strokeWidth:1,"stroke-width":"strokeWidth",strokeOpacity:1,"stroke-opacity":"strokeOpacity",suppressContentEditableWarning:1,suppressHydrationWarning:1,surfaceScale:1,systemLanguage:1,tableValues:1,targetX:1,targetY:1,textAnchor:1,"text-anchor":"textAnchor",textDecoration:1,"text-decoration":"textDecoration",textLength:1,textRendering:1,"text-rendering":"textRendering",to:0,transform:0,typeof:0,u1:0,u2:0,underlinePosition:1,"underline-position":"underlinePosition",underlineThickness:1,"underline-thickness":"underlineThickness",unicode:0,unicodeBidi:1,"unicode-bidi":"unicodeBidi",unicodeRange:1,"unicode-range":"unicodeRange",unitsPerEm:1,"units-per-em":"unitsPerEm",unselectable:0,vAlphabetic:1,"v-alphabetic":"vAlphabetic",values:0,vectorEffect:1,"vector-effect":"vectorEffect",version:0,vertAdvY:1,"vert-adv-y":"vertAdvY",vertOriginX:1,"vert-origin-x":"vertOriginX",vertOriginY:1,"vert-origin-y":"vertOriginY",vHanging:1,"v-hanging":"vHanging",vIdeographic:1,"v-ideographic":"vIdeographic",viewBox:1,viewTarget:1,visibility:0,vMathematical:1,"v-mathematical":"vMathematical",vocab:0,widths:0,wordSpacing:1,"word-spacing":"wordSpacing",writingMode:1,"writing-mode":"writingMode",x1:0,x2:0,x:0,xChannelSelector:1,xHeight:1,"x-height":"xHeight",xlinkActuate:1,"xlink:actuate":"xlinkActuate",xlinkArcrole:1,"xlink:arcrole":"xlinkArcrole",xlinkHref:1,"xlink:href":"xlinkHref",xlinkRole:1,"xlink:role":"xlinkRole",xlinkShow:1,"xlink:show":"xlinkShow",xlinkTitle:1,"xlink:title":"xlinkTitle",xlinkType:1,"xlink:type":"xlinkType",xmlBase:1,"xml:base":"xmlBase",xmlLang:1,"xml:lang":"xmlLang",xmlns:0,"xml:space":"xmlSpace",xmlnsXlink:1,"xmlns:xlink":"xmlnsXlink",xmlSpace:1,y1:0,y2:0,y:0,yChannelSelector:1,z:0,zoomAndPan:1}},function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};t.__esModule=!0;var r=i(n(126)),o=n(128);t.default=function(e,t){var n={};return e&&"string"==typeof e?(r.default(e,(function(e,i){e&&i&&(n[o.camelCase(e,t)]=i)})),n):n}},function(e,t,n){var i=n(127);e.exports=function(e,t){var n,r=null;if(!e||"string"!=typeof e)return r;for(var o,a,s=i(e),l="function"==typeof t,u=0,c=s.length;u<c;u++)o=(n=s[u]).property,a=n.value,l?t(o,a,n):a&&(r||(r={}),r[o]=a);return r}},function(e,t){var n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,i=/\n/g,r=/^\s*/,o=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,a=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,l=/^[;\s]*/,u=/^\s+|\s+$/g;function c(e){return e?e.replace(u,""):""}e.exports=function(e,t){if("string"!=typeof e)throw new TypeError("First argument must be a string");if(!e)return[];t=t||{};var u=1,d=1;function f(e){var t=e.match(i);t&&(u+=t.length);var n=e.lastIndexOf("\n");d=~n?e.length-n:d+e.length}function h(){var e={line:u,column:d};return function(t){return t.position=new p(e),y(),t}}function p(e){this.start=e,this.end={line:u,column:d},this.source=t.source}p.prototype.content=e;var m=[];function g(n){var i=new Error(t.source+":"+u+":"+d+": "+n);if(i.reason=n,i.filename=t.source,i.line=u,i.column=d,i.source=e,!t.silent)throw i;m.push(i)}function v(t){var n=t.exec(e);if(n){var i=n[0];return f(i),e=e.slice(i.length),n}}function y(){v(r)}function b(e){var t;for(e=e||[];t=w();)!1!==t&&e.push(t);return e}function w(){var t=h();if("/"==e.charAt(0)&&"*"==e.charAt(1)){for(var n=2;""!=e.charAt(n)&&("*"!=e.charAt(n)||"/"!=e.charAt(n+1));)++n;if(n+=2,""===e.charAt(n-1))return g("End of comment missing");var i=e.slice(2,n-2);return d+=2,f(i),e=e.slice(n),d+=2,t({type:"comment",comment:i})}}function k(){var e=h(),t=v(o);if(t){if(w(),!v(a))return g("property missing ':'");var i=v(s),r=e({type:"declaration",property:c(t[0].replace(n,"")),value:i?c(i[0].replace(n,"")):""});return v(l),r}}return y(),function(){var e,t=[];for(b(t);e=k();)!1!==e&&(t.push(e),b(t));return t}()}},function(e,t,n){"use strict";t.__esModule=!0,t.camelCase=void 0;var i=/^--[a-zA-Z0-9-]+$/,r=/-([a-z])/g,o=/^[^-]+$/,a=/^-(webkit|moz|ms|o|khtml)-/,s=function(e,t){return t.toUpperCase()},l=function(e,t){return t+"-"};t.camelCase=function(e,t){return void 0===t&&(t={}),function(e){return!e||o.test(e)||i.test(e)}(e)?e:(e=e.toLowerCase(),t.reactCompat||(e=e.replace(a,l)),e.replace(r,s))}},function(e,t,n){"use strict";n.r(t);var i=n(39);t.default=i},function(e,t,n){var i=/<([a-zA-Z]+[0-9]?)/,r=/<head.*>/i,o=/<body.*>/i,a=function(){throw new Error("This browser does not support `document.implementation.createHTMLDocument`")},s=function(){throw new Error("This browser does not support `DOMParser.prototype.parseFromString`")};if("function"==typeof window.DOMParser){var l=new window.DOMParser;a=s=function(e,t){return t&&(e="<"+t+">"+e+"</"+t+">"),l.parseFromString(e,"text/html")}}if(document.implementation){var u=n(35).isIE,c=document.implementation.createHTMLDocument(u()?"html-dom-parser":void 0);a=function(e,t){return t?(c.documentElement.getElementsByTagName(t)[0].innerHTML=e,c):(c.documentElement.innerHTML=e,c)}}var d,f=document.createElement("template");f.content&&(d=function(e){return f.innerHTML=e,f.content.childNodes}),e.exports=function(e){var t,n,l,u,c=e.match(i);switch(c&&c[1]&&(t=c[1].toLowerCase()),t){case"html":return n=s(e),r.test(e)||(l=n.getElementsByTagName("head")[0])&&l.parentNode.removeChild(l),o.test(e)||(l=n.getElementsByTagName("body")[0])&&l.parentNode.removeChild(l),n.getElementsByTagName("html");case"head":case"body":return u=a(e).getElementsByTagName(t),o.test(e)&&r.test(e)?u[0].parentNode.childNodes:u;default:return d?d(e):a(e,"body").getElementsByTagName("body")[0].childNodes}}},function(e,t){e.exports={CASE_SENSITIVE_TAG_NAMES:["animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussainBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","linearGradient","radialGradient","textPath"]}},function(e,t,n){"use strict";var i,r=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__assign||function(){return(o=Object.assign||function(e){for(var t,n=1,i=arguments.length;n<i;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0}),t.cloneNode=t.hasChildren=t.isDocument=t.isDirective=t.isComment=t.isText=t.isCDATA=t.isTag=t.Element=t.Document=t.NodeWithChildren=t.ProcessingInstruction=t.Comment=t.Text=t.DataNode=t.Node=void 0;var a=n(36),s=new Map([[a.ElementType.Tag,1],[a.ElementType.Script,1],[a.ElementType.Style,1],[a.ElementType.Directive,1],[a.ElementType.Text,3],[a.ElementType.CDATA,4],[a.ElementType.Comment,8],[a.ElementType.Root,9]]),l=function(){function e(e){this.type=e,this.parent=null,this.prev=null,this.next=null,this.startIndex=null,this.endIndex=null}return Object.defineProperty(e.prototype,"nodeType",{get:function(){var e;return null!==(e=s.get(this.type))&&void 0!==e?e:1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"parentNode",{get:function(){return this.parent},set:function(e){this.parent=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"previousSibling",{get:function(){return this.prev},set:function(e){this.prev=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"nextSibling",{get:function(){return this.next},set:function(e){this.next=e},enumerable:!1,configurable:!0}),e.prototype.cloneNode=function(e){return void 0===e&&(e=!1),x(this,e)},e}();t.Node=l;var u=function(e){function t(t,n){var i=e.call(this,t)||this;return i.data=n,i}return r(t,e),Object.defineProperty(t.prototype,"nodeValue",{get:function(){return this.data},set:function(e){this.data=e},enumerable:!1,configurable:!0}),t}(l);t.DataNode=u;var c=function(e){function t(t){return e.call(this,a.ElementType.Text,t)||this}return r(t,e),t}(u);t.Text=c;var d=function(e){function t(t){return e.call(this,a.ElementType.Comment,t)||this}return r(t,e),t}(u);t.Comment=d;var f=function(e){function t(t,n){var i=e.call(this,a.ElementType.Directive,n)||this;return i.name=t,i}return r(t,e),t}(u);t.ProcessingInstruction=f;var h=function(e){function t(t,n){var i=e.call(this,t)||this;return i.children=n,i}return r(t,e),Object.defineProperty(t.prototype,"firstChild",{get:function(){var e;return null!==(e=this.children[0])&&void 0!==e?e:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"lastChild",{get:function(){return this.children.length>0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"childNodes",{get:function(){return this.children},set:function(e){this.children=e},enumerable:!1,configurable:!0}),t}(l);t.NodeWithChildren=h;var p=function(e){function t(t){return e.call(this,a.ElementType.Root,t)||this}return r(t,e),t}(h);t.Document=p;var m=function(e){function t(t,n,i,r){void 0===i&&(i=[]),void 0===r&&(r="script"===t?a.ElementType.Script:"style"===t?a.ElementType.Style:a.ElementType.Tag);var o=e.call(this,r,i)||this;return o.name=t,o.attribs=n,o}return r(t,e),Object.defineProperty(t.prototype,"tagName",{get:function(){return this.name},set:function(e){this.name=e},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"attributes",{get:function(){var e=this;return Object.keys(this.attribs).map((function(t){var n,i;return{name:t,value:e.attribs[t],namespace:null===(n=e["x-attribsNamespace"])||void 0===n?void 0:n[t],prefix:null===(i=e["x-attribsPrefix"])||void 0===i?void 0:i[t]}}))},enumerable:!1,configurable:!0}),t}(h);function g(e){return(0,a.isTag)(e)}function v(e){return e.type===a.ElementType.CDATA}function y(e){return e.type===a.ElementType.Text}function b(e){return e.type===a.ElementType.Comment}function w(e){return e.type===a.ElementType.Directive}function k(e){return e.type===a.ElementType.Root}function x(e,t){var n;if(void 0===t&&(t=!1),y(e))n=new c(e.data);else if(b(e))n=new d(e.data);else if(g(e)){var i=t?_(e.children):[],r=new m(e.name,o({},e.attribs),i);i.forEach((function(e){return e.parent=r})),null!=e.namespace&&(r.namespace=e.namespace),e["x-attribsNamespace"]&&(r["x-attribsNamespace"]=o({},e["x-attribsNamespace"])),e["x-attribsPrefix"]&&(r["x-attribsPrefix"]=o({},e["x-attribsPrefix"])),n=r}else if(v(e)){i=t?_(e.children):[];var s=new h(a.ElementType.CDATA,i);i.forEach((function(e){return e.parent=s})),n=s}else if(k(e)){i=t?_(e.children):[];var l=new p(i);i.forEach((function(e){return e.parent=l})),e["x-mode"]&&(l["x-mode"]=e["x-mode"]),n=l}else{if(!w(e))throw new Error("Not implemented yet: ".concat(e.type));var u=new f(e.name,e.data);null!=e["x-name"]&&(u["x-name"]=e["x-name"],u["x-publicId"]=e["x-publicId"],u["x-systemId"]=e["x-systemId"]),n=u}return n.startIndex=e.startIndex,n.endIndex=e.endIndex,null!=e.sourceCodeLocation&&(n.sourceCodeLocation=e.sourceCodeLocation),n}function _(e){for(var t=e.map((function(e){return x(e,!0)})),n=1;n<t.length;n++)t[n].prev=t[n-1],t[n-1].next=t[n];return t}t.Element=m,t.isTag=g,t.isCDATA=v,t.isText=y,t.isComment=b,t.isDirective=w,t.isDocument=k,t.hasChildren=function(e){return Object.prototype.hasOwnProperty.call(e,"children")},t.cloneNode=x},function(e,t,n){"use strict";var i,r=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__assign||function(){return(o=Object.assign||function(e){for(var t,n=1,i=arguments.length;n<i;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0}),t.cloneNode=t.hasChildren=t.isDocument=t.isDirective=t.isComment=t.isText=t.isCDATA=t.isTag=t.Element=t.Document=t.NodeWithChildren=t.ProcessingInstruction=t.Comment=t.Text=t.DataNode=t.Node=void 0;var a=n(36),s=new Map([[a.ElementType.Tag,1],[a.ElementType.Script,1],[a.ElementType.Style,1],[a.ElementType.Directive,1],[a.ElementType.Text,3],[a.ElementType.CDATA,4],[a.ElementType.Comment,8],[a.ElementType.Root,9]]),l=function(){function e(e){this.type=e,this.parent=null,this.prev=null,this.next=null,this.startIndex=null,this.endIndex=null}return Object.defineProperty(e.prototype,"nodeType",{get:function(){var e;return null!==(e=s.get(this.type))&&void 0!==e?e:1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"parentNode",{get:function(){return this.parent},set:function(e){this.parent=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"previousSibling",{get:function(){return this.prev},set:function(e){this.prev=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"nextSibling",{get:function(){return this.next},set:function(e){this.next=e},enumerable:!1,configurable:!0}),e.prototype.cloneNode=function(e){return void 0===e&&(e=!1),x(this,e)},e}();t.Node=l;var u=function(e){function t(t,n){var i=e.call(this,t)||this;return i.data=n,i}return r(t,e),Object.defineProperty(t.prototype,"nodeValue",{get:function(){return this.data},set:function(e){this.data=e},enumerable:!1,configurable:!0}),t}(l);t.DataNode=u;var c=function(e){function t(t){return e.call(this,a.ElementType.Text,t)||this}return r(t,e),t}(u);t.Text=c;var d=function(e){function t(t){return e.call(this,a.ElementType.Comment,t)||this}return r(t,e),t}(u);t.Comment=d;var f=function(e){function t(t,n){var i=e.call(this,a.ElementType.Directive,n)||this;return i.name=t,i}return r(t,e),t}(u);t.ProcessingInstruction=f;var h=function(e){function t(t,n){var i=e.call(this,t)||this;return i.children=n,i}return r(t,e),Object.defineProperty(t.prototype,"firstChild",{get:function(){var e;return null!==(e=this.children[0])&&void 0!==e?e:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"lastChild",{get:function(){return this.children.length>0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"childNodes",{get:function(){return this.children},set:function(e){this.children=e},enumerable:!1,configurable:!0}),t}(l);t.NodeWithChildren=h;var p=function(e){function t(t){return e.call(this,a.ElementType.Root,t)||this}return r(t,e),t}(h);t.Document=p;var m=function(e){function t(t,n,i,r){void 0===i&&(i=[]),void 0===r&&(r="script"===t?a.ElementType.Script:"style"===t?a.ElementType.Style:a.ElementType.Tag);var o=e.call(this,r,i)||this;return o.name=t,o.attribs=n,o}return r(t,e),Object.defineProperty(t.prototype,"tagName",{get:function(){return this.name},set:function(e){this.name=e},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"attributes",{get:function(){var e=this;return Object.keys(this.attribs).map((function(t){var n,i;return{name:t,value:e.attribs[t],namespace:null===(n=e["x-attribsNamespace"])||void 0===n?void 0:n[t],prefix:null===(i=e["x-attribsPrefix"])||void 0===i?void 0:i[t]}}))},enumerable:!1,configurable:!0}),t}(h);function g(e){return(0,a.isTag)(e)}function v(e){return e.type===a.ElementType.CDATA}function y(e){return e.type===a.ElementType.Text}function b(e){return e.type===a.ElementType.Comment}function w(e){return e.type===a.ElementType.Directive}function k(e){return e.type===a.ElementType.Root}function x(e,t){var n;if(void 0===t&&(t=!1),y(e))n=new c(e.data);else if(b(e))n=new d(e.data);else if(g(e)){var i=t?_(e.children):[],r=new m(e.name,o({},e.attribs),i);i.forEach((function(e){return e.parent=r})),null!=e.namespace&&(r.namespace=e.namespace),e["x-attribsNamespace"]&&(r["x-attribsNamespace"]=o({},e["x-attribsNamespace"])),e["x-attribsPrefix"]&&(r["x-attribsPrefix"]=o({},e["x-attribsPrefix"])),n=r}else if(v(e)){i=t?_(e.children):[];var s=new h(a.ElementType.CDATA,i);i.forEach((function(e){return e.parent=s})),n=s}else if(k(e)){i=t?_(e.children):[];var l=new p(i);i.forEach((function(e){return e.parent=l})),e["x-mode"]&&(l["x-mode"]=e["x-mode"]),n=l}else{if(!w(e))throw new Error("Not implemented yet: ".concat(e.type));var u=new f(e.name,e.data);null!=e["x-name"]&&(u["x-name"]=e["x-name"],u["x-publicId"]=e["x-publicId"],u["x-systemId"]=e["x-systemId"]),n=u}return n.startIndex=e.startIndex,n.endIndex=e.endIndex,null!=e.sourceCodeLocation&&(n.sourceCodeLocation=e.sourceCodeLocation),n}function _(e){for(var t=e.map((function(e){return x(e,!0)})),n=1;n<t.length;n++)t[n].prev=t[n-1],t[n-1].next=t[n];return t}t.Element=m,t.isTag=g,t.isCDATA=v,t.isText=y,t.isComment=b,t.isDirective=w,t.isDocument=k,t.hasChildren=function(e){return Object.prototype.hasOwnProperty.call(e,"children")},t.cloneNode=x},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/1.be0f89b0.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/2.63eb8149.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/3.8bb34b7c.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/4.21295f9b.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/5.8d5f8325.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/6.18db7339.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/7.7b901dcd.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/8.17619327.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/9.84cb1ad3.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/10.a02c796d.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/11.841e9898.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/12.927e2489.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/13.6fd1bc28.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/14.0f4c3583.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/15.9f9170b3.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/16.6a4a405c.jpg"},function(e,t){e.exports='<div class="site-content grid-container"> <h1>Herzlich Willkommen</h1> <p>Wir freuen uns, mit Euch unsere Hochzeit in Aachen zu feiern! Nach unserer wunderschönen standesamtlichen Trauung am 24. April letztes Jahr, freuen wir uns auf unsere kirchliche Hochzeit am 7. Mai dieses Jahr. Bitte sagt uns doch bis zum 15. März, ob ihr dabei sein könnt! Schreibt uns dazu gerne eine Mail an <a href="mailto:hochzeit-js@gmx.net">hochzeit-js@gmx.net</a>. </p> <p>Nach den neusten Lockerungen sind wir sehr zuversichtlich, dass unsere Hochzeit dieses Jahr trotz Corona stattfinden kann. Wir gehen davon aus, dass wir unter 2G- oder 2G-plus-Regeln feiern werden, aber mit genaueren Infos dazu melden wir uns nochmal rechtzeitig vorher.</p> <p>Falls ihr Fragen habt, meldet euch gerne bei uns :)</p> </div> '},function(e,t,n){var i=n(18),r=n(152),o=n(37),a='<div class="flex-container fill-height-medium-up"> <div class="grow height-100 overflow-auto site-content hide-scrollbar"> <h1>Unterkunft</h1> <p> Wir freuen uns riesig, dass ihr aus nah und fern anreist, um mit uns gemeinsam unseren Hochzeitstag zu verbringen! </p> <p> Untenstehend findet ihr Vorschläge für Übernachtungsmöglichkeiten in Aachen. Das B&B Hotel Aachen City (Großkölnstraße 57-63) ist fußläufig von unserer Location in fünf Minuten zu erreichen. Da wir von der Kirche zu Fuß ins Forum M gehen können, könnt ihr das Auto im Parkhaus am Dom über Nacht stehen lassen. </p> <p> Alle, die eher eine studentische Übernachtungsmöglichkeit suchen, können sich gerne bei uns melden. Ihr werdet dann bei Freunden von uns in WGs übernachten. Sagt uns da bitte auch spätestens bis zum 15. März Bescheid. </p> <div class="grid-x padding-default"> <div class="small-4"> <a href="https://www.hotel-bb.com/de/hotel/aachen-city" target="_blank" class="hidden-link"> <h3>B&B Hotel</h3> <img src="'+i(r)+'"> </a> </div> <div class="small-8"> <iframe id="map_unterkunft" src="https://maps.google.com/maps?width=520&amp;height=395&amp;hl=de&amp;q=B%26B+Hotel+Aachen-City,+Großkölnstraße+57-63,+52062+Aachen&amp;t=&amp;z=14&amp;ie=UTF8&amp;iwloc=B&amp;output=embed"></iframe> </div> </div> </div> <div class="height-100 hide-for-small-only img-column"> <img src="'+i(o)+'" class="height-100"> </div> </div> ';e.exports=a},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/hotel.024e0474.png"},function(e,t,n){var i=n(18),r=n(154),o=n(155),a=i(r),s=i(o),l='<div class="flex-container fill-height-medium-up"> <div class="height-100" id="info-image-container" data-state="godi"> <img src="'+a+'" class="height-100"> <img src="'+s+'" class="circler visible"> <img src="'+s+'" class="circler godi" data-state="godi"> <img src="'+s+'" class="circler fingerfood" data-state="fingerfood"> <img src="'+s+'" class="circler foto" data-state="foto"> <img src="'+s+'" class="circler sekt" data-state="sekt"> <img src="'+s+'" class="circler essen" data-state="essen"> <img src="'+s+'" class="circler spiel" data-state="spiel"> <img src="'+s+'" class="circler dance" data-state="dance"> </div> <div class="grow height-100 overflow-auto site-content hide-for-small-only hide-scrollbar"> <div class="anchor" data-state="godi"> <h1>Traugottesdienst</h1> <p> Um 12:00 Uhr möchten wir gemeinsam mit euch unseren Traugottesdienst in der Annakirche feiern (Annastraße 35, 52062 Aachen). Wenn ihr mit dem Auto anreist könnt ihr im Parkhaus am Dom (Jesuitenstraße 12, 52062 Aachen) parken, das ist direkt neben der Kirche. <br/>Kleiner fun fact: Es lohnt sich auf der obersten Etage zu parken, dort gibt es eine tolle Aussicht auf den Dom und da haben wir uns verlobt. </p> </div> <div class="anchor" data-state="fingerfood"> <h1>Fingerfood</h1> <p> Nach dem Gottesdienst gibt es süßes und salziges Fingerfood und ganz viel Zeit zum Gratulieren. Wenn ihr etwas zum Buffet beisteuern möchtet, dann meldet euch gerne bei <a href="mailto:sinah.stinner@googlemail.com">Sinah Stinner (sinah.stinner@googlemail.com)</a>. </p> </div> <div class="anchor" data-state="foto"> <h1>Gruppenfotos</h1> <p> Um ganz viele wundervolle Erinnerungen an den besonderen Tag zu haben, gehen wir gegen 15:30 Uhr auf den Katschhof, zwischen dem Aachener Dom und Rathaus, und machen dort Gruppenfotos. </p> </div> <div class="anchor" data-state="sekt"> <h1>Sektempfang</h1> <p> Wir feiern unsere Hochzeit im Forum M über der Aachener Mayerschen mit einem wundervollen Blick über die Aachener Innenstadt. Gegen 17h wollen wir dort gemeinsam anstoßen. </p> </div> <div class="anchor" data-state="essen"> <h1>Festessen</h1> <p> Um halb acht starten wir den Abend mit dem leckeren Hochzeitsbuffet. </p> </div> <div class="anchor" data-state="spiel"> <h1>Spiel und Spass</h1> <p> Wir freuen uns auf viele einzigartige, lustige und spaßige Programmbeiträge von euch. Wenn ihr es schon gar nicht erwarten könnt uns eine Freude zu machen und einen Beitrag beizusteuern, dann meldet euch gerne bei <a href="mailto:seitz-miriam@web.de">Miriam Seitz (seitz-miriam@web.de)</a>. Und keine Sorge, Miriam behält alle Beiträge und Überraschungen für sich, aber sagt ihr bitte bei allem Bescheid, was ihr planen wollt. </p> </div> <div class="anchor" data-state="dance"> <h1>Let\'s Dance</h1> <p> Ihr könnt zuhause schonmal üben, um die Tanzfläche unsicher zu machen! </p> </div> </div> </div> <div id="modal"></div> ';e.exports=l},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/tagesablauf_neu.57b95147.jpg"},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/einkreiser.e1cde9f4.png"},function(e,t,n){var i='<div class="flex-container fill-height-medium-up"> <div class="grow height-100 overflow-auto site-content hide-scrollbar"> <h1>Geschenkeliste</h1> <p> Ihr macht uns die größte Freude, wenn ihr mit uns feiert und den Tag verbringt. Wenn ihr uns gerne etwas schenken möchtet, haben wir eine Liste zusammengestellt, worüber wir uns sehr freuen. Außerdem lieben wir es zu reisen und freuen uns immer über Geld für unsere Reisekasse. Falls ihr euch unten in der Liste etwas ausgesucht habt, dann setzt dort gerne einen Haken. Wenn ihr auf ein Bild klickt, öffnet sich direkt der passende Link dazu. </p> <div id="present-container"> <a id="present-template" class="flex-container present" target="_blank"> <div class="present-checkbox"> <div></div> </div> <img class="present-image"> <div class="grow present-info"> <div> <div class="present-name"></div> <div class="present-description"></div> </div> </div> </a> </div> </div> <div class="height-100 hide-for-small-only img-column fill-height"> <img src="'+n(18)(n(38))+'" class="height-100"> </div> </div> ';e.exports=i},function(e,t){e.exports='<div class="site-content grid-container"> <h1>Standesamtliche Trauung</h1> <p>Hier findet ihr ein paar Impressionen zu unserer standesamtlichen Trauung letztes Jahr. Wir haben trotz Start des bundesweiten Lockdowns einen wunderschönen Tag im kleinen Familienkreis verbracht.</p><br/> <div id="gallery"></div> </div> '},function(e,t){e.exports='<div class="site-content grid-container"> <h1>Fotobox</h1> <p>Es wurden einige Fotos in der Fotobox gemacht, die ihr hier ansehen und <a href="/bilder/Fotobox.zip" target="_blank">downloaden</a> könnt.</p><br/> <div id="gallery"></div> </div> '},function(e,t){e.exports='<div class="site-content grid-container"> <h1>Hochzeitsfotos</h1> <p>Hier könnt ihr die Fotos unserer Hochzeit ansehen und <a href="/bilder/Hochzeit.zip" target="_blank">downloaden.</a></p><br/> <div id="gallery"></div> </div> '},function(e,t,n){"use strict";n.r(t),t.default=n.p+"static/media/home.64f05ede.jpg"},function(e,t,n){"use strict";n.r(t);var i=n(0),r=n.n(i);function o(){return"rtl"===r()("html").attr("dir")}function a(e=6,t){let n="";const i="0123456789abcdefghijklmnopqrstuvwxyz",r=i.length;for(let t=0;t<e;t++)n+=i[Math.floor(Math.random()*r)];return t?`${n}-${t}`:n}function s(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")}function l(e){var t,n={transition:"transitionend",WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"otransitionend"},i=document.createElement("div");for(let e in n)void 0!==i.style[e]&&(t=n[e]);return t||(setTimeout((function(){e.triggerHandler("transitionend",[e])}),1),"transitionend")}function u(e,t){const n="complete"===document.readyState,i=(n?"_didLoad":"load")+".zf.util.onLoad",o=()=>e.triggerHandler(i);return e&&(t&&e.one(i,t),n?setTimeout(o):r()(window).one("load",o)),i}function c(e,{ignoreLeaveWindow:t=!1,ignoreReappear:n=!1}={}){return function(i,...o){const a=e.bind(this,i,...o);if(null!==i.relatedTarget)return a();setTimeout((function(){if(!t&&document.hasFocus&&!document.hasFocus())return a();n||r()(document).one("mouseenter",(function(e){r()(i.currentTarget).has(e.target).length||(i.relatedTarget=e.target,a())}))}),0)}}window.matchMedia||(window.matchMedia=function(){var e=window.styleMedia||window.media;if(!e){var t,n=document.createElement("style"),i=document.getElementsByTagName("script")[0];n.type="text/css",n.id="matchmediajs-test",i?i.parentNode.insertBefore(n,i):document.head.appendChild(n),t="getComputedStyle"in window&&window.getComputedStyle(n,null)||n.currentStyle,e={matchMedium:function(e){var i="@media "+e+"{ #matchmediajs-test { width: 1px; } }";return n.styleSheet?n.styleSheet.cssText=i:n.textContent=i,"1px"===t.width}}}return function(t){return{matches:e.matchMedium(t||"all"),media:t||"all"}}}());var d={queries:[],current:"",_init(){if(!0===this.isInitialized)return this;this.isInitialized=!0;r()("meta.foundation-mq").length||r()('<meta class="foundation-mq" name="foundation-mq" content>').appendTo(document.head);var e,t=r()(".foundation-mq").css("font-family");for(var n in e=function(e){var t={};if("string"!=typeof e)return t;if(!(e=e.trim().slice(1,-1)))return t;return t=e.split("&").reduce((function(e,t){var n=t.replace(/\+/g," ").split("="),i=n[0],r=n[1];return i=decodeURIComponent(i),r=void 0===r?null:decodeURIComponent(r),e.hasOwnProperty(i)?Array.isArray(e[i])?e[i].push(r):e[i]=[e[i],r]:e[i]=r,e}),{})}(t),this.queries=[],e)e.hasOwnProperty(n)&&this.queries.push({name:n,value:`only screen and (min-width: ${e[n]})`});this.current=this._getCurrentSize(),this._watcher()},_reInit(){this.isInitialized=!1,this._init()},atLeast(e){var t=this.get(e);return!!t&&window.matchMedia(t).matches},only(e){return e===this._getCurrentSize()},upTo(e){const t=this.next(e);return!t||!this.atLeast(t)},is(e){const t=e.trim().split(" ").filter(e=>!!e.length),[n,i=""]=t;if("only"===i)return this.only(n);if(!i||"up"===i)return this.atLeast(n);if("down"===i)return this.upTo(n);throw new Error(`\n Invalid breakpoint passed to MediaQuery.is().\n Expected a breakpoint name formatted like "<size> <modifier>", got "${e}".\n `)},get(e){for(var t in this.queries)if(this.queries.hasOwnProperty(t)){var n=this.queries[t];if(e===n.name)return n.value}return null},next(e){const t=this.queries.findIndex(t=>this._getQueryName(t)===e);if(-1===t)throw new Error(`\n Unknown breakpoint "${e}" passed to MediaQuery.next().\n Ensure it is present in your Sass "$breakpoints" setting.\n `);const n=this.queries[t+1];return n?n.name:null},_getQueryName(e){if("string"==typeof e)return e;if("object"==typeof e)return e.name;throw new TypeError(`\n Invalid value passed to MediaQuery._getQueryName().\n Expected a breakpoint name (String) or a breakpoint query (Object), got "${e}" (${typeof e})\n `)},_getCurrentSize(){for(var e,t=0;t<this.queries.length;t++){var n=this.queries[t];window.matchMedia(n.value).matches&&(e=n)}return e&&this._getQueryName(e)},_watcher(){r()(window).on("resize.zf.trigger",()=>{var e=this._getCurrentSize(),t=this.current;e!==t&&(this.current=e,r()(window).trigger("changed.zf.mediaquery",[e,t]))})}};var f={version:"6.7.4",_plugins:{},_uuids:[],plugin:function(e,t){var n=t||h(e),i=p(n);this._plugins[i]=this[n]=e},registerPlugin:function(e,t){var n=t?p(t):h(e.constructor).toLowerCase();e.uuid=a(6,n),e.$element.attr("data-"+n)||e.$element.attr("data-"+n,e.uuid),e.$element.data("zfPlugin")||e.$element.data("zfPlugin",e),e.$element.trigger("init.zf."+n),this._uuids.push(e.uuid)},unregisterPlugin:function(e){var t=p(h(e.$element.data("zfPlugin").constructor));for(var n in this._uuids.splice(this._uuids.indexOf(e.uuid),1),e.$element.removeAttr("data-"+t).removeData("zfPlugin").trigger("destroyed.zf."+t),e)"function"==typeof e[n]&&(e[n]=null)},reInit:function(e){var t=e instanceof r.a;try{if(t)e.each((function(){r()(this).data("zfPlugin")._init()}));else{var n=this;({object:function(e){e.forEach((function(e){e=p(e),r()("[data-"+e+"]").foundation("_init")}))},string:function(){e=p(e),r()("[data-"+e+"]").foundation("_init")},undefined:function(){this.object(Object.keys(n._plugins))}})[typeof e](e)}}catch(e){console.error(e)}finally{return e}},reflow:function(e,t){void 0===t?t=Object.keys(this._plugins):"string"==typeof t&&(t=[t]);var n=this;r.a.each(t,(function(t,i){var o=n._plugins[i];r()(e).find("[data-"+i+"]").addBack("[data-"+i+"]").filter((function(){return void 0===r()(this).data("zfPlugin")})).each((function(){var e=r()(this),t={reflow:!0};e.attr("data-options")&&e.attr("data-options").split(";").forEach((function(e){var n=e.split(":").map((function(e){return e.trim()}));n[0]&&(t[n[0]]=function(e){if("true"===e)return!0;if("false"===e)return!1;if(!isNaN(1*e))return parseFloat(e);return e}(n[1]))}));try{e.data("zfPlugin",new o(r()(this),t))}catch(e){console.error(e)}finally{return}}))}))},getFnName:h,addToJquery:function(){return r.a.fn.foundation=function(e){var t=typeof e,n=r()(".no-js");if(n.length&&n.removeClass("no-js"),"undefined"===t)d._init(),f.reflow(this);else{if("string"!==t)throw new TypeError(`We're sorry, ${t} is not a valid parameter. You must use a string representing the method you wish to invoke.`);var i=Array.prototype.slice.call(arguments,1),o=this.data("zfPlugin");if(void 0===o||void 0===o[e])throw new ReferenceError("We're sorry, '"+e+"' is not an available method for "+(o?h(o):"this element")+".");1===this.length?o[e].apply(o,i):this.each((function(t,n){o[e].apply(r()(n).data("zfPlugin"),i)}))}return this},r.a}};function h(e){if(void 0===Function.prototype.name){var t=/function\s([^(]{1,})\(/.exec(e.toString());return t&&t.length>1?t[1].trim():""}return void 0===e.prototype?e.constructor.name:e.prototype.constructor.name}function p(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}f.util={throttle:function(e,t){var n=null;return function(){var i=this,r=arguments;null===n&&(n=setTimeout((function(){e.apply(i,r),n=null}),t))}}},window.Foundation=f,function(){Date.now&&window.Date.now||(window.Date.now=Date.now=function(){return(new Date).getTime()});for(var e=["webkit","moz"],t=0;t<e.length&&!window.requestAnimationFrame;++t){var n=e[t];window.requestAnimationFrame=window[n+"RequestAnimationFrame"],window.cancelAnimationFrame=window[n+"CancelAnimationFrame"]||window[n+"CancelRequestAnimationFrame"]}if(/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent)||!window.requestAnimationFrame||!window.cancelAnimationFrame){var i=0;window.requestAnimationFrame=function(e){var t=Date.now(),n=Math.max(i+16,t);return setTimeout((function(){e(i=n)}),n-t)},window.cancelAnimationFrame=clearTimeout}window.performance&&window.performance.now||(window.performance={start:Date.now(),now:function(){return Date.now()-this.start}})}(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,i=function(){},r=function(){return n.apply(this instanceof i?this:e,t.concat(Array.prototype.slice.call(arguments)))};return this.prototype&&(i.prototype=this.prototype),r.prototype=new i,r});var m={ImNotTouchingYou:function(e,t,n,i,r){return 0===g(e,t,n,i,r)},OverlapArea:g,GetDimensions:v,GetExplicitOffsets:function(e,t,n,i,r,o,a){var s,l,u=v(e),c=t?v(t):null;if(null!==c){switch(n){case"top":s=c.offset.top-(u.height+r);break;case"bottom":s=c.offset.top+c.height+r;break;case"left":l=c.offset.left-(u.width+o);break;case"right":l=c.offset.left+c.width+o}switch(n){case"top":case"bottom":switch(i){case"left":l=c.offset.left+o;break;case"right":l=c.offset.left-u.width+c.width-o;break;case"center":l=a?o:c.offset.left+c.width/2-u.width/2+o}break;case"right":case"left":switch(i){case"bottom":s=c.offset.top-r+c.height-u.height;break;case"top":s=c.offset.top+r;break;case"center":s=c.offset.top+r+c.height/2-u.height/2}}}return{top:s,left:l}}};function g(e,t,n,i,r){var o,a,s,l,u=v(e);if(t){var c=v(t);a=c.height+c.offset.top-(u.offset.top+u.height),o=u.offset.top-c.offset.top,s=u.offset.left-c.offset.left,l=c.width+c.offset.left-(u.offset.left+u.width)}else a=u.windowDims.height+u.windowDims.offset.top-(u.offset.top+u.height),o=u.offset.top-u.windowDims.offset.top,s=u.offset.left-u.windowDims.offset.left,l=u.windowDims.width-(u.offset.left+u.width);return a=r?0:Math.min(a,0),o=Math.min(o,0),s=Math.min(s,0),l=Math.min(l,0),n?s+l:i?o+a:Math.sqrt(o*o+a*a+s*s+l*l)}function v(e){if((e=e.length?e[0]:e)===window||e===document)throw new Error("I'm sorry, Dave. I'm afraid I can't do that.");var t=e.getBoundingClientRect(),n=e.parentNode.getBoundingClientRect(),i=document.body.getBoundingClientRect(),r=window.pageYOffset,o=window.pageXOffset;return{width:t.width,height:t.height,offset:{top:t.top+r,left:t.left+o},parentDims:{width:n.width,height:n.height,offset:{top:n.top+r,left:n.left+o}},windowDims:{width:i.width,height:i.height,offset:{top:r,left:o}}}}function y(e,t){var n=e.length;function i(){0===--n&&t()}0===n&&t(),e.each((function(){if(this.complete&&void 0!==this.naturalWidth)i();else{var e=new Image,t="load.zf.images error.zf.images";r()(e).one(t,(function e(){r()(this).off(t,e),i()})),e.src=r()(this).attr("src")}}))}const b={9:"TAB",13:"ENTER",27:"ESCAPE",32:"SPACE",35:"END",36:"HOME",37:"ARROW_LEFT",38:"ARROW_UP",39:"ARROW_RIGHT",40:"ARROW_DOWN"};var w={};function k(e){return!!e&&e.find("a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]").filter((function(){return!(!r()(this).is(":visible")||r()(this).attr("tabindex")<0)})).sort((function(e,t){if(r()(e).attr("tabindex")===r()(t).attr("tabindex"))return 0;let n=parseInt(r()(e).attr("tabindex"),10),i=parseInt(r()(t).attr("tabindex"),10);return void 0===r()(e).attr("tabindex")&&i>0?1:void 0===r()(t).attr("tabindex")&&n>0?-1:0===n&&i>0?1:0===i&&n>0||n<i?-1:n>i?1:void 0}))}function x(e){var t=b[e.which||e.keyCode]||String.fromCharCode(e.which).toUpperCase();return t=t.replace(/\W+/,""),e.shiftKey&&(t="SHIFT_"+t),e.ctrlKey&&(t="CTRL_"+t),e.altKey&&(t="ALT_"+t),t=t.replace(/_$/,"")}var _={keys:function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[e[n]]=e[n]);return t}(b),parseKey:x,handleKey(e,t,n){var i,a=w[t],s=this.parseKey(e);if(!a)return console.warn("Component not defined!");if(!0!==e.zfIsKeyHandled)if((i=n[(void 0===a.ltr?a:o()?r.a.extend({},a.ltr,a.rtl):r.a.extend({},a.rtl,a.ltr))[s]])&&"function"==typeof i){var l=i.apply();e.zfIsKeyHandled=!0,(n.handled||"function"==typeof n.handled)&&n.handled(l)}else(n.unhandled||"function"==typeof n.unhandled)&&n.unhandled()},findFocusable:k,register(e,t){w[e]=t},trapFocus(e){var t=k(e),n=t.eq(0),i=t.eq(-1);e.on("keydown.zf.trapfocus",(function(e){e.target===i[0]&&"TAB"===x(e)?(e.preventDefault(),n.focus()):e.target===n[0]&&"SHIFT_TAB"===x(e)&&(e.preventDefault(),i.focus())}))},releaseFocus(e){e.off("keydown.zf.trapfocus")}};const C=["mui-enter","mui-leave"],E=["mui-enter-active","mui-leave-active"],S={animateIn:function(e,t,n){O(!0,e,t,n)},animateOut:function(e,t,n){O(!1,e,t,n)}};function T(e,t,n){var i,r,o=null;if(0===e)return n.apply(t),void t.trigger("finished.zf.animate",[t]).triggerHandler("finished.zf.animate",[t]);i=window.requestAnimationFrame((function a(s){o||(o=s),r=s-o,n.apply(t),r<e?i=window.requestAnimationFrame(a,t):(window.cancelAnimationFrame(i),t.trigger("finished.zf.animate",[t]).triggerHandler("finished.zf.animate",[t]))}))}function O(e,t,n,i){if((t=r()(t).eq(0)).length){var o=e?C[0]:C[1],a=e?E[0]:E[1];s(),t.addClass(n).css("transition","none"),requestAnimationFrame(()=>{t.addClass(o),e&&t.show()}),requestAnimationFrame(()=>{t[0].offsetWidth,t.css("transition","").addClass(a)}),t.one(l(t),(function(){e||t.hide();s(),i&&i.apply(t)}))}function s(){t[0].style.transitionDuration=0,t.removeClass(`${o} ${a} ${n}`)}}const z={Feather(e,t="zf"){e.attr("role","menubar"),e.find("a").attr({role:"menuitem"});var n=e.find("li").attr({role:"none"}),i=`is-${t}-submenu`,o=i+"-item",a=`is-${t}-submenu-parent`,s="accordion"!==t;n.each((function(){var e=r()(this),n=e.children("ul");n.length&&(e.addClass(a),s&&(e.children("a:first").attr({"aria-haspopup":!0,"aria-label":e.children("a:first").text()}),"drilldown"===t&&e.attr({"aria-expanded":!1})),n.addClass("submenu "+i).attr({"data-submenu":"",role:"menubar"}),"drilldown"===t&&n.attr({"aria-hidden":!0})),e.parent("[data-submenu]").length&&e.addClass("is-submenu-item "+o)}))},Burn(e,t){var n=`is-${t}-submenu`,i=n+"-item",r=`is-${t}-submenu-parent`;e.find(">li, > li > ul, .menu, .menu > li, [data-submenu] > li").removeClass(`${n} ${i} ${r} is-submenu-item submenu is-active`).removeAttr("data-submenu").css("display","")}};function P(e,t,n){var i,r,o=this,a=t.duration,s=Object.keys(e.data())[0]||"timer",l=-1;this.isPaused=!1,this.restart=function(){l=-1,clearTimeout(r),this.start()},this.start=function(){this.isPaused=!1,clearTimeout(r),l=l<=0?a:l,e.data("paused",!1),i=Date.now(),r=setTimeout((function(){t.infinite&&o.restart(),n&&"function"==typeof n&&n()}),l),e.trigger("timerstart.zf."+s)},this.pause=function(){this.isPaused=!0,clearTimeout(r),e.data("paused",!0);var t=Date.now();l-=t-i,e.trigger("timerpaused.zf."+s)}}var $,A,M,L,N={},I=!1,D=!1;function j(e){if(this.removeEventListener("touchmove",R),this.removeEventListener("touchend",j),!D){var t=r.a.Event("tap",L||e);r()(this).trigger(t)}L=null,I=!1,D=!1}function R(e){if(!0===r.a.spotSwipe.preventDefault&&e.preventDefault(),I){var t,n=e.touches[0].pageX,i=$-n;D=!0,M=(new Date).getTime()-A,Math.abs(i)>=r.a.spotSwipe.moveThreshold&&M<=r.a.spotSwipe.timeThreshold&&(t=i>0?"left":"right"),t&&(e.preventDefault(),j.apply(this,arguments),r()(this).trigger(r.a.Event("swipe",Object.assign({},e)),t).trigger(r.a.Event("swipe"+t,Object.assign({},e))))}}function F(e){1===e.touches.length&&($=e.touches[0].pageX,L=e,I=!0,D=!1,A=(new Date).getTime(),this.addEventListener("touchmove",R,{passive:!0===r.a.spotSwipe.preventDefault}),this.addEventListener("touchend",j,!1))}function H(){this.addEventListener&&this.addEventListener("touchstart",F,{passive:!0})}class B{constructor(){this.version="1.0.0",this.enabled="ontouchstart"in document.documentElement,this.preventDefault=!1,this.moveThreshold=75,this.timeThreshold=200,this._init()}_init(){r.a.event.special.swipe={setup:H},r.a.event.special.tap={setup:H},r.a.each(["left","up","down","right"],(function(){r.a.event.special["swipe"+this]={setup:function(){r()(this).on("swipe",r.a.noop)}}}))}}N.setupSpotSwipe=function(){r.a.spotSwipe=new B(r.a)},N.setupTouchHandler=function(){r.a.fn.addTouch=function(){this.each((function(t,n){r()(n).bind("touchstart touchmove touchend touchcancel",(function(t){e(t)}))}));var e=function(e){var t,n=e.changedTouches[0],i={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup"}[e.type];"MouseEvent"in window&&"function"==typeof window.MouseEvent?t=new window.MouseEvent(i,{bubbles:!0,cancelable:!0,screenX:n.screenX,screenY:n.screenY,clientX:n.clientX,clientY:n.clientY}):(t=document.createEvent("MouseEvent")).initMouseEvent(i,!0,!0,window,1,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),n.target.dispatchEvent(t)}}},N.init=function(){void 0===r.a.spotSwipe&&(N.setupSpotSwipe(r.a),N.setupTouchHandler(r.a))};const q=function(){for(var e=["WebKit","Moz","O","Ms",""],t=0;t<e.length;t++)if(e[t]+"MutationObserver"in window)return window[e[t]+"MutationObserver"];return!1}(),W=(e,t)=>{e.data(t).split(" ").forEach(n=>{r()("#"+n)["close"===t?"trigger":"triggerHandler"](t+".zf.trigger",[e])})};var V={Listeners:{Basic:{},Global:{}},Initializers:{}};function U(e,t,n){let i,o=Array.prototype.slice.call(arguments,3);r()(window).on(t,(function(){i&&clearTimeout(i),i=setTimeout((function(){n.apply(null,o)}),e||10)}))}V.Listeners.Basic={openListener:function(){W(r()(this),"open")},closeListener:function(){r()(this).data("close")?W(r()(this),"close"):r()(this).trigger("close.zf.trigger")},toggleListener:function(){r()(this).data("toggle")?W(r()(this),"toggle"):r()(this).trigger("toggle.zf.trigger")},closeableListener:function(e){let t=r()(this).data("closable");e.stopPropagation(),""!==t?S.animateOut(r()(this),t,(function(){r()(this).trigger("closed.zf")})):r()(this).fadeOut().trigger("closed.zf")},toggleFocusListener:function(){let e=r()(this).data("toggle-focus");r()("#"+e).triggerHandler("toggle.zf.trigger",[r()(this)])}},V.Initializers.addOpenListener=e=>{e.off("click.zf.trigger",V.Listeners.Basic.openListener),e.on("click.zf.trigger","[data-open]",V.Listeners.Basic.openListener)},V.Initializers.addCloseListener=e=>{e.off("click.zf.trigger",V.Listeners.Basic.closeListener),e.on("click.zf.trigger","[data-close]",V.Listeners.Basic.closeListener)},V.Initializers.addToggleListener=e=>{e.off("click.zf.trigger",V.Listeners.Basic.toggleListener),e.on("click.zf.trigger","[data-toggle]",V.Listeners.Basic.toggleListener)},V.Initializers.addCloseableListener=e=>{e.off("close.zf.trigger",V.Listeners.Basic.closeableListener),e.on("close.zf.trigger","[data-closeable], [data-closable]",V.Listeners.Basic.closeableListener)},V.Initializers.addToggleFocusListener=e=>{e.off("focus.zf.trigger blur.zf.trigger",V.Listeners.Basic.toggleFocusListener),e.on("focus.zf.trigger blur.zf.trigger","[data-toggle-focus]",V.Listeners.Basic.toggleFocusListener)},V.Listeners.Global={resizeListener:function(e){q||e.each((function(){r()(this).triggerHandler("resizeme.zf.trigger")})),e.attr("data-events","resize")},scrollListener:function(e){q||e.each((function(){r()(this).triggerHandler("scrollme.zf.trigger")})),e.attr("data-events","scroll")},closeMeListener:function(e,t){let n=e.namespace.split(".")[0];r()(`[data-${n}]`).not(`[data-yeti-box="${t}"]`).each((function(){let e=r()(this);e.triggerHandler("close.zf.trigger",[e])}))}},V.Initializers.addClosemeListener=function(e){var t=r()("[data-yeti-box]"),n=["dropdown","tooltip","reveal"];if(e&&("string"==typeof e?n.push(e):"object"==typeof e&&"string"==typeof e[0]?n=n.concat(e):console.error("Plugin names must be strings")),t.length){let e=n.map(e=>"closeme.zf."+e).join(" ");r()(window).off(e).on(e,V.Listeners.Global.closeMeListener)}},V.Initializers.addResizeListener=function(e){let t=r()("[data-resize]");t.length&&U(e,"resize.zf.trigger",V.Listeners.Global.resizeListener,t)},V.Initializers.addScrollListener=function(e){let t=r()("[data-scroll]");t.length&&U(e,"scroll.zf.trigger",V.Listeners.Global.scrollListener,t)},V.Initializers.addMutationEventsListener=function(e){if(!q)return!1;let t=e.find("[data-resize], [data-scroll], [data-mutate]");var n=function(e){var t=r()(e[0].target);switch(e[0].type){case"attributes":"scroll"===t.attr("data-events")&&"data-events"===e[0].attributeName&&t.triggerHandler("scrollme.zf.trigger",[t,window.pageYOffset]),"resize"===t.attr("data-events")&&"data-events"===e[0].attributeName&&t.triggerHandler("resizeme.zf.trigger",[t]),"style"===e[0].attributeName&&(t.closest("[data-mutate]").attr("data-events","mutate"),t.closest("[data-mutate]").triggerHandler("mutateme.zf.trigger",[t.closest("[data-mutate]")]));break;case"childList":t.closest("[data-mutate]").attr("data-events","mutate"),t.closest("[data-mutate]").triggerHandler("mutateme.zf.trigger",[t.closest("[data-mutate]")]);break;default:return!1}};if(t.length)for(var i=0;i<=t.length-1;i++){new q(n).observe(t[i],{attributes:!0,childList:!0,characterData:!1,subtree:!0,attributeFilter:["data-events","style"]})}},V.Initializers.addSimpleListeners=function(){let e=r()(document);V.Initializers.addOpenListener(e),V.Initializers.addCloseListener(e),V.Initializers.addToggleListener(e),V.Initializers.addCloseableListener(e),V.Initializers.addToggleFocusListener(e)},V.Initializers.addGlobalListeners=function(){let e=r()(document);V.Initializers.addMutationEventsListener(e),V.Initializers.addResizeListener(250),V.Initializers.addScrollListener(),V.Initializers.addClosemeListener()},V.init=function(e,t){u(r()(window),(function(){!0!==r.a.triggersInitialized&&(V.Initializers.addSimpleListeners(),V.Initializers.addGlobalListeners(),r.a.triggersInitialized=!0)})),t&&(t.Triggers=V,t.IHearYou=V.Initializers.addGlobalListeners)};class G{constructor(e,t){this._setup(e,t);var n=Q(this);this.uuid=a(6,n),this.$element.attr("data-"+n)||this.$element.attr("data-"+n,this.uuid),this.$element.data("zfPlugin")||this.$element.data("zfPlugin",this),this.$element.trigger("init.zf."+n)}destroy(){this._destroy();var e=Q(this);for(var t in this.$element.removeAttr("data-"+e).removeData("zfPlugin").trigger("destroyed.zf."+e),this)this.hasOwnProperty(t)&&(this[t]=null)}}function Q(e){return e.className.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}class Y extends G{_setup(e,t={}){this.$element=e,this.options=r.a.extend(!0,{},Y.defaults,this.$element.data(),t),this.isEnabled=!0,this.formnovalidate=null,this.className="Abide",this._init()}_init(){this.$inputs=r.a.merge(this.$element.find("input").not('[type="submit"]'),this.$element.find("textarea, select")),this.$submits=this.$element.find('[type="submit"]');const e=this.$element.find("[data-abide-error]");this.options.a11yAttributes&&(this.$inputs.each((e,t)=>this.addA11yAttributes(r()(t))),e.each((e,t)=>this.addGlobalErrorA11yAttributes(r()(t)))),this._events()}_events(){this.$element.off(".abide").on("reset.zf.abide",()=>{this.resetForm()}).on("submit.zf.abide",()=>this.validateForm()),this.$submits.off("click.zf.abide keydown.zf.abide").on("click.zf.abide keydown.zf.abide",e=>{e.key&&" "!==e.key&&"Enter"!==e.key||(e.preventDefault(),this.formnovalidate=null!==e.target.getAttribute("formnovalidate"),this.$element.submit())}),"fieldChange"===this.options.validateOn&&this.$inputs.off("change.zf.abide").on("change.zf.abide",e=>{this.validateInput(r()(e.target))}),this.options.liveValidate&&this.$inputs.off("input.zf.abide").on("input.zf.abide",e=>{this.validateInput(r()(e.target))}),this.options.validateOnBlur&&this.$inputs.off("blur.zf.abide").on("blur.zf.abide",e=>{this.validateInput(r()(e.target))})}_reflow(){this._init()}_validationIsDisabled(){return!1===this.isEnabled||("boolean"==typeof this.formnovalidate?this.formnovalidate:!!this.$submits.length&&null!==this.$submits[0].getAttribute("formnovalidate"))}enableValidation(){this.isEnabled=!0}disableValidation(){this.isEnabled=!1}requiredCheck(e){if(!e.attr("required"))return!0;var t=!0;switch(e[0].type){case"checkbox":t=e[0].checked;break;case"select":case"select-one":case"select-multiple":var n=e.find("option:selected");n.length&&n.val()||(t=!1);break;default:e.val()&&e.val().length||(t=!1)}return t}findFormError(e,t){var n=e.length?e[0].id:"",i=e.siblings(this.options.formErrorSelector);return i.length||(i=e.parent().find(this.options.formErrorSelector)),n&&(i=i.add(this.$element.find(`[data-form-error-for="${n}"]`))),t&&(i=i.not("[data-form-error-on]"),t.forEach(t=>{i=(i=i.add(e.siblings(`[data-form-error-on="${t}"]`))).add(this.$element.find(`[data-form-error-for="${n}"][data-form-error-on="${t}"]`))})),i}findLabel(e){var t=e[0].id,n=this.$element.find(`label[for="${t}"]`);return n.length?n:e.closest("label")}findRadioLabels(e){var t=e.map((e,t)=>{var n=t.id,i=this.$element.find(`label[for="${n}"]`);return i.length||(i=r()(t).closest("label")),i[0]});return r()(t)}findCheckboxLabels(e){var t=e.map((e,t)=>{var n=t.id,i=this.$element.find(`label[for="${n}"]`);return i.length||(i=r()(t).closest("label")),i[0]});return r()(t)}addErrorClasses(e,t){var n=this.findLabel(e),i=this.findFormError(e,t);n.length&&n.addClass(this.options.labelErrorClass),i.length&&i.addClass(this.options.formErrorClass),e.addClass(this.options.inputErrorClass).attr({"data-invalid":"","aria-invalid":!0})}addA11yAttributes(e){let t=this.findFormError(e),n=t.filter("label"),i=t.first();if(t.length){if(void 0===e.attr("aria-describedby")){let t=i.attr("id");void 0===t&&(t=a(6,"abide-error"),i.attr("id",t)),e.attr("aria-describedby",t)}if(n.filter("[for]").length<n.length){let t=e.attr("id");void 0===t&&(t=a(6,"abide-input"),e.attr("id",t)),n.each((e,n)=>{const i=r()(n);void 0===i.attr("for")&&i.attr("for",t)})}t.each((e,t)=>{const n=r()(t);void 0===n.attr("role")&&n.attr("role","alert")}).end()}}addGlobalErrorA11yAttributes(e){void 0===e.attr("aria-live")&&e.attr("aria-live",this.options.a11yErrorLevel)}removeRadioErrorClasses(e){var t=this.$element.find(`:radio[name="${e}"]`),n=this.findRadioLabels(t),i=this.findFormError(t);n.length&&n.removeClass(this.options.labelErrorClass),i.length&&i.removeClass(this.options.formErrorClass),t.removeClass(this.options.inputErrorClass).attr({"data-invalid":null,"aria-invalid":null})}removeCheckboxErrorClasses(e){var t=this.$element.find(`:checkbox[name="${e}"]`),n=this.findCheckboxLabels(t),i=this.findFormError(t);n.length&&n.removeClass(this.options.labelErrorClass),i.length&&i.removeClass(this.options.formErrorClass),t.removeClass(this.options.inputErrorClass).attr({"data-invalid":null,"aria-invalid":null})}removeErrorClasses(e){if("radio"===e[0].type)return this.removeRadioErrorClasses(e.attr("name"));if("checkbox"===e[0].type)return this.removeCheckboxErrorClasses(e.attr("name"));var t=this.findLabel(e),n=this.findFormError(e);t.length&&t.removeClass(this.options.labelErrorClass),n.length&&n.removeClass(this.options.formErrorClass),e.removeClass(this.options.inputErrorClass).attr({"data-invalid":null,"aria-invalid":null})}validateInput(e){var t=this.requiredCheck(e),n=e.attr("data-validator"),i=[],o=!0;if(this._validationIsDisabled())return!0;if(e.is("[data-abide-ignore]")||e.is('[type="hidden"]')||e.is("[disabled]"))return!0;switch(e[0].type){case"radio":this.validateRadio(e.attr("name"))||i.push("required");break;case"checkbox":this.validateCheckbox(e.attr("name"))||i.push("required"),o=!1;break;case"select":case"select-one":case"select-multiple":t||i.push("required");break;default:t||i.push("required"),this.validateText(e)||i.push("pattern")}if(n){const t=!!e.attr("required");n.split(" ").forEach(n=>{this.options.validators[n](e,t,e.parent())||i.push(n)})}e.attr("data-equalto")&&(this.options.validators.equalTo(e)||i.push("equalTo"));var a=0===i.length,s=(a?"valid":"invalid")+".zf.abide";if(a){const t=this.$element.find(`[data-equalto="${e.attr("id")}"]`);if(t.length){let e=this;t.each((function(){r()(this).val()&&e.validateInput(r()(this))}))}}return o&&(a?this.removeErrorClasses(e):this.addErrorClasses(e,i)),e.trigger(s,[e]),a}validateForm(){var e,t=[],n=this;if(this.initialized||(this.initialized=!0),this._validationIsDisabled())return this.formnovalidate=null,!0;this.$inputs.each((function(){if("checkbox"===r()(this)[0].type){if(r()(this).attr("name")===e)return!0;e=r()(this).attr("name")}t.push(n.validateInput(r()(this)))}));var i=-1===t.indexOf(!1);return this.$element.find("[data-abide-error]").each((e,t)=>{const n=r()(t);this.options.a11yAttributes&&this.addGlobalErrorA11yAttributes(n),n.css("display",i?"none":"block")}),this.$element.trigger((i?"formvalid":"forminvalid")+".zf.abide",[this.$element]),i}validateText(e,t){t=t||e.attr("data-pattern")||e.attr("pattern")||e.attr("type");var n=e.val(),i=!0;return n.length&&(this.options.patterns.hasOwnProperty(t)?i=this.options.patterns[t].test(n):t!==e.attr("type")&&(i=new RegExp(t).test(n))),i}validateRadio(e){var t=this.$element.find(`:radio[name="${e}"]`),n=!1,i=!1;return t.each((e,t)=>{r()(t).attr("required")&&(i=!0)}),i||(n=!0),n||t.each((e,t)=>{r()(t).prop("checked")&&(n=!0)}),n}validateCheckbox(e){var t=this.$element.find(`:checkbox[name="${e}"]`),n=!1,i=!1,o=1,a=0;return t.each((e,t)=>{r()(t).attr("required")&&(i=!0)}),i||(n=!0),n||(t.each((e,t)=>{r()(t).prop("checked")&&a++,void 0!==r()(t).attr("data-min-required")&&(o=parseInt(r()(t).attr("data-min-required"),10))}),a>=o&&(n=!0)),!0!==this.initialized&&o>1||(t.each((e,t)=>{n?this.removeErrorClasses(r()(t)):this.addErrorClasses(r()(t),["required"])}),n)}matchValidation(e,t,n){return n=!!n,-1===t.split(" ").map(t=>this.options.validators[t](e,n,e.parent())).indexOf(!1)}resetForm(){var e=this.$element,t=this.options;r()("."+t.labelErrorClass,e).not("small").removeClass(t.labelErrorClass),r()("."+t.inputErrorClass,e).not("small").removeClass(t.inputErrorClass),r()(`${t.formErrorSelector}.${t.formErrorClass}`).removeClass(t.formErrorClass),e.find("[data-abide-error]").css("display","none"),r()(":input",e).not(":button, :submit, :reset, :hidden, :radio, :checkbox, [data-abide-ignore]").val("").attr({"data-invalid":null,"aria-invalid":null}),r()(":input:radio",e).not("[data-abide-ignore]").prop("checked",!1).attr({"data-invalid":null,"aria-invalid":null}),r()(":input:checkbox",e).not("[data-abide-ignore]").prop("checked",!1).attr({"data-invalid":null,"aria-invalid":null}),e.trigger("formreset.zf.abide",[e])}_destroy(){var e=this;this.$element.off(".abide").find("[data-abide-error]").css("display","none"),this.$inputs.off(".abide").each((function(){e.removeErrorClasses(r()(this))})),this.$submits.off(".abide")}}Y.defaults={validateOn:"fieldChange",labelErrorClass:"is-invalid-label",inputErrorClass:"is-invalid-input",formErrorSelector:".form-error",formErrorClass:"is-visible",a11yAttributes:!0,a11yErrorLevel:"assertive",liveValidate:!1,validateOnBlur:!1,patterns:{alpha:/^[a-zA-Z]+$/,alpha_numeric:/^[a-zA-Z0-9]+$/,integer:/^[-+]?\d+$/,number:/^[-+]?\d*(?:[\.\,]\d+)?$/,card:/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|(?:222[1-9]|2[3-6][0-9]{2}|27[0-1][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/,cvv:/^([0-9]){3,4}$/,email:/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/,url:/^((?:(https?|ftps?|file|ssh|sftp):\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))*\))+(?:\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?\xab\xbb\u201c\u201d\u2018\u2019]))$/,domain:/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,8}$/,datetime:/^([0-2][0-9]{3})\-([0-1][0-9])\-([0-3][0-9])T([0-5][0-9])\:([0-5][0-9])\:([0-5][0-9])(Z|([\-\+]([0-1][0-9])\:00))$/,date:/(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))$/,time:/^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/,dateISO:/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/,month_day_year:/^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]\d{4}$/,day_month_year:/^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.]\d{4}$/,color:/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/,website:{test:e=>Y.defaults.patterns.domain.test(e)||Y.defaults.patterns.url.test(e)}},validators:{equalTo:function(e){return r()("#"+e.attr("data-equalto")).val()===e.val()}}};class K extends G{_setup(e,t){this.$element=e,this.options=r.a.extend({},K.defaults,this.$element.data(),t),this.className="Accordion",this._init(),_.register("Accordion",{ENTER:"toggle",SPACE:"toggle",ARROW_DOWN:"next",ARROW_UP:"previous",HOME:"first",END:"last"})}_init(){this._isInitializing=!0,this.$tabs=this.$element.children("[data-accordion-item]"),this.$tabs.each((function(e,t){var n=r()(t),i=n.children("[data-tab-content]"),o=i[0].id||a(6,"accordion"),s=t.id?t.id+"-label":o+"-label";n.find("a:first").attr({"aria-controls":o,id:s,"aria-expanded":!1}),i.attr({role:"region","aria-labelledby":s,"aria-hidden":!0,id:o})}));var e=this.$element.find(".is-active").children("[data-tab-content]");e.length&&(this._initialAnchor=e.prev("a").attr("href"),this._openSingleTab(e)),this._checkDeepLink=()=>{var e=window.location.hash;if(!e.length){if(this._isInitializing)return;this._initialAnchor&&(e=this._initialAnchor)}var t=e&&r()(e),n=e&&this.$element.find(`[href$="${e}"]`);!(!t.length||!n.length)&&(t&&n&&n.length?n.parent("[data-accordion-item]").hasClass("is-active")||this._openSingleTab(t):this._closeAllTabs(),this.options.deepLinkSmudge&&u(r()(window),()=>{var e=this.$element.offset();r()("html, body").animate({scrollTop:e.top-this.options.deepLinkSmudgeOffset},this.options.deepLinkSmudgeDelay)}),this.$element.trigger("deeplink.zf.accordion",[n,t]))},this.options.deepLink&&this._checkDeepLink(),this._events(),this._isInitializing=!1}_events(){var e=this;this.$tabs.each((function(){var t=r()(this),n=t.children("[data-tab-content]");n.length&&t.children("a").off("click.zf.accordion keydown.zf.accordion").on("click.zf.accordion",(function(t){t.preventDefault(),e.toggle(n)})).on("keydown.zf.accordion",(function(i){_.handleKey(i,"Accordion",{toggle:function(){e.toggle(n)},next:function(){var n=t.next().find("a").focus();e.options.multiExpand||n.trigger("click.zf.accordion")},previous:function(){var n=t.prev().find("a").focus();e.options.multiExpand||n.trigger("click.zf.accordion")},first:function(){var t=e.$tabs.first().find(".accordion-title").focus();e.options.multiExpand||t.trigger("click.zf.accordion")},last:function(){var t=e.$tabs.last().find(".accordion-title").focus();e.options.multiExpand||t.trigger("click.zf.accordion")},handled:function(){i.preventDefault()}})}))})),this.options.deepLink&&r()(window).on("hashchange",this._checkDeepLink)}toggle(e){if(e.closest("[data-accordion]").is("[disabled]"))console.info("Cannot toggle an accordion that is disabled.");else if(e.parent().hasClass("is-active")?this.up(e):this.down(e),this.options.deepLink){var t=e.prev("a").attr("href");this.options.updateHistory?history.pushState({},"",t):history.replaceState({},"",t)}}down(e){e.closest("[data-accordion]").is("[disabled]")?console.info("Cannot call down on an accordion that is disabled."):this.options.multiExpand?this._openTab(e):this._openSingleTab(e)}up(e){if(this.$element.is("[disabled]"))return void console.info("Cannot call up on an accordion that is disabled.");const t=e.parent();if(!t.hasClass("is-active"))return;const n=t.siblings();(this.options.allowAllClosed||n.hasClass("is-active"))&&this._closeTab(e)}_openSingleTab(e){const t=this.$element.children(".is-active").children("[data-tab-content]");t.length&&this._closeTab(t.not(e)),this._openTab(e)}_openTab(e){const t=e.parent(),n=e.attr("aria-labelledby");e.attr("aria-hidden",!1),t.addClass("is-active"),r()("#"+n).attr({"aria-expanded":!0}),e.finish().slideDown(this.options.slideSpeed,()=>{this.$element.trigger("down.zf.accordion",[e])})}_closeTab(e){const t=e.parent(),n=e.attr("aria-labelledby");e.attr("aria-hidden",!0),t.removeClass("is-active"),r()("#"+n).attr({"aria-expanded":!1}),e.finish().slideUp(this.options.slideSpeed,()=>{this.$element.trigger("up.zf.accordion",[e])})}_closeAllTabs(){var e=this.$element.children(".is-active").children("[data-tab-content]");e.length&&this._closeTab(e)}_destroy(){this.$element.find("[data-tab-content]").stop(!0).slideUp(0).css("display",""),this.$element.find("a").off(".zf.accordion"),this.options.deepLink&&r()(window).off("hashchange",this._checkDeepLink)}}K.defaults={slideSpeed:250,multiExpand:!1,allowAllClosed:!1,deepLink:!1,deepLinkSmudge:!1,deepLinkSmudgeDelay:300,deepLinkSmudgeOffset:0,updateHistory:!1};class X extends G{_setup(e,t){this.$element=e,this.options=r.a.extend({},X.defaults,this.$element.data(),t),this.className="AccordionMenu",this._init(),_.register("AccordionMenu",{ENTER:"toggle",SPACE:"toggle",ARROW_RIGHT:"open",ARROW_UP:"up",ARROW_DOWN:"down",ARROW_LEFT:"close",ESCAPE:"closeAll"})}_init(){z.Feather(this.$element,"accordion");var e=this;this.$element.find("[data-submenu]").not(".is-active").slideUp(0),this.$element.attr({"aria-multiselectable":this.options.multiOpen}),this.$menuLinks=this.$element.find(".is-accordion-submenu-parent"),this.$menuLinks.each((function(){var t=this.id||a(6,"acc-menu-link"),n=r()(this),i=n.children("[data-submenu]"),o=i[0].id||a(6,"acc-menu"),s=i.hasClass("is-active");if(e.options.parentLink){n.children("a").clone().prependTo(i).wrap('<li data-is-parent-link class="is-submenu-parent-item is-submenu-item is-accordion-submenu-item"></li>')}e.options.submenuToggle?(n.addClass("has-submenu-toggle"),n.children("a").after('<button id="'+t+'" class="submenu-toggle" aria-controls="'+o+'" aria-expanded="'+s+'" title="'+e.options.submenuToggleText+'"><span class="submenu-toggle-text">'+e.options.submenuToggleText+"</span></button>")):n.attr({"aria-controls":o,"aria-expanded":s,id:t}),i.attr({"aria-labelledby":t,"aria-hidden":!s,role:"group",id:o})}));var t=this.$element.find(".is-active");t.length&&t.each((function(){e.down(r()(this))})),this._events()}_events(){var e=this;this.$element.find("li").each((function(){var t=r()(this).children("[data-submenu]");t.length&&(e.options.submenuToggle?r()(this).children(".submenu-toggle").off("click.zf.accordionMenu").on("click.zf.accordionMenu",(function(){e.toggle(t)})):r()(this).children("a").off("click.zf.accordionMenu").on("click.zf.accordionMenu",(function(n){n.preventDefault(),e.toggle(t)})))})).on("keydown.zf.accordionMenu",(function(t){var n,i,o=r()(this),a=o.parent("ul").children("li"),s=o.children("[data-submenu]");a.each((function(e){if(r()(this).is(o))return n=a.eq(Math.max(0,e-1)).find("a").first(),i=a.eq(Math.min(e+1,a.length-1)).find("a").first(),r()(this).children("[data-submenu]:visible").length&&(i=o.find("li:first-child").find("a").first()),r()(this).is(":first-child")?n=o.parents("li").first().find("a").first():n.parents("li").first().children("[data-submenu]:visible").length&&(n=n.parents("li").find("li:last-child").find("a").first()),void(r()(this).is(":last-child")&&(i=o.parents("li").first().next("li").find("a").first()))})),_.handleKey(t,"AccordionMenu",{open:function(){s.is(":hidden")&&(e.down(s),s.find("li").first().find("a").first().focus())},close:function(){s.length&&!s.is(":hidden")?e.up(s):o.parent("[data-submenu]").length&&(e.up(o.parent("[data-submenu]")),o.parents("li").first().find("a").first().focus())},up:function(){return n.focus(),!0},down:function(){return i.focus(),!0},toggle:function(){return!e.options.submenuToggle&&(o.children("[data-submenu]").length?(e.toggle(o.children("[data-submenu]")),!0):void 0)},closeAll:function(){e.hideAll()},handled:function(e){e&&t.preventDefault()}})}))}hideAll(){this.up(this.$element.find("[data-submenu]"))}showAll(){this.down(this.$element.find("[data-submenu]"))}toggle(e){e.is(":animated")||(e.is(":hidden")?this.down(e):this.up(e))}down(e){if(!this.options.multiOpen){const t=e.parentsUntil(this.$element).add(e).add(e.find(".is-active")),n=this.$element.find(".is-active").not(t);this.up(n)}e.addClass("is-active").attr({"aria-hidden":!1}),this.options.submenuToggle?e.prev(".submenu-toggle").attr({"aria-expanded":!0}):e.parent(".is-accordion-submenu-parent").attr({"aria-expanded":!0}),e.slideDown(this.options.slideSpeed,()=>{this.$element.trigger("down.zf.accordionMenu",[e])})}up(e){const t=e.find("[data-submenu]"),n=e.add(t);t.slideUp(0),n.removeClass("is-active").attr("aria-hidden",!0),this.options.submenuToggle?n.prev(".submenu-toggle").attr("aria-expanded",!1):n.parent(".is-accordion-submenu-parent").attr("aria-expanded",!1),e.slideUp(this.options.slideSpeed,()=>{this.$element.trigger("up.zf.accordionMenu",[e])})}_destroy(){this.$element.find("[data-submenu]").slideDown(0).css("display",""),this.$element.find("a").off("click.zf.accordionMenu"),this.$element.find("[data-is-parent-link]").detach(),this.options.submenuToggle&&(this.$element.find(".has-submenu-toggle").removeClass("has-submenu-toggle"),this.$element.find(".submenu-toggle").remove()),z.Burn(this.$element,"accordion")}}X.defaults={parentLink:!1,slideSpeed:250,submenuToggle:!1,submenuToggleText:"Toggle menu",multiOpen:!0};class Z extends G{_setup(e,t){this.$element=e,this.options=r.a.extend({},Z.defaults,this.$element.data(),t),this.className="Drilldown",this._init(),_.register("Drilldown",{ENTER:"open",SPACE:"open",ARROW_RIGHT:"next",ARROW_UP:"up",ARROW_DOWN:"down",ARROW_LEFT:"previous",ESCAPE:"close"})}_init(){z.Feather(this.$element,"drilldown"),this.options.autoApplyClass&&this.$element.addClass("drilldown"),this.$element.attr({"aria-multiselectable":!1}),this.$submenuAnchors=this.$element.find("li.is-drilldown-submenu-parent").children("a"),this.$submenus=this.$submenuAnchors.parent("li").children("[data-submenu]").attr("role","group"),this.$menuItems=this.$element.find("li").not(".js-drilldown-back").find("a"),this.$currentMenu=this.$element,this.$element.attr("data-mutate",this.$element.attr("data-drilldown")||a(6,"drilldown")),this._prepareMenu(),this._registerEvents(),this._keyboardEvents()}_prepareMenu(){var e=this;this.$submenuAnchors.each((function(){var t=r()(this),n=t.parent();e.options.parentLink&&t.clone().prependTo(n.children("[data-submenu]")).wrap('<li data-is-parent-link class="is-submenu-parent-item is-submenu-item is-drilldown-submenu-item" role="none"></li>'),t.data("savedHref",t.attr("href")).removeAttr("href").attr("tabindex",0),t.children("[data-submenu]").attr({"aria-hidden":!0,tabindex:0,role:"group"}),e._events(t)})),this.$submenus.each((function(){var t=r()(this);if(!t.find(".js-drilldown-back").length)switch(e.options.backButtonPosition){case"bottom":t.append(e.options.backButton);break;case"top":t.prepend(e.options.backButton);break;default:console.error("Unsupported backButtonPosition value '"+e.options.backButtonPosition+"'")}e._back(t)})),this.$submenus.addClass("invisible"),this.options.autoHeight||this.$submenus.addClass("drilldown-submenu-cover-previous"),this.$element.parent().hasClass("is-drilldown")||(this.$wrapper=r()(this.options.wrapper).addClass("is-drilldown"),this.options.animateHeight&&this.$wrapper.addClass("animate-height"),this.$element.wrap(this.$wrapper)),this.$wrapper=this.$element.parent(),this.$wrapper.css(this._getMaxDims())}_resize(){this.$wrapper.css({"max-width":"none","min-height":"none"}),this.$wrapper.css(this._getMaxDims())}_events(e){var t=this;e.off("click.zf.drilldown").on("click.zf.drilldown",(function(n){if(r()(n.target).parentsUntil("ul","li").hasClass("is-drilldown-submenu-parent")&&n.preventDefault(),t._show(e.parent("li")),t.options.closeOnClick){var i=r()("body");i.off(".zf.drilldown").on("click.zf.drilldown",(function(e){e.target===t.$element[0]||r.a.contains(t.$element[0],e.target)||(e.preventDefault(),t._hideAll(),i.off(".zf.drilldown"))}))}}))}_registerEvents(){this.options.scrollTop&&(this._bindHandler=this._scrollTop.bind(this),this.$element.on("open.zf.drilldown hide.zf.drilldown close.zf.drilldown closed.zf.drilldown",this._bindHandler)),this.$element.on("mutateme.zf.trigger",this._resize.bind(this))}_scrollTop(){var e=this,t=""!==e.options.scrollTopElement?r()(e.options.scrollTopElement):e.$element,n=parseInt(t.offset().top+e.options.scrollTopOffset,10);r()("html, body").stop(!0).animate({scrollTop:n},e.options.animationDuration,e.options.animationEasing,(function(){this===r()("html")[0]&&e.$element.trigger("scrollme.zf.drilldown")}))}_keyboardEvents(){var e=this;this.$menuItems.add(this.$element.find(".js-drilldown-back > a, .is-submenu-parent-item > a")).on("keydown.zf.drilldown",(function(t){var n,i,o=r()(this),a=o.parent("li").parent("ul").children("li").children("a");a.each((function(e){if(r()(this).is(o))return n=a.eq(Math.max(0,e-1)),void(i=a.eq(Math.min(e+1,a.length-1)))})),_.handleKey(t,"Drilldown",{next:function(){if(o.is(e.$submenuAnchors))return e._show(o.parent("li")),o.parent("li").one(l(o),(function(){o.parent("li").find("ul li a").not(".js-drilldown-back a").first().focus()})),!0},previous:function(){return e._hide(o.parent("li").parent("ul")),o.parent("li").parent("ul").one(l(o),(function(){setTimeout((function(){o.parent("li").parent("ul").parent("li").children("a").first().focus()}),1)})),!0},up:function(){return n.focus(),!o.is(e.$element.find("> li:first-child > a"))},down:function(){return i.focus(),!o.is(e.$element.find("> li:last-child > a"))},close:function(){o.is(e.$element.find("> li > a"))||(e._hide(o.parent().parent()),o.parent().parent().siblings("a").focus())},open:function(){return(!e.options.parentLink||!o.attr("href"))&&(o.is(e.$menuItems)?o.is(e.$submenuAnchors)?(e._show(o.parent("li")),o.parent("li").one(l(o),(function(){o.parent("li").find("ul li a").not(".js-drilldown-back a").first().focus()})),!0):void 0:(e._hide(o.parent("li").parent("ul")),o.parent("li").parent("ul").one(l(o),(function(){setTimeout((function(){o.parent("li").parent("ul").parent("li").children("a").first().focus()}),1)})),!0))},handled:function(e){e&&t.preventDefault()}})}))}_hideAll(){var e=this.$element.find(".is-drilldown-submenu.is-active");if(e.addClass("is-closing"),this.options.autoHeight){const t=e.parent().closest("ul").data("calcHeight");this.$wrapper.css({height:t})}this.$element.trigger("close.zf.drilldown"),e.one(l(e),()=>{e.removeClass("is-active is-closing"),this.$element.trigger("closed.zf.drilldown")})}_back(e){var t=this;e.off("click.zf.drilldown"),e.children(".js-drilldown-back").on("click.zf.drilldown",(function(){t._hide(e);let n=e.parent("li").parent("ul").parent("li");n.length?t._show(n):t.$currentMenu=t.$element}))}_menuLinkEvents(){var e=this;this.$menuItems.not(".is-drilldown-submenu-parent").off("click.zf.drilldown").on("click.zf.drilldown",(function(){setTimeout((function(){e._hideAll()}),0)}))}_setShowSubMenuClasses(e,t){e.addClass("is-active").removeClass("invisible").attr("aria-hidden",!1),e.parent("li").attr("aria-expanded",!0),!0===t&&this.$element.trigger("open.zf.drilldown",[e])}_setHideSubMenuClasses(e,t){e.removeClass("is-active").addClass("invisible").attr("aria-hidden",!0),e.parent("li").attr("aria-expanded",!1),!0===t&&e.trigger("hide.zf.drilldown",[e])}_showMenu(e,t){var n=this;if(this.$element.find('li[aria-expanded="true"] > ul[data-submenu]').each((function(){n._setHideSubMenuClasses(r()(this))})),this.$currentMenu=e,e.is("[data-drilldown]"))return!0===t&&e.find("li > a").first().focus(),void(this.options.autoHeight&&this.$wrapper.css("height",e.data("calcHeight")));var i=e.children().first().parentsUntil("[data-drilldown]","[data-submenu]");i.each((function(o){0===o&&n.options.autoHeight&&n.$wrapper.css("height",r()(this).data("calcHeight"));var a=o===i.length-1;!0===a&&r()(this).one(l(r()(this)),()=>{!0===t&&e.find("li > a").first().focus()}),n._setShowSubMenuClasses(r()(this),a)}))}_show(e){const t=e.children("[data-submenu]");e.attr("aria-expanded",!0),this.$currentMenu=t,e.parent().closest("ul").addClass("invisible"),t.addClass("is-active visible").removeClass("invisible").attr("aria-hidden",!1),this.options.autoHeight&&this.$wrapper.css({height:t.data("calcHeight")}),this.$element.trigger("open.zf.drilldown",[e])}_hide(e){this.options.autoHeight&&this.$wrapper.css({height:e.parent().closest("ul").data("calcHeight")}),e.parent().closest("ul").removeClass("invisible"),e.parent("li").attr("aria-expanded",!1),e.attr("aria-hidden",!0),e.addClass("is-closing").one(l(e),(function(){e.removeClass("is-active is-closing visible"),e.blur().addClass("invisible")})),e.trigger("hide.zf.drilldown",[e])}_getMaxDims(){var e=0,t={},n=this;return this.$submenus.add(this.$element).each((function(){var t=m.GetDimensions(this).height;e=t>e?t:e,n.options.autoHeight&&r()(this).data("calcHeight",t)})),this.options.autoHeight?t.height=this.$currentMenu.data("calcHeight"):t["min-height"]=e+"px",t["max-width"]=this.$element[0].getBoundingClientRect().width+"px",t}_destroy(){r()("body").off(".zf.drilldown"),this.options.scrollTop&&this.$element.off(".zf.drilldown",this._bindHandler),this._hideAll(),this.$element.off("mutateme.zf.trigger"),z.Burn(this.$element,"drilldown"),this.$element.unwrap().find(".js-drilldown-back, .is-submenu-parent-item").remove().end().find(".is-active, .is-closing, .is-drilldown-submenu").removeClass("is-active is-closing is-drilldown-submenu").off("transitionend otransitionend webkitTransitionEnd").end().find("[data-submenu]").removeAttr("aria-hidden tabindex role"),this.$submenuAnchors.each((function(){r()(this).off(".zf.drilldown")})),this.$element.find("[data-is-parent-link]").detach(),this.$submenus.removeClass("drilldown-submenu-cover-previous invisible"),this.$element.find("a").each((function(){var e=r()(this);e.removeAttr("tabindex"),e.data("savedHref")&&e.attr("href",e.data("savedHref")).removeData("savedHref")}))}}Z.defaults={autoApplyClass:!0,backButton:'<li class="js-drilldown-back"><a tabindex="0">Back</a></li>',backButtonPosition:"top",wrapper:"<div></div>",parentLink:!1,closeOnClick:!1,autoHeight:!1,animateHeight:!1,scrollTop:!1,scrollTopElement:"",scrollTopOffset:0,animationDuration:500,animationEasing:"swing"};const J=["left","right","top","bottom"],ee=["top","bottom","center"],te=["left","right","center"],ne={left:ee,right:ee,top:te,bottom:te};function ie(e,t){var n=t.indexOf(e);return n===t.length-1?t[0]:t[n+1]}class re extends G{_init(){this.triedPositions={},this.position="auto"===this.options.position?this._getDefaultPosition():this.options.position,this.alignment="auto"===this.options.alignment?this._getDefaultAlignment():this.options.alignment,this.originalPosition=this.position,this.originalAlignment=this.alignment}_getDefaultPosition(){return"bottom"}_getDefaultAlignment(){switch(this.position){case"bottom":case"top":return o()?"right":"left";case"left":case"right":return"bottom"}}_reposition(){this._alignmentsExhausted(this.position)?(this.position=ie(this.position,J),this.alignment=ne[this.position][0]):this._realign()}_realign(){this._addTriedPosition(this.position,this.alignment),this.alignment=ie(this.alignment,ne[this.position])}_addTriedPosition(e,t){this.triedPositions[e]=this.triedPositions[e]||[],this.triedPositions[e].push(t)}_positionsExhausted(){for(var e=!0,t=0;t<J.length;t++)e=e&&this._alignmentsExhausted(J[t]);return e}_alignmentsExhausted(e){return this.triedPositions[e]&&this.triedPositions[e].length===ne[e].length}_getVOffset(){return this.options.vOffset}_getHOffset(){return this.options.hOffset}_setPosition(e,t,n){if("false"===e.attr("aria-expanded"))return!1;if(this.options.allowOverlap||(this.position=this.originalPosition,this.alignment=this.originalAlignment),t.offset(m.GetExplicitOffsets(t,e,this.position,this.alignment,this._getVOffset(),this._getHOffset())),!this.options.allowOverlap){for(var i=1e8,r={position:this.position,alignment:this.alignment};!this._positionsExhausted();){let o=m.OverlapArea(t,n,!1,!1,this.options.allowBottomOverlap);if(0===o)return;o<i&&(i=o,r={position:this.position,alignment:this.alignment}),this._reposition(),t.offset(m.GetExplicitOffsets(t,e,this.position,this.alignment,this._getVOffset(),this._getHOffset()))}this.position=r.position,this.alignment=r.alignment,t.offset(m.GetExplicitOffsets(t,e,this.position,this.alignment,this._getVOffset(),this._getHOffset()))}}}re.defaults={position:"auto",alignment:"auto",allowOverlap:!1,allowBottomOverlap:!0,vOffset:0,hOffset:0};class oe extends re{_setup(e,t){this.$element=e,this.options=r.a.extend({},oe.defaults,this.$element.data(),t),this.className="Dropdown",N.init(r.a),V.init(r.a),this._init(),_.register("Dropdown",{ENTER:"toggle",SPACE:"toggle",ESCAPE:"close"})}_init(){var e=this.$element.attr("id");this.$anchors=r()(`[data-toggle="${e}"]`).length?r()(`[data-toggle="${e}"]`):r()(`[data-open="${e}"]`),this.$anchors.attr({"aria-controls":e,"data-is-focus":!1,"data-yeti-box":e,"aria-haspopup":!0,"aria-expanded":!1}),this._setCurrentAnchor(this.$anchors.first()),this.options.parentClass?this.$parent=this.$element.parents("."+this.options.parentClass):this.$parent=null,void 0===this.$element.attr("aria-labelledby")&&(void 0===this.$currentAnchor.attr("id")&&this.$currentAnchor.attr("id",a(6,"dd-anchor")),this.$element.attr("aria-labelledby",this.$currentAnchor.attr("id"))),this.$element.attr({"aria-hidden":"true","data-yeti-box":e,"data-resize":e}),super._init(),this._events()}_getDefaultPosition(){var e=this.$element[0].className.match(/(top|left|right|bottom)/g);return e?e[0]:"bottom"}_getDefaultAlignment(){var e=/float-(\S+)/.exec(this.$currentAnchor.attr("class"));return e?e[1]:super._getDefaultAlignment()}_setPosition(){this.$element.removeClass(`has-position-${this.position} has-alignment-${this.alignment}`),super._setPosition(this.$currentAnchor,this.$element,this.$parent),this.$element.addClass(`has-position-${this.position} has-alignment-${this.alignment}`)}_setCurrentAnchor(e){this.$currentAnchor=r()(e)}_events(){var e=this,t="ontouchstart"in window||void 0!==window.ontouchstart;this.$element.on({"open.zf.trigger":this.open.bind(this),"close.zf.trigger":this.close.bind(this),"toggle.zf.trigger":this.toggle.bind(this),"resizeme.zf.trigger":this._setPosition.bind(this)}),this.$anchors.off("click.zf.trigger").on("click.zf.trigger",(function(n){e._setCurrentAnchor(this),(!1===e.options.forceFollow||t&&e.options.hover&&!1===e.$element.hasClass("is-open"))&&n.preventDefault()})),this.options.hover&&(this.$anchors.off("mouseenter.zf.dropdown mouseleave.zf.dropdown").on("mouseenter.zf.dropdown",(function(){e._setCurrentAnchor(this);var t=r()("body").data();void 0!==t.whatinput&&"mouse"!==t.whatinput||(clearTimeout(e.timeout),e.timeout=setTimeout((function(){e.open(),e.$anchors.data("hover",!0)}),e.options.hoverDelay))})).on("mouseleave.zf.dropdown",c((function(){clearTimeout(e.timeout),e.timeout=setTimeout((function(){e.close(),e.$anchors.data("hover",!1)}),e.options.hoverDelay)}))),this.options.hoverPane&&this.$element.off("mouseenter.zf.dropdown mouseleave.zf.dropdown").on("mouseenter.zf.dropdown",(function(){clearTimeout(e.timeout)})).on("mouseleave.zf.dropdown",c((function(){clearTimeout(e.timeout),e.timeout=setTimeout((function(){e.close(),e.$anchors.data("hover",!1)}),e.options.hoverDelay)})))),this.$anchors.add(this.$element).on("keydown.zf.dropdown",(function(t){var n=r()(this);_.handleKey(t,"Dropdown",{open:function(){n.is(e.$anchors)&&!n.is("input, textarea")&&(e.open(),e.$element.attr("tabindex",-1).focus(),t.preventDefault())},close:function(){e.close(),e.$anchors.focus()}})}))}_addBodyHandler(){var e=r()(document.body).not(this.$element),t=this;e.off("click.zf.dropdown tap.zf.dropdown").on("click.zf.dropdown tap.zf.dropdown",(function(n){t.$anchors.is(n.target)||t.$anchors.find(n.target).length||t.$element.is(n.target)||t.$element.find(n.target).length||(t.close(),e.off("click.zf.dropdown tap.zf.dropdown"))}))}open(){if(this.$element.trigger("closeme.zf.dropdown",this.$element.attr("id")),this.$anchors.addClass("hover").attr({"aria-expanded":!0}),this.$element.addClass("is-opening"),this._setPosition(),this.$element.removeClass("is-opening").addClass("is-open").attr({"aria-hidden":!1}),this.options.autoFocus){var e=_.findFocusable(this.$element);e.length&&e.eq(0).focus()}this.options.closeOnClick&&this._addBodyHandler(),this.options.trapFocus&&_.trapFocus(this.$element),this.$element.trigger("show.zf.dropdown",[this.$element])}close(){if(!this.$element.hasClass("is-open"))return!1;this.$element.removeClass("is-open").attr({"aria-hidden":!0}),this.$anchors.removeClass("hover").attr("aria-expanded",!1),this.$element.trigger("hide.zf.dropdown",[this.$element]),this.options.trapFocus&&_.releaseFocus(this.$element)}toggle(){if(this.$element.hasClass("is-open")){if(this.$anchors.data("hover"))return;this.close()}else this.open()}_destroy(){this.$element.off(".zf.trigger").hide(),this.$anchors.off(".zf.dropdown"),r()(document.body).off("click.zf.dropdown tap.zf.dropdown")}}oe.defaults={parentClass:null,hoverDelay:250,hover:!1,hoverPane:!1,vOffset:0,hOffset:0,position:"auto",alignment:"auto",allowOverlap:!1,allowBottomOverlap:!0,trapFocus:!1,autoFocus:!1,closeOnClick:!1,forceFollow:!0};class ae extends G{_setup(e,t){this.$element=e,this.options=r.a.extend({},ae.defaults,this.$element.data(),t),this.className="DropdownMenu",N.init(r.a),this._init(),_.register("DropdownMenu",{ENTER:"open",SPACE:"open",ARROW_RIGHT:"next",ARROW_UP:"up",ARROW_DOWN:"down",ARROW_LEFT:"previous",ESCAPE:"close"})}_init(){z.Feather(this.$element,"dropdown");var e=this.$element.find("li.is-dropdown-submenu-parent");this.$element.children(".is-dropdown-submenu-parent").children(".is-dropdown-submenu").addClass("first-sub"),this.$menuItems=this.$element.find('li[role="none"]'),this.$tabs=this.$element.children('li[role="none"]'),this.$tabs.find("ul.is-dropdown-submenu").addClass(this.options.verticalClass),"auto"===this.options.alignment?this.$element.hasClass(this.options.rightClass)||o()||this.$element.parents(".top-bar-right").is("*")?(this.options.alignment="right",e.addClass("opens-left")):(this.options.alignment="left",e.addClass("opens-right")):"right"===this.options.alignment?e.addClass("opens-left"):e.addClass("opens-right"),this.changed=!1,this._events()}_isVertical(){return"block"===this.$tabs.css("display")||"column"===this.$element.css("flex-direction")}_isRtl(){return this.$element.hasClass("align-right")||o()&&!this.$element.hasClass("align-left")}_events(){var e=this,t="ontouchstart"in window||void 0!==window.ontouchstart,n="is-dropdown-submenu-parent";(this.options.clickOpen||t)&&this.$menuItems.on("click.zf.dropdownMenu touchstart.zf.dropdownMenu",(function(i){var o=r()(i.target).parentsUntil("ul","."+n),a=o.hasClass(n),s="true"===o.attr("data-is-click"),l=o.children(".is-dropdown-submenu");if(a)if(s){if(!e.options.closeOnClick||!e.options.clickOpen&&!t||e.options.forceFollow&&t)return;i.stopImmediatePropagation(),i.preventDefault(),e._hide(o)}else i.stopImmediatePropagation(),i.preventDefault(),e._show(l),o.add(o.parentsUntil(e.$element,"."+n)).attr("data-is-click",!0)})),e.options.closeOnClickInside&&this.$menuItems.on("click.zf.dropdownMenu",(function(){r()(this).hasClass(n)||e._hide()})),t&&this.options.disableHoverOnTouch&&(this.options.disableHover=!0),this.options.disableHover||this.$menuItems.on("mouseenter.zf.dropdownMenu",(function(){var t=r()(this);t.hasClass(n)&&(clearTimeout(t.data("_delay")),t.data("_delay",setTimeout((function(){e._show(t.children(".is-dropdown-submenu"))}),e.options.hoverDelay)))})).on("mouseleave.zf.dropdownMenu",c((function(){var t=r()(this);if(t.hasClass(n)&&e.options.autoclose){if("true"===t.attr("data-is-click")&&e.options.clickOpen)return!1;clearTimeout(t.data("_delay")),t.data("_delay",setTimeout((function(){e._hide(t)}),e.options.closingTime))}}))),this.$menuItems.on("keydown.zf.dropdownMenu",(function(t){var n,i,o=r()(t.target).parentsUntil("ul",'[role="none"]'),a=e.$tabs.index(o)>-1,s=a?e.$tabs:o.siblings("li").add(o);s.each((function(e){if(r()(this).is(o))return n=s.eq(e-1),void(i=s.eq(e+1))}));var l=function(){i.children("a:first").focus(),t.preventDefault()},u=function(){n.children("a:first").focus(),t.preventDefault()},c=function(){var n=o.children("ul.is-dropdown-submenu");n.length&&(e._show(n),o.find("li > a:first").focus(),t.preventDefault())},d=function(){var n=o.parent("ul").parent("li");n.children("a:first").focus(),e._hide(n),t.preventDefault()},f={open:c,close:function(){e._hide(e.$element),e.$menuItems.eq(0).children("a").focus(),t.preventDefault()}};a?e._isVertical()?e._isRtl()?r.a.extend(f,{down:l,up:u,next:d,previous:c}):r.a.extend(f,{down:l,up:u,next:c,previous:d}):e._isRtl()?r.a.extend(f,{next:u,previous:l,down:c,up:d}):r.a.extend(f,{next:l,previous:u,down:c,up:d}):e._isRtl()?r.a.extend(f,{next:d,previous:c,down:l,up:u}):r.a.extend(f,{next:c,previous:d,down:l,up:u}),_.handleKey(t,"DropdownMenu",f)}))}_addBodyHandler(){const e=r()(document.body);this._removeBodyHandler(),e.on("click.zf.dropdownMenu tap.zf.dropdownMenu",e=>{!!r()(e.target).closest(this.$element).length||(this._hide(),this._removeBodyHandler())})}_removeBodyHandler(){r()(document.body).off("click.zf.dropdownMenu tap.zf.dropdownMenu")}_show(e){var t=this.$tabs.index(this.$tabs.filter((function(t,n){return r()(n).find(e).length>0}))),n=e.parent("li.is-dropdown-submenu-parent").siblings("li.is-dropdown-submenu-parent");this._hide(n,t),e.css("visibility","hidden").addClass("js-dropdown-active").parent("li.is-dropdown-submenu-parent").addClass("is-active");var i=m.ImNotTouchingYou(e,null,!0);if(!i){var o="left"===this.options.alignment?"-right":"-left",a=e.parent(".is-dropdown-submenu-parent");a.removeClass("opens"+o).addClass("opens-"+this.options.alignment),(i=m.ImNotTouchingYou(e,null,!0))||a.removeClass("opens-"+this.options.alignment).addClass("opens-inner"),this.changed=!0}e.css("visibility",""),this.options.closeOnClick&&this._addBodyHandler(),this.$element.trigger("show.zf.dropdownMenu",[e])}_hide(e,t){var n;if((n=e&&e.length?e:void 0!==t?this.$tabs.not((function(e){return e===t})):this.$element).hasClass("is-active")||n.find(".is-active").length>0){var i=n.find("li.is-active");if(i.add(n).attr({"data-is-click":!1}).removeClass("is-active"),n.find("ul.js-dropdown-active").removeClass("js-dropdown-active"),this.changed||n.find("opens-inner").length){var r="left"===this.options.alignment?"right":"left";n.find("li.is-dropdown-submenu-parent").add(n).removeClass("opens-inner opens-"+this.options.alignment).addClass("opens-"+r),this.changed=!1}clearTimeout(i.data("_delay")),this._removeBodyHandler(),this.$element.trigger("hide.zf.dropdownMenu",[n])}}_destroy(){this.$menuItems.off(".zf.dropdownMenu").removeAttr("data-is-click").removeClass("is-right-arrow is-left-arrow is-down-arrow opens-right opens-left opens-inner"),r()(document.body).off(".zf.dropdownMenu"),z.Burn(this.$element,"dropdown")}}ae.defaults={disableHover:!1,disableHoverOnTouch:!0,autoclose:!0,hoverDelay:50,clickOpen:!1,closingTime:500,alignment:"auto",closeOnClick:!0,closeOnClickInside:!0,verticalClass:"vertical",rightClass:"align-right",forceFollow:!0};class se extends G{_setup(e,t){this.$element=e,this.options=r.a.extend({},se.defaults,this.$element.data(),t),this.className="Equalizer",this._init()}_init(){var e=this.$element.attr("data-equalizer")||"",t=this.$element.find(`[data-equalizer-watch="${e}"]`);d._init(),this.$watched=t.length?t:this.$element.find("[data-equalizer-watch]"),this.$element.attr("data-resize",e||a(6,"eq")),this.$element.attr("data-mutate",e||a(6,"eq")),this.hasNested=this.$element.find("[data-equalizer]").length>0,this.isNested=this.$element.parentsUntil(document.body,"[data-equalizer]").length>0,this.isOn=!1,this._bindHandler={onResizeMeBound:this._onResizeMe.bind(this),onPostEqualizedBound:this._onPostEqualized.bind(this)};var n,i=this.$element.find("img");this.options.equalizeOn?(n=this._checkMQ(),r()(window).on("changed.zf.mediaquery",this._checkMQ.bind(this))):this._events(),(void 0!==n&&!1===n||void 0===n)&&(i.length?y(i,this._reflow.bind(this)):this._reflow())}_pauseEvents(){this.isOn=!1,this.$element.off({".zf.equalizer":this._bindHandler.onPostEqualizedBound,"resizeme.zf.trigger":this._bindHandler.onResizeMeBound,"mutateme.zf.trigger":this._bindHandler.onResizeMeBound})}_onResizeMe(){this._reflow()}_onPostEqualized(e){e.target!==this.$element[0]&&this._reflow()}_events(){this._pauseEvents(),this.hasNested?this.$element.on("postequalized.zf.equalizer",this._bindHandler.onPostEqualizedBound):(this.$element.on("resizeme.zf.trigger",this._bindHandler.onResizeMeBound),this.$element.on("mutateme.zf.trigger",this._bindHandler.onResizeMeBound)),this.isOn=!0}_checkMQ(){var e=!d.is(this.options.equalizeOn);return e?this.isOn&&(this._pauseEvents(),this.$watched.css("height","auto")):this.isOn||this._events(),e}_killswitch(){}_reflow(){if(!this.options.equalizeOnStack&&this._isStacked())return this.$watched.css("height","auto"),!1;this.options.equalizeByRow?this.getHeightsByRow(this.applyHeightByRow.bind(this)):this.getHeights(this.applyHeight.bind(this))}_isStacked(){return!this.$watched[0]||!this.$watched[1]||this.$watched[0].getBoundingClientRect().top!==this.$watched[1].getBoundingClientRect().top}getHeights(e){for(var t=[],n=0,i=this.$watched.length;n<i;n++)this.$watched[n].style.height="auto",t.push(this.$watched[n].offsetHeight);e(t)}getHeightsByRow(e){var t=this.$watched.length?this.$watched.first().offset().top:0,n=[],i=0;n[i]=[];for(var o=0,a=this.$watched.length;o<a;o++){this.$watched[o].style.height="auto";var s=r()(this.$watched[o]).offset().top;s!==t&&(n[++i]=[],t=s),n[i].push([this.$watched[o],this.$watched[o].offsetHeight])}for(var l=0,u=n.length;l<u;l++){var c=r()(n[l]).map((function(){return this[1]})).get(),d=Math.max.apply(null,c);n[l].push(d)}e(n)}applyHeight(e){var t=Math.max.apply(null,e);this.$element.trigger("preequalized.zf.equalizer"),this.$watched.css("height",t),this.$element.trigger("postequalized.zf.equalizer")}applyHeightByRow(e){this.$element.trigger("preequalized.zf.equalizer");for(var t=0,n=e.length;t<n;t++){var i=e[t].length,o=e[t][i-1];if(i<=2)r()(e[t][0][0]).css({height:"auto"});else{this.$element.trigger("preequalizedrow.zf.equalizer");for(var a=0,s=i-1;a<s;a++)r()(e[t][a][0]).css({height:o});this.$element.trigger("postequalizedrow.zf.equalizer")}}this.$element.trigger("postequalized.zf.equalizer")}_destroy(){this._pauseEvents(),this.$watched.css("height","auto")}}se.defaults={equalizeOnStack:!1,equalizeByRow:!1,equalizeOn:""};class le extends G{_setup(e,t){this.$element=e,this.options=r.a.extend({},le.defaults,this.$element.data(),t),this.rules=[],this.currentPath="",this.className="Interchange",V.init(r.a),this._init(),this._events()}_init(){d._init();var e=this.$element[0].id||a(6,"interchange");this.$element.attr({"data-resize":e,id:e}),this._parseOptions(),this._addBreakpoints(),this._generateRules(),this._reflow()}_events(){this.$element.off("resizeme.zf.trigger").on("resizeme.zf.trigger",()=>this._reflow())}_reflow(){var e;for(var t in this.rules)if(this.rules.hasOwnProperty(t)){var n=this.rules[t];window.matchMedia(n.query).matches&&(e=n)}e&&this.replace(e.path)}_parseOptions(){void 0===this.options.type?this.options.type="auto":-1===["auto","src","background","html"].indexOf(this.options.type)&&(console.warn(`Warning: invalid value "${this.options.type}" for Interchange option "type"`),this.options.type="auto")}_addBreakpoints(){for(var e in d.queries)if(d.queries.hasOwnProperty(e)){var t=d.queries[e];le.SPECIAL_QUERIES[t.name]=t.value}}_generateRules(){var e,t=[];for(var n in e="string"==typeof(e=this.options.rules?this.options.rules:this.$element.data("interchange"))?e.match(/\[.*?, .*?\]/g):e)if(e.hasOwnProperty(n)){var i=e[n].slice(1,-1).split(", "),r=i.slice(0,-1).join(""),o=i[i.length-1];le.SPECIAL_QUERIES[o]&&(o=le.SPECIAL_QUERIES[o]),t.push({path:r,query:o})}this.rules=t}replace(e){if(this.currentPath!==e){var t="replaced.zf.interchange",n=this.options.type;"auto"===n&&(n="IMG"===this.$element[0].nodeName?"src":e.match(/\.(gif|jpe?g|png|svg|tiff)([?#].*)?/i)?"background":"html"),"src"===n?this.$element.attr("src",e).on("load",()=>{this.currentPath=e}).trigger(t):"background"===n?(e=e.replace(/\(/g,"%28").replace(/\)/g,"%29"),this.$element.css({"background-image":"url("+e+")"}).trigger(t)):"html"===n&&r.a.get(e,n=>{this.$element.html(n).trigger(t),r()(n).foundation(),this.currentPath=e})}}_destroy(){this.$element.off("resizeme.zf.trigger")}}le.defaults={rules:null,type:"auto"},le.SPECIAL_QUERIES={landscape:"screen and (orientation: landscape)",portrait:"screen and (orientation: portrait)",retina:"only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx)"};class ue extends G{_setup(e,t){this.$element=e,this.options=r.a.extend({},ue.defaults,this.$element.data(),t),this.className="SmoothScroll",this._init()}_init(){const e=this.$element[0].id||a(6,"smooth-scroll");this.$element.attr({id:e}),this._events()}_events(){this._linkClickListener=this._handleLinkClick.bind(this),this.$element.on("click.zf.smoothScroll",this._linkClickListener),this.$element.on("click.zf.smoothScroll",'a[href^="#"]',this._linkClickListener)}_handleLinkClick(e){if(!r()(e.currentTarget).is('a[href^="#"]'))return;const t=e.currentTarget.getAttribute("href");this._inTransition=!0,ue.scrollToLoc(t,this.options,()=>{this._inTransition=!1}),e.preventDefault()}static scrollToLoc(e,t=ue.defaults,n){const i=r()(e);if(!i.length)return!1;var o=Math.round(i.offset().top-t.threshold/2-t.offset);r()("html, body").stop(!0).animate({scrollTop:o},t.animationDuration,t.animationEasing,()=>{"function"==typeof n&&n()})}_destroy(){this.$element.off("click.zf.smoothScroll",this._linkClickListener),this.$element.off("click.zf.smoothScroll",'a[href^="#"]',this._linkClickListener)}}ue.defaults={animationDuration:500,animationEasing:"linear",threshold:50,offset:0};class ce extends G{_setup(e,t){this.$element=e,this.options=r.a.extend({},ce.defaults,this.$element.data(),t),this.className="Magellan",V.init(r.a),this._init(),this.calcPoints()}_init(){var e=this.$element[0].id||a(6,"magellan");this.$targets=r()("[data-magellan-target]"),this.$links=this.$element.find("a"),this.$element.attr({"data-resize":e,"data-scroll":e,id:e}),this.$active=r()(),this.scrollPos=parseInt(window.pageYOffset,10),this._events()}calcPoints(){var e=this,t=document.body,n=document.documentElement;this.points=[],this.winHeight=Math.round(Math.max(window.innerHeight,n.clientHeight)),this.docHeight=Math.round(Math.max(t.scrollHeight,t.offsetHeight,n.clientHeight,n.scrollHeight,n.offsetHeight)),this.$targets.each((function(){var t=r()(this),n=Math.round(t.offset().top-e.options.threshold);t.targetPoint=n,e.points.push(n)}))}_events(){var e=this;r()(window).one("load",(function(){e.options.deepLinking&&location.hash&&e.scrollToLoc(location.hash),e.calcPoints(),e._updateActive()})),e.onLoadListener=u(r()(window),(function(){e.$element.on({"resizeme.zf.trigger":e.reflow.bind(e),"scrollme.zf.trigger":e._updateActive.bind(e)}).on("click.zf.magellan",'a[href^="#"]',(function(t){t.preventDefault();var n=this.getAttribute("href");e.scrollToLoc(n)}))})),this._deepLinkScroll=function(){e.options.deepLinking&&e.scrollToLoc(window.location.hash)},r()(window).on("hashchange",this._deepLinkScroll)}scrollToLoc(e){this._inTransition=!0;var t=this,n={animationEasing:this.options.animationEasing,animationDuration:this.options.animationDuration,threshold:this.options.threshold,offset:this.options.offset};ue.scrollToLoc(e,n,(function(){t._inTransition=!1}))}reflow(){this.calcPoints(),this._updateActive()}_updateActive(){if(this._inTransition)return;const e=parseInt(window.pageYOffset,10),t=this.scrollPos>e;let n;if(this.scrollPos=e,e<this.points[0]-this.options.offset-(t?this.options.threshold:0));else if(e+this.winHeight===this.docHeight)n=this.points.length-1;else{const i=this.points.filter(n=>n-this.options.offset-(t?this.options.threshold:0)<=e);n=i.length?i.length-1:0}const i=this.$active;let o="";void 0!==n?(this.$active=this.$links.filter('[href="#'+this.$targets.eq(n).data("magellan-target")+'"]'),this.$active.length&&(o=this.$active[0].getAttribute("href"))):this.$active=r()();const a=!(!this.$active.length&&!i.length||this.$active.is(i)),s=o!==window.location.hash;if(a&&(i.removeClass(this.options.activeClass),this.$active.addClass(this.options.activeClass)),this.options.deepLinking&&s)if(window.history.pushState){const e=o||window.location.pathname+window.location.search;this.options.updateHistory?window.history.pushState({},"",e):window.history.replaceState({},"",e)}else window.location.hash=o;a&&this.$element.trigger("update.zf.magellan",[this.$active])}_destroy(){if(this.$element.off(".zf.trigger .zf.magellan").find("."+this.options.activeClass).removeClass(this.options.activeClass),this.options.deepLinking){var e=this.$active[0].getAttribute("href");window.location.hash.replace(e,"")}r()(window).off("hashchange",this._deepLinkScroll),this.onLoadListener&&r()(window).off(this.onLoadListener)}}ce.defaults={animationDuration:500,animationEasing:"linear",threshold:50,activeClass:"is-active",deepLinking:!1,updateHistory:!1,offset:0};class de extends G{_setup(e,t){this.className="OffCanvas",this.$element=e,this.options=r.a.extend({},de.defaults,this.$element.data(),t),this.contentClasses={base:[],reveal:[]},this.$lastTrigger=r()(),this.$triggers=r()(),this.position="left",this.$content=r()(),this.nested=!!this.options.nested,this.$sticky=r()(),this.isInCanvas=!1,r()(["push","overlap"]).each((e,t)=>{this.contentClasses.base.push("has-transition-"+t)}),r()(["left","right","top","bottom"]).each((e,t)=>{this.contentClasses.base.push("has-position-"+t),this.contentClasses.reveal.push("has-reveal-"+t)}),V.init(r.a),d._init(),this._init(),this._events(),_.register("OffCanvas",{ESCAPE:"close"})}_init(){var e=this.$element.attr("id");if(this.$element.attr("aria-hidden","true"),this.options.contentId?this.$content=r()("#"+this.options.contentId):this.$element.siblings("[data-off-canvas-content]").length?this.$content=this.$element.siblings("[data-off-canvas-content]").first():this.$content=this.$element.closest("[data-off-canvas-content]").first(),this.options.contentId?this.options.contentId&&null===this.options.nested&&console.warn("Remember to use the nested option if using the content ID option!"):this.nested=0===this.$element.siblings("[data-off-canvas-content]").length,!0===this.nested&&(this.options.transition="overlap",this.$element.removeClass("is-transition-push")),this.$element.addClass(`is-transition-${this.options.transition} is-closed`),this.$triggers=r()(document).find('[data-open="'+e+'"], [data-close="'+e+'"], [data-toggle="'+e+'"]').attr("aria-expanded","false").attr("aria-controls",e),this.position=this.$element.is(".position-left, .position-top, .position-right, .position-bottom")?this.$element.attr("class").match(/position\-(left|top|right|bottom)/)[1]:this.position,!0===this.options.contentOverlay){var t=document.createElement("div"),n="fixed"===r()(this.$element).css("position")?"is-overlay-fixed":"is-overlay-absolute";t.setAttribute("class","js-off-canvas-overlay "+n),this.$overlay=r()(t),"is-overlay-fixed"===n?r()(this.$overlay).insertAfter(this.$element):this.$content.append(this.$overlay)}var i=new RegExp(s(this.options.revealClass)+"([^\\s]+)","g").exec(this.$element[0].className);i&&(this.options.isRevealed=!0,this.options.revealOn=this.options.revealOn||i[1]),!0===this.options.isRevealed&&this.options.revealOn&&(this.$element.first().addClass(`${this.options.revealClass}${this.options.revealOn}`),this._setMQChecker()),this.options.transitionTime&&this.$element.css("transition-duration",this.options.transitionTime),this.$sticky=this.$content.find("[data-off-canvas-sticky]"),this.$sticky.length>0&&"push"===this.options.transition&&(this.options.contentScroll=!1);let o=this.$element.attr("class").match(/\bin-canvas-for-(\w+)/);o&&2===o.length?this.options.inCanvasOn=o[1]:this.options.inCanvasOn&&this.$element.addClass("in-canvas-for-"+this.options.inCanvasOn),this.options.inCanvasOn&&this._checkInCanvas(),this._removeContentClasses()}_events(){(this.$element.off(".zf.trigger .zf.offCanvas").on({"open.zf.trigger":this.open.bind(this),"close.zf.trigger":this.close.bind(this),"toggle.zf.trigger":this.toggle.bind(this),"keydown.zf.offCanvas":this._handleKeyboard.bind(this)}),!0===this.options.closeOnClick)&&(this.options.contentOverlay?this.$overlay:this.$content).on({"click.zf.offCanvas":this.close.bind(this)});this.options.inCanvasOn&&r()(window).on("changed.zf.mediaquery",()=>{this._checkInCanvas()})}_setMQChecker(){var e=this;this.onLoadListener=u(r()(window),(function(){d.atLeast(e.options.revealOn)&&e.reveal(!0)})),r()(window).on("changed.zf.mediaquery",(function(){d.atLeast(e.options.revealOn)?e.reveal(!0):e.reveal(!1)}))}_checkInCanvas(){this.isInCanvas=d.atLeast(this.options.inCanvasOn),!0===this.isInCanvas&&this.close()}_removeContentClasses(e){"boolean"!=typeof e?this.$content.removeClass(this.contentClasses.base.join(" ")):!1===e&&this.$content.removeClass("has-reveal-"+this.position)}_addContentClasses(e){this._removeContentClasses(e),"boolean"!=typeof e?this.$content.addClass(`has-transition-${this.options.transition} has-position-${this.position}`):!0===e&&this.$content.addClass("has-reveal-"+this.position)}_fixStickyElements(){this.$sticky.each((e,t)=>{const n=r()(t);if("fixed"===n.css("position")){let e=parseInt(n.css("top"),10);n.data("offCanvasSticky",{top:e});let t=r()(document).scrollTop()+e;n.css({top:t+"px",width:"100%",transition:"none"})}})}_unfixStickyElements(){this.$sticky.each((e,t)=>{const n=r()(t);let i=n.data("offCanvasSticky");"object"==typeof i&&(n.css({top:i.top+"px",width:"",transition:""}),n.data("offCanvasSticky",""))})}reveal(e){e?(this.close(),this.isRevealed=!0,this.$element.attr("aria-hidden","false"),this.$element.off("open.zf.trigger toggle.zf.trigger"),this.$element.removeClass("is-closed")):(this.isRevealed=!1,this.$element.attr("aria-hidden","true"),this.$element.off("open.zf.trigger toggle.zf.trigger").on({"open.zf.trigger":this.open.bind(this),"toggle.zf.trigger":this.toggle.bind(this)}),this.$element.addClass("is-closed")),this._addContentClasses(e)}_stopScrolling(){return!1}_recordScrollable(e){this.lastY=e.touches[0].pageY}_preventDefaultAtEdges(e){const t=e.data,n=this.lastY-e.touches[0].pageY;this.lastY=e.touches[0].pageY,t._canScroll(n,this)||e.preventDefault()}_scrollboxTouchMoved(e){const t=e.data,n=this.closest("[data-off-canvas], [data-off-canvas-scrollbox-outer]"),i=this.lastY-e.touches[0].pageY;n.lastY=this.lastY=e.touches[0].pageY,e.stopPropagation(),t._canScroll(i,this)||(t._canScroll(i,n)?n.scrollTop+=i:e.preventDefault())}_canScroll(e,t){const n=e<0,i=e>0,r=t.scrollTop>0,o=t.scrollTop<t.scrollHeight-t.clientHeight;return n&&r||i&&o}open(e,t){if(!(this.$element.hasClass("is-open")||this.isRevealed||this.isInCanvas)){var n=this;t&&(this.$lastTrigger=t),"top"===this.options.forceTo?window.scrollTo(0,0):"bottom"===this.options.forceTo&&window.scrollTo(0,document.body.scrollHeight),this.options.transitionTime&&"overlap"!==this.options.transition?this.$element.siblings("[data-off-canvas-content]").css("transition-duration",this.options.transitionTime):this.$element.siblings("[data-off-canvas-content]").css("transition-duration",""),this.$element.addClass("is-open").removeClass("is-closed"),this.$triggers.attr("aria-expanded","true"),this.$element.attr("aria-hidden","false"),this.$content.addClass("is-open-"+this.position),!1===this.options.contentScroll&&(r()("body").addClass("is-off-canvas-open").on("touchmove",this._stopScrolling),this.$element.on("touchstart",this._recordScrollable),this.$element.on("touchmove",this,this._preventDefaultAtEdges),this.$element.on("touchstart","[data-off-canvas-scrollbox]",this._recordScrollable),this.$element.on("touchmove","[data-off-canvas-scrollbox]",this,this._scrollboxTouchMoved)),!0===this.options.contentOverlay&&this.$overlay.addClass("is-visible"),!0===this.options.closeOnClick&&!0===this.options.contentOverlay&&this.$overlay.addClass("is-closable"),!0===this.options.autoFocus&&this.$element.one(l(this.$element),(function(){if(n.$element.hasClass("is-open")){var e=n.$element.find("[data-autofocus]");e.length?e.eq(0).focus():n.$element.find("a, button").eq(0).focus()}})),!0===this.options.trapFocus&&(this.$content.attr("tabindex","-1"),_.trapFocus(this.$element)),"push"===this.options.transition&&this._fixStickyElements(),this._addContentClasses(),this.$element.trigger("opened.zf.offCanvas"),this.$element.one(l(this.$element),()=>{this.$element.trigger("openedEnd.zf.offCanvas")})}}close(){this.$element.hasClass("is-open")&&!this.isRevealed&&(this.$element.trigger("close.zf.offCanvas"),this.$element.removeClass("is-open"),this.$element.attr("aria-hidden","true"),this.$content.removeClass("is-open-left is-open-top is-open-right is-open-bottom"),!0===this.options.contentOverlay&&this.$overlay.removeClass("is-visible"),!0===this.options.closeOnClick&&!0===this.options.contentOverlay&&this.$overlay.removeClass("is-closable"),this.$triggers.attr("aria-expanded","false"),this.$element.one(l(this.$element),()=>{this.$element.addClass("is-closed"),this._removeContentClasses(),"push"===this.options.transition&&this._unfixStickyElements(),!1===this.options.contentScroll&&(r()("body").removeClass("is-off-canvas-open").off("touchmove",this._stopScrolling),this.$element.off("touchstart",this._recordScrollable),this.$element.off("touchmove",this._preventDefaultAtEdges),this.$element.off("touchstart","[data-off-canvas-scrollbox]",this._recordScrollable),this.$element.off("touchmove","[data-off-canvas-scrollbox]",this._scrollboxTouchMoved)),!0===this.options.trapFocus&&(this.$content.removeAttr("tabindex"),_.releaseFocus(this.$element)),this.$element.trigger("closed.zf.offCanvas")}))}toggle(e,t){this.$element.hasClass("is-open")?this.close(e,t):this.open(e,t)}_handleKeyboard(e){_.handleKey(e,"OffCanvas",{close:()=>(this.close(),this.$lastTrigger.focus(),!0),handled:()=>{e.preventDefault()}})}_destroy(){this.close(),this.$element.off(".zf.trigger .zf.offCanvas"),this.$overlay.off(".zf.offCanvas"),this.onLoadListener&&r()(window).off(this.onLoadListener)}}de.defaults={closeOnClick:!0,contentOverlay:!0,contentId:null,nested:null,contentScroll:!0,transitionTime:null,transition:"push",forceTo:null,isRevealed:!1,revealOn:null,inCanvasOn:null,autoFocus:!0,revealClass:"reveal-for-",trapFocus:!1};class fe extends G{_setup(e,t){this.$element=e,this.options=r.a.extend({},fe.defaults,this.$element.data(),t),this.className="Orbit",N.init(r.a),this._init(),_.register("Orbit",{ltr:{ARROW_RIGHT:"next",ARROW_LEFT:"previous"},rtl:{ARROW_LEFT:"next",ARROW_RIGHT:"previous"}})}_init(){this._reset(),this.$wrapper=this.$element.find("."+this.options.containerClass),this.$slides=this.$element.find("."+this.options.slideClass);var e=this.$element.find("img"),t=this.$slides.filter(".is-active"),n=this.$element[0].id||a(6,"orbit");this.$element.attr({"data-resize":n,id:n}),t.length||this.$slides.eq(0).addClass("is-active"),this.options.useMUI||this.$slides.addClass("no-motionui"),e.length?y(e,this._prepareForOrbit.bind(this)):this._prepareForOrbit(),this.options.bullets&&this._loadBullets(),this._events(),this.options.autoPlay&&this.$slides.length>1&&this.geoSync(),this.options.accessible&&this.$wrapper.attr("tabindex",0)}_loadBullets(){this.$bullets=this.$element.find("."+this.options.boxOfBullets).find("button")}geoSync(){var e=this;this.timer=new P(this.$element,{duration:this.options.timerDelay,infinite:!1},(function(){e.changeSlide(!0)})),this.timer.start()}_prepareForOrbit(){this._setWrapperHeight()}_setWrapperHeight(e){var t,n=0,i=0,o=this;this.$slides.each((function(){t=this.getBoundingClientRect().height,r()(this).attr("data-slide",i),/mui/g.test(r()(this)[0].className)||o.$slides.filter(".is-active")[0]===o.$slides.eq(i)[0]||r()(this).css({display:"none"}),n=t>n?t:n,i++})),i===this.$slides.length&&(this.$wrapper.css({height:n}),e&&e(n))}_setSlideHeight(e){this.$slides.each((function(){r()(this).css("max-height",e)}))}_events(){var e=this;if(this.$element.off(".resizeme.zf.trigger").on({"resizeme.zf.trigger":this._prepareForOrbit.bind(this)}),this.$slides.length>1){if(this.options.swipe&&this.$slides.off("swipeleft.zf.orbit swiperight.zf.orbit").on("swipeleft.zf.orbit",(function(t){t.preventDefault(),e.changeSlide(!0)})).on("swiperight.zf.orbit",(function(t){t.preventDefault(),e.changeSlide(!1)})),this.options.autoPlay&&(this.$slides.on("click.zf.orbit",(function(){e.$element.data("clickedOn",!e.$element.data("clickedOn")),e.timer[e.$element.data("clickedOn")?"pause":"start"]()})),this.options.pauseOnHover&&this.$element.on("mouseenter.zf.orbit",(function(){e.timer.pause()})).on("mouseleave.zf.orbit",(function(){e.$element.data("clickedOn")||e.timer.start()}))),this.options.navButtons)this.$element.find(`.${this.options.nextClass}, .${this.options.prevClass}`).attr("tabindex",0).on("click.zf.orbit touchend.zf.orbit",(function(t){t.preventDefault(),e.changeSlide(r()(this).hasClass(e.options.nextClass))}));this.options.bullets&&this.$bullets.on("click.zf.orbit touchend.zf.orbit",(function(){if(/is-active/g.test(this.className))return!1;var t=r()(this).data("slide"),n=t>e.$slides.filter(".is-active").data("slide"),i=e.$slides.eq(t);e.changeSlide(n,i,t)})),this.options.accessible&&this.$wrapper.add(this.$bullets).on("keydown.zf.orbit",(function(t){_.handleKey(t,"Orbit",{next:function(){e.changeSlide(!0)},previous:function(){e.changeSlide(!1)},handled:function(){r()(t.target).is(e.$bullets)&&e.$bullets.filter(".is-active").focus()}})}))}}_reset(){void 0!==this.$slides&&this.$slides.length>1&&(this.$element.off(".zf.orbit").find("*").off(".zf.orbit"),this.options.autoPlay&&this.timer.restart(),this.$slides.each((function(e){r()(e).removeClass("is-active is-active is-in").removeAttr("aria-live").hide()})),this.$slides.first().addClass("is-active").show(),this.$element.trigger("slidechange.zf.orbit",[this.$slides.first()]),this.options.bullets&&this._updateBullets(0))}changeSlide(e,t,n){if(this.$slides){var i=this.$slides.filter(".is-active").eq(0);if(/mui/g.test(i[0].className))return!1;var r,o=this.$slides.first(),a=this.$slides.last(),s=e?"Right":"Left",l=e?"Left":"Right",u=this;(r=t||(e?this.options.infiniteWrap?i.next("."+this.options.slideClass).length?i.next("."+this.options.slideClass):o:i.next("."+this.options.slideClass):this.options.infiniteWrap?i.prev("."+this.options.slideClass).length?i.prev("."+this.options.slideClass):a:i.prev("."+this.options.slideClass))).length&&(this.$element.trigger("beforeslidechange.zf.orbit",[i,r]),this.options.bullets&&(n=n||this.$slides.index(r),this._updateBullets(n)),this.options.useMUI&&!this.$element.is(":hidden")?(S.animateIn(r.addClass("is-active"),this.options["animInFrom"+s],(function(){r.css({display:"block"}).attr("aria-live","polite")})),S.animateOut(i.removeClass("is-active"),this.options["animOutTo"+l],(function(){i.removeAttr("aria-live"),u.options.autoPlay&&!u.timer.isPaused&&u.timer.restart()}))):(i.removeClass("is-active is-in").removeAttr("aria-live").hide(),r.addClass("is-active is-in").attr("aria-live","polite").show(),this.options.autoPlay&&!this.timer.isPaused&&this.timer.restart()),this.$element.trigger("slidechange.zf.orbit",[r]))}}_updateBullets(e){var t=this.$bullets.filter(".is-active"),n=this.$bullets.not(".is-active"),i=this.$bullets.eq(e);t.removeClass("is-active").blur(),i.addClass("is-active");var o=t.children("[data-slide-active-label]").last();if(!o.length){var a=t.children("span");n.toArray().map(e=>r()(e).children("span").length).every(e=>e<a.length)&&(o=a.last()).attr("data-slide-active-label","")}o.length&&(o.detach(),i.append(o))}_destroy(){this.$element.off(".zf.orbit").find("*").off(".zf.orbit").end().hide()}}fe.defaults={bullets:!0,navButtons:!0,animInFromRight:"slide-in-right",animOutToRight:"slide-out-right",animInFromLeft:"slide-in-left",animOutToLeft:"slide-out-left",autoPlay:!0,timerDelay:5e3,infiniteWrap:!0,swipe:!0,pauseOnHover:!0,accessible:!0,containerClass:"orbit-container",slideClass:"orbit-slide",boxOfBullets:"orbit-bullets",nextClass:"orbit-next",prevClass:"orbit-previous",useMUI:!0};let he={dropdown:{cssClass:"dropdown",plugin:ae},drilldown:{cssClass:"drilldown",plugin:Z},accordion:{cssClass:"accordion-menu",plugin:X}};class pe extends G{_setup(e){this.$element=r()(e),this.rules=this.$element.data("responsive-menu"),this.currentMq=null,this.currentPlugin=null,this.className="ResponsiveMenu",this._init(),this._events()}_init(){if(d._init(),"string"==typeof this.rules){let e={},t=this.rules.split(" ");for(let n=0;n<t.length;n++){let i=t[n].split("-"),r=i.length>1?i[0]:"small",o=i.length>1?i[1]:i[0];null!==he[o]&&(e[r]=he[o])}this.rules=e}r.a.isEmptyObject(this.rules)||this._checkMediaQueries(),this.$element.attr("data-mutate",this.$element.attr("data-mutate")||a(6,"responsive-menu"))}_events(){var e=this;r()(window).on("changed.zf.mediaquery",(function(){e._checkMediaQueries()}))}_checkMediaQueries(){var e,t=this;r.a.each(this.rules,(function(t){d.atLeast(t)&&(e=t)})),e&&(this.currentPlugin instanceof this.rules[e].plugin||(r.a.each(he,(function(e,n){t.$element.removeClass(n.cssClass)})),this.$element.addClass(this.rules[e].cssClass),this.currentPlugin&&this.currentPlugin.destroy(),this.currentPlugin=new this.rules[e].plugin(this.$element,{})))}_destroy(){this.currentPlugin.destroy(),r()(window).off(".zf.ResponsiveMenu")}}pe.defaults={};class me extends G{_setup(e,t){this.$element=r()(e),this.options=r.a.extend({},me.defaults,this.$element.data(),t),this.className="ResponsiveToggle",this._init(),this._events()}_init(){d._init();var e=this.$element.data("responsive-toggle");if(e||console.error("Your tab bar needs an ID of a Menu as the value of data-tab-bar."),this.$targetMenu=r()("#"+e),this.$toggler=this.$element.find("[data-toggle]").filter((function(){var t=r()(this).data("toggle");return t===e||""===t})),this.options=r.a.extend({},this.options,this.$targetMenu.data()),this.options.animate){let e=this.options.animate.split(" ");this.animationIn=e[0],this.animationOut=e[1]||null}this._update()}_events(){this._updateMqHandler=this._update.bind(this),r()(window).on("changed.zf.mediaquery",this._updateMqHandler),this.$toggler.on("click.zf.responsiveToggle",this.toggleMenu.bind(this))}_update(){d.atLeast(this.options.hideFor)?(this.$element.hide(),this.$targetMenu.show()):(this.$element.show(),this.$targetMenu.hide())}toggleMenu(){d.atLeast(this.options.hideFor)||(this.options.animate?this.$targetMenu.is(":hidden")?S.animateIn(this.$targetMenu,this.animationIn,()=>{this.$element.trigger("toggled.zf.responsiveToggle"),this.$targetMenu.find("[data-mutate]").triggerHandler("mutateme.zf.trigger")}):S.animateOut(this.$targetMenu,this.animationOut,()=>{this.$element.trigger("toggled.zf.responsiveToggle")}):(this.$targetMenu.toggle(0),this.$targetMenu.find("[data-mutate]").trigger("mutateme.zf.trigger"),this.$element.trigger("toggled.zf.responsiveToggle")))}_destroy(){this.$element.off(".zf.responsiveToggle"),this.$toggler.off(".zf.responsiveToggle"),r()(window).off("changed.zf.mediaquery",this._updateMqHandler)}}me.defaults={hideFor:"medium",animate:!1};class ge extends G{_setup(e,t){this.$element=e,this.options=r.a.extend({},ge.defaults,this.$element.data(),t),this.className="Reveal",this._init(),N.init(r.a),V.init(r.a),_.register("Reveal",{ESCAPE:"close"})}_init(){d._init(),this.id=this.$element.attr("id"),this.isActive=!1,this.cached={mq:d.current},this.$anchor=r()(`[data-open="${this.id}"]`).length?r()(`[data-open="${this.id}"]`):r()(`[data-toggle="${this.id}"]`),this.$anchor.attr({"aria-controls":this.id,"aria-haspopup":"dialog",tabindex:0}),(this.options.fullScreen||this.$element.hasClass("full"))&&(this.options.fullScreen=!0,this.options.overlay=!1),this.options.overlay&&!this.$overlay&&(this.$overlay=this._makeOverlay(this.id)),this.$element.attr({role:"dialog","aria-hidden":!0,"data-yeti-box":this.id,"data-resize":this.id}),this.$overlay?this.$element.detach().appendTo(this.$overlay):(this.$element.detach().appendTo(r()(this.options.appendTo)),this.$element.addClass("without-overlay")),this._events(),this.options.deepLink&&window.location.hash==="#"+this.id&&(this.onLoadListener=u(r()(window),()=>this.open()))}_makeOverlay(){var e="";return this.options.additionalOverlayClasses&&(e=" "+this.options.additionalOverlayClasses),r()("<div></div>").addClass("reveal-overlay"+e).appendTo(this.options.appendTo)}_updatePosition(){var e,t=this.$element.outerWidth(),n=r()(window).width(),i=this.$element.outerHeight(),o=r()(window).height(),a=null;e="auto"===this.options.hOffset?parseInt((n-t)/2,10):parseInt(this.options.hOffset,10),"auto"===this.options.vOffset?a=i>o?parseInt(Math.min(100,o/10),10):parseInt((o-i)/4,10):null!==this.options.vOffset&&(a=parseInt(this.options.vOffset,10)),null!==a&&this.$element.css({top:a+"px"}),this.$overlay&&"auto"===this.options.hOffset||(this.$element.css({left:e+"px"}),this.$element.css({margin:"0px"}))}_events(){var e=this;this.$element.on({"open.zf.trigger":this.open.bind(this),"close.zf.trigger":(t,n)=>{if(t.target===e.$element[0]||r()(t.target).parents("[data-closable]")[0]===n)return this.close.apply(this)},"toggle.zf.trigger":this.toggle.bind(this),"resizeme.zf.trigger":function(){e._updatePosition()}}),this.options.closeOnClick&&this.options.overlay&&this.$overlay.off(".zf.reveal").on("click.zf.dropdown tap.zf.dropdown",(function(t){t.target!==e.$element[0]&&!r.a.contains(e.$element[0],t.target)&&r.a.contains(document,t.target)&&e.close()})),this.options.deepLink&&r()(window).on("hashchange.zf.reveal:"+this.id,this._handleState.bind(this))}_handleState(){window.location.hash!=="#"+this.id||this.isActive?this.close():this.open()}_disableScroll(e){e=e||r()(window).scrollTop(),r()(document).height()>r()(window).height()&&r()("html").css("top",-e)}_enableScroll(e){e=e||parseInt(r()("html").css("top"),10),r()(document).height()>r()(window).height()&&(r()("html").css("top",""),r()(window).scrollTop(-e))}open(){const e="#"+this.id;this.options.deepLink&&window.location.hash!==e&&(window.history.pushState?this.options.updateHistory?window.history.pushState({},"",e):window.history.replaceState({},"",e):window.location.hash=e),this.$activeAnchor=r()(document.activeElement).is(this.$anchor)?r()(document.activeElement):this.$anchor,this.isActive=!0,this.$element.css({visibility:"hidden"}).show().scrollTop(0),this.options.overlay&&this.$overlay.css({visibility:"hidden"}).show(),this._updatePosition(),this.$element.hide().css({visibility:""}),this.$overlay&&(this.$overlay.css({visibility:""}).hide(),this.$element.hasClass("fast")?this.$overlay.addClass("fast"):this.$element.hasClass("slow")&&this.$overlay.addClass("slow")),this.options.multipleOpened||this.$element.trigger("closeme.zf.reveal",this.id),0===r()(".reveal:visible").length&&this._disableScroll();var t=this;if(this.options.animationIn){this.options.overlay&&S.animateIn(this.$overlay,"fade-in"),S.animateIn(this.$element,this.options.animationIn,()=>{this.$element&&(this.focusableElements=_.findFocusable(this.$element),t.$element.attr({"aria-hidden":!1,tabindex:-1}).focus(),t._addGlobalClasses(),_.trapFocus(t.$element))})}else this.options.overlay&&this.$overlay.show(0),this.$element.show(this.options.showDelay);this.$element.attr({"aria-hidden":!1,tabindex:-1}).focus(),_.trapFocus(this.$element),this._addGlobalClasses(),this._addGlobalListeners(),this.$element.trigger("open.zf.reveal")}_addGlobalClasses(){const e=()=>{r()("html").toggleClass("zf-has-scroll",!!(r()(document).height()>r()(window).height()))};this.$element.on("resizeme.zf.trigger.revealScrollbarListener",()=>e()),e(),r()("html").addClass("is-reveal-open")}_removeGlobalClasses(){this.$element.off("resizeme.zf.trigger.revealScrollbarListener"),r()("html").removeClass("is-reveal-open"),r()("html").removeClass("zf-has-scroll")}_addGlobalListeners(){var e=this;this.$element&&(this.focusableElements=_.findFocusable(this.$element),this.options.overlay||!this.options.closeOnClick||this.options.fullScreen||r()("body").on("click.zf.dropdown tap.zf.dropdown",(function(t){t.target!==e.$element[0]&&!r.a.contains(e.$element[0],t.target)&&r.a.contains(document,t.target)&&e.close()})),this.options.closeOnEsc&&r()(window).on("keydown.zf.reveal",(function(t){_.handleKey(t,"Reveal",{close:function(){e.options.closeOnEsc&&e.close()}})})))}close(){if(!this.isActive||!this.$element.is(":visible"))return!1;var e=this;function t(){var t=parseInt(r()("html").css("top"),10);0===r()(".reveal:visible").length&&e._removeGlobalClasses(),_.releaseFocus(e.$element),e.$element.attr("aria-hidden",!0),0===r()(".reveal:visible").length&&e._enableScroll(t),e.$element.trigger("closed.zf.reveal")}if(this.options.animationOut?(this.options.overlay&&S.animateOut(this.$overlay,"fade-out"),S.animateOut(this.$element,this.options.animationOut,t)):(this.$element.hide(this.options.hideDelay),this.options.overlay?this.$overlay.hide(0,t):t()),this.options.closeOnEsc&&r()(window).off("keydown.zf.reveal"),!this.options.overlay&&this.options.closeOnClick&&r()("body").off("click.zf.dropdown tap.zf.dropdown"),this.$element.off("keydown.zf.reveal"),this.options.resetOnClose&&this.$element.html(this.$element.html()),this.isActive=!1,e.options.deepLink&&window.location.hash==="#"+this.id)if(window.history.replaceState){const e=window.location.pathname+window.location.search;this.options.updateHistory?window.history.pushState({},"",e):window.history.replaceState("",document.title,e)}else window.location.hash="";this.$activeAnchor.focus()}toggle(){this.isActive?this.close():this.open()}_destroy(){this.options.overlay&&(this.$element.appendTo(r()(this.options.appendTo)),this.$overlay.hide().off().remove()),this.$element.hide().off(),this.$anchor.off(".zf"),r()(window).off(".zf.reveal:"+this.id),this.onLoadListener&&r()(window).off(this.onLoadListener),0===r()(".reveal:visible").length&&this._removeGlobalClasses()}}ge.defaults={animationIn:"",animationOut:"",showDelay:0,hideDelay:0,closeOnClick:!0,closeOnEsc:!0,multipleOpened:!1,vOffset:"auto",hOffset:"auto",fullScreen:!1,overlay:!0,resetOnClose:!1,deepLink:!1,updateHistory:!1,appendTo:"body",additionalOverlayClasses:""};class ve extends G{_setup(e,t){this.$element=e,this.options=r.a.extend({},ve.defaults,this.$element.data(),t),this.className="Slider",this.initialized=!1,N.init(r.a),V.init(r.a),this._init(),_.register("Slider",{ltr:{ARROW_RIGHT:"increase",ARROW_UP:"increase",ARROW_DOWN:"decrease",ARROW_LEFT:"decrease",SHIFT_ARROW_RIGHT:"increaseFast",SHIFT_ARROW_UP:"increaseFast",SHIFT_ARROW_DOWN:"decreaseFast",SHIFT_ARROW_LEFT:"decreaseFast",HOME:"min",END:"max"},rtl:{ARROW_LEFT:"increase",ARROW_RIGHT:"decrease",SHIFT_ARROW_LEFT:"increaseFast",SHIFT_ARROW_RIGHT:"decreaseFast"}})}_init(){this.inputs=this.$element.find("input"),this.handles=this.$element.find("[data-slider-handle]"),this.$handle=this.handles.eq(0),this.$input=this.inputs.length?this.inputs.eq(0):r()("#"+this.$handle.attr("aria-controls")),this.$fill=this.$element.find("[data-slider-fill]").css(this.options.vertical?"height":"width",0),(this.options.disabled||this.$element.hasClass(this.options.disabledClass))&&(this.options.disabled=!0,this.$element.addClass(this.options.disabledClass)),this.inputs.length||(this.inputs=r()().add(this.$input),this.options.binding=!0),this._setInitAttr(0),this.handles[1]&&(this.options.doubleSided=!0,this.$handle2=this.handles.eq(1),this.$input2=this.inputs.length>1?this.inputs.eq(1):r()("#"+this.$handle2.attr("aria-controls")),this.inputs[1]||(this.inputs=this.inputs.add(this.$input2)),this._setInitAttr(1)),this.setHandles(),this._events(),this.initialized=!0}setHandles(){this.handles[1]?this._setHandlePos(this.$handle,this.inputs.eq(0).val(),()=>{this._setHandlePos(this.$handle2,this.inputs.eq(1).val())}):this._setHandlePos(this.$handle,this.inputs.eq(0).val())}_reflow(){this.setHandles()}_pctOfBar(e){var t=ye(e-this.options.start,this.options.end-this.options.start);switch(this.options.positionValueFunction){case"pow":t=this._logTransform(t);break;case"log":t=this._powTransform(t)}return t.toFixed(2)}_value(e){switch(this.options.positionValueFunction){case"pow":e=this._powTransform(e);break;case"log":e=this._logTransform(e)}return this.options.vertical?parseFloat(this.options.end)+e*(this.options.start-this.options.end):(this.options.end-this.options.start)*e+parseFloat(this.options.start)}_logTransform(e){return function(e,t){return Math.log(t)/Math.log(e)}(this.options.nonLinearBase,e*(this.options.nonLinearBase-1)+1)}_powTransform(e){return(Math.pow(this.options.nonLinearBase,e)-1)/(this.options.nonLinearBase-1)}_setHandlePos(e,t,n){if(!this.$element.hasClass(this.options.disabledClass)){(t=parseFloat(t))<this.options.start?t=this.options.start:t>this.options.end&&(t=this.options.end);var i=this.options.doubleSided;if(i)if(0===this.handles.index(e)){var r=parseFloat(this.$handle2.attr("aria-valuenow"));t=t>=r?r-this.options.step:t}else{var o=parseFloat(this.$handle.attr("aria-valuenow"));t=t<=o?o+this.options.step:t}var a=this,s=this.options.vertical,l=s?"height":"width",u=s?"top":"left",c=e[0].getBoundingClientRect()[l],d=this.$element[0].getBoundingClientRect()[l],f=this._pctOfBar(t),h=(100*ye((d-c)*f,d)).toFixed(this.options.decimal);t=parseFloat(t.toFixed(this.options.decimal));var p={};if(this._setValues(e,t),i){var m,g=0===this.handles.index(e),v=Math.floor(100*ye(c,d));if(g)p[u]=h+"%",m=parseFloat(this.$handle2[0].style[u])-h+v,n&&"function"==typeof n&&n();else{var y=parseFloat(this.$handle[0].style[u]);m=h-(isNaN(y)?(this.options.initialStart-this.options.start)/((this.options.end-this.options.start)/100):y)+v}p["min-"+l]=m+"%"}T(this.$element.data("dragging")?1e3/60:this.options.moveTime,e,(function(){isNaN(h)?e.css(u,100*f+"%"):e.css(u,h+"%"),a.options.doubleSided?a.$fill.css(p):a.$fill.css(l,100*f+"%")})),this.initialized&&(this.$element.one("finished.zf.animate",(function(){a.$element.trigger("moved.zf.slider",[e])})),clearTimeout(a.timeout),a.timeout=setTimeout((function(){a.$element.trigger("changed.zf.slider",[e])}),a.options.changedDelay))}}_setInitAttr(e){var t=0===e?this.options.initialStart:this.options.initialEnd,n=this.inputs.eq(e).attr("id")||a(6,"slider");this.inputs.eq(e).attr({id:n,max:this.options.end,min:this.options.start,step:this.options.step}),this.inputs.eq(e).val(t),this.handles.eq(e).attr({role:"slider","aria-controls":n,"aria-valuemax":this.options.end,"aria-valuemin":this.options.start,"aria-valuenow":t,"aria-orientation":this.options.vertical?"vertical":"horizontal",tabindex:0})}_setValues(e,t){var n=this.options.doubleSided?this.handles.index(e):0;this.inputs.eq(n).val(t),e.attr("aria-valuenow",t)}_handleEvent(e,t,n){var i;if(n)i=this._adjustValue(null,n);else{e.preventDefault();var a=this.options.vertical,s=a?"height":"width",l=a?"top":"left",u=a?e.pageY:e.pageX,c=this.$element[0].getBoundingClientRect()[s],d=a?r()(window).scrollTop():r()(window).scrollLeft(),f=this.$element.offset()[l];e.clientY===e.pageY&&(u+=d);var h,p=u-f,m=ye(h=p<0?0:p>c?c:p,c);if(i=this._value(m),o()&&!this.options.vertical&&(i=this.options.end-i),i=this._adjustValue(null,i),!t)t=be(this.$handle,l,h,s)<=be(this.$handle2,l,h,s)?this.$handle:this.$handle2}this._setHandlePos(t,i)}_adjustValue(e,t){var n,i,r,o=this.options.step,a=parseFloat(o/2);return 0===(i=(n=e?parseFloat(e.attr("aria-valuenow")):t)>=0?n%o:o+n%o)?n:n=n>=(r=n-i)+a?r+o:r}_events(){this._eventsForHandle(this.$handle),this.handles[1]&&this._eventsForHandle(this.$handle2)}_eventsForHandle(e){var t,n=this;const i=function(e){const t=n.inputs.index(r()(this));n._handleEvent(e,n.handles.eq(t),r()(this).val())};if(this.inputs.off("keyup.zf.slider").on("keyup.zf.slider",(function(e){13===e.keyCode&&i.call(this,e)})),this.inputs.off("change.zf.slider").on("change.zf.slider",i),this.options.clickSelect&&this.$element.off("click.zf.slider").on("click.zf.slider",(function(e){if(n.$element.data("dragging"))return!1;r()(e.target).is("[data-slider-handle]")||(n.options.doubleSided?n._handleEvent(e):n._handleEvent(e,n.$handle))})),this.options.draggable){this.handles.addTouch();var o=r()("body");e.off("mousedown.zf.slider").on("mousedown.zf.slider",(function(i){e.addClass("is-dragging"),n.$fill.addClass("is-dragging"),n.$element.data("dragging",!0),t=r()(i.currentTarget),o.on("mousemove.zf.slider",(function(e){e.preventDefault(),n._handleEvent(e,t)})).on("mouseup.zf.slider",(function(i){n._handleEvent(i,t),e.removeClass("is-dragging"),n.$fill.removeClass("is-dragging"),n.$element.data("dragging",!1),o.off("mousemove.zf.slider mouseup.zf.slider")}))})).on("selectstart.zf.slider touchmove.zf.slider",(function(e){e.preventDefault()}))}e.off("keydown.zf.slider").on("keydown.zf.slider",(function(e){var t,i=r()(this),o=n.options.doubleSided?n.handles.index(i):0,a=parseFloat(n.inputs.eq(o).val());_.handleKey(e,"Slider",{decrease:function(){t=a-n.options.step},increase:function(){t=a+n.options.step},decreaseFast:function(){t=a-10*n.options.step},increaseFast:function(){t=a+10*n.options.step},min:function(){t=n.options.start},max:function(){t=n.options.end},handled:function(){e.preventDefault(),n._setHandlePos(i,t)}})}))}_destroy(){this.handles.off(".zf.slider"),this.inputs.off(".zf.slider"),this.$element.off(".zf.slider"),clearTimeout(this.timeout)}}function ye(e,t){return e/t}function be(e,t,n,i){return Math.abs(e.position()[t]+e[i]()/2-n)}ve.defaults={start:0,end:100,step:1,initialStart:0,initialEnd:100,binding:!1,clickSelect:!0,vertical:!1,draggable:!0,disabled:!1,doubleSided:!1,decimal:2,moveTime:200,disabledClass:"disabled",invertVertical:!1,changedDelay:500,nonLinearBase:5,positionValueFunction:"linear"};class we extends G{_setup(e,t){this.$element=e,this.options=r.a.extend({},we.defaults,this.$element.data(),t),this.className="Sticky",V.init(r.a),this._init()}_init(){d._init();var e=this.$element.parent("[data-sticky-container]"),t=this.$element[0].id||a(6,"sticky"),n=this;e.length?this.$container=e:(this.wasWrapped=!0,this.$element.wrap(this.options.container),this.$container=this.$element.parent()),this.$container.addClass(this.options.containerClass),this.$element.addClass(this.options.stickyClass).attr({"data-resize":t,"data-mutate":t}),""!==this.options.anchor&&r()("#"+n.options.anchor).attr({"data-mutate":t}),this.scrollCount=this.options.checkEvery,this.isStuck=!1,this.onLoadListener=u(r()(window),(function(){n.containerHeight="none"===n.$element.css("display")?0:n.$element[0].getBoundingClientRect().height,n.$container.css("height",n.containerHeight),n.elemHeight=n.containerHeight,""!==n.options.anchor?n.$anchor=r()("#"+n.options.anchor):n._parsePoints(),n._setSizes((function(){var e=window.pageYOffset;n._calc(!1,e),n.isStuck||n._removeSticky(!(e>=n.topPoint))})),n._events(t.split("-").reverse().join("-"))}))}_parsePoints(){for(var e=[""===this.options.topAnchor?1:this.options.topAnchor,""===this.options.btmAnchor?document.documentElement.scrollHeight:this.options.btmAnchor],t={},n=0,i=e.length;n<i&&e[n];n++){var o;if("number"==typeof e[n])o=e[n];else{var a=e[n].split(":"),s=r()("#"+a[0]);o=s.offset().top,a[1]&&"bottom"===a[1].toLowerCase()&&(o+=s[0].getBoundingClientRect().height)}t[n]=o}this.points=t}_events(e){var t=this,n=this.scrollListener="scroll.zf."+e;this.isOn||(this.canStick&&(this.isOn=!0,r()(window).off(n).on(n,(function(){0===t.scrollCount?(t.scrollCount=t.options.checkEvery,t._setSizes((function(){t._calc(!1,window.pageYOffset)}))):(t.scrollCount--,t._calc(!1,window.pageYOffset))}))),this.$element.off("resizeme.zf.trigger").on("resizeme.zf.trigger",(function(){t._eventsHandler(e)})),this.$element.on("mutateme.zf.trigger",(function(){t._eventsHandler(e)})),this.$anchor&&this.$anchor.on("mutateme.zf.trigger",(function(){t._eventsHandler(e)})))}_eventsHandler(e){var t=this,n=this.scrollListener="scroll.zf."+e;t._setSizes((function(){t._calc(!1),t.canStick?t.isOn||t._events(e):t.isOn&&t._pauseListeners(n)}))}_pauseListeners(e){this.isOn=!1,r()(window).off(e),this.$element.trigger("pause.zf.sticky")}_calc(e,t){if(e&&this._setSizes(),!this.canStick)return this.isStuck&&this._removeSticky(!0),!1;t||(t=window.pageYOffset),t>=this.topPoint?t<=this.bottomPoint?this.isStuck||this._setSticky():this.isStuck&&this._removeSticky(!1):this.isStuck&&this._removeSticky(!0)}_setSticky(){var e=this,t=this.options.stickTo,n="top"===t?"marginTop":"marginBottom",i="top"===t?"bottom":"top",r={};r[n]=this.options[n]+"em",r[t]=0,r[i]="auto",this.isStuck=!0,this.$element.removeClass("is-anchored is-at-"+i).addClass("is-stuck is-at-"+t).css(r).trigger("sticky.zf.stuckto:"+t),this.$element.on("transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd",(function(){e._setSizes()}))}_removeSticky(e){var t=this.options.stickTo,n="top"===t,i={},r=(this.points?this.points[1]-this.points[0]:this.anchorHeight)-this.elemHeight,o=e?"top":"bottom";i[n?"marginTop":"marginBottom"]=0,i.bottom="auto",i.top=e?0:r,this.isStuck=!1,this.$element.removeClass("is-stuck is-at-"+t).addClass("is-anchored is-at-"+o).css(i).trigger("sticky.zf.unstuckfrom:"+o)}_setSizes(e){this.canStick=d.is(this.options.stickyOn),this.canStick||e&&"function"==typeof e&&e();var t=this.$container[0].getBoundingClientRect().width,n=window.getComputedStyle(this.$container[0]),i=parseInt(n["padding-left"],10),r=parseInt(n["padding-right"],10);if(this.$anchor&&this.$anchor.length?this.anchorHeight=this.$anchor[0].getBoundingClientRect().height:this._parsePoints(),this.$element.css({"max-width":t-i-r+"px"}),this.options.dynamicHeight||!this.containerHeight){var o=this.$element[0].getBoundingClientRect().height||this.containerHeight;o="none"===this.$element.css("display")?0:o,this.$container.css("height",o),this.containerHeight=o}if(this.elemHeight=this.containerHeight,!this.isStuck&&this.$element.hasClass("is-at-bottom")){var a=(this.points?this.points[1]-this.$container.offset().top:this.anchorHeight)-this.elemHeight;this.$element.css("top",a)}this._setBreakPoints(this.containerHeight,(function(){e&&"function"==typeof e&&e()}))}_setBreakPoints(e,t){if(!this.canStick){if(!t||"function"!=typeof t)return!1;t()}var n=ke(this.options.marginTop),i=ke(this.options.marginBottom),r=this.points?this.points[0]:this.$anchor.offset().top,o=this.points?this.points[1]:r+this.anchorHeight,a=window.innerHeight;"top"===this.options.stickTo?(r-=n,o-=e+n):"bottom"===this.options.stickTo&&(r-=a-(e+i),o-=a-i),this.topPoint=r,this.bottomPoint=o,t&&"function"==typeof t&&t()}_destroy(){this._removeSticky(!0),this.$element.removeClass(this.options.stickyClass+" is-anchored is-at-top").css({height:"",top:"",bottom:"","max-width":""}).off("resizeme.zf.trigger").off("mutateme.zf.trigger"),this.$anchor&&this.$anchor.length&&this.$anchor.off("change.zf.sticky"),this.scrollListener&&r()(window).off(this.scrollListener),this.onLoadListener&&r()(window).off(this.onLoadListener),this.wasWrapped?this.$element.unwrap():this.$container.removeClass(this.options.containerClass).css({height:""})}}function ke(e){return parseInt(window.getComputedStyle(document.body,null).fontSize,10)*e}we.defaults={container:"<div data-sticky-container></div>",stickTo:"top",anchor:"",topAnchor:"",btmAnchor:"",marginTop:1,marginBottom:1,stickyOn:"medium",stickyClass:"sticky",containerClass:"sticky-container",dynamicHeight:!0,checkEvery:-1};class xe extends G{_setup(e,t){this.$element=e,this.options=r.a.extend({},xe.defaults,this.$element.data(),t),this.className="Tabs",this._init(),_.register("Tabs",{ENTER:"open",SPACE:"open",ARROW_RIGHT:"next",ARROW_UP:"previous",ARROW_DOWN:"next",ARROW_LEFT:"previous"})}_init(){var e=this;if(this._isInitializing=!0,this.$element.attr({role:"tablist"}),this.$tabTitles=this.$element.find("."+this.options.linkClass),this.$tabContent=r()(`[data-tabs-content="${this.$element[0].id}"]`),this.$tabTitles.each((function(){var t=r()(this),n=t.find("a"),i=t.hasClass(""+e.options.linkActiveClass),o=n.attr("data-tabs-target")||n[0].hash.slice(1),a=n[0].id?n[0].id:o+"-label",s=r()("#"+o);t.attr({role:"presentation"}),n.attr({role:"tab","aria-controls":o,"aria-selected":i,id:a,tabindex:i?"0":"-1"}),s.attr({role:"tabpanel","aria-labelledby":a}),i&&(e._initialAnchor="#"+o),i||s.attr("aria-hidden","true"),i&&e.options.autoFocus&&(e.onLoadListener=u(r()(window),(function(){r()("html, body").animate({scrollTop:t.offset().top},e.options.deepLinkSmudgeDelay,()=>{n.focus()})})))})),this.options.matchHeight){var t=this.$tabContent.find("img");t.length?y(t,this._setHeight.bind(this)):this._setHeight()}this._checkDeepLink=()=>{var e=window.location.hash;if(!e.length){if(this._isInitializing)return;this._initialAnchor&&(e=this._initialAnchor)}var t=e.indexOf("#")>=0?e.slice(1):e,n=t&&r()("#"+t),i=e&&this.$element.find(`[href$="${e}"],[data-tabs-target="${t}"]`).first();if(!(!n.length||!i.length)){if(n&&n.length&&i&&i.length?this.selectTab(n,!0):this._collapse(),this.options.deepLinkSmudge){var o=this.$element.offset();r()("html, body").animate({scrollTop:o.top-this.options.deepLinkSmudgeOffset},this.options.deepLinkSmudgeDelay)}this.$element.trigger("deeplink.zf.tabs",[i,n])}},this.options.deepLink&&this._checkDeepLink(),this._events(),this._isInitializing=!1}_events(){this._addKeyHandler(),this._addClickHandler(),this._setHeightMqHandler=null,this.options.matchHeight&&(this._setHeightMqHandler=this._setHeight.bind(this),r()(window).on("changed.zf.mediaquery",this._setHeightMqHandler)),this.options.deepLink&&r()(window).on("hashchange",this._checkDeepLink)}_addClickHandler(){var e=this;this.$element.off("click.zf.tabs").on("click.zf.tabs","."+this.options.linkClass,(function(t){t.preventDefault(),e._handleTabChange(r()(this))}))}_addKeyHandler(){var e=this;this.$tabTitles.off("keydown.zf.tabs").on("keydown.zf.tabs",(function(t){if(9!==t.which){var n,i,o=r()(this),a=o.parent("ul").children("li");a.each((function(t){r()(this).is(o)&&(e.options.wrapOnKeys?(n=0===t?a.last():a.eq(t-1),i=t===a.length-1?a.first():a.eq(t+1)):(n=a.eq(Math.max(0,t-1)),i=a.eq(Math.min(t+1,a.length-1))))})),_.handleKey(t,"Tabs",{open:function(){o.find('[role="tab"]').focus(),e._handleTabChange(o)},previous:function(){n.find('[role="tab"]').focus(),e._handleTabChange(n)},next:function(){i.find('[role="tab"]').focus(),e._handleTabChange(i)},handled:function(){t.preventDefault()}})}}))}_handleTabChange(e,t){if(e.hasClass(""+this.options.linkActiveClass))this.options.activeCollapse&&this._collapse();else{var n=this.$element.find(`.${this.options.linkClass}.${this.options.linkActiveClass}`),i=e.find('[role="tab"]'),r=i.attr("data-tabs-target"),o=r&&r.length?"#"+r:i[0].hash,a=this.$tabContent.find(o);this._collapseTab(n),this._openTab(e),this.options.deepLink&&!t&&(this.options.updateHistory?history.pushState({},"",o):history.replaceState({},"",o)),this.$element.trigger("change.zf.tabs",[e,a]),a.find("[data-mutate]").trigger("mutateme.zf.trigger")}}_openTab(e){var t=e.find('[role="tab"]'),n=t.attr("data-tabs-target")||t[0].hash.slice(1),i=this.$tabContent.find("#"+n);e.addClass(""+this.options.linkActiveClass),t.attr({"aria-selected":"true",tabindex:"0"}),i.addClass(""+this.options.panelActiveClass).removeAttr("aria-hidden")}_collapseTab(e){var t=e.removeClass(""+this.options.linkActiveClass).find('[role="tab"]').attr({"aria-selected":"false",tabindex:-1});r()("#"+t.attr("aria-controls")).removeClass(""+this.options.panelActiveClass).attr({"aria-hidden":"true"})}_collapse(){var e=this.$element.find(`.${this.options.linkClass}.${this.options.linkActiveClass}`);e.length&&(this._collapseTab(e),this.$element.trigger("collapse.zf.tabs",[e]))}selectTab(e,t){var n,i;(n="object"==typeof e?e[0].id:e).indexOf("#")<0?i="#"+n:(i=n,n=n.slice(1));var r=this.$tabTitles.has(`[href$="${i}"],[data-tabs-target="${n}"]`).first();this._handleTabChange(r,t)}_setHeight(){var e=0,t=this;this.$tabContent&&this.$tabContent.find("."+this.options.panelClass).css("min-height","").each((function(){var n=r()(this),i=n.hasClass(""+t.options.panelActiveClass);i||n.css({visibility:"hidden",display:"block"});var o=this.getBoundingClientRect().height;i||n.css({visibility:"",display:""}),e=o>e?o:e})).css("min-height",e+"px")}_destroy(){this.$element.find("."+this.options.linkClass).off(".zf.tabs").hide().end().find("."+this.options.panelClass).hide(),this.options.matchHeight&&null!=this._setHeightMqHandler&&r()(window).off("changed.zf.mediaquery",this._setHeightMqHandler),this.options.deepLink&&r()(window).off("hashchange",this._checkDeepLink),this.onLoadListener&&r()(window).off(this.onLoadListener)}}xe.defaults={deepLink:!1,deepLinkSmudge:!1,deepLinkSmudgeDelay:300,deepLinkSmudgeOffset:0,updateHistory:!1,autoFocus:!1,wrapOnKeys:!0,matchHeight:!1,activeCollapse:!1,linkClass:"tabs-title",linkActiveClass:"is-active",panelClass:"tabs-panel",panelActiveClass:"is-active"};class _e extends G{_setup(e,t){this.$element=e,this.options=r.a.extend({},_e.defaults,e.data(),t),this.className="",this.className="Toggler",V.init(r.a),this._init(),this._events()}_init(){var e,t=this.$element[0].id,n=r()(`[data-open~="${t}"], [data-close~="${t}"], [data-toggle~="${t}"]`);if(this.options.animate)e=this.options.animate.split(" "),this.animationIn=e[0],this.animationOut=e[1]||null,n.attr("aria-expanded",!this.$element.is(":hidden"));else{if("string"!=typeof(e=this.options.toggler)||!e.length)throw new Error(`The 'toggler' option containing the target class is required, got "${e}"`);this.className="."===e[0]?e.slice(1):e,n.attr("aria-expanded",this.$element.hasClass(this.className))}n.each((e,n)=>{const i=r()(n),o=i.attr("aria-controls")||"";new RegExp(`\\b${s(t)}\\b`).test(o)||i.attr("aria-controls",o?`${o} ${t}`:t)})}_events(){this.$element.off("toggle.zf.trigger").on("toggle.zf.trigger",this.toggle.bind(this))}toggle(){this[this.options.animate?"_toggleAnimate":"_toggleClass"]()}_toggleClass(){this.$element.toggleClass(this.className);var e=this.$element.hasClass(this.className);e?this.$element.trigger("on.zf.toggler"):this.$element.trigger("off.zf.toggler"),this._updateARIA(e),this.$element.find("[data-mutate]").trigger("mutateme.zf.trigger")}_toggleAnimate(){var e=this;this.$element.is(":hidden")?S.animateIn(this.$element,this.animationIn,(function(){e._updateARIA(!0),this.trigger("on.zf.toggler"),this.find("[data-mutate]").trigger("mutateme.zf.trigger")})):S.animateOut(this.$element,this.animationOut,(function(){e._updateARIA(!1),this.trigger("off.zf.toggler"),this.find("[data-mutate]").trigger("mutateme.zf.trigger")}))}_updateARIA(e){var t=this.$element[0].id;r()(`[data-open="${t}"], [data-close="${t}"], [data-toggle="${t}"]`).attr({"aria-expanded":!!e})}_destroy(){this.$element.off(".zf.toggler")}}_e.defaults={toggler:void 0,animate:!1};class Ce extends re{_setup(e,t){this.$element=e,this.options=r.a.extend({},Ce.defaults,this.$element.data(),t),this.className="Tooltip",this.isActive=!1,this.isClick=!1,V.init(r.a),this._init()}_init(){d._init();var e=this.$element.attr("aria-describedby")||a(6,"tooltip");this.options.tipText=this.options.tipText||this.$element.attr("title"),this.template=this.options.template?r()(this.options.template):this._buildTemplate(e),this.options.allowHtml?this.template.appendTo(document.body).html(this.options.tipText).hide():this.template.appendTo(document.body).text(this.options.tipText).hide(),this.$element.attr({title:"","aria-describedby":e,"data-yeti-box":e,"data-toggle":e,"data-resize":e}).addClass(this.options.triggerClass),super._init(),this._events()}_getDefaultPosition(){var e=this.$element[0].className;this.$element[0]instanceof SVGElement&&(e=e.baseVal);var t=e.match(/\b(top|left|right|bottom)\b/g);return t?t[0]:"top"}_getDefaultAlignment(){return"center"}_getHOffset(){return"left"===this.position||"right"===this.position?this.options.hOffset+this.options.tooltipWidth:this.options.hOffset}_getVOffset(){return"top"===this.position||"bottom"===this.position?this.options.vOffset+this.options.tooltipHeight:this.options.vOffset}_buildTemplate(e){var t=`${this.options.tooltipClass} ${this.options.templateClasses}`.trim();return r()("<div></div>").addClass(t).attr({role:"tooltip","aria-hidden":!0,"data-is-active":!1,"data-is-focus":!1,id:e})}_setPosition(){super._setPosition(this.$element,this.template)}show(){if("all"!==this.options.showOn&&!d.is(this.options.showOn))return!1;this.template.css("visibility","hidden").show(),this._setPosition(),this.template.removeClass("top bottom left right").addClass(this.position),this.template.removeClass("align-top align-bottom align-left align-right align-center").addClass("align-"+this.alignment),this.$element.trigger("closeme.zf.tooltip",this.template.attr("id")),this.template.attr({"data-is-active":!0,"aria-hidden":!1}),this.isActive=!0,this.template.stop().hide().css("visibility","").fadeIn(this.options.fadeInDuration,(function(){})),this.$element.trigger("show.zf.tooltip")}hide(){var e=this;this.template.stop().attr({"aria-hidden":!0,"data-is-active":!1}).fadeOut(this.options.fadeOutDuration,(function(){e.isActive=!1,e.isClick=!1})),this.$element.trigger("hide.zf.tooltip")}_events(){const e=this,t="ontouchstart"in window||void 0!==window.ontouchstart;var n=!1;t&&this.options.disableForTouch||(this.options.disableHover||this.$element.on("mouseenter.zf.tooltip",(function(){e.isActive||(e.timeout=setTimeout((function(){e.show()}),e.options.hoverDelay))})).on("mouseleave.zf.tooltip",c((function(){clearTimeout(e.timeout),(!n||e.isClick&&!e.options.clickOpen)&&e.hide()}))),t&&this.$element.on("tap.zf.tooltip touchend.zf.tooltip",(function(){e.isActive?e.hide():e.show()})),this.options.clickOpen?this.$element.on("mousedown.zf.tooltip",(function(){e.isClick||(e.isClick=!0,!e.options.disableHover&&e.$element.attr("tabindex")||e.isActive||e.show())})):this.$element.on("mousedown.zf.tooltip",(function(){e.isClick=!0})),this.$element.on({"close.zf.trigger":this.hide.bind(this)}),this.$element.on("focus.zf.tooltip",(function(){if(n=!0,e.isClick)return e.options.clickOpen||(n=!1),!1;e.show()})).on("focusout.zf.tooltip",(function(){n=!1,e.isClick=!1,e.hide()})).on("resizeme.zf.trigger",(function(){e.isActive&&e._setPosition()})))}toggle(){this.isActive?this.hide():this.show()}_destroy(){this.$element.attr("title",this.template.text()).off(".zf.trigger .zf.tooltip").removeClass(this.options.triggerClass).removeClass("top right left bottom").removeAttr("aria-describedby data-disable-hover data-resize data-toggle data-tooltip data-yeti-box"),this.template.remove()}}Ce.defaults={hoverDelay:200,fadeInDuration:150,fadeOutDuration:150,disableHover:!1,disableForTouch:!1,templateClasses:"",tooltipClass:"tooltip",triggerClass:"has-tip",showOn:"small",template:"",tipText:"",touchCloseText:"Tap to close.",clickOpen:!0,position:"auto",alignment:"auto",allowOverlap:!1,allowBottomOverlap:!1,vOffset:0,hOffset:0,tooltipHeight:14,tooltipWidth:12,allowHtml:!1};var Ee={tabs:{cssClass:"tabs",plugin:xe,open:(e,t)=>e.selectTab(t),close:null,toggle:null},accordion:{cssClass:"accordion",plugin:K,open:(e,t)=>e.down(r()(t)),close:(e,t)=>e.up(r()(t)),toggle:(e,t)=>e.toggle(r()(t))}};class Se extends G{constructor(e,t){return super(e,t),this.options.reflow&&this.storezfData||this}_setup(e,t){this.$element=r()(e),this.$element.data("zfPluginBase",this),this.options=r.a.extend({},Se.defaults,this.$element.data(),t),this.rules=this.$element.data("responsive-accordion-tabs"),this.currentMq=null,this.currentRule=null,this.currentPlugin=null,this.className="ResponsiveAccordionTabs",this.$element.attr("id")||this.$element.attr("id",a(6,"responsiveaccordiontabs")),this._init(),this._events()}_init(){if(d._init(),"string"==typeof this.rules){let e={},t=this.rules.split(" ");for(let n=0;n<t.length;n++){let i=t[n].split("-"),r=i.length>1?i[0]:"small",o=i.length>1?i[1]:i[0];null!==Ee[o]&&(e[r]=Ee[o])}this.rules=e}this._getAllOptions(),r.a.isEmptyObject(this.rules)||this._checkMediaQueries()}_getAllOptions(){for(var e in this.allOptions={},Ee)if(Ee.hasOwnProperty(e)){var t=Ee[e];try{var n=r()("<ul></ul>"),i=new t.plugin(n,this.options);for(var o in i.options)if(i.options.hasOwnProperty(o)&&"zfPlugin"!==o){var a=i.options[o];this.allOptions[o]=a}i.destroy()}catch(e){console.warn("Warning: Problems getting Accordion/Tab options: "+e)}}}_events(){this._changedZfMediaQueryHandler=this._checkMediaQueries.bind(this),r()(window).on("changed.zf.mediaquery",this._changedZfMediaQueryHandler)}_checkMediaQueries(){var e,t=this;r.a.each(this.rules,(function(t){d.atLeast(t)&&(e=t)})),e&&(this.currentPlugin instanceof this.rules[e].plugin||(r.a.each(Ee,(function(e,n){t.$element.removeClass(n.cssClass)})),this.$element.addClass(this.rules[e].cssClass),this.currentPlugin&&(!this.currentPlugin.$element.data("zfPlugin")&&this.storezfData&&this.currentPlugin.$element.data("zfPlugin",this.storezfData),this.currentPlugin.destroy()),this._handleMarkup(this.rules[e].cssClass),this.currentRule=this.rules[e],this.currentPlugin=new this.currentRule.plugin(this.$element,this.options),this.storezfData=this.currentPlugin.$element.data("zfPlugin")))}_handleMarkup(e){var t=this,n="accordion",i=r()("[data-tabs-content="+this.$element.attr("id")+"]");if(i.length&&(n="tabs"),n!==e){var o=t.allOptions.linkClass?t.allOptions.linkClass:"tabs-title",s=t.allOptions.panelClass?t.allOptions.panelClass:"tabs-panel";this.$element.removeAttr("role");var l=this.$element.children("."+o+",[data-accordion-item]").removeClass(o).removeClass("accordion-item").removeAttr("data-accordion-item"),u=l.children("a").removeClass("accordion-title");if("tabs"===n?(i=i.children("."+s).removeClass(s).removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby")).children("a").removeAttr("role").removeAttr("aria-controls").removeAttr("aria-selected"):i=l.children("[data-tab-content]").removeClass("accordion-content"),i.css({display:"",visibility:""}),l.css({display:"",visibility:""}),"accordion"===e)i.each((function(e,n){r()(n).appendTo(l.get(e)).addClass("accordion-content").attr("data-tab-content","").removeClass("is-active").css({height:""}),r()("[data-tabs-content="+t.$element.attr("id")+"]").after('<div id="tabs-placeholder-'+t.$element.attr("id")+'"></div>').detach(),l.addClass("accordion-item").attr("data-accordion-item",""),u.addClass("accordion-title")}));else if("tabs"===e){var c=r()("[data-tabs-content="+t.$element.attr("id")+"]"),d=r()("#tabs-placeholder-"+t.$element.attr("id"));d.length?(c=r()('<div class="tabs-content"></div>').insertAfter(d).attr("data-tabs-content",t.$element.attr("id")),d.remove()):c=r()('<div class="tabs-content"></div>').insertAfter(t.$element).attr("data-tabs-content",t.$element.attr("id")),i.each((function(e,t){var n=r()(t).appendTo(c).addClass(s),i=u.get(e).hash.slice(1),o=r()(t).attr("id")||a(6,"accordion");i!==o&&(""!==i?r()(t).attr("id",i):(i=o,r()(t).attr("id",i),r()(u.get(e)).attr("href",r()(u.get(e)).attr("href").replace("#","")+"#"+i))),r()(l.get(e)).hasClass("is-active")&&n.addClass("is-active")})),l.addClass(o)}}}open(){if(this.currentRule&&"function"==typeof this.currentRule.open)return this.currentRule.open(this.currentPlugin,...arguments)}close(){if(this.currentRule&&"function"==typeof this.currentRule.close)return this.currentRule.close(this.currentPlugin,...arguments)}toggle(){if(this.currentRule&&"function"==typeof this.currentRule.toggle)return this.currentRule.toggle(this.currentPlugin,...arguments)}_destroy(){this.currentPlugin&&this.currentPlugin.destroy(),r()(window).off("changed.zf.mediaquery",this._changedZfMediaQueryHandler)}}Se.defaults={},f.addToJquery(r.a),f.rtl=o,f.GetYoDigits=a,f.transitionend=l,f.RegExpEscape=s,f.onLoad=u,f.Box=m,f.onImagesLoaded=y,f.Keyboard=_,f.MediaQuery=d,f.Motion=S,f.Move=T,f.Nest=z,f.Timer=P,N.init(r.a),V.init(r.a,f),d._init(),f.plugin(Y,"Abide"),f.plugin(K,"Accordion"),f.plugin(X,"AccordionMenu"),f.plugin(Z,"Drilldown"),f.plugin(oe,"Dropdown"),f.plugin(ae,"DropdownMenu"),f.plugin(se,"Equalizer"),f.plugin(le,"Interchange"),f.plugin(ce,"Magellan"),f.plugin(de,"OffCanvas"),f.plugin(fe,"Orbit"),f.plugin(pe,"ResponsiveMenu"),f.plugin(me,"ResponsiveToggle"),f.plugin(ge,"Reveal"),f.plugin(ve,"Slider"),f.plugin(ue,"SmoothScroll"),f.plugin(we,"Sticky"),f.plugin(xe,"Tabs"),f.plugin(_e,"Toggler"),f.plugin(Ce,"Tooltip"),f.plugin(Se,"ResponsiveAccordionTabs");var Te=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function a(e){try{l(i.next(e))}catch(e){o(e)}}function s(e){try{l(i.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((i=i.apply(e,t||[])).next())}))};class Oe{constructor(){this.presents={},this.basePath="."}loadPresents(){return Te(this,void 0,void 0,(function*(){n(45).default.forEach(e=>this.presents[e.id]=e),this.password=localStorage.getItem("pw")||"",yield this.updateStates()}))}updateStates(){return Te(this,void 0,void 0,(function*(){(yield this.send(this.basePath+"/presents",{password:this.password})).forEach(e=>{const t=this.presents[e.id];t&&(t.isBought=1===e.isBought,t.version=e.version,t.isMine=!0===e.isMine)})}))}showPresents(){return Te(this,void 0,void 0,(function*(){const e=document.getElementById("present-container"),t=document.getElementById("present-template");t.remove(),t.removeAttribute("id"),yield this.loadPresents(),e.innerText="",Object.values(this.presents).forEach(n=>{const i=t.cloneNode(!0);i.querySelector(".present-image").src=n.image,i.querySelector(".present-name").innerText=n.name,i.querySelector(".present-description").innerHTML=n.description,i.href=n.link;const r=i.querySelector(".present-checkbox");n.isBought&&r.classList.add("checked"),r.addEventListener("click",e=>Te(this,void 0,void 0,(function*(){if(e.preventDefault(),!this.password||n.isBought&&!n.isMine){const e=prompt("Bitte gib ein Passwort ein. Das brauchst du, wenn du das Geschenk wieder bearbeitest:");if(!e)return void alert("Du brauchst ein Passwort.");this.password=e,localStorage.setItem("pw",e)}yield this.setPresentIsBought(n,!n.isBought),n.isBought?r.classList.add("checked"):r.classList.remove("checked")}))),e.appendChild(i)})}))}setPresentIsBought(e,t){return Te(this,void 0,void 0,(function*(){const n=this.basePath+"/setPresent",i={id:e.id,version:e.version,isBought:t,password:this.password},r=yield this.send(n,i);r.present&&r.present.id===e.id&&(e.version=r.present.version,e.isBought=1===r.present.isBought,e.isBought&&(e.isMine=!0)),!1===r.success&&("wrong-version"===r.error?alert("Jemand hat schon vor dir das Geschenk bearbeitet. Bitte versuche es erneut."):"wrong-password"===r.error?(alert("Das Passwort, was du angegeben hast, stimmt nicht."),e.isMine=!1):"no-password"===r.error&&alert("Bitte gib ein Passwort an."))}))}send(e,t){return Te(this,void 0,void 0,(function*(){let n={};return t instanceof FormData||"object"!=typeof t||(t=JSON.stringify(t),n={"Content-Type":"application/json"}),fetch(e,{credentials:"same-origin",method:"POST",headers:n,body:t}).then((function(e){return e.json()})).catch((function(e){return console.error("error",e),{success:!1,errors:["not-online"]}}))}))}}var ze=n(1),Pe=n.n(ze),$e=n(4),Ae=n.n($e),Me=n(2),Le=n.n(Me),Ne=function(e){var t=[],n=null,i=function(){for(var i=arguments.length,r=new Array(i),o=0;o<i;o++)r[o]=arguments[o];t=r,n||(n=requestAnimationFrame((function(){n=null,e.apply(void 0,t)})))};return i.cancel=function(){n&&(cancelAnimationFrame(n),n=null)},i},Ie=n(9),De=n(5),je=(De.domToReact,De.htmlToDOM,De.attributesToProps,De.Element,De);var Re=function(){return(Re=Object.assign||function(e){for(var t,n=1,i=arguments.length;n<i;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)};function Fe(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}Object.create;Object.create;var He=function(){return(He=Object.assign||function(e){for(var t,n=1,i=arguments.length;n<i;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)};var Be=function(){return(Be=Object.assign||function(e){for(var t,n=1,i=arguments.length;n<i;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)};function qe(e){return e}function We(e,t){void 0===t&&(t=qe);var n=[],i=!1;return{read:function(){if(i)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(e){var r=t(e,i);return n.push(r),function(){n=n.filter((function(e){return e!==r}))}},assignSyncMedium:function(e){for(i=!0;n.length;){var t=n;n=[],t.forEach(e)}n={push:function(t){return e(t)},filter:function(){return n}}},assignMedium:function(e){i=!0;var t=[];if(n.length){var r=n;n=[],r.forEach(e),t=n}var o=function(){var n=t;t=[],n.forEach(e)},a=function(){return Promise.resolve().then(o)};a(),n={push:function(e){t.push(e),a()},filter:function(e){return t=t.filter(e),n}}}}}function Ve(e,t){return void 0===t&&(t=qe),We(e,t)}function Ue(e){void 0===e&&(e={});var t=We(null);return t.options=Be({async:!0,ssr:!1},e),t}var Ge=Ue();function Qe(e,t){return n=t,i=function(t){return e.forEach((function(e){return function(e,t){return"function"==typeof e?e(t):e&&(e.current=t),e}(e,t)}))},(r=Object(ze.useState)((function(){return{value:n,callback:i,facade:{get current(){return r.value},set current(e){var t=r.value;t!==e&&(r.value=e,r.callback(e,t))}}}}))[0]).callback=i,r.facade;var n,i,r}var Ye=function(){},Ke=ze.forwardRef((function(e,t){var n=ze.useRef(null),i=ze.useState({onScrollCapture:Ye,onWheelCapture:Ye,onTouchMoveCapture:Ye}),r=i[0],o=i[1],a=e.forwardProps,s=e.children,l=e.className,u=e.removeScrollBar,c=e.enabled,d=e.shards,f=e.sideCar,h=e.noIsolation,p=e.inert,m=e.allowPinchZoom,g=e.as,v=void 0===g?"div":g,y=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noIsolation","inert","allowPinchZoom","as"]),b=f,w=Qe([n,t]),k=He({},y,r);return ze.createElement(ze.Fragment,null,c&&ze.createElement(b,{sideCar:Ge,removeScrollBar:u,shards:d,noIsolation:h,inert:p,setCallbacks:o,allowPinchZoom:!!m,lockRef:n}),a?ze.cloneElement(ze.Children.only(s),He({},k,{ref:w})):ze.createElement(v,He({},k,{className:l,ref:w}),s))}));function Xe(){return(Xe=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}).apply(this,arguments)}Ke.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},Ke.classNames={fullWidth:"width-before-scroll-bar",zeroRight:"right-scroll-bar-position"};var Ze={width:"1px",height:"0px",padding:0,overflow:"hidden",position:"fixed",top:"1px",left:"1px"},Je=function(e){var t=e.children;return ze.createElement(ze.Fragment,null,ze.createElement("div",{key:"guard-first","data-focus-guard":!0,"data-focus-auto-guard":!0,style:Ze}),t,t&&ze.createElement("div",{key:"guard-last","data-focus-guard":!0,"data-focus-auto-guard":!0,style:Ze}))};Je.propTypes={},Je.defaultProps={children:null};var et=Ve({},(function(e){return{target:e.target,currentTarget:e.currentTarget}})),tt=Ve(),nt=Ve(),it=Ue({async:!0}),rt=[],ot=ze.forwardRef((function(e,t){var n,i=ze.useState(),r=i[0],o=i[1],a=ze.useRef(),s=ze.useRef(!1),l=ze.useRef(null),u=e.children,c=e.disabled,d=e.noFocusGuards,f=e.persistentFocus,h=e.crossFrame,p=e.autoFocus,m=(e.allowTextSelection,e.group),g=e.className,v=e.whiteList,y=e.hasPositiveIndices,b=e.shards,w=void 0===b?rt:b,k=e.as,x=void 0===k?"div":k,_=e.lockProps,C=void 0===_?{}:_,E=e.sideCar,S=e.returnFocus,T=e.focusOptions,O=e.onActivation,z=e.onDeactivation,P=ze.useState({})[0],$=ze.useCallback((function(){l.current=l.current||document&&document.activeElement,a.current&&O&&O(a.current),s.current=!0}),[O]),A=ze.useCallback((function(){s.current=!1,z&&z(a.current)}),[z]);Object(ze.useEffect)((function(){c||(l.current=null)}),[]);var M=ze.useCallback((function(e){var t=l.current;if(t&&t.focus){var n="function"==typeof S?S(t):S;if(n){var i="object"==typeof n?n:void 0;l.current=null,e?Promise.resolve().then((function(){return t.focus(i)})):t.focus(i)}}}),[S]),L=ze.useCallback((function(e){s.current&&et.useMedium(e)}),[]),N=tt.useMedium,I=ze.useCallback((function(e){a.current!==e&&(a.current=e,o(e))}),[]);var D=Xe(((n={})["data-focus-lock-disabled"]=c&&"disabled",n["data-focus-lock"]=m,n),C),j=!0!==d,R=j&&"tail"!==d,F=Qe([t,I]);return ze.createElement(ze.Fragment,null,j&&[ze.createElement("div",{key:"guard-first","data-focus-guard":!0,tabIndex:c?-1:0,style:Ze}),y?ze.createElement("div",{key:"guard-nearest","data-focus-guard":!0,tabIndex:c?-1:1,style:Ze}):null],!c&&ze.createElement(E,{id:P,sideCar:it,observed:r,disabled:c,persistentFocus:f,crossFrame:h,autoFocus:p,whiteList:v,shards:w,onActivation:$,onDeactivation:A,returnFocus:M,focusOptions:T}),ze.createElement(x,Xe({ref:F},D,{className:g,onBlur:N,onFocus:L}),u),R&&ze.createElement("div",{"data-focus-guard":!0,tabIndex:c?-1:0,style:Ze}))}));ot.propTypes={},ot.defaultProps={children:void 0,disabled:!1,returnFocus:!1,focusOptions:void 0,noFocusGuards:!1,autoFocus:!0,persistentFocus:!1,crossFrame:!0,hasPositiveIndices:void 0,allowTextSelection:void 0,group:void 0,className:void 0,whiteList:void 0,shards:void 0,as:"div",lockProps:{},onActivation:void 0,onDeactivation:void 0};var at=ot,st=Ue(),lt=ze.forwardRef((function(e,t){var n=ze.useState(!1),i=n[0],r=n[1],o=e.children,a=e.autoFocus,s=e.shards,l=e.enabled,u=void 0===l||l,c=e.scrollLock,d=void 0===c||c,f=e.focusLock,h=void 0===f||f,p=e.returnFocus,m=void 0===p||p,g=e.inert,v=e.allowPinchZoom,y=e.sideCar,b=e.className,w=e.shouldIgnore,k=e.style,x=e.as,_=Fe(e,["children","autoFocus","shards","enabled","scrollLock","focusLock","returnFocus","inert","allowPinchZoom","sideCar","className","shouldIgnore","style","as"]),C=y,E=i.onActivation,S=i.onDeactivation,T=Fe(i,["onActivation","onDeactivation"]);return ze.createElement(ze.Fragment,null,ze.createElement(at,{ref:t,sideCar:y,disabled:!(i&&u&&h),returnFocus:m,autoFocus:a,shards:s,onActivation:E,onDeactivation:S,className:b,as:Ke,whiteList:w,lockProps:Re({},T,{sideCar:y,shards:s,allowPinchZoom:v,as:x,inert:g,style:k,enabled:u&&d})},o),u&&ze.createElement(C,Re({},_,{sideCar:st,setLockProps:r,shards:s})))})),ut=function(e){var t=e.sideCar,n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var i=t.read();if(!i)throw new Error("Sidecar medium not found");return ze.createElement(i,Be({},n))};function ct(e,t){return e.useMedium(t),ut}function dt(e,t){return(dt=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function ft(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,dt(e,t)}ut.isSideCarExport=!0;var ht=function(e,t){return function(n){var i,r=[];function o(){i=e(r.map((function(e){return e.props}))),t(i)}var a,s,l,u=function(e){function t(){return e.apply(this,arguments)||this}ft(t,e),t.peek=function(){return i};var a=t.prototype;return a.componentDidMount=function(){r.push(this),o()},a.componentDidUpdate=function(){o()},a.componentWillUnmount=function(){var e=r.indexOf(this);r.splice(e,1),o()},a.render=function(){return Pe.a.createElement(n,this.props)},t}(ze.PureComponent);return a=u,s="displayName",l="SideEffect("+function(e){return e.displayName||e.name||"Component"}(n)+")",s in a?Object.defineProperty(a,s,{value:l,enumerable:!0,configurable:!0,writable:!0}):a[s]=l,u}},pt=function(e){for(var t=Array(e.length),n=0;n<e.length;++n)t[n]=e[n];return t},mt=function(e){return Array.isArray(e)?e:[e]},gt=function(){return document.activeElement?document.activeElement.shadowRoot?document.activeElement.shadowRoot.activeElement:document.activeElement:void 0},vt=function(e){return e.parentNode?vt(e.parentNode):e},yt=function(e){return mt(e).filter(Boolean).reduce((function(e,t){var n=t.getAttribute("data-focus-lock");return e.push.apply(e,n?function(e){for(var t=new Set,n=e.length,i=0;i<n;i+=1)for(var r=i+1;r<n;r+=1){var o=e[i].compareDocumentPosition(e[r]);(o&Node.DOCUMENT_POSITION_CONTAINED_BY)>0&&t.add(r),(o&Node.DOCUMENT_POSITION_CONTAINS)>0&&t.add(i)}return e.filter((function(e,n){return!t.has(n)}))}(pt(vt(t).querySelectorAll("[".concat("data-focus-lock",'="').concat(n,'"]:not([').concat("data-focus-lock-disabled",'="disabled"])')))):[t]),e}),[])},bt=function(e){return Boolean(pt(e.querySelectorAll("iframe")).some((function(e){return e===document.activeElement})))},wt=function(e){var t=document&&gt();return!(!t||t.dataset&&t.dataset.focusGuard)&&yt(e).reduce((function(e,n){return e||n.contains(t)||bt(n)}),!1)},kt=function(e,t){return!e||e===document||e&&e.nodeType===Node.DOCUMENT_NODE||!function(e){if(e.nodeType!==Node.ELEMENT_NODE)return!1;var t=window.getComputedStyle(e,null);return!(!t||!t.getPropertyValue)&&("none"===t.getPropertyValue("display")||"hidden"===t.getPropertyValue("visibility"))}(e)&&t(e.parentNode&&e.parentNode.nodeType===Node.DOCUMENT_FRAGMENT_NODE?e.parentNode.host:e.parentNode)},xt=function(e,t){var n=e.get(t);if(void 0!==n)return n;var i=kt(t,xt.bind(void 0,e));return e.set(t,i),i},_t=function(e){return e.dataset},Ct=function(e){return"INPUT"===e.tagName},Et=function(e){return Ct(e)&&"radio"===e.type},St=function(e){var t;return Boolean(e&&(null===(t=_t(e))||void 0===t?void 0:t.focusGuard))},Tt=function(e){return!St(e)},Ot=function(e){return Boolean(e)},zt=function(e,t){return Et(e)&&e.name?function(e,t){return t.filter(Et).filter((function(t){return t.name===e.name})).filter((function(e){return e.checked}))[0]||e}(e,t):e},Pt=function(e){return e[0]&&e.length>1?zt(e[0],e):e[0]},$t=function(e,t){return e.length>1?e.indexOf(zt(e[t],e)):t},At=function(e,t,n,i){var r=e.length,o=e[0],a=e[r-1],s=St(n);if(!(n&&e.indexOf(n)>=0)){var l,u,c=void 0!==n?t.indexOf(n):-1,d=i?t.indexOf(i):c,f=i?e.indexOf(i):-1,h=c-d,p=t.indexOf(o),m=t.indexOf(a),g=(l=t,u=new Set,l.forEach((function(e){return u.add(zt(e,l))})),l.filter((function(e){return u.has(e)}))),v=(void 0!==n?g.indexOf(n):-1)-(i?g.indexOf(i):c),y=$t(e,0),b=$t(e,r-1);return-1===c||-1===f?"NEW_FOCUS":!h&&f>=0?f:c<=p&&s&&Math.abs(h)>1?b:c>=m&&s&&Math.abs(h)>1?y:h&&Math.abs(v)>1?f:c<=p?b:c>m?y:h?Math.abs(h)>1?f:(r+f+h)%r:void 0}},Mt=function(e,t){var n=e.tabIndex-t.tabIndex,i=e.index-t.index;if(n){if(!e.tabIndex)return 1;if(!t.tabIndex)return-1}return n||i},Lt=function(e,t,n){return pt(e).map((function(e,t){return{node:e,index:t,tabIndex:n&&-1===e.tabIndex?(e.dataset||{}).focusGuard?0:-1:e.tabIndex}})).filter((function(e){return!t||e.tabIndex>=0})).sort(Mt)},Nt=["button:enabled","select:enabled","textarea:enabled","input:enabled","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[tabindex]","[contenteditable]","[autofocus]"].join(","),It="".concat(Nt,", [data-focus-guard]"),Dt=function(e,t){return e.reduce((function(e,n){return e.concat(pt(n.querySelectorAll(t?It:Nt)),n.parentNode?pt(n.parentNode.querySelectorAll(Nt)).filter((function(e){return e===n})):[])}),[])},jt=function(e,t){return pt(e).filter((function(e){return xt(t,e)})).filter((function(e){return function(e){return!((Ct(e)||function(e){return"BUTTON"===e.tagName}(e))&&("hidden"===e.type||e.disabled)||e.ariaDisabled)}(e)}))},Rt=function(e,t,n){return Lt(jt(Dt(e,n),t),!0,n)},Ft=function(e,t){return Lt(jt(Dt(e),t),!1)},Ht=function(e,t){return jt((n=e.querySelectorAll("[".concat("data-autofocus-inside","]")),pt(n).map((function(e){return Dt([e])})).reduce((function(e,t){return e.concat(t)}),[])),t);var n},Bt=function(e,t){return void 0===t&&(t=[]),t.push(e),e.parentNode&&Bt(e.parentNode,t),t},qt=function(e,t){for(var n=Bt(e),i=Bt(t),r=0;r<n.length;r+=1){var o=n[r];if(i.indexOf(o)>=0)return o}return!1},Wt=function(e,t,n){var i=mt(e),r=mt(t),o=i[0],a=!1;return r.filter(Boolean).forEach((function(e){a=qt(a||e,e)||a,n.filter(Boolean).forEach((function(e){var t=qt(o,e);t&&(a=!a||t.contains(a)?t:qt(t,a))}))})),a},Vt=function(e,t){var n=document&&gt(),i=yt(e).filter(Tt),r=Wt(n||e,e,i),o=new Map,a=Ft(i,o),s=Rt(i,o).filter((function(e){var t=e.node;return Tt(t)}));if(s[0]||(s=a)[0]){var l,u,c,d,f=Ft([r],o).map((function(e){return e.node})),h=(l=f,u=s,c=new Map,u.forEach((function(e){return c.set(e.node,e)})),l.map((function(e){return c.get(e)})).filter(Ot)),p=h.map((function(e){return e.node})),m=At(p,f,n,t);if("NEW_FOCUS"===m){var g=a.map((function(e){return e.node})).filter((d=function(e,t){return e.reduce((function(e,n){return e.concat(Ht(n,t))}),[])}(i,o),function(e){var t;return e.autofocus||!!(null===(t=_t(e))||void 0===t?void 0:t.autofocus)||d.indexOf(e)>=0}));return{node:g&&g.length?Pt(g):Pt(p)}}return void 0===m?m:h[m]}},Ut=0,Gt=!1,Qt=function(e,t,n){void 0===n&&(n={});var i,r,o=Vt(e,t);if(!Gt&&o){if(Ut>2)return console.error("FocusLock: focus-fighting detected. Only one focus management system could be active. See https://github.com/theKashey/focus-lock/#focus-fighting"),Gt=!0,void setTimeout((function(){Gt=!1}),1);Ut++,i=o.node,r=n.focusOptions,"focus"in i&&i.focus(r),"contentWindow"in i&&i.contentWindow&&i.contentWindow.focus(),Ut--}};function Yt(e){var t=window.setImmediate;void 0!==t?t(e):setTimeout(e,1)}var Kt=function(){return document&&document.activeElement===document.body||!!(e=document&&gt())&&pt(document.querySelectorAll("[".concat("data-no-focus-lock","]"))).some((function(t){return t.contains(e)}));var e},Xt=null,Zt=null,Jt=null,en=!1,tn=function(){return!0};function nn(e,t,n,i){var r=null,o=e;do{var a=i[o];if(a.guard)a.node.dataset.focusAutoGuard&&(r=a);else{if(!a.lockItem)break;if(o!==e)return;r=null}}while((o+=n)!==t);r&&(r.node.tabIndex=0)}var rn=function(e){return e&&"current"in e?e.current:e},on=function(){var e,t,n,i,r,o,a,s=!1;if(Xt){var l=Xt,u=l.observed,c=l.persistentFocus,d=l.autoFocus,f=l.shards,h=l.crossFrame,p=l.focusOptions,m=u||Jt&&Jt.portaledElement,g=document&&document.activeElement;if(m){var v=[m].concat(f.map(rn).filter(Boolean));if(g&&!function(e){return(Xt.whiteList||tn)(e)}(g)||(c||(h?Boolean(en):"meanwhile"===en)||!Kt()||!Zt&&d)&&(m&&!(wt(v)||g&&function(e,t){return t.some((function(t){return function e(t,n,i){return n&&(n.host===t&&(!n.activeElement||i.contains(n.activeElement))||n.parentNode&&e(t,n.parentNode,i))}(e,t,t)}))}(g,v)||(a=g,Jt&&Jt.portaledElement===a))&&(document&&!Zt&&g&&!d?(g.blur&&g.blur(),document.body.focus()):(s=Qt(v,Zt,{focusOptions:p}),Jt={})),en=!1,Zt=document&&document.activeElement),document){var y=document&&document.activeElement,b=(t=yt(e=v).filter(Tt),n=Wt(e,e,t),i=new Map,r=Rt([n],i,!0),o=Rt(t,i).filter((function(e){var t=e.node;return Tt(t)})).map((function(e){return e.node})),r.map((function(e){var t=e.node;return{node:t,index:e.index,lockItem:o.indexOf(t)>=0,guard:St(t)}}))),w=b.map((function(e){return e.node})).indexOf(y);w>-1&&(b.filter((function(e){var t=e.guard,n=e.node;return t&&n.dataset.focusAutoGuard})).forEach((function(e){return e.node.removeAttribute("tabIndex")})),nn(w,b.length,1,b),nn(w,-1,-1,b))}}}return s},an=function(e){on()&&e&&(e.stopPropagation(),e.preventDefault())},sn=function(){return Yt(on)},ln=function(e){var t=e.target,n=e.currentTarget;n.contains(t)||(Jt={observerNode:n,portaledElement:t})},un=function(){en="just",setTimeout((function(){en="meanwhile"}),0)};et.assignSyncMedium(ln),tt.assignMedium(sn),nt.assignMedium((function(e){return e({moveFocusInside:Qt,focusInside:wt})}));var cn,dn=ht((function(e){return e.filter((function(e){return!e.disabled}))}),(function(e){var t=e.slice(-1)[0];t&&!Xt&&(document.addEventListener("focusin",an),document.addEventListener("focusout",sn),window.addEventListener("blur",un));var n=Xt,i=n&&t&&t.id===n.id;Xt=t,n&&!i&&(n.onDeactivation(),e.filter((function(e){return e.id===n.id})).length||n.returnFocus(!t)),t?(Zt=null,i&&n.observed===t.observed||t.onActivation(),on(),Yt(on)):(document.removeEventListener("focusin",an),document.removeEventListener("focusout",sn),window.removeEventListener("blur",un),Zt=null)}))((function(){return null}));ct(it,dn);function fn(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=cn||n.nc;return t&&e.setAttribute("nonce",t),e}var hn=function(){var e=0,t=null;return{add:function(n){var i,r;0==e&&(t=fn())&&(r=n,(i=t).styleSheet?i.styleSheet.cssText=r:i.appendChild(document.createTextNode(r)),function(e){(document.head||document.getElementsByTagName("head")[0]).appendChild(e)}(t)),e++},remove:function(){!--e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},pn=function(){var e,t=(e=hn(),function(t){ze.useEffect((function(){return e.add(t),function(){e.remove()}}),[])});return function(e){var n=e.styles;return t(n),null}},mn={left:0,top:0,right:0,gap:0},gn=function(e){return parseInt(e||"",10)||0},vn=function(e){if(void 0===e&&(e="margin"),"undefined"==typeof window)return mn;var t=function(e){var t=window.getComputedStyle(document.body),n=t["padding"===e?"paddingLeft":"marginLeft"],i=t["padding"===e?"paddingTop":"marginTop"],r=t["padding"===e?"paddingRight":"marginRight"];return[gn(n),gn(i),gn(r)]}(e),n=document.documentElement.clientWidth,i=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,i-n+t[2]-t[0])}},yn=pn(),bn=function(e,t,n,i){var r=e.left,o=e.top,a=e.right,s=e.gap;return void 0===n&&(n="margin"),"\n .with-scroll-bars-hidden {\n overflow: hidden "+i+";\n padding-right: "+s+"px "+i+";\n }\n body {\n overflow: hidden "+i+";\n "+[t&&"position: relative "+i+";","margin"===n&&"\n padding-left: "+r+"px;\n padding-top: "+o+"px;\n padding-right: "+a+"px;\n margin-left:0;\n margin-top:0;\n margin-right: "+s+"px "+i+";\n ","padding"===n&&"padding-right: "+s+"px "+i+";"].filter(Boolean).join("")+"\n }\n \n .right-scroll-bar-position {\n right: "+s+"px "+i+";\n }\n \n .width-before-scroll-bar {\n margin-right: "+s+"px "+i+";\n }\n \n .right-scroll-bar-position .right-scroll-bar-position {\n right: 0 "+i+";\n }\n \n .width-before-scroll-bar .width-before-scroll-bar {\n margin-right: 0 "+i+";\n }\n \n body {\n --removed-body-scroll-bar-size: "+s+"px;\n }\n"},wn=function(e){var t=ze.useState(vn(e.gapMode)),n=t[0],i=t[1];ze.useEffect((function(){i(vn(e.gapMode))}),[e.gapMode]);var r=e.noRelative,o=e.noImportant,a=e.gapMode,s=void 0===a?"margin":a;return ze.createElement(yn,{styles:bn(n,!r,s,o?"":"!important")})},kn=function(e,t){var n=t;do{if("undefined"!=typeof ShadowRoot&&n instanceof ShadowRoot&&(n=n.host),xn(e,n)){var i=_n(e,n);if(i[1]>i[2])return!0}n=n.parentNode}while(n&&n!==document.body);return!1},xn=function(e,t){return"v"===e?function(e){var t=window.getComputedStyle(e);return"hidden"!==t.overflowY&&!(t.overflowY===t.overflowX&&"visible"===t.overflowY)}(t):function(e){var t=window.getComputedStyle(e);return"range"===e.type||"hidden"!==t.overflowX&&!(t.overflowY===t.overflowX&&"visible"===t.overflowX)}(t)},_n=function(e,t){return"v"===e?[(n=t).scrollTop,n.scrollHeight,n.clientHeight]:function(e){return[e.scrollLeft,e.scrollWidth,e.clientWidth]}(t);var n},Cn=!1;if("undefined"!=typeof window)try{var En=Object.defineProperty({},"passive",{get:function(){return Cn=!0,!0}});window.addEventListener("test",En,En),window.removeEventListener("test",En,En)}catch(e){Cn=!1}var Sn=!!Cn&&{passive:!1},Tn=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},On=function(e){return[e.deltaX,e.deltaY]},zn=function(e){return e&&"current"in e?e.current:e},Pn=function(e){return"\n .block-interactivity-"+e+" {pointer-events: none;}\n .allow-interactivity-"+e+" {pointer-events: all;}\n"},$n=0,An=[];ct(Ge,(function(e){var t=ze.useRef([]),n=ze.useRef([0,0]),i=ze.useRef(),r=ze.useState($n++)[0],o=ze.useState((function(){return pn()}))[0],a=ze.useRef(e);ze.useEffect((function(){a.current=e}),[e]),ze.useEffect((function(){if(e.inert){document.body.classList.add("block-interactivity-"+r);var t=[e.lockRef.current].concat((e.shards||[]).map(zn)).filter(Boolean);return t.forEach((function(e){return e.classList.add("allow-interactivity-"+r)})),function(){document.body.classList.remove("block-interactivity-"+r),t.forEach((function(e){return e.classList.remove("allow-interactivity-"+r)}))}}}),[e.inert,e.lockRef.current,e.shards]);var s=ze.useCallback((function(e,t){if("touches"in e&&2===e.touches.length)return!a.current.allowPinchZoom;var r,o=Tn(e),s=n.current,l="deltaX"in e?e.deltaX:s[0]-o[0],u="deltaY"in e?e.deltaY:s[1]-o[1],c=e.target,d=Math.abs(l)>Math.abs(u)?"h":"v",f=kn(d,c);if(!f)return!0;if(f?r=d:(r="v"===d?"h":"v",f=kn(d,c)),!f)return!1;if(!i.current&&"changedTouches"in e&&(l||u)&&(i.current=r),!r)return!0;var h=i.current||r;return function(e,t,n,i,r){var o=function(e,t){return"h"===e&&"rtl"===t?-1:1}(e,window.getComputedStyle(t).direction),a=o*i,s=n.target,l=t.contains(s),u=!1,c=a>0,d=0,f=0;do{var h=_n(e,s),p=h[0],m=h[1]-h[2]-o*p;(p||m)&&xn(e,s)&&(d+=m,f+=p),s=s.parentNode}while(!l&&s!==document.body||l&&(t.contains(s)||t===s));return(c&&(r&&0===d||!r&&a>d)||!c&&(r&&0===f||!r&&-a>f))&&(u=!0),u}(h,t,e,"h"===h?l:u,!0)}),[]),l=ze.useCallback((function(e){var n=e;if(An.length&&An[An.length-1]===o){var i="deltaY"in n?On(n):Tn(n),r=t.current.filter((function(e){return e.name===n.type&&e.target===n.target&&(t=e.delta,r=i,t[0]===r[0]&&t[1]===r[1]);var t,r}))[0];if(r&&r.should)n.preventDefault();else if(!r){var l=(a.current.shards||[]).map(zn).filter(Boolean).filter((function(e){return e.contains(n.target)}));(l.length>0?s(n,l[0]):!a.current.noIsolation)&&n.preventDefault()}}}),[]),u=ze.useCallback((function(e,n,i,r){var o={name:e,delta:n,target:i,should:r};t.current.push(o),setTimeout((function(){t.current=t.current.filter((function(e){return e!==o}))}),1)}),[]),c=ze.useCallback((function(e){n.current=Tn(e),i.current=void 0}),[]),d=ze.useCallback((function(t){u(t.type,On(t),t.target,s(t,e.lockRef.current))}),[]),f=ze.useCallback((function(t){u(t.type,Tn(t),t.target,s(t,e.lockRef.current))}),[]);ze.useEffect((function(){return An.push(o),e.setCallbacks({onScrollCapture:d,onWheelCapture:d,onTouchMoveCapture:f}),document.addEventListener("wheel",l,Sn),document.addEventListener("touchmove",l,Sn),document.addEventListener("touchstart",c,Sn),function(){An=An.filter((function(e){return e!==o})),document.removeEventListener("wheel",l,Sn),document.removeEventListener("touchmove",l,Sn),document.removeEventListener("touchstart",c,Sn)}}),[]);var h=e.removeScrollBar,p=e.inert;return ze.createElement(ze.Fragment,null,p?ze.createElement(o,{styles:Pn(r)}):null,h?ze.createElement(wn,{gapMode:"margin"}):null)}));var Mn=new WeakMap,Ln=new WeakMap,Nn={},In=0,Dn=function(e,t,n){void 0===t&&(t=function(e){return"undefined"==typeof document?null:(Array.isArray(e)?e[0]:e).ownerDocument.body}(e)),void 0===n&&(n="data-aria-hidden");var i=Array.isArray(e)?e:[e];Nn[n]||(Nn[n]=new WeakMap);var r=Nn[n],o=[],a=new Set,s=function(e){e&&!a.has(e)&&(a.add(e),s(e.parentNode))};i.forEach(s);var l=function(e){!e||i.indexOf(e)>=0||Array.prototype.forEach.call(e.children,(function(e){if(a.has(e))l(e);else{var t=e.getAttribute("aria-hidden"),i=null!==t&&"false"!==t,s=(Mn.get(e)||0)+1,u=(r.get(e)||0)+1;Mn.set(e,s),r.set(e,u),o.push(e),1===s&&i&&Ln.set(e,!0),1===u&&e.setAttribute(n,"true"),i||e.setAttribute("aria-hidden","true")}}))};return l(t),a.clear(),In++,function(){o.forEach((function(e){var t=Mn.get(e)-1,i=r.get(e)-1;Mn.set(e,t),r.set(e,i),t||(Ln.has(e)||e.removeAttribute("aria-hidden"),Ln.delete(e)),i||e.removeAttribute(n)})),--In||(Mn=new WeakMap,Mn=new WeakMap,Ln=new WeakMap,Nn={})}},jn=pn(),Rn=function(){return ze.createElement(jn,{styles:"\n [data-focus-on-hidden] {\n pointer-events: none !important;\n }\n"})},Fn=function(e){return"current"in e?e.current:e};var Hn=ct(st,(function(e){var t=e.setLockProps,n=e.onEscapeKey,i=e.onClickOutside,r=e.shards,o=e.onActivation,a=e.onDeactivation,s=e.noIsolation,l=Object(ze.useState)(void 0),u=l[0],c=l[1],d=Object(ze.useRef)(null),f=Object(ze.useRef)(0);return ze.useEffect((function(){var e=function(e){e.defaultPrevented||"Escape"!==e.code&&"Escape"!==e.key&&27!==e.keyCode||!n||n(e)},t=function(e){e.defaultPrevented||e.target===d.current||e instanceof MouseEvent&&0!==e.button||r&&r.map(Fn).some((function(t){return t&&t.contains(e.target)||t===e.target}))||i&&i(e)},o=function(e){t(e),f.current=e.touches.length},a=function(e){f.current=e.touches.length};if(u)return document.addEventListener("keydown",e),document.addEventListener("mousedown",t),document.addEventListener("touchstart",o),document.addEventListener("touchend",a),function(){document.removeEventListener("keydown",e),document.removeEventListener("mousedown",t),document.removeEventListener("touchstart",o),document.removeEventListener("touchend",a)}}),[u,i,n]),Object(ze.useEffect)((function(){if(u)return o&&o(u),function(){a&&a()}}),[!!u]),Object(ze.useEffect)((function(){var e=function(){return null},n=!1;return t({onMouseDown:function(e){d.current=e.target},onTouchStart:function(e){d.current=e.target},onActivation:function(t){e=Dn([t].concat((r||[]).map(Fn)),document.body,s?void 0:"data-focus-on-hidden"),c((function(){return t}))},onDeactivation:function(){e(),n||c(null)}}),function(){n=!0,t(!1)}}),[]),ze.createElement(Rn,null)})),Bn=function(e){return ze.createElement(Hn,Re({},e))},qn=ze.forwardRef((function(e,t){return ze.createElement(lt,Re({},e,{ref:t,sideCar:Bn}))})),Wn={fullscreenEnabled:0,fullscreenElement:1,requestFullscreen:2,exitFullscreen:3,fullscreenchange:4,fullscreenerror:5,fullscreen:6},Vn=["webkitFullscreenEnabled","webkitFullscreenElement","webkitRequestFullscreen","webkitExitFullscreen","webkitfullscreenchange","webkitfullscreenerror","-webkit-full-screen"],Un=["mozFullScreenEnabled","mozFullScreenElement","mozRequestFullScreen","mozCancelFullScreen","mozfullscreenchange","mozfullscreenerror","-moz-full-screen"],Gn=["msFullscreenEnabled","msFullscreenElement","msRequestFullscreen","msExitFullscreen","MSFullscreenChange","MSFullscreenError","-ms-fullscreen"],Qn="undefined"!=typeof window&&void 0!==window.document?window.document:{};"fullscreenEnabled"in Qn&&Object.keys(Wn);var Yn=function(e){var t=e.handle,n=e.onChange,i=e.children,r=e.className,o=[];return r&&o.push(r),o.push("fullscreen"),t.active&&o.push("fullscreen-enabled"),Object(ze.useEffect)((function(){n&&n(t.active,t)}),[t.active]),Pe.a.createElement("div",{className:o.join(" "),ref:t.node,style:t.active?{height:"100%",width:"100%"}:void 0},i)},Kn=n(20),Xn=n.n(Kn);function Zn(e,t){if(null==e)return{};var n,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}var Jn=!1,ei=Pe.a.createContext(null),ti=function(e){function t(t,n){var i;i=e.call(this,t,n)||this;var r,o=n&&!n.isMounting?t.enter:t.appear;return i.appearStatus=null,t.in?o?(r="exited",i.appearStatus="entering"):r="entered":r=t.unmountOnExit||t.mountOnEnter?"unmounted":"exited",i.state={status:r},i.nextCallback=null,i}ft(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&"unmounted"===t.status?{status:"exited"}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?"entering"!==n&&"entered"!==n&&(t="entering"):"entering"!==n&&"entered"!==n||(t="exiting")}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,i=this.props.timeout;return e=t=n=i,null!=i&&"number"!=typeof i&&(e=i.exit,t=i.enter,n=void 0!==i.appear?i.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){void 0===e&&(e=!1),null!==t?(this.cancelNextCallback(),"entering"===t?this.performEnter(e):this.performExit()):this.props.unmountOnExit&&"exited"===this.state.status&&this.setState({status:"unmounted"})},n.performEnter=function(e){var t=this,n=this.props.enter,i=this.context?this.context.isMounting:e,r=this.props.nodeRef?[i]:[Ae.a.findDOMNode(this),i],o=r[0],a=r[1],s=this.getTimeouts(),l=i?s.appear:s.enter;!e&&!n||Jn?this.safeSetState({status:"entered"},(function(){t.props.onEntered(o)})):(this.props.onEnter(o,a),this.safeSetState({status:"entering"},(function(){t.props.onEntering(o,a),t.onTransitionEnd(l,(function(){t.safeSetState({status:"entered"},(function(){t.props.onEntered(o,a)}))}))})))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),i=this.props.nodeRef?void 0:Ae.a.findDOMNode(this);t&&!Jn?(this.props.onExit(i),this.safeSetState({status:"exiting"},(function(){e.props.onExiting(i),e.onTransitionEnd(n.exit,(function(){e.safeSetState({status:"exited"},(function(){e.props.onExited(i)}))}))}))):this.safeSetState({status:"exited"},(function(){e.props.onExited(i)}))},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(i){n&&(n=!1,t.nextCallback=null,e(i))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:Ae.a.findDOMNode(this),i=null==e&&!this.props.addEndListener;if(n&&!i){if(this.props.addEndListener){var r=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],o=r[0],a=r[1];this.props.addEndListener(o,a)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if("unmounted"===e)return null;var t=this.props,n=t.children,i=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,Zn(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return Pe.a.createElement(ei.Provider,{value:null},"function"==typeof n?n(e,i):Pe.a.cloneElement(Pe.a.Children.only(n),i))},t}(Pe.a.Component);function ni(){}ti.contextType=ei,ti.propTypes={},ti.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:ni,onEntering:ni,onEntered:ni,onExit:ni,onExiting:ni,onExited:ni},ti.UNMOUNTED="unmounted",ti.EXITED="exited",ti.ENTERING="entering",ti.ENTERED="entered",ti.EXITING="exiting";var ii=ti;function ri(e,t){var n=Object.create(null);return e&&ze.Children.map(e,(function(e){return e})).forEach((function(e){n[e.key]=function(e){return t&&Object(ze.isValidElement)(e)?t(e):e}(e)})),n}function oi(e,t,n){return null!=n[t]?n[t]:e.props[t]}function ai(e,t,n){var i=ri(e.children),r=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var i,r=Object.create(null),o=[];for(var a in e)a in t?o.length&&(r[a]=o,o=[]):o.push(a);var s={};for(var l in t){if(r[l])for(i=0;i<r[l].length;i++){var u=r[l][i];s[r[l][i]]=n(u)}s[l]=n(l)}for(i=0;i<o.length;i++)s[o[i]]=n(o[i]);return s}(t,i);return Object.keys(r).forEach((function(o){var a=r[o];if(Object(ze.isValidElement)(a)){var s=o in t,l=o in i,u=t[o],c=Object(ze.isValidElement)(u)&&!u.props.in;!l||s&&!c?l||!s||c?l&&s&&Object(ze.isValidElement)(u)&&(r[o]=Object(ze.cloneElement)(a,{onExited:n.bind(null,a),in:u.props.in,exit:oi(a,"exit",e),enter:oi(a,"enter",e)})):r[o]=Object(ze.cloneElement)(a,{in:!1}):r[o]=Object(ze.cloneElement)(a,{onExited:n.bind(null,a),in:!0,exit:oi(a,"exit",e),enter:oi(a,"enter",e)})}})),r}var si=Object.values||function(e){return Object.keys(e).map((function(t){return e[t]}))},li=function(e){function t(t,n){var i,r=(i=e.call(this,t,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(i));return i.state={contextValue:{isMounting:!0},handleExited:r,firstRender:!0},i}ft(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,i,r=t.children,o=t.handleExited;return{children:t.firstRender?(n=e,i=o,ri(n.children,(function(e){return Object(ze.cloneElement)(e,{onExited:i.bind(null,e),in:!0,appear:oi(e,"appear",n),enter:oi(e,"enter",n),exit:oi(e,"exit",n)})}))):ai(e,r,o),firstRender:!1}},n.handleExited=function(e,t){var n=ri(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState((function(t){var n=Xe({},t.children);return delete n[e.key],{children:n}})))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,i=Zn(e,["component","childFactory"]),r=this.state.contextValue,o=si(this.state.children).map(n);return delete i.appear,delete i.enter,delete i.exit,null===t?Pe.a.createElement(ei.Provider,{value:r},o):Pe.a.createElement(ei.Provider,{value:r},Pe.a.createElement(t,i,o))},t}(Pe.a.Component);li.propTypes={},li.defaultProps={component:"div",childFactory:function(e){return e}};var ui=li,ci=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},di=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),fi=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},hi=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},pi=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)},mi=function(e,t){var n={};for(var i in e)t.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i]);return n},gi=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},vi=function(e){var t=e.css,n=e.innerRef,i=e.tag,r=mi(e,["css","innerRef","tag"]);return Le()(i,hi({ref:n,css:hi({boxSizing:"border-box"},t)},r))},yi=function(e){return Le()(vi,hi({tag:"button"},e))},bi=function(e){return Le()(vi,hi({tag:"div"},e))},wi=function(e){return Le()(vi,hi({tag:"img"},e))},ki=function(e){return Le()(vi,hi({tag:"nav"},e))},xi=function(e){return Le()(vi,hi({tag:"span"},e))};function _i(e,t){var n=Array.isArray(e)?e:[e];if(t&&"string"==typeof e)for(var i in t)t.hasOwnProperty(i)&&t[i]&&n.push(e+"--"+i);return n.map((function(e){return"react-images__"+e})).join(" ")}function Ci(){try{return document.createEvent("TouchEvent"),!0}catch(e){return!1}}var Ei={Header:"header",Footer:"footer",View:"view",Track:"track",Positioner:"positioner"},Si=Ei.Footer,Ti=function(e){var t=e.size,n=mi(e,["size"]);return Le()("svg",hi({role:"presentation",viewBox:"0 0 24 24",css:{display:"inline-block",fill:"currentColor",height:t,stroke:"currentColor",strokeWidth:0,width:t}},n))},Oi=function(e){var t=e.size,n=void 0===t?32:t,i=mi(e,["size"]);return Le()(Ti,hi({size:n},i),Le()("path",{d:"M15.422 16.078l-1.406 1.406-6-6 6-6 1.406 1.406-4.594 4.594z"}))},zi=function(e){var t=e.size,n=void 0===t?32:t,i=mi(e,["size"]);return Le()(Ti,hi({size:n},i),Le()("path",{d:"M9.984 6l6 6-6 6-1.406-1.406 4.594-4.594-4.594-4.594z"}))},Pi=function(e){var t=e.size,n=void 0===t?32:t,i=mi(e,["size"]);return Le()(Ti,hi({size:n},i),Le()("path",{d:"M18.984 6.422l-5.578 5.578 5.578 5.578-1.406 1.406-5.578-5.578-5.578 5.578-1.406-1.406 5.578-5.578-5.578-5.578 1.406-1.406 5.578 5.578 5.578-5.578z"}))},$i=function(e){var t=e.size,n=void 0===t?32:t,i=mi(e,["size"]);return Le()(Ti,hi({size:n},i),Le()("path",{d:"M14.016 5.016h4.969v4.969h-1.969v-3h-3v-1.969zM17.016 17.016v-3h1.969v4.969h-4.969v-1.969h3zM5.016 9.984v-4.969h4.969v1.969h-3v3h-1.969zM6.984 14.016v3h3v1.969h-4.969v-4.969h1.969z"}))},Ai=function(e){var t=e.size,n=void 0===t?32:t,i=mi(e,["size"]);return Le()(Ti,hi({size:n},i),Le()("path",{d:"M15.984 8.016h3v1.969h-4.969v-4.969h1.969v3zM14.016 18.984v-4.969h4.969v1.969h-3v3h-1.969zM8.016 8.016v-3h1.969v4.969h-4.969v-1.969h3zM5.016 15.984v-1.969h4.969v4.969h-1.969v-3h-3z"}))},Mi=Ei.Header,Li=function(){return{alignItems:"center",background:0,border:0,color:"rgba(255, 255, 255, 0.75)",cursor:"pointer",display:"inline-flex ",height:44,justifyContent:"center",outline:0,padding:0,position:"relative",width:44,"&:hover":{color:"white"}}},Ni=Li,Ii=Li,Di=function(e){var t,n=e.align;return fi(t={alignItems:"center",background:"rgba(255, 255, 255, 0.2)",border:0,borderRadius:"50%",color:"white",cursor:"pointer",display:"flex ",fontSize:"inherit",height:50,justifyContent:"center",marginTop:-25,outline:0,position:"absolute",top:"50%",transition:"background-color 200ms",width:50},n,20),fi(t,"&:hover",{background:"rgba(255, 255, 255, 0.3)"}),fi(t,"&:active",{background:"rgba(255, 255, 255, 0.2)"}),t},ji=Di,Ri=Di;function Fi(e){var t=e.data,n=e.isFullscreen,i=t.source,r=void 0===i?t.src:i;return"string"==typeof r?r:n?r.fullscreen:r.regular}var Hi=Ei.View,Bi={Container:function(e){var t=e.children,n=e.getStyles,i=e.isFullscreen,r=e.isModal,o=e.innerProps;return Le()(bi,hi({css:n("container",e),className:_i("container",{isFullscreen:i,isModal:r})},o),t)},Footer:function(e){var t=e.components,n=e.getStyles,i=e.innerProps,r=e.isFullscreen,o=e.isModal,a=o?{background:"linear-gradient(rgba(0,0,0,0), rgba(0,0,0,0.33))"}:null,s={isFullscreen:r,isModal:o},l={container:_i(Si,s),caption:_i("footer__caption",s),count:_i("footer__count",s)},u={container:n(Si,e),caption:n("footerCaption",e),count:n("footerCount",e)},c=t.Caption,d=t.Count;return Le()(bi,hi({css:u.container,className:l.container,style:a},i),Le()(c,e),Le()(d,e))},FooterCaption:function(e){var t=e.currentView,n=e.getStyles,i=e.isFullscreen,r=e.isModal,o=t.caption,a={isFullscreen:i,isModal:r};return Le()(xi,{css:n("footerCaption",e),className:_i("footer__caption",a)},"string"==typeof o?je("<span>"+o+"</span>"):o)},FooterCount:function(e){var t=e.currentIndex,n=e.getStyles,i={isFullscreen:e.isFullscreen,isModal:e.isModal},r=t+1,o=e.views.length;return r&&o?Le()(xi,{css:n("footerCount",e),className:_i("footer__count",i)},r," of ",o):null},Header:function(e){var t=e.components,n=e.getStyles,i=e.getCloseLabel,r=e.getFullscreenLabel,o=e.innerProps,a=e.isModal,s=e.modalProps;if(!a)return null;var l=s.allowFullscreen,u=s.isFullscreen,c=s.onClose,d=s.toggleFullscreen,f=u?Ai:$i,h=t.CloseButton,p=t.FullscreenButton,m={isFullscreen:u,isModal:a};return Le()(bi,hi({css:n(Mi,e),className:_i(Mi,m),style:{background:"linear-gradient(rgba(0,0,0,0.33), rgba(0,0,0,0))"}},o),Le()("span",null),Le()("span",null,l?Le()(p,{getStyles:n,innerProps:{onClick:d,title:r(m)}},Le()(f,{size:32})):null,Le()(h,{getStyles:n,innerProps:{onClick:c,title:i(m)}},Le()(Pi,{size:32}))))},HeaderClose:function(e){var t=e.children,n=e.getStyles,i=e.innerProps;return Le()(yi,hi({css:n("headerClose",e),className:_i(["header_button","header_button--close"]),type:"button"},i),t)},HeaderFullscreen:function(e){var t=e.children,n=e.getStyles,i=e.innerProps;return Le()(yi,hi({css:n("headerFullscreen",e),className:_i(["header_button","header_button--fullscreen"]),type:"button"},i),t)},Navigation:function(e){var t=e.children,n=e.getStyles,i=e.isFullscreen,r=e.isModal,o=e.showNavigationOnTouchDevice;return!Ci()||Ci()&&o?Le()(ki,{css:n("navigation",e),className:_i("navigation",{isFullscreen:i,isModal:r})},t):null},NavigationPrev:function(e){var t=e.children,n=void 0===t?Le()(Oi,{size:48}):t,i=e.getStyles,r=e.innerProps;return Le()(yi,hi({type:"button",css:i("navigationPrev",e)},r),n)},NavigationNext:function(e){var t=e.children,n=void 0===t?Le()(zi,{size:48}):t,i=e.getStyles,r=e.innerProps;return Le()(yi,hi({type:"button",css:i("navigationNext",e)},r),n)},View:function(e){var t=e.data,n=e.formatters,i=e.getStyles,r=e.index,o=e.isFullscreen,a=e.isModal,s={alt:n.getAltText({data:t,index:r}),src:Fi({data:t,isFullscreen:o})};return Le()(bi,{css:i(Hi,e),className:_i(Hi,{isFullscreen:o,isModal:a})},Le()(wi,hi({},s,{className:_i("view-image",{isFullscreen:o,isModal:a}),css:{height:"auto",maxHeight:"100vh",maxWidth:"100%",userSelect:"none"}})))}},qi={Blanket:function(e){var t=e.getStyles,n=e.innerProps,i=e.isFullscreen;return Le()(bi,hi({css:t("blanket",e),className:_i("blanket",{isFullscreen:i})},n))},Positioner:function(e){var t=e.children,n=e.getStyles,i=e.innerProps,r=e.isFullscreen;return Le()(bi,hi({css:n(Ei.Positioner,e),className:_i(Ei.Positioner,{isFullscreen:r})},i),t)},Dialog:function(e){var t=e.children,n=e.getStyles,i=e.innerProps,r=e.isFullscreen;return e.removeFocusOn?Le()(bi,hi({css:n("dialog",e),className:_i("dialog",{isFullscreen:r})},i),t):Le()(qn,null,Le()(bi,hi({css:n("dialog",e),className:_i("dialog",{isFullscreen:r})},i),t))}},Wi={container:function(e){return{backgroundColor:e.isFullscreen?"black":null,display:"flex ",flexDirection:"column",height:"100%"}},footer:function(e){var t=e.isModal,n=e.interactionIsIdle;return fi({alignItems:"top",bottom:t?0:null,color:t?"rgba(255, 255, 255, 0.9)":"#666",display:"flex ",flex:"0 0 auto",fontSize:13,justifyContent:"space-between",left:t?0:null,opacity:n&&t?0:1,padding:t?"30px 20px 20px":"10px 0",position:t?"absolute":null,right:t?0:null,transform:t?"translateY("+(n?10:0)+"px)":null,transition:"opacity 300ms, transform 300ms",zIndex:t?1:null,"& *:focus":{outline:"1.5px solid orange"}},"@media (max-width: 769px)",{padding:t?"20px 15px 15px":"5px 0"})},footerCaption:function(){return{}},footerCount:function(){return{flexShrink:0,marginLeft:"1em"}},header:function(e){var t=e.interactionIsIdle;return{alignItems:"center",display:"flex ",flex:"0 0 auto",justifyContent:"space-between",opacity:t?0:1,padding:10,paddingBottom:20,position:"absolute",transform:"translateY("+(t?-10:0)+"px)",transition:"opacity 300ms, transform 300ms",top:0,left:0,right:0,zIndex:1,"& *:focus":{outline:"1.5px solid orange"}}},headerClose:Ii,headerFullscreen:Ni,navigation:function(e){return{display:"flex ",alignItems:"center",justifyContent:"space-between",opacity:e.interactionIsIdle?0:1,transition:"opacity 300ms","& *:focus":{outline:"1.5px solid orange"}}},navigationPrev:ji,navigationNext:Ri,view:function(){return{lineHeight:0,position:"relative",textAlign:"center"}}},Vi={blanket:function(e){return{backgroundColor:e.isFullscreen?"black":"rgba(0, 0, 0, 0.8)",bottom:0,left:0,position:"fixed",right:0,top:0,zIndex:1199}},dialog:function(){return{width:"100%"}},positioner:function(){return{alignItems:"center",bottom:0,display:"flex ",justifyContent:"center",left:0,position:"fixed",right:0,top:0,zIndex:1200}}},Ui="cubic-bezier(0.23, 1, 0.32, 1)",Gi=function(e){var t=e.component,n=e.onEntered,i=e.onExited,r=e.in,o=e.innerProps,a=mi(e,["component","onEntered","onExited","in","innerProps"]),s={transition:"opacity 200ms",opacity:0},l={entering:{opacity:0},entered:{opacity:1},exiting:{opacity:0,transitionDuration:"500ms"}};return Pe.a.createElement(ii,{appear:!0,mountOnEnter:!0,unmountOnExit:!0,onEntered:n,onExited:i,key:"fade",in:r,timeout:{enter:300,exit:500}},(function(e){var n=hi({},o,{style:hi({},s,l[e])});return"exited"===e?null:Pe.a.createElement(t,hi({innerProps:n},a))}))},Qi=function(e){var t=e.component,n=e.onEntered,i=e.onExited,r=e.in,o=e.innerProps,a=mi(e,["component","onEntered","onExited","in","innerProps"]),s={transition:"transform 300ms "+Ui+", opacity 300ms "+Ui,transform:"translate3d(0, 0, 0)"},l={entering:{opacity:0,transform:"translate3d(0, 40px, 0) scale(0.9)"},entered:{opacity:1,transform:"translate3d(0, 0, 0)"},exiting:{opacity:0,transform:"translate3d(0, 40px, 0) scale(0.9)",transition:"transform 500ms "+Ui+", opacity 500ms "+Ui}};return Pe.a.createElement(ii,{appear:!0,in:r,mountOnEnter:!0,onEntered:n,onExited:i,timeout:{enter:300,exit:500},unmountOnExit:!0},(function(e){if("exited"===e)return null;var n=hi({},o,{style:hi({},s,l[e])});return Pe.a.createElement(t,hi({innerProps:n},a))}))},Yi={allowFullscreen:!Ci(),closeOnBackdropClick:!0,closeOnEsc:!0,preventScroll:!0,styles:{}},Ki=new Set([Ei.View,Ei.Header,Ei.Footer,Ei.Track,Ei.Positioner].map(_i)),Xi=function(e){function t(e){ci(this,t);var n=gi(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return Zi.call(n),n.cacheComponents(e.components),n.state={isFullscreen:!1,isClosing:!1},n}return pi(t,e),di(t,[{key:"componentDidUpdate",value:function(e){e.components!==this.props.components&&this.cacheComponents(e.components)}},{key:"getCommonProps",value:function(){var e=this.state.isFullscreen;return{getStyles:this.getStyles,isFullscreen:e,modalProps:this.props}}},{key:"render",value:function(){var e=this.components,t=e.Blanket,n=e.Positioner,i=e.Dialog,r=this.props,o=r.allowFullscreen,a=r.children,s=this.state.isFullscreen,l=this.commonProps=this.getCommonProps(),u=this.props.in,c={allowFullscreen:o,isFullscreen:s,onClose:this.handleClose,preventScroll:this.preventScroll,toggleFullscreen:this.toggleFullscreen},d=Object(ze.cloneElement)(a,{isModal:!0,modalProps:c});return Le()(Yn,{handle:{active:s},onChange:this.handleFullscreenChange},Le()(Gi,hi({},l,{component:t,in:u})),Le()(Qi,hi({},l,{component:n,in:u,innerProps:{onClick:this.state.isClosing?null:this.handleBackdropClick},onEntered:this.modalDidMount,onExited:this.modalWillUnmount}),Le()(i,hi({removeFocusOn:this.state.isClosing},l),d)))}}]),t}(ze.Component);Xi.defaultProps=Yi;var Zi=function(){var e=this;this.modalDidMount=function(){document.addEventListener("keyup",e.handleKeyUp),Xn.a.storeFocus()},this.modalWillUnmount=function(){document.removeEventListener("keyup",e.handleKeyUp),Xn.a.restoreFocus(),e.setState({isClosing:!1})},this.cacheComponents=function(t){e.components=hi({},qi,t)},this.handleFullscreenChange=function(t){e.setState({isFullscreen:t})},this.handleKeyUp=function(t){var n=e.props,i=n.allowFullscreen,r=n.closeOnEsc,o=e.state.isFullscreen,a="Escape"===t.key&&r&&!o;i&&"f"===t.key&&e.toggleFullscreen(),a&&e.handleClose(t)},this.handleBackdropClick=function(t){var n=!1,i=!0,r=!1,o=void 0;try{for(var a,s=t.target.classList[Symbol.iterator]();!(i=(a=s.next()).done);i=!0){var l=a.value;Ki.has(l)&&(n=!0)}}catch(e){r=!0,o=e}finally{try{!i&&s.return&&s.return()}finally{if(r)throw o}}n&&e.props.closeOnBackdropClick&&e.handleClose(t)},this.toggleFullscreen=function(){e.setState((function(e){return{isFullscreen:!e.isFullscreen}}))},this.handleClose=function(t){var n=e.props.onClose,i=e.state,r=i.isFullscreen;i.isClosing||(e.setState({isClosing:!0}),r&&e.toggleFullscreen(),n(t))},this.getStyles=function(t,n){var i=Vi[t](n);i.boxSizing="border-box";var r=e.props.styles[t];return r?r(i,n):i}};var Ji={flex:"1 1 auto",position:"relative"},er={outline:0},tr={currentIndex:0,formatters:{getAltText:function(e){var t=e.data,n=e.index;return t.alt?("string"!=typeof t.alt&&console.error("Image "+(n+1)+" had a non-string alt property, which will probably render incorrectly.\nInstead of a plain string it was ",t.alt),t.alt):t.caption?("string"!=typeof t.caption&&console.warn("Image "+(n+1)+" has a non-string caption, but no alt value provided. This will probably make the alt prop unintelligible for screen readers. Is this intentional?"),t.caption):"Image "+(n+1)},getNextLabel:function(e){return"Show slide "+(e.currentIndex+2)+" of "+e.views.length},getPrevLabel:function(e){return"Show slide "+e.currentIndex+" of "+e.views.length},getNextTitle:function(e){return"Next (right arrow)"},getPrevTitle:function(e){return"Previous (left arrow)"},getCloseLabel:function(e){return"Close (esc)"},getFullscreenLabel:function(e){return e.isFullscreen?"Exit fullscreen (f)":"Enter fullscreen (f)"}},hideControlsWhenIdle:3e3,showNavigationOnTouchDevice:!1,styles:{},trackProps:{instant:!Ci(),swipe:"touch"}},nr=Ei.Track,ir=function(e){function t(e){ci(this,t);var n=gi(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return rr.call(n),n.cacheComponents(e.components),n.state={currentIndex:e.currentIndex,interactionIsIdle:Ci()},n}return pi(t,e),di(t,[{key:"componentDidMount",value:function(){var e=this.props,t=e.hideControlsWhenIdle,n=e.modalProps,i=Boolean(n);this.mounted=!0,t&&this.container&&(this.container.addEventListener("mousedown",this.handleMouseActivity),this.container.addEventListener("mousemove",this.handleMouseActivity),this.container.addEventListener("touchmove",this.handleMouseActivity)),i&&this.focusViewFrame()}},{key:"componentDidUpdate",value:function(e){e.components!==this.props.components&&this.cacheComponents(e.components),this.props.currentIndex!==e.currentIndex&&this.setState({currentIndex:this.props.currentIndex})}},{key:"componentWillUnmount",value:function(){this.mounted=!1,this.props.hideControlsWhenIdle&&this.container&&(this.container.removeEventListener("mousedown",this.handleMouseActivity),this.container.removeEventListener("mousemove",this.handleMouseActivity),this.container.removeEventListener("touchmove",this.handleMouseActivity),this.handleMouseActivity.cancel())}},{key:"getCommonProps",value:function(){var e=this.props,t=e.frameProps,n=e.trackProps,i=e.modalProps,r=e.views,o=e.showNavigationOnTouchDevice,a=Boolean(i),s=Boolean(i&&i.isFullscreen),l=this.state,u=l.currentIndex,c=l.interactionIsIdle,d=this.getViewData();return{carouselProps:this.props,currentIndex:u,currentView:d,formatters:this.props.formatters,frameProps:t,getStyles:this.getStyles,showNavigationOnTouchDevice:o,isFullscreen:s,isModal:a,modalProps:i,interactionIsIdle:c,trackProps:n,views:r}}},{key:"render",value:function(){var e=this.components,t=e.Container,n=e.View,i=this.state.currentIndex,r=this.props,o=r.frameProps,a=r.views,s=this.commonProps=this.getCommonProps();return Le()(t,hi({},s,{innerProps:{innerRef:this.getContainer}}),this.renderHeader(),Le()(Ie.ViewPager,{tag:"main",style:Ji,className:_i("pager")},Le()(Ie.Frame,hi({},o,{ref:this.getFrame,className:_i("frame"),style:er,tabIndex:"-1"}),Le()(Ie.Track,hi({},this.getTrackProps(this.props),{style:{display:"flex",alignItems:"center"},currentView:i,className:_i(nr),onViewChange:this.handleViewChange,ref:this.getTrack}),a&&a.map((function(e,t){return Le()(Ie.View,{className:_i("view-wrapper"),key:t},Le()(n,hi({},s,{data:e,index:t})))})))),this.renderNavigation()),this.renderFooter())}}]),t}(ze.Component);ir.defaultProps=tr;var rr=function(){var e=this;this.mounted=!1,this.cacheComponents=function(t){e.components=hi({},Bi,t)},this.getContainer=function(t){e.container=t},this.getFooter=function(t){e.footer=t},this.getFrame=function(t){e.frame=Object($e.findDOMNode)(t)},this.getHeader=function(t){e.header=t},this.getTrack=function(t){e.track=t},this.hasPreviousView=function(){var t=e.props.trackProps,n=e.state.currentIndex;return t.infinite||0!==n},this.hasNextView=function(){var t=e.props,n=t.trackProps,i=t.views,r=e.state.currentIndex;return n.infinite||r!==i.length-1},this.getStyles=function(t,n){var i=Wi[t](n);i.boxSizing="border-box";var r=e.props.styles[t];return r?r(i,n):i},this.getTrackProps=function(e){return hi({},tr.trackProps,e.trackProps)},this.getFormatters=function(){return hi({},tr.formatters,e.props.formatters)},this.getViewData=function(){return e.props.views[e.state.currentIndex]},this.focusViewFrame=function(){e.frame&&document.activeElement!==e.frame&&e.frame.focus()},this.prev=function(t){t.stopPropagation(),e.track.prev(),e.focusViewFrame()},this.next=function(t){t.stopPropagation(),e.track.next(),e.focusViewFrame()},this.handleMouseActivity=Ne((function(){clearTimeout(e.timer),e.state.interactionIsIdle&&e.setState({interactionIsIdle:!1}),e.timer=setTimeout((function(){e.mounted&&e.setState({interactionIsIdle:!0})}),e.props.hideControlsWhenIdle)})),this.handleViewChange=function(t){var n=e.props.trackProps,i=t[0];e.setState({currentIndex:i}),n&&n.onViewChange&&n.onViewChange(i)},this.renderNavigation=function(){var t=e.getFormatters(),n=t.getNextLabel,i=t.getPrevLabel,r=t.getNextTitle,o=t.getPrevTitle,a=e.components,s=a.Navigation,l=a.NavigationPrev,u=a.NavigationNext,c=e.commonProps,d=e.hasPreviousView(),f=e.hasNextView();return(d||f)&&s?Le()(s,c,d&&Le()(l,hi({},c,{align:"left",innerProps:{"aria-label":i(c),onClick:e.prev,title:o(c)}})),f&&Le()(u,hi({},c,{align:"right",innerProps:{"aria-label":n(c),onClick:e.next,title:r(c)}}))):null},this.renderFooter=function(){var t=e.components,n=t.Footer,i=t.FooterCaption,r=t.FooterCount,o=e.commonProps;return n?Le()(n,hi({},o,{components:{Caption:i,Count:r},innerProps:{innerRef:e.getFooter}})):null},this.renderHeader=function(){var t=e.components,n=t.Header,i=t.HeaderClose,r=t.HeaderFullscreen,o=e.getFormatters(),a=o.getCloseLabel,s=o.getFullscreenLabel,l=e.commonProps;return n?Le()(n,hi({},l,{getCloseLabel:a,getFullscreenLabel:s,components:{CloseButton:i,FullscreenButton:r},data:e.getViewData(),innerProps:{innerRef:e.getHeader}})):null}},or=function(e){var t=e.children;return ze.Children.toArray(t)[0]||null},ar=function(e){function t(){return ci(this,t),gi(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return pi(t,e),di(t,[{key:"render",value:function(){if("undefined"==typeof window)return null;var e=this.props,t=e.target,n=e.children;return Object($e.createPortal)(Pe.a.createElement(ui,{component:or,children:n}),t)}}]),t}(ze.Component);ar.defaultProps={target:"undefined"!=typeof window?document.body:null};var sr=ir;const lr=[{src:n(134).default,width:3024,height:4032},{src:n(135).default,width:4928,height:3264},{src:n(136).default,width:4928,height:3264},{src:n(137).default,width:3264,height:4928},{src:n(138).default,width:3264,height:4928},{src:n(139).default,width:4928,height:3264},{src:n(140).default,width:3264,height:4928},{src:n(141).default,width:4928,height:3264},{src:n(142).default,width:4928,height:3264},{src:n(143).default,width:4928,height:3264},{src:n(144).default,width:3299,height:2209},{src:n(145).default,width:2592,height:3872},{src:n(146).default,width:3872,height:2592},{src:n(147).default,width:3872,height:2592},{src:n(148).default,width:3872,height:2592},{src:n(149).default,width:3872,height:2592}];var ur=n(3),cr=n.n(ur),dr=n(19);function fr(){return(fr=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}).apply(this,arguments)}function hr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function pr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?hr(Object(n),!0).forEach((function(t){mr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function mr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var gr={cursor:"pointer"},vr=function(e){var t=e.index,n=e.onClick,i=e.photo,r=e.margin,o=e.direction,a=e.top,s=e.left,l=e.key,u={margin:r,display:"block"};u.width=i.width+"px",u.height=i.height+"px","column"===o&&(u.position="absolute",u.left=s,u.top=a);return Pe.a.createElement("img",fr({key:l,style:n?pr(pr({},u),gr):u},i,{onClick:n?function(e){n(e,{photo:i,index:t})}:null}))},yr=cr.a.shape({key:cr.a.string,src:cr.a.string.isRequired,width:cr.a.number.isRequired,height:cr.a.number.isRequired,alt:cr.a.string,title:cr.a.string,srcSet:cr.a.oneOfType([cr.a.string,cr.a.array]),sizes:cr.a.oneOfType([cr.a.string,cr.a.array])});vr.propTypes={index:cr.a.number.isRequired,onClick:cr.a.func,photo:yr.isRequired,margin:cr.a.number,top:function(e){if("column"===e.direction&&"number"!=typeof e.top)return new Error("top is a required number when direction is set to `column`")},left:function(e){if("column"===e.direction&&"number"!=typeof e.left)return new Error("left is a required number when direction is set to `column`")},direction:cr.a.string};var br=vr,wr=function(e,t){return t||(t=0),Number(Math.round(e+"e"+t)+"e-"+t)};function kr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function xr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?kr(Object(n),!0).forEach((function(t){_r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):kr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Cr=function(e){var t=e.width,n=e.height;return wr(t/n,2)};function Er(e){this.content=[],this.scoreFunction=e}Er.prototype={push:function(e){this.content.push(e),this.bubbleUp(this.content.length-1)},pop:function(){var e=this.content[0],t=this.content.pop();return this.content.length>0&&(this.content[0]=t,this.sinkDown(0)),e},remove:function(e){for(var t=this.content.length,n=0;n<t;n++)if(this.content[n]==e){var i=this.content.pop();if(n==t-1)break;this.content[n]=i,this.bubbleUp(n),this.sinkDown(n);break}},size:function(){return this.content.length},bubbleUp:function(e){for(var t=this.content[e],n=this.scoreFunction(t);e>0;){var i=Math.floor((e+1)/2)-1,r=this.content[i];if(n>=this.scoreFunction(r))break;this.content[i]=t,this.content[e]=r,e=i}},sinkDown:function(e){for(var t=this.content.length,n=this.content[e],i=this.scoreFunction(n);;){var r=2*(e+1),o=r-1,a=null;if(o<t){var s=this.content[o],l=this.scoreFunction(s);l<i&&(a=o)}if(r<t){var u=this.content[r];this.scoreFunction(u)<(null==a?i:l)&&(a=r)}if(null==a)break;this.content[e]=this.content[a],this.content[a]=n,e=a}}};var Sr=function(e,t,n){return function(e,t){for(var n=[],i=t;i;)n.push(i),e[i],i=e[i];return n.reverse()}(function(e,t,n){var i={},r={},o={};o[t]=0;var a=new Er((function(e){return e.weight}));for(a.push({id:t,weight:0});a.size();){var s=a.pop(),l=s.id;if(!r[l]){var u=e(l)||{};for(var c in r[l]=1,u){var d=s.weight+u[c];(void 0===o[c]||o[c]>d)&&(o[c]=d,a.push({id:c,weight:d}),i[c]=l)}}}if(void 0===o[n])throw new Error("There is no path from ".concat(t," to ").concat(n));return i}(e,t,n),n)},Tr=function(e,t,n){return(t-e.length*(2*n))/e.reduce((function(e,t){return e+Cr(t)}),0)},Or=function(e,t,n,i,r,o){var a=e.slice(t,n),s=Tr(a,i,o);return Math.pow(Math.abs(s-r),2)},zr=function(e){var t=e.containerWidth,n=e.limitNodeSearch,i=e.targetRowHeight,r=e.margin,o=e.photos,a=function(e,t,n,i,r){return function(o){var a={};a[+(o=+o)]=0;for(var s=o+1;s<n.length+1&&!(s-o>i);++s)a[s.toString()]=Or(n,o,s,t,e,r);return a}}(i,t,o,n,r),s=Sr(a,"0",o.length);s=s.map((function(e){return+e}));for(var l=1;l<s.length;++l)for(var u=o.slice(s[l-1],s[l]),c=Tr(u,t,r),d=s[l-1];d<s[l];++d)o[d].width=wr(c*Cr(o[d]),1),o[d].height=c;return o},Pr=["left","top","containerHeight"];function $r(e,t){if(null==e)return{};var n,i,r=function(e,t){if(null==e)return{};var n,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function Ar(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var i,r,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(i=n.next()).done)&&(o.push(i.value),!t||o.length!==t);a=!0);}catch(e){s=!0,r=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw r}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Mr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Mr(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Mr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}var Lr=Pe.a.memo((function(e){var t=e.photos,n=e.onClick,i=e.direction,r=e.margin,o=e.limitNodeSearch,a=e.targetRowHeight,s=e.columns,l=e.renderImage,u=Ar(Object(ze.useState)(0),2),c=u[0],d=u[1],f=Object(ze.useRef)(null);Object(ze.useLayoutEffect)((function(){var e=null,t=new dr.default((function(t){var n=t[0].contentRect.width;c!==n&&(e=window.requestAnimationFrame((function(){d(Math.floor(n))})))}));return t.observe(f.current),function(){t.disconnect(),window.cancelAnimationFrame(e)}}));var h=function(e,i){var r=i.index;n(e,{index:r,photo:t[r],previous:t[r-1]||null,next:t[r+1]||null})};if(!c)return Pe.a.createElement("div",{ref:f}," ");var p,m,g=c-1;"row"===i&&("function"==typeof o&&(o=o(c)),"function"==typeof a&&(a=a(c)),void 0===o&&(o=2,c>=450&&(o=function(e){var t=e.targetRowHeight,n=e.containerWidth;return wr(n/t/1.5)+8}({containerWidth:c,targetRowHeight:a}))),p={display:"flex",flexWrap:"wrap",flexDirection:"row"},m=zr({containerWidth:g,limitNodeSearch:o,targetRowHeight:a,margin:r,photos:t})),"column"===i&&("function"==typeof s&&(s=s(c)),void 0===s&&(s=1,c>=500&&(s=2),c>=900&&(s=3),c>=1500&&(s=4)),p={position:"relative"},m=function(e){for(var t=e.photos,n=e.columns,i=e.containerWidth,r=e.margin,o=(i-2*r*n)/n,a=t.map((function(e){var t=e.height/e.width*o;return xr(xr({},e),{},{width:wr(o,1),height:wr(t,1)})})),s=[],l=[],u=0;u<n;u++)s[u]=wr(u*(o+2*r),1),l[u]=0;return a.map((function(e){var t=l.reduce((function(e,t,n){return e=t<l[e]?n:e}),0);e.top=l[t],e.left=s[t],l[t]=l[t]+e.height+2*r;var n=l.reduce((function(e,t,n){return e=t>l[e]?n:e}),0);return e.containerHeight=l[n],e}))}({containerWidth:g,columns:s,margin:r,photos:t}),p.height=m[m.length-1].containerHeight);var v=l||br;return Pe.a.createElement("div",{className:"react-photo-gallery--gallery"},Pe.a.createElement("div",{ref:f,style:p},m.map((function(e,t){var o=e.left,a=e.top,s=e.containerHeight,l=$r(e,Pr);return v({left:o,top:a,key:e.key||e.src,containerHeight:s,index:t,margin:r,direction:i,onClick:n?h:null,photo:l})}))))}));Lr.propTypes={photos:cr.a.arrayOf(yr).isRequired,direction:cr.a.string,onClick:cr.a.func,columns:cr.a.oneOfType([cr.a.func,cr.a.number]),targetRowHeight:cr.a.oneOfType([cr.a.func,cr.a.number]),limitNodeSearch:cr.a.oneOfType([cr.a.func,cr.a.number]),margin:cr.a.number,renderImage:cr.a.func},Lr.defaultProps={margin:2,direction:"row",targetRowHeight:300};var Nr=Lr;const Ir=ze.memo((function({photos:e=lr}){const[t,n]=Object(ze.useState)(0),[i,r]=Object(ze.useState)(!1),o=Object(ze.useCallback)((e,{photo:t,index:i})=>{n(i),r(!0)},[]);return ze.createElement("div",null,ze.createElement(Nr,{photos:e,onClick:o}),ze.createElement(ar,null,i?ze.createElement(Xi,{onClose:()=>{n(0),r(!1)}},ze.createElement(sr,{currentIndex:t,views:e.map(e=>Object.assign(Object.assign({},e),{source:e.src}))})):null))}));var Dr=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function a(e){try{l(i.next(e))}catch(e){o(e)}}function s(e){try{l(i.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((i=i.apply(e,t||[])).next())}))};var jr=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function a(e){try{l(i.next(e))}catch(e){o(e)}}function s(e){try{l(i.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((i=i.apply(e,t||[])).next())}))};var Rr=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function a(e){try{l(i.next(e))}catch(e){o(e)}}function s(e){try{l(i.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((i=i.apply(e,t||[])).next())}))};const Fr={home:n(150),unterkunft:n(151),tagesablauf:n(153),geschenke:n(156),standesamt:n(157),fotobox:n(158),hochzeitsfotos:n(159)},Hr={home:n(160).default,unterkunft:n(37).default,tagesablauf:null,geschenke:n(38).default,standesamt:null,fotobox:null,hochzeitsfotos:null},Br={home:()=>{},unterkunft:()=>{},tagesablauf:()=>{let e="godi",t=null,n=!1;const i=document.getElementById("modal");i.onclick=()=>{i.classList.remove("show")};const r=document.getElementById("info-image-container");r.querySelectorAll(".circler").forEach(t=>{t.addEventListener("click",()=>{e=t.dataset.state,r.dataset.state=e,n=!0;const o=document.querySelector(".anchor[data-state='"+e+"']");o.scrollIntoView({behavior:"smooth",block:"start"}),Foundation.MediaQuery.only("small")&&(i.innerText="",i.appendChild(o.cloneNode(!0)),i.classList.add("show"))})});const o=document.querySelector(".top-bar"),a=document.querySelectorAll(".anchor"),s=o.clientHeight+50,l=new IntersectionObserver(t=>{t.some(t=>{t.isIntersecting||t.intersectionRect.top!==s||n||(e=t.target.dataset.state)})},{threshold:1,rootMargin:"-"+s+"px 0px 0px 0px"}),u=new IntersectionObserver(t=>{t.some(t=>{t.isIntersecting&&t.intersectionRect.top===o.clientHeight&&!n&&(e=t.target.dataset.state)})},{threshold:.1});a.forEach(e=>{l.observe(e),u.observe(e)}),document.querySelector("#info-image-container + .site-content").addEventListener("scroll",i=>{clearTimeout(t),t=setTimeout(()=>{t=null,r.dataset.state=e,n=!1,console.log("stopped scrolling")},50)})},geschenke:()=>Rr(void 0,void 0,void 0,(function*(){return yield(new Oe).showPresents()})),standesamt:function(){Ae.a.render(Pe.a.createElement(Ir,null),document.getElementById("gallery"))},fotobox:function(){return Dr(this,void 0,void 0,(function*(){const e=yield fetch("/bilder/fotobox/photos.json").then(e=>e.json());console.log("LOG-d photos",e),Ae.a.render(Pe.a.createElement(Ir,{photos:e}),document.getElementById("gallery"))}))},hochzeitsfotos:function(){return jr(this,void 0,void 0,(function*(){const e=yield fetch("/bilder/julia_sam/photos.json").then(e=>e.json());Ae.a.render(Pe.a.createElement(Ir,{photos:e}),document.getElementById("gallery"))}))}};i(document).foundation(),i((function(){const e=document.getElementById("main-content"),t=document.getElementById("home-img-container");let n="home";e.innerHTML=Fr.home,document.querySelectorAll(".menu li[data-site]").forEach(i=>{i.addEventListener("click",()=>{document.querySelectorAll(".menu .active").forEach(e=>e.classList.remove("active"));document.querySelectorAll(".menu li[data-site='"+i.dataset.site+"']").forEach(e=>e.classList.add("active")),n=i.dataset.site,e.innerHTML=Fr[n],Hr[n]?(t.querySelector("img").src=Hr[n],t.classList.remove("hidden"),"1"===i.dataset.imgShowAlways?t.classList.remove("hide-for-medium"):t.classList.add("hide-for-medium")):t.classList.add("hidden"),"function"==typeof Br[n]&&Br[n]()})}),document.querySelectorAll(".logo-img").forEach(e=>{e.addEventListener("click",()=>{document.querySelector("li[data-site='home']").dispatchEvent(new Event("click"))})})}))}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2dsYW0vbGliL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtaW4tanMtdXRpbHMvbGliL2lzUHJlZml4ZWRWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL2xpYi9QYWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL2xpYi9yZWFjdC12aWV3LXBhZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1pbWFnZXMvbm9kZV9tb2R1bGVzL3JlYWN0LXZpZXctcGFnZXIvbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvc3RyaXBTdHlsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL2xpYi91dGlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL21hcFRvWmVyby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL3N0ZXBwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3BlcmZvcm1hbmNlLW5vdy9saWIvcGVyZm9ybWFuY2Utbm93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yYWYvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWltYWdlcy9ub2RlX21vZHVsZXMvcmVhY3Qtdmlldy1wYWdlci9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9zaG91bGRTdG9wQW5pbWF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1pbWFnZXMvbm9kZV9tb2R1bGVzL3JlYWN0LXZpZXctcGFnZXIvbGliL3NwZWNpYWwtYXNzaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9odG1sLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZXNpemUtb2JzZXJ2ZXItcG9seWZpbGwvZGlzdC9SZXNpemVPYnNlcnZlci5lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYTExeS1mb2N1cy1zdG9yZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZ2xhbS9saWIvZ2VuZXJhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2dsYW0vbGliL0NTU1Byb3BlcnR5T3BlcmF0aW9ucy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmJqcy9saWIvd2FybmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL2NhcGl0YWxpemVTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FuaW1hdGlvbi1idXMvbGliL2FuaW1hdGlvbi1idXMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL3JlYWN0LW1vdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1pbWFnZXMvbm9kZV9tb2R1bGVzL3JlYWN0LXZpZXctcGFnZXIvbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvcHJlc2V0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvbGliL2F0dHJpYnV0ZXMtdG8tcHJvcHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2xpYi91dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2h0bWwtZG9tLXBhcnNlci9saWIvY2xpZW50L3V0aWxpdGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tZWxlbWVudHR5cGUvbGliL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL3VudGVya3VuZnQuanBnIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL2dlc2NoZW5rZS5qcGciLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2h0bWwtZG9tLXBhcnNlci9saWIvY2xpZW50L2h0bWwtdG8tZG9tLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvanMvcHJlc2VudHMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9pbWcvZ2VzY2hlbmtlL0dvUHJvLnBuZyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ltZy9nZXNjaGVua2UvQWR2ZW50dXJlS2l0X0dvUHJvLnBuZyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ltZy9nZXNjaGVua2UvTWVzc2VyYmxvY2sucG5nIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL2dlc2NoZW5rZS9ncm/Dn2VyX1RvcGYucG5nIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL2dlc2NoZW5rZS9zdHVkaWVuYmliZWwucG5nIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL2dlc2NoZW5rZS9CYW5nLnBuZyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ltZy9nZXNjaGVua2UvQ29kZW5hbWVzLnBuZyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ltZy9nZXNjaGVua2UvU3RhdWJzYXVnZXJyb2JvdGVyLnBuZyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ltZy9nZXNjaGVua2UvV2VsdGthcnRlLmpwZyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ltZy9nZXNjaGVua2UvS29ya3BsYXR0ZS5wbmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9pbWcvZ2VzY2hlbmtlL1NpdHpraXNzZW4ucG5nIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL2dlc2NoZW5rZS9TdG9mZnNlcnZpZXR0ZW4ucG5nIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL2dlc2NoZW5rZS9OdWRlbHphbmdlLnBuZyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ltZy9nZXNjaGVua2UvRWlzcG9ydGlvbmllcmVyLnBuZyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ltZy9nZXNjaGVua2UvR2llw59rYW5uZS5wbmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9pbWcvZ2VzY2hlbmtlL1NhZnRwcmVzc2UucG5nIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL2dlc2NoZW5rZS9CdWNoLmpwZWciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9pbWcvZ2VzY2hlbmtlL0JhY2twYXBpZXIucG5nIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL2dlc2NoZW5rZS9CaWVuZW53YWNoc3R1Y2guanBlZyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9nbGFtL2xpYi9HbGFtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9nbGFtL2xpYi9zaGVldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmJqcy9saWIvY2FtZWxpemVTdHlsZU5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZianMvbGliL2NhbWVsaXplLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9nbGFtL2xpYi9DU1NQcm9wZXJ0eU9wZXJhdGlvbnMvZGFuZ2Vyb3VzU3R5bGVWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZ2xhbS9saWIvQ1NTUHJvcGVydHlPcGVyYXRpb25zL0NTU1Byb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9lbXB0eUZ1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9oeXBoZW5hdGVTdHlsZU5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZianMvbGliL2h5cGhlbmF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmJqcy9saWIvbWVtb2l6ZVN0cmluZ09ubHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2dsYW0vbGliL3BsdWdpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2dsYW0vbGliL3ByZWZpeC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9zdGF0aWNEYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvdXRpbHMvcHJlZml4UHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci91dGlscy9wcmVmaXhWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL2N1cnNvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL2Nyb3NzRmFkZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL2ZsZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9zdGF0aWMvcGx1Z2lucy9mbGV4Ym94T2xkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvc3RhdGljL3BsdWdpbnMvZ3JhZGllbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9zdGF0aWMvcGx1Z2lucy9pbWFnZVNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL3Bvc2l0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvc3RhdGljL3BsdWdpbnMvc2l6aW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvc3RhdGljL3BsdWdpbnMvdHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLWluLWpzLXV0aWxzL2xpYi9oeXBoZW5hdGVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaHlwaGVuYXRlLXN0eWxlLW5hbWUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2dsYW0vbGliL3BhcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9nbGFtL2xpYi9mbGF0dGVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9nbGFtL2xpYi9oYXNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1pbWFnZXMvbm9kZV9tb2R1bGVzL3JlYWN0LXZpZXctcGFnZXIvbGliL1ZpZXdQYWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbWl0dC9kaXN0L21pdHQuZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RhYmJhYmxlL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbmltYXRpb24tYnVzL2xpYi9wb2x5bGluZWFyLXNjYWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbmltYXRpb24tYnVzL2xpYi9waWVjZXdpc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWltYWdlcy9ub2RlX21vZHVsZXMvcmVhY3Qtdmlldy1wYWdlci9saWIvUGFnZXJFbGVtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9nZXQtcHJlZml4L2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL2xpYi9GcmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL01vdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmFmL25vZGVfbW9kdWxlcy9wZXJmb3JtYW5jZS1ub3cvbGliL3BlcmZvcm1hbmNlLW5vdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL1N0YWdnZXJlZE1vdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL1RyYW5zaXRpb25Nb3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWltYWdlcy9ub2RlX21vZHVsZXMvcmVhY3Qtdmlldy1wYWdlci9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9tZXJnZURpZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWltYWdlcy9ub2RlX21vZHVsZXMvcmVhY3Qtdmlldy1wYWdlci9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9zcHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWltYWdlcy9ub2RlX21vZHVsZXMvcmVhY3Qtdmlldy1wYWdlci9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9yZW9yZGVyS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL2xpYi9Td2lwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL2xpYi9LZXlib2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL2xpYi9UcmFjay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL2xpYi9nZXQtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWltYWdlcy9ub2RlX21vZHVsZXMvcmVhY3Qtdmlldy1wYWdlci9saWIvVmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2VzL25vZGVfbW9kdWxlcy9yZWFjdC12aWV3LXBhZ2VyL2xpYi9BbmltYXRlZFZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2xpYi9kb20tdG8tcmVhY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXByb3BlcnR5L2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtcHJvcGVydHkvbGliL3Bvc3NpYmxlU3RhbmRhcmROYW1lc09wdGltaXplZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtdG8tanMvY2pzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsZS10by1vYmplY3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wYXJzZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxlLXRvLWpzL2Nqcy91dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2h0bWwtZG9tLXBhcnNlci9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2h0bWwtZG9tLXBhcnNlci9saWIvY2xpZW50L2RvbXBhcnNlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaHRtbC1kb20tcGFyc2VyL2xpYi9jbGllbnQvY29uc3RhbnRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9odG1sLWRvbS1wYXJzZXIvbm9kZV9tb2R1bGVzL2RvbWhhbmRsZXIvbGliL25vZGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL25vZGVfbW9kdWxlcy9kb21oYW5kbGVyL2xpYi9ub2RlLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL3N0YW5kZXNhbXQvMS5qcGciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9pbWcvc3RhbmRlc2FtdC8yLmpwZyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ltZy9zdGFuZGVzYW10LzMuanBnIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL3N0YW5kZXNhbXQvNC5qcGciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9pbWcvc3RhbmRlc2FtdC81LmpwZyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ltZy9zdGFuZGVzYW10LzYuanBnIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL3N0YW5kZXNhbXQvNy5qcGciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9pbWcvc3RhbmRlc2FtdC84LmpwZyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ltZy9zdGFuZGVzYW10LzkuanBnIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL3N0YW5kZXNhbXQvMTAuanBnIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL3N0YW5kZXNhbXQvMTEuanBnIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL3N0YW5kZXNhbXQvMTIuanBnIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL3N0YW5kZXNhbXQvMTMuanBnIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL3N0YW5kZXNhbXQvMTQuanBnIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL3N0YW5kZXNhbXQvMTUuanBnIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL3N0YW5kZXNhbXQvMTYuanBnIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaHRtbC9ob21lLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9odG1sL3VudGVya3VuZnQuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ltZy9ob3RlbC5wbmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9odG1sL3RhZ2VzYWJsYXVmLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9pbWcvdGFnZXNhYmxhdWZfbmV1LmpwZyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ltZy9laW5rcmVpc2VyLnBuZyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2h0bWwvZ2VzY2hlbmtlLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9odG1sL3N0YW5kZXNhbXQuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2h0bWwvZm90b2JveC5odG1sIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaHRtbC9ob2NoemVpdHNmb3Rvcy5odG1sIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW1nL2hvbWUuanBnIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL2Rpc3QvanMvZm91bmRhdGlvbi5lczYuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9qcy9QcmVzZW50c0hhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JhZi1zY2hkL2Rpc3QvcmFmLXNjaGQuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91c2UtY2FsbGJhY2stcmVmL2Rpc3QvZXMyMDE1L3VzZU1lcmdlUmVmLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91c2UtY2FsbGJhY2stcmVmL2Rpc3QvZXMyMDE1L3VzZVJlZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXNlLWNhbGxiYWNrLXJlZi9kaXN0L2VzMjAxNS9hc3NpZ25SZWYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvVUkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvRm9jdXNHdWFyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvTG9jay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9VSS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9VSS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXNlLXNpZGVjYXIvZGlzdC9lczIwMTUvZXhwb3J0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWNsaWVudHNpZGUtZWZmZWN0L2xpYi9pbmRleC5lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvZ2V0QWN0aXZlRWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9hbGwtYWZmZWN0ZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvZm9jdXNJbnNpZGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvaXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvY29ycmVjdEZvY3VzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2ZpcnN0Rm9jdXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvc29sdmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYk9yZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYlV0aWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYmJhYmxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9ET011dGlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9wYXJlbnRpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvZm9jdXNNZXJnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9zZXRGb2N1cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L1RyYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvZm9jdXNJc0hpZGRlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9mb2N1c2FibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9nZXQtbm9uY2UvZGlzdC9lczIwMTUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvc2lkZWNhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L3NpbmdsZXRvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2hvb2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L3V0aWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsLWJhci9kaXN0L2VzMjAxNS9jb21wb25lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvaGFuZGxlU2Nyb2xsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L2FnZ3Jlc2l2ZUNhcHR1cmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvU2lkZUVmZmVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9zaWRlY2FyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hcmlhLWhpZGRlbi9kaXN0L2VzMjAxNS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvSW50ZXJhY3Rpdml0eURpc2FibGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9FZmZlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L3NpZGVjYXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L0NvbWJpbmF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mc2NyZWVuL2Rpc3QvZnNjcmVlbi5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL2Rpc3QvaW5kZXgubW9kZXJuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9jb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL0NoaWxkTWFwcGluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWltYWdlcy9kaXN0L3JlYWN0LWltYWdlcy5lcy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2pzL0ltYWdlR2FsbGVyeS9waG90b3MudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9qcy9JbWFnZUdhbGxlcnkvR2FsbGVyeS9QaG90by5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9qcy9JbWFnZUdhbGxlcnkvR2FsbGVyeS91dGlscy9yb3VuZC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2pzL0ltYWdlR2FsbGVyeS9HYWxsZXJ5L2xheW91dHMvY29sdW1ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2pzL0ltYWdlR2FsbGVyeS9HYWxsZXJ5L3V0aWxzL3JhdGlvLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvanMvSW1hZ2VHYWxsZXJ5L0dhbGxlcnkvdXRpbHMvYmluYXJ5LWhlYXAuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9qcy9JbWFnZUdhbGxlcnkvR2FsbGVyeS91dGlscy9kaWprc3RyYS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2pzL0ltYWdlR2FsbGVyeS9HYWxsZXJ5L2xheW91dHMvanVzdGlmaWVkLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvanMvSW1hZ2VHYWxsZXJ5L0dhbGxlcnkvR2FsbGVyeS5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9qcy9JbWFnZUdhbGxlcnkvR2FsbGVyeS91dGlscy9maW5kSWRlYWxOb2RlU2VhcmNoLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvanMvSW1hZ2VHYWxsZXJ5L0ltYWdlR2FsbGVyeS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9qcy9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2pzL3NldHVwSW1hZ2VHYWxsZXJ5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2pzL3NldHVwRm90b2JveC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9qcy9zZXR1cEhvY2h6ZWl0c2ZvdG9zLnRzeCJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImdsb2JhbCIsImZhY3RvcnkiLCJkb2N1bWVudCIsInciLCJFcnJvciIsIndpbmRvdyIsInRoaXMiLCJub0dsb2JhbCIsImFyciIsImdldFByb3RvIiwiZ2V0UHJvdG90eXBlT2YiLCJzbGljZSIsImZsYXQiLCJhcnJheSIsImNvbmNhdCIsImFwcGx5IiwicHVzaCIsImluZGV4T2YiLCJjbGFzczJ0eXBlIiwidG9TdHJpbmciLCJoYXNPd24iLCJmblRvU3RyaW5nIiwiT2JqZWN0RnVuY3Rpb25TdHJpbmciLCJzdXBwb3J0IiwiaXNGdW5jdGlvbiIsIm9iaiIsIm5vZGVUeXBlIiwiaXRlbSIsImlzV2luZG93IiwicHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyIsInR5cGUiLCJzcmMiLCJub25jZSIsIm5vTW9kdWxlIiwiRE9NRXZhbCIsImNvZGUiLCJub2RlIiwiZG9jIiwidmFsIiwic2NyaXB0IiwiY3JlYXRlRWxlbWVudCIsInRleHQiLCJnZXRBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGUiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJ0b1R5cGUiLCJqUXVlcnkiLCJzZWxlY3RvciIsImNvbnRleHQiLCJmbiIsImluaXQiLCJpc0FycmF5TGlrZSIsImxlbmd0aCIsImpxdWVyeSIsImNvbnN0cnVjdG9yIiwidG9BcnJheSIsIm51bSIsInB1c2hTdGFjayIsImVsZW1zIiwicmV0IiwibWVyZ2UiLCJwcmV2T2JqZWN0IiwiZWFjaCIsImNhbGxiYWNrIiwibWFwIiwiZWxlbSIsImFyZ3VtZW50cyIsImZpcnN0IiwiZXEiLCJsYXN0IiwiZXZlbiIsImdyZXAiLCJfZWxlbSIsIm9kZCIsImxlbiIsImoiLCJlbmQiLCJzb3J0Iiwic3BsaWNlIiwiZXh0ZW5kIiwib3B0aW9ucyIsImNvcHkiLCJjb3B5SXNBcnJheSIsImNsb25lIiwidGFyZ2V0IiwiZGVlcCIsImlzUGxhaW5PYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJ1bmRlZmluZWQiLCJleHBhbmRvIiwiTWF0aCIsInJhbmRvbSIsInJlcGxhY2UiLCJpc1JlYWR5IiwiZXJyb3IiLCJtc2ciLCJub29wIiwicHJvdG8iLCJDdG9yIiwiaXNFbXB0eU9iamVjdCIsImdsb2JhbEV2YWwiLCJtYWtlQXJyYXkiLCJyZXN1bHRzIiwiaW5BcnJheSIsInNlY29uZCIsImludmVydCIsIm1hdGNoZXMiLCJjYWxsYmFja0V4cGVjdCIsImFyZyIsImd1aWQiLCJpdGVyYXRvciIsInNwbGl0IiwiX2kiLCJ0b0xvd2VyQ2FzZSIsIlNpenpsZSIsIkV4cHIiLCJnZXRUZXh0IiwiaXNYTUwiLCJ0b2tlbml6ZSIsImNvbXBpbGUiLCJzZWxlY3QiLCJvdXRlcm1vc3RDb250ZXh0Iiwic29ydElucHV0IiwiaGFzRHVwbGljYXRlIiwic2V0RG9jdW1lbnQiLCJkb2NFbGVtIiwiZG9jdW1lbnRJc0hUTUwiLCJyYnVnZ3lRU0EiLCJyYnVnZ3lNYXRjaGVzIiwiY29udGFpbnMiLCJEYXRlIiwicHJlZmVycmVkRG9jIiwiZGlycnVucyIsImRvbmUiLCJjbGFzc0NhY2hlIiwiY3JlYXRlQ2FjaGUiLCJ0b2tlbkNhY2hlIiwiY29tcGlsZXJDYWNoZSIsIm5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUiLCJzb3J0T3JkZXIiLCJhIiwiYiIsInBvcCIsInB1c2hOYXRpdmUiLCJsaXN0IiwiYm9vbGVhbnMiLCJ3aGl0ZXNwYWNlIiwiaWRlbnRpZmllciIsImF0dHJpYnV0ZXMiLCJwc2V1ZG9zIiwicndoaXRlc3BhY2UiLCJSZWdFeHAiLCJydHJpbSIsInJjb21tYSIsInJjb21iaW5hdG9ycyIsInJkZXNjZW5kIiwicnBzZXVkbyIsInJpZGVudGlmaWVyIiwibWF0Y2hFeHByIiwicmh0bWwiLCJyaW5wdXRzIiwicmhlYWRlciIsInJuYXRpdmUiLCJycXVpY2tFeHByIiwicnNpYmxpbmciLCJydW5lc2NhcGUiLCJmdW5lc2NhcGUiLCJlc2NhcGUiLCJub25IZXgiLCJoaWdoIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwicmNzc2VzY2FwZSIsImZjc3Nlc2NhcGUiLCJjaCIsImFzQ29kZVBvaW50IiwiY2hhckNvZGVBdCIsInVubG9hZEhhbmRsZXIiLCJpbkRpc2FibGVkRmllbGRzZXQiLCJhZGRDb21iaW5hdG9yIiwiZGlzYWJsZWQiLCJub2RlTmFtZSIsImRpciIsIm5leHQiLCJjaGlsZE5vZGVzIiwiZSIsImVscyIsInNlZWQiLCJuaWQiLCJtYXRjaCIsImdyb3VwcyIsIm5ld1NlbGVjdG9yIiwibmV3Q29udGV4dCIsIm93bmVyRG9jdW1lbnQiLCJleGVjIiwiZ2V0RWxlbWVudEJ5SWQiLCJpZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInFzYSIsInRlc3QiLCJ0ZXN0Q29udGV4dCIsInNjb3BlIiwidG9TZWxlY3RvciIsImpvaW4iLCJxdWVyeVNlbGVjdG9yQWxsIiwicXNhRXJyb3IiLCJyZW1vdmVBdHRyaWJ1dGUiLCJrZXlzIiwiY2FjaGUiLCJjYWNoZUxlbmd0aCIsInNoaWZ0IiwibWFya0Z1bmN0aW9uIiwiYXNzZXJ0IiwiZWwiLCJhZGRIYW5kbGUiLCJhdHRycyIsImhhbmRsZXIiLCJhdHRySGFuZGxlIiwic2libGluZ0NoZWNrIiwiY3VyIiwiZGlmZiIsInNvdXJjZUluZGV4IiwibmV4dFNpYmxpbmciLCJjcmVhdGVJbnB1dFBzZXVkbyIsImNyZWF0ZUJ1dHRvblBzZXVkbyIsImNyZWF0ZURpc2FibGVkUHNldWRvIiwiaXNEaXNhYmxlZCIsImNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8iLCJhcmd1bWVudCIsIm1hdGNoSW5kZXhlcyIsIm5hbWVzcGFjZSIsIm5hbWVzcGFjZVVSSSIsImRvY3VtZW50RWxlbWVudCIsImhhc0NvbXBhcmUiLCJzdWJXaW5kb3ciLCJkZWZhdWx0VmlldyIsInRvcCIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImNsYXNzTmFtZSIsImNyZWF0ZUNvbW1lbnQiLCJnZXRCeUlkIiwiZ2V0RWxlbWVudHNCeU5hbWUiLCJmaWx0ZXIiLCJhdHRySWQiLCJmaW5kIiwiZ2V0QXR0cmlidXRlTm9kZSIsInRhZyIsInRtcCIsImlucHV0IiwiaW5uZXJIVE1MIiwibWF0Y2hlc1NlbGVjdG9yIiwid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwibW96TWF0Y2hlc1NlbGVjdG9yIiwib01hdGNoZXNTZWxlY3RvciIsIm1zTWF0Y2hlc1NlbGVjdG9yIiwiZGlzY29ubmVjdGVkTWF0Y2giLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsImFkb3duIiwiYnVwIiwiY29tcGFyZSIsInNvcnREZXRhY2hlZCIsImF1cCIsImFwIiwiYnAiLCJ1bnNoaWZ0IiwiZXhwciIsImVsZW1lbnRzIiwiYXR0ciIsInNwZWNpZmllZCIsInNlbCIsInVuaXF1ZVNvcnQiLCJkdXBsaWNhdGVzIiwiZGV0ZWN0RHVwbGljYXRlcyIsInNvcnRTdGFibGUiLCJ0ZXh0Q29udGVudCIsImZpcnN0Q2hpbGQiLCJub2RlVmFsdWUiLCJzZWxlY3RvcnMiLCJjcmVhdGVQc2V1ZG8iLCJyZWxhdGl2ZSIsInByZUZpbHRlciIsImV4Y2VzcyIsInVucXVvdGVkIiwibm9kZU5hbWVTZWxlY3RvciIsInBhdHRlcm4iLCJvcGVyYXRvciIsImNoZWNrIiwicmVzdWx0Iiwid2hhdCIsIl9hcmd1bWVudCIsInNpbXBsZSIsImZvcndhcmQiLCJvZlR5cGUiLCJfY29udGV4dCIsInhtbCIsInVuaXF1ZUNhY2hlIiwib3V0ZXJDYWNoZSIsIm5vZGVJbmRleCIsInN0YXJ0IiwicGFyZW50IiwidXNlQ2FjaGUiLCJsYXN0Q2hpbGQiLCJ1bmlxdWVJRCIsInBzZXVkbyIsImFyZ3MiLCJzZXRGaWx0ZXJzIiwiaWR4IiwibWF0Y2hlZCIsIm1hdGNoZXIiLCJ1bm1hdGNoZWQiLCJsYW5nIiwiZWxlbUxhbmciLCJoYXNoIiwibG9jYXRpb24iLCJhY3RpdmVFbGVtZW50IiwiaGFzRm9jdXMiLCJocmVmIiwidGFiSW5kZXgiLCJjaGVja2VkIiwic2VsZWN0ZWQiLCJzZWxlY3RlZEluZGV4IiwiX21hdGNoSW5kZXhlcyIsInJhZGlvIiwiY2hlY2tib3giLCJmaWxlIiwicGFzc3dvcmQiLCJpbWFnZSIsInN1Ym1pdCIsInJlc2V0IiwidG9rZW5zIiwiY29tYmluYXRvciIsImJhc2UiLCJza2lwIiwiY2hlY2tOb25FbGVtZW50cyIsImRvbmVOYW1lIiwib2xkQ2FjaGUiLCJuZXdDYWNoZSIsImVsZW1lbnRNYXRjaGVyIiwibWF0Y2hlcnMiLCJjb25kZW5zZSIsIm5ld1VubWF0Y2hlZCIsIm1hcHBlZCIsInNldE1hdGNoZXIiLCJwb3N0RmlsdGVyIiwicG9zdEZpbmRlciIsInBvc3RTZWxlY3RvciIsInRlbXAiLCJwcmVNYXAiLCJwb3N0TWFwIiwicHJlZXhpc3RpbmciLCJjb250ZXh0cyIsIm11bHRpcGxlQ29udGV4dHMiLCJtYXRjaGVySW4iLCJtYXRjaGVyT3V0IiwibWF0Y2hlckZyb21Ub2tlbnMiLCJjaGVja0NvbnRleHQiLCJsZWFkaW5nUmVsYXRpdmUiLCJpbXBsaWNpdFJlbGF0aXZlIiwibWF0Y2hDb250ZXh0IiwibWF0Y2hBbnlDb250ZXh0IiwiZmlsdGVycyIsInBhcnNlT25seSIsInNvRmFyIiwicHJlRmlsdGVycyIsImNhY2hlZCIsInNldE1hdGNoZXJzIiwiZWxlbWVudE1hdGNoZXJzIiwiYnlTZXQiLCJieUVsZW1lbnQiLCJzdXBlck1hdGNoZXIiLCJvdXRlcm1vc3QiLCJtYXRjaGVkQ291bnQiLCJzZXRNYXRjaGVkIiwiY29udGV4dEJhY2t1cCIsImRpcnJ1bnNVbmlxdWUiLCJtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMiLCJ0b2tlbiIsImNvbXBpbGVkIiwiX25hbWUiLCJkZWZhdWx0VmFsdWUiLCJ1bmlxdWUiLCJpc1hNTERvYyIsImVzY2FwZVNlbGVjdG9yIiwidW50aWwiLCJ0cnVuY2F0ZSIsImlzIiwic2libGluZ3MiLCJybmVlZHNDb250ZXh0IiwibmVlZHNDb250ZXh0IiwicnNpbmdsZVRhZyIsIndpbm5vdyIsInF1YWxpZmllciIsIm5vdCIsInNlbGYiLCJyb290alF1ZXJ5Iiwicm9vdCIsInBhcnNlSFRNTCIsInJlYWR5IiwicnBhcmVudHNwcmV2IiwiZ3VhcmFudGVlZFVuaXF1ZSIsImNoaWxkcmVuIiwiY29udGVudHMiLCJwcmV2Iiwic2libGluZyIsImhhcyIsInRhcmdldHMiLCJjbG9zZXN0IiwiaW5kZXgiLCJwcmV2QWxsIiwiYWRkIiwiYWRkQmFjayIsInBhcmVudHMiLCJwYXJlbnRzVW50aWwiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldlVudGlsIiwiY29udGVudERvY3VtZW50IiwiY29udGVudCIsInJldmVyc2UiLCJybm90aHRtbHdoaXRlIiwiSWRlbnRpdHkiLCJ2IiwiVGhyb3dlciIsImV4IiwiYWRvcHRWYWx1ZSIsInJlc29sdmUiLCJyZWplY3QiLCJub1ZhbHVlIiwibWV0aG9kIiwicHJvbWlzZSIsImZhaWwiLCJ0aGVuIiwiQ2FsbGJhY2tzIiwiXyIsImZsYWciLCJjcmVhdGVPcHRpb25zIiwiZmlyaW5nIiwibWVtb3J5IiwiZmlyZWQiLCJsb2NrZWQiLCJxdWV1ZSIsImZpcmluZ0luZGV4IiwiZmlyZSIsIm9uY2UiLCJzdG9wT25GYWxzZSIsInJlbW92ZSIsImVtcHR5IiwiZGlzYWJsZSIsImxvY2siLCJmaXJlV2l0aCIsIkRlZmVycmVkIiwiZnVuYyIsInR1cGxlcyIsInN0YXRlIiwiYWx3YXlzIiwiZGVmZXJyZWQiLCJwaXBlIiwiZm5zIiwibmV3RGVmZXIiLCJ0dXBsZSIsInJldHVybmVkIiwicHJvZ3Jlc3MiLCJub3RpZnkiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJvblByb2dyZXNzIiwibWF4RGVwdGgiLCJkZXB0aCIsInNwZWNpYWwiLCJ0aGF0IiwibWlnaHRUaHJvdyIsIlR5cGVFcnJvciIsIm5vdGlmeVdpdGgiLCJyZXNvbHZlV2l0aCIsInByb2Nlc3MiLCJleGNlcHRpb25Ib29rIiwic3RhY2tUcmFjZSIsInJlamVjdFdpdGgiLCJnZXRTdGFja0hvb2siLCJzZXRUaW1lb3V0Iiwic3RhdGVTdHJpbmciLCJ3aGVuIiwic2luZ2xlVmFsdWUiLCJyZW1haW5pbmciLCJyZXNvbHZlQ29udGV4dHMiLCJyZXNvbHZlVmFsdWVzIiwicHJpbWFyeSIsInVwZGF0ZUZ1bmMiLCJyZXJyb3JOYW1lcyIsInN0YWNrIiwiY29uc29sZSIsIndhcm4iLCJtZXNzYWdlIiwicmVhZHlFeGNlcHRpb24iLCJyZWFkeUxpc3QiLCJjb21wbGV0ZWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY2F0Y2giLCJyZWFkeVdhaXQiLCJ3YWl0IiwicmVhZHlTdGF0ZSIsImRvU2Nyb2xsIiwiYWNjZXNzIiwiY2hhaW5hYmxlIiwiZW1wdHlHZXQiLCJyYXciLCJidWxrIiwiX2tleSIsInJtc1ByZWZpeCIsInJkYXNoQWxwaGEiLCJmY2FtZWxDYXNlIiwiX2FsbCIsImxldHRlciIsInRvVXBwZXJDYXNlIiwiY2FtZWxDYXNlIiwic3RyaW5nIiwiYWNjZXB0RGF0YSIsIm93bmVyIiwiRGF0YSIsInVpZCIsImNvbmZpZ3VyYWJsZSIsInNldCIsImRhdGEiLCJwcm9wIiwiaGFzRGF0YSIsImRhdGFQcml2IiwiZGF0YVVzZXIiLCJyYnJhY2UiLCJybXVsdGlEYXNoIiwiZGF0YUF0dHIiLCJKU09OIiwicGFyc2UiLCJnZXREYXRhIiwicmVtb3ZlRGF0YSIsIl9kYXRhIiwiX3JlbW92ZURhdGEiLCJkZXF1ZXVlIiwic3RhcnRMZW5ndGgiLCJob29rcyIsIl9xdWV1ZUhvb2tzIiwic3RvcCIsInNldHRlciIsImNsZWFyUXVldWUiLCJjb3VudCIsImRlZmVyIiwicG51bSIsInNvdXJjZSIsInJjc3NOdW0iLCJjc3NFeHBhbmQiLCJpc0F0dGFjaGVkIiwiY29tcG9zZWQiLCJnZXRSb290Tm9kZSIsImlzSGlkZGVuV2l0aGluVHJlZSIsInN0eWxlIiwiZGlzcGxheSIsImNzcyIsImFkanVzdENTUyIsInZhbHVlUGFydHMiLCJ0d2VlbiIsImFkanVzdGVkIiwic2NhbGUiLCJtYXhJdGVyYXRpb25zIiwiY3VycmVudFZhbHVlIiwiaW5pdGlhbCIsInVuaXQiLCJjc3NOdW1iZXIiLCJpbml0aWFsSW5Vbml0IiwiZGVmYXVsdERpc3BsYXlNYXAiLCJnZXREZWZhdWx0RGlzcGxheSIsImJvZHkiLCJzaG93SGlkZSIsInNob3ciLCJ2YWx1ZXMiLCJoaWRlIiwidG9nZ2xlIiwiZGl2IiwicmNoZWNrYWJsZVR5cGUiLCJydGFnTmFtZSIsInJzY3JpcHRUeXBlIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImNoZWNrQ2xvbmUiLCJjbG9uZU5vZGUiLCJub0Nsb25lQ2hlY2tlZCIsIm9wdGlvbiIsIndyYXBNYXAiLCJ0aGVhZCIsImNvbCIsInRyIiwidGQiLCJfZGVmYXVsdCIsImdldEFsbCIsInNldEdsb2JhbEV2YWwiLCJyZWZFbGVtZW50cyIsInRib2R5IiwidGZvb3QiLCJjb2xncm91cCIsImNhcHRpb24iLCJ0aCIsIm9wdGdyb3VwIiwiYnVpbGRGcmFnbWVudCIsInNjcmlwdHMiLCJzZWxlY3Rpb24iLCJpZ25vcmVkIiwid3JhcCIsImF0dGFjaGVkIiwiZnJhZ21lbnQiLCJub2RlcyIsImh0bWxQcmVmaWx0ZXIiLCJjcmVhdGVUZXh0Tm9kZSIsInJ0eXBlbmFtZXNwYWNlIiwicmV0dXJuVHJ1ZSIsInJldHVybkZhbHNlIiwiZXhwZWN0U3luYyIsImVyciIsInNhZmVBY3RpdmVFbGVtZW50Iiwib24iLCJ0eXBlcyIsIm9uZSIsIm9yaWdGbiIsImV2ZW50Iiwib2ZmIiwibGV2ZXJhZ2VOYXRpdmUiLCJub3RBc3luYyIsInNhdmVkIiwiaXNUcmlnZ2VyIiwiZGVsZWdhdGVUeXBlIiwic3RvcFByb3BhZ2F0aW9uIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJ0cmlnZ2VyIiwiRXZlbnQiLCJoYW5kbGVPYmpJbiIsImV2ZW50SGFuZGxlIiwiZXZlbnRzIiwiaGFuZGxlT2JqIiwiaGFuZGxlcnMiLCJuYW1lc3BhY2VzIiwib3JpZ1R5cGUiLCJlbGVtRGF0YSIsImhhbmRsZSIsInRyaWdnZXJlZCIsImRpc3BhdGNoIiwiYmluZFR5cGUiLCJkZWxlZ2F0ZUNvdW50Iiwic2V0dXAiLCJtYXBwZWRUeXBlcyIsIm9yaWdDb3VudCIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnQiLCJuYXRpdmVFdmVudCIsImhhbmRsZXJRdWV1ZSIsImZpeCIsImRlbGVnYXRlVGFyZ2V0IiwicHJlRGlzcGF0Y2giLCJpc1Byb3BhZ2F0aW9uU3RvcHBlZCIsImN1cnJlbnRUYXJnZXQiLCJpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCIsInJuYW1lc3BhY2UiLCJwb3N0RGlzcGF0Y2giLCJtYXRjaGVkSGFuZGxlcnMiLCJtYXRjaGVkU2VsZWN0b3JzIiwiYnV0dG9uIiwiYWRkUHJvcCIsImhvb2siLCJvcmlnaW5hbEV2ZW50Iiwid3JpdGFibGUiLCJsb2FkIiwibm9CdWJibGUiLCJjbGljayIsImJlZm9yZXVubG9hZCIsInJldHVyblZhbHVlIiwicHJvcHMiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJkZWZhdWx0UHJldmVudGVkIiwicmVsYXRlZFRhcmdldCIsInRpbWVTdGFtcCIsIm5vdyIsImlzU2ltdWxhdGVkIiwiYWx0S2V5IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJjaGFuZ2VkVG91Y2hlcyIsImN0cmxLZXkiLCJkZXRhaWwiLCJldmVudFBoYXNlIiwibWV0YUtleSIsInBhZ2VYIiwicGFnZVkiLCJzaGlmdEtleSIsInZpZXciLCJjaGFyQ29kZSIsImtleUNvZGUiLCJidXR0b25zIiwiY2xpZW50WCIsImNsaWVudFkiLCJvZmZzZXRYIiwib2Zmc2V0WSIsInBvaW50ZXJJZCIsInBvaW50ZXJUeXBlIiwic2NyZWVuWCIsInNjcmVlblkiLCJ0YXJnZXRUb3VjaGVzIiwidG9FbGVtZW50IiwidG91Y2hlcyIsIndoaWNoIiwiZm9jdXMiLCJibHVyIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJvcmlnIiwicmVsYXRlZCIsInJub0lubmVyaHRtbCIsInJjaGVja2VkIiwicmNsZWFuU2NyaXB0IiwibWFuaXB1bGF0aW9uVGFyZ2V0IiwiZGlzYWJsZVNjcmlwdCIsInJlc3RvcmVTY3JpcHQiLCJjbG9uZUNvcHlFdmVudCIsImRlc3QiLCJ1ZGF0YU9sZCIsInVkYXRhQ3VyIiwiZml4SW5wdXQiLCJkb21NYW5pcCIsImNvbGxlY3Rpb24iLCJoYXNTY3JpcHRzIiwiaU5vQ2xvbmUiLCJ2YWx1ZUlzRnVuY3Rpb24iLCJodG1sIiwiX2V2YWxVcmwiLCJrZWVwRGF0YSIsImNsZWFuRGF0YSIsImRhdGFBbmRFdmVudHMiLCJkZWVwRGF0YUFuZEV2ZW50cyIsInNyY0VsZW1lbnRzIiwiZGVzdEVsZW1lbnRzIiwiaW5QYWdlIiwiZGV0YWNoIiwiYXBwZW5kIiwicHJlcGVuZCIsImluc2VydEJlZm9yZSIsImJlZm9yZSIsImFmdGVyIiwicmVwbGFjZVdpdGgiLCJyZXBsYWNlQ2hpbGQiLCJhcHBlbmRUbyIsInByZXBlbmRUbyIsImluc2VydEFmdGVyIiwicmVwbGFjZUFsbCIsIm9yaWdpbmFsIiwiaW5zZXJ0Iiwicm51bW5vbnB4IiwiZ2V0U3R5bGVzIiwib3BlbmVyIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN3YXAiLCJvbGQiLCJyYm94U3R5bGUiLCJjdXJDU1MiLCJjb21wdXRlZCIsIndpZHRoIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImdldFByb3BlcnR5VmFsdWUiLCJwaXhlbEJveFN0eWxlcyIsImFkZEdldEhvb2tJZiIsImNvbmRpdGlvbkZuIiwiaG9va0ZuIiwiY29tcHV0ZVN0eWxlVGVzdHMiLCJjb250YWluZXIiLCJjc3NUZXh0IiwiZGl2U3R5bGUiLCJwaXhlbFBvc2l0aW9uVmFsIiwicmVsaWFibGVNYXJnaW5MZWZ0VmFsIiwicm91bmRQaXhlbE1lYXN1cmVzIiwibWFyZ2luTGVmdCIsInJpZ2h0IiwicGl4ZWxCb3hTdHlsZXNWYWwiLCJib3hTaXppbmdSZWxpYWJsZVZhbCIsInBvc2l0aW9uIiwic2Nyb2xsYm94U2l6ZVZhbCIsIm9mZnNldFdpZHRoIiwibWVhc3VyZSIsInJvdW5kIiwicGFyc2VGbG9hdCIsInJlbGlhYmxlVHJEaW1lbnNpb25zVmFsIiwiYmFja2dyb3VuZENsaXAiLCJjbGVhckNsb25lU3R5bGUiLCJib3hTaXppbmdSZWxpYWJsZSIsInBpeGVsUG9zaXRpb24iLCJyZWxpYWJsZU1hcmdpbkxlZnQiLCJzY3JvbGxib3hTaXplIiwicmVsaWFibGVUckRpbWVuc2lvbnMiLCJ0YWJsZSIsInRyQ2hpbGQiLCJ0clN0eWxlIiwiaGVpZ2h0IiwicGFyc2VJbnQiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiY3NzUHJlZml4ZXMiLCJlbXB0eVN0eWxlIiwidmVuZG9yUHJvcHMiLCJmaW5hbFByb3BOYW1lIiwiZmluYWwiLCJjc3NQcm9wcyIsImNhcE5hbWUiLCJ2ZW5kb3JQcm9wTmFtZSIsInJkaXNwbGF5c3dhcCIsInJjdXN0b21Qcm9wIiwiY3NzU2hvdyIsInZpc2liaWxpdHkiLCJjc3NOb3JtYWxUcmFuc2Zvcm0iLCJsZXR0ZXJTcGFjaW5nIiwiZm9udFdlaWdodCIsInNldFBvc2l0aXZlTnVtYmVyIiwic3VidHJhY3QiLCJtYXgiLCJib3hNb2RlbEFkanVzdG1lbnQiLCJkaW1lbnNpb24iLCJib3giLCJpc0JvcmRlckJveCIsInN0eWxlcyIsImNvbXB1dGVkVmFsIiwiZXh0cmEiLCJkZWx0YSIsImNlaWwiLCJnZXRXaWR0aE9ySGVpZ2h0IiwidmFsdWVJc0JvcmRlckJveCIsIm9mZnNldFByb3AiLCJnZXRDbGllbnRSZWN0cyIsIlR3ZWVuIiwiZWFzaW5nIiwiY3NzSG9va3MiLCJvcGFjaXR5Iiwib3JpZ05hbWUiLCJpc0N1c3RvbVByb3AiLCJzZXRQcm9wZXJ0eSIsImlzRmluaXRlIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwic2Nyb2xsYm94U2l6ZUJ1Z2d5IiwibGVmdCIsIm1hcmdpbiIsInBhZGRpbmciLCJib3JkZXIiLCJwcmVmaXgiLCJzdWZmaXgiLCJleHBhbmQiLCJleHBhbmRlZCIsInBhcnRzIiwicHJvcEhvb2tzIiwicnVuIiwicGVyY2VudCIsImVhc2VkIiwiZHVyYXRpb24iLCJwb3MiLCJzdGVwIiwiZngiLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwibGluZWFyIiwic3dpbmciLCJjb3MiLCJQSSIsImZ4Tm93IiwiaW5Qcm9ncmVzcyIsInJmeHR5cGVzIiwicnJ1biIsInNjaGVkdWxlIiwiaGlkZGVuIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaW50ZXJ2YWwiLCJ0aWNrIiwiY3JlYXRlRnhOb3ciLCJnZW5GeCIsImluY2x1ZGVXaWR0aCIsImNyZWF0ZVR3ZWVuIiwiYW5pbWF0aW9uIiwiQW5pbWF0aW9uIiwidHdlZW5lcnMiLCJwcm9wZXJ0aWVzIiwic3RvcHBlZCIsInByZWZpbHRlcnMiLCJjdXJyZW50VGltZSIsInN0YXJ0VGltZSIsInR3ZWVucyIsIm9wdHMiLCJzcGVjaWFsRWFzaW5nIiwib3JpZ2luYWxQcm9wZXJ0aWVzIiwib3JpZ2luYWxPcHRpb25zIiwiZ290b0VuZCIsInByb3BGaWx0ZXIiLCJjb21wbGV0ZSIsInRpbWVyIiwiYW5pbSIsInR3ZWVuZXIiLCJvbGRmaXJlIiwicHJvcFR3ZWVuIiwicmVzdG9yZURpc3BsYXkiLCJpc0JveCIsImRhdGFTaG93IiwidW5xdWV1ZWQiLCJvdmVyZmxvdyIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsInByZWZpbHRlciIsInNwZWVkIiwib3B0Iiwic3BlZWRzIiwiZmFkZVRvIiwidG8iLCJhbmltYXRlIiwib3B0YWxsIiwiZG9BbmltYXRpb24iLCJmaW5pc2giLCJzdG9wUXVldWUiLCJ0aW1lcnMiLCJjc3NGbiIsInNsaWRlRG93biIsInNsaWRlVXAiLCJzbGlkZVRvZ2dsZSIsImZhZGVJbiIsImZhZGVPdXQiLCJmYWRlVG9nZ2xlIiwic2xvdyIsImZhc3QiLCJkZWxheSIsInRpbWUiLCJ0aW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiY2hlY2tPbiIsIm9wdFNlbGVjdGVkIiwicmFkaW9WYWx1ZSIsImJvb2xIb29rIiwicmVtb3ZlQXR0ciIsIm5UeXBlIiwiYXR0ckhvb2tzIiwiYm9vbCIsImF0dHJOYW1lcyIsImxvd2VyY2FzZU5hbWUiLCJyZm9jdXNhYmxlIiwicmNsaWNrYWJsZSIsInN0cmlwQW5kQ29sbGFwc2UiLCJnZXRDbGFzcyIsImNsYXNzZXNUb0FycmF5IiwicmVtb3ZlUHJvcCIsInByb3BGaXgiLCJ0YWJpbmRleCIsImFkZENsYXNzIiwiY2xhc3NlcyIsImN1clZhbHVlIiwiY2xhenoiLCJmaW5hbFZhbHVlIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsInN0YXRlVmFsIiwiaXNWYWxpZFZhbHVlIiwiY2xhc3NOYW1lcyIsImhhc0NsYXNzIiwicnJldHVybiIsInZhbEhvb2tzIiwib3B0aW9uU2V0IiwiZm9jdXNpbiIsInJmb2N1c01vcnBoIiwic3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2siLCJvbmx5SGFuZGxlcnMiLCJidWJibGVUeXBlIiwib250eXBlIiwibGFzdEVsZW1lbnQiLCJldmVudFBhdGgiLCJwYXJlbnRXaW5kb3ciLCJzaW11bGF0ZSIsInRyaWdnZXJIYW5kbGVyIiwiYXR0YWNoZXMiLCJycXVlcnkiLCJwYXJzZVhNTCIsInBhcnNlckVycm9yRWxlbSIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsInJicmFja2V0IiwickNSTEYiLCJyc3VibWl0dGVyVHlwZXMiLCJyc3VibWl0dGFibGUiLCJidWlsZFBhcmFtcyIsInRyYWRpdGlvbmFsIiwicGFyYW0iLCJ2YWx1ZU9yRnVuY3Rpb24iLCJlbmNvZGVVUklDb21wb25lbnQiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVBcnJheSIsInIyMCIsInJoYXNoIiwicmFudGlDYWNoZSIsInJoZWFkZXJzIiwicm5vQ29udGVudCIsInJwcm90b2NvbCIsInRyYW5zcG9ydHMiLCJhbGxUeXBlcyIsIm9yaWdpbkFuY2hvciIsImFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsInN0cnVjdHVyZSIsImRhdGFUeXBlRXhwcmVzc2lvbiIsImRhdGFUeXBlIiwiZGF0YVR5cGVzIiwiaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMiLCJqcVhIUiIsImluc3BlY3RlZCIsInNlZWtpbmdUcmFuc3BvcnQiLCJpbnNwZWN0IiwicHJlZmlsdGVyT3JGYWN0b3J5IiwiZGF0YVR5cGVPclRyYW5zcG9ydCIsImFqYXhFeHRlbmQiLCJmbGF0T3B0aW9ucyIsImFqYXhTZXR0aW5ncyIsImFjdGl2ZSIsImxhc3RNb2RpZmllZCIsImV0YWciLCJ1cmwiLCJpc0xvY2FsIiwicHJvdG9jb2wiLCJwcm9jZXNzRGF0YSIsImFzeW5jIiwiY29udGVudFR5cGUiLCJhY2NlcHRzIiwianNvbiIsInJlc3BvbnNlRmllbGRzIiwiY29udmVydGVycyIsImFqYXhTZXR1cCIsInNldHRpbmdzIiwiYWpheFByZWZpbHRlciIsImFqYXhUcmFuc3BvcnQiLCJhamF4IiwidHJhbnNwb3J0IiwiY2FjaGVVUkwiLCJyZXNwb25zZUhlYWRlcnNTdHJpbmciLCJyZXNwb25zZUhlYWRlcnMiLCJ0aW1lb3V0VGltZXIiLCJ1cmxBbmNob3IiLCJmaXJlR2xvYmFscyIsInVuY2FjaGVkIiwiY2FsbGJhY2tDb250ZXh0IiwiZ2xvYmFsRXZlbnRDb250ZXh0IiwiY29tcGxldGVEZWZlcnJlZCIsInN0YXR1c0NvZGUiLCJyZXF1ZXN0SGVhZGVycyIsInJlcXVlc3RIZWFkZXJzTmFtZXMiLCJzdHJBYm9ydCIsImdldFJlc3BvbnNlSGVhZGVyIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwic2V0UmVxdWVzdEhlYWRlciIsIm92ZXJyaWRlTWltZVR5cGUiLCJtaW1lVHlwZSIsInN0YXR1cyIsImFib3J0Iiwic3RhdHVzVGV4dCIsImZpbmFsVGV4dCIsImNyb3NzRG9tYWluIiwiaG9zdCIsImhhc0NvbnRlbnQiLCJpZk1vZGlmaWVkIiwiaGVhZGVycyIsImJlZm9yZVNlbmQiLCJzdWNjZXNzIiwic2VuZCIsIm5hdGl2ZVN0YXR1c1RleHQiLCJyZXNwb25zZXMiLCJpc1N1Y2Nlc3MiLCJyZXNwb25zZSIsIm1vZGlmaWVkIiwiY3QiLCJmaW5hbERhdGFUeXBlIiwiZmlyc3REYXRhVHlwZSIsImFqYXhIYW5kbGVSZXNwb25zZXMiLCJjb252MiIsImN1cnJlbnQiLCJjb252IiwiZGF0YUZpbHRlciIsInRocm93cyIsImFqYXhDb252ZXJ0IiwiZ2V0SlNPTiIsImdldFNjcmlwdCIsIndyYXBBbGwiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIndyYXBJbm5lciIsImh0bWxJc0Z1bmN0aW9uIiwidW53cmFwIiwidmlzaWJsZSIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwieGhyU3VjY2Vzc1N0YXR1cyIsIjAiLCIxMjIzIiwieGhyU3VwcG9ydGVkIiwiY29ycyIsImVycm9yQ2FsbGJhY2siLCJvcGVuIiwidXNlcm5hbWUiLCJ4aHJGaWVsZHMiLCJvbmxvYWQiLCJvbmVycm9yIiwib25hYm9ydCIsIm9udGltZW91dCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlc3BvbnNlVHlwZSIsInJlc3BvbnNlVGV4dCIsImJpbmFyeSIsInNjcmlwdEF0dHJzIiwiY2hhcnNldCIsInNjcmlwdENoYXJzZXQiLCJldnQiLCJvbGRDYWxsYmFja3MiLCJyanNvbnAiLCJqc29ucCIsImpzb25wQ2FsbGJhY2siLCJvcmlnaW5hbFNldHRpbmdzIiwiY2FsbGJhY2tOYW1lIiwib3ZlcndyaXR0ZW4iLCJyZXNwb25zZUNvbnRhaW5lciIsImpzb25Qcm9wIiwiY3JlYXRlSFRNTERvY3VtZW50IiwiaW1wbGVtZW50YXRpb24iLCJrZWVwU2NyaXB0cyIsInBhcnNlZCIsInBhcmFtcyIsImFuaW1hdGVkIiwib2Zmc2V0Iiwic2V0T2Zmc2V0IiwiY3VyUG9zaXRpb24iLCJjdXJMZWZ0IiwiY3VyQ1NTVG9wIiwiY3VyVG9wIiwiY3VyT2Zmc2V0IiwiY3VyQ1NTTGVmdCIsImN1ckVsZW0iLCJ1c2luZyIsInJlY3QiLCJ3aW4iLCJwYWdlWU9mZnNldCIsInBhZ2VYT2Zmc2V0Iiwib2Zmc2V0UGFyZW50IiwicGFyZW50T2Zmc2V0Iiwic2Nyb2xsVG8iLCJIZWlnaHQiLCJXaWR0aCIsImRlZmF1bHRFeHRyYSIsImZ1bmNOYW1lIiwidW5iaW5kIiwiZGVsZWdhdGUiLCJ1bmRlbGVnYXRlIiwiaG92ZXIiLCJmbk92ZXIiLCJmbk91dCIsInByb3h5IiwiaG9sZFJlYWR5IiwiaG9sZCIsInBhcnNlSlNPTiIsImlzTnVtZXJpYyIsImlzTmFOIiwidHJpbSIsIl9qUXVlcnkiLCJfJCIsIiQiLCJub0NvbmZsaWN0IiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJfY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVzY3JpcHRvciIsIkNvbnN0cnVjdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiZGVmYXVsdCIsIlR5cGUiLCJfbGVuMiIsIl9rZXkyIiwiX3JlZjIiLCJyZXN0IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX3JlYWN0MiIsIlN0eWxlZCIsInJlbmRlciIsImNscyIsImFwcGx5Q2xhc3MiLCJfcmVhY3QiLCJoeWRyYXRlIiwiZWxlbWVudCIsImRvbSIsImlzSHlkcmF0aW5nIiwiX3JlYWN0RG9tIiwiX3Byb3BUeXBlczIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0dsYW0yIiwiX3BhcnNlMiIsIl9nZW5lcmF0ZTIiLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiUmVmZXJlbmNlRXJyb3IiLCJpc0Jyb3dzZXIiLCJudWxsQ2xhc3MiLCJfUmVhY3QkQ29tcG9uZW50IiwiX3JlZiIsIl90ZW1wIiwiX3RoaXMiLCJfbGVuIiwiX19wcm90b19fIiwiZ2xhbSIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsInNldFByb3RvdHlwZU9mIiwiX2luaGVyaXRzIiwiZmx1c2giLCJfdGhpczIiLCJhc3QiLCJpc1RhZ2dlZCIsImdlbmVyYXRlZCIsIkNoaWxkcmVuIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJDb21wb25lbnQiLCJkaXNwbGF5TmFtZSIsImNvbnRleHRUeXBlcyIsImNoaWxkQ29udGV4dFR5cGVzIiwiY2hlY2tEQ0UiLCJfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18iLCJkb21Ub1JlYWN0IiwiYXR0cmlidXRlc1RvUHJvcHMiLCJodG1sVG9ET00iLCJkb21QYXJzZXJPcHRpb25zIiwibG93ZXJDYXNlQXR0cmlidXRlTmFtZXMiLCJIVE1MUmVhY3RQYXJzZXIiLCJodG1scGFyc2VyMiIsIkVsZW1lbnQiLCJyZWdleCIsIl9taXR0MiIsIl90YWJiYWJsZTIiLCJfYW5pbWF0aW9uQnVzMiIsIl9yZXNpemVPYnNlcnZlclBvbHlmaWxsMiIsIl9QYWdlckVsZW1lbnQ0IiwiX3V0aWxzIiwiVFJBTlNGT1JNIiwiaXNXaW5kb3dEZWZpbmVkIiwiVHJhY2siLCJfUGFnZXJFbGVtZW50IiwidHJhY2tQb3NpdGlvbiIsIl9wYWdlciRnZXRQb3NpdGlvblZhbCIsInBhZ2VyIiwiZ2V0UG9zaXRpb25WYWx1ZSIsIngiLCJ5IiwidHJhY2tTaXplIiwiZ2V0VHJhY2tTaXplIiwiX3BhZ2VyJG9wdGlvbnMiLCJheGlzIiwidmlld3NUb1Nob3ciLCJ2aWV3cyIsIlZpZXciLCJfUGFnZXJFbGVtZW50MiIsInJlc3RPcHRpb25zIiwiaW5Cb3VuZHMiLCJ0YWJiYWJsZUNoaWxkcmVuIiwic2V0Q3VycmVudCIsInNldFZpc2libGUiLCJzZXRUYXJnZXQiLCJzZXRPcmlnaW4iLCJzZXRUYWJiYWJsZUNoaWxkcmVuIiwiaXNDdXJyZW50IiwiaXNWaXNpYmxlIiwiX3BhZ2VyJG9wdGlvbnMyIiwiYWxpZ24iLCJnZXRTdGFydENvb3JkcyIsImdldEFsaWduT2Zmc2V0Iiwib3JpZ2luIiwiX3BhZ2VyJG9wdGlvbnMzIiwiaW5maW5pdGUiLCJ2ZXJ0aWNhbEFsaWduIiwiZ2V0UG9zaXRpb24iLCJhbmltYXRpb25CdXMiLCJkZWZhdWx0T3B0aW9ucyIsInZpZXdzVG9Nb3ZlIiwiY29udGFpbiIsImF1dG9TaXplIiwiYW5pbWF0aW9ucyIsImluc3RhbnQiLCJzd2lwZSIsInN3aXBlVGhyZXNob2xkIiwiZmxpY2tUaW1lb3V0IiwiYWNjZXNzaWJpbGl0eSIsIlBhZ2VyIiwiX3RoaXMzIiwiZnJhbWUiLCJzZXRTaXplIiwidHJhY2siLCJmb3JFYWNoIiwic2V0UG9zaXRpb25WYWx1ZSIsInNldFZpZXdTdHlsZXMiLCJlbWl0IiwiZW1pdHRlciIsImN1cnJlbnRJbmRleCIsImN1cnJlbnRWaWV3IiwiY3VycmVudFR3ZWVuIiwiaXNTd2lwaW5nIiwicmVzaXplT2JzZXJ2ZXIiLCJsYXN0T3B0aW9ucyIsImdldEN1cnJlbnRJbmRpY2llcyIsInNldEN1cnJlbnRWaWV3Iiwic3VwcHJlc3NFdmVudCIsIm9ic2VydmUiLCJfdmlldyIsImRpc2Nvbm5lY3QiLCJkaXJlY3Rpb24iLCJfcmVmMiRkaXJlY3Rpb24iLCJfcmVmMiRpbmRleCIsIl9yZWYyJHN1cHByZXNzRXZlbnQiLCJfb3B0aW9ucyIsIm5ld0luZGV4IiwicHJldmlvdXNJbmRleCIsImNsYW1wIiwicHJldmlvdXNWaWV3IiwiZ2V0VmlldyIsInJhbmdlU3RhcnQiLCJyYW5nZUVuZCIsInJhbmdlIiwiX29wdGlvbnMyIiwiZmxvb3IiLCJ0cmFja0VuZE9mZnNldCIsImdldEZyYW1lU2l6ZSIsIl9vcHRpb25zMyIsIndyYXBwZWR0cmFja1Bvc2l0aW9uIiwibW9kdWxvIiwicmVkdWNlIiwibGFzdFBvc2l0aW9uIiwidmlld1NpemUiLCJnZXRTaXplIiwibmV4dFBvc2l0aW9uIiwiYWJzIiwic2V0UG9zaXRpb24iLCJpbmRpY2VzIiwiX3RoaXM0Iiwid2lkdGhzIiwiaGVpZ2h0cyIsInN1bSIsIl9vcHRpb25zNCIsImN1cnJlbnRWaWV3cyIsIm1pbkluZGV4IiwibWF4SW5kZXgiLCJfcmVmMyIsIl9yZWYzJGF1dG9TaXplIiwiX3JlZjMkZnVsbFNpemUiLCJmdWxsU2l6ZSIsImRpbWVuc2lvbnMiLCJnZXRNYXhEaW1lbnNpb25zIiwiaW5jbHVkZUxhc3RTbGlkZSIsImxhc3RJbmRleCIsInNpemUiLCJfb3B0aW9uczUiLCJ1dGlscyIsIkFuaW1hdGVkVmlldyIsIkZyYW1lIiwiVmlld1BhZ2VyIiwiX1ZpZXdQYWdlcjMiLCJfRnJhbWUzIiwiX1RyYWNrMyIsIl9WaWV3MyIsIl9BbmltYXRlZFZpZXczIiwiX3V0aWxzMyIsIm1pbiIsImFycjIiLCJmcm9tIiwiX3RvQ29uc3VtYWJsZUFycmF5Iiwic2Vjb25kUGVyRnJhbWUiLCJkZXN0WCIsImsiLCJwcmVjaXNpb24iLCJuZXdWIiwibmV3WCIsInJldXNlZFR1cGxlIiwiZ2V0TmFub1NlY29uZHMiLCJocnRpbWUiLCJsb2FkVGltZSIsInBlcmZvcm1hbmNlIiwiaHIiLCJnZXRUaW1lIiwidmVuZG9ycyIsInJhZiIsImNhZiIsIl9ub3ciLCJjcCIsImNhbmNlbGxlZCIsImNhbmNlbCIsInBvbHlmaWxsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJjdXJyZW50U3R5bGUiLCJjdXJyZW50VmVsb2NpdHkiLCJzdHlsZVZhbHVlIiwicmVzZXJ2ZWQiLCJtYXliZU5lZWRRdW90ZXMiLCJNYXBTaGltIiwiTWFwIiwiZ2V0SW5kZXgiLCJzb21lIiwiZW50cnkiLCJhbm9ueW1vdXMiLCJfX2VudHJpZXNfXyIsInByb3RvdHlwZUFjY2Vzc29ycyIsImRlbGV0ZSIsImVudHJpZXMiLCJjbGVhciIsImN0eCIsImdsb2JhbCQxIiwiRnVuY3Rpb24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUkMSIsInRyYW5zaXRpb25LZXlzIiwibXV0YXRpb25PYnNlcnZlclN1cHBvcnRlZCIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIiLCJjb25uZWN0ZWRfIiwibXV0YXRpb25FdmVudHNBZGRlZF8iLCJtdXRhdGlvbnNPYnNlcnZlcl8iLCJvYnNlcnZlcnNfIiwib25UcmFuc2l0aW9uRW5kXyIsInJlZnJlc2giLCJsZWFkaW5nQ2FsbCIsInRyYWlsaW5nQ2FsbCIsImxhc3RDYWxsVGltZSIsInJlc29sdmVQZW5kaW5nIiwidGltZW91dENhbGxiYWNrIiwidGhyb3R0bGUiLCJhZGRPYnNlcnZlciIsIm9ic2VydmVyIiwiY29ubmVjdF8iLCJyZW1vdmVPYnNlcnZlciIsIm9ic2VydmVycyIsImRpc2Nvbm5lY3RfIiwidXBkYXRlT2JzZXJ2ZXJzXyIsImFjdGl2ZU9ic2VydmVycyIsImdhdGhlckFjdGl2ZSIsImhhc0FjdGl2ZSIsImJyb2FkY2FzdEFjdGl2ZSIsImNoaWxkTGlzdCIsImNoYXJhY3RlckRhdGEiLCJzdWJ0cmVlIiwicmVmIiwicHJvcGVydHlOYW1lIiwiZ2V0SW5zdGFuY2UiLCJpbnN0YW5jZV8iLCJkZWZpbmVDb25maWd1cmFibGUiLCJnZXRXaW5kb3dPZiIsImVtcHR5UmVjdCIsImNyZWF0ZVJlY3RJbml0IiwidG9GbG9hdCIsImdldEJvcmRlcnNTaXplIiwicG9zaXRpb25zIiwiZ2V0SFRNTEVsZW1lbnRDb250ZW50UmVjdCIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0IiwicGFkZGluZ3MiLCJnZXRQYWRkaW5ncyIsImhvcml6UGFkIiwidmVydFBhZCIsImJvdHRvbSIsImJveFNpemluZyIsImlzRG9jdW1lbnRFbGVtZW50IiwidmVydFNjcm9sbGJhciIsImhvcml6U2Nyb2xsYmFyIiwiaXNTVkdHcmFwaGljc0VsZW1lbnQiLCJTVkdHcmFwaGljc0VsZW1lbnQiLCJTVkdFbGVtZW50IiwiZ2V0QkJveCIsImdldENvbnRlbnRSZWN0IiwiYmJveCIsImdldFNWR0NvbnRlbnRSZWN0IiwiUmVzaXplT2JzZXJ2YXRpb24iLCJicm9hZGNhc3RXaWR0aCIsImJyb2FkY2FzdEhlaWdodCIsImNvbnRlbnRSZWN0XyIsImlzQWN0aXZlIiwiYnJvYWRjYXN0UmVjdCIsIlJlc2l6ZU9ic2VydmVyRW50cnkiLCJyZWN0SW5pdCIsIkNvbnN0ciIsImNvbnRlbnRSZWN0IiwiRE9NUmVjdFJlYWRPbmx5IiwiUmVzaXplT2JzZXJ2ZXJTUEkiLCJjb250cm9sbGVyIiwiY2FsbGJhY2tDdHgiLCJhY3RpdmVPYnNlcnZhdGlvbnNfIiwib2JzZXJ2YXRpb25zXyIsImNhbGxiYWNrXyIsImNvbnRyb2xsZXJfIiwiY2FsbGJhY2tDdHhfIiwib2JzZXJ2YXRpb25zIiwidW5vYnNlcnZlIiwiY2xlYXJBY3RpdmUiLCJ0aGlzJDEiLCJvYnNlcnZhdGlvbiIsIldlYWtNYXAiLCJSZXNpemVPYnNlcnZlciIsInN0b3JlZEZvY3VzRWxlbWVudCIsInN0b3JlRm9jdXMiLCJjbGVhclN0b3JlZEZvY3VzIiwicmVzdG9yZUZvY3VzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwicHJvcElzRW51bWVyYWJsZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9PYmplY3QiLCJ0ZXN0MSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0ZXN0MiIsInRlc3QzIiwic2hvdWxkVXNlTmF0aXZlIiwic3ltYm9scyIsInNpbXVsYXRpb25zIiwiY2FuU2ltdWxhdGUiLCJ0b0NTU0FycmF5IiwicGxhaW4iLCJzZWxlY3RzIiwibWVkaWFzIiwic3VwcG9ydHMiLCJ0b0NTUyIsIl9DU1NQcm9wZXJ0eU9wZXJhdGlvbnMiLCJfcGx1Z2lucyIsInN0ciIsInNlbGVjdG9yVG9rZW5pemVyIiwic3BsaXRTZWxlY3RvciIsInJlcyIsImluUGFyZW4iLCJwYXRoIiwicHJlZml4ZXMiLCJmYWxsYmFja3MiLCJjb250ZW50V3JhcCIsImNyZWF0ZU1hcmt1cEZvclN0eWxlcyIsInByb2Nlc3NTdHlsZU5hbWUiLCJjb21wb25lbnQiLCJzZXJpYWxpemVkIiwic3R5bGVOYW1lIiwiX2Rhbmdlcm91c1N0eWxlVmFsdWUyIiwiX2h5cGhlbmF0ZVN0eWxlTmFtZTIiLCJfbWVtb2l6ZVN0cmluZ09ubHkyIiwid2FybmluZyIsImNoYXJBdCIsIl9wb2x5bGluZWFyU2NhbGUiLCJfcG9seWxpbmVhclNjYWxlMiIsInRyYW5zZm9ybVVuaXRzIiwicGVyc3BlY3RpdmUiLCJyb3RhdGUiLCJyb3RhdGVYIiwicm90YXRlWSIsInJvdGF0ZVoiLCJzY2FsZVgiLCJzY2FsZVkiLCJzY2FsZVoiLCJza2V3Iiwic2tld1giLCJza2V3WSIsInRyYW5zbGF0ZVgiLCJ0cmFuc2xhdGVZIiwidHJhbnNsYXRlWiIsInRyYW5zZm9ybUtleXMiLCJBbmltYXRpb25CdXMiLCJ0cmFuc2Zvcm1WYWx1ZXMiLCJzdG9wcyIsInRyYW5zZm9ybSIsImciLCJfaW50ZXJvcFJlcXVpcmUiLCJfTW90aW9uIiwiTW90aW9uIiwiX1N0YWdnZXJlZE1vdGlvbiIsIlN0YWdnZXJlZE1vdGlvbiIsIl9UcmFuc2l0aW9uTW90aW9uIiwiVHJhbnNpdGlvbk1vdGlvbiIsIl9zcHJpbmciLCJzcHJpbmciLCJfcHJlc2V0cyIsInByZXNldHMiLCJfc3RyaXBTdHlsZSIsInN0cmlwU3R5bGUiLCJfcmVvcmRlcktleXMiLCJyZW9yZGVyS2V5cyIsImNhY2hlZFNldFRpbWVvdXQiLCJjYWNoZWRDbGVhclRpbWVvdXQiLCJkZWZhdWx0U2V0VGltb3V0IiwiZGVmYXVsdENsZWFyVGltZW91dCIsInJ1blRpbWVvdXQiLCJmdW4iLCJjdXJyZW50UXVldWUiLCJkcmFpbmluZyIsInF1ZXVlSW5kZXgiLCJjbGVhblVwTmV4dFRpY2siLCJkcmFpblF1ZXVlIiwibWFya2VyIiwicnVuQ2xlYXJUaW1lb3V0IiwiSXRlbSIsIm5leHRUaWNrIiwidGl0bGUiLCJicm93c2VyIiwiZW52IiwiYXJndiIsInZlcnNpb24iLCJ2ZXJzaW9ucyIsImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwibGlzdGVuZXJzIiwiYmluZGluZyIsImN3ZCIsImNoZGlyIiwidW1hc2siLCJub1dvYmJsZSIsInN0aWZmbmVzcyIsImRhbXBpbmciLCJnZW50bGUiLCJ3b2JibHkiLCJzdGlmZiIsInJlYWN0UHJvcGVydHkiLCJ1dGlsaXRpZXMiLCJnZXRQcm9wTmFtZSIsImF0dHJpYnV0ZU5hbWUiLCJwb3NzaWJsZVN0YW5kYXJkTmFtZXMiLCJhdHRyaWJ1dGVOYW1lTG93ZXJDYXNlZCIsImF0dHJpYnV0ZVZhbHVlIiwicHJvcE5hbWUiLCJwcm9wZXJ0eUluZm8iLCJpbnB1dElzVmFsdWVPbmx5IiwiaXNDdXN0b21BdHRyaWJ1dGUiLCJnZXRQcm9wZXJ0eUluZm8iLCJCT09MRUFOIiwiT1ZFUkxPQURFRF9CT09MRUFOIiwiUFJFU0VSVkVfQ1VTVE9NX0FUVFJJQlVURVMiLCJzZXRTdHlsZVByb3AiLCJSZWFjdCIsInN0eWxlVG9KUyIsInN0eWxlVG9KU09wdGlvbnMiLCJyZWFjdENvbXBhdCIsImVsZW1lbnRzV2l0aE5vVGV4dENoaWxkcmVuIiwiU2V0IiwiaW52ZXJ0T2JqZWN0Iiwib3ZlcnJpZGUiLCJpc092ZXJyaWRlUHJlc2VudCIsIm92ZXJyaWRlcyIsImlzQ3VzdG9tQ29tcG9uZW50IiwidGFnTmFtZSIsImNhblRleHRCZUNoaWxkT2ZOb2RlIiwiY29uc3RhbnRzIiwiZG9taGFuZGxlciIsIkNBU0VfU0VOU0lUSVZFX1RBR19OQU1FUyIsIkNvbW1lbnQiLCJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLCJUZXh0IiwiY2FzZVNlbnNpdGl2ZVRhZ05hbWVzTWFwIiwiZm9ybWF0QXR0cmlidXRlcyIsImF0dHJpYnV0ZSIsImZvcm1hdFRhZ05hbWUiLCJjYXNlU2Vuc2l0aXZlVGFnTmFtZSIsImdldENhc2VTZW5zaXRpdmVUYWdOYW1lIiwiZm9ybWF0RE9NIiwiZGlyZWN0aXZlIiwic3Vic3RyaW5nIiwiaXNJRSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsIkVsZW1lbnRUeXBlIiwiRG9jdHlwZSIsIkNEQVRBIiwiVGFnIiwiU3R5bGUiLCJTY3JpcHQiLCJEaXJlY3RpdmUiLCJSb290IiwiaXNUYWciLCJkb21wYXJzZXIiLCJESVJFQ1RJVkVfUkVHRVgiLCJpc0JvdWdodCIsImRlc2NyaXB0aW9uIiwibGluayIsIkZyYWdtZW50IiwiU3RyaWN0TW9kZSIsIlByb2ZpbGVyIiwicSIsIlN1c3BlbnNlIiwidSIsImZvciIsInoiLCJBIiwiaXNNb3VudGVkIiwiZW5xdWV1ZUZvcmNlVXBkYXRlIiwiZW5xdWV1ZVJlcGxhY2VTdGF0ZSIsImVucXVldWVTZXRTdGF0ZSIsIkIiLCJDIiwicmVmcyIsInVwZGF0ZXIiLCJEIiwiRSIsImlzUmVhY3RDb21wb25lbnQiLCJzZXRTdGF0ZSIsImZvcmNlVXBkYXRlIiwiRiIsImlzUHVyZVJlYWN0Q29tcG9uZW50IiwiRyIsIkgiLCJJIiwiX19zZWxmIiwiX19zb3VyY2UiLCJKIiwiaCIsImYiLCJkZWZhdWx0UHJvcHMiLCIkJHR5cGVvZiIsIl9vd25lciIsIkwiLCJNIiwiTiIsIk8iLCJLIiwiUCIsIlEiLCJfc3RhdHVzIiwiX3Jlc3VsdCIsIlIiLCJTIiwiVCIsIlJlYWN0Q3VycmVudERpc3BhdGNoZXIiLCJSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyIsInRyYW5zaXRpb24iLCJSZWFjdEN1cnJlbnRPd25lciIsIklzU29tZVJlbmRlcmVyQWN0aW5nIiwib25seSIsIlB1cmVDb21wb25lbnQiLCJfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCIsImNsb25lRWxlbWVudCIsImNyZWF0ZUNvbnRleHQiLCJfY2FsY3VsYXRlQ2hhbmdlZEJpdHMiLCJfY3VycmVudFZhbHVlIiwiX2N1cnJlbnRWYWx1ZTIiLCJfdGhyZWFkQ291bnQiLCJQcm92aWRlciIsIkNvbnN1bWVyIiwiY3JlYXRlRmFjdG9yeSIsImNyZWF0ZVJlZiIsImZvcndhcmRSZWYiLCJpc1ZhbGlkRWxlbWVudCIsImxhenkiLCJfcGF5bG9hZCIsIl9pbml0IiwibWVtbyIsInVzZUNhbGxiYWNrIiwidXNlQ29udGV4dCIsInVzZURlYnVnVmFsdWUiLCJ1c2VFZmZlY3QiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlTGF5b3V0RWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZHVjZXIiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImFhIiwiYmEiLCJjYSIsImRhIiwiZWEiLCJmYSIsImhhIiwiaWEiLCJqYSIsImthIiwiYWNjZXB0c0Jvb2xlYW5zIiwiYXR0cmlidXRlTmFtZXNwYWNlIiwibXVzdFVzZVByb3BlcnR5Iiwic2FuaXRpemVVUkwiLCJyZW1vdmVFbXB0eVN0cmluZyIsIm9hIiwicGEiLCJxYSIsIm1hIiwibmEiLCJsYSIsInNldEF0dHJpYnV0ZU5TIiwieGxpbmtIcmVmIiwicmEiLCJzYSIsInRhIiwidWEiLCJ3YSIsInhhIiwieWEiLCJ6YSIsIkFhIiwiQmEiLCJDYSIsIkRhIiwiRWEiLCJGYSIsIkdhIiwiSGEiLCJJYSIsIkphIiwiTWEiLCJLYSIsIkxhIiwiTmEiLCJPYSIsIlBhIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiUWEiLCJfcmVuZGVyIiwiUmEiLCJTYSIsIlRhIiwiVmEiLCJfdmFsdWVUcmFja2VyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0VmFsdWUiLCJzZXRWYWx1ZSIsInN0b3BUcmFja2luZyIsIlVhIiwiV2EiLCJYYSIsIllhIiwiZGVmYXVsdENoZWNrZWQiLCJfd3JhcHBlclN0YXRlIiwiaW5pdGlhbENoZWNrZWQiLCJaYSIsImluaXRpYWxWYWx1ZSIsImNvbnRyb2xsZWQiLCIkYSIsImFiIiwiYmIiLCJjYiIsImViIiwiZGIiLCJmYiIsImRlZmF1bHRTZWxlY3RlZCIsImdiIiwiaGIiLCJpYiIsImpiIiwia2IiLCJsYiIsIm1iIiwibmIiLCJvYiIsIk1TQXBwIiwiZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24iLCJ2YWx1ZU9mIiwicGIiLCJxYiIsImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IiwiYm9yZGVySW1hZ2VPdXRzZXQiLCJib3JkZXJJbWFnZVNsaWNlIiwiYm9yZGVySW1hZ2VXaWR0aCIsImJveEZsZXgiLCJib3hGbGV4R3JvdXAiLCJib3hPcmRpbmFsR3JvdXAiLCJjb2x1bW5Db3VudCIsImNvbHVtbnMiLCJmbGV4IiwiZmxleEdyb3ciLCJmbGV4UG9zaXRpdmUiLCJmbGV4U2hyaW5rIiwiZmxleE5lZ2F0aXZlIiwiZmxleE9yZGVyIiwiZ3JpZEFyZWEiLCJncmlkUm93IiwiZ3JpZFJvd0VuZCIsImdyaWRSb3dTcGFuIiwiZ3JpZFJvd1N0YXJ0IiwiZ3JpZENvbHVtbiIsImdyaWRDb2x1bW5FbmQiLCJncmlkQ29sdW1uU3BhbiIsImdyaWRDb2x1bW5TdGFydCIsImxpbmVDbGFtcCIsImxpbmVIZWlnaHQiLCJvcmRlciIsIm9ycGhhbnMiLCJ0YWJTaXplIiwid2lkb3dzIiwiekluZGV4Iiwiem9vbSIsImZpbGxPcGFjaXR5IiwiZmxvb2RPcGFjaXR5Iiwic3RvcE9wYWNpdHkiLCJzdHJva2VEYXNoYXJyYXkiLCJzdHJva2VEYXNob2Zmc2V0Iiwic3Ryb2tlTWl0ZXJsaW1pdCIsInN0cm9rZU9wYWNpdHkiLCJzdHJva2VXaWR0aCIsInJiIiwic2IiLCJ0YiIsInViIiwibWVudWl0ZW0iLCJhcmVhIiwiYnIiLCJlbWJlZCIsImltZyIsImtleWdlbiIsIm1ldGEiLCJ3YnIiLCJ2YiIsIndiIiwieGIiLCJzcmNFbGVtZW50IiwiY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQiLCJ5YiIsInpiIiwiQWIiLCJCYiIsIkNiIiwic3RhdGVOb2RlIiwiRGIiLCJFYiIsIkZiIiwiR2IiLCJIYiIsIkliIiwiSmIiLCJLYiIsIkxiIiwiTWIiLCJPYiIsIlBiIiwiUWIiLCJSYiIsIm9uRXJyb3IiLCJTYiIsIlRiIiwiVWIiLCJWYiIsIldiIiwiWGIiLCJaYiIsImFsdGVybmF0ZSIsInJldHVybiIsImZsYWdzIiwiJGIiLCJtZW1vaXplZFN0YXRlIiwiZGVoeWRyYXRlZCIsImFjIiwiY2MiLCJjaGlsZCIsImJjIiwiZGMiLCJlYyIsImZjIiwiZ2MiLCJoYyIsImljIiwiamMiLCJrYyIsImxjIiwibWMiLCJuYyIsIm9jIiwicGMiLCJxYyIsInJjIiwiYmxvY2tlZE9uIiwiZG9tRXZlbnROYW1lIiwiZXZlbnRTeXN0ZW1GbGFncyIsInRhcmdldENvbnRhaW5lcnMiLCJzYyIsInRjIiwidmMiLCJ3YyIsImxhbmVQcmlvcml0eSIsInVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSIsInByaW9yaXR5IiwiY29udGFpbmVySW5mbyIsInhjIiwieWMiLCJ6YyIsIkFjIiwiQmMiLCJ1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrIiwidW5zdGFibGVfTm9ybWFsUHJpb3JpdHkiLCJDYyIsIkRjIiwiRWMiLCJhbmltYXRpb25lbmQiLCJhbmltYXRpb25pdGVyYXRpb24iLCJhbmltYXRpb25zdGFydCIsInRyYW5zaXRpb25lbmQiLCJGYyIsIkdjIiwiSGMiLCJJYyIsIkpjIiwiS2MiLCJMYyIsIk1jIiwiTmMiLCJPYyIsIlBjIiwiUWMiLCJ1bnN0YWJsZV9ub3ciLCJSYyIsIlVjIiwicGVuZGluZ0xhbmVzIiwiZXhwaXJlZExhbmVzIiwic3VzcGVuZGVkTGFuZXMiLCJwaW5nZWRMYW5lcyIsIlZjIiwiZW50YW5nbGVkTGFuZXMiLCJlbnRhbmdsZW1lbnRzIiwiV2MiLCJYYyIsIlljIiwiWmMiLCIkYyIsImV2ZW50VGltZXMiLCJjbHozMiIsImJkIiwiY2QiLCJsb2ciLCJMTjIiLCJkZCIsInVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5IiwiZWQiLCJmZCIsImdkIiwiaGQiLCJ1YyIsImpkIiwia2QiLCJsZCIsIm1kIiwibmQiLCJvZCIsInBkIiwicWQiLCJyZCIsIl9yZWFjdE5hbWUiLCJfdGFyZ2V0SW5zdCIsImNhbmNlbEJ1YmJsZSIsInBlcnNpc3QiLCJpc1BlcnNpc3RlbnQiLCJ3ZCIsInhkIiwieWQiLCJzZCIsImlzVHJ1c3RlZCIsInVkIiwidmQiLCJBZCIsImdldE1vZGlmaWVyU3RhdGUiLCJ6ZCIsImZyb21FbGVtZW50IiwibW92ZW1lbnRYIiwibW92ZW1lbnRZIiwiQmQiLCJEZCIsImRhdGFUcmFuc2ZlciIsIkZkIiwiSGQiLCJhbmltYXRpb25OYW1lIiwiZWxhcHNlZFRpbWUiLCJwc2V1ZG9FbGVtZW50IiwiSmQiLCJjbGlwYm9hcmREYXRhIiwiTGQiLCJNZCIsIkVzYyIsIlNwYWNlYmFyIiwiTGVmdCIsIlVwIiwiUmlnaHQiLCJEb3duIiwiRGVsIiwiV2luIiwiTWVudSIsIkFwcHMiLCJTY3JvbGwiLCJNb3pQcmludGFibGVLZXkiLCJOZCIsIjgiLCI5IiwiMTIiLCIxMyIsIjE2IiwiMTciLCIxOCIsIjE5IiwiMjAiLCIyNyIsIjMyIiwiMzMiLCIzNCIsIjM1IiwiMzYiLCIzNyIsIjM4IiwiMzkiLCI0MCIsIjQ1IiwiNDYiLCIxMTIiLCIxMTMiLCIxMTQiLCIxMTUiLCIxMTYiLCIxMTciLCIxMTgiLCIxMTkiLCIxMjAiLCIxMjEiLCIxMjIiLCIxMjMiLCIxNDQiLCIxNDUiLCIyMjQiLCJPZCIsIkFsdCIsIkNvbnRyb2wiLCJNZXRhIiwiU2hpZnQiLCJQZCIsIlJkIiwicmVwZWF0IiwibG9jYWxlIiwiVGQiLCJwcmVzc3VyZSIsInRhbmdlbnRpYWxQcmVzc3VyZSIsInRpbHRYIiwidGlsdFkiLCJ0d2lzdCIsImlzUHJpbWFyeSIsIlZkIiwiWGQiLCJaZCIsImRlbHRhWCIsIndoZWVsRGVsdGFYIiwiZGVsdGFZIiwid2hlZWxEZWx0YVkiLCJ3aGVlbERlbHRhIiwiZGVsdGFaIiwiZGVsdGFNb2RlIiwiJGQiLCJhZSIsImJlIiwiZG9jdW1lbnRNb2RlIiwiY2UiLCJkZSIsImVlIiwiZmUiLCJnZSIsImhlIiwiaWUiLCJsZSIsImNvbG9yIiwiZGF0ZSIsImRhdGV0aW1lIiwiZW1haWwiLCJtb250aCIsIm51bWJlciIsInNlYXJjaCIsInRlbCIsIndlZWsiLCJtZSIsIm5lIiwib2UiLCJwZSIsInFlIiwicmUiLCJzZSIsInRlIiwidWUiLCJ2ZSIsIndlIiwieGUiLCJ5ZSIsInplIiwib25pbnB1dCIsIkFlIiwiZGV0YWNoRXZlbnQiLCJCZSIsIkNlIiwiRGUiLCJFZSIsIkZlIiwiSGUiLCJJZSIsIkplIiwiS2UiLCJMZSIsIk5lIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJjb250ZW50V2luZG93IiwiT2UiLCJjb250ZW50RWRpdGFibGUiLCJQZSIsIlFlIiwiUmUiLCJTZSIsIlRlIiwiVWUiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsImFuY2hvck5vZGUiLCJnZXRTZWxlY3Rpb24iLCJhbmNob3JPZmZzZXQiLCJmb2N1c05vZGUiLCJmb2N1c09mZnNldCIsIlZlIiwiV2UiLCJYZSIsIlllIiwiWmUiLCJZYiIsImxpc3RlbmVyIiwiJGUiLCJhZiIsImJmIiwiY2YiLCJkZiIsImNhcHR1cmUiLCJwYXNzaXZlIiwiTmIiLCJlZiIsImZmIiwiZ2YiLCJoZiIsImplIiwiY2hhciIsImtlIiwiamYiLCJrZiIsImxmIiwibWYiLCJhdXRvRm9jdXMiLCJuZiIsIm9mIiwicGYiLCJxZiIsInJmIiwic2YiLCJwcmV2aW91c1NpYmxpbmciLCJ0ZiIsInZmIiwid2YiLCJ4ZiIsInlmIiwiemYiLCJBZiIsIkJmIiwiQ2YiLCJEZiIsIkVmIiwiX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCIsIl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0IiwiRmYiLCJHZiIsIkhmIiwiSWYiLCJnZXRDaGlsZENvbnRleHQiLCJKZiIsIl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0IiwiS2YiLCJMZiIsIk1mIiwiTmYiLCJPZiIsIlBmIiwidW5zdGFibGVfY2FuY2VsQ2FsbGJhY2siLCJRZiIsInVuc3RhYmxlX3Nob3VsZFlpZWxkIiwiUmYiLCJ1bnN0YWJsZV9yZXF1ZXN0UGFpbnQiLCJTZiIsIlRmIiwidW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwiLCJVZiIsInVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5IiwiVmYiLCJXZiIsIlhmIiwidW5zdGFibGVfTG93UHJpb3JpdHkiLCJZZiIsInVuc3RhYmxlX0lkbGVQcmlvcml0eSIsIlpmIiwiJGYiLCJhZyIsImJnIiwiY2ciLCJkZyIsImVnIiwiZmciLCJnZyIsImhnIiwiaWciLCJqZyIsImtnIiwibGciLCJtZyIsIm5nIiwib2ciLCJwZyIsInFnIiwicmciLCJzZyIsImNoaWxkTGFuZXMiLCJ0ZyIsImRlcGVuZGVuY2llcyIsImZpcnN0Q29udGV4dCIsImxhbmVzIiwidWciLCJ2ZyIsIm9ic2VydmVkQml0cyIsInJlc3BvbmRlcnMiLCJ3ZyIsInhnIiwidXBkYXRlUXVldWUiLCJiYXNlU3RhdGUiLCJmaXJzdEJhc2VVcGRhdGUiLCJsYXN0QmFzZVVwZGF0ZSIsInNoYXJlZCIsInBlbmRpbmciLCJlZmZlY3RzIiwieWciLCJ6ZyIsImV2ZW50VGltZSIsImxhbmUiLCJwYXlsb2FkIiwiQWciLCJCZyIsIkNnIiwiRGciLCJFZyIsIkZnIiwiR2ciLCJLZyIsIl9yZWFjdEludGVybmFscyIsIkhnIiwiSWciLCJKZyIsIkxnIiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwiTWciLCJjb250ZXh0VHlwZSIsIk5nIiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiT2ciLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSIsIlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnREaWRNb3VudCIsIlBnIiwiUWciLCJfc3RyaW5nUmVmIiwiUmciLCJTZyIsImxhc3RFZmZlY3QiLCJuZXh0RWZmZWN0IiwiZmlyc3RFZmZlY3QiLCJUZyIsIlVnIiwiZWxlbWVudFR5cGUiLCJWZyIsIldnIiwiWGciLCJZZyIsIlpnIiwiJGciLCJhaCIsImJoIiwiZGgiLCJlaCIsImZoIiwiZ2giLCJoaCIsImloIiwibWVtb2l6ZWRQcm9wcyIsInJldmVhbE9yZGVyIiwiamgiLCJraCIsImxoIiwibWgiLCJuaCIsIm9oIiwicGVuZGluZ1Byb3BzIiwicGgiLCJxaCIsInJoIiwic2giLCJ1aCIsIl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5IiwidmgiLCJ3aCIsInhoIiwieWgiLCJ6aCIsIkFoIiwiQmgiLCJDaCIsIkRoIiwiRWgiLCJGaCIsIkdoIiwiSGgiLCJiYXNlUXVldWUiLCJJaCIsIkpoIiwiS2giLCJsYXN0UmVuZGVyZWRSZWR1Y2VyIiwiYWN0aW9uIiwiZWFnZXJSZWR1Y2VyIiwiZWFnZXJTdGF0ZSIsImxhc3RSZW5kZXJlZFN0YXRlIiwiTGgiLCJNaCIsIl9nZXRWZXJzaW9uIiwiX3NvdXJjZSIsIm11dGFibGVSZWFkTGFuZXMiLCJOaCIsIlUiLCJnZXRTbmFwc2hvdCIsInN1YnNjcmliZSIsInNldFNuYXBzaG90IiwiT2giLCJQaCIsIlFoIiwiUmgiLCJkZXN0cm95IiwiZGVwcyIsIlNoIiwiVGgiLCJVaCIsIlZoIiwiV2giLCJYaCIsIlloIiwiWmgiLCIkaCIsImFpIiwiYmkiLCJjaSIsImRpIiwicmVhZENvbnRleHQiLCJ1c2VEZWZlcnJlZFZhbHVlIiwidXNlVHJhbnNpdGlvbiIsInVzZU11dGFibGVTb3VyY2UiLCJ1c2VPcGFxdWVJZGVudGlmaWVyIiwidW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyIiwidWYiLCJlaSIsImZpIiwiZ2kiLCJoaSIsImlpIiwiamkiLCJraSIsImxpIiwibWkiLCJiYXNlTGFuZXMiLCJuaSIsIm9pIiwicGkiLCJVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSIsImNvbXBvbmVudFdpbGxVcGRhdGUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJxaSIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsInJpIiwicGVuZGluZ0NvbnRleHQiLCJCaSIsIkRpIiwiRWkiLCJzaSIsInJldHJ5TGFuZSIsInRpIiwiZmFsbGJhY2siLCJ1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayIsInVpIiwidW5zdGFibGVfZXhwZWN0ZWRMb2FkVGltZSIsInZpIiwid2kiLCJ4aSIsInlpIiwiemkiLCJpc0JhY2t3YXJkcyIsInJlbmRlcmluZyIsInJlbmRlcmluZ1N0YXJ0VGltZSIsInRhaWwiLCJ0YWlsTW9kZSIsIkFpIiwiRmkiLCJHaSIsIndhc011bHRpcGxlIiwibXVsdGlwbGUiLCJvbkNsaWNrIiwib25jbGljayIsImNyZWF0ZUVsZW1lbnROUyIsIlYiLCJIaSIsIklpIiwiVyIsIkppIiwiS2kiLCJMaSIsIk1pIiwiTmkiLCJPaSIsIlBpIiwiUWkiLCJSaSIsIlNpIiwiY29tcG9uZW50RGlkQ2F0Y2giLCJUaSIsImNvbXBvbmVudFN0YWNrIiwiVWkiLCJXZWFrU2V0IiwiVmkiLCJXaSIsIlhpIiwiX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUiLCJZaSIsIlppIiwiJGkiLCJhaiIsImJqIiwib25Db21taXRGaWJlclVubW91bnQiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsImNqIiwiZGoiLCJlaiIsImZqIiwiZ2oiLCJfcmVhY3RSb290Q29udGFpbmVyIiwiaGoiLCJpaiIsImpqIiwia2oiLCJsaiIsIm1qIiwibmoiLCJvaiIsInBqIiwiWCIsIlkiLCJxaiIsInJqIiwic2oiLCJ0aiIsInVqIiwidmoiLCJJbmZpbml0eSIsIndqIiwiY2siLCJaIiwieGoiLCJ5aiIsInpqIiwiQWoiLCJCaiIsIkNqIiwiRGoiLCJFaiIsIkZqIiwiR2oiLCJIaiIsIklqIiwiSmoiLCJTYyIsIktqIiwiTGoiLCJNaiIsImNhbGxiYWNrTm9kZSIsImV4cGlyYXRpb25UaW1lcyIsImNhbGxiYWNrUHJpb3JpdHkiLCJUYyIsIk5qIiwiT2oiLCJQaiIsIlFqIiwiUmoiLCJTaiIsIlRqIiwiZmluaXNoZWRXb3JrIiwiZmluaXNoZWRMYW5lcyIsIlVqIiwidGltZW91dEhhbmRsZSIsIldqIiwiWGoiLCJwaW5nQ2FjaGUiLCJZaiIsIlpqIiwidmEiLCJhayIsImJrIiwiZGsiLCJyYW5nZUNvdW50IiwiZm9jdXNlZEVsZW0iLCJzZWxlY3Rpb25SYW5nZSIsImVrIiwiTWUiLCJjcmVhdGVSYW5nZSIsInNldFN0YXJ0IiwicmVtb3ZlQWxsUmFuZ2VzIiwiYWRkUmFuZ2UiLCJzZXRFbmQiLCJvbkNvbW1pdEZpYmVyUm9vdCIsImZrIiwiZ2siLCJpayIsInBlbmRpbmdDaGlsZHJlbiIsImprIiwibXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSIsImtrIiwibGsiLCJtayIsIm5rIiwib2siLCJxayIsImh5ZHJhdGlvbk9wdGlvbnMiLCJtdXRhYmxlU291cmNlcyIsIl9pbnRlcm5hbFJvb3QiLCJyayIsInRrIiwiaGFzQXR0cmlidXRlIiwic2siLCJ1ayIsImhrIiwidW5zdGFibGVfb2JzZXJ2ZWRCaXRzIiwidW5tb3VudCIsInN0cmluZ2lmeSIsImZvcm0iLCJWaiIsInZrIiwiRXZlbnRzIiwid2siLCJmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSIsImJ1bmRsZVR5cGUiLCJyZW5kZXJlclBhY2thZ2VOYW1lIiwieGsiLCJyZW5kZXJlckNvbmZpZyIsIm92ZXJyaWRlSG9va1N0YXRlIiwib3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoIiwib3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoIiwib3ZlcnJpZGVQcm9wcyIsIm92ZXJyaWRlUHJvcHNEZWxldGVQYXRoIiwib3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGgiLCJzZXRTdXNwZW5zZUhhbmRsZXIiLCJzY2hlZHVsZVVwZGF0ZSIsImN1cnJlbnREaXNwYXRjaGVyUmVmIiwiZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIiLCJmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2giLCJzY2hlZHVsZVJlZnJlc2giLCJzY2hlZHVsZVJvb3QiLCJzZXRSZWZyZXNoSGFuZGxlciIsImdldEN1cnJlbnRGaWJlciIsInlrIiwic3VwcG9ydHNGaWJlciIsImluamVjdCIsImNyZWF0ZVBvcnRhbCIsImZpbmRET01Ob2RlIiwiZmx1c2hTeW5jIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsInVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIiwidW5zdGFibGVfY3JlYXRlUG9ydGFsIiwidW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIiLCJNZXNzYWdlQ2hhbm5lbCIsInVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlIiwicG9ydDIiLCJwb3J0MSIsIm9ubWVzc2FnZSIsInBvc3RNZXNzYWdlIiwic29ydEluZGV4IiwiZXhwaXJhdGlvblRpbWUiLCJwcmlvcml0eUxldmVsIiwidW5zdGFibGVfUHJvZmlsaW5nIiwidW5zdGFibGVfY29udGludWVFeGVjdXRpb24iLCJ1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSIsInVuc3RhYmxlX25leHQiLCJ1bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbiIsInVuc3RhYmxlX3dyYXBDYWxsYmFjayIsIlJlYWN0UHJvcFR5cGVzU2VjcmV0IiwiZW1wdHlGdW5jdGlvbiIsImVtcHR5RnVuY3Rpb25XaXRoUmVzZXQiLCJyZXNldFdhcm5pbmdDYWNoZSIsInNoaW0iLCJjb21wb25lbnROYW1lIiwicHJvcEZ1bGxOYW1lIiwic2VjcmV0IiwiZ2V0U2hpbSIsImlzUmVxdWlyZWQiLCJSZWFjdFByb3BUeXBlcyIsImJpZ2ludCIsInN5bWJvbCIsImFueSIsImFycmF5T2YiLCJpbnN0YW5jZU9mIiwib2JqZWN0T2YiLCJvbmVPZiIsIm9uZU9mVHlwZSIsInNoYXBlIiwiZXhhY3QiLCJjaGVja1Byb3BUeXBlcyIsIlByb3BUeXBlcyIsIl9zaGVldDIiLCJHbGFtIiwic2hlZXQiLCJpbnNlcnRlZCIsInRhZ2dlZCIsImlkcyIsIl9ydWxlcyIsInJ1bGUiLCJvbGRJRSIsIlN0eWxlU2hlZXQiLCJfcmVmJHNwZWVkeSIsInNwZWVkeSIsIl9yZWYkbWF4TGVuZ3RoIiwibWF4TGVuZ3RoIiwiaXNTcGVlZHkiLCJ0YWdzIiwiY3RyIiwic3R5bGVTaGVldHMiLCJvd25lck5vZGUiLCJzaGVldEZvclRhZyIsImluamVjdGVkIiwibWFrZVN0eWxlVGFnIiwiZ2V0U2hlZXQiLCJpbnNlcnRSdWxlIiwiY3NzUnVsZXMiLCJfaW5zZXJ0IiwiY2FtZWxpemUiLCJtc1BhdHRlcm4iLCJfaHlwaGVuUGF0dGVybiIsImNoYXJhY3RlciIsIl9DU1NQcm9wZXJ0eTIiLCJpc1VuaXRsZXNzTnVtYmVyIiwicHJlZml4S2V5IiwiQ1NTUHJvcGVydHkiLCJzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnMiLCJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZEF0dGFjaG1lbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb25YIiwiYmFja2dyb3VuZFBvc2l0aW9uWSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJib3JkZXJXaWR0aCIsImJvcmRlclN0eWxlIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJCb3R0b20iLCJib3JkZXJCb3R0b21TdHlsZSIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyTGVmdCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlclJpZ2h0IiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlclJpZ2h0U3R5bGUiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyVG9wIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BDb2xvciIsImZvbnQiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRTaXplIiwiZm9udEZhbWlseSIsIm91dGxpbmUiLCJvdXRsaW5lV2lkdGgiLCJvdXRsaW5lU3R5bGUiLCJvdXRsaW5lQ29sb3IiLCJtYWtlRW1wdHlGdW5jdGlvbiIsInRoYXRSZXR1cm5zIiwidGhhdFJldHVybnNGYWxzZSIsInRoYXRSZXR1cm5zVHJ1ZSIsInRoYXRSZXR1cm5zTnVsbCIsInRoYXRSZXR1cm5zVGhpcyIsInRoYXRSZXR1cm5zQXJndW1lbnQiLCJoeXBoZW5hdGUiLCJfdXBwZXJjYXNlUGF0dGVybiIsImZsYXR0ZW5lZCIsImNvbnQiLCJjb250ZW50VmFsdWVzIiwiX3ByZWZpeDIiLCJfcHJlZml4IiwicHJvY2Vzc2VkVmFsdWUiLCJfcHJlZml4VmFsdWUyIiwicGx1Z2lucyIsInByZWZpeE1hcCIsIl9wcmVmaXhQcm9wZXJ0eTIiLCJfc3RhdGljRGF0YTIiLCJfY3Vyc29yMiIsIl9jcm9zc0ZhZGUyIiwiX2ZpbHRlcjIiLCJfZmxleDIiLCJfZmxleGJveE9sZDIiLCJfZ3JhZGllbnQyIiwiX2ltYWdlU2V0MiIsIl9wb3NpdGlvbjIiLCJfc2l6aW5nMiIsIl90cmFuc2l0aW9uMiIsIm1zIiwid20iLCJ3bXMiLCJ3bW1zIiwicHJlZml4UHJvcGVydGllcyIsInJlcXVpcmVkUHJlZml4ZXMiLCJfY2FwaXRhbGl6ZVN0cmluZzIiLCJfY2FwaXRhbGl6ZVN0cmluZyIsIm1ldGFEYXRhIiwiZ3JhYiIsImdyYWJiaW5nIiwiX2lzUHJlZml4ZWRWYWx1ZTIiLCJfaXNQcmVmaXhlZFZhbHVlIiwiV2Via2l0Qm94T3JpZW50IiwiV2Via2l0Qm94RGlyZWN0aW9uIiwiYWx0ZXJuYXRpdmVQcm9wcyIsImFsdGVybmF0aXZlVmFsdWVzIiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiZmxleFdyYXAiLCJtYXhIZWlnaHQiLCJjb2x1bW5XaWR0aCIsIm1pbkhlaWdodCIsInByb3BlcnR5UHJlZml4TWFwIiwib3V0cHV0VmFsdWUiLCJtdWx0aXBsZVZhbHVlcyIsImRhc2hDYXNlUHJvcGVydHkiLCJfaHlwaGVuYXRlUHJvcGVydHkyIiwicExlbiIsInByZWZpeE1hcHBpbmciLCJwcmVmaXhWYWx1ZSIsIndlYmtpdE91dHB1dCIsIm1vek91dHB1dCIsInRyYW5zaXRpb25Qcm9wZXJ0eSIsIldlYmtpdFRyYW5zaXRpb24iLCJXZWJraXRUcmFuc2l0aW9uUHJvcGVydHkiLCJNb3pUcmFuc2l0aW9uIiwiTW96VHJhbnNpdGlvblByb3BlcnR5IiwiV2Via2l0IiwiTW96IiwiX2h5cGhlbmF0ZVN0eWxlTmFtZSIsInVwcGVyY2FzZVBhdHRlcm4iLCJ0b0h5cGhlbkxvd2VyIiwiaE5hbWUiLCJjc3NMYWJlbHMiLCJoYXNMYWJlbHMiLCJncm91cEJ5VHlwZSIsImxhYmVsIiwiX3JlZiRzZWxlY3RvciIsIl9yZWYkbXEiLCJtcSIsIl9yZWYkc3VwcCIsInN1cHAiLCJfcmVmJGlucHV0cyIsImlucHV0cyIsIl9mbGF0dGVuMiIsInBvc3NpYmxlcyIsImZvdW5kIiwiaXNTZWxlY3RvciIsInByZWZpeGVkUHNldWRvU2VsZWN0b3JzIiwiam9pblNlbGVjdG9ycyIsImlzTWVkaWFRdWVyeSIsImlzU3VwcG9ydHMiLCJqb2luU3VwcG9ydHMiLCJfZGVzdCIsIl9oYXNoMiIsImFzIiwiZmxhdHRlbiIsImluQXJyIiwiVUludDMyIiwiVUludDE2IiwiVW11bDMyIiwiZG9IYXNoIiwiX1BhZ2VyMiIsIl9Db21wb25lbnQiLCJfcGFnZXIiLCJfcHJvcHMiLCJyZXN0UHJvcHMiLCJwcm9wVHlwZXMiLCJhbGwiLCJjYW5kaWRhdGUiLCJjYW5kaWRhdGVJbmRleCIsImVsZW1lbnREb2N1bWVudCIsImJhc2ljVGFiYmFibGVzIiwib3JkZXJlZFRhYmJhYmxlcyIsImlzVW5hdmFpbGFibGUiLCJpc09mZkNhY2hlIiwiY29tcHV0ZWRTdHlsZSIsImlzT2ZmIiwibm9kZUNvbXB1dGVkU3R5bGUiLCJjcmVhdGVJc1VuYXZhaWxhYmxlIiwiY2FuZGlkYXRlU2VsZWN0b3JzIiwiY2FuZGlkYXRlcyIsImluY2x1ZGVDb250YWluZXIiLCJjYW5kaWRhdGVTZWxlY3RvciIsInRhYmJhYmxlTm9kZXMiLCJfdHlwZW9mIiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyIiwiX24iLCJfZCIsIl9lIiwiX3MiLCJzbGljZUl0ZXJhdG9yIiwieHMiLCJ5c19yIiwieXNfZyIsInlzX2IiLCJkb21haW4iLCJzdWJzdHIiLCJwd19yIiwiX3BpZWNld2lzZTIiLCJfcmV0IiwicHdfZyIsInB3X2IiLCJfcGllY2V3aXNlIiwieXMiLCJsbyIsIm1pZCIsIlBhZ2VyRWxlbWVudCIsIl9yZWFjdE1vdGlvbiIsIl9Td2lwZTIiLCJfS2V5Ym9hcmQyIiwiX3NwZWNpYWxBc3NpZ24yIiwiY2hlY2tlZFByb3BzIiwic3ByaW5nQ29uZmlnIiwiX3NldEZyYW1lU2l6ZSIsImZyYW1lU2l6ZSIsIl9oeWRyYXRlIiwic2V0T3B0aW9ucyIsIl9zd2lwZSIsIl9rZXlib2FyZCIsImFkZEZyYW1lIiwibmV4dFByb3BzIiwiX3N0YXRlIiwiX3Byb3BzMiIsImdldEV2ZW50cyIsIl9nZXRGcmFtZVN0eWxlIiwiX3JlbmRlckZyYW1lIiwiX21hcFRvWmVybzIiLCJfc3RyaXBTdHlsZTIiLCJfc3RlcHBlcjQiLCJfcGVyZm9ybWFuY2VOb3cyIiwiX3JhZjIiLCJfc2hvdWxkU3RvcEFuaW1hdGlvbjIiLCJ3YXNBbmltYXRpbmciLCJhbmltYXRpb25JRCIsInByZXZUaW1lIiwiYWNjdW11bGF0ZWRUaW1lIiwidW5yZWFkUHJvcFN0eWxlIiwiY2xlYXJVbnJlYWRQcm9wU3R5bGUiLCJkZXN0U3R5bGUiLCJkaXJ0eSIsImxhc3RJZGVhbFN0eWxlIiwibGFzdElkZWFsVmVsb2NpdHkiLCJzdGFydEFuaW1hdGlvbklmTmVjZXNzYXJ5IiwidGltZXN0YW1wIiwicHJvcHNTdHlsZSIsIm9uUmVzdCIsInRpbWVEZWx0YSIsImN1cnJlbnRGcmFtZUNvbXBsZXRpb24iLCJmcmFtZXNUb0NhdGNoVXAiLCJuZXdMYXN0SWRlYWxTdHlsZSIsIm5ld0xhc3RJZGVhbFZlbG9jaXR5IiwibmV3Q3VycmVudFN0eWxlIiwibmV3Q3VycmVudFZlbG9jaXR5IiwibmV3TGFzdElkZWFsU3R5bGVWYWx1ZSIsIm5ld0xhc3RJZGVhbFZlbG9jaXR5VmFsdWUiLCJfc3RlcHBlciIsIl9zdGVwcGVyMiIsIm5leHRJZGVhbFgiLCJuZXh0SWRlYWxWIiwiZGVmYXVsdFN0YXRlIiwiZGVmYXVsdFN0eWxlIiwicmVuZGVyZWRDaGlsZHJlbiIsIm1vZHVsZUxvYWRUaW1lIiwibm9kZUxvYWRUaW1lIiwidXBUaW1lIiwidXB0aW1lIiwidW5yZWFkUHJvcFN0eWxlcyIsImN1cnJlbnRTdHlsZXMiLCJjdXJyZW50VmVsb2NpdGllcyIsImxhc3RJZGVhbFN0eWxlcyIsImxhc3RJZGVhbFZlbG9jaXRpZXMiLCJzb21lRGlydHkiLCJkZXN0U3R5bGVzIiwic2hvdWxkU3RvcEFuaW1hdGlvbkFsbCIsIm5ld0xhc3RJZGVhbFN0eWxlcyIsIm5ld0xhc3RJZGVhbFZlbG9jaXRpZXMiLCJuZXdDdXJyZW50U3R5bGVzIiwibmV3Q3VycmVudFZlbG9jaXRpZXMiLCJkZWZhdWx0U3R5bGVzIiwiX21lcmdlRGlmZjIiLCJyZWh5ZHJhdGVTdHlsZXMiLCJtZXJnZWRQcm9wc1N0eWxlcyIsInBsYWluU3R5bGVzIiwiY1VucmVhZFByb3BTdHlsZXMiLCJtZXJnZWRQcm9wc1N0eWxlIiwibWVyZ2VBbmRTeW5jIiwid2lsbEVudGVyIiwid2lsbExlYXZlIiwiZGlkTGVhdmUiLCJvbGRNZXJnZWRQcm9wc1N0eWxlcyIsIm9sZEN1cnJlbnRTdHlsZXMiLCJvbGRDdXJyZW50VmVsb2NpdGllcyIsIm9sZExhc3RJZGVhbFN0eWxlcyIsIm9sZExhc3RJZGVhbFZlbG9jaXRpZXMiLCJuZXdNZXJnZWRQcm9wc1N0eWxlcyIsIm9sZEluZGV4Iiwib2xkTWVyZ2VkUHJvcHNTdHlsZSIsImxlYXZpbmdTdHlsZSIsIm5ld01lcmdlZFByb3BzU3R5bGVDZWxsIiwiZm91bmRPbGRJbmRleCIsInBsYWluU3R5bGUiLCJ2ZWxvY2l0eSIsInVubW91bnRpbmciLCJfbWVyZ2VBbmRTeW5jIiwicHJvcFN0eWxlcyIsIl9tZXJnZUFuZFN5bmMyIiwibmV3TWVyZ2VkUHJvcHNTdHlsZSIsInN0eWxlVGhhdEVudGVyZWQiLCJkZWZhdWx0U3R5bGVDZWxsIiwiX21lcmdlQW5kU3luYzMiLCJoeWRyYXRlZFN0eWxlcyIsIm9uUmVtb3ZlIiwicHJldktleUluZGV4IiwibmV4dEtleUluZGV4IiwiZmlsbCIsIm5leHRPcmRlckEiLCJuZXh0T3JkZXJCIiwicHJldk9yZGVyQSIsInByZXZPcmRlckIiLCJwaXZvdCIsImNvbmZpZyIsImRlZmF1bHRDb25maWciLCJfcHJlc2V0czIiLCJnZXRUb3VjaEV2ZW50IiwiU3dpcGUiLCJfb25Td2lwZVN0YXJ0IiwiX2dldFRvdWNoRXZlbnQiLCJfc3dpcGVTdGFydCIsIl9zd2lwZURpZmYiLCJfaXNGbGljayIsIl9vblN3aXBlTW92ZSIsIl9nZXRUb3VjaEV2ZW50MiIsIl90cmFja1N0YXJ0IiwiX2lzU3dpcGUiLCJzd2lwZURpZmYiLCJfb25Td2lwZUVuZCIsInRocmVzaG9sZCIsIl9vblN3aXBlUGFzdCIsInN3aXBlRXZlbnRzIiwib25Nb3VzZURvd24iLCJvbk1vdXNlTW92ZSIsIm9uTW91c2VVcCIsIm9uTW91c2VMZWF2ZSIsIm9uVG91Y2hTdGFydCIsIm9uVG91Y2hNb3ZlIiwib25Ub3VjaEVuZCIsIktleWJvYXJkIiwiX2hhbmRsZUtleURvd24iLCJtYXhOdW1LZXkiLCJrZXlib2FyZEV2ZW50cyIsIm9uS2V5RG93biIsIl9nZXRJbmRleDIiLCJvblN3aXBlU3RhcnQiLCJvblN3aXBlTW92ZSIsIm9uU3dpcGVFbmQiLCJvblNjcm9sbCIsIm9uVmlld0NoYW5nZSIsIlRyYWNrU2Nyb2xsZXIiLCJfcmVuZGVyVmlld3MiLCJfQ29tcG9uZW50MiIsIl90ZW1wMiIsIl9jdXJyZW50VHdlZW4iLCJfaGFuZGxlT25SZXN0IiwicmVzZXRWaWV3SW5kZXgiLCJfc2V0VmFsdWVJbnN0YW50bHkiLCJhZGRUcmFjayIsIl90aGlzNSIsIl9nZXRUcmFja1N0eWxlIiwiX3JlZjQiLCJfaW5kZXgiLCJfdmlld0FkZGVkIiwiX3ZpZXdJbnN0YW5jZSIsImFkZFZpZXciLCJyZW1vdmVWaWV3IiwicG9pbnRlckV2ZW50cyIsIl9hbmltYXRpb25CdXMiLCJza2lwQXR0cmlidXRlc1RvUHJvcHMiLCJhdHRyaWJzIiwiaXNXaGl0ZXNwYWNlIiwicmVwbGFjZUVsZW1lbnQiLCJsaWJyYXJ5IiwiaGFzUmVwbGFjZSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlByb3BlcnR5SW5mb1JlY29yZCIsIkNBTUVMSVpFIiwiY2FwaXRhbGl6ZSIsIl9yZXF1aXJlIiwiQ0FNRUxDQVNFIiwiU0FNRSIsInBvc3NpYmxlU3RhbmRhcmROYW1lc09wdGltaXplZCIsImFjY3VtdWxhdG9yIiwic3RhbmRhcmROYW1lIiwiQk9PTEVBTklTSF9TVFJJTkciLCJOVU1FUklDIiwiUE9TSVRJVkVfTlVNRVJJQyIsIlJFU0VSVkVEIiwiU1RSSU5HIiwiYWNjZXB0IiwiYWNjZXB0Q2hhcnNldCIsImFjY2Vzc0tleSIsImFsbG93RnVsbFNjcmVlbiIsImFsdCIsImF1dG9DYXBpdGFsaXplIiwiYXV0b0NvbXBsZXRlIiwiYXV0b0NvcnJlY3QiLCJhdXRvUGxheSIsImF1dG9TYXZlIiwiY2VsbFBhZGRpbmciLCJjZWxsU3BhY2luZyIsImNoYWxsZW5nZSIsImNoYXJTZXQiLCJjaXRlIiwiY2xhc3MiLCJjbGFzc0lEIiwiY29scyIsImNvbFNwYW4iLCJjb250ZXh0TWVudSIsImNvbnRyb2xzIiwiY29udHJvbHNMaXN0IiwiY29vcmRzIiwiY3Jvc3NPcmlnaW4iLCJkYXRlVGltZSIsImRpc2FibGVQaWN0dXJlSW5QaWN0dXJlIiwiZGlzYWJsZVJlbW90ZVBsYXliYWNrIiwiZG93bmxvYWQiLCJkcmFnZ2FibGUiLCJlbmNUeXBlIiwiZW50ZXJLZXlIaW50IiwiZm9ybU1ldGhvZCIsImZvcm1BY3Rpb24iLCJmb3JtRW5jVHlwZSIsImZvcm1Ob1ZhbGlkYXRlIiwiZm9ybVRhcmdldCIsImZyYW1lQm9yZGVyIiwiaHJlZkxhbmciLCJodG1sRm9yIiwiaHR0cEVxdWl2IiwiaWNvbiIsImlucHV0TW9kZSIsImludGVncml0eSIsIml0ZW1JRCIsIml0ZW1Qcm9wIiwiaXRlbVJlZiIsIml0ZW1TY29wZSIsIml0ZW1UeXBlIiwia2V5UGFyYW1zIiwia2V5VHlwZSIsImtpbmQiLCJsb29wIiwibG93IiwibWFuaWZlc3QiLCJtYXJnaW5XaWR0aCIsIm1hcmdpbkhlaWdodCIsIm1lZGlhIiwibWVkaWFHcm91cCIsIm1pbkxlbmd0aCIsIm11dGVkIiwibm9WYWxpZGF0ZSIsIm9wdGltdW0iLCJwbGFjZWhvbGRlciIsInBsYXlzSW5saW5lIiwicG9zdGVyIiwicHJlbG9hZCIsInByb2ZpbGUiLCJyYWRpb0dyb3VwIiwicmVhZE9ubHkiLCJyZWZlcnJlclBvbGljeSIsInJlbCIsInJlcXVpcmVkIiwicmV2ZXJzZWQiLCJyb2xlIiwicm93cyIsInJvd1NwYW4iLCJzYW5kYm94Iiwic2NvcGVkIiwic2Nyb2xsaW5nIiwic2VhbWxlc3MiLCJzaXplcyIsInNwYW4iLCJzcGVsbENoZWNrIiwic3JjRG9jIiwic3JjTGFuZyIsInNyY1NldCIsInN1bW1hcnkiLCJ1c2VNYXAiLCJ3bW9kZSIsImFib3V0IiwiYWNjZW50SGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50QmFzZWxpbmUiLCJhbGxvd1Jlb3JkZXIiLCJhbHBoYWJldGljIiwiYW1wbGl0dWRlIiwiYXJhYmljRm9ybSIsImFzY2VudCIsImF0dHJpYnV0ZVR5cGUiLCJhdXRvUmV2ZXJzZSIsImF6aW11dGgiLCJiYXNlRnJlcXVlbmN5IiwiYmFzZWxpbmVTaGlmdCIsImJhc2VQcm9maWxlIiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjYWxjTW9kZSIsImNhcEhlaWdodCIsImNsaXAiLCJjbGlwUGF0aCIsImNsaXBQYXRoVW5pdHMiLCJjbGlwUnVsZSIsImNvbG9ySW50ZXJwb2xhdGlvbiIsImNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMiLCJjb2xvclByb2ZpbGUiLCJjb2xvclJlbmRlcmluZyIsImNvbnRlbnRTY3JpcHRUeXBlIiwiY29udGVudFN0eWxlVHlwZSIsImN1cnNvciIsImN4IiwiY3kiLCJkYXRhdHlwZSIsImRlY2VsZXJhdGUiLCJkZXNjZW50IiwiZGlmZnVzZUNvbnN0YW50IiwiZGl2aXNvciIsImRvbWluYW50QmFzZWxpbmUiLCJkdXIiLCJkeCIsImR5IiwiZWRnZU1vZGUiLCJlbGV2YXRpb24iLCJlbmFibGVCYWNrZ3JvdW5kIiwiZXhwb25lbnQiLCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIiwiZmlsbFJ1bGUiLCJmaWx0ZXJSZXMiLCJmaWx0ZXJVbml0cyIsImZsb29kQ29sb3IiLCJmb2N1c2FibGUiLCJmb250U2l6ZUFkanVzdCIsImZvbnRTdHJldGNoIiwiZm9ybWF0IiwiZnkiLCJnMSIsImcyIiwiZ2x5cGhOYW1lIiwiZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWwiLCJnbHlwaE9yaWVudGF0aW9uVmVydGljYWwiLCJnbHlwaFJlZiIsImdyYWRpZW50VHJhbnNmb3JtIiwiZ3JhZGllbnRVbml0cyIsImhhbmdpbmciLCJob3JpekFkdlgiLCJob3Jpek9yaWdpblgiLCJpZGVvZ3JhcGhpYyIsImltYWdlUmVuZGVyaW5nIiwiaW4yIiwiaW4iLCJpbmxpc3QiLCJpbnRlcmNlcHQiLCJrMSIsImsyIiwiazMiLCJrNCIsImtlcm5lbE1hdHJpeCIsImtlcm5lbFVuaXRMZW5ndGgiLCJrZXJuaW5nIiwia2V5UG9pbnRzIiwia2V5U3BsaW5lcyIsImtleVRpbWVzIiwibGVuZ3RoQWRqdXN0IiwibGlnaHRpbmdDb2xvciIsImxpbWl0aW5nQ29uZUFuZ2xlIiwibG9jYWwiLCJtYXJrZXJFbmQiLCJtYXJrZXJIZWlnaHQiLCJtYXJrZXJNaWQiLCJtYXJrZXJTdGFydCIsIm1hcmtlclVuaXRzIiwibWFya2VyV2lkdGgiLCJtYXNrIiwibWFza0NvbnRlbnRVbml0cyIsIm1hc2tVbml0cyIsIm1hdGhlbWF0aWNhbCIsIm51bU9jdGF2ZXMiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm92ZXJsaW5lUG9zaXRpb24iLCJvdmVybGluZVRoaWNrbmVzcyIsInBhaW50T3JkZXIiLCJwYW5vc2UxIiwicGF0aExlbmd0aCIsInBhdHRlcm5Db250ZW50VW5pdHMiLCJwYXR0ZXJuVHJhbnNmb3JtIiwicGF0dGVyblVuaXRzIiwicG9pbnRzIiwicG9pbnRzQXRYIiwicG9pbnRzQXRZIiwicG9pbnRzQXRaIiwicHJlc2VydmVBbHBoYSIsInByZXNlcnZlQXNwZWN0UmF0aW8iLCJwcmltaXRpdmVVbml0cyIsInJhZGl1cyIsInJlZlgiLCJyZWZZIiwicmVuZGVyaW5nSW50ZW50IiwicmVwZWF0Q291bnQiLCJyZXBlYXREdXIiLCJyZXF1aXJlZEV4dGVuc2lvbnMiLCJyZXF1aXJlZEZlYXR1cmVzIiwicmVzb3VyY2UiLCJyZXN0YXJ0IiwicngiLCJyeSIsInNlY3VyaXR5Iiwic2hhcGVSZW5kZXJpbmciLCJzbG9wZSIsInNwYWNpbmciLCJzcGVjdWxhckNvbnN0YW50Iiwic3BlY3VsYXJFeHBvbmVudCIsInNwcmVhZE1ldGhvZCIsInN0YXJ0T2Zmc2V0Iiwic3RkRGV2aWF0aW9uIiwic3RlbWgiLCJzdGVtdiIsInN0aXRjaFRpbGVzIiwic3RvcENvbG9yIiwic3RyaWtldGhyb3VnaFBvc2l0aW9uIiwic3RyaWtldGhyb3VnaFRoaWNrbmVzcyIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyIsInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIsInN1cmZhY2VTY2FsZSIsInN5c3RlbUxhbmd1YWdlIiwidGFibGVWYWx1ZXMiLCJ0YXJnZXRYIiwidGFyZ2V0WSIsInRleHRBbmNob3IiLCJ0ZXh0RGVjb3JhdGlvbiIsInRleHRMZW5ndGgiLCJ0ZXh0UmVuZGVyaW5nIiwidHlwZW9mIiwidTEiLCJ1MiIsInVuZGVybGluZVBvc2l0aW9uIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwidW5pY29kZSIsInVuaWNvZGVCaWRpIiwidW5pY29kZVJhbmdlIiwidW5pdHNQZXJFbSIsInVuc2VsZWN0YWJsZSIsInZBbHBoYWJldGljIiwidmVjdG9yRWZmZWN0IiwidmVydEFkdlkiLCJ2ZXJ0T3JpZ2luWCIsInZlcnRPcmlnaW5ZIiwidkhhbmdpbmciLCJ2SWRlb2dyYXBoaWMiLCJ2aWV3Qm94Iiwidmlld1RhcmdldCIsInZNYXRoZW1hdGljYWwiLCJ2b2NhYiIsIndvcmRTcGFjaW5nIiwid3JpdGluZ01vZGUiLCJ4MSIsIngyIiwieENoYW5uZWxTZWxlY3RvciIsInhIZWlnaHQiLCJ4bGlua0FjdHVhdGUiLCJ4bGlua0FyY3JvbGUiLCJ4bGlua1JvbGUiLCJ4bGlua1Nob3ciLCJ4bGlua1RpdGxlIiwieGxpbmtUeXBlIiwieG1sQmFzZSIsInhtbExhbmciLCJ4bWxucyIsInhtbG5zWGxpbmsiLCJ4bWxTcGFjZSIsInkxIiwieTIiLCJ5Q2hhbm5lbFNlbGVjdG9yIiwiem9vbUFuZFBhbiIsIl9faW1wb3J0RGVmYXVsdCIsIm1vZCIsInN0eWxlX3RvX29iamVjdF8xIiwidXRpbGl0aWVzXzEiLCJvdXRwdXQiLCJkZWNsYXJhdGlvbiIsImRlY2xhcmF0aW9ucyIsImhhc0l0ZXJhdG9yIiwiQ09NTUVOVF9SRUdFWCIsIk5FV0xJTkVfUkVHRVgiLCJXSElURVNQQUNFX1JFR0VYIiwiUFJPUEVSVFlfUkVHRVgiLCJDT0xPTl9SRUdFWCIsIlZBTFVFX1JFR0VYIiwiU0VNSUNPTE9OX1JFR0VYIiwiVFJJTV9SRUdFWCIsImxpbmVubyIsImNvbHVtbiIsInVwZGF0ZVBvc2l0aW9uIiwibGluZXMiLCJsYXN0SW5kZXhPZiIsImxpbmUiLCJQb3NpdGlvbiIsImVycm9yc0xpc3QiLCJyZWFzb24iLCJmaWxlbmFtZSIsInNpbGVudCIsImNvbW1lbnRzIiwicnVsZXMiLCJjb21tZW50IiwiZGVjbCIsImRlY2xzIiwiQ1VTVE9NX1BST1BFUlRZX1JFR0VYIiwiSFlQSEVOX1JFR0VYIiwiTk9fSFlQSEVOX1JFR0VYIiwiVkVORE9SX1BSRUZJWF9SRUdFWCIsInRyaW1IeXBoZW4iLCJza2lwQ2FtZWxDYXNlIiwiRklSU1RfVEFHX1JFR0VYIiwiSEVBRF9UQUdfUkVHRVgiLCJCT0RZX1RBR19SRUdFWCIsInBhcnNlRnJvbURvY3VtZW50IiwiZG9tUGFyc2VyIiwicGFyc2VGcm9tVGVtcGxhdGUiLCJ0ZW1wbGF0ZSIsImZpcnN0VGFnTmFtZSIsImV4dGVuZFN0YXRpY3MiLCJfX2V4dGVuZHMiLCJfXyIsIl9fYXNzaWduIiwiaGFzQ2hpbGRyZW4iLCJpc0RvY3VtZW50IiwiaXNEaXJlY3RpdmUiLCJpc0NvbW1lbnQiLCJpc1RleHQiLCJpc0NEQVRBIiwiRG9jdW1lbnQiLCJOb2RlV2l0aENoaWxkcmVuIiwiRGF0YU5vZGUiLCJOb2RlIiwiZG9tZWxlbWVudHR5cGVfMSIsIm5vZGVUeXBlcyIsInN0YXJ0SW5kZXgiLCJlbmRJbmRleCIsIl9hIiwicmVjdXJzaXZlIiwiX3N1cGVyIiwiX2IiLCJjbG9uZUNoaWxkcmVuIiwiY2xvbmVfMSIsImNsb25lXzIiLCJjbG9uZV8zIiwiaW5zdHJ1Y3Rpb24iLCJzb3VyY2VDb2RlTG9jYXRpb24iLCJjaGlsZHMiLCJfX19IVE1MX0xPQURFUl9HRVRfU09VUkNFX0ZST01fSU1QT1JUX19fIiwiX19fSFRNTF9MT0FERVJfSU1QT1JUXzBfX18iLCJfX19IVE1MX0xPQURFUl9JTVBPUlRfMV9fXyIsIl9fX0hUTUxfTE9BREVSX1JFUExBQ0VNRU5UXzBfX18iLCJfX19IVE1MX0xPQURFUl9SRVBMQUNFTUVOVF8xX19fIiwicnRsIiwiR2V0WW9EaWdpdHMiLCJjaGFycyIsImNoYXJzTGVuZ3RoIiwiUmVnRXhwRXNjYXBlIiwiJGVsZW0iLCJ0cmFuc2l0aW9ucyIsIm9uTG9hZCIsImRpZExvYWQiLCJldmVudFR5cGUiLCJpZ25vcmVNb3VzZWRpc2FwcGVhciIsImlnbm9yZUxlYXZlV2luZG93IiwiaWdub3JlUmVhcHBlYXIiLCJlTGVhdmUiLCJlUmVlbnRlciIsIm1hdGNoTWVkaWEiLCJzdHlsZU1lZGlhIiwiaW5mbyIsIm1hdGNoTWVkaXVtIiwic3R5bGVTaGVldCIsIk1lZGlhUXVlcnkiLCJxdWVyaWVzIiwiaXNJbml0aWFsaXplZCIsIm5hbWVkUXVlcmllcyIsImV4dHJhY3RlZFN0eWxlcyIsInN0eWxlT2JqZWN0IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicGFyc2VTdHlsZVRvT2JqZWN0IiwiX2dldEN1cnJlbnRTaXplIiwiX3dhdGNoZXIiLCJxdWVyeSIsIm5leHRTaXplIiwiYXRMZWFzdCIsImJwU2l6ZSIsImJwTW9kaWZpZXIiLCJ1cFRvIiwicXVlcnlJbmRleCIsImZpbmRJbmRleCIsIl9nZXRRdWVyeU5hbWUiLCJuZXh0UXVlcnkiLCJuZXdTaXplIiwiY3VycmVudFNpemUiLCJfdXVpZHMiLCJwbHVnaW4iLCJmdW5jdGlvbk5hbWUiLCJhdHRyTmFtZSIsInJlZ2lzdGVyUGx1Z2luIiwicGx1Z2luTmFtZSIsInV1aWQiLCIkZWxlbWVudCIsInVucmVnaXN0ZXJQbHVnaW4iLCJyZUluaXQiLCJpc0pRIiwicGxncyIsImZvdW5kYXRpb24iLCJyZWZsb3ciLCIkZWwiLCJwYXJzZVZhbHVlIiwiZXIiLCJnZXRGbk5hbWUiLCJhZGRUb0pxdWVyeSIsIiRub0pTIiwicGx1Z0NsYXNzIiwidXRpbCIsIkZvdW5kYXRpb24iLCJ2cCIsImxhc3RUaW1lIiwibmV4dFRpbWUiLCJvVGhpcyIsImFBcmdzIiwiZlRvQmluZCIsImZOT1AiLCJmQm91bmQiLCJCb3giLCJJbU5vdFRvdWNoaW5nWW91IiwibHJPbmx5IiwidGJPbmx5IiwiaWdub3JlQm90dG9tIiwiT3ZlcmxhcEFyZWEiLCJHZXREaW1lbnNpb25zIiwiR2V0RXhwbGljaXRPZmZzZXRzIiwiYW5jaG9yIiwiYWxpZ25tZW50Iiwidk9mZnNldCIsImhPZmZzZXQiLCJpc092ZXJmbG93IiwidG9wVmFsIiwibGVmdFZhbCIsIiRlbGVEaW1zIiwiJGFuY2hvckRpbXMiLCJ0b3BPdmVyIiwiYm90dG9tT3ZlciIsImxlZnRPdmVyIiwicmlnaHRPdmVyIiwiZWxlRGltcyIsInBhckRpbXMiLCJ3aW5kb3dEaW1zIiwic3FydCIsInBhclJlY3QiLCJ3aW5SZWN0Iiwid2luWSIsIndpblgiLCJwYXJlbnREaW1zIiwib25JbWFnZXNMb2FkZWQiLCJpbWFnZXMiLCJ1bmxvYWRlZCIsInNpbmdsZUltYWdlTG9hZGVkIiwibmF0dXJhbFdpZHRoIiwiSW1hZ2UiLCJrZXlDb2RlcyIsImNvbW1hbmRzIiwiZmluZEZvY3VzYWJsZSIsImFUYWJJbmRleCIsImJUYWJJbmRleCIsInBhcnNlS2V5Iiwia2NzIiwiZ2V0S2V5Q29kZXMiLCJmdW5jdGlvbnMiLCJjb21tYW5kTGlzdCIsInpmSXNLZXlIYW5kbGVkIiwibHRyIiwiaGFuZGxlZCIsInVuaGFuZGxlZCIsImNtZHMiLCIkZm9jdXNhYmxlIiwiJGZpcnN0Rm9jdXNhYmxlIiwiJGxhc3RGb2N1c2FibGUiLCJpbml0Q2xhc3NlcyIsImFjdGl2ZUNsYXNzZXMiLCJhbmltYXRlSW4iLCJhbmltYXRlT3V0IiwiTW92ZSIsInByb2ciLCJtb3ZlIiwidHMiLCJpc0luIiwiaW5pdENsYXNzIiwiYWN0aXZlQ2xhc3MiLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJOZXN0IiwibWVudSIsIml0ZW1zIiwic3ViTWVudUNsYXNzIiwic3ViSXRlbUNsYXNzIiwiaGFzU3ViQ2xhc3MiLCJhcHBseUFyaWEiLCIkaXRlbSIsIiRzdWIiLCJUaW1lciIsIm5hbWVTcGFjZSIsInJlbWFpbiIsImlzUGF1c2VkIiwicGF1c2UiLCJzdGFydFBvc1giLCJzdGFydEV2ZW50IiwiVG91Y2giLCJpc01vdmluZyIsImRpZE1vdmVkIiwidGFwRXZlbnQiLCJzcG90U3dpcGUiLCJtb3ZlVGhyZXNob2xkIiwidGltZVRocmVzaG9sZCIsImVuYWJsZWQiLCJ0YXAiLCJzZXR1cFNwb3RTd2lwZSIsInNldHVwVG91Y2hIYW5kbGVyIiwiYWRkVG91Y2giLCJoYW5kbGVUb3VjaCIsInNpbXVsYXRlZEV2ZW50IiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIiwiTW91c2VFdmVudCIsImNyZWF0ZUV2ZW50IiwiaW5pdE1vdXNlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwidHJpZ2dlcnMiLCJUcmlnZ2VycyIsIkxpc3RlbmVycyIsIkJhc2ljIiwiR2xvYmFsIiwiSW5pdGlhbGl6ZXJzIiwiZGVib3VuY2VHbG9iYWxMaXN0ZW5lciIsImRlYm91bmNlIiwib3Blbkxpc3RlbmVyIiwiY2xvc2VMaXN0ZW5lciIsInRvZ2dsZUxpc3RlbmVyIiwiY2xvc2VhYmxlTGlzdGVuZXIiLCJ0b2dnbGVGb2N1c0xpc3RlbmVyIiwiYWRkT3Blbkxpc3RlbmVyIiwiYWRkQ2xvc2VMaXN0ZW5lciIsImFkZFRvZ2dsZUxpc3RlbmVyIiwiYWRkQ2xvc2VhYmxlTGlzdGVuZXIiLCJhZGRUb2dnbGVGb2N1c0xpc3RlbmVyIiwicmVzaXplTGlzdGVuZXIiLCIkbm9kZXMiLCJzY3JvbGxMaXN0ZW5lciIsImNsb3NlTWVMaXN0ZW5lciIsInBsdWdpbklkIiwiYWRkQ2xvc2VtZUxpc3RlbmVyIiwieWV0aUJveGVzIiwicGx1Z05hbWVzIiwiYWRkUmVzaXplTGlzdGVuZXIiLCJhZGRTY3JvbGxMaXN0ZW5lciIsImFkZE11dGF0aW9uRXZlbnRzTGlzdGVuZXIiLCJsaXN0ZW5pbmdFbGVtZW50c011dGF0aW9uIiwibXV0YXRpb25SZWNvcmRzTGlzdCIsIiR0YXJnZXQiLCJhdHRyaWJ1dGVGaWx0ZXIiLCJhZGRTaW1wbGVMaXN0ZW5lcnMiLCIkZG9jdW1lbnQiLCJhZGRHbG9iYWxMaXN0ZW5lcnMiLCJ0cmlnZ2Vyc0luaXRpYWxpemVkIiwiSUhlYXJZb3UiLCJQbHVnaW4iLCJfc2V0dXAiLCJnZXRQbHVnaW5OYW1lIiwiX2Rlc3Ryb3kiLCJkZWZhdWx0cyIsImlzRW5hYmxlZCIsImZvcm1ub3ZhbGlkYXRlIiwiJGlucHV0cyIsIiRzdWJtaXRzIiwiJGdsb2JhbEVycm9ycyIsImExMXlBdHRyaWJ1dGVzIiwiYWRkQTExeUF0dHJpYnV0ZXMiLCJhZGRHbG9iYWxFcnJvckExMXlBdHRyaWJ1dGVzIiwiX2V2ZW50cyIsInJlc2V0Rm9ybSIsInZhbGlkYXRlRm9ybSIsInZhbGlkYXRlT24iLCJ2YWxpZGF0ZUlucHV0IiwibGl2ZVZhbGlkYXRlIiwidmFsaWRhdGVPbkJsdXIiLCJpc0dvb2QiLCJmYWlsZWRWYWxpZGF0b3JzIiwiJGVycm9yIiwiZm9ybUVycm9yU2VsZWN0b3IiLCIkbGFiZWwiLCIkZWxzIiwibGFiZWxzIiwiZmluZExhYmVsIiwiJGZvcm1FcnJvciIsImZpbmRGb3JtRXJyb3IiLCJsYWJlbEVycm9yQ2xhc3MiLCJmb3JtRXJyb3JDbGFzcyIsImlucHV0RXJyb3JDbGFzcyIsIiRlcnJvcnMiLCIkbGFiZWxzIiwiZXJyb3JJZCIsImVsZW1JZCIsImExMXlFcnJvckxldmVsIiwiZ3JvdXBOYW1lIiwiZmluZFJhZGlvTGFiZWxzIiwiJGZvcm1FcnJvcnMiLCJmaW5kQ2hlY2tib3hMYWJlbHMiLCJyZW1vdmVSYWRpb0Vycm9yQ2xhc3NlcyIsInJlbW92ZUNoZWNrYm94RXJyb3JDbGFzc2VzIiwiY2xlYXJSZXF1aXJlIiwicmVxdWlyZWRDaGVjayIsInZhbGlkYXRvciIsIm1hbmFnZUVycm9yQ2xhc3NlcyIsIl92YWxpZGF0aW9uSXNEaXNhYmxlZCIsInZhbGlkYXRlUmFkaW8iLCJ2YWxpZGF0ZUNoZWNrYm94IiwidmFsaWRhdGVUZXh0IiwidmFsaWRhdG9ycyIsImVxdWFsVG8iLCJnb29kVG9HbyIsImRlcGVuZGVudEVsZW1lbnRzIiwicmVtb3ZlRXJyb3JDbGFzc2VzIiwiYWRkRXJyb3JDbGFzc2VzIiwiY2hlY2tib3hHcm91cE5hbWUiLCJhY2MiLCJpbml0aWFsaXplZCIsIm5vRXJyb3IiLCJpbnB1dFRleHQiLCJ2YWxpZCIsInBhdHRlcm5zIiwiJGdyb3VwIiwibWluUmVxdWlyZWQiLCIkZm9ybSIsImFscGhhIiwiYWxwaGFfbnVtZXJpYyIsImludGVnZXIiLCJjYXJkIiwiY3Z2IiwiZGF0ZUlTTyIsIm1vbnRoX2RheV95ZWFyIiwiZGF5X21vbnRoX3llYXIiLCJ3ZWJzaXRlIiwicmVnaXN0ZXIiLCJfaXNJbml0aWFsaXppbmciLCIkdGFicyIsIiRjb250ZW50IiwibGlua0lkIiwiJGluaXRBY3RpdmUiLCJfaW5pdGlhbEFuY2hvciIsIl9vcGVuU2luZ2xlVGFiIiwiX2NoZWNrRGVlcExpbmsiLCIkYW5jaG9yIiwiJGxpbmsiLCJfY2xvc2VBbGxUYWJzIiwiZGVlcExpbmtTbXVkZ2UiLCJkZWVwTGlua1NtdWRnZU9mZnNldCIsImRlZXBMaW5rU211ZGdlRGVsYXkiLCJkZWVwTGluayIsIiR0YWJDb250ZW50IiwiaGFuZGxlS2V5IiwibXVsdGlFeHBhbmQiLCJwcmV2aW91cyIsInVwIiwiZG93biIsInVwZGF0ZUhpc3RvcnkiLCJoaXN0b3J5IiwicHVzaFN0YXRlIiwicmVwbGFjZVN0YXRlIiwiX29wZW5UYWIiLCIkdGFyZ2V0SXRlbSIsIiRvdGhlcnNJdGVtcyIsImFsbG93QWxsQ2xvc2VkIiwiX2Nsb3NlVGFiIiwiJGFjdGl2ZUNvbnRlbnRzIiwidGFyZ2V0Q29udGVudElkIiwic2xpZGVTcGVlZCIsIiRhY3RpdmVUYWJzIiwiRmVhdGhlciIsIm11bHRpT3BlbiIsIiRtZW51TGlua3MiLCJzdWJJZCIsInBhcmVudExpbmsiLCJzdWJtZW51VG9nZ2xlIiwic3VibWVudVRvZ2dsZVRleHQiLCJpbml0UGFuZXMiLCIkc3VibWVudSIsIiRwcmV2RWxlbWVudCIsIiRuZXh0RWxlbWVudCIsIiRlbGVtZW50cyIsImNsb3NlIiwiY2xvc2VBbGwiLCJoaWRlQWxsIiwiJHRhcmdldEJyYW5jaCIsIiRvdGhlcnNBY3RpdmVTdWJtZW51cyIsIiRzdWJtZW51cyIsIiRhbGxtZW51cyIsIkJ1cm4iLCJhdXRvQXBwbHlDbGFzcyIsIiRzdWJtZW51QW5jaG9ycyIsIiRtZW51SXRlbXMiLCIkY3VycmVudE1lbnUiLCJfcHJlcGFyZU1lbnUiLCJfcmVnaXN0ZXJFdmVudHMiLCJfa2V5Ym9hcmRFdmVudHMiLCIkbWVudSIsImJhY2tCdXR0b25Qb3NpdGlvbiIsImJhY2tCdXR0b24iLCJfYmFjayIsImF1dG9IZWlnaHQiLCIkd3JhcHBlciIsIndyYXBwZXIiLCJhbmltYXRlSGVpZ2h0IiwiX2dldE1heERpbXMiLCJfc2hvdyIsImNsb3NlT25DbGljayIsIiRib2R5IiwiZXYiLCJfaGlkZUFsbCIsIl9iaW5kSGFuZGxlciIsIl9zY3JvbGxUb3AiLCJfcmVzaXplIiwiJHNjcm9sbFRvcEVsZW1lbnQiLCJzY3JvbGxUb3BFbGVtZW50Iiwic2Nyb2xsUG9zIiwic2Nyb2xsVG9wT2Zmc2V0IiwiYW5pbWF0aW9uRHVyYXRpb24iLCJhbmltYXRpb25FYXNpbmciLCJfaGlkZSIsImNhbGNIZWlnaHQiLCJwYXJlbnRTdWJNZW51IiwiX3NldEhpZGVTdWJNZW51Q2xhc3NlcyIsImlzTGFzdENoaWxkIiwiX3NldFNob3dTdWJNZW51Q2xhc3NlcyIsIlBPU0lUSU9OUyIsIlZFUlRJQ0FMX0FMSUdOTUVOVFMiLCJIT1JJWk9OVEFMX0FMSUdOTUVOVFMiLCJBTElHTk1FTlRTIiwibmV4dEl0ZW0iLCJjdXJyZW50SWR4IiwiUG9zaXRpb25hYmxlIiwidHJpZWRQb3NpdGlvbnMiLCJfZ2V0RGVmYXVsdFBvc2l0aW9uIiwiX2dldERlZmF1bHRBbGlnbm1lbnQiLCJvcmlnaW5hbFBvc2l0aW9uIiwib3JpZ2luYWxBbGlnbm1lbnQiLCJfYWxpZ25tZW50c0V4aGF1c3RlZCIsIl9yZWFsaWduIiwiX2FkZFRyaWVkUG9zaXRpb24iLCJpc0V4aGF1c3RlZCIsIiRwYXJlbnQiLCJhbGxvd092ZXJsYXAiLCJfZ2V0Vk9mZnNldCIsIl9nZXRIT2Zmc2V0IiwibWluT3ZlcmxhcCIsIm1pbkNvb3JkaW5hdGVzIiwiX3Bvc2l0aW9uc0V4aGF1c3RlZCIsIm92ZXJsYXAiLCJhbGxvd0JvdHRvbU92ZXJsYXAiLCJfcmVwb3NpdGlvbiIsIiRpZCIsIiRhbmNob3JzIiwiX3NldEN1cnJlbnRBbmNob3IiLCJwYXJlbnRDbGFzcyIsIiRjdXJyZW50QW5jaG9yIiwic3VwZXIiLCJob3Jpem9udGFsUG9zaXRpb24iLCJfc2V0UG9zaXRpb24iLCJoYXNUb3VjaCIsIm9udG91Y2hzdGFydCIsImZvcmNlRm9sbG93IiwiYm9keURhdGEiLCJ3aGF0aW5wdXQiLCJob3ZlckRlbGF5IiwiaG92ZXJQYW5lIiwiX2FkZEJvZHlIYW5kbGVyIiwidHJhcEZvY3VzIiwicmVsZWFzZUZvY3VzIiwic3VicyIsInZlcnRpY2FsQ2xhc3MiLCJyaWdodENsYXNzIiwiY2hhbmdlZCIsInBhckNsYXNzIiwiY2xpY2tPcGVuIiwiaGFzU3ViIiwiaGFzQ2xpY2tlZCIsImNsb3NlT25DbGlja0luc2lkZSIsImRpc2FibGVIb3Zlck9uVG91Y2giLCJkaXNhYmxlSG92ZXIiLCJhdXRvY2xvc2UiLCJjbG9zaW5nVGltZSIsImlzVGFiIiwicHJldlNpYmxpbmciLCJvcGVuU3ViIiwiY2xvc2VTdWIiLCJfaXNWZXJ0aWNhbCIsIl9pc1J0bCIsIl9yZW1vdmVCb2R5SGFuZGxlciIsIiRzaWJzIiwib2xkQ2xhc3MiLCIkcGFyZW50TGkiLCIkdG9DbG9zZSIsIiRhY3RpdmVJdGVtIiwiZXFJZCIsIiR3YXRjaGVkIiwiaGFzTmVzdGVkIiwiaXNOZXN0ZWQiLCJpc09uIiwib25SZXNpemVNZUJvdW5kIiwiX29uUmVzaXplTWUiLCJvblBvc3RFcXVhbGl6ZWRCb3VuZCIsIl9vblBvc3RFcXVhbGl6ZWQiLCJ0b29TbWFsbCIsImltZ3MiLCJlcXVhbGl6ZU9uIiwiX2NoZWNrTVEiLCJfcmVmbG93IiwiX3BhdXNlRXZlbnRzIiwiZXF1YWxpemVPblN0YWNrIiwiX2lzU3RhY2tlZCIsImVxdWFsaXplQnlSb3ciLCJnZXRIZWlnaHRzQnlSb3ciLCJhcHBseUhlaWdodEJ5Um93IiwiZ2V0SGVpZ2h0cyIsImFwcGx5SGVpZ2h0IiwibGFzdEVsVG9wT2Zmc2V0IiwiZ3JvdXAiLCJlbE9mZnNldFRvcCIsImxuIiwiZ3JvdXBzSUxlbmd0aCIsImxlbkoiLCJjdXJyZW50UGF0aCIsIl9wYXJzZU9wdGlvbnMiLCJfYWRkQnJlYWtwb2ludHMiLCJfZ2VuZXJhdGVSdWxlcyIsIlNQRUNJQUxfUVVFUklFUyIsInJ1bGVzTGlzdCIsIl9saW5rQ2xpY2tMaXN0ZW5lciIsIl9oYW5kbGVMaW5rQ2xpY2siLCJhcnJpdmFsIiwiX2luVHJhbnNpdGlvbiIsInNjcm9sbFRvTG9jIiwibG9jIiwiJGxvYyIsImNhbGNQb2ludHMiLCIkdGFyZ2V0cyIsIiRsaW5rcyIsIiRhY3RpdmUiLCJ3aW5IZWlnaHQiLCJpbm5lckhlaWdodCIsImRvY0hlaWdodCIsInNjcm9sbEhlaWdodCIsIiR0YXIiLCJwdCIsInRhcmdldFBvaW50IiwiZGVlcExpbmtpbmciLCJfdXBkYXRlQWN0aXZlIiwib25Mb2FkTGlzdGVuZXIiLCJfZGVlcExpbmtTY3JvbGwiLCJuZXdTY3JvbGxQb3MiLCJpc1Njcm9sbGluZ1VwIiwiYWN0aXZlSWR4IiwidmlzaWJsZUxpbmtzIiwiJG9sZEFjdGl2ZSIsImFjdGl2ZUhhc2giLCJpc05ld0FjdGl2ZSIsImlzTmV3SGFzaCIsInBhdGhuYW1lIiwiY29udGVudENsYXNzZXMiLCJyZXZlYWwiLCIkbGFzdFRyaWdnZXIiLCIkdHJpZ2dlcnMiLCJuZXN0ZWQiLCIkc3RpY2t5IiwiaXNJbkNhbnZhcyIsImNvbnRlbnRJZCIsImNvbnRlbnRPdmVybGF5Iiwib3ZlcmxheSIsIm92ZXJsYXlQb3NpdGlvbiIsIiRvdmVybGF5IiwicmV2ZWFsT25DbGFzcyIsInJldmVhbENsYXNzIiwiaXNSZXZlYWxlZCIsInJldmVhbE9uIiwiX3NldE1RQ2hlY2tlciIsInRyYW5zaXRpb25UaW1lIiwiY29udGVudFNjcm9sbCIsImluQ2FudmFzRm9yIiwiaW5DYW52YXNPbiIsIl9jaGVja0luQ2FudmFzIiwiX3JlbW92ZUNvbnRlbnRDbGFzc2VzIiwiX2hhbmRsZUtleWJvYXJkIiwiaGFzUmV2ZWFsIiwiYWJzb2x1dGVUb3BWYWwiLCJzdGlja3lEYXRhIiwiX2FkZENvbnRlbnRDbGFzc2VzIiwibGFzdFkiLCJfY2FuU2Nyb2xsIiwiYWxsb3dVcCIsImFsbG93RG93biIsImZvcmNlVG8iLCJfc3RvcFNjcm9sbGluZyIsIl9yZWNvcmRTY3JvbGxhYmxlIiwiX3ByZXZlbnREZWZhdWx0QXRFZGdlcyIsIl9zY3JvbGxib3hUb3VjaE1vdmVkIiwiY2FudmFzRm9jdXMiLCJfZml4U3RpY2t5RWxlbWVudHMiLCJfdW5maXhTdGlja3lFbGVtZW50cyIsIl9yZXNldCIsImNvbnRhaW5lckNsYXNzIiwiJHNsaWRlcyIsInNsaWRlQ2xhc3MiLCIkaW1hZ2VzIiwiaW5pdEFjdGl2ZSIsInVzZU1VSSIsIl9wcmVwYXJlRm9yT3JiaXQiLCJidWxsZXRzIiwiX2xvYWRCdWxsZXRzIiwiZ2VvU3luYyIsImFjY2Vzc2libGUiLCIkYnVsbGV0cyIsImJveE9mQnVsbGV0cyIsInRpbWVyRGVsYXkiLCJjaGFuZ2VTbGlkZSIsIl9zZXRXcmFwcGVySGVpZ2h0IiwiY291bnRlciIsInBhdXNlT25Ib3ZlciIsIm5hdkJ1dHRvbnMiLCJuZXh0Q2xhc3MiLCJwcmV2Q2xhc3MiLCIkc2xpZGUiLCJfdXBkYXRlQnVsbGV0cyIsImlzTFRSIiwiY2hvc2VuU2xpZGUiLCIkY3VyU2xpZGUiLCIkbmV3U2xpZGUiLCIkZmlyc3RTbGlkZSIsIiRsYXN0U2xpZGUiLCJkaXJJbiIsImRpck91dCIsImluZmluaXRlV3JhcCIsIiRvbGRCdWxsZXQiLCIkb3RoZXJzQnVsbGV0cyIsIiRuZXdCdWxsZXQiLCJhY3RpdmVTdGF0ZURlc2NyaXB0b3IiLCJzcGFucyIsImV2ZXJ5IiwiYW5pbUluRnJvbVJpZ2h0IiwiYW5pbU91dFRvUmlnaHQiLCJhbmltSW5Gcm9tTGVmdCIsImFuaW1PdXRUb0xlZnQiLCJNZW51UGx1Z2lucyIsImRyb3Bkb3duIiwiY3NzQ2xhc3MiLCJkcmlsbGRvd24iLCJhY2NvcmRpb24iLCJjdXJyZW50TXEiLCJjdXJyZW50UGx1Z2luIiwicnVsZXNUcmVlIiwicnVsZVNpemUiLCJydWxlUGx1Z2luIiwiX2NoZWNrTWVkaWFRdWVyaWVzIiwibWF0Y2hlZE1xIiwidGFyZ2V0SUQiLCIkdGFyZ2V0TWVudSIsIiR0b2dnbGVyIiwiYW5pbWF0aW9uSW4iLCJhbmltYXRpb25PdXQiLCJfdXBkYXRlIiwiX3VwZGF0ZU1xSGFuZGxlciIsInRvZ2dsZU1lbnUiLCJoaWRlRm9yIiwiZnVsbFNjcmVlbiIsIl9tYWtlT3ZlcmxheSIsImFkZGl0aW9uYWxPdmVybGF5Q2xhc3NlcyIsIm91dGVyV2lkdGgiLCJvdXRlckhlaWdodCIsIl91cGRhdGVQb3NpdGlvbiIsIl9oYW5kbGVTdGF0ZSIsIiRhY3RpdmVBbmNob3IiLCJtdWx0aXBsZU9wZW5lZCIsIl9kaXNhYmxlU2Nyb2xsIiwiZm9jdXNhYmxlRWxlbWVudHMiLCJfYWRkR2xvYmFsQ2xhc3NlcyIsInNob3dEZWxheSIsIl9hZGRHbG9iYWxMaXN0ZW5lcnMiLCJ1cGRhdGVTY3JvbGxiYXJDbGFzcyIsImNsb3NlT25Fc2MiLCJmaW5pc2hVcCIsIl9yZW1vdmVHbG9iYWxDbGFzc2VzIiwiX2VuYWJsZVNjcm9sbCIsImhpZGVEZWxheSIsInJlc2V0T25DbG9zZSIsInVybFdpdGhvdXRIYXNoIiwiaGFuZGxlcyIsIiRoYW5kbGUiLCIkaW5wdXQiLCIkZmlsbCIsInZlcnRpY2FsIiwiZGlzYWJsZWRDbGFzcyIsIl9zZXRJbml0QXR0ciIsImRvdWJsZVNpZGVkIiwiJGhhbmRsZTIiLCIkaW5wdXQyIiwic2V0SGFuZGxlcyIsIl9zZXRIYW5kbGVQb3MiLCJwY3RPZkJhciIsInBvc2l0aW9uVmFsdWVGdW5jdGlvbiIsIl9sb2dUcmFuc2Zvcm0iLCJfcG93VHJhbnNmb3JtIiwidG9GaXhlZCIsImJhc2VMb2ciLCJub25MaW5lYXJCYXNlIiwicG93IiwiJGhuZGwiLCJpc0RibCIsImgyVmFsIiwiaDFWYWwiLCJ2ZXJ0IiwiaE9yVyIsImxPclQiLCJoYW5kbGVEaW0iLCJlbGVtRGltIiwiX3BjdE9mQmFyIiwibW92ZW1lbnQiLCJkZWNpbWFsIiwiX3NldFZhbHVlcyIsImRpbSIsImlzTGVmdEhuZGwiLCJoYW5kbGVQY3QiLCJoYW5kbGVQb3MiLCJpbml0aWFsU3RhcnQiLCJtb3ZlVGltZSIsImNoYW5nZWREZWxheSIsImluaXRWYWwiLCJpbml0aWFsRW5kIiwiX2FkanVzdFZhbHVlIiwiZXZlbnRPZmZzZXQiLCJiYXJEaW0iLCJ3aW5kb3dTY3JvbGwiLCJlbGVtT2Zmc2V0IiwiYmFyWFkiLCJldmVudEZyb21CYXIiLCJvZmZzZXRQY3QiLCJfdmFsdWUiLCJhYnNQb3NpdGlvbiIsInByZXZpb3VzVmFsIiwiX2V2ZW50c0ZvckhhbmRsZSIsImN1ckhhbmRsZSIsImhhbmRsZUNoYW5nZUV2ZW50IiwiX2hhbmRsZUV2ZW50IiwiY2xpY2tTZWxlY3QiLCJuZXdWYWx1ZSIsIl8kaGFuZGxlIiwib2xkVmFsdWUiLCJkZWNyZWFzZSIsImluY3JlYXNlIiwiZGVjcmVhc2VGYXN0IiwiaW5jcmVhc2VGYXN0IiwiZnJhYyIsImNsaWNrUG9zIiwiaW52ZXJ0VmVydGljYWwiLCIkY29udGFpbmVyIiwid2FzV3JhcHBlZCIsInN0aWNreUNsYXNzIiwic2Nyb2xsQ291bnQiLCJjaGVja0V2ZXJ5IiwiaXNTdHVjayIsImNvbnRhaW5lckhlaWdodCIsImVsZW1IZWlnaHQiLCJfcGFyc2VQb2ludHMiLCJfc2V0U2l6ZXMiLCJzY3JvbGwiLCJfY2FsYyIsIl9yZW1vdmVTdGlja3kiLCJ0b3BQb2ludCIsInB0cyIsInRvcEFuY2hvciIsImJ0bUFuY2hvciIsImJyZWFrcyIsInBsYWNlIiwiY2FuU3RpY2siLCJfZXZlbnRzSGFuZGxlciIsIl9wYXVzZUxpc3RlbmVycyIsImNoZWNrU2l6ZXMiLCJib3R0b21Qb2ludCIsIl9zZXRTdGlja3kiLCJzdGlja1RvIiwibXJnbiIsIm5vdFN0dWNrVG8iLCJpc1RvcCIsInN0aWNrVG9Ub3AiLCJhbmNob3JQdCIsImFuY2hvckhlaWdodCIsInRvcE9yQm90dG9tIiwic3RpY2t5T24iLCJuZXdFbGVtV2lkdGgiLCJjb21wIiwicGRuZ2wiLCJwZG5nciIsImR5bmFtaWNIZWlnaHQiLCJuZXdDb250YWluZXJIZWlnaHQiLCJfc2V0QnJlYWtQb2ludHMiLCJtVG9wIiwiZW1DYWxjIiwibWFyZ2luVG9wIiwibUJ0bSIsIm1hcmdpbkJvdHRvbSIsImVtIiwiJHRhYlRpdGxlcyIsImxpbmtDbGFzcyIsImxpbmtBY3RpdmVDbGFzcyIsIm1hdGNoSGVpZ2h0IiwiX3NldEhlaWdodCIsImFuY2hvck5vSGFzaCIsInNlbGVjdFRhYiIsIl9jb2xsYXBzZSIsIl9hZGRLZXlIYW5kbGVyIiwiX2FkZENsaWNrSGFuZGxlciIsIl9zZXRIZWlnaHRNcUhhbmRsZXIiLCJfaGFuZGxlVGFiQ2hhbmdlIiwid3JhcE9uS2V5cyIsImhpc3RvcnlIYW5kbGVkIiwiYWN0aXZlQ29sbGFwc2UiLCIkb2xkVGFiIiwiJHRhYkxpbmsiLCIkdGFyZ2V0Q29udGVudCIsIl9jb2xsYXBzZVRhYiIsInBhbmVsQWN0aXZlQ2xhc3MiLCIkdGFyZ2V0QW5jaG9yIiwiJGFjdGl2ZVRhYiIsImlkU3RyIiwiaGFzaElkU3RyIiwicGFuZWxDbGFzcyIsInBhbmVsIiwidG9nZ2xlciIsIiR0cmlnZ2VyIiwiX3VwZGF0ZUFSSUEiLCJpc0NsaWNrIiwidGlwVGV4dCIsIl9idWlsZFRlbXBsYXRlIiwiYWxsb3dIdG1sIiwidHJpZ2dlckNsYXNzIiwiZWxlbWVudENsYXNzTmFtZSIsImJhc2VWYWwiLCJ0b29sdGlwV2lkdGgiLCJ0b29sdGlwSGVpZ2h0IiwidGVtcGxhdGVDbGFzc2VzIiwidG9vbHRpcENsYXNzIiwic2hvd09uIiwiZmFkZUluRHVyYXRpb24iLCJmYWRlT3V0RHVyYXRpb24iLCJpc0ZvY3VzIiwiZGlzYWJsZUZvclRvdWNoIiwidG91Y2hDbG9zZVRleHQiLCJNZW51UGx1Z2lucyQxIiwidGFicyIsInN0b3JlemZEYXRhIiwiY3VycmVudFJ1bGUiLCJfZ2V0QWxsT3B0aW9ucyIsImFsbE9wdGlvbnMiLCJkdW1teVBsdWdpbiIsInRtcFBsdWdpbiIsImtleUtleSIsIm9iak9iaiIsIl9jaGFuZ2VkWmZNZWRpYVF1ZXJ5SGFuZGxlciIsIl9oYW5kbGVNYXJrdXAiLCJ0b1NldCIsImZyb21TdHJpbmciLCIkcGFuZWxzIiwidGFic1RpdGxlIiwidGFic1BhbmVsIiwiJGxpSGVhZHMiLCIkbGlIZWFkc0EiLCIkdGFic0NvbnRlbnQiLCIkcGxhY2Vob2xkZXIiLCJ0ZW1wVmFsdWUiLCJQcmVzZW50c0hhbmRsZXIiLCJwcmVzZW50cyIsImJhc2VQYXRoIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInVwZGF0ZVN0YXRlcyIsInByZXNlbnQiLCJpc01pbmUiLCJwcmVzZW50Q29udGFpbmVyIiwicHJlc2VudFRlbXBsYXRlIiwibG9hZFByZXNlbnRzIiwiaW5uZXJUZXh0IiwicXVlcnlTZWxlY3RvciIsImNoZWNrYm94RWxlbWVudCIsImNsYXNzTGlzdCIsInB3IiwicHJvbXB0IiwiYWxlcnQiLCJzZXRJdGVtIiwic2V0UHJlc2VudElzQm91Z2h0IiwiRm9ybURhdGEiLCJmZXRjaCIsImxhc3RBcmdzIiwiZnJhbWVJZCIsIndyYXBwZXJGbiIsIl9fcmVzdCIsIkl0b0kiLCJpbm5lckNyZWF0ZU1lZGl1bSIsIm1pZGRsZXdhcmUiLCJidWZmZXIiLCJhc3NpZ25lZCIsInJlYWQiLCJ1c2VNZWRpdW0iLCJhc3NpZ25TeW5jTWVkaXVtIiwiY2JzIiwiYXNzaWduTWVkaXVtIiwicGVuZGluZ1F1ZXVlIiwiZXhlY3V0ZVF1ZXVlIiwiY3ljbGUiLCJQcm9taXNlIiwiY3JlYXRlTWVkaXVtIiwiY3JlYXRlU2lkZWNhck1lZGl1bSIsIm1lZGl1bSIsInNzciIsImVmZmVjdENhciIsInVzZU1lcmdlUmVmcyIsImFzc2lnblJlZiIsImZhY2FkZSIsIm5vdGhpbmciLCJSZW1vdmVTY3JvbGwiLCJwYXJlbnRSZWYiLCJvblNjcm9sbENhcHR1cmUiLCJvbldoZWVsQ2FwdHVyZSIsIm9uVG91Y2hNb3ZlQ2FwdHVyZSIsImNhbGxiYWNrcyIsInNldENhbGxiYWNrcyIsImZvcndhcmRQcm9wcyIsInJlbW92ZVNjcm9sbEJhciIsInNoYXJkcyIsInNpZGVDYXIiLCJub0lzb2xhdGlvbiIsImluZXJ0IiwiYWxsb3dQaW5jaFpvb20iLCJDb250YWluZXIiLCJTaWRlQ2FyIiwiY29udGFpbmVyUmVmIiwiY29udGFpbmVyUHJvcHMiLCJsb2NrUmVmIiwiZnVsbFdpZHRoIiwiemVyb1JpZ2h0IiwiaGlkZGVuR3VhcmQiLCJtZWRpdW1Gb2N1cyIsIm1lZGl1bUJsdXIiLCJtZWRpdW1FZmZlY3QiLCJtZWRpdW1TaWRlY2FyIiwiZW1wdHlBcnJheSIsIkZvY3VzTG9jayIsIl9leHRlbmRzMiIsIl9SZWFjdCR1c2VTdGF0ZSIsInJlYWxPYnNlcnZlZCIsInNldE9ic2VydmVkIiwib2JzZXJ2ZWQiLCJvcmlnaW5hbEZvY3VzZWRFbGVtZW50Iiwibm9Gb2N1c0d1YXJkcyIsInBlcnNpc3RlbnRGb2N1cyIsImNyb3NzRnJhbWUiLCJhbGxvd1RleHRTZWxlY3Rpb24iLCJ3aGl0ZUxpc3QiLCJoYXNQb3NpdGl2ZUluZGljZXMiLCJfcHJvcHMkc2hhcmRzIiwiX3Byb3BzJGFzIiwiX3Byb3BzJGxvY2tQcm9wcyIsImxvY2tQcm9wcyIsInNob3VsZFJldHVybkZvY3VzIiwicmV0dXJuRm9jdXMiLCJmb2N1c09wdGlvbnMiLCJvbkFjdGl2YXRpb25DYWxsYmFjayIsIm9uQWN0aXZhdGlvbiIsIm9uRGVhY3RpdmF0aW9uQ2FsbGJhY2siLCJvbkRlYWN0aXZhdGlvbiIsImFsbG93RGVmZXIiLCJyZXR1cm5Gb2N1c1RvIiwiaG93VG9SZXR1cm5Gb2N1cyIsInJldHVybkZvY3VzT3B0aW9ucyIsIm9uRm9jdXMiLCJvbkJsdXIiLCJzZXRPYnNlcnZlTm9kZSIsIm5ld09ic2VydmVkIiwiaGFzTGVhZGluZ0d1YXJkcyIsImhhc1RhaWxpbmdHdWFyZHMiLCJtZXJnZWRSZWYiLCJGb2N1c09uIiwic2V0TG9ja1Byb3BzIiwiX2MiLCJzY3JvbGxMb2NrIiwiZm9jdXNMb2NrIiwic2hvdWxkSWdub3JlIiwiVGFyZ2V0IiwiZXhwb3J0U2lkZWNhciIsImV4cG9ydGVkIiwiX3NldFByb3RvdHlwZU9mIiwiX2luaGVyaXRzTG9vc2UiLCJpc1NpZGVDYXJFeHBvcnQiLCJyZWR1Y2VQcm9wc1RvU3RhdGUiLCJoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50IiwiV3JhcHBlZENvbXBvbmVudCIsIm1vdW50ZWRJbnN0YW5jZXMiLCJlbWl0Q2hhbmdlIiwiU2lkZUVmZmVjdCIsIl9QdXJlQ29tcG9uZW50IiwicGVlayIsIl9wcm90byIsImdldERpc3BsYXlOYW1lIiwiYXNBcnJheSIsImdldEFjdGl2ZUVsZW1lbnQiLCJzaGFkb3dSb290IiwiZ2V0VG9wUGFyZW50IiwiZ2V0QWxsQWZmZWN0ZWROb2RlcyIsIkJvb2xlYW4iLCJjdXJyZW50Tm9kZSIsImNvbnRhaW5lZCIsIkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSIsIkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TIiwiZmlsdGVyTmVzdGVkIiwiZm9jdXNJbnNpZGVJZnJhbWUiLCJ0b3BOb2RlIiwiZm9jdXNJbnNpZGUiLCJkYXRhc2V0IiwiZm9jdXNHdWFyZCIsImlzVmlzaWJsZVVuY2FjaGVkIiwiY2hlY2tQYXJlbnQiLCJET0NVTUVOVF9OT0RFIiwiRUxFTUVOVF9OT0RFIiwiaXNFbGVtZW50SGlkZGVuIiwiRE9DVU1FTlRfRlJBR01FTlRfTk9ERSIsImlzVmlzaWJsZUNhY2hlZCIsInZpc2liaWxpdHlDYWNoZSIsImdldERhdGFzZXQiLCJpc0hUTUxJbnB1dEVsZW1lbnQiLCJpc1JhZGlvRWxlbWVudCIsImlzR3VhcmQiLCJpc05vdEFHdWFyZCIsImlzRGVmaW5lZCIsImNvcnJlY3ROb2RlIiwiZmluZFNlbGVjdGVkUmFkaW8iLCJwaWNrRmlyc3RGb2N1cyIsInBpY2tGb2N1c2FibGUiLCJuZXdGb2N1cyIsImlubmVyTm9kZXMiLCJvdXRlck5vZGVzIiwibGFzdE5vZGUiLCJjbnQiLCJmaXJzdEZvY3VzIiwibGFzdEZvY3VzIiwiaXNPbkd1YXJkIiwicmVzdWx0U2V0IiwiYWN0aXZlSW5kZXgiLCJsYXN0Tm9kZUluc2lkZSIsImluZGV4RGlmZiIsImZpcnN0Tm9kZUluZGV4IiwibGFzdE5vZGVJbmRleCIsImNvcnJlY3RlZE5vZGVzIiwiY29ycmVjdGVkSW5kZXhEaWZmIiwicmV0dXJuRmlyc3ROb2RlIiwicmV0dXJuTGFzdE5vZGUiLCJ0YWJTb3J0IiwidGFiRGlmZiIsIm9yZGVyQnlUYWJJbmRleCIsImZpbHRlck5lZ2F0aXZlIiwia2VlcEd1YXJkcyIsInF1ZXJ5VGFiYmFibGVzIiwicXVlcnlHdWFyZFRhYmJhYmxlcyIsImdldEZvY3VzYWJsZXMiLCJ3aXRoR3VhcmRzIiwiZmlsdGVyRm9jdXNhYmxlIiwiaXNIVE1MQnV0dG9uRWxlbWVudCIsImFyaWFEaXNhYmxlZCIsIm5vdEhpZGRlbklucHV0IiwiZ2V0VGFiYmFibGVOb2RlcyIsInRvcE5vZGVzIiwiZ2V0QWxsVGFiYmFibGVOb2RlcyIsInBhcmVudEF1dG9mb2N1c2FibGVzIiwicGFyZW50Rm9jdXMiLCJnZXRQYXJlbnRzIiwiZ2V0Q29tbW9uUGFyZW50Iiwibm9kZUEiLCJub2RlQiIsInBhcmVudHNBIiwicGFyZW50c0IiLCJjdXJyZW50UGFyZW50IiwiZ2V0VG9wQ29tbW9uUGFyZW50IiwiYmFzZUFjdGl2ZUVsZW1lbnQiLCJsZWZ0RW50cnkiLCJyaWdodEVudHJpZXMiLCJhY3RpdmVFbGVtZW50cyIsImxlZnRFbnRyaWVzIiwidG9wQ29tbW9uIiwic3ViRW50cnkiLCJjb21tb24iLCJnZXRGb2N1c01lcmdlIiwiY29tbW9uUGFyZW50IiwiYW55Rm9jdXNhYmxlIiwiaW5uZXJFbGVtZW50cyIsInNyY05vZGVzIiwiZHN0Tm9kZXMiLCJyZW1hcCIsImF1dG9Gb2N1c2FibGVzIiwib3JkZXJlZElubmVyRWxlbWVudHMiLCJlbnRpdHkiLCJuZXdJZCIsImF1dG9Gb2N1c2FibGUiLCJhbGxQYXJlbnRBdXRvZm9jdXNhYmxlcyIsImF1dG9mb2N1cyIsImd1YXJkQ291bnQiLCJsb2NrRGlzYWJsZWQiLCJkZWZlckFjdGlvbiIsInNldEltbWVkaWF0ZSIsImxhc3RBY3RpdmVUcmFwIiwibGFzdEFjdGl2ZUZvY3VzIiwibGFzdFBvcnRhbGVkRWxlbWVudCIsImZvY3VzV2FzT3V0c2lkZVdpbmRvdyIsImRlZmF1bHRXaGl0ZWxpc3QiLCJhdXRvR3VhcmQiLCJhbGxOb2RlcyIsImxhc3RHdWFyZCIsImd1YXJkIiwiZm9jdXNBdXRvR3VhcmQiLCJsb2NrSXRlbSIsImV4dHJhY3RSZWYiLCJfbGFzdEFjdGl2ZVRyYXAiLCJ3b3JraW5nTm9kZSIsInBvcnRhbGVkRWxlbWVudCIsIndvcmtpbmdBcmVhIiwiZm9jdXNXaGl0ZWxpc3RlZCIsImNoZWNrSW5Ib3N0IiwiYm91bmRhcnkiLCJ3aXRoaW5Ib3N0IiwibmV3QWN0aXZlRWxlbWVudCIsImZvY3VzZWRJbmRleCIsIm9uVHJhcCIsIm9ic2VydmVyTm9kZSIsIm9uV2luZG93Qmx1ciIsIm1vdmVGb2N1c0luc2lkZSIsImN1cnJlbnROb25jZSIsInByb3BzTGlzdCIsIl9yZWY1IiwidHJhcHMiLCJ0cmFwIiwibGFzdFRyYXAiLCJzYW1lVHJhcCIsIl9yZWY2Iiwic3R5bGVzaGVldFNpbmdsZXRvbiIsInN0eWxlc2hlZXQiLCJpbnNlcnRTdHlsZVRhZyIsInN0eWxlU2luZ2xldG9uIiwidXNlU3R5bGUiLCJ6ZXJvR2FwIiwiZ2FwIiwiZ2V0R2FwV2lkdGgiLCJnYXBNb2RlIiwib2Zmc2V0cyIsImNzIiwiZ2V0T2Zmc2V0IiwiZG9jdW1lbnRXaWR0aCIsIndpbmRvd1dpZHRoIiwiaW5uZXJXaWR0aCIsImFsbG93UmVsYXRpdmUiLCJpbXBvcnRhbnQiLCJSZW1vdmVTY3JvbGxCYXIiLCJzZXRHYXAiLCJub1JlbGF0aXZlIiwibm9JbXBvcnRhbnQiLCJsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZCIsIlNoYWRvd1Jvb3QiLCJlbGVtZW50Q291bGRCZVNjcm9sbGVkIiwiZ2V0U2Nyb2xsVmFyaWFibGVzIiwiZWxlbWVudENvdWxkQmVWU2Nyb2xsZWQiLCJlbGVtZW50Q291bGRCZUhTY3JvbGxlZCIsInNjcm9sbFdpZHRoIiwiZ2V0SFNjcm9sbFZhcmlhYmxlcyIsInBhc3NpdmVTdXBwb3J0ZWQiLCJub25QYXNzaXZlIiwiZ2V0VG91Y2hYWSIsImdldERlbHRhWFkiLCJnZW5lcmF0ZVN0eWxlIiwiaWRDb3VudGVyIiwibG9ja1N0YWNrIiwic2hvdWxkUHJldmVudFF1ZXVlIiwidG91Y2hTdGFydFJlZiIsImFjdGl2ZUF4aXMiLCJsYXN0UHJvcHMiLCJhbGxvd18xIiwic2hvdWxkQ2FuY2VsRXZlbnQiLCJjdXJyZW50QXhpcyIsInRvdWNoIiwidG91Y2hTdGFydCIsIm1vdmVEaXJlY3Rpb24iLCJjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uIiwiY2FuY2VsaW5nQXhpcyIsImVuZFRhcmdldCIsInNvdXJjZURlbHRhIiwibm9PdmVyc2Nyb2xsIiwiZGlyZWN0aW9uRmFjdG9yIiwiZ2V0RGlyZWN0aW9uRmFjdG9yIiwidGFyZ2V0SW5Mb2NrIiwic2hvdWxkQ2FuY2VsU2Nyb2xsIiwiaXNEZWx0YVBvc2l0aXZlIiwiYXZhaWxhYmxlU2Nyb2xsIiwiYXZhaWxhYmxlU2Nyb2xsVG9wIiwiZWxlbWVudFNjcm9sbCIsImhhbmRsZVNjcm9sbCIsInNob3VsZFByZXZlbnQiLCJfZXZlbnQiLCJzb3VyY2VFdmVudCIsInNob3VsZCIsInNoYXJkTm9kZXMiLCJzaG91bGRDYW5jZWwiLCJzY3JvbGxUb3VjaFN0YXJ0Iiwic2Nyb2xsV2hlZWwiLCJzY3JvbGxUb3VjaE1vdmUiLCJpbnN0IiwiY291bnRlck1hcCIsInVuY29udHJvbGxlZE5vZGVzIiwibWFya2VyTWFwIiwibG9ja0NvdW50IiwiaGlkZU90aGVycyIsIm9yaWdpbmFsVGFyZ2V0IiwibWFya2VyTmFtZSIsImdldERlZmF1bHRQYXJlbnQiLCJtYXJrZXJDb3VudGVyIiwiaGlkZGVuTm9kZXMiLCJlbGVtZW50c1RvS2VlcCIsImtlZXAiLCJhbHJlYWR5SGlkZGVuIiwiY291bnRlclZhbHVlIiwibWFya2VyVmFsdWUiLCJJbnRlcmFjdGl2aXR5RGlzYWJsZXIiLCJvbkVzY2FwZUtleSIsIm9uQ2xpY2tPdXRzaWRlIiwiYWN0aXZlTm9kZSIsInNldEFjdGl2ZU5vZGUiLCJsYXN0RXZlbnRUYXJnZXQiLCJtb3VzZVRvdWNoZXMiLCJfdW5kbyIsInVubW91bnRlZCIsIlJlcXVpcmVTaWRlQ2FyIiwiZnVsbHNjcmVlbkVuYWJsZWQiLCJmdWxsc2NyZWVuRWxlbWVudCIsInJlcXVlc3RGdWxsc2NyZWVuIiwiZXhpdEZ1bGxzY3JlZW4iLCJmdWxsc2NyZWVuY2hhbmdlIiwiZnVsbHNjcmVlbmVycm9yIiwiZnVsbHNjcmVlbiIsIndlYmtpdCIsIm1veiIsIm9uQ2hhbmdlIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJleGNsdWRlZCIsInNvdXJjZUtleXMiLCJUcmFuc2l0aW9uIiwiaW5pdGlhbFN0YXR1cyIsImFwcGVhciIsImlzTW91bnRpbmciLCJlbnRlciIsImFwcGVhclN0YXR1cyIsInVubW91bnRPbkV4aXQiLCJtb3VudE9uRW50ZXIiLCJuZXh0Q2FsbGJhY2siLCJwcmV2U3RhdGUiLCJ1cGRhdGVTdGF0dXMiLCJwcmV2UHJvcHMiLCJuZXh0U3RhdHVzIiwiY2FuY2VsTmV4dENhbGxiYWNrIiwiZ2V0VGltZW91dHMiLCJleGl0IiwibW91bnRpbmciLCJwZXJmb3JtRW50ZXIiLCJwZXJmb3JtRXhpdCIsImFwcGVhcmluZyIsIm5vZGVSZWYiLCJtYXliZU5vZGUiLCJtYXliZUFwcGVhcmluZyIsInRpbWVvdXRzIiwiZW50ZXJUaW1lb3V0Iiwic2FmZVNldFN0YXRlIiwib25FbnRlcmVkIiwib25FbnRlciIsIm9uRW50ZXJpbmciLCJvblRyYW5zaXRpb25FbmQiLCJvbkV4aXQiLCJvbkV4aXRpbmciLCJvbkV4aXRlZCIsIm5leHRTdGF0ZSIsInNldE5leHRDYWxsYmFjayIsImRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIiLCJhZGRFbmRMaXN0ZW5lciIsIm1heWJlTmV4dENhbGxiYWNrIiwiX3RoaXMkcHJvcHMiLCJjaGlsZFByb3BzIiwiVHJhbnNpdGlvbkdyb3VwQ29udGV4dCIsIlVOTU9VTlRFRCIsIkVYSVRFRCIsIkVOVEVSSU5HIiwiRU5URVJFRCIsIkVYSVRJTkciLCJnZXRDaGlsZE1hcHBpbmciLCJtYXBGbiIsIm1hcHBlciIsImdldFByb3AiLCJnZXROZXh0Q2hpbGRNYXBwaW5nIiwicHJldkNoaWxkTWFwcGluZyIsIm5leHRDaGlsZE1hcHBpbmciLCJnZXRWYWx1ZUZvcktleSIsIm5leHRLZXlzUGVuZGluZyIsInBlbmRpbmdLZXlzIiwicHJldktleSIsImNoaWxkTWFwcGluZyIsIm5leHRLZXkiLCJwZW5kaW5nTmV4dEtleSIsIm1lcmdlQ2hpbGRNYXBwaW5ncyIsImhhc1ByZXYiLCJoYXNOZXh0IiwicHJldkNoaWxkIiwiaXNMZWF2aW5nIiwiVHJhbnNpdGlvbkdyb3VwIiwiaGFuZGxlRXhpdGVkIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsImNvbnRleHRWYWx1ZSIsImZpcnN0UmVuZGVyIiwibW91bnRlZCIsImN1cnJlbnRDaGlsZE1hcHBpbmciLCJjaGlsZEZhY3RvcnkiLCJjbGFzc0NhbGxDaGVjayIsImNyZWF0ZUNsYXNzIiwiaW5oZXJpdHMiLCJvYmplY3RXaXRob3V0UHJvcGVydGllcyIsInBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJpbm5lclJlZiIsImNuIiwiQ0xBU1NfUFJFRklYIiwiaXNUb3VjaCIsImNvbXBvbmVudEJhc2VDbGFzc05hbWVzIiwiSGVhZGVyIiwiRm9vdGVyIiwiUG9zaXRpb25lciIsImZvb3RlckJhc2VDbGFzc05hbWUiLCJfcmVmMiRzaXplIiwiX3JlZjMkc2l6ZSIsIl9yZWY0JHNpemUiLCJfcmVmNSRzaXplIiwiX3JlZjYkc2l6ZSIsImhlYWRlckJhc2VDbGFzc05hbWUiLCJoZWFkZXJCdXR0b25DU1MiLCJoZWFkZXJGdWxsc2NyZWVuQ1NTIiwiaGVhZGVyQ2xvc2VDU1MiLCJuYXZpZ2F0aW9uSXRlbUNTUyIsImJvcmRlclJhZGl1cyIsIm5hdmlnYXRpb25QcmV2Q1NTIiwibmF2aWdhdGlvbk5leHRDU1MiLCJnZXRTb3VyY2UiLCJpc0Z1bGxzY3JlZW4iLCJfZGF0YSRzb3VyY2UiLCJyZWd1bGFyIiwidmlld0Jhc2VDbGFzc05hbWUiLCJjYXJvdXNlbENvbXBvbmVudHMiLCJpc01vZGFsIiwiaW5uZXJQcm9wcyIsImNvbXBvbmVudHMiLCJDYXB0aW9uIiwiQ291bnQiLCJGb290ZXJDYXB0aW9uIiwiRm9vdGVyQ291bnQiLCJhY3RpdmVWaWV3IiwidG90YWxWaWV3cyIsImdldENsb3NlTGFiZWwiLCJnZXRGdWxsc2NyZWVuTGFiZWwiLCJtb2RhbFByb3BzIiwiYWxsb3dGdWxsc2NyZWVuIiwib25DbG9zZSIsInRvZ2dsZUZ1bGxzY3JlZW4iLCJGc0ljb24iLCJDbG9zZUJ1dHRvbiIsIkZ1bGxzY3JlZW5CdXR0b24iLCJIZWFkZXJDbG9zZSIsIkhlYWRlckZ1bGxzY3JlZW4iLCJOYXZpZ2F0aW9uIiwic2hvd05hdmlnYXRpb25PblRvdWNoRGV2aWNlIiwiTmF2aWdhdGlvblByZXYiLCJfcHJvcHMkY2hpbGRyZW4iLCJOYXZpZ2F0aW9uTmV4dCIsIl9wcm9wcyRjaGlsZHJlbjIiLCJmb3JtYXR0ZXJzIiwiZ2V0QWx0VGV4dCIsInVzZXJTZWxlY3QiLCJtb2RhbENvbXBvbmVudHMiLCJCbGFua2V0IiwiRGlhbG9nIiwicmVtb3ZlRm9jdXNPbiIsImRlZmF1bHRDYXJvdXNlbFN0eWxlcyIsImZsZXhEaXJlY3Rpb24iLCJmb290ZXIiLCJpbnRlcmFjdGlvbklzSWRsZSIsImZvb3RlckNhcHRpb24iLCJmb290ZXJDb3VudCIsImhlYWRlciIsInBhZGRpbmdCb3R0b20iLCJoZWFkZXJDbG9zZSIsImhlYWRlckZ1bGxzY3JlZW4iLCJuYXZpZ2F0aW9uIiwibmF2aWdhdGlvblByZXYiLCJuYXZpZ2F0aW9uTmV4dCIsInRleHRBbGlnbiIsImRlZmF1bHRNb2RhbFN0eWxlcyIsImJsYW5rZXQiLCJkaWFsb2ciLCJwb3NpdGlvbmVyIiwiaW5Qcm9wIiwib3JpZ2luYWxQcm9wcyIsImZhZGVTdHlsZSIsImZhZGVUcmFuc2l0aW9uIiwiZW50ZXJpbmciLCJlbnRlcmVkIiwiZXhpdGluZyIsInNsaWRlU3R5bGUiLCJzbGlkZVRyYW5zaXRpb24iLCJjbG9zZU9uQmFja2Ryb3BDbGljayIsInByZXZlbnRTY3JvbGwiLCJiYWNrZHJvcENsYXNzTmFtZXMiLCJNb2RhbCIsImNhY2hlQ29tcG9uZW50cyIsImlzQ2xvc2luZyIsIl9jb21wb25lbnRzIiwiY29tbW9uUHJvcHMiLCJnZXRDb21tb25Qcm9wcyIsInRyYW5zaXRpb25JbiIsImhhbmRsZUNsb3NlIiwiY2Fyb3VzZWxDb21wb25lbnQiLCJoYW5kbGVGdWxsc2NyZWVuQ2hhbmdlIiwiaGFuZGxlQmFja2Ryb3BDbGljayIsIm1vZGFsRGlkTW91bnQiLCJtb2RhbFdpbGxVbm1vdW50IiwiaGFuZGxlS2V5VXAiLCJjb21wcyIsImFsbG93Q2xvc2UiLCJoYXNCYWNrZHJvcENsYXNzTmFtZSIsIl9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24iLCJfZGlkSXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvckVycm9yIiwiX3N0ZXAiLCJfaXRlcmF0b3IiLCJ0YXJnZXRDbGFzcyIsImN1c3RvbSIsInZpZXdQYWdlclN0eWxlcyIsImZyYW1lU3R5bGVzIiwiZGVmYXVsdFByb3BzJDEiLCJnZXROZXh0TGFiZWwiLCJnZXRQcmV2TGFiZWwiLCJnZXROZXh0VGl0bGUiLCJnZXRQcmV2VGl0bGUiLCJoaWRlQ29udHJvbHNXaGVuSWRsZSIsInRyYWNrUHJvcHMiLCJ0cmFja0Jhc2VDbGFzc05hbWUiLCJDYXJvdXNlbCIsIl9pbml0aWFsaXNlUHJvcHMkMSIsImhhbmRsZU1vdXNlQWN0aXZpdHkiLCJmb2N1c1ZpZXdGcmFtZSIsImZyYW1lUHJvcHMiLCJnZXRWaWV3RGF0YSIsImNhcm91c2VsUHJvcHMiLCJfcHJvcHMzIiwiZ2V0Q29udGFpbmVyIiwicmVuZGVySGVhZGVyIiwiZ2V0RnJhbWUiLCJnZXRUcmFja1Byb3BzIiwiaGFuZGxlVmlld0NoYW5nZSIsImdldFRyYWNrIiwicmVuZGVyTmF2aWdhdGlvbiIsInJlbmRlckZvb3RlciIsImdldEZvb3RlciIsImdldEhlYWRlciIsImhhc1ByZXZpb3VzVmlldyIsImhhc05leHRWaWV3IiwiX3Byb3BzNCIsImdldEZvcm1hdHRlcnMiLCJpbmRpY2llcyIsIl9nZXRGb3JtYXR0ZXJzIiwiX2NvbXBvbmVudHMyIiwic2hvd1ByZXYiLCJzaG93TmV4dCIsIl9jb21wb25lbnRzMyIsIl9jb21wb25lbnRzNCIsIl9nZXRGb3JtYXR0ZXJzMiIsIk1vZGFsR2F0ZXdheSIsImltZ1dpdGhDbGljayIsIlBob3RvIiwicGhvdG8iLCJpbWdTdHlsZSIsInBob3RvUHJvcFR5cGUiLCJkZWNpbWFscyIsIk51bWJlciIsInJhdGlvIiwiQmluYXJ5SGVhcCIsInNjb3JlRnVuY3Rpb24iLCJidWJibGVVcCIsInNpbmtEb3duIiwic2NvcmUiLCJwYXJlbnROIiwiZWxlbVNjb3JlIiwiY2hpbGQyTiIsImNoaWxkMU4iLCJjaGlsZDEiLCJjaGlsZDFTY29yZSIsImNoaWxkMiIsImZpbmRTaG9ydGVzdFBhdGgiLCJncmFwaCIsInN0YXJ0Tm9kZSIsImVuZE5vZGUiLCJwcmVjZWRlbnRzTWFwIiwiZ2V0UGF0aEZyb21QcmVjZWRlbnRzTWFwIiwidmlzaXRlZCIsInN0b3JlZFNob3J0ZXN0UGF0aHMiLCJwUXVldWUiLCJ3ZWlnaHQiLCJzaG9ydGVzdE5vZGUiLCJzaG9ydGVzdE5vZGVJZCIsIm5laWdoYm9yaW5nTm9kZXMiLCJuZWlnaGJvciIsIm5ld1RvdGFsV2VpZ2h0IiwiYnVpbGRQcmVjZWRlbnRzTWFwIiwiZ2V0Q29tbW9uSGVpZ2h0Iiwicm93IiwiY29udGFpbmVyV2lkdGgiLCJjb3N0IiwicGhvdG9zIiwidGFyZ2V0SGVpZ2h0IiwiY29tbW9uSGVpZ2h0IiwiY29tcHV0ZVJvd0xheW91dCIsImxpbWl0Tm9kZVNlYXJjaCIsInRhcmdldFJvd0hlaWdodCIsImdldE5laWdoYm9ycyIsIm1ha2VHZXROZWlnaGJvcnMiLCJHYWxsZXJ5IiwicmVuZGVySW1hZ2UiLCJzZXRDb250YWluZXJXaWR0aCIsImdhbGxlcnlFbCIsImFuaW1hdGlvbkZyYW1lSUQiLCJuZXdXaWR0aCIsImhhbmRsZUNsaWNrIiwiZ2FsbGVyeVN0eWxlIiwidGh1bWJzIiwiZmluZElkZWFsTm9kZVNlYXJjaCIsImNvbFdpZHRoIiwicGhvdG9zV2l0aFNpemVzIiwibmV3SGVpZ2h0IiwiY29sTGVmdFBvc2l0aW9ucyIsImNvbEN1cnJUb3BQb3NpdGlvbnMiLCJzbWFsbGVzdENvbCIsInRhbGxlc3RDb2wiLCJjb21wdXRlQ29sdW1uTGF5b3V0IiwicmVuZGVyQ29tcG9uZW50IiwidGh1bWIiLCJJbWFnZUdhbGxlcnlNZW1vIiwiY3VycmVudEltYWdlIiwic2V0Q3VycmVudEltYWdlIiwidmlld2VySXNPcGVuIiwic2V0Vmlld2VySXNPcGVuIiwib3BlbkxpZ2h0Ym94IiwidGVtcGxhdGVzIiwiaG9tZSIsInVudGVya3VuZnQiLCJ0YWdlc2FibGF1ZiIsImdlc2NoZW5rZSIsInN0YW5kZXNhbXQiLCJmb3RvYm94IiwiaG9jaHplaXRzZm90b3MiLCJzY3JvbGxUaW1lb3V0Iiwic2Nyb2xsVG9WaWV3IiwibW9kYWwiLCJpbmZvSW1hZ2VDb250YWluZXIiLCJjaXJjbGUiLCJlbGVtVG9TaG93Iiwic2Nyb2xsSW50b1ZpZXciLCJuYXZCYXIiLCJhbmNob3JzIiwib2JzZXJ2ZXJEb3duIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJpc0ludGVyc2VjdGluZyIsImludGVyc2VjdGlvblJlY3QiLCJyb290TWFyZ2luIiwib2JzZXJ2ZXJVcCIsInNob3dQcmVzZW50cyIsImN1cnJlbnRTaXRlIl0sIm1hcHBpbmdzIjoiYUFDRSxJQUFJQSxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9BQU9GLEVBQWlCRSxHQUFVQyxRQUduQyxJQUFJQyxFQUFTSixFQUFpQkUsR0FBWSxDQUN6Q0csRUFBR0gsRUFDSEksR0FBRyxFQUNISCxRQUFTLElBVVYsT0FOQUksRUFBUUwsR0FBVU0sS0FBS0osRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU0YsR0FHL0RHLEVBQU9FLEdBQUksRUFHSkYsRUFBT0QsUUFLZkYsRUFBb0JRLEVBQUlGLEVBR3hCTixFQUFvQlMsRUFBSVYsRUFHeEJDLEVBQW9CVSxFQUFJLFNBQVNSLEVBQVNTLEVBQU1DLEdBQzNDWixFQUFvQmEsRUFBRVgsRUFBU1MsSUFDbENHLE9BQU9DLGVBQWViLEVBQVNTLEVBQU0sQ0FBRUssWUFBWSxFQUFNQyxJQUFLTCxLQUtoRVosRUFBb0JrQixFQUFJLFNBQVNoQixHQUNYLG9CQUFYaUIsUUFBMEJBLE9BQU9DLGFBQzFDTixPQUFPQyxlQUFlYixFQUFTaUIsT0FBT0MsWUFBYSxDQUFFQyxNQUFPLFdBRTdEUCxPQUFPQyxlQUFlYixFQUFTLGFBQWMsQ0FBRW1CLE9BQU8sS0FRdkRyQixFQUFvQnNCLEVBQUksU0FBU0QsRUFBT0UsR0FFdkMsR0FEVSxFQUFQQSxJQUFVRixFQUFRckIsRUFBb0JxQixJQUMvQixFQUFQRSxFQUFVLE9BQU9GLEVBQ3BCLEdBQVcsRUFBUEUsR0FBOEIsaUJBQVZGLEdBQXNCQSxHQUFTQSxFQUFNRyxXQUFZLE9BQU9ILEVBQ2hGLElBQUlJLEVBQUtYLE9BQU9ZLE9BQU8sTUFHdkIsR0FGQTFCLEVBQW9Ca0IsRUFBRU8sR0FDdEJYLE9BQU9DLGVBQWVVLEVBQUksVUFBVyxDQUFFVCxZQUFZLEVBQU1LLE1BQU9BLElBQ3RELEVBQVBFLEdBQTRC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QixTQUFTcU0sZUFBZSxnQkFDcEM0cUQsRUFBTWozRCxTQUFTcU0sZUFBZSxzQkFFcEMsSUFBSSt0SixFQUFjLE9BR2xCOXBJLEVBQVV6Z0IsVUFBWStvSixHQUFVQyxLQUNoQzc0SixTQUFTK00saUJBQWlCLHVCQUF1Qm9rQyxRQUFTanRDLElBQ3REQSxFQUFLOEssaUJBQWlCLFFBQVMsS0FDVGhQLFNBQVMrTSxpQkFBaUIsaUJBQ2xDb2tDLFFBQVFqdEMsR0FBUUEsRUFBS3lxSSxVQUFVMXlILE9BQU8sV0FFOUJqYyxTQUFTK00saUJBQWlCLHVCQUF5QjdJLEVBQUs4eUksUUFBYyxLQUFJLE1BQ2xGN2xHLFFBQVFqdEMsR0FBUUEsRUFBS3lxSSxVQUFVOTBILElBQUksV0FFN0N1Z0osRUFBY2wySixFQUFLOHlJLFFBQWMsS0FDakMxbUgsRUFBVXpnQixVQUFZK29KLEdBQVV3QixHQUM1QixHQUFPQSxJQUNQbmpHLEVBQUl3M0UsY0FBYyxPQUFPNXNJLElBQU0sR0FBT3U0SixHQUN0Q25qRyxFQUFJMDNFLFVBQVUxeUgsT0FBTyxVQUNpQixNQUFsQy9YLEVBQUs4eUksUUFBdUIsY0FDNUIvL0UsRUFBSTAzRSxVQUFVMXlILE9BQU8sbUJBRXJCZzdDLEVBQUkwM0UsVUFBVTkwSCxJQUFJLG9CQUl0Qm85QyxFQUFJMDNFLFVBQVU5MEgsSUFBSSxVQUlnQixtQkFBM0IsR0FBVXVnSixJQUNqQixHQUFVQSxTQUt0QnA2SixTQUFTK00saUJBQWlCLGFBQWFva0MsUUFBUThsQixJQUMzQ0EsRUFBSWpvRCxpQkFBaUIsUUFBUyxLQUMxQmhQLFNBQVN5dUksY0FBYyx3QkFBd0J0cEIsY0FBYyxJQUFJejlGLE1BQU0iLCJmaWxlIjoiaW5kZXguYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDE2MSk7XG4iLCIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNi4wXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMjEtMDMtMDJUMTc6MDhaXG4gKi9cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9yZSBpbmZvLlxuXHRcdG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cblx0XHRcdGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDpcblx0XHRcdGZ1bmN0aW9uKCB3ICkge1xuXHRcdFx0XHRpZiAoICF3LmRvY3VtZW50ICkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeSggdyApO1xuXHRcdFx0fTtcblx0fSBlbHNlIHtcblx0XHRmYWN0b3J5KCBnbG9iYWwgKTtcblx0fVxuXG4vLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldFxufSApKCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7XG5cbi8vIEVkZ2UgPD0gMTIgLSAxMyssIEZpcmVmb3ggPD0xOCAtIDQ1KywgSUUgMTAgLSAxMSwgU2FmYXJpIDUuMSAtIDkrLCBpT1MgNiAtIDkuMVxuLy8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIG5vbi1zdHJpY3QgY29kZSAoZS5nLiwgQVNQLk5FVCA0LjUpIGFjY2Vzc2VzIHN0cmljdCBtb2RlXG4vLyBhcmd1bWVudHMuY2FsbGVlLmNhbGxlciAodHJhYy0xMzMzNSkuIEJ1dCBhcyBvZiBqUXVlcnkgMy4wICgyMDE2KSwgc3RyaWN0IG1vZGUgc2hvdWxkIGJlIGNvbW1vblxuLy8gZW5vdWdoIHRoYXQgYWxsIHN1Y2ggYXR0ZW1wdHMgYXJlIGd1YXJkZWQgaW4gYSB0cnkgYmxvY2suXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGFyciA9IFtdO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbnZhciBzbGljZSA9IGFyci5zbGljZTtcblxudmFyIGZsYXQgPSBhcnIuZmxhdCA/IGZ1bmN0aW9uKCBhcnJheSApIHtcblx0cmV0dXJuIGFyci5mbGF0LmNhbGwoIGFycmF5ICk7XG59IDogZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmNvbmNhdC5hcHBseSggW10sIGFycmF5ICk7XG59O1xuXG5cbnZhciBwdXNoID0gYXJyLnB1c2g7XG5cbnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7XG5cbnZhciBjbGFzczJ0eXBlID0ge307XG5cbnZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7XG5cbnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm5Ub1N0cmluZyA9IGhhc093bi50b1N0cmluZztcblxudmFyIE9iamVjdEZ1bmN0aW9uU3RyaW5nID0gZm5Ub1N0cmluZy5jYWxsKCBPYmplY3QgKTtcblxudmFyIHN1cHBvcnQgPSB7fTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKCBvYmogKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD01NywgRmlyZWZveCA8PTUyXG5cdFx0Ly8gSW4gc29tZSBicm93c2VycywgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIDxvYmplY3Q+IGVsZW1lbnRzXG5cdFx0Ly8gKGkuZS4sIGB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvYmplY3RcIiApID09PSBcImZ1bmN0aW9uXCJgKS5cblx0XHQvLyBXZSBkb24ndCB3YW50IHRvIGNsYXNzaWZ5ICphbnkqIERPTSBub2RlIGFzIGEgZnVuY3Rpb24uXG5cdFx0Ly8gU3VwcG9ydDogUXRXZWIgPD0zLjguNSwgV2ViS2l0IDw9NTM0LjM0LCB3a2h0bWx0b3BkZiB0b29sIDw9MC4xMi41XG5cdFx0Ly8gUGx1cyBmb3Igb2xkIFdlYktpdCwgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIGNvbGxlY3Rpb25zXG5cdFx0Ly8gKGUuZy4sIGB0eXBlb2YgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkaXZcIikgPT09IFwiZnVuY3Rpb25cImApLiAoZ2gtNDc1Nilcblx0XHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCIgJiZcblx0XHRcdHR5cGVvZiBvYmouaXRlbSAhPT0gXCJmdW5jdGlvblwiO1xuXHR9O1xuXG5cbnZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uIGlzV2luZG93KCBvYmogKSB7XG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcblx0fTtcblxuXG52YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vbmNlOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLCB2YWwsXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCtcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBcIm5vbmNlXCIgcHJvcGVydHkgb24gc2NyaXB0cy5cblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xuXHRcdFx0XHQvLyB0aGUgYG5vbmNlYCBhdHRyaWJ1dGUgaXMgcmVzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHdoZW5ldmVyIGl0XG5cdFx0XHRcdC8vIGJlY29tZXMgYnJvd3NpbmctY29udGV4dCBjb25uZWN0ZWQuXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25vbmNlLWF0dHJpYnV0ZXNcblx0XHRcdFx0Ly8gVGhlIGBub2RlLmdldEF0dHJpYnV0ZWAgY2hlY2sgd2FzIGFkZGVkIGZvciB0aGUgc2FrZSBvZlxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcblx0XHRcdFx0Ly8gdmlhIGFuIG9iamVjdC5cblx0XHRcdFx0dmFsID0gbm9kZVsgaSBdIHx8IG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCBpICk7XG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy42LjBcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGV2ZW46IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAoIGkgKyAxICkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdG9kZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFpc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggbmFtZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cblx0XHRcdFx0XHQvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWVcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWNvcHlJc0FycmF5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBwcm92aWRlZCBjb250ZXh0OyBmYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgb25lXG5cdC8vIGlmIG5vdCBzcGVjaWZpZWQuXG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zLCBkb2MgKSB7XG5cdFx0RE9NRXZhbCggY29kZSwgeyBub25jZTogb3B0aW9ucyAmJiBvcHRpb25zLm5vbmNlIH0sIGRvYyApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XG5cdFx0cmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHtcblx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXG5cdFx0XHRqID0gMCxcblx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdO1xuXHRcdH1cblxuXHRcdGZpcnN0Lmxlbmd0aCA9IGk7XG5cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH0sXG5cblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xuXHRcdHZhciBjYWxsYmFja0ludmVyc2UsXG5cdFx0XHRtYXRjaGVzID0gW10sXG5cdFx0XHRpID0gMCxcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aCxcblx0XHRcdGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXNcblx0XHQvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvblxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0Y2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7XG5cdFx0XHRpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7XG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRjaGVzO1xuXHR9LFxuXG5cdC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHtcblx0XHR2YXIgbGVuZ3RoLCB2YWx1ZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0cmV0ID0gW107XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlc1xuXHRcdGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7XG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIGVsZW1zICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdFx0cmV0dXJuIGZsYXQoIHJldCApO1xuXHR9LFxuXG5cdC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0c1xuXHRndWlkOiAxLFxuXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxuXHQvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LlxuXHRzdXBwb3J0OiBzdXBwb3J0XG59ICk7XG5cbmlmICggdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTtcbn1cblxuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXG5qUXVlcnkuZWFjaCggXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbFwiLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdFx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdH0gKTtcblxuZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHtcblxuXHQvLyBTdXBwb3J0OiByZWFsIGlPUyA4LjIgb25seSAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpXG5cdC8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSlcblx0Ly8gaGFzT3duIGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRpdmVzXG5cdC8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUVcblx0dmFyIGxlbmd0aCA9ICEhb2JqICYmIFwibGVuZ3RoXCIgaW4gb2JqICYmIG9iai5sZW5ndGgsXG5cdFx0dHlwZSA9IHRvVHlwZSggb2JqICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBvYmogKSB8fCBpc1dpbmRvdyggb2JqICkgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHxcblx0XHR0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqO1xufVxudmFyIFNpenpsZSA9XG4vKiFcbiAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYyLjMuNlxuICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pzLmZvdW5kYXRpb24vXG4gKlxuICogRGF0ZTogMjAyMS0wMi0xNlxuICovXG4oIGZ1bmN0aW9uKCB3aW5kb3cgKSB7XG52YXIgaSxcblx0c3VwcG9ydCxcblx0RXhwcixcblx0Z2V0VGV4dCxcblx0aXNYTUwsXG5cdHRva2VuaXplLFxuXHRjb21waWxlLFxuXHRzZWxlY3QsXG5cdG91dGVybW9zdENvbnRleHQsXG5cdHNvcnRJbnB1dCxcblx0aGFzRHVwbGljYXRlLFxuXG5cdC8vIExvY2FsIGRvY3VtZW50IHZhcnNcblx0c2V0RG9jdW1lbnQsXG5cdGRvY3VtZW50LFxuXHRkb2NFbGVtLFxuXHRkb2N1bWVudElzSFRNTCxcblx0cmJ1Z2d5UVNBLFxuXHRyYnVnZ3lNYXRjaGVzLFxuXHRtYXRjaGVzLFxuXHRjb250YWlucyxcblxuXHQvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhXG5cdGV4cGFuZG8gPSBcInNpenpsZVwiICsgMSAqIG5ldyBEYXRlKCksXG5cdHByZWZlcnJlZERvYyA9IHdpbmRvdy5kb2N1bWVudCxcblx0ZGlycnVucyA9IDAsXG5cdGRvbmUgPSAwLFxuXHRjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0dG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdGNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRub25uYXRpdmVTZWxlY3RvckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ly8gSW5zdGFuY2UgbWV0aG9kc1xuXHRoYXNPd24gPSAoIHt9ICkuaGFzT3duUHJvcGVydHksXG5cdGFyciA9IFtdLFxuXHRwb3AgPSBhcnIucG9wLFxuXHRwdXNoTmF0aXZlID0gYXJyLnB1c2gsXG5cdHB1c2ggPSBhcnIucHVzaCxcblx0c2xpY2UgPSBhcnIuc2xpY2UsXG5cblx0Ly8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRleE9mIGFzIGl0J3MgZmFzdGVyIHRoYW4gbmF0aXZlXG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzVcblx0aW5kZXhPZiA9IGZ1bmN0aW9uKCBsaXN0LCBlbGVtICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdGxlbiA9IGxpc3QubGVuZ3RoO1xuXHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0aWYgKCBsaXN0WyBpIF0gPT09IGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxcIiArXG5cdFx0XCJpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXG5cblx0Ly8gUmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlXG5cdHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsXG5cblx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jaWRlbnQtdG9rZW4tZGlhZ3JhbVxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCI/fFxcXFxcXFxcW15cXFxcclxcXFxuXFxcXGZdfFtcXFxcdy1dfFteXFwwLVxcXFx4N2ZdKStcIixcblxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnNcblx0YXR0cmlidXRlcyA9IFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XCIgKyB3aGl0ZXNwYWNlICtcblxuXHRcdC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpXG5cdFx0XCIqKFsqXiR8IX5dPz0pXCIgKyB3aGl0ZXNwYWNlICtcblxuXHRcdC8vIFwiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XVxuXHRcdC8vIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdXCJcblx0XHRcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiICsgaWRlbnRpZmllciArIFwiKSl8KVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIqXFxcXF1cIixcblxuXHRwc2V1ZG9zID0gXCI6KFwiICsgaWRlbnRpZmllciArIFwiKSg/OlxcXFwoKFwiICtcblxuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcblx0XHRcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGF0dHJpYnV0ZXMgKyBcIikqKXxcIiArXG5cblx0XHQvLyAzLiBhbnl0aGluZyBlbHNlIChjYXB0dXJlIDIpXG5cdFx0XCIuKlwiICtcblx0XHRcIilcXFxcKXwpXCIsXG5cblx0Ly8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlclxuXHRyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcIitcIiwgXCJnXCIgKSxcblx0cnRyaW0gPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIiskXCIsIFwiZ1wiICksXG5cblx0cmNvbW1hID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqLFwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKihbPit+XXxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiKlwiICksXG5cdHJkZXNjZW5kID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwifD5cIiApLFxuXG5cdHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcblxuXHRtYXRjaEV4cHIgPSB7XG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiVEFHXCI6IG5ldyBSZWdFeHAoIFwiXihcIiArIGlkZW50aWZpZXIgKyBcInxbKl0pXCIgKSxcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0XCJQU0VVRE9cIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0XCJDSElMRFwiOiBuZXcgUmVnRXhwKCBcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRcImJvb2xcIjogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblxuXHRcdC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKVxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcblx0XHRcIm5lZWRzQ29udGV4dFwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxuXHR9LFxuXG5cdHJodG1sID0gL0hUTUwkL2ksXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxuXG5cdHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLFxuXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXG5cblx0cnNpYmxpbmcgPSAvWyt+XS8sXG5cblx0Ly8gQ1NTIGVzY2FwZXNcblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcW1xcXFxkYS1mQS1GXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICsgXCI/fFxcXFxcXFxcKFteXFxcXHJcXFxcblxcXFxmXSlcIiwgXCJnXCIgKSxcblx0ZnVuZXNjYXBlID0gZnVuY3Rpb24oIGVzY2FwZSwgbm9uSGV4ICkge1xuXHRcdHZhciBoaWdoID0gXCIweFwiICsgZXNjYXBlLnNsaWNlKCAxICkgLSAweDEwMDAwO1xuXG5cdFx0cmV0dXJuIG5vbkhleCA/XG5cblx0XHRcdC8vIFN0cmlwIHRoZSBiYWNrc2xhc2ggcHJlZml4IGZyb20gYSBub24taGV4IGVzY2FwZSBzZXF1ZW5jZVxuXHRcdFx0bm9uSGV4IDpcblxuXHRcdFx0Ly8gUmVwbGFjZSBhIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIHRoZSBlbmNvZGVkIFVuaWNvZGUgY29kZSBwb2ludFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMStcblx0XHRcdC8vIEZvciB2YWx1ZXMgb3V0c2lkZSB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLCBtYW51YWxseSBjb25zdHJ1Y3QgYVxuXHRcdFx0Ly8gc3Vycm9nYXRlIHBhaXJcblx0XHRcdGhpZ2ggPCAwID9cblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xuXHR9LFxuXG5cdC8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG5cdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jY29tbW9uLXNlcmlhbGl6aW5nLWlkaW9tc1xuXHRyY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csXG5cdGZjc3Nlc2NhcGUgPSBmdW5jdGlvbiggY2gsIGFzQ29kZVBvaW50ICkge1xuXHRcdGlmICggYXNDb2RlUG9pbnQgKSB7XG5cblx0XHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdFx0aWYgKCBjaCA9PT0gXCJcXDBcIiApIHtcblx0XHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb250cm9sIGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlvbikgbnVtYmVycyBnZXQgZXNjYXBlZCBhcyBjb2RlIHBvaW50c1xuXHRcdFx0cmV0dXJuIGNoLnNsaWNlKCAwLCAtMSApICsgXCJcXFxcXCIgK1xuXHRcdFx0XHRjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyBcIiBcIjtcblx0XHR9XG5cblx0XHQvLyBPdGhlciBwb3RlbnRpYWxseS1zcGVjaWFsIEFTQ0lJIGNoYXJhY3RlcnMgZ2V0IGJhY2tzbGFzaC1lc2NhcGVkXG5cdFx0cmV0dXJuIFwiXFxcXFwiICsgY2g7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lc1xuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUVcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0aW5EaXNhYmxlZEZpZWxkc2V0ID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmaWVsZHNldFwiO1xuXHRcdH0sXG5cdFx0eyBkaXI6IFwicGFyZW50Tm9kZVwiLCBuZXh0OiBcImxlZ2VuZFwiIH1cblx0KTtcblxuLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0IClcbnRyeSB7XG5cdHB1c2guYXBwbHkoXG5cdFx0KCBhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApICksXG5cdFx0cHJlZmVycmVkRG9jLmNoaWxkTm9kZXNcblx0KTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/XG5cblx0XHQvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3NzaWJsZVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHB1c2hOYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbCggZWxzICkgKTtcblx0XHR9IDpcblxuXHRcdC8vIFN1cHBvcnQ6IElFPDlcblx0XHQvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5XG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0dmFyIGogPSB0YXJnZXQubGVuZ3RoLFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0Ly8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoXG5cdFx0XHR3aGlsZSAoICggdGFyZ2V0WyBqKysgXSA9IGVsc1sgaSsrIF0gKSApIHt9XG5cdFx0XHR0YXJnZXQubGVuZ3RoID0gaiAtIDE7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgbSwgaSwgZWxlbSwgbmlkLCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3Rvcixcblx0XHRuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsXG5cblx0XHQvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3VtZW50XG5cdFx0bm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHRcblx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgfHwgIXNlbGVjdG9yIHx8XG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xuXG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH1cblxuXHQvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzXG5cdGlmICggIXNlZWQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0XHRjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcblxuXHRcdGlmICggZG9jdW1lbnRJc0hUTUwgKSB7XG5cblx0XHRcdC8vIElmIHRoZSBzZWxlY3RvciBpcyBzdWZmaWNpZW50bHkgc2ltcGxlLCB0cnkgdXNpbmcgYSBcImdldCpCeSpcIiBET00gbWV0aG9kXG5cdFx0XHQvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21lbnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpXG5cdFx0XHRpZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAoIG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0Ly8gSUQgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKCAoIG0gPSBtYXRjaFsgMSBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb2N1bWVudCBjb250ZXh0XG5cdFx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKCBlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgJiZcblx0XHRcdFx0XHRcdFx0Y29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtLmlkID09PSBtICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHlwZSBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsgMiBdICkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0XHQvLyBDbGFzcyBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIG0gPSBtYXRjaFsgMyBdICkgJiYgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmXG5cdFx0XHRcdFx0Y29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHRpZiAoIHN1cHBvcnQucXNhICYmXG5cdFx0XHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF0gJiZcblx0XHRcdFx0KCAhcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSApICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOCBvbmx5XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgb2JqZWN0IGVsZW1lbnRzXG5cdFx0XHRcdCggbm9kZVR5cGUgIT09IDEgfHwgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm9iamVjdFwiICkgKSB7XG5cblx0XHRcdFx0bmV3U2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0XHRcdFx0bmV3Q29udGV4dCA9IGNvbnRleHQ7XG5cblx0XHRcdFx0Ly8gcVNBIGNvbnNpZGVycyBlbGVtZW50cyBvdXRzaWRlIGEgc2NvcGluZyByb290IHdoZW4gZXZhbHVhdGluZyBjaGlsZCBvclxuXHRcdFx0XHQvLyBkZXNjZW5kYW50IGNvbWJpbmF0b3JzLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LlxuXHRcdFx0XHQvLyBJbiBzdWNoIGNhc2VzLCB3ZSB3b3JrIGFyb3VuZCB0aGUgYmVoYXZpb3IgYnkgcHJlZml4aW5nIGV2ZXJ5IHNlbGVjdG9yIGluIHRoZVxuXHRcdFx0XHQvLyBsaXN0IHdpdGggYW4gSUQgc2VsZWN0b3IgcmVmZXJlbmNpbmcgdGhlIHNjb3BlIGNvbnRleHQuXG5cdFx0XHRcdC8vIFRoZSB0ZWNobmlxdWUgaGFzIHRvIGJlIHVzZWQgYXMgd2VsbCB3aGVuIGEgbGVhZGluZyBjb21iaW5hdG9yIGlzIHVzZWRcblx0XHRcdFx0Ly8gYXMgc3VjaCBzZWxlY3RvcnMgYXJlIG5vdCByZWNvZ25pemVkIGJ5IHF1ZXJ5U2VsZWN0b3JBbGwuXG5cdFx0XHRcdC8vIFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGlzIHRlY2huaXF1ZS5cblx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdCggcmRlc2NlbmQudGVzdCggc2VsZWN0b3IgKSB8fCByY29tYmluYXRvcnMudGVzdCggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzXG5cdFx0XHRcdFx0bmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gV2UgY2FuIHVzZSA6c2NvcGUgaW5zdGVhZCBvZiB0aGUgSUQgaGFjayBpZiB0aGUgYnJvd3NlclxuXHRcdFx0XHRcdC8vIHN1cHBvcnRzIGl0ICYgaWYgd2UncmUgbm90IGNoYW5naW5nIHRoZSBjb250ZXh0LlxuXHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAhPT0gY29udGV4dCB8fCAhc3VwcG9ydC5zY29wZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRcdGlmICggKCBuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkgKSApIHtcblx0XHRcdFx0XHRcdFx0bmlkID0gbmlkLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQuc2V0QXR0cmlidXRlKCBcImlkXCIsICggbmlkID0gZXhwYW5kbyApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XG5cdFx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRncm91cHNbIGkgXSA9ICggbmlkID8gXCIjXCIgKyBuaWQgOiBcIjpzY29wZVwiICkgKyBcIiBcIiArXG5cdFx0XHRcdFx0XHRcdHRvU2VsZWN0b3IoIGdyb3Vwc1sgaSBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsXG5cdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XG5cdFx0XHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHtcblx0XHRcdFx0XHRcdGNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCBcImlkXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBbGwgb3RoZXJzXG5cdHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZVxuICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZywgb2JqZWN0KX0gUmV0dXJucyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYgd2l0aFxuICpcdHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpXG4gKlx0ZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcblx0dmFyIGtleXMgPSBbXTtcblxuXHRmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpXG5cdFx0aWYgKCBrZXlzLnB1c2goIGtleSArIFwiIFwiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkge1xuXG5cdFx0XHQvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXNcblx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07XG5cdFx0fVxuXHRcdHJldHVybiAoIGNhY2hlWyBrZXkgKyBcIiBcIiBdID0gdmFsdWUgKTtcblx0fVxuXHRyZXR1cm4gY2FjaGU7XG59XG5cbi8qKlxuICogTWFyayBhIGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBTaXp6bGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrXG4gKi9cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7XG5cdGZuWyBleHBhbmRvIF0gPSB0cnVlO1xuXHRyZXR1cm4gZm47XG59XG5cbi8qKlxuICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBlbGVtZW50IGFuZCByZXR1cm5zIGEgYm9vbGVhbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0KCBmbiApIHtcblx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICk7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGZpbmFsbHkge1xuXG5cdFx0Ly8gUmVtb3ZlIGZyb20gaXRzIHBhcmVudCBieSBkZWZhdWx0XG5cdFx0aWYgKCBlbC5wYXJlbnROb2RlICkge1xuXHRcdFx0ZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWwgKTtcblx0XHR9XG5cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGVsID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZFxuICovXG5mdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkge1xuXHR2YXIgYXJyID0gYXR0cnMuc3BsaXQoIFwifFwiICksXG5cdFx0aSA9IGFyci5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0RXhwci5hdHRySGFuZGxlWyBhcnJbIGkgXSBdID0gaGFuZGxlcjtcblx0fVxufVxuXG4vKipcbiAqIENoZWNrcyBkb2N1bWVudCBvcmRlciBvZiB0d28gc2libGluZ3NcbiAqIEBwYXJhbSB7RWxlbWVudH0gYVxuICogQHBhcmFtIHtFbGVtZW50fSBiXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBSZXR1cm5zIGxlc3MgdGhhbiAwIGlmIGEgcHJlY2VkZXMgYiwgZ3JlYXRlciB0aGFuIDAgaWYgYSBmb2xsb3dzIGJcbiAqL1xuZnVuY3Rpb24gc2libGluZ0NoZWNrKCBhLCBiICkge1xuXHR2YXIgY3VyID0gYiAmJiBhLFxuXHRcdGRpZmYgPSBjdXIgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiBiLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRhLnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDtcblxuXHQvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXNcblx0aWYgKCBkaWZmICkge1xuXHRcdHJldHVybiBkaWZmO1xuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgYiBmb2xsb3dzIGFcblx0aWYgKCBjdXIgKSB7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGN1ci5uZXh0U2libGluZyApICkge1xuXHRcdFx0aWYgKCBjdXIgPT09IGIgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYSA/IDEgOiAtMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuICggbmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCIgKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciA6ZW5hYmxlZC86ZGlzYWJsZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZGlzYWJsZWQgdHJ1ZSBmb3IgOmRpc2FibGVkOyBmYWxzZSBmb3IgOmVuYWJsZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGRpc2FibGVkICkge1xuXG5cdC8vIEtub3duIDpkaXNhYmxlZCBmYWxzZSBwb3NpdGl2ZXM6IGZpZWxkc2V0W2Rpc2FibGVkXSA+IGxlZ2VuZDpudGgtb2YtdHlwZShuKzIpIDpjYW4tZGlzYWJsZVxuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBPbmx5IGNlcnRhaW4gZWxlbWVudHMgY2FuIG1hdGNoIDplbmFibGVkIG9yIDpkaXNhYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWVuYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1kaXNhYmxlZFxuXHRcdGlmICggXCJmb3JtXCIgaW4gZWxlbSApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGluaGVyaXRlZCBkaXNhYmxlZG5lc3Mgb24gcmVsZXZhbnQgbm9uLWRpc2FibGVkIGVsZW1lbnRzOlxuXHRcdFx0Ly8gKiBsaXN0ZWQgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgZmllbGRzZXRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjYXRlZ29yeS1saXN0ZWRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LWZlLWRpc2FibGVkXG5cdFx0XHQvLyAqIG9wdGlvbiBlbGVtZW50cyBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1vcHRpb24tZGlzYWJsZWRcblx0XHRcdC8vIEFsbCBzdWNoIGVsZW1lbnRzIGhhdmUgYSBcImZvcm1cIiBwcm9wZXJ0eS5cblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICYmIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdC8vIE9wdGlvbiBlbGVtZW50cyBkZWZlciB0byBhIHBhcmVudCBvcHRncm91cCBpZiBwcmVzZW50XG5cdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0ucGFyZW50Tm9kZS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gMTFcblx0XHRcdFx0Ly8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0IHByb3BlcnR5IHRvIGNoZWNrIGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnNcblx0XHRcdFx0cmV0dXJuIGVsZW0uaXNEaXNhYmxlZCA9PT0gZGlzYWJsZWQgfHxcblxuXHRcdFx0XHRcdC8vIFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1hbnVhbGx5XG5cdFx0XHRcdFx0LyoganNoaW50IC1XMDE4ICovXG5cdFx0XHRcdFx0ZWxlbS5pc0Rpc2FibGVkICE9PSAhZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRpbkRpc2FibGVkRmllbGRzZXQoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGFyZ3VtZW50ICkge1xuXHRcdGFyZ3VtZW50ID0gK2FyZ3VtZW50O1xuXHRcdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0dmFyIGosXG5cdFx0XHRcdG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksXG5cdFx0XHRcdGkgPSBtYXRjaEluZGV4ZXMubGVuZ3RoO1xuXG5cdFx0XHQvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXNcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIHNlZWRbICggaiA9IG1hdGNoSW5kZXhlc1sgaSBdICkgXSApIHtcblx0XHRcdFx0XHRzZWVkWyBqIF0gPSAhKCBtYXRjaGVzWyBqIF0gPSBzZWVkWyBqIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSApO1xufVxuXG4vKipcbiAqIENoZWNrcyBhIG5vZGUgZm9yIHZhbGlkaXR5IGFzIGEgU2l6emxlIGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3Q9fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdGVzdENvbnRleHQoIGNvbnRleHQgKSB7XG5cdHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnRleHQ7XG59XG5cbi8vIEV4cG9zZSBzdXBwb3J0IHZhcnMgZm9yIGNvbnZlbmllbmNlXG5zdXBwb3J0ID0gU2l6emxlLnN1cHBvcnQgPSB7fTtcblxuLyoqXG4gKiBEZXRlY3RzIFhNTCBub2Rlc1xuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gZWxlbSBBbiBlbGVtZW50IG9yIGEgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmZiBlbGVtIGlzIGEgbm9uLUhUTUwgWE1MIG5vZGVcbiAqL1xuaXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0dmFyIG5hbWVzcGFjZSA9IGVsZW0gJiYgZWxlbS5uYW1lc3BhY2VVUkksXG5cdFx0ZG9jRWxlbSA9IGVsZW0gJiYgKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApLmRvY3VtZW50RWxlbWVudDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PThcblx0Ly8gQXNzdW1lIEhUTUwgd2hlbiBkb2N1bWVudEVsZW1lbnQgZG9lc24ndCB5ZXQgZXhpc3QsIHN1Y2ggYXMgaW5zaWRlIGxvYWRpbmcgaWZyYW1lc1xuXHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvNDgzM1xuXHRyZXR1cm4gIXJodG1sLnRlc3QoIG5hbWVzcGFjZSB8fCBkb2NFbGVtICYmIGRvY0VsZW0ubm9kZU5hbWUgfHwgXCJIVE1MXCIgKTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIGRvYyA9PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIHByZWZlcnJlZERvYyAhPSBkb2N1bWVudCAmJlxuXHRcdCggc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgKSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZVxuXHRcdGlmICggc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5XG5cdFx0fSBlbHNlIGlmICggc3ViV2luZG93LmF0dGFjaEV2ZW50ICkge1xuXHRcdFx0c3ViV2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBDaHJvbWUgPD0xNiAtIDI1IG9ubHksIEZpcmVmb3ggPD0zLjYgLSAzMSBvbmx5LFxuXHQvLyBTYWZhcmkgNCAtIDUgb25seSwgT3BlcmEgPD0xMS42IC0gMTIueCBvbmx5XG5cdC8vIElFL0VkZ2UgJiBvbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSA6c2NvcGUgcHNldWRvLWNsYXNzLlxuXHQvLyBTdXBwb3J0OiBTYWZhcmkgNi4wIG9ubHlcblx0Ly8gU2FmYXJpIDYuMCBzdXBwb3J0cyA6c2NvcGUgYnV0IGl0J3MgYW4gYWxpYXMgb2YgOnJvb3QgdGhlcmUuXG5cdHN1cHBvcnQuc2NvcGUgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblx0XHRyZXR1cm4gdHlwZW9mIGVsLnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdCFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpzY29wZSBmaWVsZHNldCBkaXZcIiApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWVsLmdldEF0dHJpYnV0ZSggXCJjbGFzc05hbWVcIiApO1xuXHR9ICk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIFwiXCIgKSApO1xuXHRcdHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwiKlwiICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8OVxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlkID0gZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIElEIGZpbHRlciBhbmQgZmluZFxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbHRlclsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcImlkXCIgKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZFsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyWyBcIklEXCIgXSA9ICBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRFeHByLmZpbmRbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1zWyBpKysgXSApICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmRbIFwiVEFHXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kWyBcIkNMQVNTXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoIHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkgKSApIHtcblxuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHRcdFx0dmFyIGlucHV0O1xuXG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXG5cdFx0XHQvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHlcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXG5cdFx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxuXHRcdFx0Ly8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPVxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXG5cdFx0XHQvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbKl4kXT1cIiArIHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW3NlbGVjdGVkXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIn49XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0XHQvLyBJRSAxMS9FZGdlIGRvbid0IGZpbmQgZWxlbWVudHMgb24gYSBgW25hbWU9JyddYCBxdWVyeSBpbiBzb21lIGNhc2VzLlxuXHRcdFx0Ly8gQWRkaW5nIGEgdGVtcG9yYXJ5IGF0dHJpYnV0ZSB0byB0aGUgZG9jdW1lbnQgYmVmb3JlIHRoZSBzZWxlY3Rpb24gd29ya3Ncblx0XHRcdC8vIGFyb3VuZCB0aGUgaXNzdWUuXG5cdFx0XHQvLyBJbnRlcmVzdGluZ2x5LCBJRSAxMCAmIG9sZGVyIGRvbid0IHNlZW0gdG8gaGF2ZSB0aGUgaXNzdWUuXG5cdFx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJcIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIio9XCIgK1xuXHRcdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpjaGVja2VkXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjpjaGVja2VkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIi4jLitbK35dXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTMuNiAtIDUgb25seVxuXHRcdFx0Ly8gT2xkIEZpcmVmb3ggZG9lc24ndCB0aHJvdyBvbiBhIGJhZGx5LWVzY2FwZWQgaWRlbnRpZmllci5cblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiXFxcXFxcZlwiICk7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbXFxcXHJcXFxcblxcXFxmXVwiICk7XG5cdFx0fSApO1xuXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRcdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbmFtZT1kXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjplbmFibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdFx0Ly8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9lcyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzXG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCI6ZGlzYWJsZWRcIiApLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBPcGVyYSAxMCAtIDExIG9ubHlcblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIiosOnhcIiApO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiLC4qOlwiICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAoIG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvciApICkgKSApIHtcblxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBlbCwgXCIqXCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBlbCwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKCBcInxcIiApICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oIFwifFwiICkgKTtcblxuXHQvKiBDb250YWluc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cdGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTtcblxuXHQvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXJcblx0Ly8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5cdGNvbnRhaW5zID0gaGFzQ29tcGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxuXHRcdFx0XHRidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XG5cdFx0XHRcdFx0YWRvd24uY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0XHRcdCkgKTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdGlmICggYiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGIgPSBiLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoICFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUgKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBhID09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0Y29udGFpbnMoIHByZWZlcnJlZERvYywgYSApICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGIgPT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRjb250YWlucyggcHJlZmVycmVkRG9jLCBiICkgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH0gOlxuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0YXVwID0gYS5wYXJlbnROb2RlLFxuXHRcdFx0YnVwID0gYi5wYXJlbnROb2RlLFxuXHRcdFx0YXAgPSBbIGEgXSxcblx0XHRcdGJwID0gWyBiIF07XG5cblx0XHQvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZFxuXHRcdGlmICggIWF1cCB8fCAhYnVwICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRyZXR1cm4gYSA9PSBkb2N1bWVudCA/IC0xIDpcblx0XHRcdFx0YiA9PSBkb2N1bWVudCA/IDEgOlxuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0XHRhdXAgPyAtMSA6XG5cdFx0XHRcdGJ1cCA/IDEgOlxuXHRcdFx0XHRzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cblx0XHQvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVja1xuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xuXHRcdFx0cmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uXG5cdFx0Y3VyID0gYTtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwWyBpIF0gPT09IGJwWyBpIF0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbIGkgXSwgYnBbIGkgXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRhcFsgaSBdID09IHByZWZlcnJlZERvYyA/IC0xIDpcblx0XHRcdGJwWyBpIF0gPT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblxuXHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBleHByLCB0cnVlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cdHJldHVybiBjb250YWlucyggY29udGV4dCwgZWxlbSApO1xufTtcblxuU2l6emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cblx0XHQvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNylcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOlxuXHRcdFx0dW5kZWZpbmVkO1xuXG5cdHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/XG5cdFx0dmFsIDpcblx0XHRzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWRvY3VtZW50SXNIVE1MID9cblx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgOlxuXHRcdFx0KCB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoIHNlbCArIFwiXCIgKS5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG59O1xuXG5TaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkge1xuXHR0aHJvdyBuZXcgRXJyb3IoIFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBtc2cgKTtcbn07XG5cbi8qKlxuICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlc1xuICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHNcbiAqL1xuU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHtcblx0dmFyIGVsZW0sXG5cdFx0ZHVwbGljYXRlcyA9IFtdLFxuXHRcdGogPSAwLFxuXHRcdGkgPSAwO1xuXG5cdC8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2Vcblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcztcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiByZXN1bHRzLnNsaWNlKCAwICk7XG5cdHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7XG5cblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXG5cdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcblx0XHR3aGlsZSAoICggbm9kZSA9IGVsZW1bIGkrKyBdICkgKSB7XG5cblx0XHRcdC8vIERvIG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzXG5cdFx0XHRyZXQgKz0gZ2V0VGV4dCggbm9kZSApO1xuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDExICkge1xuXG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblxuXHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcblxuXHRyZXR1cm4gcmV0O1xufTtcblxuRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7XG5cblx0Ly8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyXG5cdGNhY2hlTGVuZ3RoOiA1MCxcblxuXHRjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcblxuXHRtYXRjaDogbWF0Y2hFeHByLFxuXG5cdGF0dHJIYW5kbGU6IHt9LFxuXG5cdGZpbmQ6IHt9LFxuXG5cdHJlbGF0aXZlOiB7XG5cdFx0XCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sXG5cdFx0XCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9XG5cdH0sXG5cblx0cHJlRmlsdGVyOiB7XG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFsgMyBdID0gKCBtYXRjaFsgMyBdIHx8IG1hdGNoWyA0IF0gfHxcblx0XHRcdFx0bWF0Y2hbIDUgXSB8fCBcIlwiICkucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMiBdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWyAzIF0gPSBcIiBcIiArIG1hdGNoWyAzIF0gKyBcIiBcIjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMSBdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWyA0IF0gPSArKCBtYXRjaFsgNCBdID9cblx0XHRcdFx0XHRtYXRjaFsgNSBdICsgKCBtYXRjaFsgNiBdIHx8IDEgKSA6XG5cdFx0XHRcdFx0MiAqICggbWF0Y2hbIDMgXSA9PT0gXCJldmVuXCIgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApICk7XG5cdFx0XHRcdG1hdGNoWyA1IF0gPSArKCAoIG1hdGNoWyA3IF0gKyBtYXRjaFsgOCBdICkgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbIDYgXSAmJiBtYXRjaFsgMiBdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwclsgXCJDSElMRFwiIF0udGVzdCggbWF0Y2hbIDAgXSApICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXNcblx0XHRcdGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IG1hdGNoWyA0IF0gfHwgbWF0Y2hbIDUgXSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KCBleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSApICYmXG5cblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdCggZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggXCIpXCIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoICkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0xBU1NcIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcblxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcblx0XHRcdFx0KCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XHRcdFwiKVwiICsgY2xhc3NOYW1lICsgXCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApICkgJiYgY2xhc3NDYWNoZShcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXR0ZXJuLnRlc3QoXG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHxcblx0XHRcdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gKTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG5cdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBfYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkge1xuXHRcdFx0dmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gXCJudGhcIixcblx0XHRcdFx0Zm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09IFwibGFzdFwiLFxuXHRcdFx0XHRvZlR5cGUgPSB3aGF0ID09PSBcIm9mLXR5cGVcIjtcblxuXHRcdFx0cmV0dXJuIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgP1xuXG5cdFx0XHRcdC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobilcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IDpcblxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gbm9kZVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXggJiYgY2FjaGVbIDIgXTtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07XG5cblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB4bWwgOm50aC1jaGlsZCguLi4pXG5cdFx0XHRcdFx0XHRcdC8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLilcblx0XHRcdFx0XHRcdFx0aWYgKCBkaWZmID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQrK2RpZmYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRcIm5vdFwiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblxuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cdFx0XHQvLyBzcGFjZXMgYXMgY29tYmluYXRvcnNcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxuXHRcdFx0XHRyZXN1bHRzID0gW10sXG5cdFx0XHRcdG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICkgKTtcblxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XG5cdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGkgXSA9ICEoIG1hdGNoZXNbIGkgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblxuXHRcdFx0XHRcdC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiaGFzXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0udGV4dENvbnRlbnQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cblx0XHRcdC8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QoIGxhbmcgfHwgXCJcIiApICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJ4bWw6bGFuZ1wiICkgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoIFwibGFuZ1wiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoICggZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSApICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJlxuXHRcdFx0XHQoICFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpICkgJiZcblx0XHRcdFx0ISEoIGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXggKTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0XCJlbmFibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCBmYWxzZSApLFxuXHRcdFwiZGlzYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIHRydWUgKSxcblxuXHRcdFwiY2hlY2tlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiAhIWVsZW0uY2hlY2tlZCApIHx8XG5cdFx0XHRcdCggbm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkICk7XG5cdFx0fSxcblxuXHRcdFwic2VsZWN0ZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdFwicGFyZW50XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICFFeHByLnBzZXVkb3NbIFwiZW1wdHlcIiBdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKCBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgKSA9PSBudWxsIHx8XG5cdFx0XHRcdFx0YXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBbIDAgXTtcblx0XHR9ICksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9ICksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xuXHRcdH0gKSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJvZGRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID9cblx0XHRcdFx0YXJndW1lbnQgKyBsZW5ndGggOlxuXHRcdFx0XHRhcmd1bWVudCA+IGxlbmd0aCA/XG5cdFx0XHRcdFx0bGVuZ3RoIDpcblx0XHRcdFx0XHRhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKVxuXHR9XG59O1xuXG5FeHByLnBzZXVkb3NbIFwibnRoXCIgXSA9IEV4cHIucHNldWRvc1sgXCJlcVwiIF07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8ICggbWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFsgMCBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICggdG9rZW5zID0gW10gKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAoIG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWyAwIF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0gKTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoICggbWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApICkgJiYgKCAhcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdCggbWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkgKSApICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0XHR0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTtcbn07XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbIGkgXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZ1xuXHRcdFx0aWYgKCB4bWwgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoIGVsZW1bIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoICggb2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsga2V5IF0gKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoIG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKCBuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1sgaSBdKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWyAwIF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0U2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbIGkgXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkge1xuXHRcdHZhciB0ZW1wLCBpLCBlbGVtLFxuXHRcdFx0cHJlTWFwID0gW10sXG5cdFx0XHRwb3N0TWFwID0gW10sXG5cdFx0XHRwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dFxuXHRcdFx0ZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoXG5cdFx0XHRcdHNlbGVjdG9yIHx8IFwiKlwiLFxuXHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LFxuXHRcdFx0XHRbXVxuXHRcdFx0KSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXG5cdFx0XHRcdHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID9cblxuXHRcdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFtdIDpcblxuXHRcdFx0XHRcdC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseVxuXHRcdFx0XHRcdHJlc3VsdHMgOlxuXHRcdFx0XHRtYXRjaGVySW47XG5cblx0XHQvLyBGaW5kIHByaW1hcnkgbWF0Y2hlc1xuXHRcdGlmICggbWF0Y2hlciApIHtcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoIGVsZW0gPSB0ZW1wWyBpIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwWyBpIF0gXSA9ICEoIG1hdGNoZXJJblsgcG9zdE1hcFsgaSBdIF0gPSBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goICggbWF0Y2hlckluWyBpIF0gPSBlbGVtICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKCBtYXRjaGVyT3V0ID0gW10gKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgJiZcblx0XHRcdFx0XHRcdCggdGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbIGkgXSApID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbIHRlbXAgXSA9ICEoIHJlc3VsdHNbIHRlbXAgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7XG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDAgXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyBcIiBcIiBdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoIGNoZWNrQ29udGV4dCA9IGNvbnRleHQgKS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggbWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaSBdLnR5cGUgXSApICkge1xuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbIGkgXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1sgaSBdLm1hdGNoZXMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaiBdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHR0b2tlbnNcblx0XHRcdFx0XHRcdC5zbGljZSggMCwgaSAtIDEgKVxuXHRcdFx0XHRcdFx0LmNvbmNhdCggeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0gKVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKCB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsgXCJUQUdcIiBdKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9ICggZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEgKSxcblx0XHRcdFx0bGVuID0gZWxlbXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0XHRpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPSBkb2N1bWVudCApIHtcblx0XHRcdFx0XHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0IHx8IGRvY3VtZW50LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblxuXHRcdFx0XHRcdC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnNcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0gKSApIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3Rcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLlxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0Ly8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXG5cdFx0XHQvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLlxuXHRcdFx0Ly8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgXCIwXCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdFxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXG5cdFx0XHQvLyBudW1lcmljYWxseSB6ZXJvLlxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XG5cdFx0XHRcdGogPSAwO1xuXHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IHNldE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkQ291bnQgPiAwICkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISggdW5tYXRjaGVkWyBpIF0gfHwgc2V0TWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0TWF0Y2hlZFsgaSBdID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbIGkgXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZShcblx0XHRcdHNlbGVjdG9yLFxuXHRcdFx0bWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzIClcblx0XHQpO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn07XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoIHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IgKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwICk7XG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAoIHRva2VuID0gdG9rZW5zWyAwIF0gKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYgRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAxIF0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbIFwiSURcIiBdKCB0b2tlbi5tYXRjaGVzWyAwIF1cblx0XHRcdFx0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksIGNvbnRleHQgKSB8fCBbXSApWyAwIF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByWyBcIm5lZWRzQ29udGV4dFwiIF0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG9rZW4gPSB0b2tlbnNbIGkgXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAoIHR5cGUgPSB0b2tlbi50eXBlICkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICggZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdICkgKSB7XG5cblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKCBzZWVkID0gZmluZChcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbIDAgXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdCkgKSApIHtcblxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXG5cdFx0c2VlZCxcblx0XHRjb250ZXh0LFxuXHRcdCFkb2N1bWVudElzSFRNTCxcblx0XHRyZXN1bHRzLFxuXHRcdCFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0KTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBPbmUtdGltZSBhc3NpZ25tZW50c1xuXG4vLyBTb3J0IHN0YWJpbGl0eVxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdCggXCJcIiApLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oIFwiXCIgKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKSApICYgMTtcbn0gKTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJocmVmXCIgKSA9PT0gXCIjXCI7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9ICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGlucHV0Lz5cIjtcblx0ZWwuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiwgXCJcIiApO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBcIlwiO1xufSApICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIF9uYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGdldEF0dHJpYnV0ZU5vZGUgdG8gZmV0Y2ggYm9vbGVhbnMgd2hlbiBnZXRBdHRyaWJ1dGUgbGllc1xuaWYgKCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoIFwiZGlzYWJsZWRcIiApID09IG51bGw7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdCggdmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkgKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRcdG51bGw7XG5cdFx0fVxuXHR9ICk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0gKSggd2luZG93ICk7XG5cblxuXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcbmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9ycztcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7XG5qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0O1xualF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MO1xualF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zO1xualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gU2l6emxlLmVzY2FwZTtcblxuXG5cblxudmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdLFxuXHRcdHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDtcblxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG5cdHZhciBtYXRjaGVkID0gW107XG5cblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcblx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcblx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcblxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG5cdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59XG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW5nbGUgZWxlbWVudFxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywgQXJyYXkpXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9yc1xuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHQvLyBTaG9ydGN1dCBzaW1wbGUgI2lkIGNhc2UgZm9yIHNwZWVkXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBpc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0c2VsZWN0b3IoIGpRdWVyeSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0dGFyZ2V0cyA9IHR5cGVvZiBzZWxlY3RvcnMgIT09IFwic3RyaW5nXCIgJiYgalF1ZXJ5KCBzZWxlY3RvcnMgKTtcblxuXHRcdC8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRleHRcblx0XHRpZiAoICFybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXG5cdFx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRhcmdldHMgP1xuXHRcdFx0XHRcdFx0dGFyZ2V0cy5pbmRleCggY3VyICkgPiAtMSA6XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRpZiAoIGVsZW0uY29udGVudERvY3VtZW50ICE9IG51bGwgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErXG5cdFx0XHQvLyA8b2JqZWN0PiBlbGVtZW50cyB3aXRoIG5vIGBkYXRhYCBhdHRyaWJ1dGUgaGFzIGFuIG9iamVjdFxuXHRcdFx0Ly8gYGNvbnRlbnREb2N1bWVudGAgd2l0aCBhIGBudWxsYCBwcm90b3R5cGUuXG5cdFx0XHRnZXRQcm90byggZWxlbS5jb250ZW50RG9jdW1lbnQgKSApIHtcblxuXHRcdFx0cmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50O1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5LCBpT1MgNyBvbmx5LCBBbmRyb2lkIEJyb3dzZXIgPD00LjMgb25seVxuXHRcdC8vIFRyZWF0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGFzIGEgcmVndWxhciBvbmUgaW4gYnJvd3NlcnMgdGhhdFxuXHRcdC8vIGRvbid0IHN1cHBvcnQgaXQuXG5cdFx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0ZW1wbGF0ZVwiICkgKSB7XG5cdFx0XHRlbGVtID0gZWxlbS5jb250ZW50IHx8IGVsZW07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApO1xuXHR9XG59LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcblx0XHR2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApO1xuXG5cdFx0aWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSBcIlVudGlsXCIgKSB7XG5cdFx0XHRzZWxlY3RvciA9IHVudGlsO1xuXHRcdH1cblxuXHRcdGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0bWF0Y2hlZCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBtYXRjaGVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBkdXBsaWNhdGVzXG5cdFx0XHRpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzXG5cdFx0XHRpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQucmV2ZXJzZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApO1xuXHR9O1xufSApO1xudmFyIHJub3RodG1sd2hpdGUgPSAoIC9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZyApO1xuXG5cblxuLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXNcbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7XG5cdHZhciBvYmplY3QgPSB7fTtcblx0alF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7XG5cdFx0b2JqZWN0WyBmbGFnIF0gPSB0cnVlO1xuXHR9ICk7XG5cdHJldHVybiBvYmplY3Q7XG59XG5cbi8qXG4gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKlx0b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvd1xuICpcdFx0XHR0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0XG4gKlxuICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmVcbiAqIFwiZmlyZWRcIiBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBQb3NzaWJsZSBvcHRpb25zOlxuICpcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0bWVtb3J5Olx0XHRcdHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWRcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcbiAqXHRcdFx0XHRcdHZhbHVlcyAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXG4gKlxuICpcdHN0b3BPbkZhbHNlOlx0aW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlXG4gKlxuICovXG5qUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0Ly8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZFxuXHQvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0Y3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIDpcblx0XHRqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApO1xuXG5cdHZhciAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nXG5cdFx0ZmlyaW5nLFxuXG5cdFx0Ly8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHNcblx0XHRtZW1vcnksXG5cblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZFxuXHRcdGZpcmVkLFxuXG5cdFx0Ly8gRmxhZyB0byBwcmV2ZW50IGZpcmluZ1xuXHRcdGxvY2tlZCxcblxuXHRcdC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0XG5cdFx0bGlzdCA9IFtdLFxuXG5cdFx0Ly8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHNcblx0XHRxdWV1ZSA9IFtdLFxuXG5cdFx0Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgYWRkL3JlbW92ZSBhcyBuZWVkZWQpXG5cdFx0ZmlyaW5nSW5kZXggPSAtMSxcblxuXHRcdC8vIEZpcmUgY2FsbGJhY2tzXG5cdFx0ZmlyZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbmZvcmNlIHNpbmdsZS1maXJpbmdcblx0XHRcdGxvY2tlZCA9IGxvY2tlZCB8fCBvcHRpb25zLm9uY2U7XG5cblx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLFxuXHRcdFx0Ly8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlc1xuXHRcdFx0ZmlyZWQgPSBmaXJpbmcgPSB0cnVlO1xuXHRcdFx0Zm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRcdHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb25cblx0XHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJlxuXHRcdFx0XHRcdFx0b3B0aW9ucy5zdG9wT25GYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZVxuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0XG5cdFx0XHRpZiAoICFvcHRpb25zLm1lbW9yeSApIHtcblx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGZpcmluZyA9IGZhbHNlO1xuXG5cdFx0XHQvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZFxuXHRcdFx0aWYgKCBsb2NrZWQgKSB7XG5cblx0XHRcdFx0Ly8gS2VlcCBhbiBlbXB0eSBsaXN0IGlmIHdlIGhhdmUgZGF0YSBmb3IgZnV0dXJlIGFkZCBjYWxsc1xuXHRcdFx0XHRpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxpc3QgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0XG5cdFx0c2VsZiA9IHtcblxuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmdcblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBtZW1vcnkgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQoIGZ1bmN0aW9uIGFkZCggYXJncyApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdG9UeXBlKCBhcmcgKSAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0fSApKCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHR2YXIgaW5kZXg7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xuXHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4gZm4gP1xuXHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOlxuXHRcdFx0XHRcdGxpc3QubGVuZ3RoID4gMDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3Rcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmUgYW5kIC5hZGRcblx0XHRcdC8vIEFib3J0IGFueSBjdXJyZW50L3BlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0Ly8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzXG5cdFx0XHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFsaXN0O1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZVxuXHRcdFx0Ly8gQWxzbyBkaXNhYmxlIC5hZGQgdW5sZXNzIHdlIGhhdmUgbWVtb3J5IChzaW5jZSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdClcblx0XHRcdC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdGxvY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRsb2NrZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFsb2NrZWQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XG5cdFx0XHRcdGlmICggIWxvY2tlZCApIHtcblx0XHRcdFx0XHRhcmdzID0gYXJncyB8fCBbXTtcblx0XHRcdFx0XHRhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdO1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGFyZ3MgKTtcblx0XHRcdFx0XHRpZiAoICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcblx0XHRcdGZpcmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2Vcblx0XHRcdGZpcmVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRyZXR1cm4gc2VsZjtcbn07XG5cblxuZnVuY3Rpb24gSWRlbnRpdHkoIHYgKSB7XG5cdHJldHVybiB2O1xufVxuZnVuY3Rpb24gVGhyb3dlciggZXggKSB7XG5cdHRocm93IGV4O1xufVxuXG5mdW5jdGlvbiBhZG9wdFZhbHVlKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0LCBub1ZhbHVlICkge1xuXHR2YXIgbWV0aG9kO1xuXG5cdHRyeSB7XG5cblx0XHQvLyBDaGVjayBmb3IgcHJvbWlzZSBhc3BlY3QgZmlyc3QgdG8gcHJpdmlsZWdlIHN5bmNocm9ub3VzIGJlaGF2aW9yXG5cdFx0aWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnByb21pc2UgKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlICkuZG9uZSggcmVzb2x2ZSApLmZhaWwoIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgdGhlbmFibGVzXG5cdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS50aGVuICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciBub24tdGhlbmFibGVzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29udHJvbCBgcmVzb2x2ZWAgYXJndW1lbnRzIGJ5IGxldHRpbmcgQXJyYXkjc2xpY2UgY2FzdCBib29sZWFuIGBub1ZhbHVlYCB0byBpbnRlZ2VyOlxuXHRcdFx0Ly8gKiBmYWxzZTogWyB2YWx1ZSBdLnNsaWNlKCAwICkgPT4gcmVzb2x2ZSggdmFsdWUgKVxuXHRcdFx0Ly8gKiB0cnVlOiBbIHZhbHVlIF0uc2xpY2UoIDEgKSA9PiByZXNvbHZlKClcblx0XHRcdHJlc29sdmUuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdLnNsaWNlKCBub1ZhbHVlICkgKTtcblx0XHR9XG5cblx0Ly8gRm9yIFByb21pc2VzL0ErLCBjb252ZXJ0IGV4Y2VwdGlvbnMgaW50byByZWplY3Rpb25zXG5cdC8vIFNpbmNlIGpRdWVyeS53aGVuIGRvZXNuJ3QgdW53cmFwIHRoZW5hYmxlcywgd2UgY2FuIHNraXAgdGhlIGV4dHJhIGNoZWNrcyBhcHBlYXJpbmcgaW5cblx0Ly8gRGVmZXJyZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVjdGlvbi5cblx0fSBjYXRjaCAoIHZhbHVlICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seVxuXHRcdC8vIFN0cmljdCBtb2RlIGZ1bmN0aW9ucyBpbnZva2VkIHdpdGhvdXQgLmNhbGwvLmFwcGx5IGdldCBnbG9iYWwtb2JqZWN0IGNvbnRleHRcblx0XHRyZWplY3QuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdICk7XG5cdH1cbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHtcblx0XHR2YXIgdHVwbGVzID0gW1xuXG5cdFx0XHRcdC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBjYWxsYmFja3MsXG5cdFx0XHRcdC8vIC4uLiAudGhlbiBoYW5kbGVycywgYXJndW1lbnQgaW5kZXgsIFtmaW5hbCBzdGF0ZV1cblx0XHRcdFx0WyBcIm5vdGlmeVwiLCBcInByb2dyZXNzXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksIDIgXSxcblx0XHRcdFx0WyBcInJlc29sdmVcIiwgXCJkb25lXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAwLCBcInJlc29sdmVkXCIgXSxcblx0XHRcdFx0WyBcInJlamVjdFwiLCBcImZhaWxcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDEsIFwicmVqZWN0ZWRcIiBdXG5cdFx0XHRdLFxuXHRcdFx0c3RhdGUgPSBcInBlbmRpbmdcIixcblx0XHRcdHByb21pc2UgPSB7XG5cdFx0XHRcdHN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFsd2F5czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiY2F0Y2hcIjogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRcdHJldHVybiBwcm9taXNlLnRoZW4oIG51bGwsIGZuICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRwaXBlOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7XG5cdFx0XHRcdFx0dmFyIGZucyA9IGFyZ3VtZW50cztcblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBfaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIGUgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01N1xuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNlIHJlamVjdGlvbiBmcm9tXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIHByaW1hcnkgRGVmZXJyZWRcblx0XHRcdHByaW1hcnkgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgY2FsbGJhY2sgZmFjdG9yeVxuXHRcdFx0dXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJlc29sdmVDb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7XG5cdFx0XHRcdFx0aWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0cHJpbWFyeS5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgcHJpbWFyeS5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBwcmltYXJ5LnJlamVjdCxcblx0XHRcdFx0IXJlbWFpbmluZyApO1xuXG5cdFx0XHQvLyBVc2UgLnRoZW4oKSB0byB1bndyYXAgc2Vjb25kYXJ5IHRoZW5hYmxlcyAoY2YuIGdoLTMwMDApXG5cdFx0XHRpZiAoIHByaW1hcnkuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHByaW1hcnkudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgcHJpbWFyeS5yZWplY3QgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJpbWFyeS5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5XG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXG5cdGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7XG5cdFx0d2luZG93LmNvbnNvbGUud2FybiggXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApO1xuXHR9XG59O1xuXG5cblxuXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHR0aHJvdyBlcnJvcjtcblx0fSApO1xufTtcblxuXG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHRyZWFkeUxpc3Rcblx0XHQudGhlbiggZm4gKVxuXG5cdFx0Ly8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXBcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcblx0XHQvLyByZWdpc3RyYXRpb24uXG5cdFx0LmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XG5cdFx0fSApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIF9rZXksIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0ZWxlbXNbIGkgXSwga2V5LCByYXcgP1xuXHRcdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdFx0dmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIGNoYWluYWJsZSApIHtcblx0XHRyZXR1cm4gZWxlbXM7XG5cdH1cblxuXHQvLyBHZXRzXG5cdGlmICggYnVsayApIHtcblx0XHRyZXR1cm4gZm4uY2FsbCggZWxlbXMgKTtcblx0fVxuXG5cdHJldHVybiBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDtcbn07XG5cblxuLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG52YXIgcm1zUHJlZml4ID0gL14tbXMtLyxcblx0cmRhc2hBbHBoYSA9IC8tKFthLXpdKS9nO1xuXG4vLyBVc2VkIGJ5IGNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcbmZ1bmN0aW9uIGZjYW1lbENhc2UoIF9hbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gZWxlbS5ub2RlVHlwZSAmJlxuXHRcdFx0KCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0Ly8gSUUgPD05IHJlcGxhY2VzIDxvcHRpb24+IHRhZ3Mgd2l0aCB0aGVpciBjb250ZW50cyB3aGVuIGluc2VydGVkIG91dHNpZGUgb2Zcblx0Ly8gdGhlIHNlbGVjdCBlbGVtZW50LlxuXHRkaXYuaW5uZXJIVE1MID0gXCI8b3B0aW9uPjwvb3B0aW9uPlwiO1xuXHRzdXBwb3J0Lm9wdGlvbiA9ICEhZGl2Lmxhc3RDaGlsZDtcbn0gKSgpO1xuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbmlmICggIXN1cHBvcnQub3B0aW9uICkge1xuXHR3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb24gPSBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF07XG59XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICgjMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgYXR0YWNoZWQsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICgjMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGF0dGFjaGVkID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBhdHRhY2hlZCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxudmFyIHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuLy8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXMsIGV4Y2VwdCB3aGVuIHRoZXkgYXJlIG5vLW9wLlxuLy8gU28gZXhwZWN0IGZvY3VzIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBhY3RpdmUsXG4vLyBhbmQgYmx1ciB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhbHJlYWR5IGFjdGl2ZS5cbi8vIChmb2N1cyBhbmQgYmx1ciBhcmUgYWx3YXlzIHN5bmNocm9ub3VzIGluIG90aGVyIHN1cHBvcnRlZCBicm93c2Vycyxcbi8vIHRoaXMganVzdCBkZWZpbmVzIHdoZW4gd2UgY2FuIGNvdW50IG9uIGl0KS5cbmZ1bmN0aW9uIGV4cGVjdFN5bmMoIGVsZW0sIHR5cGUgKSB7XG5cdHJldHVybiAoIGVsZW0gPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgKSA9PT0gKCB0eXBlID09PSBcImZvY3VzXCIgKTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIEFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGNhbiB0aHJvdyB1bmV4cGVjdGVkbHlcbi8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM5M1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBPbmx5IGF0dGFjaCBldmVudHMgdG8gb2JqZWN0cyB0aGF0IGFjY2VwdCBkYXRhXG5cdFx0aWYgKCAhYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZlRXZlbnQgKSB7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblxuXHRcdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICksXG5cblx0XHRcdGhhbmRsZXJzID0gKFxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsIClcblx0XHRcdClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZSBldmVudCBpcyBuYW1lc3BhY2VkLCB0aGVuIGVhY2ggaGFuZGxlciBpcyBvbmx5IGludm9rZWQgaWYgaXQgaXNcblx0XHRcdFx0Ly8gc3BlY2lhbGx5IHVuaXZlcnNhbCBvciBpdHMgbmFtZXNwYWNlcyBhcmUgYSBzdXBlcnNldCBvZiB0aGUgZXZlbnQncy5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBoYW5kbGVPYmoubmFtZXNwYWNlID09PSBmYWxzZSB8fFxuXHRcdFx0XHRcdGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBjdXIuZGlzYWJsZWQgPT09IHRydWUgKSApIHtcblx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMgPSBbXTtcblx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzID0ge307XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0cmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0b3JpZ2luYWxFdmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGNsaWNrOiB7XG5cblx0XHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIGZvciBjaGVja2FibGUgaW5wdXRzXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHQvLyBkYXRhUHJpdi5zZXQoIGVsLCBcImNsaWNrXCIsIC4uLiApXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIsIHJldHVyblRydWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyaW5nIGEgY2xpY2tcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgc3VwcHJlc3MgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzXG5cdFx0XHQvLyBBbHNvIHByZXZlbnQgaXQgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZSBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRcdHJldHVybiByY2hlY2thYmxlVHlwZS50ZXN0KCB0YXJnZXQudHlwZSApICYmXG5cdFx0XHRcdFx0dGFyZ2V0LmNsaWNrICYmIG5vZGVOYW1lKCB0YXJnZXQsIFwiaW5wdXRcIiApICYmXG5cdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0YXJnZXQsIFwiY2xpY2tcIiApIHx8XG5cdFx0XHRcdFx0bm9kZU5hbWUoIHRhcmdldCwgXCJhXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmVmb3JldW5sb2FkOiB7XG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFbnN1cmUgdGhlIHByZXNlbmNlIG9mIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaGFuZGxlcyBtYW51YWxseS10cmlnZ2VyZWRcbi8vIHN5bnRoZXRpYyBldmVudHMgYnkgaW50ZXJydXB0aW5nIHByb2dyZXNzIHVudGlsIHJlaW52b2tlZCBpbiByZXNwb25zZSB0b1xuLy8gKm5hdGl2ZSogZXZlbnRzIHRoYXQgaXQgZmlyZXMgZGlyZWN0bHksIGVuc3VyaW5nIHRoYXQgc3RhdGUgY2hhbmdlcyBoYXZlXG4vLyBhbHJlYWR5IG9jY3VycmVkIGJlZm9yZSBvdGhlciBsaXN0ZW5lcnMgYXJlIGludm9rZWQuXG5mdW5jdGlvbiBsZXZlcmFnZU5hdGl2ZSggZWwsIHR5cGUsIGV4cGVjdFN5bmMgKSB7XG5cblx0Ly8gTWlzc2luZyBleHBlY3RTeW5jIGluZGljYXRlcyBhIHRyaWdnZXIgY2FsbCwgd2hpY2ggbXVzdCBmb3JjZSBzZXR1cCB0aHJvdWdoIGpRdWVyeS5ldmVudC5hZGRcblx0aWYgKCAhZXhwZWN0U3luYyApIHtcblx0XHRpZiAoIGRhdGFQcml2LmdldCggZWwsIHR5cGUgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHJldHVyblRydWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVnaXN0ZXIgdGhlIGNvbnRyb2xsZXIgYXMgYSBzcGVjaWFsIHVuaXZlcnNhbCBoYW5kbGVyIGZvciBhbGwgZXZlbnQgbmFtZXNwYWNlc1xuXHRkYXRhUHJpdi5zZXQoIGVsLCB0eXBlLCBmYWxzZSApO1xuXHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwge1xuXHRcdG5hbWVzcGFjZTogZmFsc2UsXG5cdFx0aGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIG5vdEFzeW5jLCByZXN1bHQsXG5cdFx0XHRcdHNhdmVkID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdGlmICggKCBldmVudC5pc1RyaWdnZXIgJiAxICkgJiYgdGhpc1sgdHlwZSBdICkge1xuXG5cdFx0XHRcdC8vIEludGVycnVwdCBwcm9jZXNzaW5nIG9mIHRoZSBvdXRlciBzeW50aGV0aWMgLnRyaWdnZXIoKWVkIGV2ZW50XG5cdFx0XHRcdC8vIFNhdmVkIGRhdGEgc2hvdWxkIGJlIGZhbHNlIGluIHN1Y2ggY2FzZXMsIGJ1dCBtaWdodCBiZSBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0XG5cdFx0XHRcdC8vIGZyb20gYW4gYXN5bmMgbmF0aXZlIGhhbmRsZXIgKGdoLTQzNTApXG5cdFx0XHRcdGlmICggIXNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGFyZ3VtZW50cyBmb3IgdXNlIHdoZW4gaGFuZGxpbmcgdGhlIGlubmVyIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRcdC8vIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAoYW4gZXZlbnQgb2JqZWN0KSwgc28gdGhpcyBhcnJheVxuXHRcdFx0XHRcdC8vIHdpbGwgbm90IGJlIGNvbmZ1c2VkIHdpdGggYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdC5cblx0XHRcdFx0XHRzYXZlZCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgc2F2ZWQgKTtcblxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgdGhlIG5hdGl2ZSBldmVudCBhbmQgY2FwdHVyZSBpdHMgcmVzdWx0XG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0Ly8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXNcblx0XHRcdFx0XHRub3RBc3luYyA9IGV4cGVjdFN5bmMoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHR0aGlzWyB0eXBlIF0oKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgfHwgbm90QXN5bmMgKSB7XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGZhbHNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhbmNlbCB0aGUgb3V0ZXIgc3ludGhldGljIGV2ZW50XG5cdFx0XHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA4Nitcblx0XHRcdFx0XHRcdC8vIEluIENocm9tZSwgaWYgYW4gZWxlbWVudCBoYXZpbmcgYSBmb2N1c291dCBoYW5kbGVyIGlzIGJsdXJyZWQgYnlcblx0XHRcdFx0XHRcdC8vIGNsaWNraW5nIG91dHNpZGUgb2YgaXQsIGl0IGludm9rZXMgdGhlIGhhbmRsZXIgc3luY2hyb25vdXNseS4gSWZcblx0XHRcdFx0XHRcdC8vIHRoYXQgaGFuZGxlciBjYWxscyBgLnJlbW92ZSgpYCBvbiB0aGUgZWxlbWVudCwgdGhlIGRhdGEgaXMgY2xlYXJlZCxcblx0XHRcdFx0XHRcdC8vIGxlYXZpbmcgYHJlc3VsdGAgdW5kZWZpbmVkLiBXZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QgdGhpcy5cblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQgJiYgcmVzdWx0LnZhbHVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGlzIGlzIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCBmb3IgYW4gZXZlbnQgd2l0aCBhIGJ1YmJsaW5nIHN1cnJvZ2F0ZVxuXHRcdFx0XHQvLyAoZm9jdXMgb3IgYmx1ciksIGFzc3VtZSB0aGF0IHRoZSBzdXJyb2dhdGUgYWxyZWFkeSBwcm9wYWdhdGVkIGZyb20gdHJpZ2dlcmluZyB0aGVcblx0XHRcdFx0Ly8gbmF0aXZlIGV2ZW50IGFuZCBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcgYWdhaW4gaGVyZS5cblx0XHRcdFx0Ly8gVGhpcyB0ZWNobmljYWxseSBnZXRzIHRoZSBvcmRlcmluZyB3cm9uZyB3LnIudC4gdG8gYC50cmlnZ2VyKClgIChpbiB3aGljaCB0aGVcblx0XHRcdFx0Ly8gYnViYmxpbmcgc3Vycm9nYXRlIHByb3BhZ2F0ZXMgKmFmdGVyKiB0aGUgbm9uLWJ1YmJsaW5nIGJhc2UpLCBidXQgdGhhdCBzZWVtc1xuXHRcdFx0XHQvLyBsZXNzIGJhZCB0aGFuIGR1cGxpY2F0aW9uLlxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge30gKS5kZWxlZ2F0ZVR5cGUgKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBldmVudCB0cmlnZ2VyZWQgYWJvdmUsIGV2ZXJ5dGhpbmcgaXMgbm93IGluIG9yZGVyXG5cdFx0XHQvLyBGaXJlIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCB3aXRoIHRoZSBvcmlnaW5hbCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHQvLyAuLi5hbmQgY2FwdHVyZSB0aGUgcmVzdWx0XG5cdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwge1xuXHRcdFx0XHRcdHZhbHVlOiBqUXVlcnkuZXZlbnQudHJpZ2dlcihcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0XHQvLyBFeHRlbmQgd2l0aCB0aGUgcHJvdG90eXBlIHRvIHJlc2V0IHRoZSBhYm92ZSBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmV4dGVuZCggc2F2ZWRbIDAgXSwgalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSApLFxuXHRcdFx0XHRcdFx0c2F2ZWQuc2xpY2UoIDEgKSxcblx0XHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBBYm9ydCBoYW5kbGluZyBvZiB0aGUgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5qUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkge1xuXG5cdC8vIFRoaXMgXCJpZlwiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0c1xuXHRpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHtcblx0XHRlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApO1xuXHR9XG59O1xuXG5qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHtcblxuXHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcblx0aWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7XG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIEV2ZW50IG9iamVjdFxuXHRpZiAoIHNyYyAmJiBzcmMudHlwZSApIHtcblx0XHR0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7XG5cdFx0dGhpcy50eXBlID0gc3JjLnR5cGU7XG5cblx0XHQvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZFxuXHRcdC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLlxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHxcblx0XHRcdFx0c3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seVxuXHRcdFx0XHRzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID9cblx0XHRcdHJldHVyblRydWUgOlxuXHRcdFx0cmV0dXJuRmFsc2U7XG5cblx0XHQvLyBDcmVhdGUgdGFyZ2V0IHByb3BlcnRpZXNcblx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgPD02IC0gNyBvbmx5XG5cdFx0Ly8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsICMxMzE0Mylcblx0XHR0aGlzLnRhcmdldCA9ICggc3JjLnRhcmdldCAmJiBzcmMudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgP1xuXHRcdFx0c3JjLnRhcmdldC5wYXJlbnROb2RlIDpcblx0XHRcdHNyYy50YXJnZXQ7XG5cblx0XHR0aGlzLmN1cnJlbnRUYXJnZXQgPSBzcmMuY3VycmVudFRhcmdldDtcblx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBzcmMucmVsYXRlZFRhcmdldDtcblxuXHQvLyBFdmVudCB0eXBlXG5cdH0gZWxzZSB7XG5cdFx0dGhpcy50eXBlID0gc3JjO1xuXHR9XG5cblx0Ly8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3Rcblx0aWYgKCBwcm9wcyApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcblx0dGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuXG5cdC8vIE1hcmsgaXQgYXMgZml4ZWRcblx0dGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7XG59O1xuXG4vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmdcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsXG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc1NpbXVsYXRlZDogZmFsc2UsXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxufTtcblxuLy8gSW5jbHVkZXMgYWxsIGNvbW1vbiBldmVudCBwcm9wcyBpbmNsdWRpbmcgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQgc3BlY2lmaWMgcHJvcHNcbmpRdWVyeS5lYWNoKCB7XG5cdGFsdEtleTogdHJ1ZSxcblx0YnViYmxlczogdHJ1ZSxcblx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0Y2hhbmdlZFRvdWNoZXM6IHRydWUsXG5cdGN0cmxLZXk6IHRydWUsXG5cdGRldGFpbDogdHJ1ZSxcblx0ZXZlbnRQaGFzZTogdHJ1ZSxcblx0bWV0YUtleTogdHJ1ZSxcblx0cGFnZVg6IHRydWUsXG5cdHBhZ2VZOiB0cnVlLFxuXHRzaGlmdEtleTogdHJ1ZSxcblx0dmlldzogdHJ1ZSxcblx0XCJjaGFyXCI6IHRydWUsXG5cdGNvZGU6IHRydWUsXG5cdGNoYXJDb2RlOiB0cnVlLFxuXHRrZXk6IHRydWUsXG5cdGtleUNvZGU6IHRydWUsXG5cdGJ1dHRvbjogdHJ1ZSxcblx0YnV0dG9uczogdHJ1ZSxcblx0Y2xpZW50WDogdHJ1ZSxcblx0Y2xpZW50WTogdHJ1ZSxcblx0b2Zmc2V0WDogdHJ1ZSxcblx0b2Zmc2V0WTogdHJ1ZSxcblx0cG9pbnRlcklkOiB0cnVlLFxuXHRwb2ludGVyVHlwZTogdHJ1ZSxcblx0c2NyZWVuWDogdHJ1ZSxcblx0c2NyZWVuWTogdHJ1ZSxcblx0dGFyZ2V0VG91Y2hlczogdHJ1ZSxcblx0dG9FbGVtZW50OiB0cnVlLFxuXHR0b3VjaGVzOiB0cnVlLFxuXHR3aGljaDogdHJ1ZVxufSwgalF1ZXJ5LmV2ZW50LmFkZFByb3AgKTtcblxualF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIHR5cGUsIGRlbGVnYXRlVHlwZSApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSA9IHtcblxuXHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdFxuXHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJmb2N1c1wiLCAuLi4gKVxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImJsdXJcIiwgLi4uIClcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlLCBleHBlY3RTeW5jICk7XG5cblx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLyBTdXBwcmVzcyBuYXRpdmUgZm9jdXMgb3IgYmx1ciBhcyBpdCdzIGFscmVhZHkgYmVpbmcgZmlyZWRcblx0XHQvLyBpbiBsZXZlcmFnZU5hdGl2ZS5cblx0XHRfZGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0ZGVsZWdhdGVUeXBlOiBkZWxlZ2F0ZVR5cGVcblx0fTtcbn0gKTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxMyBvbmx5XG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhKD86XFxbQ0RBVEFcXFt8LS0pfCg/OlxcXVxcXXwtLSk+XFxzKiQvZztcblxuLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0bm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgKSB7XG5cblx0XHRyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oIFwidGJvZHlcIiApWyAwIF0gfHwgZWxlbTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHRpZiAoICggZWxlbS50eXBlIHx8IFwiXCIgKS5zbGljZSggMCwgNSApID09PSBcInRydWUvXCIgKSB7XG5cdFx0ZWxlbS50eXBlID0gZWxlbS50eXBlLnNsaWNlKCA1ICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50cztcblxuXHRpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy5cblx0aWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHRwZGF0YU9sZCA9IGRhdGFQcml2LmdldCggc3JjICk7XG5cdFx0ZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzO1xuXG5cdFx0aWYgKCBldmVudHMgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRlc3QsIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cblx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyAyLiBDb3B5IHVzZXIgZGF0YVxuXHRpZiAoIGRhdGFVc2VyLmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHVkYXRhT2xkID0gZGF0YVVzZXIuYWNjZXNzKCBzcmMgKTtcblx0XHR1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApO1xuXG5cdFx0ZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApO1xuXHR9XG59XG5cbi8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0c1xuZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHtcblx0dmFyIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdC8vIEZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLlxuXHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHtcblx0XHRkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDtcblxuXHQvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9uc1xuXHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XG5cdFx0ZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGRvbU1hbmlwKCBjb2xsZWN0aW9uLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApIHtcblxuXHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdGFyZ3MgPSBmbGF0KCBhcmdzICk7XG5cblx0dmFyIGZyYWdtZW50LCBmaXJzdCwgc2NyaXB0cywgaGFzU2NyaXB0cywgbm9kZSwgZG9jLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBjb2xsZWN0aW9uLmxlbmd0aCxcblx0XHRpTm9DbG9uZSA9IGwgLSAxLFxuXHRcdHZhbHVlID0gYXJnc1sgMCBdLFxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0Ly8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0XG5cdGlmICggdmFsdWVJc0Z1bmN0aW9uIHx8XG5cdFx0XHQoIGwgPiAxICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc3VwcG9ydC5jaGVja0Nsb25lICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7XG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XG5cdFx0XHR9XG5cdFx0XHRkb21NYW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoIGwgKSB7XG5cdFx0ZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTtcblx0XHRmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0ZnJhZ21lbnQgPSBmaXJzdDtcblx0XHR9XG5cblx0XHQvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2tcblx0XHRpZiAoIGZpcnN0IHx8IGlnbm9yZWQgKSB7XG5cdFx0XHRzY3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgXCJzY3JpcHRcIiApLCBkaXNhYmxlU2NyaXB0ICk7XG5cdFx0XHRoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7XG5cblx0XHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW1cblx0XHRcdC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cFxuXHRcdFx0Ly8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKCM4MDcwKS5cblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0bm9kZSA9IGZyYWdtZW50O1xuXG5cdFx0XHRcdGlmICggaSAhPT0gaU5vQ2xvbmUgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGpRdWVyeS5jbG9uZSggbm9kZSwgdHJ1ZSwgdHJ1ZSApO1xuXG5cdFx0XHRcdFx0Ly8gS2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvblxuXHRcdFx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FsbGJhY2suY2FsbCggY29sbGVjdGlvblsgaSBdLCBub2RlLCBpICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblx0XHRcdFx0ZG9jID0gc2NyaXB0c1sgc2NyaXB0cy5sZW5ndGggLSAxIF0ub3duZXJEb2N1bWVudDtcblxuXHRcdFx0XHQvLyBSZWVuYWJsZSBzY3JpcHRzXG5cdFx0XHRcdGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTtcblxuXHRcdFx0XHQvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0aW9uXG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgaGFzU2NyaXB0czsgaSsrICkge1xuXHRcdFx0XHRcdG5vZGUgPSBzY3JpcHRzWyBpIF07XG5cdFx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgXCJcIiApICYmXG5cdFx0XHRcdFx0XHQhZGF0YVByaXYuYWNjZXNzKCBub2RlLCBcImdsb2JhbEV2YWxcIiApICYmXG5cdFx0XHRcdFx0XHRqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUuc3JjICYmICggbm9kZS50eXBlIHx8IFwiXCIgKS50b0xvd2VyQ2FzZSgpICAhPT0gXCJtb2R1bGVcIiApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudFxuXHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5fZXZhbFVybCAmJiAhbm9kZS5ub01vZHVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRub25jZTogbm9kZS5ub25jZSB8fCBub2RlLmdldEF0dHJpYnV0ZSggXCJub25jZVwiIClcblx0XHRcdFx0XHRcdFx0XHR9LCBkb2MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0RE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSwgbm9kZSwgZG9jICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xuXHR2YXIgbm9kZSxcblx0XHRub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sXG5cdFx0aSA9IDA7XG5cblx0Zm9yICggOyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICggbm9kZS5wYXJlbnROb2RlICkge1xuXHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBpc0F0dGFjaGVkKCBub2RlICkgKSB7XG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHR9XG5cdFx0XHRub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRyZXR1cm4gaHRtbDtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxuXHRcdFx0aW5QYWdlID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBTaXp6bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7XG5cdH0sXG5cblx0dGV4dDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnRleHQoIHRoaXMgKSA6XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGJlZm9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcblx0XHRcdFx0ZWxlbS50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xuXHRcdGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcblxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxuXHRcdFx0XHQhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7XG5cblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF0gfHwge307XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtID0gMDtcblxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2Rcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvblxuXHRcdH0sIGlnbm9yZWQgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCgge1xuXHRhcHBlbmRUbzogXCJhcHBlbmRcIixcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxuXHRpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGVsZW1zLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xuXHRcdFx0alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAoIzE1MDk4LCAjMTQxNTApXG5cdFx0Ly8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzXG5cdFx0Ly8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoIFwiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZVwiXG5cdFx0dmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cblx0XHRpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHtcblx0XHRcdHZpZXcgPSB3aW5kb3c7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApO1xuXHR9O1xuXG52YXIgc3dhcCA9IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjayApIHtcblx0dmFyIHJldCwgbmFtZSxcblx0XHRvbGQgPSB7fTtcblxuXHQvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdO1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTtcblx0fVxuXG5cdHJldCA9IGNhbGxiYWNrLmNhbGwoIGVsZW0gKTtcblxuXHQvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn07XG5cblxudmFyIHJib3hTdHlsZSA9IG5ldyBSZWdFeHAoIGNzc0V4cGFuZC5qb2luKCBcInxcIiApLCBcImlcIiApO1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblxuXHQvLyBFeGVjdXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVzdHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlvdXRcblx0Ly8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi5cblx0ZnVuY3Rpb24gY29tcHV0ZVN0eWxlVGVzdHMoKSB7XG5cblx0XHQvLyBUaGlzIGlzIGEgc2luZ2xldG9uLCB3ZSBuZWVkIHRvIGV4ZWN1dGUgaXQgb25seSBvbmNlXG5cdFx0aWYgKCAhZGl2ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7XCIgK1xuXHRcdFx0XCJtYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjBcIjtcblx0XHRkaXYuc3R5bGUuY3NzVGV4dCA9XG5cdFx0XHRcInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDtcIiArXG5cdFx0XHRcIm1hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7XCIgK1xuXHRcdFx0XCJ3aWR0aDo2MCU7dG9wOjElXCI7XG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKS5hcHBlbmRDaGlsZCggZGl2ICk7XG5cblx0XHR2YXIgZGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2ICk7XG5cdFx0cGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gXCIxJVwiO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSA0NFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUubWFyZ2luTGVmdCApID09PSAxMjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIFNhZmFyaSA8PTkuMSAtIDEwLjEsIGlPUyA8PTcuMCAtIDkuM1xuXHRcdC8vIFNvbWUgc3R5bGVzIGNvbWUgYmFjayB3aXRoIHBlcmNlbnRhZ2UgdmFsdWVzLCBldmVuIHRob3VnaCB0aGV5IHNob3VsZG4ndFxuXHRcdGRpdi5zdHlsZS5yaWdodCA9IFwiNjAlXCI7XG5cdFx0cGl4ZWxCb3hTdHlsZXNWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLnJpZ2h0ICkgPT09IDM2O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0XHQvLyBEZXRlY3QgbWlzcmVwb3J0aW5nIG9mIGNvbnRlbnQgZGltZW5zaW9ucyBmb3IgYm94LXNpemluZzpib3JkZXItYm94IGVsZW1lbnRzXG5cdFx0Ym94U2l6aW5nUmVsaWFibGVWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLndpZHRoICkgPT09IDM2O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG92ZXJmbG93OnNjcm9sbCBzY3Jld2luZXNzIChnaC0zNjk5KVxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTY0XG5cdFx0Ly8gRG9uJ3QgZ2V0IHRyaWNrZWQgd2hlbiB6b29tIGFmZmVjdHMgb2Zmc2V0V2lkdGggKGdoLTQwMjkpXG5cdFx0ZGl2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHRcdHNjcm9sbGJveFNpemVWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdi5vZmZzZXRXaWR0aCAvIDMgKSA9PT0gMTI7XG5cblx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApO1xuXG5cdFx0Ly8gTnVsbGlmeSB0aGUgZGl2IHNvIGl0IHdvdWxkbid0IGJlIHN0b3JlZCBpbiB0aGUgbWVtb3J5IGFuZFxuXHRcdC8vIGl0IHdpbGwgYWxzbyBiZSBhIHNpZ24gdGhhdCBjaGVja3MgYWxyZWFkeSBwZXJmb3JtZWRcblx0XHRkaXYgPSBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gcm91bmRQaXhlbE1lYXN1cmVzKCBtZWFzdXJlICkge1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKCBwYXJzZUZsb2F0KCBtZWFzdXJlICkgKTtcblx0fVxuXG5cdHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwgc2Nyb2xsYm94U2l6ZVZhbCwgcGl4ZWxCb3hTdHlsZXNWYWwsXG5cdFx0cmVsaWFibGVUckRpbWVuc2lvbnNWYWwsIHJlbGlhYmxlTWFyZ2luTGVmdFZhbCxcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXG5cdGlmICggIWRpdi5zdHlsZSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEJlaGF2aW9yIGluIElFIDkgaXMgbW9yZSBzdWJ0bGUgdGhhbiBpbiBuZXdlciB2ZXJzaW9ucyAmIGl0IHBhc3Nlc1xuXHRcdC8vIHNvbWUgdmVyc2lvbnMgb2YgdGhpcyB0ZXN0OyBtYWtlIHN1cmUgbm90IHRvIG1ha2UgaXQgcGFzcyB0aGVyZSFcblx0XHQvL1xuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNzArXG5cdFx0Ly8gT25seSBGaXJlZm94IGluY2x1ZGVzIGJvcmRlciB3aWR0aHNcblx0XHQvLyBpbiBjb21wdXRlZCBkaW1lbnNpb25zLiAoZ2gtNDUyOSlcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGFibGUsIHRyLCB0ckNoaWxkLCB0clN0eWxlO1xuXHRcdFx0aWYgKCByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidGFibGVcIiApO1xuXHRcdFx0XHR0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidHJcIiApO1xuXHRcdFx0XHR0ckNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdFx0XHRcdHRhYmxlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlXCI7XG5cdFx0XHRcdHRyLnN0eWxlLmNzc1RleHQgPSBcImJvcmRlcjoxcHggc29saWRcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEhlaWdodCBzZXQgdGhyb3VnaCBjc3NUZXh0IGRvZXMgbm90IGdldCBhcHBsaWVkLlxuXHRcdFx0XHQvLyBDb21wdXRlZCBoZWlnaHQgdGhlbiBjb21lcyBiYWNrIGFzIDAuXG5cdFx0XHRcdHRyLnN0eWxlLmhlaWdodCA9IFwiMXB4XCI7XG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuaGVpZ2h0ID0gXCI5cHhcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDggQ2hyb21lIDg2K1xuXHRcdFx0XHQvLyBJbiBvdXIgYm9keUJhY2tncm91bmQuaHRtbCBpZnJhbWUsXG5cdFx0XHRcdC8vIGRpc3BsYXkgZm9yIGFsbCBkaXYgZWxlbWVudHMgaXMgc2V0IHRvIFwiaW5saW5lXCIsXG5cdFx0XHRcdC8vIHdoaWNoIGNhdXNlcyBhIHByb2JsZW0gb25seSBpbiBBbmRyb2lkIDggQ2hyb21lIDg2LlxuXHRcdFx0XHQvLyBFbnN1cmluZyB0aGUgZGl2IGlzIGRpc3BsYXk6IGJsb2NrXG5cdFx0XHRcdC8vIGdldHMgYXJvdW5kIHRoaXMgaXNzdWUuXG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnRcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRhYmxlIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyQ2hpbGQgKTtcblxuXHRcdFx0XHR0clN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIHRyICk7XG5cdFx0XHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID0gKCBwYXJzZUludCggdHJTdHlsZS5oZWlnaHQsIDEwICkgK1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0clN0eWxlLmJvcmRlclRvcFdpZHRoLCAxMCApICtcblx0XHRcdFx0XHRwYXJzZUludCggdHJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCwgMTAgKSApID09PSB0ci5vZmZzZXRIZWlnaHQ7XG5cblx0XHRcdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCB0YWJsZSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsO1xuXHRcdH1cblx0fSApO1xufSApKCk7XG5cblxuZnVuY3Rpb24gY3VyQ1NTKCBlbGVtLCBuYW1lLCBjb21wdXRlZCApIHtcblx0dmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCxcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNTErXG5cdFx0Ly8gUmV0cmlldmluZyBzdHlsZSBiZWZvcmUgY29tcHV0ZWQgc29tZWhvd1xuXHRcdC8vIGZpeGVzIGFuIGlzc3VlIHdpdGggZ2V0dGluZyB3cm9uZyB2YWx1ZXNcblx0XHQvLyBvbiBkZXRhY2hlZCBlbGVtZW50c1xuXHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRjb21wdXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSApO1xuXG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgbmVlZGVkIGZvcjpcblx0Ly8gICAuY3NzKCdmaWx0ZXInKSAoSUUgOSBvbmx5LCAjMTI1MzcpXG5cdC8vICAgLmNzcygnLS1jdXN0b21Qcm9wZXJ0eSkgKCMzMTQ0KVxuXHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdO1xuXG5cdFx0aWYgKCByZXQgPT09IFwiXCIgJiYgIWlzQXR0YWNoZWQoIGVsZW0gKSApIHtcblx0XHRcdHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEEgdHJpYnV0ZSB0byB0aGUgXCJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzXCJcblx0XHQvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcyxcblx0XHQvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLlxuXHRcdC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzpcblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlc1xuXHRcdGlmICggIXN1cHBvcnQucGl4ZWxCb3hTdHlsZXMoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcmJveFN0eWxlLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcblx0XHRcdG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7XG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xuXG5cdFx0XHQvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcblxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7XG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cblx0XHRyZXQgKyBcIlwiIDpcblx0XHRyZXQ7XG59XG5cblxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xuXG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcblxuXHRcdFx0XHQvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWVcblx0XHRcdFx0Ly8gdG8gbWlzc2luZyBkZXBlbmRlbmN5KSwgcmVtb3ZlIGl0LlxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uXG5cdFx0XHRyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH07XG59XG5cblxudmFyIGNzc1ByZWZpeGVzID0gWyBcIldlYmtpdFwiLCBcIk1velwiLCBcIm1zXCIgXSxcblx0ZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKS5zdHlsZSxcblx0dmVuZG9yUHJvcHMgPSB7fTtcblxuLy8gUmV0dXJuIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5IG9yIHVuZGVmaW5lZFxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7XG5cblx0Ly8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lc1xuXHR2YXIgY2FwTmFtZSA9IG5hbWVbIDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLFxuXHRcdGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0bmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lO1xuXHRcdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFJldHVybiBhIHBvdGVudGlhbGx5LW1hcHBlZCBqUXVlcnkuY3NzUHJvcHMgb3IgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5XG5mdW5jdGlvbiBmaW5hbFByb3BOYW1lKCBuYW1lICkge1xuXHR2YXIgZmluYWwgPSBqUXVlcnkuY3NzUHJvcHNbIG5hbWUgXSB8fCB2ZW5kb3JQcm9wc1sgbmFtZSBdO1xuXG5cdGlmICggZmluYWwgKSB7XG5cdFx0cmV0dXJuIGZpbmFsO1xuXHR9XG5cdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdHJldHVybiBuYW1lO1xuXHR9XG5cdHJldHVybiB2ZW5kb3JQcm9wc1sgbmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB8fCBuYW1lO1xufVxuXG5cbnZhclxuXG5cdC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGVcblx0Ly8gZXhjZXB0IFwidGFibGVcIiwgXCJ0YWJsZS1jZWxsXCIsIG9yIFwidGFibGUtY2FwdGlvblwiXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxuXHRyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sXG5cdHJjdXN0b21Qcm9wID0gL14tLS8sXG5cdGNzc1Nob3cgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiB9LFxuXHRjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7XG5cdFx0bGV0dGVyU3BhY2luZzogXCIwXCIsXG5cdFx0Zm9udFdlaWdodDogXCI0MDBcIlxuXHR9O1xuXG5mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggX2VsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHtcblxuXHQvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuXG5cdC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludFxuXHR2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTtcblx0cmV0dXJuIG1hdGNoZXMgP1xuXG5cdFx0Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgXCJzdWJ0cmFjdFwiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3Ncblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApIDpcblx0XHR2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYm94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIGJveCwgaXNCb3JkZXJCb3gsIHN0eWxlcywgY29tcHV0ZWRWYWwgKSB7XG5cdHZhciBpID0gZGltZW5zaW9uID09PSBcIndpZHRoXCIgPyAxIDogMCxcblx0XHRleHRyYSA9IDAsXG5cdFx0ZGVsdGEgPSAwO1xuXG5cdC8vIEFkanVzdG1lbnQgbWF5IG5vdCBiZSBuZWNlc3Nhcnlcblx0aWYgKCBib3ggPT09ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHtcblxuXHRcdC8vIEJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpblxuXHRcdGlmICggYm94ID09PSBcIm1hcmdpblwiICkge1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgYm94ICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBjb250ZW50LWJveCwgd2UncmUgc2Vla2luZyBcInBhZGRpbmdcIiBvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCJcblx0XHRpZiAoICFpc0JvcmRlckJveCApIHtcblxuXHRcdFx0Ly8gQWRkIHBhZGRpbmdcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBGb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiLCBhZGQgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJwYWRkaW5nXCIgKSB7XG5cdFx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEJ1dCBzdGlsbCBrZWVwIHRyYWNrIG9mIGl0IG90aGVyd2lzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXh0cmEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBib3JkZXItYm94IChjb250ZW50ICsgcGFkZGluZyArIGJvcmRlciksIHdlJ3JlIHNlZWtpbmcgXCJjb250ZW50XCIgb3Jcblx0XHQvLyBcInBhZGRpbmdcIiBvciBcIm1hcmdpblwiXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiLCBzdWJ0cmFjdCBwYWRkaW5nXG5cdFx0XHRpZiAoIGJveCA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIgb3IgXCJwYWRkaW5nXCIsIHN1YnRyYWN0IGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWNjb3VudCBmb3IgcG9zaXRpdmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlciB3aGVuIHJlcXVlc3RlZCBieSBwcm92aWRpbmcgY29tcHV0ZWRWYWxcblx0aWYgKCAhaXNCb3JkZXJCb3ggJiYgY29tcHV0ZWRWYWwgPj0gMCApIHtcblxuXHRcdC8vIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyBhIHJvdW5kZWQgc3VtIG9mIGNvbnRlbnQsIHBhZGRpbmcsIHNjcm9sbCBndXR0ZXIsIGFuZCBib3JkZXJcblx0XHQvLyBBc3N1bWluZyBpbnRlZ2VyIHNjcm9sbCBndXR0ZXIsIHN1YnRyYWN0IHRoZSByZXN0IGFuZCByb3VuZCBkb3duXG5cdFx0ZGVsdGEgKz0gTWF0aC5tYXgoIDAsIE1hdGguY2VpbChcblx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRjb21wdXRlZFZhbCAtXG5cdFx0XHRkZWx0YSAtXG5cdFx0XHRleHRyYSAtXG5cdFx0XHQwLjVcblxuXHRcdC8vIElmIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyB1bmtub3duLCB0aGVuIHdlIGNhbid0IGRldGVybWluZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyXG5cdFx0Ly8gVXNlIGFuIGV4cGxpY2l0IHplcm8gdG8gYXZvaWQgTmFOIChnaC0zOTY0KVxuXHRcdCkgKSB8fCAwO1xuXHR9XG5cblx0cmV0dXJuIGRlbHRhO1xufVxuXG5mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICkge1xuXG5cdC8vIFN0YXJ0IHdpdGggY29tcHV0ZWQgc3R5bGVcblx0dmFyIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXG5cdFx0Ly8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtNDMyMikuXG5cdFx0Ly8gRmFrZSBjb250ZW50LWJveCB1bnRpbCB3ZSBrbm93IGl0J3MgbmVlZGVkIHRvIGtub3cgdGhlIHRydWUgdmFsdWUuXG5cdFx0Ym94U2l6aW5nTmVlZGVkID0gIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCBleHRyYSxcblx0XHRpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJlxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3gsXG5cblx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIGRpbWVuc2lvbiwgc3R5bGVzICksXG5cdFx0b2Zmc2V0UHJvcCA9IFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICk7XG5cblx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdC8vIFJldHVybiBhIGNvbmZvdW5kaW5nIG5vbi1waXhlbCB2YWx1ZSBvciBmZWlnbiBpZ25vcmFuY2UsIGFzIGFwcHJvcHJpYXRlLlxuXHRpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHtcblx0XHRpZiAoICFleHRyYSApIHtcblx0XHRcdHJldHVybiB2YWw7XG5cdFx0fVxuXHRcdHZhbCA9IFwiYXV0b1wiO1xuXHR9XG5cblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHQvLyBVc2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciB3aGVuIGJveCBzaXppbmcgaXMgdW5yZWxpYWJsZS5cblx0Ly8gSW4gdGhvc2UgY2FzZXMsIHRoZSBjb21wdXRlZCB2YWx1ZSBjYW4gYmUgdHJ1c3RlZCB0byBiZSBib3JkZXItYm94LlxuXHRpZiAoICggIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSAmJiBpc0JvcmRlckJveCB8fFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTAgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEludGVyZXN0aW5nbHksIGluIHNvbWUgY2FzZXMgSUUgOSBkb2Vzbid0IHN1ZmZlciBmcm9tIHRoaXMgaXNzdWUuXG5cdFx0IXN1cHBvcnQucmVsaWFibGVUckRpbWVuc2lvbnMoKSAmJiBub2RlTmFtZSggZWxlbSwgXCJ0clwiICkgfHxcblxuXHRcdC8vIEZhbGwgYmFjayB0byBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgd2hlbiB2YWx1ZSBpcyBcImF1dG9cIlxuXHRcdC8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSlcblx0XHR2YWwgPT09IFwiYXV0b1wiIHx8XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIC0gNC4zIG9ubHlcblx0XHQvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIG1pc3JlcG9ydGVkIGlubGluZSBkaW1lbnNpb25zIChnaC0zNjAyKVxuXHRcdCFwYXJzZUZsb2F0KCB2YWwgKSAmJiBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImlubGluZVwiICkgJiZcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyB2aXNpYmxlICYgY29ubmVjdGVkXG5cdFx0ZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblxuXHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIjtcblxuXHRcdC8vIFdoZXJlIGF2YWlsYWJsZSwgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGFwcHJveGltYXRlIGJvcmRlciBib3ggZGltZW5zaW9ucy5cblx0XHQvLyBXaGVyZSBub3QgYXZhaWxhYmxlIChlLmcuLCBTVkcpLCBhc3N1bWUgdW5yZWxpYWJsZSBib3gtc2l6aW5nIGFuZCBpbnRlcnByZXQgdGhlXG5cdFx0Ly8gcmV0cmlldmVkIHZhbHVlIGFzIGEgY29udGVudCBib3ggZGltZW5zaW9uLlxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBvZmZzZXRQcm9wIGluIGVsZW07XG5cdFx0aWYgKCB2YWx1ZUlzQm9yZGVyQm94ICkge1xuXHRcdFx0dmFsID0gZWxlbVsgb2Zmc2V0UHJvcCBdO1xuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBcIlwiIGFuZCBhdXRvXG5cdHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7XG5cblx0Ly8gQWRqdXN0IGZvciB0aGUgZWxlbWVudCdzIGJveCBtb2RlbFxuXHRyZXR1cm4gKCB2YWwgK1xuXHRcdGJveE1vZGVsQWRqdXN0bWVudChcblx0XHRcdGVsZW0sXG5cdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICksXG5cdFx0XHR2YWx1ZUlzQm9yZGVyQm94LFxuXHRcdFx0c3R5bGVzLFxuXG5cdFx0XHQvLyBQcm92aWRlIHRoZSBjdXJyZW50IGNvbXB1dGVkIHNpemUgdG8gcmVxdWVzdCBzY3JvbGwgZ3V0dGVyIGNhbGN1bGF0aW9uIChnaC0zNTg5KVxuXHRcdFx0dmFsXG5cdFx0KVxuXHQpICsgXCJweFwiO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0XG5cdC8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eVxuXHRjc3NIb29rczoge1xuXHRcdG9wYWNpdHk6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdFx0Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHlcblx0XHRcdFx0XHR2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBcIm9wYWNpdHlcIiApO1xuXHRcdFx0XHRcdHJldHVybiByZXQgPT09IFwiXCIgPyBcIjFcIiA6IHJldDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCBcInB4XCIgdG8gdGhlc2UgcG9zc2libHktdW5pdGxlc3MgcHJvcGVydGllc1xuXHRjc3NOdW1iZXI6IHtcblx0XHRcImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50XCI6IHRydWUsXG5cdFx0XCJjb2x1bW5Db3VudFwiOiB0cnVlLFxuXHRcdFwiZmlsbE9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcImZsZXhHcm93XCI6IHRydWUsXG5cdFx0XCJmbGV4U2hyaW5rXCI6IHRydWUsXG5cdFx0XCJmb250V2VpZ2h0XCI6IHRydWUsXG5cdFx0XCJncmlkQXJlYVwiOiB0cnVlLFxuXHRcdFwiZ3JpZENvbHVtblwiOiB0cnVlLFxuXHRcdFwiZ3JpZENvbHVtbkVuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZENvbHVtblN0YXJ0XCI6IHRydWUsXG5cdFx0XCJncmlkUm93XCI6IHRydWUsXG5cdFx0XCJncmlkUm93RW5kXCI6IHRydWUsXG5cdFx0XCJncmlkUm93U3RhcnRcIjogdHJ1ZSxcblx0XHRcImxpbmVIZWlnaHRcIjogdHJ1ZSxcblx0XHRcIm9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcIm9yZGVyXCI6IHRydWUsXG5cdFx0XCJvcnBoYW5zXCI6IHRydWUsXG5cdFx0XCJ3aWRvd3NcIjogdHJ1ZSxcblx0XHRcInpJbmRleFwiOiB0cnVlLFxuXHRcdFwiem9vbVwiOiB0cnVlXG5cdH0sXG5cblx0Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZVxuXHQvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlXG5cdGNzc1Byb3BzOiB7fSxcblxuXHQvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZVxuXHRzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHtcblxuXHRcdC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxuXHRcdHZhciByZXQsIHR5cGUsIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKSxcblx0XHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIHF1ZXJ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbiwgdGhlbiB1bnByZWZpeGVkIHZlcnNpb25cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZVxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdC8vIENvbnZlcnQgXCIrPVwiIG9yIFwiLT1cIiB0byByZWxhdGl2ZSBudW1iZXJzICgjNzM0NSlcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkge1xuXHRcdFx0XHR2YWx1ZSA9IGFkanVzdENTUyggZWxlbSwgbmFtZSwgcmV0ICk7XG5cblx0XHRcdFx0Ly8gRml4ZXMgYnVnICM5MjM3XG5cdFx0XHRcdHR5cGUgPSBcIm51bWJlclwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFuZCBOYU4gdmFsdWVzIGFyZW4ndCBzZXQgKCM3MTE2KVxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcylcblx0XHRcdC8vIFRoZSBpc0N1c3RvbVByb3AgY2hlY2sgY2FuIGJlIHJlbW92ZWQgaW4galF1ZXJ5IDQuMCB3aGVuIHdlIG9ubHkgYXV0by1hcHBlbmRcblx0XHRcdC8vIFwicHhcIiB0byBhIGZldyBoYXJkY29kZWQgdmFsdWVzLlxuXHRcdFx0aWYgKCB0eXBlID09PSBcIm51bWJlclwiICYmICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdHZhbHVlICs9IHJldCAmJiByZXRbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGJhY2tncm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwgY2xvbmUncyB2YWx1ZXNcblx0XHRcdGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSBcIlwiICYmIG5hbWUuaW5kZXhPZiggXCJiYWNrZ3JvdW5kXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IFwiaW5oZXJpdFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fFxuXHRcdFx0XHQoIHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0aWYgKCBpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdFx0c3R5bGUuc2V0UHJvcGVydHkoIG5hbWUsIHZhbHVlICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0XG5cdFx0XHRyZXR1cm4gc3R5bGVbIG5hbWUgXTtcblx0XHR9XG5cdH0sXG5cblx0Y3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHtcblx0XHR2YXIgdmFsLCBudW0sIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIG1vZGlmeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIFRyeSBwcmVmaXhlZCBuYW1lIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIG5hbWVcblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0XG5cdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBcIm5vcm1hbFwiIHRvIGNvbXB1dGVkIHZhbHVlXG5cdFx0aWYgKCB2YWwgPT09IFwibm9ybWFsXCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7XG5cdFx0XHR2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUgXTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWNcblx0XHRpZiAoIGV4dHJhID09PSBcIlwiIHx8IGV4dHJhICkge1xuXHRcdFx0bnVtID0gcGFyc2VGbG9hdCggdmFsICk7XG5cdFx0XHRyZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgaXNGaW5pdGUoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbDtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImhlaWdodFwiLCBcIndpZHRoXCIgXSwgZnVuY3Rpb24oIF9pLCBkaW1lbnNpb24gKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgZGltZW5zaW9uIF0gPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHQvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW1cblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcblx0XHRcdFx0cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICkgJiZcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4K1xuXHRcdFx0XHRcdC8vIFRhYmxlIGNvbHVtbnMgaW4gU2FmYXJpIGhhdmUgbm9uLXplcm8gb2Zmc2V0V2lkdGggJiB6ZXJvXG5cdFx0XHRcdFx0Ly8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggdW5sZXNzIGRpc3BsYXkgaXMgY2hhbmdlZC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHRcdFx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlXG5cdFx0XHRcdFx0Ly8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLlxuXHRcdFx0XHRcdCggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/XG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHRcdFx0Ly8gT25seSByZWFkIHN0eWxlcy5wb3NpdGlvbiBpZiB0aGUgdGVzdCBoYXMgYSBjaGFuY2UgdG8gZmFpbFxuXHRcdFx0XHQvLyB0byBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LlxuXHRcdFx0XHRzY3JvbGxib3hTaXplQnVnZ3kgPSAhc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgJiZcblx0XHRcdFx0XHRzdHlsZXMucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIixcblxuXHRcdFx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC0zOTkxKVxuXHRcdFx0XHRib3hTaXppbmdOZWVkZWQgPSBzY3JvbGxib3hTaXplQnVnZ3kgfHwgZXh0cmEsXG5cdFx0XHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSA/XG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcdGRpbWVuc2lvbixcblx0XHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdFx0aXNCb3JkZXJCb3gsXG5cdFx0XHRcdFx0XHRzdHlsZXNcblx0XHRcdFx0XHQpIDpcblx0XHRcdFx0XHQwO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB1bnJlbGlhYmxlIGJvcmRlci1ib3ggZGltZW5zaW9ucyBieSBjb21wYXJpbmcgb2Zmc2V0KiB0byBjb21wdXRlZCBhbmRcblx0XHRcdC8vIGZha2luZyBhIGNvbnRlbnQtYm94IHRvIGdldCBib3JkZXIgYW5kIHBhZGRpbmcgKGdoLTM2OTkpXG5cdFx0XHRpZiAoIGlzQm9yZGVyQm94ICYmIHNjcm9sbGJveFNpemVCdWdneSApIHtcblx0XHRcdFx0c3VidHJhY3QgLT0gTWF0aC5jZWlsKFxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRcdFx0cGFyc2VGbG9hdCggc3R5bGVzWyBkaW1lbnNpb24gXSApIC1cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgXCJib3JkZXJcIiwgZmFsc2UsIHN0eWxlcyApIC1cblx0XHRcdFx0XHQwLjVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdCkgKyBcInB4XCI7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXG5qUXVlcnkuZWFjaCgge1xuXHRtYXJnaW46IFwiXCIsXG5cdHBhZGRpbmc6IFwiXCIsXG5cdGJvcmRlcjogXCJXaWR0aFwiXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7XG5cdFx0ZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgaSA9IDAsXG5cdFx0XHRcdGV4cGFuZGVkID0ge30sXG5cblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXG5cdFx0XHRcdHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUuc3BsaXQoIFwiIFwiICkgOiBbIHZhbHVlIF07XG5cblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xuXHRcdH1cblx0fTtcblxuXHRpZiAoIHByZWZpeCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNldFBvc2l0aXZlTnVtYmVyO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0Y3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0dmFyIHN0eWxlcywgbGVuLFxuXHRcdFx0XHRtYXAgPSB7fSxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbmFtZSApICkge1xuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTtcblx0XHRcdFx0bGVuID0gbmFtZS5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0bWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG1hcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7XG5cdFx0fSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH1cbn0gKTtcblxuXG5mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7XG5cdHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7XG59XG5qUXVlcnkuVHdlZW4gPSBUd2VlbjtcblxuVHdlZW4ucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogVHdlZW4sXG5cdGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHtcblx0XHR0aGlzLmVsZW0gPSBlbGVtO1xuXHRcdHRoaXMucHJvcCA9IHByb3A7XG5cdFx0dGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7XG5cdFx0dGhpcy5lbmQgPSBlbmQ7XG5cdFx0dGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0fSxcblx0Y3VyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0cmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/XG5cdFx0XHRob29rcy5nZXQoIHRoaXMgKSA6XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7XG5cdH0sXG5cdHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7XG5cdFx0dmFyIGVhc2VkLFxuXHRcdFx0aG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXShcblx0XHRcdFx0cGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDtcblx0XHR9XG5cdFx0dGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0O1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHtcblx0XHRcdGhvb2tzLnNldCggdGhpcyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59O1xuXG5Ud2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7XG5cblR3ZWVuLnByb3BIb29rcyA9IHtcblx0X2RlZmF1bHQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRcdHZhciByZXN1bHQ7XG5cblx0XHRcdC8vIFVzZSBhIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IHdoZW4gaXQgaXMgbm90IGEgRE9NIGVsZW1lbnQsXG5cdFx0XHQvLyBvciB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHN0eWxlIHByb3BlcnR5IHRoYXQgZXhpc3RzLlxuXHRcdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICE9PSAxIHx8XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHlcblx0XHRcdC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuXG5cdFx0XHQvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgXCIxMHB4XCIgYXJlIHBhcnNlZCB0byBGbG9hdDtcblx0XHRcdC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgXCJyb3RhdGUoMXJhZClcIiBhcmUgcmV0dXJuZWQgYXMtaXMuXG5cdFx0XHRyZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBcIlwiICk7XG5cblx0XHRcdC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgXCJhdXRvXCIgYXJlIGNvbnZlcnRlZCB0byAwLlxuXHRcdFx0cmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSBcImF1dG9cIiA/IDAgOiByZXN1bHQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblxuXHRcdFx0Ly8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuXG5cdFx0XHQvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuXG5cdFx0XHQvLyBVc2UgLnN0eWxlIGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlLlxuXHRcdFx0aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkge1xuXHRcdFx0XHRqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApO1xuXHRcdFx0fSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdIHx8XG5cdFx0XHRcdFx0dHdlZW4uZWxlbS5zdHlsZVsgZmluYWxQcm9wTmFtZSggdHdlZW4ucHJvcCApIF0gIT0gbnVsbCApICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5lYXNpbmcgPSB7XG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH0sXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xuXHR9LFxuXHRfZGVmYXVsdDogXCJzd2luZ1wiXG59O1xuXG5qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDtcblxuLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcbmpRdWVyeS5meC5zdGVwID0ge307XG5cblxuXG5cbnZhclxuXHRmeE5vdywgaW5Qcm9ncmVzcyxcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXG5cdHJydW4gPSAvcXVldWVIb29rcyQvO1xuXG5mdW5jdGlvbiBzY2hlZHVsZSgpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdGlmICggZG9jdW1lbnQuaGlkZGVuID09PSBmYWxzZSAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICkge1xuXHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSggc2NoZWR1bGUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHNjaGVkdWxlLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTtcblx0XHR9XG5cblx0XHRqUXVlcnkuZngudGljaygpO1xuXHR9XG59XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XG5cdH0gKTtcblx0cmV0dXJuICggZnhOb3cgPSBEYXRlLm5vdygpICk7XG59XG5cbi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uXG5mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkge1xuXHR2YXIgd2hpY2gsXG5cdFx0aSA9IDAsXG5cdFx0YXR0cnMgPSB7IGhlaWdodDogdHlwZSB9O1xuXG5cdC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcyxcblx0Ly8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHRcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7XG5cblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xuXHR2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3MsIG9sZGZpcmUsIHByb3BUd2VlbiwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksXG5cdFx0aXNCb3ggPSBcIndpZHRoXCIgaW4gcHJvcHMgfHwgXCJoZWlnaHRcIiBpbiBwcm9wcyxcblx0XHRhbmltID0gdGhpcyxcblx0XHRvcmlnID0ge30sXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlLFxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICksXG5cdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZnhzaG93XCIgKTtcblxuXHQvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3Ncblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XG5cdFx0dmFsdWUgPSBwcm9wc1sgcHJvcCBdO1xuXHRcdGlmICggcmZ4dHlwZXMudGVzdCggdmFsdWUgKSApIHtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xuXHRcdFx0dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSBcInRvZ2dsZVwiO1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyBcImhpZGVcIiA6IFwic2hvd1wiICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJldGVuZCB0byBiZSBoaWRkZW4gaWYgdGhpcyBpcyBhIFwic2hvd1wiIGFuZFxuXHRcdFx0XHQvLyB0aGVyZSBpcyBzdGlsbCBkYXRhIGZyb20gYSBzdG9wcGVkIHNob3cvaGlkZVxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBJZ25vcmUgYWxsIG90aGVyIG5vLW9wIHNob3cvaGlkZSBkYXRhXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKClcblx0cHJvcFR3ZWVuID0gIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wcyApO1xuXHRpZiAoICFwcm9wVHdlZW4gJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZXN0cmljdCBcIm92ZXJmbG93XCIgYW5kIFwiZGlzcGxheVwiIHN0eWxlcyBkdXJpbmcgYm94IGFuaW1hdGlvbnNcblx0aWYgKCBpc0JveCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QgaW5mZXIgdGhlIHNob3J0aGFuZFxuXHRcdC8vIGZyb20gaWRlbnRpY2FsbHktdmFsdWVkIG92ZXJmbG93WCBhbmQgb3ZlcmZsb3dZIGFuZCBFZGdlIGp1c3QgbWlycm9yc1xuXHRcdC8vIHRoZSBvdmVyZmxvd1ggdmFsdWUgdGhlcmUuXG5cdFx0b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07XG5cblx0XHQvLyBJZGVudGlmeSBhIGRpc3BsYXkgdHlwZSwgcHJlZmVycmluZyBvbGQgc2hvdy9oaWRlIGRhdGEgb3ZlciB0aGUgQ1NTIGNhc2NhZGVcblx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFTaG93ICYmIGRhdGFTaG93LmRpc3BsYXk7XG5cdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0fVxuXHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ICkge1xuXHRcdFx0XHRkaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEdldCBub25lbXB0eSB2YWx1ZShzKSBieSB0ZW1wb3JhcmlseSBmb3JjaW5nIHZpc2liaWxpdHlcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5IHx8IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQW5pbWF0ZSBpbmxpbmUgZWxlbWVudHMgYXMgaW5saW5lLWJsb2NrXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcImlubGluZVwiIHx8IGRpc3BsYXkgPT09IFwiaW5saW5lLWJsb2NrXCIgJiYgcmVzdG9yZURpc3BsYXkgIT0gbnVsbCApIHtcblx0XHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUgYXQgdGhlIGVuZCBvZiBwdXJlIHNob3cvaGlkZSBhbmltYXRpb25zXG5cdFx0XHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ID0gc3R5bGUuZGlzcGxheTtcblx0XHRcdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgPyBcIlwiIDogZGlzcGxheTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnQgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0cHJvcFR3ZWVuID0gZmFsc2U7XG5cdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblxuXHRcdC8vIEdlbmVyYWwgc2hvdy9oaWRlIHNldHVwIGZvciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uXG5cdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIFwiZnhzaG93XCIsIHsgZGlzcGxheTogcmVzdG9yZURpc3BsYXkgfSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdG9yZSBoaWRkZW4vdmlzaWJsZSBmb3IgdG9nZ2xlIHNvIGAuc3RvcCgpLnRvZ2dsZSgpYCBcInJldmVyc2VzXCJcblx0XHRcdGlmICggdG9nZ2xlICkge1xuXHRcdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbVxuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRcdC8vIFRoZSBmaW5hbCBzdGVwIG9mIGEgXCJoaWRlXCIgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IGhpZGluZyB0aGUgZWxlbWVudFxuXHRcdFx0XHRpZiAoICFoaWRkZW4gKSB7XG5cdFx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cdFx0XHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Ly8gUGVyLXByb3BlcnR5IHNldHVwXG5cdFx0cHJvcFR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7XG5cdFx0aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7XG5cdFx0XHRkYXRhU2hvd1sgcHJvcCBdID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHByb3BUd2Vlbi5lbmQgPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRcdHByb3BUd2Vlbi5zdGFydCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xuXHR2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzO1xuXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xuXHRmb3IgKCBpbmRleCBpbiBwcm9wcyApIHtcblx0XHRuYW1lID0gY2FtZWxDYXNlKCBpbmRleCApO1xuXHRcdGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTtcblx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdO1xuXHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdGVhc2luZyA9IHZhbHVlWyAxIF07XG5cdFx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTtcblx0XHR9XG5cblx0XHRpZiAoIGluZGV4ICE9PSBuYW1lICkge1xuXHRcdFx0cHJvcHNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBpbmRleCBdO1xuXHRcdH1cblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07XG5cdFx0aWYgKCBob29rcyAmJiBcImV4cGFuZFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7XG5cdFx0XHRkZWxldGUgcHJvcHNbIG5hbWUgXTtcblxuXHRcdFx0Ly8gTm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBrZXlzLlxuXHRcdFx0Ly8gUmV1c2luZyAnaW5kZXgnIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCBcIm5hbWVcIlxuXHRcdFx0Zm9yICggaW5kZXggaW4gdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHtcblx0XHRcdFx0XHRwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyBpbmRleCBdO1xuXHRcdFx0XHRcdHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7XG5cdHZhciByZXN1bHQsXG5cdFx0c3RvcHBlZCxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gQW5pbWF0aW9uLnByZWZpbHRlcnMubGVuZ3RoLFxuXHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yXG5cdFx0XHRkZWxldGUgdGljay5lbGVtO1xuXHRcdH0gKSxcblx0XHR0aWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRcdHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSxcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuMyBvbmx5XG5cdFx0XHRcdC8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAtICggMC41IHx8IDAgKWAgKCMxMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSdzIG1vcmUgdG8gZG8sIHlpZWxkXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gZW1wdHkgYW5pbWF0aW9uLCBzeW50aGVzaXplIGEgZmluYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uXG5cdFx0XHRpZiAoICFsZW5ndGggKSB7XG5cdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVzb2x2ZSB0aGUgYW5pbWF0aW9uIGFuZCByZXBvcnQgaXRzIGNvbmNsdXNpb25cblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0cmVzdWx0LnN0b3AuYmluZCggcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0gRGF0ZS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblxuXHRcdC8vIFJ1biB0aGUgdGltZXIgYW5kIHNhZmVseSByZW1vdmUgaXQgd2hlbiBkb25lIChhbGxvd2luZyBmb3IgZXh0ZXJuYWwgcmVtb3ZhbClcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRqUXVlcnkuZnguc3RhcnQoKTtcbn07XG5cbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpblByb2dyZXNzID0gdHJ1ZTtcblx0c2NoZWR1bGUoKTtcbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdGluUHJvZ3Jlc3MgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cblx0Ly8gRGVmYXVsdCBzcGVlZFxuXHRfZGVmYXVsdDogNDAwXG59O1xuXG5cbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cbi8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEwMDMyNDAxNDc0Ny9odHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvXG5qUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcblx0dGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTtcblx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7XG5cdFx0dmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApO1xuXHRcdGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR9O1xuXHR9ICk7XG59O1xuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApLFxuXHRcdHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwic2VsZWN0XCIgKSxcblx0XHRvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib3B0aW9uXCIgKSApO1xuXG5cdGlucHV0LnR5cGUgPSBcImNoZWNrYm94XCI7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMyBvbmx5XG5cdC8vIERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlIFwib25cIlxuXHRzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gXCJcIjtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTXVzdCBhY2Nlc3Mgc2VsZWN0ZWRJbmRleCB0byBtYWtlIGRlZmF1bHQgb3B0aW9ucyBzZWxlY3Rcblx0c3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gQW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW9cblx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0aW5wdXQudmFsdWUgPSBcInRcIjtcblx0aW5wdXQudHlwZSA9IFwicmFkaW9cIjtcblx0c3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09IFwidFwiO1xufSApKCk7XG5cblxudmFyIGJvb2xIb29rLFxuXHRhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdC8vIEF0dHJpYnV0ZSBob29rcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXJjYXNlIHZlcnNpb25cblx0XHQvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgXCJcIiApO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xuXHR9LFxuXG5cdGF0dHJIb29rczoge1xuXHRcdHR5cGU6IHtcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09IFwicmFkaW9cIiAmJlxuXHRcdFx0XHRcdG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR2YXIgdmFsID0gZWxlbS52YWx1ZTtcblx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIHZhbHVlICk7XG5cdFx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnZhbHVlID0gdmFsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdHZhciBuYW1lLFxuXHRcdFx0aSA9IDAsXG5cblx0XHRcdC8vIEF0dHJpYnV0ZSBuYW1lcyBjYW4gY29udGFpbiBub24tSFRNTCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcblx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2F0dHJpYnV0ZXMtMlxuXHRcdFx0YXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblxuXHRcdGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHR3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSG9va3MgZm9yIGJvb2xlYW4gYXR0cmlidXRlc1xuYm9vbEhvb2sgPSB7XG5cdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuXHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlXG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZTtcblx0fVxufTtcblxualF1ZXJ5LmVhY2goIGpRdWVyeS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKCAvXFx3Ky9nICksIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0dmFyIGdldHRlciA9IGF0dHJIYW5kbGVbIG5hbWUgXSB8fCBqUXVlcnkuZmluZC5hdHRyO1xuXG5cdGF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgcmV0LCBoYW5kbGUsXG5cdFx0XHRsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cblx0XHRcdC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXJcblx0XHRcdGhhbmRsZSA9IGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXTtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IHJldDtcblx0XHRcdHJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID9cblx0XHRcdFx0bG93ZXJjYXNlTmFtZSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSBoYW5kbGU7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG59ICk7XG5cblxuXG5cbnZhciByZm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzXG5cdFx0XHRuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lO1xuXHRcdFx0aG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdO1xuXHR9LFxuXG5cdHByb3BIb29rczoge1xuXHRcdHRhYkluZGV4OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHRcdFx0Ly8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlXG5cdFx0XHRcdC8vIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldFxuXHRcdFx0XHQvLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNDExMTYyMzMzNDcvaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC9cblx0XHRcdFx0Ly8gVXNlIHByb3BlciBhdHRyaWJ1dGUgcmV0cmlldmFsKCMxMjA3Milcblx0XHRcdFx0dmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ0YWJpbmRleFwiICk7XG5cblx0XHRcdFx0aWYgKCB0YWJpbmRleCApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8XG5cdFx0XHRcdFx0cmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiZcblx0XHRcdFx0XHRlbGVtLmhyZWZcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHByb3BGaXg6IHtcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcblx0XHRcImNsYXNzXCI6IFwiY2xhc3NOYW1lXCJcblx0fVxufSApO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcbi8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZFxuLy8gb24gdGhlIG9wdGlvblxuLy8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWRcbi8vIHdoZW4gaW4gYW4gb3B0Z3JvdXBcbi8vIGVzbGludCBydWxlIFwibm8tdW51c2VkLWV4cHJlc3Npb25zXCIgaXMgZGlzYWJsZWQgZm9yIHRoaXMgY29kZVxuLy8gc2luY2UgaXQgY29uc2lkZXJzIHN1Y2ggYWNjZXNzaW9ucyBub29wXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0cGFyZW50LnNlbGVjdGVkSW5kZXg7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5qUXVlcnkuZWFjaCggW1xuXHRcInRhYkluZGV4XCIsXG5cdFwicmVhZE9ubHlcIixcblx0XCJtYXhMZW5ndGhcIixcblx0XCJjZWxsU3BhY2luZ1wiLFxuXHRcImNlbGxQYWRkaW5nXCIsXG5cdFwicm93U3BhblwiLFxuXHRcImNvbFNwYW5cIixcblx0XCJ1c2VNYXBcIixcblx0XCJmcmFtZUJvcmRlclwiLFxuXHRcImNvbnRlbnRFZGl0YWJsZVwiXG5dLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpcztcbn0gKTtcblxuXG5cblxuXHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjXG5cdC8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2UtYXNjaWktd2hpdGVzcGFjZVxuXHRmdW5jdGlvbiBzdHJpcEFuZENvbGxhcHNlKCB2YWx1ZSApIHtcblx0XHR2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0XHRyZXR1cm4gdG9rZW5zLmpvaW4oIFwiIFwiICk7XG5cdH1cblxuXG5mdW5jdGlvbiBnZXRDbGFzcyggZWxlbSApIHtcblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fCBcIlwiO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VzVG9BcnJheSggdmFsdWUgKSB7XG5cdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhenogKyBcIiBcIiApIDwgMCApIHtcblx0XHRcdFx0XHRcdFx0Y3VyICs9IGNsYXp6ICsgXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXR0ciggXCJjbGFzc1wiLCBcIlwiICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXG5cdFx0XHRcdC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpXG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSAqYWxsKiBpbnN0YW5jZXNcblx0XHRcdFx0XHRcdHdoaWxlICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhenogKyBcIiBcIiApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciA9IGN1ci5yZXBsYWNlKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIsIFwiIFwiICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHtcblx0XHR2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSxcblx0XHRcdGlzVmFsaWRWYWx1ZSA9IHR5cGUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIiAmJiBpc1ZhbGlkVmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoXG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggdGhpcywgaSwgZ2V0Q2xhc3MoIHRoaXMgKSwgc3RhdGVWYWwgKSxcblx0XHRcdFx0XHRzdGF0ZVZhbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGNsYXNzTmFtZSwgaSwgc2VsZiwgY2xhc3NOYW1lcztcblxuXHRcdFx0aWYgKCBpc1ZhbGlkVmFsdWUgKSB7XG5cblx0XHRcdFx0Ly8gVG9nZ2xlIGluZGl2aWR1YWwgY2xhc3MgbmFtZXNcblx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKTtcblx0XHRcdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0XHRcdHdoaWxlICggKCBjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHtcblx0XHRcdFx0XHRcdHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWVcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRcdGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGlmICggY2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldFxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIsIGNsYXNzTmFtZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCxcblx0XHRcdFx0Ly8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcblx0XHRcdFx0Ly8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxuXHRcdFx0XHRpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID9cblx0XHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRzdHJpcEFuZENvbGxhcHNlKCBqUXVlcnkudGV4dCggZWxlbSApICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLCBpLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIixcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKCBpbmRleCA8IDAgKSB7XG5cdFx0XHRcdFx0aSA9IG1heDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBvbmUgPyBpbmRleCA6IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0Ly8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cblxuXG5zdXBwb3J0LmZvY3VzaW4gPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpXG5cdFx0Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNClcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlO1xuXHRcdFx0aWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHtcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0dG1wID0gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSlcblx0XHRcdGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRsYXN0RWxlbWVudCA9IGN1cjtcblx0XHRcdGV2ZW50LnR5cGUgPSBpID4gMSA/XG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxuXHRcdFx0XHRzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7XG5cblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSAoIGRhdGFQcml2LmdldCggY3VyLCBcImV2ZW50c1wiICkgfHwgT2JqZWN0LmNyZWF0ZSggbnVsbCApIClbIGV2ZW50LnR5cGUgXSAmJlxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJoYW5kbGVcIiApO1xuXHRcdFx0aWYgKCBoYW5kbGUgKSB7XG5cdFx0XHRcdGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5hdGl2ZSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTtcblx0XHRcdGlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAmJiBhY2NlcHREYXRhKCBjdXIgKSApIHtcblx0XHRcdFx0ZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZXZlbnQudHlwZSA9IHR5cGU7XG5cblx0XHQvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHtcblxuXHRcdFx0aWYgKCAoICFzcGVjaWFsLl9kZWZhdWx0IHx8XG5cdFx0XHRcdHNwZWNpYWwuX2RlZmF1bHQuYXBwbHkoIGV2ZW50UGF0aC5wb3AoKSwgZGF0YSApID09PSBmYWxzZSApICYmXG5cdFx0XHRcdGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblxuXHRcdFx0XHQvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGV2ZW50LlxuXHRcdFx0XHQvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApXG5cdFx0XHRcdGlmICggb250eXBlICYmIGlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZFxuXHRcdFx0XHRcdHRtcCA9IGVsZW1bIG9udHlwZSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmVcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbVsgdHlwZSBdKCk7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gdG1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XG5cdH1cblxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuXHRcdH0gKTtcblx0fSxcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbi8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00NFxuLy8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50c1xuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3ODdcbi8vXG4vLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjFcbi8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLFxuLy8gd2hpY2ggaXMgc3BlYyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1N1xuaWYgKCAhc3VwcG9ydC5mb2N1c2luICkge1xuXHRqUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXG5cdFx0Ly8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXRcblx0XHR2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICkgKTtcblx0XHR9O1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0ge1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIEhhbmRsZTogcmVndWxhciBub2RlcyAodmlhIGB0aGlzLm93bmVyRG9jdW1lbnRgKSwgd2luZG93XG5cdFx0XHRcdC8vICh2aWEgYHRoaXMuZG9jdW1lbnRgKSAmIGRvY3VtZW50ICh2aWEgYHRoaXNgKS5cblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHRcdH0sXG5cdFx0XHR0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApIC0gMTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZG9jLCBmaXggKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9ICk7XG59XG52YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG5cbnZhciBub25jZSA9IHsgZ3VpZDogRGF0ZS5ub3coKSB9O1xuXG52YXIgcnF1ZXJ5ID0gKCAvXFw/LyApO1xuXG5cblxuLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZ1xualF1ZXJ5LnBhcnNlWE1MID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdHZhciB4bWwsIHBhcnNlckVycm9yRWxlbTtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge31cblxuXHRwYXJzZXJFcnJvckVsZW0gPSB4bWwgJiYgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInBhcnNlcmVycm9yXCIgKVsgMCBdO1xuXHRpZiAoICF4bWwgfHwgcGFyc2VyRXJyb3JFbGVtICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyAoXG5cdFx0XHRwYXJzZXJFcnJvckVsZW0gP1xuXHRcdFx0XHRqUXVlcnkubWFwKCBwYXJzZXJFcnJvckVsZW0uY2hpbGROb2RlcywgZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0XHRcdHJldHVybiBlbC50ZXh0Q29udGVudDtcblx0XHRcdFx0fSApLmpvaW4oIFwiXFxuXCIgKSA6XG5cdFx0XHRcdGRhdGFcblx0XHQpICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKS5tYXAoIGZ1bmN0aW9uKCBfaSwgZWxlbSApIHtcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcblxuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdH0gKS5nZXQoKTtcblx0fVxufSApO1xuXG5cbnZhclxuXHRyMjAgPSAvJTIwL2csXG5cdHJoYXNoID0gLyMuKiQvLFxuXHRyYW50aUNhY2hlID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cblx0Ly8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXG5cdHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLFxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxub3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzICM5ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IEpTT04ucGFyc2UsXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0cnVlIHVwb24gY29tcGxldGlvbilcblx0XHRcdGNvbXBsZXRlZCxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsXG5cdFx0XHR1bmNhY2hlZCxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOlxuXHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSA9XG5cdFx0XHRcdFx0XHRcdFx0XHQoIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSB8fCBbXSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5jb25jYXQoIG1hdGNoWyAyIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2guam9pbiggXCIsIFwiICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID1cblx0XHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTtcblxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXG5cdFx0cy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXG5cdFx0XHQvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHlcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxuXHRcdGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcblx0XHRcdHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApO1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiApICkge1xuXHRcdFx0XHRjYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhO1xuXG5cdFx0XHRcdC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZFxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgPSBjYWNoZVVSTC5yZXBsYWNlKCByYW50aUNhY2hlLCBcIiQxXCIgKTtcblx0XHRcdFx0dW5jYWNoZWQgPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgXCJfPVwiICsgKCBub25jZS5ndWlkKysgKSArXG5cdFx0XHRcdFx0dW5jYWNoZWQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFB1dCBoYXNoIGFuZCBhbnRpLWNhY2hlIG9uIHRoZSBVUkwgdGhhdCB3aWxsIGJlIHJlcXVlc3RlZCAoZ2gtMTczMilcblx0XHRcdHMudXJsID0gY2FjaGVVUkwgKyB1bmNhY2hlZDtcblxuXHRcdC8vIENoYW5nZSAnJTIwJyB0byAnKycgaWYgdGhpcyBpcyBlbmNvZGVkIGZvcm0gYm9keSBjb250ZW50IChnaC0yNjU4KVxuXHRcdH0gZWxzZSBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmXG5cdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApLmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCApIHtcblx0XHRcdHMuZGF0YSA9IHMuZGF0YS5yZXBsYWNlKCByMjAsIFwiK1wiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Nb2RpZmllZC1TaW5jZVwiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU5vbmUtTWF0Y2hcIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnRcblx0XHRpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIsIHMuY29udGVudFR5cGUgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlXG5cdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlcihcblx0XHRcdFwiQWNjZXB0XCIsXG5cdFx0XHRzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID9cblx0XHRcdFx0cy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gK1xuXHRcdFx0XHRcdCggcy5kYXRhVHlwZXNbIDAgXSAhPT0gXCIqXCIgPyBcIiwgXCIgKyBhbGxUeXBlcyArIFwiOyBxPTAuMDFcIiA6IFwiXCIgKSA6XG5cdFx0XHRcdHMuYWNjZXB0c1sgXCIqXCIgXVxuXHRcdCk7XG5cblx0XHQvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb25cblx0XHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydFxuXHRcdGlmICggcy5iZWZvcmVTZW5kICYmXG5cdFx0XHQoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IGNvbXBsZXRlZCApICkge1xuXG5cdFx0XHQvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm5cblx0XHRcdHJldHVybiBqcVhIUi5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdC8vIEFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvblxuXHRcdHN0ckFib3J0ID0gXCJhYm9ydFwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzXG5cdFx0Y29tcGxldGVEZWZlcnJlZC5hZGQoIHMuY29tcGxldGUgKTtcblx0XHRqcVhIUi5kb25lKCBzLnN1Y2Nlc3MgKTtcblx0XHRqcVhIUi5mYWlsKCBzLmVycm9yICk7XG5cblx0XHQvLyBHZXQgdHJhbnNwb3J0XG5cdFx0dHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnRcblx0XHRpZiAoICF0cmFuc3BvcnQgKSB7XG5cdFx0XHRkb25lKCAtMSwgXCJObyBUcmFuc3BvcnRcIiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gMTtcblxuXHRcdFx0Ly8gU2VuZCBnbG9iYWwgZXZlbnRcblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhTZW5kXCIsIFsganFYSFIsIHMgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhamF4U2VuZCwgc3RvcCB0aGVyZVxuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybiBqcVhIUjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGltZW91dFxuXHRcdFx0aWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7XG5cdFx0XHRcdHRpbWVvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRqcVhIUi5hYm9ydCggXCJ0aW1lb3V0XCIgKTtcblx0XHRcdFx0fSwgcy50aW1lb3V0ICk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbXBsZXRlZCA9IGZhbHNlO1xuXHRcdFx0XHR0cmFuc3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIFJldGhyb3cgcG9zdC1jb21wbGV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFByb3BhZ2F0ZSBvdGhlcnMgYXMgcmVzdWx0c1xuXHRcdFx0XHRkb25lKCAtMSwgZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZVxuXHRcdGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkge1xuXHRcdFx0dmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCxcblx0XHRcdFx0c3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7XG5cblx0XHRcdC8vIElnbm9yZSByZXBlYXQgaW52b2NhdGlvbnNcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbXBsZXRlZCA9IHRydWU7XG5cblx0XHRcdC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXG5cdFx0XHRpZiAoIHRpbWVvdXRUaW1lciApIHtcblx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uXG5cdFx0XHQvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKVxuXHRcdFx0dHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8IFwiXCI7XG5cblx0XHRcdC8vIFNldCByZWFkeVN0YXRlXG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwO1xuXG5cdFx0XHQvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bFxuXHRcdFx0aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7XG5cblx0XHRcdC8vIEdldCByZXNwb25zZSBkYXRhXG5cdFx0XHRpZiAoIHJlc3BvbnNlcyApIHtcblx0XHRcdFx0cmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFVzZSBhIG5vb3AgY29udmVydGVyIGZvciBtaXNzaW5nIHNjcmlwdCBidXQgbm90IGlmIGpzb25wXG5cdFx0XHRpZiAoICFpc1N1Y2Nlc3MgJiZcblx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIFwic2NyaXB0XCIsIHMuZGF0YVR5cGVzICkgPiAtMSAmJlxuXHRcdFx0XHRqUXVlcnkuaW5BcnJheSggXCJqc29uXCIsIHMuZGF0YVR5cGVzICkgPCAwICkge1xuXHRcdFx0XHRzLmNvbnZlcnRlcnNbIFwidGV4dCBzY3JpcHRcIiBdID0gZnVuY3Rpb24oKSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggX2ksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGRhdGEgKSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVybClcblx0XHRyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdHVybDogdXJsLFxuXHRcdFx0dHlwZTogbWV0aG9kLFxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0c3VjY2VzczogY2FsbGJhY2tcblx0XHR9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHR2YXIgaTtcblx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0aWYgKCBpLnRvTG93ZXJDYXNlKCkgPT09IFwiY29udGVudC10eXBlXCIgKSB7XG5cdFx0XHRzLmNvbnRlbnRUeXBlID0gcy5oZWFkZXJzWyBpIF0gfHwgXCJcIjtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsLCBvcHRpb25zLCBkb2MgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucywgZG9jICk7XG5cdFx0fVxuXHR9ICk7XG59O1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIHdyYXA7XG5cblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0XHRodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xuXG5cdFx0XHRcdHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHtcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbGVtO1xuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciBodG1sSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIGh0bWwgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbElzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dGhpcy5wYXJlbnQoIHNlbGVjdG9yICkubm90KCBcImJvZHlcIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7XG59O1xualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBlbGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7XG59O1xuXG5cblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdC8vICMxNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxuXHRcdDEyMjM6IDIwNFxuXHR9LFxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xuXG5zdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyU3VwcG9ydGVkICk7XG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcblxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcblxuXHRcdFx0XHR4aHIub3Blbihcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXG5cdFx0XHRcdFx0b3B0aW9ucy51cmwsXG5cdFx0XHRcdFx0b3B0aW9ucy5hc3luYyxcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxuXHRcdFx0XHRcdG9wdGlvbnMucGFzc3dvcmRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBoZWFkZXJzXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0gZXJyb3JDYWxsYmFjayA9IHhoci5vbmxvYWQgPVxuXHRcdFx0XHRcdFx0XHRcdHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub250aW1lb3V0ID1cblx0XHRcdFx0XHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSB4aHIub250aW1lb3V0ID0gY2FsbGJhY2soIFwiZXJyb3JcIiApO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHQvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydFxuXHRcdFx0XHQvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXNcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxuXHRcdFx0XHRcdFx0XHQvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZVxuXHRcdFx0XHRcdFx0XHQvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWRcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFjayggXCJhYm9ydFwiICk7XG5cblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbilcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gIzE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBQcmV2ZW50IGF1dG8tZXhlY3V0aW9uIG9mIHNjcmlwdHMgd2hlbiBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNlZSBnaC0yNDMyKVxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTtcblx0fVxufSApO1xuXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRhY2NlcHRzOiB7XG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgXCIgK1xuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuXHR9LFxuXHRjb250ZW50czoge1xuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXG5cdH0sXG5cdGNvbnZlcnRlcnM6IHtcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHMuY2FjaGUgPSBmYWxzZTtcblx0fVxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy50eXBlID0gXCJHRVRcIjtcblx0fVxufSApO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblxuXHQvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIG9yIGZvcmNlZC1ieS1hdHRycyByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gfHwgcy5zY3JpcHRBdHRycyApIHtcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoIFwiPHNjcmlwdD5cIiApXG5cdFx0XHRcdFx0LmF0dHIoIHMuc2NyaXB0QXR0cnMgfHwge30gKVxuXHRcdFx0XHRcdC5wcm9wKCB7IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwgc3JjOiBzLnVybCB9IClcblx0XHRcdFx0XHQub24oIFwibG9hZCBlcnJvclwiLCBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UuZ3VpZCsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0Ly8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgcmVjdCwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiAoZGlzcGxheTogbm9uZSkgZWxlbWVudHMgKGdoLTIzMTApXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYVxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvclxuXHRcdGlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0XHR9XG5cblx0XHQvLyBHZXQgZG9jdW1lbnQtcmVsYXRpdmUgcG9zaXRpb24gYnkgYWRkaW5nIHZpZXdwb3J0IHNjcm9sbCB0byB2aWV3cG9ydC1yZWxhdGl2ZSBnQkNSXG5cdFx0cmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0d2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LFxuXHRcdFx0bGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0XG5cdFx0fTtcblx0fSxcblxuXHQvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveFxuXHQvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWhhdmlvciBvZiBDU1MgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsIGRvYyxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXG5cdFx0Ly8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXRcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3Rcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdGhlICpyZWFsKiBvZmZzZXQgcGFyZW50LCB3aGljaCBjYW4gYmUgdGhlIGRvY3VtZW50IG9yIGl0cyByb290IGVsZW1lbnRcblx0XHRcdC8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkXG5cdFx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHRvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiZcblx0XHRcdFx0KCBvZmZzZXRQYXJlbnQgPT09IGRvYy5ib2R5IHx8IG9mZnNldFBhcmVudCA9PT0gZG9jLmRvY3VtZW50RWxlbWVudCApICYmXG5cdFx0XHRcdGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIEluY29ycG9yYXRlIGJvcmRlcnMgaW50byBpdHMgb2Zmc2V0LCBzaW5jZSB0aGV5IGFyZSBvdXRzaWRlIGl0cyBjb250ZW50IG9yaWdpblxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXG5cdFx0XHQvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3Ncblx0XHRcdHZhciB3aW47XG5cdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW07XG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0gOS4xLCBDaHJvbWUgPD0zNyAtIDQ5XG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0N1xuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggX2ksIHByb3AgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdFx0Y29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTtcblxuXHRcdFx0XHQvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXRcblx0XHRcdFx0cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID9cblx0XHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyBcInB4XCIgOlxuXHRcdFx0XHRcdGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn0gKTtcblxuXG4vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IEhlaWdodDogXCJoZWlnaHRcIiwgV2lkdGg6IFwid2lkdGhcIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHtcblx0alF1ZXJ5LmVhY2goIHtcblx0XHRwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLFxuXHRcdGNvbnRlbnQ6IHR5cGUsXG5cdFx0XCJcIjogXCJvdXRlclwiICsgbmFtZVxuXHR9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcblxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xuXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBkb2M7XG5cblx0XHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBpbmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSlcblx0XHRcdFx0XHRyZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggXCJvdXRlclwiICkgPT09IDAgP1xuXHRcdFx0XHRcdFx0ZWxlbVsgXCJpbm5lclwiICsgbmFtZSBdIDpcblx0XHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwiYWpheFN0YXJ0XCIsXG5cdFwiYWpheFN0b3BcIixcblx0XCJhamF4Q29tcGxldGVcIixcblx0XCJhamF4RXJyb3JcIixcblx0XCJhamF4U3VjY2Vzc1wiLFxuXHRcImFqYXhTZW5kXCJcbl0sIGZ1bmN0aW9uKCBfaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59ICk7XG5cblxuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH0sXG5cblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKFxuXHQoIFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgXCIgK1xuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXG5cdFx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcblx0XHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHtcblx0XHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XG5cdFx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxuXHRcdFx0XHR0aGlzLnRyaWdnZXIoIG5hbWUgKTtcblx0XHR9O1xuXHR9XG4pO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcbi8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxudmFyIHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5qUXVlcnkudHJpbSA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcIlwiIDpcblx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiXCIgKTtcbn07XG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cblxudmFyXG5cblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LFxuXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF8kID0gd2luZG93LiQ7XG5cbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XG5cdGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cuJCA9IF8kO1xuXHR9XG5cblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnk7XG59O1xuXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxuLy8gKCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KVxuaWYgKCB0eXBlb2Ygbm9HbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTtcbn1cblxuXG5cblxucmV0dXJuIGpRdWVyeTtcbn0gKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBnbGFtO1xuZXhwb3J0cy5oeWRyYXRlID0gaHlkcmF0ZTtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKCdwcm9wLXR5cGVzJyk7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9yZWFjdERvbSA9IHJlcXVpcmUoJ3JlYWN0LWRvbScpO1xuXG52YXIgX0dsYW0gPSByZXF1aXJlKCcuL0dsYW0nKTtcblxudmFyIF9HbGFtMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0dsYW0pO1xuXG52YXIgX3BhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpO1xuXG52YXIgX3BhcnNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BhcnNlKTtcblxudmFyIF9nZW5lcmF0ZSA9IHJlcXVpcmUoJy4vZ2VuZXJhdGUnKTtcblxudmFyIF9nZW5lcmF0ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZW5lcmF0ZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgaXNCcm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG5cbnZhciBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuXG52YXIgbnVsbENsYXNzID0gKDAsIF9wYXJzZTIuZGVmYXVsdCkoe30pLmNsYXNzTmFtZTtcblxuLy8gQHRoZW1lXG52YXIgU3R5bGVkID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN0eWxlZCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3R5bGVkKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdHlsZWQpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX3JlZiA9IFN0eWxlZC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFN0eWxlZCkpLmNhbGwuYXBwbHkoX3JlZiwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLmdsYW0gPSBfdGhpcy5jb250ZXh0LmdsYW0gfHwgbmV3IF9HbGFtMi5kZWZhdWx0KGlzQnJvd3NlciA/IHsgZG9jdW1lbnQ6IGRvY3VtZW50IH0gOiB1bmRlZmluZWQpLCBfdGVtcCksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdHlsZWQsIFt7XG4gICAga2V5OiAnZ2V0Q2hpbGRDb250ZXh0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2xhbTogdGhpcy5nbGFtXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5mbHVzaCkge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBjc3MgPSB0aGlzLnByb3BzLmNzcztcblxuICAgICAgLy8gY2hlY2sgcGFyc2UgY2FjaGVcbiAgICAgIC8vIGVsc2VcblxuICAgICAgdmFyIGFzdCA9ICgwLCBfcGFyc2UyLmRlZmF1bHQpKGNzcyk7XG5cbiAgICAgIHZhciBjbHMgPSBhc3QuY2xhc3NOYW1lID09PSBudWxsQ2xhc3MgPyAnJyA6IGFzdC5jbGFzc05hbWU7XG5cbiAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5wcm9wcy5yZW5kZXIoY2xzKTtcblxuICAgICAgaWYgKCFpc0Jyb3dzZXIgfHwgaXNCcm93c2VyICYmIGlzSHlkcmF0aW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmdsYW0uaXNUYWdnZWQoYXN0LmNsYXNzTmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdsYW0udGFnKGFzdC5jbGFzc05hbWUpO1xuXG4gICAgICAgIHRoaXMuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5nbGFtLmluc2VydChhc3QpO1xuICAgICAgICB9OyAvLyB5b3UgYWxyZWFkeSBoYXZlIHRoaXMgY29udGVudCB2aWEgYCQoW2RhdGEtZ2xhbT0nJHtjbHN9J10pYFxuICAgICAgICB2YXIgZ2VuZXJhdGVkID0gKDAsIF9nZW5lcmF0ZTIuZGVmYXVsdCkoYXN0KS5qb2luKCcnKTtcblxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVkID8gX3JlYWN0LkNoaWxkcmVuLnRvQXJyYXkoW19yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCdzdHlsZScsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBnZW5lcmF0ZWQgfSB9KSwgZWxlbWVudF0pIDogZWxlbWVudDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2xhbS5pbnNlcnQoYXN0KTtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdHlsZWQ7XG59KF9yZWFjdDIuZGVmYXVsdC5Db21wb25lbnQpO1xuXG5TdHlsZWQuZGlzcGxheU5hbWUgPSAnY3NzJztcblN0eWxlZC5jb250ZXh0VHlwZXMgPSB7XG4gIGdsYW06IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0XG59O1xuU3R5bGVkLmNoaWxkQ29udGV4dFR5cGVzID0ge1xuICBnbGFtOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdFxufTtcbmZ1bmN0aW9uIGdsYW0oVHlwZSwgcHJvcHMpIHtcbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBjaGlsZHJlbiA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBjaGlsZHJlbltfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgfVxuXG4gIHZhciBfcmVmMiA9IHByb3BzIHx8IHt9LFxuICAgICAgY3NzID0gX3JlZjIuY3NzLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgWydjc3MnLCAnY2xhc3NOYW1lJ10pO1xuICAvLyBjbGVhbiBjc3MgP1xuXG5cbiAgaWYgKGNzcykge1xuICAgIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChTdHlsZWQsIHtcbiAgICAgIGNzczogY3NzLFxuICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoY2xzKSB7XG4gICAgICAgIHZhciBhcHBseUNsYXNzID0gY2xhc3NOYW1lID8gY2xzID8gY2xhc3NOYW1lICsgJyAnICsgY2xzIDogY2xhc3NOYW1lIDogY2xzO1xuICAgICAgICByZXR1cm4gX3JlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBbVHlwZSwgYXBwbHlDbGFzcyA/IF9leHRlbmRzKHt9LCByZXN0LCB7IGNsYXNzTmFtZTogYXBwbHlDbGFzcyB9KSA6IHJlc3RdLmNvbmNhdChjaGlsZHJlbikpO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfcmVhY3QuY3JlYXRlRWxlbWVudC5hcHBseSh1bmRlZmluZWQsIFtUeXBlLCBwcm9wc10uY29uY2F0KGNoaWxkcmVuKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaHlkcmF0ZShlbGVtZW50LCBkb20sIGNhbGxiYWNrKSB7XG4gIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgKDAsIF9yZWFjdERvbS5oeWRyYXRlKShlbGVtZW50LCBkb20sIGZ1bmN0aW9uICgpIHtcbiAgICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gIH0pO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoUmVhY3RJcy5pc0VsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsInZhciBkb21Ub1JlYWN0ID0gcmVxdWlyZSgnLi9saWIvZG9tLXRvLXJlYWN0Jyk7XG52YXIgYXR0cmlidXRlc1RvUHJvcHMgPSByZXF1aXJlKCcuL2xpYi9hdHRyaWJ1dGVzLXRvLXByb3BzJyk7XG52YXIgaHRtbFRvRE9NID0gcmVxdWlyZSgnaHRtbC1kb20tcGFyc2VyJyk7XG5cbi8vIHN1cHBvcnQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIEVTIE1vZHVsZVxuaHRtbFRvRE9NID1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgdHlwZW9mIGh0bWxUb0RPTS5kZWZhdWx0ID09PSAnZnVuY3Rpb24nID8gaHRtbFRvRE9NLmRlZmF1bHQgOiBodG1sVG9ET007XG5cbnZhciBkb21QYXJzZXJPcHRpb25zID0geyBsb3dlckNhc2VBdHRyaWJ1dGVOYW1lczogZmFsc2UgfTtcblxuLyoqXG4gKiBDb252ZXJ0cyBIVE1MIHN0cmluZyB0byBSZWFjdCBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9ICAgaHRtbCAgICAgICAgICAgICAgICAgICAgLSBIVE1MIHN0cmluZy5cbiAqIEBwYXJhbSAge09iamVjdH0gICBbb3B0aW9uc10gICAgICAgICAgICAgICAtIFBhcnNlciBvcHRpb25zLlxuICogQHBhcmFtICB7T2JqZWN0fSAgIFtvcHRpb25zLmh0bWxwYXJzZXIyXSAgIC0gaHRtbHBhcnNlcjIgb3B0aW9ucy5cbiAqIEBwYXJhbSAge09iamVjdH0gICBbb3B0aW9ucy5saWJyYXJ5XSAgICAgICAtIExpYnJhcnkgZm9yIFJlYWN0LCBQcmVhY3QsIGV0Yy5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb3B0aW9ucy5yZXBsYWNlXSAgICAgICAtIFJlcGxhY2UgbWV0aG9kLlxuICogQHJldHVybiB7SlNYLkVsZW1lbnR8SlNYLkVsZW1lbnRbXXxTdHJpbmd9IC0gUmVhY3QgZWxlbWVudChzKSwgZW1wdHkgYXJyYXksIG9yIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gSFRNTFJlYWN0UGFyc2VyKGh0bWwsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBodG1sICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuICBpZiAoaHRtbCA9PT0gJycpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHJldHVybiBkb21Ub1JlYWN0KFxuICAgIGh0bWxUb0RPTShodG1sLCBvcHRpb25zLmh0bWxwYXJzZXIyIHx8IGRvbVBhcnNlck9wdGlvbnMpLFxuICAgIG9wdGlvbnNcbiAgKTtcbn1cblxuSFRNTFJlYWN0UGFyc2VyLmRvbVRvUmVhY3QgPSBkb21Ub1JlYWN0O1xuSFRNTFJlYWN0UGFyc2VyLmh0bWxUb0RPTSA9IGh0bWxUb0RPTTtcbkhUTUxSZWFjdFBhcnNlci5hdHRyaWJ1dGVzVG9Qcm9wcyA9IGF0dHJpYnV0ZXNUb1Byb3BzO1xuSFRNTFJlYWN0UGFyc2VyLkVsZW1lbnQgPSByZXF1aXJlKCdkb21oYW5kbGVyL2xpYi9ub2RlJykuRWxlbWVudDtcblxuLy8gc3VwcG9ydCBDb21tb25KUyBhbmQgRVMgTW9kdWxlc1xubW9kdWxlLmV4cG9ydHMgPSBIVE1MUmVhY3RQYXJzZXI7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gSFRNTFJlYWN0UGFyc2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gaXNQcmVmaXhlZFZhbHVlO1xudmFyIHJlZ2V4ID0gLy13ZWJraXQtfC1tb3otfC1tcy0vO1xuXG5mdW5jdGlvbiBpc1ByZWZpeGVkVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgcmVnZXgudGVzdCh2YWx1ZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfbWl0dCA9IHJlcXVpcmUoJ21pdHQnKTtcblxudmFyIF9taXR0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21pdHQpO1xuXG52YXIgX3RhYmJhYmxlID0gcmVxdWlyZSgndGFiYmFibGUnKTtcblxudmFyIF90YWJiYWJsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90YWJiYWJsZSk7XG5cbnZhciBfYW5pbWF0aW9uQnVzID0gcmVxdWlyZSgnYW5pbWF0aW9uLWJ1cycpO1xuXG52YXIgX2FuaW1hdGlvbkJ1czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hbmltYXRpb25CdXMpO1xuXG52YXIgX3Jlc2l6ZU9ic2VydmVyUG9seWZpbGwgPSByZXF1aXJlKCdyZXNpemUtb2JzZXJ2ZXItcG9seWZpbGwnKTtcblxudmFyIF9yZXNpemVPYnNlcnZlclBvbHlmaWxsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Jlc2l6ZU9ic2VydmVyUG9seWZpbGwpO1xuXG52YXIgX1BhZ2VyRWxlbWVudDMgPSByZXF1aXJlKCcuL1BhZ2VyRWxlbWVudCcpO1xuXG52YXIgX1BhZ2VyRWxlbWVudDQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9QYWdlckVsZW1lbnQzKTtcblxudmFyIF91dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBUUkFOU0ZPUk0gPSByZXF1aXJlKCdnZXQtcHJlZml4JykoJ3RyYW5zZm9ybScpO1xudmFyIGlzV2luZG93RGVmaW5lZCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgVHJhY2sgPSBmdW5jdGlvbiAoX1BhZ2VyRWxlbWVudCkge1xuICBfaW5oZXJpdHMoVHJhY2ssIF9QYWdlckVsZW1lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYWNrKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFjayk7XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFRyYWNrLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVHJhY2spKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUcmFjaywgW3tcbiAgICBrZXk6ICdnZXRTdHlsZXMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdHlsZXModHJhY2tQb3NpdGlvbikge1xuICAgICAgdmFyIF9wYWdlciRnZXRQb3NpdGlvblZhbCA9IHRoaXMucGFnZXIuZ2V0UG9zaXRpb25WYWx1ZSh0cmFja1Bvc2l0aW9uKSxcbiAgICAgICAgICB4ID0gX3BhZ2VyJGdldFBvc2l0aW9uVmFsLngsXG4gICAgICAgICAgeSA9IF9wYWdlciRnZXRQb3NpdGlvblZhbC55O1xuXG4gICAgICB2YXIgdHJhY2tTaXplID0gdGhpcy5wYWdlci5nZXRUcmFja1NpemUoKTtcbiAgICAgIHZhciBzdHlsZSA9IF9kZWZpbmVQcm9wZXJ0eSh7fSwgVFJBTlNGT1JNLCAndHJhbnNsYXRlM2QoJyArIHggKyAncHgsICcgKyB5ICsgJ3B4LCAwKScpO1xuXG4gICAgICBpZiAodHJhY2tTaXplKSB7XG4gICAgICAgIHZhciBfcGFnZXIkb3B0aW9ucyA9IHRoaXMucGFnZXIub3B0aW9ucyxcbiAgICAgICAgICAgIGF4aXMgPSBfcGFnZXIkb3B0aW9ucy5heGlzLFxuICAgICAgICAgICAgdmlld3NUb1Nob3cgPSBfcGFnZXIkb3B0aW9ucy52aWV3c1RvU2hvdztcblxuICAgICAgICB2YXIgZGltZW5zaW9uID0gYXhpcyA9PT0gJ3gnID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuXG4gICAgICAgIHN0eWxlW2RpbWVuc2lvbl0gPSB2aWV3c1RvU2hvdyA9PT0gJ2F1dG8nID8gdHJhY2tTaXplIDogdGhpcy5wYWdlci52aWV3cy5sZW5ndGggLyB2aWV3c1RvU2hvdyAqIDEwMCArICclJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUcmFjaztcbn0oX1BhZ2VyRWxlbWVudDQuZGVmYXVsdCk7XG5cbnZhciBWaWV3ID0gZnVuY3Rpb24gKF9QYWdlckVsZW1lbnQyKSB7XG4gIF9pbmhlcml0cyhWaWV3LCBfUGFnZXJFbGVtZW50Mik7XG5cbiAgZnVuY3Rpb24gVmlldyhfcmVmKSB7XG4gICAgdmFyIGluZGV4ID0gX3JlZi5pbmRleCxcbiAgICAgICAgcmVzdE9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydpbmRleCddKTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBWaWV3KTtcblxuICAgIHZhciBfdGhpczIgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoVmlldy5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFZpZXcpKS5jYWxsKHRoaXMsIHJlc3RPcHRpb25zKSk7XG5cbiAgICBfdGhpczIuaW5kZXggPSBpbmRleDtcbiAgICBfdGhpczIuaW5Cb3VuZHMgPSB0cnVlO1xuICAgIF90aGlzMi50YWJiYWJsZUNoaWxkcmVuID0gW107XG4gICAgX3RoaXMyLnNldEN1cnJlbnQoZmFsc2UpO1xuICAgIF90aGlzMi5zZXRWaXNpYmxlKGZhbHNlKTtcbiAgICBfdGhpczIuc2V0VGFyZ2V0KCk7XG4gICAgX3RoaXMyLnNldE9yaWdpbigpO1xuXG4gICAgLy8gVE9ETzogbG9vayBpbnRvIGdldHRpbmcgcmlkIG9mIHNldFRpbWVvdXRcbiAgICAvLyBub3Qgc3VyZSB0aGUgcmVhc29uIGZvciBuZWVkaW5nIHNldFRpbWVvdXQgaW4gb3JkZXIgdG8gZ2V0IHByb3BlciBjaGlsZHJlbixcbiAgICAvLyBtaWdodCBiZSBkdWUgdG8gc29tZXRoaW5nIGluIFJlYWN0IHRoYXQgd2UncmUgbm90IGRvaW5nIGF0IHRoZSByaWdodCB0aW1lXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIudGFiYmFibGVDaGlsZHJlbiA9ICgwLCBfdGFiYmFibGUyLmRlZmF1bHQpKF90aGlzMi5ub2RlKTtcbiAgICAgIF90aGlzMi5zZXRUYWJiYWJsZUNoaWxkcmVuKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzMjtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhWaWV3LCBbe1xuICAgIGtleTogJ3NldEN1cnJlbnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRDdXJyZW50KGlzQ3VycmVudCkge1xuICAgICAgdGhpcy5pc0N1cnJlbnQgPSBpc0N1cnJlbnQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc2V0VmlzaWJsZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFZpc2libGUoaXNWaXNpYmxlKSB7XG4gICAgICB0aGlzLmlzVmlzaWJsZSA9IGlzVmlzaWJsZTtcbiAgICAgIHRoaXMuc2V0VGFiYmFibGVDaGlsZHJlbigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3NldFRhYmJhYmxlQ2hpbGRyZW4nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRUYWJiYWJsZUNoaWxkcmVuKCkge1xuICAgICAgLy8gb25seSBhbGxvdyB0YWJiaW5nIGluIGN1cnJlbnQgc2xpZGVzXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGFiYmFibGVDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLnRhYmJhYmxlQ2hpbGRyZW5baV0udGFiSW5kZXggPSB0aGlzLmlzQ3VycmVudCA/IDAgOiAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRUYXJnZXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRUYXJnZXQoKSB7XG4gICAgICB2YXIgX3BhZ2VyJG9wdGlvbnMyID0gdGhpcy5wYWdlci5vcHRpb25zLFxuICAgICAgICAgIGFsaWduID0gX3BhZ2VyJG9wdGlvbnMyLmFsaWduLFxuICAgICAgICAgIHZpZXdzVG9TaG93ID0gX3BhZ2VyJG9wdGlvbnMyLnZpZXdzVG9TaG93O1xuXG4gICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5wYWdlci5nZXRTdGFydENvb3Jkcyh0aGlzLmluZGV4KTtcblxuICAgICAgaWYgKGFsaWduKSB7XG4gICAgICAgIHRhcmdldCArPSB0aGlzLnBhZ2VyLmdldEFsaWduT2Zmc2V0KHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRPcmlnaW4nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRPcmlnaW4oKSB7XG4gICAgICB2YXIgdHJhY2tQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdGhpcy5wYWdlci50cmFja1Bvc2l0aW9uO1xuXG4gICAgICB0aGlzLm9yaWdpbiA9IHRoaXMudGFyZ2V0IC0gdHJhY2tQb3NpdGlvbjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRTdHlsZXMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdHlsZXMoKSB7XG4gICAgICB2YXIgX3BhZ2VyJG9wdGlvbnMzID0gdGhpcy5wYWdlci5vcHRpb25zLFxuICAgICAgICAgIGF4aXMgPSBfcGFnZXIkb3B0aW9uczMuYXhpcyxcbiAgICAgICAgICB2aWV3c1RvU2hvdyA9IF9wYWdlciRvcHRpb25zMy52aWV3c1RvU2hvdyxcbiAgICAgICAgICBpbmZpbml0ZSA9IF9wYWdlciRvcHRpb25zMy5pbmZpbml0ZTtcblxuICAgICAgdmFyIHN0eWxlID0ge307XG5cbiAgICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gdmlld3MgaW5saW5lIHdoZW4gdXNpbmcgdGhlIHggYXhpc1xuICAgICAgaWYgKGF4aXMgPT09ICd4Jykge1xuICAgICAgICBzdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICAgIHN0eWxlLnZlcnRpY2FsQWxpZ24gPSAndG9wJztcbiAgICAgIH1cblxuICAgICAgLy8gc2V0IHdpZHRoIG9yIGhlaWdodCBvbiB2aWV3IHdoZW4gdmlld3NUb1Nob3cgaXMgbm90IGF1dG9cbiAgICAgIGlmICh2aWV3c1RvU2hvdyAhPT0gJ2F1dG8nKSB7XG4gICAgICAgIHN0eWxlW2F4aXMgPT09ICd4JyA/ICd3aWR0aCcgOiAnaGVpZ2h0J10gPSAxMDAgLyB0aGlzLnBhZ2VyLnZpZXdzLmxlbmd0aCArICclJztcbiAgICAgIH1cblxuICAgICAgLy8gbWFrZSBzdXJlIHZpZXcgc3RheXMgaW4gZnJhbWUgd2hlbiB1c2luZyBpbmZpbml0ZSBvcHRpb25cbiAgICAgIGlmIChpbmZpbml0ZSAmJiAhdGhpcy5pbkJvdW5kcykge1xuICAgICAgICBzdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgICAgIHN0eWxlW2F4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnXSA9IHRoaXMuZ2V0UG9zaXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgLy8gZmluYWxseSwgYXBwbHkgYW55IGFuaW1hdGlvbnNcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3R5bGUsIHRoaXMucGFnZXIuYW5pbWF0aW9uQnVzLmdldFN0eWxlcyh0aGlzKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFZpZXc7XG59KF9QYWdlckVsZW1lbnQ0LmRlZmF1bHQpO1xuXG52YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIHZpZXdzVG9TaG93OiAxLFxuICB2aWV3c1RvTW92ZTogMSxcbiAgYWxpZ246IDAsXG4gIGNvbnRhaW46IGZhbHNlLFxuICBheGlzOiAneCcsXG4gIGF1dG9TaXplOiBmYWxzZSxcbiAgYW5pbWF0aW9uczogW10sXG4gIGluZmluaXRlOiBmYWxzZSxcbiAgaW5zdGFudDogZmFsc2UsXG4gIHN3aXBlOiB0cnVlLFxuICBzd2lwZVRocmVzaG9sZDogMC41LFxuICBmbGlja1RpbWVvdXQ6IDMwMCxcbiAgYWNjZXNzaWJpbGl0eTogdHJ1ZVxufTtcblxudmFyIFBhZ2VyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQYWdlcigpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQYWdlcik7XG5cbiAgICB0aGlzLmh5ZHJhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMuZnJhbWUuc2V0U2l6ZSgpO1xuICAgICAgX3RoaXMzLnRyYWNrLnNldFNpemUoKTtcbiAgICAgIF90aGlzMy52aWV3cy5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIHZpZXcuc2V0U2l6ZSgpO1xuICAgICAgICB2aWV3LnNldFRhcmdldCgpO1xuICAgICAgfSk7XG4gICAgICBfdGhpczMuc2V0UG9zaXRpb25WYWx1ZSgpO1xuICAgICAgX3RoaXMzLnNldFZpZXdTdHlsZXMoKTtcbiAgICAgIF90aGlzMy5lbWl0KCdoeWRyYXRlZCcpO1xuICAgIH07XG5cbiAgICB2YXIgZW1pdHRlciA9ICgwLCBfbWl0dDIuZGVmYXVsdCkoKTtcblxuICAgIHRoaXMub24gPSBlbWl0dGVyLm9uO1xuICAgIHRoaXMuZW1pdCA9IGVtaXR0ZXIuZW1pdDtcbiAgICB0aGlzLm9mZiA9IGVtaXR0ZXIub2ZmO1xuXG4gICAgdGhpcy52aWV3cyA9IFtdO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRWaWV3ID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRUd2VlbiA9IDA7XG4gICAgdGhpcy50cmFja1Bvc2l0aW9uID0gMDtcbiAgICB0aGlzLmlzU3dpcGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcblxuICAgIHRoaXMuYW5pbWF0aW9uQnVzID0gbmV3IF9hbmltYXRpb25CdXMyLmRlZmF1bHQoe1xuICAgICAgYW5pbWF0aW9uczogdGhpcy5vcHRpb25zLmFuaW1hdGlvbnMsXG4gICAgICBvcmlnaW46IGZ1bmN0aW9uIG9yaWdpbih2aWV3KSB7XG4gICAgICAgIHJldHVybiB2aWV3Lm9yaWdpbjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChpc1dpbmRvd0RlZmluZWQpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgX3Jlc2l6ZU9ic2VydmVyUG9seWZpbGwyLmRlZmF1bHQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMuaHlkcmF0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBhZ2VyLCBbe1xuICAgIGtleTogJ3NldE9wdGlvbnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIHZhciBsYXN0T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgICAgLy8gc3ByZWFkIG5ldyBvcHRpb25zIG92ZXIgdGhlIG9sZCBvbmVzXG4gICAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgLy8gbWVyZ2UgYW5pbWF0aW9ucyBpbnRvIGFuaW1hdGlvbiBidXNcbiAgICAgIHRoaXMuYW5pbWF0aW9uQnVzLmFuaW1hdGlvbnMgPSB0aGlzLm9wdGlvbnMuYW5pbWF0aW9ucztcblxuICAgICAgLy8gZmlyZSBhIHZpZXdDaGFuZ2UgZXZlbnQgd2l0aCB0aGUgbmV3IGluZGljaWVzIGlmIHZpZXdzVG9TaG93IGhhcyBjaGFuZ2VkXG4gICAgICBpZiAobGFzdE9wdGlvbnMudmlld3NUb1Nob3cgIT09IHRoaXMub3B0aW9ucy52aWV3c1RvU2hvdykge1xuICAgICAgICB0aGlzLmVtaXQoJ3ZpZXdDaGFuZ2UnLCB0aGlzLmdldEN1cnJlbnRJbmRpY2llcygpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdhZGRGcmFtZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZEZyYW1lKG5vZGUpIHtcbiAgICAgIHRoaXMuZnJhbWUgPSBuZXcgX1BhZ2VyRWxlbWVudDQuZGVmYXVsdCh7XG4gICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgIHBhZ2VyOiB0aGlzXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdhZGRUcmFjaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFRyYWNrKG5vZGUpIHtcbiAgICAgIHRoaXMudHJhY2sgPSBuZXcgVHJhY2soe1xuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICBwYWdlcjogdGhpc1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnYWRkVmlldycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFZpZXcobm9kZSkge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy52aWV3cy5sZW5ndGg7XG4gICAgICB2YXIgdmlldyA9IG5ldyBWaWV3KHtcbiAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBwYWdlcjogdGhpc1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGFkZCB2aWV3IHRvIGNvbGxlY3Rpb25cbiAgICAgIHRoaXMudmlld3MucHVzaCh2aWV3KTtcblxuICAgICAgLy8gc2V0IHRoaXMgYXMgdGhlIGZpcnN0IHZpZXcgaWYgdGhlcmUgaXNuJ3Qgb25lIHlldFxuICAgICAgaWYgKCF0aGlzLmN1cnJlbnRWaWV3KSB7XG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFZpZXcoe1xuICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICBzdXBwcmVzc0V2ZW50OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBsaXN0ZW4gZm9yIHdpZHRoIGFuZCBoZWlnaHQgY2hhbmdlc1xuICAgICAgaWYgKGlzV2luZG93RGVmaW5lZCkge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUobm9kZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGZpcmUgYW4gZXZlbnRcbiAgICAgIHRoaXMuZW1pdCgndmlld0FkZGVkJyk7XG5cbiAgICAgIHJldHVybiB2aWV3O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbW92ZVZpZXcnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVWaWV3KHZpZXcpIHtcbiAgICAgIC8vIGZpbHRlciBvdXQgdmlld1xuICAgICAgdGhpcy52aWV3cyA9IHRoaXMudmlld3MuZmlsdGVyKGZ1bmN0aW9uIChfdmlldykge1xuICAgICAgICByZXR1cm4gdmlldyAhPT0gX3ZpZXc7XG4gICAgICB9KTtcblxuICAgICAgLy8gc3RvcCBvYnNlcnZpbmcgbm9kZVxuICAgICAgaWYgKGlzV2luZG93RGVmaW5lZCkge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3Qodmlldy5ub2RlKTtcbiAgICAgIH1cblxuICAgICAgLy8gZmlyZSBhbiBldmVudFxuICAgICAgdGhpcy5lbWl0KCd2aWV3UmVtb3ZlZCcpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3ByZXYnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwcmV2KCkge1xuICAgICAgdGhpcy5zZXRDdXJyZW50Vmlldyh7IGRpcmVjdGlvbjogLTEgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnbmV4dCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB0aGlzLnNldEN1cnJlbnRWaWV3KHsgZGlyZWN0aW9uOiAxIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3NldEN1cnJlbnRWaWV3JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0Q3VycmVudFZpZXcoX3JlZjIpIHtcbiAgICAgIHZhciBfcmVmMiRkaXJlY3Rpb24gPSBfcmVmMi5kaXJlY3Rpb24sXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3JlZjIkZGlyZWN0aW9uID09PSB1bmRlZmluZWQgPyAwIDogX3JlZjIkZGlyZWN0aW9uLFxuICAgICAgICAgIF9yZWYyJGluZGV4ID0gX3JlZjIuaW5kZXgsXG4gICAgICAgICAgaW5kZXggPSBfcmVmMiRpbmRleCA9PT0gdW5kZWZpbmVkID8gdGhpcy5jdXJyZW50SW5kZXggOiBfcmVmMiRpbmRleCxcbiAgICAgICAgICBfcmVmMiRzdXBwcmVzc0V2ZW50ID0gX3JlZjIuc3VwcHJlc3NFdmVudCxcbiAgICAgICAgICBzdXBwcmVzc0V2ZW50ID0gX3JlZjIkc3VwcHJlc3NFdmVudCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfcmVmMiRzdXBwcmVzc0V2ZW50O1xuICAgICAgdmFyIF9vcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICAgIHZpZXdzVG9Nb3ZlID0gX29wdGlvbnMudmlld3NUb01vdmUsXG4gICAgICAgICAgaW5maW5pdGUgPSBfb3B0aW9ucy5pbmZpbml0ZTtcblxuICAgICAgdmFyIG5ld0luZGV4ID0gaW5kZXggKyBkaXJlY3Rpb24gKiB2aWV3c1RvTW92ZTtcblxuICAgICAgdmFyIHByZXZpb3VzSW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleDtcbiAgICAgIHZhciBjdXJyZW50SW5kZXggPSBpbmZpbml0ZSA/IG5ld0luZGV4IDogKDAsIF91dGlscy5jbGFtcCkobmV3SW5kZXgsIDAsIHRoaXMudmlld3MubGVuZ3RoIC0gMSk7XG5cbiAgICAgIHZhciBwcmV2aW91c1ZpZXcgPSB0aGlzLmdldFZpZXcocHJldmlvdXNJbmRleCk7XG4gICAgICB2YXIgY3VycmVudFZpZXcgPSB0aGlzLmdldFZpZXcoY3VycmVudEluZGV4KTtcblxuICAgICAgLy8gc2V0IGN1cnJlbnQgaW5kZXggYW5kIHZpZXdcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gY3VycmVudEluZGV4O1xuICAgICAgdGhpcy5jdXJyZW50VmlldyA9IGN1cnJlbnRWaWV3O1xuXG4gICAgICAvLyBzd2FwIGN1cnJlbnQgdmlldyBmbGFnc1xuICAgICAgcHJldmlvdXNWaWV3LnNldEN1cnJlbnQoZmFsc2UpO1xuICAgICAgY3VycmVudFZpZXcuc2V0Q3VycmVudCh0cnVlKTtcblxuICAgICAgdmFyIHJhbmdlU3RhcnQgPSBjdXJyZW50SW5kZXg7XG4gICAgICB2YXIgcmFuZ2VFbmQgPSBjdXJyZW50SW5kZXggKyB2aWV3c1RvTW92ZSAtIDE7XG4gICAgICB2YXIgdmlld1JhbmdlID0gKDAsIF91dGlscy5yYW5nZSkocmFuZ2VTdGFydCwgcmFuZ2VFbmQsIHRoaXMudmlld3MubGVuZ3RoKTtcblxuICAgICAgLy8gc2V0IGZsYWdzIGZvciB3aGljaCB2aWV3cyBhcmUgY3VycmVudGx5IHNob3dpbmdcbiAgICAgIHRoaXMudmlld3MuZm9yRWFjaChmdW5jdGlvbiAodmlldywgaW5kZXgpIHtcbiAgICAgICAgdmlldy5zZXRWaXNpYmxlKGluZGV4ID09PSBjdXJyZW50SW5kZXgpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIHNldCB0aGUgdHJhY2sgcG9zaXRpb24gdG8gdGhlIG5ldyB2aWV3XG4gICAgICB0aGlzLnNldFBvc2l0aW9uVmFsdWUoKTtcblxuICAgICAgaWYgKCFzdXBwcmVzc0V2ZW50KSB7XG4gICAgICAgIHRoaXMuZW1pdCgndmlld0NoYW5nZScsIHRoaXMuZ2V0Q3VycmVudEluZGljaWVzKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3NldFBvc2l0aW9uVmFsdWUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRQb3NpdGlvblZhbHVlKCkge1xuICAgICAgdmFyIHRyYWNrUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRoaXMuY3VycmVudFZpZXcgPyB0aGlzLmN1cnJlbnRWaWV3LnRhcmdldCA6IDA7XG5cbiAgICAgIGlmICghdGhpcy5pc1N3aXBpbmcpIHtcbiAgICAgICAgdmFyIF9vcHRpb25zMiA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgIHZpZXdzVG9TaG93ID0gX29wdGlvbnMyLnZpZXdzVG9TaG93LFxuICAgICAgICAgICAgYXV0b1NpemUgPSBfb3B0aW9uczIuYXV0b1NpemUsXG4gICAgICAgICAgICBpbmZpbml0ZSA9IF9vcHRpb25zMi5pbmZpbml0ZSxcbiAgICAgICAgICAgIGNvbnRhaW4gPSBfb3B0aW9uczIuY29udGFpbjtcblxuICAgICAgICB2YXIgdHJhY2tTaXplID0gdGhpcy5nZXRUcmFja1NpemUoKTtcblxuICAgICAgICBpZiAoaW5maW5pdGUpIHtcbiAgICAgICAgICAvLyB3ZSBvZmZzZXQgYnkgYSB0cmFjayBtdWx0aXBsaWVyIHNvIGluZmluaXRlIGFuaW1hdGlvbiBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2ZcbiAgICAgICAgICAvLyBwaHlzaWNzIGJ5IGFuaW1hdGluZyB0byBhIGxhcmdlIHZhbHVlLCB0aGUgZmluYWwgdmFsdWUgcHJvdmlkZWQgaW4gZ2V0VHJhbnNmb3JtVmFsdWVcbiAgICAgICAgICAvLyB3aWxsIHJldHVybiB0aGUgcHJvcGVyIHdyYXBwZWQgdmFsdWVcbiAgICAgICAgICB0cmFja1Bvc2l0aW9uIC09IChNYXRoLmZsb29yKHRoaXMuY3VycmVudEluZGV4IC8gdGhpcy52aWV3cy5sZW5ndGgpIHx8IDApICogdHJhY2tTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRhaW4pIHtcbiAgICAgICAgICB2YXIgdHJhY2tFbmRPZmZzZXQgPSB2aWV3c1RvU2hvdyA9PT0gJ2F1dG8nICYmIGF1dG9TaXplIHx8IHZpZXdzVG9TaG93IDw9IDEgPyAwIDogdGhpcy5nZXRGcmFtZVNpemUoeyBhdXRvU2l6ZTogZmFsc2UgfSk7XG4gICAgICAgICAgdHJhY2tQb3NpdGlvbiA9ICgwLCBfdXRpbHMuY2xhbXApKHRyYWNrUG9zaXRpb24sIHRyYWNrRW5kT2Zmc2V0IC0gdHJhY2tTaXplLCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRyYWNrUG9zaXRpb24gPSB0cmFja1Bvc2l0aW9uO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3NldFZpZXdTdHlsZXMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRWaWV3U3R5bGVzKCkge1xuICAgICAgdmFyIHRyYWNrUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IDA7XG4gICAgICB2YXIgX29wdGlvbnMzID0gdGhpcy5vcHRpb25zLFxuICAgICAgICAgIGluZmluaXRlID0gX29wdGlvbnMzLmluZmluaXRlLFxuICAgICAgICAgIGFsaWduID0gX29wdGlvbnMzLmFsaWduO1xuXG4gICAgICB2YXIgZnJhbWVTaXplID0gdGhpcy5nZXRGcmFtZVNpemUoKTtcbiAgICAgIHZhciB0cmFja1NpemUgPSB0aGlzLmdldFRyYWNrU2l6ZSgpO1xuICAgICAgdmFyIHdyYXBwZWR0cmFja1Bvc2l0aW9uID0gKDAsIF91dGlscy5tb2R1bG8pKHRyYWNrUG9zaXRpb24sIC10cmFja1NpemUpO1xuXG4gICAgICB0aGlzLnZpZXdzLnJlZHVjZShmdW5jdGlvbiAobGFzdFBvc2l0aW9uLCB2aWV3LCBpbmRleCkge1xuICAgICAgICB2YXIgdmlld1NpemUgPSB2aWV3LmdldFNpemUoKTtcbiAgICAgICAgdmFyIG5leHRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbiArIHZpZXdTaXplO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBsYXN0UG9zaXRpb247XG5cbiAgICAgICAgaWYgKG5leHRQb3NpdGlvbiArIHZpZXdTaXplICogYWxpZ24gPCBNYXRoLmFicyh3cmFwcGVkdHJhY2tQb3NpdGlvbikpIHtcbiAgICAgICAgICAvLyBzaGlmdCB2aWV3cyBhcm91bmQgc28gdGhleSBhcmUgYWx3YXlzIHZpc2libGUgaW4gZnJhbWVcbiAgICAgICAgICBpZiAoaW5maW5pdGUpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uICs9IHRyYWNrU2l6ZSAtIGxhc3RQb3NpdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmlldy5pbkJvdW5kcyA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXcuaW5Cb3VuZHMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmlldy5zZXRQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgICAgIHZpZXcuc2V0T3JpZ2luKHRyYWNrUG9zaXRpb24pO1xuXG4gICAgICAgIHJldHVybiBuZXh0UG9zaXRpb247XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXROdW1lcmljVmlld3NUb1Nob3cnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXROdW1lcmljVmlld3NUb1Nob3coKSB7XG4gICAgICByZXR1cm4gaXNOYU4odGhpcy5vcHRpb25zLnZpZXdzVG9TaG93KSA/IDEgOiB0aGlzLm9wdGlvbnMudmlld3NUb1Nob3c7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0TWF4RGltZW5zaW9ucycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE1heERpbWVuc2lvbnMoaW5kaWNlcykge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBheGlzID0gdGhpcy5vcHRpb25zLmF4aXM7XG5cbiAgICAgIHZhciB3aWR0aHMgPSBbXTtcbiAgICAgIHZhciBoZWlnaHRzID0gW107XG5cbiAgICAgIGluZGljZXMuZm9yRWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgdmFyIHZpZXcgPSBpc05hTihpbmRleCkgPyBpbmRleCA6IF90aGlzNC5nZXRWaWV3KGluZGV4KTtcbiAgICAgICAgd2lkdGhzLnB1c2godmlldy5nZXRTaXplKCd3aWR0aCcpKTtcbiAgICAgICAgaGVpZ2h0cy5wdXNoKHZpZXcuZ2V0U2l6ZSgnaGVpZ2h0JykpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiBheGlzID09PSAneCcgPyAoMCwgX3V0aWxzLnN1bSkod2lkdGhzKSA6ICgwLCBfdXRpbHMubWF4KSh3aWR0aHMpLFxuICAgICAgICBoZWlnaHQ6IGF4aXMgPT09ICd5JyA/ICgwLCBfdXRpbHMuc3VtKShoZWlnaHRzKSA6ICgwLCBfdXRpbHMubWF4KShoZWlnaHRzKVxuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRDdXJyZW50SW5kaWNpZXMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDdXJyZW50SW5kaWNpZXMoKSB7XG4gICAgICB2YXIgX29wdGlvbnM0ID0gdGhpcy5vcHRpb25zLFxuICAgICAgICAgIGluZmluaXRlID0gX29wdGlvbnM0LmluZmluaXRlLFxuICAgICAgICAgIGNvbnRhaW4gPSBfb3B0aW9uczQuY29udGFpbjtcblxuICAgICAgdmFyIGN1cnJlbnRWaWV3cyA9IFtdO1xuICAgICAgdmFyIHZpZXdzVG9TaG93ID0gaXNOYU4odGhpcy5vcHRpb25zLnZpZXdzVG9TaG93KSA/IDEgOiB0aGlzLm9wdGlvbnMudmlld3NUb1Nob3c7XG4gICAgICB2YXIgbWluSW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleDtcbiAgICAgIHZhciBtYXhJbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICsgKHZpZXdzVG9TaG93IC0gMSk7XG5cbiAgICAgIGlmIChjb250YWluKSB7XG4gICAgICAgIC8vIGlmIGNvbnRhaW5pbmcsIHdlIG5lZWQgdG8gY2xhbXAgdGhlIHN0YXJ0IGFuZCBlbmQgaW5kZXhlcyBzbyB3ZSBvbmx5IHJldHVybiB3aGF0J3MgaW4gdmlld1xuICAgICAgICBtaW5JbmRleCA9ICgwLCBfdXRpbHMuY2xhbXApKG1pbkluZGV4LCAwLCB0aGlzLnZpZXdzLmxlbmd0aCAtIHZpZXdzVG9TaG93KTtcbiAgICAgICAgbWF4SW5kZXggPSAoMCwgX3V0aWxzLmNsYW1wKShtYXhJbmRleCwgMCwgdGhpcy52aWV3cy5sZW5ndGggLSAxKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IG1pbkluZGV4OyBpIDw9IG1heEluZGV4OyBpKyspIHtcbiAgICAgICAgICBjdXJyZW50Vmlld3MucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgX2kgPSBtaW5JbmRleDsgX2kgPD0gbWF4SW5kZXg7IF9pKyspIHtcbiAgICAgICAgICBjdXJyZW50Vmlld3MucHVzaChpbmZpbml0ZSA/ICgwLCBfdXRpbHMubW9kdWxvKShfaSwgdGhpcy52aWV3cy5sZW5ndGgpIDogKDAsIF91dGlscy5jbGFtcCkoX2ksIDAsIHRoaXMudmlld3MubGVuZ3RoIC0gMSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjdXJyZW50Vmlld3M7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0RnJhbWVTaXplJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RnJhbWVTaXplKCkge1xuICAgICAgdmFyIF9yZWYzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgICAgICBfcmVmMyRhdXRvU2l6ZSA9IF9yZWYzLmF1dG9TaXplLFxuICAgICAgICAgIGF1dG9TaXplID0gX3JlZjMkYXV0b1NpemUgPT09IHVuZGVmaW5lZCA/IHRoaXMub3B0aW9ucy5hdXRvU2l6ZSA6IF9yZWYzJGF1dG9TaXplLFxuICAgICAgICAgIF9yZWYzJGZ1bGxTaXplID0gX3JlZjMuZnVsbFNpemUsXG4gICAgICAgICAgZnVsbFNpemUgPSBfcmVmMyRmdWxsU2l6ZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfcmVmMyRmdWxsU2l6ZTtcblxuICAgICAgdmFyIGRpbWVuc2lvbnMgPSB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDBcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLnZpZXdzLmxlbmd0aCkge1xuICAgICAgICBpZiAoYXV0b1NpemUpIHtcbiAgICAgICAgICB2YXIgY3VycmVudFZpZXdzID0gdGhpcy5nZXRDdXJyZW50SW5kaWNpZXMoKTtcbiAgICAgICAgICBkaW1lbnNpb25zID0gdGhpcy5nZXRNYXhEaW1lbnNpb25zKGN1cnJlbnRWaWV3cyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5mcmFtZSkge1xuICAgICAgICAgIGRpbWVuc2lvbnMgPSB7XG4gICAgICAgICAgICB3aWR0aDogdGhpcy5mcmFtZS5nZXRTaXplKCd3aWR0aCcpLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmZyYW1lLmdldFNpemUoJ2hlaWdodCcpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZnVsbFNpemUpIHtcbiAgICAgICAgcmV0dXJuIGRpbWVuc2lvbnM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGltZW5zaW9uc1t0aGlzLm9wdGlvbnMuYXhpcyA9PT0gJ3gnID8gJ3dpZHRoJyA6ICdoZWlnaHQnXTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRUcmFja1NpemUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUcmFja1NpemUoKSB7XG4gICAgICB2YXIgaW5jbHVkZUxhc3RTbGlkZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcblxuICAgICAgdmFyIGxhc3RJbmRleCA9IGluY2x1ZGVMYXN0U2xpZGUgPyB0aGlzLnZpZXdzLmxlbmd0aCA6IHRoaXMudmlld3MubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBzaXplID0gMDtcbiAgICAgIHRoaXMudmlld3Muc2xpY2UoMCwgbGFzdEluZGV4KS5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIHNpemUgKz0gdmlldy5nZXRTaXplKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzaXplO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFZpZXcnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWaWV3KGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy52aWV3c1soMCwgX3V0aWxzLm1vZHVsbykoaW5kZXgsIHRoaXMudmlld3MubGVuZ3RoKV07XG4gICAgfVxuXG4gICAgLy8gd2hlcmUgdGhlIHZpZXcgc2hvdWxkIHN0YXJ0XG5cbiAgfSwge1xuICAgIGtleTogJ2dldFN0YXJ0Q29vcmRzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3RhcnRDb29yZHMoaW5kZXgpIHtcbiAgICAgIHZhciB0YXJnZXQgPSAwO1xuICAgICAgdGhpcy52aWV3cy5zbGljZSgwLCBpbmRleCkuZm9yRWFjaChmdW5jdGlvbiAodmlldykge1xuICAgICAgICB0YXJnZXQgLT0gdmlldy5nZXRTaXplKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgLy8gaG93IG11Y2ggdG8gb2Zmc2V0IHRoZSB2aWV3IGRlZmluZWQgYnkgdGhlIGFsaWduIG9wdGlvblxuXG4gIH0sIHtcbiAgICBrZXk6ICdnZXRBbGlnbk9mZnNldCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEFsaWduT2Zmc2V0KHZpZXcpIHtcbiAgICAgIHZhciBmcmFtZVNpemUgPSB0aGlzLmdldEZyYW1lU2l6ZSh7IGF1dG9TaXplOiBmYWxzZSB9KTtcbiAgICAgIHZhciB2aWV3U2l6ZSA9IHZpZXcuZ2V0U2l6ZSgpO1xuICAgICAgcmV0dXJuIChmcmFtZVNpemUgLSB2aWV3U2l6ZSkgKiB0aGlzLm9wdGlvbnMuYWxpZ247XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0UG9zaXRpb25WYWx1ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBvc2l0aW9uVmFsdWUoKSB7XG4gICAgICB2YXIgdHJhY2tQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdGhpcy50cmFja1Bvc2l0aW9uO1xuICAgICAgdmFyIF9vcHRpb25zNSA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgICBpbmZpbml0ZSA9IF9vcHRpb25zNS5pbmZpbml0ZSxcbiAgICAgICAgICBjb250YWluID0gX29wdGlvbnM1LmNvbnRhaW47XG5cbiAgICAgIHZhciBwb3NpdGlvbiA9IHsgeDogMCwgeTogMFxuXG4gICAgICAgIC8vIHN0b3JlIHRoZSBjdXJyZW50IGFuaW1hdGVkIHZhbHVlIHNvIHdlIGNhbiByZWZlcmVuY2UgaXQgbGF0ZXJcbiAgICAgIH07dGhpcy5jdXJyZW50VHdlZW4gPSB0cmFja1Bvc2l0aW9uO1xuXG4gICAgICAvLyB3cmFwIHRoZSB0cmFjayBwb3NpdGlvbiBpZiB0aGlzIGlzIGFuIGluZmluaXRlIHRyYWNrXG4gICAgICBpZiAoaW5maW5pdGUpIHtcbiAgICAgICAgdmFyIHRyYWNrU2l6ZSA9IHRoaXMuZ2V0VHJhY2tTaXplKCk7XG4gICAgICAgIHRyYWNrUG9zaXRpb24gPSAoMCwgX3V0aWxzLm1vZHVsbykodHJhY2tQb3NpdGlvbiwgLXRyYWNrU2l6ZSkgfHwgMDtcbiAgICAgIH1cblxuICAgICAgLy8gZW1pdCBhIFwic2Nyb2xsXCIgZXZlbnQgc28gd2UgY2FuIGRvIHRoaW5ncyBiYXNlZCBvbiB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHRyYWNrXG4gICAgICB0aGlzLmVtaXQoJ3Njcm9sbCcsIHtcbiAgICAgICAgcHJvZ3Jlc3M6IHRyYWNrUG9zaXRpb24gLyB0aGlzLmdldFRyYWNrU2l6ZShmYWxzZSksXG4gICAgICAgIHBvc2l0aW9uOiB0cmFja1Bvc2l0aW9uXG4gICAgICB9KTtcblxuICAgICAgLy8gc2V0IHRoZSBwcm9wZXIgdHJhbnNmb3JtIGF4aXMgYmFzZWQgb24gb3VyIG9wdGlvbnNcbiAgICAgIHBvc2l0aW9uW3RoaXMub3B0aW9ucy5heGlzXSA9IHRyYWNrUG9zaXRpb247XG5cbiAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZXNldFZpZXdJbmRleCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0Vmlld0luZGV4KCkge1xuICAgICAgLy8gcmVzZXQgYmFjayB0byBhIG5vcm1hbCBpbmRleFxuICAgICAgdGhpcy5zZXRDdXJyZW50Vmlldyh7XG4gICAgICAgIGluZGV4OiAoMCwgX3V0aWxzLm1vZHVsbykodGhpcy5jdXJyZW50SW5kZXgsIHRoaXMudmlld3MubGVuZ3RoKSxcbiAgICAgICAgc3VwcHJlc3NFdmVudDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBhZ2VyO1xufSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBQYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudXRpbHMgPSBleHBvcnRzLkFuaW1hdGVkVmlldyA9IGV4cG9ydHMuVmlldyA9IGV4cG9ydHMuVHJhY2sgPSBleHBvcnRzLkZyYW1lID0gZXhwb3J0cy5WaWV3UGFnZXIgPSB1bmRlZmluZWQ7XG5cbnZhciBfVmlld1BhZ2VyMiA9IHJlcXVpcmUoJy4vVmlld1BhZ2VyJyk7XG5cbnZhciBfVmlld1BhZ2VyMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1ZpZXdQYWdlcjIpO1xuXG52YXIgX0ZyYW1lMiA9IHJlcXVpcmUoJy4vRnJhbWUnKTtcblxudmFyIF9GcmFtZTMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9GcmFtZTIpO1xuXG52YXIgX1RyYWNrMiA9IHJlcXVpcmUoJy4vVHJhY2snKTtcblxudmFyIF9UcmFjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9UcmFjazIpO1xuXG52YXIgX1ZpZXcyID0gcmVxdWlyZSgnLi9WaWV3Jyk7XG5cbnZhciBfVmlldzMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9WaWV3Mik7XG5cbnZhciBfQW5pbWF0ZWRWaWV3MiA9IHJlcXVpcmUoJy4vQW5pbWF0ZWRWaWV3Jyk7XG5cbnZhciBfQW5pbWF0ZWRWaWV3MyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0FuaW1hdGVkVmlldzIpO1xuXG52YXIgX3V0aWxzMiA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxudmFyIF91dGlsczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsczIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLlZpZXdQYWdlciA9IF9WaWV3UGFnZXIzLmRlZmF1bHQ7XG5leHBvcnRzLkZyYW1lID0gX0ZyYW1lMy5kZWZhdWx0O1xuZXhwb3J0cy5UcmFjayA9IF9UcmFjazMuZGVmYXVsdDtcbmV4cG9ydHMuVmlldyA9IF9WaWV3My5kZWZhdWx0O1xuZXhwb3J0cy5BbmltYXRlZFZpZXcgPSBfQW5pbWF0ZWRWaWV3My5kZWZhdWx0O1xuZXhwb3J0cy51dGlscyA9IF91dGlsczMuZGVmYXVsdDsiLCJcbi8vIHR1cm4ge3g6IHt2YWw6IDEsIHN0aWZmbmVzczogMSwgZGFtcGluZzogMn0sIHk6IDJ9IGdlbmVyYXRlZCBieVxuLy8gYHt4OiBzcHJpbmcoMSwge3N0aWZmbmVzczogMSwgZGFtcGluZzogMn0pLCB5OiAyfWAgaW50byB7eDogMSwgeTogMn1cblxuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0c1snZGVmYXVsdCddID0gc3RyaXBTdHlsZTtcblxuZnVuY3Rpb24gc3RyaXBTdHlsZShzdHlsZSkge1xuICB2YXIgcmV0ID0ge307XG4gIGZvciAodmFyIGtleSBpbiBzdHlsZSkge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0eWxlLCBrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0W2tleV0gPSB0eXBlb2Ygc3R5bGVba2V5XSA9PT0gJ251bWJlcicgPyBzdHlsZVtrZXldIDogc3R5bGVba2V5XS52YWw7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZHVsbyA9IG1vZHVsbztcbmV4cG9ydHMuY2xhbXAgPSBjbGFtcDtcbmV4cG9ydHMuc3VtID0gc3VtO1xuZXhwb3J0cy5tYXggPSBtYXg7XG5leHBvcnRzLnJhbmdlID0gcmFuZ2U7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxuXG5mdW5jdGlvbiBtb2R1bG8odmFsLCBtYXgpIHtcbiAgcmV0dXJuICh2YWwgJSBtYXggKyBtYXgpICUgbWF4O1xufVxuXG5mdW5jdGlvbiBjbGFtcCh2YWwsIG1pbiwgbWF4KSB7XG4gIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChtaW4sIHZhbCksIG1heCk7XG59XG5cbmZ1bmN0aW9uIHN1bShhcnIpIHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYSArIGI7XG4gIH0sIDApO1xufVxuXG5mdW5jdGlvbiBtYXgoYXJyKSB7XG4gIHJldHVybiBNYXRoLm1heC5hcHBseShudWxsLCBhcnIpO1xufVxuXG5mdW5jdGlvbiByYW5nZShzdGFydCwgZW5kLCBtYXgpIHtcbiAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoQXJyYXkoMSArIGVuZCAtIHN0YXJ0KSkpLm1hcChmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuIG1heCA/IG1vZHVsbyhzdGFydCArIHZhbCwgbWF4KSA6IHN0YXJ0ICsgdmFsO1xuICB9KTtcbn0iLCJcblxuLy8gY3VycmVudGx5IHVzZWQgdG8gaW5pdGlhdGUgdGhlIHZlbG9jaXR5IHN0eWxlIG9iamVjdCB0byAwXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzWydkZWZhdWx0J10gPSBtYXBUb1plcm87XG5cbmZ1bmN0aW9uIG1hcFRvWmVybyhvYmopIHtcbiAgdmFyIHJldCA9IHt9O1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHJldFtrZXldID0gMDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiXG5cbi8vIHN0ZXBwZXIgaXMgdXNlZCBhIGxvdC4gU2F2ZXMgYWxsb2NhdGlvbiB0byByZXR1cm4gdGhlIHNhbWUgYXJyYXkgd3JhcHBlci5cbi8vIFRoaXMgaXMgZmluZSBhbmQgZGFuZ2VyLWZyZWUgYWdhaW5zdCBtdXRhdGlvbnMgYmVjYXVzZSB0aGUgY2FsbHNpdGVcbi8vIGltbWVkaWF0ZWx5IGRlc3RydWN0dXJlcyBpdCBhbmQgZ2V0cyB0aGUgbnVtYmVycyBpbnNpZGUgd2l0aG91dCBwYXNzaW5nIHRoZVxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHN0ZXBwZXI7XG5cbnZhciByZXVzZWRUdXBsZSA9IFswLCAwXTtcblxuZnVuY3Rpb24gc3RlcHBlcihzZWNvbmRQZXJGcmFtZSwgeCwgdiwgZGVzdFgsIGssIGIsIHByZWNpc2lvbikge1xuICAvLyBTcHJpbmcgc3RpZmZuZXNzLCBpbiBrZyAvIHNeMlxuXG4gIC8vIGZvciBhbmltYXRpb25zLCBkZXN0WCBpcyByZWFsbHkgc3ByaW5nIGxlbmd0aCAoc3ByaW5nIGF0IHJlc3QpLiBpbml0aWFsXG4gIC8vIHBvc2l0aW9uIGlzIGNvbnNpZGVyZWQgYXMgdGhlIHN0cmV0Y2hlZC9jb21wcmVzc2VkIHBvc2l0aW9uIG9mIGEgc3ByaW5nXG4gIHZhciBGc3ByaW5nID0gLWsgKiAoeCAtIGRlc3RYKTtcblxuICAvLyBEYW1waW5nLCBpbiBrZyAvIHNcbiAgdmFyIEZkYW1wZXIgPSAtYiAqIHY7XG5cbiAgLy8gdXN1YWxseSB3ZSBwdXQgbWFzcyBoZXJlLCBidXQgZm9yIGFuaW1hdGlvbiBwdXJwb3Nlcywgc3BlY2lmeWluZyBtYXNzIGlzIGFcbiAgLy8gYml0IHJlZHVuZGFudC4geW91IGNvdWxkIHNpbXBseSBhZGp1c3QgayBhbmQgYiBhY2NvcmRpbmdseVxuICAvLyBsZXQgYSA9IChGc3ByaW5nICsgRmRhbXBlcikgLyBtYXNzO1xuICB2YXIgYSA9IEZzcHJpbmcgKyBGZGFtcGVyO1xuXG4gIHZhciBuZXdWID0gdiArIGEgKiBzZWNvbmRQZXJGcmFtZTtcbiAgdmFyIG5ld1ggPSB4ICsgbmV3ViAqIHNlY29uZFBlckZyYW1lO1xuXG4gIGlmIChNYXRoLmFicyhuZXdWKSA8IHByZWNpc2lvbiAmJiBNYXRoLmFicyhuZXdYIC0gZGVzdFgpIDwgcHJlY2lzaW9uKSB7XG4gICAgcmV1c2VkVHVwbGVbMF0gPSBkZXN0WDtcbiAgICByZXVzZWRUdXBsZVsxXSA9IDA7XG4gICAgcmV0dXJuIHJldXNlZFR1cGxlO1xuICB9XG5cbiAgcmV1c2VkVHVwbGVbMF0gPSBuZXdYO1xuICByZXVzZWRUdXBsZVsxXSA9IG5ld1Y7XG4gIHJldHVybiByZXVzZWRUdXBsZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTtcbi8vIGFycmF5IHJlZmVyZW5jZSBhcm91bmQuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjcuMVxuKGZ1bmN0aW9uKCkge1xuICB2YXIgZ2V0TmFub1NlY29uZHMsIGhydGltZSwgbG9hZFRpbWU7XG5cbiAgaWYgKCh0eXBlb2YgcGVyZm9ybWFuY2UgIT09IFwidW5kZWZpbmVkXCIgJiYgcGVyZm9ybWFuY2UgIT09IG51bGwpICYmIHBlcmZvcm1hbmNlLm5vdykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICgodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2VzcyAhPT0gbnVsbCkgJiYgcHJvY2Vzcy5ocnRpbWUpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIChnZXROYW5vU2Vjb25kcygpIC0gbG9hZFRpbWUpIC8gMWU2O1xuICAgIH07XG4gICAgaHJ0aW1lID0gcHJvY2Vzcy5ocnRpbWU7XG4gICAgZ2V0TmFub1NlY29uZHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBocjtcbiAgICAgIGhyID0gaHJ0aW1lKCk7XG4gICAgICByZXR1cm4gaHJbMF0gKiAxZTkgKyBoclsxXTtcbiAgICB9O1xuICAgIGxvYWRUaW1lID0gZ2V0TmFub1NlY29uZHMoKTtcbiAgfSBlbHNlIGlmIChEYXRlLm5vdykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIGxvYWRUaW1lO1xuICAgIH07XG4gICAgbG9hZFRpbWUgPSBEYXRlLm5vdygpO1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBsb2FkVGltZTtcbiAgICB9O1xuICAgIGxvYWRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cblxufSkuY2FsbCh0aGlzKTtcbiIsInZhciBub3cgPSByZXF1aXJlKCdwZXJmb3JtYW5jZS1ub3cnKVxuICAsIHJvb3QgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHdpbmRvd1xuICAsIHZlbmRvcnMgPSBbJ21veicsICd3ZWJraXQnXVxuICAsIHN1ZmZpeCA9ICdBbmltYXRpb25GcmFtZSdcbiAgLCByYWYgPSByb290WydyZXF1ZXN0JyArIHN1ZmZpeF1cbiAgLCBjYWYgPSByb290WydjYW5jZWwnICsgc3VmZml4XSB8fCByb290WydjYW5jZWxSZXF1ZXN0JyArIHN1ZmZpeF1cblxuZm9yKHZhciBpID0gMDsgIXJhZiAmJiBpIDwgdmVuZG9ycy5sZW5ndGg7IGkrKykge1xuICByYWYgPSByb290W3ZlbmRvcnNbaV0gKyAnUmVxdWVzdCcgKyBzdWZmaXhdXG4gIGNhZiA9IHJvb3RbdmVuZG9yc1tpXSArICdDYW5jZWwnICsgc3VmZml4XVxuICAgICAgfHwgcm9vdFt2ZW5kb3JzW2ldICsgJ0NhbmNlbFJlcXVlc3QnICsgc3VmZml4XVxufVxuXG4vLyBTb21lIHZlcnNpb25zIG9mIEZGIGhhdmUgckFGIGJ1dCBub3QgY0FGXG5pZighcmFmIHx8ICFjYWYpIHtcbiAgdmFyIGxhc3QgPSAwXG4gICAgLCBpZCA9IDBcbiAgICAsIHF1ZXVlID0gW11cbiAgICAsIGZyYW1lRHVyYXRpb24gPSAxMDAwIC8gNjBcblxuICByYWYgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgIGlmKHF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdmFyIF9ub3cgPSBub3coKVxuICAgICAgICAsIG5leHQgPSBNYXRoLm1heCgwLCBmcmFtZUR1cmF0aW9uIC0gKF9ub3cgLSBsYXN0KSlcbiAgICAgIGxhc3QgPSBuZXh0ICsgX25vd1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNwID0gcXVldWUuc2xpY2UoMClcbiAgICAgICAgLy8gQ2xlYXIgcXVldWUgaGVyZSB0byBwcmV2ZW50XG4gICAgICAgIC8vIGNhbGxiYWNrcyBmcm9tIGFwcGVuZGluZyBsaXN0ZW5lcnNcbiAgICAgICAgLy8gdG8gdGhlIGN1cnJlbnQgZnJhbWUncyBxdWV1ZVxuICAgICAgICBxdWV1ZS5sZW5ndGggPSAwXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBjcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmKCFjcFtpXS5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgY3BbaV0uY2FsbGJhY2sobGFzdClcbiAgICAgICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0aHJvdyBlIH0sIDApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBNYXRoLnJvdW5kKG5leHQpKVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKHtcbiAgICAgIGhhbmRsZTogKytpZCxcbiAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICAgIGNhbmNlbGxlZDogZmFsc2VcbiAgICB9KVxuICAgIHJldHVybiBpZFxuICB9XG5cbiAgY2FmID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZihxdWV1ZVtpXS5oYW5kbGUgPT09IGhhbmRsZSkge1xuICAgICAgICBxdWV1ZVtpXS5jYW5jZWxsZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZm4pIHtcbiAgLy8gV3JhcCBpbiBhIG5ldyBmdW5jdGlvbiB0byBwcmV2ZW50XG4gIC8vIGBjYW5jZWxgIHBvdGVudGlhbGx5IGJlaW5nIGFzc2lnbmVkXG4gIC8vIHRvIHRoZSBuYXRpdmUgckFGIGZ1bmN0aW9uXG4gIHJldHVybiByYWYuY2FsbChyb290LCBmbilcbn1cbm1vZHVsZS5leHBvcnRzLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICBjYWYuYXBwbHkocm9vdCwgYXJndW1lbnRzKVxufVxubW9kdWxlLmV4cG9ydHMucG9seWZpbGwgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKCFvYmplY3QpIHtcbiAgICBvYmplY3QgPSByb290O1xuICB9XG4gIG9iamVjdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSByYWZcbiAgb2JqZWN0LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gY2FmXG59XG4iLCJcblxuLy8gdXNhZ2UgYXNzdW1wdGlvbjogY3VycmVudFN0eWxlIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlbiByZW5kZXJlZCBidXQgaXQgc2F5c1xuLy8gbm90aGluZyBvZiB3aGV0aGVyIGN1cnJlbnRTdHlsZSBpcyBzdGFsZSAoc2VlIHVucmVhZFByb3BTdHlsZSlcbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHNob3VsZFN0b3BBbmltYXRpb247XG5cbmZ1bmN0aW9uIHNob3VsZFN0b3BBbmltYXRpb24oY3VycmVudFN0eWxlLCBzdHlsZSwgY3VycmVudFZlbG9jaXR5KSB7XG4gIGZvciAodmFyIGtleSBpbiBzdHlsZSkge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0eWxlLCBrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFZlbG9jaXR5W2tleV0gIT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgc3R5bGVWYWx1ZSA9IHR5cGVvZiBzdHlsZVtrZXldID09PSAnbnVtYmVyJyA/IHN0eWxlW2tleV0gOiBzdHlsZVtrZXldLnZhbDtcbiAgICAvLyBzdGVwcGVyIHdpbGwgaGF2ZSBhbHJlYWR5IHRha2VuIGNhcmUgb2Ygcm91bmRpbmcgcHJlY2lzaW9uIGVycm9ycywgc29cbiAgICAvLyB3b24ndCBoYXZlIHN1Y2ggdGhpbmcgYXMgMC45OTk5ICE9PT0gMVxuICAgIGlmIChjdXJyZW50U3R5bGVba2V5XSAhPT0gc3R5bGVWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHNwZWNpYWxBc3NpZ247XG5mdW5jdGlvbiBzcGVjaWFsQXNzaWduKGEsIGIsIHJlc2VydmVkKSB7XG4gIGZvciAodmFyIHggaW4gYikge1xuICAgIGlmICghYi5oYXNPd25Qcm9wZXJ0eSh4KSB8fCByZXNlcnZlZFt4XSkgY29udGludWU7XG4gICAgYVt4XSA9IGJbeF07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdOyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgb3B0aW9ucyA9IHt9O1xuICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZSwgbm8tcGFyYW0tcmVhc3NpZ25cblxuXG4gIHVybCA9IHVybCAmJiB1cmwuX19lc01vZHVsZSA/IHVybC5kZWZhdWx0IDogdXJsO1xuXG4gIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdXJsICs9IG9wdGlvbnMuaGFzaDtcbiAgfVxuXG4gIGlmIChvcHRpb25zLm1heWJlTmVlZFF1b3RlcyAmJiAvW1xcdFxcblxcZlxcciBcIic9PD5gXS8udGVzdCh1cmwpKSB7XG4gICAgcmV0dXJuIFwiXFxcIlwiLmNvbmNhdCh1cmwsIFwiXFxcIlwiKTtcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59OyIsIi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2Ygc2hpbXMgdGhhdCBwcm92aWRlIG1pbmltYWwgZnVuY3Rpb25hbGl0eSBvZiB0aGUgRVM2IGNvbGxlY3Rpb25zLlxyXG4gKlxyXG4gKiBUaGVzZSBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBtZWFudCB0byBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIFJlc2l6ZU9ic2VydmVyXHJcbiAqIG1vZHVsZXMgYXMgdGhleSBjb3ZlciBvbmx5IGEgbGltaXRlZCByYW5nZSBvZiB1c2UgY2FzZXMuXHJcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVxdWlyZS1qc2RvYywgdmFsaWQtanNkb2MgKi9cbnZhciBNYXBTaGltID0gKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIE1hcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIE1hcDtcbiAgICB9XG5cbiAgICAvKipcclxuICAgICAqIFJldHVybnMgaW5kZXggaW4gcHJvdmlkZWQgYXJyYXkgdGhhdCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQga2V5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk+fSBhcnJcclxuICAgICAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0SW5kZXgoYXJyLCBrZXkpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gICAgICAgIGFyci5zb21lKGZ1bmN0aW9uIChlbnRyeSwgaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeVswXSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaW5kZXg7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiAoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBhbm9ueW1vdXMoKSB7XG4gICAgICAgICAgICB0aGlzLl9fZW50cmllc19fID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBzaXplOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgICAgICovXG4gICAgICAgIHByb3RvdHlwZUFjY2Vzc29ycy5zaXplLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9fZW50cmllc19fLmxlbmd0aDtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0geyp9IGtleVxyXG4gICAgICAgICAqIEByZXR1cm5zIHsqfVxyXG4gICAgICAgICAqL1xuICAgICAgICBhbm9ueW1vdXMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGdldEluZGV4KHRoaXMuX19lbnRyaWVzX18sIGtleSk7XG4gICAgICAgICAgICB2YXIgZW50cnkgPSB0aGlzLl9fZW50cmllc19fW2luZGV4XTtcblxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5WzFdO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZVxyXG4gICAgICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICAgICAqL1xuICAgICAgICBhbm9ueW1vdXMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBnZXRJbmRleCh0aGlzLl9fZW50cmllc19fLCBrZXkpO1xuXG4gICAgICAgICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2VudHJpZXNfX1tpbmRleF1bMV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2VudHJpZXNfXy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAgICAgKi9cbiAgICAgICAgYW5vbnltb3VzLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICB2YXIgZW50cmllcyA9IHRoaXMuX19lbnRyaWVzX187XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBnZXRJbmRleChlbnRyaWVzLCBrZXkpO1xuXG4gICAgICAgICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgICAgICAgICAgZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAgICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAgICovXG4gICAgICAgIGFub255bW91cy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuICEhfmdldEluZGV4KHRoaXMuX19lbnRyaWVzX18sIGtleSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAgICovXG4gICAgICAgIGFub255bW91cy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9fZW50cmllc19fLnNwbGljZSgwKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW2N0eD1udWxsXVxyXG4gICAgICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICAgICAqL1xuICAgICAgICBhbm9ueW1vdXMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGN0eCkge1xuICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG4gICAgICAgICAgICBpZiAoIGN0eCA9PT0gdm9pZCAwICkgY3R4ID0gbnVsbDtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSB0aGlzJDEuX19lbnRyaWVzX187IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gbGlzdFtpXTtcblxuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY3R4LCBlbnRyeVsxXSwgZW50cnlbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBhbm9ueW1vdXMucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxuICAgICAgICByZXR1cm4gYW5vbnltb3VzO1xuICAgIH0oKSk7XG59KSgpO1xuXG4vKipcclxuICogRGV0ZWN0cyB3aGV0aGVyIHdpbmRvdyBhbmQgZG9jdW1lbnQgb2JqZWN0cyBhcmUgYXZhaWxhYmxlIGluIGN1cnJlbnQgZW52aXJvbm1lbnQuXHJcbiAqL1xudmFyIGlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50ID09PSBkb2N1bWVudDtcblxuLy8gUmV0dXJucyBnbG9iYWwgb2JqZWN0IG9mIGEgY3VycmVudCBlbnZpcm9ubWVudC5cbnZhciBnbG9iYWwkMSA9IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbC5NYXRoID09PSBNYXRoKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWw7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT09IE1hdGgpIHtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09PSBNYXRoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59KSgpO1xuXG4vKipcclxuICogQSBzaGltIGZvciB0aGUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHdoaWNoIGZhbGxzIGJhY2sgdG8gdGhlIHNldFRpbWVvdXQgaWZcclxuICogZmlyc3Qgb25lIGlzIG5vdCBzdXBwb3J0ZWQuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJlcXVlc3RzJyBpZGVudGlmaWVyLlxyXG4gKi9cbnZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUkMSA9IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gSXQncyByZXF1aXJlZCB0byB1c2UgYSBib3VuZGVkIGZ1bmN0aW9uIGJlY2F1c2UgSUUgc29tZXRpbWVzIHRocm93c1xuICAgICAgICAvLyBhbiBcIkludmFsaWQgY2FsbGluZyBvYmplY3RcIiBlcnJvciBpZiByQUYgaXMgaW52b2tlZCB3aXRob3V0IHRoZSBnbG9iYWxcbiAgICAgICAgLy8gb2JqZWN0IG9uIHRoZSBsZWZ0IGhhbmQgc2lkZS5cbiAgICAgICAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKGdsb2JhbCQxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7IHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbGxiYWNrKERhdGUubm93KCkpOyB9LCAxMDAwIC8gNjApOyB9O1xufSkoKTtcblxuLy8gRGVmaW5lcyBtaW5pbXVtIHRpbWVvdXQgYmVmb3JlIGFkZGluZyBhIHRyYWlsaW5nIGNhbGwuXG52YXIgdHJhaWxpbmdUaW1lb3V0ID0gMjtcblxuLyoqXHJcbiAqIENyZWF0ZXMgYSB3cmFwcGVyIGZ1bmN0aW9uIHdoaWNoIGVuc3VyZXMgdGhhdCBwcm92aWRlZCBjYWxsYmFjayB3aWxsIGJlXHJcbiAqIGludm9rZWQgb25seSBvbmNlIGR1cmluZyB0aGUgc3BlY2lmaWVkIGRlbGF5IHBlcmlvZC5cclxuICpcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBkZWxheSBwZXJpb2QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWxheSAtIERlbGF5IGFmdGVyIHdoaWNoIHRvIGludm9rZSBjYWxsYmFjay5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufVxyXG4gKi9cbnZhciB0aHJvdHRsZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVsYXkpIHtcbiAgICB2YXIgbGVhZGluZ0NhbGwgPSBmYWxzZSxcbiAgICAgICAgdHJhaWxpbmdDYWxsID0gZmFsc2UsXG4gICAgICAgIGxhc3RDYWxsVGltZSA9IDA7XG5cbiAgICAvKipcclxuICAgICAqIEludm9rZXMgdGhlIG9yaWdpbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBzY2hlZHVsZXMgbmV3IGludm9jYXRpb24gaWZcclxuICAgICAqIHRoZSBcInByb3h5XCIgd2FzIGNhbGxlZCBkdXJpbmcgY3VycmVudCByZXF1ZXN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVBlbmRpbmcoKSB7XG4gICAgICAgIGlmIChsZWFkaW5nQ2FsbCkge1xuICAgICAgICAgICAgbGVhZGluZ0NhbGwgPSBmYWxzZTtcblxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmFpbGluZ0NhbGwpIHtcbiAgICAgICAgICAgIHByb3h5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGludm9rZWQgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS4gSXQgd2lsbCBmdXJ0aGVyIHBvc3Rwb25lXHJcbiAgICAgKiBpbnZvY2F0aW9uIG9mIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBkZWxlZ2F0aW5nIGl0IHRvIHRoZVxyXG4gICAgICogcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGltZW91dENhbGxiYWNrKCkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUkMShyZXNvbHZlUGVuZGluZyk7XG4gICAgfVxuXG4gICAgLyoqXHJcbiAgICAgKiBTY2hlZHVsZXMgaW52b2NhdGlvbiBvZiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwcm94eSgpIHtcbiAgICAgICAgdmFyIHRpbWVTdGFtcCA9IERhdGUubm93KCk7XG5cbiAgICAgICAgaWYgKGxlYWRpbmdDYWxsKSB7XG4gICAgICAgICAgICAvLyBSZWplY3QgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGNhbGxzLlxuICAgICAgICAgICAgaWYgKHRpbWVTdGFtcCAtIGxhc3RDYWxsVGltZSA8IHRyYWlsaW5nVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2NoZWR1bGUgbmV3IGNhbGwgdG8gYmUgaW4gaW52b2tlZCB3aGVuIHRoZSBwZW5kaW5nIG9uZSBpcyByZXNvbHZlZC5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGZvciBcInRyYW5zaXRpb25zXCIgd2hpY2ggbmV2ZXIgYWN0dWFsbHkgc3RhcnRcbiAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IHNvIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UgbWlnaHQgbWlzcyBvbmUgaWYgY2hhbmdlXG4gICAgICAgICAgICAvLyBoYXBwZW5zIGFtaWRzIHRoZSBwZW5kaW5nIGludm9jYXRpb24uXG4gICAgICAgICAgICB0cmFpbGluZ0NhbGwgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGVhZGluZ0NhbGwgPSB0cnVlO1xuICAgICAgICAgICAgdHJhaWxpbmdDYWxsID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQodGltZW91dENhbGxiYWNrLCBkZWxheSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lU3RhbXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3h5O1xufTtcblxuLy8gTWluaW11bSBkZWxheSBiZWZvcmUgaW52b2tpbmcgdGhlIHVwZGF0ZSBvZiBvYnNlcnZlcnMuXG52YXIgUkVGUkVTSF9ERUxBWSA9IDIwO1xuXG4vLyBBIGxpc3Qgb2Ygc3Vic3RyaW5ncyBvZiBDU1MgcHJvcGVydGllcyB1c2VkIHRvIGZpbmQgdHJhbnNpdGlvbiBldmVudHMgdGhhdFxuLy8gbWlnaHQgYWZmZWN0IGRpbWVuc2lvbnMgb2Ygb2JzZXJ2ZWQgZWxlbWVudHMuXG52YXIgdHJhbnNpdGlvbktleXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCcsICd3aWR0aCcsICdoZWlnaHQnLCAnc2l6ZScsICd3ZWlnaHQnXTtcblxuLy8gQ2hlY2sgaWYgTXV0YXRpb25PYnNlcnZlciBpcyBhdmFpbGFibGUuXG52YXIgbXV0YXRpb25PYnNlcnZlclN1cHBvcnRlZCA9IHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcblxuLyoqXHJcbiAqIFNpbmdsZXRvbiBjb250cm9sbGVyIGNsYXNzIHdoaWNoIGhhbmRsZXMgdXBkYXRlcyBvZiBSZXNpemVPYnNlcnZlciBpbnN0YW5jZXMuXHJcbiAqL1xudmFyIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlciA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY29ubmVjdGVkXyA9IGZhbHNlO1xuICAgIHRoaXMubXV0YXRpb25FdmVudHNBZGRlZF8gPSBmYWxzZTtcbiAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXyA9IG51bGw7XG4gICAgdGhpcy5vYnNlcnZlcnNfID0gW107XG5cbiAgICB0aGlzLm9uVHJhbnNpdGlvbkVuZF8gPSB0aGlzLm9uVHJhbnNpdGlvbkVuZF8uYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlZnJlc2ggPSB0aHJvdHRsZSh0aGlzLnJlZnJlc2guYmluZCh0aGlzKSwgUkVGUkVTSF9ERUxBWSk7XG59O1xuXG4vKipcclxuICogQWRkcyBvYnNlcnZlciB0byBvYnNlcnZlcnMgbGlzdC5cclxuICpcclxuICogQHBhcmFtIHtSZXNpemVPYnNlcnZlclNQSX0gb2JzZXJ2ZXIgLSBPYnNlcnZlciB0byBiZSBhZGRlZC5cclxuICogQHJldHVybnMge3ZvaWR9XHJcbiAqL1xuXG5cbi8qKlxyXG4gKiBIb2xkcyByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xsZXIncyBpbnN0YW5jZS5cclxuICpcclxuICogQHByaXZhdGUge1Jlc2l6ZU9ic2VydmVyQ29udHJvbGxlcn1cclxuICovXG5cblxuLyoqXHJcbiAqIEtlZXBzIHJlZmVyZW5jZSB0byB0aGUgaW5zdGFuY2Ugb2YgTXV0YXRpb25PYnNlcnZlci5cclxuICpcclxuICogQHByaXZhdGUge011dGF0aW9uT2JzZXJ2ZXJ9XHJcbiAqL1xuXG4vKipcclxuICogSW5kaWNhdGVzIHdoZXRoZXIgRE9NIGxpc3RlbmVycyBoYXZlIGJlZW4gYWRkZWQuXHJcbiAqXHJcbiAqIEBwcml2YXRlIHtib29sZWFufVxyXG4gKi9cblJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUuYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICBpZiAoIX50aGlzLm9ic2VydmVyc18uaW5kZXhPZihvYnNlcnZlcikpIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlcnNfLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH1cblxuICAgIC8vIEFkZCBsaXN0ZW5lcnMgaWYgdGhleSBoYXZlbid0IGJlZW4gYWRkZWQgeWV0LlxuICAgIGlmICghdGhpcy5jb25uZWN0ZWRfKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdF8oKTtcbiAgICB9XG59O1xuXG4vKipcclxuICogUmVtb3ZlcyBvYnNlcnZlciBmcm9tIG9ic2VydmVycyBsaXN0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1Jlc2l6ZU9ic2VydmVyU1BJfSBvYnNlcnZlciAtIE9ic2VydmVyIHRvIGJlIHJlbW92ZWQuXHJcbiAqIEByZXR1cm5zIHt2b2lkfVxyXG4gKi9cblJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICB2YXIgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfO1xuICAgIHZhciBpbmRleCA9IG9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKTtcblxuICAgIC8vIFJlbW92ZSBvYnNlcnZlciBpZiBpdCdzIHByZXNlbnQgaW4gcmVnaXN0cnkuXG4gICAgaWYgKH5pbmRleCkge1xuICAgICAgICBvYnNlcnZlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbGlzdGVuZXJzIGlmIGNvbnRyb2xsZXIgaGFzIG5vIGNvbm5lY3RlZCBvYnNlcnZlcnMuXG4gICAgaWYgKCFvYnNlcnZlcnMubGVuZ3RoICYmIHRoaXMuY29ubmVjdGVkXykge1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RfKCk7XG4gICAgfVxufTtcblxuLyoqXHJcbiAqIEludm9rZXMgdGhlIHVwZGF0ZSBvZiBvYnNlcnZlcnMuIEl0IHdpbGwgY29udGludWUgcnVubmluZyB1cGRhdGVzIGluc29mYXJcclxuICogaXQgZGV0ZWN0cyBjaGFuZ2VzLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dm9pZH1cclxuICovXG5SZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNoYW5nZXNEZXRlY3RlZCA9IHRoaXMudXBkYXRlT2JzZXJ2ZXJzXygpO1xuXG4gICAgLy8gQ29udGludWUgcnVubmluZyB1cGRhdGVzIGlmIGNoYW5nZXMgaGF2ZSBiZWVuIGRldGVjdGVkIGFzIHRoZXJlIG1pZ2h0XG4gICAgLy8gYmUgZnV0dXJlIG9uZXMgY2F1c2VkIGJ5IENTUyB0cmFuc2l0aW9ucy5cbiAgICBpZiAoY2hhbmdlc0RldGVjdGVkKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG5cbi8qKlxyXG4gKiBVcGRhdGVzIGV2ZXJ5IG9ic2VydmVyIGZyb20gb2JzZXJ2ZXJzIGxpc3QgYW5kIG5vdGlmaWVzIHRoZW0gb2YgcXVldWVkXHJcbiAqIGVudHJpZXMuXHJcbiAqXHJcbiAqIEBwcml2YXRlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIFwidHJ1ZVwiIGlmIGFueSBvYnNlcnZlciBoYXMgZGV0ZWN0ZWQgY2hhbmdlcyBpblxyXG4gKiAgZGltZW5zaW9ucyBvZiBpdCdzIGVsZW1lbnRzLlxyXG4gKi9cblJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUudXBkYXRlT2JzZXJ2ZXJzXyA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBDb2xsZWN0IG9ic2VydmVycyB0aGF0IGhhdmUgYWN0aXZlIG9ic2VydmF0aW9ucy5cbiAgICB2YXIgYWN0aXZlT2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfLmZpbHRlcihmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyLmdhdGhlckFjdGl2ZSgpLCBvYnNlcnZlci5oYXNBY3RpdmUoKTtcbiAgICB9KTtcblxuICAgIC8vIERlbGl2ZXIgbm90aWZpY2F0aW9ucyBpbiBhIHNlcGFyYXRlIGN5Y2xlIGluIG9yZGVyIHRvIGF2b2lkIGFueVxuICAgIC8vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYnNlcnZlcnMsIGUuZy4gd2hlbiBtdWx0aXBsZSBpbnN0YW5jZXMgb2ZcbiAgICAvLyBSZXNpemVPYnNlcnZlciBhcmUgdHJhY2tpbmcgdGhlIHNhbWUgZWxlbWVudCBhbmQgdGhlIGNhbGxiYWNrIG9mIG9uZVxuICAgIC8vIG9mIHRoZW0gY2hhbmdlcyBjb250ZW50IGRpbWVuc2lvbnMgb2YgdGhlIG9ic2VydmVkIHRhcmdldC4gU29tZXRpbWVzXG4gICAgLy8gdGhpcyBtYXkgcmVzdWx0IGluIG5vdGlmaWNhdGlvbnMgYmVpbmcgYmxvY2tlZCBmb3IgdGhlIHJlc3Qgb2Ygb2JzZXJ2ZXJzLlxuICAgIGFjdGl2ZU9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikgeyByZXR1cm4gb2JzZXJ2ZXIuYnJvYWRjYXN0QWN0aXZlKCk7IH0pO1xuXG4gICAgcmV0dXJuIGFjdGl2ZU9ic2VydmVycy5sZW5ndGggPiAwO1xufTtcblxuLyoqXHJcbiAqIEluaXRpYWxpemVzIERPTSBsaXN0ZW5lcnMuXHJcbiAqXHJcbiAqIEBwcml2YXRlXHJcbiAqIEByZXR1cm5zIHt2b2lkfVxyXG4gKi9cblJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUuY29ubmVjdF8gPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gRG8gbm90aGluZyBpZiBydW5uaW5nIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQgb3IgaWYgbGlzdGVuZXJzXG4gICAgLy8gaGF2ZSBiZWVuIGFscmVhZHkgYWRkZWQuXG4gICAgaWYgKCFpc0Jyb3dzZXIgfHwgdGhpcy5jb25uZWN0ZWRfKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTdWJzY3JpcHRpb24gdG8gdGhlIFwiVHJhbnNpdGlvbmVuZFwiIGV2ZW50IGlzIHVzZWQgYXMgYSB3b3JrYXJvdW5kIGZvclxuICAgIC8vIGRlbGF5ZWQgdHJhbnNpdGlvbnMuIFRoaXMgd2F5IGl0J3MgcG9zc2libGUgdG8gY2FwdHVyZSBhdCBsZWFzdCB0aGVcbiAgICAvLyBmaW5hbCBzdGF0ZSBvZiBhbiBlbGVtZW50LlxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCB0aGlzLm9uVHJhbnNpdGlvbkVuZF8pO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVmcmVzaCk7XG5cbiAgICBpZiAobXV0YXRpb25PYnNlcnZlclN1cHBvcnRlZCkge1xuICAgICAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXyA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMucmVmcmVzaCk7XG5cbiAgICAgICAgdGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8ub2JzZXJ2ZShkb2N1bWVudCwge1xuICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAgICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTVN1YnRyZWVNb2RpZmllZCcsIHRoaXMucmVmcmVzaCk7XG5cbiAgICAgICAgdGhpcy5tdXRhdGlvbkV2ZW50c0FkZGVkXyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jb25uZWN0ZWRfID0gdHJ1ZTtcbn07XG5cbi8qKlxyXG4gKiBSZW1vdmVzIERPTSBsaXN0ZW5lcnMuXHJcbiAqXHJcbiAqIEBwcml2YXRlXHJcbiAqIEByZXR1cm5zIHt2b2lkfVxyXG4gKi9cblJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUuZGlzY29ubmVjdF8gPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gRG8gbm90aGluZyBpZiBydW5uaW5nIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQgb3IgaWYgbGlzdGVuZXJzXG4gICAgLy8gaGF2ZSBiZWVuIGFscmVhZHkgcmVtb3ZlZC5cbiAgICBpZiAoIWlzQnJvd3NlciB8fCAhdGhpcy5jb25uZWN0ZWRfKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgdGhpcy5vblRyYW5zaXRpb25FbmRfKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZWZyZXNoKTtcblxuICAgIGlmICh0aGlzLm11dGF0aW9uc09ic2VydmVyXykge1xuICAgICAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXy5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubXV0YXRpb25FdmVudHNBZGRlZF8pIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NU3VidHJlZU1vZGlmaWVkJywgdGhpcy5yZWZyZXNoKTtcbiAgICB9XG5cbiAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXyA9IG51bGw7XG4gICAgdGhpcy5tdXRhdGlvbkV2ZW50c0FkZGVkXyA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGVkXyA9IGZhbHNlO1xufTtcblxuLyoqXHJcbiAqIFwiVHJhbnNpdGlvbmVuZFwiIGV2ZW50IGhhbmRsZXIuXHJcbiAqXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBwYXJhbSB7VHJhbnNpdGlvbkV2ZW50fSBldmVudFxyXG4gKiBAcmV0dXJucyB7dm9pZH1cclxuICovXG5SZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLm9uVHJhbnNpdGlvbkVuZF8gPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSByZWYucHJvcGVydHlOYW1lOyBpZiAoIHByb3BlcnR5TmFtZSA9PT0gdm9pZCAwICkgcHJvcGVydHlOYW1lID0gJyc7XG5cbiAgICAvLyBEZXRlY3Qgd2hldGhlciB0cmFuc2l0aW9uIG1heSBhZmZlY3QgZGltZW5zaW9ucyBvZiBhbiBlbGVtZW50LlxuICAgIHZhciBpc1JlZmxvd1Byb3BlcnR5ID0gdHJhbnNpdGlvbktleXMuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIX5wcm9wZXJ0eU5hbWUuaW5kZXhPZihrZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKGlzUmVmbG93UHJvcGVydHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcblxuLyoqXHJcbiAqIFJldHVybnMgaW5zdGFuY2Ugb2YgdGhlIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5cclxuICpcclxuICogQHJldHVybnMge1Jlc2l6ZU9ic2VydmVyQ29udHJvbGxlcn1cclxuICovXG5SZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLmluc3RhbmNlXykge1xuICAgICAgICB0aGlzLmluc3RhbmNlXyA9IG5ldyBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnN0YW5jZV87XG59O1xuXG5SZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuaW5zdGFuY2VfID0gbnVsbDtcblxuLyoqXHJcbiAqIERlZmluZXMgbm9uLXdyaXRhYmxlL2VudW1lcmFibGUgcHJvcGVydGllcyBvZiB0aGUgcHJvdmlkZWQgdGFyZ2V0IG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldCAtIE9iamVjdCBmb3Igd2hpY2ggdG8gZGVmaW5lIHByb3BlcnRpZXMuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIFByb3BlcnRpZXMgdG8gYmUgZGVmaW5lZC5cclxuICogQHJldHVybnMge09iamVjdH0gVGFyZ2V0IG9iamVjdC5cclxuICovXG52YXIgZGVmaW5lQ29uZmlndXJhYmxlID0gKGZ1bmN0aW9uICh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBPYmplY3Qua2V5cyhwcm9wcyk7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBrZXkgPSBsaXN0W2ldO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzW2tleV0sXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xufSk7XG5cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCBwcm92aWRlZCBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XHJcbiAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAqL1xudmFyIGdldFdpbmRvd09mID0gKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAvLyBBc3N1bWUgdGhhdCB0aGUgZWxlbWVudCBpcyBhbiBpbnN0YW5jZSBvZiBOb2RlLCB3aGljaCBtZWFucyB0aGF0IGl0XG4gICAgLy8gaGFzIHRoZSBcIm93bmVyRG9jdW1lbnRcIiBwcm9wZXJ0eSBmcm9tIHdoaWNoIHdlIGNhbiByZXRyaWV2ZSBhXG4gICAgLy8gY29ycmVzcG9uZGluZyBnbG9iYWwgb2JqZWN0LlxuICAgIHZhciBvd25lckdsb2JhbCA9IHRhcmdldCAmJiB0YXJnZXQub3duZXJEb2N1bWVudCAmJiB0YXJnZXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuICAgIC8vIFJldHVybiB0aGUgbG9jYWwgZ2xvYmFsIG9iamVjdCBpZiBpdCdzIG5vdCBwb3NzaWJsZSBleHRyYWN0IG9uZSBmcm9tXG4gICAgLy8gcHJvdmlkZWQgZWxlbWVudC5cbiAgICByZXR1cm4gb3duZXJHbG9iYWwgfHwgZ2xvYmFsJDE7XG59KTtcblxuLy8gUGxhY2Vob2xkZXIgb2YgYW4gZW1wdHkgY29udGVudCByZWN0YW5nbGUuXG52YXIgZW1wdHlSZWN0ID0gY3JlYXRlUmVjdEluaXQoMCwgMCwgMCwgMCk7XG5cbi8qKlxyXG4gKiBDb252ZXJ0cyBwcm92aWRlZCBzdHJpbmcgdG8gYSBudW1iZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWVcclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXG5mdW5jdGlvbiB0b0Zsb2F0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpIHx8IDA7XG59XG5cbi8qKlxyXG4gKiBFeHRyYWN0cyBib3JkZXJzIHNpemUgZnJvbSBwcm92aWRlZCBzdHlsZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Q1NTU3R5bGVEZWNsYXJhdGlvbn0gc3R5bGVzXHJcbiAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwb3NpdGlvbnMgLSBCb3JkZXJzIHBvc2l0aW9ucyAodG9wLCByaWdodCwgLi4uKVxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gKi9cbmZ1bmN0aW9uIGdldEJvcmRlcnNTaXplKHN0eWxlcykge1xuICAgIHZhciBwb3NpdGlvbnMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSBwb3NpdGlvbnNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgICByZXR1cm4gcG9zaXRpb25zLnJlZHVjZShmdW5jdGlvbiAoc2l6ZSwgcG9zaXRpb24pIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc3R5bGVzWydib3JkZXItJyArIHBvc2l0aW9uICsgJy13aWR0aCddO1xuXG4gICAgICAgIHJldHVybiBzaXplICsgdG9GbG9hdCh2YWx1ZSk7XG4gICAgfSwgMCk7XG59XG5cbi8qKlxyXG4gKiBFeHRyYWN0cyBwYWRkaW5ncyBzaXplcyBmcm9tIHByb3ZpZGVkIHN0eWxlcy5cclxuICpcclxuICogQHBhcmFtIHtDU1NTdHlsZURlY2xhcmF0aW9ufSBzdHlsZXNcclxuICogQHJldHVybnMge09iamVjdH0gUGFkZGluZ3MgYm94LlxyXG4gKi9cbmZ1bmN0aW9uIGdldFBhZGRpbmdzKHN0eWxlcykge1xuICAgIHZhciBwb3NpdGlvbnMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuICAgIHZhciBwYWRkaW5ncyA9IHt9O1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBwb3NpdGlvbnM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IGxpc3RbaV07XG5cbiAgICAgICAgdmFyIHZhbHVlID0gc3R5bGVzWydwYWRkaW5nLScgKyBwb3NpdGlvbl07XG5cbiAgICAgICAgcGFkZGluZ3NbcG9zaXRpb25dID0gdG9GbG9hdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZGRpbmdzO1xufVxuXG4vKipcclxuICogQ2FsY3VsYXRlcyBjb250ZW50IHJlY3RhbmdsZSBvZiBwcm92aWRlZCBTVkcgZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtTVkdHcmFwaGljc0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgY29udGVudCByZWN0YW5nbGUgb2Ygd2hpY2ggbmVlZHNcclxuICogICAgICB0byBiZSBjYWxjdWxhdGVkLlxyXG4gKiBAcmV0dXJucyB7RE9NUmVjdEluaXR9XHJcbiAqL1xuZnVuY3Rpb24gZ2V0U1ZHQ29udGVudFJlY3QodGFyZ2V0KSB7XG4gICAgdmFyIGJib3ggPSB0YXJnZXQuZ2V0QkJveCgpO1xuXG4gICAgcmV0dXJuIGNyZWF0ZVJlY3RJbml0KDAsIDAsIGJib3gud2lkdGgsIGJib3guaGVpZ2h0KTtcbn1cblxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgY29udGVudCByZWN0YW5nbGUgb2YgcHJvdmlkZWQgSFRNTEVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgY29udGVudCByZWN0YW5nbGUuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXG5mdW5jdGlvbiBnZXRIVE1MRWxlbWVudENvbnRlbnRSZWN0KHRhcmdldCkge1xuICAgIC8vIENsaWVudCB3aWR0aCAmIGhlaWdodCBwcm9wZXJ0aWVzIGNhbid0IGJlXG4gICAgLy8gdXNlZCBleGNsdXNpdmVseSBhcyB0aGV5IHByb3ZpZGUgcm91bmRlZCB2YWx1ZXMuXG4gICAgdmFyIGNsaWVudFdpZHRoID0gdGFyZ2V0LmNsaWVudFdpZHRoO1xuICAgIHZhciBjbGllbnRIZWlnaHQgPSB0YXJnZXQuY2xpZW50SGVpZ2h0O1xuXG4gICAgLy8gQnkgdGhpcyBjb25kaXRpb24gd2UgY2FuIGNhdGNoIGFsbCBub24tcmVwbGFjZWQgaW5saW5lLCBoaWRkZW4gYW5kXG4gICAgLy8gZGV0YWNoZWQgZWxlbWVudHMuIFRob3VnaCBlbGVtZW50cyB3aXRoIHdpZHRoICYgaGVpZ2h0IHByb3BlcnRpZXMgbGVzc1xuICAgIC8vIHRoYW4gMC41IHdpbGwgYmUgZGlzY2FyZGVkIGFzIHdlbGwuXG4gICAgLy9cbiAgICAvLyBXaXRob3V0IGl0IHdlIHdvdWxkIG5lZWQgdG8gaW1wbGVtZW50IHNlcGFyYXRlIG1ldGhvZHMgZm9yIGVhY2ggb2ZcbiAgICAvLyB0aG9zZSBjYXNlcyBhbmQgaXQncyBub3QgcG9zc2libGUgdG8gcGVyZm9ybSBhIHByZWNpc2UgYW5kIHBlcmZvcm1hbmNlXG4gICAgLy8gZWZmZWN0aXZlIHRlc3QgZm9yIGhpZGRlbiBlbGVtZW50cy4gRS5nLiBldmVuIGpRdWVyeSdzICc6dmlzaWJsZScgZmlsdGVyXG4gICAgLy8gZ2l2ZXMgd3JvbmcgcmVzdWx0cyBmb3IgZWxlbWVudHMgd2l0aCB3aWR0aCAmIGhlaWdodCBsZXNzIHRoYW4gMC41LlxuICAgIGlmICghY2xpZW50V2lkdGggJiYgIWNsaWVudEhlaWdodCkge1xuICAgICAgICByZXR1cm4gZW1wdHlSZWN0O1xuICAgIH1cblxuICAgIHZhciBzdHlsZXMgPSBnZXRXaW5kb3dPZih0YXJnZXQpLmdldENvbXB1dGVkU3R5bGUodGFyZ2V0KTtcbiAgICB2YXIgcGFkZGluZ3MgPSBnZXRQYWRkaW5ncyhzdHlsZXMpO1xuICAgIHZhciBob3JpelBhZCA9IHBhZGRpbmdzLmxlZnQgKyBwYWRkaW5ncy5yaWdodDtcbiAgICB2YXIgdmVydFBhZCA9IHBhZGRpbmdzLnRvcCArIHBhZGRpbmdzLmJvdHRvbTtcblxuICAgIC8vIENvbXB1dGVkIHN0eWxlcyBvZiB3aWR0aCAmIGhlaWdodCBhcmUgYmVpbmcgdXNlZCBiZWNhdXNlIHRoZXkgYXJlIHRoZVxuICAgIC8vIG9ubHkgZGltZW5zaW9ucyBhdmFpbGFibGUgdG8gSlMgdGhhdCBjb250YWluIG5vbi1yb3VuZGVkIHZhbHVlcy4gSXQgY291bGRcbiAgICAvLyBiZSBwb3NzaWJsZSB0byB1dGlsaXplIHRoZSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaWYgb25seSBpdCdzIGRhdGEgd2Fzbid0XG4gICAgLy8gYWZmZWN0ZWQgYnkgQ1NTIHRyYW5zZm9ybWF0aW9ucyBsZXQgYWxvbmUgcGFkZGluZ3MsIGJvcmRlcnMgYW5kIHNjcm9sbCBiYXJzLlxuICAgIHZhciB3aWR0aCA9IHRvRmxvYXQoc3R5bGVzLndpZHRoKSxcbiAgICAgICAgaGVpZ2h0ID0gdG9GbG9hdChzdHlsZXMuaGVpZ2h0KTtcblxuICAgIC8vIFdpZHRoICYgaGVpZ2h0IGluY2x1ZGUgcGFkZGluZ3MgYW5kIGJvcmRlcnMgd2hlbiB0aGUgJ2JvcmRlci1ib3gnIGJveFxuICAgIC8vIG1vZGVsIGlzIGFwcGxpZWQgKGV4Y2VwdCBmb3IgSUUpLlxuICAgIGlmIChzdHlsZXMuYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcbiAgICAgICAgLy8gRm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGhhbmRsZSBJbnRlcm5ldCBFeHBsb3JlciB3aGljaFxuICAgICAgICAvLyBkb2Vzbid0IGluY2x1ZGUgcGFkZGluZ3MgYW5kIGJvcmRlcnMgdG8gY29tcHV0ZWQgQ1NTIGRpbWVuc2lvbnMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIGNhbiBzYXkgdGhhdCBpZiBDU1MgZGltZW5zaW9ucyArIHBhZGRpbmdzIGFyZSBlcXVhbCB0byB0aGUgXCJjbGllbnRcIlxuICAgICAgICAvLyBwcm9wZXJ0aWVzIHRoZW4gaXQncyBlaXRoZXIgSUUsIGFuZCB0aHVzIHdlIGRvbid0IG5lZWQgdG8gc3VidHJhY3RcbiAgICAgICAgLy8gYW55dGhpbmcsIG9yIGFuIGVsZW1lbnQgbWVyZWx5IGRvZXNuJ3QgaGF2ZSBwYWRkaW5ncy9ib3JkZXJzIHN0eWxlcy5cbiAgICAgICAgaWYgKE1hdGgucm91bmQod2lkdGggKyBob3JpelBhZCkgIT09IGNsaWVudFdpZHRoKSB7XG4gICAgICAgICAgICB3aWR0aCAtPSBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsICdsZWZ0JywgJ3JpZ2h0JykgKyBob3JpelBhZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChNYXRoLnJvdW5kKGhlaWdodCArIHZlcnRQYWQpICE9PSBjbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgIGhlaWdodCAtPSBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsICd0b3AnLCAnYm90dG9tJykgKyB2ZXJ0UGFkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRm9sbG93aW5nIHN0ZXBzIGNhbid0IGJlIGFwcGxpZWQgdG8gdGhlIGRvY3VtZW50J3Mgcm9vdCBlbGVtZW50IGFzIGl0c1xuICAgIC8vIGNsaWVudFtXaWR0aC9IZWlnaHRdIHByb3BlcnRpZXMgcmVwcmVzZW50IHZpZXdwb3J0IGFyZWEgb2YgdGhlIHdpbmRvdy5cbiAgICAvLyBCZXNpZGVzLCBpdCdzIGFzIHdlbGwgbm90IG5lY2Vzc2FyeSBhcyB0aGUgPGh0bWw+IGl0c2VsZiBuZWl0aGVyIGhhc1xuICAgIC8vIHJlbmRlcmVkIHNjcm9sbCBiYXJzIG5vciBpdCBjYW4gYmUgY2xpcHBlZC5cbiAgICBpZiAoIWlzRG9jdW1lbnRFbGVtZW50KHRhcmdldCkpIHtcbiAgICAgICAgLy8gSW4gc29tZSBicm93c2VycyAob25seSBpbiBGaXJlZm94LCBhY3R1YWxseSkgQ1NTIHdpZHRoICYgaGVpZ2h0XG4gICAgICAgIC8vIGluY2x1ZGUgc2Nyb2xsIGJhcnMgc2l6ZSB3aGljaCBjYW4gYmUgcmVtb3ZlZCBhdCB0aGlzIHN0ZXAgYXMgc2Nyb2xsXG4gICAgICAgIC8vIGJhcnMgYXJlIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiByb3VuZGVkIGRpbWVuc2lvbnMgKyBwYWRkaW5nc1xuICAgICAgICAvLyBhbmQgXCJjbGllbnRcIiBwcm9wZXJ0aWVzLCB0aG91Z2ggdGhhdCBpcyBub3QgYWx3YXlzIHRydWUgaW4gQ2hyb21lLlxuICAgICAgICB2YXIgdmVydFNjcm9sbGJhciA9IE1hdGgucm91bmQod2lkdGggKyBob3JpelBhZCkgLSBjbGllbnRXaWR0aDtcbiAgICAgICAgdmFyIGhvcml6U2Nyb2xsYmFyID0gTWF0aC5yb3VuZChoZWlnaHQgKyB2ZXJ0UGFkKSAtIGNsaWVudEhlaWdodDtcblxuICAgICAgICAvLyBDaHJvbWUgaGFzIGEgcmF0aGVyIHdlaXJkIHJvdW5kaW5nIG9mIFwiY2xpZW50XCIgcHJvcGVydGllcy5cbiAgICAgICAgLy8gRS5nLiBmb3IgYW4gZWxlbWVudCB3aXRoIGNvbnRlbnQgd2lkdGggb2YgMzE0LjJweCBpdCBzb21ldGltZXMgZ2l2ZXNcbiAgICAgICAgLy8gdGhlIGNsaWVudCB3aWR0aCBvZiAzMTVweCBhbmQgZm9yIHRoZSB3aWR0aCBvZiAzMTQuN3B4IGl0IG1heSBnaXZlXG4gICAgICAgIC8vIDMxNHB4LiBBbmQgaXQgZG9lc24ndCBoYXBwZW4gYWxsIHRoZSB0aW1lLiBTbyBqdXN0IGlnbm9yZSB0aGlzIGRlbHRhXG4gICAgICAgIC8vIGFzIGEgbm9uLXJlbGV2YW50LlxuICAgICAgICBpZiAoTWF0aC5hYnModmVydFNjcm9sbGJhcikgIT09IDEpIHtcbiAgICAgICAgICAgIHdpZHRoIC09IHZlcnRTY3JvbGxiYXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTWF0aC5hYnMoaG9yaXpTY3JvbGxiYXIpICE9PSAxKSB7XG4gICAgICAgICAgICBoZWlnaHQgLT0gaG9yaXpTY3JvbGxiYXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlUmVjdEluaXQocGFkZGluZ3MubGVmdCwgcGFkZGluZ3MudG9wLCB3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLyoqXHJcbiAqIENoZWNrcyB3aGV0aGVyIHByb3ZpZGVkIGVsZW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIFNWR0dyYXBoaWNzRWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIGJlIGNoZWNrZWQuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cbnZhciBpc1NWR0dyYXBoaWNzRWxlbWVudCA9IChmdW5jdGlvbiAoKSB7XG4gICAgLy8gU29tZSBicm93c2VycywgbmFtZWx5IElFIGFuZCBFZGdlLCBkb24ndCBoYXZlIHRoZSBTVkdHcmFwaGljc0VsZW1lbnRcbiAgICAvLyBpbnRlcmZhY2UuXG4gICAgaWYgKHR5cGVvZiBTVkdHcmFwaGljc0VsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7IHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBnZXRXaW5kb3dPZih0YXJnZXQpLlNWR0dyYXBoaWNzRWxlbWVudDsgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBpdCdzIHNvLCB0aGVuIGNoZWNrIHRoYXQgZWxlbWVudCBpcyBhdCBsZWFzdCBhbiBpbnN0YW5jZSBvZiB0aGVcbiAgICAvLyBTVkdFbGVtZW50IGFuZCB0aGF0IGl0IGhhcyB0aGUgXCJnZXRCQm94XCIgbWV0aG9kLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRyYS1wYXJlbnNcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkgeyByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgZ2V0V2luZG93T2YodGFyZ2V0KS5TVkdFbGVtZW50ICYmIHR5cGVvZiB0YXJnZXQuZ2V0QkJveCA9PT0gJ2Z1bmN0aW9uJzsgfTtcbn0pKCk7XG5cbi8qKlxyXG4gKiBDaGVja3Mgd2hldGhlciBwcm92aWRlZCBlbGVtZW50IGlzIGEgZG9jdW1lbnQgZWxlbWVudCAoPGh0bWw+KS5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIGJlIGNoZWNrZWQuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cbmZ1bmN0aW9uIGlzRG9jdW1lbnRFbGVtZW50KHRhcmdldCkge1xuICAgIHJldHVybiB0YXJnZXQgPT09IGdldFdpbmRvd09mKHRhcmdldCkuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xufVxuXG4vKipcclxuICogQ2FsY3VsYXRlcyBhbiBhcHByb3ByaWF0ZSBjb250ZW50IHJlY3RhbmdsZSBmb3IgcHJvdmlkZWQgaHRtbCBvciBzdmcgZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IGNvbnRlbnQgcmVjdGFuZ2xlIG9mIHdoaWNoIG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXG5mdW5jdGlvbiBnZXRDb250ZW50UmVjdCh0YXJnZXQpIHtcbiAgICBpZiAoIWlzQnJvd3Nlcikge1xuICAgICAgICByZXR1cm4gZW1wdHlSZWN0O1xuICAgIH1cblxuICAgIGlmIChpc1NWR0dyYXBoaWNzRWxlbWVudCh0YXJnZXQpKSB7XG4gICAgICAgIHJldHVybiBnZXRTVkdDb250ZW50UmVjdCh0YXJnZXQpO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudENvbnRlbnRSZWN0KHRhcmdldCk7XG59XG5cbi8qKlxyXG4gKiBDcmVhdGVzIHJlY3RhbmdsZSB3aXRoIGFuIGludGVyZmFjZSBvZiB0aGUgRE9NUmVjdFJlYWRPbmx5LlxyXG4gKiBTcGVjOiBodHRwczovL2RyYWZ0cy5meHRmLm9yZy9nZW9tZXRyeS8jZG9tcmVjdHJlYWRvbmx5XHJcbiAqXHJcbiAqIEBwYXJhbSB7RE9NUmVjdEluaXR9IHJlY3RJbml0IC0gT2JqZWN0IHdpdGggcmVjdGFuZ2xlJ3MgeC95IGNvb3JkaW5hdGVzIGFuZCBkaW1lbnNpb25zLlxyXG4gKiBAcmV0dXJucyB7RE9NUmVjdFJlYWRPbmx5fVxyXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlYWRPbmx5UmVjdChyZWYpIHtcbiAgICB2YXIgeCA9IHJlZi54O1xuICAgIHZhciB5ID0gcmVmLnk7XG4gICAgdmFyIHdpZHRoID0gcmVmLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSByZWYuaGVpZ2h0O1xuXG4gICAgLy8gSWYgRE9NUmVjdFJlYWRPbmx5IGlzIGF2YWlsYWJsZSB1c2UgaXQgYXMgYSBwcm90b3R5cGUgZm9yIHRoZSByZWN0YW5nbGUuXG4gICAgdmFyIENvbnN0ciA9IHR5cGVvZiBET01SZWN0UmVhZE9ubHkgIT09ICd1bmRlZmluZWQnID8gRE9NUmVjdFJlYWRPbmx5IDogT2JqZWN0O1xuICAgIHZhciByZWN0ID0gT2JqZWN0LmNyZWF0ZShDb25zdHIucHJvdG90eXBlKTtcblxuICAgIC8vIFJlY3RhbmdsZSdzIHByb3BlcnRpZXMgYXJlIG5vdCB3cml0YWJsZSBhbmQgbm9uLWVudW1lcmFibGUuXG4gICAgZGVmaW5lQ29uZmlndXJhYmxlKHJlY3QsIHtcbiAgICAgICAgeDogeCwgeTogeSwgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgdG9wOiB5LFxuICAgICAgICByaWdodDogeCArIHdpZHRoLFxuICAgICAgICBib3R0b206IGhlaWdodCArIHksXG4gICAgICAgIGxlZnQ6IHhcbiAgICB9KTtcblxuICAgIHJldHVybiByZWN0O1xufVxuXG4vKipcclxuICogQ3JlYXRlcyBET01SZWN0SW5pdCBvYmplY3QgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGRpbWVuc2lvbnMgYW5kIHRoZSB4L3kgY29vcmRpbmF0ZXMuXHJcbiAqIFNwZWM6IGh0dHBzOi8vZHJhZnRzLmZ4dGYub3JnL2dlb21ldHJ5LyNkaWN0ZGVmLWRvbXJlY3Rpbml0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gWCBjb29yZGluYXRlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFkgY29vcmRpbmF0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gUmVjdGFuZ2xlJ3Mgd2lkdGguXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBSZWN0YW5nbGUncyBoZWlnaHQuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXG5mdW5jdGlvbiBjcmVhdGVSZWN0SW5pdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIHsgeDogeCwgeTogeSwgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCB9O1xufVxuXG4vKipcclxuICogQ2xhc3MgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgY29tcHV0YXRpb25zIG9mIHRoZSBjb250ZW50IHJlY3RhbmdsZSBvZlxyXG4gKiBwcm92aWRlZCBET00gZWxlbWVudCBhbmQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgaXQncyBjaGFuZ2VzLlxyXG4gKi9cbnZhciBSZXNpemVPYnNlcnZhdGlvbiA9IGZ1bmN0aW9uKHRhcmdldCkge1xuICAgIHRoaXMuYnJvYWRjYXN0V2lkdGggPSAwO1xuICAgIHRoaXMuYnJvYWRjYXN0SGVpZ2h0ID0gMDtcbiAgICB0aGlzLmNvbnRlbnRSZWN0XyA9IGNyZWF0ZVJlY3RJbml0KDAsIDAsIDAsIDApO1xuXG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG59O1xuXG4vKipcclxuICogVXBkYXRlcyBjb250ZW50IHJlY3RhbmdsZSBhbmQgdGVsbHMgd2hldGhlciBpdCdzIHdpZHRoIG9yIGhlaWdodCBwcm9wZXJ0aWVzXHJcbiAqIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBicm9hZGNhc3QuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cblxuXG4vKipcclxuICogUmVmZXJlbmNlIHRvIHRoZSBsYXN0IG9ic2VydmVkIGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG4gKlxyXG4gKiBAcHJpdmF0ZSB7RE9NUmVjdEluaXR9XHJcbiAqL1xuXG5cbi8qKlxyXG4gKiBCcm9hZGNhc3RlZCB3aWR0aCBvZiBjb250ZW50IHJlY3RhbmdsZS5cclxuICpcclxuICogQHR5cGUge251bWJlcn1cclxuICovXG5SZXNpemVPYnNlcnZhdGlvbi5wcm90b3R5cGUuaXNBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlY3QgPSBnZXRDb250ZW50UmVjdCh0aGlzLnRhcmdldCk7XG5cbiAgICB0aGlzLmNvbnRlbnRSZWN0XyA9IHJlY3Q7XG5cbiAgICByZXR1cm4gcmVjdC53aWR0aCAhPT0gdGhpcy5icm9hZGNhc3RXaWR0aCB8fCByZWN0LmhlaWdodCAhPT0gdGhpcy5icm9hZGNhc3RIZWlnaHQ7XG59O1xuXG4vKipcclxuICogVXBkYXRlcyAnYnJvYWRjYXN0V2lkdGgnIGFuZCAnYnJvYWRjYXN0SGVpZ2h0JyBwcm9wZXJ0aWVzIHdpdGggYSBkYXRhXHJcbiAqIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBvZiB0aGUgbGFzdCBvYnNlcnZlZCBjb250ZW50IHJlY3RhbmdsZS5cclxuICpcclxuICogQHJldHVybnMge0RPTVJlY3RJbml0fSBMYXN0IG9ic2VydmVkIGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG4gKi9cblJlc2l6ZU9ic2VydmF0aW9uLnByb3RvdHlwZS5icm9hZGNhc3RSZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWN0ID0gdGhpcy5jb250ZW50UmVjdF87XG5cbiAgICB0aGlzLmJyb2FkY2FzdFdpZHRoID0gcmVjdC53aWR0aDtcbiAgICB0aGlzLmJyb2FkY2FzdEhlaWdodCA9IHJlY3QuaGVpZ2h0O1xuXG4gICAgcmV0dXJuIHJlY3Q7XG59O1xuXG52YXIgUmVzaXplT2JzZXJ2ZXJFbnRyeSA9IGZ1bmN0aW9uKHRhcmdldCwgcmVjdEluaXQpIHtcbiAgICB2YXIgY29udGVudFJlY3QgPSBjcmVhdGVSZWFkT25seVJlY3QocmVjdEluaXQpO1xuXG4gICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFyZSBub3Qgd3JpdGFibGVcbiAgICAvLyBhbmQgYXJlIGFsc28gbm90IGVudW1lcmFibGUgaW4gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAvL1xuICAgIC8vIFByb3BlcnR5IGFjY2Vzc29ycyBhcmUgbm90IGJlaW5nIHVzZWQgYXMgdGhleSdkIHJlcXVpcmUgdG8gZGVmaW5lIGFcbiAgICAvLyBwcml2YXRlIFdlYWtNYXAgc3RvcmFnZSB3aGljaCBtYXkgY2F1c2UgbWVtb3J5IGxlYWtzIGluIGJyb3dzZXJzIHRoYXRcbiAgICAvLyBkb24ndCBzdXBwb3J0IHRoaXMgdHlwZSBvZiBjb2xsZWN0aW9ucy5cbiAgICBkZWZpbmVDb25maWd1cmFibGUodGhpcywgeyB0YXJnZXQ6IHRhcmdldCwgY29udGVudFJlY3Q6IGNvbnRlbnRSZWN0IH0pO1xufTtcblxudmFyIFJlc2l6ZU9ic2VydmVyU1BJID0gZnVuY3Rpb24oY2FsbGJhY2ssIGNvbnRyb2xsZXIsIGNhbGxiYWNrQ3R4KSB7XG4gICAgdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfID0gW107XG4gICAgdGhpcy5vYnNlcnZhdGlvbnNfID0gbmV3IE1hcFNoaW0oKTtcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGNhbGxiYWNrIHByb3ZpZGVkIGFzIHBhcmFtZXRlciAxIGlzIG5vdCBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2tfID0gY2FsbGJhY2s7XG4gICAgdGhpcy5jb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7XG4gICAgdGhpcy5jYWxsYmFja0N0eF8gPSBjYWxsYmFja0N0eDtcbn07XG5cbi8qKlxyXG4gKiBTdGFydHMgb2JzZXJ2aW5nIHByb3ZpZGVkIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0byBiZSBvYnNlcnZlZC5cclxuICogQHJldHVybnMge3ZvaWR9XHJcbiAqL1xuXG5cbi8qKlxyXG4gKiBSZWdpc3RyeSBvZiB0aGUgUmVzaXplT2JzZXJ2YXRpb24gaW5zdGFuY2VzLlxyXG4gKlxyXG4gKiBAcHJpdmF0ZSB7TWFwPEVsZW1lbnQsIFJlc2l6ZU9ic2VydmF0aW9uPn1cclxuICovXG5cblxuLyoqXHJcbiAqIFB1YmxpYyBSZXNpemVPYnNlcnZlciBpbnN0YW5jZSB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2tcclxuICogZnVuY3Rpb24gYW5kIHVzZWQgYXMgYSB2YWx1ZSBvZiBpdCdzIFwidGhpc1wiIGJpbmRpbmcuXHJcbiAqXHJcbiAqIEBwcml2YXRlIHtSZXNpemVPYnNlcnZlcn1cclxuICovXG5cbi8qKlxyXG4gKiBDb2xsZWN0aW9uIG9mIHJlc2l6ZSBvYnNlcnZhdGlvbnMgdGhhdCBoYXZlIGRldGVjdGVkIGNoYW5nZXMgaW4gZGltZW5zaW9uc1xyXG4gKiBvZiBlbGVtZW50cy5cclxuICpcclxuICogQHByaXZhdGUge0FycmF5PFJlc2l6ZU9ic2VydmF0aW9uPn1cclxuICovXG5SZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LicpO1xuICAgIH1cblxuICAgIC8vIERvIG5vdGhpbmcgaWYgY3VycmVudCBlbnZpcm9ubWVudCBkb2Vzbid0IGhhdmUgdGhlIEVsZW1lbnQgaW50ZXJmYWNlLlxuICAgIGlmICh0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgIShFbGVtZW50IGluc3RhbmNlb2YgT2JqZWN0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgZ2V0V2luZG93T2YodGFyZ2V0KS5FbGVtZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSBcIkVsZW1lbnRcIi4nKTtcbiAgICB9XG5cbiAgICB2YXIgb2JzZXJ2YXRpb25zID0gdGhpcy5vYnNlcnZhdGlvbnNfO1xuXG4gICAgLy8gRG8gbm90aGluZyBpZiBlbGVtZW50IGlzIGFscmVhZHkgYmVpbmcgb2JzZXJ2ZWQuXG4gICAgaWYgKG9ic2VydmF0aW9ucy5oYXModGFyZ2V0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb2JzZXJ2YXRpb25zLnNldCh0YXJnZXQsIG5ldyBSZXNpemVPYnNlcnZhdGlvbih0YXJnZXQpKTtcblxuICAgIHRoaXMuY29udHJvbGxlcl8uYWRkT2JzZXJ2ZXIodGhpcyk7XG5cbiAgICAvLyBGb3JjZSB0aGUgdXBkYXRlIG9mIG9ic2VydmF0aW9ucy5cbiAgICB0aGlzLmNvbnRyb2xsZXJfLnJlZnJlc2goKTtcbn07XG5cbi8qKlxyXG4gKiBTdG9wcyBvYnNlcnZpbmcgcHJvdmlkZWQgZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIHN0b3Agb2JzZXJ2aW5nLlxyXG4gKiBAcmV0dXJucyB7dm9pZH1cclxuICovXG5SZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUudW5vYnNlcnZlID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuJyk7XG4gICAgfVxuXG4gICAgLy8gRG8gbm90aGluZyBpZiBjdXJyZW50IGVudmlyb25tZW50IGRvZXNuJ3QgaGF2ZSB0aGUgRWxlbWVudCBpbnRlcmZhY2UuXG4gICAgaWYgKHR5cGVvZiBFbGVtZW50ID09PSAndW5kZWZpbmVkJyB8fCAhKEVsZW1lbnQgaW5zdGFuY2VvZiBPYmplY3QpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBnZXRXaW5kb3dPZih0YXJnZXQpLkVsZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlIFwiRWxlbWVudFwiLicpO1xuICAgIH1cblxuICAgIHZhciBvYnNlcnZhdGlvbnMgPSB0aGlzLm9ic2VydmF0aW9uc187XG5cbiAgICAvLyBEbyBub3RoaW5nIGlmIGVsZW1lbnQgaXMgbm90IGJlaW5nIG9ic2VydmVkLlxuICAgIGlmICghb2JzZXJ2YXRpb25zLmhhcyh0YXJnZXQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvYnNlcnZhdGlvbnMuZGVsZXRlKHRhcmdldCk7XG5cbiAgICBpZiAoIW9ic2VydmF0aW9ucy5zaXplKSB7XG4gICAgICAgIHRoaXMuY29udHJvbGxlcl8ucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XG4gICAgfVxufTtcblxuLyoqXHJcbiAqIFN0b3BzIG9ic2VydmluZyBhbGwgZWxlbWVudHMuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHt2b2lkfVxyXG4gKi9cblJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY2xlYXJBY3RpdmUoKTtcbiAgICB0aGlzLm9ic2VydmF0aW9uc18uY2xlYXIoKTtcbiAgICB0aGlzLmNvbnRyb2xsZXJfLnJlbW92ZU9ic2VydmVyKHRoaXMpO1xufTtcblxuLyoqXHJcbiAqIENvbGxlY3RzIG9ic2VydmF0aW9uIGluc3RhbmNlcyB0aGUgYXNzb2NpYXRlZCBlbGVtZW50IG9mIHdoaWNoIGhhcyBjaGFuZ2VkXHJcbiAqIGl0J3MgY29udGVudCByZWN0YW5nbGUuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHt2b2lkfVxyXG4gKi9cblJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5nYXRoZXJBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xuXG4gICAgdGhpcy5vYnNlcnZhdGlvbnNfLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmF0aW9uKSB7XG4gICAgICAgIGlmIChvYnNlcnZhdGlvbi5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICB0aGlzJDEuYWN0aXZlT2JzZXJ2YXRpb25zXy5wdXNoKG9ic2VydmF0aW9uKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuLyoqXHJcbiAqIEludm9rZXMgaW5pdGlhbCBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIGEgbGlzdCBvZiBSZXNpemVPYnNlcnZlckVudHJ5XHJcbiAqIGluc3RhbmNlcyBjb2xsZWN0ZWQgZnJvbSBhY3RpdmUgcmVzaXplIG9ic2VydmF0aW9ucy5cclxuICpcclxuICogQHJldHVybnMge3ZvaWR9XHJcbiAqL1xuUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLmJyb2FkY2FzdEFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBEbyBub3RoaW5nIGlmIG9ic2VydmVyIGRvZXNuJ3QgaGF2ZSBhY3RpdmUgb2JzZXJ2YXRpb25zLlxuICAgIGlmICghdGhpcy5oYXNBY3RpdmUoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGN0eCA9IHRoaXMuY2FsbGJhY2tDdHhfO1xuXG4gICAgLy8gQ3JlYXRlIFJlc2l6ZU9ic2VydmVyRW50cnkgaW5zdGFuY2UgZm9yIGV2ZXJ5IGFjdGl2ZSBvYnNlcnZhdGlvbi5cbiAgICB2YXIgZW50cmllcyA9IHRoaXMuYWN0aXZlT2JzZXJ2YXRpb25zXy5tYXAoZnVuY3Rpb24gKG9ic2VydmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzaXplT2JzZXJ2ZXJFbnRyeShvYnNlcnZhdGlvbi50YXJnZXQsIG9ic2VydmF0aW9uLmJyb2FkY2FzdFJlY3QoKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNhbGxiYWNrXy5jYWxsKGN0eCwgZW50cmllcywgY3R4KTtcbiAgICB0aGlzLmNsZWFyQWN0aXZlKCk7XG59O1xuXG4vKipcclxuICogQ2xlYXJzIHRoZSBjb2xsZWN0aW9uIG9mIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHt2b2lkfVxyXG4gKi9cblJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5jbGVhckFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmFjdGl2ZU9ic2VydmF0aW9uc18uc3BsaWNlKDApO1xufTtcblxuLyoqXHJcbiAqIFRlbGxzIHdoZXRoZXIgb2JzZXJ2ZXIgaGFzIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cblJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5oYXNBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlT2JzZXJ2YXRpb25zXy5sZW5ndGggPiAwO1xufTtcblxuLy8gUmVnaXN0cnkgb2YgaW50ZXJuYWwgb2JzZXJ2ZXJzLiBJZiBXZWFrTWFwIGlzIG5vdCBhdmFpbGFibGUgdXNlIGN1cnJlbnQgc2hpbVxuLy8gZm9yIHRoZSBNYXAgY29sbGVjdGlvbiBhcyBpdCBoYXMgYWxsIHJlcXVpcmVkIG1ldGhvZHMgYW5kIGJlY2F1c2UgV2Vha01hcFxuLy8gY2FuJ3QgYmUgZnVsbHkgcG9seWZpbGxlZCBhbnl3YXkuXG52YXIgb2JzZXJ2ZXJzID0gdHlwZW9mIFdlYWtNYXAgIT09ICd1bmRlZmluZWQnID8gbmV3IFdlYWtNYXAoKSA6IG5ldyBNYXBTaGltKCk7XG5cbi8qKlxyXG4gKiBSZXNpemVPYnNlcnZlciBBUEkuIEVuY2Fwc3VsYXRlcyB0aGUgUmVzaXplT2JzZXJ2ZXIgU1BJIGltcGxlbWVudGF0aW9uXHJcbiAqIGV4cG9zaW5nIG9ubHkgdGhvc2UgbWV0aG9kcyBhbmQgcHJvcGVydGllcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzcGVjLlxyXG4gKi9cbnZhciBSZXNpemVPYnNlcnZlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuJyk7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRyb2xsZXIgPSBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXJTUEkoY2FsbGJhY2ssIGNvbnRyb2xsZXIsIHRoaXMpO1xuXG4gICAgb2JzZXJ2ZXJzLnNldCh0aGlzLCBvYnNlcnZlcik7XG59O1xuXG4vLyBFeHBvc2UgcHVibGljIG1ldGhvZHMgb2YgUmVzaXplT2JzZXJ2ZXIuXG5bJ29ic2VydmUnLCAndW5vYnNlcnZlJywgJ2Rpc2Nvbm5lY3QnXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICBSZXNpemVPYnNlcnZlci5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChyZWYgPSBvYnNlcnZlcnMuZ2V0KHRoaXMpKVttZXRob2RdLmFwcGx5KHJlZiwgYXJndW1lbnRzKTtcbiAgICAgICAgdmFyIHJlZjtcbiAgICB9O1xufSk7XG5cbnZhciBpbmRleCA9IChmdW5jdGlvbiAoKSB7XG4gICAgLy8gRXhwb3J0IGV4aXN0aW5nIGltcGxlbWVudGF0aW9uIGlmIGF2YWlsYWJsZS5cbiAgICBpZiAodHlwZW9mIGdsb2JhbCQxLlJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gZ2xvYmFsJDEuUmVzaXplT2JzZXJ2ZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFJlc2l6ZU9ic2VydmVyO1xufSkoKTtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXg7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBzdG9yZWRGb2N1c0VsZW1lbnQ7XG5cbmV4cG9ydHMuc3RvcmVGb2N1cyA9IGZ1bmN0aW9uKCkge1xuICBzdG9yZWRGb2N1c0VsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xufTtcblxuZXhwb3J0cy5jbGVhclN0b3JlZEZvY3VzID0gZnVuY3Rpb24oKSB7XG4gIHN0b3JlZEZvY3VzRWxlbWVudCA9IG51bGw7XG59O1xuXG5leHBvcnRzLnJlc3RvcmVGb2N1cyA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXN0b3JlZEZvY3VzRWxlbWVudCkgcmV0dXJuO1xuICB0cnkgeyBzdG9yZWRGb2N1c0VsZW1lbnQuZm9jdXMoKTsgfSBjYXRjaCAoZXJyKSB7fVxuICBzdG9yZWRGb2N1c0VsZW1lbnQgPSBudWxsO1xufTtcbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpbXVsYXRpb25zID0gc2ltdWxhdGlvbnM7XG5leHBvcnRzLmRlZmF1bHQgPSBnZW5lcmF0ZTtcblxudmFyIF9DU1NQcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKCcuL0NTU1Byb3BlcnR5T3BlcmF0aW9ucycpO1xuXG52YXIgX3BsdWdpbnMgPSByZXF1aXJlKCcuL3BsdWdpbnMnKTtcblxudmFyIGlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuLy8gaW1wb3J0IHR5cGUgeyBBU1QgfSBmcm9tICcuL3R5cGVzJztcblxuXG4vLyBhIGZsYWcgdG8gZW5hYmxlIHNpbXVsYXRpb24gbWV0YSB0YWdzIG9uIGRvbSBub2Rlc1xuLy8gZGVmYXVsdHMgdG8gdHJ1ZSBpbiBkZXYgbW9kZS4gcmVjb21tZW5kICpub3QqIHRvXG4vLyB0b2dnbGUgb2Z0ZW4uXG52YXIgY2FuU2ltdWxhdGUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nO1xuXG4vLyB3ZSB1c2UgdGhlc2UgZmxhZ3MgZm9yIGlzc3Vpbmcgd2FybmluZ3Mgd2hlbiBzaW11bGF0ZSBpcyBjYWxsZWRcbi8vIGluIHByb2QgLyBpbiBpbmNvcnJlY3Qgb3JkZXJcbnZhciB3YXJuZWQxID0gZmFsc2UsXG4gICAgd2FybmVkMiA9IGZhbHNlO1xuXG4vLyB0b2dnbGVzIHNpbXVsYXRpb24gYWN0aXZpdHkuIHNob3VsZG4ndCBiZSBuZWVkZWQgaW4gbW9zdCBjYXNlc1xuZnVuY3Rpb24gc2ltdWxhdGlvbnMoKSB7XG4gIHZhciBib29sID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0cnVlO1xuXG4gIGNhblNpbXVsYXRlID0gISFib29sO1xufVxuXG4vLyB0YWtlcyBhIHN0cmluZywgY29udmVydHMgdG8gbG93ZXJjYXNlLCBzdHJpcHMgb3V0IG5vbmFscGhhbnVtZXJpYy5cbmZ1bmN0aW9uIHNpbXBsZShzdHIpIHtcbiAgdmFyIHJlcGxhY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnO1xuXG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0vZywgcmVwbGFjZSk7XG59XG5cbi8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2oyY3NzL2oyYy9ibG9iLzVkMzgxYzJkNzIxZDA0YjU0ZmFiZTZhMTY1ZDU4NzI0N2MzMDg3Y2Ivc3JjL2hlbHBlcnMuanMjTDI4LUw2MVxuXG4vLyBcIlRva2VuaXplc1wiIHRoZSBzZWxlY3RvcnMgaW50byBwYXJ0cyByZWxldmFudCBmb3IgdGhlIG5leHQgZnVuY3Rpb24uXG4vLyBTdHJpbmdzIGFuZCBjb21tZW50cyBhcmUgbWF0Y2hlZCwgYnV0IGlnbm9yZWQgYWZ0ZXJ3YXJkcy5cbi8vIFRoaXMgaXMgbm90IGEgZnVsbCB0b2tlbml6ZXJzLiBJdCBvbmx5IHJlY29nbml6ZXMgY29tYXMsIHBhcmVudGhlc2VzLFxuLy8gc3RyaW5ncyBhbmQgY29tbWVudHMuXG4vLyByZWdleHAgZ2VuZXJhdGVkIGJ5IHNjcmlwdHMvcmVnZXhwcy5qcyB0aGVuIHRyaW1tZWQgYnkgaGFuZFxudmFyIHNlbGVjdG9yVG9rZW5pemVyID0gL1soKSxdfFwiKD86XFxcXC58W15cIlxcbl0pKlwifCcoPzpcXFxcLnxbXidcXG5dKSonfFxcL1xcKltcXHNcXFNdKj9cXCpcXC8vZztcblxuLyoqXG4gKiBUaGlzIHdpbGwgc3BsaXQgYSBjb21hLXNlcGFyYXRlZCBzZWxlY3RvciBsaXN0IGludG8gaW5kaXZpZHVhbCBzZWxlY3RvcnMsXG4gKiBpZ25vcmluZyBjb21hcyBpbiBzdHJpbmdzLCBjb21tZW50cyBhbmQgaW4gOnBzZXVkby1zZWxlY3RvcnMocGFyYW1ldGVyLCBsaXN0cykuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuXG5mdW5jdGlvbiBzcGxpdFNlbGVjdG9yKHNlbGVjdG9yKSB7XG4gIGlmIChzZWxlY3Rvci5pbmRleE9mKCcsJykgPT09IC0xKSB7XG4gICAgcmV0dXJuIFtzZWxlY3Rvcl07XG4gIH1cblxuICB2YXIgaW5kaWNlcyA9IFtdLFxuICAgICAgcmVzID0gW10sXG4gICAgICBpblBhcmVuID0gMCxcbiAgICAgIG87XG4gIC8qZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24qL1xuICB3aGlsZSAobyA9IHNlbGVjdG9yVG9rZW5pemVyLmV4ZWMoc2VsZWN0b3IpKSB7XG4gICAgLyplc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduKi9cbiAgICBzd2l0Y2ggKG9bMF0pIHtcbiAgICAgIGNhc2UgJygnOlxuICAgICAgICBpblBhcmVuKys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnKSc6XG4gICAgICAgIGluUGFyZW4tLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcsJzpcbiAgICAgICAgaWYgKGluUGFyZW4pIGJyZWFrO1xuICAgICAgICBpbmRpY2VzLnB1c2goby5pbmRleCk7XG4gICAgfVxuICB9XG4gIGZvciAobyA9IGluZGljZXMubGVuZ3RoOyBvLS07KSB7XG4gICAgcmVzLnVuc2hpZnQoc2VsZWN0b3Iuc2xpY2UoaW5kaWNlc1tvXSArIDEpKTtcbiAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKDAsIGluZGljZXNbb10pO1xuICB9XG4gIHJlcy51bnNoaWZ0KHNlbGVjdG9yKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gc2VsZWN0b3IoaWQpIHtcbiAgdmFyIHBhdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnO1xuXG4gIGlmICghaWQgJiYgcGF0aCkge1xuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcJi9nLCAnJyk7XG4gIH1cbiAgaWYgKGlkICYmICFwYXRoKSByZXR1cm4gJy4nICsgaWQ7XG5cbiAgdmFyIHggPSBzcGxpdFNlbGVjdG9yKHBhdGgpLm1hcChmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB4LmluZGV4T2YoJyYnKSA+PSAwID8geC5yZXBsYWNlKC9cXCYvZ20sICcuJyArIGlkKSAvLyB0b2RvIC0gbWFrZSBzdXJlIGVhY2ggc3ViIHNlbGVjdG9yIGhhcyBhbiAmXG4gICAgOiAnLicgKyBpZCArIHg7XG4gIH0pLmpvaW4oJywnKTtcblxuICBpZiAoY2FuU2ltdWxhdGUgJiYgL15cXCZcXDovLmV4ZWMocGF0aCkgJiYgIS9cXHMvLmV4ZWMocGF0aCkpIHtcbiAgICB4ICs9ICcsLicgKyBpZCArICdbZGF0YS1zaW11bGF0ZS0nICsgc2ltcGxlKHBhdGgpICsgJ10nO1xuICB9XG4gIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiB0b0NTUyhub2RlKSB7XG4gIHZhciByZXN1bHQgPSAoMCwgX3BsdWdpbnMucHJlZml4ZXMpKCgwLCBfcGx1Z2lucy5mYWxsYmFja3MpKCgwLCBfcGx1Z2lucy5jb250ZW50V3JhcCkobm9kZSkpKTtcbiAgcmV0dXJuIHJlc3VsdC5zZWxlY3RvciArICd7JyArICgwLCBfQ1NTUHJvcGVydHlPcGVyYXRpb25zLmNyZWF0ZU1hcmt1cEZvclN0eWxlcykocmVzdWx0LnN0eWxlKSArICd9Jztcbn1cblxuZnVuY3Rpb24gdG9DU1NBcnJheShpZCwgcGFyc2VkKSB7XG4gIHZhciBjc3MgPSBbXTtcblxuICAvLyBwbHVnaW5zIGhlcmVcbiAgdmFyIHBsYWluID0gcGFyc2VkLnBsYWluLFxuICAgICAgc2VsZWN0cyA9IHBhcnNlZC5zZWxlY3RzLFxuICAgICAgbWVkaWFzID0gcGFyc2VkLm1lZGlhcyxcbiAgICAgIHN1cHBvcnRzID0gcGFyc2VkLnN1cHBvcnRzO1xuICAvLyB0b2RvIC0gOmhvc3Q/XG5cbiAgaWYgKHBsYWluKSB7XG4gICAgY3NzLnB1c2godG9DU1MoeyBzdHlsZTogcGxhaW4sIHNlbGVjdG9yOiBzZWxlY3RvcihpZCkgfSkpO1xuICB9XG4gIGlmIChzZWxlY3RzKSB7XG4gICAgT2JqZWN0LmtleXMoc2VsZWN0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gY3NzLnB1c2godG9DU1MoeyBzdHlsZTogc2VsZWN0c1trZXldLCBzZWxlY3Rvcjogc2VsZWN0b3IoaWQsIGtleSkgfSkpO1xuICAgIH0pO1xuICB9XG4gIGlmIChtZWRpYXMpIHtcbiAgICBPYmplY3Qua2V5cyhtZWRpYXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGNzcy5wdXNoKGtleSArICd7JyArIHRvQ1NTQXJyYXkoaWQsIG1lZGlhc1trZXldKS5qb2luKCcnKSArICd9Jyk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKHN1cHBvcnRzKSB7XG4gICAgT2JqZWN0LmtleXMoc3VwcG9ydHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGNzcy5wdXNoKGtleSArICd7JyArIHRvQ1NTQXJyYXkoaWQsIHN1cHBvcnRzW2tleV0pLmpvaW4oJycpICsgJ30nKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY3NzO1xufVxuXG4vLyB0b2RvIC0gaWYgc2VydmVyIHNpZGUsIHRoZW4gY2FjaGUgb24gY2xhc3NuYW1lXG5mdW5jdGlvbiBnZW5lcmF0ZShfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHBhcnNlZCA9IF9yZWYucGFyc2VkO1xuXG4gIHJldHVybiB0b0NTU0FycmF5KGNsYXNzTmFtZSwgcGFyc2VkKTtcbn0iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnByb2Nlc3NTdHlsZU5hbWUgPSB1bmRlZmluZWQ7XG5leHBvcnRzLmNyZWF0ZU1hcmt1cEZvclN0eWxlcyA9IGNyZWF0ZU1hcmt1cEZvclN0eWxlcztcblxudmFyIF9jYW1lbGl6ZVN0eWxlTmFtZSA9IHJlcXVpcmUoJ2ZianMvbGliL2NhbWVsaXplU3R5bGVOYW1lJyk7XG5cbnZhciBfY2FtZWxpemVTdHlsZU5hbWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2FtZWxpemVTdHlsZU5hbWUpO1xuXG52YXIgX2Rhbmdlcm91c1N0eWxlVmFsdWUgPSByZXF1aXJlKCcuL2Rhbmdlcm91c1N0eWxlVmFsdWUnKTtcblxudmFyIF9kYW5nZXJvdXNTdHlsZVZhbHVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Rhbmdlcm91c1N0eWxlVmFsdWUpO1xuXG52YXIgX2h5cGhlbmF0ZVN0eWxlTmFtZSA9IHJlcXVpcmUoJ2ZianMvbGliL2h5cGhlbmF0ZVN0eWxlTmFtZScpO1xuXG52YXIgX2h5cGhlbmF0ZVN0eWxlTmFtZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oeXBoZW5hdGVTdHlsZU5hbWUpO1xuXG52YXIgX21lbW9pemVTdHJpbmdPbmx5ID0gcmVxdWlyZSgnZmJqcy9saWIvbWVtb2l6ZVN0cmluZ09ubHknKTtcblxudmFyIF9tZW1vaXplU3RyaW5nT25seTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tZW1vaXplU3RyaW5nT25seSk7XG5cbnZhciBfd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIF93YXJuaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dhcm5pbmcpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgcHJvY2Vzc1N0eWxlTmFtZSA9IGV4cG9ydHMucHJvY2Vzc1N0eWxlTmFtZSA9ICgwLCBfbWVtb2l6ZVN0cmluZ09ubHkyLmRlZmF1bHQpKF9oeXBoZW5hdGVTdHlsZU5hbWUyLmRlZmF1bHQpOyAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvdmlkZXNNb2R1bGUgQ1NTUHJvcGVydHlPcGVyYXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gJ21zVHJhbnNmb3JtJyBpcyBjb3JyZWN0LCBidXQgdGhlIG90aGVyIHByZWZpeGVzIHNob3VsZCBiZSBjYXBpdGFsaXplZFxuICB2YXIgYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuID0gL14oPzp3ZWJraXR8bW96fG8pW0EtWl0vO1xuXG4gIC8vIHN0eWxlIHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvblxuICB2YXIgYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuID0gLztcXHMqJC87XG5cbiAgdmFyIHdhcm5lZFN0eWxlTmFtZXMgPSB7fTtcbiAgdmFyIHdhcm5lZFN0eWxlVmFsdWVzID0ge307XG4gIHZhciB3YXJuZWRGb3JOYU5WYWx1ZSA9IGZhbHNlO1xuXG4gIHZhciB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lKG5hbWUsIG93bmVyKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyAoMCwgX3dhcm5pbmcyLmRlZmF1bHQpKGZhbHNlLCAnVW5zdXBwb3J0ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8lcycsIG5hbWUsICgwLCBfY2FtZWxpemVTdHlsZU5hbWUyLmRlZmF1bHQpKG5hbWUpLCBjaGVja1JlbmRlck1lc3NhZ2Uob3duZXIpKSA6IHZvaWQgMDtcbiAgfTtcblxuICB2YXIgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lID0gZnVuY3Rpb24gd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lKG5hbWUsIG93bmVyKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyAoMCwgX3dhcm5pbmcyLmRlZmF1bHQpKGZhbHNlLCAnVW5zdXBwb3J0ZWQgdmVuZG9yLXByZWZpeGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JXMnLCBuYW1lLCBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKSwgY2hlY2tSZW5kZXJNZXNzYWdlKG93bmVyKSkgOiB2b2lkIDA7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlV2l0aFNlbWljb2xvbiA9IGZ1bmN0aW9uIHdhcm5TdHlsZVZhbHVlV2l0aFNlbWljb2xvbihuYW1lLCB2YWx1ZSwgb3duZXIpIHtcbiAgICBpZiAod2FybmVkU3R5bGVWYWx1ZXMuaGFzT3duUHJvcGVydHkodmFsdWUpICYmIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSA9IHRydWU7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/ICgwLCBfd2FybmluZzIuZGVmYXVsdCkoZmFsc2UsICdTdHlsZSBwcm9wZXJ0eSB2YWx1ZXMgc2hvdWxkblxcJ3QgY29udGFpbiBhIHNlbWljb2xvbi4lcyAnICsgJ1RyeSBcIiVzOiAlc1wiIGluc3RlYWQuJywgY2hlY2tSZW5kZXJNZXNzYWdlKG93bmVyKSwgbmFtZSwgdmFsdWUucmVwbGFjZShiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4sICcnKSkgOiB2b2lkIDA7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlSXNOYU4gPSBmdW5jdGlvbiB3YXJuU3R5bGVWYWx1ZUlzTmFOKG5hbWUsIHZhbHVlLCBvd25lcikge1xuICAgIGlmICh3YXJuZWRGb3JOYU5WYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvck5hTlZhbHVlID0gdHJ1ZTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gKDAsIF93YXJuaW5nMi5kZWZhdWx0KShmYWxzZSwgJ2BOYU5gIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS4lcycsIG5hbWUsIGNoZWNrUmVuZGVyTWVzc2FnZShvd25lcikpIDogdm9pZCAwO1xuICB9O1xuXG4gIHZhciBjaGVja1JlbmRlck1lc3NhZ2UgPSBmdW5jdGlvbiBjaGVja1JlbmRlck1lc3NhZ2Uob3duZXIpIHtcbiAgICBpZiAob3duZXIpIHtcbiAgICAgIHZhciBuYW1lID0gb3duZXIuZ2V0TmFtZSgpO1xuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7UmVhY3RET01Db21wb25lbnR9IGNvbXBvbmVudFxuICAgKi9cbiAgdmFyIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gd2FyblZhbGlkU3R5bGUobmFtZSwgdmFsdWUsIGNvbXBvbmVudCkge1xuICAgIC8vZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICB2YXIgb3duZXIgPSB2b2lkIDA7XG4gICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgb3duZXIgPSBjb21wb25lbnQuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcbiAgICB9XG4gICAgaWYgKG5hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lKG5hbWUsIG93bmVyKTtcbiAgICB9IGVsc2UgaWYgKGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybi50ZXN0KG5hbWUpKSB7XG4gICAgICB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUobmFtZSwgb3duZXIpO1xuICAgIH0gZWxzZSBpZiAoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24obmFtZSwgdmFsdWUsIG93bmVyKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSkpIHtcbiAgICAgIHdhcm5TdHlsZVZhbHVlSXNOYU4obmFtZSwgdmFsdWUsIG93bmVyKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWFwcGluZyBvZiBzdHlsZSBwcm9wZXJ0aWVzIGZvciB1c2UgYXMgaW5saW5lIHN0eWxlczpcbiAgICpcbiAgICogICA+IGNyZWF0ZU1hcmt1cEZvclN0eWxlcyh7d2lkdGg6ICcyMDBweCcsIGhlaWdodDogMH0pXG4gICAqICAgXCJ3aWR0aDoyMDBweDtoZWlnaHQ6MDtcIlxuICAgKlxuICAgKiBVbmRlZmluZWQgdmFsdWVzIGFyZSBpZ25vcmVkIHNvIHRoYXQgZGVjbGFyYXRpdmUgcHJvZ3JhbW1pbmcgaXMgZWFzaWVyLlxuICAgKiBUaGUgcmVzdWx0IHNob3VsZCBiZSBIVE1MLWVzY2FwZWQgYmVmb3JlIGluc2VydGlvbiBpbnRvIHRoZSBET00uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZXNcbiAgICogQHBhcmFtIHtSZWFjdERPTUNvbXBvbmVudH0gY29tcG9uZW50XG4gICAqIEByZXR1cm4gez9zdHJpbmd9XG4gICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVNYXJrdXBGb3JTdHlsZXMoc3R5bGVzLCBjb21wb25lbnQpIHtcbiAgdmFyIHNlcmlhbGl6ZWQgPSAnJztcbiAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgIHZhciBpc0N1c3RvbVByb3AgPSBzdHlsZU5hbWUuaW5kZXhPZignLS0nKSA9PT0gMDtcbiAgICBpZiAoIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHN0eWxlTmFtZSA9PT0gJ2xhYmVsJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBzdHlsZVZhbHVlID0gc3R5bGVzW3N0eWxlTmFtZV07XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWlzQ3VzdG9tUHJvcCkge1xuICAgICAgd2FyblZhbGlkU3R5bGUoc3R5bGVOYW1lLCBzdHlsZVZhbHVlLCBjb21wb25lbnQpO1xuICAgIH1cbiAgICBpZiAoc3R5bGVWYWx1ZSAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNDdXN0b21Qcm9wKSB7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gc3R5bGVOYW1lICsgJzonICsgc3R5bGVWYWx1ZSArICc7JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gcHJvY2Vzc1N0eWxlTmFtZShzdHlsZU5hbWUpICsgJzonO1xuICAgICAgICBzZXJpYWxpemVkICs9ICgwLCBfZGFuZ2Vyb3VzU3R5bGVWYWx1ZTIuZGVmYXVsdCkoc3R5bGVOYW1lLCBzdHlsZVZhbHVlLCBjb21wb25lbnQpICsgJzsnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2VyaWFsaXplZCB8fCBudWxsO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCcuL2VtcHR5RnVuY3Rpb24nKTtcblxuLyoqXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIHdhcm5pbmcgPSBlbXB0eUZ1bmN0aW9uO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGZvcm1hdCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG5cbiAgd2FybmluZyA9IGZ1bmN0aW9uIHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArICdtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdC5pbmRleE9mKCdGYWlsZWQgQ29tcG9zaXRlIHByb3BUeXBlOiAnKSA9PT0gMCkge1xuICAgICAgcmV0dXJuOyAvLyBJZ25vcmUgQ29tcG9zaXRlQ29tcG9uZW50IHByb3B0eXBlIGNoZWNrLlxuICAgIH1cblxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIgOiAwKSwgX2tleTIgPSAyOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZy5hcHBseSh1bmRlZmluZWQsIFtmb3JtYXRdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdhcm5pbmc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBjYXBpdGFsaXplU3RyaW5nO1xuZnVuY3Rpb24gY2FwaXRhbGl6ZVN0cmluZyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3BvbHlsaW5lYXJTY2FsZSA9IHJlcXVpcmUoJy4vcG9seWxpbmVhci1zY2FsZScpO1xuXG52YXIgX3BvbHlsaW5lYXJTY2FsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wb2x5bGluZWFyU2NhbGUpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgdHJhbnNmb3JtVW5pdHMgPSB7XG4gIHBlcnNwZWN0aXZlOiAncHgnLFxuICByb3RhdGU6ICdkZWcnLFxuICByb3RhdGVYOiAnZGVnJyxcbiAgcm90YXRlWTogJ2RlZycsXG4gIHJvdGF0ZVo6ICdkZWcnLFxuICBzY2FsZTogJycsXG4gIHNjYWxlWDogJycsXG4gIHNjYWxlWTogJycsXG4gIHNjYWxlWjogJycsXG4gIHNrZXc6ICdkZWcnLFxuICBza2V3WDogJ2RlZycsXG4gIHNrZXdZOiAnZGVnJyxcbiAgdHJhbnNsYXRlWDogJ3B4JyxcbiAgdHJhbnNsYXRlWTogJ3B4JyxcbiAgdHJhbnNsYXRlWjogJ3B4J1xufTtcbnZhciB0cmFuc2Zvcm1LZXlzID0gT2JqZWN0LmtleXModHJhbnNmb3JtVW5pdHMpO1xuXG52YXIgQW5pbWF0aW9uQnVzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBBbmltYXRpb25CdXMoX3JlZikge1xuICAgIHZhciBhbmltYXRpb25zID0gX3JlZi5hbmltYXRpb25zLFxuICAgICAgICBlbGVtZW50ID0gX3JlZi5lbGVtZW50LFxuICAgICAgICBvcmlnaW4gPSBfcmVmLm9yaWdpbjtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBbmltYXRpb25CdXMpO1xuXG4gICAgdGhpcy5hbmltYXRpb25zID0gYW5pbWF0aW9ucztcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3JpZ2luID0gb3JpZ2luO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEFuaW1hdGlvbkJ1cywgW3tcbiAgICBrZXk6ICdnZXRTdHlsZXMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdHlsZXMoKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdGhpcy5lbGVtZW50O1xuXG4gICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4oZWxlbWVudCk7XG4gICAgICB2YXIgdHJhbnNmb3JtVmFsdWVzID0gW107XG4gICAgICB2YXIgc3R5bGVzID0ge307XG5cbiAgICAgIHRoaXMuYW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhbmltYXRpb24pIHtcbiAgICAgICAgdmFyIHByb3AgPSBhbmltYXRpb24ucHJvcDtcbiAgICAgICAgdmFyIHVuaXQgPSBhbmltYXRpb24udW5pdCB8fCB0cmFuc2Zvcm1Vbml0c1twcm9wXSB8fCAnJztcbiAgICAgICAgdmFyIHZhbHVlID0gKDAsIF9wb2x5bGluZWFyU2NhbGUyLmRlZmF1bHQpKGFuaW1hdGlvbi5zdG9wcykob3JpZ2luKTtcblxuICAgICAgICBpZiAodHJhbnNmb3JtS2V5cy5pbmRleE9mKHByb3ApID4gLTEpIHtcbiAgICAgICAgICB0cmFuc2Zvcm1WYWx1ZXMucHVzaChwcm9wICsgJygnICsgdmFsdWUgKyB1bml0ICsgJyknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHlsZXNbcHJvcF0gPSAnJyArIHZhbHVlICsgdW5pdDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHN0eWxlcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1WYWx1ZXMuam9pbignICcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3R5bGVzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2FwcGx5U3R5bGVzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYXBwbHlTdHlsZXMoKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdGhpcy5lbGVtZW50O1xuXG4gICAgICB2YXIgc3R5bGVzID0gdGhpcy5nZXRTdHlsZXMoZWxlbWVudCk7XG4gICAgICBPYmplY3Qua2V5cyhzdHlsZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5zdHlsZVtrZXldID0gc3R5bGVzW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQW5pbWF0aW9uQnVzO1xufSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBBbmltYXRpb25CdXM7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZShvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialsnZGVmYXVsdCddIDogb2JqOyB9XG5cbnZhciBfTW90aW9uID0gcmVxdWlyZSgnLi9Nb3Rpb24nKTtcblxuZXhwb3J0cy5Nb3Rpb24gPSBfaW50ZXJvcFJlcXVpcmUoX01vdGlvbik7XG5cbnZhciBfU3RhZ2dlcmVkTW90aW9uID0gcmVxdWlyZSgnLi9TdGFnZ2VyZWRNb3Rpb24nKTtcblxuZXhwb3J0cy5TdGFnZ2VyZWRNb3Rpb24gPSBfaW50ZXJvcFJlcXVpcmUoX1N0YWdnZXJlZE1vdGlvbik7XG5cbnZhciBfVHJhbnNpdGlvbk1vdGlvbiA9IHJlcXVpcmUoJy4vVHJhbnNpdGlvbk1vdGlvbicpO1xuXG5leHBvcnRzLlRyYW5zaXRpb25Nb3Rpb24gPSBfaW50ZXJvcFJlcXVpcmUoX1RyYW5zaXRpb25Nb3Rpb24pO1xuXG52YXIgX3NwcmluZyA9IHJlcXVpcmUoJy4vc3ByaW5nJyk7XG5cbmV4cG9ydHMuc3ByaW5nID0gX2ludGVyb3BSZXF1aXJlKF9zcHJpbmcpO1xuXG52YXIgX3ByZXNldHMgPSByZXF1aXJlKCcuL3ByZXNldHMnKTtcblxuZXhwb3J0cy5wcmVzZXRzID0gX2ludGVyb3BSZXF1aXJlKF9wcmVzZXRzKTtcblxudmFyIF9zdHJpcFN0eWxlID0gcmVxdWlyZSgnLi9zdHJpcFN0eWxlJyk7XG5cbmV4cG9ydHMuc3RyaXBTdHlsZSA9IF9pbnRlcm9wUmVxdWlyZShfc3RyaXBTdHlsZSk7XG5cbi8vIGRlcHJlY2F0ZWQsIGR1bW15IHdhcm5pbmcgZnVuY3Rpb25cblxudmFyIF9yZW9yZGVyS2V5cyA9IHJlcXVpcmUoJy4vcmVvcmRlcktleXMnKTtcblxuZXhwb3J0cy5yZW9yZGVyS2V5cyA9IF9pbnRlcm9wUmVxdWlyZShfcmVvcmRlcktleXMpOyIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0ge1xuICBub1dvYmJsZTogeyBzdGlmZm5lc3M6IDE3MCwgZGFtcGluZzogMjYgfSwgLy8gdGhlIGRlZmF1bHQsIGlmIG5vdGhpbmcgcHJvdmlkZWRcbiAgZ2VudGxlOiB7IHN0aWZmbmVzczogMTIwLCBkYW1waW5nOiAxNCB9LFxuICB3b2JibHk6IHsgc3RpZmZuZXNzOiAxODAsIGRhbXBpbmc6IDEyIH0sXG4gIHN0aWZmOiB7IHN0aWZmbmVzczogMjEwLCBkYW1waW5nOiAyMCB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTsiLCJ2YXIgcmVhY3RQcm9wZXJ0eSA9IHJlcXVpcmUoJ3JlYWN0LXByb3BlcnR5Jyk7XG52YXIgdXRpbGl0aWVzID0gcmVxdWlyZSgnLi91dGlsaXRpZXMnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBIVE1ML1NWRyBET00gYXR0cmlidXRlcyB0byBSZWFjdCBwcm9wcy5cbiAqXG4gKiBAcGFyYW0gIHtvYmplY3R9IFthdHRyaWJ1dGVzPXt9XSAtIEhUTUwvU1ZHIERPTSBhdHRyaWJ1dGVzLlxuICogQHJldHVybiB7b2JqZWN0fSAgICAgICAgICAgICAgICAgLSBSZWFjdCBwcm9wcy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhdHRyaWJ1dGVzVG9Qcm9wcyhhdHRyaWJ1dGVzKSB7XG4gIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuXG4gIHZhciB2YWx1ZU9ubHlJbnB1dHMgPSB7XG4gICAgcmVzZXQ6IHRydWUsXG4gICAgc3VibWl0OiB0cnVlXG4gIH07XG5cbiAgdmFyIGF0dHJpYnV0ZU5hbWU7XG4gIHZhciBhdHRyaWJ1dGVOYW1lTG93ZXJDYXNlZDtcbiAgdmFyIGF0dHJpYnV0ZVZhbHVlO1xuICB2YXIgcHJvcE5hbWU7XG4gIHZhciBwcm9wZXJ0eUluZm87XG4gIHZhciBwcm9wcyA9IHt9O1xuICB2YXIgaW5wdXRJc1ZhbHVlT25seSA9IGF0dHJpYnV0ZXMudHlwZSAmJiB2YWx1ZU9ubHlJbnB1dHNbYXR0cmlidXRlcy50eXBlXTtcblxuICBmb3IgKGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlcykge1xuICAgIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXTtcblxuICAgIC8vIEFSSUEgKGFyaWEtKikgb3IgY3VzdG9tIGRhdGEgKGRhdGEtKikgYXR0cmlidXRlXG4gICAgaWYgKHJlYWN0UHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgIHByb3BzW2F0dHJpYnV0ZU5hbWVdID0gYXR0cmlidXRlVmFsdWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IEhUTUwvU1ZHIGF0dHJpYnV0ZSB0byBSZWFjdCBwcm9wXG4gICAgYXR0cmlidXRlTmFtZUxvd2VyQ2FzZWQgPSBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcHJvcE5hbWUgPSBnZXRQcm9wTmFtZShhdHRyaWJ1dGVOYW1lTG93ZXJDYXNlZCk7XG5cbiAgICBpZiAocHJvcE5hbWUpIHtcbiAgICAgIHByb3BlcnR5SW5mbyA9IHJlYWN0UHJvcGVydHkuZ2V0UHJvcGVydHlJbmZvKHByb3BOYW1lKTtcblxuICAgICAgLy8gY29udmVydCBhdHRyaWJ1dGUgdG8gdW5jb250cm9sbGVkIGNvbXBvbmVudCBwcm9wIChlLmcuLCBgdmFsdWVgIHRvIGBkZWZhdWx0VmFsdWVgKVxuICAgICAgLy8gaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3VuY29udHJvbGxlZC1jb21wb25lbnRzLmh0bWxcbiAgICAgIGlmIChcbiAgICAgICAgKHByb3BOYW1lID09PSAnY2hlY2tlZCcgfHwgcHJvcE5hbWUgPT09ICd2YWx1ZScpICYmXG4gICAgICAgICFpbnB1dElzVmFsdWVPbmx5XG4gICAgICApIHtcbiAgICAgICAgcHJvcE5hbWUgPSBnZXRQcm9wTmFtZSgnZGVmYXVsdCcgKyBhdHRyaWJ1dGVOYW1lTG93ZXJDYXNlZCk7XG4gICAgICB9XG5cbiAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGF0dHJpYnV0ZVZhbHVlO1xuXG4gICAgICBzd2l0Y2ggKHByb3BlcnR5SW5mbyAmJiBwcm9wZXJ0eUluZm8udHlwZSkge1xuICAgICAgICBjYXNlIHJlYWN0UHJvcGVydHkuQk9PTEVBTjpcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHJlYWN0UHJvcGVydHkuT1ZFUkxPQURFRF9CT09MRUFOOlxuICAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gcHJlc2VydmUgY3VzdG9tIGF0dHJpYnV0ZSBpZiBSZWFjdCA+PTE2XG4gICAgaWYgKHV0aWxpdGllcy5QUkVTRVJWRV9DVVNUT01fQVRUUklCVVRFUykge1xuICAgICAgcHJvcHNbYXR0cmlidXRlTmFtZV0gPSBhdHRyaWJ1dGVWYWx1ZTtcbiAgICB9XG4gIH1cblxuICAvLyB0cmFuc2Zvcm0gaW5saW5lIHN0eWxlIHRvIG9iamVjdFxuICB1dGlsaXRpZXMuc2V0U3R5bGVQcm9wKGF0dHJpYnV0ZXMuc3R5bGUsIHByb3BzKTtcblxuICByZXR1cm4gcHJvcHM7XG59O1xuXG4vKipcbiAqIEdldHMgcHJvcCBuYW1lIGZyb20gbG93ZXJjYXNlZCBhdHRyaWJ1dGUgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlTmFtZSAtIExvd2VyY2FzZWQgYXR0cmlidXRlIG5hbWUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFByb3BOYW1lKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcmV0dXJuIHJlYWN0UHJvcGVydHkucG9zc2libGVTdGFuZGFyZE5hbWVzW2F0dHJpYnV0ZU5hbWVdO1xufVxuIiwidmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciBzdHlsZVRvSlMgPSByZXF1aXJlKCdzdHlsZS10by1qcycpLmRlZmF1bHQ7XG5cbi8qKlxuICogU3dhcCBrZXkgd2l0aCB2YWx1ZSBpbiBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSAgIG9iaiAgICAgICAgLSBUaGUgb2JqZWN0LlxuICogQHBhcmFtICB7RnVuY3Rpb259IFtvdmVycmlkZV0gLSBUaGUgb3ZlcnJpZGUgbWV0aG9kLlxuICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgICAgICAgLSBUaGUgaW52ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpbnZlcnRPYmplY3Qob2JqLCBvdmVycmlkZSkge1xuICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICB2YXIga2V5O1xuICB2YXIgdmFsdWU7XG4gIHZhciBpc092ZXJyaWRlUHJlc2VudCA9IHR5cGVvZiBvdmVycmlkZSA9PT0gJ2Z1bmN0aW9uJztcbiAgdmFyIG92ZXJyaWRlcyA9IHt9O1xuICB2YXIgcmVzdWx0ID0ge307XG5cbiAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgIGlmIChpc092ZXJyaWRlUHJlc2VudCkge1xuICAgICAgb3ZlcnJpZGVzID0gb3ZlcnJpZGUoa2V5LCB2YWx1ZSk7XG4gICAgICBpZiAob3ZlcnJpZGVzICYmIG92ZXJyaWRlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgcmVzdWx0W292ZXJyaWRlc1swXV0gPSBvdmVycmlkZXNbMV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXN1bHRbdmFsdWVdID0ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBnaXZlbiB0YWcgaXMgYSBjdXN0b20gY29tcG9uZW50LlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL3YxNi42LjMvcGFja2FnZXMvcmVhY3QtZG9tL3NyYy9zaGFyZWQvaXNDdXN0b21Db21wb25lbnQuanN9XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaHRtbCB0YWcuXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgICAtIFRoZSBwcm9wcyBiZWluZyBwYXNzZWQgdG8gdGhlIGVsZW1lbnQuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0N1c3RvbUNvbXBvbmVudCh0YWdOYW1lLCBwcm9wcykge1xuICBpZiAodGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgcmV0dXJuIHByb3BzICYmIHR5cGVvZiBwcm9wcy5pcyA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICBzd2l0Y2ggKHRhZ05hbWUpIHtcbiAgICAvLyBUaGVzZSBhcmUgcmVzZXJ2ZWQgU1ZHIGFuZCBNYXRoTUwgZWxlbWVudHMuXG4gICAgLy8gV2UgZG9uJ3QgbWluZCB0aGlzIHdoaXRlbGlzdCB0b28gbXVjaCBiZWNhdXNlIHdlIGV4cGVjdCBpdCB0byBuZXZlciBncm93LlxuICAgIC8vIFRoZSBhbHRlcm5hdGl2ZSBpcyB0byB0cmFjayB0aGUgbmFtZXNwYWNlIGluIGEgZmV3IHBsYWNlcyB3aGljaCBpcyBjb252b2x1dGVkLlxuICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJjb21wb25lbnRzL3NwZWMvY3VzdG9tLyNjdXN0b20tZWxlbWVudHMtY29yZS1jb25jZXB0c1xuICAgIGNhc2UgJ2Fubm90YXRpb24teG1sJzpcbiAgICBjYXNlICdjb2xvci1wcm9maWxlJzpcbiAgICBjYXNlICdmb250LWZhY2UnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1zcmMnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS11cmknOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1mb3JtYXQnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1uYW1lJzpcbiAgICBjYXNlICdtaXNzaW5nLWdseXBoJzpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxudmFyIHN0eWxlVG9KU09wdGlvbnMgPSB7IHJlYWN0Q29tcGF0OiB0cnVlIH07XG5cbi8qKlxuICogU2V0cyBzdHlsZSBwcm9wLlxuICpcbiAqIEBwYXJhbSB7bnVsbHx1bmRlZmluZWR8c3RyaW5nfSBzdHlsZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKi9cbmZ1bmN0aW9uIHNldFN0eWxlUHJvcChzdHlsZSwgcHJvcHMpIHtcbiAgaWYgKHN0eWxlID09PSBudWxsIHx8IHN0eWxlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdHJ5IHtcbiAgICBwcm9wcy5zdHlsZSA9IHN0eWxlVG9KUyhzdHlsZSwgc3R5bGVUb0pTT3B0aW9ucyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHByb3BzLnN0eWxlID0ge307XG4gIH1cbn1cblxuLyoqXG4gKiBAY29uc3RhbnQge2Jvb2xlYW59XG4gKiBAc2VlIHtAbGluayBodHRwczovL3JlYWN0anMub3JnL2Jsb2cvMjAxNy8wOS8wOC9kb20tYXR0cmlidXRlcy1pbi1yZWFjdC0xNi5odG1sfVxuICovXG52YXIgUFJFU0VSVkVfQ1VTVE9NX0FUVFJJQlVURVMgPSBSZWFjdC52ZXJzaW9uLnNwbGl0KCcuJylbMF0gPj0gMTY7XG5cbi8vIFRha2VuIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL2NhZTYzNTA1NGUxN2E2ZjEwN2EzOWQzMjg2NDkxMzdiODNmMjU5NzIvcGFja2FnZXMvcmVhY3QtZG9tL3NyYy9jbGllbnQvdmFsaWRhdGVET01OZXN0aW5nLmpzI0wyMTNcbnZhciBlbGVtZW50c1dpdGhOb1RleHRDaGlsZHJlbiA9IG5ldyBTZXQoW1xuICAndHInLFxuICAndGJvZHknLFxuICAndGhlYWQnLFxuICAndGZvb3QnLFxuICAnY29sZ3JvdXAnLFxuICAndGFibGUnLFxuICAnaGVhZCcsXG4gICdodG1sJyxcbiAgJ2ZyYW1lc2V0J1xuXSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBub2RlIGNhbiBjb250YWluIHRleHQgbm9kZXNcbiAqXG4gKiBAcGFyYW0ge0RvbUVsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjYW5UZXh0QmVDaGlsZE9mTm9kZShub2RlKSB7XG4gIHJldHVybiAhZWxlbWVudHNXaXRoTm9UZXh0Q2hpbGRyZW4uaGFzKG5vZGUubmFtZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQUkVTRVJWRV9DVVNUT01fQVRUUklCVVRFUzogUFJFU0VSVkVfQ1VTVE9NX0FUVFJJQlVURVMsXG4gIGludmVydE9iamVjdDogaW52ZXJ0T2JqZWN0LFxuICBpc0N1c3RvbUNvbXBvbmVudDogaXNDdXN0b21Db21wb25lbnQsXG4gIHNldFN0eWxlUHJvcDogc2V0U3R5bGVQcm9wLFxuICBjYW5UZXh0QmVDaGlsZE9mTm9kZTogY2FuVGV4dEJlQ2hpbGRPZk5vZGUsXG4gIGVsZW1lbnRzV2l0aE5vVGV4dENoaWxkcmVuOiBlbGVtZW50c1dpdGhOb1RleHRDaGlsZHJlblxufTtcbiIsInZhciBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xudmFyIGRvbWhhbmRsZXIgPSByZXF1aXJlKCdkb21oYW5kbGVyL2xpYi9ub2RlJyk7XG5cbnZhciBDQVNFX1NFTlNJVElWRV9UQUdfTkFNRVMgPSBjb25zdGFudHMuQ0FTRV9TRU5TSVRJVkVfVEFHX05BTUVTO1xuXG52YXIgQ29tbWVudCA9IGRvbWhhbmRsZXIuQ29tbWVudDtcbnZhciBFbGVtZW50ID0gZG9taGFuZGxlci5FbGVtZW50O1xudmFyIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IGRvbWhhbmRsZXIuUHJvY2Vzc2luZ0luc3RydWN0aW9uO1xudmFyIFRleHQgPSBkb21oYW5kbGVyLlRleHQ7XG5cbnZhciBjYXNlU2Vuc2l0aXZlVGFnTmFtZXNNYXAgPSB7fTtcbnZhciB0YWdOYW1lO1xuXG5mb3IgKHZhciBpID0gMCwgbGVuID0gQ0FTRV9TRU5TSVRJVkVfVEFHX05BTUVTLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIHRhZ05hbWUgPSBDQVNFX1NFTlNJVElWRV9UQUdfTkFNRVNbaV07XG4gIGNhc2VTZW5zaXRpdmVUYWdOYW1lc01hcFt0YWdOYW1lLnRvTG93ZXJDYXNlKCldID0gdGFnTmFtZTtcbn1cblxuLyoqXG4gKiBHZXRzIGNhc2Utc2Vuc2l0aXZlIHRhZyBuYW1lLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgICAgIHRhZ05hbWUgLSBUYWcgbmFtZSBpbiBsb3dlcmNhc2UuXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfSAgICAgICAgIC0gQ2FzZS1zZW5zaXRpdmUgdGFnIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldENhc2VTZW5zaXRpdmVUYWdOYW1lKHRhZ05hbWUpIHtcbiAgcmV0dXJuIGNhc2VTZW5zaXRpdmVUYWdOYW1lc01hcFt0YWdOYW1lXTtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIERPTSBhdHRyaWJ1dGVzIHRvIGEgaGFzaCBtYXAuXG4gKlxuICogQHBhcmFtICB7TmFtZWROb2RlTWFwfSBhdHRyaWJ1dGVzIC0gTGlzdCBvZiBhdHRyaWJ1dGVzLlxuICogQHJldHVybiB7b2JqZWN0fSAgICAgICAgICAgICAgICAgIC0gTWFwIG9mIGF0dHJpYnV0ZSBuYW1lIHRvIHZhbHVlLlxuICovXG5mdW5jdGlvbiBmb3JtYXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICB2YXIgYXR0cmlidXRlO1xuICAvLyBgTmFtZWROb2RlTWFwYCBpcyBhcnJheS1saWtlXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXR0cmlidXRlID0gYXR0cmlidXRlc1tpXTtcbiAgICByZXN1bHRbYXR0cmlidXRlLm5hbWVdID0gYXR0cmlidXRlLnZhbHVlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ29ycmVjdHMgdGhlIHRhZyBuYW1lIGlmIGl0IGlzIGNhc2Utc2Vuc2l0aXZlIChTVkcpLlxuICogT3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBsb3dlcmNhc2UgdGFnIG5hbWUgKEhUTUwpLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gdGFnTmFtZSAtIExvd2VyY2FzZSB0YWcgbmFtZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAtIEZvcm1hdHRlZCB0YWcgbmFtZS5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0VGFnTmFtZSh0YWdOYW1lKSB7XG4gIHRhZ05hbWUgPSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBjYXNlU2Vuc2l0aXZlVGFnTmFtZSA9IGdldENhc2VTZW5zaXRpdmVUYWdOYW1lKHRhZ05hbWUpO1xuICBpZiAoY2FzZVNlbnNpdGl2ZVRhZ05hbWUpIHtcbiAgICByZXR1cm4gY2FzZVNlbnNpdGl2ZVRhZ05hbWU7XG4gIH1cbiAgcmV0dXJuIHRhZ05hbWU7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtcyBET00gbm9kZXMgdG8gYGRvbWhhbmRsZXJgIG5vZGVzLlxuICpcbiAqIEBwYXJhbSAge05vZGVMaXN0fSAgICAgbm9kZXMgICAgICAgICAtIERPTSBub2Rlcy5cbiAqIEBwYXJhbSAge0VsZW1lbnR8bnVsbH0gW3BhcmVudD1udWxsXSAtIFBhcmVudCBub2RlLlxuICogQHBhcmFtICB7c3RyaW5nfSAgICAgICBbZGlyZWN0aXZlXSAgIC0gRGlyZWN0aXZlLlxuICogQHJldHVybiB7QXJyYXk8Q29tbWVudHxFbGVtZW50fFByb2Nlc3NpbmdJbnN0cnVjdGlvbnxUZXh0Pn1cbiAqL1xuZnVuY3Rpb24gZm9ybWF0RE9NKG5vZGVzLCBwYXJlbnQsIGRpcmVjdGl2ZSkge1xuICBwYXJlbnQgPSBwYXJlbnQgfHwgbnVsbDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGluZGV4ID0gMCwgbGVuID0gbm9kZXMubGVuZ3RoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgIHZhciBub2RlID0gbm9kZXNbaW5kZXhdO1xuICAgIHZhciBjdXJyZW50O1xuXG4gICAgLy8gc2V0IHRoZSBub2RlIGRhdGEgZ2l2ZW4gdGhlIHR5cGVcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgLy8gc2NyaXB0LCBzdHlsZSwgb3IgdGFnXG4gICAgICAgIGN1cnJlbnQgPSBuZXcgRWxlbWVudChcbiAgICAgICAgICBmb3JtYXRUYWdOYW1lKG5vZGUubm9kZU5hbWUpLFxuICAgICAgICAgIGZvcm1hdEF0dHJpYnV0ZXMobm9kZS5hdHRyaWJ1dGVzKVxuICAgICAgICApO1xuICAgICAgICBjdXJyZW50LmNoaWxkcmVuID0gZm9ybWF0RE9NKG5vZGUuY2hpbGROb2RlcywgY3VycmVudCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIGN1cnJlbnQgPSBuZXcgVGV4dChub2RlLm5vZGVWYWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDg6XG4gICAgICAgIGN1cnJlbnQgPSBuZXcgQ29tbWVudChub2RlLm5vZGVWYWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgcHJldmlvdXMgbm9kZSBuZXh0XG4gICAgdmFyIHByZXYgPSByZXN1bHRbaW5kZXggLSAxXSB8fCBudWxsO1xuICAgIGlmIChwcmV2KSB7XG4gICAgICBwcmV2Lm5leHQgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIC8vIHNldCBwcm9wZXJ0aWVzIGZvciBjdXJyZW50IG5vZGVcbiAgICBjdXJyZW50LnBhcmVudCA9IHBhcmVudDtcbiAgICBjdXJyZW50LnByZXYgPSBwcmV2O1xuICAgIGN1cnJlbnQubmV4dCA9IG51bGw7XG5cbiAgICByZXN1bHQucHVzaChjdXJyZW50KTtcbiAgfVxuXG4gIGlmIChkaXJlY3RpdmUpIHtcbiAgICBjdXJyZW50ID0gbmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbihcbiAgICAgIGRpcmVjdGl2ZS5zdWJzdHJpbmcoMCwgZGlyZWN0aXZlLmluZGV4T2YoJyAnKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgIGRpcmVjdGl2ZVxuICAgICk7XG4gICAgY3VycmVudC5uZXh0ID0gcmVzdWx0WzBdIHx8IG51bGw7XG4gICAgY3VycmVudC5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgcmVzdWx0LnVuc2hpZnQoY3VycmVudCk7XG5cbiAgICBpZiAocmVzdWx0WzFdKSB7XG4gICAgICByZXN1bHRbMV0ucHJldiA9IHJlc3VsdFswXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVjdHMgaWYgYnJvd3NlciBpcyBJbnRlcm5ldCBFeHBsb3Jlci5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSAtIFdoZXRoZXIgSUUgaXMgZGV0ZWN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzSUUoKSB7XG4gIHJldHVybiAvKE1TSUUgfFRyaWRlbnRcXC98RWRnZVxcLykvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmb3JtYXRBdHRyaWJ1dGVzOiBmb3JtYXRBdHRyaWJ1dGVzLFxuICBmb3JtYXRET006IGZvcm1hdERPTSxcbiAgaXNJRTogaXNJRVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Eb2N0eXBlID0gZXhwb3J0cy5DREFUQSA9IGV4cG9ydHMuVGFnID0gZXhwb3J0cy5TdHlsZSA9IGV4cG9ydHMuU2NyaXB0ID0gZXhwb3J0cy5Db21tZW50ID0gZXhwb3J0cy5EaXJlY3RpdmUgPSBleHBvcnRzLlRleHQgPSBleHBvcnRzLlJvb3QgPSBleHBvcnRzLmlzVGFnID0gZXhwb3J0cy5FbGVtZW50VHlwZSA9IHZvaWQgMDtcbi8qKiBUeXBlcyBvZiBlbGVtZW50cyBmb3VuZCBpbiBodG1scGFyc2VyMidzIERPTSAqL1xudmFyIEVsZW1lbnRUeXBlO1xuKGZ1bmN0aW9uIChFbGVtZW50VHlwZSkge1xuICAgIC8qKiBUeXBlIGZvciB0aGUgcm9vdCBlbGVtZW50IG9mIGEgZG9jdW1lbnQgKi9cbiAgICBFbGVtZW50VHlwZVtcIlJvb3RcIl0gPSBcInJvb3RcIjtcbiAgICAvKiogVHlwZSBmb3IgVGV4dCAqL1xuICAgIEVsZW1lbnRUeXBlW1wiVGV4dFwiXSA9IFwidGV4dFwiO1xuICAgIC8qKiBUeXBlIGZvciA8PyAuLi4gPz4gKi9cbiAgICBFbGVtZW50VHlwZVtcIkRpcmVjdGl2ZVwiXSA9IFwiZGlyZWN0aXZlXCI7XG4gICAgLyoqIFR5cGUgZm9yIDwhLS0gLi4uIC0tPiAqL1xuICAgIEVsZW1lbnRUeXBlW1wiQ29tbWVudFwiXSA9IFwiY29tbWVudFwiO1xuICAgIC8qKiBUeXBlIGZvciA8c2NyaXB0PiB0YWdzICovXG4gICAgRWxlbWVudFR5cGVbXCJTY3JpcHRcIl0gPSBcInNjcmlwdFwiO1xuICAgIC8qKiBUeXBlIGZvciA8c3R5bGU+IHRhZ3MgKi9cbiAgICBFbGVtZW50VHlwZVtcIlN0eWxlXCJdID0gXCJzdHlsZVwiO1xuICAgIC8qKiBUeXBlIGZvciBBbnkgdGFnICovXG4gICAgRWxlbWVudFR5cGVbXCJUYWdcIl0gPSBcInRhZ1wiO1xuICAgIC8qKiBUeXBlIGZvciA8IVtDREFUQVsgLi4uIF1dPiAqL1xuICAgIEVsZW1lbnRUeXBlW1wiQ0RBVEFcIl0gPSBcImNkYXRhXCI7XG4gICAgLyoqIFR5cGUgZm9yIDwhZG9jdHlwZSAuLi4+ICovXG4gICAgRWxlbWVudFR5cGVbXCJEb2N0eXBlXCJdID0gXCJkb2N0eXBlXCI7XG59KShFbGVtZW50VHlwZSA9IGV4cG9ydHMuRWxlbWVudFR5cGUgfHwgKGV4cG9ydHMuRWxlbWVudFR5cGUgPSB7fSkpO1xuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIGFuIGVsZW1lbnQgaXMgYSB0YWcgb3Igbm90LlxuICpcbiAqIEBwYXJhbSBlbGVtIEVsZW1lbnQgdG8gdGVzdFxuICovXG5mdW5jdGlvbiBpc1RhZyhlbGVtKSB7XG4gICAgcmV0dXJuIChlbGVtLnR5cGUgPT09IEVsZW1lbnRUeXBlLlRhZyB8fFxuICAgICAgICBlbGVtLnR5cGUgPT09IEVsZW1lbnRUeXBlLlNjcmlwdCB8fFxuICAgICAgICBlbGVtLnR5cGUgPT09IEVsZW1lbnRUeXBlLlN0eWxlKTtcbn1cbmV4cG9ydHMuaXNUYWcgPSBpc1RhZztcbi8vIEV4cG9ydHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4vKiogVHlwZSBmb3IgdGhlIHJvb3QgZWxlbWVudCBvZiBhIGRvY3VtZW50ICovXG5leHBvcnRzLlJvb3QgPSBFbGVtZW50VHlwZS5Sb290O1xuLyoqIFR5cGUgZm9yIFRleHQgKi9cbmV4cG9ydHMuVGV4dCA9IEVsZW1lbnRUeXBlLlRleHQ7XG4vKiogVHlwZSBmb3IgPD8gLi4uID8+ICovXG5leHBvcnRzLkRpcmVjdGl2ZSA9IEVsZW1lbnRUeXBlLkRpcmVjdGl2ZTtcbi8qKiBUeXBlIGZvciA8IS0tIC4uLiAtLT4gKi9cbmV4cG9ydHMuQ29tbWVudCA9IEVsZW1lbnRUeXBlLkNvbW1lbnQ7XG4vKiogVHlwZSBmb3IgPHNjcmlwdD4gdGFncyAqL1xuZXhwb3J0cy5TY3JpcHQgPSBFbGVtZW50VHlwZS5TY3JpcHQ7XG4vKiogVHlwZSBmb3IgPHN0eWxlPiB0YWdzICovXG5leHBvcnRzLlN0eWxlID0gRWxlbWVudFR5cGUuU3R5bGU7XG4vKiogVHlwZSBmb3IgQW55IHRhZyAqL1xuZXhwb3J0cy5UYWcgPSBFbGVtZW50VHlwZS5UYWc7XG4vKiogVHlwZSBmb3IgPCFbQ0RBVEFbIC4uLiBdXT4gKi9cbmV4cG9ydHMuQ0RBVEEgPSBFbGVtZW50VHlwZS5DREFUQTtcbi8qKiBUeXBlIGZvciA8IWRvY3R5cGUgLi4uPiAqL1xuZXhwb3J0cy5Eb2N0eXBlID0gRWxlbWVudFR5cGUuRG9jdHlwZTtcbiIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvdW50ZXJrdW5mdC40NjQ2NWUwYS5qcGdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwic3RhdGljL21lZGlhL2dlc2NoZW5rZS5iOWY1M2JhZS5qcGdcIjsiLCJ2YXIgZG9tcGFyc2VyID0gcmVxdWlyZSgnLi9kb21wYXJzZXInKTtcbnZhciBmb3JtYXRET00gPSByZXF1aXJlKCcuL3V0aWxpdGllcycpLmZvcm1hdERPTTtcblxudmFyIERJUkVDVElWRV9SRUdFWCA9IC88KCFbYS16QS1aXFxzXSspPi87IC8vIGUuZy4sIDwhZG9jdHlwZSBodG1sPlxuXG4vKipcbiAqIFBhcnNlcyBIVE1MIHN0cmluZyB0byBET00gbm9kZXMgaW4gYnJvd3Nlci5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGh0bWwgIC0gSFRNTCBtYXJrdXAuXG4gKiBAcmV0dXJuIHtEb21FbGVtZW50W119IC0gRE9NIGVsZW1lbnRzLlxuICovXG5mdW5jdGlvbiBIVE1MRE9NUGFyc2VyKGh0bWwpIHtcbiAgaWYgKHR5cGVvZiBodG1sICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmIChodG1sID09PSAnJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIG1hdGNoIGRpcmVjdGl2ZVxuICB2YXIgbWF0Y2ggPSBodG1sLm1hdGNoKERJUkVDVElWRV9SRUdFWCk7XG4gIHZhciBkaXJlY3RpdmU7XG5cbiAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XG4gICAgZGlyZWN0aXZlID0gbWF0Y2hbMV07XG4gIH1cblxuICByZXR1cm4gZm9ybWF0RE9NKGRvbXBhcnNlcihodG1sKSwgbnVsbCwgZGlyZWN0aXZlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBIVE1MRE9NUGFyc2VyO1xuIiwiZXhwb3J0IGRlZmF1bHQgW1xuLy8gICAgIHtcbi8vICAgICBpZDogMSxcbi8vICAgICBpc0JvdWdodDogZmFsc2UsXG4vLyAgICAgaW1hZ2U6IHJlcXVpcmUoXCIuLi9pbWcvZ2VzY2hlbmtlL1F1aWNoZWZvcm0ucG5nXCIpLmRlZmF1bHQsXG4vLyAgICAgbmFtZTogXCJRdWljaGVmb3JtXCIsXG4vLyAgICAgZGVzY3JpcHRpb246IFwiRWluZSBLZXJhbWlrLVF1aWNoZWZvcm0gbWl0IEhhbHRlZ3JpZmZlbiwgZGllIHNww7xsbWFzY2hpbmVuZ2VlaWdlbnQgaXN0ICh3aWUgaW0gTGluayBvZGVyIMOkaG5saWNoKVwiLFxuLy8gICAgIGxpbms6IFwiaHR0cHM6Ly93d3cuendpbGxpbmcuY29tL2RlL3p3aWxsaW5nLWt1Y2hlbmZvcm0tMjgtY20ta2VyYW1pay00MDIwMi0wMjgtMC80MDIwMi0wMjgtMC5odG1sXCIsXG4vLyAgICAgdmVyc2lvbjogMCxcbi8vIH0sXG4vLyAgICAge1xuLy8gICAgIGlkOiAyLFxuLy8gICAgIGlzQm91Z2h0OiBmYWxzZSxcbi8vICAgICBpbWFnZTogcmVxdWlyZShcIi4uL2ltZy9nZXNjaGVua2UvU29kYXN0cmVhbS5wbmdcIikuZGVmYXVsdCxcbi8vICAgICBuYW1lOiBcIjIgU29kYXN0cmVhbSBGbGFzY2hlblwiLFxuLy8gICAgIGRlc2NyaXB0aW9uOiBcIlp3ZWkgR2xhc2thcmFmZmVuIGbDvHIgZGVuIFNvZGFzdHJlYW0gQ3J5c3RhbFwiLFxuLy8gICAgIGxpbms6IFwiaHR0cHM6Ly9zb2Rhc3RyZWFtLmRlL3Byb2R1Y3RzL2dsYXNrYXJhZmZlLWR1by1wYWNrLTAtOGxcIixcbi8vICAgICB2ZXJzaW9uOiAwLFxuLy8gfSxcbiAgICB7XG4gICAgaWQ6IDMsXG4gICAgaXNCb3VnaHQ6IGZhbHNlLFxuICAgIGltYWdlOiByZXF1aXJlKFwiLi4vaW1nL2dlc2NoZW5rZS9Hb1Byby5wbmdcIikuZGVmYXVsdCxcbiAgICBuYW1lOiBcIkdvIFBybyBIZXJvIDkgYmxhY2tcIixcbiAgICBkZXNjcmlwdGlvbjogXCJFaW5lIEdvIFBybyBIZXJvIDkgQWN0aW9uIENhbSBpbiBzY2h3YXJ6XCIsXG4gICAgbGluazogXCJodHRwczovL2dvcHJvLmNvbS9kZS9kZS9zaG9wL2NhbWVyYXMvaGVybzktYmxhY2svQ0hESFgtOTAxLW1hc3Rlci5odG1sXCIsXG4gICAgdmVyc2lvbjogMCxcbn0sIHtcbiAgICBpZDogNCxcbiAgICBpc0JvdWdodDogZmFsc2UsXG4gICAgaW1hZ2U6IHJlcXVpcmUoXCIuLi9pbWcvZ2VzY2hlbmtlL0FkdmVudHVyZUtpdF9Hb1Byby5wbmdcIikuZGVmYXVsdCxcbiAgICBuYW1lOiBcIkdvIFBybyBadWJlaMO2clwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkdvIFBybyBBYmVudGV1ZXIgS2l0IG1pdCBzY2h3aW1tZW5kZW0gSGFuZGdyaWZmLCBLb3BmZ3VydCwgUXVpY2tDbGlwIHVuZCBUYXNjaGVcIixcbiAgICBsaW5rOiBcImh0dHBzOi8vZ29wcm8uY29tL2RlL2RlL3Nob3AvbW91bnRzLWFjY2Vzc29yaWVzL2FkdmVudHVyZS1raXQvQUtURVMtMDAyLmh0bWxcIixcbiAgICB2ZXJzaW9uOiAwLFxufSwge1xuICAgIGlkOiA1LFxuICAgIGlzQm91Z2h0OiBmYWxzZSxcbiAgICBpbWFnZTogcmVxdWlyZShcIi4uL2ltZy9nZXNjaGVua2UvTWVzc2VyYmxvY2sucG5nXCIpLmRlZmF1bHQsXG4gICAgbmFtZTogXCJNZXNzZXJibG9ja1wiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlpXSUxMSU5HIFNlbGJzdHNjaMOkcmZlbmRlciBNZXNzZXJibG9jaywgNy10bGcuIEluIHNjaHdhcnpcIixcbiAgICBsaW5rOiBcImh0dHBzOi8vd3d3Lm90dG8uZGUvcC96d2lsbGluZy1tZXNzZXJibG9jay1nb3VybWV0LXNlbGJzdHNjaGFlcmZlbmQtNy10bGctd2Vpc3Mtc2VsYnN0c2NoYWVyZmVuZC1zY2hhcmZlLW1lc3Nlci1laXNnZWhhZXJ0ZXRlLWtsaW5nZS1DMTE5NzY0OTIzNS8jdmFyaWF0aW9uSWQ9MTE5NzY0OTIzNlwiLFxuICAgIHZlcnNpb246IDAsXG59LFxuLy8gICAgIHtcbi8vICAgICBpZDogNixcbi8vICAgICBpc0JvdWdodDogZmFsc2UsXG4vLyAgICAgaW1hZ2U6IHJlcXVpcmUoXCIuLi9pbWcvZ2VzY2hlbmtlL0JyZXR0c3BpZWxlLmpwZ1wiKS5kZWZhdWx0LFxuLy8gICAgIG5hbWU6IFwiQnJldHRzcGllbGVcIixcbi8vICAgICAvLyBkZXNjcmlwdGlvbjogXCJXaXIgZnJldWVuIHVucyBpbW1lciDDvGJlciBlaW4gbmV1ZXMsIHNwYW5uZW5kZXMgQnJldHRzcGllbC4gSGllciBlaW5lIExpc3RlIHZvbiBTcGllbGVuLCBkaWUgd2lyIHNjaG9uIGhhYmVuOjx1bD48bGk+RGllIFNpZWRsZXIgaW5rbHVzaXZlIFNlZWZhaHJlciBFcndlaXRlcnVuZzwvbGk+PGxpPkRvbWluaW9uPC9saT48bGk+S2luZ2RvbSBCdWlsZGVyPC9saT48bGk+S2VsdGlzPC9saT48bGk+IERhcyB2ZXJyw7xja3RlIExhYnlyaW50aDwvbGk+PGxpPiBUcml2aWFsIFB1cnN1aXQ8L2xpPjxsaT4gRG9nPC9saT48bGk+IE91dGJ1cnN0PC9saT48bGk+ZWluZSBTcGllbGVzYW1tbHVuZzwvbGk+PC91bD5cIixcbi8vICAgICBkZXNjcmlwdGlvbjogXCJXaXIgZnJldWVuIHVucyBpbW1lciDDvGJlciBlaW4gbmV1ZXMsIHNwYW5uZW5kZXMgQnJldHRzcGllbC4gRmFsbHMgaWhyIHNpY2hlcmdlaGVuIHdvbGx0LCB3ZWxjaGUgU3BpZWxlIHdpciBzY2hvbiBoYWJlbiwgZnJhZ3QgZG9jaCB1bnNlcmUgVHJhdXpldWdlbiBTaW5haCBvZGVyIE1pcmlhbS5cIixcbi8vICAgICBsaW5rOiBcIlwiLFxuLy8gICAgIHZlcnNpb246IDAsXG4vLyB9LFxuLy8gICAgIHtcbi8vICAgICBpZDogNyxcbi8vICAgICBpc0JvdWdodDogZmFsc2UsXG4vLyAgICAgaW1hZ2U6IHJlcXVpcmUoXCIuLi9pbWcvZ2VzY2hlbmtlL1phaG5iw7xyc3RlLnBuZ1wiKS5kZWZhdWx0LFxuLy8gICAgIG5hbWU6IFwiRWxla3RyaXNjaGUgUMOkcmNoZW56YWhuLWLDvHJzdGVcIixcbi8vICAgICBkZXNjcmlwdGlvbjogXCJOYWNoaGFsdGlnZSBlbGVrdHJpc2NoZSBaYWhuYsO8cnN0ZSB2b24gaGFwcHkgYnJ1c2gsIFNDSEFMTCBWSUJFIDMgUGFydG5lciBCdW5kbGVcIixcbi8vICAgICBsaW5rOiBcImh0dHBzOi8vd3d3LmhhcHB5YnJ1c2guZGUvc3RhcnRlcmtpdC12aWJlLTMtc2NoYWxsLXphaG5idWVyc3RlLWJ1bmRsZS1taXgvXCIsXG4vLyAgICAgdmVyc2lvbjogMCxcbi8vIH0sXG4vLyAgICAge1xuLy8gICAgIGlkOiA4LFxuLy8gICAgIGlzQm91Z2h0OiBmYWxzZSxcbi8vICAgICBpbWFnZTogcmVxdWlyZShcIi4uL2ltZy9nZXNjaGVua2UvS2FwcHPDpGdlLnBuZ1wiKS5kZWZhdWx0LFxuLy8gICAgIG5hbWU6IFwiS2FwcHPDpGdlXCIsXG4vLyAgICAgZGVzY3JpcHRpb246IFwiRWluaGVsbCBLYXBwLS9HZWhydW5nc3PDpGdlIFRDLU1TIDIxMTIgKDE2MDAgVywgU8OkZ2VibGF0dCDDmCAyMTAgbW0sIFNjaG5pdHRicmVpdGUgMTIwIG1tLCBzY2h3ZW5rYmFyZXIgU8OkZ2Vrb3BmKVwiLFxuLy8gICAgIGxpbms6IFwiaHR0cHM6Ly93d3cuYW1hem9uLmRlL2RwL0IwMERFWFhGTUtcIixcbi8vICAgICB2ZXJzaW9uOiAwLFxuLy8gfSxcbi8vICAgICB7XG4vLyAgICAgaWQ6IDksXG4vLyAgICAgaXNCb3VnaHQ6IGZhbHNlLFxuLy8gICAgIGltYWdlOiByZXF1aXJlKFwiLi4vaW1nL2dlc2NoZW5rZS9Ba2t1c2NocmF1YmVyLnBuZ1wiKS5kZWZhdWx0LFxuLy8gICAgIG5hbWU6IFwiQWtrdS1zY2hyYXViZXJcIixcbi8vICAgICBkZXNjcmlwdGlvbjogXCJMVVggQWtrdS1Cb2hyc2NocmF1YmVyLVNldCBpbmtsLiBBa2t1ICh3aWUgaW0gTGluayBvZGVyIMOkaG5saWNoKVwiLFxuLy8gICAgIGxpbms6IFwiaHR0cHM6Ly93d3cub2JpLmRlL2Fra3VzY2hyYXViZXIvbHV4LWFra3UtYm9ocnNjaHJhdWJlci1zZXQtMS1wb3dlcnN5c3RlbS1hLWJzLTIwL3AvOTU0MzIwOFwiLFxuLy8gICAgIHZlcnNpb246IDAsXG4vLyB9LFxuLy8gICAgIHtcbi8vICAgICBpZDogMTAsXG4vLyAgICAgaXNCb3VnaHQ6IGZhbHNlLFxuLy8gICAgIGltYWdlOiByZXF1aXJlKFwiLi4vaW1nL2dlc2NoZW5rZS9Cb2R1bUJyb3Rib3guanBnXCIpLmRlZmF1bHQsXG4vLyAgICAgbmFtZTogXCJCb2R1bSBCcm90Ym94XCIsXG4vLyAgICAgZGVzY3JpcHRpb246IFwiQm9kdW0gYmlzdHJvQnJvdGthc3RlbiBtaXQgQmFtYnVzLVNjaG5laWRlYnJldHQsIDIzLjgxIHggMzcuMTUgeCAxNC4yOSBjbTsgMS4xMSBLaWxvZ3JhbW1cIixcbi8vICAgICBsaW5rOiBcImh0dHBzOi8vd3d3LmFtYXpvbi5kZS9Cb2R1bS1iaXN0cm9Ccm90a2FzdGVuLUJhbWJ1cy1TY2huZWlkZWJyZXR0LUJQQS1mcmVpZXItS3Vuc3RzdG9mZi9kcC9CMDBNQVBOVkNXL1wiLFxuLy8gICAgIHZlcnNpb246IDAsXG4vLyB9LFxuICAgIHtcbiAgICBpZDogMTEsXG4gICAgaXNCb3VnaHQ6IGZhbHNlLFxuICAgIGltYWdlOiByZXF1aXJlKFwiLi4vaW1nL2dlc2NoZW5rZS9ncm/Dn2VyX1RvcGYucG5nXCIpLmRlZmF1bHQsXG4gICAgbmFtZTogXCJHcm/Dn2VyIEtvY2h0b3BmXCIsXG4gICAgZGVzY3JpcHRpb246IFwiVGVmYWwgQTcwNTQ2IER1ZXR0bywgZWluIGdyb8OfZXIgS29jaHRvcGYsIGRlciBjaXJjYSA1bCBmYXNzdCAod2llIGltIExpbmsgb2RlciDDpGhubGljaClcIixcbiAgICBsaW5rOiBcImh0dHBzOi8vd3d3LmFtYXpvbi5kZS9kcC9CMDBWNkdGN1VVL1wiLFxuICAgIHZlcnNpb246IDAsXG59LFxuLy8ge1xuLy8gICAgIGlkOiAxMixcbi8vICAgICBpc0JvdWdodDogZmFsc2UsXG4vLyAgICAgaW1hZ2U6IHJlcXVpcmUoXCIuLi9pbWcvZ2VzY2hlbmtlL0xpZ3JldHRvLnBuZ1wiKS5kZWZhdWx0LFxuLy8gICAgIG5hbWU6IFwiTGlncmV0dG8gaW4gcm90XCIsXG4vLyAgICAgZGVzY3JpcHRpb246IFwiTGlncmV0dG8gaW4gcm90LCB1bSBtaXQgYWNodCBMZXV0ZW4gc3BpZWxlbiB6dSBrw7ZubmVuXCIsXG4vLyAgICAgbGluazogXCJodHRwczovL3d3dy50aGFsaWEuZGUvc2hvcC9ob21lL2FydGlrZWxkZXRhaWxzL0lENTEzMDgwNS5odG1sXCIsXG4vLyAgICAgdmVyc2lvbjogMCxcbi8vIH0sXG4gICAge1xuICAgICAgICBpZDogMTMsXG4gICAgICAgIGlzQm91Z2h0OiBmYWxzZSxcbiAgICAgICAgaW1hZ2U6IHJlcXVpcmUoXCIuLi9pbWcvZ2VzY2hlbmtlL3N0dWRpZW5iaWJlbC5wbmdcIikuZGVmYXVsdCxcbiAgICAgICAgbmFtZTogXCJTdHVkaWVuYmliZWxcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiTWFjQXJ0aHVyIFN0dWRpZW5iaWJlbCBtaXQgU2NobGFjaHRlciAyMDAwIMOcYmVyc2V0enVuZ1wiLFxuICAgICAgICBsaW5rOiBcImh0dHBzOi8vd3d3LnNjbS1zaG9wLmRlL21hY2FydGh1ci1zdHVkaWVuYmliZWwtc2NobGFjaHRlci0yMDAwLTc0ODU2OTcuaHRtbFwiLFxuICAgICAgICB2ZXJzaW9uOiAwLFxuICAgIH0sXG4vLyAgICAge1xuLy8gICAgICAgICBpZDogMTQsXG4vLyAgICAgICAgIGlzQm91Z2h0OiBmYWxzZSxcbi8vICAgICAgICAgaW1hZ2U6IHJlcXVpcmUoXCIuLi9pbWcvZ2VzY2hlbmtlL251ZGVsaG9sei5wbmdcIikuZGVmYXVsdCxcbi8vICAgICAgICAgbmFtZTogXCJOdWRlbGhvbHpcIixcbi8vICAgICAgICAgZGVzY3JpcHRpb246IFwiRWluZSBUZWlncm9sbGUgYXVzIEhvbHogKHdpZSBpbSBMaW5rIG9kZXIgw6RobmxpY2gpXCIsXG4vLyAgICAgICAgIGxpbms6IFwiaHR0cHM6Ly9zaG9wLm9ldGtlci5hdC9kci1vZXRrZXItdGVpZ3JvbGxlci1ob2x6XCIsXG4vLyAgICAgICAgIHZlcnNpb246IDAsXG4vLyAgICAgfSxcbi8vICAgICB7XG4vLyAgICAgICAgIGlkOiAxNSxcbi8vICAgICAgICAgaXNCb3VnaHQ6IGZhbHNlLFxuLy8gICAgICAgICBpbWFnZTogcmVxdWlyZShcIi4uL2ltZy9nZXNjaGVua2Uvc3VwcGVua2VsbGUucG5nXCIpLmRlZmF1bHQsXG4vLyAgICAgICAgIG5hbWU6IFwiU3VwcGVua2VsbGUgbWl0IEF1c2d1c3NcIixcbi8vICAgICAgICAgZGVzY3JpcHRpb246IFwiRWluZSBTdXBwZW5rZWxsZS8gU2Now7ZwZmzDtmZmZWwgbWl0IEF1c2d1c3NcIixcbi8vICAgICAgICAgbGluazogXCJodHRwczovL3d3dy5mYWNrZWxtYW5uLmRlL2ZhY2tlbG1hbm4tb3ZhbGdyaWZmLXNjaG9lcGZsb2VmZmVsLTI5Y21cIixcbi8vICAgICAgICAgdmVyc2lvbjogMCxcbi8vICAgICB9LFxuLy8gICAgIHtcbi8vICAgICAgICAgaWQ6IDE2LFxuLy8gICAgICAgICBpc0JvdWdodDogZmFsc2UsXG4vLyAgICAgICAgIGltYWdlOiByZXF1aXJlKFwiLi4vaW1nL2dlc2NoZW5rZS9waXp6YXNjaG5laWRlci5wbmdcIikuZGVmYXVsdCxcbi8vICAgICAgICAgbmFtZTogXCJQaXp6YXNjaG5laWRlclwiLFxuLy8gICAgICAgICBkZXNjcmlwdGlvbjogXCJFaW4gRmFocnJhZCBQaXp6YXNjaG5laWRlclwiLFxuLy8gICAgICAgICBsaW5rOiBcImh0dHBzOi8vd3d3LmFtYXpvbi5kZS9zP2s9RmFocnJhZCtQaXp6YXNjaG5laWRlciZpPWtpdGNoZW4mX19ta19kZV9ERT0lQzMlODVNJUMzJTg1JUM1JUJEJUMzJTk1JUMzJTkxXCIsXG4vLyAgICAgICAgIHZlcnNpb246IDAsXG4vLyAgICAgfSxcbi8vICAgICB7XG4vLyAgICAgICAgIGlkOiAxNyxcbi8vICAgICAgICAgaXNCb3VnaHQ6IGZhbHNlLFxuLy8gICAgICAgICBpbWFnZTogcmVxdWlyZShcIi4uL2ltZy9nZXNjaGVua2UvdGVla2FzdGVuLnBuZ1wiKS5kZWZhdWx0LFxuLy8gICAgICAgICBuYW1lOiBcIlRlZWJveFwiLFxuLy8gICAgICAgICBkZXNjcmlwdGlvbjogXCJFaW5lIFRlZWJveCBtaXQgZ2Vuw7xnZW5kIFBsYXR6IGbDvHIgdmllbGUgVGVlYmV1dGVsICh3aWUgaW0gTGluayBvZGVyIMOkaG5saWNoKVwiLFxuLy8gICAgICAgICBsaW5rOiBcImh0dHBzOi8vd3d3LmFtYXpvbi5kZS9kcC9CMDAyUDlKSzRRP3RhZz10ZWVib3gtYmVzdC0yMVwiLFxuLy8gICAgICAgICB2ZXJzaW9uOiAwLFxuLy8gICAgIH0sXG4vLyAgICAge1xuLy8gICAgICAgICBpZDogMTgsXG4vLyAgICAgICAgIGlzQm91Z2h0OiBmYWxzZSxcbi8vICAgICAgICAgaW1hZ2U6IHJlcXVpcmUoXCIuLi9pbWcvZ2VzY2hlbmtlL2JhY2tibGVjaC5wbmdcIikuZGVmYXVsdCxcbi8vICAgICAgICAgbmFtZTogXCJCYWNrYmxlY2ggbWl0IEt1Y2hlbmhhdWJlXCIsXG4vLyAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkVpbiBCYWNrYmxlY2ggbWl0IHBhc3NlbmRlciBLdWNoZW5oYXViZSAod2llIGltIExpbmsgb2RlciDDpGhubGljaClcIixcbi8vICAgICAgICAgbGluazogXCJodHRwczovL3d3dy5yZWFsLmRlL3Byb2R1Y3QvMzA5NDE3MTQ3L1wiLFxuLy8gICAgICAgICB2ZXJzaW9uOiAwLFxuLy8gICAgIH0sXG4vLyAgICAge1xuLy8gICAgICAgICBpZDogMTksXG4vLyAgICAgICAgIGlzQm91Z2h0OiBmYWxzZSxcbi8vICAgICAgICAgaW1hZ2U6IHJlcXVpcmUoXCIuLi9pbWcvZ2VzY2hlbmtlL3ppbW1lcnBmbGFuemUucG5nXCIpLmRlZmF1bHQsXG4vLyAgICAgICAgIG5hbWU6IFwiWmltbWVycGZsYW56ZSBTdHJlbGl0emlhIG5pY29sYWlcIixcbi8vICAgICAgICAgZGVzY3JpcHRpb246IFwiU3RyZWxpdHppZSBtaXQgZWluZXIgSMO2aGUgdm9uIDEwMCAtIDExMCBjbSwgVG9wZi3DmCAyNCBjbSwgUGFyYWRpZXN2b2dlbGJsdW1lICh3aWUgaW0gTGluayBvZGVyIMOkaG5saWNoKVwiLFxuLy8gICAgICAgICBsaW5rOiBcImh0dHBzOi8vd3d3Lm9iaS5kZS93ZWl0ZXJlLWdydWVucGZsYW56ZW4vc3RyZWxpdHppZS1ob2VoZS0xMDAtMTEwLWNtLXRvcGYtMjQtY20tcGFyYWRpZXN2b2dlbGJsdW1lLXN0cmVsaXR6aWEtbmljb2xhaS9wLzk2MjUwOTZcIixcbi8vICAgICAgICAgdmVyc2lvbjogMCxcbi8vICAgICB9LFxuICAgIHtcbiAgICAgICAgaWQ6IDIwLFxuICAgICAgICBpc0JvdWdodDogZmFsc2UsXG4gICAgICAgIGltYWdlOiByZXF1aXJlKFwiLi4vaW1nL2dlc2NoZW5rZS9CYW5nLnBuZ1wiKS5kZWZhdWx0LFxuICAgICAgICBuYW1lOiBcIkJhbmchIFRoZSBCdWxsZXRcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiRGFzIEJhbmchIEdydW5kc3BpZWwgbWl0IEVyd2VpdGVydW5nZW5cIixcbiAgICAgICAgbGluazogXCJodHRwczovL3d3dy50aGFsaWEuZGUvc2hvcC9ob21lL2FydGlrZWxkZXRhaWxzL0ExMDE3NDE2NTczXCIsXG4gICAgICAgIHZlcnNpb246IDAsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIGlkOiAyMSxcbiAgICAgICAgaXNCb3VnaHQ6IGZhbHNlLFxuICAgICAgICBpbWFnZTogcmVxdWlyZShcIi4uL2ltZy9nZXNjaGVua2UvQ29kZW5hbWVzLnBuZ1wiKS5kZWZhdWx0LFxuICAgICAgICBuYW1lOiBcIkNvZGVuYW1lcyBYWExcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiQ29uZGVuYW1lcyBYWEwgbWl0IGV4dHJhIGdyb8OfZW4gQmlsZGthcnRlblwiLFxuICAgICAgICBsaW5rOiBcImh0dHBzOi8vd3d3LnRoYWxpYS5kZS9zaG9wL2hvbWUvYXJ0aWtlbGRldGFpbHMvQTEwNTI2NzQzNjFcIixcbiAgICAgICAgdmVyc2lvbjogMCxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgaWQ6IDIzLFxuICAgICAgICBpc0JvdWdodDogZmFsc2UsXG4gICAgICAgIGltYWdlOiByZXF1aXJlKFwiLi4vaW1nL2dlc2NoZW5rZS9TdGF1YnNhdWdlcnJvYm90ZXIucG5nXCIpLmRlZmF1bHQsXG4gICAgICAgIG5hbWU6IFwiU3RhdWJzYXVnZXJyb2JvdGVyIG1pdCBXaXNjaGZ1bmt0aW9uXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlN0YXVic2F1Z2Vycm9ib3RlciBSb2Jvcm9jayBTNSBNYXggbWl0IFdpc2NoZnVua3Rpb24gaW4gc2Nod2FyelwiLFxuICAgICAgICBsaW5rOiBcImh0dHBzOi8vd3d3LmlkZWFsby5kZS9wcmVpc3ZlcmdsZWljaC9PZmZlcnNPZlByb2R1Y3QvMjAwMDc0NzE0Xy1zNS1tYXgtc2Nod2Fyei1yb2Jvcm9jay5odG1sXCIsXG4gICAgICAgIHZlcnNpb246IDAsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIGlkOiAyNCxcbiAgICAgICAgaXNCb3VnaHQ6IGZhbHNlLFxuICAgICAgICBpbWFnZTogcmVxdWlyZShcIi4uL2ltZy9nZXNjaGVua2UvV2VsdGthcnRlLmpwZ1wiKS5kZWZhdWx0LFxuICAgICAgICBuYW1lOiBcIldlbHRrYXJ0ZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJXZWx0a2FydGUgYWxzIFBvc3RlciAoMTk3IHggMTE2LDUgY20pXCIsXG4gICAgICAgIGxpbms6IFwiaHR0cHM6Ly93d3cuYW1hem9uLmRlL1dlbHRrYXJ0ZS1LbGFzc2lzY2hlLVZvcmRlcnNlaXRlLWxhbWluaWVydC0xMTgvZHAvQjAxNEZXNDRIOC9yZWY9c3JfMV8xND9rZXl3b3Jkcz13ZWx0a2FydGUlMkJwb3N0ZXImcWlkPTE2NDI4ODY3MDImc3I9OC0xNCZ0aD0xXCIsXG4gICAgICAgIHZlcnNpb246IDAsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIGlkOiAyNSxcbiAgICAgICAgaXNCb3VnaHQ6IGZhbHNlLFxuICAgICAgICBpbWFnZTogcmVxdWlyZShcIi4uL2ltZy9nZXNjaGVua2UvS29ya3BsYXR0ZS5wbmdcIikuZGVmYXVsdCxcbiAgICAgICAgbmFtZTogXCI0IEtvcmtwbGF0dGVuIGbDvHIgZGllIFdlbHRrYXJ0ZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJWaWVyIEtvcmtwbGF0dGVuIDYweCAxMDAgY20sIGFscyBVbnRlcmxhZ2UgenVyIFdlbHRrYXJ0ZVwiLFxuICAgICAgICBsaW5rOiBcImh0dHBzOi8vd3d3LmFtYXpvbi5kZS9TY2hhZHN0b2ZmZnJlaS1BbnRpc3RhdGlzY2gtQmFzdGVsLVVudGVybGFnZS1Ucml0dHNjaGFsbGQlQzMlQTRtbXVuZy1XYW5kdmVya2xlaWR1bmcvZHAvQjA3OU5EMjdURy9yZWY9cGJfYWxsc3BhcmtfcHVyY2hhc2Vfc2ltc19kZXNrdG9wXzIvMjU4LTA3NjU3NzUtMDQyODU1MVwiLFxuICAgICAgICB2ZXJzaW9uOiAwLFxuICAgIH0sXG4gICAge1xuICAgICAgICBpZDogMjYsXG4gICAgICAgIGlzQm91Z2h0OiBmYWxzZSxcbiAgICAgICAgaW1hZ2U6IHJlcXVpcmUoXCIuLi9pbWcvZ2VzY2hlbmtlL1NpdHpraXNzZW4ucG5nXCIpLmRlZmF1bHQsXG4gICAgICAgIG5hbWU6IFwiNCBTaXR6a2lzc2VuXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIjQgU2l0emtpc3NlbiBmw7xyIHVuc2VyZSBXb2huemltbWVyc3TDvGhsZVwiLFxuICAgICAgICBsaW5rOiBcImh0dHBzOi8vanlzay5kZS93b2huYWNjZXNzb2lyZXMvc2l0emtpc3Nlbi9zaXR6a2lzc2VuLWtlanNlcmxpbmQtbzM0LWxhbW1mZWxsLXdlaXNzXCIsXG4gICAgICAgIHZlcnNpb246IDAsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIGlkOiAyNyxcbiAgICAgICAgaXNCb3VnaHQ6IGZhbHNlLFxuICAgICAgICBpbWFnZTogcmVxdWlyZShcIi4uL2ltZy9nZXNjaGVua2UvU3RvZmZzZXJ2aWV0dGVuLnBuZ1wiKS5kZWZhdWx0LFxuICAgICAgICBuYW1lOiBcIjEyIFN0b2Zmc2VydmlldGVuXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIjEyIHdlacOfZSBTdG9mZnNlcnZpZXR0ZW4gYXVzIDEwMCUgQmlvLUJhdW13b2xsZVwiLFxuICAgICAgICBsaW5rOiBcImh0dHBzOi8vd3d3LmJld3Vzc3RncnVlbi5kZS8xMi1zdG9mZnNlcnZpZXR0ZW4tYXVzLTEwMC1iaW8tYmF1bXdvbGxlL1wiLFxuICAgICAgICB2ZXJzaW9uOiAwLFxuICAgIH0sXG4gICAge1xuICAgICAgICBpZDogMjgsXG4gICAgICAgIGlzQm91Z2h0OiBmYWxzZSxcbiAgICAgICAgaW1hZ2U6IHJlcXVpcmUoXCIuLi9pbWcvZ2VzY2hlbmtlL051ZGVsemFuZ2UucG5nXCIpLmRlZmF1bHQsXG4gICAgICAgIG5hbWU6IFwiV01GIE51ZGVsemFuZ2VcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiTnVkZWx6YW5nZSB2b24gV01GXCIsXG4gICAgICAgIGxpbms6IFwiaHR0cHM6Ly93d3cud21mLmNvbS9kZS9udWRlbHphbmdlLWJpc3Ryby5odG1sXCIsXG4gICAgICAgIHZlcnNpb246IDAsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIGlkOiAyOSxcbiAgICAgICAgaXNCb3VnaHQ6IGZhbHNlLFxuICAgICAgICBpbWFnZTogcmVxdWlyZShcIi4uL2ltZy9nZXNjaGVua2UvRWlzcG9ydGlvbmllcmVyLnBuZ1wiKS5kZWZhdWx0LFxuICAgICAgICBuYW1lOiBcIkVpc3BvcnRpb25pZXJlclwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJFaXNwb3J0aW9uaWVyZXIgbWl0IEt1Z2VsLUF1c3d1cmYgRnVua3Rpb24gKHdpZSBpbSBMaW5rIG9kZXIgw6RobmxpY2gpXCIsXG4gICAgICAgIGxpbms6IFwiaHR0cHM6Ly93d3cuZmFja2VsbWFubi5kZS9mYWNrZWxtYW5uLWVpc3BvcnRpb25pZXJlci1taXQta3VnZWwtYXVzd3VyZi1mdW5rdGlvbi1vZTVjbVwiLFxuICAgICAgICB2ZXJzaW9uOiAwLFxuICAgIH0sXG4gICAge1xuICAgICAgICBpZDogMzAsXG4gICAgICAgIGlzQm91Z2h0OiBmYWxzZSxcbiAgICAgICAgaW1hZ2U6IHJlcXVpcmUoXCIuLi9pbWcvZ2VzY2hlbmtlL0dpZcOfa2FubmUucG5nXCIpLmRlZmF1bHQsXG4gICAgICAgIG5hbWU6IFwiQmxlY2hnaWXDn2thbm5lXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkVpbmUgQmxlY2hnaWXDn2thbm4gbWl0IG1heC4gMmwgRsO8bGx2b2x1bWVuIHp1bSBCbHVtZW5naWXDn2VuIGluIGRlciBXb2hudW5nXCIsXG4gICAgICAgIGxpbms6IFwiaHR0cHM6Ly93d3cuYmF1aGF1cy5pbmZvL2dpZXNza2FubmVuL3ppbW1lcmdpZXNza2FubmUvcC8xNjY0MDA5M1wiLFxuICAgICAgICB2ZXJzaW9uOiAwLFxuICAgIH0sXG4gICAge1xuICAgICAgICBpZDogMzEsXG4gICAgICAgIGlzQm91Z2h0OiBmYWxzZSxcbiAgICAgICAgaW1hZ2U6IHJlcXVpcmUoXCIuLi9pbWcvZ2VzY2hlbmtlL1NhZnRwcmVzc2UucG5nXCIpLmRlZmF1bHQsXG4gICAgICAgIG5hbWU6IFwiU2FmdHByZXNzZSBUaGVybW9taXhcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiU2FmdHByZXNzZW4tQXVmc2F0eiBmw7xyIGRlbiBUaGVybW9taXhcIixcbiAgICAgICAgbGluazogXCJodHRwczovL3d3dy53dW5kZXJtaXguZGUvdGhlcm1vbWl4LXp1YmVob2VyL3p1YmVyZWl0ZW4tYXVmYmV3YWhyZW4vMTM3Mi9zYWZ0cHJlc3NlLWZ1ZXItdGhlcm1vbWl4LXRtNi90bTU/XCIsXG4gICAgICAgIHZlcnNpb246IDAsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIGlkOiAzMixcbiAgICAgICAgaXNCb3VnaHQ6IGZhbHNlLFxuICAgICAgICBpbWFnZTogcmVxdWlyZShcIi4uL2ltZy9nZXNjaGVua2UvQnVjaC5qcGVnXCIpLmRlZmF1bHQsXG4gICAgICAgIG5hbWU6IFwiQnVjaCDigJ5EdStJY2ggaW4gRXdpZ2tlaXTigJxcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiQnVjaCDigJ5EdSArIEljaCBpbiBFd2lna2VpdOKAnFwiLFxuICAgICAgICBsaW5rOiBcImh0dHBzOi8vd3d3LnRoYWxpYS5kZS9zaG9wL2hvbWUvYXJ0aWtlbGRldGFpbHMvQTEwMzgyNjAyNjRcIixcbiAgICAgICAgdmVyc2lvbjogMCxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgaWQ6IDMzLFxuICAgICAgICBpc0JvdWdodDogZmFsc2UsXG4gICAgICAgIGltYWdlOiByZXF1aXJlKFwiLi4vaW1nL2dlc2NoZW5rZS9CYWNrcGFwaWVyLnBuZ1wiKS5kZWZhdWx0LFxuICAgICAgICBuYW1lOiBcIk1laHJmYWNodmVyd2VuZGJhcmVzIEJhY2twYXBpZXJcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiU3DDvGxtYXNjaGluZW5mZXN0ZXMsIG1laHJmYWNodmVyd2VuZGJhcmVzIEJhY2twYXBpZXJcIixcbiAgICAgICAgbGluazogXCJodHRwczovL3d3dy5hbWF6b24uZGUvUHJpdG9nby1EYXVlcmJhY2tmb2xpZS1CYWNrdW50ZXJsYWdlLXNwJUMzJUJDbG1hc2NoaW5lbmZlc3QtYW50aWhhZnRiZXNjaGljaHRldC9kcC9CMDdHTlZIUUtRL3JlZj1wZF9zYnNfMy8yNTktMjM3NzI0OS03MTMxMTE1XCIsXG4gICAgICAgIHZlcnNpb246IDAsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIGlkOiAzNCxcbiAgICAgICAgaXNCb3VnaHQ6IGZhbHNlLFxuICAgICAgICBpbWFnZTogcmVxdWlyZShcIi4uL2ltZy9nZXNjaGVua2UvQmllbmVud2FjaHN0dWNoLmpwZWdcIikuZGVmYXVsdCxcbiAgICAgICAgbmFtZTogXCJHcm/Dn2VzIEJpZW5lbndhY2hzdHVjaFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJFaW4gZ3Jvw59lcyBCaWVuZW53YWNoc3R1Y2ggKG1pbmQuIDUweDQwY20pIHp1bSBBYmRlY2tlbiB1bnNlcmVyIEF1ZmxhdWZmb3JtIChMaW5rIGFscyBCZWlzcGllbClcIixcbiAgICAgICAgbGluazogXCJodHRwczovL3BhY2hhbWFtYS1sYWRlbi5kZS9kZS9pdGVtL3dpbGR3YXgteGwtNTB4NDBjbS1iaWVuZW53YWNoc3R1Y2hlci12ZXJzY2gtZGVzaWduc1wiLFxuICAgICAgICB2ZXJzaW9uOiAwLFxuICAgIH0sXG5dXG4iLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwic3RhdGljL21lZGlhL0dvUHJvLmVkNDQwZjQ2LnBuZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvQWR2ZW50dXJlS2l0X0dvUHJvLjU4MTdhNWNkLnBuZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvTWVzc2VyYmxvY2suMzdmMjc2YjQucG5nXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9tZWRpYS9ncm/Dn2VyX1RvcGYuMjE3MTA2YTQucG5nXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9tZWRpYS9zdHVkaWVuYmliZWwuYTlkNDNiNTMucG5nXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9tZWRpYS9CYW5nLjBiZWJhYzk1LnBuZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvQ29kZW5hbWVzLjBlZTUyZWVmLnBuZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvU3RhdWJzYXVnZXJyb2JvdGVyLmM0YWZhZmI3LnBuZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvV2VsdGthcnRlLmM0OGMwZGE0LmpwZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvS29ya3BsYXR0ZS41NWFkNmFkYy5wbmdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwic3RhdGljL21lZGlhL1NpdHpraXNzZW4uNTY1ZjA1M2YucG5nXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9tZWRpYS9TdG9mZnNlcnZpZXR0ZW4uMDY3ZDE5NmEucG5nXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9tZWRpYS9OdWRlbHphbmdlLjA4MzM5NThjLnBuZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvRWlzcG9ydGlvbmllcmVyLjQ2MzUxYzg1LnBuZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvR2llw59rYW5uZS4yMzZhZDVkZS5wbmdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwic3RhdGljL21lZGlhL1NhZnRwcmVzc2UuMjY3MTgwNDAucG5nXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9tZWRpYS9CdWNoLmM0OWVkOTQ1LmpwZWdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwic3RhdGljL21lZGlhL0JhY2twYXBpZXIuOTEwYTJjNzgucG5nXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9tZWRpYS9CaWVuZW53YWNoc3R1Y2guMTEzYjExNmEuanBlZ1wiOyIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGw9cmVxdWlyZShcIm9iamVjdC1hc3NpZ25cIiksbj02MDEwMyxwPTYwMTA2O2V4cG9ydHMuRnJhZ21lbnQ9NjAxMDc7ZXhwb3J0cy5TdHJpY3RNb2RlPTYwMTA4O2V4cG9ydHMuUHJvZmlsZXI9NjAxMTQ7dmFyIHE9NjAxMDkscj02MDExMCx0PTYwMTEyO2V4cG9ydHMuU3VzcGVuc2U9NjAxMTM7dmFyIHU9NjAxMTUsdj02MDExNjtcbmlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciB3PVN5bWJvbC5mb3I7bj13KFwicmVhY3QuZWxlbWVudFwiKTtwPXcoXCJyZWFjdC5wb3J0YWxcIik7ZXhwb3J0cy5GcmFnbWVudD13KFwicmVhY3QuZnJhZ21lbnRcIik7ZXhwb3J0cy5TdHJpY3RNb2RlPXcoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTtleHBvcnRzLlByb2ZpbGVyPXcoXCJyZWFjdC5wcm9maWxlclwiKTtxPXcoXCJyZWFjdC5wcm92aWRlclwiKTtyPXcoXCJyZWFjdC5jb250ZXh0XCIpO3Q9dyhcInJlYWN0LmZvcndhcmRfcmVmXCIpO2V4cG9ydHMuU3VzcGVuc2U9dyhcInJlYWN0LnN1c3BlbnNlXCIpO3U9dyhcInJlYWN0Lm1lbW9cIik7dj13KFwicmVhY3QubGF6eVwiKX12YXIgeD1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I7XG5mdW5jdGlvbiB5KGEpe2lmKG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT14JiZhW3hdfHxhW1wiQEBpdGVyYXRvclwiXTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hOm51bGx9ZnVuY3Rpb24geihhKXtmb3IodmFyIGI9XCJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD1cIithLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWIrPVwiJmFyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2NdKTtyZXR1cm5cIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIithK1wiOyB2aXNpdCBcIitiK1wiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIn1cbnZhciBBPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxCPXt9O2Z1bmN0aW9uIEMoYSxiLGMpe3RoaXMucHJvcHM9YTt0aGlzLmNvbnRleHQ9Yjt0aGlzLnJlZnM9Qjt0aGlzLnVwZGF0ZXI9Y3x8QX1DLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O0MucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGEsYil7aWYoXCJvYmplY3RcIiE9PXR5cGVvZiBhJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYSYmbnVsbCE9YSl0aHJvdyBFcnJvcih6KDg1KSk7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGEsYixcInNldFN0YXRlXCIpfTtDLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsYSxcImZvcmNlVXBkYXRlXCIpfTtcbmZ1bmN0aW9uIEQoKXt9RC5wcm90b3R5cGU9Qy5wcm90b3R5cGU7ZnVuY3Rpb24gRShhLGIsYyl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1CO3RoaXMudXBkYXRlcj1jfHxBfXZhciBGPUUucHJvdG90eXBlPW5ldyBEO0YuY29uc3RydWN0b3I9RTtsKEYsQy5wcm90b3R5cGUpO0YuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIEc9e2N1cnJlbnQ6bnVsbH0sSD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEk9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtcbmZ1bmN0aW9uIEooYSxiLGMpe3ZhciBlLGQ9e30saz1udWxsLGg9bnVsbDtpZihudWxsIT1iKWZvcihlIGluIHZvaWQgMCE9PWIucmVmJiYoaD1iLnJlZiksdm9pZCAwIT09Yi5rZXkmJihrPVwiXCIrYi5rZXkpLGIpSC5jYWxsKGIsZSkmJiFJLmhhc093blByb3BlcnR5KGUpJiYoZFtlXT1iW2VdKTt2YXIgZz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWcpZC5jaGlsZHJlbj1jO2Vsc2UgaWYoMTxnKXtmb3IodmFyIGY9QXJyYXkoZyksbT0wO208ZzttKyspZlttXT1hcmd1bWVudHNbbSsyXTtkLmNoaWxkcmVuPWZ9aWYoYSYmYS5kZWZhdWx0UHJvcHMpZm9yKGUgaW4gZz1hLmRlZmF1bHRQcm9wcyxnKXZvaWQgMD09PWRbZV0mJihkW2VdPWdbZV0pO3JldHVybnskJHR5cGVvZjpuLHR5cGU6YSxrZXk6ayxyZWY6aCxwcm9wczpkLF9vd25lcjpHLmN1cnJlbnR9fVxuZnVuY3Rpb24gSyhhLGIpe3JldHVybnskJHR5cGVvZjpuLHR5cGU6YS50eXBlLGtleTpiLHJlZjphLnJlZixwcm9wczphLnByb3BzLF9vd25lcjphLl9vd25lcn19ZnVuY3Rpb24gTChhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09bn1mdW5jdGlvbiBlc2NhcGUoYSl7dmFyIGI9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9O3JldHVyblwiJFwiK2EucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfSl9dmFyIE09L1xcLysvZztmdW5jdGlvbiBOKGEsYil7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmbnVsbCE9YS5rZXk/ZXNjYXBlKFwiXCIrYS5rZXkpOmIudG9TdHJpbmcoMzYpfVxuZnVuY3Rpb24gTyhhLGIsYyxlLGQpe3ZhciBrPXR5cGVvZiBhO2lmKFwidW5kZWZpbmVkXCI9PT1rfHxcImJvb2xlYW5cIj09PWspYT1udWxsO3ZhciBoPSExO2lmKG51bGw9PT1hKWg9ITA7ZWxzZSBzd2l0Y2goayl7Y2FzZSBcInN0cmluZ1wiOmNhc2UgXCJudW1iZXJcIjpoPSEwO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSBuOmNhc2UgcDpoPSEwfX1pZihoKXJldHVybiBoPWEsZD1kKGgpLGE9XCJcIj09PWU/XCIuXCIrTihoLDApOmUsQXJyYXkuaXNBcnJheShkKT8oYz1cIlwiLG51bGwhPWEmJihjPWEucmVwbGFjZShNLFwiJCYvXCIpK1wiL1wiKSxPKGQsYixjLFwiXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGF9KSk6bnVsbCE9ZCYmKEwoZCkmJihkPUsoZCxjKyghZC5rZXl8fGgmJmgua2V5PT09ZC5rZXk/XCJcIjooXCJcIitkLmtleSkucmVwbGFjZShNLFwiJCYvXCIpK1wiL1wiKSthKSksYi5wdXNoKGQpKSwxO2g9MDtlPVwiXCI9PT1lP1wiLlwiOmUrXCI6XCI7aWYoQXJyYXkuaXNBcnJheShhKSlmb3IodmFyIGc9XG4wO2c8YS5sZW5ndGg7ZysrKXtrPWFbZ107dmFyIGY9ZStOKGssZyk7aCs9TyhrLGIsYyxmLGQpfWVsc2UgaWYoZj15KGEpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBmKWZvcihhPWYuY2FsbChhKSxnPTA7IShrPWEubmV4dCgpKS5kb25lOylrPWsudmFsdWUsZj1lK04oayxnKyspLGgrPU8oayxiLGMsZixkKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1rKXRocm93IGI9XCJcIithLEVycm9yKHooMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PWI/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhhKS5qb2luKFwiLCBcIikrXCJ9XCI6YikpO3JldHVybiBofWZ1bmN0aW9uIFAoYSxiLGMpe2lmKG51bGw9PWEpcmV0dXJuIGE7dmFyIGU9W10sZD0wO08oYSxlLFwiXCIsXCJcIixmdW5jdGlvbihhKXtyZXR1cm4gYi5jYWxsKGMsYSxkKyspfSk7cmV0dXJuIGV9XG5mdW5jdGlvbiBRKGEpe2lmKC0xPT09YS5fc3RhdHVzKXt2YXIgYj1hLl9yZXN1bHQ7Yj1iKCk7YS5fc3RhdHVzPTA7YS5fcmVzdWx0PWI7Yi50aGVuKGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihiPWIuZGVmYXVsdCxhLl9zdGF0dXM9MSxhLl9yZXN1bHQ9Yil9LGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihhLl9zdGF0dXM9MixhLl9yZXN1bHQ9Yil9KX1pZigxPT09YS5fc3RhdHVzKXJldHVybiBhLl9yZXN1bHQ7dGhyb3cgYS5fcmVzdWx0O312YXIgUj17Y3VycmVudDpudWxsfTtmdW5jdGlvbiBTKCl7dmFyIGE9Ui5jdXJyZW50O2lmKG51bGw9PT1hKXRocm93IEVycm9yKHooMzIxKSk7cmV0dXJuIGF9dmFyIFQ9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6UixSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzp7dHJhbnNpdGlvbjowfSxSZWFjdEN1cnJlbnRPd25lcjpHLElzU29tZVJlbmRlcmVyQWN0aW5nOntjdXJyZW50OiExfSxhc3NpZ246bH07XG5leHBvcnRzLkNoaWxkcmVuPXttYXA6UCxmb3JFYWNoOmZ1bmN0aW9uKGEsYixjKXtQKGEsZnVuY3Rpb24oKXtiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYyl9LGNvdW50OmZ1bmN0aW9uKGEpe3ZhciBiPTA7UChhLGZ1bmN0aW9uKCl7YisrfSk7cmV0dXJuIGJ9LHRvQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIFAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYX0pfHxbXX0sb25seTpmdW5jdGlvbihhKXtpZighTChhKSl0aHJvdyBFcnJvcih6KDE0MykpO3JldHVybiBhfX07ZXhwb3J0cy5Db21wb25lbnQ9QztleHBvcnRzLlB1cmVDb21wb25lbnQ9RTtleHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPVQ7XG5leHBvcnRzLmNsb25lRWxlbWVudD1mdW5jdGlvbihhLGIsYyl7aWYobnVsbD09PWF8fHZvaWQgMD09PWEpdGhyb3cgRXJyb3IoeigyNjcsYSkpO3ZhciBlPWwoe30sYS5wcm9wcyksZD1hLmtleSxrPWEucmVmLGg9YS5fb3duZXI7aWYobnVsbCE9Yil7dm9pZCAwIT09Yi5yZWYmJihrPWIucmVmLGg9Ry5jdXJyZW50KTt2b2lkIDAhPT1iLmtleSYmKGQ9XCJcIitiLmtleSk7aWYoYS50eXBlJiZhLnR5cGUuZGVmYXVsdFByb3BzKXZhciBnPWEudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKGYgaW4gYilILmNhbGwoYixmKSYmIUkuaGFzT3duUHJvcGVydHkoZikmJihlW2ZdPXZvaWQgMD09PWJbZl0mJnZvaWQgMCE9PWc/Z1tmXTpiW2ZdKX12YXIgZj1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWYpZS5jaGlsZHJlbj1jO2Vsc2UgaWYoMTxmKXtnPUFycmF5KGYpO2Zvcih2YXIgbT0wO208ZjttKyspZ1ttXT1hcmd1bWVudHNbbSsyXTtlLmNoaWxkcmVuPWd9cmV0dXJueyQkdHlwZW9mOm4sdHlwZTphLnR5cGUsXG5rZXk6ZCxyZWY6ayxwcm9wczplLF9vd25lcjpofX07ZXhwb3J0cy5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9bnVsbCk7YT17JCR0eXBlb2Y6cixfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6YixfY3VycmVudFZhbHVlOmEsX2N1cnJlbnRWYWx1ZTI6YSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9O2EuUHJvdmlkZXI9eyQkdHlwZW9mOnEsX2NvbnRleHQ6YX07cmV0dXJuIGEuQ29uc3VtZXI9YX07ZXhwb3J0cy5jcmVhdGVFbGVtZW50PUo7ZXhwb3J0cy5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKGEpe3ZhciBiPUouYmluZChudWxsLGEpO2IudHlwZT1hO3JldHVybiBifTtleHBvcnRzLmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fTtleHBvcnRzLmZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOnQscmVuZGVyOmF9fTtleHBvcnRzLmlzVmFsaWRFbGVtZW50PUw7XG5leHBvcnRzLmxhenk9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOnYsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDphfSxfaW5pdDpRfX07ZXhwb3J0cy5tZW1vPWZ1bmN0aW9uKGEsYil7cmV0dXJueyQkdHlwZW9mOnUsdHlwZTphLGNvbXBhcmU6dm9pZCAwPT09Yj9udWxsOmJ9fTtleHBvcnRzLnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoKS51c2VDYWxsYmFjayhhLGIpfTtleHBvcnRzLnVzZUNvbnRleHQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUygpLnVzZUNvbnRleHQoYSxiKX07ZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVzZUVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlRWZmZWN0KGEsYil9O2V4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIFMoKS51c2VJbXBlcmF0aXZlSGFuZGxlKGEsYixjKX07XG5leHBvcnRzLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlTGF5b3V0RWZmZWN0KGEsYil9O2V4cG9ydHMudXNlTWVtbz1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlTWVtbyhhLGIpfTtleHBvcnRzLnVzZVJlZHVjZXI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBTKCkudXNlUmVkdWNlcihhLGIsYyl9O2V4cG9ydHMudXNlUmVmPWZ1bmN0aW9uKGEpe3JldHVybiBTKCkudXNlUmVmKGEpfTtleHBvcnRzLnVzZVN0YXRlPWZ1bmN0aW9uKGEpe3JldHVybiBTKCkudXNlU3RhdGUoYSl9O2V4cG9ydHMudmVyc2lvbj1cIjE3LjAuMlwiO1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4vKlxuIE1vZGVybml6ciAzLjAuMHByZSAoQ3VzdG9tIEJ1aWxkKSB8IE1JVFxuKi9cbid1c2Ugc3RyaWN0Jzt2YXIgYWE9cmVxdWlyZShcInJlYWN0XCIpLG09cmVxdWlyZShcIm9iamVjdC1hc3NpZ25cIikscj1yZXF1aXJlKFwic2NoZWR1bGVyXCIpO2Z1bmN0aW9uIHkoYSl7Zm9yKHZhciBiPVwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9XCIrYSxjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliKz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tjXSk7cmV0dXJuXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIrYStcIjsgdmlzaXQgXCIrYitcIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuXCJ9aWYoIWFhKXRocm93IEVycm9yKHkoMjI3KSk7dmFyIGJhPW5ldyBTZXQsY2E9e307ZnVuY3Rpb24gZGEoYSxiKXtlYShhLGIpO2VhKGErXCJDYXB0dXJlXCIsYil9XG5mdW5jdGlvbiBlYShhLGIpe2NhW2FdPWI7Zm9yKGE9MDthPGIubGVuZ3RoO2ErKyliYS5hZGQoYlthXSl9XG52YXIgZmE9IShcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvd3x8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnR8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpLGhhPS9eWzpBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXVs6QS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwXSokLyxpYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuamE9e30sa2E9e307ZnVuY3Rpb24gbGEoYSl7aWYoaWEuY2FsbChrYSxhKSlyZXR1cm4hMDtpZihpYS5jYWxsKGphLGEpKXJldHVybiExO2lmKGhhLnRlc3QoYSkpcmV0dXJuIGthW2FdPSEwO2phW2FdPSEwO3JldHVybiExfWZ1bmN0aW9uIG1hKGEsYixjLGQpe2lmKG51bGwhPT1jJiYwPT09Yy50eXBlKXJldHVybiExO3N3aXRjaCh0eXBlb2YgYil7Y2FzZSBcImZ1bmN0aW9uXCI6Y2FzZSBcInN5bWJvbFwiOnJldHVybiEwO2Nhc2UgXCJib29sZWFuXCI6aWYoZClyZXR1cm4hMTtpZihudWxsIT09YylyZXR1cm4hYy5hY2NlcHRzQm9vbGVhbnM7YT1hLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCw1KTtyZXR1cm5cImRhdGEtXCIhPT1hJiZcImFyaWEtXCIhPT1hO2RlZmF1bHQ6cmV0dXJuITF9fVxuZnVuY3Rpb24gbmEoYSxiLGMsZCl7aWYobnVsbD09PWJ8fFwidW5kZWZpbmVkXCI9PT10eXBlb2YgYnx8bWEoYSxiLGMsZCkpcmV0dXJuITA7aWYoZClyZXR1cm4hMTtpZihudWxsIT09Yylzd2l0Y2goYy50eXBlKXtjYXNlIDM6cmV0dXJuIWI7Y2FzZSA0OnJldHVybiExPT09YjtjYXNlIDU6cmV0dXJuIGlzTmFOKGIpO2Nhc2UgNjpyZXR1cm4gaXNOYU4oYil8fDE+Yn1yZXR1cm4hMX1mdW5jdGlvbiBCKGEsYixjLGQsZSxmLGcpe3RoaXMuYWNjZXB0c0Jvb2xlYW5zPTI9PT1ifHwzPT09Ynx8ND09PWI7dGhpcy5hdHRyaWJ1dGVOYW1lPWQ7dGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2U9ZTt0aGlzLm11c3RVc2VQcm9wZXJ0eT1jO3RoaXMucHJvcGVydHlOYW1lPWE7dGhpcy50eXBlPWI7dGhpcy5zYW5pdGl6ZVVSTD1mO3RoaXMucmVtb3ZlRW1wdHlTdHJpbmc9Z312YXIgRD17fTtcblwiY2hpbGRyZW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgZGVmYXVsdFZhbHVlIGRlZmF1bHRDaGVja2VkIGlubmVySFRNTCBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHN0eWxlXCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDAsITEsYSxudWxsLCExLCExKX0pO1tbXCJhY2NlcHRDaGFyc2V0XCIsXCJhY2NlcHQtY2hhcnNldFwiXSxbXCJjbGFzc05hbWVcIixcImNsYXNzXCJdLFtcImh0bWxGb3JcIixcImZvclwiXSxbXCJodHRwRXF1aXZcIixcImh0dHAtZXF1aXZcIl1dLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YVswXTtEW2JdPW5ldyBCKGIsMSwhMSxhWzFdLG51bGwsITEsITEpfSk7W1wiY29udGVudEVkaXRhYmxlXCIsXCJkcmFnZ2FibGVcIixcInNwZWxsQ2hlY2tcIixcInZhbHVlXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDIsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7XG5bXCJhdXRvUmV2ZXJzZVwiLFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiLFwiZm9jdXNhYmxlXCIsXCJwcmVzZXJ2ZUFscGhhXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDIsITEsYSxudWxsLCExLCExKX0pO1wiYWxsb3dGdWxsU2NyZWVuIGFzeW5jIGF1dG9Gb2N1cyBhdXRvUGxheSBjb250cm9scyBkZWZhdWx0IGRlZmVyIGRpc2FibGVkIGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlIGRpc2FibGVSZW1vdGVQbGF5YmFjayBmb3JtTm9WYWxpZGF0ZSBoaWRkZW4gbG9vcCBub01vZHVsZSBub1ZhbGlkYXRlIG9wZW4gcGxheXNJbmxpbmUgcmVhZE9ubHkgcmVxdWlyZWQgcmV2ZXJzZWQgc2NvcGVkIHNlYW1sZXNzIGl0ZW1TY29wZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwzLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1xuW1wiY2hlY2tlZFwiLFwibXVsdGlwbGVcIixcIm11dGVkXCIsXCJzZWxlY3RlZFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwzLCEwLGEsbnVsbCwhMSwhMSl9KTtbXCJjYXB0dXJlXCIsXCJkb3dubG9hZFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSw0LCExLGEsbnVsbCwhMSwhMSl9KTtbXCJjb2xzXCIsXCJyb3dzXCIsXCJzaXplXCIsXCJzcGFuXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDYsITEsYSxudWxsLCExLCExKX0pO1tcInJvd1NwYW5cIixcInN0YXJ0XCJdLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDUsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7dmFyIG9hPS9bXFwtOl0oW2Etel0pL2c7ZnVuY3Rpb24gcGEoYSl7cmV0dXJuIGFbMV0udG9VcHBlckNhc2UoKX1cblwiYWNjZW50LWhlaWdodCBhbGlnbm1lbnQtYmFzZWxpbmUgYXJhYmljLWZvcm0gYmFzZWxpbmUtc2hpZnQgY2FwLWhlaWdodCBjbGlwLXBhdGggY2xpcC1ydWxlIGNvbG9yLWludGVycG9sYXRpb24gY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIGNvbG9yLXByb2ZpbGUgY29sb3ItcmVuZGVyaW5nIGRvbWluYW50LWJhc2VsaW5lIGVuYWJsZS1iYWNrZ3JvdW5kIGZpbGwtb3BhY2l0eSBmaWxsLXJ1bGUgZmxvb2QtY29sb3IgZmxvb2Qtb3BhY2l0eSBmb250LWZhbWlseSBmb250LXNpemUgZm9udC1zaXplLWFkanVzdCBmb250LXN0cmV0Y2ggZm9udC1zdHlsZSBmb250LXZhcmlhbnQgZm9udC13ZWlnaHQgZ2x5cGgtbmFtZSBnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIGdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIGhvcml6LWFkdi14IGhvcml6LW9yaWdpbi14IGltYWdlLXJlbmRlcmluZyBsZXR0ZXItc3BhY2luZyBsaWdodGluZy1jb2xvciBtYXJrZXItZW5kIG1hcmtlci1taWQgbWFya2VyLXN0YXJ0IG92ZXJsaW5lLXBvc2l0aW9uIG92ZXJsaW5lLXRoaWNrbmVzcyBwYWludC1vcmRlciBwYW5vc2UtMSBwb2ludGVyLWV2ZW50cyByZW5kZXJpbmctaW50ZW50IHNoYXBlLXJlbmRlcmluZyBzdG9wLWNvbG9yIHN0b3Atb3BhY2l0eSBzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIHN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIHN0cm9rZS1kYXNoYXJyYXkgc3Ryb2tlLWRhc2hvZmZzZXQgc3Ryb2tlLWxpbmVjYXAgc3Ryb2tlLWxpbmVqb2luIHN0cm9rZS1taXRlcmxpbWl0IHN0cm9rZS1vcGFjaXR5IHN0cm9rZS13aWR0aCB0ZXh0LWFuY2hvciB0ZXh0LWRlY29yYXRpb24gdGV4dC1yZW5kZXJpbmcgdW5kZXJsaW5lLXBvc2l0aW9uIHVuZGVybGluZS10aGlja25lc3MgdW5pY29kZS1iaWRpIHVuaWNvZGUtcmFuZ2UgdW5pdHMtcGVyLWVtIHYtYWxwaGFiZXRpYyB2LWhhbmdpbmcgdi1pZGVvZ3JhcGhpYyB2LW1hdGhlbWF0aWNhbCB2ZWN0b3ItZWZmZWN0IHZlcnQtYWR2LXkgdmVydC1vcmlnaW4teCB2ZXJ0LW9yaWdpbi15IHdvcmQtc3BhY2luZyB3cml0aW5nLW1vZGUgeG1sbnM6eGxpbmsgeC1oZWlnaHRcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2Uob2EsXG5wYSk7RFtiXT1uZXcgQihiLDEsITEsYSxudWxsLCExLCExKX0pO1wieGxpbms6YWN0dWF0ZSB4bGluazphcmNyb2xlIHhsaW5rOnJvbGUgeGxpbms6c2hvdyB4bGluazp0aXRsZSB4bGluazp0eXBlXCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKG9hLHBhKTtEW2JdPW5ldyBCKGIsMSwhMSxhLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLCExLCExKX0pO1tcInhtbDpiYXNlXCIsXCJ4bWw6bGFuZ1wiLFwieG1sOnNwYWNlXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKG9hLHBhKTtEW2JdPW5ldyBCKGIsMSwhMSxhLFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsITEsITEpfSk7W1widGFiSW5kZXhcIixcImNyb3NzT3JpZ2luXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDEsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7XG5ELnhsaW5rSHJlZj1uZXcgQihcInhsaW5rSHJlZlwiLDEsITEsXCJ4bGluazpocmVmXCIsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsITAsITEpO1tcInNyY1wiLFwiaHJlZlwiLFwiYWN0aW9uXCIsXCJmb3JtQWN0aW9uXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDEsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITAsITApfSk7XG5mdW5jdGlvbiBxYShhLGIsYyxkKXt2YXIgZT1ELmhhc093blByb3BlcnR5KGIpP0RbYl06bnVsbDt2YXIgZj1udWxsIT09ZT8wPT09ZS50eXBlOmQ/ITE6ISgyPGIubGVuZ3RoKXx8XCJvXCIhPT1iWzBdJiZcIk9cIiE9PWJbMF18fFwiblwiIT09YlsxXSYmXCJOXCIhPT1iWzFdPyExOiEwO2Z8fChuYShiLGMsZSxkKSYmKGM9bnVsbCksZHx8bnVsbD09PWU/bGEoYikmJihudWxsPT09Yz9hLnJlbW92ZUF0dHJpYnV0ZShiKTphLnNldEF0dHJpYnV0ZShiLFwiXCIrYykpOmUubXVzdFVzZVByb3BlcnR5P2FbZS5wcm9wZXJ0eU5hbWVdPW51bGw9PT1jPzM9PT1lLnR5cGU/ITE6XCJcIjpjOihiPWUuYXR0cmlidXRlTmFtZSxkPWUuYXR0cmlidXRlTmFtZXNwYWNlLG51bGw9PT1jP2EucmVtb3ZlQXR0cmlidXRlKGIpOihlPWUudHlwZSxjPTM9PT1lfHw0PT09ZSYmITA9PT1jP1wiXCI6XCJcIitjLGQ/YS5zZXRBdHRyaWJ1dGVOUyhkLGIsYyk6YS5zZXRBdHRyaWJ1dGUoYixjKSkpKX1cbnZhciByYT1hYS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxzYT02MDEwMyx0YT02MDEwNix1YT02MDEwNyx3YT02MDEwOCx4YT02MDExNCx5YT02MDEwOSx6YT02MDExMCxBYT02MDExMixCYT02MDExMyxDYT02MDEyMCxEYT02MDExNSxFYT02MDExNixGYT02MDEyMSxHYT02MDEyOCxIYT02MDEyOSxJYT02MDEzMCxKYT02MDEzMTtcbmlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBFPVN5bWJvbC5mb3I7c2E9RShcInJlYWN0LmVsZW1lbnRcIik7dGE9RShcInJlYWN0LnBvcnRhbFwiKTt1YT1FKFwicmVhY3QuZnJhZ21lbnRcIik7d2E9RShcInJlYWN0LnN0cmljdF9tb2RlXCIpO3hhPUUoXCJyZWFjdC5wcm9maWxlclwiKTt5YT1FKFwicmVhY3QucHJvdmlkZXJcIik7emE9RShcInJlYWN0LmNvbnRleHRcIik7QWE9RShcInJlYWN0LmZvcndhcmRfcmVmXCIpO0JhPUUoXCJyZWFjdC5zdXNwZW5zZVwiKTtDYT1FKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTtEYT1FKFwicmVhY3QubWVtb1wiKTtFYT1FKFwicmVhY3QubGF6eVwiKTtGYT1FKFwicmVhY3QuYmxvY2tcIik7RShcInJlYWN0LnNjb3BlXCIpO0dhPUUoXCJyZWFjdC5vcGFxdWUuaWRcIik7SGE9RShcInJlYWN0LmRlYnVnX3RyYWNlX21vZGVcIik7SWE9RShcInJlYWN0Lm9mZnNjcmVlblwiKTtKYT1FKFwicmVhY3QubGVnYWN5X2hpZGRlblwiKX1cbnZhciBLYT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I7ZnVuY3Rpb24gTGEoYSl7aWYobnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYSlyZXR1cm4gbnVsbDthPUthJiZhW0thXXx8YVtcIkBAaXRlcmF0b3JcIl07cmV0dXJuXCJmdW5jdGlvblwiPT09dHlwZW9mIGE/YTpudWxsfXZhciBNYTtmdW5jdGlvbiBOYShhKXtpZih2b2lkIDA9PT1NYSl0cnl7dGhyb3cgRXJyb3IoKTt9Y2F0Y2goYyl7dmFyIGI9Yy5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtNYT1iJiZiWzFdfHxcIlwifXJldHVyblwiXFxuXCIrTWErYX12YXIgT2E9ITE7XG5mdW5jdGlvbiBQYShhLGIpe2lmKCFhfHxPYSlyZXR1cm5cIlwiO09hPSEwO3ZhciBjPUVycm9yLnByZXBhcmVTdGFja1RyYWNlO0Vycm9yLnByZXBhcmVTdGFja1RyYWNlPXZvaWQgMDt0cnl7aWYoYilpZihiPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKTt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLnByb3RvdHlwZSxcInByb3BzXCIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCk7fX0pLFwib2JqZWN0XCI9PT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5jb25zdHJ1Y3Qpe3RyeXtSZWZsZWN0LmNvbnN0cnVjdChiLFtdKX1jYXRjaChrKXt2YXIgZD1rfVJlZmxlY3QuY29uc3RydWN0KGEsW10sYil9ZWxzZXt0cnl7Yi5jYWxsKCl9Y2F0Y2goayl7ZD1rfWEuY2FsbChiLnByb3RvdHlwZSl9ZWxzZXt0cnl7dGhyb3cgRXJyb3IoKTt9Y2F0Y2goayl7ZD1rfWEoKX19Y2F0Y2goayl7aWYoayYmZCYmXCJzdHJpbmdcIj09PXR5cGVvZiBrLnN0YWNrKXtmb3IodmFyIGU9ay5zdGFjay5zcGxpdChcIlxcblwiKSxcbmY9ZC5zdGFjay5zcGxpdChcIlxcblwiKSxnPWUubGVuZ3RoLTEsaD1mLmxlbmd0aC0xOzE8PWcmJjA8PWgmJmVbZ10hPT1mW2hdOyloLS07Zm9yKDsxPD1nJiYwPD1oO2ctLSxoLS0paWYoZVtnXSE9PWZbaF0pe2lmKDEhPT1nfHwxIT09aCl7ZG8gaWYoZy0tLGgtLSwwPmh8fGVbZ10hPT1mW2hdKXJldHVyblwiXFxuXCIrZVtnXS5yZXBsYWNlKFwiIGF0IG5ldyBcIixcIiBhdCBcIik7d2hpbGUoMTw9ZyYmMDw9aCl9YnJlYWt9fX1maW5hbGx5e09hPSExLEVycm9yLnByZXBhcmVTdGFja1RyYWNlPWN9cmV0dXJuKGE9YT9hLmRpc3BsYXlOYW1lfHxhLm5hbWU6XCJcIik/TmEoYSk6XCJcIn1cbmZ1bmN0aW9uIFFhKGEpe3N3aXRjaChhLnRhZyl7Y2FzZSA1OnJldHVybiBOYShhLnR5cGUpO2Nhc2UgMTY6cmV0dXJuIE5hKFwiTGF6eVwiKTtjYXNlIDEzOnJldHVybiBOYShcIlN1c3BlbnNlXCIpO2Nhc2UgMTk6cmV0dXJuIE5hKFwiU3VzcGVuc2VMaXN0XCIpO2Nhc2UgMDpjYXNlIDI6Y2FzZSAxNTpyZXR1cm4gYT1QYShhLnR5cGUsITEpLGE7Y2FzZSAxMTpyZXR1cm4gYT1QYShhLnR5cGUucmVuZGVyLCExKSxhO2Nhc2UgMjI6cmV0dXJuIGE9UGEoYS50eXBlLl9yZW5kZXIsITEpLGE7Y2FzZSAxOnJldHVybiBhPVBhKGEudHlwZSwhMCksYTtkZWZhdWx0OnJldHVyblwiXCJ9fVxuZnVuY3Rpb24gUmEoYSl7aWYobnVsbD09YSlyZXR1cm4gbnVsbDtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYSlyZXR1cm4gYS5kaXNwbGF5TmFtZXx8YS5uYW1lfHxudWxsO2lmKFwic3RyaW5nXCI9PT10eXBlb2YgYSlyZXR1cm4gYTtzd2l0Y2goYSl7Y2FzZSB1YTpyZXR1cm5cIkZyYWdtZW50XCI7Y2FzZSB0YTpyZXR1cm5cIlBvcnRhbFwiO2Nhc2UgeGE6cmV0dXJuXCJQcm9maWxlclwiO2Nhc2Ugd2E6cmV0dXJuXCJTdHJpY3RNb2RlXCI7Y2FzZSBCYTpyZXR1cm5cIlN1c3BlbnNlXCI7Y2FzZSBDYTpyZXR1cm5cIlN1c3BlbnNlTGlzdFwifWlmKFwib2JqZWN0XCI9PT10eXBlb2YgYSlzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSB6YTpyZXR1cm4oYS5kaXNwbGF5TmFtZXx8XCJDb250ZXh0XCIpK1wiLkNvbnN1bWVyXCI7Y2FzZSB5YTpyZXR1cm4oYS5fY29udGV4dC5kaXNwbGF5TmFtZXx8XCJDb250ZXh0XCIpK1wiLlByb3ZpZGVyXCI7Y2FzZSBBYTp2YXIgYj1hLnJlbmRlcjtiPWIuZGlzcGxheU5hbWV8fGIubmFtZXx8XCJcIjtcbnJldHVybiBhLmRpc3BsYXlOYW1lfHwoXCJcIiE9PWI/XCJGb3J3YXJkUmVmKFwiK2IrXCIpXCI6XCJGb3J3YXJkUmVmXCIpO2Nhc2UgRGE6cmV0dXJuIFJhKGEudHlwZSk7Y2FzZSBGYTpyZXR1cm4gUmEoYS5fcmVuZGVyKTtjYXNlIEVhOmI9YS5fcGF5bG9hZDthPWEuX2luaXQ7dHJ5e3JldHVybiBSYShhKGIpKX1jYXRjaChjKXt9fXJldHVybiBudWxsfWZ1bmN0aW9uIFNhKGEpe3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSBcImJvb2xlYW5cIjpjYXNlIFwibnVtYmVyXCI6Y2FzZSBcIm9iamVjdFwiOmNhc2UgXCJzdHJpbmdcIjpjYXNlIFwidW5kZWZpbmVkXCI6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm5cIlwifX1mdW5jdGlvbiBUYShhKXt2YXIgYj1hLnR5cGU7cmV0dXJuKGE9YS5ub2RlTmFtZSkmJlwiaW5wdXRcIj09PWEudG9Mb3dlckNhc2UoKSYmKFwiY2hlY2tib3hcIj09PWJ8fFwicmFkaW9cIj09PWIpfVxuZnVuY3Rpb24gVWEoYSl7dmFyIGI9VGEoYSk/XCJjaGVja2VkXCI6XCJ2YWx1ZVwiLGM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSxiKSxkPVwiXCIrYVtiXTtpZighYS5oYXNPd25Qcm9wZXJ0eShiKSYmXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBjJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgYy5nZXQmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBjLnNldCl7dmFyIGU9Yy5nZXQsZj1jLnNldDtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuY2FsbCh0aGlzKX0sc2V0OmZ1bmN0aW9uKGEpe2Q9XCJcIithO2YuY2FsbCh0aGlzLGEpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse2VudW1lcmFibGU6Yy5lbnVtZXJhYmxlfSk7cmV0dXJue2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGR9LHNldFZhbHVlOmZ1bmN0aW9uKGEpe2Q9XCJcIithfSxzdG9wVHJhY2tpbmc6ZnVuY3Rpb24oKXthLl92YWx1ZVRyYWNrZXI9XG5udWxsO2RlbGV0ZSBhW2JdfX19fWZ1bmN0aW9uIFZhKGEpe2EuX3ZhbHVlVHJhY2tlcnx8KGEuX3ZhbHVlVHJhY2tlcj1VYShhKSl9ZnVuY3Rpb24gV2EoYSl7aWYoIWEpcmV0dXJuITE7dmFyIGI9YS5fdmFsdWVUcmFja2VyO2lmKCFiKXJldHVybiEwO3ZhciBjPWIuZ2V0VmFsdWUoKTt2YXIgZD1cIlwiO2EmJihkPVRhKGEpP2EuY2hlY2tlZD9cInRydWVcIjpcImZhbHNlXCI6YS52YWx1ZSk7YT1kO3JldHVybiBhIT09Yz8oYi5zZXRWYWx1ZShhKSwhMCk6ITF9ZnVuY3Rpb24gWGEoYSl7YT1hfHwoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudDp2b2lkIDApO2lmKFwidW5kZWZpbmVkXCI9PT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGEuYWN0aXZlRWxlbWVudHx8YS5ib2R5fWNhdGNoKGIpe3JldHVybiBhLmJvZHl9fVxuZnVuY3Rpb24gWWEoYSxiKXt2YXIgYz1iLmNoZWNrZWQ7cmV0dXJuIG0oe30sYix7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bnVsbCE9Yz9jOmEuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZH0pfWZ1bmN0aW9uIFphKGEsYil7dmFyIGM9bnVsbD09Yi5kZWZhdWx0VmFsdWU/XCJcIjpiLmRlZmF1bHRWYWx1ZSxkPW51bGwhPWIuY2hlY2tlZD9iLmNoZWNrZWQ6Yi5kZWZhdWx0Q2hlY2tlZDtjPVNhKG51bGwhPWIudmFsdWU/Yi52YWx1ZTpjKTthLl93cmFwcGVyU3RhdGU9e2luaXRpYWxDaGVja2VkOmQsaW5pdGlhbFZhbHVlOmMsY29udHJvbGxlZDpcImNoZWNrYm94XCI9PT1iLnR5cGV8fFwicmFkaW9cIj09PWIudHlwZT9udWxsIT1iLmNoZWNrZWQ6bnVsbCE9Yi52YWx1ZX19ZnVuY3Rpb24gJGEoYSxiKXtiPWIuY2hlY2tlZDtudWxsIT1iJiZxYShhLFwiY2hlY2tlZFwiLGIsITEpfVxuZnVuY3Rpb24gYWIoYSxiKXskYShhLGIpO3ZhciBjPVNhKGIudmFsdWUpLGQ9Yi50eXBlO2lmKG51bGwhPWMpaWYoXCJudW1iZXJcIj09PWQpe2lmKDA9PT1jJiZcIlwiPT09YS52YWx1ZXx8YS52YWx1ZSE9YylhLnZhbHVlPVwiXCIrY31lbHNlIGEudmFsdWUhPT1cIlwiK2MmJihhLnZhbHVlPVwiXCIrYyk7ZWxzZSBpZihcInN1Ym1pdFwiPT09ZHx8XCJyZXNldFwiPT09ZCl7YS5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtyZXR1cm59Yi5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpP2JiKGEsYi50eXBlLGMpOmIuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0VmFsdWVcIikmJmJiKGEsYi50eXBlLFNhKGIuZGVmYXVsdFZhbHVlKSk7bnVsbD09Yi5jaGVja2VkJiZudWxsIT1iLmRlZmF1bHRDaGVja2VkJiYoYS5kZWZhdWx0Q2hlY2tlZD0hIWIuZGVmYXVsdENoZWNrZWQpfVxuZnVuY3Rpb24gY2IoYSxiLGMpe2lmKGIuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKXx8Yi5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRWYWx1ZVwiKSl7dmFyIGQ9Yi50eXBlO2lmKCEoXCJzdWJtaXRcIiE9PWQmJlwicmVzZXRcIiE9PWR8fHZvaWQgMCE9PWIudmFsdWUmJm51bGwhPT1iLnZhbHVlKSlyZXR1cm47Yj1cIlwiK2EuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWU7Y3x8Yj09PWEudmFsdWV8fChhLnZhbHVlPWIpO2EuZGVmYXVsdFZhbHVlPWJ9Yz1hLm5hbWU7XCJcIiE9PWMmJihhLm5hbWU9XCJcIik7YS5kZWZhdWx0Q2hlY2tlZD0hIWEuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZDtcIlwiIT09YyYmKGEubmFtZT1jKX1cbmZ1bmN0aW9uIGJiKGEsYixjKXtpZihcIm51bWJlclwiIT09Ynx8WGEoYS5vd25lckRvY3VtZW50KSE9PWEpbnVsbD09Yz9hLmRlZmF1bHRWYWx1ZT1cIlwiK2EuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWU6YS5kZWZhdWx0VmFsdWUhPT1cIlwiK2MmJihhLmRlZmF1bHRWYWx1ZT1cIlwiK2MpfWZ1bmN0aW9uIGRiKGEpe3ZhciBiPVwiXCI7YWEuQ2hpbGRyZW4uZm9yRWFjaChhLGZ1bmN0aW9uKGEpe251bGwhPWEmJihiKz1hKX0pO3JldHVybiBifWZ1bmN0aW9uIGViKGEsYil7YT1tKHtjaGlsZHJlbjp2b2lkIDB9LGIpO2lmKGI9ZGIoYi5jaGlsZHJlbikpYS5jaGlsZHJlbj1iO3JldHVybiBhfVxuZnVuY3Rpb24gZmIoYSxiLGMsZCl7YT1hLm9wdGlvbnM7aWYoYil7Yj17fTtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyliW1wiJFwiK2NbZV1dPSEwO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspZT1iLmhhc093blByb3BlcnR5KFwiJFwiK2FbY10udmFsdWUpLGFbY10uc2VsZWN0ZWQhPT1lJiYoYVtjXS5zZWxlY3RlZD1lKSxlJiZkJiYoYVtjXS5kZWZhdWx0U2VsZWN0ZWQ9ITApfWVsc2V7Yz1cIlwiK1NhKGMpO2I9bnVsbDtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXtpZihhW2VdLnZhbHVlPT09Yyl7YVtlXS5zZWxlY3RlZD0hMDtkJiYoYVtlXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn1udWxsIT09Ynx8YVtlXS5kaXNhYmxlZHx8KGI9YVtlXSl9bnVsbCE9PWImJihiLnNlbGVjdGVkPSEwKX19XG5mdW5jdGlvbiBnYihhLGIpe2lmKG51bGwhPWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpdGhyb3cgRXJyb3IoeSg5MSkpO3JldHVybiBtKHt9LGIse3ZhbHVlOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLGNoaWxkcmVuOlwiXCIrYS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uIGhiKGEsYil7dmFyIGM9Yi52YWx1ZTtpZihudWxsPT1jKXtjPWIuY2hpbGRyZW47Yj1iLmRlZmF1bHRWYWx1ZTtpZihudWxsIT1jKXtpZihudWxsIT1iKXRocm93IEVycm9yKHkoOTIpKTtpZihBcnJheS5pc0FycmF5KGMpKXtpZighKDE+PWMubGVuZ3RoKSl0aHJvdyBFcnJvcih5KDkzKSk7Yz1jWzBdfWI9Y31udWxsPT1iJiYoYj1cIlwiKTtjPWJ9YS5fd3JhcHBlclN0YXRlPXtpbml0aWFsVmFsdWU6U2EoYyl9fVxuZnVuY3Rpb24gaWIoYSxiKXt2YXIgYz1TYShiLnZhbHVlKSxkPVNhKGIuZGVmYXVsdFZhbHVlKTtudWxsIT1jJiYoYz1cIlwiK2MsYyE9PWEudmFsdWUmJihhLnZhbHVlPWMpLG51bGw9PWIuZGVmYXVsdFZhbHVlJiZhLmRlZmF1bHRWYWx1ZSE9PWMmJihhLmRlZmF1bHRWYWx1ZT1jKSk7bnVsbCE9ZCYmKGEuZGVmYXVsdFZhbHVlPVwiXCIrZCl9ZnVuY3Rpb24gamIoYSl7dmFyIGI9YS50ZXh0Q29udGVudDtiPT09YS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSYmXCJcIiE9PWImJm51bGwhPT1iJiYoYS52YWx1ZT1iKX12YXIga2I9e2h0bWw6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsbWF0aG1sOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLHN2ZzpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9O1xuZnVuY3Rpb24gbGIoYSl7c3dpdGNoKGEpe2Nhc2UgXCJzdmdcIjpyZXR1cm5cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7Y2FzZSBcIm1hdGhcIjpyZXR1cm5cImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIjtkZWZhdWx0OnJldHVyblwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwifX1mdW5jdGlvbiBtYihhLGIpe3JldHVybiBudWxsPT1hfHxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj09PWE/bGIoYik6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT09YSYmXCJmb3JlaWduT2JqZWN0XCI9PT1iP1wiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiOmF9XG52YXIgbmIsb2I9ZnVuY3Rpb24oYSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBNU0FwcCYmTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24/ZnVuY3Rpb24oYixjLGQsZSl7TVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24oKXtyZXR1cm4gYShiLGMsZCxlKX0pfTphfShmdW5jdGlvbihhLGIpe2lmKGEubmFtZXNwYWNlVVJJIT09a2Iuc3ZnfHxcImlubmVySFRNTFwiaW4gYSlhLmlubmVySFRNTD1iO2Vsc2V7bmI9bmJ8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7bmIuaW5uZXJIVE1MPVwiPHN2Zz5cIitiLnZhbHVlT2YoKS50b1N0cmluZygpK1wiPC9zdmc+XCI7Zm9yKGI9bmIuZmlyc3RDaGlsZDthLmZpcnN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKTtmb3IoO2IuZmlyc3RDaGlsZDspYS5hcHBlbmRDaGlsZChiLmZpcnN0Q2hpbGQpfX0pO1xuZnVuY3Rpb24gcGIoYSxiKXtpZihiKXt2YXIgYz1hLmZpcnN0Q2hpbGQ7aWYoYyYmYz09PWEubGFzdENoaWxkJiYzPT09Yy5ub2RlVHlwZSl7Yy5ub2RlVmFsdWU9YjtyZXR1cm59fWEudGV4dENvbnRlbnQ9Yn1cbnZhciBxYj17YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsYm9yZGVySW1hZ2VPdXRzZXQ6ITAsYm9yZGVySW1hZ2VTbGljZTohMCxib3JkZXJJbWFnZVdpZHRoOiEwLGJveEZsZXg6ITAsYm94RmxleEdyb3VwOiEwLGJveE9yZGluYWxHcm91cDohMCxjb2x1bW5Db3VudDohMCxjb2x1bW5zOiEwLGZsZXg6ITAsZmxleEdyb3c6ITAsZmxleFBvc2l0aXZlOiEwLGZsZXhTaHJpbms6ITAsZmxleE5lZ2F0aXZlOiEwLGZsZXhPcmRlcjohMCxncmlkQXJlYTohMCxncmlkUm93OiEwLGdyaWRSb3dFbmQ6ITAsZ3JpZFJvd1NwYW46ITAsZ3JpZFJvd1N0YXJ0OiEwLGdyaWRDb2x1bW46ITAsZ3JpZENvbHVtbkVuZDohMCxncmlkQ29sdW1uU3BhbjohMCxncmlkQ29sdW1uU3RhcnQ6ITAsZm9udFdlaWdodDohMCxsaW5lQ2xhbXA6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsdGFiU2l6ZTohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITAsZmlsbE9wYWNpdHk6ITAsXG5mbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxyYj1bXCJXZWJraXRcIixcIm1zXCIsXCJNb3pcIixcIk9cIl07T2JqZWN0LmtleXMocWIpLmZvckVhY2goZnVuY3Rpb24oYSl7cmIuZm9yRWFjaChmdW5jdGlvbihiKXtiPWIrYS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSthLnN1YnN0cmluZygxKTtxYltiXT1xYlthXX0pfSk7ZnVuY3Rpb24gc2IoYSxiLGMpe3JldHVybiBudWxsPT1ifHxcImJvb2xlYW5cIj09PXR5cGVvZiBifHxcIlwiPT09Yj9cIlwiOmN8fFwibnVtYmVyXCIhPT10eXBlb2YgYnx8MD09PWJ8fHFiLmhhc093blByb3BlcnR5KGEpJiZxYlthXT8oXCJcIitiKS50cmltKCk6YitcInB4XCJ9XG5mdW5jdGlvbiB0YihhLGIpe2E9YS5zdHlsZTtmb3IodmFyIGMgaW4gYilpZihiLmhhc093blByb3BlcnR5KGMpKXt2YXIgZD0wPT09Yy5pbmRleE9mKFwiLS1cIiksZT1zYihjLGJbY10sZCk7XCJmbG9hdFwiPT09YyYmKGM9XCJjc3NGbG9hdFwiKTtkP2Euc2V0UHJvcGVydHkoYyxlKTphW2NdPWV9fXZhciB1Yj1tKHttZW51aXRlbTohMH0se2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsZW1iZWQ6ITAsaHI6ITAsaW1nOiEwLGlucHV0OiEwLGtleWdlbjohMCxsaW5rOiEwLG1ldGE6ITAscGFyYW06ITAsc291cmNlOiEwLHRyYWNrOiEwLHdicjohMH0pO1xuZnVuY3Rpb24gdmIoYSxiKXtpZihiKXtpZih1YlthXSYmKG51bGwhPWIuY2hpbGRyZW58fG51bGwhPWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKHkoMTM3LGEpKTtpZihudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKXtpZihudWxsIT1iLmNoaWxkcmVuKXRocm93IEVycm9yKHkoNjApKTtpZighKFwib2JqZWN0XCI9PT10eXBlb2YgYi5kYW5nZXJvdXNseVNldElubmVySFRNTCYmXCJfX2h0bWxcImluIGIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKHkoNjEpKTt9aWYobnVsbCE9Yi5zdHlsZSYmXCJvYmplY3RcIiE9PXR5cGVvZiBiLnN0eWxlKXRocm93IEVycm9yKHkoNjIpKTt9fVxuZnVuY3Rpb24gd2IoYSxiKXtpZigtMT09PWEuaW5kZXhPZihcIi1cIikpcmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBiLmlzO3N3aXRjaChhKXtjYXNlIFwiYW5ub3RhdGlvbi14bWxcIjpjYXNlIFwiY29sb3ItcHJvZmlsZVwiOmNhc2UgXCJmb250LWZhY2VcIjpjYXNlIFwiZm9udC1mYWNlLXNyY1wiOmNhc2UgXCJmb250LWZhY2UtdXJpXCI6Y2FzZSBcImZvbnQtZmFjZS1mb3JtYXRcIjpjYXNlIFwiZm9udC1mYWNlLW5hbWVcIjpjYXNlIFwibWlzc2luZy1nbHlwaFwiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fWZ1bmN0aW9uIHhiKGEpe2E9YS50YXJnZXR8fGEuc3JjRWxlbWVudHx8d2luZG93O2EuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQmJihhPWEuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpO3JldHVybiAzPT09YS5ub2RlVHlwZT9hLnBhcmVudE5vZGU6YX12YXIgeWI9bnVsbCx6Yj1udWxsLEFiPW51bGw7XG5mdW5jdGlvbiBCYihhKXtpZihhPUNiKGEpKXtpZihcImZ1bmN0aW9uXCIhPT10eXBlb2YgeWIpdGhyb3cgRXJyb3IoeSgyODApKTt2YXIgYj1hLnN0YXRlTm9kZTtiJiYoYj1EYihiKSx5YihhLnN0YXRlTm9kZSxhLnR5cGUsYikpfX1mdW5jdGlvbiBFYihhKXt6Yj9BYj9BYi5wdXNoKGEpOkFiPVthXTp6Yj1hfWZ1bmN0aW9uIEZiKCl7aWYoemIpe3ZhciBhPXpiLGI9QWI7QWI9emI9bnVsbDtCYihhKTtpZihiKWZvcihhPTA7YTxiLmxlbmd0aDthKyspQmIoYlthXSl9fWZ1bmN0aW9uIEdiKGEsYil7cmV0dXJuIGEoYil9ZnVuY3Rpb24gSGIoYSxiLGMsZCxlKXtyZXR1cm4gYShiLGMsZCxlKX1mdW5jdGlvbiBJYigpe312YXIgSmI9R2IsS2I9ITEsTGI9ITE7ZnVuY3Rpb24gTWIoKXtpZihudWxsIT09emJ8fG51bGwhPT1BYilJYigpLEZiKCl9XG5mdW5jdGlvbiBOYihhLGIsYyl7aWYoTGIpcmV0dXJuIGEoYixjKTtMYj0hMDt0cnl7cmV0dXJuIEpiKGEsYixjKX1maW5hbGx5e0xiPSExLE1iKCl9fVxuZnVuY3Rpb24gT2IoYSxiKXt2YXIgYz1hLnN0YXRlTm9kZTtpZihudWxsPT09YylyZXR1cm4gbnVsbDt2YXIgZD1EYihjKTtpZihudWxsPT09ZClyZXR1cm4gbnVsbDtjPWRbYl07YTpzd2l0Y2goYil7Y2FzZSBcIm9uQ2xpY2tcIjpjYXNlIFwib25DbGlja0NhcHR1cmVcIjpjYXNlIFwib25Eb3VibGVDbGlja1wiOmNhc2UgXCJvbkRvdWJsZUNsaWNrQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlRG93blwiOmNhc2UgXCJvbk1vdXNlRG93bkNhcHR1cmVcIjpjYXNlIFwib25Nb3VzZU1vdmVcIjpjYXNlIFwib25Nb3VzZU1vdmVDYXB0dXJlXCI6Y2FzZSBcIm9uTW91c2VVcFwiOmNhc2UgXCJvbk1vdXNlVXBDYXB0dXJlXCI6Y2FzZSBcIm9uTW91c2VFbnRlclwiOihkPSFkLmRpc2FibGVkKXx8KGE9YS50eXBlLGQ9IShcImJ1dHRvblwiPT09YXx8XCJpbnB1dFwiPT09YXx8XCJzZWxlY3RcIj09PWF8fFwidGV4dGFyZWFcIj09PWEpKTthPSFkO2JyZWFrIGE7ZGVmYXVsdDphPSExfWlmKGEpcmV0dXJuIG51bGw7aWYoYyYmXCJmdW5jdGlvblwiIT09XG50eXBlb2YgYyl0aHJvdyBFcnJvcih5KDIzMSxiLHR5cGVvZiBjKSk7cmV0dXJuIGN9dmFyIFBiPSExO2lmKGZhKXRyeXt2YXIgUWI9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KFFiLFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtQYj0hMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIixRYixRYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsUWIsUWIpfWNhdGNoKGEpe1BiPSExfWZ1bmN0aW9uIFJiKGEsYixjLGQsZSxmLGcsaCxrKXt2YXIgbD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMyk7dHJ5e2IuYXBwbHkoYyxsKX1jYXRjaChuKXt0aGlzLm9uRXJyb3Iobil9fXZhciBTYj0hMSxUYj1udWxsLFViPSExLFZiPW51bGwsV2I9e29uRXJyb3I6ZnVuY3Rpb24oYSl7U2I9ITA7VGI9YX19O2Z1bmN0aW9uIFhiKGEsYixjLGQsZSxmLGcsaCxrKXtTYj0hMTtUYj1udWxsO1JiLmFwcGx5KFdiLGFyZ3VtZW50cyl9XG5mdW5jdGlvbiBZYihhLGIsYyxkLGUsZixnLGgsayl7WGIuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKFNiKXtpZihTYil7dmFyIGw9VGI7U2I9ITE7VGI9bnVsbH1lbHNlIHRocm93IEVycm9yKHkoMTk4KSk7VWJ8fChVYj0hMCxWYj1sKX19ZnVuY3Rpb24gWmIoYSl7dmFyIGI9YSxjPWE7aWYoYS5hbHRlcm5hdGUpZm9yKDtiLnJldHVybjspYj1iLnJldHVybjtlbHNle2E9YjtkbyBiPWEsMCE9PShiLmZsYWdzJjEwMjYpJiYoYz1iLnJldHVybiksYT1iLnJldHVybjt3aGlsZShhKX1yZXR1cm4gMz09PWIudGFnP2M6bnVsbH1mdW5jdGlvbiAkYihhKXtpZigxMz09PWEudGFnKXt2YXIgYj1hLm1lbW9pemVkU3RhdGU7bnVsbD09PWImJihhPWEuYWx0ZXJuYXRlLG51bGwhPT1hJiYoYj1hLm1lbW9pemVkU3RhdGUpKTtpZihudWxsIT09YilyZXR1cm4gYi5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIGFjKGEpe2lmKFpiKGEpIT09YSl0aHJvdyBFcnJvcih5KDE4OCkpO31cbmZ1bmN0aW9uIGJjKGEpe3ZhciBiPWEuYWx0ZXJuYXRlO2lmKCFiKXtiPVpiKGEpO2lmKG51bGw9PT1iKXRocm93IEVycm9yKHkoMTg4KSk7cmV0dXJuIGIhPT1hP251bGw6YX1mb3IodmFyIGM9YSxkPWI7Oyl7dmFyIGU9Yy5yZXR1cm47aWYobnVsbD09PWUpYnJlYWs7dmFyIGY9ZS5hbHRlcm5hdGU7aWYobnVsbD09PWYpe2Q9ZS5yZXR1cm47aWYobnVsbCE9PWQpe2M9ZDtjb250aW51ZX1icmVha31pZihlLmNoaWxkPT09Zi5jaGlsZCl7Zm9yKGY9ZS5jaGlsZDtmOyl7aWYoZj09PWMpcmV0dXJuIGFjKGUpLGE7aWYoZj09PWQpcmV0dXJuIGFjKGUpLGI7Zj1mLnNpYmxpbmd9dGhyb3cgRXJyb3IoeSgxODgpKTt9aWYoYy5yZXR1cm4hPT1kLnJldHVybiljPWUsZD1mO2Vsc2V7Zm9yKHZhciBnPSExLGg9ZS5jaGlsZDtoOyl7aWYoaD09PWMpe2c9ITA7Yz1lO2Q9ZjticmVha31pZihoPT09ZCl7Zz0hMDtkPWU7Yz1mO2JyZWFrfWg9aC5zaWJsaW5nfWlmKCFnKXtmb3IoaD1mLmNoaWxkO2g7KXtpZihoPT09XG5jKXtnPSEwO2M9ZjtkPWU7YnJlYWt9aWYoaD09PWQpe2c9ITA7ZD1mO2M9ZTticmVha31oPWguc2libGluZ31pZighZyl0aHJvdyBFcnJvcih5KDE4OSkpO319aWYoYy5hbHRlcm5hdGUhPT1kKXRocm93IEVycm9yKHkoMTkwKSk7fWlmKDMhPT1jLnRhZyl0aHJvdyBFcnJvcih5KDE4OCkpO3JldHVybiBjLnN0YXRlTm9kZS5jdXJyZW50PT09Yz9hOmJ9ZnVuY3Rpb24gY2MoYSl7YT1iYyhhKTtpZighYSlyZXR1cm4gbnVsbDtmb3IodmFyIGI9YTs7KXtpZig1PT09Yi50YWd8fDY9PT1iLnRhZylyZXR1cm4gYjtpZihiLmNoaWxkKWIuY2hpbGQucmV0dXJuPWIsYj1iLmNoaWxkO2Vsc2V7aWYoYj09PWEpYnJlYWs7Zm9yKDshYi5zaWJsaW5nOyl7aWYoIWIucmV0dXJufHxiLnJldHVybj09PWEpcmV0dXJuIG51bGw7Yj1iLnJldHVybn1iLnNpYmxpbmcucmV0dXJuPWIucmV0dXJuO2I9Yi5zaWJsaW5nfX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGRjKGEsYil7Zm9yKHZhciBjPWEuYWx0ZXJuYXRlO251bGwhPT1iOyl7aWYoYj09PWF8fGI9PT1jKXJldHVybiEwO2I9Yi5yZXR1cm59cmV0dXJuITF9dmFyIGVjLGZjLGdjLGhjLGljPSExLGpjPVtdLGtjPW51bGwsbGM9bnVsbCxtYz1udWxsLG5jPW5ldyBNYXAsb2M9bmV3IE1hcCxwYz1bXSxxYz1cIm1vdXNlZG93biBtb3VzZXVwIHRvdWNoY2FuY2VsIHRvdWNoZW5kIHRvdWNoc3RhcnQgYXV4Y2xpY2sgZGJsY2xpY2sgcG9pbnRlcmNhbmNlbCBwb2ludGVyZG93biBwb2ludGVydXAgZHJhZ2VuZCBkcmFnc3RhcnQgZHJvcCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnN0YXJ0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgaW5wdXQgdGV4dElucHV0IGNvcHkgY3V0IHBhc3RlIGNsaWNrIGNoYW5nZSBjb250ZXh0bWVudSByZXNldCBzdWJtaXRcIi5zcGxpdChcIiBcIik7XG5mdW5jdGlvbiByYyhhLGIsYyxkLGUpe3JldHVybntibG9ja2VkT246YSxkb21FdmVudE5hbWU6YixldmVudFN5c3RlbUZsYWdzOmN8MTYsbmF0aXZlRXZlbnQ6ZSx0YXJnZXRDb250YWluZXJzOltkXX19ZnVuY3Rpb24gc2MoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImZvY3VzaW5cIjpjYXNlIFwiZm9jdXNvdXRcIjprYz1udWxsO2JyZWFrO2Nhc2UgXCJkcmFnZW50ZXJcIjpjYXNlIFwiZHJhZ2xlYXZlXCI6bGM9bnVsbDticmVhaztjYXNlIFwibW91c2VvdmVyXCI6Y2FzZSBcIm1vdXNlb3V0XCI6bWM9bnVsbDticmVhaztjYXNlIFwicG9pbnRlcm92ZXJcIjpjYXNlIFwicG9pbnRlcm91dFwiOm5jLmRlbGV0ZShiLnBvaW50ZXJJZCk7YnJlYWs7Y2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6Y2FzZSBcImxvc3Rwb2ludGVyY2FwdHVyZVwiOm9jLmRlbGV0ZShiLnBvaW50ZXJJZCl9fVxuZnVuY3Rpb24gdGMoYSxiLGMsZCxlLGYpe2lmKG51bGw9PT1hfHxhLm5hdGl2ZUV2ZW50IT09ZilyZXR1cm4gYT1yYyhiLGMsZCxlLGYpLG51bGwhPT1iJiYoYj1DYihiKSxudWxsIT09YiYmZmMoYikpLGE7YS5ldmVudFN5c3RlbUZsYWdzfD1kO2I9YS50YXJnZXRDb250YWluZXJzO251bGwhPT1lJiYtMT09PWIuaW5kZXhPZihlKSYmYi5wdXNoKGUpO3JldHVybiBhfVxuZnVuY3Rpb24gdWMoYSxiLGMsZCxlKXtzd2l0Y2goYil7Y2FzZSBcImZvY3VzaW5cIjpyZXR1cm4ga2M9dGMoa2MsYSxiLGMsZCxlKSwhMDtjYXNlIFwiZHJhZ2VudGVyXCI6cmV0dXJuIGxjPXRjKGxjLGEsYixjLGQsZSksITA7Y2FzZSBcIm1vdXNlb3ZlclwiOnJldHVybiBtYz10YyhtYyxhLGIsYyxkLGUpLCEwO2Nhc2UgXCJwb2ludGVyb3ZlclwiOnZhciBmPWUucG9pbnRlcklkO25jLnNldChmLHRjKG5jLmdldChmKXx8bnVsbCxhLGIsYyxkLGUpKTtyZXR1cm4hMDtjYXNlIFwiZ290cG9pbnRlcmNhcHR1cmVcIjpyZXR1cm4gZj1lLnBvaW50ZXJJZCxvYy5zZXQoZix0YyhvYy5nZXQoZil8fG51bGwsYSxiLGMsZCxlKSksITB9cmV0dXJuITF9XG5mdW5jdGlvbiB2YyhhKXt2YXIgYj13YyhhLnRhcmdldCk7aWYobnVsbCE9PWIpe3ZhciBjPVpiKGIpO2lmKG51bGwhPT1jKWlmKGI9Yy50YWcsMTM9PT1iKXtpZihiPSRiKGMpLG51bGwhPT1iKXthLmJsb2NrZWRPbj1iO2hjKGEubGFuZVByaW9yaXR5LGZ1bmN0aW9uKCl7ci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkoYS5wcmlvcml0eSxmdW5jdGlvbigpe2djKGMpfSl9KTtyZXR1cm59fWVsc2UgaWYoMz09PWImJmMuc3RhdGVOb2RlLmh5ZHJhdGUpe2EuYmxvY2tlZE9uPTM9PT1jLnRhZz9jLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX1hLmJsb2NrZWRPbj1udWxsfVxuZnVuY3Rpb24geGMoYSl7aWYobnVsbCE9PWEuYmxvY2tlZE9uKXJldHVybiExO2Zvcih2YXIgYj1hLnRhcmdldENvbnRhaW5lcnM7MDxiLmxlbmd0aDspe3ZhciBjPXljKGEuZG9tRXZlbnROYW1lLGEuZXZlbnRTeXN0ZW1GbGFncyxiWzBdLGEubmF0aXZlRXZlbnQpO2lmKG51bGwhPT1jKXJldHVybiBiPUNiKGMpLG51bGwhPT1iJiZmYyhiKSxhLmJsb2NrZWRPbj1jLCExO2Iuc2hpZnQoKX1yZXR1cm4hMH1mdW5jdGlvbiB6YyhhLGIsYyl7eGMoYSkmJmMuZGVsZXRlKGIpfVxuZnVuY3Rpb24gQWMoKXtmb3IoaWM9ITE7MDxqYy5sZW5ndGg7KXt2YXIgYT1qY1swXTtpZihudWxsIT09YS5ibG9ja2VkT24pe2E9Q2IoYS5ibG9ja2VkT24pO251bGwhPT1hJiZlYyhhKTticmVha31mb3IodmFyIGI9YS50YXJnZXRDb250YWluZXJzOzA8Yi5sZW5ndGg7KXt2YXIgYz15YyhhLmRvbUV2ZW50TmFtZSxhLmV2ZW50U3lzdGVtRmxhZ3MsYlswXSxhLm5hdGl2ZUV2ZW50KTtpZihudWxsIT09Yyl7YS5ibG9ja2VkT249YzticmVha31iLnNoaWZ0KCl9bnVsbD09PWEuYmxvY2tlZE9uJiZqYy5zaGlmdCgpfW51bGwhPT1rYyYmeGMoa2MpJiYoa2M9bnVsbCk7bnVsbCE9PWxjJiZ4YyhsYykmJihsYz1udWxsKTtudWxsIT09bWMmJnhjKG1jKSYmKG1jPW51bGwpO25jLmZvckVhY2goemMpO29jLmZvckVhY2goemMpfVxuZnVuY3Rpb24gQmMoYSxiKXthLmJsb2NrZWRPbj09PWImJihhLmJsb2NrZWRPbj1udWxsLGljfHwoaWM9ITAsci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKHIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksQWMpKSl9XG5mdW5jdGlvbiBDYyhhKXtmdW5jdGlvbiBiKGIpe3JldHVybiBCYyhiLGEpfWlmKDA8amMubGVuZ3RoKXtCYyhqY1swXSxhKTtmb3IodmFyIGM9MTtjPGpjLmxlbmd0aDtjKyspe3ZhciBkPWpjW2NdO2QuYmxvY2tlZE9uPT09YSYmKGQuYmxvY2tlZE9uPW51bGwpfX1udWxsIT09a2MmJkJjKGtjLGEpO251bGwhPT1sYyYmQmMobGMsYSk7bnVsbCE9PW1jJiZCYyhtYyxhKTtuYy5mb3JFYWNoKGIpO29jLmZvckVhY2goYik7Zm9yKGM9MDtjPHBjLmxlbmd0aDtjKyspZD1wY1tjXSxkLmJsb2NrZWRPbj09PWEmJihkLmJsb2NrZWRPbj1udWxsKTtmb3IoOzA8cGMubGVuZ3RoJiYoYz1wY1swXSxudWxsPT09Yy5ibG9ja2VkT24pOyl2YyhjKSxudWxsPT09Yy5ibG9ja2VkT24mJnBjLnNoaWZ0KCl9XG5mdW5jdGlvbiBEYyhhLGIpe3ZhciBjPXt9O2NbYS50b0xvd2VyQ2FzZSgpXT1iLnRvTG93ZXJDYXNlKCk7Y1tcIldlYmtpdFwiK2FdPVwid2Via2l0XCIrYjtjW1wiTW96XCIrYV09XCJtb3pcIitiO3JldHVybiBjfXZhciBFYz17YW5pbWF0aW9uZW5kOkRjKFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25FbmRcIiksYW5pbWF0aW9uaXRlcmF0aW9uOkRjKFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25JdGVyYXRpb25cIiksYW5pbWF0aW9uc3RhcnQ6RGMoXCJBbmltYXRpb25cIixcIkFuaW1hdGlvblN0YXJ0XCIpLHRyYW5zaXRpb25lbmQ6RGMoXCJUcmFuc2l0aW9uXCIsXCJUcmFuc2l0aW9uRW5kXCIpfSxGYz17fSxHYz17fTtcbmZhJiYoR2M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5zdHlsZSxcIkFuaW1hdGlvbkV2ZW50XCJpbiB3aW5kb3d8fChkZWxldGUgRWMuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbixkZWxldGUgRWMuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbixkZWxldGUgRWMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uKSxcIlRyYW5zaXRpb25FdmVudFwiaW4gd2luZG93fHxkZWxldGUgRWMudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTtmdW5jdGlvbiBIYyhhKXtpZihGY1thXSlyZXR1cm4gRmNbYV07aWYoIUVjW2FdKXJldHVybiBhO3ZhciBiPUVjW2FdLGM7Zm9yKGMgaW4gYilpZihiLmhhc093blByb3BlcnR5KGMpJiZjIGluIEdjKXJldHVybiBGY1thXT1iW2NdO3JldHVybiBhfVxudmFyIEljPUhjKFwiYW5pbWF0aW9uZW5kXCIpLEpjPUhjKFwiYW5pbWF0aW9uaXRlcmF0aW9uXCIpLEtjPUhjKFwiYW5pbWF0aW9uc3RhcnRcIiksTGM9SGMoXCJ0cmFuc2l0aW9uZW5kXCIpLE1jPW5ldyBNYXAsTmM9bmV3IE1hcCxPYz1bXCJhYm9ydFwiLFwiYWJvcnRcIixJYyxcImFuaW1hdGlvbkVuZFwiLEpjLFwiYW5pbWF0aW9uSXRlcmF0aW9uXCIsS2MsXCJhbmltYXRpb25TdGFydFwiLFwiY2FucGxheVwiLFwiY2FuUGxheVwiLFwiY2FucGxheXRocm91Z2hcIixcImNhblBsYXlUaHJvdWdoXCIsXCJkdXJhdGlvbmNoYW5nZVwiLFwiZHVyYXRpb25DaGFuZ2VcIixcImVtcHRpZWRcIixcImVtcHRpZWRcIixcImVuY3J5cHRlZFwiLFwiZW5jcnlwdGVkXCIsXCJlbmRlZFwiLFwiZW5kZWRcIixcImVycm9yXCIsXCJlcnJvclwiLFwiZ290cG9pbnRlcmNhcHR1cmVcIixcImdvdFBvaW50ZXJDYXB0dXJlXCIsXCJsb2FkXCIsXCJsb2FkXCIsXCJsb2FkZWRkYXRhXCIsXCJsb2FkZWREYXRhXCIsXCJsb2FkZWRtZXRhZGF0YVwiLFwibG9hZGVkTWV0YWRhdGFcIixcImxvYWRzdGFydFwiLFwibG9hZFN0YXJ0XCIsXG5cImxvc3Rwb2ludGVyY2FwdHVyZVwiLFwibG9zdFBvaW50ZXJDYXB0dXJlXCIsXCJwbGF5aW5nXCIsXCJwbGF5aW5nXCIsXCJwcm9ncmVzc1wiLFwicHJvZ3Jlc3NcIixcInNlZWtpbmdcIixcInNlZWtpbmdcIixcInN0YWxsZWRcIixcInN0YWxsZWRcIixcInN1c3BlbmRcIixcInN1c3BlbmRcIixcInRpbWV1cGRhdGVcIixcInRpbWVVcGRhdGVcIixMYyxcInRyYW5zaXRpb25FbmRcIixcIndhaXRpbmdcIixcIndhaXRpbmdcIl07ZnVuY3Rpb24gUGMoYSxiKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTIpe3ZhciBkPWFbY10sZT1hW2MrMV07ZT1cIm9uXCIrKGVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKTtOYy5zZXQoZCxiKTtNYy5zZXQoZCxlKTtkYShlLFtkXSl9fXZhciBRYz1yLnVuc3RhYmxlX25vdztRYygpO3ZhciBGPTg7XG5mdW5jdGlvbiBSYyhhKXtpZigwIT09KDEmYSkpcmV0dXJuIEY9MTUsMTtpZigwIT09KDImYSkpcmV0dXJuIEY9MTQsMjtpZigwIT09KDQmYSkpcmV0dXJuIEY9MTMsNDt2YXIgYj0yNCZhO2lmKDAhPT1iKXJldHVybiBGPTEyLGI7aWYoMCE9PShhJjMyKSlyZXR1cm4gRj0xMSwzMjtiPTE5MiZhO2lmKDAhPT1iKXJldHVybiBGPTEwLGI7aWYoMCE9PShhJjI1NikpcmV0dXJuIEY9OSwyNTY7Yj0zNTg0JmE7aWYoMCE9PWIpcmV0dXJuIEY9OCxiO2lmKDAhPT0oYSY0MDk2KSlyZXR1cm4gRj03LDQwOTY7Yj00MTg2MTEyJmE7aWYoMCE9PWIpcmV0dXJuIEY9NixiO2I9NjI5MTQ1NjAmYTtpZigwIT09YilyZXR1cm4gRj01LGI7aWYoYSY2NzEwODg2NClyZXR1cm4gRj00LDY3MTA4ODY0O2lmKDAhPT0oYSYxMzQyMTc3MjgpKXJldHVybiBGPTMsMTM0MjE3NzI4O2I9ODA1MzA2MzY4JmE7aWYoMCE9PWIpcmV0dXJuIEY9MixiO2lmKDAhPT0oMTA3Mzc0MTgyNCZhKSlyZXR1cm4gRj0xLDEwNzM3NDE4MjQ7XG5GPTg7cmV0dXJuIGF9ZnVuY3Rpb24gU2MoYSl7c3dpdGNoKGEpe2Nhc2UgOTk6cmV0dXJuIDE1O2Nhc2UgOTg6cmV0dXJuIDEwO2Nhc2UgOTc6Y2FzZSA5NjpyZXR1cm4gODtjYXNlIDk1OnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIFRjKGEpe3N3aXRjaChhKXtjYXNlIDE1OmNhc2UgMTQ6cmV0dXJuIDk5O2Nhc2UgMTM6Y2FzZSAxMjpjYXNlIDExOmNhc2UgMTA6cmV0dXJuIDk4O2Nhc2UgOTpjYXNlIDg6Y2FzZSA3OmNhc2UgNjpjYXNlIDQ6Y2FzZSA1OnJldHVybiA5NztjYXNlIDM6Y2FzZSAyOmNhc2UgMTpyZXR1cm4gOTU7Y2FzZSAwOnJldHVybiA5MDtkZWZhdWx0OnRocm93IEVycm9yKHkoMzU4LGEpKTt9fVxuZnVuY3Rpb24gVWMoYSxiKXt2YXIgYz1hLnBlbmRpbmdMYW5lcztpZigwPT09YylyZXR1cm4gRj0wO3ZhciBkPTAsZT0wLGY9YS5leHBpcmVkTGFuZXMsZz1hLnN1c3BlbmRlZExhbmVzLGg9YS5waW5nZWRMYW5lcztpZigwIT09ZilkPWYsZT1GPTE1O2Vsc2UgaWYoZj1jJjEzNDIxNzcyNywwIT09Zil7dmFyIGs9ZiZ+ZzswIT09az8oZD1SYyhrKSxlPUYpOihoJj1mLDAhPT1oJiYoZD1SYyhoKSxlPUYpKX1lbHNlIGY9YyZ+ZywwIT09Zj8oZD1SYyhmKSxlPUYpOjAhPT1oJiYoZD1SYyhoKSxlPUYpO2lmKDA9PT1kKXJldHVybiAwO2Q9MzEtVmMoZCk7ZD1jJigoMD5kPzA6MTw8ZCk8PDEpLTE7aWYoMCE9PWImJmIhPT1kJiYwPT09KGImZykpe1JjKGIpO2lmKGU8PUYpcmV0dXJuIGI7Rj1lfWI9YS5lbnRhbmdsZWRMYW5lcztpZigwIT09Yilmb3IoYT1hLmVudGFuZ2xlbWVudHMsYiY9ZDswPGI7KWM9MzEtVmMoYiksZT0xPDxjLGR8PWFbY10sYiY9fmU7cmV0dXJuIGR9XG5mdW5jdGlvbiBXYyhhKXthPWEucGVuZGluZ0xhbmVzJi0xMDczNzQxODI1O3JldHVybiAwIT09YT9hOmEmMTA3Mzc0MTgyND8xMDczNzQxODI0OjB9ZnVuY3Rpb24gWGMoYSxiKXtzd2l0Y2goYSl7Y2FzZSAxNTpyZXR1cm4gMTtjYXNlIDE0OnJldHVybiAyO2Nhc2UgMTI6cmV0dXJuIGE9WWMoMjQmfmIpLDA9PT1hP1hjKDEwLGIpOmE7Y2FzZSAxMDpyZXR1cm4gYT1ZYygxOTImfmIpLDA9PT1hP1hjKDgsYik6YTtjYXNlIDg6cmV0dXJuIGE9WWMoMzU4NCZ+YiksMD09PWEmJihhPVljKDQxODYxMTImfmIpLDA9PT1hJiYoYT01MTIpKSxhO2Nhc2UgMjpyZXR1cm4gYj1ZYyg4MDUzMDYzNjgmfmIpLDA9PT1iJiYoYj0yNjg0MzU0NTYpLGJ9dGhyb3cgRXJyb3IoeSgzNTgsYSkpO31mdW5jdGlvbiBZYyhhKXtyZXR1cm4gYSYtYX1mdW5jdGlvbiBaYyhhKXtmb3IodmFyIGI9W10sYz0wOzMxPmM7YysrKWIucHVzaChhKTtyZXR1cm4gYn1cbmZ1bmN0aW9uICRjKGEsYixjKXthLnBlbmRpbmdMYW5lc3w9Yjt2YXIgZD1iLTE7YS5zdXNwZW5kZWRMYW5lcyY9ZDthLnBpbmdlZExhbmVzJj1kO2E9YS5ldmVudFRpbWVzO2I9MzEtVmMoYik7YVtiXT1jfXZhciBWYz1NYXRoLmNsejMyP01hdGguY2x6MzI6YWQsYmQ9TWF0aC5sb2csY2Q9TWF0aC5MTjI7ZnVuY3Rpb24gYWQoYSl7cmV0dXJuIDA9PT1hPzMyOjMxLShiZChhKS9jZHwwKXwwfXZhciBkZD1yLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LGVkPXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5LGZkPSEwO2Z1bmN0aW9uIGdkKGEsYixjLGQpe0tifHxJYigpO3ZhciBlPWhkLGY9S2I7S2I9ITA7dHJ5e0hiKGUsYSxiLGMsZCl9ZmluYWxseXsoS2I9Zil8fE1iKCl9fWZ1bmN0aW9uIGlkKGEsYixjLGQpe2VkKGRkLGhkLmJpbmQobnVsbCxhLGIsYyxkKSl9XG5mdW5jdGlvbiBoZChhLGIsYyxkKXtpZihmZCl7dmFyIGU7aWYoKGU9MD09PShiJjQpKSYmMDxqYy5sZW5ndGgmJi0xPHFjLmluZGV4T2YoYSkpYT1yYyhudWxsLGEsYixjLGQpLGpjLnB1c2goYSk7ZWxzZXt2YXIgZj15YyhhLGIsYyxkKTtpZihudWxsPT09ZillJiZzYyhhLGQpO2Vsc2V7aWYoZSl7aWYoLTE8cWMuaW5kZXhPZihhKSl7YT1yYyhmLGEsYixjLGQpO2pjLnB1c2goYSk7cmV0dXJufWlmKHVjKGYsYSxiLGMsZCkpcmV0dXJuO3NjKGEsZCl9amQoYSxiLGQsbnVsbCxjKX19fX1cbmZ1bmN0aW9uIHljKGEsYixjLGQpe3ZhciBlPXhiKGQpO2U9d2MoZSk7aWYobnVsbCE9PWUpe3ZhciBmPVpiKGUpO2lmKG51bGw9PT1mKWU9bnVsbDtlbHNle3ZhciBnPWYudGFnO2lmKDEzPT09Zyl7ZT0kYihmKTtpZihudWxsIT09ZSlyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZigzPT09Zyl7aWYoZi5zdGF0ZU5vZGUuaHlkcmF0ZSlyZXR1cm4gMz09PWYudGFnP2Yuc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtlPW51bGx9ZWxzZSBmIT09ZSYmKGU9bnVsbCl9fWpkKGEsYixkLGUsYyk7cmV0dXJuIG51bGx9dmFyIGtkPW51bGwsbGQ9bnVsbCxtZD1udWxsO1xuZnVuY3Rpb24gbmQoKXtpZihtZClyZXR1cm4gbWQ7dmFyIGEsYj1sZCxjPWIubGVuZ3RoLGQsZT1cInZhbHVlXCJpbiBrZD9rZC52YWx1ZTprZC50ZXh0Q29udGVudCxmPWUubGVuZ3RoO2ZvcihhPTA7YTxjJiZiW2FdPT09ZVthXTthKyspO3ZhciBnPWMtYTtmb3IoZD0xO2Q8PWcmJmJbYy1kXT09PWVbZi1kXTtkKyspO3JldHVybiBtZD1lLnNsaWNlKGEsMTxkPzEtZDp2b2lkIDApfWZ1bmN0aW9uIG9kKGEpe3ZhciBiPWEua2V5Q29kZTtcImNoYXJDb2RlXCJpbiBhPyhhPWEuY2hhckNvZGUsMD09PWEmJjEzPT09YiYmKGE9MTMpKTphPWI7MTA9PT1hJiYoYT0xMyk7cmV0dXJuIDMyPD1hfHwxMz09PWE/YTowfWZ1bmN0aW9uIHBkKCl7cmV0dXJuITB9ZnVuY3Rpb24gcWQoKXtyZXR1cm4hMX1cbmZ1bmN0aW9uIHJkKGEpe2Z1bmN0aW9uIGIoYixkLGUsZixnKXt0aGlzLl9yZWFjdE5hbWU9Yjt0aGlzLl90YXJnZXRJbnN0PWU7dGhpcy50eXBlPWQ7dGhpcy5uYXRpdmVFdmVudD1mO3RoaXMudGFyZ2V0PWc7dGhpcy5jdXJyZW50VGFyZ2V0PW51bGw7Zm9yKHZhciBjIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShjKSYmKGI9YVtjXSx0aGlzW2NdPWI/YihmKTpmW2NdKTt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD0obnVsbCE9Zi5kZWZhdWx0UHJldmVudGVkP2YuZGVmYXVsdFByZXZlbnRlZDohMT09PWYucmV0dXJuVmFsdWUpP3BkOnFkO3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9cWQ7cmV0dXJuIHRoaXN9bShiLnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIGE9dGhpcy5uYXRpdmVFdmVudDthJiYoYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6XCJ1bmtub3duXCIhPT10eXBlb2YgYS5yZXR1cm5WYWx1ZSYmXG4oYS5yZXR1cm5WYWx1ZT0hMSksdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9cGQpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm5hdGl2ZUV2ZW50O2EmJihhLnN0b3BQcm9wYWdhdGlvbj9hLnN0b3BQcm9wYWdhdGlvbigpOlwidW5rbm93blwiIT09dHlwZW9mIGEuY2FuY2VsQnViYmxlJiYoYS5jYW5jZWxCdWJibGU9ITApLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9cGQpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7fSxpc1BlcnNpc3RlbnQ6cGR9KTtyZXR1cm4gYn1cbnZhciBzZD17ZXZlbnRQaGFzZTowLGJ1YmJsZXM6MCxjYW5jZWxhYmxlOjAsdGltZVN0YW1wOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0sZGVmYXVsdFByZXZlbnRlZDowLGlzVHJ1c3RlZDowfSx0ZD1yZChzZCksdWQ9bSh7fSxzZCx7dmlldzowLGRldGFpbDowfSksdmQ9cmQodWQpLHdkLHhkLHlkLEFkPW0oe30sdWQse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6emQsYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWEucmVsYXRlZFRhcmdldD9hLmZyb21FbGVtZW50PT09YS5zcmNFbGVtZW50P2EudG9FbGVtZW50OmEuZnJvbUVsZW1lbnQ6YS5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24oYSl7aWYoXCJtb3ZlbWVudFhcImluXG5hKXJldHVybiBhLm1vdmVtZW50WDthIT09eWQmJih5ZCYmXCJtb3VzZW1vdmVcIj09PWEudHlwZT8od2Q9YS5zY3JlZW5YLXlkLnNjcmVlblgseGQ9YS5zY3JlZW5ZLXlkLnNjcmVlblkpOnhkPXdkPTAseWQ9YSk7cmV0dXJuIHdkfSxtb3ZlbWVudFk6ZnVuY3Rpb24oYSl7cmV0dXJuXCJtb3ZlbWVudFlcImluIGE/YS5tb3ZlbWVudFk6eGR9fSksQmQ9cmQoQWQpLENkPW0oe30sQWQse2RhdGFUcmFuc2ZlcjowfSksRGQ9cmQoQ2QpLEVkPW0oe30sdWQse3JlbGF0ZWRUYXJnZXQ6MH0pLEZkPXJkKEVkKSxHZD1tKHt9LHNkLHthbmltYXRpb25OYW1lOjAsZWxhcHNlZFRpbWU6MCxwc2V1ZG9FbGVtZW50OjB9KSxIZD1yZChHZCksSWQ9bSh7fSxzZCx7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihhKXtyZXR1cm5cImNsaXBib2FyZERhdGFcImluIGE/YS5jbGlwYm9hcmREYXRhOndpbmRvdy5jbGlwYm9hcmREYXRhfX0pLEpkPXJkKElkKSxLZD1tKHt9LHNkLHtkYXRhOjB9KSxMZD1yZChLZCksTWQ9e0VzYzpcIkVzY2FwZVwiLFxuU3BhY2ViYXI6XCIgXCIsTGVmdDpcIkFycm93TGVmdFwiLFVwOlwiQXJyb3dVcFwiLFJpZ2h0OlwiQXJyb3dSaWdodFwiLERvd246XCJBcnJvd0Rvd25cIixEZWw6XCJEZWxldGVcIixXaW46XCJPU1wiLE1lbnU6XCJDb250ZXh0TWVudVwiLEFwcHM6XCJDb250ZXh0TWVudVwiLFNjcm9sbDpcIlNjcm9sbExvY2tcIixNb3pQcmludGFibGVLZXk6XCJVbmlkZW50aWZpZWRcIn0sTmQ9ezg6XCJCYWNrc3BhY2VcIiw5OlwiVGFiXCIsMTI6XCJDbGVhclwiLDEzOlwiRW50ZXJcIiwxNjpcIlNoaWZ0XCIsMTc6XCJDb250cm9sXCIsMTg6XCJBbHRcIiwxOTpcIlBhdXNlXCIsMjA6XCJDYXBzTG9ja1wiLDI3OlwiRXNjYXBlXCIsMzI6XCIgXCIsMzM6XCJQYWdlVXBcIiwzNDpcIlBhZ2VEb3duXCIsMzU6XCJFbmRcIiwzNjpcIkhvbWVcIiwzNzpcIkFycm93TGVmdFwiLDM4OlwiQXJyb3dVcFwiLDM5OlwiQXJyb3dSaWdodFwiLDQwOlwiQXJyb3dEb3duXCIsNDU6XCJJbnNlcnRcIiw0NjpcIkRlbGV0ZVwiLDExMjpcIkYxXCIsMTEzOlwiRjJcIiwxMTQ6XCJGM1wiLDExNTpcIkY0XCIsMTE2OlwiRjVcIiwxMTc6XCJGNlwiLDExODpcIkY3XCIsXG4xMTk6XCJGOFwiLDEyMDpcIkY5XCIsMTIxOlwiRjEwXCIsMTIyOlwiRjExXCIsMTIzOlwiRjEyXCIsMTQ0OlwiTnVtTG9ja1wiLDE0NTpcIlNjcm9sbExvY2tcIiwyMjQ6XCJNZXRhXCJ9LE9kPXtBbHQ6XCJhbHRLZXlcIixDb250cm9sOlwiY3RybEtleVwiLE1ldGE6XCJtZXRhS2V5XCIsU2hpZnQ6XCJzaGlmdEtleVwifTtmdW5jdGlvbiBQZChhKXt2YXIgYj10aGlzLm5hdGl2ZUV2ZW50O3JldHVybiBiLmdldE1vZGlmaWVyU3RhdGU/Yi5nZXRNb2RpZmllclN0YXRlKGEpOihhPU9kW2FdKT8hIWJbYV06ITF9ZnVuY3Rpb24gemQoKXtyZXR1cm4gUGR9XG52YXIgUWQ9bSh7fSx1ZCx7a2V5OmZ1bmN0aW9uKGEpe2lmKGEua2V5KXt2YXIgYj1NZFthLmtleV18fGEua2V5O2lmKFwiVW5pZGVudGlmaWVkXCIhPT1iKXJldHVybiBifXJldHVyblwia2V5cHJlc3NcIj09PWEudHlwZT8oYT1vZChhKSwxMz09PWE/XCJFbnRlclwiOlN0cmluZy5mcm9tQ2hhckNvZGUoYSkpOlwia2V5ZG93blwiPT09YS50eXBlfHxcImtleXVwXCI9PT1hLnR5cGU/TmRbYS5rZXlDb2RlXXx8XCJVbmlkZW50aWZpZWRcIjpcIlwifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTp6ZCxjaGFyQ29kZTpmdW5jdGlvbihhKXtyZXR1cm5cImtleXByZXNzXCI9PT1hLnR5cGU/b2QoYSk6MH0sa2V5Q29kZTpmdW5jdGlvbihhKXtyZXR1cm5cImtleWRvd25cIj09PWEudHlwZXx8XCJrZXl1cFwiPT09YS50eXBlP2Eua2V5Q29kZTowfSx3aGljaDpmdW5jdGlvbihhKXtyZXR1cm5cImtleXByZXNzXCI9PT1cbmEudHlwZT9vZChhKTpcImtleWRvd25cIj09PWEudHlwZXx8XCJrZXl1cFwiPT09YS50eXBlP2Eua2V5Q29kZTowfX0pLFJkPXJkKFFkKSxTZD1tKHt9LEFkLHtwb2ludGVySWQ6MCx3aWR0aDowLGhlaWdodDowLHByZXNzdXJlOjAsdGFuZ2VudGlhbFByZXNzdXJlOjAsdGlsdFg6MCx0aWx0WTowLHR3aXN0OjAscG9pbnRlclR5cGU6MCxpc1ByaW1hcnk6MH0pLFRkPXJkKFNkKSxVZD1tKHt9LHVkLHt0b3VjaGVzOjAsdGFyZ2V0VG91Y2hlczowLGNoYW5nZWRUb3VjaGVzOjAsYWx0S2V5OjAsbWV0YUtleTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGdldE1vZGlmaWVyU3RhdGU6emR9KSxWZD1yZChVZCksV2Q9bSh7fSxzZCx7cHJvcGVydHlOYW1lOjAsZWxhcHNlZFRpbWU6MCxwc2V1ZG9FbGVtZW50OjB9KSxYZD1yZChXZCksWWQ9bSh7fSxBZCx7ZGVsdGFYOmZ1bmN0aW9uKGEpe3JldHVyblwiZGVsdGFYXCJpbiBhP2EuZGVsdGFYOlwid2hlZWxEZWx0YVhcImluIGE/LWEud2hlZWxEZWx0YVg6MH0sXG5kZWx0YVk6ZnVuY3Rpb24oYSl7cmV0dXJuXCJkZWx0YVlcImluIGE/YS5kZWx0YVk6XCJ3aGVlbERlbHRhWVwiaW4gYT8tYS53aGVlbERlbHRhWTpcIndoZWVsRGVsdGFcImluIGE/LWEud2hlZWxEZWx0YTowfSxkZWx0YVo6MCxkZWx0YU1vZGU6MH0pLFpkPXJkKFlkKSwkZD1bOSwxMywyNywzMl0sYWU9ZmEmJlwiQ29tcG9zaXRpb25FdmVudFwiaW4gd2luZG93LGJlPW51bGw7ZmEmJlwiZG9jdW1lbnRNb2RlXCJpbiBkb2N1bWVudCYmKGJlPWRvY3VtZW50LmRvY3VtZW50TW9kZSk7dmFyIGNlPWZhJiZcIlRleHRFdmVudFwiaW4gd2luZG93JiYhYmUsZGU9ZmEmJighYWV8fGJlJiY4PGJlJiYxMT49YmUpLGVlPVN0cmluZy5mcm9tQ2hhckNvZGUoMzIpLGZlPSExO1xuZnVuY3Rpb24gZ2UoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImtleXVwXCI6cmV0dXJuLTEhPT0kZC5pbmRleE9mKGIua2V5Q29kZSk7Y2FzZSBcImtleWRvd25cIjpyZXR1cm4gMjI5IT09Yi5rZXlDb2RlO2Nhc2UgXCJrZXlwcmVzc1wiOmNhc2UgXCJtb3VzZWRvd25cIjpjYXNlIFwiZm9jdXNvdXRcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBoZShhKXthPWEuZGV0YWlsO3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmXCJkYXRhXCJpbiBhP2EuZGF0YTpudWxsfXZhciBpZT0hMTtmdW5jdGlvbiBqZShhLGIpe3N3aXRjaChhKXtjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpyZXR1cm4gaGUoYik7Y2FzZSBcImtleXByZXNzXCI6aWYoMzIhPT1iLndoaWNoKXJldHVybiBudWxsO2ZlPSEwO3JldHVybiBlZTtjYXNlIFwidGV4dElucHV0XCI6cmV0dXJuIGE9Yi5kYXRhLGE9PT1lZSYmZmU/bnVsbDphO2RlZmF1bHQ6cmV0dXJuIG51bGx9fVxuZnVuY3Rpb24ga2UoYSxiKXtpZihpZSlyZXR1cm5cImNvbXBvc2l0aW9uZW5kXCI9PT1hfHwhYWUmJmdlKGEsYik/KGE9bmQoKSxtZD1sZD1rZD1udWxsLGllPSExLGEpOm51bGw7c3dpdGNoKGEpe2Nhc2UgXCJwYXN0ZVwiOnJldHVybiBudWxsO2Nhc2UgXCJrZXlwcmVzc1wiOmlmKCEoYi5jdHJsS2V5fHxiLmFsdEtleXx8Yi5tZXRhS2V5KXx8Yi5jdHJsS2V5JiZiLmFsdEtleSl7aWYoYi5jaGFyJiYxPGIuY2hhci5sZW5ndGgpcmV0dXJuIGIuY2hhcjtpZihiLndoaWNoKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGIud2hpY2gpfXJldHVybiBudWxsO2Nhc2UgXCJjb21wb3NpdGlvbmVuZFwiOnJldHVybiBkZSYmXCJrb1wiIT09Yi5sb2NhbGU/bnVsbDpiLmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19XG52YXIgbGU9e2NvbG9yOiEwLGRhdGU6ITAsZGF0ZXRpbWU6ITAsXCJkYXRldGltZS1sb2NhbFwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH07ZnVuY3Rpb24gbWUoYSl7dmFyIGI9YSYmYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVyblwiaW5wdXRcIj09PWI/ISFsZVthLnR5cGVdOlwidGV4dGFyZWFcIj09PWI/ITA6ITF9ZnVuY3Rpb24gbmUoYSxiLGMsZCl7RWIoZCk7Yj1vZShiLFwib25DaGFuZ2VcIik7MDxiLmxlbmd0aCYmKGM9bmV3IHRkKFwib25DaGFuZ2VcIixcImNoYW5nZVwiLG51bGwsYyxkKSxhLnB1c2goe2V2ZW50OmMsbGlzdGVuZXJzOmJ9KSl9dmFyIHBlPW51bGwscWU9bnVsbDtmdW5jdGlvbiByZShhKXtzZShhLDApfWZ1bmN0aW9uIHRlKGEpe3ZhciBiPXVlKGEpO2lmKFdhKGIpKXJldHVybiBhfVxuZnVuY3Rpb24gdmUoYSxiKXtpZihcImNoYW5nZVwiPT09YSlyZXR1cm4gYn12YXIgd2U9ITE7aWYoZmEpe3ZhciB4ZTtpZihmYSl7dmFyIHllPVwib25pbnB1dFwiaW4gZG9jdW1lbnQ7aWYoIXllKXt2YXIgemU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt6ZS5zZXRBdHRyaWJ1dGUoXCJvbmlucHV0XCIsXCJyZXR1cm47XCIpO3llPVwiZnVuY3Rpb25cIj09PXR5cGVvZiB6ZS5vbmlucHV0fXhlPXllfWVsc2UgeGU9ITE7d2U9eGUmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PGRvY3VtZW50LmRvY3VtZW50TW9kZSl9ZnVuY3Rpb24gQWUoKXtwZSYmKHBlLmRldGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLEJlKSxxZT1wZT1udWxsKX1mdW5jdGlvbiBCZShhKXtpZihcInZhbHVlXCI9PT1hLnByb3BlcnR5TmFtZSYmdGUocWUpKXt2YXIgYj1bXTtuZShiLHFlLGEseGIoYSkpO2E9cmU7aWYoS2IpYShiKTtlbHNle0tiPSEwO3RyeXtHYihhLGIpfWZpbmFsbHl7S2I9ITEsTWIoKX19fX1cbmZ1bmN0aW9uIENlKGEsYixjKXtcImZvY3VzaW5cIj09PWE/KEFlKCkscGU9YixxZT1jLHBlLmF0dGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLEJlKSk6XCJmb2N1c291dFwiPT09YSYmQWUoKX1mdW5jdGlvbiBEZShhKXtpZihcInNlbGVjdGlvbmNoYW5nZVwiPT09YXx8XCJrZXl1cFwiPT09YXx8XCJrZXlkb3duXCI9PT1hKXJldHVybiB0ZShxZSl9ZnVuY3Rpb24gRWUoYSxiKXtpZihcImNsaWNrXCI9PT1hKXJldHVybiB0ZShiKX1mdW5jdGlvbiBGZShhLGIpe2lmKFwiaW5wdXRcIj09PWF8fFwiY2hhbmdlXCI9PT1hKXJldHVybiB0ZShiKX1mdW5jdGlvbiBHZShhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIEhlPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOkdlLEllPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBKZShhLGIpe2lmKEhlKGEsYikpcmV0dXJuITA7aWYoXCJvYmplY3RcIiE9PXR5cGVvZiBhfHxudWxsPT09YXx8XCJvYmplY3RcIiE9PXR5cGVvZiBifHxudWxsPT09YilyZXR1cm4hMTt2YXIgYz1PYmplY3Qua2V5cyhhKSxkPU9iamVjdC5rZXlzKGIpO2lmKGMubGVuZ3RoIT09ZC5sZW5ndGgpcmV0dXJuITE7Zm9yKGQ9MDtkPGMubGVuZ3RoO2QrKylpZighSWUuY2FsbChiLGNbZF0pfHwhSGUoYVtjW2RdXSxiW2NbZF1dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBLZShhKXtmb3IoO2EmJmEuZmlyc3RDaGlsZDspYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9XG5mdW5jdGlvbiBMZShhLGIpe3ZhciBjPUtlKGEpO2E9MDtmb3IodmFyIGQ7Yzspe2lmKDM9PT1jLm5vZGVUeXBlKXtkPWErYy50ZXh0Q29udGVudC5sZW5ndGg7aWYoYTw9YiYmZD49YilyZXR1cm57bm9kZTpjLG9mZnNldDpiLWF9O2E9ZH1hOntmb3IoO2M7KXtpZihjLm5leHRTaWJsaW5nKXtjPWMubmV4dFNpYmxpbmc7YnJlYWsgYX1jPWMucGFyZW50Tm9kZX1jPXZvaWQgMH1jPUtlKGMpfX1mdW5jdGlvbiBNZShhLGIpe3JldHVybiBhJiZiP2E9PT1iPyEwOmEmJjM9PT1hLm5vZGVUeXBlPyExOmImJjM9PT1iLm5vZGVUeXBlP01lKGEsYi5wYXJlbnROb2RlKTpcImNvbnRhaW5zXCJpbiBhP2EuY29udGFpbnMoYik6YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8hIShhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpJjE2KTohMTohMX1cbmZ1bmN0aW9uIE5lKCl7Zm9yKHZhciBhPXdpbmRvdyxiPVhhKCk7YiBpbnN0YW5jZW9mIGEuSFRNTElGcmFtZUVsZW1lbnQ7KXt0cnl7dmFyIGM9XCJzdHJpbmdcIj09PXR5cGVvZiBiLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZn1jYXRjaChkKXtjPSExfWlmKGMpYT1iLmNvbnRlbnRXaW5kb3c7ZWxzZSBicmVhaztiPVhhKGEuZG9jdW1lbnQpfXJldHVybiBifWZ1bmN0aW9uIE9lKGEpe3ZhciBiPWEmJmEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYiYmKFwiaW5wdXRcIj09PWImJihcInRleHRcIj09PWEudHlwZXx8XCJzZWFyY2hcIj09PWEudHlwZXx8XCJ0ZWxcIj09PWEudHlwZXx8XCJ1cmxcIj09PWEudHlwZXx8XCJwYXNzd29yZFwiPT09YS50eXBlKXx8XCJ0ZXh0YXJlYVwiPT09Ynx8XCJ0cnVlXCI9PT1hLmNvbnRlbnRFZGl0YWJsZSl9XG52YXIgUGU9ZmEmJlwiZG9jdW1lbnRNb2RlXCJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxRZT1udWxsLFJlPW51bGwsU2U9bnVsbCxUZT0hMTtcbmZ1bmN0aW9uIFVlKGEsYixjKXt2YXIgZD1jLndpbmRvdz09PWM/Yy5kb2N1bWVudDo5PT09Yy5ub2RlVHlwZT9jOmMub3duZXJEb2N1bWVudDtUZXx8bnVsbD09UWV8fFFlIT09WGEoZCl8fChkPVFlLFwic2VsZWN0aW9uU3RhcnRcImluIGQmJk9lKGQpP2Q9e3N0YXJ0OmQuc2VsZWN0aW9uU3RhcnQsZW5kOmQuc2VsZWN0aW9uRW5kfTooZD0oZC5vd25lckRvY3VtZW50JiZkLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZ2V0U2VsZWN0aW9uKCksZD17YW5jaG9yTm9kZTpkLmFuY2hvck5vZGUsYW5jaG9yT2Zmc2V0OmQuYW5jaG9yT2Zmc2V0LGZvY3VzTm9kZTpkLmZvY3VzTm9kZSxmb2N1c09mZnNldDpkLmZvY3VzT2Zmc2V0fSksU2UmJkplKFNlLGQpfHwoU2U9ZCxkPW9lKFJlLFwib25TZWxlY3RcIiksMDxkLmxlbmd0aCYmKGI9bmV3IHRkKFwib25TZWxlY3RcIixcInNlbGVjdFwiLG51bGwsYixjKSxhLnB1c2goe2V2ZW50OmIsbGlzdGVuZXJzOmR9KSxiLnRhcmdldD1RZSkpKX1cblBjKFwiY2FuY2VsIGNhbmNlbCBjbGljayBjbGljayBjbG9zZSBjbG9zZSBjb250ZXh0bWVudSBjb250ZXh0TWVudSBjb3B5IGNvcHkgY3V0IGN1dCBhdXhjbGljayBhdXhDbGljayBkYmxjbGljayBkb3VibGVDbGljayBkcmFnZW5kIGRyYWdFbmQgZHJhZ3N0YXJ0IGRyYWdTdGFydCBkcm9wIGRyb3AgZm9jdXNpbiBmb2N1cyBmb2N1c291dCBibHVyIGlucHV0IGlucHV0IGludmFsaWQgaW52YWxpZCBrZXlkb3duIGtleURvd24ga2V5cHJlc3Mga2V5UHJlc3Mga2V5dXAga2V5VXAgbW91c2Vkb3duIG1vdXNlRG93biBtb3VzZXVwIG1vdXNlVXAgcGFzdGUgcGFzdGUgcGF1c2UgcGF1c2UgcGxheSBwbGF5IHBvaW50ZXJjYW5jZWwgcG9pbnRlckNhbmNlbCBwb2ludGVyZG93biBwb2ludGVyRG93biBwb2ludGVydXAgcG9pbnRlclVwIHJhdGVjaGFuZ2UgcmF0ZUNoYW5nZSByZXNldCByZXNldCBzZWVrZWQgc2Vla2VkIHN1Ym1pdCBzdWJtaXQgdG91Y2hjYW5jZWwgdG91Y2hDYW5jZWwgdG91Y2hlbmQgdG91Y2hFbmQgdG91Y2hzdGFydCB0b3VjaFN0YXJ0IHZvbHVtZWNoYW5nZSB2b2x1bWVDaGFuZ2VcIi5zcGxpdChcIiBcIiksXG4wKTtQYyhcImRyYWcgZHJhZyBkcmFnZW50ZXIgZHJhZ0VudGVyIGRyYWdleGl0IGRyYWdFeGl0IGRyYWdsZWF2ZSBkcmFnTGVhdmUgZHJhZ292ZXIgZHJhZ092ZXIgbW91c2Vtb3ZlIG1vdXNlTW92ZSBtb3VzZW91dCBtb3VzZU91dCBtb3VzZW92ZXIgbW91c2VPdmVyIHBvaW50ZXJtb3ZlIHBvaW50ZXJNb3ZlIHBvaW50ZXJvdXQgcG9pbnRlck91dCBwb2ludGVyb3ZlciBwb2ludGVyT3ZlciBzY3JvbGwgc2Nyb2xsIHRvZ2dsZSB0b2dnbGUgdG91Y2htb3ZlIHRvdWNoTW92ZSB3aGVlbCB3aGVlbFwiLnNwbGl0KFwiIFwiKSwxKTtQYyhPYywyKTtmb3IodmFyIFZlPVwiY2hhbmdlIHNlbGVjdGlvbmNoYW5nZSB0ZXh0SW5wdXQgY29tcG9zaXRpb25zdGFydCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnVwZGF0ZVwiLnNwbGl0KFwiIFwiKSxXZT0wO1dlPFZlLmxlbmd0aDtXZSsrKU5jLnNldChWZVtXZV0sMCk7ZWEoXCJvbk1vdXNlRW50ZXJcIixbXCJtb3VzZW91dFwiLFwibW91c2VvdmVyXCJdKTtcbmVhKFwib25Nb3VzZUxlYXZlXCIsW1wibW91c2VvdXRcIixcIm1vdXNlb3ZlclwiXSk7ZWEoXCJvblBvaW50ZXJFbnRlclwiLFtcInBvaW50ZXJvdXRcIixcInBvaW50ZXJvdmVyXCJdKTtlYShcIm9uUG9pbnRlckxlYXZlXCIsW1wicG9pbnRlcm91dFwiLFwicG9pbnRlcm92ZXJcIl0pO2RhKFwib25DaGFuZ2VcIixcImNoYW5nZSBjbGljayBmb2N1c2luIGZvY3Vzb3V0IGlucHV0IGtleWRvd24ga2V5dXAgc2VsZWN0aW9uY2hhbmdlXCIuc3BsaXQoXCIgXCIpKTtkYShcIm9uU2VsZWN0XCIsXCJmb2N1c291dCBjb250ZXh0bWVudSBkcmFnZW5kIGZvY3VzaW4ga2V5ZG93biBrZXl1cCBtb3VzZWRvd24gbW91c2V1cCBzZWxlY3Rpb25jaGFuZ2VcIi5zcGxpdChcIiBcIikpO2RhKFwib25CZWZvcmVJbnB1dFwiLFtcImNvbXBvc2l0aW9uZW5kXCIsXCJrZXlwcmVzc1wiLFwidGV4dElucHV0XCIsXCJwYXN0ZVwiXSk7ZGEoXCJvbkNvbXBvc2l0aW9uRW5kXCIsXCJjb21wb3NpdGlvbmVuZCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKSk7XG5kYShcIm9uQ29tcG9zaXRpb25TdGFydFwiLFwiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKSk7ZGEoXCJvbkNvbXBvc2l0aW9uVXBkYXRlXCIsXCJjb21wb3NpdGlvbnVwZGF0ZSBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKSk7dmFyIFhlPVwiYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1c3BlbmQgdGltZXVwZGF0ZSB2b2x1bWVjaGFuZ2Ugd2FpdGluZ1wiLnNwbGl0KFwiIFwiKSxZZT1uZXcgU2V0KFwiY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgdG9nZ2xlXCIuc3BsaXQoXCIgXCIpLmNvbmNhdChYZSkpO1xuZnVuY3Rpb24gWmUoYSxiLGMpe3ZhciBkPWEudHlwZXx8XCJ1bmtub3duLWV2ZW50XCI7YS5jdXJyZW50VGFyZ2V0PWM7WWIoZCxiLHZvaWQgMCxhKTthLmN1cnJlbnRUYXJnZXQ9bnVsbH1cbmZ1bmN0aW9uIHNlKGEsYil7Yj0wIT09KGImNCk7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWFbY10sZT1kLmV2ZW50O2Q9ZC5saXN0ZW5lcnM7YTp7dmFyIGY9dm9pZCAwO2lmKGIpZm9yKHZhciBnPWQubGVuZ3RoLTE7MDw9ZztnLS0pe3ZhciBoPWRbZ10saz1oLmluc3RhbmNlLGw9aC5jdXJyZW50VGFyZ2V0O2g9aC5saXN0ZW5lcjtpZihrIT09ZiYmZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGE7WmUoZSxoLGwpO2Y9a31lbHNlIGZvcihnPTA7ZzxkLmxlbmd0aDtnKyspe2g9ZFtnXTtrPWguaW5zdGFuY2U7bD1oLmN1cnJlbnRUYXJnZXQ7aD1oLmxpc3RlbmVyO2lmKGshPT1mJiZlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgYTtaZShlLGgsbCk7Zj1rfX19aWYoVWIpdGhyb3cgYT1WYixVYj0hMSxWYj1udWxsLGE7fVxuZnVuY3Rpb24gRyhhLGIpe3ZhciBjPSRlKGIpLGQ9YStcIl9fYnViYmxlXCI7Yy5oYXMoZCl8fChhZihiLGEsMiwhMSksYy5hZGQoZCkpfXZhciBiZj1cIl9yZWFjdExpc3RlbmluZ1wiK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO2Z1bmN0aW9uIGNmKGEpe2FbYmZdfHwoYVtiZl09ITAsYmEuZm9yRWFjaChmdW5jdGlvbihiKXtZZS5oYXMoYil8fGRmKGIsITEsYSxudWxsKTtkZihiLCEwLGEsbnVsbCl9KSl9XG5mdW5jdGlvbiBkZihhLGIsYyxkKXt2YXIgZT00PGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06MCxmPWM7XCJzZWxlY3Rpb25jaGFuZ2VcIj09PWEmJjkhPT1jLm5vZGVUeXBlJiYoZj1jLm93bmVyRG9jdW1lbnQpO2lmKG51bGwhPT1kJiYhYiYmWWUuaGFzKGEpKXtpZihcInNjcm9sbFwiIT09YSlyZXR1cm47ZXw9MjtmPWR9dmFyIGc9JGUoZiksaD1hK1wiX19cIisoYj9cImNhcHR1cmVcIjpcImJ1YmJsZVwiKTtnLmhhcyhoKXx8KGImJihlfD00KSxhZihmLGEsZSxiKSxnLmFkZChoKSl9XG5mdW5jdGlvbiBhZihhLGIsYyxkKXt2YXIgZT1OYy5nZXQoYik7c3dpdGNoKHZvaWQgMD09PWU/MjplKXtjYXNlIDA6ZT1nZDticmVhaztjYXNlIDE6ZT1pZDticmVhaztkZWZhdWx0OmU9aGR9Yz1lLmJpbmQobnVsbCxiLGMsYSk7ZT12b2lkIDA7IVBifHxcInRvdWNoc3RhcnRcIiE9PWImJlwidG91Y2htb3ZlXCIhPT1iJiZcIndoZWVsXCIhPT1ifHwoZT0hMCk7ZD92b2lkIDAhPT1lP2EuYWRkRXZlbnRMaXN0ZW5lcihiLGMse2NhcHR1cmU6ITAscGFzc2l2ZTplfSk6YS5hZGRFdmVudExpc3RlbmVyKGIsYywhMCk6dm9pZCAwIT09ZT9hLmFkZEV2ZW50TGlzdGVuZXIoYixjLHtwYXNzaXZlOmV9KTphLmFkZEV2ZW50TGlzdGVuZXIoYixjLCExKX1cbmZ1bmN0aW9uIGpkKGEsYixjLGQsZSl7dmFyIGY9ZDtpZigwPT09KGImMSkmJjA9PT0oYiYyKSYmbnVsbCE9PWQpYTpmb3IoOzspe2lmKG51bGw9PT1kKXJldHVybjt2YXIgZz1kLnRhZztpZigzPT09Z3x8ND09PWcpe3ZhciBoPWQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87aWYoaD09PWV8fDg9PT1oLm5vZGVUeXBlJiZoLnBhcmVudE5vZGU9PT1lKWJyZWFrO2lmKDQ9PT1nKWZvcihnPWQucmV0dXJuO251bGwhPT1nOyl7dmFyIGs9Zy50YWc7aWYoMz09PWt8fDQ9PT1rKWlmKGs9Zy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxrPT09ZXx8OD09PWsubm9kZVR5cGUmJmsucGFyZW50Tm9kZT09PWUpcmV0dXJuO2c9Zy5yZXR1cm59Zm9yKDtudWxsIT09aDspe2c9d2MoaCk7aWYobnVsbD09PWcpcmV0dXJuO2s9Zy50YWc7aWYoNT09PWt8fDY9PT1rKXtkPWY9Zztjb250aW51ZSBhfWg9aC5wYXJlbnROb2RlfX1kPWQucmV0dXJufU5iKGZ1bmN0aW9uKCl7dmFyIGQ9ZixlPXhiKGMpLGc9W107XG5hOnt2YXIgaD1NYy5nZXQoYSk7aWYodm9pZCAwIT09aCl7dmFyIGs9dGQseD1hO3N3aXRjaChhKXtjYXNlIFwia2V5cHJlc3NcIjppZigwPT09b2QoYykpYnJlYWsgYTtjYXNlIFwia2V5ZG93blwiOmNhc2UgXCJrZXl1cFwiOms9UmQ7YnJlYWs7Y2FzZSBcImZvY3VzaW5cIjp4PVwiZm9jdXNcIjtrPUZkO2JyZWFrO2Nhc2UgXCJmb2N1c291dFwiOng9XCJibHVyXCI7az1GZDticmVhaztjYXNlIFwiYmVmb3JlYmx1clwiOmNhc2UgXCJhZnRlcmJsdXJcIjprPUZkO2JyZWFrO2Nhc2UgXCJjbGlja1wiOmlmKDI9PT1jLmJ1dHRvbilicmVhayBhO2Nhc2UgXCJhdXhjbGlja1wiOmNhc2UgXCJkYmxjbGlja1wiOmNhc2UgXCJtb3VzZWRvd25cIjpjYXNlIFwibW91c2Vtb3ZlXCI6Y2FzZSBcIm1vdXNldXBcIjpjYXNlIFwibW91c2VvdXRcIjpjYXNlIFwibW91c2VvdmVyXCI6Y2FzZSBcImNvbnRleHRtZW51XCI6az1CZDticmVhaztjYXNlIFwiZHJhZ1wiOmNhc2UgXCJkcmFnZW5kXCI6Y2FzZSBcImRyYWdlbnRlclwiOmNhc2UgXCJkcmFnZXhpdFwiOmNhc2UgXCJkcmFnbGVhdmVcIjpjYXNlIFwiZHJhZ292ZXJcIjpjYXNlIFwiZHJhZ3N0YXJ0XCI6Y2FzZSBcImRyb3BcIjprPVxuRGQ7YnJlYWs7Y2FzZSBcInRvdWNoY2FuY2VsXCI6Y2FzZSBcInRvdWNoZW5kXCI6Y2FzZSBcInRvdWNobW92ZVwiOmNhc2UgXCJ0b3VjaHN0YXJ0XCI6az1WZDticmVhaztjYXNlIEljOmNhc2UgSmM6Y2FzZSBLYzprPUhkO2JyZWFrO2Nhc2UgTGM6az1YZDticmVhaztjYXNlIFwic2Nyb2xsXCI6az12ZDticmVhaztjYXNlIFwid2hlZWxcIjprPVpkO2JyZWFrO2Nhc2UgXCJjb3B5XCI6Y2FzZSBcImN1dFwiOmNhc2UgXCJwYXN0ZVwiOms9SmQ7YnJlYWs7Y2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6Y2FzZSBcImxvc3Rwb2ludGVyY2FwdHVyZVwiOmNhc2UgXCJwb2ludGVyY2FuY2VsXCI6Y2FzZSBcInBvaW50ZXJkb3duXCI6Y2FzZSBcInBvaW50ZXJtb3ZlXCI6Y2FzZSBcInBvaW50ZXJvdXRcIjpjYXNlIFwicG9pbnRlcm92ZXJcIjpjYXNlIFwicG9pbnRlcnVwXCI6az1UZH12YXIgdz0wIT09KGImNCksej0hdyYmXCJzY3JvbGxcIj09PWEsdT13P251bGwhPT1oP2grXCJDYXB0dXJlXCI6bnVsbDpoO3c9W107Zm9yKHZhciB0PWQscTtudWxsIT09XG50Oyl7cT10O3ZhciB2PXEuc3RhdGVOb2RlOzU9PT1xLnRhZyYmbnVsbCE9PXYmJihxPXYsbnVsbCE9PXUmJih2PU9iKHQsdSksbnVsbCE9diYmdy5wdXNoKGVmKHQsdixxKSkpKTtpZih6KWJyZWFrO3Q9dC5yZXR1cm59MDx3Lmxlbmd0aCYmKGg9bmV3IGsoaCx4LG51bGwsYyxlKSxnLnB1c2goe2V2ZW50OmgsbGlzdGVuZXJzOnd9KSl9fWlmKDA9PT0oYiY3KSl7YTp7aD1cIm1vdXNlb3ZlclwiPT09YXx8XCJwb2ludGVyb3ZlclwiPT09YTtrPVwibW91c2VvdXRcIj09PWF8fFwicG9pbnRlcm91dFwiPT09YTtpZihoJiYwPT09KGImMTYpJiYoeD1jLnJlbGF0ZWRUYXJnZXR8fGMuZnJvbUVsZW1lbnQpJiYod2MoeCl8fHhbZmZdKSlicmVhayBhO2lmKGt8fGgpe2g9ZS53aW5kb3c9PT1lP2U6KGg9ZS5vd25lckRvY3VtZW50KT9oLmRlZmF1bHRWaWV3fHxoLnBhcmVudFdpbmRvdzp3aW5kb3c7aWYoayl7aWYoeD1jLnJlbGF0ZWRUYXJnZXR8fGMudG9FbGVtZW50LGs9ZCx4PXg/d2MoeCk6bnVsbCxudWxsIT09XG54JiYoej1aYih4KSx4IT09enx8NSE9PXgudGFnJiY2IT09eC50YWcpKXg9bnVsbH1lbHNlIGs9bnVsbCx4PWQ7aWYoayE9PXgpe3c9QmQ7dj1cIm9uTW91c2VMZWF2ZVwiO3U9XCJvbk1vdXNlRW50ZXJcIjt0PVwibW91c2VcIjtpZihcInBvaW50ZXJvdXRcIj09PWF8fFwicG9pbnRlcm92ZXJcIj09PWEpdz1UZCx2PVwib25Qb2ludGVyTGVhdmVcIix1PVwib25Qb2ludGVyRW50ZXJcIix0PVwicG9pbnRlclwiO3o9bnVsbD09az9oOnVlKGspO3E9bnVsbD09eD9oOnVlKHgpO2g9bmV3IHcodix0K1wibGVhdmVcIixrLGMsZSk7aC50YXJnZXQ9ejtoLnJlbGF0ZWRUYXJnZXQ9cTt2PW51bGw7d2MoZSk9PT1kJiYodz1uZXcgdyh1LHQrXCJlbnRlclwiLHgsYyxlKSx3LnRhcmdldD1xLHcucmVsYXRlZFRhcmdldD16LHY9dyk7ej12O2lmKGsmJngpYjp7dz1rO3U9eDt0PTA7Zm9yKHE9dztxO3E9Z2YocSkpdCsrO3E9MDtmb3Iodj11O3Y7dj1nZih2KSlxKys7Zm9yKDswPHQtcTspdz1nZih3KSx0LS07Zm9yKDswPHEtdDspdT1cbmdmKHUpLHEtLTtmb3IoO3QtLTspe2lmKHc9PT11fHxudWxsIT09dSYmdz09PXUuYWx0ZXJuYXRlKWJyZWFrIGI7dz1nZih3KTt1PWdmKHUpfXc9bnVsbH1lbHNlIHc9bnVsbDtudWxsIT09ayYmaGYoZyxoLGssdywhMSk7bnVsbCE9PXgmJm51bGwhPT16JiZoZihnLHoseCx3LCEwKX19fWE6e2g9ZD91ZShkKTp3aW5kb3c7az1oLm5vZGVOYW1lJiZoLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoXCJzZWxlY3RcIj09PWt8fFwiaW5wdXRcIj09PWsmJlwiZmlsZVwiPT09aC50eXBlKXZhciBKPXZlO2Vsc2UgaWYobWUoaCkpaWYod2UpSj1GZTtlbHNle0o9RGU7dmFyIEs9Q2V9ZWxzZShrPWgubm9kZU5hbWUpJiZcImlucHV0XCI9PT1rLnRvTG93ZXJDYXNlKCkmJihcImNoZWNrYm94XCI9PT1oLnR5cGV8fFwicmFkaW9cIj09PWgudHlwZSkmJihKPUVlKTtpZihKJiYoSj1KKGEsZCkpKXtuZShnLEosYyxlKTticmVhayBhfUsmJksoYSxoLGQpO1wiZm9jdXNvdXRcIj09PWEmJihLPWguX3dyYXBwZXJTdGF0ZSkmJlxuSy5jb250cm9sbGVkJiZcIm51bWJlclwiPT09aC50eXBlJiZiYihoLFwibnVtYmVyXCIsaC52YWx1ZSl9Sz1kP3VlKGQpOndpbmRvdztzd2l0Y2goYSl7Y2FzZSBcImZvY3VzaW5cIjppZihtZShLKXx8XCJ0cnVlXCI9PT1LLmNvbnRlbnRFZGl0YWJsZSlRZT1LLFJlPWQsU2U9bnVsbDticmVhaztjYXNlIFwiZm9jdXNvdXRcIjpTZT1SZT1RZT1udWxsO2JyZWFrO2Nhc2UgXCJtb3VzZWRvd25cIjpUZT0hMDticmVhaztjYXNlIFwiY29udGV4dG1lbnVcIjpjYXNlIFwibW91c2V1cFwiOmNhc2UgXCJkcmFnZW5kXCI6VGU9ITE7VWUoZyxjLGUpO2JyZWFrO2Nhc2UgXCJzZWxlY3Rpb25jaGFuZ2VcIjppZihQZSlicmVhaztjYXNlIFwia2V5ZG93blwiOmNhc2UgXCJrZXl1cFwiOlVlKGcsYyxlKX12YXIgUTtpZihhZSliOntzd2l0Y2goYSl7Y2FzZSBcImNvbXBvc2l0aW9uc3RhcnRcIjp2YXIgTD1cIm9uQ29tcG9zaXRpb25TdGFydFwiO2JyZWFrIGI7Y2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6TD1cIm9uQ29tcG9zaXRpb25FbmRcIjticmVhayBiO1xuY2FzZSBcImNvbXBvc2l0aW9udXBkYXRlXCI6TD1cIm9uQ29tcG9zaXRpb25VcGRhdGVcIjticmVhayBifUw9dm9pZCAwfWVsc2UgaWU/Z2UoYSxjKSYmKEw9XCJvbkNvbXBvc2l0aW9uRW5kXCIpOlwia2V5ZG93blwiPT09YSYmMjI5PT09Yy5rZXlDb2RlJiYoTD1cIm9uQ29tcG9zaXRpb25TdGFydFwiKTtMJiYoZGUmJlwia29cIiE9PWMubG9jYWxlJiYoaWV8fFwib25Db21wb3NpdGlvblN0YXJ0XCIhPT1MP1wib25Db21wb3NpdGlvbkVuZFwiPT09TCYmaWUmJihRPW5kKCkpOihrZD1lLGxkPVwidmFsdWVcImluIGtkP2tkLnZhbHVlOmtkLnRleHRDb250ZW50LGllPSEwKSksSz1vZShkLEwpLDA8Sy5sZW5ndGgmJihMPW5ldyBMZChMLGEsbnVsbCxjLGUpLGcucHVzaCh7ZXZlbnQ6TCxsaXN0ZW5lcnM6S30pLFE/TC5kYXRhPVE6KFE9aGUoYyksbnVsbCE9PVEmJihMLmRhdGE9USkpKSk7aWYoUT1jZT9qZShhLGMpOmtlKGEsYykpZD1vZShkLFwib25CZWZvcmVJbnB1dFwiKSwwPGQubGVuZ3RoJiYoZT1uZXcgTGQoXCJvbkJlZm9yZUlucHV0XCIsXG5cImJlZm9yZWlucHV0XCIsbnVsbCxjLGUpLGcucHVzaCh7ZXZlbnQ6ZSxsaXN0ZW5lcnM6ZH0pLGUuZGF0YT1RKX1zZShnLGIpfSl9ZnVuY3Rpb24gZWYoYSxiLGMpe3JldHVybntpbnN0YW5jZTphLGxpc3RlbmVyOmIsY3VycmVudFRhcmdldDpjfX1mdW5jdGlvbiBvZShhLGIpe2Zvcih2YXIgYz1iK1wiQ2FwdHVyZVwiLGQ9W107bnVsbCE9PWE7KXt2YXIgZT1hLGY9ZS5zdGF0ZU5vZGU7NT09PWUudGFnJiZudWxsIT09ZiYmKGU9ZixmPU9iKGEsYyksbnVsbCE9ZiYmZC51bnNoaWZ0KGVmKGEsZixlKSksZj1PYihhLGIpLG51bGwhPWYmJmQucHVzaChlZihhLGYsZSkpKTthPWEucmV0dXJufXJldHVybiBkfWZ1bmN0aW9uIGdmKGEpe2lmKG51bGw9PT1hKXJldHVybiBudWxsO2RvIGE9YS5yZXR1cm47d2hpbGUoYSYmNSE9PWEudGFnKTtyZXR1cm4gYT9hOm51bGx9XG5mdW5jdGlvbiBoZihhLGIsYyxkLGUpe2Zvcih2YXIgZj1iLl9yZWFjdE5hbWUsZz1bXTtudWxsIT09YyYmYyE9PWQ7KXt2YXIgaD1jLGs9aC5hbHRlcm5hdGUsbD1oLnN0YXRlTm9kZTtpZihudWxsIT09ayYmaz09PWQpYnJlYWs7NT09PWgudGFnJiZudWxsIT09bCYmKGg9bCxlPyhrPU9iKGMsZiksbnVsbCE9ayYmZy51bnNoaWZ0KGVmKGMsayxoKSkpOmV8fChrPU9iKGMsZiksbnVsbCE9ayYmZy5wdXNoKGVmKGMsayxoKSkpKTtjPWMucmV0dXJufTAhPT1nLmxlbmd0aCYmYS5wdXNoKHtldmVudDpiLGxpc3RlbmVyczpnfSl9ZnVuY3Rpb24gamYoKXt9dmFyIGtmPW51bGwsbGY9bnVsbDtmdW5jdGlvbiBtZihhLGIpe3N3aXRjaChhKXtjYXNlIFwiYnV0dG9uXCI6Y2FzZSBcImlucHV0XCI6Y2FzZSBcInNlbGVjdFwiOmNhc2UgXCJ0ZXh0YXJlYVwiOnJldHVybiEhYi5hdXRvRm9jdXN9cmV0dXJuITF9XG5mdW5jdGlvbiBuZihhLGIpe3JldHVyblwidGV4dGFyZWFcIj09PWF8fFwib3B0aW9uXCI9PT1hfHxcIm5vc2NyaXB0XCI9PT1hfHxcInN0cmluZ1wiPT09dHlwZW9mIGIuY2hpbGRyZW58fFwibnVtYmVyXCI9PT10eXBlb2YgYi5jaGlsZHJlbnx8XCJvYmplY3RcIj09PXR5cGVvZiBiLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZudWxsIT09Yi5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9Yi5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWx9dmFyIG9mPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6dm9pZCAwLHBmPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OnZvaWQgMDtmdW5jdGlvbiBxZihhKXsxPT09YS5ub2RlVHlwZT9hLnRleHRDb250ZW50PVwiXCI6OT09PWEubm9kZVR5cGUmJihhPWEuYm9keSxudWxsIT1hJiYoYS50ZXh0Q29udGVudD1cIlwiKSl9XG5mdW5jdGlvbiByZihhKXtmb3IoO251bGwhPWE7YT1hLm5leHRTaWJsaW5nKXt2YXIgYj1hLm5vZGVUeXBlO2lmKDE9PT1ifHwzPT09YilicmVha31yZXR1cm4gYX1mdW5jdGlvbiBzZihhKXthPWEucHJldmlvdXNTaWJsaW5nO2Zvcih2YXIgYj0wO2E7KXtpZig4PT09YS5ub2RlVHlwZSl7dmFyIGM9YS5kYXRhO2lmKFwiJFwiPT09Y3x8XCIkIVwiPT09Y3x8XCIkP1wiPT09Yyl7aWYoMD09PWIpcmV0dXJuIGE7Yi0tfWVsc2VcIi8kXCI9PT1jJiZiKyt9YT1hLnByZXZpb3VzU2libGluZ31yZXR1cm4gbnVsbH12YXIgdGY9MDtmdW5jdGlvbiB1ZihhKXtyZXR1cm57JCR0eXBlb2Y6R2EsdG9TdHJpbmc6YSx2YWx1ZU9mOmF9fXZhciB2Zj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSx3Zj1cIl9fcmVhY3RGaWJlciRcIit2Zix4Zj1cIl9fcmVhY3RQcm9wcyRcIit2ZixmZj1cIl9fcmVhY3RDb250YWluZXIkXCIrdmYseWY9XCJfX3JlYWN0RXZlbnRzJFwiK3ZmO1xuZnVuY3Rpb24gd2MoYSl7dmFyIGI9YVt3Zl07aWYoYilyZXR1cm4gYjtmb3IodmFyIGM9YS5wYXJlbnROb2RlO2M7KXtpZihiPWNbZmZdfHxjW3dmXSl7Yz1iLmFsdGVybmF0ZTtpZihudWxsIT09Yi5jaGlsZHx8bnVsbCE9PWMmJm51bGwhPT1jLmNoaWxkKWZvcihhPXNmKGEpO251bGwhPT1hOyl7aWYoYz1hW3dmXSlyZXR1cm4gYzthPXNmKGEpfXJldHVybiBifWE9YztjPWEucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBDYihhKXthPWFbd2ZdfHxhW2ZmXTtyZXR1cm4hYXx8NSE9PWEudGFnJiY2IT09YS50YWcmJjEzIT09YS50YWcmJjMhPT1hLnRhZz9udWxsOmF9ZnVuY3Rpb24gdWUoYSl7aWYoNT09PWEudGFnfHw2PT09YS50YWcpcmV0dXJuIGEuc3RhdGVOb2RlO3Rocm93IEVycm9yKHkoMzMpKTt9ZnVuY3Rpb24gRGIoYSl7cmV0dXJuIGFbeGZdfHxudWxsfVxuZnVuY3Rpb24gJGUoYSl7dmFyIGI9YVt5Zl07dm9pZCAwPT09YiYmKGI9YVt5Zl09bmV3IFNldCk7cmV0dXJuIGJ9dmFyIHpmPVtdLEFmPS0xO2Z1bmN0aW9uIEJmKGEpe3JldHVybntjdXJyZW50OmF9fWZ1bmN0aW9uIEgoYSl7MD5BZnx8KGEuY3VycmVudD16ZltBZl0semZbQWZdPW51bGwsQWYtLSl9ZnVuY3Rpb24gSShhLGIpe0FmKys7emZbQWZdPWEuY3VycmVudDthLmN1cnJlbnQ9Yn12YXIgQ2Y9e30sTT1CZihDZiksTj1CZighMSksRGY9Q2Y7XG5mdW5jdGlvbiBFZihhLGIpe3ZhciBjPWEudHlwZS5jb250ZXh0VHlwZXM7aWYoIWMpcmV0dXJuIENmO3ZhciBkPWEuc3RhdGVOb2RlO2lmKGQmJmQuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD09PWIpcmV0dXJuIGQuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ7dmFyIGU9e30sZjtmb3IoZiBpbiBjKWVbZl09YltmXTtkJiYoYT1hLnN0YXRlTm9kZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9YixhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWUpO3JldHVybiBlfWZ1bmN0aW9uIEZmKGEpe2E9YS5jaGlsZENvbnRleHRUeXBlcztyZXR1cm4gbnVsbCE9PWEmJnZvaWQgMCE9PWF9ZnVuY3Rpb24gR2YoKXtIKE4pO0goTSl9ZnVuY3Rpb24gSGYoYSxiLGMpe2lmKE0uY3VycmVudCE9PUNmKXRocm93IEVycm9yKHkoMTY4KSk7SShNLGIpO0koTixjKX1cbmZ1bmN0aW9uIElmKGEsYixjKXt2YXIgZD1hLnN0YXRlTm9kZTthPWIuY2hpbGRDb250ZXh0VHlwZXM7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIGQuZ2V0Q2hpbGRDb250ZXh0KXJldHVybiBjO2Q9ZC5nZXRDaGlsZENvbnRleHQoKTtmb3IodmFyIGUgaW4gZClpZighKGUgaW4gYSkpdGhyb3cgRXJyb3IoeSgxMDgsUmEoYil8fFwiVW5rbm93blwiLGUpKTtyZXR1cm4gbSh7fSxjLGQpfWZ1bmN0aW9uIEpmKGEpe2E9KGE9YS5zdGF0ZU5vZGUpJiZhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0fHxDZjtEZj1NLmN1cnJlbnQ7SShNLGEpO0koTixOLmN1cnJlbnQpO3JldHVybiEwfWZ1bmN0aW9uIEtmKGEsYixjKXt2YXIgZD1hLnN0YXRlTm9kZTtpZighZCl0aHJvdyBFcnJvcih5KDE2OSkpO2M/KGE9SWYoYSxiLERmKSxkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0PWEsSChOKSxIKE0pLEkoTSxhKSk6SChOKTtJKE4sYyl9XG52YXIgTGY9bnVsbCxNZj1udWxsLE5mPXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5LE9mPXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxQZj1yLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLFFmPXIudW5zdGFibGVfc2hvdWxkWWllbGQsUmY9ci51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsU2Y9ci51bnN0YWJsZV9ub3csVGY9ci51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxVZj1yLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LFZmPXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksV2Y9ci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxYZj1yLnVuc3RhYmxlX0xvd1ByaW9yaXR5LFlmPXIudW5zdGFibGVfSWRsZVByaW9yaXR5LFpmPXt9LCRmPXZvaWQgMCE9PVJmP1JmOmZ1bmN0aW9uKCl7fSxhZz1udWxsLGJnPW51bGwsY2c9ITEsZGc9U2YoKSxPPTFFND5kZz9TZjpmdW5jdGlvbigpe3JldHVybiBTZigpLWRnfTtcbmZ1bmN0aW9uIGVnKCl7c3dpdGNoKFRmKCkpe2Nhc2UgVWY6cmV0dXJuIDk5O2Nhc2UgVmY6cmV0dXJuIDk4O2Nhc2UgV2Y6cmV0dXJuIDk3O2Nhc2UgWGY6cmV0dXJuIDk2O2Nhc2UgWWY6cmV0dXJuIDk1O2RlZmF1bHQ6dGhyb3cgRXJyb3IoeSgzMzIpKTt9fWZ1bmN0aW9uIGZnKGEpe3N3aXRjaChhKXtjYXNlIDk5OnJldHVybiBVZjtjYXNlIDk4OnJldHVybiBWZjtjYXNlIDk3OnJldHVybiBXZjtjYXNlIDk2OnJldHVybiBYZjtjYXNlIDk1OnJldHVybiBZZjtkZWZhdWx0OnRocm93IEVycm9yKHkoMzMyKSk7fX1mdW5jdGlvbiBnZyhhLGIpe2E9ZmcoYSk7cmV0dXJuIE5mKGEsYil9ZnVuY3Rpb24gaGcoYSxiLGMpe2E9ZmcoYSk7cmV0dXJuIE9mKGEsYixjKX1mdW5jdGlvbiBpZygpe2lmKG51bGwhPT1iZyl7dmFyIGE9Ymc7Ymc9bnVsbDtQZihhKX1qZygpfVxuZnVuY3Rpb24gamcoKXtpZighY2cmJm51bGwhPT1hZyl7Y2c9ITA7dmFyIGE9MDt0cnl7dmFyIGI9YWc7Z2coOTksZnVuY3Rpb24oKXtmb3IoO2E8Yi5sZW5ndGg7YSsrKXt2YXIgYz1iW2FdO2RvIGM9YyghMCk7d2hpbGUobnVsbCE9PWMpfX0pO2FnPW51bGx9Y2F0Y2goYyl7dGhyb3cgbnVsbCE9PWFnJiYoYWc9YWcuc2xpY2UoYSsxKSksT2YoVWYsaWcpLGM7fWZpbmFsbHl7Y2c9ITF9fX12YXIga2c9cmEuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7ZnVuY3Rpb24gbGcoYSxiKXtpZihhJiZhLmRlZmF1bHRQcm9wcyl7Yj1tKHt9LGIpO2E9YS5kZWZhdWx0UHJvcHM7Zm9yKHZhciBjIGluIGEpdm9pZCAwPT09YltjXSYmKGJbY109YVtjXSk7cmV0dXJuIGJ9cmV0dXJuIGJ9dmFyIG1nPUJmKG51bGwpLG5nPW51bGwsb2c9bnVsbCxwZz1udWxsO2Z1bmN0aW9uIHFnKCl7cGc9b2c9bmc9bnVsbH1cbmZ1bmN0aW9uIHJnKGEpe3ZhciBiPW1nLmN1cnJlbnQ7SChtZyk7YS50eXBlLl9jb250ZXh0Ll9jdXJyZW50VmFsdWU9Yn1mdW5jdGlvbiBzZyhhLGIpe2Zvcig7bnVsbCE9PWE7KXt2YXIgYz1hLmFsdGVybmF0ZTtpZigoYS5jaGlsZExhbmVzJmIpPT09YilpZihudWxsPT09Y3x8KGMuY2hpbGRMYW5lcyZiKT09PWIpYnJlYWs7ZWxzZSBjLmNoaWxkTGFuZXN8PWI7ZWxzZSBhLmNoaWxkTGFuZXN8PWIsbnVsbCE9PWMmJihjLmNoaWxkTGFuZXN8PWIpO2E9YS5yZXR1cm59fWZ1bmN0aW9uIHRnKGEsYil7bmc9YTtwZz1vZz1udWxsO2E9YS5kZXBlbmRlbmNpZXM7bnVsbCE9PWEmJm51bGwhPT1hLmZpcnN0Q29udGV4dCYmKDAhPT0oYS5sYW5lcyZiKSYmKHVnPSEwKSxhLmZpcnN0Q29udGV4dD1udWxsKX1cbmZ1bmN0aW9uIHZnKGEsYil7aWYocGchPT1hJiYhMSE9PWImJjAhPT1iKXtpZihcIm51bWJlclwiIT09dHlwZW9mIGJ8fDEwNzM3NDE4MjM9PT1iKXBnPWEsYj0xMDczNzQxODIzO2I9e2NvbnRleHQ6YSxvYnNlcnZlZEJpdHM6YixuZXh0Om51bGx9O2lmKG51bGw9PT1vZyl7aWYobnVsbD09PW5nKXRocm93IEVycm9yKHkoMzA4KSk7b2c9YjtuZy5kZXBlbmRlbmNpZXM9e2xhbmVzOjAsZmlyc3RDb250ZXh0OmIscmVzcG9uZGVyczpudWxsfX1lbHNlIG9nPW9nLm5leHQ9Yn1yZXR1cm4gYS5fY3VycmVudFZhbHVlfXZhciB3Zz0hMTtmdW5jdGlvbiB4ZyhhKXthLnVwZGF0ZVF1ZXVlPXtiYXNlU3RhdGU6YS5tZW1vaXplZFN0YXRlLGZpcnN0QmFzZVVwZGF0ZTpudWxsLGxhc3RCYXNlVXBkYXRlOm51bGwsc2hhcmVkOntwZW5kaW5nOm51bGx9LGVmZmVjdHM6bnVsbH19XG5mdW5jdGlvbiB5ZyhhLGIpe2E9YS51cGRhdGVRdWV1ZTtiLnVwZGF0ZVF1ZXVlPT09YSYmKGIudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTphLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6YS5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6YS5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6YS5zaGFyZWQsZWZmZWN0czphLmVmZmVjdHN9KX1mdW5jdGlvbiB6ZyhhLGIpe3JldHVybntldmVudFRpbWU6YSxsYW5lOmIsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfX1mdW5jdGlvbiBBZyhhLGIpe2E9YS51cGRhdGVRdWV1ZTtpZihudWxsIT09YSl7YT1hLnNoYXJlZDt2YXIgYz1hLnBlbmRpbmc7bnVsbD09PWM/Yi5uZXh0PWI6KGIubmV4dD1jLm5leHQsYy5uZXh0PWIpO2EucGVuZGluZz1ifX1cbmZ1bmN0aW9uIEJnKGEsYil7dmFyIGM9YS51cGRhdGVRdWV1ZSxkPWEuYWx0ZXJuYXRlO2lmKG51bGwhPT1kJiYoZD1kLnVwZGF0ZVF1ZXVlLGM9PT1kKSl7dmFyIGU9bnVsbCxmPW51bGw7Yz1jLmZpcnN0QmFzZVVwZGF0ZTtpZihudWxsIT09Yyl7ZG97dmFyIGc9e2V2ZW50VGltZTpjLmV2ZW50VGltZSxsYW5lOmMubGFuZSx0YWc6Yy50YWcscGF5bG9hZDpjLnBheWxvYWQsY2FsbGJhY2s6Yy5jYWxsYmFjayxuZXh0Om51bGx9O251bGw9PT1mP2U9Zj1nOmY9Zi5uZXh0PWc7Yz1jLm5leHR9d2hpbGUobnVsbCE9PWMpO251bGw9PT1mP2U9Zj1iOmY9Zi5uZXh0PWJ9ZWxzZSBlPWY9YjtjPXtiYXNlU3RhdGU6ZC5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmUsbGFzdEJhc2VVcGRhdGU6ZixzaGFyZWQ6ZC5zaGFyZWQsZWZmZWN0czpkLmVmZmVjdHN9O2EudXBkYXRlUXVldWU9YztyZXR1cm59YT1jLmxhc3RCYXNlVXBkYXRlO251bGw9PT1hP2MuZmlyc3RCYXNlVXBkYXRlPWI6YS5uZXh0PVxuYjtjLmxhc3RCYXNlVXBkYXRlPWJ9XG5mdW5jdGlvbiBDZyhhLGIsYyxkKXt2YXIgZT1hLnVwZGF0ZVF1ZXVlO3dnPSExO3ZhciBmPWUuZmlyc3RCYXNlVXBkYXRlLGc9ZS5sYXN0QmFzZVVwZGF0ZSxoPWUuc2hhcmVkLnBlbmRpbmc7aWYobnVsbCE9PWgpe2Uuc2hhcmVkLnBlbmRpbmc9bnVsbDt2YXIgaz1oLGw9ay5uZXh0O2submV4dD1udWxsO251bGw9PT1nP2Y9bDpnLm5leHQ9bDtnPWs7dmFyIG49YS5hbHRlcm5hdGU7aWYobnVsbCE9PW4pe249bi51cGRhdGVRdWV1ZTt2YXIgQT1uLmxhc3RCYXNlVXBkYXRlO0EhPT1nJiYobnVsbD09PUE/bi5maXJzdEJhc2VVcGRhdGU9bDpBLm5leHQ9bCxuLmxhc3RCYXNlVXBkYXRlPWspfX1pZihudWxsIT09Zil7QT1lLmJhc2VTdGF0ZTtnPTA7bj1sPWs9bnVsbDtkb3toPWYubGFuZTt2YXIgcD1mLmV2ZW50VGltZTtpZigoZCZoKT09PWgpe251bGwhPT1uJiYobj1uLm5leHQ9e2V2ZW50VGltZTpwLGxhbmU6MCx0YWc6Zi50YWcscGF5bG9hZDpmLnBheWxvYWQsY2FsbGJhY2s6Zi5jYWxsYmFjayxcbm5leHQ6bnVsbH0pO2E6e3ZhciBDPWEseD1mO2g9YjtwPWM7c3dpdGNoKHgudGFnKXtjYXNlIDE6Qz14LnBheWxvYWQ7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIEMpe0E9Qy5jYWxsKHAsQSxoKTticmVhayBhfUE9QzticmVhayBhO2Nhc2UgMzpDLmZsYWdzPUMuZmxhZ3MmLTQwOTd8NjQ7Y2FzZSAwOkM9eC5wYXlsb2FkO2g9XCJmdW5jdGlvblwiPT09dHlwZW9mIEM/Qy5jYWxsKHAsQSxoKTpDO2lmKG51bGw9PT1ofHx2b2lkIDA9PT1oKWJyZWFrIGE7QT1tKHt9LEEsaCk7YnJlYWsgYTtjYXNlIDI6d2c9ITB9fW51bGwhPT1mLmNhbGxiYWNrJiYoYS5mbGFnc3w9MzIsaD1lLmVmZmVjdHMsbnVsbD09PWg/ZS5lZmZlY3RzPVtmXTpoLnB1c2goZikpfWVsc2UgcD17ZXZlbnRUaW1lOnAsbGFuZTpoLHRhZzpmLnRhZyxwYXlsb2FkOmYucGF5bG9hZCxjYWxsYmFjazpmLmNhbGxiYWNrLG5leHQ6bnVsbH0sbnVsbD09PW4/KGw9bj1wLGs9QSk6bj1uLm5leHQ9cCxnfD1oO2Y9Zi5uZXh0O2lmKG51bGw9PT1cbmYpaWYoaD1lLnNoYXJlZC5wZW5kaW5nLG51bGw9PT1oKWJyZWFrO2Vsc2UgZj1oLm5leHQsaC5uZXh0PW51bGwsZS5sYXN0QmFzZVVwZGF0ZT1oLGUuc2hhcmVkLnBlbmRpbmc9bnVsbH13aGlsZSgxKTtudWxsPT09biYmKGs9QSk7ZS5iYXNlU3RhdGU9aztlLmZpcnN0QmFzZVVwZGF0ZT1sO2UubGFzdEJhc2VVcGRhdGU9bjtEZ3w9ZzthLmxhbmVzPWc7YS5tZW1vaXplZFN0YXRlPUF9fWZ1bmN0aW9uIEVnKGEsYixjKXthPWIuZWZmZWN0cztiLmVmZmVjdHM9bnVsbDtpZihudWxsIT09YSlmb3IoYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgZD1hW2JdLGU9ZC5jYWxsYmFjaztpZihudWxsIT09ZSl7ZC5jYWxsYmFjaz1udWxsO2Q9YztpZihcImZ1bmN0aW9uXCIhPT10eXBlb2YgZSl0aHJvdyBFcnJvcih5KDE5MSxlKSk7ZS5jYWxsKGQpfX19dmFyIEZnPShuZXcgYWEuQ29tcG9uZW50KS5yZWZzO1xuZnVuY3Rpb24gR2coYSxiLGMsZCl7Yj1hLm1lbW9pemVkU3RhdGU7Yz1jKGQsYik7Yz1udWxsPT09Y3x8dm9pZCAwPT09Yz9iOm0oe30sYixjKTthLm1lbW9pemVkU3RhdGU9YzswPT09YS5sYW5lcyYmKGEudXBkYXRlUXVldWUuYmFzZVN0YXRlPWMpfVxudmFyIEtnPXtpc01vdW50ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuKGE9YS5fcmVhY3RJbnRlcm5hbHMpP1piKGEpPT09YTohMX0sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKGEsYixjKXthPWEuX3JlYWN0SW50ZXJuYWxzO3ZhciBkPUhnKCksZT1JZyhhKSxmPXpnKGQsZSk7Zi5wYXlsb2FkPWI7dm9pZCAwIT09YyYmbnVsbCE9PWMmJihmLmNhbGxiYWNrPWMpO0FnKGEsZik7SmcoYSxlLGQpfSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKGEsYixjKXthPWEuX3JlYWN0SW50ZXJuYWxzO3ZhciBkPUhnKCksZT1JZyhhKSxmPXpnKGQsZSk7Zi50YWc9MTtmLnBheWxvYWQ9Yjt2b2lkIDAhPT1jJiZudWxsIT09YyYmKGYuY2FsbGJhY2s9Yyk7QWcoYSxmKTtKZyhhLGUsZCl9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbihhLGIpe2E9YS5fcmVhY3RJbnRlcm5hbHM7dmFyIGM9SGcoKSxkPUlnKGEpLGU9emcoYyxkKTtlLnRhZz0yO3ZvaWQgMCE9PWImJm51bGwhPT1iJiYoZS5jYWxsYmFjaz1cbmIpO0FnKGEsZSk7SmcoYSxkLGMpfX07ZnVuY3Rpb24gTGcoYSxiLGMsZCxlLGYsZyl7YT1hLnN0YXRlTm9kZTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYS5zaG91bGRDb21wb25lbnRVcGRhdGU/YS5zaG91bGRDb21wb25lbnRVcGRhdGUoZCxmLGcpOmIucHJvdG90eXBlJiZiLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hSmUoYyxkKXx8IUplKGUsZik6ITB9XG5mdW5jdGlvbiBNZyhhLGIsYyl7dmFyIGQ9ITEsZT1DZjt2YXIgZj1iLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWY/Zj12ZyhmKTooZT1GZihiKT9EZjpNLmN1cnJlbnQsZD1iLmNvbnRleHRUeXBlcyxmPShkPW51bGwhPT1kJiZ2b2lkIDAhPT1kKT9FZihhLGUpOkNmKTtiPW5ldyBiKGMsZik7YS5tZW1vaXplZFN0YXRlPW51bGwhPT1iLnN0YXRlJiZ2b2lkIDAhPT1iLnN0YXRlP2Iuc3RhdGU6bnVsbDtiLnVwZGF0ZXI9S2c7YS5zdGF0ZU5vZGU9YjtiLl9yZWFjdEludGVybmFscz1hO2QmJihhPWEuc3RhdGVOb2RlLGEuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD1lLGEuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ9Zik7cmV0dXJuIGJ9XG5mdW5jdGlvbiBOZyhhLGIsYyxkKXthPWIuc3RhdGU7XCJmdW5jdGlvblwiPT09dHlwZW9mIGIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmYi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGMsZCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGIuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJmIuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoYyxkKTtiLnN0YXRlIT09YSYmS2cuZW5xdWV1ZVJlcGxhY2VTdGF0ZShiLGIuc3RhdGUsbnVsbCl9XG5mdW5jdGlvbiBPZyhhLGIsYyxkKXt2YXIgZT1hLnN0YXRlTm9kZTtlLnByb3BzPWM7ZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGU7ZS5yZWZzPUZnO3hnKGEpO3ZhciBmPWIuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBmJiZudWxsIT09Zj9lLmNvbnRleHQ9dmcoZik6KGY9RmYoYik/RGY6TS5jdXJyZW50LGUuY29udGV4dD1FZihhLGYpKTtDZyhhLGMsZSxkKTtlLnN0YXRlPWEubWVtb2l6ZWRTdGF0ZTtmPWIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBmJiYoR2coYSxiLGYsYyksZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGUpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBiLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc3x8XCJmdW5jdGlvblwiPT09dHlwZW9mIGUuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlLmNvbXBvbmVudFdpbGxNb3VudHx8XG4oYj1lLnN0YXRlLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLmNvbXBvbmVudFdpbGxNb3VudCYmZS5jb21wb25lbnRXaWxsTW91bnQoKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSxiIT09ZS5zdGF0ZSYmS2cuZW5xdWV1ZVJlcGxhY2VTdGF0ZShlLGUuc3RhdGUsbnVsbCksQ2coYSxjLGUsZCksZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGUpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBlLmNvbXBvbmVudERpZE1vdW50JiYoYS5mbGFnc3w9NCl9dmFyIFBnPUFycmF5LmlzQXJyYXk7XG5mdW5jdGlvbiBRZyhhLGIsYyl7YT1jLnJlZjtpZihudWxsIT09YSYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGEmJlwib2JqZWN0XCIhPT10eXBlb2YgYSl7aWYoYy5fb3duZXIpe2M9Yy5fb3duZXI7aWYoYyl7aWYoMSE9PWMudGFnKXRocm93IEVycm9yKHkoMzA5KSk7dmFyIGQ9Yy5zdGF0ZU5vZGV9aWYoIWQpdGhyb3cgRXJyb3IoeSgxNDcsYSkpO3ZhciBlPVwiXCIrYTtpZihudWxsIT09YiYmbnVsbCE9PWIucmVmJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5yZWYmJmIucmVmLl9zdHJpbmdSZWY9PT1lKXJldHVybiBiLnJlZjtiPWZ1bmN0aW9uKGEpe3ZhciBiPWQucmVmcztiPT09RmcmJihiPWQucmVmcz17fSk7bnVsbD09PWE/ZGVsZXRlIGJbZV06YltlXT1hfTtiLl9zdHJpbmdSZWY9ZTtyZXR1cm4gYn1pZihcInN0cmluZ1wiIT09dHlwZW9mIGEpdGhyb3cgRXJyb3IoeSgyODQpKTtpZighYy5fb3duZXIpdGhyb3cgRXJyb3IoeSgyOTAsYSkpO31yZXR1cm4gYX1cbmZ1bmN0aW9uIFJnKGEsYil7aWYoXCJ0ZXh0YXJlYVwiIT09YS50eXBlKXRocm93IEVycm9yKHkoMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChiKT9cIm9iamVjdCB3aXRoIGtleXMge1wiK09iamVjdC5rZXlzKGIpLmpvaW4oXCIsIFwiKStcIn1cIjpiKSk7fVxuZnVuY3Rpb24gU2coYSl7ZnVuY3Rpb24gYihiLGMpe2lmKGEpe3ZhciBkPWIubGFzdEVmZmVjdDtudWxsIT09ZD8oZC5uZXh0RWZmZWN0PWMsYi5sYXN0RWZmZWN0PWMpOmIuZmlyc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0PWM7Yy5uZXh0RWZmZWN0PW51bGw7Yy5mbGFncz04fX1mdW5jdGlvbiBjKGMsZCl7aWYoIWEpcmV0dXJuIG51bGw7Zm9yKDtudWxsIT09ZDspYihjLGQpLGQ9ZC5zaWJsaW5nO3JldHVybiBudWxsfWZ1bmN0aW9uIGQoYSxiKXtmb3IoYT1uZXcgTWFwO251bGwhPT1iOyludWxsIT09Yi5rZXk/YS5zZXQoYi5rZXksYik6YS5zZXQoYi5pbmRleCxiKSxiPWIuc2libGluZztyZXR1cm4gYX1mdW5jdGlvbiBlKGEsYil7YT1UZyhhLGIpO2EuaW5kZXg9MDthLnNpYmxpbmc9bnVsbDtyZXR1cm4gYX1mdW5jdGlvbiBmKGIsYyxkKXtiLmluZGV4PWQ7aWYoIWEpcmV0dXJuIGM7ZD1iLmFsdGVybmF0ZTtpZihudWxsIT09ZClyZXR1cm4gZD1kLmluZGV4LGQ8Yz8oYi5mbGFncz0yLFxuYyk6ZDtiLmZsYWdzPTI7cmV0dXJuIGN9ZnVuY3Rpb24gZyhiKXthJiZudWxsPT09Yi5hbHRlcm5hdGUmJihiLmZsYWdzPTIpO3JldHVybiBifWZ1bmN0aW9uIGgoYSxiLGMsZCl7aWYobnVsbD09PWJ8fDYhPT1iLnRhZylyZXR1cm4gYj1VZyhjLGEubW9kZSxkKSxiLnJldHVybj1hLGI7Yj1lKGIsYyk7Yi5yZXR1cm49YTtyZXR1cm4gYn1mdW5jdGlvbiBrKGEsYixjLGQpe2lmKG51bGwhPT1iJiZiLmVsZW1lbnRUeXBlPT09Yy50eXBlKXJldHVybiBkPWUoYixjLnByb3BzKSxkLnJlZj1RZyhhLGIsYyksZC5yZXR1cm49YSxkO2Q9VmcoYy50eXBlLGMua2V5LGMucHJvcHMsbnVsbCxhLm1vZGUsZCk7ZC5yZWY9UWcoYSxiLGMpO2QucmV0dXJuPWE7cmV0dXJuIGR9ZnVuY3Rpb24gbChhLGIsYyxkKXtpZihudWxsPT09Ynx8NCE9PWIudGFnfHxiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIT09Yy5jb250YWluZXJJbmZvfHxiLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiE9PWMuaW1wbGVtZW50YXRpb24pcmV0dXJuIGI9XG5XZyhjLGEubW9kZSxkKSxiLnJldHVybj1hLGI7Yj1lKGIsYy5jaGlsZHJlbnx8W10pO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gbihhLGIsYyxkLGYpe2lmKG51bGw9PT1ifHw3IT09Yi50YWcpcmV0dXJuIGI9WGcoYyxhLm1vZGUsZCxmKSxiLnJldHVybj1hLGI7Yj1lKGIsYyk7Yi5yZXR1cm49YTtyZXR1cm4gYn1mdW5jdGlvbiBBKGEsYixjKXtpZihcInN0cmluZ1wiPT09dHlwZW9mIGJ8fFwibnVtYmVyXCI9PT10eXBlb2YgYilyZXR1cm4gYj1VZyhcIlwiK2IsYS5tb2RlLGMpLGIucmV0dXJuPWEsYjtpZihcIm9iamVjdFwiPT09dHlwZW9mIGImJm51bGwhPT1iKXtzd2l0Y2goYi4kJHR5cGVvZil7Y2FzZSBzYTpyZXR1cm4gYz1WZyhiLnR5cGUsYi5rZXksYi5wcm9wcyxudWxsLGEubW9kZSxjKSxjLnJlZj1RZyhhLG51bGwsYiksYy5yZXR1cm49YSxjO2Nhc2UgdGE6cmV0dXJuIGI9V2coYixhLm1vZGUsYyksYi5yZXR1cm49YSxifWlmKFBnKGIpfHxMYShiKSlyZXR1cm4gYj1YZyhiLFxuYS5tb2RlLGMsbnVsbCksYi5yZXR1cm49YSxiO1JnKGEsYil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcChhLGIsYyxkKXt2YXIgZT1udWxsIT09Yj9iLmtleTpudWxsO2lmKFwic3RyaW5nXCI9PT10eXBlb2YgY3x8XCJudW1iZXJcIj09PXR5cGVvZiBjKXJldHVybiBudWxsIT09ZT9udWxsOmgoYSxiLFwiXCIrYyxkKTtpZihcIm9iamVjdFwiPT09dHlwZW9mIGMmJm51bGwhPT1jKXtzd2l0Y2goYy4kJHR5cGVvZil7Y2FzZSBzYTpyZXR1cm4gYy5rZXk9PT1lP2MudHlwZT09PXVhP24oYSxiLGMucHJvcHMuY2hpbGRyZW4sZCxlKTprKGEsYixjLGQpOm51bGw7Y2FzZSB0YTpyZXR1cm4gYy5rZXk9PT1lP2woYSxiLGMsZCk6bnVsbH1pZihQZyhjKXx8TGEoYykpcmV0dXJuIG51bGwhPT1lP251bGw6bihhLGIsYyxkLG51bGwpO1JnKGEsYyl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQyhhLGIsYyxkLGUpe2lmKFwic3RyaW5nXCI9PT10eXBlb2YgZHx8XCJudW1iZXJcIj09PXR5cGVvZiBkKXJldHVybiBhPWEuZ2V0KGMpfHxcbm51bGwsaChiLGEsXCJcIitkLGUpO2lmKFwib2JqZWN0XCI9PT10eXBlb2YgZCYmbnVsbCE9PWQpe3N3aXRjaChkLiQkdHlwZW9mKXtjYXNlIHNhOnJldHVybiBhPWEuZ2V0KG51bGw9PT1kLmtleT9jOmQua2V5KXx8bnVsbCxkLnR5cGU9PT11YT9uKGIsYSxkLnByb3BzLmNoaWxkcmVuLGUsZC5rZXkpOmsoYixhLGQsZSk7Y2FzZSB0YTpyZXR1cm4gYT1hLmdldChudWxsPT09ZC5rZXk/YzpkLmtleSl8fG51bGwsbChiLGEsZCxlKX1pZihQZyhkKXx8TGEoZCkpcmV0dXJuIGE9YS5nZXQoYyl8fG51bGwsbihiLGEsZCxlLG51bGwpO1JnKGIsZCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24geChlLGcsaCxrKXtmb3IodmFyIGw9bnVsbCx0PW51bGwsdT1nLHo9Zz0wLHE9bnVsbDtudWxsIT09dSYmejxoLmxlbmd0aDt6Kyspe3UuaW5kZXg+ej8ocT11LHU9bnVsbCk6cT11LnNpYmxpbmc7dmFyIG49cChlLHUsaFt6XSxrKTtpZihudWxsPT09bil7bnVsbD09PXUmJih1PXEpO2JyZWFrfWEmJnUmJm51bGw9PT1cbm4uYWx0ZXJuYXRlJiZiKGUsdSk7Zz1mKG4sZyx6KTtudWxsPT09dD9sPW46dC5zaWJsaW5nPW47dD1uO3U9cX1pZih6PT09aC5sZW5ndGgpcmV0dXJuIGMoZSx1KSxsO2lmKG51bGw9PT11KXtmb3IoO3o8aC5sZW5ndGg7eisrKXU9QShlLGhbel0sayksbnVsbCE9PXUmJihnPWYodSxnLHopLG51bGw9PT10P2w9dTp0LnNpYmxpbmc9dSx0PXUpO3JldHVybiBsfWZvcih1PWQoZSx1KTt6PGgubGVuZ3RoO3orKylxPUModSxlLHosaFt6XSxrKSxudWxsIT09cSYmKGEmJm51bGwhPT1xLmFsdGVybmF0ZSYmdS5kZWxldGUobnVsbD09PXEua2V5P3o6cS5rZXkpLGc9ZihxLGcseiksbnVsbD09PXQ/bD1xOnQuc2libGluZz1xLHQ9cSk7YSYmdS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBiKGUsYSl9KTtyZXR1cm4gbH1mdW5jdGlvbiB3KGUsZyxoLGspe3ZhciBsPUxhKGgpO2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBsKXRocm93IEVycm9yKHkoMTUwKSk7aD1sLmNhbGwoaCk7aWYobnVsbD09XG5oKXRocm93IEVycm9yKHkoMTUxKSk7Zm9yKHZhciB0PWw9bnVsbCx1PWcsej1nPTAscT1udWxsLG49aC5uZXh0KCk7bnVsbCE9PXUmJiFuLmRvbmU7eisrLG49aC5uZXh0KCkpe3UuaW5kZXg+ej8ocT11LHU9bnVsbCk6cT11LnNpYmxpbmc7dmFyIHc9cChlLHUsbi52YWx1ZSxrKTtpZihudWxsPT09dyl7bnVsbD09PXUmJih1PXEpO2JyZWFrfWEmJnUmJm51bGw9PT13LmFsdGVybmF0ZSYmYihlLHUpO2c9Zih3LGcseik7bnVsbD09PXQ/bD13OnQuc2libGluZz13O3Q9dzt1PXF9aWYobi5kb25lKXJldHVybiBjKGUsdSksbDtpZihudWxsPT09dSl7Zm9yKDshbi5kb25lO3orKyxuPWgubmV4dCgpKW49QShlLG4udmFsdWUsayksbnVsbCE9PW4mJihnPWYobixnLHopLG51bGw9PT10P2w9bjp0LnNpYmxpbmc9bix0PW4pO3JldHVybiBsfWZvcih1PWQoZSx1KTshbi5kb25lO3orKyxuPWgubmV4dCgpKW49Qyh1LGUseixuLnZhbHVlLGspLG51bGwhPT1uJiYoYSYmbnVsbCE9PW4uYWx0ZXJuYXRlJiZcbnUuZGVsZXRlKG51bGw9PT1uLmtleT96Om4ua2V5KSxnPWYobixnLHopLG51bGw9PT10P2w9bjp0LnNpYmxpbmc9bix0PW4pO2EmJnUuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYihlLGEpfSk7cmV0dXJuIGx9cmV0dXJuIGZ1bmN0aW9uKGEsZCxmLGgpe3ZhciBrPVwib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWYmJmYudHlwZT09PXVhJiZudWxsPT09Zi5rZXk7ayYmKGY9Zi5wcm9wcy5jaGlsZHJlbik7dmFyIGw9XCJvYmplY3RcIj09PXR5cGVvZiBmJiZudWxsIT09ZjtpZihsKXN3aXRjaChmLiQkdHlwZW9mKXtjYXNlIHNhOmE6e2w9Zi5rZXk7Zm9yKGs9ZDtudWxsIT09azspe2lmKGsua2V5PT09bCl7c3dpdGNoKGsudGFnKXtjYXNlIDc6aWYoZi50eXBlPT09dWEpe2MoYSxrLnNpYmxpbmcpO2Q9ZShrLGYucHJvcHMuY2hpbGRyZW4pO2QucmV0dXJuPWE7YT1kO2JyZWFrIGF9YnJlYWs7ZGVmYXVsdDppZihrLmVsZW1lbnRUeXBlPT09Zi50eXBlKXtjKGEsay5zaWJsaW5nKTtcbmQ9ZShrLGYucHJvcHMpO2QucmVmPVFnKGEsayxmKTtkLnJldHVybj1hO2E9ZDticmVhayBhfX1jKGEsayk7YnJlYWt9ZWxzZSBiKGEsayk7az1rLnNpYmxpbmd9Zi50eXBlPT09dWE/KGQ9WGcoZi5wcm9wcy5jaGlsZHJlbixhLm1vZGUsaCxmLmtleSksZC5yZXR1cm49YSxhPWQpOihoPVZnKGYudHlwZSxmLmtleSxmLnByb3BzLG51bGwsYS5tb2RlLGgpLGgucmVmPVFnKGEsZCxmKSxoLnJldHVybj1hLGE9aCl9cmV0dXJuIGcoYSk7Y2FzZSB0YTphOntmb3Ioaz1mLmtleTtudWxsIT09ZDspe2lmKGQua2V5PT09aylpZig0PT09ZC50YWcmJmQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT1mLmNvbnRhaW5lckluZm8mJmQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uPT09Zi5pbXBsZW1lbnRhdGlvbil7YyhhLGQuc2libGluZyk7ZD1lKGQsZi5jaGlsZHJlbnx8W10pO2QucmV0dXJuPWE7YT1kO2JyZWFrIGF9ZWxzZXtjKGEsZCk7YnJlYWt9ZWxzZSBiKGEsZCk7ZD1kLnNpYmxpbmd9ZD1cbldnKGYsYS5tb2RlLGgpO2QucmV0dXJuPWE7YT1kfXJldHVybiBnKGEpfWlmKFwic3RyaW5nXCI9PT10eXBlb2YgZnx8XCJudW1iZXJcIj09PXR5cGVvZiBmKXJldHVybiBmPVwiXCIrZixudWxsIT09ZCYmNj09PWQudGFnPyhjKGEsZC5zaWJsaW5nKSxkPWUoZCxmKSxkLnJldHVybj1hLGE9ZCk6KGMoYSxkKSxkPVVnKGYsYS5tb2RlLGgpLGQucmV0dXJuPWEsYT1kKSxnKGEpO2lmKFBnKGYpKXJldHVybiB4KGEsZCxmLGgpO2lmKExhKGYpKXJldHVybiB3KGEsZCxmLGgpO2wmJlJnKGEsZik7aWYoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiBmJiYhaylzd2l0Y2goYS50YWcpe2Nhc2UgMTpjYXNlIDIyOmNhc2UgMDpjYXNlIDExOmNhc2UgMTU6dGhyb3cgRXJyb3IoeSgxNTIsUmEoYS50eXBlKXx8XCJDb21wb25lbnRcIikpO31yZXR1cm4gYyhhLGQpfX12YXIgWWc9U2coITApLFpnPVNnKCExKSwkZz17fSxhaD1CZigkZyksYmg9QmYoJGcpLGNoPUJmKCRnKTtcbmZ1bmN0aW9uIGRoKGEpe2lmKGE9PT0kZyl0aHJvdyBFcnJvcih5KDE3NCkpO3JldHVybiBhfWZ1bmN0aW9uIGVoKGEsYil7SShjaCxiKTtJKGJoLGEpO0koYWgsJGcpO2E9Yi5ub2RlVHlwZTtzd2l0Y2goYSl7Y2FzZSA5OmNhc2UgMTE6Yj0oYj1iLmRvY3VtZW50RWxlbWVudCk/Yi5uYW1lc3BhY2VVUkk6bWIobnVsbCxcIlwiKTticmVhaztkZWZhdWx0OmE9OD09PWE/Yi5wYXJlbnROb2RlOmIsYj1hLm5hbWVzcGFjZVVSSXx8bnVsbCxhPWEudGFnTmFtZSxiPW1iKGIsYSl9SChhaCk7SShhaCxiKX1mdW5jdGlvbiBmaCgpe0goYWgpO0goYmgpO0goY2gpfWZ1bmN0aW9uIGdoKGEpe2RoKGNoLmN1cnJlbnQpO3ZhciBiPWRoKGFoLmN1cnJlbnQpO3ZhciBjPW1iKGIsYS50eXBlKTtiIT09YyYmKEkoYmgsYSksSShhaCxjKSl9ZnVuY3Rpb24gaGgoYSl7YmguY3VycmVudD09PWEmJihIKGFoKSxIKGJoKSl9dmFyIFA9QmYoMCk7XG5mdW5jdGlvbiBpaChhKXtmb3IodmFyIGI9YTtudWxsIT09Yjspe2lmKDEzPT09Yi50YWcpe3ZhciBjPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09YyYmKGM9Yy5kZWh5ZHJhdGVkLG51bGw9PT1jfHxcIiQ/XCI9PT1jLmRhdGF8fFwiJCFcIj09PWMuZGF0YSkpcmV0dXJuIGJ9ZWxzZSBpZigxOT09PWIudGFnJiZ2b2lkIDAhPT1iLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIpe2lmKDAhPT0oYi5mbGFncyY2NCkpcmV0dXJuIGJ9ZWxzZSBpZihudWxsIT09Yi5jaGlsZCl7Yi5jaGlsZC5yZXR1cm49YjtiPWIuY2hpbGQ7Y29udGludWV9aWYoYj09PWEpYnJlYWs7Zm9yKDtudWxsPT09Yi5zaWJsaW5nOyl7aWYobnVsbD09PWIucmV0dXJufHxiLnJldHVybj09PWEpcmV0dXJuIG51bGw7Yj1iLnJldHVybn1iLnNpYmxpbmcucmV0dXJuPWIucmV0dXJuO2I9Yi5zaWJsaW5nfXJldHVybiBudWxsfXZhciBqaD1udWxsLGtoPW51bGwsbGg9ITE7XG5mdW5jdGlvbiBtaChhLGIpe3ZhciBjPW5oKDUsbnVsbCxudWxsLDApO2MuZWxlbWVudFR5cGU9XCJERUxFVEVEXCI7Yy50eXBlPVwiREVMRVRFRFwiO2Muc3RhdGVOb2RlPWI7Yy5yZXR1cm49YTtjLmZsYWdzPTg7bnVsbCE9PWEubGFzdEVmZmVjdD8oYS5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9YyxhLmxhc3RFZmZlY3Q9Yyk6YS5maXJzdEVmZmVjdD1hLmxhc3RFZmZlY3Q9Y31mdW5jdGlvbiBvaChhLGIpe3N3aXRjaChhLnRhZyl7Y2FzZSA1OnZhciBjPWEudHlwZTtiPTEhPT1iLm5vZGVUeXBlfHxjLnRvTG93ZXJDYXNlKCkhPT1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/bnVsbDpiO3JldHVybiBudWxsIT09Yj8oYS5zdGF0ZU5vZGU9YiwhMCk6ITE7Y2FzZSA2OnJldHVybiBiPVwiXCI9PT1hLnBlbmRpbmdQcm9wc3x8MyE9PWIubm9kZVR5cGU/bnVsbDpiLG51bGwhPT1iPyhhLnN0YXRlTm9kZT1iLCEwKTohMTtjYXNlIDEzOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITF9fVxuZnVuY3Rpb24gcGgoYSl7aWYobGgpe3ZhciBiPWtoO2lmKGIpe3ZhciBjPWI7aWYoIW9oKGEsYikpe2I9cmYoYy5uZXh0U2libGluZyk7aWYoIWJ8fCFvaChhLGIpKXthLmZsYWdzPWEuZmxhZ3MmLTEwMjV8MjtsaD0hMTtqaD1hO3JldHVybn1taChqaCxjKX1qaD1hO2toPXJmKGIuZmlyc3RDaGlsZCl9ZWxzZSBhLmZsYWdzPWEuZmxhZ3MmLTEwMjV8MixsaD0hMSxqaD1hfX1mdW5jdGlvbiBxaChhKXtmb3IoYT1hLnJldHVybjtudWxsIT09YSYmNSE9PWEudGFnJiYzIT09YS50YWcmJjEzIT09YS50YWc7KWE9YS5yZXR1cm47amg9YX1cbmZ1bmN0aW9uIHJoKGEpe2lmKGEhPT1qaClyZXR1cm4hMTtpZighbGgpcmV0dXJuIHFoKGEpLGxoPSEwLCExO3ZhciBiPWEudHlwZTtpZig1IT09YS50YWd8fFwiaGVhZFwiIT09YiYmXCJib2R5XCIhPT1iJiYhbmYoYixhLm1lbW9pemVkUHJvcHMpKWZvcihiPWtoO2I7KW1oKGEsYiksYj1yZihiLm5leHRTaWJsaW5nKTtxaChhKTtpZigxMz09PWEudGFnKXthPWEubWVtb2l6ZWRTdGF0ZTthPW51bGwhPT1hP2EuZGVoeWRyYXRlZDpudWxsO2lmKCFhKXRocm93IEVycm9yKHkoMzE3KSk7YTp7YT1hLm5leHRTaWJsaW5nO2ZvcihiPTA7YTspe2lmKDg9PT1hLm5vZGVUeXBlKXt2YXIgYz1hLmRhdGE7aWYoXCIvJFwiPT09Yyl7aWYoMD09PWIpe2toPXJmKGEubmV4dFNpYmxpbmcpO2JyZWFrIGF9Yi0tfWVsc2VcIiRcIiE9PWMmJlwiJCFcIiE9PWMmJlwiJD9cIiE9PWN8fGIrK31hPWEubmV4dFNpYmxpbmd9a2g9bnVsbH19ZWxzZSBraD1qaD9yZihhLnN0YXRlTm9kZS5uZXh0U2libGluZyk6bnVsbDtyZXR1cm4hMH1cbmZ1bmN0aW9uIHNoKCl7a2g9amg9bnVsbDtsaD0hMX12YXIgdGg9W107ZnVuY3Rpb24gdWgoKXtmb3IodmFyIGE9MDthPHRoLmxlbmd0aDthKyspdGhbYV0uX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk9bnVsbDt0aC5sZW5ndGg9MH12YXIgdmg9cmEuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcix3aD1yYS5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyx4aD0wLFI9bnVsbCxTPW51bGwsVD1udWxsLHloPSExLHpoPSExO2Z1bmN0aW9uIEFoKCl7dGhyb3cgRXJyb3IoeSgzMjEpKTt9ZnVuY3Rpb24gQmgoYSxiKXtpZihudWxsPT09YilyZXR1cm4hMTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoJiZjPGEubGVuZ3RoO2MrKylpZighSGUoYVtjXSxiW2NdKSlyZXR1cm4hMTtyZXR1cm4hMH1cbmZ1bmN0aW9uIENoKGEsYixjLGQsZSxmKXt4aD1mO1I9YjtiLm1lbW9pemVkU3RhdGU9bnVsbDtiLnVwZGF0ZVF1ZXVlPW51bGw7Yi5sYW5lcz0wO3ZoLmN1cnJlbnQ9bnVsbD09PWF8fG51bGw9PT1hLm1lbW9pemVkU3RhdGU/RGg6RWg7YT1jKGQsZSk7aWYoemgpe2Y9MDtkb3t6aD0hMTtpZighKDI1PmYpKXRocm93IEVycm9yKHkoMzAxKSk7Zis9MTtUPVM9bnVsbDtiLnVwZGF0ZVF1ZXVlPW51bGw7dmguY3VycmVudD1GaDthPWMoZCxlKX13aGlsZSh6aCl9dmguY3VycmVudD1HaDtiPW51bGwhPT1TJiZudWxsIT09Uy5uZXh0O3hoPTA7VD1TPVI9bnVsbDt5aD0hMTtpZihiKXRocm93IEVycm9yKHkoMzAwKSk7cmV0dXJuIGF9ZnVuY3Rpb24gSGgoKXt2YXIgYT17bWVtb2l6ZWRTdGF0ZTpudWxsLGJhc2VTdGF0ZTpudWxsLGJhc2VRdWV1ZTpudWxsLHF1ZXVlOm51bGwsbmV4dDpudWxsfTtudWxsPT09VD9SLm1lbW9pemVkU3RhdGU9VD1hOlQ9VC5uZXh0PWE7cmV0dXJuIFR9XG5mdW5jdGlvbiBJaCgpe2lmKG51bGw9PT1TKXt2YXIgYT1SLmFsdGVybmF0ZTthPW51bGwhPT1hP2EubWVtb2l6ZWRTdGF0ZTpudWxsfWVsc2UgYT1TLm5leHQ7dmFyIGI9bnVsbD09PVQ/Ui5tZW1vaXplZFN0YXRlOlQubmV4dDtpZihudWxsIT09YilUPWIsUz1hO2Vsc2V7aWYobnVsbD09PWEpdGhyb3cgRXJyb3IoeSgzMTApKTtTPWE7YT17bWVtb2l6ZWRTdGF0ZTpTLm1lbW9pemVkU3RhdGUsYmFzZVN0YXRlOlMuYmFzZVN0YXRlLGJhc2VRdWV1ZTpTLmJhc2VRdWV1ZSxxdWV1ZTpTLnF1ZXVlLG5leHQ6bnVsbH07bnVsbD09PVQ/Ui5tZW1vaXplZFN0YXRlPVQ9YTpUPVQubmV4dD1hfXJldHVybiBUfWZ1bmN0aW9uIEpoKGEsYil7cmV0dXJuXCJmdW5jdGlvblwiPT09dHlwZW9mIGI/YihhKTpifVxuZnVuY3Rpb24gS2goYSl7dmFyIGI9SWgoKSxjPWIucXVldWU7aWYobnVsbD09PWMpdGhyb3cgRXJyb3IoeSgzMTEpKTtjLmxhc3RSZW5kZXJlZFJlZHVjZXI9YTt2YXIgZD1TLGU9ZC5iYXNlUXVldWUsZj1jLnBlbmRpbmc7aWYobnVsbCE9PWYpe2lmKG51bGwhPT1lKXt2YXIgZz1lLm5leHQ7ZS5uZXh0PWYubmV4dDtmLm5leHQ9Z31kLmJhc2VRdWV1ZT1lPWY7Yy5wZW5kaW5nPW51bGx9aWYobnVsbCE9PWUpe2U9ZS5uZXh0O2Q9ZC5iYXNlU3RhdGU7dmFyIGg9Zz1mPW51bGwsaz1lO2Rve3ZhciBsPWsubGFuZTtpZigoeGgmbCk9PT1sKW51bGwhPT1oJiYoaD1oLm5leHQ9e2xhbmU6MCxhY3Rpb246ay5hY3Rpb24sZWFnZXJSZWR1Y2VyOmsuZWFnZXJSZWR1Y2VyLGVhZ2VyU3RhdGU6ay5lYWdlclN0YXRlLG5leHQ6bnVsbH0pLGQ9ay5lYWdlclJlZHVjZXI9PT1hP2suZWFnZXJTdGF0ZTphKGQsay5hY3Rpb24pO2Vsc2V7dmFyIG49e2xhbmU6bCxhY3Rpb246ay5hY3Rpb24sZWFnZXJSZWR1Y2VyOmsuZWFnZXJSZWR1Y2VyLFxuZWFnZXJTdGF0ZTprLmVhZ2VyU3RhdGUsbmV4dDpudWxsfTtudWxsPT09aD8oZz1oPW4sZj1kKTpoPWgubmV4dD1uO1IubGFuZXN8PWw7RGd8PWx9az1rLm5leHR9d2hpbGUobnVsbCE9PWsmJmshPT1lKTtudWxsPT09aD9mPWQ6aC5uZXh0PWc7SGUoZCxiLm1lbW9pemVkU3RhdGUpfHwodWc9ITApO2IubWVtb2l6ZWRTdGF0ZT1kO2IuYmFzZVN0YXRlPWY7Yi5iYXNlUXVldWU9aDtjLmxhc3RSZW5kZXJlZFN0YXRlPWR9cmV0dXJuW2IubWVtb2l6ZWRTdGF0ZSxjLmRpc3BhdGNoXX1cbmZ1bmN0aW9uIExoKGEpe3ZhciBiPUloKCksYz1iLnF1ZXVlO2lmKG51bGw9PT1jKXRocm93IEVycm9yKHkoMzExKSk7Yy5sYXN0UmVuZGVyZWRSZWR1Y2VyPWE7dmFyIGQ9Yy5kaXNwYXRjaCxlPWMucGVuZGluZyxmPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09ZSl7Yy5wZW5kaW5nPW51bGw7dmFyIGc9ZT1lLm5leHQ7ZG8gZj1hKGYsZy5hY3Rpb24pLGc9Zy5uZXh0O3doaWxlKGchPT1lKTtIZShmLGIubWVtb2l6ZWRTdGF0ZSl8fCh1Zz0hMCk7Yi5tZW1vaXplZFN0YXRlPWY7bnVsbD09PWIuYmFzZVF1ZXVlJiYoYi5iYXNlU3RhdGU9Zik7Yy5sYXN0UmVuZGVyZWRTdGF0ZT1mfXJldHVybltmLGRdfVxuZnVuY3Rpb24gTWgoYSxiLGMpe3ZhciBkPWIuX2dldFZlcnNpb247ZD1kKGIuX3NvdXJjZSk7dmFyIGU9Yi5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeTtpZihudWxsIT09ZSlhPWU9PT1kO2Vsc2UgaWYoYT1hLm11dGFibGVSZWFkTGFuZXMsYT0oeGgmYSk9PT1hKWIuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk9ZCx0aC5wdXNoKGIpO2lmKGEpcmV0dXJuIGMoYi5fc291cmNlKTt0aC5wdXNoKGIpO3Rocm93IEVycm9yKHkoMzUwKSk7fVxuZnVuY3Rpb24gTmgoYSxiLGMsZCl7dmFyIGU9VTtpZihudWxsPT09ZSl0aHJvdyBFcnJvcih5KDM0OSkpO3ZhciBmPWIuX2dldFZlcnNpb24sZz1mKGIuX3NvdXJjZSksaD12aC5jdXJyZW50LGs9aC51c2VTdGF0ZShmdW5jdGlvbigpe3JldHVybiBNaChlLGIsYyl9KSxsPWtbMV0sbj1rWzBdO2s9VDt2YXIgQT1hLm1lbW9pemVkU3RhdGUscD1BLnJlZnMsQz1wLmdldFNuYXBzaG90LHg9QS5zb3VyY2U7QT1BLnN1YnNjcmliZTt2YXIgdz1SO2EubWVtb2l6ZWRTdGF0ZT17cmVmczpwLHNvdXJjZTpiLHN1YnNjcmliZTpkfTtoLnVzZUVmZmVjdChmdW5jdGlvbigpe3AuZ2V0U25hcHNob3Q9YztwLnNldFNuYXBzaG90PWw7dmFyIGE9ZihiLl9zb3VyY2UpO2lmKCFIZShnLGEpKXthPWMoYi5fc291cmNlKTtIZShuLGEpfHwobChhKSxhPUlnKHcpLGUubXV0YWJsZVJlYWRMYW5lc3w9YSZlLnBlbmRpbmdMYW5lcyk7YT1lLm11dGFibGVSZWFkTGFuZXM7ZS5lbnRhbmdsZWRMYW5lc3w9YTtmb3IodmFyIGQ9XG5lLmVudGFuZ2xlbWVudHMsaD1hOzA8aDspe3ZhciBrPTMxLVZjKGgpLHY9MTw8aztkW2tdfD1hO2gmPX52fX19LFtjLGIsZF0pO2gudXNlRWZmZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIGQoYi5fc291cmNlLGZ1bmN0aW9uKCl7dmFyIGE9cC5nZXRTbmFwc2hvdCxjPXAuc2V0U25hcHNob3Q7dHJ5e2MoYShiLl9zb3VyY2UpKTt2YXIgZD1JZyh3KTtlLm11dGFibGVSZWFkTGFuZXN8PWQmZS5wZW5kaW5nTGFuZXN9Y2F0Y2gocSl7YyhmdW5jdGlvbigpe3Rocm93IHE7fSl9fSl9LFtiLGRdKTtIZShDLGMpJiZIZSh4LGIpJiZIZShBLGQpfHwoYT17cGVuZGluZzpudWxsLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpKaCxsYXN0UmVuZGVyZWRTdGF0ZTpufSxhLmRpc3BhdGNoPWw9T2guYmluZChudWxsLFIsYSksay5xdWV1ZT1hLGsuYmFzZVF1ZXVlPW51bGwsbj1NaChlLGIsYyksay5tZW1vaXplZFN0YXRlPWsuYmFzZVN0YXRlPW4pO3JldHVybiBufVxuZnVuY3Rpb24gUGgoYSxiLGMpe3ZhciBkPUloKCk7cmV0dXJuIE5oKGQsYSxiLGMpfWZ1bmN0aW9uIFFoKGEpe3ZhciBiPUhoKCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGEmJihhPWEoKSk7Yi5tZW1vaXplZFN0YXRlPWIuYmFzZVN0YXRlPWE7YT1iLnF1ZXVlPXtwZW5kaW5nOm51bGwsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOkpoLGxhc3RSZW5kZXJlZFN0YXRlOmF9O2E9YS5kaXNwYXRjaD1PaC5iaW5kKG51bGwsUixhKTtyZXR1cm5bYi5tZW1vaXplZFN0YXRlLGFdfVxuZnVuY3Rpb24gUmgoYSxiLGMsZCl7YT17dGFnOmEsY3JlYXRlOmIsZGVzdHJveTpjLGRlcHM6ZCxuZXh0Om51bGx9O2I9Ui51cGRhdGVRdWV1ZTtudWxsPT09Yj8oYj17bGFzdEVmZmVjdDpudWxsfSxSLnVwZGF0ZVF1ZXVlPWIsYi5sYXN0RWZmZWN0PWEubmV4dD1hKTooYz1iLmxhc3RFZmZlY3QsbnVsbD09PWM/Yi5sYXN0RWZmZWN0PWEubmV4dD1hOihkPWMubmV4dCxjLm5leHQ9YSxhLm5leHQ9ZCxiLmxhc3RFZmZlY3Q9YSkpO3JldHVybiBhfWZ1bmN0aW9uIFNoKGEpe3ZhciBiPUhoKCk7YT17Y3VycmVudDphfTtyZXR1cm4gYi5tZW1vaXplZFN0YXRlPWF9ZnVuY3Rpb24gVGgoKXtyZXR1cm4gSWgoKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIFVoKGEsYixjLGQpe3ZhciBlPUhoKCk7Ui5mbGFnc3w9YTtlLm1lbW9pemVkU3RhdGU9UmgoMXxiLGMsdm9pZCAwLHZvaWQgMD09PWQ/bnVsbDpkKX1cbmZ1bmN0aW9uIFZoKGEsYixjLGQpe3ZhciBlPUloKCk7ZD12b2lkIDA9PT1kP251bGw6ZDt2YXIgZj12b2lkIDA7aWYobnVsbCE9PVMpe3ZhciBnPVMubWVtb2l6ZWRTdGF0ZTtmPWcuZGVzdHJveTtpZihudWxsIT09ZCYmQmgoZCxnLmRlcHMpKXtSaChiLGMsZixkKTtyZXR1cm59fVIuZmxhZ3N8PWE7ZS5tZW1vaXplZFN0YXRlPVJoKDF8YixjLGYsZCl9ZnVuY3Rpb24gV2goYSxiKXtyZXR1cm4gVWgoNTE2LDQsYSxiKX1mdW5jdGlvbiBYaChhLGIpe3JldHVybiBWaCg1MTYsNCxhLGIpfWZ1bmN0aW9uIFloKGEsYil7cmV0dXJuIFZoKDQsMixhLGIpfWZ1bmN0aW9uIFpoKGEsYil7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGIpcmV0dXJuIGE9YSgpLGIoYSksZnVuY3Rpb24oKXtiKG51bGwpfTtpZihudWxsIT09YiYmdm9pZCAwIT09YilyZXR1cm4gYT1hKCksYi5jdXJyZW50PWEsZnVuY3Rpb24oKXtiLmN1cnJlbnQ9bnVsbH19XG5mdW5jdGlvbiAkaChhLGIsYyl7Yz1udWxsIT09YyYmdm9pZCAwIT09Yz9jLmNvbmNhdChbYV0pOm51bGw7cmV0dXJuIFZoKDQsMixaaC5iaW5kKG51bGwsYixhKSxjKX1mdW5jdGlvbiBhaSgpe31mdW5jdGlvbiBiaShhLGIpe3ZhciBjPUloKCk7Yj12b2lkIDA9PT1iP251bGw6Yjt2YXIgZD1jLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWQmJm51bGwhPT1iJiZCaChiLGRbMV0pKXJldHVybiBkWzBdO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX1mdW5jdGlvbiBjaShhLGIpe3ZhciBjPUloKCk7Yj12b2lkIDA9PT1iP251bGw6Yjt2YXIgZD1jLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWQmJm51bGwhPT1iJiZCaChiLGRbMV0pKXJldHVybiBkWzBdO2E9YSgpO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX1cbmZ1bmN0aW9uIGRpKGEsYil7dmFyIGM9ZWcoKTtnZyg5OD5jPzk4OmMsZnVuY3Rpb24oKXthKCEwKX0pO2dnKDk3PGM/OTc6YyxmdW5jdGlvbigpe3ZhciBjPXdoLnRyYW5zaXRpb247d2gudHJhbnNpdGlvbj0xO3RyeXthKCExKSxiKCl9ZmluYWxseXt3aC50cmFuc2l0aW9uPWN9fSl9XG5mdW5jdGlvbiBPaChhLGIsYyl7dmFyIGQ9SGcoKSxlPUlnKGEpLGY9e2xhbmU6ZSxhY3Rpb246YyxlYWdlclJlZHVjZXI6bnVsbCxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfSxnPWIucGVuZGluZztudWxsPT09Zz9mLm5leHQ9ZjooZi5uZXh0PWcubmV4dCxnLm5leHQ9Zik7Yi5wZW5kaW5nPWY7Zz1hLmFsdGVybmF0ZTtpZihhPT09Unx8bnVsbCE9PWcmJmc9PT1SKXpoPXloPSEwO2Vsc2V7aWYoMD09PWEubGFuZXMmJihudWxsPT09Z3x8MD09PWcubGFuZXMpJiYoZz1iLmxhc3RSZW5kZXJlZFJlZHVjZXIsbnVsbCE9PWcpKXRyeXt2YXIgaD1iLmxhc3RSZW5kZXJlZFN0YXRlLGs9ZyhoLGMpO2YuZWFnZXJSZWR1Y2VyPWc7Zi5lYWdlclN0YXRlPWs7aWYoSGUoayxoKSlyZXR1cm59Y2F0Y2gobCl7fWZpbmFsbHl7fUpnKGEsZSxkKX19XG52YXIgR2g9e3JlYWRDb250ZXh0OnZnLHVzZUNhbGxiYWNrOkFoLHVzZUNvbnRleHQ6QWgsdXNlRWZmZWN0OkFoLHVzZUltcGVyYXRpdmVIYW5kbGU6QWgsdXNlTGF5b3V0RWZmZWN0OkFoLHVzZU1lbW86QWgsdXNlUmVkdWNlcjpBaCx1c2VSZWY6QWgsdXNlU3RhdGU6QWgsdXNlRGVidWdWYWx1ZTpBaCx1c2VEZWZlcnJlZFZhbHVlOkFoLHVzZVRyYW5zaXRpb246QWgsdXNlTXV0YWJsZVNvdXJjZTpBaCx1c2VPcGFxdWVJZGVudGlmaWVyOkFoLHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sRGg9e3JlYWRDb250ZXh0OnZnLHVzZUNhbGxiYWNrOmZ1bmN0aW9uKGEsYil7SGgoKS5tZW1vaXplZFN0YXRlPVthLHZvaWQgMD09PWI/bnVsbDpiXTtyZXR1cm4gYX0sdXNlQ29udGV4dDp2Zyx1c2VFZmZlY3Q6V2gsdXNlSW1wZXJhdGl2ZUhhbmRsZTpmdW5jdGlvbihhLGIsYyl7Yz1udWxsIT09YyYmdm9pZCAwIT09Yz9jLmNvbmNhdChbYV0pOm51bGw7cmV0dXJuIFVoKDQsMixaaC5iaW5kKG51bGwsXG5iLGEpLGMpfSx1c2VMYXlvdXRFZmZlY3Q6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVWgoNCwyLGEsYil9LHVzZU1lbW86ZnVuY3Rpb24oYSxiKXt2YXIgYz1IaCgpO2I9dm9pZCAwPT09Yj9udWxsOmI7YT1hKCk7Yy5tZW1vaXplZFN0YXRlPVthLGJdO3JldHVybiBhfSx1c2VSZWR1Y2VyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1IaCgpO2I9dm9pZCAwIT09Yz9jKGIpOmI7ZC5tZW1vaXplZFN0YXRlPWQuYmFzZVN0YXRlPWI7YT1kLnF1ZXVlPXtwZW5kaW5nOm51bGwsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOmEsbGFzdFJlbmRlcmVkU3RhdGU6Yn07YT1hLmRpc3BhdGNoPU9oLmJpbmQobnVsbCxSLGEpO3JldHVybltkLm1lbW9pemVkU3RhdGUsYV19LHVzZVJlZjpTaCx1c2VTdGF0ZTpRaCx1c2VEZWJ1Z1ZhbHVlOmFpLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9UWgoYSksYz1iWzBdLGQ9YlsxXTtXaChmdW5jdGlvbigpe3ZhciBiPXdoLnRyYW5zaXRpb247XG53aC50cmFuc2l0aW9uPTE7dHJ5e2QoYSl9ZmluYWxseXt3aC50cmFuc2l0aW9uPWJ9fSxbYV0pO3JldHVybiBjfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9UWgoITEpLGI9YVswXTthPWRpLmJpbmQobnVsbCxhWzFdKTtTaChhKTtyZXR1cm5bYSxiXX0sdXNlTXV0YWJsZVNvdXJjZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9SGgoKTtkLm1lbW9pemVkU3RhdGU9e3JlZnM6e2dldFNuYXBzaG90OmIsc2V0U25hcHNob3Q6bnVsbH0sc291cmNlOmEsc3Vic2NyaWJlOmN9O3JldHVybiBOaChkLGEsYixjKX0sdXNlT3BhcXVlSWRlbnRpZmllcjpmdW5jdGlvbigpe2lmKGxoKXt2YXIgYT0hMSxiPXVmKGZ1bmN0aW9uKCl7YXx8KGE9ITAsYyhcInI6XCIrKHRmKyspLnRvU3RyaW5nKDM2KSkpO3Rocm93IEVycm9yKHkoMzU1KSk7fSksYz1RaChiKVsxXTswPT09KFIubW9kZSYyKSYmKFIuZmxhZ3N8PTUxNixSaCg1LGZ1bmN0aW9uKCl7YyhcInI6XCIrKHRmKyspLnRvU3RyaW5nKDM2KSl9LFxudm9pZCAwLG51bGwpKTtyZXR1cm4gYn1iPVwicjpcIisodGYrKykudG9TdHJpbmcoMzYpO1FoKGIpO3JldHVybiBifSx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LEVoPXtyZWFkQ29udGV4dDp2Zyx1c2VDYWxsYmFjazpiaSx1c2VDb250ZXh0OnZnLHVzZUVmZmVjdDpYaCx1c2VJbXBlcmF0aXZlSGFuZGxlOiRoLHVzZUxheW91dEVmZmVjdDpZaCx1c2VNZW1vOmNpLHVzZVJlZHVjZXI6S2gsdXNlUmVmOlRoLHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIEtoKEpoKX0sdXNlRGVidWdWYWx1ZTphaSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPUtoKEpoKSxjPWJbMF0sZD1iWzFdO1hoKGZ1bmN0aW9uKCl7dmFyIGI9d2gudHJhbnNpdGlvbjt3aC50cmFuc2l0aW9uPTE7dHJ5e2QoYSl9ZmluYWxseXt3aC50cmFuc2l0aW9uPWJ9fSxbYV0pO3JldHVybiBjfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9S2goSmgpWzBdO3JldHVybltUaCgpLmN1cnJlbnQsXG5hXX0sdXNlTXV0YWJsZVNvdXJjZTpQaCx1c2VPcGFxdWVJZGVudGlmaWVyOmZ1bmN0aW9uKCl7cmV0dXJuIEtoKEpoKVswXX0sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxGaD17cmVhZENvbnRleHQ6dmcsdXNlQ2FsbGJhY2s6YmksdXNlQ29udGV4dDp2Zyx1c2VFZmZlY3Q6WGgsdXNlSW1wZXJhdGl2ZUhhbmRsZTokaCx1c2VMYXlvdXRFZmZlY3Q6WWgsdXNlTWVtbzpjaSx1c2VSZWR1Y2VyOkxoLHVzZVJlZjpUaCx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBMaChKaCl9LHVzZURlYnVnVmFsdWU6YWksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihhKXt2YXIgYj1MaChKaCksYz1iWzBdLGQ9YlsxXTtYaChmdW5jdGlvbigpe3ZhciBiPXdoLnRyYW5zaXRpb247d2gudHJhbnNpdGlvbj0xO3RyeXtkKGEpfWZpbmFsbHl7d2gudHJhbnNpdGlvbj1ifX0sW2FdKTtyZXR1cm4gY30sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPUxoKEpoKVswXTtyZXR1cm5bVGgoKS5jdXJyZW50LFxuYV19LHVzZU11dGFibGVTb3VyY2U6UGgsdXNlT3BhcXVlSWRlbnRpZmllcjpmdW5jdGlvbigpe3JldHVybiBMaChKaClbMF19LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sZWk9cmEuUmVhY3RDdXJyZW50T3duZXIsdWc9ITE7ZnVuY3Rpb24gZmkoYSxiLGMsZCl7Yi5jaGlsZD1udWxsPT09YT9aZyhiLG51bGwsYyxkKTpZZyhiLGEuY2hpbGQsYyxkKX1mdW5jdGlvbiBnaShhLGIsYyxkLGUpe2M9Yy5yZW5kZXI7dmFyIGY9Yi5yZWY7dGcoYixlKTtkPUNoKGEsYixjLGQsZixlKTtpZihudWxsIT09YSYmIXVnKXJldHVybiBiLnVwZGF0ZVF1ZXVlPWEudXBkYXRlUXVldWUsYi5mbGFncyY9LTUxNyxhLmxhbmVzJj1+ZSxoaShhLGIsZSk7Yi5mbGFnc3w9MTtmaShhLGIsZCxlKTtyZXR1cm4gYi5jaGlsZH1cbmZ1bmN0aW9uIGlpKGEsYixjLGQsZSxmKXtpZihudWxsPT09YSl7dmFyIGc9Yy50eXBlO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnJiYhamkoZykmJnZvaWQgMD09PWcuZGVmYXVsdFByb3BzJiZudWxsPT09Yy5jb21wYXJlJiZ2b2lkIDA9PT1jLmRlZmF1bHRQcm9wcylyZXR1cm4gYi50YWc9MTUsYi50eXBlPWcsa2koYSxiLGcsZCxlLGYpO2E9VmcoYy50eXBlLG51bGwsZCxiLGIubW9kZSxmKTthLnJlZj1iLnJlZjthLnJldHVybj1iO3JldHVybiBiLmNoaWxkPWF9Zz1hLmNoaWxkO2lmKDA9PT0oZSZmKSYmKGU9Zy5tZW1vaXplZFByb3BzLGM9Yy5jb21wYXJlLGM9bnVsbCE9PWM/YzpKZSxjKGUsZCkmJmEucmVmPT09Yi5yZWYpKXJldHVybiBoaShhLGIsZik7Yi5mbGFnc3w9MTthPVRnKGcsZCk7YS5yZWY9Yi5yZWY7YS5yZXR1cm49YjtyZXR1cm4gYi5jaGlsZD1hfVxuZnVuY3Rpb24ga2koYSxiLGMsZCxlLGYpe2lmKG51bGwhPT1hJiZKZShhLm1lbW9pemVkUHJvcHMsZCkmJmEucmVmPT09Yi5yZWYpaWYodWc9ITEsMCE9PShmJmUpKTAhPT0oYS5mbGFncyYxNjM4NCkmJih1Zz0hMCk7ZWxzZSByZXR1cm4gYi5sYW5lcz1hLmxhbmVzLGhpKGEsYixmKTtyZXR1cm4gbGkoYSxiLGMsZCxmKX1cbmZ1bmN0aW9uIG1pKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcyxlPWQuY2hpbGRyZW4sZj1udWxsIT09YT9hLm1lbW9pemVkU3RhdGU6bnVsbDtpZihcImhpZGRlblwiPT09ZC5tb2RlfHxcInVuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nXCI9PT1kLm1vZGUpaWYoMD09PShiLm1vZGUmNCkpYi5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MH0sbmkoYixjKTtlbHNlIGlmKDAhPT0oYyYxMDczNzQxODI0KSliLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczowfSxuaShiLG51bGwhPT1mP2YuYmFzZUxhbmVzOmMpO2Vsc2UgcmV0dXJuIGE9bnVsbCE9PWY/Zi5iYXNlTGFuZXN8YzpjLGIubGFuZXM9Yi5jaGlsZExhbmVzPTEwNzM3NDE4MjQsYi5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6YX0sbmkoYixhKSxudWxsO2Vsc2UgbnVsbCE9PWY/KGQ9Zi5iYXNlTGFuZXN8YyxiLm1lbW9pemVkU3RhdGU9bnVsbCk6ZD1jLG5pKGIsZCk7ZmkoYSxiLGUsYyk7cmV0dXJuIGIuY2hpbGR9XG5mdW5jdGlvbiBvaShhLGIpe3ZhciBjPWIucmVmO2lmKG51bGw9PT1hJiZudWxsIT09Y3x8bnVsbCE9PWEmJmEucmVmIT09YyliLmZsYWdzfD0xMjh9ZnVuY3Rpb24gbGkoYSxiLGMsZCxlKXt2YXIgZj1GZihjKT9EZjpNLmN1cnJlbnQ7Zj1FZihiLGYpO3RnKGIsZSk7Yz1DaChhLGIsYyxkLGYsZSk7aWYobnVsbCE9PWEmJiF1ZylyZXR1cm4gYi51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlLGIuZmxhZ3MmPS01MTcsYS5sYW5lcyY9fmUsaGkoYSxiLGUpO2IuZmxhZ3N8PTE7ZmkoYSxiLGMsZSk7cmV0dXJuIGIuY2hpbGR9XG5mdW5jdGlvbiBwaShhLGIsYyxkLGUpe2lmKEZmKGMpKXt2YXIgZj0hMDtKZihiKX1lbHNlIGY9ITE7dGcoYixlKTtpZihudWxsPT09Yi5zdGF0ZU5vZGUpbnVsbCE9PWEmJihhLmFsdGVybmF0ZT1udWxsLGIuYWx0ZXJuYXRlPW51bGwsYi5mbGFnc3w9MiksTWcoYixjLGQpLE9nKGIsYyxkLGUpLGQ9ITA7ZWxzZSBpZihudWxsPT09YSl7dmFyIGc9Yi5zdGF0ZU5vZGUsaD1iLm1lbW9pemVkUHJvcHM7Zy5wcm9wcz1oO3ZhciBrPWcuY29udGV4dCxsPWMuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBsJiZudWxsIT09bD9sPXZnKGwpOihsPUZmKGMpP0RmOk0uY3VycmVudCxsPUVmKGIsbCkpO3ZhciBuPWMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLEE9XCJmdW5jdGlvblwiPT09dHlwZW9mIG58fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlO0F8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZcblwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChoIT09ZHx8ayE9PWwpJiZOZyhiLGcsZCxsKTt3Zz0hMTt2YXIgcD1iLm1lbW9pemVkU3RhdGU7Zy5zdGF0ZT1wO0NnKGIsZCxnLGUpO2s9Yi5tZW1vaXplZFN0YXRlO2ghPT1kfHxwIT09a3x8Ti5jdXJyZW50fHx3Zz8oXCJmdW5jdGlvblwiPT09dHlwZW9mIG4mJihHZyhiLGMsbixkKSxrPWIubWVtb2l6ZWRTdGF0ZSksKGg9d2d8fExnKGIsYyxoLGQscCxrLGwpKT8oQXx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50V2lsbE1vdW50fHwoXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50V2lsbE1vdW50JiZnLmNvbXBvbmVudFdpbGxNb3VudCgpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJmcuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpKSxcImZ1bmN0aW9uXCI9PT1cbnR5cGVvZiBnLmNvbXBvbmVudERpZE1vdW50JiYoYi5mbGFnc3w9NCkpOihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnREaWRNb3VudCYmKGIuZmxhZ3N8PTQpLGIubWVtb2l6ZWRQcm9wcz1kLGIubWVtb2l6ZWRTdGF0ZT1rKSxnLnByb3BzPWQsZy5zdGF0ZT1rLGcuY29udGV4dD1sLGQ9aCk6KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudERpZE1vdW50JiYoYi5mbGFnc3w9NCksZD0hMSl9ZWxzZXtnPWIuc3RhdGVOb2RlO3lnKGEsYik7aD1iLm1lbW9pemVkUHJvcHM7bD1iLnR5cGU9PT1iLmVsZW1lbnRUeXBlP2g6bGcoYi50eXBlLGgpO2cucHJvcHM9bDtBPWIucGVuZGluZ1Byb3BzO3A9Zy5jb250ZXh0O2s9Yy5jb250ZXh0VHlwZTtcIm9iamVjdFwiPT09dHlwZW9mIGsmJm51bGwhPT1rP2s9dmcoayk6KGs9RmYoYyk/RGY6TS5jdXJyZW50LGs9RWYoYixrKSk7dmFyIEM9Yy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7KG49XCJmdW5jdGlvblwiPT09dHlwZW9mIEN8fFxuXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUpfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc3x8KGghPT1BfHxwIT09aykmJk5nKGIsZyxkLGspO3dnPSExO3A9Yi5tZW1vaXplZFN0YXRlO2cuc3RhdGU9cDtDZyhiLGQsZyxlKTt2YXIgeD1iLm1lbW9pemVkU3RhdGU7aCE9PUF8fHAhPT14fHxOLmN1cnJlbnR8fHdnPyhcImZ1bmN0aW9uXCI9PT10eXBlb2YgQyYmKEdnKGIsYyxDLGQpLHg9Yi5tZW1vaXplZFN0YXRlKSwobD13Z3x8TGcoYixjLGwsZCxwLHgsaykpPyhufHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50V2lsbFVwZGF0ZXx8KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxVcGRhdGUmJmcuY29tcG9uZW50V2lsbFVwZGF0ZShkLFxueCxrKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSYmZy5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShkLHgsaykpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudERpZFVwZGF0ZSYmKGIuZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYoYi5mbGFnc3w9MjU2KSk6KFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudERpZFVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcD09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxoPT09YS5tZW1vaXplZFByb3BzJiZwPT09YS5tZW1vaXplZFN0YXRlfHwoYi5mbGFnc3w9MjU2KSxiLm1lbW9pemVkUHJvcHM9ZCxiLm1lbW9pemVkU3RhdGU9eCksZy5wcm9wcz1kLGcuc3RhdGU9eCxnLmNvbnRleHQ9ayxkPWwpOihcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGV8fFxuaD09PWEubWVtb2l6ZWRQcm9wcyYmcD09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxoPT09YS5tZW1vaXplZFByb3BzJiZwPT09YS5tZW1vaXplZFN0YXRlfHwoYi5mbGFnc3w9MjU2KSxkPSExKX1yZXR1cm4gcWkoYSxiLGMsZCxmLGUpfVxuZnVuY3Rpb24gcWkoYSxiLGMsZCxlLGYpe29pKGEsYik7dmFyIGc9MCE9PShiLmZsYWdzJjY0KTtpZighZCYmIWcpcmV0dXJuIGUmJktmKGIsYywhMSksaGkoYSxiLGYpO2Q9Yi5zdGF0ZU5vZGU7ZWkuY3VycmVudD1iO3ZhciBoPWcmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBjLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj9udWxsOmQucmVuZGVyKCk7Yi5mbGFnc3w9MTtudWxsIT09YSYmZz8oYi5jaGlsZD1ZZyhiLGEuY2hpbGQsbnVsbCxmKSxiLmNoaWxkPVlnKGIsbnVsbCxoLGYpKTpmaShhLGIsaCxmKTtiLm1lbW9pemVkU3RhdGU9ZC5zdGF0ZTtlJiZLZihiLGMsITApO3JldHVybiBiLmNoaWxkfWZ1bmN0aW9uIHJpKGEpe3ZhciBiPWEuc3RhdGVOb2RlO2IucGVuZGluZ0NvbnRleHQ/SGYoYSxiLnBlbmRpbmdDb250ZXh0LGIucGVuZGluZ0NvbnRleHQhPT1iLmNvbnRleHQpOmIuY29udGV4dCYmSGYoYSxiLmNvbnRleHQsITEpO2VoKGEsYi5jb250YWluZXJJbmZvKX1cbnZhciBzaT17ZGVoeWRyYXRlZDpudWxsLHJldHJ5TGFuZTowfTtcbmZ1bmN0aW9uIHRpKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcyxlPVAuY3VycmVudCxmPSExLGc7KGc9MCE9PShiLmZsYWdzJjY0KSl8fChnPW51bGwhPT1hJiZudWxsPT09YS5tZW1vaXplZFN0YXRlPyExOjAhPT0oZSYyKSk7Zz8oZj0hMCxiLmZsYWdzJj0tNjUpOm51bGwhPT1hJiZudWxsPT09YS5tZW1vaXplZFN0YXRlfHx2b2lkIDA9PT1kLmZhbGxiYWNrfHwhMD09PWQudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2t8fChlfD0xKTtJKFAsZSYxKTtpZihudWxsPT09YSl7dm9pZCAwIT09ZC5mYWxsYmFjayYmcGgoYik7YT1kLmNoaWxkcmVuO2U9ZC5mYWxsYmFjaztpZihmKXJldHVybiBhPXVpKGIsYSxlLGMpLGIuY2hpbGQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOmN9LGIubWVtb2l6ZWRTdGF0ZT1zaSxhO2lmKFwibnVtYmVyXCI9PT10eXBlb2YgZC51bnN0YWJsZV9leHBlY3RlZExvYWRUaW1lKXJldHVybiBhPXVpKGIsYSxlLGMpLGIuY2hpbGQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOmN9LFxuYi5tZW1vaXplZFN0YXRlPXNpLGIubGFuZXM9MzM1NTQ0MzIsYTtjPXZpKHttb2RlOlwidmlzaWJsZVwiLGNoaWxkcmVuOmF9LGIubW9kZSxjLG51bGwpO2MucmV0dXJuPWI7cmV0dXJuIGIuY2hpbGQ9Y31pZihudWxsIT09YS5tZW1vaXplZFN0YXRlKXtpZihmKXJldHVybiBkPXdpKGEsYixkLmNoaWxkcmVuLGQuZmFsbGJhY2ssYyksZj1iLmNoaWxkLGU9YS5jaGlsZC5tZW1vaXplZFN0YXRlLGYubWVtb2l6ZWRTdGF0ZT1udWxsPT09ZT97YmFzZUxhbmVzOmN9OntiYXNlTGFuZXM6ZS5iYXNlTGFuZXN8Y30sZi5jaGlsZExhbmVzPWEuY2hpbGRMYW5lcyZ+YyxiLm1lbW9pemVkU3RhdGU9c2ksZDtjPXhpKGEsYixkLmNoaWxkcmVuLGMpO2IubWVtb2l6ZWRTdGF0ZT1udWxsO3JldHVybiBjfWlmKGYpcmV0dXJuIGQ9d2koYSxiLGQuY2hpbGRyZW4sZC5mYWxsYmFjayxjKSxmPWIuY2hpbGQsZT1hLmNoaWxkLm1lbW9pemVkU3RhdGUsZi5tZW1vaXplZFN0YXRlPW51bGw9PT1lP3tiYXNlTGFuZXM6Y306XG57YmFzZUxhbmVzOmUuYmFzZUxhbmVzfGN9LGYuY2hpbGRMYW5lcz1hLmNoaWxkTGFuZXMmfmMsYi5tZW1vaXplZFN0YXRlPXNpLGQ7Yz14aShhLGIsZC5jaGlsZHJlbixjKTtiLm1lbW9pemVkU3RhdGU9bnVsbDtyZXR1cm4gY31mdW5jdGlvbiB1aShhLGIsYyxkKXt2YXIgZT1hLm1vZGUsZj1hLmNoaWxkO2I9e21vZGU6XCJoaWRkZW5cIixjaGlsZHJlbjpifTswPT09KGUmMikmJm51bGwhPT1mPyhmLmNoaWxkTGFuZXM9MCxmLnBlbmRpbmdQcm9wcz1iKTpmPXZpKGIsZSwwLG51bGwpO2M9WGcoYyxlLGQsbnVsbCk7Zi5yZXR1cm49YTtjLnJldHVybj1hO2Yuc2libGluZz1jO2EuY2hpbGQ9ZjtyZXR1cm4gY31cbmZ1bmN0aW9uIHhpKGEsYixjLGQpe3ZhciBlPWEuY2hpbGQ7YT1lLnNpYmxpbmc7Yz1UZyhlLHttb2RlOlwidmlzaWJsZVwiLGNoaWxkcmVuOmN9KTswPT09KGIubW9kZSYyKSYmKGMubGFuZXM9ZCk7Yy5yZXR1cm49YjtjLnNpYmxpbmc9bnVsbDtudWxsIT09YSYmKGEubmV4dEVmZmVjdD1udWxsLGEuZmxhZ3M9OCxiLmZpcnN0RWZmZWN0PWIubGFzdEVmZmVjdD1hKTtyZXR1cm4gYi5jaGlsZD1jfVxuZnVuY3Rpb24gd2koYSxiLGMsZCxlKXt2YXIgZj1iLm1vZGUsZz1hLmNoaWxkO2E9Zy5zaWJsaW5nO3ZhciBoPXttb2RlOlwiaGlkZGVuXCIsY2hpbGRyZW46Y307MD09PShmJjIpJiZiLmNoaWxkIT09Zz8oYz1iLmNoaWxkLGMuY2hpbGRMYW5lcz0wLGMucGVuZGluZ1Byb3BzPWgsZz1jLmxhc3RFZmZlY3QsbnVsbCE9PWc/KGIuZmlyc3RFZmZlY3Q9Yy5maXJzdEVmZmVjdCxiLmxhc3RFZmZlY3Q9ZyxnLm5leHRFZmZlY3Q9bnVsbCk6Yi5maXJzdEVmZmVjdD1iLmxhc3RFZmZlY3Q9bnVsbCk6Yz1UZyhnLGgpO251bGwhPT1hP2Q9VGcoYSxkKTooZD1YZyhkLGYsZSxudWxsKSxkLmZsYWdzfD0yKTtkLnJldHVybj1iO2MucmV0dXJuPWI7Yy5zaWJsaW5nPWQ7Yi5jaGlsZD1jO3JldHVybiBkfWZ1bmN0aW9uIHlpKGEsYil7YS5sYW5lc3w9Yjt2YXIgYz1hLmFsdGVybmF0ZTtudWxsIT09YyYmKGMubGFuZXN8PWIpO3NnKGEucmV0dXJuLGIpfVxuZnVuY3Rpb24gemkoYSxiLGMsZCxlLGYpe3ZhciBnPWEubWVtb2l6ZWRTdGF0ZTtudWxsPT09Zz9hLm1lbW9pemVkU3RhdGU9e2lzQmFja3dhcmRzOmIscmVuZGVyaW5nOm51bGwscmVuZGVyaW5nU3RhcnRUaW1lOjAsbGFzdDpkLHRhaWw6Yyx0YWlsTW9kZTplLGxhc3RFZmZlY3Q6Zn06KGcuaXNCYWNrd2FyZHM9YixnLnJlbmRlcmluZz1udWxsLGcucmVuZGVyaW5nU3RhcnRUaW1lPTAsZy5sYXN0PWQsZy50YWlsPWMsZy50YWlsTW9kZT1lLGcubGFzdEVmZmVjdD1mKX1cbmZ1bmN0aW9uIEFpKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcyxlPWQucmV2ZWFsT3JkZXIsZj1kLnRhaWw7ZmkoYSxiLGQuY2hpbGRyZW4sYyk7ZD1QLmN1cnJlbnQ7aWYoMCE9PShkJjIpKWQ9ZCYxfDIsYi5mbGFnc3w9NjQ7ZWxzZXtpZihudWxsIT09YSYmMCE9PShhLmZsYWdzJjY0KSlhOmZvcihhPWIuY2hpbGQ7bnVsbCE9PWE7KXtpZigxMz09PWEudGFnKW51bGwhPT1hLm1lbW9pemVkU3RhdGUmJnlpKGEsYyk7ZWxzZSBpZigxOT09PWEudGFnKXlpKGEsYyk7ZWxzZSBpZihudWxsIT09YS5jaGlsZCl7YS5jaGlsZC5yZXR1cm49YTthPWEuY2hpbGQ7Y29udGludWV9aWYoYT09PWIpYnJlYWsgYTtmb3IoO251bGw9PT1hLnNpYmxpbmc7KXtpZihudWxsPT09YS5yZXR1cm58fGEucmV0dXJuPT09YilicmVhayBhO2E9YS5yZXR1cm59YS5zaWJsaW5nLnJldHVybj1hLnJldHVybjthPWEuc2libGluZ31kJj0xfUkoUCxkKTtpZigwPT09KGIubW9kZSYyKSliLm1lbW9pemVkU3RhdGU9XG5udWxsO2Vsc2Ugc3dpdGNoKGUpe2Nhc2UgXCJmb3J3YXJkc1wiOmM9Yi5jaGlsZDtmb3IoZT1udWxsO251bGwhPT1jOylhPWMuYWx0ZXJuYXRlLG51bGwhPT1hJiZudWxsPT09aWgoYSkmJihlPWMpLGM9Yy5zaWJsaW5nO2M9ZTtudWxsPT09Yz8oZT1iLmNoaWxkLGIuY2hpbGQ9bnVsbCk6KGU9Yy5zaWJsaW5nLGMuc2libGluZz1udWxsKTt6aShiLCExLGUsYyxmLGIubGFzdEVmZmVjdCk7YnJlYWs7Y2FzZSBcImJhY2t3YXJkc1wiOmM9bnVsbDtlPWIuY2hpbGQ7Zm9yKGIuY2hpbGQ9bnVsbDtudWxsIT09ZTspe2E9ZS5hbHRlcm5hdGU7aWYobnVsbCE9PWEmJm51bGw9PT1paChhKSl7Yi5jaGlsZD1lO2JyZWFrfWE9ZS5zaWJsaW5nO2Uuc2libGluZz1jO2M9ZTtlPWF9emkoYiwhMCxjLG51bGwsZixiLmxhc3RFZmZlY3QpO2JyZWFrO2Nhc2UgXCJ0b2dldGhlclwiOnppKGIsITEsbnVsbCxudWxsLHZvaWQgMCxiLmxhc3RFZmZlY3QpO2JyZWFrO2RlZmF1bHQ6Yi5tZW1vaXplZFN0YXRlPW51bGx9cmV0dXJuIGIuY2hpbGR9XG5mdW5jdGlvbiBoaShhLGIsYyl7bnVsbCE9PWEmJihiLmRlcGVuZGVuY2llcz1hLmRlcGVuZGVuY2llcyk7RGd8PWIubGFuZXM7aWYoMCE9PShjJmIuY2hpbGRMYW5lcykpe2lmKG51bGwhPT1hJiZiLmNoaWxkIT09YS5jaGlsZCl0aHJvdyBFcnJvcih5KDE1MykpO2lmKG51bGwhPT1iLmNoaWxkKXthPWIuY2hpbGQ7Yz1UZyhhLGEucGVuZGluZ1Byb3BzKTtiLmNoaWxkPWM7Zm9yKGMucmV0dXJuPWI7bnVsbCE9PWEuc2libGluZzspYT1hLnNpYmxpbmcsYz1jLnNpYmxpbmc9VGcoYSxhLnBlbmRpbmdQcm9wcyksYy5yZXR1cm49YjtjLnNpYmxpbmc9bnVsbH1yZXR1cm4gYi5jaGlsZH1yZXR1cm4gbnVsbH12YXIgQmksQ2ksRGksRWk7XG5CaT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1iLmNoaWxkO251bGwhPT1jOyl7aWYoNT09PWMudGFnfHw2PT09Yy50YWcpYS5hcHBlbmRDaGlsZChjLnN0YXRlTm9kZSk7ZWxzZSBpZig0IT09Yy50YWcmJm51bGwhPT1jLmNoaWxkKXtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX1pZihjPT09YilicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGMucmV0dXJuPT09YilyZXR1cm47Yz1jLnJldHVybn1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2M9Yy5zaWJsaW5nfX07Q2k9ZnVuY3Rpb24oKXt9O1xuRGk9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YS5tZW1vaXplZFByb3BzO2lmKGUhPT1kKXthPWIuc3RhdGVOb2RlO2RoKGFoLmN1cnJlbnQpO3ZhciBmPW51bGw7c3dpdGNoKGMpe2Nhc2UgXCJpbnB1dFwiOmU9WWEoYSxlKTtkPVlhKGEsZCk7Zj1bXTticmVhaztjYXNlIFwib3B0aW9uXCI6ZT1lYihhLGUpO2Q9ZWIoYSxkKTtmPVtdO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjplPW0oe30sZSx7dmFsdWU6dm9pZCAwfSk7ZD1tKHt9LGQse3ZhbHVlOnZvaWQgMH0pO2Y9W107YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6ZT1nYihhLGUpO2Q9Z2IoYSxkKTtmPVtdO2JyZWFrO2RlZmF1bHQ6XCJmdW5jdGlvblwiIT09dHlwZW9mIGUub25DbGljayYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGQub25DbGljayYmKGEub25jbGljaz1qZil9dmIoYyxkKTt2YXIgZztjPW51bGw7Zm9yKGwgaW4gZSlpZighZC5oYXNPd25Qcm9wZXJ0eShsKSYmZS5oYXNPd25Qcm9wZXJ0eShsKSYmbnVsbCE9ZVtsXSlpZihcInN0eWxlXCI9PT1cbmwpe3ZhciBoPWVbbF07Zm9yKGcgaW4gaCloLmhhc093blByb3BlcnR5KGcpJiYoY3x8KGM9e30pLGNbZ109XCJcIil9ZWxzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIiE9PWwmJlwiY2hpbGRyZW5cIiE9PWwmJlwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCIhPT1sJiZcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiIT09bCYmXCJhdXRvRm9jdXNcIiE9PWwmJihjYS5oYXNPd25Qcm9wZXJ0eShsKT9mfHwoZj1bXSk6KGY9Znx8W10pLnB1c2gobCxudWxsKSk7Zm9yKGwgaW4gZCl7dmFyIGs9ZFtsXTtoPW51bGwhPWU/ZVtsXTp2b2lkIDA7aWYoZC5oYXNPd25Qcm9wZXJ0eShsKSYmayE9PWgmJihudWxsIT1rfHxudWxsIT1oKSlpZihcInN0eWxlXCI9PT1sKWlmKGgpe2ZvcihnIGluIGgpIWguaGFzT3duUHJvcGVydHkoZyl8fGsmJmsuaGFzT3duUHJvcGVydHkoZyl8fChjfHwoYz17fSksY1tnXT1cIlwiKTtmb3IoZyBpbiBrKWsuaGFzT3duUHJvcGVydHkoZykmJmhbZ10hPT1rW2ddJiYoY3x8XG4oYz17fSksY1tnXT1rW2ddKX1lbHNlIGN8fChmfHwoZj1bXSksZi5wdXNoKGwsYykpLGM9aztlbHNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT09bD8oaz1rP2suX19odG1sOnZvaWQgMCxoPWg/aC5fX2h0bWw6dm9pZCAwLG51bGwhPWsmJmghPT1rJiYoZj1mfHxbXSkucHVzaChsLGspKTpcImNoaWxkcmVuXCI9PT1sP1wic3RyaW5nXCIhPT10eXBlb2YgayYmXCJudW1iZXJcIiE9PXR5cGVvZiBrfHwoZj1mfHxbXSkucHVzaChsLFwiXCIrayk6XCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIiE9PWwmJlwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCIhPT1sJiYoY2EuaGFzT3duUHJvcGVydHkobCk/KG51bGwhPWsmJlwib25TY3JvbGxcIj09PWwmJkcoXCJzY3JvbGxcIixhKSxmfHxoPT09a3x8KGY9W10pKTpcIm9iamVjdFwiPT09dHlwZW9mIGsmJm51bGwhPT1rJiZrLiQkdHlwZW9mPT09R2E/ay50b1N0cmluZygpOihmPWZ8fFtdKS5wdXNoKGwsaykpfWMmJihmPWZ8fFtdKS5wdXNoKFwic3R5bGVcIixcbmMpO3ZhciBsPWY7aWYoYi51cGRhdGVRdWV1ZT1sKWIuZmxhZ3N8PTR9fTtFaT1mdW5jdGlvbihhLGIsYyxkKXtjIT09ZCYmKGIuZmxhZ3N8PTQpfTtmdW5jdGlvbiBGaShhLGIpe2lmKCFsaClzd2l0Y2goYS50YWlsTW9kZSl7Y2FzZSBcImhpZGRlblwiOmI9YS50YWlsO2Zvcih2YXIgYz1udWxsO251bGwhPT1iOyludWxsIT09Yi5hbHRlcm5hdGUmJihjPWIpLGI9Yi5zaWJsaW5nO251bGw9PT1jP2EudGFpbD1udWxsOmMuc2libGluZz1udWxsO2JyZWFrO2Nhc2UgXCJjb2xsYXBzZWRcIjpjPWEudGFpbDtmb3IodmFyIGQ9bnVsbDtudWxsIT09YzspbnVsbCE9PWMuYWx0ZXJuYXRlJiYoZD1jKSxjPWMuc2libGluZztudWxsPT09ZD9ifHxudWxsPT09YS50YWlsP2EudGFpbD1udWxsOmEudGFpbC5zaWJsaW5nPW51bGw6ZC5zaWJsaW5nPW51bGx9fVxuZnVuY3Rpb24gR2koYSxiLGMpe3ZhciBkPWIucGVuZGluZ1Byb3BzO3N3aXRjaChiLnRhZyl7Y2FzZSAyOmNhc2UgMTY6Y2FzZSAxNTpjYXNlIDA6Y2FzZSAxMTpjYXNlIDc6Y2FzZSA4OmNhc2UgMTI6Y2FzZSA5OmNhc2UgMTQ6cmV0dXJuIG51bGw7Y2FzZSAxOnJldHVybiBGZihiLnR5cGUpJiZHZigpLG51bGw7Y2FzZSAzOmZoKCk7SChOKTtIKE0pO3VoKCk7ZD1iLnN0YXRlTm9kZTtkLnBlbmRpbmdDb250ZXh0JiYoZC5jb250ZXh0PWQucGVuZGluZ0NvbnRleHQsZC5wZW5kaW5nQ29udGV4dD1udWxsKTtpZihudWxsPT09YXx8bnVsbD09PWEuY2hpbGQpcmgoYik/Yi5mbGFnc3w9NDpkLmh5ZHJhdGV8fChiLmZsYWdzfD0yNTYpO0NpKGIpO3JldHVybiBudWxsO2Nhc2UgNTpoaChiKTt2YXIgZT1kaChjaC5jdXJyZW50KTtjPWIudHlwZTtpZihudWxsIT09YSYmbnVsbCE9Yi5zdGF0ZU5vZGUpRGkoYSxiLGMsZCxlKSxhLnJlZiE9PWIucmVmJiYoYi5mbGFnc3w9MTI4KTtlbHNle2lmKCFkKXtpZihudWxsPT09XG5iLnN0YXRlTm9kZSl0aHJvdyBFcnJvcih5KDE2NikpO3JldHVybiBudWxsfWE9ZGgoYWguY3VycmVudCk7aWYocmgoYikpe2Q9Yi5zdGF0ZU5vZGU7Yz1iLnR5cGU7dmFyIGY9Yi5tZW1vaXplZFByb3BzO2Rbd2ZdPWI7ZFt4Zl09Zjtzd2l0Y2goYyl7Y2FzZSBcImRpYWxvZ1wiOkcoXCJjYW5jZWxcIixkKTtHKFwiY2xvc2VcIixkKTticmVhaztjYXNlIFwiaWZyYW1lXCI6Y2FzZSBcIm9iamVjdFwiOmNhc2UgXCJlbWJlZFwiOkcoXCJsb2FkXCIsZCk7YnJlYWs7Y2FzZSBcInZpZGVvXCI6Y2FzZSBcImF1ZGlvXCI6Zm9yKGE9MDthPFhlLmxlbmd0aDthKyspRyhYZVthXSxkKTticmVhaztjYXNlIFwic291cmNlXCI6RyhcImVycm9yXCIsZCk7YnJlYWs7Y2FzZSBcImltZ1wiOmNhc2UgXCJpbWFnZVwiOmNhc2UgXCJsaW5rXCI6RyhcImVycm9yXCIsZCk7RyhcImxvYWRcIixkKTticmVhaztjYXNlIFwiZGV0YWlsc1wiOkcoXCJ0b2dnbGVcIixkKTticmVhaztjYXNlIFwiaW5wdXRcIjpaYShkLGYpO0coXCJpbnZhbGlkXCIsZCk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmQuX3dyYXBwZXJTdGF0ZT1cbnt3YXNNdWx0aXBsZTohIWYubXVsdGlwbGV9O0coXCJpbnZhbGlkXCIsZCk7YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6aGIoZCxmKSxHKFwiaW52YWxpZFwiLGQpfXZiKGMsZik7YT1udWxsO2Zvcih2YXIgZyBpbiBmKWYuaGFzT3duUHJvcGVydHkoZykmJihlPWZbZ10sXCJjaGlsZHJlblwiPT09Zz9cInN0cmluZ1wiPT09dHlwZW9mIGU/ZC50ZXh0Q29udGVudCE9PWUmJihhPVtcImNoaWxkcmVuXCIsZV0pOlwibnVtYmVyXCI9PT10eXBlb2YgZSYmZC50ZXh0Q29udGVudCE9PVwiXCIrZSYmKGE9W1wiY2hpbGRyZW5cIixcIlwiK2VdKTpjYS5oYXNPd25Qcm9wZXJ0eShnKSYmbnVsbCE9ZSYmXCJvblNjcm9sbFwiPT09ZyYmRyhcInNjcm9sbFwiLGQpKTtzd2l0Y2goYyl7Y2FzZSBcImlucHV0XCI6VmEoZCk7Y2IoZCxmLCEwKTticmVhaztjYXNlIFwidGV4dGFyZWFcIjpWYShkKTtqYihkKTticmVhaztjYXNlIFwic2VsZWN0XCI6Y2FzZSBcIm9wdGlvblwiOmJyZWFrO2RlZmF1bHQ6XCJmdW5jdGlvblwiPT09dHlwZW9mIGYub25DbGljayYmKGQub25jbGljaz1cbmpmKX1kPWE7Yi51cGRhdGVRdWV1ZT1kO251bGwhPT1kJiYoYi5mbGFnc3w9NCl9ZWxzZXtnPTk9PT1lLm5vZGVUeXBlP2U6ZS5vd25lckRvY3VtZW50O2E9PT1rYi5odG1sJiYoYT1sYihjKSk7YT09PWtiLmh0bWw/XCJzY3JpcHRcIj09PWM/KGE9Zy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGEuaW5uZXJIVE1MPVwiPHNjcmlwdD5cXHgzYy9zY3JpcHQ+XCIsYT1hLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCkpOlwic3RyaW5nXCI9PT10eXBlb2YgZC5pcz9hPWcuY3JlYXRlRWxlbWVudChjLHtpczpkLmlzfSk6KGE9Zy5jcmVhdGVFbGVtZW50KGMpLFwic2VsZWN0XCI9PT1jJiYoZz1hLGQubXVsdGlwbGU/Zy5tdWx0aXBsZT0hMDpkLnNpemUmJihnLnNpemU9ZC5zaXplKSkpOmE9Zy5jcmVhdGVFbGVtZW50TlMoYSxjKTthW3dmXT1iO2FbeGZdPWQ7QmkoYSxiLCExLCExKTtiLnN0YXRlTm9kZT1hO2c9d2IoYyxkKTtzd2l0Y2goYyl7Y2FzZSBcImRpYWxvZ1wiOkcoXCJjYW5jZWxcIixhKTtHKFwiY2xvc2VcIixhKTtcbmU9ZDticmVhaztjYXNlIFwiaWZyYW1lXCI6Y2FzZSBcIm9iamVjdFwiOmNhc2UgXCJlbWJlZFwiOkcoXCJsb2FkXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJ2aWRlb1wiOmNhc2UgXCJhdWRpb1wiOmZvcihlPTA7ZTxYZS5sZW5ndGg7ZSsrKUcoWGVbZV0sYSk7ZT1kO2JyZWFrO2Nhc2UgXCJzb3VyY2VcIjpHKFwiZXJyb3JcIixhKTtlPWQ7YnJlYWs7Y2FzZSBcImltZ1wiOmNhc2UgXCJpbWFnZVwiOmNhc2UgXCJsaW5rXCI6RyhcImVycm9yXCIsYSk7RyhcImxvYWRcIixhKTtlPWQ7YnJlYWs7Y2FzZSBcImRldGFpbHNcIjpHKFwidG9nZ2xlXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJpbnB1dFwiOlphKGEsZCk7ZT1ZYShhLGQpO0coXCJpbnZhbGlkXCIsYSk7YnJlYWs7Y2FzZSBcIm9wdGlvblwiOmU9ZWIoYSxkKTticmVhaztjYXNlIFwic2VsZWN0XCI6YS5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIWQubXVsdGlwbGV9O2U9bSh7fSxkLHt2YWx1ZTp2b2lkIDB9KTtHKFwiaW52YWxpZFwiLGEpO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmhiKGEsZCk7ZT1cbmdiKGEsZCk7RyhcImludmFsaWRcIixhKTticmVhaztkZWZhdWx0OmU9ZH12YihjLGUpO3ZhciBoPWU7Zm9yKGYgaW4gaClpZihoLmhhc093blByb3BlcnR5KGYpKXt2YXIgaz1oW2ZdO1wic3R5bGVcIj09PWY/dGIoYSxrKTpcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PT1mPyhrPWs/ay5fX2h0bWw6dm9pZCAwLG51bGwhPWsmJm9iKGEsaykpOlwiY2hpbGRyZW5cIj09PWY/XCJzdHJpbmdcIj09PXR5cGVvZiBrPyhcInRleHRhcmVhXCIhPT1jfHxcIlwiIT09aykmJnBiKGEsayk6XCJudW1iZXJcIj09PXR5cGVvZiBrJiZwYihhLFwiXCIrayk6XCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIiE9PWYmJlwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCIhPT1mJiZcImF1dG9Gb2N1c1wiIT09ZiYmKGNhLmhhc093blByb3BlcnR5KGYpP251bGwhPWsmJlwib25TY3JvbGxcIj09PWYmJkcoXCJzY3JvbGxcIixhKTpudWxsIT1rJiZxYShhLGYsayxnKSl9c3dpdGNoKGMpe2Nhc2UgXCJpbnB1dFwiOlZhKGEpO2NiKGEsZCwhMSk7XG5icmVhaztjYXNlIFwidGV4dGFyZWFcIjpWYShhKTtqYihhKTticmVhaztjYXNlIFwib3B0aW9uXCI6bnVsbCE9ZC52YWx1ZSYmYS5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLFwiXCIrU2EoZC52YWx1ZSkpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjphLm11bHRpcGxlPSEhZC5tdWx0aXBsZTtmPWQudmFsdWU7bnVsbCE9Zj9mYihhLCEhZC5tdWx0aXBsZSxmLCExKTpudWxsIT1kLmRlZmF1bHRWYWx1ZSYmZmIoYSwhIWQubXVsdGlwbGUsZC5kZWZhdWx0VmFsdWUsITApO2JyZWFrO2RlZmF1bHQ6XCJmdW5jdGlvblwiPT09dHlwZW9mIGUub25DbGljayYmKGEub25jbGljaz1qZil9bWYoYyxkKSYmKGIuZmxhZ3N8PTQpfW51bGwhPT1iLnJlZiYmKGIuZmxhZ3N8PTEyOCl9cmV0dXJuIG51bGw7Y2FzZSA2OmlmKGEmJm51bGwhPWIuc3RhdGVOb2RlKUVpKGEsYixhLm1lbW9pemVkUHJvcHMsZCk7ZWxzZXtpZihcInN0cmluZ1wiIT09dHlwZW9mIGQmJm51bGw9PT1iLnN0YXRlTm9kZSl0aHJvdyBFcnJvcih5KDE2NikpO1xuYz1kaChjaC5jdXJyZW50KTtkaChhaC5jdXJyZW50KTtyaChiKT8oZD1iLnN0YXRlTm9kZSxjPWIubWVtb2l6ZWRQcm9wcyxkW3dmXT1iLGQubm9kZVZhbHVlIT09YyYmKGIuZmxhZ3N8PTQpKTooZD0oOT09PWMubm9kZVR5cGU/YzpjLm93bmVyRG9jdW1lbnQpLmNyZWF0ZVRleHROb2RlKGQpLGRbd2ZdPWIsYi5zdGF0ZU5vZGU9ZCl9cmV0dXJuIG51bGw7Y2FzZSAxMzpIKFApO2Q9Yi5tZW1vaXplZFN0YXRlO2lmKDAhPT0oYi5mbGFncyY2NCkpcmV0dXJuIGIubGFuZXM9YyxiO2Q9bnVsbCE9PWQ7Yz0hMTtudWxsPT09YT92b2lkIDAhPT1iLm1lbW9pemVkUHJvcHMuZmFsbGJhY2smJnJoKGIpOmM9bnVsbCE9PWEubWVtb2l6ZWRTdGF0ZTtpZihkJiYhYyYmMCE9PShiLm1vZGUmMikpaWYobnVsbD09PWEmJiEwIT09Yi5tZW1vaXplZFByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrfHwwIT09KFAuY3VycmVudCYxKSkwPT09ViYmKFY9Myk7ZWxzZXtpZigwPT09Vnx8Mz09PVYpVj1cbjQ7bnVsbD09PVV8fDA9PT0oRGcmMTM0MjE3NzI3KSYmMD09PShIaSYxMzQyMTc3MjcpfHxJaShVLFcpfWlmKGR8fGMpYi5mbGFnc3w9NDtyZXR1cm4gbnVsbDtjYXNlIDQ6cmV0dXJuIGZoKCksQ2koYiksbnVsbD09PWEmJmNmKGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLG51bGw7Y2FzZSAxMDpyZXR1cm4gcmcoYiksbnVsbDtjYXNlIDE3OnJldHVybiBGZihiLnR5cGUpJiZHZigpLG51bGw7Y2FzZSAxOTpIKFApO2Q9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGw9PT1kKXJldHVybiBudWxsO2Y9MCE9PShiLmZsYWdzJjY0KTtnPWQucmVuZGVyaW5nO2lmKG51bGw9PT1nKWlmKGYpRmkoZCwhMSk7ZWxzZXtpZigwIT09Vnx8bnVsbCE9PWEmJjAhPT0oYS5mbGFncyY2NCkpZm9yKGE9Yi5jaGlsZDtudWxsIT09YTspe2c9aWgoYSk7aWYobnVsbCE9PWcpe2IuZmxhZ3N8PTY0O0ZpKGQsITEpO2Y9Zy51cGRhdGVRdWV1ZTtudWxsIT09ZiYmKGIudXBkYXRlUXVldWU9ZixiLmZsYWdzfD00KTtcbm51bGw9PT1kLmxhc3RFZmZlY3QmJihiLmZpcnN0RWZmZWN0PW51bGwpO2IubGFzdEVmZmVjdD1kLmxhc3RFZmZlY3Q7ZD1jO2ZvcihjPWIuY2hpbGQ7bnVsbCE9PWM7KWY9YyxhPWQsZi5mbGFncyY9MixmLm5leHRFZmZlY3Q9bnVsbCxmLmZpcnN0RWZmZWN0PW51bGwsZi5sYXN0RWZmZWN0PW51bGwsZz1mLmFsdGVybmF0ZSxudWxsPT09Zz8oZi5jaGlsZExhbmVzPTAsZi5sYW5lcz1hLGYuY2hpbGQ9bnVsbCxmLm1lbW9pemVkUHJvcHM9bnVsbCxmLm1lbW9pemVkU3RhdGU9bnVsbCxmLnVwZGF0ZVF1ZXVlPW51bGwsZi5kZXBlbmRlbmNpZXM9bnVsbCxmLnN0YXRlTm9kZT1udWxsKTooZi5jaGlsZExhbmVzPWcuY2hpbGRMYW5lcyxmLmxhbmVzPWcubGFuZXMsZi5jaGlsZD1nLmNoaWxkLGYubWVtb2l6ZWRQcm9wcz1nLm1lbW9pemVkUHJvcHMsZi5tZW1vaXplZFN0YXRlPWcubWVtb2l6ZWRTdGF0ZSxmLnVwZGF0ZVF1ZXVlPWcudXBkYXRlUXVldWUsZi50eXBlPWcudHlwZSxhPWcuZGVwZW5kZW5jaWVzLFxuZi5kZXBlbmRlbmNpZXM9bnVsbD09PWE/bnVsbDp7bGFuZXM6YS5sYW5lcyxmaXJzdENvbnRleHQ6YS5maXJzdENvbnRleHR9KSxjPWMuc2libGluZztJKFAsUC5jdXJyZW50JjF8Mik7cmV0dXJuIGIuY2hpbGR9YT1hLnNpYmxpbmd9bnVsbCE9PWQudGFpbCYmTygpPkppJiYoYi5mbGFnc3w9NjQsZj0hMCxGaShkLCExKSxiLmxhbmVzPTMzNTU0NDMyKX1lbHNle2lmKCFmKWlmKGE9aWgoZyksbnVsbCE9PWEpe2lmKGIuZmxhZ3N8PTY0LGY9ITAsYz1hLnVwZGF0ZVF1ZXVlLG51bGwhPT1jJiYoYi51cGRhdGVRdWV1ZT1jLGIuZmxhZ3N8PTQpLEZpKGQsITApLG51bGw9PT1kLnRhaWwmJlwiaGlkZGVuXCI9PT1kLnRhaWxNb2RlJiYhZy5hbHRlcm5hdGUmJiFsaClyZXR1cm4gYj1iLmxhc3RFZmZlY3Q9ZC5sYXN0RWZmZWN0LG51bGwhPT1iJiYoYi5uZXh0RWZmZWN0PW51bGwpLG51bGx9ZWxzZSAyKk8oKS1kLnJlbmRlcmluZ1N0YXJ0VGltZT5KaSYmMTA3Mzc0MTgyNCE9PWMmJihiLmZsYWdzfD1cbjY0LGY9ITAsRmkoZCwhMSksYi5sYW5lcz0zMzU1NDQzMik7ZC5pc0JhY2t3YXJkcz8oZy5zaWJsaW5nPWIuY2hpbGQsYi5jaGlsZD1nKTooYz1kLmxhc3QsbnVsbCE9PWM/Yy5zaWJsaW5nPWc6Yi5jaGlsZD1nLGQubGFzdD1nKX1yZXR1cm4gbnVsbCE9PWQudGFpbD8oYz1kLnRhaWwsZC5yZW5kZXJpbmc9YyxkLnRhaWw9Yy5zaWJsaW5nLGQubGFzdEVmZmVjdD1iLmxhc3RFZmZlY3QsZC5yZW5kZXJpbmdTdGFydFRpbWU9TygpLGMuc2libGluZz1udWxsLGI9UC5jdXJyZW50LEkoUCxmP2ImMXwyOmImMSksYyk6bnVsbDtjYXNlIDIzOmNhc2UgMjQ6cmV0dXJuIEtpKCksbnVsbCE9PWEmJm51bGwhPT1hLm1lbW9pemVkU3RhdGUhPT0obnVsbCE9PWIubWVtb2l6ZWRTdGF0ZSkmJlwidW5zdGFibGUtZGVmZXItd2l0aG91dC1oaWRpbmdcIiE9PWQubW9kZSYmKGIuZmxhZ3N8PTQpLG51bGx9dGhyb3cgRXJyb3IoeSgxNTYsYi50YWcpKTt9XG5mdW5jdGlvbiBMaShhKXtzd2l0Y2goYS50YWcpe2Nhc2UgMTpGZihhLnR5cGUpJiZHZigpO3ZhciBiPWEuZmxhZ3M7cmV0dXJuIGImNDA5Nj8oYS5mbGFncz1iJi00MDk3fDY0LGEpOm51bGw7Y2FzZSAzOmZoKCk7SChOKTtIKE0pO3VoKCk7Yj1hLmZsYWdzO2lmKDAhPT0oYiY2NCkpdGhyb3cgRXJyb3IoeSgyODUpKTthLmZsYWdzPWImLTQwOTd8NjQ7cmV0dXJuIGE7Y2FzZSA1OnJldHVybiBoaChhKSxudWxsO2Nhc2UgMTM6cmV0dXJuIEgoUCksYj1hLmZsYWdzLGImNDA5Nj8oYS5mbGFncz1iJi00MDk3fDY0LGEpOm51bGw7Y2FzZSAxOTpyZXR1cm4gSChQKSxudWxsO2Nhc2UgNDpyZXR1cm4gZmgoKSxudWxsO2Nhc2UgMTA6cmV0dXJuIHJnKGEpLG51bGw7Y2FzZSAyMzpjYXNlIDI0OnJldHVybiBLaSgpLG51bGw7ZGVmYXVsdDpyZXR1cm4gbnVsbH19XG5mdW5jdGlvbiBNaShhLGIpe3RyeXt2YXIgYz1cIlwiLGQ9YjtkbyBjKz1RYShkKSxkPWQucmV0dXJuO3doaWxlKGQpO3ZhciBlPWN9Y2F0Y2goZil7ZT1cIlxcbkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6IFwiK2YubWVzc2FnZStcIlxcblwiK2Yuc3RhY2t9cmV0dXJue3ZhbHVlOmEsc291cmNlOmIsc3RhY2s6ZX19ZnVuY3Rpb24gTmkoYSxiKXt0cnl7Y29uc29sZS5lcnJvcihiLnZhbHVlKX1jYXRjaChjKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgYzt9KX19dmFyIE9pPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBXZWFrTWFwP1dlYWtNYXA6TWFwO2Z1bmN0aW9uIFBpKGEsYixjKXtjPXpnKC0xLGMpO2MudGFnPTM7Yy5wYXlsb2FkPXtlbGVtZW50Om51bGx9O3ZhciBkPWIudmFsdWU7Yy5jYWxsYmFjaz1mdW5jdGlvbigpe1FpfHwoUWk9ITAsUmk9ZCk7TmkoYSxiKX07cmV0dXJuIGN9XG5mdW5jdGlvbiBTaShhLGIsYyl7Yz16ZygtMSxjKTtjLnRhZz0zO3ZhciBkPWEudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGQpe3ZhciBlPWIudmFsdWU7Yy5wYXlsb2FkPWZ1bmN0aW9uKCl7TmkoYSxiKTtyZXR1cm4gZChlKX19dmFyIGY9YS5zdGF0ZU5vZGU7bnVsbCE9PWYmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBmLmNvbXBvbmVudERpZENhdGNoJiYoYy5jYWxsYmFjaz1mdW5jdGlvbigpe1wiZnVuY3Rpb25cIiE9PXR5cGVvZiBkJiYobnVsbD09PVRpP1RpPW5ldyBTZXQoW3RoaXNdKTpUaS5hZGQodGhpcyksTmkoYSxiKSk7dmFyIGM9Yi5zdGFjazt0aGlzLmNvbXBvbmVudERpZENhdGNoKGIudmFsdWUse2NvbXBvbmVudFN0YWNrOm51bGwhPT1jP2M6XCJcIn0pfSk7cmV0dXJuIGN9dmFyIFVpPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBXZWFrU2V0P1dlYWtTZXQ6U2V0O1xuZnVuY3Rpb24gVmkoYSl7dmFyIGI9YS5yZWY7aWYobnVsbCE9PWIpaWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGIpdHJ5e2IobnVsbCl9Y2F0Y2goYyl7V2koYSxjKX1lbHNlIGIuY3VycmVudD1udWxsfWZ1bmN0aW9uIFhpKGEsYil7c3dpdGNoKGIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmNhc2UgMjI6cmV0dXJuO2Nhc2UgMTppZihiLmZsYWdzJjI1NiYmbnVsbCE9PWEpe3ZhciBjPWEubWVtb2l6ZWRQcm9wcyxkPWEubWVtb2l6ZWRTdGF0ZTthPWIuc3RhdGVOb2RlO2I9YS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShiLmVsZW1lbnRUeXBlPT09Yi50eXBlP2M6bGcoYi50eXBlLGMpLGQpO2EuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9Yn1yZXR1cm47Y2FzZSAzOmIuZmxhZ3MmMjU2JiZxZihiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtyZXR1cm47Y2FzZSA1OmNhc2UgNjpjYXNlIDQ6Y2FzZSAxNzpyZXR1cm59dGhyb3cgRXJyb3IoeSgxNjMpKTt9XG5mdW5jdGlvbiBZaShhLGIsYyl7c3dpdGNoKGMudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmNhc2UgMjI6Yj1jLnVwZGF0ZVF1ZXVlO2I9bnVsbCE9PWI/Yi5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWIpe2E9Yj1iLm5leHQ7ZG97aWYoMz09PShhLnRhZyYzKSl7dmFyIGQ9YS5jcmVhdGU7YS5kZXN0cm95PWQoKX1hPWEubmV4dH13aGlsZShhIT09Yil9Yj1jLnVwZGF0ZVF1ZXVlO2I9bnVsbCE9PWI/Yi5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWIpe2E9Yj1iLm5leHQ7ZG97dmFyIGU9YTtkPWUubmV4dDtlPWUudGFnOzAhPT0oZSY0KSYmMCE9PShlJjEpJiYoWmkoYyxhKSwkaShjLGEpKTthPWR9d2hpbGUoYSE9PWIpfXJldHVybjtjYXNlIDE6YT1jLnN0YXRlTm9kZTtjLmZsYWdzJjQmJihudWxsPT09Yj9hLmNvbXBvbmVudERpZE1vdW50KCk6KGQ9Yy5lbGVtZW50VHlwZT09PWMudHlwZT9iLm1lbW9pemVkUHJvcHM6bGcoYy50eXBlLGIubWVtb2l6ZWRQcm9wcyksYS5jb21wb25lbnREaWRVcGRhdGUoZCxcbmIubWVtb2l6ZWRTdGF0ZSxhLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKSkpO2I9Yy51cGRhdGVRdWV1ZTtudWxsIT09YiYmRWcoYyxiLGEpO3JldHVybjtjYXNlIDM6Yj1jLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1iKXthPW51bGw7aWYobnVsbCE9PWMuY2hpbGQpc3dpdGNoKGMuY2hpbGQudGFnKXtjYXNlIDU6YT1jLmNoaWxkLnN0YXRlTm9kZTticmVhaztjYXNlIDE6YT1jLmNoaWxkLnN0YXRlTm9kZX1FZyhjLGIsYSl9cmV0dXJuO2Nhc2UgNTphPWMuc3RhdGVOb2RlO251bGw9PT1iJiZjLmZsYWdzJjQmJm1mKGMudHlwZSxjLm1lbW9pemVkUHJvcHMpJiZhLmZvY3VzKCk7cmV0dXJuO2Nhc2UgNjpyZXR1cm47Y2FzZSA0OnJldHVybjtjYXNlIDEyOnJldHVybjtjYXNlIDEzOm51bGw9PT1jLm1lbW9pemVkU3RhdGUmJihjPWMuYWx0ZXJuYXRlLG51bGwhPT1jJiYoYz1jLm1lbW9pemVkU3RhdGUsbnVsbCE9PWMmJihjPWMuZGVoeWRyYXRlZCxudWxsIT09YyYmQ2MoYykpKSk7XG5yZXR1cm47Y2FzZSAxOTpjYXNlIDE3OmNhc2UgMjA6Y2FzZSAyMTpjYXNlIDIzOmNhc2UgMjQ6cmV0dXJufXRocm93IEVycm9yKHkoMTYzKSk7fVxuZnVuY3Rpb24gYWooYSxiKXtmb3IodmFyIGM9YTs7KXtpZig1PT09Yy50YWcpe3ZhciBkPWMuc3RhdGVOb2RlO2lmKGIpZD1kLnN0eWxlLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLnNldFByb3BlcnR5P2Quc2V0UHJvcGVydHkoXCJkaXNwbGF5XCIsXCJub25lXCIsXCJpbXBvcnRhbnRcIik6ZC5kaXNwbGF5PVwibm9uZVwiO2Vsc2V7ZD1jLnN0YXRlTm9kZTt2YXIgZT1jLm1lbW9pemVkUHJvcHMuc3R5bGU7ZT12b2lkIDAhPT1lJiZudWxsIT09ZSYmZS5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlcIik/ZS5kaXNwbGF5Om51bGw7ZC5zdHlsZS5kaXNwbGF5PXNiKFwiZGlzcGxheVwiLGUpfX1lbHNlIGlmKDY9PT1jLnRhZyljLnN0YXRlTm9kZS5ub2RlVmFsdWU9Yj9cIlwiOmMubWVtb2l6ZWRQcm9wcztlbHNlIGlmKCgyMyE9PWMudGFnJiYyNCE9PWMudGFnfHxudWxsPT09Yy5tZW1vaXplZFN0YXRlfHxjPT09YSkmJm51bGwhPT1jLmNoaWxkKXtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX1pZihjPT09XG5hKWJyZWFrO2Zvcig7bnVsbD09PWMuc2libGluZzspe2lmKG51bGw9PT1jLnJldHVybnx8Yy5yZXR1cm49PT1hKXJldHVybjtjPWMucmV0dXJufWMuc2libGluZy5yZXR1cm49Yy5yZXR1cm47Yz1jLnNpYmxpbmd9fVxuZnVuY3Rpb24gYmooYSxiKXtpZihNZiYmXCJmdW5jdGlvblwiPT09dHlwZW9mIE1mLm9uQ29tbWl0RmliZXJVbm1vdW50KXRyeXtNZi5vbkNvbW1pdEZpYmVyVW5tb3VudChMZixiKX1jYXRjaChmKXt9c3dpdGNoKGIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAyMjphPWIudXBkYXRlUXVldWU7aWYobnVsbCE9PWEmJihhPWEubGFzdEVmZmVjdCxudWxsIT09YSkpe3ZhciBjPWE9YS5uZXh0O2Rve3ZhciBkPWMsZT1kLmRlc3Ryb3k7ZD1kLnRhZztpZih2b2lkIDAhPT1lKWlmKDAhPT0oZCY0KSlaaShiLGMpO2Vsc2V7ZD1iO3RyeXtlKCl9Y2F0Y2goZil7V2koZCxmKX19Yz1jLm5leHR9d2hpbGUoYyE9PWEpfWJyZWFrO2Nhc2UgMTpWaShiKTthPWIuc3RhdGVOb2RlO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXthLnByb3BzPWIubWVtb2l6ZWRQcm9wcyxhLnN0YXRlPWIubWVtb2l6ZWRTdGF0ZSxhLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goZil7V2koYixcbmYpfWJyZWFrO2Nhc2UgNTpWaShiKTticmVhaztjYXNlIDQ6Y2ooYSxiKX19ZnVuY3Rpb24gZGooYSl7YS5hbHRlcm5hdGU9bnVsbDthLmNoaWxkPW51bGw7YS5kZXBlbmRlbmNpZXM9bnVsbDthLmZpcnN0RWZmZWN0PW51bGw7YS5sYXN0RWZmZWN0PW51bGw7YS5tZW1vaXplZFByb3BzPW51bGw7YS5tZW1vaXplZFN0YXRlPW51bGw7YS5wZW5kaW5nUHJvcHM9bnVsbDthLnJldHVybj1udWxsO2EudXBkYXRlUXVldWU9bnVsbH1mdW5jdGlvbiBlaihhKXtyZXR1cm4gNT09PWEudGFnfHwzPT09YS50YWd8fDQ9PT1hLnRhZ31cbmZ1bmN0aW9uIGZqKGEpe2E6e2Zvcih2YXIgYj1hLnJldHVybjtudWxsIT09Yjspe2lmKGVqKGIpKWJyZWFrIGE7Yj1iLnJldHVybn10aHJvdyBFcnJvcih5KDE2MCkpO312YXIgYz1iO2I9Yy5zdGF0ZU5vZGU7c3dpdGNoKGMudGFnKXtjYXNlIDU6dmFyIGQ9ITE7YnJlYWs7Y2FzZSAzOmI9Yi5jb250YWluZXJJbmZvO2Q9ITA7YnJlYWs7Y2FzZSA0OmI9Yi5jb250YWluZXJJbmZvO2Q9ITA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcih5KDE2MSkpO31jLmZsYWdzJjE2JiYocGIoYixcIlwiKSxjLmZsYWdzJj0tMTcpO2E6Yjpmb3IoYz1hOzspe2Zvcig7bnVsbD09PWMuc2libGluZzspe2lmKG51bGw9PT1jLnJldHVybnx8ZWooYy5yZXR1cm4pKXtjPW51bGw7YnJlYWsgYX1jPWMucmV0dXJufWMuc2libGluZy5yZXR1cm49Yy5yZXR1cm47Zm9yKGM9Yy5zaWJsaW5nOzUhPT1jLnRhZyYmNiE9PWMudGFnJiYxOCE9PWMudGFnOyl7aWYoYy5mbGFncyYyKWNvbnRpbnVlIGI7aWYobnVsbD09PVxuYy5jaGlsZHx8ND09PWMudGFnKWNvbnRpbnVlIGI7ZWxzZSBjLmNoaWxkLnJldHVybj1jLGM9Yy5jaGlsZH1pZighKGMuZmxhZ3MmMikpe2M9Yy5zdGF0ZU5vZGU7YnJlYWsgYX19ZD9naihhLGMsYik6aGooYSxjLGIpfVxuZnVuY3Rpb24gZ2ooYSxiLGMpe3ZhciBkPWEudGFnLGU9NT09PWR8fDY9PT1kO2lmKGUpYT1lP2Euc3RhdGVOb2RlOmEuc3RhdGVOb2RlLmluc3RhbmNlLGI/OD09PWMubm9kZVR5cGU/Yy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLGIpOmMuaW5zZXJ0QmVmb3JlKGEsYik6KDg9PT1jLm5vZGVUeXBlPyhiPWMucGFyZW50Tm9kZSxiLmluc2VydEJlZm9yZShhLGMpKTooYj1jLGIuYXBwZW5kQ2hpbGQoYSkpLGM9Yy5fcmVhY3RSb290Q29udGFpbmVyLG51bGwhPT1jJiZ2b2lkIDAhPT1jfHxudWxsIT09Yi5vbmNsaWNrfHwoYi5vbmNsaWNrPWpmKSk7ZWxzZSBpZig0IT09ZCYmKGE9YS5jaGlsZCxudWxsIT09YSkpZm9yKGdqKGEsYixjKSxhPWEuc2libGluZztudWxsIT09YTspZ2ooYSxiLGMpLGE9YS5zaWJsaW5nfVxuZnVuY3Rpb24gaGooYSxiLGMpe3ZhciBkPWEudGFnLGU9NT09PWR8fDY9PT1kO2lmKGUpYT1lP2Euc3RhdGVOb2RlOmEuc3RhdGVOb2RlLmluc3RhbmNlLGI/Yy5pbnNlcnRCZWZvcmUoYSxiKTpjLmFwcGVuZENoaWxkKGEpO2Vsc2UgaWYoNCE9PWQmJihhPWEuY2hpbGQsbnVsbCE9PWEpKWZvcihoaihhLGIsYyksYT1hLnNpYmxpbmc7bnVsbCE9PWE7KWhqKGEsYixjKSxhPWEuc2libGluZ31cbmZ1bmN0aW9uIGNqKGEsYil7Zm9yKHZhciBjPWIsZD0hMSxlLGY7Oyl7aWYoIWQpe2Q9Yy5yZXR1cm47YTpmb3IoOzspe2lmKG51bGw9PT1kKXRocm93IEVycm9yKHkoMTYwKSk7ZT1kLnN0YXRlTm9kZTtzd2l0Y2goZC50YWcpe2Nhc2UgNTpmPSExO2JyZWFrIGE7Y2FzZSAzOmU9ZS5jb250YWluZXJJbmZvO2Y9ITA7YnJlYWsgYTtjYXNlIDQ6ZT1lLmNvbnRhaW5lckluZm87Zj0hMDticmVhayBhfWQ9ZC5yZXR1cm59ZD0hMH1pZig1PT09Yy50YWd8fDY9PT1jLnRhZyl7YTpmb3IodmFyIGc9YSxoPWMsaz1oOzspaWYoYmooZyxrKSxudWxsIT09ay5jaGlsZCYmNCE9PWsudGFnKWsuY2hpbGQucmV0dXJuPWssaz1rLmNoaWxkO2Vsc2V7aWYoaz09PWgpYnJlYWsgYTtmb3IoO251bGw9PT1rLnNpYmxpbmc7KXtpZihudWxsPT09ay5yZXR1cm58fGsucmV0dXJuPT09aClicmVhayBhO2s9ay5yZXR1cm59ay5zaWJsaW5nLnJldHVybj1rLnJldHVybjtrPWsuc2libGluZ31mPyhnPWUsaD1jLnN0YXRlTm9kZSxcbjg9PT1nLm5vZGVUeXBlP2cucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKTpnLnJlbW92ZUNoaWxkKGgpKTplLnJlbW92ZUNoaWxkKGMuc3RhdGVOb2RlKX1lbHNlIGlmKDQ9PT1jLnRhZyl7aWYobnVsbCE9PWMuY2hpbGQpe2U9Yy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztmPSEwO2MuY2hpbGQucmV0dXJuPWM7Yz1jLmNoaWxkO2NvbnRpbnVlfX1lbHNlIGlmKGJqKGEsYyksbnVsbCE9PWMuY2hpbGQpe2MuY2hpbGQucmV0dXJuPWM7Yz1jLmNoaWxkO2NvbnRpbnVlfWlmKGM9PT1iKWJyZWFrO2Zvcig7bnVsbD09PWMuc2libGluZzspe2lmKG51bGw9PT1jLnJldHVybnx8Yy5yZXR1cm49PT1iKXJldHVybjtjPWMucmV0dXJuOzQ9PT1jLnRhZyYmKGQ9ITEpfWMuc2libGluZy5yZXR1cm49Yy5yZXR1cm47Yz1jLnNpYmxpbmd9fVxuZnVuY3Rpb24gaWooYSxiKXtzd2l0Y2goYi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDIyOnZhciBjPWIudXBkYXRlUXVldWU7Yz1udWxsIT09Yz9jLmxhc3RFZmZlY3Q6bnVsbDtpZihudWxsIT09Yyl7dmFyIGQ9Yz1jLm5leHQ7ZG8gMz09PShkLnRhZyYzKSYmKGE9ZC5kZXN0cm95LGQuZGVzdHJveT12b2lkIDAsdm9pZCAwIT09YSYmYSgpKSxkPWQubmV4dDt3aGlsZShkIT09Yyl9cmV0dXJuO2Nhc2UgMTpyZXR1cm47Y2FzZSA1OmM9Yi5zdGF0ZU5vZGU7aWYobnVsbCE9Yyl7ZD1iLm1lbW9pemVkUHJvcHM7dmFyIGU9bnVsbCE9PWE/YS5tZW1vaXplZFByb3BzOmQ7YT1iLnR5cGU7dmFyIGY9Yi51cGRhdGVRdWV1ZTtiLnVwZGF0ZVF1ZXVlPW51bGw7aWYobnVsbCE9PWYpe2NbeGZdPWQ7XCJpbnB1dFwiPT09YSYmXCJyYWRpb1wiPT09ZC50eXBlJiZudWxsIT1kLm5hbWUmJiRhKGMsZCk7d2IoYSxlKTtiPXdiKGEsZCk7Zm9yKGU9MDtlPGYubGVuZ3RoO2UrPVxuMil7dmFyIGc9ZltlXSxoPWZbZSsxXTtcInN0eWxlXCI9PT1nP3RiKGMsaCk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT09Zz9vYihjLGgpOlwiY2hpbGRyZW5cIj09PWc/cGIoYyxoKTpxYShjLGcsaCxiKX1zd2l0Y2goYSl7Y2FzZSBcImlucHV0XCI6YWIoYyxkKTticmVhaztjYXNlIFwidGV4dGFyZWFcIjppYihjLGQpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjphPWMuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZSxjLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU9ISFkLm11bHRpcGxlLGY9ZC52YWx1ZSxudWxsIT1mP2ZiKGMsISFkLm11bHRpcGxlLGYsITEpOmEhPT0hIWQubXVsdGlwbGUmJihudWxsIT1kLmRlZmF1bHRWYWx1ZT9mYihjLCEhZC5tdWx0aXBsZSxkLmRlZmF1bHRWYWx1ZSwhMCk6ZmIoYywhIWQubXVsdGlwbGUsZC5tdWx0aXBsZT9bXTpcIlwiLCExKSl9fX1yZXR1cm47Y2FzZSA2OmlmKG51bGw9PT1iLnN0YXRlTm9kZSl0aHJvdyBFcnJvcih5KDE2MikpO2Iuc3RhdGVOb2RlLm5vZGVWYWx1ZT1cbmIubWVtb2l6ZWRQcm9wcztyZXR1cm47Y2FzZSAzOmM9Yi5zdGF0ZU5vZGU7Yy5oeWRyYXRlJiYoYy5oeWRyYXRlPSExLENjKGMuY29udGFpbmVySW5mbykpO3JldHVybjtjYXNlIDEyOnJldHVybjtjYXNlIDEzOm51bGwhPT1iLm1lbW9pemVkU3RhdGUmJihqaj1PKCksYWooYi5jaGlsZCwhMCkpO2tqKGIpO3JldHVybjtjYXNlIDE5OmtqKGIpO3JldHVybjtjYXNlIDE3OnJldHVybjtjYXNlIDIzOmNhc2UgMjQ6YWooYixudWxsIT09Yi5tZW1vaXplZFN0YXRlKTtyZXR1cm59dGhyb3cgRXJyb3IoeSgxNjMpKTt9ZnVuY3Rpb24ga2ooYSl7dmFyIGI9YS51cGRhdGVRdWV1ZTtpZihudWxsIT09Yil7YS51cGRhdGVRdWV1ZT1udWxsO3ZhciBjPWEuc3RhdGVOb2RlO251bGw9PT1jJiYoYz1hLnN0YXRlTm9kZT1uZXcgVWkpO2IuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgZD1sai5iaW5kKG51bGwsYSxiKTtjLmhhcyhiKXx8KGMuYWRkKGIpLGIudGhlbihkLGQpKX0pfX1cbmZ1bmN0aW9uIG1qKGEsYil7cmV0dXJuIG51bGwhPT1hJiYoYT1hLm1lbW9pemVkU3RhdGUsbnVsbD09PWF8fG51bGwhPT1hLmRlaHlkcmF0ZWQpPyhiPWIubWVtb2l6ZWRTdGF0ZSxudWxsIT09YiYmbnVsbD09PWIuZGVoeWRyYXRlZCk6ITF9dmFyIG5qPU1hdGguY2VpbCxvaj1yYS5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLHBqPXJhLlJlYWN0Q3VycmVudE93bmVyLFg9MCxVPW51bGwsWT1udWxsLFc9MCxxaj0wLHJqPUJmKDApLFY9MCxzaj1udWxsLHRqPTAsRGc9MCxIaT0wLHVqPTAsdmo9bnVsbCxqaj0wLEppPUluZmluaXR5O2Z1bmN0aW9uIHdqKCl7Smk9TygpKzUwMH12YXIgWj1udWxsLFFpPSExLFJpPW51bGwsVGk9bnVsbCx4aj0hMSx5aj1udWxsLHpqPTkwLEFqPVtdLEJqPVtdLENqPW51bGwsRGo9MCxFaj1udWxsLEZqPS0xLEdqPTAsSGo9MCxJaj1udWxsLEpqPSExO2Z1bmN0aW9uIEhnKCl7cmV0dXJuIDAhPT0oWCY0OCk/TygpOi0xIT09Rmo/Rmo6Rmo9TygpfVxuZnVuY3Rpb24gSWcoYSl7YT1hLm1vZGU7aWYoMD09PShhJjIpKXJldHVybiAxO2lmKDA9PT0oYSY0KSlyZXR1cm4gOTk9PT1lZygpPzE6MjswPT09R2omJihHaj10aik7aWYoMCE9PWtnLnRyYW5zaXRpb24pezAhPT1IaiYmKEhqPW51bGwhPT12aj92ai5wZW5kaW5nTGFuZXM6MCk7YT1Hajt2YXIgYj00MTg2MTEyJn5IajtiJj0tYjswPT09YiYmKGE9NDE4NjExMiZ+YSxiPWEmLWEsMD09PWImJihiPTgxOTIpKTtyZXR1cm4gYn1hPWVnKCk7MCE9PShYJjQpJiY5OD09PWE/YT1YYygxMixHaik6KGE9U2MoYSksYT1YYyhhLEdqKSk7cmV0dXJuIGF9XG5mdW5jdGlvbiBKZyhhLGIsYyl7aWYoNTA8RGopdGhyb3cgRGo9MCxFaj1udWxsLEVycm9yKHkoMTg1KSk7YT1LaihhLGIpO2lmKG51bGw9PT1hKXJldHVybiBudWxsOyRjKGEsYixjKTthPT09VSYmKEhpfD1iLDQ9PT1WJiZJaShhLFcpKTt2YXIgZD1lZygpOzE9PT1iPzAhPT0oWCY4KSYmMD09PShYJjQ4KT9MaihhKTooTWooYSxjKSwwPT09WCYmKHdqKCksaWcoKSkpOigwPT09KFgmNCl8fDk4IT09ZCYmOTkhPT1kfHwobnVsbD09PUNqP0NqPW5ldyBTZXQoW2FdKTpDai5hZGQoYSkpLE1qKGEsYykpO3ZqPWF9ZnVuY3Rpb24gS2ooYSxiKXthLmxhbmVzfD1iO3ZhciBjPWEuYWx0ZXJuYXRlO251bGwhPT1jJiYoYy5sYW5lc3w9Yik7Yz1hO2ZvcihhPWEucmV0dXJuO251bGwhPT1hOylhLmNoaWxkTGFuZXN8PWIsYz1hLmFsdGVybmF0ZSxudWxsIT09YyYmKGMuY2hpbGRMYW5lc3w9YiksYz1hLGE9YS5yZXR1cm47cmV0dXJuIDM9PT1jLnRhZz9jLnN0YXRlTm9kZTpudWxsfVxuZnVuY3Rpb24gTWooYSxiKXtmb3IodmFyIGM9YS5jYWxsYmFja05vZGUsZD1hLnN1c3BlbmRlZExhbmVzLGU9YS5waW5nZWRMYW5lcyxmPWEuZXhwaXJhdGlvblRpbWVzLGc9YS5wZW5kaW5nTGFuZXM7MDxnOyl7dmFyIGg9MzEtVmMoZyksaz0xPDxoLGw9ZltoXTtpZigtMT09PWwpe2lmKDA9PT0oayZkKXx8MCE9PShrJmUpKXtsPWI7UmMoayk7dmFyIG49RjtmW2hdPTEwPD1uP2wrMjUwOjY8PW4/bCs1RTM6LTF9fWVsc2UgbDw9YiYmKGEuZXhwaXJlZExhbmVzfD1rKTtnJj1+a31kPVVjKGEsYT09PVU/VzowKTtiPUY7aWYoMD09PWQpbnVsbCE9PWMmJihjIT09WmYmJlBmKGMpLGEuY2FsbGJhY2tOb2RlPW51bGwsYS5jYWxsYmFja1ByaW9yaXR5PTApO2Vsc2V7aWYobnVsbCE9PWMpe2lmKGEuY2FsbGJhY2tQcmlvcml0eT09PWIpcmV0dXJuO2MhPT1aZiYmUGYoYyl9MTU9PT1iPyhjPUxqLmJpbmQobnVsbCxhKSxudWxsPT09YWc/KGFnPVtjXSxiZz1PZihVZixqZykpOmFnLnB1c2goYyksXG5jPVpmKToxND09PWI/Yz1oZyg5OSxMai5iaW5kKG51bGwsYSkpOihjPVRjKGIpLGM9aGcoYyxOai5iaW5kKG51bGwsYSkpKTthLmNhbGxiYWNrUHJpb3JpdHk9YjthLmNhbGxiYWNrTm9kZT1jfX1cbmZ1bmN0aW9uIE5qKGEpe0ZqPS0xO0hqPUdqPTA7aWYoMCE9PShYJjQ4KSl0aHJvdyBFcnJvcih5KDMyNykpO3ZhciBiPWEuY2FsbGJhY2tOb2RlO2lmKE9qKCkmJmEuY2FsbGJhY2tOb2RlIT09YilyZXR1cm4gbnVsbDt2YXIgYz1VYyhhLGE9PT1VP1c6MCk7aWYoMD09PWMpcmV0dXJuIG51bGw7dmFyIGQ9Yzt2YXIgZT1YO1h8PTE2O3ZhciBmPVBqKCk7aWYoVSE9PWF8fFchPT1kKXdqKCksUWooYSxkKTtkbyB0cnl7UmooKTticmVha31jYXRjaChoKXtTaihhLGgpfXdoaWxlKDEpO3FnKCk7b2ouY3VycmVudD1mO1g9ZTtudWxsIT09WT9kPTA6KFU9bnVsbCxXPTAsZD1WKTtpZigwIT09KHRqJkhpKSlRaihhLDApO2Vsc2UgaWYoMCE9PWQpezI9PT1kJiYoWHw9NjQsYS5oeWRyYXRlJiYoYS5oeWRyYXRlPSExLHFmKGEuY29udGFpbmVySW5mbykpLGM9V2MoYSksMCE9PWMmJihkPVRqKGEsYykpKTtpZigxPT09ZCl0aHJvdyBiPXNqLFFqKGEsMCksSWkoYSxjKSxNaihhLE8oKSksYjthLmZpbmlzaGVkV29yaz1cbmEuY3VycmVudC5hbHRlcm5hdGU7YS5maW5pc2hlZExhbmVzPWM7c3dpdGNoKGQpe2Nhc2UgMDpjYXNlIDE6dGhyb3cgRXJyb3IoeSgzNDUpKTtjYXNlIDI6VWooYSk7YnJlYWs7Y2FzZSAzOklpKGEsYyk7aWYoKGMmNjI5MTQ1NjApPT09YyYmKGQ9amorNTAwLU8oKSwxMDxkKSl7aWYoMCE9PVVjKGEsMCkpYnJlYWs7ZT1hLnN1c3BlbmRlZExhbmVzO2lmKChlJmMpIT09Yyl7SGcoKTthLnBpbmdlZExhbmVzfD1hLnN1c3BlbmRlZExhbmVzJmU7YnJlYWt9YS50aW1lb3V0SGFuZGxlPW9mKFVqLmJpbmQobnVsbCxhKSxkKTticmVha31VaihhKTticmVhaztjYXNlIDQ6SWkoYSxjKTtpZigoYyY0MTg2MTEyKT09PWMpYnJlYWs7ZD1hLmV2ZW50VGltZXM7Zm9yKGU9LTE7MDxjOyl7dmFyIGc9MzEtVmMoYyk7Zj0xPDxnO2c9ZFtnXTtnPmUmJihlPWcpO2MmPX5mfWM9ZTtjPU8oKS1jO2M9KDEyMD5jPzEyMDo0ODA+Yz80ODA6MTA4MD5jPzEwODA6MTkyMD5jPzE5MjA6M0UzPmM/M0UzOjQzMjA+XG5jPzQzMjA6MTk2MCpuaihjLzE5NjApKS1jO2lmKDEwPGMpe2EudGltZW91dEhhbmRsZT1vZihVai5iaW5kKG51bGwsYSksYyk7YnJlYWt9VWooYSk7YnJlYWs7Y2FzZSA1OlVqKGEpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoeSgzMjkpKTt9fU1qKGEsTygpKTtyZXR1cm4gYS5jYWxsYmFja05vZGU9PT1iP05qLmJpbmQobnVsbCxhKTpudWxsfWZ1bmN0aW9uIElpKGEsYil7YiY9fnVqO2ImPX5IaTthLnN1c3BlbmRlZExhbmVzfD1iO2EucGluZ2VkTGFuZXMmPX5iO2ZvcihhPWEuZXhwaXJhdGlvblRpbWVzOzA8Yjspe3ZhciBjPTMxLVZjKGIpLGQ9MTw8YzthW2NdPS0xO2ImPX5kfX1cbmZ1bmN0aW9uIExqKGEpe2lmKDAhPT0oWCY0OCkpdGhyb3cgRXJyb3IoeSgzMjcpKTtPaigpO2lmKGE9PT1VJiYwIT09KGEuZXhwaXJlZExhbmVzJlcpKXt2YXIgYj1XO3ZhciBjPVRqKGEsYik7MCE9PSh0aiZIaSkmJihiPVVjKGEsYiksYz1UaihhLGIpKX1lbHNlIGI9VWMoYSwwKSxjPVRqKGEsYik7MCE9PWEudGFnJiYyPT09YyYmKFh8PTY0LGEuaHlkcmF0ZSYmKGEuaHlkcmF0ZT0hMSxxZihhLmNvbnRhaW5lckluZm8pKSxiPVdjKGEpLDAhPT1iJiYoYz1UaihhLGIpKSk7aWYoMT09PWMpdGhyb3cgYz1zaixRaihhLDApLElpKGEsYiksTWooYSxPKCkpLGM7YS5maW5pc2hlZFdvcms9YS5jdXJyZW50LmFsdGVybmF0ZTthLmZpbmlzaGVkTGFuZXM9YjtVaihhKTtNaihhLE8oKSk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBWaigpe2lmKG51bGwhPT1Dail7dmFyIGE9Q2o7Q2o9bnVsbDthLmZvckVhY2goZnVuY3Rpb24oYSl7YS5leHBpcmVkTGFuZXN8PTI0JmEucGVuZGluZ0xhbmVzO01qKGEsTygpKX0pfWlnKCl9ZnVuY3Rpb24gV2ooYSxiKXt2YXIgYz1YO1h8PTE7dHJ5e3JldHVybiBhKGIpfWZpbmFsbHl7WD1jLDA9PT1YJiYod2ooKSxpZygpKX19ZnVuY3Rpb24gWGooYSxiKXt2YXIgYz1YO1gmPS0yO1h8PTg7dHJ5e3JldHVybiBhKGIpfWZpbmFsbHl7WD1jLDA9PT1YJiYod2ooKSxpZygpKX19ZnVuY3Rpb24gbmkoYSxiKXtJKHJqLHFqKTtxanw9Yjt0anw9Yn1mdW5jdGlvbiBLaSgpe3FqPXJqLmN1cnJlbnQ7SChyail9XG5mdW5jdGlvbiBRaihhLGIpe2EuZmluaXNoZWRXb3JrPW51bGw7YS5maW5pc2hlZExhbmVzPTA7dmFyIGM9YS50aW1lb3V0SGFuZGxlOy0xIT09YyYmKGEudGltZW91dEhhbmRsZT0tMSxwZihjKSk7aWYobnVsbCE9PVkpZm9yKGM9WS5yZXR1cm47bnVsbCE9PWM7KXt2YXIgZD1jO3N3aXRjaChkLnRhZyl7Y2FzZSAxOmQ9ZC50eXBlLmNoaWxkQ29udGV4dFR5cGVzO251bGwhPT1kJiZ2b2lkIDAhPT1kJiZHZigpO2JyZWFrO2Nhc2UgMzpmaCgpO0goTik7SChNKTt1aCgpO2JyZWFrO2Nhc2UgNTpoaChkKTticmVhaztjYXNlIDQ6ZmgoKTticmVhaztjYXNlIDEzOkgoUCk7YnJlYWs7Y2FzZSAxOTpIKFApO2JyZWFrO2Nhc2UgMTA6cmcoZCk7YnJlYWs7Y2FzZSAyMzpjYXNlIDI0OktpKCl9Yz1jLnJldHVybn1VPWE7WT1UZyhhLmN1cnJlbnQsbnVsbCk7Vz1xaj10aj1iO1Y9MDtzaj1udWxsO3VqPUhpPURnPTB9XG5mdW5jdGlvbiBTaihhLGIpe2Rve3ZhciBjPVk7dHJ5e3FnKCk7dmguY3VycmVudD1HaDtpZih5aCl7Zm9yKHZhciBkPVIubWVtb2l6ZWRTdGF0ZTtudWxsIT09ZDspe3ZhciBlPWQucXVldWU7bnVsbCE9PWUmJihlLnBlbmRpbmc9bnVsbCk7ZD1kLm5leHR9eWg9ITF9eGg9MDtUPVM9Uj1udWxsO3poPSExO3BqLmN1cnJlbnQ9bnVsbDtpZihudWxsPT09Y3x8bnVsbD09PWMucmV0dXJuKXtWPTE7c2o9YjtZPW51bGw7YnJlYWt9YTp7dmFyIGY9YSxnPWMucmV0dXJuLGg9YyxrPWI7Yj1XO2guZmxhZ3N8PTIwNDg7aC5maXJzdEVmZmVjdD1oLmxhc3RFZmZlY3Q9bnVsbDtpZihudWxsIT09ayYmXCJvYmplY3RcIj09PXR5cGVvZiBrJiZcImZ1bmN0aW9uXCI9PT10eXBlb2Ygay50aGVuKXt2YXIgbD1rO2lmKDA9PT0oaC5tb2RlJjIpKXt2YXIgbj1oLmFsdGVybmF0ZTtuPyhoLnVwZGF0ZVF1ZXVlPW4udXBkYXRlUXVldWUsaC5tZW1vaXplZFN0YXRlPW4ubWVtb2l6ZWRTdGF0ZSxoLmxhbmVzPW4ubGFuZXMpOlxuKGgudXBkYXRlUXVldWU9bnVsbCxoLm1lbW9pemVkU3RhdGU9bnVsbCl9dmFyIEE9MCE9PShQLmN1cnJlbnQmMSkscD1nO2Rve3ZhciBDO2lmKEM9MTM9PT1wLnRhZyl7dmFyIHg9cC5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT14KUM9bnVsbCE9PXguZGVoeWRyYXRlZD8hMDohMTtlbHNle3ZhciB3PXAubWVtb2l6ZWRQcm9wcztDPXZvaWQgMD09PXcuZmFsbGJhY2s/ITE6ITAhPT13LnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrPyEwOkE/ITE6ITB9fWlmKEMpe3ZhciB6PXAudXBkYXRlUXVldWU7aWYobnVsbD09PXope3ZhciB1PW5ldyBTZXQ7dS5hZGQobCk7cC51cGRhdGVRdWV1ZT11fWVsc2Ugei5hZGQobCk7aWYoMD09PShwLm1vZGUmMikpe3AuZmxhZ3N8PTY0O2guZmxhZ3N8PTE2Mzg0O2guZmxhZ3MmPS0yOTgxO2lmKDE9PT1oLnRhZylpZihudWxsPT09aC5hbHRlcm5hdGUpaC50YWc9MTc7ZWxzZXt2YXIgdD16ZygtMSwxKTt0LnRhZz0yO0FnKGgsdCl9aC5sYW5lc3w9MTticmVhayBhfWs9XG52b2lkIDA7aD1iO3ZhciBxPWYucGluZ0NhY2hlO251bGw9PT1xPyhxPWYucGluZ0NhY2hlPW5ldyBPaSxrPW5ldyBTZXQscS5zZXQobCxrKSk6KGs9cS5nZXQobCksdm9pZCAwPT09ayYmKGs9bmV3IFNldCxxLnNldChsLGspKSk7aWYoIWsuaGFzKGgpKXtrLmFkZChoKTt2YXIgdj1Zai5iaW5kKG51bGwsZixsLGgpO2wudGhlbih2LHYpfXAuZmxhZ3N8PTQwOTY7cC5sYW5lcz1iO2JyZWFrIGF9cD1wLnJldHVybn13aGlsZShudWxsIT09cCk7az1FcnJvcigoUmEoaC50eXBlKXx8XCJBIFJlYWN0IGNvbXBvbmVudFwiKStcIiBzdXNwZW5kZWQgd2hpbGUgcmVuZGVyaW5nLCBidXQgbm8gZmFsbGJhY2sgVUkgd2FzIHNwZWNpZmllZC5cXG5cXG5BZGQgYSA8U3VzcGVuc2UgZmFsbGJhY2s9Li4uPiBjb21wb25lbnQgaGlnaGVyIGluIHRoZSB0cmVlIHRvIHByb3ZpZGUgYSBsb2FkaW5nIGluZGljYXRvciBvciBwbGFjZWhvbGRlciB0byBkaXNwbGF5LlwiKX01IT09ViYmKFY9Mik7az1NaShrLGgpO3A9XG5nO2Rve3N3aXRjaChwLnRhZyl7Y2FzZSAzOmY9aztwLmZsYWdzfD00MDk2O2ImPS1iO3AubGFuZXN8PWI7dmFyIEo9UGkocCxmLGIpO0JnKHAsSik7YnJlYWsgYTtjYXNlIDE6Zj1rO3ZhciBLPXAudHlwZSxRPXAuc3RhdGVOb2RlO2lmKDA9PT0ocC5mbGFncyY2NCkmJihcImZ1bmN0aW9uXCI9PT10eXBlb2YgSy5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3J8fG51bGwhPT1RJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgUS5jb21wb25lbnREaWRDYXRjaCYmKG51bGw9PT1UaXx8IVRpLmhhcyhRKSkpKXtwLmZsYWdzfD00MDk2O2ImPS1iO3AubGFuZXN8PWI7dmFyIEw9U2kocCxmLGIpO0JnKHAsTCk7YnJlYWsgYX19cD1wLnJldHVybn13aGlsZShudWxsIT09cCl9WmooYyl9Y2F0Y2godmEpe2I9dmE7WT09PWMmJm51bGwhPT1jJiYoWT1jPWMucmV0dXJuKTtjb250aW51ZX1icmVha313aGlsZSgxKX1cbmZ1bmN0aW9uIFBqKCl7dmFyIGE9b2ouY3VycmVudDtvai5jdXJyZW50PUdoO3JldHVybiBudWxsPT09YT9HaDphfWZ1bmN0aW9uIFRqKGEsYil7dmFyIGM9WDtYfD0xNjt2YXIgZD1QaigpO1U9PT1hJiZXPT09Ynx8UWooYSxiKTtkbyB0cnl7YWsoKTticmVha31jYXRjaChlKXtTaihhLGUpfXdoaWxlKDEpO3FnKCk7WD1jO29qLmN1cnJlbnQ9ZDtpZihudWxsIT09WSl0aHJvdyBFcnJvcih5KDI2MSkpO1U9bnVsbDtXPTA7cmV0dXJuIFZ9ZnVuY3Rpb24gYWsoKXtmb3IoO251bGwhPT1ZOyliayhZKX1mdW5jdGlvbiBSaigpe2Zvcig7bnVsbCE9PVkmJiFRZigpOyliayhZKX1mdW5jdGlvbiBiayhhKXt2YXIgYj1jayhhLmFsdGVybmF0ZSxhLHFqKTthLm1lbW9pemVkUHJvcHM9YS5wZW5kaW5nUHJvcHM7bnVsbD09PWI/WmooYSk6WT1iO3BqLmN1cnJlbnQ9bnVsbH1cbmZ1bmN0aW9uIFpqKGEpe3ZhciBiPWE7ZG97dmFyIGM9Yi5hbHRlcm5hdGU7YT1iLnJldHVybjtpZigwPT09KGIuZmxhZ3MmMjA0OCkpe2M9R2koYyxiLHFqKTtpZihudWxsIT09Yyl7WT1jO3JldHVybn1jPWI7aWYoMjQhPT1jLnRhZyYmMjMhPT1jLnRhZ3x8bnVsbD09PWMubWVtb2l6ZWRTdGF0ZXx8MCE9PShxaiYxMDczNzQxODI0KXx8MD09PShjLm1vZGUmNCkpe2Zvcih2YXIgZD0wLGU9Yy5jaGlsZDtudWxsIT09ZTspZHw9ZS5sYW5lc3xlLmNoaWxkTGFuZXMsZT1lLnNpYmxpbmc7Yy5jaGlsZExhbmVzPWR9bnVsbCE9PWEmJjA9PT0oYS5mbGFncyYyMDQ4KSYmKG51bGw9PT1hLmZpcnN0RWZmZWN0JiYoYS5maXJzdEVmZmVjdD1iLmZpcnN0RWZmZWN0KSxudWxsIT09Yi5sYXN0RWZmZWN0JiYobnVsbCE9PWEubGFzdEVmZmVjdCYmKGEubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWIuZmlyc3RFZmZlY3QpLGEubGFzdEVmZmVjdD1iLmxhc3RFZmZlY3QpLDE8Yi5mbGFncyYmKG51bGwhPT1cbmEubGFzdEVmZmVjdD9hLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1iOmEuZmlyc3RFZmZlY3Q9YixhLmxhc3RFZmZlY3Q9YikpfWVsc2V7Yz1MaShiKTtpZihudWxsIT09Yyl7Yy5mbGFncyY9MjA0NztZPWM7cmV0dXJufW51bGwhPT1hJiYoYS5maXJzdEVmZmVjdD1hLmxhc3RFZmZlY3Q9bnVsbCxhLmZsYWdzfD0yMDQ4KX1iPWIuc2libGluZztpZihudWxsIT09Yil7WT1iO3JldHVybn1ZPWI9YX13aGlsZShudWxsIT09Yik7MD09PVYmJihWPTUpfWZ1bmN0aW9uIFVqKGEpe3ZhciBiPWVnKCk7Z2coOTksZGsuYmluZChudWxsLGEsYikpO3JldHVybiBudWxsfVxuZnVuY3Rpb24gZGsoYSxiKXtkbyBPaigpO3doaWxlKG51bGwhPT15aik7aWYoMCE9PShYJjQ4KSl0aHJvdyBFcnJvcih5KDMyNykpO3ZhciBjPWEuZmluaXNoZWRXb3JrO2lmKG51bGw9PT1jKXJldHVybiBudWxsO2EuZmluaXNoZWRXb3JrPW51bGw7YS5maW5pc2hlZExhbmVzPTA7aWYoYz09PWEuY3VycmVudCl0aHJvdyBFcnJvcih5KDE3NykpO2EuY2FsbGJhY2tOb2RlPW51bGw7dmFyIGQ9Yy5sYW5lc3xjLmNoaWxkTGFuZXMsZT1kLGY9YS5wZW5kaW5nTGFuZXMmfmU7YS5wZW5kaW5nTGFuZXM9ZTthLnN1c3BlbmRlZExhbmVzPTA7YS5waW5nZWRMYW5lcz0wO2EuZXhwaXJlZExhbmVzJj1lO2EubXV0YWJsZVJlYWRMYW5lcyY9ZTthLmVudGFuZ2xlZExhbmVzJj1lO2U9YS5lbnRhbmdsZW1lbnRzO2Zvcih2YXIgZz1hLmV2ZW50VGltZXMsaD1hLmV4cGlyYXRpb25UaW1lczswPGY7KXt2YXIgaz0zMS1WYyhmKSxsPTE8PGs7ZVtrXT0wO2dba109LTE7aFtrXT0tMTtmJj1+bH1udWxsIT09XG5DaiYmMD09PShkJjI0KSYmQ2ouaGFzKGEpJiZDai5kZWxldGUoYSk7YT09PVUmJihZPVU9bnVsbCxXPTApOzE8Yy5mbGFncz9udWxsIT09Yy5sYXN0RWZmZWN0PyhjLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1jLGQ9Yy5maXJzdEVmZmVjdCk6ZD1jOmQ9Yy5maXJzdEVmZmVjdDtpZihudWxsIT09ZCl7ZT1YO1h8PTMyO3BqLmN1cnJlbnQ9bnVsbDtrZj1mZDtnPU5lKCk7aWYoT2UoZykpe2lmKFwic2VsZWN0aW9uU3RhcnRcImluIGcpaD17c3RhcnQ6Zy5zZWxlY3Rpb25TdGFydCxlbmQ6Zy5zZWxlY3Rpb25FbmR9O2Vsc2UgYTppZihoPShoPWcub3duZXJEb2N1bWVudCkmJmguZGVmYXVsdFZpZXd8fHdpbmRvdywobD1oLmdldFNlbGVjdGlvbiYmaC5nZXRTZWxlY3Rpb24oKSkmJjAhPT1sLnJhbmdlQ291bnQpe2g9bC5hbmNob3JOb2RlO2Y9bC5hbmNob3JPZmZzZXQ7az1sLmZvY3VzTm9kZTtsPWwuZm9jdXNPZmZzZXQ7dHJ5e2gubm9kZVR5cGUsay5ub2RlVHlwZX1jYXRjaCh2YSl7aD1udWxsO1xuYnJlYWsgYX12YXIgbj0wLEE9LTEscD0tMSxDPTAseD0wLHc9Zyx6PW51bGw7Yjpmb3IoOzspe2Zvcih2YXIgdTs7KXt3IT09aHx8MCE9PWYmJjMhPT13Lm5vZGVUeXBlfHwoQT1uK2YpO3chPT1rfHwwIT09bCYmMyE9PXcubm9kZVR5cGV8fChwPW4rbCk7Mz09PXcubm9kZVR5cGUmJihuKz13Lm5vZGVWYWx1ZS5sZW5ndGgpO2lmKG51bGw9PT0odT13LmZpcnN0Q2hpbGQpKWJyZWFrO3o9dzt3PXV9Zm9yKDs7KXtpZih3PT09ZylicmVhayBiO3o9PT1oJiYrK0M9PT1mJiYoQT1uKTt6PT09ayYmKyt4PT09bCYmKHA9bik7aWYobnVsbCE9PSh1PXcubmV4dFNpYmxpbmcpKWJyZWFrO3c9ejt6PXcucGFyZW50Tm9kZX13PXV9aD0tMT09PUF8fC0xPT09cD9udWxsOntzdGFydDpBLGVuZDpwfX1lbHNlIGg9bnVsbDtoPWh8fHtzdGFydDowLGVuZDowfX1lbHNlIGg9bnVsbDtsZj17Zm9jdXNlZEVsZW06ZyxzZWxlY3Rpb25SYW5nZTpofTtmZD0hMTtJaj1udWxsO0pqPSExO1o9ZDtkbyB0cnl7ZWsoKX1jYXRjaCh2YSl7aWYobnVsbD09PVxuWil0aHJvdyBFcnJvcih5KDMzMCkpO1dpKFosdmEpO1o9Wi5uZXh0RWZmZWN0fXdoaWxlKG51bGwhPT1aKTtJaj1udWxsO1o9ZDtkbyB0cnl7Zm9yKGc9YTtudWxsIT09Wjspe3ZhciB0PVouZmxhZ3M7dCYxNiYmcGIoWi5zdGF0ZU5vZGUsXCJcIik7aWYodCYxMjgpe3ZhciBxPVouYWx0ZXJuYXRlO2lmKG51bGwhPT1xKXt2YXIgdj1xLnJlZjtudWxsIT09diYmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiB2P3YobnVsbCk6di5jdXJyZW50PW51bGwpfX1zd2l0Y2godCYxMDM4KXtjYXNlIDI6ZmooWik7Wi5mbGFncyY9LTM7YnJlYWs7Y2FzZSA2OmZqKFopO1ouZmxhZ3MmPS0zO2lqKFouYWx0ZXJuYXRlLFopO2JyZWFrO2Nhc2UgMTAyNDpaLmZsYWdzJj0tMTAyNTticmVhaztjYXNlIDEwMjg6Wi5mbGFncyY9LTEwMjU7aWooWi5hbHRlcm5hdGUsWik7YnJlYWs7Y2FzZSA0OmlqKFouYWx0ZXJuYXRlLFopO2JyZWFrO2Nhc2UgODpoPVo7Y2ooZyxoKTt2YXIgSj1oLmFsdGVybmF0ZTtkaihoKTtudWxsIT09XG5KJiZkaihKKX1aPVoubmV4dEVmZmVjdH19Y2F0Y2godmEpe2lmKG51bGw9PT1aKXRocm93IEVycm9yKHkoMzMwKSk7V2koWix2YSk7Wj1aLm5leHRFZmZlY3R9d2hpbGUobnVsbCE9PVopO3Y9bGY7cT1OZSgpO3Q9di5mb2N1c2VkRWxlbTtnPXYuc2VsZWN0aW9uUmFuZ2U7aWYocSE9PXQmJnQmJnQub3duZXJEb2N1bWVudCYmTWUodC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0KSl7bnVsbCE9PWcmJk9lKHQpJiYocT1nLnN0YXJ0LHY9Zy5lbmQsdm9pZCAwPT09diYmKHY9cSksXCJzZWxlY3Rpb25TdGFydFwiaW4gdD8odC5zZWxlY3Rpb25TdGFydD1xLHQuc2VsZWN0aW9uRW5kPU1hdGgubWluKHYsdC52YWx1ZS5sZW5ndGgpKToodj0ocT10Lm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmcS5kZWZhdWx0Vmlld3x8d2luZG93LHYuZ2V0U2VsZWN0aW9uJiYodj12LmdldFNlbGVjdGlvbigpLGg9dC50ZXh0Q29udGVudC5sZW5ndGgsSj1NYXRoLm1pbihnLnN0YXJ0LGgpLGc9dm9pZCAwPT09XG5nLmVuZD9KOk1hdGgubWluKGcuZW5kLGgpLCF2LmV4dGVuZCYmSj5nJiYoaD1nLGc9SixKPWgpLGg9TGUodCxKKSxmPUxlKHQsZyksaCYmZiYmKDEhPT12LnJhbmdlQ291bnR8fHYuYW5jaG9yTm9kZSE9PWgubm9kZXx8di5hbmNob3JPZmZzZXQhPT1oLm9mZnNldHx8di5mb2N1c05vZGUhPT1mLm5vZGV8fHYuZm9jdXNPZmZzZXQhPT1mLm9mZnNldCkmJihxPXEuY3JlYXRlUmFuZ2UoKSxxLnNldFN0YXJ0KGgubm9kZSxoLm9mZnNldCksdi5yZW1vdmVBbGxSYW5nZXMoKSxKPmc/KHYuYWRkUmFuZ2UocSksdi5leHRlbmQoZi5ub2RlLGYub2Zmc2V0KSk6KHEuc2V0RW5kKGYubm9kZSxmLm9mZnNldCksdi5hZGRSYW5nZShxKSkpKSkpO3E9W107Zm9yKHY9dDt2PXYucGFyZW50Tm9kZTspMT09PXYubm9kZVR5cGUmJnEucHVzaCh7ZWxlbWVudDp2LGxlZnQ6di5zY3JvbGxMZWZ0LHRvcDp2LnNjcm9sbFRvcH0pO1wiZnVuY3Rpb25cIj09PXR5cGVvZiB0LmZvY3VzJiZ0LmZvY3VzKCk7Zm9yKHQ9XG4wO3Q8cS5sZW5ndGg7dCsrKXY9cVt0XSx2LmVsZW1lbnQuc2Nyb2xsTGVmdD12LmxlZnQsdi5lbGVtZW50LnNjcm9sbFRvcD12LnRvcH1mZD0hIWtmO2xmPWtmPW51bGw7YS5jdXJyZW50PWM7Wj1kO2RvIHRyeXtmb3IodD1hO251bGwhPT1aOyl7dmFyIEs9Wi5mbGFncztLJjM2JiZZaSh0LFouYWx0ZXJuYXRlLFopO2lmKEsmMTI4KXtxPXZvaWQgMDt2YXIgUT1aLnJlZjtpZihudWxsIT09USl7dmFyIEw9Wi5zdGF0ZU5vZGU7c3dpdGNoKFoudGFnKXtjYXNlIDU6cT1MO2JyZWFrO2RlZmF1bHQ6cT1MfVwiZnVuY3Rpb25cIj09PXR5cGVvZiBRP1EocSk6US5jdXJyZW50PXF9fVo9Wi5uZXh0RWZmZWN0fX1jYXRjaCh2YSl7aWYobnVsbD09PVopdGhyb3cgRXJyb3IoeSgzMzApKTtXaShaLHZhKTtaPVoubmV4dEVmZmVjdH13aGlsZShudWxsIT09Wik7Wj1udWxsOyRmKCk7WD1lfWVsc2UgYS5jdXJyZW50PWM7aWYoeGopeGo9ITEseWo9YSx6aj1iO2Vsc2UgZm9yKFo9ZDtudWxsIT09WjspYj1cbloubmV4dEVmZmVjdCxaLm5leHRFZmZlY3Q9bnVsbCxaLmZsYWdzJjgmJihLPVosSy5zaWJsaW5nPW51bGwsSy5zdGF0ZU5vZGU9bnVsbCksWj1iO2Q9YS5wZW5kaW5nTGFuZXM7MD09PWQmJihUaT1udWxsKTsxPT09ZD9hPT09RWo/RGorKzooRGo9MCxFaj1hKTpEaj0wO2M9Yy5zdGF0ZU5vZGU7aWYoTWYmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBNZi5vbkNvbW1pdEZpYmVyUm9vdCl0cnl7TWYub25Db21taXRGaWJlclJvb3QoTGYsYyx2b2lkIDAsNjQ9PT0oYy5jdXJyZW50LmZsYWdzJjY0KSl9Y2F0Y2godmEpe31NaihhLE8oKSk7aWYoUWkpdGhyb3cgUWk9ITEsYT1SaSxSaT1udWxsLGE7aWYoMCE9PShYJjgpKXJldHVybiBudWxsO2lnKCk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBlaygpe2Zvcig7bnVsbCE9PVo7KXt2YXIgYT1aLmFsdGVybmF0ZTtKanx8bnVsbD09PUlqfHwoMCE9PShaLmZsYWdzJjgpP2RjKFosSWopJiYoSmo9ITApOjEzPT09Wi50YWcmJm1qKGEsWikmJmRjKFosSWopJiYoSmo9ITApKTt2YXIgYj1aLmZsYWdzOzAhPT0oYiYyNTYpJiZYaShhLFopOzA9PT0oYiY1MTIpfHx4anx8KHhqPSEwLGhnKDk3LGZ1bmN0aW9uKCl7T2ooKTtyZXR1cm4gbnVsbH0pKTtaPVoubmV4dEVmZmVjdH19ZnVuY3Rpb24gT2ooKXtpZig5MCE9PXpqKXt2YXIgYT05Nzx6aj85Nzp6ajt6aj05MDtyZXR1cm4gZ2coYSxmayl9cmV0dXJuITF9ZnVuY3Rpb24gJGkoYSxiKXtBai5wdXNoKGIsYSk7eGp8fCh4aj0hMCxoZyg5NyxmdW5jdGlvbigpe09qKCk7cmV0dXJuIG51bGx9KSl9ZnVuY3Rpb24gWmkoYSxiKXtCai5wdXNoKGIsYSk7eGp8fCh4aj0hMCxoZyg5NyxmdW5jdGlvbigpe09qKCk7cmV0dXJuIG51bGx9KSl9XG5mdW5jdGlvbiBmaygpe2lmKG51bGw9PT15ailyZXR1cm4hMTt2YXIgYT15ajt5aj1udWxsO2lmKDAhPT0oWCY0OCkpdGhyb3cgRXJyb3IoeSgzMzEpKTt2YXIgYj1YO1h8PTMyO3ZhciBjPUJqO0JqPVtdO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCs9Mil7dmFyIGU9Y1tkXSxmPWNbZCsxXSxnPWUuZGVzdHJveTtlLmRlc3Ryb3k9dm9pZCAwO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnKXRyeXtnKCl9Y2F0Y2goayl7aWYobnVsbD09PWYpdGhyb3cgRXJyb3IoeSgzMzApKTtXaShmLGspfX1jPUFqO0FqPVtdO2ZvcihkPTA7ZDxjLmxlbmd0aDtkKz0yKXtlPWNbZF07Zj1jW2QrMV07dHJ5e3ZhciBoPWUuY3JlYXRlO2UuZGVzdHJveT1oKCl9Y2F0Y2goayl7aWYobnVsbD09PWYpdGhyb3cgRXJyb3IoeSgzMzApKTtXaShmLGspfX1mb3IoaD1hLmN1cnJlbnQuZmlyc3RFZmZlY3Q7bnVsbCE9PWg7KWE9aC5uZXh0RWZmZWN0LGgubmV4dEVmZmVjdD1udWxsLGguZmxhZ3MmOCYmKGguc2libGluZz1cbm51bGwsaC5zdGF0ZU5vZGU9bnVsbCksaD1hO1g9YjtpZygpO3JldHVybiEwfWZ1bmN0aW9uIGdrKGEsYixjKXtiPU1pKGMsYik7Yj1QaShhLGIsMSk7QWcoYSxiKTtiPUhnKCk7YT1LaihhLDEpO251bGwhPT1hJiYoJGMoYSwxLGIpLE1qKGEsYikpfVxuZnVuY3Rpb24gV2koYSxiKXtpZigzPT09YS50YWcpZ2soYSxhLGIpO2Vsc2UgZm9yKHZhciBjPWEucmV0dXJuO251bGwhPT1jOyl7aWYoMz09PWMudGFnKXtnayhjLGEsYik7YnJlYWt9ZWxzZSBpZigxPT09Yy50YWcpe3ZhciBkPWMuc3RhdGVOb2RlO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBjLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5jb21wb25lbnREaWRDYXRjaCYmKG51bGw9PT1UaXx8IVRpLmhhcyhkKSkpe2E9TWkoYixhKTt2YXIgZT1TaShjLGEsMSk7QWcoYyxlKTtlPUhnKCk7Yz1LaihjLDEpO2lmKG51bGwhPT1jKSRjKGMsMSxlKSxNaihjLGUpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGQuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09VGl8fCFUaS5oYXMoZCkpKXRyeXtkLmNvbXBvbmVudERpZENhdGNoKGIsYSl9Y2F0Y2goZil7fWJyZWFrfX1jPWMucmV0dXJufX1cbmZ1bmN0aW9uIFlqKGEsYixjKXt2YXIgZD1hLnBpbmdDYWNoZTtudWxsIT09ZCYmZC5kZWxldGUoYik7Yj1IZygpO2EucGluZ2VkTGFuZXN8PWEuc3VzcGVuZGVkTGFuZXMmYztVPT09YSYmKFcmYyk9PT1jJiYoND09PVZ8fDM9PT1WJiYoVyY2MjkxNDU2MCk9PT1XJiY1MDA+TygpLWpqP1FqKGEsMCk6dWp8PWMpO01qKGEsYil9ZnVuY3Rpb24gbGooYSxiKXt2YXIgYz1hLnN0YXRlTm9kZTtudWxsIT09YyYmYy5kZWxldGUoYik7Yj0wOzA9PT1iJiYoYj1hLm1vZGUsMD09PShiJjIpP2I9MTowPT09KGImNCk/Yj05OT09PWVnKCk/MToyOigwPT09R2omJihHaj10aiksYj1ZYyg2MjkxNDU2MCZ+R2opLDA9PT1iJiYoYj00MTk0MzA0KSkpO2M9SGcoKTthPUtqKGEsYik7bnVsbCE9PWEmJigkYyhhLGIsYyksTWooYSxjKSl9dmFyIGNrO1xuY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWIubGFuZXM7aWYobnVsbCE9PWEpaWYoYS5tZW1vaXplZFByb3BzIT09Yi5wZW5kaW5nUHJvcHN8fE4uY3VycmVudCl1Zz0hMDtlbHNlIGlmKDAhPT0oYyZkKSl1Zz0wIT09KGEuZmxhZ3MmMTYzODQpPyEwOiExO2Vsc2V7dWc9ITE7c3dpdGNoKGIudGFnKXtjYXNlIDM6cmkoYik7c2goKTticmVhaztjYXNlIDU6Z2goYik7YnJlYWs7Y2FzZSAxOkZmKGIudHlwZSkmJkpmKGIpO2JyZWFrO2Nhc2UgNDplaChiLGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO2JyZWFrO2Nhc2UgMTA6ZD1iLm1lbW9pemVkUHJvcHMudmFsdWU7dmFyIGU9Yi50eXBlLl9jb250ZXh0O0kobWcsZS5fY3VycmVudFZhbHVlKTtlLl9jdXJyZW50VmFsdWU9ZDticmVhaztjYXNlIDEzOmlmKG51bGwhPT1iLm1lbW9pemVkU3RhdGUpe2lmKDAhPT0oYyZiLmNoaWxkLmNoaWxkTGFuZXMpKXJldHVybiB0aShhLGIsYyk7SShQLFAuY3VycmVudCYxKTtiPWhpKGEsYixjKTtyZXR1cm4gbnVsbCE9PVxuYj9iLnNpYmxpbmc6bnVsbH1JKFAsUC5jdXJyZW50JjEpO2JyZWFrO2Nhc2UgMTk6ZD0wIT09KGMmYi5jaGlsZExhbmVzKTtpZigwIT09KGEuZmxhZ3MmNjQpKXtpZihkKXJldHVybiBBaShhLGIsYyk7Yi5mbGFnc3w9NjR9ZT1iLm1lbW9pemVkU3RhdGU7bnVsbCE9PWUmJihlLnJlbmRlcmluZz1udWxsLGUudGFpbD1udWxsLGUubGFzdEVmZmVjdD1udWxsKTtJKFAsUC5jdXJyZW50KTtpZihkKWJyZWFrO2Vsc2UgcmV0dXJuIG51bGw7Y2FzZSAyMzpjYXNlIDI0OnJldHVybiBiLmxhbmVzPTAsbWkoYSxiLGMpfXJldHVybiBoaShhLGIsYyl9ZWxzZSB1Zz0hMTtiLmxhbmVzPTA7c3dpdGNoKGIudGFnKXtjYXNlIDI6ZD1iLnR5cGU7bnVsbCE9PWEmJihhLmFsdGVybmF0ZT1udWxsLGIuYWx0ZXJuYXRlPW51bGwsYi5mbGFnc3w9Mik7YT1iLnBlbmRpbmdQcm9wcztlPUVmKGIsTS5jdXJyZW50KTt0ZyhiLGMpO2U9Q2gobnVsbCxiLGQsYSxlLGMpO2IuZmxhZ3N8PTE7aWYoXCJvYmplY3RcIj09PVxudHlwZW9mIGUmJm51bGwhPT1lJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5yZW5kZXImJnZvaWQgMD09PWUuJCR0eXBlb2Ype2IudGFnPTE7Yi5tZW1vaXplZFN0YXRlPW51bGw7Yi51cGRhdGVRdWV1ZT1udWxsO2lmKEZmKGQpKXt2YXIgZj0hMDtKZihiKX1lbHNlIGY9ITE7Yi5tZW1vaXplZFN0YXRlPW51bGwhPT1lLnN0YXRlJiZ2b2lkIDAhPT1lLnN0YXRlP2Uuc3RhdGU6bnVsbDt4ZyhiKTt2YXIgZz1kLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcImZ1bmN0aW9uXCI9PT10eXBlb2YgZyYmR2coYixkLGcsYSk7ZS51cGRhdGVyPUtnO2Iuc3RhdGVOb2RlPWU7ZS5fcmVhY3RJbnRlcm5hbHM9YjtPZyhiLGQsYSxjKTtiPXFpKG51bGwsYixkLCEwLGYsYyl9ZWxzZSBiLnRhZz0wLGZpKG51bGwsYixlLGMpLGI9Yi5jaGlsZDtyZXR1cm4gYjtjYXNlIDE2OmU9Yi5lbGVtZW50VHlwZTthOntudWxsIT09YSYmKGEuYWx0ZXJuYXRlPW51bGwsYi5hbHRlcm5hdGU9bnVsbCxiLmZsYWdzfD0yKTtcbmE9Yi5wZW5kaW5nUHJvcHM7Zj1lLl9pbml0O2U9ZihlLl9wYXlsb2FkKTtiLnR5cGU9ZTtmPWIudGFnPWhrKGUpO2E9bGcoZSxhKTtzd2l0Y2goZil7Y2FzZSAwOmI9bGkobnVsbCxiLGUsYSxjKTticmVhayBhO2Nhc2UgMTpiPXBpKG51bGwsYixlLGEsYyk7YnJlYWsgYTtjYXNlIDExOmI9Z2kobnVsbCxiLGUsYSxjKTticmVhayBhO2Nhc2UgMTQ6Yj1paShudWxsLGIsZSxsZyhlLnR5cGUsYSksZCxjKTticmVhayBhfXRocm93IEVycm9yKHkoMzA2LGUsXCJcIikpO31yZXR1cm4gYjtjYXNlIDA6cmV0dXJuIGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZT1iLmVsZW1lbnRUeXBlPT09ZD9lOmxnKGQsZSksbGkoYSxiLGQsZSxjKTtjYXNlIDE6cmV0dXJuIGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZT1iLmVsZW1lbnRUeXBlPT09ZD9lOmxnKGQsZSkscGkoYSxiLGQsZSxjKTtjYXNlIDM6cmkoYik7ZD1iLnVwZGF0ZVF1ZXVlO2lmKG51bGw9PT1hfHxudWxsPT09ZCl0aHJvdyBFcnJvcih5KDI4MikpO1xuZD1iLnBlbmRpbmdQcm9wcztlPWIubWVtb2l6ZWRTdGF0ZTtlPW51bGwhPT1lP2UuZWxlbWVudDpudWxsO3lnKGEsYik7Q2coYixkLG51bGwsYyk7ZD1iLm1lbW9pemVkU3RhdGUuZWxlbWVudDtpZihkPT09ZSlzaCgpLGI9aGkoYSxiLGMpO2Vsc2V7ZT1iLnN0YXRlTm9kZTtpZihmPWUuaHlkcmF0ZSlraD1yZihiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLmZpcnN0Q2hpbGQpLGpoPWIsZj1saD0hMDtpZihmKXthPWUubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YTtpZihudWxsIT1hKWZvcihlPTA7ZTxhLmxlbmd0aDtlKz0yKWY9YVtlXSxmLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PWFbZSsxXSx0aC5wdXNoKGYpO2M9WmcoYixudWxsLGQsYyk7Zm9yKGIuY2hpbGQ9YztjOyljLmZsYWdzPWMuZmxhZ3MmLTN8MTAyNCxjPWMuc2libGluZ31lbHNlIGZpKGEsYixkLGMpLHNoKCk7Yj1iLmNoaWxkfXJldHVybiBiO2Nhc2UgNTpyZXR1cm4gZ2goYiksbnVsbD09PWEmJlxucGgoYiksZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxmPW51bGwhPT1hP2EubWVtb2l6ZWRQcm9wczpudWxsLGc9ZS5jaGlsZHJlbixuZihkLGUpP2c9bnVsbDpudWxsIT09ZiYmbmYoZCxmKSYmKGIuZmxhZ3N8PTE2KSxvaShhLGIpLGZpKGEsYixnLGMpLGIuY2hpbGQ7Y2FzZSA2OnJldHVybiBudWxsPT09YSYmcGgoYiksbnVsbDtjYXNlIDEzOnJldHVybiB0aShhLGIsYyk7Y2FzZSA0OnJldHVybiBlaChiLGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLGQ9Yi5wZW5kaW5nUHJvcHMsbnVsbD09PWE/Yi5jaGlsZD1ZZyhiLG51bGwsZCxjKTpmaShhLGIsZCxjKSxiLmNoaWxkO2Nhc2UgMTE6cmV0dXJuIGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZT1iLmVsZW1lbnRUeXBlPT09ZD9lOmxnKGQsZSksZ2koYSxiLGQsZSxjKTtjYXNlIDc6cmV0dXJuIGZpKGEsYixiLnBlbmRpbmdQcm9wcyxjKSxiLmNoaWxkO2Nhc2UgODpyZXR1cm4gZmkoYSxiLGIucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFxuYyksYi5jaGlsZDtjYXNlIDEyOnJldHVybiBmaShhLGIsYi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sYyksYi5jaGlsZDtjYXNlIDEwOmE6e2Q9Yi50eXBlLl9jb250ZXh0O2U9Yi5wZW5kaW5nUHJvcHM7Zz1iLm1lbW9pemVkUHJvcHM7Zj1lLnZhbHVlO3ZhciBoPWIudHlwZS5fY29udGV4dDtJKG1nLGguX2N1cnJlbnRWYWx1ZSk7aC5fY3VycmVudFZhbHVlPWY7aWYobnVsbCE9PWcpaWYoaD1nLnZhbHVlLGY9SGUoaCxmKT8wOihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHM/ZC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHMoaCxmKToxMDczNzQxODIzKXwwLDA9PT1mKXtpZihnLmNoaWxkcmVuPT09ZS5jaGlsZHJlbiYmIU4uY3VycmVudCl7Yj1oaShhLGIsYyk7YnJlYWsgYX19ZWxzZSBmb3IoaD1iLmNoaWxkLG51bGwhPT1oJiYoaC5yZXR1cm49Yik7bnVsbCE9PWg7KXt2YXIgaz1oLmRlcGVuZGVuY2llcztpZihudWxsIT09ayl7Zz1oLmNoaWxkO2Zvcih2YXIgbD1cbmsuZmlyc3RDb250ZXh0O251bGwhPT1sOyl7aWYobC5jb250ZXh0PT09ZCYmMCE9PShsLm9ic2VydmVkQml0cyZmKSl7MT09PWgudGFnJiYobD16ZygtMSxjJi1jKSxsLnRhZz0yLEFnKGgsbCkpO2gubGFuZXN8PWM7bD1oLmFsdGVybmF0ZTtudWxsIT09bCYmKGwubGFuZXN8PWMpO3NnKGgucmV0dXJuLGMpO2subGFuZXN8PWM7YnJlYWt9bD1sLm5leHR9fWVsc2UgZz0xMD09PWgudGFnP2gudHlwZT09PWIudHlwZT9udWxsOmguY2hpbGQ6aC5jaGlsZDtpZihudWxsIT09ZylnLnJldHVybj1oO2Vsc2UgZm9yKGc9aDtudWxsIT09Zzspe2lmKGc9PT1iKXtnPW51bGw7YnJlYWt9aD1nLnNpYmxpbmc7aWYobnVsbCE9PWgpe2gucmV0dXJuPWcucmV0dXJuO2c9aDticmVha31nPWcucmV0dXJufWg9Z31maShhLGIsZS5jaGlsZHJlbixjKTtiPWIuY2hpbGR9cmV0dXJuIGI7Y2FzZSA5OnJldHVybiBlPWIudHlwZSxmPWIucGVuZGluZ1Byb3BzLGQ9Zi5jaGlsZHJlbix0ZyhiLGMpLGU9dmcoZSxcbmYudW5zdGFibGVfb2JzZXJ2ZWRCaXRzKSxkPWQoZSksYi5mbGFnc3w9MSxmaShhLGIsZCxjKSxiLmNoaWxkO2Nhc2UgMTQ6cmV0dXJuIGU9Yi50eXBlLGY9bGcoZSxiLnBlbmRpbmdQcm9wcyksZj1sZyhlLnR5cGUsZiksaWkoYSxiLGUsZixkLGMpO2Nhc2UgMTU6cmV0dXJuIGtpKGEsYixiLnR5cGUsYi5wZW5kaW5nUHJvcHMsZCxjKTtjYXNlIDE3OnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpsZyhkLGUpLG51bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT1udWxsLGIuZmxhZ3N8PTIpLGIudGFnPTEsRmYoZCk/KGE9ITAsSmYoYikpOmE9ITEsdGcoYixjKSxNZyhiLGQsZSksT2coYixkLGUsYykscWkobnVsbCxiLGQsITAsYSxjKTtjYXNlIDE5OnJldHVybiBBaShhLGIsYyk7Y2FzZSAyMzpyZXR1cm4gbWkoYSxiLGMpO2Nhc2UgMjQ6cmV0dXJuIG1pKGEsYixjKX10aHJvdyBFcnJvcih5KDE1NixiLnRhZykpO1xufTtmdW5jdGlvbiBpayhhLGIsYyxkKXt0aGlzLnRhZz1hO3RoaXMua2V5PWM7dGhpcy5zaWJsaW5nPXRoaXMuY2hpbGQ9dGhpcy5yZXR1cm49dGhpcy5zdGF0ZU5vZGU9dGhpcy50eXBlPXRoaXMuZWxlbWVudFR5cGU9bnVsbDt0aGlzLmluZGV4PTA7dGhpcy5yZWY9bnVsbDt0aGlzLnBlbmRpbmdQcm9wcz1iO3RoaXMuZGVwZW5kZW5jaWVzPXRoaXMubWVtb2l6ZWRTdGF0ZT10aGlzLnVwZGF0ZVF1ZXVlPXRoaXMubWVtb2l6ZWRQcm9wcz1udWxsO3RoaXMubW9kZT1kO3RoaXMuZmxhZ3M9MDt0aGlzLmxhc3RFZmZlY3Q9dGhpcy5maXJzdEVmZmVjdD10aGlzLm5leHRFZmZlY3Q9bnVsbDt0aGlzLmNoaWxkTGFuZXM9dGhpcy5sYW5lcz0wO3RoaXMuYWx0ZXJuYXRlPW51bGx9ZnVuY3Rpb24gbmgoYSxiLGMsZCl7cmV0dXJuIG5ldyBpayhhLGIsYyxkKX1mdW5jdGlvbiBqaShhKXthPWEucHJvdG90eXBlO3JldHVybiEoIWF8fCFhLmlzUmVhY3RDb21wb25lbnQpfVxuZnVuY3Rpb24gaGsoYSl7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEpcmV0dXJuIGppKGEpPzE6MDtpZih2b2lkIDAhPT1hJiZudWxsIT09YSl7YT1hLiQkdHlwZW9mO2lmKGE9PT1BYSlyZXR1cm4gMTE7aWYoYT09PURhKXJldHVybiAxNH1yZXR1cm4gMn1cbmZ1bmN0aW9uIFRnKGEsYil7dmFyIGM9YS5hbHRlcm5hdGU7bnVsbD09PWM/KGM9bmgoYS50YWcsYixhLmtleSxhLm1vZGUpLGMuZWxlbWVudFR5cGU9YS5lbGVtZW50VHlwZSxjLnR5cGU9YS50eXBlLGMuc3RhdGVOb2RlPWEuc3RhdGVOb2RlLGMuYWx0ZXJuYXRlPWEsYS5hbHRlcm5hdGU9Yyk6KGMucGVuZGluZ1Byb3BzPWIsYy50eXBlPWEudHlwZSxjLmZsYWdzPTAsYy5uZXh0RWZmZWN0PW51bGwsYy5maXJzdEVmZmVjdD1udWxsLGMubGFzdEVmZmVjdD1udWxsKTtjLmNoaWxkTGFuZXM9YS5jaGlsZExhbmVzO2MubGFuZXM9YS5sYW5lcztjLmNoaWxkPWEuY2hpbGQ7Yy5tZW1vaXplZFByb3BzPWEubWVtb2l6ZWRQcm9wcztjLm1lbW9pemVkU3RhdGU9YS5tZW1vaXplZFN0YXRlO2MudXBkYXRlUXVldWU9YS51cGRhdGVRdWV1ZTtiPWEuZGVwZW5kZW5jaWVzO2MuZGVwZW5kZW5jaWVzPW51bGw9PT1iP251bGw6e2xhbmVzOmIubGFuZXMsZmlyc3RDb250ZXh0OmIuZmlyc3RDb250ZXh0fTtcbmMuc2libGluZz1hLnNpYmxpbmc7Yy5pbmRleD1hLmluZGV4O2MucmVmPWEucmVmO3JldHVybiBjfVxuZnVuY3Rpb24gVmcoYSxiLGMsZCxlLGYpe3ZhciBnPTI7ZD1hO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKWppKGEpJiYoZz0xKTtlbHNlIGlmKFwic3RyaW5nXCI9PT10eXBlb2YgYSlnPTU7ZWxzZSBhOnN3aXRjaChhKXtjYXNlIHVhOnJldHVybiBYZyhjLmNoaWxkcmVuLGUsZixiKTtjYXNlIEhhOmc9ODtlfD0xNjticmVhaztjYXNlIHdhOmc9ODtlfD0xO2JyZWFrO2Nhc2UgeGE6cmV0dXJuIGE9bmgoMTIsYyxiLGV8OCksYS5lbGVtZW50VHlwZT14YSxhLnR5cGU9eGEsYS5sYW5lcz1mLGE7Y2FzZSBCYTpyZXR1cm4gYT1uaCgxMyxjLGIsZSksYS50eXBlPUJhLGEuZWxlbWVudFR5cGU9QmEsYS5sYW5lcz1mLGE7Y2FzZSBDYTpyZXR1cm4gYT1uaCgxOSxjLGIsZSksYS5lbGVtZW50VHlwZT1DYSxhLmxhbmVzPWYsYTtjYXNlIElhOnJldHVybiB2aShjLGUsZixiKTtjYXNlIEphOnJldHVybiBhPW5oKDI0LGMsYixlKSxhLmVsZW1lbnRUeXBlPUphLGEubGFuZXM9ZixhO2RlZmF1bHQ6aWYoXCJvYmplY3RcIj09PVxudHlwZW9mIGEmJm51bGwhPT1hKXN3aXRjaChhLiQkdHlwZW9mKXtjYXNlIHlhOmc9MTA7YnJlYWsgYTtjYXNlIHphOmc9OTticmVhayBhO2Nhc2UgQWE6Zz0xMTticmVhayBhO2Nhc2UgRGE6Zz0xNDticmVhayBhO2Nhc2UgRWE6Zz0xNjtkPW51bGw7YnJlYWsgYTtjYXNlIEZhOmc9MjI7YnJlYWsgYX10aHJvdyBFcnJvcih5KDEzMCxudWxsPT1hP2E6dHlwZW9mIGEsXCJcIikpO31iPW5oKGcsYyxiLGUpO2IuZWxlbWVudFR5cGU9YTtiLnR5cGU9ZDtiLmxhbmVzPWY7cmV0dXJuIGJ9ZnVuY3Rpb24gWGcoYSxiLGMsZCl7YT1uaCg3LGEsZCxiKTthLmxhbmVzPWM7cmV0dXJuIGF9ZnVuY3Rpb24gdmkoYSxiLGMsZCl7YT1uaCgyMyxhLGQsYik7YS5lbGVtZW50VHlwZT1JYTthLmxhbmVzPWM7cmV0dXJuIGF9ZnVuY3Rpb24gVWcoYSxiLGMpe2E9bmgoNixhLG51bGwsYik7YS5sYW5lcz1jO3JldHVybiBhfVxuZnVuY3Rpb24gV2coYSxiLGMpe2I9bmgoNCxudWxsIT09YS5jaGlsZHJlbj9hLmNoaWxkcmVuOltdLGEua2V5LGIpO2IubGFuZXM9YztiLnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzphLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246YS5pbXBsZW1lbnRhdGlvbn07cmV0dXJuIGJ9XG5mdW5jdGlvbiBqayhhLGIsYyl7dGhpcy50YWc9Yjt0aGlzLmNvbnRhaW5lckluZm89YTt0aGlzLmZpbmlzaGVkV29yaz10aGlzLnBpbmdDYWNoZT10aGlzLmN1cnJlbnQ9dGhpcy5wZW5kaW5nQ2hpbGRyZW49bnVsbDt0aGlzLnRpbWVvdXRIYW5kbGU9LTE7dGhpcy5wZW5kaW5nQ29udGV4dD10aGlzLmNvbnRleHQ9bnVsbDt0aGlzLmh5ZHJhdGU9Yzt0aGlzLmNhbGxiYWNrTm9kZT1udWxsO3RoaXMuY2FsbGJhY2tQcmlvcml0eT0wO3RoaXMuZXZlbnRUaW1lcz1aYygwKTt0aGlzLmV4cGlyYXRpb25UaW1lcz1aYygtMSk7dGhpcy5lbnRhbmdsZWRMYW5lcz10aGlzLmZpbmlzaGVkTGFuZXM9dGhpcy5tdXRhYmxlUmVhZExhbmVzPXRoaXMuZXhwaXJlZExhbmVzPXRoaXMucGluZ2VkTGFuZXM9dGhpcy5zdXNwZW5kZWRMYW5lcz10aGlzLnBlbmRpbmdMYW5lcz0wO3RoaXMuZW50YW5nbGVtZW50cz1aYygwKTt0aGlzLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9bnVsbH1cbmZ1bmN0aW9uIGtrKGEsYixjKXt2YXIgZD0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6dGEsa2V5Om51bGw9PWQ/bnVsbDpcIlwiK2QsY2hpbGRyZW46YSxjb250YWluZXJJbmZvOmIsaW1wbGVtZW50YXRpb246Y319XG5mdW5jdGlvbiBsayhhLGIsYyxkKXt2YXIgZT1iLmN1cnJlbnQsZj1IZygpLGc9SWcoZSk7YTppZihjKXtjPWMuX3JlYWN0SW50ZXJuYWxzO2I6e2lmKFpiKGMpIT09Y3x8MSE9PWMudGFnKXRocm93IEVycm9yKHkoMTcwKSk7dmFyIGg9Yztkb3tzd2l0Y2goaC50YWcpe2Nhc2UgMzpoPWguc3RhdGVOb2RlLmNvbnRleHQ7YnJlYWsgYjtjYXNlIDE6aWYoRmYoaC50eXBlKSl7aD1oLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDticmVhayBifX1oPWgucmV0dXJufXdoaWxlKG51bGwhPT1oKTt0aHJvdyBFcnJvcih5KDE3MSkpO31pZigxPT09Yy50YWcpe3ZhciBrPWMudHlwZTtpZihGZihrKSl7Yz1JZihjLGssaCk7YnJlYWsgYX19Yz1ofWVsc2UgYz1DZjtudWxsPT09Yi5jb250ZXh0P2IuY29udGV4dD1jOmIucGVuZGluZ0NvbnRleHQ9YztiPXpnKGYsZyk7Yi5wYXlsb2FkPXtlbGVtZW50OmF9O2Q9dm9pZCAwPT09ZD9udWxsOmQ7bnVsbCE9PVxuZCYmKGIuY2FsbGJhY2s9ZCk7QWcoZSxiKTtKZyhlLGcsZik7cmV0dXJuIGd9ZnVuY3Rpb24gbWsoYSl7YT1hLmN1cnJlbnQ7aWYoIWEuY2hpbGQpcmV0dXJuIG51bGw7c3dpdGNoKGEuY2hpbGQudGFnKXtjYXNlIDU6cmV0dXJuIGEuY2hpbGQuc3RhdGVOb2RlO2RlZmF1bHQ6cmV0dXJuIGEuY2hpbGQuc3RhdGVOb2RlfX1mdW5jdGlvbiBuayhhLGIpe2E9YS5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1hJiZudWxsIT09YS5kZWh5ZHJhdGVkKXt2YXIgYz1hLnJldHJ5TGFuZTthLnJldHJ5TGFuZT0wIT09YyYmYzxiP2M6Yn19ZnVuY3Rpb24gb2soYSxiKXtuayhhLGIpOyhhPWEuYWx0ZXJuYXRlKSYmbmsoYSxiKX1mdW5jdGlvbiBwaygpe3JldHVybiBudWxsfVxuZnVuY3Rpb24gcWsoYSxiLGMpe3ZhciBkPW51bGwhPWMmJm51bGwhPWMuaHlkcmF0aW9uT3B0aW9ucyYmYy5oeWRyYXRpb25PcHRpb25zLm11dGFibGVTb3VyY2VzfHxudWxsO2M9bmV3IGprKGEsYixudWxsIT1jJiYhMD09PWMuaHlkcmF0ZSk7Yj1uaCgzLG51bGwsbnVsbCwyPT09Yj83OjE9PT1iPzM6MCk7Yy5jdXJyZW50PWI7Yi5zdGF0ZU5vZGU9Yzt4ZyhiKTthW2ZmXT1jLmN1cnJlbnQ7Y2YoOD09PWEubm9kZVR5cGU/YS5wYXJlbnROb2RlOmEpO2lmKGQpZm9yKGE9MDthPGQubGVuZ3RoO2ErKyl7Yj1kW2FdO3ZhciBlPWIuX2dldFZlcnNpb247ZT1lKGIuX3NvdXJjZSk7bnVsbD09Yy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhP2MubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT1bYixlXTpjLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEucHVzaChiLGUpfXRoaXMuX2ludGVybmFsUm9vdD1jfVxucWsucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihhKXtsayhhLHRoaXMuX2ludGVybmFsUm9vdCxudWxsLG51bGwpfTtxay5wcm90b3R5cGUudW5tb3VudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2ludGVybmFsUm9vdCxiPWEuY29udGFpbmVySW5mbztsayhudWxsLGEsbnVsbCxmdW5jdGlvbigpe2JbZmZdPW51bGx9KX07ZnVuY3Rpb24gcmsoYSl7cmV0dXJuISghYXx8MSE9PWEubm9kZVR5cGUmJjkhPT1hLm5vZGVUeXBlJiYxMSE9PWEubm9kZVR5cGUmJig4IT09YS5ub2RlVHlwZXx8XCIgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgXCIhPT1hLm5vZGVWYWx1ZSkpfVxuZnVuY3Rpb24gc2soYSxiKXtifHwoYj1hPzk9PT1hLm5vZGVUeXBlP2EuZG9jdW1lbnRFbGVtZW50OmEuZmlyc3RDaGlsZDpudWxsLGI9ISghYnx8MSE9PWIubm9kZVR5cGV8fCFiLmhhc0F0dHJpYnV0ZShcImRhdGEtcmVhY3Ryb290XCIpKSk7aWYoIWIpZm9yKHZhciBjO2M9YS5sYXN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYyk7cmV0dXJuIG5ldyBxayhhLDAsYj97aHlkcmF0ZTohMH06dm9pZCAwKX1cbmZ1bmN0aW9uIHRrKGEsYixjLGQsZSl7dmFyIGY9Yy5fcmVhY3RSb290Q29udGFpbmVyO2lmKGYpe3ZhciBnPWYuX2ludGVybmFsUm9vdDtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZSl7dmFyIGg9ZTtlPWZ1bmN0aW9uKCl7dmFyIGE9bWsoZyk7aC5jYWxsKGEpfX1sayhiLGcsYSxlKX1lbHNle2Y9Yy5fcmVhY3RSb290Q29udGFpbmVyPXNrKGMsZCk7Zz1mLl9pbnRlcm5hbFJvb3Q7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGUpe3ZhciBrPWU7ZT1mdW5jdGlvbigpe3ZhciBhPW1rKGcpO2suY2FsbChhKX19WGooZnVuY3Rpb24oKXtsayhiLGcsYSxlKX0pfXJldHVybiBtayhnKX1lYz1mdW5jdGlvbihhKXtpZigxMz09PWEudGFnKXt2YXIgYj1IZygpO0pnKGEsNCxiKTtvayhhLDQpfX07ZmM9ZnVuY3Rpb24oYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9SGcoKTtKZyhhLDY3MTA4ODY0LGIpO29rKGEsNjcxMDg4NjQpfX07XG5nYz1mdW5jdGlvbihhKXtpZigxMz09PWEudGFnKXt2YXIgYj1IZygpLGM9SWcoYSk7SmcoYSxjLGIpO29rKGEsYyl9fTtoYz1mdW5jdGlvbihhLGIpe3JldHVybiBiKCl9O1xueWI9ZnVuY3Rpb24oYSxiLGMpe3N3aXRjaChiKXtjYXNlIFwiaW5wdXRcIjphYihhLGMpO2I9Yy5uYW1lO2lmKFwicmFkaW9cIj09PWMudHlwZSYmbnVsbCE9Yil7Zm9yKGM9YTtjLnBhcmVudE5vZGU7KWM9Yy5wYXJlbnROb2RlO2M9Yy5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRbbmFtZT1cIitKU09OLnN0cmluZ2lmeShcIlwiK2IpKyddW3R5cGU9XCJyYWRpb1wiXScpO2ZvcihiPTA7YjxjLmxlbmd0aDtiKyspe3ZhciBkPWNbYl07aWYoZCE9PWEmJmQuZm9ybT09PWEuZm9ybSl7dmFyIGU9RGIoZCk7aWYoIWUpdGhyb3cgRXJyb3IoeSg5MCkpO1dhKGQpO2FiKGQsZSl9fX1icmVhaztjYXNlIFwidGV4dGFyZWFcIjppYihhLGMpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjpiPWMudmFsdWUsbnVsbCE9YiYmZmIoYSwhIWMubXVsdGlwbGUsYiwhMSl9fTtHYj1XajtcbkhiPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9WDtYfD00O3RyeXtyZXR1cm4gZ2coOTgsYS5iaW5kKG51bGwsYixjLGQsZSkpfWZpbmFsbHl7WD1mLDA9PT1YJiYod2ooKSxpZygpKX19O0liPWZ1bmN0aW9uKCl7MD09PShYJjQ5KSYmKFZqKCksT2ooKSl9O0piPWZ1bmN0aW9uKGEsYil7dmFyIGM9WDtYfD0yO3RyeXtyZXR1cm4gYShiKX1maW5hbGx5e1g9YywwPT09WCYmKHdqKCksaWcoKSl9fTtmdW5jdGlvbiB1ayhhLGIpe3ZhciBjPTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO2lmKCFyayhiKSl0aHJvdyBFcnJvcih5KDIwMCkpO3JldHVybiBrayhhLGIsbnVsbCxjKX12YXIgdms9e0V2ZW50czpbQ2IsdWUsRGIsRWIsRmIsT2ose2N1cnJlbnQ6ITF9XX0sd2s9e2ZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOndjLGJ1bmRsZVR5cGU6MCx2ZXJzaW9uOlwiMTcuMC4yXCIscmVuZGVyZXJQYWNrYWdlTmFtZTpcInJlYWN0LWRvbVwifTtcbnZhciB4az17YnVuZGxlVHlwZTp3ay5idW5kbGVUeXBlLHZlcnNpb246d2sudmVyc2lvbixyZW5kZXJlclBhY2thZ2VOYW1lOndrLnJlbmRlcmVyUGFja2FnZU5hbWUscmVuZGVyZXJDb25maWc6d2sucmVuZGVyZXJDb25maWcsb3ZlcnJpZGVIb29rU3RhdGU6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzOm51bGwsb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzUmVuYW1lUGF0aDpudWxsLHNldFN1c3BlbnNlSGFuZGxlcjpudWxsLHNjaGVkdWxlVXBkYXRlOm51bGwsY3VycmVudERpc3BhdGNoZXJSZWY6cmEuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixmaW5kSG9zdEluc3RhbmNlQnlGaWJlcjpmdW5jdGlvbihhKXthPWNjKGEpO3JldHVybiBudWxsPT09YT9udWxsOmEuc3RhdGVOb2RlfSxmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTp3ay5maW5kRmliZXJCeUhvc3RJbnN0YW5jZXx8XG5wayxmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6bnVsbCxzY2hlZHVsZVJlZnJlc2g6bnVsbCxzY2hlZHVsZVJvb3Q6bnVsbCxzZXRSZWZyZXNoSGFuZGxlcjpudWxsLGdldEN1cnJlbnRGaWJlcjpudWxsfTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyl7dmFyIHlrPV9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztpZigheWsuaXNEaXNhYmxlZCYmeWsuc3VwcG9ydHNGaWJlcil0cnl7TGY9eWsuaW5qZWN0KHhrKSxNZj15a31jYXRjaChhKXt9fWV4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9dms7ZXhwb3J0cy5jcmVhdGVQb3J0YWw9dWs7XG5leHBvcnRzLmZpbmRET01Ob2RlPWZ1bmN0aW9uKGEpe2lmKG51bGw9PWEpcmV0dXJuIG51bGw7aWYoMT09PWEubm9kZVR5cGUpcmV0dXJuIGE7dmFyIGI9YS5fcmVhY3RJbnRlcm5hbHM7aWYodm9pZCAwPT09Yil7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEucmVuZGVyKXRocm93IEVycm9yKHkoMTg4KSk7dGhyb3cgRXJyb3IoeSgyNjgsT2JqZWN0LmtleXMoYSkpKTt9YT1jYyhiKTthPW51bGw9PT1hP251bGw6YS5zdGF0ZU5vZGU7cmV0dXJuIGF9O2V4cG9ydHMuZmx1c2hTeW5jPWZ1bmN0aW9uKGEsYil7dmFyIGM9WDtpZigwIT09KGMmNDgpKXJldHVybiBhKGIpO1h8PTE7dHJ5e2lmKGEpcmV0dXJuIGdnKDk5LGEuYmluZChudWxsLGIpKX1maW5hbGx5e1g9YyxpZygpfX07ZXhwb3J0cy5oeWRyYXRlPWZ1bmN0aW9uKGEsYixjKXtpZighcmsoYikpdGhyb3cgRXJyb3IoeSgyMDApKTtyZXR1cm4gdGsobnVsbCxhLGIsITAsYyl9O1xuZXhwb3J0cy5yZW5kZXI9ZnVuY3Rpb24oYSxiLGMpe2lmKCFyayhiKSl0aHJvdyBFcnJvcih5KDIwMCkpO3JldHVybiB0ayhudWxsLGEsYiwhMSxjKX07ZXhwb3J0cy51bm1vdW50Q29tcG9uZW50QXROb2RlPWZ1bmN0aW9uKGEpe2lmKCFyayhhKSl0aHJvdyBFcnJvcih5KDQwKSk7cmV0dXJuIGEuX3JlYWN0Um9vdENvbnRhaW5lcj8oWGooZnVuY3Rpb24oKXt0ayhudWxsLG51bGwsYSwhMSxmdW5jdGlvbigpe2EuX3JlYWN0Um9vdENvbnRhaW5lcj1udWxsO2FbZmZdPW51bGx9KX0pLCEwKTohMX07ZXhwb3J0cy51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcz1XajtleHBvcnRzLnVuc3RhYmxlX2NyZWF0ZVBvcnRhbD1mdW5jdGlvbihhLGIpe3JldHVybiB1ayhhLGIsMjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwpfTtcbmV4cG9ydHMudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoIXJrKGMpKXRocm93IEVycm9yKHkoMjAwKSk7aWYobnVsbD09YXx8dm9pZCAwPT09YS5fcmVhY3RJbnRlcm5hbHMpdGhyb3cgRXJyb3IoeSgzOCkpO3JldHVybiB0ayhhLGIsYywhMSxkKX07ZXhwb3J0cy52ZXJzaW9uPVwiMTcuMC4yXCI7XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjIwLjJcbiAqIHNjaGVkdWxlci5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGYsZyxoLGs7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBwZXJmb3JtYW5jZSYmXCJmdW5jdGlvblwiPT09dHlwZW9mIHBlcmZvcm1hbmNlLm5vdyl7dmFyIGw9cGVyZm9ybWFuY2U7ZXhwb3J0cy51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gbC5ub3coKX19ZWxzZXt2YXIgcD1EYXRlLHE9cC5ub3coKTtleHBvcnRzLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBwLm5vdygpLXF9fVxuaWYoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCl7dmFyIHQ9bnVsbCx1PW51bGwsdz1mdW5jdGlvbigpe2lmKG51bGwhPT10KXRyeXt2YXIgYT1leHBvcnRzLnVuc3RhYmxlX25vdygpO3QoITAsYSk7dD1udWxsfWNhdGNoKGIpe3Rocm93IHNldFRpbWVvdXQodywwKSxiO319O2Y9ZnVuY3Rpb24oYSl7bnVsbCE9PXQ/c2V0VGltZW91dChmLDAsYSk6KHQ9YSxzZXRUaW1lb3V0KHcsMCkpfTtnPWZ1bmN0aW9uKGEsYil7dT1zZXRUaW1lb3V0KGEsYil9O2g9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSl9O2V4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX07az1leHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKCl7fX1lbHNle3ZhciB4PXdpbmRvdy5zZXRUaW1lb3V0LHk9d2luZG93LmNsZWFyVGltZW91dDtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIGNvbnNvbGUpe3ZhciB6PVxud2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lO1wiZnVuY3Rpb25cIiE9PXR5cGVvZiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lJiZjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHNcIik7XCJmdW5jdGlvblwiIT09dHlwZW9mIHomJmNvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGNhbmNlbEFuaW1hdGlvbkZyYW1lLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzXCIpfXZhciBBPSExLEI9bnVsbCxDPS0xLEQ9NSxFPTA7ZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZD1mdW5jdGlvbigpe3JldHVybiBleHBvcnRzLnVuc3RhYmxlX25vdygpPj1cbkV9O2s9ZnVuY3Rpb24oKXt9O2V4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oYSl7MD5hfHwxMjU8YT9jb25zb2xlLmVycm9yKFwiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkXCIpOkQ9MDxhP01hdGguZmxvb3IoMUUzL2EpOjV9O3ZhciBGPW5ldyBNZXNzYWdlQ2hhbm5lbCxHPUYucG9ydDI7Ri5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oKXtpZihudWxsIT09Qil7dmFyIGE9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtFPWErRDt0cnl7QighMCxhKT9HLnBvc3RNZXNzYWdlKG51bGwpOihBPSExLEI9bnVsbCl9Y2F0Y2goYil7dGhyb3cgRy5wb3N0TWVzc2FnZShudWxsKSxiO319ZWxzZSBBPSExfTtmPWZ1bmN0aW9uKGEpe0I9YTtBfHwoQT0hMCxHLnBvc3RNZXNzYWdlKG51bGwpKX07Zz1mdW5jdGlvbihhLGIpe0M9XG54KGZ1bmN0aW9uKCl7YShleHBvcnRzLnVuc3RhYmxlX25vdygpKX0sYil9O2g9ZnVuY3Rpb24oKXt5KEMpO0M9LTF9fWZ1bmN0aW9uIEgoYSxiKXt2YXIgYz1hLmxlbmd0aDthLnB1c2goYik7YTpmb3IoOzspe3ZhciBkPWMtMT4+PjEsZT1hW2RdO2lmKHZvaWQgMCE9PWUmJjA8SShlLGIpKWFbZF09YixhW2NdPWUsYz1kO2Vsc2UgYnJlYWsgYX19ZnVuY3Rpb24gSihhKXthPWFbMF07cmV0dXJuIHZvaWQgMD09PWE/bnVsbDphfVxuZnVuY3Rpb24gSyhhKXt2YXIgYj1hWzBdO2lmKHZvaWQgMCE9PWIpe3ZhciBjPWEucG9wKCk7aWYoYyE9PWIpe2FbMF09YzthOmZvcih2YXIgZD0wLGU9YS5sZW5ndGg7ZDxlOyl7dmFyIG09MiooZCsxKS0xLG49YVttXSx2PW0rMSxyPWFbdl07aWYodm9pZCAwIT09biYmMD5JKG4sYykpdm9pZCAwIT09ciYmMD5JKHIsbik/KGFbZF09cixhW3ZdPWMsZD12KTooYVtkXT1uLGFbbV09YyxkPW0pO2Vsc2UgaWYodm9pZCAwIT09ciYmMD5JKHIsYykpYVtkXT1yLGFbdl09YyxkPXY7ZWxzZSBicmVhayBhfX1yZXR1cm4gYn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBJKGEsYil7dmFyIGM9YS5zb3J0SW5kZXgtYi5zb3J0SW5kZXg7cmV0dXJuIDAhPT1jP2M6YS5pZC1iLmlkfXZhciBMPVtdLE09W10sTj0xLE89bnVsbCxQPTMsUT0hMSxSPSExLFM9ITE7XG5mdW5jdGlvbiBUKGEpe2Zvcih2YXIgYj1KKE0pO251bGwhPT1iOyl7aWYobnVsbD09PWIuY2FsbGJhY2spSyhNKTtlbHNlIGlmKGIuc3RhcnRUaW1lPD1hKUsoTSksYi5zb3J0SW5kZXg9Yi5leHBpcmF0aW9uVGltZSxIKEwsYik7ZWxzZSBicmVhaztiPUooTSl9fWZ1bmN0aW9uIFUoYSl7Uz0hMTtUKGEpO2lmKCFSKWlmKG51bGwhPT1KKEwpKVI9ITAsZihWKTtlbHNle3ZhciBiPUooTSk7bnVsbCE9PWImJmcoVSxiLnN0YXJ0VGltZS1hKX19XG5mdW5jdGlvbiBWKGEsYil7Uj0hMTtTJiYoUz0hMSxoKCkpO1E9ITA7dmFyIGM9UDt0cnl7VChiKTtmb3IoTz1KKEwpO251bGwhPT1PJiYoIShPLmV4cGlyYXRpb25UaW1lPmIpfHxhJiYhZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCgpKTspe3ZhciBkPU8uY2FsbGJhY2s7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGQpe08uY2FsbGJhY2s9bnVsbDtQPU8ucHJpb3JpdHlMZXZlbDt2YXIgZT1kKE8uZXhwaXJhdGlvblRpbWU8PWIpO2I9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZT9PLmNhbGxiYWNrPWU6Tz09PUooTCkmJksoTCk7VChiKX1lbHNlIEsoTCk7Tz1KKEwpfWlmKG51bGwhPT1PKXZhciBtPSEwO2Vsc2V7dmFyIG49SihNKTtudWxsIT09biYmZyhVLG4uc3RhcnRUaW1lLWIpO209ITF9cmV0dXJuIG19ZmluYWxseXtPPW51bGwsUD1jLFE9ITF9fXZhciBXPWs7ZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHk9NTtcbmV4cG9ydHMudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk9MTtleHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5PTQ7ZXhwb3J0cy51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eT0zO2V4cG9ydHMudW5zdGFibGVfUHJvZmlsaW5nPW51bGw7ZXhwb3J0cy51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eT0yO2V4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7YS5jYWxsYmFjaz1udWxsfTtleHBvcnRzLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7Unx8UXx8KFI9ITAsZihWKSl9O2V4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gUH07ZXhwb3J0cy51bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZT1mdW5jdGlvbigpe3JldHVybiBKKEwpfTtcbmV4cG9ydHMudW5zdGFibGVfbmV4dD1mdW5jdGlvbihhKXtzd2l0Y2goUCl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6dmFyIGI9MzticmVhaztkZWZhdWx0OmI9UH12YXIgYz1QO1A9Yjt0cnl7cmV0dXJuIGEoKX1maW5hbGx5e1A9Y319O2V4cG9ydHMudW5zdGFibGVfcGF1c2VFeGVjdXRpb249ZnVuY3Rpb24oKXt9O2V4cG9ydHMudW5zdGFibGVfcmVxdWVzdFBhaW50PVc7ZXhwb3J0cy51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk9ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpicmVhaztkZWZhdWx0OmE9M312YXIgYz1QO1A9YTt0cnl7cmV0dXJuIGIoKX1maW5hbGx5e1A9Y319O1xuZXhwb3J0cy51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1leHBvcnRzLnVuc3RhYmxlX25vdygpO1wib2JqZWN0XCI9PT10eXBlb2YgYyYmbnVsbCE9PWM/KGM9Yy5kZWxheSxjPVwibnVtYmVyXCI9PT10eXBlb2YgYyYmMDxjP2QrYzpkKTpjPWQ7c3dpdGNoKGEpe2Nhc2UgMTp2YXIgZT0tMTticmVhaztjYXNlIDI6ZT0yNTA7YnJlYWs7Y2FzZSA1OmU9MTA3Mzc0MTgyMzticmVhaztjYXNlIDQ6ZT0xRTQ7YnJlYWs7ZGVmYXVsdDplPTVFM31lPWMrZTthPXtpZDpOKyssY2FsbGJhY2s6Yixwcmlvcml0eUxldmVsOmEsc3RhcnRUaW1lOmMsZXhwaXJhdGlvblRpbWU6ZSxzb3J0SW5kZXg6LTF9O2M+ZD8oYS5zb3J0SW5kZXg9YyxIKE0sYSksbnVsbD09PUooTCkmJmE9PT1KKE0pJiYoUz9oKCk6Uz0hMCxnKFUsYy1kKSkpOihhLnNvcnRJbmRleD1lLEgoTCxhKSxSfHxRfHwoUj0hMCxmKFYpKSk7cmV0dXJuIGF9O1xuZXhwb3J0cy51bnN0YWJsZV93cmFwQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7dmFyIGI9UDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1QO1A9Yjt0cnl7cmV0dXJuIGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7UD1jfX19O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG5cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7fVxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbldpdGhSZXNldCgpIHt9XG5lbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LnJlc2V0V2FybmluZ0NhY2hlID0gZW1wdHlGdW5jdGlvbjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gc2hpbShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgIGlmIChzZWNyZXQgPT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIHRocm93IGVycjtcbiAgfTtcbiAgc2hpbS5pc1JlcXVpcmVkID0gc2hpbTtcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcbiAgICByZXR1cm4gc2hpbTtcbiAgfTtcbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBzaGltLFxuICAgIGJpZ2ludDogc2hpbSxcbiAgICBib29sOiBzaGltLFxuICAgIGZ1bmM6IHNoaW0sXG4gICAgbnVtYmVyOiBzaGltLFxuICAgIG9iamVjdDogc2hpbSxcbiAgICBzdHJpbmc6IHNoaW0sXG4gICAgc3ltYm9sOiBzaGltLFxuXG4gICAgYW55OiBzaGltLFxuICAgIGFycmF5T2Y6IGdldFNoaW0sXG4gICAgZWxlbWVudDogc2hpbSxcbiAgICBlbGVtZW50VHlwZTogc2hpbSxcbiAgICBpbnN0YW5jZU9mOiBnZXRTaGltLFxuICAgIG5vZGU6IHNoaW0sXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXG4gICAgb25lT2Y6IGdldFNoaW0sXG4gICAgb25lT2ZUeXBlOiBnZXRTaGltLFxuICAgIHNoYXBlOiBnZXRTaGltLFxuICAgIGV4YWN0OiBnZXRTaGltLFxuXG4gICAgY2hlY2tQcm9wVHlwZXM6IGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQsXG4gICAgcmVzZXRXYXJuaW5nQ2FjaGU6IGVtcHR5RnVuY3Rpb25cbiAgfTtcblxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfc2hlZXQgPSByZXF1aXJlKCcuL3NoZWV0Jyk7XG5cbnZhciBfc2hlZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2hlZXQpO1xuXG52YXIgX2dlbmVyYXRlID0gcmVxdWlyZSgnLi9nZW5lcmF0ZScpO1xuXG52YXIgX2dlbmVyYXRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dlbmVyYXRlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxudmFyIGlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG5cbnZhciBjYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG5cbnZhciBHbGFtID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBHbGFtKCkge1xuICAgIHZhciBwcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgR2xhbSk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgaWYgKGlzQnJvd3Nlcikge1xuICAgICAgdmFyIGRvYyA9IHRoaXMucHJvcHMuZG9jdW1lbnQ7XG4gICAgICB2YXIgY2FjaGVkID0gY2FjaGUuZ2V0KGRvYyk7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICB9XG4gICAgICBjYWNoZS5zZXQoZG9jLCB0aGlzKTtcbiAgICAgIHRoaXMuc2hlZXQgPSBuZXcgX3NoZWV0Mi5kZWZhdWx0KHsgZG9jdW1lbnQ6IGRvYyB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmluc2VydGVkID0ge307XG4gICAgdGhpcy50YWdnZWQgPSB7fTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhHbGFtLCBbe1xuICAgIGtleTogJ2h5ZHJhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoeWRyYXRlKGlkcykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWRzLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5pbnNlcnRlZFtpZF0gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAndGFnJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdGFnKGlkKSB7XG4gICAgICB0aGlzLnRhZ2dlZFtpZF0gPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2lzVGFnZ2VkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNUYWdnZWQoaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhZ2dlZFtpZF07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaW5zZXJ0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5zZXJ0KGFzdCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5pbnNlcnRlZFthc3QuY2xhc3NOYW1lXSkge1xuICAgICAgICB2YXIgX3J1bGVzID0gKDAsIF9nZW5lcmF0ZTIuZGVmYXVsdCkoYXN0KTtcbiAgICAgICAgaWYgKGlzQnJvd3Nlcikge1xuICAgICAgICAgIF9ydWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMyLnNoZWV0Lmluc2VydChydWxlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluc2VydGVkW2FzdC5jbGFzc05hbWVdID0gdHJ1ZTsgLy8gb24gc2VydmVyLCBhZGQgcnVsZXMgaW5zdGVhZFxuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBHbGFtO1xufSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBHbGFtOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIGxhc3QoYXJyKSB7XG4gIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xufVxuLy8gaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJ1xuLypcblxuaGlnaCBwZXJmb3JtYW5jZSBTdHlsZVNoZWV0IGZvciBjc3MtaW4tanMgc3lzdGVtc1xuXG4tIHVzZXMgbXVsdGlwbGUgc3R5bGUgdGFncyBiZWhpbmQgdGhlIHNjZW5lcyBmb3IgbWlsbGlvbnMgb2YgcnVsZXNcbi0gdXNlcyBgaW5zZXJ0UnVsZWAgZm9yIGFwcGVuZGluZyBpbiBwcm9kdWN0aW9uIGZvciAqbXVjaCogZmFzdGVyIHBlcmZvcm1hbmNlXG4tICdwb2x5ZmlsbHMnIG9uIHNlcnZlciBzaWRlXG5cblxuLy8gdXNhZ2VcblxuaW1wb3J0IFN0eWxlU2hlZXQgZnJvbSAnZ2xhbW9yL2xpYi9zaGVldCdcbmxldCBzdHlsZVNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoKVxuXG5zdHlsZVNoZWV0LmluamVjdCgpXG4tICdpbmplY3RzJyB0aGUgc3R5bGVzaGVldCBpbnRvIHRoZSBwYWdlIChvciBpbnRvIG1lbW9yeSBpZiBvbiBzZXJ2ZXIpXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuXG4qL1xuXG4vLyBjb25zdCBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG5cbnZhciBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcblxudmFyIG9sZElFID0gZnVuY3Rpb24gKCkge1xuICBpZiAoaXNCcm93c2VyKSB7XG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi5pbm5lckhUTUwgPSAnPCEtLVtpZiBsdCBJRSAxMF0+PGk+PC9pPjwhW2VuZGlmXS0tPic7XG4gICAgcmV0dXJuIGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaScpLmxlbmd0aCA9PT0gMTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KCk7XG5cbnZhciBTdHlsZVNoZWV0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdHlsZVNoZWV0KCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgICAgZG9jdW1lbnQgPSBfcmVmLmRvY3VtZW50LFxuICAgICAgICBfcmVmJHNwZWVkeSA9IF9yZWYuc3BlZWR5LFxuICAgICAgICBzcGVlZHkgPSBfcmVmJHNwZWVkeSA9PT0gdW5kZWZpbmVkID8gIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIDogX3JlZiRzcGVlZHksXG4gICAgICAgIF9yZWYkbWF4TGVuZ3RoID0gX3JlZi5tYXhMZW5ndGgsXG4gICAgICAgIG1heExlbmd0aCA9IF9yZWYkbWF4TGVuZ3RoID09PSB1bmRlZmluZWQgPyBvbGRJRSA/IDQwMDAgOiA2NTAwMCA6IF9yZWYkbWF4TGVuZ3RoO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN0eWxlU2hlZXQpO1xuXG4gICAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgIHRoaXMuaXNTcGVlZHkgPSBzcGVlZHk7IC8vIHRoZSBiaWcgZHJhd2JhY2sgaGVyZSBpcyB0aGF0IHRoZSBjc3Mgd29uJ3QgYmUgZWRpdGFibGUgaW4gZGV2dG9vbHNcbiAgICAvLyB0aGlzLnNoZWV0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMubWF4TGVuZ3RoID0gbWF4TGVuZ3RoO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLmluamVjdCgpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN0eWxlU2hlZXQsIFt7XG4gICAga2V5OiAnbWFrZVN0eWxlVGFnJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbWFrZVN0eWxlVGFnKCkge1xuICAgICAgdmFyIHRhZyA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgIHRhZy50eXBlID0gJ3RleHQvY3NzJztcbiAgICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtZ2xhbW9yJywgJycpO1xuICAgICAgdGFnLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpKTtcbiAgICAgIC8vIHRvZG8gLSB1c2UgYSByZWZlcmVuY2Ugbm9kZVxuICAgICAgKHRoaXMuZG9jdW1lbnQuaGVhZCB8fCB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0pLmFwcGVuZENoaWxkKHRhZyk7XG4gICAgICByZXR1cm4gdGFnO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3NoZWV0Rm9yVGFnJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hlZXRGb3JUYWcodGFnKSB7XG4gICAgICBpZiAodGFnLnNoZWV0KSB7XG4gICAgICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gICAgICB9XG5cbiAgICAgIC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5kb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgPT09IHRhZykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0U2hlZXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTaGVldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNoZWV0Rm9yVGFnKGxhc3QodGhpcy50YWdzKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaW5qZWN0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5qZWN0KCkge1xuICAgICAgaWYgKHRoaXMuaW5qZWN0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhbHJlYWR5IGluamVjdGVkJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnRhZ3NbMF0gPSB0aGlzLm1ha2VTdHlsZVRhZygpO1xuICAgICAgdGhpcy5pbmplY3RlZCA9IHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2luc2VydCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9pbnNlcnQocnVsZSkge1xuICAgICAgLy8gdGhpcyB3ZWlyZG5lc3MgZm9yIHBlcmYsIGFuZCBjaHJvbWUncyB3ZWlyZCBidWdcbiAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIwMDA3OTkyL2Nocm9tZS1zdWRkZW5seS1zdG9wcGVkLWFjY2VwdGluZy1pbnNlcnRydWxlXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgc2hlZXQgPSB0aGlzLmdldFNoZWV0KCk7XG4gICAgICAgIHNoZWV0ICYmIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgcnVsZS5pbmRleE9mKCdAaW1wb3J0JykgIT09IC0xID8gMCA6IHNoZWV0LmNzc1J1bGVzLmxlbmd0aCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgLy8gbWlnaHQgbmVlZCBiZXRlciBkeCBmb3IgdGhpc1xuICAgICAgICAgIGNvbnNvbGUud2Fybignd2hvb3BzLCBpbGxlZ2FsIHJ1bGUgaW5zZXJ0ZWQnLCBydWxlKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2luc2VydCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgICB2YXIgc2hlZXQgPSB0aGlzLmdldFNoZWV0KCk7XG4gICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICBpZiAodGhpcy5pc1NwZWVkeSAmJiBzaGVldCAmJiBzaGVldC5pbnNlcnRSdWxlKSB7XG4gICAgICAgIHRoaXMuX2luc2VydChydWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChydWxlLmluZGV4T2YoJ0BpbXBvcnQnKSAhPT0gLTEpIHtcbiAgICAgICAgICB2YXIgdGFnID0gbGFzdCh0aGlzLnRhZ3MpO1xuICAgICAgICAgIHRhZy5pbnNlcnRCZWZvcmUodGhpcy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShydWxlKSwgdGFnLmZpcnN0Q2hpbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3QodGhpcy50YWdzKS5hcHBlbmRDaGlsZCh0aGlzLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmN0cisrO1xuICAgICAgaWYgKHRoaXMuY3RyICUgdGhpcy5tYXhMZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy50YWdzLnB1c2godGhpcy5tYWtlU3R5bGVUYWcoKSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncnVsZXMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBydWxlcygpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBhcnIgPSBbXTtcbiAgICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgICAgcmV0dXJuIGFyci5zcGxpY2UuYXBwbHkoYXJyLCBbYXJyLmxlbmd0aCwgMF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShBcnJheS5mcm9tKF90aGlzLnNoZWV0Rm9yVGFnKHRhZykuY3NzUnVsZXMpKSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdHlsZVNoZWV0O1xufSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBTdHlsZVNoZWV0OyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBjYW1lbGl6ZSA9IHJlcXVpcmUoJy4vY2FtZWxpemUnKTtcblxudmFyIG1zUGF0dGVybiA9IC9eLW1zLS87XG5cbi8qKlxuICogQ2FtZWxjYXNlcyBhIGh5cGhlbmF0ZWQgQ1NTIHByb3BlcnR5IG5hbWUsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBjYW1lbGl6ZVN0eWxlTmFtZSgnYmFja2dyb3VuZC1jb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kQ29sb3JcIlxuICogICA+IGNhbWVsaXplU3R5bGVOYW1lKCctbW96LXRyYW5zaXRpb24nKVxuICogICA8IFwiTW96VHJhbnNpdGlvblwiXG4gKiAgID4gY2FtZWxpemVTdHlsZU5hbWUoJy1tcy10cmFuc2l0aW9uJylcbiAqICAgPCBcIm1zVHJhbnNpdGlvblwiXG4gKlxuICogQXMgQW5kaSBTbWl0aCBzdWdnZXN0c1xuICogKGh0dHA6Ly93d3cuYW5kaXNtaXRoLmNvbS9ibG9nLzIwMTIvMDIvbW9kZXJuaXpyLXByZWZpeGVkLyksIGFuIGAtbXNgIHByZWZpeFxuICogaXMgY29udmVydGVkIHRvIGxvd2VyY2FzZSBgbXNgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY2FtZWxpemVTdHlsZU5hbWUoc3RyaW5nKSB7XG4gIHJldHVybiBjYW1lbGl6ZShzdHJpbmcucmVwbGFjZShtc1BhdHRlcm4sICdtcy0nKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FtZWxpemVTdHlsZU5hbWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgX2h5cGhlblBhdHRlcm4gPSAvLSguKS9nO1xuXG4vKipcbiAqIENhbWVsY2FzZXMgYSBoeXBoZW5hdGVkIHN0cmluZywgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGNhbWVsaXplKCdiYWNrZ3JvdW5kLWNvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmRDb2xvclwiXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjYW1lbGl6ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF9oeXBoZW5QYXR0ZXJuLCBmdW5jdGlvbiAoXywgY2hhcmFjdGVyKSB7XG4gICAgcmV0dXJuIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYW1lbGl6ZTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfQ1NTUHJvcGVydHkgPSByZXF1aXJlKCcuL0NTU1Byb3BlcnR5Jyk7XG5cbnZhciBfQ1NTUHJvcGVydHkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfQ1NTUHJvcGVydHkpO1xuXG52YXIgX3dhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBfd2FybmluZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93YXJuaW5nKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGRhbmdlcm91c1N0eWxlVmFsdWVcbiAqL1xuXG52YXIgaXNVbml0bGVzc051bWJlciA9IF9DU1NQcm9wZXJ0eTIuZGVmYXVsdC5pc1VuaXRsZXNzTnVtYmVyO1xudmFyIHN0eWxlV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgaW50byB0aGUgcHJvcGVyIGNzcyB3cml0YWJsZSB2YWx1ZS4gVGhlIHN0eWxlIG5hbWUgYG5hbWVgXG4gKiBzaG91bGQgYmUgbG9naWNhbCAobm8gaHlwaGVucyksIGFzIHNwZWNpZmllZFxuICogaW4gYENTU1Byb3BlcnR5LmlzVW5pdGxlc3NOdW1iZXJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIENTUyBwcm9wZXJ0eSBuYW1lIHN1Y2ggYXMgYHRvcE1hcmdpbmAuXG4gKiBAcGFyYW0geyp9IHZhbHVlIENTUyBwcm9wZXJ0eSB2YWx1ZSBzdWNoIGFzIGAxMHB4YC5cbiAqIEBwYXJhbSB7UmVhY3RET01Db21wb25lbnR9IGNvbXBvbmVudFxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIHN0eWxlIHZhbHVlIHdpdGggZGltZW5zaW9ucyBhcHBsaWVkLlxuICovXG5mdW5jdGlvbiBkYW5nZXJvdXNTdHlsZVZhbHVlKG5hbWUsIHZhbHVlLCBjb21wb25lbnQpIHtcbiAgLy8gTm90ZSB0aGF0IHdlJ3ZlIHJlbW92ZWQgZXNjYXBlVGV4dEZvckJyb3dzZXIoKSBjYWxscyBoZXJlIHNpbmNlIHRoZVxuICAvLyB3aG9sZSBzdHJpbmcgd2lsbCBiZSBlc2NhcGVkIHdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBpbmplY3RlZCBpbnRvXG4gIC8vIHRoZSBtYXJrdXAuIElmIHlvdSBwcm92aWRlIHVuc2FmZSB1c2VyIGRhdGEgaGVyZSB0aGV5IGNhbiBpbmplY3RcbiAgLy8gYXJiaXRyYXJ5IENTUyB3aGljaCBtYXkgYmUgcHJvYmxlbWF0aWMgKEkgY291bGRuJ3QgcmVwcm8gdGhpcyk6XG4gIC8vIGh0dHBzOi8vd3d3Lm93YXNwLm9yZy9pbmRleC5waHAvWFNTX0ZpbHRlcl9FdmFzaW9uX0NoZWF0X1NoZWV0XG4gIC8vIGh0dHA6Ly93d3cudGhlc3Bhbm5lci5jby51ay8yMDA3LzExLzI2L3VsdGltYXRlLXhzcy1jc3MtaW5qZWN0aW9uL1xuICAvLyBUaGlzIGlzIG5vdCBhbiBYU1MgaG9sZSBidXQgaW5zdGVhZCBhIHBvdGVudGlhbCBDU1MgaW5qZWN0aW9uIGlzc3VlXG4gIC8vIHdoaWNoIGhhcyBsZWFkIHRvIGEgZ3JlYXRlciBkaXNjdXNzaW9uIGFib3V0IGhvdyB3ZSdyZSBnb2luZyB0b1xuICAvLyB0cnVzdCBVUkxzIG1vdmluZyBmb3J3YXJkLiBTZWUgIzIxMTU5MDFcblxuICB2YXIgaXNFbXB0eSA9IHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09ICcnO1xuICBpZiAoaXNFbXB0eSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHZhciBpc05vbk51bWVyaWMgPSBpc05hTih2YWx1ZSk7XG4gIGlmIChpc05vbk51bWVyaWMgfHwgdmFsdWUgPT09IDAgfHwgaXNVbml0bGVzc051bWJlci5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBpc1VuaXRsZXNzTnVtYmVyW25hbWVdKSB7XG4gICAgcmV0dXJuICcnICsgdmFsdWU7IC8vIGNhc3QgdG8gc3RyaW5nXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvLyBBbGxvdyAnMCcgdG8gcGFzcyB0aHJvdWdoIHdpdGhvdXQgd2FybmluZy4gMCBpcyBhbHJlYWR5IHNwZWNpYWwgYW5kXG4gICAgICAvLyBkb2Vzbid0IHJlcXVpcmUgdW5pdHMsIHNvIHdlIGRvbid0IG5lZWQgdG8gd2FybiBhYm91dCBpdC5cbiAgICAgIGlmIChjb21wb25lbnQgJiYgdmFsdWUgIT09ICcwJykge1xuICAgICAgICB2YXIgb3duZXIgPSBjb21wb25lbnQuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcbiAgICAgICAgdmFyIG93bmVyTmFtZSA9IG93bmVyID8gb3duZXIuZ2V0TmFtZSgpIDogbnVsbDtcbiAgICAgICAgaWYgKG93bmVyTmFtZSAmJiAhc3R5bGVXYXJuaW5nc1tvd25lck5hbWVdKSB7XG4gICAgICAgICAgc3R5bGVXYXJuaW5nc1tvd25lck5hbWVdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICAgICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgICAgdmFyIHdhcm5pbmdzID0gc3R5bGVXYXJuaW5nc1tvd25lck5hbWVdO1xuICAgICAgICAgIHdhcm5lZCA9IHdhcm5pbmdzW25hbWVdO1xuICAgICAgICAgIGlmICghd2FybmVkKSB7XG4gICAgICAgICAgICB3YXJuaW5nc1tuYW1lXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghd2FybmVkKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/ICgwLCBfd2FybmluZzIuZGVmYXVsdCkoZmFsc2UsICdhIGAlc2AgdGFnIChvd25lcjogYCVzYCkgd2FzIHBhc3NlZCBhIG51bWVyaWMgc3RyaW5nIHZhbHVlICcgKyAnZm9yIENTUyBwcm9wZXJ0eSBgJXNgICh2YWx1ZTogYCVzYCkgd2hpY2ggd2lsbCBiZSB0cmVhdGVkICcgKyAnYXMgYSB1bml0bGVzcyBudW1iZXIgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBSZWFjdC4nLCBjb21wb25lbnQuX2N1cnJlbnRFbGVtZW50LnR5cGUsIG93bmVyTmFtZSB8fCAndW5rbm93bicsIG5hbWUsIHZhbHVlKSA6IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gdmFsdWUgKyAncHgnO1xufVxuXG5leHBvcnRzLmRlZmF1bHQgPSBkYW5nZXJvdXNTdHlsZVZhbHVlOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBDU1NQcm9wZXJ0eVxuICovXG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG5cbnZhciBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IHRydWUsXG4gIGJvcmRlckltYWdlU2xpY2U6IHRydWUsXG4gIGJvcmRlckltYWdlV2lkdGg6IHRydWUsXG4gIGJveEZsZXg6IHRydWUsXG4gIGJveEZsZXhHcm91cDogdHJ1ZSxcbiAgYm94T3JkaW5hbEdyb3VwOiB0cnVlLFxuICBjb2x1bW5Db3VudDogdHJ1ZSxcbiAgZmxleDogdHJ1ZSxcbiAgZmxleEdyb3c6IHRydWUsXG4gIGZsZXhQb3NpdGl2ZTogdHJ1ZSxcbiAgZmxleFNocmluazogdHJ1ZSxcbiAgZmxleE5lZ2F0aXZlOiB0cnVlLFxuICBmbGV4T3JkZXI6IHRydWUsXG4gIGdyaWRSb3c6IHRydWUsXG4gIGdyaWRSb3dTdGFydDogdHJ1ZSxcbiAgZ3JpZFJvd0VuZDogdHJ1ZSxcbiAgZ3JpZENvbHVtbjogdHJ1ZSxcbiAgZ3JpZENvbHVtblN0YXJ0OiB0cnVlLFxuICBncmlkQ29sdW1uRW5kOiB0cnVlLFxuICBmb250V2VpZ2h0OiB0cnVlLFxuICBsaW5lQ2xhbXA6IHRydWUsXG4gIGxpbmVIZWlnaHQ6IHRydWUsXG4gIG9wYWNpdHk6IHRydWUsXG4gIG9yZGVyOiB0cnVlLFxuICBvcnBoYW5zOiB0cnVlLFxuICB0YWJTaXplOiB0cnVlLFxuICB3aWRvd3M6IHRydWUsXG4gIHpJbmRleDogdHJ1ZSxcbiAgem9vbTogdHJ1ZSxcblxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiB0cnVlLFxuICBmbG9vZE9wYWNpdHk6IHRydWUsXG4gIHN0b3BPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VEYXNoYXJyYXk6IHRydWUsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IHRydWUsXG4gIHN0cm9rZU1pdGVybGltaXQ6IHRydWUsXG4gIHN0cm9rZU9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZVdpZHRoOiB0cnVlXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggdmVuZG9yLXNwZWNpZmljIHByZWZpeCwgZWc6IFdlYmtpdFxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IHN0eWxlIG5hbWUsIGVnOiB0cmFuc2l0aW9uRHVyYXRpb25cbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHlsZSBuYW1lIHByZWZpeGVkIHdpdGggYHByZWZpeGAsIHByb3Blcmx5IGNhbWVsQ2FzZWQsIGVnOlxuICAgKiBXZWJraXRUcmFuc2l0aW9uRHVyYXRpb25cbiAgICovXG59O2Z1bmN0aW9uIHByZWZpeEtleShwcmVmaXgsIGtleSkge1xuICByZXR1cm4gcHJlZml4ICsga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnN1YnN0cmluZygxKTtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHN0eWxlIG5hbWVzIHRoYXQgbWF5IGNvbWUgcGFzc2VkIGluIHByZWZpeGVkIGJ5IGFkZGluZyBwZXJtdXRhdGlvbnNcbiAqIG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xudmFyIHByZWZpeGVzID0gWydXZWJraXQnLCAnbXMnLCAnTW96JywgJ08nXTtcblxuLy8gVXNpbmcgT2JqZWN0LmtleXMgaGVyZSwgb3IgZWxzZSB0aGUgdmFuaWxsYSBmb3ItaW4gbG9vcCBtYWtlcyBJRTggZ28gaW50byBhblxuLy8gaW5maW5pdGUgbG9vcCwgYmVjYXVzZSBpdCBpdGVyYXRlcyBvdmVyIHRoZSBuZXdseSBhZGRlZCBwcm9wcyB0b28uXG5PYmplY3Qua2V5cyhpc1VuaXRsZXNzTnVtYmVyKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIHByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeCkge1xuICAgIGlzVW5pdGxlc3NOdW1iZXJbcHJlZml4S2V5KHByZWZpeCwgcHJvcCldID0gaXNVbml0bGVzc051bWJlcltwcm9wXTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBNb3N0IHN0eWxlIHByb3BlcnRpZXMgY2FuIGJlIHVuc2V0IGJ5IGRvaW5nIC5zdHlsZVtwcm9wXSA9ICcnIGJ1dCBJRThcbiAqIGRvZXNuJ3QgbGlrZSBkb2luZyB0aGF0IHdpdGggc2hvcnRoYW5kIHByb3BlcnRpZXMgc28gZm9yIHRoZSBwcm9wZXJ0aWVzIHRoYXRcbiAqIElFOCBicmVha3Mgb24sIHdoaWNoIGFyZSBsaXN0ZWQgaGVyZSwgd2UgaW5zdGVhZCB1bnNldCBlYWNoIG9mIHRoZVxuICogaW5kaXZpZHVhbCBwcm9wZXJ0aWVzLiBTZWUgaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzODUuXG4gKiBUaGUgNC12YWx1ZSAnY2xvY2snIHByb3BlcnRpZXMgbGlrZSBtYXJnaW4sIHBhZGRpbmcsIGJvcmRlci13aWR0aCBzZWVtIHRvXG4gKiBiZWhhdmUgd2l0aG91dCBhbnkgcHJvYmxlbXMuIEN1cmlvdXNseSwgbGlzdC1zdHlsZSB3b3JrcyB0b28gd2l0aG91dCBhbnlcbiAqIHNwZWNpYWwgcHJvZGRpbmcuXG4gKi9cbnZhciBzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnMgPSB7XG4gIGJhY2tncm91bmQ6IHtcbiAgICBiYWNrZ3JvdW5kQXR0YWNobWVudDogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRydWUsXG4gICAgYmFja2dyb3VuZEltYWdlOiB0cnVlLFxuICAgIGJhY2tncm91bmRQb3NpdGlvblg6IHRydWUsXG4gICAgYmFja2dyb3VuZFBvc2l0aW9uWTogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kUmVwZWF0OiB0cnVlXG4gIH0sXG4gIGJhY2tncm91bmRQb3NpdGlvbjoge1xuICAgIGJhY2tncm91bmRQb3NpdGlvblg6IHRydWUsXG4gICAgYmFja2dyb3VuZFBvc2l0aW9uWTogdHJ1ZVxuICB9LFxuICBib3JkZXI6IHtcbiAgICBib3JkZXJXaWR0aDogdHJ1ZSxcbiAgICBib3JkZXJTdHlsZTogdHJ1ZSxcbiAgICBib3JkZXJDb2xvcjogdHJ1ZVxuICB9LFxuICBib3JkZXJCb3R0b206IHtcbiAgICBib3JkZXJCb3R0b21XaWR0aDogdHJ1ZSxcbiAgICBib3JkZXJCb3R0b21TdHlsZTogdHJ1ZSxcbiAgICBib3JkZXJCb3R0b21Db2xvcjogdHJ1ZVxuICB9LFxuICBib3JkZXJMZWZ0OiB7XG4gICAgYm9yZGVyTGVmdFdpZHRoOiB0cnVlLFxuICAgIGJvcmRlckxlZnRTdHlsZTogdHJ1ZSxcbiAgICBib3JkZXJMZWZ0Q29sb3I6IHRydWVcbiAgfSxcbiAgYm9yZGVyUmlnaHQ6IHtcbiAgICBib3JkZXJSaWdodFdpZHRoOiB0cnVlLFxuICAgIGJvcmRlclJpZ2h0U3R5bGU6IHRydWUsXG4gICAgYm9yZGVyUmlnaHRDb2xvcjogdHJ1ZVxuICB9LFxuICBib3JkZXJUb3A6IHtcbiAgICBib3JkZXJUb3BXaWR0aDogdHJ1ZSxcbiAgICBib3JkZXJUb3BTdHlsZTogdHJ1ZSxcbiAgICBib3JkZXJUb3BDb2xvcjogdHJ1ZVxuICB9LFxuICBmb250OiB7XG4gICAgZm9udFN0eWxlOiB0cnVlLFxuICAgIGZvbnRWYXJpYW50OiB0cnVlLFxuICAgIGZvbnRXZWlnaHQ6IHRydWUsXG4gICAgZm9udFNpemU6IHRydWUsXG4gICAgbGluZUhlaWdodDogdHJ1ZSxcbiAgICBmb250RmFtaWx5OiB0cnVlXG4gIH0sXG4gIG91dGxpbmU6IHtcbiAgICBvdXRsaW5lV2lkdGg6IHRydWUsXG4gICAgb3V0bGluZVN0eWxlOiB0cnVlLFxuICAgIG91dGxpbmVDb2xvcjogdHJ1ZVxuICB9XG59O1xuXG52YXIgQ1NTUHJvcGVydHkgPSB7XG4gIGlzVW5pdGxlc3NOdW1iZXI6IGlzVW5pdGxlc3NOdW1iZXIsXG4gIHNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9uczogc2hvcnRoYW5kUHJvcGVydHlFeHBhbnNpb25zXG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBDU1NQcm9wZXJ0eTsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqL1xuXG5mdW5jdGlvbiBtYWtlRW1wdHlGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gYXJnO1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhbmQgZGlzY2FyZHMgaW5wdXRzOyBpdCBoYXMgbm8gc2lkZSBlZmZlY3RzLiBUaGlzIGlzXG4gKiBwcmltYXJpbHkgdXNlZnVsIGlkaW9tYXRpY2FsbHkgZm9yIG92ZXJyaWRhYmxlIGZ1bmN0aW9uIGVuZHBvaW50cyB3aGljaFxuICogYWx3YXlzIG5lZWQgdG8gYmUgY2FsbGFibGUsIHNpbmNlIEpTIGxhY2tzIGEgbnVsbC1jYWxsIGlkaW9tIGFsYSBDb2NvYS5cbiAqL1xudmFyIGVtcHR5RnVuY3Rpb24gPSBmdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge307XG5cbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnMgPSBtYWtlRW1wdHlGdW5jdGlvbjtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKGZhbHNlKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlID0gbWFrZUVtcHR5RnVuY3Rpb24odHJ1ZSk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbCA9IG1ha2VFbXB0eUZ1bmN0aW9uKG51bGwpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RoaXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNBcmd1bWVudCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgcmV0dXJuIGFyZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZW1wdHlGdW5jdGlvbjsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaHlwaGVuYXRlID0gcmVxdWlyZSgnLi9oeXBoZW5hdGUnKTtcblxudmFyIG1zUGF0dGVybiA9IC9ebXMtLztcblxuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBDU1MgcHJvcGVydHkgbmFtZSwgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnYmFja2dyb3VuZENvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmQtY29sb3JcIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnTW96VHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbW96LXRyYW5zaXRpb25cIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnbXNUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tcy10cmFuc2l0aW9uXCJcbiAqXG4gKiBBcyBNb2Rlcm5penIgc3VnZ2VzdHMgKGh0dHA6Ly9tb2Rlcm5penIuY29tL2RvY3MvI3ByZWZpeGVkKSwgYW4gYG1zYCBwcmVmaXhcbiAqIGlzIGNvbnZlcnRlZCB0byBgLW1zLWAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBoeXBoZW5hdGVTdHlsZU5hbWUoc3RyaW5nKSB7XG4gIHJldHVybiBoeXBoZW5hdGUoc3RyaW5nKS5yZXBsYWNlKG1zUGF0dGVybiwgJy1tcy0nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoeXBoZW5hdGVTdHlsZU5hbWU7IiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIF91cHBlcmNhc2VQYXR0ZXJuID0gLyhbQS1aXSkvZztcblxuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBzdHJpbmcsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGUoJ2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqXG4gKiBGb3IgQ1NTIHN0eWxlIG5hbWVzLCB1c2UgYGh5cGhlbmF0ZVN0eWxlTmFtZWAgaW5zdGVhZCB3aGljaCB3b3JrcyBwcm9wZXJseVxuICogd2l0aCBhbGwgdmVuZG9yIHByZWZpeGVzLCBpbmNsdWRpbmcgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGh5cGhlbmF0ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF91cHBlcmNhc2VQYXR0ZXJuLCAnLSQxJykudG9Mb3dlckNhc2UoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoeXBoZW5hdGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIE1lbW9pemVzIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgb25lIHN0cmluZyBhcmd1bWVudC5cbiAqL1xuXG5mdW5jdGlvbiBtZW1vaXplU3RyaW5nT25seShjYWxsYmFjaykge1xuICB2YXIgY2FjaGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICBpZiAoIWNhY2hlLmhhc093blByb3BlcnR5KHN0cmluZykpIHtcbiAgICAgIGNhY2hlW3N0cmluZ10gPSBjYWxsYmFjay5jYWxsKHRoaXMsIHN0cmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZVtzdHJpbmddO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemVTdHJpbmdPbmx5OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcbi8vIHBhcnNlciBwbHVnaW5zXG4vLyByZW5kZXIgcGx1Z2luc1xuXG5leHBvcnRzLmZhbGxiYWNrcyA9IGZhbGxiYWNrcztcbmV4cG9ydHMuY29udGVudFdyYXAgPSBjb250ZW50V3JhcDtcbmV4cG9ydHMucHJlZml4ZXMgPSBwcmVmaXhlcztcblxudmFyIF9DU1NQcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKCcuL0NTU1Byb3BlcnR5T3BlcmF0aW9ucycpO1xuXG52YXIgX3ByZWZpeCA9IHJlcXVpcmUoJy4vcHJlZml4Jyk7XG5cbnZhciBfcHJlZml4MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3ByZWZpeCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGZhbGxiYWNrcyhub2RlKSB7XG4gIHZhciBoYXNBcnJheSA9IE9iamVjdC5rZXlzKG5vZGUuc3R5bGUpLm1hcChmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KG5vZGUuc3R5bGVbeF0pO1xuICB9KS5pbmRleE9mKHRydWUpID49IDA7XG4gIGlmIChoYXNBcnJheSkge1xuICAgIHZhciBzdHlsZSA9IG5vZGUuc3R5bGU7XG5cbiAgICB2YXIgZmxhdHRlbmVkID0gT2JqZWN0LmtleXMoc3R5bGUpLnJlZHVjZShmdW5jdGlvbiAobywga2V5KSB7XG4gICAgICBvW2tleV0gPSBBcnJheS5pc0FycmF5KHN0eWxlW2tleV0pID8gc3R5bGVba2V5XS5qb2luKCc7ICcgKyAoMCwgX0NTU1Byb3BlcnR5T3BlcmF0aW9ucy5wcm9jZXNzU3R5bGVOYW1lKShrZXkpICsgJzogJykgOiBzdHlsZVtrZXldO1xuICAgICAgcmV0dXJuIG87XG4gICAgfSwge30pO1xuICAgIC8vIHRvZG8gLVxuICAgIC8vIGZsYXR0ZW4gYXJyYXlzIHdoaWNoIGhhdmVuJ3QgYmVlbiBmbGF0dGVuZWQgeWV0XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBub2RlLCB7IHN0eWxlOiBmbGF0dGVuZWQgfSk7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59XG5cbnZhciBjb250ZW50VmFsdWVzID0gWydub3JtYWwnLCAnbm9uZScsICdjb3VudGVyJywgJ29wZW4tcXVvdGUnLCAnY2xvc2UtcXVvdGUnLCAnbm8tb3Blbi1xdW90ZScsICduby1jbG9zZS1xdW90ZScsICdpbml0aWFsJywgJ2luaGVyaXQnXTtcblxuZnVuY3Rpb24gY29udGVudFdyYXAobm9kZSkge1xuICBpZiAobm9kZS5zdHlsZS5jb250ZW50KSB7XG4gICAgdmFyIGNvbnQgPSBub2RlLnN0eWxlLmNvbnRlbnQ7XG4gICAgaWYgKGNvbnRlbnRWYWx1ZXMuaW5kZXhPZihjb250KSA+PSAwKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgaWYgKC9eKGF0dHJ8Y2FsY3xjb3VudGVycz98dXJsKVxcKC8udGVzdChjb250KSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGlmIChjb250LmNoYXJBdCgwKSA9PT0gY29udC5jaGFyQXQoY29udC5sZW5ndGggLSAxKSAmJiAoY29udC5jaGFyQXQoMCkgPT09ICdcIicgfHwgY29udC5jaGFyQXQoMCkgPT09IFwiJ1wiKSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgbm9kZSwgeyBzdHlsZTogX2V4dGVuZHMoe30sIG5vZGUuc3R5bGUsIHsgY29udGVudDogJ1wiJyArIGNvbnQgKyAnXCInIH0pIH0pO1xuICB9XG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBwcmVmaXhlcyhub2RlKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgbm9kZSwgeyBzdHlsZTogKDAsIF9wcmVmaXgyLmRlZmF1bHQpKF9leHRlbmRzKHt9LCBub2RlLnN0eWxlKSkgfSk7XG59IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gcHJlZml4ZXI7XG5cbnZhciBfc3RhdGljRGF0YSA9IHJlcXVpcmUoJ2lubGluZS1zdHlsZS1wcmVmaXhlci9zdGF0aWMvc3RhdGljRGF0YScpO1xuXG52YXIgX3N0YXRpY0RhdGEyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RhdGljRGF0YSk7XG5cbnZhciBfcHJlZml4UHJvcGVydHkgPSByZXF1aXJlKCdpbmxpbmUtc3R5bGUtcHJlZml4ZXIvdXRpbHMvcHJlZml4UHJvcGVydHknKTtcblxudmFyIF9wcmVmaXhQcm9wZXJ0eTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcmVmaXhQcm9wZXJ0eSk7XG5cbnZhciBfcHJlZml4VmFsdWUgPSByZXF1aXJlKCdpbmxpbmUtc3R5bGUtcHJlZml4ZXIvdXRpbHMvcHJlZml4VmFsdWUnKTtcblxudmFyIF9wcmVmaXhWYWx1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcmVmaXhWYWx1ZSk7XG5cbnZhciBfY3Vyc29yID0gcmVxdWlyZSgnaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL2N1cnNvcicpO1xuXG52YXIgX2N1cnNvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jdXJzb3IpO1xuXG52YXIgX2Nyb3NzRmFkZSA9IHJlcXVpcmUoJ2lubGluZS1zdHlsZS1wcmVmaXhlci9zdGF0aWMvcGx1Z2lucy9jcm9zc0ZhZGUnKTtcblxudmFyIF9jcm9zc0ZhZGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3Jvc3NGYWRlKTtcblxudmFyIF9maWx0ZXIgPSByZXF1aXJlKCdpbmxpbmUtc3R5bGUtcHJlZml4ZXIvc3RhdGljL3BsdWdpbnMvZmlsdGVyJyk7XG5cbnZhciBfZmlsdGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ZpbHRlcik7XG5cbnZhciBfZmxleCA9IHJlcXVpcmUoJ2lubGluZS1zdHlsZS1wcmVmaXhlci9zdGF0aWMvcGx1Z2lucy9mbGV4Jyk7XG5cbnZhciBfZmxleDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mbGV4KTtcblxudmFyIF9mbGV4Ym94T2xkID0gcmVxdWlyZSgnaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL2ZsZXhib3hPbGQnKTtcblxudmFyIF9mbGV4Ym94T2xkMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ZsZXhib3hPbGQpO1xuXG52YXIgX2dyYWRpZW50ID0gcmVxdWlyZSgnaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL2dyYWRpZW50Jyk7XG5cbnZhciBfZ3JhZGllbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ3JhZGllbnQpO1xuXG52YXIgX2ltYWdlU2V0ID0gcmVxdWlyZSgnaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL2ltYWdlU2V0Jyk7XG5cbnZhciBfaW1hZ2VTZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW1hZ2VTZXQpO1xuXG52YXIgX3Bvc2l0aW9uID0gcmVxdWlyZSgnaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL3Bvc2l0aW9uJyk7XG5cbnZhciBfcG9zaXRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcG9zaXRpb24pO1xuXG52YXIgX3NpemluZyA9IHJlcXVpcmUoJ2lubGluZS1zdHlsZS1wcmVmaXhlci9zdGF0aWMvcGx1Z2lucy9zaXppbmcnKTtcblxudmFyIF9zaXppbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2l6aW5nKTtcblxudmFyIF90cmFuc2l0aW9uID0gcmVxdWlyZSgnaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL3RyYW5zaXRpb24nKTtcblxudmFyIF90cmFuc2l0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3RyYW5zaXRpb24pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgcGx1Z2lucyA9IFtfY3Jvc3NGYWRlMi5kZWZhdWx0LCBfY3Vyc29yMi5kZWZhdWx0LCBfZmlsdGVyMi5kZWZhdWx0LCBfZmxleGJveE9sZDIuZGVmYXVsdCwgX2dyYWRpZW50Mi5kZWZhdWx0LCBfaW1hZ2VTZXQyLmRlZmF1bHQsIF9wb3NpdGlvbjIuZGVmYXVsdCwgX3NpemluZzIuZGVmYXVsdCwgX3RyYW5zaXRpb24yLmRlZmF1bHQsIF9mbGV4Mi5kZWZhdWx0XTtcbi8vIGN1c3RvbSBmYWNhZGUgZm9yIGlubGluZS1zdHlsZS1wcmVmaXhlclxuXG52YXIgcHJlZml4TWFwID0gX3N0YXRpY0RhdGEyLmRlZmF1bHQucHJlZml4TWFwO1xuXG5mdW5jdGlvbiBwcmVmaXhlcihzdHlsZSkge1xuICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBzdHlsZSkge1xuICAgIHZhciB2YWx1ZSA9IHN0eWxlW3Byb3BlcnR5XTtcblxuICAgIHZhciBwcm9jZXNzZWRWYWx1ZSA9ICgwLCBfcHJlZml4VmFsdWUyLmRlZmF1bHQpKHBsdWdpbnMsIHByb3BlcnR5LCB2YWx1ZSwgc3R5bGUsIHByZWZpeE1hcCk7XG5cbiAgICAvLyBvbmx5IG1vZGlmeSB0aGUgdmFsdWUgaWYgaXQgd2FzIHRvdWNoZWRcbiAgICAvLyBieSBhbnkgcGx1Z2luIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgbXV0YXRpb25zXG4gICAgaWYgKHByb2Nlc3NlZFZhbHVlKSB7XG4gICAgICBzdHlsZVtwcm9wZXJ0eV0gPSBwcm9jZXNzZWRWYWx1ZTtcbiAgICB9XG5cbiAgICAoMCwgX3ByZWZpeFByb3BlcnR5Mi5kZWZhdWx0KShwcmVmaXhNYXAsIHByb3BlcnR5LCBzdHlsZSk7XG4gIH1cbiAgcmV0dXJuIHN0eWxlO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgdyA9IFtcIldlYmtpdFwiXTtcbnZhciBtID0gW1wiTW96XCJdO1xudmFyIG1zID0gW1wibXNcIl07XG52YXIgd20gPSBbXCJXZWJraXRcIiwgXCJNb3pcIl07XG52YXIgd21zID0gW1wiV2Via2l0XCIsIFwibXNcIl07XG52YXIgd21tcyA9IFtcIldlYmtpdFwiLCBcIk1velwiLCBcIm1zXCJdO1xuXG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gIHBsdWdpbnM6IFtdLFxuICBwcmVmaXhNYXA6IHsgXCJhcHBlYXJhbmNlXCI6IHdtLCBcInVzZXJTZWxlY3RcIjogd21tcywgXCJ0ZXh0RW1waGFzaXNQb3NpdGlvblwiOiB3LCBcInRleHRFbXBoYXNpc1wiOiB3LCBcInRleHRFbXBoYXNpc1N0eWxlXCI6IHcsIFwidGV4dEVtcGhhc2lzQ29sb3JcIjogdywgXCJib3hEZWNvcmF0aW9uQnJlYWtcIjogdywgXCJjbGlwUGF0aFwiOiB3LCBcIm1hc2tJbWFnZVwiOiB3LCBcIm1hc2tNb2RlXCI6IHcsIFwibWFza1JlcGVhdFwiOiB3LCBcIm1hc2tQb3NpdGlvblwiOiB3LCBcIm1hc2tDbGlwXCI6IHcsIFwibWFza09yaWdpblwiOiB3LCBcIm1hc2tTaXplXCI6IHcsIFwibWFza0NvbXBvc2l0ZVwiOiB3LCBcIm1hc2tcIjogdywgXCJtYXNrQm9yZGVyU291cmNlXCI6IHcsIFwibWFza0JvcmRlck1vZGVcIjogdywgXCJtYXNrQm9yZGVyU2xpY2VcIjogdywgXCJtYXNrQm9yZGVyV2lkdGhcIjogdywgXCJtYXNrQm9yZGVyT3V0c2V0XCI6IHcsIFwibWFza0JvcmRlclJlcGVhdFwiOiB3LCBcIm1hc2tCb3JkZXJcIjogdywgXCJtYXNrVHlwZVwiOiB3LCBcInRleHREZWNvcmF0aW9uU3R5bGVcIjogdywgXCJ0ZXh0RGVjb3JhdGlvblNraXBcIjogdywgXCJ0ZXh0RGVjb3JhdGlvbkxpbmVcIjogdywgXCJ0ZXh0RGVjb3JhdGlvbkNvbG9yXCI6IHcsIFwiZmlsdGVyXCI6IHcsIFwiZm9udEZlYXR1cmVTZXR0aW5nc1wiOiB3LCBcImJyZWFrQWZ0ZXJcIjogd21tcywgXCJicmVha0JlZm9yZVwiOiB3bW1zLCBcImJyZWFrSW5zaWRlXCI6IHdtbXMsIFwiY29sdW1uQ291bnRcIjogd20sIFwiY29sdW1uRmlsbFwiOiB3bSwgXCJjb2x1bW5HYXBcIjogd20sIFwiY29sdW1uUnVsZVwiOiB3bSwgXCJjb2x1bW5SdWxlQ29sb3JcIjogd20sIFwiY29sdW1uUnVsZVN0eWxlXCI6IHdtLCBcImNvbHVtblJ1bGVXaWR0aFwiOiB3bSwgXCJjb2x1bW5zXCI6IHdtLCBcImNvbHVtblNwYW5cIjogd20sIFwiY29sdW1uV2lkdGhcIjogd20sIFwid3JpdGluZ01vZGVcIjogd21zLCBcImZsZXhcIjogdywgXCJmbGV4QmFzaXNcIjogdywgXCJmbGV4RGlyZWN0aW9uXCI6IHcsIFwiZmxleEdyb3dcIjogdywgXCJmbGV4Rmxvd1wiOiB3LCBcImZsZXhTaHJpbmtcIjogdywgXCJmbGV4V3JhcFwiOiB3LCBcImFsaWduQ29udGVudFwiOiB3LCBcImFsaWduSXRlbXNcIjogdywgXCJhbGlnblNlbGZcIjogdywgXCJqdXN0aWZ5Q29udGVudFwiOiB3LCBcIm9yZGVyXCI6IHcsIFwidHJhbnNmb3JtXCI6IHcsIFwidHJhbnNmb3JtT3JpZ2luXCI6IHcsIFwidHJhbnNmb3JtT3JpZ2luWFwiOiB3LCBcInRyYW5zZm9ybU9yaWdpbllcIjogdywgXCJiYWNrZmFjZVZpc2liaWxpdHlcIjogdywgXCJwZXJzcGVjdGl2ZVwiOiB3LCBcInBlcnNwZWN0aXZlT3JpZ2luXCI6IHcsIFwidHJhbnNmb3JtU3R5bGVcIjogdywgXCJ0cmFuc2Zvcm1PcmlnaW5aXCI6IHcsIFwiYW5pbWF0aW9uXCI6IHcsIFwiYW5pbWF0aW9uRGVsYXlcIjogdywgXCJhbmltYXRpb25EaXJlY3Rpb25cIjogdywgXCJhbmltYXRpb25GaWxsTW9kZVwiOiB3LCBcImFuaW1hdGlvbkR1cmF0aW9uXCI6IHcsIFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdywgXCJhbmltYXRpb25OYW1lXCI6IHcsIFwiYW5pbWF0aW9uUGxheVN0YXRlXCI6IHcsIFwiYW5pbWF0aW9uVGltaW5nRnVuY3Rpb25cIjogdywgXCJiYWNrZHJvcEZpbHRlclwiOiB3LCBcImZvbnRLZXJuaW5nXCI6IHcsIFwic2Nyb2xsU25hcFR5cGVcIjogd21zLCBcInNjcm9sbFNuYXBQb2ludHNYXCI6IHdtcywgXCJzY3JvbGxTbmFwUG9pbnRzWVwiOiB3bXMsIFwic2Nyb2xsU25hcERlc3RpbmF0aW9uXCI6IHdtcywgXCJzY3JvbGxTbmFwQ29vcmRpbmF0ZVwiOiB3bXMsIFwic2hhcGVJbWFnZVRocmVzaG9sZFwiOiB3LCBcInNoYXBlSW1hZ2VNYXJnaW5cIjogdywgXCJzaGFwZUltYWdlT3V0c2lkZVwiOiB3LCBcImh5cGhlbnNcIjogd21tcywgXCJmbG93SW50b1wiOiB3bXMsIFwiZmxvd0Zyb21cIjogd21zLCBcInJlZ2lvbkZyYWdtZW50XCI6IHdtcywgXCJ0ZXh0QWxpZ25MYXN0XCI6IG0sIFwidGFiU2l6ZVwiOiBtLCBcIndyYXBGbG93XCI6IG1zLCBcIndyYXBUaHJvdWdoXCI6IG1zLCBcIndyYXBNYXJnaW5cIjogbXMsIFwiZ3JpZFRlbXBsYXRlQ29sdW1uc1wiOiBtcywgXCJncmlkVGVtcGxhdGVSb3dzXCI6IG1zLCBcImdyaWRUZW1wbGF0ZUFyZWFzXCI6IG1zLCBcImdyaWRUZW1wbGF0ZVwiOiBtcywgXCJncmlkQXV0b0NvbHVtbnNcIjogbXMsIFwiZ3JpZEF1dG9Sb3dzXCI6IG1zLCBcImdyaWRBdXRvRmxvd1wiOiBtcywgXCJncmlkXCI6IG1zLCBcImdyaWRSb3dTdGFydFwiOiBtcywgXCJncmlkQ29sdW1uU3RhcnRcIjogbXMsIFwiZ3JpZFJvd0VuZFwiOiBtcywgXCJncmlkUm93XCI6IG1zLCBcImdyaWRDb2x1bW5cIjogbXMsIFwiZ3JpZENvbHVtbkVuZFwiOiBtcywgXCJncmlkQ29sdW1uR2FwXCI6IG1zLCBcImdyaWRSb3dHYXBcIjogbXMsIFwiZ3JpZEFyZWFcIjogbXMsIFwiZ3JpZEdhcFwiOiBtcywgXCJ0ZXh0U2l6ZUFkanVzdFwiOiB3bXMsIFwiYm9yZGVySW1hZ2VcIjogdywgXCJib3JkZXJJbWFnZU91dHNldFwiOiB3LCBcImJvcmRlckltYWdlUmVwZWF0XCI6IHcsIFwiYm9yZGVySW1hZ2VTbGljZVwiOiB3LCBcImJvcmRlckltYWdlU291cmNlXCI6IHcsIFwiYm9yZGVySW1hZ2VXaWR0aFwiOiB3LCBcInRyYW5zaXRpb25EZWxheVwiOiB3LCBcInRyYW5zaXRpb25EdXJhdGlvblwiOiB3LCBcInRyYW5zaXRpb25Qcm9wZXJ0eVwiOiB3LCBcInRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblwiOiB3IH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHByZWZpeFByb3BlcnR5O1xuXG52YXIgX2NhcGl0YWxpemVTdHJpbmcgPSByZXF1aXJlKCcuL2NhcGl0YWxpemVTdHJpbmcnKTtcblxudmFyIF9jYXBpdGFsaXplU3RyaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NhcGl0YWxpemVTdHJpbmcpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBwcmVmaXhQcm9wZXJ0eShwcmVmaXhQcm9wZXJ0aWVzLCBwcm9wZXJ0eSwgc3R5bGUpIHtcbiAgaWYgKHByZWZpeFByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XG4gICAgdmFyIHJlcXVpcmVkUHJlZml4ZXMgPSBwcmVmaXhQcm9wZXJ0aWVzW3Byb3BlcnR5XTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcmVxdWlyZWRQcmVmaXhlcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgc3R5bGVbcmVxdWlyZWRQcmVmaXhlc1tpXSArICgwLCBfY2FwaXRhbGl6ZVN0cmluZzIuZGVmYXVsdCkocHJvcGVydHkpXSA9IHN0eWxlW3Byb3BlcnR5XTtcbiAgICB9XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gcHJlZml4VmFsdWU7XG5mdW5jdGlvbiBwcmVmaXhWYWx1ZShwbHVnaW5zLCBwcm9wZXJ0eSwgdmFsdWUsIHN0eWxlLCBtZXRhRGF0YSkge1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gcGx1Z2lucy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBwcm9jZXNzZWRWYWx1ZSA9IHBsdWdpbnNbaV0ocHJvcGVydHksIHZhbHVlLCBzdHlsZSwgbWV0YURhdGEpO1xuXG4gICAgLy8gd2UgY2FuIHN0b3AgcHJvY2Vzc2luZyBpZiBhIHZhbHVlIGlzIHJldHVybmVkXG4gICAgLy8gYXMgYWxsIHBsdWdpbiBjcml0ZXJpYSBhcmUgdW5pcXVlXG4gICAgaWYgKHByb2Nlc3NlZFZhbHVlKSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc2VkVmFsdWU7XG4gICAgfVxuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGN1cnNvcjtcbnZhciBwcmVmaXhlcyA9IFsnLXdlYmtpdC0nLCAnLW1vei0nLCAnJ107XG5cbnZhciB2YWx1ZXMgPSB7XG4gICd6b29tLWluJzogdHJ1ZSxcbiAgJ3pvb20tb3V0JzogdHJ1ZSxcbiAgZ3JhYjogdHJ1ZSxcbiAgZ3JhYmJpbmc6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGN1cnNvcihwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgaWYgKHByb3BlcnR5ID09PSAnY3Vyc29yJyAmJiB2YWx1ZXMuaGFzT3duUHJvcGVydHkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHByZWZpeGVzLm1hcChmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgICByZXR1cm4gcHJlZml4ICsgdmFsdWU7XG4gICAgfSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNyb3NzRmFkZTtcblxudmFyIF9pc1ByZWZpeGVkVmFsdWUgPSByZXF1aXJlKCdjc3MtaW4tanMtdXRpbHMvbGliL2lzUHJlZml4ZWRWYWx1ZScpO1xuXG52YXIgX2lzUHJlZml4ZWRWYWx1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc1ByZWZpeGVkVmFsdWUpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyBodHRwOi8vY2FuaXVzZS5jb20vI3NlYXJjaD1jcm9zcy1mYWRlXG52YXIgcHJlZml4ZXMgPSBbJy13ZWJraXQtJywgJyddO1xuZnVuY3Rpb24gY3Jvc3NGYWRlKHByb3BlcnR5LCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhKDAsIF9pc1ByZWZpeGVkVmFsdWUyLmRlZmF1bHQpKHZhbHVlKSAmJiB2YWx1ZS5pbmRleE9mKCdjcm9zcy1mYWRlKCcpID4gLTEpIHtcbiAgICByZXR1cm4gcHJlZml4ZXMubWFwKGZ1bmN0aW9uIChwcmVmaXgpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9jcm9zcy1mYWRlXFwoL2csIHByZWZpeCArICdjcm9zcy1mYWRlKCcpO1xuICAgIH0pO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBmaWx0ZXI7XG5cbnZhciBfaXNQcmVmaXhlZFZhbHVlID0gcmVxdWlyZSgnY3NzLWluLWpzLXV0aWxzL2xpYi9pc1ByZWZpeGVkVmFsdWUnKTtcblxudmFyIF9pc1ByZWZpeGVkVmFsdWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXNQcmVmaXhlZFZhbHVlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8gaHR0cDovL2Nhbml1c2UuY29tLyNmZWF0PWNzcy1maWx0ZXItZnVuY3Rpb25cbnZhciBwcmVmaXhlcyA9IFsnLXdlYmtpdC0nLCAnJ107XG5mdW5jdGlvbiBmaWx0ZXIocHJvcGVydHksIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICEoMCwgX2lzUHJlZml4ZWRWYWx1ZTIuZGVmYXVsdCkodmFsdWUpICYmIHZhbHVlLmluZGV4T2YoJ2ZpbHRlcignKSA+IC0xKSB7XG4gICAgcmV0dXJuIHByZWZpeGVzLm1hcChmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvZmlsdGVyXFwoL2csIHByZWZpeCArICdmaWx0ZXIoJyk7XG4gICAgfSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGZsZXg7XG52YXIgdmFsdWVzID0ge1xuICBmbGV4OiBbJy13ZWJraXQtYm94JywgJy1tb3otYm94JywgJy1tcy1mbGV4Ym94JywgJy13ZWJraXQtZmxleCcsICdmbGV4J10sXG4gICdpbmxpbmUtZmxleCc6IFsnLXdlYmtpdC1pbmxpbmUtYm94JywgJy1tb3otaW5saW5lLWJveCcsICctbXMtaW5saW5lLWZsZXhib3gnLCAnLXdlYmtpdC1pbmxpbmUtZmxleCcsICdpbmxpbmUtZmxleCddXG59O1xuXG5mdW5jdGlvbiBmbGV4KHByb3BlcnR5LCB2YWx1ZSkge1xuICBpZiAocHJvcGVydHkgPT09ICdkaXNwbGF5JyAmJiB2YWx1ZXMuaGFzT3duUHJvcGVydHkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlc1t2YWx1ZV07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGZsZXhib3hPbGQ7XG52YXIgYWx0ZXJuYXRpdmVWYWx1ZXMgPSB7XG4gICdzcGFjZS1hcm91bmQnOiAnanVzdGlmeScsXG4gICdzcGFjZS1iZXR3ZWVuJzogJ2p1c3RpZnknLFxuICAnZmxleC1zdGFydCc6ICdzdGFydCcsXG4gICdmbGV4LWVuZCc6ICdlbmQnLFxuICAnd3JhcC1yZXZlcnNlJzogJ211bHRpcGxlJyxcbiAgd3JhcDogJ211bHRpcGxlJ1xufTtcblxudmFyIGFsdGVybmF0aXZlUHJvcHMgPSB7XG4gIGFsaWduSXRlbXM6ICdXZWJraXRCb3hBbGlnbicsXG4gIGp1c3RpZnlDb250ZW50OiAnV2Via2l0Qm94UGFjaycsXG4gIGZsZXhXcmFwOiAnV2Via2l0Qm94TGluZXMnXG59O1xuXG5mdW5jdGlvbiBmbGV4Ym94T2xkKHByb3BlcnR5LCB2YWx1ZSwgc3R5bGUpIHtcbiAgaWYgKHByb3BlcnR5ID09PSAnZmxleERpcmVjdGlvbicgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGlmICh2YWx1ZS5pbmRleE9mKCdjb2x1bW4nKSA+IC0xKSB7XG4gICAgICBzdHlsZS5XZWJraXRCb3hPcmllbnQgPSAndmVydGljYWwnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZS5XZWJraXRCb3hPcmllbnQgPSAnaG9yaXpvbnRhbCc7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5pbmRleE9mKCdyZXZlcnNlJykgPiAtMSkge1xuICAgICAgc3R5bGUuV2Via2l0Qm94RGlyZWN0aW9uID0gJ3JldmVyc2UnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZS5XZWJraXRCb3hEaXJlY3Rpb24gPSAnbm9ybWFsJztcbiAgICB9XG4gIH1cbiAgaWYgKGFsdGVybmF0aXZlUHJvcHMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XG4gICAgc3R5bGVbYWx0ZXJuYXRpdmVQcm9wc1twcm9wZXJ0eV1dID0gYWx0ZXJuYXRpdmVWYWx1ZXNbdmFsdWVdIHx8IHZhbHVlO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBncmFkaWVudDtcblxudmFyIF9pc1ByZWZpeGVkVmFsdWUgPSByZXF1aXJlKCdjc3MtaW4tanMtdXRpbHMvbGliL2lzUHJlZml4ZWRWYWx1ZScpO1xuXG52YXIgX2lzUHJlZml4ZWRWYWx1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc1ByZWZpeGVkVmFsdWUpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgcHJlZml4ZXMgPSBbJy13ZWJraXQtJywgJy1tb3otJywgJyddO1xuXG52YXIgdmFsdWVzID0gL2xpbmVhci1ncmFkaWVudHxyYWRpYWwtZ3JhZGllbnR8cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudHxyZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50LztcblxuZnVuY3Rpb24gZ3JhZGllbnQocHJvcGVydHksIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICEoMCwgX2lzUHJlZml4ZWRWYWx1ZTIuZGVmYXVsdCkodmFsdWUpICYmIHZhbHVlcy50ZXN0KHZhbHVlKSkge1xuICAgIHJldHVybiBwcmVmaXhlcy5tYXAoZnVuY3Rpb24gKHByZWZpeCkge1xuICAgICAgcmV0dXJuIHByZWZpeCArIHZhbHVlO1xuICAgIH0pO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBpbWFnZVNldDtcblxudmFyIF9pc1ByZWZpeGVkVmFsdWUgPSByZXF1aXJlKCdjc3MtaW4tanMtdXRpbHMvbGliL2lzUHJlZml4ZWRWYWx1ZScpO1xuXG52YXIgX2lzUHJlZml4ZWRWYWx1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc1ByZWZpeGVkVmFsdWUpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyBodHRwOi8vY2FuaXVzZS5jb20vI2ZlYXQ9Y3NzLWltYWdlLXNldFxudmFyIHByZWZpeGVzID0gWyctd2Via2l0LScsICcnXTtcbmZ1bmN0aW9uIGltYWdlU2V0KHByb3BlcnR5LCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhKDAsIF9pc1ByZWZpeGVkVmFsdWUyLmRlZmF1bHQpKHZhbHVlKSAmJiB2YWx1ZS5pbmRleE9mKCdpbWFnZS1zZXQoJykgPiAtMSkge1xuICAgIHJldHVybiBwcmVmaXhlcy5tYXAoZnVuY3Rpb24gKHByZWZpeCkge1xuICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL2ltYWdlLXNldFxcKC9nLCBwcmVmaXggKyAnaW1hZ2Utc2V0KCcpO1xuICAgIH0pO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBwb3NpdGlvbjtcbmZ1bmN0aW9uIHBvc2l0aW9uKHByb3BlcnR5LCB2YWx1ZSkge1xuICBpZiAocHJvcGVydHkgPT09ICdwb3NpdGlvbicgJiYgdmFsdWUgPT09ICdzdGlja3knKSB7XG4gICAgcmV0dXJuIFsnLXdlYmtpdC1zdGlja3knLCAnc3RpY2t5J107XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHNpemluZztcbnZhciBwcmVmaXhlcyA9IFsnLXdlYmtpdC0nLCAnLW1vei0nLCAnJ107XG5cbnZhciBwcm9wZXJ0aWVzID0ge1xuICBtYXhIZWlnaHQ6IHRydWUsXG4gIG1heFdpZHRoOiB0cnVlLFxuICB3aWR0aDogdHJ1ZSxcbiAgaGVpZ2h0OiB0cnVlLFxuICBjb2x1bW5XaWR0aDogdHJ1ZSxcbiAgbWluV2lkdGg6IHRydWUsXG4gIG1pbkhlaWdodDogdHJ1ZVxufTtcbnZhciB2YWx1ZXMgPSB7XG4gICdtaW4tY29udGVudCc6IHRydWUsXG4gICdtYXgtY29udGVudCc6IHRydWUsXG4gICdmaWxsLWF2YWlsYWJsZSc6IHRydWUsXG4gICdmaXQtY29udGVudCc6IHRydWUsXG4gICdjb250YWluLWZsb2F0cyc6IHRydWVcbn07XG5cbmZ1bmN0aW9uIHNpemluZyhwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpICYmIHZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gcHJlZml4ZXMubWFwKGZ1bmN0aW9uIChwcmVmaXgpIHtcbiAgICAgIHJldHVybiBwcmVmaXggKyB2YWx1ZTtcbiAgICB9KTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdHJhbnNpdGlvbjtcblxudmFyIF9oeXBoZW5hdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJ2Nzcy1pbi1qcy11dGlscy9saWIvaHlwaGVuYXRlUHJvcGVydHknKTtcblxudmFyIF9oeXBoZW5hdGVQcm9wZXJ0eTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oeXBoZW5hdGVQcm9wZXJ0eSk7XG5cbnZhciBfaXNQcmVmaXhlZFZhbHVlID0gcmVxdWlyZSgnY3NzLWluLWpzLXV0aWxzL2xpYi9pc1ByZWZpeGVkVmFsdWUnKTtcblxudmFyIF9pc1ByZWZpeGVkVmFsdWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXNQcmVmaXhlZFZhbHVlKTtcblxudmFyIF9jYXBpdGFsaXplU3RyaW5nID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvY2FwaXRhbGl6ZVN0cmluZycpO1xuXG52YXIgX2NhcGl0YWxpemVTdHJpbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2FwaXRhbGl6ZVN0cmluZyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBwcm9wZXJ0aWVzID0ge1xuICB0cmFuc2l0aW9uOiB0cnVlLFxuICB0cmFuc2l0aW9uUHJvcGVydHk6IHRydWUsXG4gIFdlYmtpdFRyYW5zaXRpb246IHRydWUsXG4gIFdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eTogdHJ1ZSxcbiAgTW96VHJhbnNpdGlvbjogdHJ1ZSxcbiAgTW96VHJhbnNpdGlvblByb3BlcnR5OiB0cnVlXG59O1xuXG5cbnZhciBwcmVmaXhNYXBwaW5nID0ge1xuICBXZWJraXQ6ICctd2Via2l0LScsXG4gIE1vejogJy1tb3otJyxcbiAgbXM6ICctbXMtJ1xufTtcblxuZnVuY3Rpb24gcHJlZml4VmFsdWUodmFsdWUsIHByb3BlcnR5UHJlZml4TWFwKSB7XG4gIGlmICgoMCwgX2lzUHJlZml4ZWRWYWx1ZTIuZGVmYXVsdCkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy8gb25seSBzcGxpdCBtdWx0aSB2YWx1ZXMsIG5vdCBjdWJpYyBiZXppZXJzXG4gIHZhciBtdWx0aXBsZVZhbHVlcyA9IHZhbHVlLnNwbGl0KC8sKD8hW14oKV0qKD86XFwoW14oKV0qXFwpKT9cXCkpL2cpO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBtdWx0aXBsZVZhbHVlcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBzaW5nbGVWYWx1ZSA9IG11bHRpcGxlVmFsdWVzW2ldO1xuICAgIHZhciB2YWx1ZXMgPSBbc2luZ2xlVmFsdWVdO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHByb3BlcnR5UHJlZml4TWFwKSB7XG4gICAgICB2YXIgZGFzaENhc2VQcm9wZXJ0eSA9ICgwLCBfaHlwaGVuYXRlUHJvcGVydHkyLmRlZmF1bHQpKHByb3BlcnR5KTtcblxuICAgICAgaWYgKHNpbmdsZVZhbHVlLmluZGV4T2YoZGFzaENhc2VQcm9wZXJ0eSkgPiAtMSAmJiBkYXNoQ2FzZVByb3BlcnR5ICE9PSAnb3JkZXInKSB7XG4gICAgICAgIHZhciBwcmVmaXhlcyA9IHByb3BlcnR5UHJlZml4TWFwW3Byb3BlcnR5XTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDAsIHBMZW4gPSBwcmVmaXhlcy5sZW5ndGg7IGogPCBwTGVuOyArK2opIHtcbiAgICAgICAgICAvLyBqb2luIGFsbCBwcmVmaXhlcyBhbmQgY3JlYXRlIGEgbmV3IHZhbHVlXG4gICAgICAgICAgdmFsdWVzLnVuc2hpZnQoc2luZ2xlVmFsdWUucmVwbGFjZShkYXNoQ2FzZVByb3BlcnR5LCBwcmVmaXhNYXBwaW5nW3ByZWZpeGVzW2pdXSArIGRhc2hDYXNlUHJvcGVydHkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG11bHRpcGxlVmFsdWVzW2ldID0gdmFsdWVzLmpvaW4oJywnKTtcbiAgfVxuXG4gIHJldHVybiBtdWx0aXBsZVZhbHVlcy5qb2luKCcsJyk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zaXRpb24ocHJvcGVydHksIHZhbHVlLCBzdHlsZSwgcHJvcGVydHlQcmVmaXhNYXApIHtcbiAgLy8gYWxzbyBjaGVjayBmb3IgYWxyZWFkeSBwcmVmaXhlZCB0cmFuc2l0aW9uc1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuICAgIHZhciBvdXRwdXRWYWx1ZSA9IHByZWZpeFZhbHVlKHZhbHVlLCBwcm9wZXJ0eVByZWZpeE1hcCk7XG4gICAgLy8gaWYgdGhlIHByb3BlcnR5IGlzIGFscmVhZHkgcHJlZml4ZWRcbiAgICB2YXIgd2Via2l0T3V0cHV0ID0gb3V0cHV0VmFsdWUuc3BsaXQoLywoPyFbXigpXSooPzpcXChbXigpXSpcXCkpP1xcKSkvZykuZmlsdGVyKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHJldHVybiAhLy1tb3otfC1tcy0vLnRlc3QodmFsKTtcbiAgICB9KS5qb2luKCcsJyk7XG5cbiAgICBpZiAocHJvcGVydHkuaW5kZXhPZignV2Via2l0JykgPiAtMSkge1xuICAgICAgcmV0dXJuIHdlYmtpdE91dHB1dDtcbiAgICB9XG5cbiAgICB2YXIgbW96T3V0cHV0ID0gb3V0cHV0VmFsdWUuc3BsaXQoLywoPyFbXigpXSooPzpcXChbXigpXSpcXCkpP1xcKSkvZykuZmlsdGVyKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHJldHVybiAhLy13ZWJraXQtfC1tcy0vLnRlc3QodmFsKTtcbiAgICB9KS5qb2luKCcsJyk7XG5cbiAgICBpZiAocHJvcGVydHkuaW5kZXhPZignTW96JykgPiAtMSkge1xuICAgICAgcmV0dXJuIG1vek91dHB1dDtcbiAgICB9XG5cbiAgICBzdHlsZVsnV2Via2l0JyArICgwLCBfY2FwaXRhbGl6ZVN0cmluZzIuZGVmYXVsdCkocHJvcGVydHkpXSA9IHdlYmtpdE91dHB1dDtcbiAgICBzdHlsZVsnTW96JyArICgwLCBfY2FwaXRhbGl6ZVN0cmluZzIuZGVmYXVsdCkocHJvcGVydHkpXSA9IG1vek91dHB1dDtcbiAgICByZXR1cm4gb3V0cHV0VmFsdWU7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGh5cGhlbmF0ZVByb3BlcnR5O1xuXG52YXIgX2h5cGhlbmF0ZVN0eWxlTmFtZSA9IHJlcXVpcmUoJ2h5cGhlbmF0ZS1zdHlsZS1uYW1lJyk7XG5cbnZhciBfaHlwaGVuYXRlU3R5bGVOYW1lMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2h5cGhlbmF0ZVN0eWxlTmFtZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGh5cGhlbmF0ZVByb3BlcnR5KHByb3BlcnR5KSB7XG4gIHJldHVybiAoMCwgX2h5cGhlbmF0ZVN0eWxlTmFtZTIuZGVmYXVsdCkocHJvcGVydHkpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiLyogZXNsaW50LWRpc2FibGUgbm8tdmFyLCBwcmVmZXItdGVtcGxhdGUgKi9cbnZhciB1cHBlcmNhc2VQYXR0ZXJuID0gL1tBLVpdL2dcbnZhciBtc1BhdHRlcm4gPSAvXm1zLS9cbnZhciBjYWNoZSA9IHt9XG5cbmZ1bmN0aW9uIHRvSHlwaGVuTG93ZXIobWF0Y2gpIHtcbiAgcmV0dXJuICctJyArIG1hdGNoLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gaHlwaGVuYXRlU3R5bGVOYW1lKG5hbWUpIHtcbiAgaWYgKGNhY2hlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgcmV0dXJuIGNhY2hlW25hbWVdXG4gIH1cblxuICB2YXIgaE5hbWUgPSBuYW1lLnJlcGxhY2UodXBwZXJjYXNlUGF0dGVybiwgdG9IeXBoZW5Mb3dlcilcbiAgcmV0dXJuIChjYWNoZVtuYW1lXSA9IG1zUGF0dGVybi50ZXN0KGhOYW1lKSA/ICctJyArIGhOYW1lIDogaE5hbWUpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGh5cGhlbmF0ZVN0eWxlTmFtZVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc3NMYWJlbHMgPSBjc3NMYWJlbHM7XG5leHBvcnRzLmRlZmF1bHQgPSBwYXJzZTtcblxudmFyIF9mbGF0dGVuID0gcmVxdWlyZSgnLi9mbGF0dGVuJyk7XG5cbnZhciBfZmxhdHRlbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mbGF0dGVuKTtcblxudmFyIF9oYXNoID0gcmVxdWlyZSgnLi9oYXNoJyk7XG5cbnZhciBfaGFzaDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oYXNoKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqKiogbGFiZWxzICoqKiovXG4vLyB0b2dnbGUgZm9yIGRlYnVnIGxhYmVscy5cbi8vICpzaG91bGRuJ3QqIGhhdmUgdG8gbWVzcyB3aXRoIHRoaXMgbWFudWFsbHlcblxuXG4vLyBpbXBvcnQgY2xlYW4gZnJvbSAnLi9jbGVhbic7XG52YXIgaGFzTGFiZWxzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJztcblxuZnVuY3Rpb24gY3NzTGFiZWxzKGJvb2wpIHtcbiAgaGFzTGFiZWxzID0gISFib29sO1xufVxuXG52YXIgcHJlZml4ZWRQc2V1ZG9TZWxlY3RvcnMgPSB7XG4gICc6OnBsYWNlaG9sZGVyJzogWyc6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXInLCAnOjotbW96LXBsYWNlaG9sZGVyJywgJzo6LW1zLWlucHV0LXBsYWNlaG9sZGVyJ10sXG4gICc6ZnVsbHNjcmVlbic6IFsnOi13ZWJraXQtZnVsbC1zY3JlZW4nLCAnOi1tb3otZnVsbC1zY3JlZW4nLCAnOi1tcy1mdWxsc2NyZWVuJ11cbn07XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3Ioa2V5KSB7XG4gIHZhciBwb3NzaWJsZXMgPSBbJzonLCAnLicsICdbJywgJz4nLCAnICddLFxuICAgICAgZm91bmQgPSBmYWxzZSxcbiAgICAgIGNoID0ga2V5LmNoYXJBdCgwKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3NzaWJsZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoY2ggPT09IHBvc3NpYmxlc1tpXSkge1xuICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3VuZCB8fCBrZXkuaW5kZXhPZignJicpID49IDA7XG59XG4vLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qMmNzcy9qMmMvYmxvYi81ZDM4MWMyZDcyMWQwNGI1NGZhYmU2YTE2NWQ1ODcyNDdjMzA4N2NiL3NyYy9oZWxwZXJzLmpzI0wyOC1MNjFcblxuLy8gXCJUb2tlbml6ZXNcIiB0aGUgc2VsZWN0b3JzIGludG8gcGFydHMgcmVsZXZhbnQgZm9yIHRoZSBuZXh0IGZ1bmN0aW9uLlxuLy8gU3RyaW5ncyBhbmQgY29tbWVudHMgYXJlIG1hdGNoZWQsIGJ1dCBpZ25vcmVkIGFmdGVyd2FyZHMuXG4vLyBUaGlzIGlzIG5vdCBhIGZ1bGwgdG9rZW5pemVycy4gSXQgb25seSByZWNvZ25pemVzIGNvbWFzLCBwYXJlbnRoZXNlcyxcbi8vIHN0cmluZ3MgYW5kIGNvbW1lbnRzLlxuLy8gcmVnZXhwIGdlbmVyYXRlZCBieSBzY3JpcHRzL3JlZ2V4cHMuanMgdGhlbiB0cmltbWVkIGJ5IGhhbmRcbnZhciBzZWxlY3RvclRva2VuaXplciA9IC9bKCksXXxcIig/OlxcXFwufFteXCJcXG5dKSpcInwnKD86XFxcXC58W14nXFxuXSkqJ3xcXC9cXCpbXFxzXFxTXSo/XFwqXFwvL2c7XG5cbi8qKlxuICogVGhpcyB3aWxsIHNwbGl0IGEgY29tYS1zZXBhcmF0ZWQgc2VsZWN0b3IgbGlzdCBpbnRvIGluZGl2aWR1YWwgc2VsZWN0b3JzLFxuICogaWdub3JpbmcgY29tYXMgaW4gc3RyaW5ncywgY29tbWVudHMgYW5kIGluIDpwc2V1ZG8tc2VsZWN0b3JzKHBhcmFtZXRlciwgbGlzdHMpLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cblxuZnVuY3Rpb24gc3BsaXRTZWxlY3RvcihzZWxlY3Rvcikge1xuICBpZiAoc2VsZWN0b3IuaW5kZXhPZignLCcpID09PSAtMSkge1xuICAgIHJldHVybiBbc2VsZWN0b3JdO1xuICB9XG5cbiAgdmFyIGluZGljZXMgPSBbXSxcbiAgICAgIHJlcyA9IFtdLFxuICAgICAgaW5QYXJlbiA9IDAsXG4gICAgICBvO1xuICAvKmVzbGludC1kaXNhYmxlIG5vLWNvbmQtYXNzaWduKi9cbiAgd2hpbGUgKG8gPSBzZWxlY3RvclRva2VuaXplci5leGVjKHNlbGVjdG9yKSkge1xuICAgIC8qZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiovXG4gICAgc3dpdGNoIChvWzBdKSB7XG4gICAgICBjYXNlICcoJzpcbiAgICAgICAgaW5QYXJlbisrO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyknOlxuICAgICAgICBpblBhcmVuLS07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnLCc6XG4gICAgICAgIGlmIChpblBhcmVuKSBicmVhaztcbiAgICAgICAgaW5kaWNlcy5wdXNoKG8uaW5kZXgpO1xuICAgIH1cbiAgfVxuICBmb3IgKG8gPSBpbmRpY2VzLmxlbmd0aDsgby0tOykge1xuICAgIHJlcy51bnNoaWZ0KHNlbGVjdG9yLnNsaWNlKGluZGljZXNbb10gKyAxKSk7XG4gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSgwLCBpbmRpY2VzW29dKTtcbiAgfVxuICByZXMudW5zaGlmdChzZWxlY3Rvcik7XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGpvaW5TZWxlY3RvcnMoYSwgYikge1xuICB2YXIgYXMgPSBzcGxpdFNlbGVjdG9yKGEpLm1hcChmdW5jdGlvbiAoYSkge1xuICAgIHJldHVybiAhKGEuaW5kZXhPZignJicpID49IDApID8gJyYnICsgYSA6IGE7XG4gIH0pO1xuICB2YXIgYnMgPSBzcGxpdFNlbGVjdG9yKGIpLm1hcChmdW5jdGlvbiAoYikge1xuICAgIHJldHVybiAhKGIuaW5kZXhPZignJicpID49IDApID8gJyYnICsgYiA6IGI7XG4gIH0pO1xuXG4gIHJldHVybiBicy5yZWR1Y2UoZnVuY3Rpb24gKGFyciwgYikge1xuICAgIHJldHVybiBhcnIuY29uY2F0KGFzLm1hcChmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGIucmVwbGFjZSgvXFwmL2csIGEpO1xuICAgIH0pKTtcbiAgfSwgW10pLmpvaW4oJywnKTtcbn1cblxuZnVuY3Rpb24gam9pbk1lZGlhUXVlcmllcyhhLCBiKSB7XG4gIHJldHVybiBhID8gJ0BtZWRpYSAnICsgYS5zdWJzdHJpbmcoNikgKyAnIGFuZCAnICsgYi5zdWJzdHJpbmcoNikgOiBiO1xufVxuXG5mdW5jdGlvbiBpc01lZGlhUXVlcnkoa2V5KSB7XG4gIHJldHVybiBrZXkuaW5kZXhPZignQG1lZGlhJykgPT09IDA7XG59XG5cbmZ1bmN0aW9uIGlzU3VwcG9ydHMoa2V5KSB7XG4gIHJldHVybiBrZXkuaW5kZXhPZignQHN1cHBvcnRzJykgPT09IDA7XG59XG5cbmZ1bmN0aW9uIGpvaW5TdXBwb3J0cyhhLCBiKSB7XG4gIHJldHVybiBhID8gJ0BzdXBwb3J0cyAnICsgYS5zdWJzdHJpbmcoOSkgKyAnIGFuZCAnICsgYi5zdWJzdHJpbmcoOSkgOiBiO1xufVxuXG4vLyBtdXRhYmxlISBtb2RpZmllcyBkZXN0LlxuZnVuY3Rpb24gY29uc3RydWN0KGRlc3QsIF9yZWYpIHtcbiAgdmFyIF9yZWYkc2VsZWN0b3IgPSBfcmVmLnNlbGVjdG9yLFxuICAgICAgc2VsZWN0b3IgPSBfcmVmJHNlbGVjdG9yID09PSB1bmRlZmluZWQgPyAnJyA6IF9yZWYkc2VsZWN0b3IsXG4gICAgICBfcmVmJG1xID0gX3JlZi5tcSxcbiAgICAgIG1xID0gX3JlZiRtcSA9PT0gdW5kZWZpbmVkID8gJycgOiBfcmVmJG1xLFxuICAgICAgX3JlZiRzdXBwID0gX3JlZi5zdXBwLFxuICAgICAgc3VwcCA9IF9yZWYkc3VwcCA9PT0gdW5kZWZpbmVkID8gJycgOiBfcmVmJHN1cHAsXG4gICAgICBfcmVmJGlucHV0cyA9IF9yZWYuaW5wdXRzLFxuICAgICAgaW5wdXRzID0gX3JlZiRpbnB1dHMgPT09IHVuZGVmaW5lZCA/IHt9IDogX3JlZiRpbnB1dHM7XG5cbiAgdmFyIGlucHV0QXJyYXkgPSAhQXJyYXkuaXNBcnJheShpbnB1dHMpID8gW2lucHV0c10gOiAoMCwgX2ZsYXR0ZW4yLmRlZmF1bHQpKGlucHV0cyk7XG5cbiAgaW5wdXRBcnJheS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gISF4O1xuICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIHZhciBzcmMgPSBpbnB1dDtcblxuICAgIE9iamVjdC5rZXlzKHNyYyB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoaXNTZWxlY3RvcihrZXkpKSB7XG4gICAgICAgIC8vIHRvZG8gLSByZWdleCB0ZXN0IHRoZSBzdHJpbmcgdG8gbG9vayBmb3IgcHJlZml4ZWRwc2V1ZG9zXG4gICAgICAgIGlmIChwcmVmaXhlZFBzZXVkb1NlbGVjdG9yc1trZXldKSB7XG4gICAgICAgICAgcHJlZml4ZWRQc2V1ZG9TZWxlY3RvcnNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uc3RydWN0KGRlc3QsIHtcbiAgICAgICAgICAgICAgc2VsZWN0b3I6IGpvaW5TZWxlY3RvcnMoc2VsZWN0b3IsIHApLFxuICAgICAgICAgICAgICBtcTogbXEsXG4gICAgICAgICAgICAgIHN1cHA6IHN1cHAsXG4gICAgICAgICAgICAgIGlucHV0czogc3JjW2tleV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdChkZXN0LCB7XG4gICAgICAgICAgc2VsZWN0b3I6IGpvaW5TZWxlY3RvcnMoc2VsZWN0b3IsIGtleSksXG4gICAgICAgICAgbXE6IG1xLFxuICAgICAgICAgIHN1cHA6IHN1cHAsXG4gICAgICAgICAgaW5wdXRzOiBzcmNba2V5XVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNNZWRpYVF1ZXJ5KGtleSkpIHtcbiAgICAgICAgY29uc3RydWN0KGRlc3QsIHtcbiAgICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICAgICAgbXE6IGpvaW5NZWRpYVF1ZXJpZXMobXEsIGtleSksXG4gICAgICAgICAgc3VwcDogc3VwcCxcbiAgICAgICAgICBpbnB1dHM6IHNyY1trZXldXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChpc1N1cHBvcnRzKGtleSkpIHtcbiAgICAgICAgY29uc3RydWN0KGRlc3QsIHtcbiAgICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICAgICAgbXE6IG1xLFxuICAgICAgICAgIHN1cHA6IGpvaW5TdXBwb3J0cyhzdXBwLCBrZXkpLFxuICAgICAgICAgIGlucHV0czogc3JjW2tleV1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX2Rlc3QgPSBkZXN0O1xuICAgICAgICBpZiAoc3VwcCkge1xuICAgICAgICAgIF9kZXN0W3N1cHBdID0gX2Rlc3Rbc3VwcF0gfHwge307XG4gICAgICAgICAgX2Rlc3QgPSBfZGVzdFtzdXBwXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobXEpIHtcbiAgICAgICAgICBfZGVzdFttcV0gPSBfZGVzdFttcV0gfHwge307XG4gICAgICAgICAgX2Rlc3QgPSBfZGVzdFttcV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgICAgX2Rlc3Rbc2VsZWN0b3JdID0gX2Rlc3Rbc2VsZWN0b3JdIHx8IHt9O1xuICAgICAgICAgIF9kZXN0ID0gX2Rlc3Rbc2VsZWN0b3JdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2xhYmVsJykge1xuICAgICAgICAgIGlmIChoYXNMYWJlbHMpIHtcbiAgICAgICAgICAgIC8vIGNvbmNhdCBhdCByb290IG9mIG9iamVjdFxuICAgICAgICAgICAgZGVzdC5sYWJlbCA9IGRlc3QubGFiZWwuY29uY2F0KHNyYy5sYWJlbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF9kZXN0W2tleV0gPSBzcmNba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gZGVzdDtcbn1cblxuZnVuY3Rpb24gZ3JvdXBCeVR5cGUoc3R5bGUpIHtcbiAgLy8gd2UgY2FuIGJlIHN1cmUgaXQncyBub3QgaW5maW5pdGVseSBuZXN0ZWQgaGVyZVxuICB2YXIgcGxhaW4gPSB2b2lkIDAsXG4gICAgICBzZWxlY3RzID0gdm9pZCAwLFxuICAgICAgbWVkaWFzID0gdm9pZCAwLFxuICAgICAgc3VwcG9ydHMgPSB2b2lkIDA7XG4gIE9iamVjdC5rZXlzKHN0eWxlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoa2V5LmluZGV4T2YoJyYnKSA+PSAwKSB7XG4gICAgICBzZWxlY3RzID0gc2VsZWN0cyB8fCB7fTtcbiAgICAgIHNlbGVjdHNba2V5XSA9IHN0eWxlW2tleV07XG4gICAgfSBlbHNlIGlmIChrZXkuaW5kZXhPZignQG1lZGlhJykgPT09IDApIHtcbiAgICAgIG1lZGlhcyA9IG1lZGlhcyB8fCB7fTtcbiAgICAgIG1lZGlhc1trZXldID0gZ3JvdXBCeVR5cGUoc3R5bGVba2V5XSk7XG4gICAgfSBlbHNlIGlmIChrZXkuaW5kZXhPZignQHN1cHBvcnRzJykgPT09IDApIHtcbiAgICAgIHN1cHBvcnRzID0gc3VwcG9ydHMgfHwge307XG4gICAgICBzdXBwb3J0c1trZXldID0gZ3JvdXBCeVR5cGUoc3R5bGVba2V5XSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdsYWJlbCcpIHtcbiAgICAgIGlmIChzdHlsZS5sYWJlbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBsYWluID0gcGxhaW4gfHwge307XG4gICAgICAgIHBsYWluLmxhYmVsID0gaGFzTGFiZWxzID8gc3R5bGUubGFiZWwuam9pbignLicpIDogJyc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBsYWluID0gcGxhaW4gfHwge307XG4gICAgICBwbGFpbltrZXldID0gc3R5bGVba2V5XTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4geyBwbGFpbjogcGxhaW4sIHNlbGVjdHM6IHNlbGVjdHMsIG1lZGlhczogbWVkaWFzLCBzdXBwb3J0czogc3VwcG9ydHMgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2UoY3NzKSB7XG4gIHZhciBwYXJzZWQgPSBncm91cEJ5VHlwZShjb25zdHJ1Y3QoeyBsYWJlbDogW10gfSwgeyBpbnB1dHM6IGNzcyB9KSk7XG4gIHZhciBjbGFzc05hbWUgPSAnY3NzLScgKyAoMCwgX2hhc2gyLmRlZmF1bHQpKHBhcnNlZCk7XG4gIHJldHVybiB7IGNsYXNzTmFtZTogY2xhc3NOYW1lLCBwYXJzZWQ6IHBhcnNlZCB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZmxhdHRlbjtcbmZ1bmN0aW9uIGZsYXR0ZW4oaW5BcnIpIHtcbiAgdmFyIGFyciA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5BcnJbaV0pKSBhcnIgPSBhcnIuY29uY2F0KGZsYXR0ZW4oaW5BcnJbaV0pKTtlbHNlIGFyciA9IGFyci5jb25jYXQoaW5BcnJbaV0pO1xuICB9XG4gIHJldHVybiBhcnI7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBoYXNoaWZ5O1xuXG4vLyBtdXJtdXJoYXNoMiB2aWEgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vcmF5Y21vcmdhbi81ODg0MjNcblxuZnVuY3Rpb24gaGFzaGlmeShvYmopIHtcbiAgdmFyIHN0ciA9IEpTT04uc3RyaW5naWZ5KG9iaik7XG4gIHZhciB0b1JldCA9IGRvSGFzaChzdHIsIHN0ci5sZW5ndGgpLnRvU3RyaW5nKDM2KTtcbiAgLy8gaWYob2JqLmxhYmVsICYmIChvYmoubGFiZWwubGVuZ3RoID4gMCkgJiYgaXNEZXYpe1xuICAvLyAgIHJldHVybiBzaW1wbGUob2JqLmxhYmVsLmpvaW4oJy4nKSwgJy0nKSArICctJyArIHRvUmV0XG4gIC8vIH1cbiAgcmV0dXJuIHRvUmV0O1xufVxuXG5mdW5jdGlvbiBkb0hhc2goc3RyLCBzZWVkKSB7XG4gIHZhciBtID0gMHg1YmQxZTk5NTtcbiAgdmFyIHIgPSAyNDtcbiAgdmFyIGggPSBzZWVkIF4gc3RyLmxlbmd0aDtcbiAgdmFyIGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gIHZhciBjdXJyZW50SW5kZXggPSAwO1xuXG4gIHdoaWxlIChsZW5ndGggPj0gNCkge1xuICAgIHZhciBrID0gVUludDMyKHN0ciwgY3VycmVudEluZGV4KTtcblxuICAgIGsgPSBVbXVsMzIoaywgbSk7XG4gICAgayBePSBrID4+PiByO1xuICAgIGsgPSBVbXVsMzIoaywgbSk7XG5cbiAgICBoID0gVW11bDMyKGgsIG0pO1xuICAgIGggXj0gaztcblxuICAgIGN1cnJlbnRJbmRleCArPSA0O1xuICAgIGxlbmd0aCAtPSA0O1xuICB9XG5cbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDM6XG4gICAgICBoIF49IFVJbnQxNihzdHIsIGN1cnJlbnRJbmRleCk7XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGN1cnJlbnRJbmRleCArIDIpIDw8IDE2O1xuICAgICAgaCA9IFVtdWwzMihoLCBtKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAyOlxuICAgICAgaCBePSBVSW50MTYoc3RyLCBjdXJyZW50SW5kZXgpO1xuICAgICAgaCA9IFVtdWwzMihoLCBtKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChjdXJyZW50SW5kZXgpO1xuICAgICAgaCA9IFVtdWwzMihoLCBtKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgaCBePSBoID4+PiAxMztcbiAgaCA9IFVtdWwzMihoLCBtKTtcbiAgaCBePSBoID4+PiAxNTtcblxuICByZXR1cm4gaCA+Pj4gMDtcbn1cblxuZnVuY3Rpb24gVUludDMyKHN0ciwgcG9zKSB7XG4gIHJldHVybiBzdHIuY2hhckNvZGVBdChwb3MrKykgKyAoc3RyLmNoYXJDb2RlQXQocG9zKyspIDw8IDgpICsgKHN0ci5jaGFyQ29kZUF0KHBvcysrKSA8PCAxNikgKyAoc3RyLmNoYXJDb2RlQXQocG9zKSA8PCAyNCk7XG59XG5cbmZ1bmN0aW9uIFVJbnQxNihzdHIsIHBvcykge1xuICByZXR1cm4gc3RyLmNoYXJDb2RlQXQocG9zKyspICsgKHN0ci5jaGFyQ29kZUF0KHBvcysrKSA8PCA4KTtcbn1cblxuZnVuY3Rpb24gVW11bDMyKG4sIG0pIHtcbiAgbiA9IG4gfCAwO1xuICBtID0gbSB8IDA7XG4gIHZhciBubG8gPSBuICYgMHhmZmZmO1xuICB2YXIgbmhpID0gbiA+Pj4gMTY7XG4gIHZhciByZXMgPSBubG8gKiBtICsgKChuaGkgKiBtICYgMHhmZmZmKSA8PCAxNikgfCAwO1xuICByZXR1cm4gcmVzO1xufSIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoJ3Byb3AtdHlwZXMnKTtcblxudmFyIF9wcm9wVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvcFR5cGVzKTtcblxudmFyIF9QYWdlciA9IHJlcXVpcmUoJy4vUGFnZXInKTtcblxudmFyIF9QYWdlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9QYWdlcik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgVmlld1BhZ2VyID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFZpZXdQYWdlciwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVmlld1BhZ2VyKHByb3BzKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFZpZXdQYWdlcik7XG5cbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoVmlld1BhZ2VyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVmlld1BhZ2VyKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xuXG4gICAgdmFyIHBhZ2VyID0gbmV3IF9QYWdlcjIuZGVmYXVsdCgpO1xuICAgIHZhciBmb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgcmV0dXJuIF90aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgfTtcblxuICAgIC8vIHJlLXJlbmRlciB0aGUgd2hvbGUgdHJlZSB0byB1cGRhdGUgY29tcG9uZW50cyBvbiBjZXJ0YWluIGV2ZW50c1xuICAgIHBhZ2VyLm9uKCd2aWV3Q2hhbmdlJywgZm9yY2VVcGRhdGUpO1xuICAgIHBhZ2VyLm9uKCdoeWRyYXRlZCcsIGZvcmNlVXBkYXRlKTtcblxuICAgIF90aGlzLl9wYWdlciA9IHBhZ2VyO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhWaWV3UGFnZXIsIFt7XG4gICAga2V5OiAnZ2V0Q2hpbGRDb250ZXh0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFnZXI6IHRoaXMuX3BhZ2VyXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgLy8gcnVuIGEgaHlkcmF0aW9uIG9uIHRoZSBuZXh0IGFuaW1hdGlvbiBmcmFtZSB0byBvYnRhaW4gcHJvcGVyIHRhcmdldHMgYW5kIHBvc2l0aW9uaW5nXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuX3BhZ2VyLmh5ZHJhdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldEluc3RhbmNlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW5zdGFuY2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGFnZXI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgdGFnID0gX3Byb3BzLnRhZyxcbiAgICAgICAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzLCBbJ3RhZyddKTtcblxuICAgICAgcmV0dXJuICgwLCBfcmVhY3QuY3JlYXRlRWxlbWVudCkodGFnLCByZXN0UHJvcHMpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBWaWV3UGFnZXI7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5WaWV3UGFnZXIuY2hpbGRDb250ZXh0VHlwZXMgPSB7XG4gIHBhZ2VyOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lmluc3RhbmNlT2YoX1BhZ2VyMi5kZWZhdWx0KVxufTtcblZpZXdQYWdlci5wcm9wVHlwZXMgPSB7XG4gIHRhZzogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmdcbn07XG5WaWV3UGFnZXIuZGVmYXVsdFByb3BzID0ge1xuICB0YWc6ICdkaXYnXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gVmlld1BhZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiLy8gICAgICBcbi8vIEFuIGV2ZW50IGhhbmRsZXIgY2FuIHRha2UgYW4gb3B0aW9uYWwgZXZlbnQgYXJndW1lbnRcbi8vIGFuZCBzaG91bGQgbm90IHJldHVybiBhIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4vLyBBbiBhcnJheSBvZiBhbGwgY3VycmVudGx5IHJlZ2lzdGVyZWQgZXZlbnQgaGFuZGxlcnMgZm9yIGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuLy8gQSBtYXAgb2YgZXZlbnQgdHlwZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgXG5cbi8qKiBNaXR0OiBUaW55ICh+MjAwYikgZnVuY3Rpb25hbCBldmVudCBlbWl0dGVyIC8gcHVic3ViLlxuICogIEBuYW1lIG1pdHRcbiAqICBAcmV0dXJucyB7TWl0dH1cbiAqL1xuZnVuY3Rpb24gbWl0dChhbGwgICAgICAgICAgICAgICAgICkge1xuXHRhbGwgPSBhbGwgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRyZXR1cm4ge1xuXHRcdC8qKlxuXHRcdCAqIFJlZ2lzdGVyIGFuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiB0eXBlLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSB0eXBlXHRUeXBlIG9mIGV2ZW50IHRvIGxpc3RlbiBmb3IsIG9yIGBcIipcImAgZm9yIGFsbCBldmVudHNcblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaGFuZGxlciBGdW5jdGlvbiB0byBjYWxsIGluIHJlc3BvbnNlIHRvIGdpdmVuIGV2ZW50XG5cdFx0ICogQG1lbWJlck9mIG1pdHRcblx0XHQgKi9cblx0XHRvbjogZnVuY3Rpb24gb24odHlwZSAgICAgICAgLCBoYW5kbGVyICAgICAgICAgICAgICApIHtcblx0XHRcdChhbGxbdHlwZV0gfHwgKGFsbFt0eXBlXSA9IFtdKSkucHVzaChoYW5kbGVyKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiB0eXBlLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSB0eXBlXHRUeXBlIG9mIGV2ZW50IHRvIHVucmVnaXN0ZXIgYGhhbmRsZXJgIGZyb20sIG9yIGBcIipcImBcblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaGFuZGxlciBIYW5kbGVyIGZ1bmN0aW9uIHRvIHJlbW92ZVxuXHRcdCAqIEBtZW1iZXJPZiBtaXR0XG5cdFx0ICovXG5cdFx0b2ZmOiBmdW5jdGlvbiBvZmYodHlwZSAgICAgICAgLCBoYW5kbGVyICAgICAgICAgICAgICApIHtcblx0XHRcdGlmIChhbGxbdHlwZV0pIHtcblx0XHRcdFx0YWxsW3R5cGVdLnNwbGljZShhbGxbdHlwZV0uaW5kZXhPZihoYW5kbGVyKSA+Pj4gMCwgMSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEludm9rZSBhbGwgaGFuZGxlcnMgZm9yIHRoZSBnaXZlbiB0eXBlLlxuXHRcdCAqIElmIHByZXNlbnQsIGBcIipcImAgaGFuZGxlcnMgYXJlIGludm9rZWQgYWZ0ZXIgdHlwZS1tYXRjaGVkIGhhbmRsZXJzLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgIFRoZSBldmVudCB0eXBlIHRvIGludm9rZVxuXHRcdCAqIEBwYXJhbSB7QW55fSBbZXZ0XSAgQW55IHZhbHVlIChvYmplY3QgaXMgcmVjb21tZW5kZWQgYW5kIHBvd2VyZnVsKSwgcGFzc2VkIHRvIGVhY2ggaGFuZGxlclxuXHRcdCAqIEBtZW1iZXJPZiBtaXR0XG5cdFx0ICovXG5cdFx0ZW1pdDogZnVuY3Rpb24gZW1pdCh0eXBlICAgICAgICAsIGV2dCAgICAgKSB7XG5cdFx0XHQoYWxsW3R5cGVdIHx8IFtdKS5zbGljZSgpLm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyBoYW5kbGVyKGV2dCk7IH0pO1xuXHRcdFx0KGFsbFsnKiddIHx8IFtdKS5zbGljZSgpLm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyBoYW5kbGVyKHR5cGUsIGV2dCk7IH0pO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWl0dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1pdHQuZXMuanMubWFwXG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBlbGVtZW50RG9jdW1lbnQgPSBlbC5vd25lckRvY3VtZW50IHx8IGVsO1xuICB2YXIgYmFzaWNUYWJiYWJsZXMgPSBbXTtcbiAgdmFyIG9yZGVyZWRUYWJiYWJsZXMgPSBbXTtcblxuICAvLyBBIG5vZGUgaXMgXCJhdmFpbGFibGVcIiBpZlxuICAvLyAtIGl0J3MgY29tcHV0ZWQgc3R5bGVcbiAgdmFyIGlzVW5hdmFpbGFibGUgPSBjcmVhdGVJc1VuYXZhaWxhYmxlKGVsZW1lbnREb2N1bWVudCk7XG5cbiAgdmFyIGNhbmRpZGF0ZVNlbGVjdG9ycyA9IFtcbiAgICAnaW5wdXQnLFxuICAgICdzZWxlY3QnLFxuICAgICdhW2hyZWZdJyxcbiAgICAndGV4dGFyZWEnLFxuICAgICdidXR0b24nLFxuICAgICdbdGFiaW5kZXhdJyxcbiAgXTtcblxuICB2YXIgY2FuZGlkYXRlcyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoY2FuZGlkYXRlU2VsZWN0b3JzLmpvaW4oJywnKSk7XG5cbiAgaWYgKG9wdGlvbnMuaW5jbHVkZUNvbnRhaW5lcikge1xuICAgIHZhciBtYXRjaGVzID0gRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyB8fCBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG5cbiAgICBpZiAoXG4gICAgICBjYW5kaWRhdGVTZWxlY3RvcnMuc29tZShmdW5jdGlvbihjYW5kaWRhdGVTZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gbWF0Y2hlcy5jYWxsKGVsLCBjYW5kaWRhdGVTZWxlY3Rvcik7XG4gICAgICB9KVxuICAgICkge1xuICAgICAgY2FuZGlkYXRlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShjYW5kaWRhdGVzKTtcbiAgICAgIGNhbmRpZGF0ZXMudW5zaGlmdChlbCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNhbmRpZGF0ZSwgY2FuZGlkYXRlSW5kZXg7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gY2FuZGlkYXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGVzW2ldO1xuICAgIGNhbmRpZGF0ZUluZGV4ID0gcGFyc2VJbnQoY2FuZGlkYXRlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSwgMTApIHx8IGNhbmRpZGF0ZS50YWJJbmRleDtcblxuICAgIGlmIChcbiAgICAgIGNhbmRpZGF0ZUluZGV4IDwgMFxuICAgICAgfHwgKGNhbmRpZGF0ZS50YWdOYW1lID09PSAnSU5QVVQnICYmIGNhbmRpZGF0ZS50eXBlID09PSAnaGlkZGVuJylcbiAgICAgIHx8IGNhbmRpZGF0ZS5kaXNhYmxlZFxuICAgICAgfHwgaXNVbmF2YWlsYWJsZShjYW5kaWRhdGUsIGVsZW1lbnREb2N1bWVudClcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjYW5kaWRhdGVJbmRleCA9PT0gMCkge1xuICAgICAgYmFzaWNUYWJiYWJsZXMucHVzaChjYW5kaWRhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcmRlcmVkVGFiYmFibGVzLnB1c2goe1xuICAgICAgICBpbmRleDogaSxcbiAgICAgICAgdGFiSW5kZXg6IGNhbmRpZGF0ZUluZGV4LFxuICAgICAgICBub2RlOiBjYW5kaWRhdGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB2YXIgdGFiYmFibGVOb2RlcyA9IG9yZGVyZWRUYWJiYWJsZXNcbiAgICAuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICByZXR1cm4gYS50YWJJbmRleCA9PT0gYi50YWJJbmRleCA/IGEuaW5kZXggLSBiLmluZGV4IDogYS50YWJJbmRleCAtIGIudGFiSW5kZXg7XG4gICAgfSlcbiAgICAubWFwKGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBhLm5vZGVcbiAgICB9KTtcblxuICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0YWJiYWJsZU5vZGVzLCBiYXNpY1RhYmJhYmxlcyk7XG5cbiAgcmV0dXJuIHRhYmJhYmxlTm9kZXM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUlzVW5hdmFpbGFibGUoZWxlbWVudERvY3VtZW50KSB7XG4gIC8vIE5vZGUgY2FjaGUgbXVzdCBiZSByZWZyZXNoZWQgb24gZXZlcnkgY2hlY2ssIGluIGNhc2VcbiAgLy8gdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQgaGFzIGNoYW5nZWRcbiAgdmFyIGlzT2ZmQ2FjaGUgPSBbXTtcblxuICAvLyBcIm9mZlwiIG1lYW5zIGBkaXNwbGF5OiBub25lO2AsIGFzIG9wcG9zZWQgdG8gXCJoaWRkZW5cIixcbiAgLy8gd2hpY2ggbWVhbnMgYHZpc2liaWxpdHk6IGhpZGRlbjtgLiBnZXRDb21wdXRlZFN0eWxlXG4gIC8vIGFjY3VyYXRlbHkgcmVmbGVjdHMgdmlzaWJsaXR5IGluIGNvbnRleHQgYnV0IG5vdFxuICAvLyBcIm9mZlwiIHN0YXRlLCBzbyB3ZSBuZWVkIHRvIHJlY3Vyc2l2ZWx5IGNoZWNrIHBhcmVudHMuXG5cbiAgZnVuY3Rpb24gaXNPZmYobm9kZSwgbm9kZUNvbXB1dGVkU3R5bGUpIHtcbiAgICBpZiAobm9kZSA9PT0gZWxlbWVudERvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gRmluZCB0aGUgY2FjaGVkIG5vZGUgKEFycmF5LnByb3RvdHlwZS5maW5kIG5vdCBhdmFpbGFibGUgaW4gSUU5KVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBpc09mZkNhY2hlLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaXNPZmZDYWNoZVtpXVswXSA9PT0gbm9kZSkgcmV0dXJuIGlzT2ZmQ2FjaGVbaV1bMV07XG4gICAgfVxuXG4gICAgbm9kZUNvbXB1dGVkU3R5bGUgPSBub2RlQ29tcHV0ZWRTdHlsZSB8fCBlbGVtZW50RG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcblxuICAgIHZhciByZXN1bHQgPSBmYWxzZTtcblxuICAgIGlmIChub2RlQ29tcHV0ZWRTdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgIHJlc3VsdCA9IGlzT2ZmKG5vZGUucGFyZW50Tm9kZSk7XG4gICAgfVxuXG4gICAgaXNPZmZDYWNoZS5wdXNoKFtub2RlLCByZXN1bHRdKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gaXNVbmF2YWlsYWJsZShub2RlKSB7XG4gICAgaWYgKG5vZGUgPT09IGVsZW1lbnREb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHJldHVybiBmYWxzZTtcblxuICAgIHZhciBjb21wdXRlZFN0eWxlID0gZWxlbWVudERvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG5cbiAgICBpZiAoaXNPZmYobm9kZSwgY29tcHV0ZWRTdHlsZSkpIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkU3R5bGUudmlzaWJpbGl0eSA9PT0gJ2hpZGRlbic7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG52YXIgX3NsaWNlZFRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIHNsaWNlSXRlcmF0b3IoYXJyLCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH0gcmV0dXJuIGZ1bmN0aW9uIChhcnIsIGkpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyByZXR1cm4gYXJyOyB9IGVsc2UgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkgeyByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpOyB9IGVsc2UgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTsgfSB9OyB9KCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHBvbHlsaW5lYXJTY2FsZTtcblxudmFyIF9waWVjZXdpc2UgPSByZXF1aXJlKCcuL3BpZWNld2lzZScpO1xuXG52YXIgX3BpZWNld2lzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9waWVjZXdpc2UpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBwb2x5bGluZWFyU2NhbGUoc3RvcHMpIHtcbiAgdmFyIHhzID0gW107XG4gIHZhciB5c19yID0gW107XG4gIHZhciB5c19nID0gW107XG4gIHZhciB5c19iID0gW107XG5cbiAgc3RvcHMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgICAgICBkb21haW4gPSBfcmVmMlswXSxcbiAgICAgICAgcmFuZ2UgPSBfcmVmMlsxXTtcblxuICAgIHhzLnB1c2goZG9tYWluKTtcbiAgICBpZiAoaXNOYU4ocmFuZ2UpKSB7XG4gICAgICB5c19yLnB1c2gocGFyc2VJbnQocmFuZ2Uuc3Vic3RyKDEsIDIpLCAxNikpO1xuICAgICAgeXNfZy5wdXNoKHBhcnNlSW50KHJhbmdlLnN1YnN0cigzLCAyKSwgMTYpKTtcbiAgICAgIHlzX2IucHVzaChwYXJzZUludChyYW5nZS5zdWJzdHIoNSwgMiksIDE2KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHlzX3IucHVzaChyYW5nZSk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgcHdfciA9ICgwLCBfcGllY2V3aXNlMi5kZWZhdWx0KSh4cywgeXNfcik7XG5cbiAgaWYgKHlzX2cubGVuZ3RoICYmIHlzX2IubGVuZ3RoKSB7XG4gICAgdmFyIF9yZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHdfZyA9ICgwLCBfcGllY2V3aXNlMi5kZWZhdWx0KSh4cywgeXNfZyk7XG4gICAgICB2YXIgcHdfYiA9ICgwLCBfcGllY2V3aXNlMi5kZWZhdWx0KSh4cywgeXNfYik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2OiBmdW5jdGlvbiB2KHgpIHtcbiAgICAgICAgICByZXR1cm4gJ3JnYignICsgTWF0aC5yb3VuZChwd19yKHgpKSArICcsICcgKyBNYXRoLnJvdW5kKHB3X2coeCkpICsgJywgJyArIE1hdGgucm91bmQocHdfYih4KSkgKyAnKSc7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSgpO1xuXG4gICAgaWYgKCh0eXBlb2YgX3JldCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoX3JldCkpID09PSBcIm9iamVjdFwiKSByZXR1cm4gX3JldC52O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHB3X3IoeCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBwaWVjZXdpc2U7XG5mdW5jdGlvbiBwaWVjZXdpc2UoeHMsIHlzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoeCkge1xuICAgIC8vIG91dCBvZiBib3VuZHNcbiAgICBpZiAoeCA8PSB4c1swXSkge1xuICAgICAgcmV0dXJuIHlzWzBdO1xuICAgIH0gZWxzZSBpZiAoeCA+PSB4c1t4cy5sZW5ndGggLSAxXSkge1xuICAgICAgcmV0dXJuIHlzW3hzLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIC8vIGJpc2VjdFxuICAgIHZhciBsbyA9IDA7XG4gICAgdmFyIGhpID0geHMubGVuZ3RoIC0gMTtcblxuICAgIHdoaWxlIChoaSAtIGxvID4gMSkge1xuICAgICAgdmFyIG1pZCA9IGxvICsgaGkgPj4gMTtcbiAgICAgIGlmICh4IDwgeHNbbWlkXSkge1xuICAgICAgICBoaSA9IG1pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvID0gbWlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHByb2plY3RcbiAgICByZXR1cm4geXNbbG9dICsgKHlzW2hpXSAtIHlzW2xvXSkgLyAoeHNbaGldIC0geHNbbG9dKSAqICh4IC0geHNbbG9dKTtcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgUGFnZXJFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQYWdlckVsZW1lbnQoX3JlZikge1xuICAgIHZhciBub2RlID0gX3JlZi5ub2RlLFxuICAgICAgICBwYWdlciA9IF9yZWYucGFnZXIsXG4gICAgICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgICAgaGVpZ2h0ID0gX3JlZi5oZWlnaHQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGFnZXJFbGVtZW50KTtcblxuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy5wYWdlciA9IHBhZ2VyO1xuICAgIHRoaXMueCA9IHRoaXMueSA9IDA7XG4gICAgdGhpcy5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBhZ2VyRWxlbWVudCwgW3tcbiAgICBrZXk6ICdzZXRTaXplJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy5ub2RlLm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5ub2RlLm9mZnNldEhlaWdodDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRQb3NpdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFBvc2l0aW9uKHBvc2l0aW9uKSB7XG4gICAgICB0aGlzW3RoaXMucGFnZXIub3B0aW9ucy5heGlzXSA9IHBvc2l0aW9uO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFNpemUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTaXplKGRpbWVuc2lvbikge1xuICAgICAgaWYgKGRpbWVuc2lvbiA9PT0gJ3dpZHRoJyB8fCBkaW1lbnNpb24gPT09ICdoZWlnaHQnKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2RpbWVuc2lvbl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYXhpcyA9IHRoaXMucGFnZXIub3B0aW9ucy5heGlzO1xuICAgICAgICByZXR1cm4gdGhpc1theGlzID09PSAneCcgPyAnd2lkdGgnIDogJ2hlaWdodCddO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFBvc2l0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UG9zaXRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpc1t0aGlzLnBhZ2VyLm9wdGlvbnMuYXhpc107XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBhZ2VyRWxlbWVudDtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUGFnZXJFbGVtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGdldFByZWZpeDtcblxuZnVuY3Rpb24gZ2V0UHJlZml4KHByb3ApIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBwcm9wO1xuXG4gIHZhciBzdHlsZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJykuc3R5bGU7XG4gIHZhciB2ZW5kb3JzID0gWydtcycsICdPJywgJ01veicsICdXZWJraXQnXTtcblxuICBpZiAoc3R5bGVzW3Byb3BdID09PSAnJykgcmV0dXJuIHByb3A7XG5cbiAgcHJvcCA9IHByb3AuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wLnNsaWNlKDEpO1xuXG4gIGZvciAodmFyIGkgPSB2ZW5kb3JzLmxlbmd0aDsgaS0tOykge1xuICAgIGlmIChzdHlsZXNbdmVuZG9yc1tpXSArIHByb3BdID09PSAnJykge1xuICAgICAgcmV0dXJuIHZlbmRvcnNbaV0gKyBwcm9wO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKCdwcm9wLXR5cGVzJyk7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbnZhciBfcmVhY3REb20gPSByZXF1aXJlKCdyZWFjdC1kb20nKTtcblxudmFyIF9yZWFjdE1vdGlvbiA9IHJlcXVpcmUoJ3JlYWN0LW1vdGlvbicpO1xuXG52YXIgX1BhZ2VyID0gcmVxdWlyZSgnLi9QYWdlcicpO1xuXG52YXIgX1BhZ2VyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1BhZ2VyKTtcblxudmFyIF9Td2lwZSA9IHJlcXVpcmUoJy4vU3dpcGUnKTtcblxudmFyIF9Td2lwZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Td2lwZSk7XG5cbnZhciBfS2V5Ym9hcmQgPSByZXF1aXJlKCcuL0tleWJvYXJkJyk7XG5cbnZhciBfS2V5Ym9hcmQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfS2V5Ym9hcmQpO1xuXG52YXIgX3NwZWNpYWxBc3NpZ24gPSByZXF1aXJlKCcuL3NwZWNpYWwtYXNzaWduJyk7XG5cbnZhciBfc3BlY2lhbEFzc2lnbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zcGVjaWFsQXNzaWduKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgY2hlY2tlZFByb3BzID0ge1xuICB0YWc6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYW55LFxuICBhdXRvU2l6ZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZihbdHJ1ZSwgZmFsc2UsICd3aWR0aCcsICdoZWlnaHQnXSksXG4gIGFjY2Vzc2liaWxpdHk6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgc3ByaW5nQ29uZmlnOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdE9mKF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyKVxufTtcblxudmFyIEZyYW1lID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEZyYW1lLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBGcmFtZShwcm9wcykge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGcmFtZSk7XG5cbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRnJhbWUuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGcmFtZSkpLmNhbGwodGhpcywgcHJvcHMpKTtcblxuICAgIF90aGlzLl9zZXRGcmFtZVNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZnJhbWVTaXplID0gX3RoaXMuY29udGV4dC5wYWdlci5nZXRGcmFtZVNpemUoeyBmdWxsU2l6ZTogdHJ1ZSB9KTtcblxuICAgICAgaWYgKGZyYW1lU2l6ZS53aWR0aCAmJiBmcmFtZVNpemUuaGVpZ2h0KSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZyYW1lU2l6ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdW5zZXQgdGhlIGluc3RhbnQgZmxhZyBub3cgdGhhdCBSZWFjdCBNb3Rpb24gaGFzIGRpbWVuc2lvbnMgdG8gYW5pbWF0ZSB0b1xuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pbnN0YW50KSB7XG4gICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IGluc3RhbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBpbnN0YW50OiB0cnVlXG4gICAgfTtcbiAgICBfdGhpcy5faHlkcmF0ZSA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhGcmFtZSwgW3tcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XG4gICAgICB2YXIgcGFnZXIgPSB0aGlzLmNvbnRleHQucGFnZXI7XG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBhdXRvU2l6ZSA9IF9wcm9wcy5hdXRvU2l6ZSxcbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5ID0gX3Byb3BzLmFjY2Vzc2liaWxpdHk7XG5cblxuICAgICAgcGFnZXIuc2V0T3B0aW9ucyh7IGF1dG9TaXplOiBhdXRvU2l6ZSwgYWNjZXNzaWJpbGl0eTogYWNjZXNzaWJpbGl0eSB9KTtcblxuICAgICAgdGhpcy5fc3dpcGUgPSBuZXcgX1N3aXBlMi5kZWZhdWx0KHBhZ2VyKTtcbiAgICAgIHRoaXMuX2tleWJvYXJkID0gbmV3IF9LZXlib2FyZDIuZGVmYXVsdChwYWdlcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBwYWdlciA9IHRoaXMuY29udGV4dC5wYWdlcjtcblxuXG4gICAgICBwYWdlci5hZGRGcmFtZSgoMCwgX3JlYWN0RG9tLmZpbmRET01Ob2RlKSh0aGlzKSk7XG5cbiAgICAgIC8vIHNldCBmcmFtZSBzaXplIGluaXRpYWxseSBhbmQgdGhlbiBiYXNlZCBvbiBjZXJ0YWluIHBhZ2VyIGV2ZW50c1xuICAgICAgdGhpcy5fc2V0RnJhbWVTaXplKCk7XG4gICAgICBwYWdlci5vbigndmlld0NoYW5nZScsIHRoaXMuX3NldEZyYW1lU2l6ZSk7XG4gICAgICBwYWdlci5vbignaHlkcmF0ZWQnLCB0aGlzLl9zZXRGcmFtZVNpemUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKF9yZWYpIHtcbiAgICAgIHZhciBhdXRvU2l6ZSA9IF9yZWYuYXV0b1NpemUsXG4gICAgICAgICAgYWNjZXNzaWJpbGl0eSA9IF9yZWYuYWNjZXNzaWJpbGl0eTtcblxuICAgICAgLy8gdXBkYXRlIGFueSBvcHRpb25zIHRoYXQgaGF2ZSBjaGFuZ2VkXG4gICAgICBpZiAodGhpcy5wcm9wcy5hdXRvU2l6ZSAhPT0gYXV0b1NpemUgfHwgdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5ICE9PSBhY2Nlc3NpYmlsaXR5KSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5wYWdlci5zZXRPcHRpb25zKHsgYXV0b1NpemU6IGF1dG9TaXplLCBhY2Nlc3NpYmlsaXR5OiBhY2Nlc3NpYmlsaXR5IH0pO1xuICAgICAgICB0aGlzLl9oeWRyYXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnREaWRVcGRhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUobmV4dFByb3BzKSB7XG4gICAgICBpZiAodGhpcy5faHlkcmF0ZSkge1xuICAgICAgICB0aGlzLmNvbnRleHQucGFnZXIuaHlkcmF0ZSgpO1xuICAgICAgICB0aGlzLl9oeWRyYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2dldEZyYW1lU3R5bGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0RnJhbWVTdHlsZSgpIHtcbiAgICAgIHZhciBzcHJpbmdDb25maWcgPSB0aGlzLnByb3BzLnNwcmluZ0NvbmZpZztcbiAgICAgIHZhciBfc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHdpZHRoID0gX3N0YXRlLndpZHRoLFxuICAgICAgICAgIGhlaWdodCA9IF9zdGF0ZS5oZWlnaHQsXG4gICAgICAgICAgaW5zdGFudCA9IF9zdGF0ZS5pbnN0YW50O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXhXaWR0aDogaW5zdGFudCA/IHdpZHRoIDogKDAsIF9yZWFjdE1vdGlvbi5zcHJpbmcpKHdpZHRoLCBzcHJpbmdDb25maWcpLFxuICAgICAgICBoZWlnaHQ6IGluc3RhbnQgPyBoZWlnaHQgOiAoMCwgX3JlYWN0TW90aW9uLnNwcmluZykoaGVpZ2h0LCBzcHJpbmdDb25maWcpXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19yZW5kZXJGcmFtZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9yZW5kZXJGcmFtZShzdHlsZSkge1xuICAgICAgdmFyIHBhZ2VyID0gdGhpcy5jb250ZXh0LnBhZ2VyO1xuICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHRhZyA9IF9wcm9wczIudGFnLFxuICAgICAgICAgIGFjY2Vzc2liaWxpdHkgPSBfcHJvcHMyLmFjY2Vzc2liaWxpdHk7XG5cbiAgICAgIHZhciBwcm9wcyA9ICgwLCBfc3BlY2lhbEFzc2lnbjIuZGVmYXVsdCkoX2V4dGVuZHMoe30sIHRoaXMuX3N3aXBlLmdldEV2ZW50cygpLCB0aGlzLl9rZXlib2FyZC5nZXRFdmVudHMoKSwge1xuICAgICAgICB0YWJJbmRleDogYWNjZXNzaWJpbGl0eSA/IDAgOiBudWxsXG4gICAgICB9KSwgdGhpcy5wcm9wcywgY2hlY2tlZFByb3BzKTtcblxuICAgICAgcmV0dXJuICgwLCBfcmVhY3QuY3JlYXRlRWxlbWVudCkodGFnLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHt9LCBzdHlsZSwgcHJvcHMuc3R5bGUpXG4gICAgICB9KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBhdXRvU2l6ZSA9IHRoaXMucHJvcHMuYXV0b1NpemU7XG4gICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5zdGF0ZS5oZWlnaHQ7XG5cbiAgICAgIHZhciBzdHlsZSA9IHtcbiAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgICAgfTtcblxuICAgICAgaWYgKGF1dG9TaXplKSB7XG4gICAgICAgIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBfcmVhY3RNb3Rpb24uTW90aW9uLFxuICAgICAgICAgIHsgc3R5bGU6IHRoaXMuX2dldEZyYW1lU3R5bGUoKSB9LFxuICAgICAgICAgIGZ1bmN0aW9uIChkaW1lbnNpb25zKSB7XG4gICAgICAgICAgICBpZiAoKGF1dG9TaXplID09PSB0cnVlIHx8IGF1dG9TaXplID09PSAnd2lkdGgnKSAmJiBkaW1lbnNpb25zLm1heFdpZHRoKSB7XG4gICAgICAgICAgICAgIHN0eWxlLm1heFdpZHRoID0gZGltZW5zaW9ucy5tYXhXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoYXV0b1NpemUgPT09IHRydWUgfHwgYXV0b1NpemUgPT09ICdoZWlnaHQnKSAmJiBkaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgICAgICAgICBzdHlsZS5oZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfdGhpczIuX3JlbmRlckZyYW1lKHN0eWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyRnJhbWUoc3R5bGUpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBGcmFtZTtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cbkZyYW1lLmNvbnRleHRUeXBlcyA9IHtcbiAgcGFnZXI6IF9wcm9wVHlwZXMyLmRlZmF1bHQuaW5zdGFuY2VPZihfUGFnZXIyLmRlZmF1bHQpXG59O1xuRnJhbWUucHJvcFR5cGVzID0gY2hlY2tlZFByb3BzO1xuRnJhbWUuZGVmYXVsdFByb3BzID0ge1xuICB0YWc6ICdkaXYnLFxuICBhdXRvU2l6ZTogZmFsc2UsXG4gIGFjY2Vzc2liaWxpdHk6IHRydWUsXG4gIHNwcmluZ0NvbmZpZzogX3JlYWN0TW90aW9uLnByZXNldHMubm9Xb2JibGVcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBGcmFtZTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gJ2Z1bmN0aW9uJyAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ1N1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgJyArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIF9tYXBUb1plcm8gPSByZXF1aXJlKCcuL21hcFRvWmVybycpO1xuXG52YXIgX21hcFRvWmVybzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tYXBUb1plcm8pO1xuXG52YXIgX3N0cmlwU3R5bGUgPSByZXF1aXJlKCcuL3N0cmlwU3R5bGUnKTtcblxudmFyIF9zdHJpcFN0eWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0cmlwU3R5bGUpO1xuXG52YXIgX3N0ZXBwZXIzID0gcmVxdWlyZSgnLi9zdGVwcGVyJyk7XG5cbnZhciBfc3RlcHBlcjQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdGVwcGVyMyk7XG5cbnZhciBfcGVyZm9ybWFuY2VOb3cgPSByZXF1aXJlKCdwZXJmb3JtYW5jZS1ub3cnKTtcblxudmFyIF9wZXJmb3JtYW5jZU5vdzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wZXJmb3JtYW5jZU5vdyk7XG5cbnZhciBfcmFmID0gcmVxdWlyZSgncmFmJyk7XG5cbnZhciBfcmFmMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JhZik7XG5cbnZhciBfc2hvdWxkU3RvcEFuaW1hdGlvbiA9IHJlcXVpcmUoJy4vc2hvdWxkU3RvcEFuaW1hdGlvbicpO1xuXG52YXIgX3Nob3VsZFN0b3BBbmltYXRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2hvdWxkU3RvcEFuaW1hdGlvbik7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKCdwcm9wLXR5cGVzJyk7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbnZhciBtc1BlckZyYW1lID0gMTAwMCAvIDYwO1xuXG52YXIgTW90aW9uID0gKGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhNb3Rpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIF9jcmVhdGVDbGFzcyhNb3Rpb24sIG51bGwsIFt7XG4gICAga2V5OiAncHJvcFR5cGVzJyxcbiAgICB2YWx1ZToge1xuICAgICAgLy8gVE9PRDogd2FybiBhZ2FpbnN0IHB1dHRpbmcgYSBjb25maWcgaW4gaGVyZVxuICAgICAgZGVmYXVsdFN0eWxlOiBfcHJvcFR5cGVzMlsnZGVmYXVsdCddLm9iamVjdE9mKF9wcm9wVHlwZXMyWydkZWZhdWx0J10ubnVtYmVyKSxcbiAgICAgIHN0eWxlOiBfcHJvcFR5cGVzMlsnZGVmYXVsdCddLm9iamVjdE9mKF9wcm9wVHlwZXMyWydkZWZhdWx0J10ub25lT2ZUeXBlKFtfcHJvcFR5cGVzMlsnZGVmYXVsdCddLm51bWJlciwgX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5vYmplY3RdKSkuaXNSZXF1aXJlZCxcbiAgICAgIGNoaWxkcmVuOiBfcHJvcFR5cGVzMlsnZGVmYXVsdCddLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIG9uUmVzdDogX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5mdW5jXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlXG4gIH1dKTtcblxuICBmdW5jdGlvbiBNb3Rpb24ocHJvcHMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1vdGlvbik7XG5cbiAgICBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpO1xuICAgIHRoaXMud2FzQW5pbWF0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5hbmltYXRpb25JRCA9IG51bGw7XG4gICAgdGhpcy5wcmV2VGltZSA9IDA7XG4gICAgdGhpcy5hY2N1bXVsYXRlZFRpbWUgPSAwO1xuICAgIHRoaXMudW5yZWFkUHJvcFN0eWxlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJVbnJlYWRQcm9wU3R5bGUgPSBmdW5jdGlvbiAoZGVzdFN0eWxlKSB7XG4gICAgICB2YXIgZGlydHkgPSBmYWxzZTtcbiAgICAgIHZhciBfc3RhdGUgPSBfdGhpcy5zdGF0ZTtcbiAgICAgIHZhciBjdXJyZW50U3R5bGUgPSBfc3RhdGUuY3VycmVudFN0eWxlO1xuICAgICAgdmFyIGN1cnJlbnRWZWxvY2l0eSA9IF9zdGF0ZS5jdXJyZW50VmVsb2NpdHk7XG4gICAgICB2YXIgbGFzdElkZWFsU3R5bGUgPSBfc3RhdGUubGFzdElkZWFsU3R5bGU7XG4gICAgICB2YXIgbGFzdElkZWFsVmVsb2NpdHkgPSBfc3RhdGUubGFzdElkZWFsVmVsb2NpdHk7XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBkZXN0U3R5bGUpIHtcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVzdFN0eWxlLCBrZXkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3R5bGVWYWx1ZSA9IGRlc3RTdHlsZVtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHN0eWxlVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgaWYgKCFkaXJ0eSkge1xuICAgICAgICAgICAgZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgY3VycmVudFN0eWxlID0gX2V4dGVuZHMoe30sIGN1cnJlbnRTdHlsZSk7XG4gICAgICAgICAgICBjdXJyZW50VmVsb2NpdHkgPSBfZXh0ZW5kcyh7fSwgY3VycmVudFZlbG9jaXR5KTtcbiAgICAgICAgICAgIGxhc3RJZGVhbFN0eWxlID0gX2V4dGVuZHMoe30sIGxhc3RJZGVhbFN0eWxlKTtcbiAgICAgICAgICAgIGxhc3RJZGVhbFZlbG9jaXR5ID0gX2V4dGVuZHMoe30sIGxhc3RJZGVhbFZlbG9jaXR5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50U3R5bGVba2V5XSA9IHN0eWxlVmFsdWU7XG4gICAgICAgICAgY3VycmVudFZlbG9jaXR5W2tleV0gPSAwO1xuICAgICAgICAgIGxhc3RJZGVhbFN0eWxlW2tleV0gPSBzdHlsZVZhbHVlO1xuICAgICAgICAgIGxhc3RJZGVhbFZlbG9jaXR5W2tleV0gPSAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkaXJ0eSkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IGN1cnJlbnRTdHlsZTogY3VycmVudFN0eWxlLCBjdXJyZW50VmVsb2NpdHk6IGN1cnJlbnRWZWxvY2l0eSwgbGFzdElkZWFsU3R5bGU6IGxhc3RJZGVhbFN0eWxlLCBsYXN0SWRlYWxWZWxvY2l0eTogbGFzdElkZWFsVmVsb2NpdHkgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuc3RhcnRBbmltYXRpb25JZk5lY2Vzc2FyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRPRE86IHdoZW4gY29uZmlnIGlzIHthOiAxMH0gYW5kIGRlc3QgaXMge2E6IDEwfSBkbyB3ZSByYWYgb25jZSBhbmRcbiAgICAgIC8vIGNhbGwgY2I/IE5vLCBvdGhlcndpc2UgYWNjaWRlbnRhbCBwYXJlbnQgcmVyZW5kZXIgY2F1c2VzIGNiIHRyaWdnZXJcbiAgICAgIF90aGlzLmFuaW1hdGlvbklEID0gX3JhZjJbJ2RlZmF1bHQnXShmdW5jdGlvbiAodGltZXN0YW1wKSB7XG4gICAgICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gYW5pbWF0ZSBpbiB0aGUgZmlyc3QgcGxhY2VcbiAgICAgICAgdmFyIHByb3BzU3R5bGUgPSBfdGhpcy5wcm9wcy5zdHlsZTtcbiAgICAgICAgaWYgKF9zaG91bGRTdG9wQW5pbWF0aW9uMlsnZGVmYXVsdCddKF90aGlzLnN0YXRlLmN1cnJlbnRTdHlsZSwgcHJvcHNTdHlsZSwgX3RoaXMuc3RhdGUuY3VycmVudFZlbG9jaXR5KSkge1xuICAgICAgICAgIGlmIChfdGhpcy53YXNBbmltYXRpbmcgJiYgX3RoaXMucHJvcHMub25SZXN0KSB7XG4gICAgICAgICAgICBfdGhpcy5wcm9wcy5vblJlc3QoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBubyBuZWVkIHRvIGNhbmNlbCBhbmltYXRpb25JRCBoZXJlOyBzaG91bGRuJ3QgaGF2ZSBhbnkgaW4gZmxpZ2h0XG4gICAgICAgICAgX3RoaXMuYW5pbWF0aW9uSUQgPSBudWxsO1xuICAgICAgICAgIF90aGlzLndhc0FuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICAgIF90aGlzLmFjY3VtdWxhdGVkVGltZSA9IDA7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMud2FzQW5pbWF0aW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSB0aW1lc3RhbXAgfHwgX3BlcmZvcm1hbmNlTm93MlsnZGVmYXVsdCddKCk7XG4gICAgICAgIHZhciB0aW1lRGVsdGEgPSBjdXJyZW50VGltZSAtIF90aGlzLnByZXZUaW1lO1xuICAgICAgICBfdGhpcy5wcmV2VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgICBfdGhpcy5hY2N1bXVsYXRlZFRpbWUgPSBfdGhpcy5hY2N1bXVsYXRlZFRpbWUgKyB0aW1lRGVsdGE7XG4gICAgICAgIC8vIG1vcmUgdGhhbiAxMCBmcmFtZXM/IHByb2xseSBzd2l0Y2hlZCBicm93c2VyIHRhYi4gUmVzdGFydFxuICAgICAgICBpZiAoX3RoaXMuYWNjdW11bGF0ZWRUaW1lID4gbXNQZXJGcmFtZSAqIDEwKSB7XG4gICAgICAgICAgX3RoaXMuYWNjdW11bGF0ZWRUaW1lID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfdGhpcy5hY2N1bXVsYXRlZFRpbWUgPT09IDApIHtcbiAgICAgICAgICAvLyBubyBuZWVkIHRvIGNhbmNlbCBhbmltYXRpb25JRCBoZXJlOyBzaG91bGRuJ3QgaGF2ZSBhbnkgaW4gZmxpZ2h0XG4gICAgICAgICAgX3RoaXMuYW5pbWF0aW9uSUQgPSBudWxsO1xuICAgICAgICAgIF90aGlzLnN0YXJ0QW5pbWF0aW9uSWZOZWNlc3NhcnkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudEZyYW1lQ29tcGxldGlvbiA9IChfdGhpcy5hY2N1bXVsYXRlZFRpbWUgLSBNYXRoLmZsb29yKF90aGlzLmFjY3VtdWxhdGVkVGltZSAvIG1zUGVyRnJhbWUpICogbXNQZXJGcmFtZSkgLyBtc1BlckZyYW1lO1xuICAgICAgICB2YXIgZnJhbWVzVG9DYXRjaFVwID0gTWF0aC5mbG9vcihfdGhpcy5hY2N1bXVsYXRlZFRpbWUgLyBtc1BlckZyYW1lKTtcblxuICAgICAgICB2YXIgbmV3TGFzdElkZWFsU3R5bGUgPSB7fTtcbiAgICAgICAgdmFyIG5ld0xhc3RJZGVhbFZlbG9jaXR5ID0ge307XG4gICAgICAgIHZhciBuZXdDdXJyZW50U3R5bGUgPSB7fTtcbiAgICAgICAgdmFyIG5ld0N1cnJlbnRWZWxvY2l0eSA9IHt9O1xuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wc1N0eWxlKSB7XG4gICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvcHNTdHlsZSwga2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN0eWxlVmFsdWUgPSBwcm9wc1N0eWxlW2tleV07XG4gICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZVZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgbmV3Q3VycmVudFN0eWxlW2tleV0gPSBzdHlsZVZhbHVlO1xuICAgICAgICAgICAgbmV3Q3VycmVudFZlbG9jaXR5W2tleV0gPSAwO1xuICAgICAgICAgICAgbmV3TGFzdElkZWFsU3R5bGVba2V5XSA9IHN0eWxlVmFsdWU7XG4gICAgICAgICAgICBuZXdMYXN0SWRlYWxWZWxvY2l0eVtrZXldID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIG5ld0xhc3RJZGVhbFN0eWxlVmFsdWUgPSBfdGhpcy5zdGF0ZS5sYXN0SWRlYWxTdHlsZVtrZXldO1xuICAgICAgICAgICAgdmFyIG5ld0xhc3RJZGVhbFZlbG9jaXR5VmFsdWUgPSBfdGhpcy5zdGF0ZS5sYXN0SWRlYWxWZWxvY2l0eVtrZXldO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXNUb0NhdGNoVXA7IGkrKykge1xuICAgICAgICAgICAgICB2YXIgX3N0ZXBwZXIgPSBfc3RlcHBlcjRbJ2RlZmF1bHQnXShtc1BlckZyYW1lIC8gMTAwMCwgbmV3TGFzdElkZWFsU3R5bGVWYWx1ZSwgbmV3TGFzdElkZWFsVmVsb2NpdHlWYWx1ZSwgc3R5bGVWYWx1ZS52YWwsIHN0eWxlVmFsdWUuc3RpZmZuZXNzLCBzdHlsZVZhbHVlLmRhbXBpbmcsIHN0eWxlVmFsdWUucHJlY2lzaW9uKTtcblxuICAgICAgICAgICAgICBuZXdMYXN0SWRlYWxTdHlsZVZhbHVlID0gX3N0ZXBwZXJbMF07XG4gICAgICAgICAgICAgIG5ld0xhc3RJZGVhbFZlbG9jaXR5VmFsdWUgPSBfc3RlcHBlclsxXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIF9zdGVwcGVyMiA9IF9zdGVwcGVyNFsnZGVmYXVsdCddKG1zUGVyRnJhbWUgLyAxMDAwLCBuZXdMYXN0SWRlYWxTdHlsZVZhbHVlLCBuZXdMYXN0SWRlYWxWZWxvY2l0eVZhbHVlLCBzdHlsZVZhbHVlLnZhbCwgc3R5bGVWYWx1ZS5zdGlmZm5lc3MsIHN0eWxlVmFsdWUuZGFtcGluZywgc3R5bGVWYWx1ZS5wcmVjaXNpb24pO1xuXG4gICAgICAgICAgICB2YXIgbmV4dElkZWFsWCA9IF9zdGVwcGVyMlswXTtcbiAgICAgICAgICAgIHZhciBuZXh0SWRlYWxWID0gX3N0ZXBwZXIyWzFdO1xuXG4gICAgICAgICAgICBuZXdDdXJyZW50U3R5bGVba2V5XSA9IG5ld0xhc3RJZGVhbFN0eWxlVmFsdWUgKyAobmV4dElkZWFsWCAtIG5ld0xhc3RJZGVhbFN0eWxlVmFsdWUpICogY3VycmVudEZyYW1lQ29tcGxldGlvbjtcbiAgICAgICAgICAgIG5ld0N1cnJlbnRWZWxvY2l0eVtrZXldID0gbmV3TGFzdElkZWFsVmVsb2NpdHlWYWx1ZSArIChuZXh0SWRlYWxWIC0gbmV3TGFzdElkZWFsVmVsb2NpdHlWYWx1ZSkgKiBjdXJyZW50RnJhbWVDb21wbGV0aW9uO1xuICAgICAgICAgICAgbmV3TGFzdElkZWFsU3R5bGVba2V5XSA9IG5ld0xhc3RJZGVhbFN0eWxlVmFsdWU7XG4gICAgICAgICAgICBuZXdMYXN0SWRlYWxWZWxvY2l0eVtrZXldID0gbmV3TGFzdElkZWFsVmVsb2NpdHlWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5hbmltYXRpb25JRCA9IG51bGw7XG4gICAgICAgIC8vIHRoZSBhbW91bnQgd2UncmUgbG9vcGVkIG92ZXIgYWJvdmVcbiAgICAgICAgX3RoaXMuYWNjdW11bGF0ZWRUaW1lIC09IGZyYW1lc1RvQ2F0Y2hVcCAqIG1zUGVyRnJhbWU7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGN1cnJlbnRTdHlsZTogbmV3Q3VycmVudFN0eWxlLFxuICAgICAgICAgIGN1cnJlbnRWZWxvY2l0eTogbmV3Q3VycmVudFZlbG9jaXR5LFxuICAgICAgICAgIGxhc3RJZGVhbFN0eWxlOiBuZXdMYXN0SWRlYWxTdHlsZSxcbiAgICAgICAgICBsYXN0SWRlYWxWZWxvY2l0eTogbmV3TGFzdElkZWFsVmVsb2NpdHlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgX3RoaXMudW5yZWFkUHJvcFN0eWxlID0gbnVsbDtcblxuICAgICAgICBfdGhpcy5zdGFydEFuaW1hdGlvbklmTmVjZXNzYXJ5KCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuZGVmYXVsdFN0YXRlKCk7XG4gIH1cblxuICBNb3Rpb24ucHJvdG90eXBlLmRlZmF1bHRTdGF0ZSA9IGZ1bmN0aW9uIGRlZmF1bHRTdGF0ZSgpIHtcbiAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcztcbiAgICB2YXIgZGVmYXVsdFN0eWxlID0gX3Byb3BzLmRlZmF1bHRTdHlsZTtcbiAgICB2YXIgc3R5bGUgPSBfcHJvcHMuc3R5bGU7XG5cbiAgICB2YXIgY3VycmVudFN0eWxlID0gZGVmYXVsdFN0eWxlIHx8IF9zdHJpcFN0eWxlMlsnZGVmYXVsdCddKHN0eWxlKTtcbiAgICB2YXIgY3VycmVudFZlbG9jaXR5ID0gX21hcFRvWmVybzJbJ2RlZmF1bHQnXShjdXJyZW50U3R5bGUpO1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50U3R5bGU6IGN1cnJlbnRTdHlsZSxcbiAgICAgIGN1cnJlbnRWZWxvY2l0eTogY3VycmVudFZlbG9jaXR5LFxuICAgICAgbGFzdElkZWFsU3R5bGU6IGN1cnJlbnRTdHlsZSxcbiAgICAgIGxhc3RJZGVhbFZlbG9jaXR5OiBjdXJyZW50VmVsb2NpdHlcbiAgICB9O1xuICB9O1xuXG4gIC8vIGl0J3MgcG9zc2libGUgdGhhdCBjdXJyZW50U3R5bGUncyB2YWx1ZSBpcyBzdGFsZTogaWYgcHJvcHMgaXMgaW1tZWRpYXRlbHlcbiAgLy8gY2hhbmdlZCBmcm9tIDAgdG8gNDAwIHRvIHNwcmluZygwKSBhZ2FpbiwgdGhlIGFzeW5jIGN1cnJlbnRTdHlsZSBpcyBzdGlsbFxuICAvLyBhdCAwIChkaWRuJ3QgaGF2ZSB0aW1lIHRvIHRpY2sgYW5kIGludGVycG9sYXRlIGV2ZW4gb25jZSkuIElmIHdlIG5haXZlbHlcbiAgLy8gY29tcGFyZSBjdXJyZW50U3R5bGUgd2l0aCBkZXN0VmFsIGl0J2xsIGJlIDAgPT09IDAgKG5vIGFuaW1hdGlvbiwgc3RvcCkuXG4gIC8vIEluIHJlYWxpdHkgY3VycmVudFN0eWxlIHNob3VsZCBiZSA0MDBcblxuICBNb3Rpb24ucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5wcmV2VGltZSA9IF9wZXJmb3JtYW5jZU5vdzJbJ2RlZmF1bHQnXSgpO1xuICAgIHRoaXMuc3RhcnRBbmltYXRpb25JZk5lY2Vzc2FyeSgpO1xuICB9O1xuXG4gIE1vdGlvbi5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMocHJvcHMpIHtcbiAgICBpZiAodGhpcy51bnJlYWRQcm9wU3R5bGUgIT0gbnVsbCkge1xuICAgICAgLy8gcHJldmlvdXMgcHJvcHMgaGF2ZW4ndCBoYWQgdGhlIGNoYW5jZSB0byBiZSBzZXQgeWV0OyBzZXQgdGhlbSBoZXJlXG4gICAgICB0aGlzLmNsZWFyVW5yZWFkUHJvcFN0eWxlKHRoaXMudW5yZWFkUHJvcFN0eWxlKTtcbiAgICB9XG5cbiAgICB0aGlzLnVucmVhZFByb3BTdHlsZSA9IHByb3BzLnN0eWxlO1xuICAgIGlmICh0aGlzLmFuaW1hdGlvbklEID09IG51bGwpIHtcbiAgICAgIHRoaXMucHJldlRpbWUgPSBfcGVyZm9ybWFuY2VOb3cyWydkZWZhdWx0J10oKTtcbiAgICAgIHRoaXMuc3RhcnRBbmltYXRpb25JZk5lY2Vzc2FyeSgpO1xuICAgIH1cbiAgfTtcblxuICBNb3Rpb24ucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMuYW5pbWF0aW9uSUQgIT0gbnVsbCkge1xuICAgICAgX3JhZjJbJ2RlZmF1bHQnXS5jYW5jZWwodGhpcy5hbmltYXRpb25JRCk7XG4gICAgICB0aGlzLmFuaW1hdGlvbklEID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgTW90aW9uLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIHJlbmRlcmVkQ2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuKHRoaXMuc3RhdGUuY3VycmVudFN0eWxlKTtcbiAgICByZXR1cm4gcmVuZGVyZWRDaGlsZHJlbiAmJiBfcmVhY3QyWydkZWZhdWx0J10uQ2hpbGRyZW4ub25seShyZW5kZXJlZENoaWxkcmVuKTtcbiAgfTtcblxuICByZXR1cm4gTW90aW9uO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IE1vdGlvbjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG4vLyBhZnRlciBjaGVja2luZyBmb3IgdW5yZWFkUHJvcFN0eWxlICE9IG51bGwsIHdlIG1hbnVhbGx5IGdvIHNldCB0aGVcbi8vIG5vbi1pbnRlcnBvbGF0aW5nIHZhbHVlcyAodGhvc2UgdGhhdCBhcmUgYSBudW1iZXIsIHdpdGhvdXQgYSBzcHJpbmdcbi8vIGNvbmZpZykiLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuMlxuKGZ1bmN0aW9uKCkge1xuICB2YXIgZ2V0TmFub1NlY29uZHMsIGhydGltZSwgbG9hZFRpbWUsIG1vZHVsZUxvYWRUaW1lLCBub2RlTG9hZFRpbWUsIHVwVGltZTtcblxuICBpZiAoKHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwZXJmb3JtYW5jZSAhPT0gbnVsbCkgJiYgcGVyZm9ybWFuY2Uubm93KSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKCh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzICE9PSBudWxsKSAmJiBwcm9jZXNzLmhydGltZSkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gKGdldE5hbm9TZWNvbmRzKCkgLSBub2RlTG9hZFRpbWUpIC8gMWU2O1xuICAgIH07XG4gICAgaHJ0aW1lID0gcHJvY2Vzcy5ocnRpbWU7XG4gICAgZ2V0TmFub1NlY29uZHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBocjtcbiAgICAgIGhyID0gaHJ0aW1lKCk7XG4gICAgICByZXR1cm4gaHJbMF0gKiAxZTkgKyBoclsxXTtcbiAgICB9O1xuICAgIG1vZHVsZUxvYWRUaW1lID0gZ2V0TmFub1NlY29uZHMoKTtcbiAgICB1cFRpbWUgPSBwcm9jZXNzLnVwdGltZSgpICogMWU5O1xuICAgIG5vZGVMb2FkVGltZSA9IG1vZHVsZUxvYWRUaW1lIC0gdXBUaW1lO1xuICB9IGVsc2UgaWYgKERhdGUubm93KSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gbG9hZFRpbWU7XG4gICAgfTtcbiAgICBsb2FkVGltZSA9IERhdGUubm93KCk7XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIGxvYWRUaW1lO1xuICAgIH07XG4gICAgbG9hZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfVxuXG59KS5jYWxsKHRoaXMpO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZXJmb3JtYW5jZS1ub3cuanMubWFwXG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICdmdW5jdGlvbicgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICcgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBfbWFwVG9aZXJvID0gcmVxdWlyZSgnLi9tYXBUb1plcm8nKTtcblxudmFyIF9tYXBUb1plcm8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWFwVG9aZXJvKTtcblxudmFyIF9zdHJpcFN0eWxlID0gcmVxdWlyZSgnLi9zdHJpcFN0eWxlJyk7XG5cbnZhciBfc3RyaXBTdHlsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHJpcFN0eWxlKTtcblxudmFyIF9zdGVwcGVyMyA9IHJlcXVpcmUoJy4vc3RlcHBlcicpO1xuXG52YXIgX3N0ZXBwZXI0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RlcHBlcjMpO1xuXG52YXIgX3BlcmZvcm1hbmNlTm93ID0gcmVxdWlyZSgncGVyZm9ybWFuY2Utbm93Jyk7XG5cbnZhciBfcGVyZm9ybWFuY2VOb3cyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGVyZm9ybWFuY2VOb3cpO1xuXG52YXIgX3JhZiA9IHJlcXVpcmUoJ3JhZicpO1xuXG52YXIgX3JhZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yYWYpO1xuXG52YXIgX3Nob3VsZFN0b3BBbmltYXRpb24gPSByZXF1aXJlKCcuL3Nob3VsZFN0b3BBbmltYXRpb24nKTtcblxudmFyIF9zaG91bGRTdG9wQW5pbWF0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Nob3VsZFN0b3BBbmltYXRpb24pO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZSgncHJvcC10eXBlcycpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgbXNQZXJGcmFtZSA9IDEwMDAgLyA2MDtcblxuZnVuY3Rpb24gc2hvdWxkU3RvcEFuaW1hdGlvbkFsbChjdXJyZW50U3R5bGVzLCBzdHlsZXMsIGN1cnJlbnRWZWxvY2l0aWVzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY3VycmVudFN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghX3Nob3VsZFN0b3BBbmltYXRpb24yWydkZWZhdWx0J10oY3VycmVudFN0eWxlc1tpXSwgc3R5bGVzW2ldLCBjdXJyZW50VmVsb2NpdGllc1tpXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbnZhciBTdGFnZ2VyZWRNb3Rpb24gPSAoZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN0YWdnZXJlZE1vdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgX2NyZWF0ZUNsYXNzKFN0YWdnZXJlZE1vdGlvbiwgbnVsbCwgW3tcbiAgICBrZXk6ICdwcm9wVHlwZXMnLFxuICAgIHZhbHVlOiB7XG4gICAgICAvLyBUT09EOiB3YXJuIGFnYWluc3QgcHV0dGluZyBhIGNvbmZpZyBpbiBoZXJlXG4gICAgICBkZWZhdWx0U3R5bGVzOiBfcHJvcFR5cGVzMlsnZGVmYXVsdCddLmFycmF5T2YoX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5vYmplY3RPZihfcHJvcFR5cGVzMlsnZGVmYXVsdCddLm51bWJlcikpLFxuICAgICAgc3R5bGVzOiBfcHJvcFR5cGVzMlsnZGVmYXVsdCddLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIGNoaWxkcmVuOiBfcHJvcFR5cGVzMlsnZGVmYXVsdCddLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZVxuICB9XSk7XG5cbiAgZnVuY3Rpb24gU3RhZ2dlcmVkTW90aW9uKHByb3BzKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdGFnZ2VyZWRNb3Rpb24pO1xuXG4gICAgX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKTtcbiAgICB0aGlzLmFuaW1hdGlvbklEID0gbnVsbDtcbiAgICB0aGlzLnByZXZUaW1lID0gMDtcbiAgICB0aGlzLmFjY3VtdWxhdGVkVGltZSA9IDA7XG4gICAgdGhpcy51bnJlYWRQcm9wU3R5bGVzID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJVbnJlYWRQcm9wU3R5bGUgPSBmdW5jdGlvbiAodW5yZWFkUHJvcFN0eWxlcykge1xuICAgICAgdmFyIF9zdGF0ZSA9IF90aGlzLnN0YXRlO1xuICAgICAgdmFyIGN1cnJlbnRTdHlsZXMgPSBfc3RhdGUuY3VycmVudFN0eWxlcztcbiAgICAgIHZhciBjdXJyZW50VmVsb2NpdGllcyA9IF9zdGF0ZS5jdXJyZW50VmVsb2NpdGllcztcbiAgICAgIHZhciBsYXN0SWRlYWxTdHlsZXMgPSBfc3RhdGUubGFzdElkZWFsU3R5bGVzO1xuICAgICAgdmFyIGxhc3RJZGVhbFZlbG9jaXRpZXMgPSBfc3RhdGUubGFzdElkZWFsVmVsb2NpdGllcztcblxuICAgICAgdmFyIHNvbWVEaXJ0eSA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bnJlYWRQcm9wU3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB1bnJlYWRQcm9wU3R5bGUgPSB1bnJlYWRQcm9wU3R5bGVzW2ldO1xuICAgICAgICB2YXIgZGlydHkgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdW5yZWFkUHJvcFN0eWxlKSB7XG4gICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodW5yZWFkUHJvcFN0eWxlLCBrZXkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVWYWx1ZSA9IHVucmVhZFByb3BTdHlsZVtrZXldO1xuICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmICghZGlydHkpIHtcbiAgICAgICAgICAgICAgZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgICBzb21lRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgICBjdXJyZW50U3R5bGVzW2ldID0gX2V4dGVuZHMoe30sIGN1cnJlbnRTdHlsZXNbaV0pO1xuICAgICAgICAgICAgICBjdXJyZW50VmVsb2NpdGllc1tpXSA9IF9leHRlbmRzKHt9LCBjdXJyZW50VmVsb2NpdGllc1tpXSk7XG4gICAgICAgICAgICAgIGxhc3RJZGVhbFN0eWxlc1tpXSA9IF9leHRlbmRzKHt9LCBsYXN0SWRlYWxTdHlsZXNbaV0pO1xuICAgICAgICAgICAgICBsYXN0SWRlYWxWZWxvY2l0aWVzW2ldID0gX2V4dGVuZHMoe30sIGxhc3RJZGVhbFZlbG9jaXRpZXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudFN0eWxlc1tpXVtrZXldID0gc3R5bGVWYWx1ZTtcbiAgICAgICAgICAgIGN1cnJlbnRWZWxvY2l0aWVzW2ldW2tleV0gPSAwO1xuICAgICAgICAgICAgbGFzdElkZWFsU3R5bGVzW2ldW2tleV0gPSBzdHlsZVZhbHVlO1xuICAgICAgICAgICAgbGFzdElkZWFsVmVsb2NpdGllc1tpXVtrZXldID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNvbWVEaXJ0eSkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IGN1cnJlbnRTdHlsZXM6IGN1cnJlbnRTdHlsZXMsIGN1cnJlbnRWZWxvY2l0aWVzOiBjdXJyZW50VmVsb2NpdGllcywgbGFzdElkZWFsU3R5bGVzOiBsYXN0SWRlYWxTdHlsZXMsIGxhc3RJZGVhbFZlbG9jaXRpZXM6IGxhc3RJZGVhbFZlbG9jaXRpZXMgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuc3RhcnRBbmltYXRpb25JZk5lY2Vzc2FyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRPRE86IHdoZW4gY29uZmlnIGlzIHthOiAxMH0gYW5kIGRlc3QgaXMge2E6IDEwfSBkbyB3ZSByYWYgb25jZSBhbmRcbiAgICAgIC8vIGNhbGwgY2I/IE5vLCBvdGhlcndpc2UgYWNjaWRlbnRhbCBwYXJlbnQgcmVyZW5kZXIgY2F1c2VzIGNiIHRyaWdnZXJcbiAgICAgIF90aGlzLmFuaW1hdGlvbklEID0gX3JhZjJbJ2RlZmF1bHQnXShmdW5jdGlvbiAodGltZXN0YW1wKSB7XG4gICAgICAgIHZhciBkZXN0U3R5bGVzID0gX3RoaXMucHJvcHMuc3R5bGVzKF90aGlzLnN0YXRlLmxhc3RJZGVhbFN0eWxlcyk7XG5cbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBhbmltYXRlIGluIHRoZSBmaXJzdCBwbGFjZVxuICAgICAgICBpZiAoc2hvdWxkU3RvcEFuaW1hdGlvbkFsbChfdGhpcy5zdGF0ZS5jdXJyZW50U3R5bGVzLCBkZXN0U3R5bGVzLCBfdGhpcy5zdGF0ZS5jdXJyZW50VmVsb2NpdGllcykpIHtcbiAgICAgICAgICAvLyBubyBuZWVkIHRvIGNhbmNlbCBhbmltYXRpb25JRCBoZXJlOyBzaG91bGRuJ3QgaGF2ZSBhbnkgaW4gZmxpZ2h0XG4gICAgICAgICAgX3RoaXMuYW5pbWF0aW9uSUQgPSBudWxsO1xuICAgICAgICAgIF90aGlzLmFjY3VtdWxhdGVkVGltZSA9IDA7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gdGltZXN0YW1wIHx8IF9wZXJmb3JtYW5jZU5vdzJbJ2RlZmF1bHQnXSgpO1xuICAgICAgICB2YXIgdGltZURlbHRhID0gY3VycmVudFRpbWUgLSBfdGhpcy5wcmV2VGltZTtcbiAgICAgICAgX3RoaXMucHJldlRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgICAgX3RoaXMuYWNjdW11bGF0ZWRUaW1lID0gX3RoaXMuYWNjdW11bGF0ZWRUaW1lICsgdGltZURlbHRhO1xuICAgICAgICAvLyBtb3JlIHRoYW4gMTAgZnJhbWVzPyBwcm9sbHkgc3dpdGNoZWQgYnJvd3NlciB0YWIuIFJlc3RhcnRcbiAgICAgICAgaWYgKF90aGlzLmFjY3VtdWxhdGVkVGltZSA+IG1zUGVyRnJhbWUgKiAxMCkge1xuICAgICAgICAgIF90aGlzLmFjY3VtdWxhdGVkVGltZSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX3RoaXMuYWNjdW11bGF0ZWRUaW1lID09PSAwKSB7XG4gICAgICAgICAgLy8gbm8gbmVlZCB0byBjYW5jZWwgYW5pbWF0aW9uSUQgaGVyZTsgc2hvdWxkbid0IGhhdmUgYW55IGluIGZsaWdodFxuICAgICAgICAgIF90aGlzLmFuaW1hdGlvbklEID0gbnVsbDtcbiAgICAgICAgICBfdGhpcy5zdGFydEFuaW1hdGlvbklmTmVjZXNzYXJ5KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnRGcmFtZUNvbXBsZXRpb24gPSAoX3RoaXMuYWNjdW11bGF0ZWRUaW1lIC0gTWF0aC5mbG9vcihfdGhpcy5hY2N1bXVsYXRlZFRpbWUgLyBtc1BlckZyYW1lKSAqIG1zUGVyRnJhbWUpIC8gbXNQZXJGcmFtZTtcbiAgICAgICAgdmFyIGZyYW1lc1RvQ2F0Y2hVcCA9IE1hdGguZmxvb3IoX3RoaXMuYWNjdW11bGF0ZWRUaW1lIC8gbXNQZXJGcmFtZSk7XG5cbiAgICAgICAgdmFyIG5ld0xhc3RJZGVhbFN0eWxlcyA9IFtdO1xuICAgICAgICB2YXIgbmV3TGFzdElkZWFsVmVsb2NpdGllcyA9IFtdO1xuICAgICAgICB2YXIgbmV3Q3VycmVudFN0eWxlcyA9IFtdO1xuICAgICAgICB2YXIgbmV3Q3VycmVudFZlbG9jaXRpZXMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlc3RTdHlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZGVzdFN0eWxlID0gZGVzdFN0eWxlc1tpXTtcbiAgICAgICAgICB2YXIgbmV3Q3VycmVudFN0eWxlID0ge307XG4gICAgICAgICAgdmFyIG5ld0N1cnJlbnRWZWxvY2l0eSA9IHt9O1xuICAgICAgICAgIHZhciBuZXdMYXN0SWRlYWxTdHlsZSA9IHt9O1xuICAgICAgICAgIHZhciBuZXdMYXN0SWRlYWxWZWxvY2l0eSA9IHt9O1xuXG4gICAgICAgICAgZm9yICh2YXIga2V5IGluIGRlc3RTdHlsZSkge1xuICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVzdFN0eWxlLCBrZXkpKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc3R5bGVWYWx1ZSA9IGRlc3RTdHlsZVtrZXldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZVZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICBuZXdDdXJyZW50U3R5bGVba2V5XSA9IHN0eWxlVmFsdWU7XG4gICAgICAgICAgICAgIG5ld0N1cnJlbnRWZWxvY2l0eVtrZXldID0gMDtcbiAgICAgICAgICAgICAgbmV3TGFzdElkZWFsU3R5bGVba2V5XSA9IHN0eWxlVmFsdWU7XG4gICAgICAgICAgICAgIG5ld0xhc3RJZGVhbFZlbG9jaXR5W2tleV0gPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIG5ld0xhc3RJZGVhbFN0eWxlVmFsdWUgPSBfdGhpcy5zdGF0ZS5sYXN0SWRlYWxTdHlsZXNbaV1ba2V5XTtcbiAgICAgICAgICAgICAgdmFyIG5ld0xhc3RJZGVhbFZlbG9jaXR5VmFsdWUgPSBfdGhpcy5zdGF0ZS5sYXN0SWRlYWxWZWxvY2l0aWVzW2ldW2tleV07XG4gICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZnJhbWVzVG9DYXRjaFVwOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgX3N0ZXBwZXIgPSBfc3RlcHBlcjRbJ2RlZmF1bHQnXShtc1BlckZyYW1lIC8gMTAwMCwgbmV3TGFzdElkZWFsU3R5bGVWYWx1ZSwgbmV3TGFzdElkZWFsVmVsb2NpdHlWYWx1ZSwgc3R5bGVWYWx1ZS52YWwsIHN0eWxlVmFsdWUuc3RpZmZuZXNzLCBzdHlsZVZhbHVlLmRhbXBpbmcsIHN0eWxlVmFsdWUucHJlY2lzaW9uKTtcblxuICAgICAgICAgICAgICAgIG5ld0xhc3RJZGVhbFN0eWxlVmFsdWUgPSBfc3RlcHBlclswXTtcbiAgICAgICAgICAgICAgICBuZXdMYXN0SWRlYWxWZWxvY2l0eVZhbHVlID0gX3N0ZXBwZXJbMV07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgX3N0ZXBwZXIyID0gX3N0ZXBwZXI0WydkZWZhdWx0J10obXNQZXJGcmFtZSAvIDEwMDAsIG5ld0xhc3RJZGVhbFN0eWxlVmFsdWUsIG5ld0xhc3RJZGVhbFZlbG9jaXR5VmFsdWUsIHN0eWxlVmFsdWUudmFsLCBzdHlsZVZhbHVlLnN0aWZmbmVzcywgc3R5bGVWYWx1ZS5kYW1waW5nLCBzdHlsZVZhbHVlLnByZWNpc2lvbik7XG5cbiAgICAgICAgICAgICAgdmFyIG5leHRJZGVhbFggPSBfc3RlcHBlcjJbMF07XG4gICAgICAgICAgICAgIHZhciBuZXh0SWRlYWxWID0gX3N0ZXBwZXIyWzFdO1xuXG4gICAgICAgICAgICAgIG5ld0N1cnJlbnRTdHlsZVtrZXldID0gbmV3TGFzdElkZWFsU3R5bGVWYWx1ZSArIChuZXh0SWRlYWxYIC0gbmV3TGFzdElkZWFsU3R5bGVWYWx1ZSkgKiBjdXJyZW50RnJhbWVDb21wbGV0aW9uO1xuICAgICAgICAgICAgICBuZXdDdXJyZW50VmVsb2NpdHlba2V5XSA9IG5ld0xhc3RJZGVhbFZlbG9jaXR5VmFsdWUgKyAobmV4dElkZWFsViAtIG5ld0xhc3RJZGVhbFZlbG9jaXR5VmFsdWUpICogY3VycmVudEZyYW1lQ29tcGxldGlvbjtcbiAgICAgICAgICAgICAgbmV3TGFzdElkZWFsU3R5bGVba2V5XSA9IG5ld0xhc3RJZGVhbFN0eWxlVmFsdWU7XG4gICAgICAgICAgICAgIG5ld0xhc3RJZGVhbFZlbG9jaXR5W2tleV0gPSBuZXdMYXN0SWRlYWxWZWxvY2l0eVZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld0N1cnJlbnRTdHlsZXNbaV0gPSBuZXdDdXJyZW50U3R5bGU7XG4gICAgICAgICAgbmV3Q3VycmVudFZlbG9jaXRpZXNbaV0gPSBuZXdDdXJyZW50VmVsb2NpdHk7XG4gICAgICAgICAgbmV3TGFzdElkZWFsU3R5bGVzW2ldID0gbmV3TGFzdElkZWFsU3R5bGU7XG4gICAgICAgICAgbmV3TGFzdElkZWFsVmVsb2NpdGllc1tpXSA9IG5ld0xhc3RJZGVhbFZlbG9jaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuYW5pbWF0aW9uSUQgPSBudWxsO1xuICAgICAgICAvLyB0aGUgYW1vdW50IHdlJ3JlIGxvb3BlZCBvdmVyIGFib3ZlXG4gICAgICAgIF90aGlzLmFjY3VtdWxhdGVkVGltZSAtPSBmcmFtZXNUb0NhdGNoVXAgKiBtc1BlckZyYW1lO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBjdXJyZW50U3R5bGVzOiBuZXdDdXJyZW50U3R5bGVzLFxuICAgICAgICAgIGN1cnJlbnRWZWxvY2l0aWVzOiBuZXdDdXJyZW50VmVsb2NpdGllcyxcbiAgICAgICAgICBsYXN0SWRlYWxTdHlsZXM6IG5ld0xhc3RJZGVhbFN0eWxlcyxcbiAgICAgICAgICBsYXN0SWRlYWxWZWxvY2l0aWVzOiBuZXdMYXN0SWRlYWxWZWxvY2l0aWVzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIF90aGlzLnVucmVhZFByb3BTdHlsZXMgPSBudWxsO1xuXG4gICAgICAgIF90aGlzLnN0YXJ0QW5pbWF0aW9uSWZOZWNlc3NhcnkoKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLnN0YXRlID0gdGhpcy5kZWZhdWx0U3RhdGUoKTtcbiAgfVxuXG4gIFN0YWdnZXJlZE1vdGlvbi5wcm90b3R5cGUuZGVmYXVsdFN0YXRlID0gZnVuY3Rpb24gZGVmYXVsdFN0YXRlKCkge1xuICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgIHZhciBkZWZhdWx0U3R5bGVzID0gX3Byb3BzLmRlZmF1bHRTdHlsZXM7XG4gICAgdmFyIHN0eWxlcyA9IF9wcm9wcy5zdHlsZXM7XG5cbiAgICB2YXIgY3VycmVudFN0eWxlcyA9IGRlZmF1bHRTdHlsZXMgfHwgc3R5bGVzKCkubWFwKF9zdHJpcFN0eWxlMlsnZGVmYXVsdCddKTtcbiAgICB2YXIgY3VycmVudFZlbG9jaXRpZXMgPSBjdXJyZW50U3R5bGVzLm1hcChmdW5jdGlvbiAoY3VycmVudFN0eWxlKSB7XG4gICAgICByZXR1cm4gX21hcFRvWmVybzJbJ2RlZmF1bHQnXShjdXJyZW50U3R5bGUpO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50U3R5bGVzOiBjdXJyZW50U3R5bGVzLFxuICAgICAgY3VycmVudFZlbG9jaXRpZXM6IGN1cnJlbnRWZWxvY2l0aWVzLFxuICAgICAgbGFzdElkZWFsU3R5bGVzOiBjdXJyZW50U3R5bGVzLFxuICAgICAgbGFzdElkZWFsVmVsb2NpdGllczogY3VycmVudFZlbG9jaXRpZXNcbiAgICB9O1xuICB9O1xuXG4gIFN0YWdnZXJlZE1vdGlvbi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnByZXZUaW1lID0gX3BlcmZvcm1hbmNlTm93MlsnZGVmYXVsdCddKCk7XG4gICAgdGhpcy5zdGFydEFuaW1hdGlvbklmTmVjZXNzYXJ5KCk7XG4gIH07XG5cbiAgU3RhZ2dlcmVkTW90aW9uLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhwcm9wcykge1xuICAgIGlmICh0aGlzLnVucmVhZFByb3BTdHlsZXMgIT0gbnVsbCkge1xuICAgICAgLy8gcHJldmlvdXMgcHJvcHMgaGF2ZW4ndCBoYWQgdGhlIGNoYW5jZSB0byBiZSBzZXQgeWV0OyBzZXQgdGhlbSBoZXJlXG4gICAgICB0aGlzLmNsZWFyVW5yZWFkUHJvcFN0eWxlKHRoaXMudW5yZWFkUHJvcFN0eWxlcyk7XG4gICAgfVxuXG4gICAgdGhpcy51bnJlYWRQcm9wU3R5bGVzID0gcHJvcHMuc3R5bGVzKHRoaXMuc3RhdGUubGFzdElkZWFsU3R5bGVzKTtcbiAgICBpZiAodGhpcy5hbmltYXRpb25JRCA9PSBudWxsKSB7XG4gICAgICB0aGlzLnByZXZUaW1lID0gX3BlcmZvcm1hbmNlTm93MlsnZGVmYXVsdCddKCk7XG4gICAgICB0aGlzLnN0YXJ0QW5pbWF0aW9uSWZOZWNlc3NhcnkoKTtcbiAgICB9XG4gIH07XG5cbiAgU3RhZ2dlcmVkTW90aW9uLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLmFuaW1hdGlvbklEICE9IG51bGwpIHtcbiAgICAgIF9yYWYyWydkZWZhdWx0J10uY2FuY2VsKHRoaXMuYW5pbWF0aW9uSUQpO1xuICAgICAgdGhpcy5hbmltYXRpb25JRCA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIFN0YWdnZXJlZE1vdGlvbi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciByZW5kZXJlZENoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbih0aGlzLnN0YXRlLmN1cnJlbnRTdHlsZXMpO1xuICAgIHJldHVybiByZW5kZXJlZENoaWxkcmVuICYmIF9yZWFjdDJbJ2RlZmF1bHQnXS5DaGlsZHJlbi5vbmx5KHJlbmRlcmVkQ2hpbGRyZW4pO1xuICB9O1xuXG4gIHJldHVybiBTdGFnZ2VyZWRNb3Rpb247XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gU3RhZ2dlcmVkTW90aW9uO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cbi8vIGl0J3MgcG9zc2libGUgdGhhdCBjdXJyZW50U3R5bGUncyB2YWx1ZSBpcyBzdGFsZTogaWYgcHJvcHMgaXMgaW1tZWRpYXRlbHlcbi8vIGNoYW5nZWQgZnJvbSAwIHRvIDQwMCB0byBzcHJpbmcoMCkgYWdhaW4sIHRoZSBhc3luYyBjdXJyZW50U3R5bGUgaXMgc3RpbGxcbi8vIGF0IDAgKGRpZG4ndCBoYXZlIHRpbWUgdG8gdGljayBhbmQgaW50ZXJwb2xhdGUgZXZlbiBvbmNlKS4gSWYgd2UgbmFpdmVseVxuLy8gY29tcGFyZSBjdXJyZW50U3R5bGUgd2l0aCBkZXN0VmFsIGl0J2xsIGJlIDAgPT09IDAgKG5vIGFuaW1hdGlvbiwgc3RvcCkuXG4vLyBJbiByZWFsaXR5IGN1cnJlbnRTdHlsZSBzaG91bGQgYmUgNDAwXG5cbi8vIGFmdGVyIGNoZWNraW5nIGZvciB1bnJlYWRQcm9wU3R5bGVzICE9IG51bGwsIHdlIG1hbnVhbGx5IGdvIHNldCB0aGVcbi8vIG5vbi1pbnRlcnBvbGF0aW5nIHZhbHVlcyAodGhvc2UgdGhhdCBhcmUgYSBudW1iZXIsIHdpdGhvdXQgYSBzcHJpbmdcbi8vIGNvbmZpZykiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICdmdW5jdGlvbicgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICcgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBfbWFwVG9aZXJvID0gcmVxdWlyZSgnLi9tYXBUb1plcm8nKTtcblxudmFyIF9tYXBUb1plcm8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWFwVG9aZXJvKTtcblxudmFyIF9zdHJpcFN0eWxlID0gcmVxdWlyZSgnLi9zdHJpcFN0eWxlJyk7XG5cbnZhciBfc3RyaXBTdHlsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHJpcFN0eWxlKTtcblxudmFyIF9zdGVwcGVyMyA9IHJlcXVpcmUoJy4vc3RlcHBlcicpO1xuXG52YXIgX3N0ZXBwZXI0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RlcHBlcjMpO1xuXG52YXIgX21lcmdlRGlmZiA9IHJlcXVpcmUoJy4vbWVyZ2VEaWZmJyk7XG5cbnZhciBfbWVyZ2VEaWZmMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21lcmdlRGlmZik7XG5cbnZhciBfcGVyZm9ybWFuY2VOb3cgPSByZXF1aXJlKCdwZXJmb3JtYW5jZS1ub3cnKTtcblxudmFyIF9wZXJmb3JtYW5jZU5vdzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wZXJmb3JtYW5jZU5vdyk7XG5cbnZhciBfcmFmID0gcmVxdWlyZSgncmFmJyk7XG5cbnZhciBfcmFmMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JhZik7XG5cbnZhciBfc2hvdWxkU3RvcEFuaW1hdGlvbiA9IHJlcXVpcmUoJy4vc2hvdWxkU3RvcEFuaW1hdGlvbicpO1xuXG52YXIgX3Nob3VsZFN0b3BBbmltYXRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2hvdWxkU3RvcEFuaW1hdGlvbik7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKCdwcm9wLXR5cGVzJyk7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbnZhciBtc1BlckZyYW1lID0gMTAwMCAvIDYwO1xuXG4vLyB0aGUgY2hpbGRyZW4gZnVuY3Rpb24gJiAocG90ZW50aWFsKSBzdHlsZXMgZnVuY3Rpb24gYXNrcyBhcyBwYXJhbSBhblxuLy8gQXJyYXk8VHJhbnNpdGlvblBsYWluU3R5bGU+LCB3aGVyZSBlYWNoIFRyYW5zaXRpb25QbGFpblN0eWxlIGlzIG9mIHRoZSBmb3JtYXRcbi8vIHtrZXk6IHN0cmluZywgZGF0YT86IGFueSwgc3R5bGU6IFBsYWluU3R5bGV9LiBIb3dldmVyLCB0aGUgd2F5IHdlIGtlZXBcbi8vIGludGVybmFsIHN0YXRlcyBkb2Vzbid0IGNvbnRhaW4gc3VjaCBhIGRhdGEgc3RydWN0dXJlIChjaGVjayB0aGUgc3RhdGUgYW5kXG4vLyBUcmFuc2l0aW9uTW90aW9uU3RhdGUpLiBTbyB3aGVuIGNoaWxkcmVuIGZ1bmN0aW9uIGFuZCBvdGhlcnMgYXNrIGZvciBzdWNoXG4vLyBkYXRhIHdlIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBvbiB0aGUgZmx5IGJ5IGNvbWJpbmluZyBtZXJnZWRQcm9wc1N0eWxlcyBhbmRcbi8vIGN1cnJlbnRTdHlsZXMvbGFzdElkZWFsU3R5bGVzXG5mdW5jdGlvbiByZWh5ZHJhdGVTdHlsZXMobWVyZ2VkUHJvcHNTdHlsZXMsIHVucmVhZFByb3BTdHlsZXMsIHBsYWluU3R5bGVzKSB7XG4gIC8vIENvcHkgdGhlIHZhbHVlIHRvIGEgYGNvbnN0YCBzbyB0aGF0IEZsb3cgdW5kZXJzdGFuZHMgdGhhdCB0aGUgY29uc3Qgd29uJ3RcbiAgLy8gY2hhbmdlIGFuZCB3aWxsIGJlIG5vbi1udWxsYWJsZSBpbiB0aGUgY2FsbGJhY2sgYmVsb3cuXG4gIHZhciBjVW5yZWFkUHJvcFN0eWxlcyA9IHVucmVhZFByb3BTdHlsZXM7XG4gIGlmIChjVW5yZWFkUHJvcFN0eWxlcyA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG1lcmdlZFByb3BzU3R5bGVzLm1hcChmdW5jdGlvbiAobWVyZ2VkUHJvcHNTdHlsZSwgaSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBtZXJnZWRQcm9wc1N0eWxlLmtleSxcbiAgICAgICAgZGF0YTogbWVyZ2VkUHJvcHNTdHlsZS5kYXRhLFxuICAgICAgICBzdHlsZTogcGxhaW5TdHlsZXNbaV1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG1lcmdlZFByb3BzU3R5bGVzLm1hcChmdW5jdGlvbiAobWVyZ2VkUHJvcHNTdHlsZSwgaSkge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY1VucmVhZFByb3BTdHlsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChjVW5yZWFkUHJvcFN0eWxlc1tqXS5rZXkgPT09IG1lcmdlZFByb3BzU3R5bGUua2V5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAga2V5OiBjVW5yZWFkUHJvcFN0eWxlc1tqXS5rZXksXG4gICAgICAgICAgZGF0YTogY1VucmVhZFByb3BTdHlsZXNbal0uZGF0YSxcbiAgICAgICAgICBzdHlsZTogcGxhaW5TdHlsZXNbaV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsga2V5OiBtZXJnZWRQcm9wc1N0eWxlLmtleSwgZGF0YTogbWVyZ2VkUHJvcHNTdHlsZS5kYXRhLCBzdHlsZTogcGxhaW5TdHlsZXNbaV0gfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFN0b3BBbmltYXRpb25BbGwoY3VycmVudFN0eWxlcywgZGVzdFN0eWxlcywgY3VycmVudFZlbG9jaXRpZXMsIG1lcmdlZFByb3BzU3R5bGVzKSB7XG4gIGlmIChtZXJnZWRQcm9wc1N0eWxlcy5sZW5ndGggIT09IGRlc3RTdHlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXJnZWRQcm9wc1N0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChtZXJnZWRQcm9wc1N0eWxlc1tpXS5rZXkgIT09IGRlc3RTdHlsZXNbaV0ua2V5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gd2UgaGF2ZSB0aGUgaW52YXJpYW50IHRoYXQgbWVyZ2VkUHJvcHNTdHlsZXMgYW5kXG4gIC8vIGN1cnJlbnRTdHlsZXMvY3VycmVudFZlbG9jaXRpZXMvbGFzdCogYXJlIHN5bmNlZCBpbiB0ZXJtcyBvZiBjZWxscywgc2VlXG4gIC8vIG1lcmdlQW5kU3luYyBjb21tZW50IGZvciBtb3JlIGluZm9cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXJnZWRQcm9wc1N0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghX3Nob3VsZFN0b3BBbmltYXRpb24yWydkZWZhdWx0J10oY3VycmVudFN0eWxlc1tpXSwgZGVzdFN0eWxlc1tpXS5zdHlsZSwgY3VycmVudFZlbG9jaXRpZXNbaV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIGNvcmUga2V5IG1lcmdpbmcgbG9naWNcblxuLy8gdGhpbmdzIHRvIGRvOiBzYXkgcHJldmlvdXNseSBtZXJnZWQgc3R5bGUgaXMge2EsIGJ9LCBkZXN0IHN0eWxlIChwcm9wKSBpcyB7Yixcbi8vIGN9LCBwcmV2aW91cyBjdXJyZW50IChpbnRlcnBvbGF0aW5nKSBzdHlsZSBpcyB7YSwgYn1cbi8vICoqaW52YXJpYW50Kio6IGN1cnJlbnRbaV0gY29ycmVzcG9uZHMgdG8gbWVyZ2VkW2ldIGluIHRlcm1zIG9mIGtleVxuXG4vLyBzdGVwczpcbi8vIHR1cm4gbWVyZ2VkIHN0eWxlIGludG8ge2E/LCBiLCBjfVxuLy8gICAgYWRkIGMsIHZhbHVlIG9mIGMgaXMgZGVzdFN0eWxlcy5jXG4vLyAgICBtYXliZSByZW1vdmUgYSwgYWthIGNhbGwgd2lsbExlYXZlKGEpLCB0aGVuIG1lcmdlZCBpcyBlaXRoZXIge2IsIGN9IG9yIHthLCBiLCBjfVxuLy8gdHVybiBjdXJyZW50IChpbnRlcnBvbGF0aW5nKSBzdHlsZSBmcm9tIHthLCBifSBpbnRvIHthPywgYiwgY31cbi8vICAgIG1heWJlIHJlbW92ZSBhXG4vLyAgICBjZXJ0YWlubHkgYWRkIGMsIHZhbHVlIG9mIGMgaXMgd2lsbEVudGVyKGMpXG4vLyBsb29wIG92ZXIgbWVyZ2VkIGFuZCBjb25zdHJ1Y3QgbmV3IGN1cnJlbnRcbi8vIGRlc3QgZG9lc24ndCBjaGFuZ2UsIHRoYXQncyBvd25lcidzXG5mdW5jdGlvbiBtZXJnZUFuZFN5bmMod2lsbEVudGVyLCB3aWxsTGVhdmUsIGRpZExlYXZlLCBvbGRNZXJnZWRQcm9wc1N0eWxlcywgZGVzdFN0eWxlcywgb2xkQ3VycmVudFN0eWxlcywgb2xkQ3VycmVudFZlbG9jaXRpZXMsIG9sZExhc3RJZGVhbFN0eWxlcywgb2xkTGFzdElkZWFsVmVsb2NpdGllcykge1xuICB2YXIgbmV3TWVyZ2VkUHJvcHNTdHlsZXMgPSBfbWVyZ2VEaWZmMlsnZGVmYXVsdCddKG9sZE1lcmdlZFByb3BzU3R5bGVzLCBkZXN0U3R5bGVzLCBmdW5jdGlvbiAob2xkSW5kZXgsIG9sZE1lcmdlZFByb3BzU3R5bGUpIHtcbiAgICB2YXIgbGVhdmluZ1N0eWxlID0gd2lsbExlYXZlKG9sZE1lcmdlZFByb3BzU3R5bGUpO1xuICAgIGlmIChsZWF2aW5nU3R5bGUgPT0gbnVsbCkge1xuICAgICAgZGlkTGVhdmUoeyBrZXk6IG9sZE1lcmdlZFByb3BzU3R5bGUua2V5LCBkYXRhOiBvbGRNZXJnZWRQcm9wc1N0eWxlLmRhdGEgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKF9zaG91bGRTdG9wQW5pbWF0aW9uMlsnZGVmYXVsdCddKG9sZEN1cnJlbnRTdHlsZXNbb2xkSW5kZXhdLCBsZWF2aW5nU3R5bGUsIG9sZEN1cnJlbnRWZWxvY2l0aWVzW29sZEluZGV4XSkpIHtcbiAgICAgIGRpZExlYXZlKHsga2V5OiBvbGRNZXJnZWRQcm9wc1N0eWxlLmtleSwgZGF0YTogb2xkTWVyZ2VkUHJvcHNTdHlsZS5kYXRhIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7IGtleTogb2xkTWVyZ2VkUHJvcHNTdHlsZS5rZXksIGRhdGE6IG9sZE1lcmdlZFByb3BzU3R5bGUuZGF0YSwgc3R5bGU6IGxlYXZpbmdTdHlsZSB9O1xuICB9KTtcblxuICB2YXIgbmV3Q3VycmVudFN0eWxlcyA9IFtdO1xuICB2YXIgbmV3Q3VycmVudFZlbG9jaXRpZXMgPSBbXTtcbiAgdmFyIG5ld0xhc3RJZGVhbFN0eWxlcyA9IFtdO1xuICB2YXIgbmV3TGFzdElkZWFsVmVsb2NpdGllcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld01lcmdlZFByb3BzU3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5ld01lcmdlZFByb3BzU3R5bGVDZWxsID0gbmV3TWVyZ2VkUHJvcHNTdHlsZXNbaV07XG4gICAgdmFyIGZvdW5kT2xkSW5kZXggPSBudWxsO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgb2xkTWVyZ2VkUHJvcHNTdHlsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChvbGRNZXJnZWRQcm9wc1N0eWxlc1tqXS5rZXkgPT09IG5ld01lcmdlZFByb3BzU3R5bGVDZWxsLmtleSkge1xuICAgICAgICBmb3VuZE9sZEluZGV4ID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFRPRE86IGtleSBzZWFyY2ggY29kZVxuICAgIGlmIChmb3VuZE9sZEluZGV4ID09IG51bGwpIHtcbiAgICAgIHZhciBwbGFpblN0eWxlID0gd2lsbEVudGVyKG5ld01lcmdlZFByb3BzU3R5bGVDZWxsKTtcbiAgICAgIG5ld0N1cnJlbnRTdHlsZXNbaV0gPSBwbGFpblN0eWxlO1xuICAgICAgbmV3TGFzdElkZWFsU3R5bGVzW2ldID0gcGxhaW5TdHlsZTtcblxuICAgICAgdmFyIHZlbG9jaXR5ID0gX21hcFRvWmVybzJbJ2RlZmF1bHQnXShuZXdNZXJnZWRQcm9wc1N0eWxlQ2VsbC5zdHlsZSk7XG4gICAgICBuZXdDdXJyZW50VmVsb2NpdGllc1tpXSA9IHZlbG9jaXR5O1xuICAgICAgbmV3TGFzdElkZWFsVmVsb2NpdGllc1tpXSA9IHZlbG9jaXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdDdXJyZW50U3R5bGVzW2ldID0gb2xkQ3VycmVudFN0eWxlc1tmb3VuZE9sZEluZGV4XTtcbiAgICAgIG5ld0xhc3RJZGVhbFN0eWxlc1tpXSA9IG9sZExhc3RJZGVhbFN0eWxlc1tmb3VuZE9sZEluZGV4XTtcbiAgICAgIG5ld0N1cnJlbnRWZWxvY2l0aWVzW2ldID0gb2xkQ3VycmVudFZlbG9jaXRpZXNbZm91bmRPbGRJbmRleF07XG4gICAgICBuZXdMYXN0SWRlYWxWZWxvY2l0aWVzW2ldID0gb2xkTGFzdElkZWFsVmVsb2NpdGllc1tmb3VuZE9sZEluZGV4XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW25ld01lcmdlZFByb3BzU3R5bGVzLCBuZXdDdXJyZW50U3R5bGVzLCBuZXdDdXJyZW50VmVsb2NpdGllcywgbmV3TGFzdElkZWFsU3R5bGVzLCBuZXdMYXN0SWRlYWxWZWxvY2l0aWVzXTtcbn1cblxudmFyIFRyYW5zaXRpb25Nb3Rpb24gPSAoZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFRyYW5zaXRpb25Nb3Rpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIF9jcmVhdGVDbGFzcyhUcmFuc2l0aW9uTW90aW9uLCBudWxsLCBbe1xuICAgIGtleTogJ3Byb3BUeXBlcycsXG4gICAgdmFsdWU6IHtcbiAgICAgIGRlZmF1bHRTdHlsZXM6IF9wcm9wVHlwZXMyWydkZWZhdWx0J10uYXJyYXlPZihfcHJvcFR5cGVzMlsnZGVmYXVsdCddLnNoYXBlKHtcbiAgICAgICAga2V5OiBfcHJvcFR5cGVzMlsnZGVmYXVsdCddLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgICBkYXRhOiBfcHJvcFR5cGVzMlsnZGVmYXVsdCddLmFueSxcbiAgICAgICAgc3R5bGU6IF9wcm9wVHlwZXMyWydkZWZhdWx0J10ub2JqZWN0T2YoX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5udW1iZXIpLmlzUmVxdWlyZWRcbiAgICAgIH0pKSxcbiAgICAgIHN0eWxlczogX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5vbmVPZlR5cGUoW19wcm9wVHlwZXMyWydkZWZhdWx0J10uZnVuYywgX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5hcnJheU9mKF9wcm9wVHlwZXMyWydkZWZhdWx0J10uc2hhcGUoe1xuICAgICAgICBrZXk6IF9wcm9wVHlwZXMyWydkZWZhdWx0J10uc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgIGRhdGE6IF9wcm9wVHlwZXMyWydkZWZhdWx0J10uYW55LFxuICAgICAgICBzdHlsZTogX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5vYmplY3RPZihfcHJvcFR5cGVzMlsnZGVmYXVsdCddLm9uZU9mVHlwZShbX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5udW1iZXIsIF9wcm9wVHlwZXMyWydkZWZhdWx0J10ub2JqZWN0XSkpLmlzUmVxdWlyZWRcbiAgICAgIH0pKV0pLmlzUmVxdWlyZWQsXG4gICAgICBjaGlsZHJlbjogX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICB3aWxsRW50ZXI6IF9wcm9wVHlwZXMyWydkZWZhdWx0J10uZnVuYyxcbiAgICAgIHdpbGxMZWF2ZTogX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5mdW5jLFxuICAgICAgZGlkTGVhdmU6IF9wcm9wVHlwZXMyWydkZWZhdWx0J10uZnVuY1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZVxuICB9LCB7XG4gICAga2V5OiAnZGVmYXVsdFByb3BzJyxcbiAgICB2YWx1ZToge1xuICAgICAgd2lsbEVudGVyOiBmdW5jdGlvbiB3aWxsRW50ZXIoc3R5bGVUaGF0RW50ZXJlZCkge1xuICAgICAgICByZXR1cm4gX3N0cmlwU3R5bGUyWydkZWZhdWx0J10oc3R5bGVUaGF0RW50ZXJlZC5zdHlsZSk7XG4gICAgICB9LFxuICAgICAgLy8gcmVjYWxsOiByZXR1cm5pbmcgbnVsbCBtYWtlcyB0aGUgY3VycmVudCB1bm1vdW50aW5nIFRyYW5zaXRpb25TdHlsZVxuICAgICAgLy8gZGlzYXBwZWFyIGltbWVkaWF0ZWx5XG4gICAgICB3aWxsTGVhdmU6IGZ1bmN0aW9uIHdpbGxMZWF2ZSgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgICAgZGlkTGVhdmU6IGZ1bmN0aW9uIGRpZExlYXZlKCkge31cbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWVcbiAgfV0pO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb25Nb3Rpb24ocHJvcHMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRyYW5zaXRpb25Nb3Rpb24pO1xuXG4gICAgX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKTtcbiAgICB0aGlzLnVubW91bnRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmFuaW1hdGlvbklEID0gbnVsbDtcbiAgICB0aGlzLnByZXZUaW1lID0gMDtcbiAgICB0aGlzLmFjY3VtdWxhdGVkVGltZSA9IDA7XG4gICAgdGhpcy51bnJlYWRQcm9wU3R5bGVzID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJVbnJlYWRQcm9wU3R5bGUgPSBmdW5jdGlvbiAodW5yZWFkUHJvcFN0eWxlcykge1xuICAgICAgdmFyIF9tZXJnZUFuZFN5bmMgPSBtZXJnZUFuZFN5bmMoX3RoaXMucHJvcHMud2lsbEVudGVyLCBfdGhpcy5wcm9wcy53aWxsTGVhdmUsIF90aGlzLnByb3BzLmRpZExlYXZlLCBfdGhpcy5zdGF0ZS5tZXJnZWRQcm9wc1N0eWxlcywgdW5yZWFkUHJvcFN0eWxlcywgX3RoaXMuc3RhdGUuY3VycmVudFN0eWxlcywgX3RoaXMuc3RhdGUuY3VycmVudFZlbG9jaXRpZXMsIF90aGlzLnN0YXRlLmxhc3RJZGVhbFN0eWxlcywgX3RoaXMuc3RhdGUubGFzdElkZWFsVmVsb2NpdGllcyk7XG5cbiAgICAgIHZhciBtZXJnZWRQcm9wc1N0eWxlcyA9IF9tZXJnZUFuZFN5bmNbMF07XG4gICAgICB2YXIgY3VycmVudFN0eWxlcyA9IF9tZXJnZUFuZFN5bmNbMV07XG4gICAgICB2YXIgY3VycmVudFZlbG9jaXRpZXMgPSBfbWVyZ2VBbmRTeW5jWzJdO1xuICAgICAgdmFyIGxhc3RJZGVhbFN0eWxlcyA9IF9tZXJnZUFuZFN5bmNbM107XG4gICAgICB2YXIgbGFzdElkZWFsVmVsb2NpdGllcyA9IF9tZXJnZUFuZFN5bmNbNF07XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5yZWFkUHJvcFN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdW5yZWFkUHJvcFN0eWxlID0gdW5yZWFkUHJvcFN0eWxlc1tpXS5zdHlsZTtcbiAgICAgICAgdmFyIGRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHVucmVhZFByb3BTdHlsZSkge1xuICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHVucmVhZFByb3BTdHlsZSwga2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN0eWxlVmFsdWUgPSB1bnJlYWRQcm9wU3R5bGVba2V5XTtcbiAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBpZiAoIWRpcnR5KSB7XG4gICAgICAgICAgICAgIGRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3VycmVudFN0eWxlc1tpXSA9IF9leHRlbmRzKHt9LCBjdXJyZW50U3R5bGVzW2ldKTtcbiAgICAgICAgICAgICAgY3VycmVudFZlbG9jaXRpZXNbaV0gPSBfZXh0ZW5kcyh7fSwgY3VycmVudFZlbG9jaXRpZXNbaV0pO1xuICAgICAgICAgICAgICBsYXN0SWRlYWxTdHlsZXNbaV0gPSBfZXh0ZW5kcyh7fSwgbGFzdElkZWFsU3R5bGVzW2ldKTtcbiAgICAgICAgICAgICAgbGFzdElkZWFsVmVsb2NpdGllc1tpXSA9IF9leHRlbmRzKHt9LCBsYXN0SWRlYWxWZWxvY2l0aWVzW2ldKTtcbiAgICAgICAgICAgICAgbWVyZ2VkUHJvcHNTdHlsZXNbaV0gPSB7XG4gICAgICAgICAgICAgICAga2V5OiBtZXJnZWRQcm9wc1N0eWxlc1tpXS5rZXksXG4gICAgICAgICAgICAgICAgZGF0YTogbWVyZ2VkUHJvcHNTdHlsZXNbaV0uZGF0YSxcbiAgICAgICAgICAgICAgICBzdHlsZTogX2V4dGVuZHMoe30sIG1lcmdlZFByb3BzU3R5bGVzW2ldLnN0eWxlKVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudFN0eWxlc1tpXVtrZXldID0gc3R5bGVWYWx1ZTtcbiAgICAgICAgICAgIGN1cnJlbnRWZWxvY2l0aWVzW2ldW2tleV0gPSAwO1xuICAgICAgICAgICAgbGFzdElkZWFsU3R5bGVzW2ldW2tleV0gPSBzdHlsZVZhbHVlO1xuICAgICAgICAgICAgbGFzdElkZWFsVmVsb2NpdGllc1tpXVtrZXldID0gMDtcbiAgICAgICAgICAgIG1lcmdlZFByb3BzU3R5bGVzW2ldLnN0eWxlW2tleV0gPSBzdHlsZVZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB1bmxpa2UgdGhlIG90aGVyIDIgY29tcG9uZW50cywgd2UgY2FuJ3QgZGV0ZWN0IHN0YWxlbmVzcyBhbmQgb3B0aW9uYWxseVxuICAgICAgLy8gb3B0IG91dCBvZiBzZXRTdGF0ZSBoZXJlLiBlYWNoIHN0eWxlIG9iamVjdCdzIGRhdGEgbWlnaHQgY29udGFpbiBuZXdcbiAgICAgIC8vIHN0dWZmIHdlJ3JlIG5vdC9jYW5ub3QgY29tcGFyZVxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjdXJyZW50U3R5bGVzOiBjdXJyZW50U3R5bGVzLFxuICAgICAgICBjdXJyZW50VmVsb2NpdGllczogY3VycmVudFZlbG9jaXRpZXMsXG4gICAgICAgIG1lcmdlZFByb3BzU3R5bGVzOiBtZXJnZWRQcm9wc1N0eWxlcyxcbiAgICAgICAgbGFzdElkZWFsU3R5bGVzOiBsYXN0SWRlYWxTdHlsZXMsXG4gICAgICAgIGxhc3RJZGVhbFZlbG9jaXRpZXM6IGxhc3RJZGVhbFZlbG9jaXRpZXNcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLnN0YXJ0QW5pbWF0aW9uSWZOZWNlc3NhcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMudW5tb3VudGluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IHdoZW4gY29uZmlnIGlzIHthOiAxMH0gYW5kIGRlc3QgaXMge2E6IDEwfSBkbyB3ZSByYWYgb25jZSBhbmRcbiAgICAgIC8vIGNhbGwgY2I/IE5vLCBvdGhlcndpc2UgYWNjaWRlbnRhbCBwYXJlbnQgcmVyZW5kZXIgY2F1c2VzIGNiIHRyaWdnZXJcbiAgICAgIF90aGlzLmFuaW1hdGlvbklEID0gX3JhZjJbJ2RlZmF1bHQnXShmdW5jdGlvbiAodGltZXN0YW1wKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGVuZ2xvdS9yZWFjdC1tb3Rpb24vcHVsbC80MjBcbiAgICAgICAgLy8gPiBpZiBleGVjdXRpb24gcGFzc2VzIHRoZSBjb25kaXRpb25hbCBpZiAodGhpcy51bm1vdW50aW5nKSwgdGhlblxuICAgICAgICAvLyBleGVjdXRlcyBhc3luYyBkZWZhdWx0UmFmIGFuZCBhZnRlciB0aGF0IGNvbXBvbmVudCB1bm1vdW50cyBhbmQgYWZ0ZXJcbiAgICAgICAgLy8gdGhhdCB0aGUgY2FsbGJhY2sgb2YgZGVmYXVsdFJhZiBpcyBjYWxsZWQsIHRoZW4gc2V0U3RhdGUgd2lsbCBiZSBjYWxsZWRcbiAgICAgICAgLy8gb24gdW5tb3VudGVkIGNvbXBvbmVudC5cbiAgICAgICAgaWYgKF90aGlzLnVubW91bnRpbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcHJvcFN0eWxlcyA9IF90aGlzLnByb3BzLnN0eWxlcztcbiAgICAgICAgdmFyIGRlc3RTdHlsZXMgPSB0eXBlb2YgcHJvcFN0eWxlcyA9PT0gJ2Z1bmN0aW9uJyA/IHByb3BTdHlsZXMocmVoeWRyYXRlU3R5bGVzKF90aGlzLnN0YXRlLm1lcmdlZFByb3BzU3R5bGVzLCBfdGhpcy51bnJlYWRQcm9wU3R5bGVzLCBfdGhpcy5zdGF0ZS5sYXN0SWRlYWxTdHlsZXMpKSA6IHByb3BTdHlsZXM7XG5cbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBhbmltYXRlIGluIHRoZSBmaXJzdCBwbGFjZVxuICAgICAgICBpZiAoc2hvdWxkU3RvcEFuaW1hdGlvbkFsbChfdGhpcy5zdGF0ZS5jdXJyZW50U3R5bGVzLCBkZXN0U3R5bGVzLCBfdGhpcy5zdGF0ZS5jdXJyZW50VmVsb2NpdGllcywgX3RoaXMuc3RhdGUubWVyZ2VkUHJvcHNTdHlsZXMpKSB7XG4gICAgICAgICAgLy8gbm8gbmVlZCB0byBjYW5jZWwgYW5pbWF0aW9uSUQgaGVyZTsgc2hvdWxkbid0IGhhdmUgYW55IGluIGZsaWdodFxuICAgICAgICAgIF90aGlzLmFuaW1hdGlvbklEID0gbnVsbDtcbiAgICAgICAgICBfdGhpcy5hY2N1bXVsYXRlZFRpbWUgPSAwO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IHRpbWVzdGFtcCB8fCBfcGVyZm9ybWFuY2VOb3cyWydkZWZhdWx0J10oKTtcbiAgICAgICAgdmFyIHRpbWVEZWx0YSA9IGN1cnJlbnRUaW1lIC0gX3RoaXMucHJldlRpbWU7XG4gICAgICAgIF90aGlzLnByZXZUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICAgIF90aGlzLmFjY3VtdWxhdGVkVGltZSA9IF90aGlzLmFjY3VtdWxhdGVkVGltZSArIHRpbWVEZWx0YTtcbiAgICAgICAgLy8gbW9yZSB0aGFuIDEwIGZyYW1lcz8gcHJvbGx5IHN3aXRjaGVkIGJyb3dzZXIgdGFiLiBSZXN0YXJ0XG4gICAgICAgIGlmIChfdGhpcy5hY2N1bXVsYXRlZFRpbWUgPiBtc1BlckZyYW1lICogMTApIHtcbiAgICAgICAgICBfdGhpcy5hY2N1bXVsYXRlZFRpbWUgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF90aGlzLmFjY3VtdWxhdGVkVGltZSA9PT0gMCkge1xuICAgICAgICAgIC8vIG5vIG5lZWQgdG8gY2FuY2VsIGFuaW1hdGlvbklEIGhlcmU7IHNob3VsZG4ndCBoYXZlIGFueSBpbiBmbGlnaHRcbiAgICAgICAgICBfdGhpcy5hbmltYXRpb25JRCA9IG51bGw7XG4gICAgICAgICAgX3RoaXMuc3RhcnRBbmltYXRpb25JZk5lY2Vzc2FyeSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50RnJhbWVDb21wbGV0aW9uID0gKF90aGlzLmFjY3VtdWxhdGVkVGltZSAtIE1hdGguZmxvb3IoX3RoaXMuYWNjdW11bGF0ZWRUaW1lIC8gbXNQZXJGcmFtZSkgKiBtc1BlckZyYW1lKSAvIG1zUGVyRnJhbWU7XG4gICAgICAgIHZhciBmcmFtZXNUb0NhdGNoVXAgPSBNYXRoLmZsb29yKF90aGlzLmFjY3VtdWxhdGVkVGltZSAvIG1zUGVyRnJhbWUpO1xuXG4gICAgICAgIHZhciBfbWVyZ2VBbmRTeW5jMiA9IG1lcmdlQW5kU3luYyhfdGhpcy5wcm9wcy53aWxsRW50ZXIsIF90aGlzLnByb3BzLndpbGxMZWF2ZSwgX3RoaXMucHJvcHMuZGlkTGVhdmUsIF90aGlzLnN0YXRlLm1lcmdlZFByb3BzU3R5bGVzLCBkZXN0U3R5bGVzLCBfdGhpcy5zdGF0ZS5jdXJyZW50U3R5bGVzLCBfdGhpcy5zdGF0ZS5jdXJyZW50VmVsb2NpdGllcywgX3RoaXMuc3RhdGUubGFzdElkZWFsU3R5bGVzLCBfdGhpcy5zdGF0ZS5sYXN0SWRlYWxWZWxvY2l0aWVzKTtcblxuICAgICAgICB2YXIgbmV3TWVyZ2VkUHJvcHNTdHlsZXMgPSBfbWVyZ2VBbmRTeW5jMlswXTtcbiAgICAgICAgdmFyIG5ld0N1cnJlbnRTdHlsZXMgPSBfbWVyZ2VBbmRTeW5jMlsxXTtcbiAgICAgICAgdmFyIG5ld0N1cnJlbnRWZWxvY2l0aWVzID0gX21lcmdlQW5kU3luYzJbMl07XG4gICAgICAgIHZhciBuZXdMYXN0SWRlYWxTdHlsZXMgPSBfbWVyZ2VBbmRTeW5jMlszXTtcbiAgICAgICAgdmFyIG5ld0xhc3RJZGVhbFZlbG9jaXRpZXMgPSBfbWVyZ2VBbmRTeW5jMls0XTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld01lcmdlZFByb3BzU3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIG5ld01lcmdlZFByb3BzU3R5bGUgPSBuZXdNZXJnZWRQcm9wc1N0eWxlc1tpXS5zdHlsZTtcbiAgICAgICAgICB2YXIgbmV3Q3VycmVudFN0eWxlID0ge307XG4gICAgICAgICAgdmFyIG5ld0N1cnJlbnRWZWxvY2l0eSA9IHt9O1xuICAgICAgICAgIHZhciBuZXdMYXN0SWRlYWxTdHlsZSA9IHt9O1xuICAgICAgICAgIHZhciBuZXdMYXN0SWRlYWxWZWxvY2l0eSA9IHt9O1xuXG4gICAgICAgICAgZm9yICh2YXIga2V5IGluIG5ld01lcmdlZFByb3BzU3R5bGUpIHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld01lcmdlZFByb3BzU3R5bGUsIGtleSkpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzdHlsZVZhbHVlID0gbmV3TWVyZ2VkUHJvcHNTdHlsZVtrZXldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZVZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICBuZXdDdXJyZW50U3R5bGVba2V5XSA9IHN0eWxlVmFsdWU7XG4gICAgICAgICAgICAgIG5ld0N1cnJlbnRWZWxvY2l0eVtrZXldID0gMDtcbiAgICAgICAgICAgICAgbmV3TGFzdElkZWFsU3R5bGVba2V5XSA9IHN0eWxlVmFsdWU7XG4gICAgICAgICAgICAgIG5ld0xhc3RJZGVhbFZlbG9jaXR5W2tleV0gPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIG5ld0xhc3RJZGVhbFN0eWxlVmFsdWUgPSBuZXdMYXN0SWRlYWxTdHlsZXNbaV1ba2V5XTtcbiAgICAgICAgICAgICAgdmFyIG5ld0xhc3RJZGVhbFZlbG9jaXR5VmFsdWUgPSBuZXdMYXN0SWRlYWxWZWxvY2l0aWVzW2ldW2tleV07XG4gICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZnJhbWVzVG9DYXRjaFVwOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgX3N0ZXBwZXIgPSBfc3RlcHBlcjRbJ2RlZmF1bHQnXShtc1BlckZyYW1lIC8gMTAwMCwgbmV3TGFzdElkZWFsU3R5bGVWYWx1ZSwgbmV3TGFzdElkZWFsVmVsb2NpdHlWYWx1ZSwgc3R5bGVWYWx1ZS52YWwsIHN0eWxlVmFsdWUuc3RpZmZuZXNzLCBzdHlsZVZhbHVlLmRhbXBpbmcsIHN0eWxlVmFsdWUucHJlY2lzaW9uKTtcblxuICAgICAgICAgICAgICAgIG5ld0xhc3RJZGVhbFN0eWxlVmFsdWUgPSBfc3RlcHBlclswXTtcbiAgICAgICAgICAgICAgICBuZXdMYXN0SWRlYWxWZWxvY2l0eVZhbHVlID0gX3N0ZXBwZXJbMV07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgX3N0ZXBwZXIyID0gX3N0ZXBwZXI0WydkZWZhdWx0J10obXNQZXJGcmFtZSAvIDEwMDAsIG5ld0xhc3RJZGVhbFN0eWxlVmFsdWUsIG5ld0xhc3RJZGVhbFZlbG9jaXR5VmFsdWUsIHN0eWxlVmFsdWUudmFsLCBzdHlsZVZhbHVlLnN0aWZmbmVzcywgc3R5bGVWYWx1ZS5kYW1waW5nLCBzdHlsZVZhbHVlLnByZWNpc2lvbik7XG5cbiAgICAgICAgICAgICAgdmFyIG5leHRJZGVhbFggPSBfc3RlcHBlcjJbMF07XG4gICAgICAgICAgICAgIHZhciBuZXh0SWRlYWxWID0gX3N0ZXBwZXIyWzFdO1xuXG4gICAgICAgICAgICAgIG5ld0N1cnJlbnRTdHlsZVtrZXldID0gbmV3TGFzdElkZWFsU3R5bGVWYWx1ZSArIChuZXh0SWRlYWxYIC0gbmV3TGFzdElkZWFsU3R5bGVWYWx1ZSkgKiBjdXJyZW50RnJhbWVDb21wbGV0aW9uO1xuICAgICAgICAgICAgICBuZXdDdXJyZW50VmVsb2NpdHlba2V5XSA9IG5ld0xhc3RJZGVhbFZlbG9jaXR5VmFsdWUgKyAobmV4dElkZWFsViAtIG5ld0xhc3RJZGVhbFZlbG9jaXR5VmFsdWUpICogY3VycmVudEZyYW1lQ29tcGxldGlvbjtcbiAgICAgICAgICAgICAgbmV3TGFzdElkZWFsU3R5bGVba2V5XSA9IG5ld0xhc3RJZGVhbFN0eWxlVmFsdWU7XG4gICAgICAgICAgICAgIG5ld0xhc3RJZGVhbFZlbG9jaXR5W2tleV0gPSBuZXdMYXN0SWRlYWxWZWxvY2l0eVZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld0xhc3RJZGVhbFN0eWxlc1tpXSA9IG5ld0xhc3RJZGVhbFN0eWxlO1xuICAgICAgICAgIG5ld0xhc3RJZGVhbFZlbG9jaXRpZXNbaV0gPSBuZXdMYXN0SWRlYWxWZWxvY2l0eTtcbiAgICAgICAgICBuZXdDdXJyZW50U3R5bGVzW2ldID0gbmV3Q3VycmVudFN0eWxlO1xuICAgICAgICAgIG5ld0N1cnJlbnRWZWxvY2l0aWVzW2ldID0gbmV3Q3VycmVudFZlbG9jaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuYW5pbWF0aW9uSUQgPSBudWxsO1xuICAgICAgICAvLyB0aGUgYW1vdW50IHdlJ3JlIGxvb3BlZCBvdmVyIGFib3ZlXG4gICAgICAgIF90aGlzLmFjY3VtdWxhdGVkVGltZSAtPSBmcmFtZXNUb0NhdGNoVXAgKiBtc1BlckZyYW1lO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBjdXJyZW50U3R5bGVzOiBuZXdDdXJyZW50U3R5bGVzLFxuICAgICAgICAgIGN1cnJlbnRWZWxvY2l0aWVzOiBuZXdDdXJyZW50VmVsb2NpdGllcyxcbiAgICAgICAgICBsYXN0SWRlYWxTdHlsZXM6IG5ld0xhc3RJZGVhbFN0eWxlcyxcbiAgICAgICAgICBsYXN0SWRlYWxWZWxvY2l0aWVzOiBuZXdMYXN0SWRlYWxWZWxvY2l0aWVzLFxuICAgICAgICAgIG1lcmdlZFByb3BzU3R5bGVzOiBuZXdNZXJnZWRQcm9wc1N0eWxlc1xuICAgICAgICB9KTtcblxuICAgICAgICBfdGhpcy51bnJlYWRQcm9wU3R5bGVzID0gbnVsbDtcblxuICAgICAgICBfdGhpcy5zdGFydEFuaW1hdGlvbklmTmVjZXNzYXJ5KCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuZGVmYXVsdFN0YXRlKCk7XG4gIH1cblxuICBUcmFuc2l0aW9uTW90aW9uLnByb3RvdHlwZS5kZWZhdWx0U3RhdGUgPSBmdW5jdGlvbiBkZWZhdWx0U3RhdGUoKSB7XG4gICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgdmFyIGRlZmF1bHRTdHlsZXMgPSBfcHJvcHMuZGVmYXVsdFN0eWxlcztcbiAgICB2YXIgc3R5bGVzID0gX3Byb3BzLnN0eWxlcztcbiAgICB2YXIgd2lsbEVudGVyID0gX3Byb3BzLndpbGxFbnRlcjtcbiAgICB2YXIgd2lsbExlYXZlID0gX3Byb3BzLndpbGxMZWF2ZTtcbiAgICB2YXIgZGlkTGVhdmUgPSBfcHJvcHMuZGlkTGVhdmU7XG5cbiAgICB2YXIgZGVzdFN0eWxlcyA9IHR5cGVvZiBzdHlsZXMgPT09ICdmdW5jdGlvbicgPyBzdHlsZXMoZGVmYXVsdFN0eWxlcykgOiBzdHlsZXM7XG5cbiAgICAvLyB0aGlzIGlzIHNwZWNpYWwuIGZvciB0aGUgZmlyc3QgdGltZSBhcm91bmQsIHdlIGRvbid0IGhhdmUgYSBjb21wYXJpc29uXG4gICAgLy8gYmV0d2VlbiBsYXN0IChubyBsYXN0KSBhbmQgY3VycmVudCBtZXJnZWQgcHJvcHMuIHdlJ2xsIGNvbXB1dGUgbGFzdCBzbzpcbiAgICAvLyBzYXkgZGVmYXVsdCBpcyB7YSwgYn0gYW5kIHN0eWxlcyAoZGVzdCBzdHlsZSkgaXMge2IsIGN9LCB3ZSdsbFxuICAgIC8vIGZhYnJpY2F0ZSBsYXN0IGFzIHthLCBifVxuICAgIHZhciBvbGRNZXJnZWRQcm9wc1N0eWxlcyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoZGVmYXVsdFN0eWxlcyA9PSBudWxsKSB7XG4gICAgICBvbGRNZXJnZWRQcm9wc1N0eWxlcyA9IGRlc3RTdHlsZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZE1lcmdlZFByb3BzU3R5bGVzID0gZGVmYXVsdFN0eWxlcy5tYXAoZnVuY3Rpb24gKGRlZmF1bHRTdHlsZUNlbGwpIHtcbiAgICAgICAgLy8gVE9ETzoga2V5IHNlYXJjaCBjb2RlXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVzdFN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChkZXN0U3R5bGVzW2ldLmtleSA9PT0gZGVmYXVsdFN0eWxlQ2VsbC5rZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBkZXN0U3R5bGVzW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdFN0eWxlQ2VsbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgb2xkQ3VycmVudFN0eWxlcyA9IGRlZmF1bHRTdHlsZXMgPT0gbnVsbCA/IGRlc3RTdHlsZXMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gX3N0cmlwU3R5bGUyWydkZWZhdWx0J10ocy5zdHlsZSk7XG4gICAgfSkgOiBkZWZhdWx0U3R5bGVzLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIF9zdHJpcFN0eWxlMlsnZGVmYXVsdCddKHMuc3R5bGUpO1xuICAgIH0pO1xuICAgIHZhciBvbGRDdXJyZW50VmVsb2NpdGllcyA9IGRlZmF1bHRTdHlsZXMgPT0gbnVsbCA/IGRlc3RTdHlsZXMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gX21hcFRvWmVybzJbJ2RlZmF1bHQnXShzLnN0eWxlKTtcbiAgICB9KSA6IGRlZmF1bHRTdHlsZXMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gX21hcFRvWmVybzJbJ2RlZmF1bHQnXShzLnN0eWxlKTtcbiAgICB9KTtcblxuICAgIHZhciBfbWVyZ2VBbmRTeW5jMyA9IG1lcmdlQW5kU3luYyhcbiAgICAvLyBCZWNhdXNlIHRoaXMgaXMgYW4gb2xkLXN0eWxlIGNyZWF0ZVJlYWN0Q2xhc3MgY29tcG9uZW50LCBGbG93IGRvZXNuJ3RcbiAgICAvLyB1bmRlcnN0YW5kIHRoYXQgdGhlIHdpbGxFbnRlciBhbmQgd2lsbExlYXZlIHByb3BzIGhhdmUgZGVmYXVsdCB2YWx1ZXNcbiAgICAvLyBhbmQgd2lsbCBhbHdheXMgYmUgcHJlc2VudC5cbiAgICB3aWxsRW50ZXIsIHdpbGxMZWF2ZSwgZGlkTGVhdmUsIG9sZE1lcmdlZFByb3BzU3R5bGVzLCBkZXN0U3R5bGVzLCBvbGRDdXJyZW50U3R5bGVzLCBvbGRDdXJyZW50VmVsb2NpdGllcywgb2xkQ3VycmVudFN0eWxlcywgLy8gb2xkTGFzdElkZWFsU3R5bGVzIHJlYWxseVxuICAgIG9sZEN1cnJlbnRWZWxvY2l0aWVzKTtcblxuICAgIHZhciBtZXJnZWRQcm9wc1N0eWxlcyA9IF9tZXJnZUFuZFN5bmMzWzBdO1xuICAgIHZhciBjdXJyZW50U3R5bGVzID0gX21lcmdlQW5kU3luYzNbMV07XG4gICAgdmFyIGN1cnJlbnRWZWxvY2l0aWVzID0gX21lcmdlQW5kU3luYzNbMl07XG4gICAgdmFyIGxhc3RJZGVhbFN0eWxlcyA9IF9tZXJnZUFuZFN5bmMzWzNdO1xuICAgIHZhciBsYXN0SWRlYWxWZWxvY2l0aWVzID0gX21lcmdlQW5kU3luYzNbNF07XG4gICAgLy8gb2xkTGFzdElkZWFsVmVsb2NpdGllcyByZWFsbHlcblxuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50U3R5bGVzOiBjdXJyZW50U3R5bGVzLFxuICAgICAgY3VycmVudFZlbG9jaXRpZXM6IGN1cnJlbnRWZWxvY2l0aWVzLFxuICAgICAgbGFzdElkZWFsU3R5bGVzOiBsYXN0SWRlYWxTdHlsZXMsXG4gICAgICBsYXN0SWRlYWxWZWxvY2l0aWVzOiBsYXN0SWRlYWxWZWxvY2l0aWVzLFxuICAgICAgbWVyZ2VkUHJvcHNTdHlsZXM6IG1lcmdlZFByb3BzU3R5bGVzXG4gICAgfTtcbiAgfTtcblxuICAvLyBhZnRlciBjaGVja2luZyBmb3IgdW5yZWFkUHJvcFN0eWxlcyAhPSBudWxsLCB3ZSBtYW51YWxseSBnbyBzZXQgdGhlXG4gIC8vIG5vbi1pbnRlcnBvbGF0aW5nIHZhbHVlcyAodGhvc2UgdGhhdCBhcmUgYSBudW1iZXIsIHdpdGhvdXQgYSBzcHJpbmdcbiAgLy8gY29uZmlnKVxuXG4gIFRyYW5zaXRpb25Nb3Rpb24ucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5wcmV2VGltZSA9IF9wZXJmb3JtYW5jZU5vdzJbJ2RlZmF1bHQnXSgpO1xuICAgIHRoaXMuc3RhcnRBbmltYXRpb25JZk5lY2Vzc2FyeSgpO1xuICB9O1xuXG4gIFRyYW5zaXRpb25Nb3Rpb24ucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHByb3BzKSB7XG4gICAgaWYgKHRoaXMudW5yZWFkUHJvcFN0eWxlcykge1xuICAgICAgLy8gcHJldmlvdXMgcHJvcHMgaGF2ZW4ndCBoYWQgdGhlIGNoYW5jZSB0byBiZSBzZXQgeWV0OyBzZXQgdGhlbSBoZXJlXG4gICAgICB0aGlzLmNsZWFyVW5yZWFkUHJvcFN0eWxlKHRoaXMudW5yZWFkUHJvcFN0eWxlcyk7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlcyA9IHByb3BzLnN0eWxlcztcbiAgICBpZiAodHlwZW9mIHN0eWxlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy51bnJlYWRQcm9wU3R5bGVzID0gc3R5bGVzKHJlaHlkcmF0ZVN0eWxlcyh0aGlzLnN0YXRlLm1lcmdlZFByb3BzU3R5bGVzLCB0aGlzLnVucmVhZFByb3BTdHlsZXMsIHRoaXMuc3RhdGUubGFzdElkZWFsU3R5bGVzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudW5yZWFkUHJvcFN0eWxlcyA9IHN0eWxlcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbmltYXRpb25JRCA9PSBudWxsKSB7XG4gICAgICB0aGlzLnByZXZUaW1lID0gX3BlcmZvcm1hbmNlTm93MlsnZGVmYXVsdCddKCk7XG4gICAgICB0aGlzLnN0YXJ0QW5pbWF0aW9uSWZOZWNlc3NhcnkoKTtcbiAgICB9XG4gIH07XG5cbiAgVHJhbnNpdGlvbk1vdGlvbi5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnVubW91bnRpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLmFuaW1hdGlvbklEICE9IG51bGwpIHtcbiAgICAgIF9yYWYyWydkZWZhdWx0J10uY2FuY2VsKHRoaXMuYW5pbWF0aW9uSUQpO1xuICAgICAgdGhpcy5hbmltYXRpb25JRCA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIFRyYW5zaXRpb25Nb3Rpb24ucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgaHlkcmF0ZWRTdHlsZXMgPSByZWh5ZHJhdGVTdHlsZXModGhpcy5zdGF0ZS5tZXJnZWRQcm9wc1N0eWxlcywgdGhpcy51bnJlYWRQcm9wU3R5bGVzLCB0aGlzLnN0YXRlLmN1cnJlbnRTdHlsZXMpO1xuICAgIHZhciByZW5kZXJlZENoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbihoeWRyYXRlZFN0eWxlcyk7XG4gICAgcmV0dXJuIHJlbmRlcmVkQ2hpbGRyZW4gJiYgX3JlYWN0MlsnZGVmYXVsdCddLkNoaWxkcmVuLm9ubHkocmVuZGVyZWRDaGlsZHJlbik7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb25Nb3Rpb247XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gVHJhbnNpdGlvbk1vdGlvbjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG4vLyBsaXN0IG9mIHN0eWxlcywgZWFjaCBjb250YWluaW5nIGludGVycG9sYXRpbmcgdmFsdWVzLiBQYXJ0IG9mIHdoYXQncyBwYXNzZWRcbi8vIHRvIGNoaWxkcmVuIGZ1bmN0aW9uLiBOb3RpY2UgdGhhdCB0aGlzIGlzXG4vLyBBcnJheTxBY3R1YWxJbnRlcnBvbGF0aW5nU3R5bGVPYmplY3Q+LCB3aXRob3V0IHRoZSB3cmFwcGVyIHRoYXQgaXMge2tleTogLi4uLFxuLy8gZGF0YTogLi4uIHN0eWxlOiBBY3R1YWxJbnRlcnBvbGF0aW5nU3R5bGVPYmplY3R9LiBPbmx5IG1lcmdlZFByb3BzU3R5bGVzXG4vLyBjb250YWlucyB0aGUga2V5ICYgZGF0YSBpbmZvIChzbyB0aGF0IHdlIG9ubHkgaGF2ZSBhIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGhcbi8vIGZvciB0aGVzZSwgYW5kIHRvIHNhdmUgc3BhY2UpLiBDaGVjayB0aGUgY29tbWVudCBmb3IgYHJlaHlkcmF0ZVN0eWxlc2AgdG9cbi8vIHNlZSBob3cgd2UgcmVnZW5lcmF0ZSB0aGUgZW50aXJldHkgb2Ygd2hhdCdzIHBhc3NlZCB0byBjaGlsZHJlbiBmdW5jdGlvblxuXG4vLyB0aGUgYXJyYXkgdGhhdCBrZWVwcyB0cmFjayBvZiBjdXJyZW50bHkgcmVuZGVyZWQgc3R1ZmYhIEluY2x1ZGluZyBzdHVmZlxuLy8gdGhhdCB5b3UndmUgdW5tb3VudGVkIGJ1dCB0aGF0J3Mgc3RpbGwgYW5pbWF0aW5nLiBUaGlzIGlzIHdoZXJlIGl0IGxpdmVzXG5cbi8vIGl0J3MgcG9zc2libGUgdGhhdCBjdXJyZW50U3R5bGUncyB2YWx1ZSBpcyBzdGFsZTogaWYgcHJvcHMgaXMgaW1tZWRpYXRlbHlcbi8vIGNoYW5nZWQgZnJvbSAwIHRvIDQwMCB0byBzcHJpbmcoMCkgYWdhaW4sIHRoZSBhc3luYyBjdXJyZW50U3R5bGUgaXMgc3RpbGxcbi8vIGF0IDAgKGRpZG4ndCBoYXZlIHRpbWUgdG8gdGljayBhbmQgaW50ZXJwb2xhdGUgZXZlbiBvbmNlKS4gSWYgd2UgbmFpdmVseVxuLy8gY29tcGFyZSBjdXJyZW50U3R5bGUgd2l0aCBkZXN0VmFsIGl0J2xsIGJlIDAgPT09IDAgKG5vIGFuaW1hdGlvbiwgc3RvcCkuXG4vLyBJbiByZWFsaXR5IGN1cnJlbnRTdHlsZSBzaG91bGQgYmUgNDAwIiwiXG5cbi8vIGNvcmUga2V5cyBtZXJnaW5nIGFsZ29yaXRobS4gSWYgcHJldmlvdXMgcmVuZGVyJ3Mga2V5cyBhcmUgW2EsIGJdLCBhbmQgdGhlXG4vLyBuZXh0IHJlbmRlcidzIFtjLCBiLCBkXSwgd2hhdCdzIHRoZSBmaW5hbCBtZXJnZWQga2V5cyBhbmQgb3JkZXJpbmc/XG5cbi8vIC0gYyBhbmQgYSBtdXN0IGJvdGggYmUgYmVmb3JlIGJcbi8vIC0gYiBiZWZvcmUgZFxuLy8gLSBvcmRlcmluZyBiZXR3ZWVuIGEgYW5kIGMgYW1iaWd1b3VzXG5cbi8vIHRoaXMgcmVkdWNlcyB0byBtZXJnaW5nIHR3byBwYXJ0aWFsbHkgb3JkZXJlZCBsaXN0cyAoZS5nLiBsaXN0cyB3aGVyZSBub3Rcbi8vIGV2ZXJ5IGl0ZW0gaGFzIGEgZGVmaW5pdGUgb3JkZXJpbmcsIGxpa2UgY29tcGFyaW5nIGEgYW5kIGMgYWJvdmUpLiBGb3IgdGhlXG4vLyBhbWJpZ3VvdXMgb3JkZXJpbmcgd2UgZGV0ZXJtaW5pc3RpY2FsbHkgY2hvb3NlIHRvIHBsYWNlIHRoZSBuZXh0IHJlbmRlcidzXG4vLyBpdGVtIGFmdGVyIHRoZSBwcmV2aW91cyc7IHNvIGMgYWZ0ZXIgYVxuXG4vLyB0aGlzIGlzIGNhbGxlZCBhIHRvcG9sb2dpY2FsIHNvcnRpbmcuIEV4Y2VwdCB0aGUgZXhpc3RpbmcgYWxnb3JpdGhtcyBkb24ndFxuLy8gd29yayB3ZWxsIHdpdGgganMgYmMgb2YgdGhlIGFtb3VudCBvZiBhbGxvY2F0aW9uLCBhbmQgaXNuJ3Qgb3B0aW1pemVkIGZvciBvdXJcbi8vIGN1cnJlbnQgdXNlLWNhc2UgYmMgdGhlIHJ1bnRpbWUgaXMgbGluZWFyIGluIHRlcm1zIG9mIGVkZ2VzIChzZWUgd2lraSBmb3Jcbi8vIG1lYW5pbmcpLCB3aGljaCBpcyBodWdlIHdoZW4gdHdvIGxpc3RzIGhhdmUgbWFueSBjb21tb24gZWxlbWVudHNcbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IG1lcmdlRGlmZjtcblxuZnVuY3Rpb24gbWVyZ2VEaWZmKHByZXYsIG5leHQsIG9uUmVtb3ZlKSB7XG4gIC8vIGJvb2trZWVwaW5nIGZvciBlYXNpZXIgYWNjZXNzIG9mIGEga2V5J3MgaW5kZXggYmVsb3cuIFRoaXMgaXMgMiBhbGxvY2F0aW9ucyArXG4gIC8vIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgY2hyb21lIGhhc2ggbWFwIG1vZGUgZm9yIG9ianMgKHNvIGl0IG1pZ2h0IGJlIGZhc3RlclxuXG4gIHZhciBwcmV2S2V5SW5kZXggPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2Lmxlbmd0aDsgaSsrKSB7XG4gICAgcHJldktleUluZGV4W3ByZXZbaV0ua2V5XSA9IGk7XG4gIH1cbiAgdmFyIG5leHRLZXlJbmRleCA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHQubGVuZ3RoOyBpKyspIHtcbiAgICBuZXh0S2V5SW5kZXhbbmV4dFtpXS5rZXldID0gaTtcbiAgfVxuXG4gIC8vIGZpcnN0LCBhbiBvdmVybHkgZWxhYm9yYXRlIHdheSBvZiBtZXJnaW5nIHByZXYgYW5kIG5leHQsIGVsaW1pbmF0aW5nXG4gIC8vIGR1cGxpY2F0ZXMgKGluIHRlcm1zIG9mIGtleXMpLiBJZiB0aGVyZSdzIGR1cGUsIGtlZXAgdGhlIGl0ZW0gaW4gbmV4dCkuXG4gIC8vIFRoaXMgd2F5IG9mIHdyaXRpbmcgaXQgc2F2ZXMgYWxsb2NhdGlvbnNcbiAgdmFyIHJldCA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHQubGVuZ3RoOyBpKyspIHtcbiAgICByZXRbaV0gPSBuZXh0W2ldO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldi5sZW5ndGg7IGkrKykge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5leHRLZXlJbmRleCwgcHJldltpXS5rZXkpKSB7XG4gICAgICAvLyB0aGlzIGlzIGNhbGxlZCBteSBUTSdzIGBtZXJnZUFuZFN5bmNgLCB3aGljaCBjYWxscyB3aWxsTGVhdmUuIFdlIGRvbid0XG4gICAgICAvLyBtZXJnZSBpbiBrZXlzIHRoYXQgdGhlIHVzZXIgZGVzaXJlcyB0byBraWxsXG4gICAgICB2YXIgZmlsbCA9IG9uUmVtb3ZlKGksIHByZXZbaV0pO1xuICAgICAgaWYgKGZpbGwgIT0gbnVsbCkge1xuICAgICAgICByZXQucHVzaChmaWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgYWxsIHRoZSBpdGVtcyBhbGwgcHJlc2VudC4gQ29yZSBzb3J0aW5nIGxvZ2ljIHRvIGhhdmUgdGhlIHJpZ2h0IG9yZGVyXG4gIHJldHVybiByZXQuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBuZXh0T3JkZXJBID0gbmV4dEtleUluZGV4W2Eua2V5XTtcbiAgICB2YXIgbmV4dE9yZGVyQiA9IG5leHRLZXlJbmRleFtiLmtleV07XG4gICAgdmFyIHByZXZPcmRlckEgPSBwcmV2S2V5SW5kZXhbYS5rZXldO1xuICAgIHZhciBwcmV2T3JkZXJCID0gcHJldktleUluZGV4W2Iua2V5XTtcblxuICAgIGlmIChuZXh0T3JkZXJBICE9IG51bGwgJiYgbmV4dE9yZGVyQiAhPSBudWxsKSB7XG4gICAgICAvLyBib3RoIGtleXMgaW4gbmV4dFxuICAgICAgcmV0dXJuIG5leHRLZXlJbmRleFthLmtleV0gLSBuZXh0S2V5SW5kZXhbYi5rZXldO1xuICAgIH0gZWxzZSBpZiAocHJldk9yZGVyQSAhPSBudWxsICYmIHByZXZPcmRlckIgIT0gbnVsbCkge1xuICAgICAgLy8gYm90aCBrZXlzIGluIHByZXZcbiAgICAgIHJldHVybiBwcmV2S2V5SW5kZXhbYS5rZXldIC0gcHJldktleUluZGV4W2Iua2V5XTtcbiAgICB9IGVsc2UgaWYgKG5leHRPcmRlckEgIT0gbnVsbCkge1xuICAgICAgLy8ga2V5IGEgaW4gbmV4dCwga2V5IGIgaW4gcHJldlxuXG4gICAgICAvLyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBvcmRlciBiZXR3ZWVuIGEgYW5kIGI/IFdlIGZpbmQgYSBcInBpdm90XCIgKHRlcm1cbiAgICAgIC8vIGFidXNlKSwgYSBrZXkgcHJlc2VudCBpbiBib3RoIHByZXYgYW5kIG5leHQsIHRoYXQgaXMgc2FuZHdpY2hlZCBiZXR3ZWVuXG4gICAgICAvLyBhIGFuZCBiLiBJbiB0aGUgY29udGV4dCBvZiBvdXIgYWJvdmUgZXhhbXBsZSwgaWYgd2UncmUgY29tcGFyaW5nIGEgYW5kXG4gICAgICAvLyBkLCBiJ3MgKHRoZSBvbmx5KSBwaXZvdFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwaXZvdCA9IG5leHRbaV0ua2V5O1xuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcmV2S2V5SW5kZXgsIHBpdm90KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRPcmRlckEgPCBuZXh0S2V5SW5kZXhbcGl2b3RdICYmIHByZXZPcmRlckIgPiBwcmV2S2V5SW5kZXhbcGl2b3RdKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKG5leHRPcmRlckEgPiBuZXh0S2V5SW5kZXhbcGl2b3RdICYmIHByZXZPcmRlckIgPCBwcmV2S2V5SW5kZXhbcGl2b3RdKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHBsdWdnYWJsZS4gZGVmYXVsdCB0bzogbmV4dCBiaWdnZXIgdGhhbiBwcmV2XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgLy8gcHJldk9yZGVyQSwgbmV4dE9yZGVyQlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBpdm90ID0gbmV4dFtpXS5rZXk7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcmV2S2V5SW5kZXgsIHBpdm90KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChuZXh0T3JkZXJCIDwgbmV4dEtleUluZGV4W3Bpdm90XSAmJiBwcmV2T3JkZXJBID4gcHJldktleUluZGV4W3Bpdm90XSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSBpZiAobmV4dE9yZGVyQiA+IG5leHRLZXlJbmRleFtwaXZvdF0gJiYgcHJldk9yZGVyQSA8IHByZXZLZXlJbmRleFtwaXZvdF0pIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBwbHVnZ2FibGUuIGRlZmF1bHQgdG86IG5leHQgYmlnZ2VyIHRoYW4gcHJldlxuICAgIHJldHVybiAtMTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8gdG8gbG9vcCB0aHJvdWdoIGFuZCBmaW5kIGEga2V5J3MgaW5kZXggZWFjaCB0aW1lKSwgYnV0IEkgbm8gbG9uZ2VyIGNhcmUiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHNwcmluZztcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX3ByZXNldHMgPSByZXF1aXJlKCcuL3ByZXNldHMnKTtcblxudmFyIF9wcmVzZXRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3ByZXNldHMpO1xuXG52YXIgZGVmYXVsdENvbmZpZyA9IF9leHRlbmRzKHt9LCBfcHJlc2V0czJbJ2RlZmF1bHQnXS5ub1dvYmJsZSwge1xuICBwcmVjaXNpb246IDAuMDFcbn0pO1xuXG5mdW5jdGlvbiBzcHJpbmcodmFsLCBjb25maWcpIHtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBkZWZhdWx0Q29uZmlnLCBjb25maWcsIHsgdmFsOiB2YWwgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHJlb3JkZXJLZXlzO1xuXG52YXIgaGFzV2FybmVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHJlb3JkZXJLZXlzKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICBpZiAoIWhhc1dhcm5lZCkge1xuICAgICAgaGFzV2FybmVkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ByZW9yZGVyS2V5c2AgaGFzIGJlZW4gcmVtb3ZlZCwgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBmb3IgVHJhbnNpdGlvbk1vdGlvblxcJ3MgbmV3IHN0eWxlcyBhcnJheSBBUEkuJyk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gZ2V0VG91Y2hFdmVudChlKSB7XG4gIHJldHVybiBlLnRvdWNoZXMgJiYgZS50b3VjaGVzWzBdIHx8IGU7XG59XG5cbnZhciBTd2lwZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3dpcGUocGFnZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN3aXBlKTtcblxuICAgIHRoaXMuX29uU3dpcGVTdGFydCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX2dldFRvdWNoRXZlbnQgPSBnZXRUb3VjaEV2ZW50KGUpLFxuICAgICAgICAgIHBhZ2VYID0gX2dldFRvdWNoRXZlbnQucGFnZVgsXG4gICAgICAgICAgcGFnZVkgPSBfZ2V0VG91Y2hFdmVudC5wYWdlWTtcblxuICAgICAgLy8gd2UncmUgbm93IHN3aXBpbmdcblxuXG4gICAgICBfdGhpcy5wYWdlci5pc1N3aXBpbmcgPSB0cnVlO1xuXG4gICAgICAvLyBzdG9yZSB0aGUgaW5pdGlhbCBzdGFydGluZyBjb29yZGluYXRlc1xuICAgICAgX3RoaXMuX3N3aXBlU3RhcnQgPSB7XG4gICAgICAgIHg6IHBhZ2VYLFxuICAgICAgICB5OiBwYWdlWVxuXG4gICAgICAgIC8vIHJlc2V0IHN3aXBlRGlmZlxuICAgICAgfTtfdGhpcy5fc3dpcGVEaWZmID0ge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwXG5cbiAgICAgICAgLy8gZGV0ZXJtaW5lIGlmIGEgZmxpY2sgb3Igbm90XG4gICAgICB9O190aGlzLl9pc0ZsaWNrID0gdHJ1ZTtcblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLl9pc0ZsaWNrID0gZmFsc2U7XG4gICAgICB9LCBfdGhpcy5wYWdlci5vcHRpb25zLmZsaWNrVGltZW91dCk7XG5cbiAgICAgIF90aGlzLnBhZ2VyLmVtaXQoJ3N3aXBlU3RhcnQnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5fb25Td2lwZU1vdmUgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgLy8gYmFpbCBpZiB3ZSBhcmVuJ3Qgc3dpcGluZ1xuICAgICAgaWYgKCFfdGhpcy5wYWdlci5pc1N3aXBpbmcpIHJldHVybjtcblxuICAgICAgdmFyIF9wYWdlciRvcHRpb25zID0gX3RoaXMucGFnZXIub3B0aW9ucyxcbiAgICAgICAgICBzd2lwZVRocmVzaG9sZCA9IF9wYWdlciRvcHRpb25zLnN3aXBlVGhyZXNob2xkLFxuICAgICAgICAgIGF4aXMgPSBfcGFnZXIkb3B0aW9ucy5heGlzO1xuXG4gICAgICB2YXIgX2dldFRvdWNoRXZlbnQyID0gZ2V0VG91Y2hFdmVudChlKSxcbiAgICAgICAgICBwYWdlWCA9IF9nZXRUb3VjaEV2ZW50Mi5wYWdlWCxcbiAgICAgICAgICBwYWdlWSA9IF9nZXRUb3VjaEV2ZW50Mi5wYWdlWTtcblxuICAgICAgLy8gZ3JhYiB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgdHJhY2sgYmVmb3JlXG5cblxuICAgICAgaWYgKCFfdGhpcy5fdHJhY2tTdGFydCkge1xuICAgICAgICBfdGhpcy5fdHJhY2tTdGFydCA9IF90aGlzLnBhZ2VyLmN1cnJlbnRUd2VlbjtcbiAgICAgIH1cblxuICAgICAgLy8gZGV0ZXJtaW5lIGhvdyBtdWNoIHdlIGhhdmUgbW92ZWRcbiAgICAgIF90aGlzLl9zd2lwZURpZmYgPSB7XG4gICAgICAgIHg6IF90aGlzLl9zd2lwZVN0YXJ0LnggLSBwYWdlWCxcbiAgICAgICAgeTogX3RoaXMuX3N3aXBlU3RhcnQueSAtIHBhZ2VZXG4gICAgICB9O1xuXG4gICAgICBpZiAoX3RoaXMuX2lzU3dpcGUoc3dpcGVUaHJlc2hvbGQpKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB2YXIgc3dpcGVEaWZmID0gX3RoaXMuX3N3aXBlRGlmZltheGlzXTtcbiAgICAgICAgdmFyIHRyYWNrUG9zaXRpb24gPSBfdGhpcy5fdHJhY2tTdGFydCAtIHN3aXBlRGlmZjtcblxuICAgICAgICBfdGhpcy5wYWdlci5zZXRQb3NpdGlvblZhbHVlKHRyYWNrUG9zaXRpb24pO1xuXG4gICAgICAgIF90aGlzLnBhZ2VyLmVtaXQoJ3N3aXBlTW92ZScpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLl9vblN3aXBlRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF9wYWdlciRvcHRpb25zMiA9IF90aGlzLnBhZ2VyLm9wdGlvbnMsXG4gICAgICAgICAgc3dpcGVUaHJlc2hvbGQgPSBfcGFnZXIkb3B0aW9uczIuc3dpcGVUaHJlc2hvbGQsXG4gICAgICAgICAgdmlld3NUb01vdmUgPSBfcGFnZXIkb3B0aW9uczIudmlld3NUb01vdmUsXG4gICAgICAgICAgYXhpcyA9IF9wYWdlciRvcHRpb25zMi5heGlzLFxuICAgICAgICAgIGluZmluaXRlID0gX3BhZ2VyJG9wdGlvbnMyLmluZmluaXRlO1xuXG4gICAgICB2YXIgdGhyZXNob2xkID0gX3RoaXMuX2lzRmxpY2sgPyBzd2lwZVRocmVzaG9sZCA6IF90aGlzLnBhZ2VyLmN1cnJlbnRWaWV3LmdldFNpemUoKSAqIHZpZXdzVG9Nb3ZlICogc3dpcGVUaHJlc2hvbGQ7XG5cbiAgICAgIC8vIHdlJ3ZlIHN0b3BwZWQgc3dpcGluZ1xuICAgICAgX3RoaXMucGFnZXIuaXNTd2lwaW5nID0gZmFsc2U7XG5cbiAgICAgIC8vIHJlc2V0IHN0YXJ0IHRyYWNrIHNvIHdlIGNhbiBncmFiIGl0IGFnYWluIG9uIHRoZSBuZXh0IHN3aXBlXG4gICAgICBfdGhpcy5fdHJhY2tTdGFydCA9IGZhbHNlO1xuXG4gICAgICAvLyBkb24ndCBtb3ZlIGFueXRoaW5nIGlmIHRoZXJlIGhhc24ndCBiZWVuIGFuIGF0dGVtcHRlZCBzd2lwZVxuICAgICAgaWYgKF90aGlzLl9zd2lwZURpZmYueCB8fCBfdGhpcy5fc3dpcGVEaWZmLnkpIHtcbiAgICAgICAgLy8gZGV0ZXJtaW5lIGlmIHdlJ3ZlIHBhc3NlZCB0aGUgZGVmaW5lZCB0aHJlc2hvbGRcbiAgICAgICAgaWYgKF90aGlzLl9pc1N3aXBlKHRocmVzaG9sZCkpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuX3N3aXBlRGlmZltheGlzXSA8IDApIHtcbiAgICAgICAgICAgIF90aGlzLnBhZ2VyLnByZXYoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMucGFnZXIubmV4dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QsIHJlc2V0IGJhY2sgdG8gb3JpZ2luYWwgdmlld1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLnBhZ2VyLnNldFBvc2l0aW9uVmFsdWUoKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnBhZ2VyLmVtaXQoJ3N3aXBlRW5kJyk7XG4gICAgfTtcblxuICAgIHRoaXMuX29uU3dpcGVQYXN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gcGVyZm9ybSBhIHN3aXBlIGVuZCBpZiB3ZSBzd2lwZWQgcGFzdCB0aGUgY29tcG9uZW50XG4gICAgICBpZiAoX3RoaXMucGFnZXIuaXNTd2lwaW5nKSB7XG4gICAgICAgIF90aGlzLl9vblN3aXBlRW5kKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMucGFnZXIgPSBwYWdlcjtcbiAgICB0aGlzLl90cmFja1N0YXJ0ID0gZmFsc2U7XG4gICAgdGhpcy5fc3dpcGVTdGFydCA9IHRoaXMuX3N3aXBlRGlmZiA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTd2lwZSwgW3tcbiAgICBrZXk6ICdfaXNTd2lwZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9pc1N3aXBlKHRocmVzaG9sZCkge1xuICAgICAgdmFyIF9zd2lwZURpZmYgPSB0aGlzLl9zd2lwZURpZmYsXG4gICAgICAgICAgeCA9IF9zd2lwZURpZmYueCxcbiAgICAgICAgICB5ID0gX3N3aXBlRGlmZi55O1xuXG4gICAgICByZXR1cm4gdGhpcy5wYWdlci5vcHRpb25zLmF4aXMgPT09ICd4JyA/IE1hdGguYWJzKHgpID4gTWF0aC5tYXgodGhyZXNob2xkLCBNYXRoLmFicyh5KSkgOiBNYXRoLmFicyh4KSA8IE1hdGgubWF4KHRocmVzaG9sZCwgTWF0aC5hYnMoeSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldEV2ZW50cycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEV2ZW50cygpIHtcbiAgICAgIHZhciBzd2lwZSA9IHRoaXMucGFnZXIub3B0aW9ucy5zd2lwZTtcblxuICAgICAgdmFyIHN3aXBlRXZlbnRzID0ge307XG5cbiAgICAgIGlmIChzd2lwZSA9PT0gdHJ1ZSB8fCBzd2lwZSA9PT0gJ21vdXNlJykge1xuICAgICAgICBzd2lwZUV2ZW50cy5vbk1vdXNlRG93biA9IHRoaXMuX29uU3dpcGVTdGFydDtcbiAgICAgICAgc3dpcGVFdmVudHMub25Nb3VzZU1vdmUgPSB0aGlzLl9vblN3aXBlTW92ZTtcbiAgICAgICAgc3dpcGVFdmVudHMub25Nb3VzZVVwID0gdGhpcy5fb25Td2lwZUVuZDtcbiAgICAgICAgc3dpcGVFdmVudHMub25Nb3VzZUxlYXZlID0gdGhpcy5fb25Td2lwZVBhc3Q7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZSA9PT0gdHJ1ZSB8fCBzd2lwZSA9PT0gJ3RvdWNoJykge1xuICAgICAgICBzd2lwZUV2ZW50cy5vblRvdWNoU3RhcnQgPSB0aGlzLl9vblN3aXBlU3RhcnQ7XG4gICAgICAgIHN3aXBlRXZlbnRzLm9uVG91Y2hNb3ZlID0gdGhpcy5fb25Td2lwZU1vdmU7XG4gICAgICAgIHN3aXBlRXZlbnRzLm9uVG91Y2hFbmQgPSB0aGlzLl9vblN3aXBlRW5kO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3dpcGVFdmVudHM7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN3aXBlO1xufSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBTd2lwZTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF91dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxudmFyIEtleWJvYXJkID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBLZXlib2FyZChwYWdlcikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgS2V5Ym9hcmQpO1xuXG4gICAgdGhpcy5faGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAvLyBoYW5kbGUgcmVzcGVjdGl2ZSBrZXkgY29udHJvbHNcbiAgICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgICAgLy8gbW92ZSB0byB0aGUgcHJldmlvdXMgdmlld1xuICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgICBfdGhpcy5wYWdlci5wcmV2KCk7XG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIC8vIG1vdmUgdG8gdGhlIG5leHQgdmlld1xuICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgX3RoaXMucGFnZXIubmV4dCgpO1xuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAvLyBtb3ZlIHRvIGZpcnN0IHZpZXdcbiAgICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgICAgX3RoaXMucGFnZXIuc2V0Q3VycmVudFZpZXcoeyBpbmRleDogMCB9KTtcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgLy8gbW92ZSB0byBsYXN0IHZpZXdcbiAgICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgICBfdGhpcy5wYWdlci5zZXRDdXJyZW50Vmlldyh7IGluZGV4OiBfdGhpcy5wYWdlci52aWV3cy5sZW5ndGggLSAxIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gMSAtIDkga2V5cyBtYXBwZWQgdG8gcmVzcGVjdGl2ZSBzbGlkZSBudW1iZXJcbiAgICAgIHZhciBtYXhOdW1LZXkgPSAoMCwgX3V0aWxzLmNsYW1wKShfdGhpcy5wYWdlci52aWV3cy5sZW5ndGgsIDAsIDkpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBtYXhOdW1LZXk7IGkrKykge1xuICAgICAgICBpZiAoK2Uua2V5ID09PSBpKSB7XG4gICAgICAgICAgX3RoaXMucGFnZXIuc2V0Q3VycmVudFZpZXcoeyBpbmRleDogaSAtIDEgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5wYWdlciA9IHBhZ2VyO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEtleWJvYXJkLCBbe1xuICAgIGtleTogJ2dldEV2ZW50cycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEV2ZW50cygpIHtcbiAgICAgIHZhciBrZXlib2FyZEV2ZW50cyA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5wYWdlci5vcHRpb25zLmFjY2Vzc2liaWxpdHkpIHtcbiAgICAgICAga2V5Ym9hcmRFdmVudHMub25LZXlEb3duID0gdGhpcy5faGFuZGxlS2V5RG93bjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGtleWJvYXJkRXZlbnRzO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBLZXlib2FyZDtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gS2V5Ym9hcmQ7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoJ3Byb3AtdHlwZXMnKTtcblxudmFyIF9wcm9wVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvcFR5cGVzKTtcblxudmFyIF9yZWFjdERvbSA9IHJlcXVpcmUoJ3JlYWN0LWRvbScpO1xuXG52YXIgX3JlYWN0TW90aW9uID0gcmVxdWlyZSgncmVhY3QtbW90aW9uJyk7XG5cbnZhciBfUGFnZXIgPSByZXF1aXJlKCcuL1BhZ2VyJyk7XG5cbnZhciBfUGFnZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfUGFnZXIpO1xuXG52YXIgX2dldEluZGV4ID0gcmVxdWlyZSgnLi9nZXQtaW5kZXgnKTtcblxudmFyIF9nZXRJbmRleDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRJbmRleCk7XG5cbnZhciBfc3BlY2lhbEFzc2lnbiA9IHJlcXVpcmUoJy4vc3BlY2lhbC1hc3NpZ24nKTtcblxudmFyIF9zcGVjaWFsQXNzaWduMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NwZWNpYWxBc3NpZ24pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gbnVsbDtcbn07XG52YXIgY2hlY2tlZFByb3BzID0ge1xuICB0YWc6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYW55LFxuICBjdXJyZW50VmlldzogX3Byb3BUeXBlczIuZGVmYXVsdC5hbnksXG4gIHZpZXdzVG9TaG93OiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsIF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2YoWydhdXRvJ10pXSksXG4gIHZpZXdzVG9Nb3ZlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlcixcbiAgYWxpZ246IF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLFxuICBjb250YWluOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG4gIGF4aXM6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2YoWyd4JywgJ3knXSksXG4gIGFuaW1hdGlvbnM6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYXJyYXksXG4gIGluZmluaXRlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG4gIGluc3RhbnQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgc3dpcGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2YoW3RydWUsIGZhbHNlLCAnbW91c2UnLCAndG91Y2gnXSksXG4gIHN3aXBlVGhyZXNob2xkOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlcixcbiAgZmxpY2tUaW1lb3V0OiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlcixcbiAgLy8gcmlnaHRUb0xlZnQ6IFByb3BUeXBlcy5ib29sLFxuICAvLyBsYXp5TG9hZDogUHJvcFR5cGVzLmJvb2wsXG4gIHNwcmluZ0NvbmZpZzogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3RPZihfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlciksXG4gIG9uU3dpcGVTdGFydDogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuICBvblN3aXBlTW92ZTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuICBvblN3aXBlRW5kOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIG9uU2Nyb2xsOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIG9uVmlld0NoYW5nZTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuICBvblJlc3Q6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuY1xufTtcbnZhciBpc05vdEVxdWFsID0gZnVuY3Rpb24gaXNOb3RFcXVhbChjdXJyZW50LCBuZXh0KSB7XG4gIHJldHVybiBjdXJyZW50LnZpZXdzVG9TaG93ICE9PSBuZXh0LnZpZXdzVG9TaG93IHx8IGN1cnJlbnQudmlld3NUb01vdmUgIT09IG5leHQudmlld3NUb01vdmUgfHwgY3VycmVudC5hbGlnbiAhPT0gbmV4dC5hbGlnbiB8fCBjdXJyZW50LmF4aXMgIT09IG5leHQuYXhpcyB8fCBjdXJyZW50LmFuaW1hdGlvbnMgIT09IG5leHQuYW5pbWF0aW9ucyB8fCBjdXJyZW50LmluZmluaXRlICE9PSBuZXh0LmluZmluaXRlIHx8IGN1cnJlbnQuc3dpcGUgIT09IG5leHQuc3dpcGUgfHwgY3VycmVudC5zd2lwZVRocmVzaG9sZCAhPT0gbmV4dC5zd2lwZVRocmVzaG9sZCB8fCBjdXJyZW50LmZsaWNrVGltZW91dCAhPT0gbmV4dC5mbGlja1RpbWVvdXQ7XG59O1xuXG4vLyBUcmFjayBzY3JvbGxlciBpcyBhbiBpbnRlcm1lZGlhdGUgY29tcG9uZW50IHRoYXQgYWxsb3dzIHVzIHRvIHByb3ZpZGUgdGhlXG4vLyBSZWFjdCBNb3Rpb24gdmFsdWUgdG8gb25TY3JvbGwgYW5kIGxldHMgYW55IHVzZXIgb2Ygb25TY3JvbGwgdXNlIHNldFN0YXRlXG5cbnZhciBUcmFja1Njcm9sbGVyID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFRyYWNrU2Nyb2xsZXIsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYWNrU2Nyb2xsZXIoKSB7XG4gICAgdmFyIF9yZWY7XG5cbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRyYWNrU2Nyb2xsZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX3JlZiA9IFRyYWNrU2Nyb2xsZXIuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihUcmFja1Njcm9sbGVyKSkuY2FsbC5hcHBseShfcmVmLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuc3RhdGUgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFRyYWNrU2Nyb2xsZXIsIFt7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoX3JlZjIpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgdHJhY2tQb3NpdGlvbiA9IF9yZWYyLnRyYWNrUG9zaXRpb247XG4gICAgICB2YXIgcGFnZXIgPSB0aGlzLmNvbnRleHQucGFnZXI7XG5cbiAgICAgIC8vIHVwZGF0ZSB2aWV3IHN0eWxlcyB3aXRoIGN1cnJlbnQgcG9zaXRpb24gdHdlZW5cbiAgICAgIC8vIHRoaXMgbWV0aG9kIGNhbiBnZXQgY2FsbGVkIGh1bmRyZWRzIG9mIHRpbWVzLCBsZXQncyBtYWtlIHN1cmUgdG8gb3B0aW1pemUgYXMgbXVjaCBhcyB3ZSBjYW5cblxuICAgICAgcGFnZXIuc2V0Vmlld1N0eWxlcyh0cmFja1Bvc2l0aW9uKTtcblxuICAgICAgLy8gdXBkYXRlIG9uU2Nyb2xsIGNhbGxiYWNrLCB3ZSB1c2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIGF2b2lkIGJvdW5jaW5nXG4gICAgICAvLyBiYWNrIGZyb20gdXBkYXRlcyBmcm9tIG9uU2Nyb2xsIHdoaWxlIFJlYWN0IE1vdGlvbiBpcyB0cnlpbmcgdG8gdXBkYXRlIGl0J3Mgb3duIHRyZWVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGVuZ2xvdS9yZWFjdC1tb3Rpb24vaXNzdWVzLzM1NyNpc3N1ZWNvbW1lbnQtMjYyMzkzNDI0XG4gICAgICBpZiAodGhpcy5wcm9wcy50cmFja1Bvc2l0aW9uICE9PSB0cmFja1Bvc2l0aW9uKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5wcm9wcy5vblNjcm9sbCh0cmFja1Bvc2l0aW9uIC8gcGFnZXIuZ2V0VHJhY2tTaXplKGZhbHNlKSAqIC0xLCB0cmFja1Bvc2l0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX3JlbmRlclZpZXdzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3JlbmRlclZpZXdzKCkge1xuICAgICAgLy8gd2UgbmVlZCBDaGlsZHJlbiBtYXAgaW4gb3JkZXIgZm9yIHRoZSBpbmZpbml0ZSBvcHRpb24gdG8gd29ya1xuICAgICAgLy8gbm90IGFjdHVhbGx5IHN1cmUgd2h5IHRoaXMgaXMgdGhlIGNhc2VcbiAgICAgIHJldHVybiBfcmVhY3QuQ2hpbGRyZW4ubWFwKHRoaXMucHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgcGFnZXIgPSB0aGlzLmNvbnRleHQucGFnZXI7XG5cbiAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHRhZyA9IF9wcm9wcy50YWcsXG4gICAgICAgICAgdHJhY2tQb3NpdGlvbiA9IF9wcm9wcy50cmFja1Bvc2l0aW9uLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3Byb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMsIFsndGFnJywgJ3RyYWNrUG9zaXRpb24nLCAnY2hpbGRyZW4nXSk7XG5cbiAgICAgIHZhciBzdHlsZSA9IF9leHRlbmRzKHt9LCByZXN0UHJvcHMuc3R5bGUpO1xuXG4gICAgICBpZiAocGFnZXIudHJhY2spIHtcbiAgICAgICAgc3R5bGUgPSBfZXh0ZW5kcyh7fSwgc3R5bGUsIHBhZ2VyLnRyYWNrLmdldFN0eWxlcyh0cmFja1Bvc2l0aW9uKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoMCwgX3JlYWN0LmNyZWF0ZUVsZW1lbnQpKHRhZywgX2V4dGVuZHMoe30sIHJlc3RQcm9wcywge1xuICAgICAgICBzdHlsZTogc3R5bGVcbiAgICAgIH0pLCB0aGlzLl9yZW5kZXJWaWV3cygpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVHJhY2tTY3JvbGxlcjtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cblRyYWNrU2Nyb2xsZXIucHJvcFR5cGVzID0gY2hlY2tlZFByb3BzO1xuVHJhY2tTY3JvbGxlci5jb250ZXh0VHlwZXMgPSB7XG4gIHBhZ2VyOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lmluc3RhbmNlT2YoX1BhZ2VyMi5kZWZhdWx0KVxufTtcblxudmFyIFRyYWNrID0gZnVuY3Rpb24gKF9Db21wb25lbnQyKSB7XG4gIF9pbmhlcml0cyhUcmFjaywgX0NvbXBvbmVudDIpO1xuXG4gIGZ1bmN0aW9uIFRyYWNrKCkge1xuICAgIHZhciBfcmVmMztcblxuICAgIHZhciBfdGVtcDIsIF90aGlzMywgX3JldDI7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHJhY2spO1xuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldDIgPSAoX3RlbXAyID0gKF90aGlzMyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChfcmVmMyA9IFRyYWNrLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVHJhY2spKS5jYWxsLmFwcGx5KF9yZWYzLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzMyksIF90aGlzMy5zdGF0ZSA9IHtcbiAgICAgIGluc3RhbnQ6IGZhbHNlXG4gICAgfSwgX3RoaXMzLl9jdXJyZW50VHdlZW4gPSAwLCBfdGhpczMuX2h5ZHJhdGUgPSBmYWxzZSwgX3RoaXMzLl9oYW5kbGVPblJlc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMzLnByb3BzLmluZmluaXRlICYmICFfdGhpczMuc3RhdGUuaW5zdGFudCkge1xuICAgICAgICAvLyByZXNldCBiYWNrIHRvIGEgbm9ybWFsIGluZGV4XG4gICAgICAgIF90aGlzMy5jb250ZXh0LnBhZ2VyLnJlc2V0Vmlld0luZGV4KCk7XG5cbiAgICAgICAgLy8gc2V0IGluc3RhbnQgZmxhZyBzbyB3ZSBjYW4gcHJpbWUgdHJhY2sgZm9yIG5leHQgbW92ZVxuICAgICAgICBfdGhpczMuX3NldFZhbHVlSW5zdGFudGx5KHRydWUsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBfdGhpczMucHJvcHMub25SZXN0KCk7XG4gICAgfSwgX3RlbXAyKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMzLCBfcmV0Mik7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVHJhY2ssIFt7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgICAgdGhpcy5jb250ZXh0LnBhZ2VyLnNldE9wdGlvbnModGhpcy5wcm9wcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgcGFnZXIgPSB0aGlzLmNvbnRleHQucGFnZXI7XG5cbiAgICAgIC8vIGFkZCB0cmFjayB0byBwYWdlclxuXG4gICAgICBwYWdlci5hZGRUcmFjaygoMCwgX3JlYWN0RG9tLmZpbmRET01Ob2RlKSh0aGlzKSk7XG5cbiAgICAgIC8vIHNldCBpbml0aWFsIHZpZXcgaW5kZXggYW5kIGxpc3RlbiBmb3IgYW55IGluY29taW5nIHZpZXcgaW5kZXggY2hhbmdlc1xuICAgICAgdGhpcy5zY3JvbGxUbygoMCwgX2dldEluZGV4Mi5kZWZhdWx0KSh0aGlzLnByb3BzLmN1cnJlbnRWaWV3LCB0aGlzLnByb3BzLmNoaWxkcmVuKSk7XG5cbiAgICAgIC8vIHNldCB2YWx1ZXMgaW5zdGFudGx5IG9uIHJlc3BlY3RpdmUgZXZlbnRzXG4gICAgICBwYWdlci5vbignaHlkcmF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczQuX3NldFZhbHVlSW5zdGFudGx5KHRydWUsIHRydWUpO1xuICAgICAgfSk7XG4gICAgICBwYWdlci5vbignc3dpcGVNb3ZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXM0Ll9zZXRWYWx1ZUluc3RhbnRseSh0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgcGFnZXIub24oJ3N3aXBlRW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXM0Ll9zZXRWYWx1ZUluc3RhbnRseShmYWxzZSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gcHJvcCBjYWxsYmFja3NcbiAgICAgIHBhZ2VyLm9uKCdzd2lwZVN0YXJ0JywgdGhpcy5wcm9wcy5vblN3aXBlU3RhcnQpO1xuICAgICAgcGFnZXIub24oJ3N3aXBlTW92ZScsIHRoaXMucHJvcHMub25Td2lwZU1vdmUpO1xuICAgICAgcGFnZXIub24oJ3N3aXBlRW5kJywgdGhpcy5wcm9wcy5vblN3aXBlRW5kKTtcbiAgICAgIHBhZ2VyLm9uKCd2aWV3Q2hhbmdlJywgdGhpcy5wcm9wcy5vblZpZXdDaGFuZ2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgICAgdmFyIGN1cnJlbnRWaWV3ID0gbmV4dFByb3BzLmN1cnJlbnRWaWV3LFxuICAgICAgICAgIGluc3RhbnQgPSBuZXh0UHJvcHMuaW5zdGFudCxcbiAgICAgICAgICBjaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgLy8gdXBkYXRlIGluc3RhbnQgc3RhdGUgZnJvbSBwcm9wc1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5pbnN0YW50ICE9PSBpbnN0YW50KSB7XG4gICAgICAgIHRoaXMuX3NldFZhbHVlSW5zdGFudGx5KGluc3RhbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgc3RhdGUgd2l0aCBuZXcgaW5kZXggaWYgbmVjZXNzYXJ5XG4gICAgICBpZiAoKHR5cGVvZiBjdXJyZW50VmlldyA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoY3VycmVudFZpZXcpKSAhPT0gdW5kZWZpbmVkICYmIHRoaXMucHJvcHMuY3VycmVudFZpZXcgIT09IGN1cnJlbnRWaWV3KSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG8oKDAsIF9nZXRJbmRleDIuZGVmYXVsdCkoY3VycmVudFZpZXcsIGNoaWxkcmVuKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSBhbnkgb3B0aW9ucyB0aGF0IGhhdmUgY2hhbmdlZFxuICAgICAgaWYgKGlzTm90RXF1YWwodGhpcy5wcm9wcywgbmV4dFByb3BzKSkge1xuICAgICAgICB0aGlzLmNvbnRleHQucGFnZXIuc2V0T3B0aW9ucyhuZXh0UHJvcHMpO1xuICAgICAgICB0aGlzLl9oeWRyYXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnREaWRVcGRhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUobmV4dFByb3BzKSB7XG4gICAgICBpZiAodGhpcy5faHlkcmF0ZSkge1xuICAgICAgICB0aGlzLmNvbnRleHQucGFnZXIuaHlkcmF0ZSgpO1xuICAgICAgICB0aGlzLl9oeWRyYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncHJldicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHByZXYoKSB7XG4gICAgICB0aGlzLmNvbnRleHQucGFnZXIucHJldigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ25leHQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgdGhpcy5jb250ZXh0LnBhZ2VyLm5leHQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzY3JvbGxUbycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNjcm9sbFRvKGluZGV4KSB7XG4gICAgICB0aGlzLmNvbnRleHQucGFnZXIuc2V0Q3VycmVudFZpZXcoeyBpbmRleDogaW5kZXggfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX3NldFZhbHVlSW5zdGFudGx5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3NldFZhbHVlSW5zdGFudGx5KGluc3RhbnQsIHJlc2V0KSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGluc3RhbnQ6IGluc3RhbnQgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocmVzZXQpIHtcbiAgICAgICAgICBfdGhpczUuc2V0U3RhdGUoeyBpbnN0YW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2dldFRyYWNrU3R5bGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0VHJhY2tTdHlsZSgpIHtcbiAgICAgIHZhciB0cmFja1Bvc2l0aW9uID0gdGhpcy5jb250ZXh0LnBhZ2VyLnRyYWNrUG9zaXRpb247XG5cbiAgICAgIGlmICghdGhpcy5zdGF0ZS5pbnN0YW50KSB7XG4gICAgICAgIHRyYWNrUG9zaXRpb24gPSAoMCwgX3JlYWN0TW90aW9uLnNwcmluZykodHJhY2tQb3NpdGlvbiwgdGhpcy5wcm9wcy5zcHJpbmdDb25maWcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgdHJhY2tQb3NpdGlvbjogdHJhY2tQb3NpdGlvbiB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICB0YWcgPSBfcHJvcHMyLnRhZyxcbiAgICAgICAgICBvblNjcm9sbCA9IF9wcm9wczIub25TY3JvbGwsXG4gICAgICAgICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczIsIFsndGFnJywgJ29uU2Nyb2xsJ10pO1xuXG4gICAgICByZXR1cm4gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIF9yZWFjdE1vdGlvbi5Nb3Rpb24sXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogdGhpcy5fZ2V0VHJhY2tTdHlsZSgpLFxuICAgICAgICAgIG9uUmVzdDogdGhpcy5faGFuZGxlT25SZXN0XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uIChfcmVmNCkge1xuICAgICAgICAgIHZhciB0cmFja1Bvc2l0aW9uID0gX3JlZjQudHJhY2tQb3NpdGlvbjtcbiAgICAgICAgICByZXR1cm4gKDAsIF9yZWFjdC5jcmVhdGVFbGVtZW50KShUcmFja1Njcm9sbGVyLCAoMCwgX3NwZWNpYWxBc3NpZ24yLmRlZmF1bHQpKHsgdHJhY2tQb3NpdGlvbjogdHJhY2tQb3NpdGlvbiwgdGFnOiB0YWcsIG9uU2Nyb2xsOiBvblNjcm9sbCB9LCByZXN0UHJvcHMsIGNoZWNrZWRQcm9wcykpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUcmFjaztcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cblRyYWNrLnByb3BUeXBlcyA9IGNoZWNrZWRQcm9wcztcblRyYWNrLmRlZmF1bHRQcm9wcyA9IHtcbiAgdGFnOiAnZGl2JyxcbiAgY3VycmVudFZpZXc6IDAsXG4gIHZpZXdzVG9TaG93OiAxLFxuICB2aWV3c1RvTW92ZTogMSxcbiAgYWxpZ246IDAsXG4gIGNvbnRhaW46IGZhbHNlLFxuICBheGlzOiAneCcsXG4gIGluZmluaXRlOiBmYWxzZSxcbiAgaW5zdGFudDogZmFsc2UsXG4gIHN3aXBlOiB0cnVlLFxuICBzd2lwZVRocmVzaG9sZDogMC41LFxuICBmbGlja1RpbWVvdXQ6IDMwMCxcbiAgc3ByaW5nQ29uZmlnOiBfcmVhY3RNb3Rpb24ucHJlc2V0cy5ub1dvYmJsZSxcbiAgb25Td2lwZVN0YXJ0OiBub29wLFxuICBvblN3aXBlTW92ZTogbm9vcCxcbiAgb25Td2lwZUVuZDogbm9vcCxcbiAgb25TY3JvbGw6IG5vb3AsXG4gIG9uVmlld0NoYW5nZTogbm9vcCxcbiAgb25SZXN0OiBub29wXG59O1xuVHJhY2suY29udGV4dFR5cGVzID0ge1xuICBwYWdlcjogX3Byb3BUeXBlczIuZGVmYXVsdC5pbnN0YW5jZU9mKF9QYWdlcjIuZGVmYXVsdClcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBUcmFjaztcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGdldEluZGV4O1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxuZnVuY3Rpb24gZ2V0SW5kZXgoa2V5LCBjaGlsZHJlbikge1xuICB2YXIgaW5kZXggPSBudWxsO1xuXG4gIF9yZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQsIF9pbmRleCkge1xuICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSB8fCBfaW5kZXggPT09IGtleSkge1xuICAgICAgaW5kZXggPSBfaW5kZXg7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaW5kZXg7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKCdwcm9wLXR5cGVzJyk7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbnZhciBfcmVhY3REb20gPSByZXF1aXJlKCdyZWFjdC1kb20nKTtcblxudmFyIF9QYWdlciA9IHJlcXVpcmUoJy4vUGFnZXInKTtcblxudmFyIF9QYWdlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9QYWdlcik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgVmlldyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhWaWV3LCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBWaWV3KCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBWaWV3KTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9yZWYgPSBWaWV3Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVmlldykpLmNhbGwuYXBwbHkoX3JlZiwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLl92aWV3QWRkZWQgPSBmYWxzZSwgX3RoaXMuX3ZpZXdJbnN0YW5jZSA9IG51bGwsIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFZpZXcsIFt7XG4gICAga2V5OiAnZ2V0Q2hpbGRDb250ZXh0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmlldzogdGhpcy5fdmlld0luc3RhbmNlXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLl92aWV3SW5zdGFuY2UgPSB0aGlzLmNvbnRleHQucGFnZXIuYWRkVmlldygoMCwgX3JlYWN0RG9tLmZpbmRET01Ob2RlKSh0aGlzKSk7XG4gICAgICB0aGlzLl92aWV3QWRkZWQgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmNvbnRleHQucGFnZXIucmVtb3ZlVmlldyh0aGlzLl92aWV3SW5zdGFuY2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBwYWdlciA9IHRoaXMuY29udGV4dC5wYWdlcjtcbiAgICAgIHZhciBfcGFnZXIkb3B0aW9ucyA9IHBhZ2VyLm9wdGlvbnMsXG4gICAgICAgICAgdmlld3NUb1Nob3cgPSBfcGFnZXIkb3B0aW9ucy52aWV3c1RvU2hvdyxcbiAgICAgICAgICBheGlzID0gX3BhZ2VyJG9wdGlvbnMuYXhpcztcblxuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgdGFnID0gX3Byb3BzLnRhZyxcbiAgICAgICAgICB0cmFja1NpemUgPSBfcHJvcHMudHJhY2tTaXplLFxuICAgICAgICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMsIFsndGFnJywgJ3RyYWNrU2l6ZSddKTtcblxuICAgICAgdmFyIHN0eWxlID0gX2V4dGVuZHMoe30sIHJlc3RQcm9wcy5zdHlsZSk7XG5cbiAgICAgIC8vIGhpZGUgdmlldyB2aXN1YWxseSB1bnRpbCBpdCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgcGFnZXJcbiAgICAgIC8vIHRoaXMgc2hvdWxkIGhlbHAgYXZvaWQgRk9VQ1xuICAgICAgaWYgKCF0aGlzLl92aWV3QWRkZWQpIHtcbiAgICAgICAgc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICBzdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fdmlld0luc3RhbmNlKSB7XG4gICAgICAgIHN0eWxlID0gX2V4dGVuZHMoe30sIHN0eWxlLCB0aGlzLl92aWV3SW5zdGFuY2UuZ2V0U3R5bGVzKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKDAsIF9yZWFjdC5jcmVhdGVFbGVtZW50KSh0YWcsIF9leHRlbmRzKHt9LCByZXN0UHJvcHMsIHsgc3R5bGU6IHN0eWxlIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVmlldztcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cblZpZXcuY29udGV4dFR5cGVzID0ge1xuICBwYWdlcjogX3Byb3BUeXBlczIuZGVmYXVsdC5pbnN0YW5jZU9mKF9QYWdlcjIuZGVmYXVsdClcbn07XG5WaWV3LmNoaWxkQ29udGV4dFR5cGVzID0ge1xuICB2aWV3OiBfcHJvcFR5cGVzMi5kZWZhdWx0LmFueVxufTtcblZpZXcucHJvcFR5cGVzID0ge1xuICB0YWc6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYW55XG59O1xuVmlldy5kZWZhdWx0UHJvcHMgPSB7XG4gIHRhZzogJ2Rpdidcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBWaWV3O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZSgncHJvcC10eXBlcycpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX2FuaW1hdGlvbkJ1cyA9IHJlcXVpcmUoJ2FuaW1hdGlvbi1idXMnKTtcblxudmFyIF9hbmltYXRpb25CdXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYW5pbWF0aW9uQnVzKTtcblxudmFyIF9QYWdlciA9IHJlcXVpcmUoJy4vUGFnZXInKTtcblxudmFyIF9QYWdlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9QYWdlcik7XG5cbnZhciBfc3BlY2lhbEFzc2lnbiA9IHJlcXVpcmUoJy4vc3BlY2lhbC1hc3NpZ24nKTtcblxudmFyIF9zcGVjaWFsQXNzaWduMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NwZWNpYWxBc3NpZ24pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIGNoZWNrZWRQcm9wcyA9IHtcbiAgdGFnOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgaW5kZXg6IF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLFxuICBhbmltYXRpb25zOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmFycmF5XG59O1xuXG52YXIgQW5pbWF0ZWRWaWV3ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEFuaW1hdGVkVmlldywgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gQW5pbWF0ZWRWaWV3KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBbmltYXRlZFZpZXcpO1xuXG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChBbmltYXRlZFZpZXcuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihBbmltYXRlZFZpZXcpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhBbmltYXRlZFZpZXcsIFt7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgICAgdmFyIGFuaW1hdGlvbnMgPSB0aGlzLnByb3BzLmFuaW1hdGlvbnM7XG5cblxuICAgICAgaWYgKGFuaW1hdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbkJ1cyA9IG5ldyBfYW5pbWF0aW9uQnVzMi5kZWZhdWx0KHtcbiAgICAgICAgICBhbmltYXRpb25zOiBhbmltYXRpb25zLFxuICAgICAgICAgIG9yaWdpbjogZnVuY3Rpb24gb3JpZ2luKHZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybiB2aWV3Lm9yaWdpbjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHRhZyA9IF9wcm9wcy50YWcsXG4gICAgICAgICAgaW5kZXggPSBfcHJvcHMuaW5kZXgsXG4gICAgICAgICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wcywgWyd0YWcnLCAnaW5kZXgnXSk7XG5cbiAgICAgIHZhciBzdHlsZSA9IF9leHRlbmRzKHt9LCByZXN0UHJvcHMuc3R5bGUpO1xuXG4gICAgICBpZiAodGhpcy5fYW5pbWF0aW9uQnVzKSB7XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5jb250ZXh0LnZpZXcgfHwgdGhpcy5jb250ZXh0LnBhZ2VyLmdldFZpZXcoaW5kZXgpO1xuICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgIHN0eWxlID0gX2V4dGVuZHMoe30sIHJlc3RQcm9wcy5zdHlsZSwgdGhpcy5fYW5pbWF0aW9uQnVzLmdldFN0eWxlcyh2aWV3KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuICgwLCBfcmVhY3QuY3JlYXRlRWxlbWVudCkodGFnLCAoMCwgX3NwZWNpYWxBc3NpZ24yLmRlZmF1bHQpKHsgc3R5bGU6IHN0eWxlIH0sIHRoaXMucHJvcHMsIGNoZWNrZWRQcm9wcykpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBBbmltYXRlZFZpZXc7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5BbmltYXRlZFZpZXcuY29udGV4dFR5cGVzID0ge1xuICBwYWdlcjogX3Byb3BUeXBlczIuZGVmYXVsdC5pbnN0YW5jZU9mKF9QYWdlcjIuZGVmYXVsdCksXG4gIHZpZXc6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYW55XG59O1xuQW5pbWF0ZWRWaWV3LnByb3BUeXBlcyA9IGNoZWNrZWRQcm9wcztcbkFuaW1hdGVkVmlldy5kZWZhdWx0UHJvcHMgPSB7XG4gIHRhZzogJ2RpdicsXG4gIGFuaW1hdGlvbnM6IFtdXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gQW5pbWF0ZWRWaWV3O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwidmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciBhdHRyaWJ1dGVzVG9Qcm9wcyA9IHJlcXVpcmUoJy4vYXR0cmlidXRlcy10by1wcm9wcycpO1xudmFyIHV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzJyk7XG5cbnZhciBzZXRTdHlsZVByb3AgPSB1dGlsaXRpZXMuc2V0U3R5bGVQcm9wO1xudmFyIGNhblRleHRCZUNoaWxkT2ZOb2RlID0gdXRpbGl0aWVzLmNhblRleHRCZUNoaWxkT2ZOb2RlO1xuXG4vKipcbiAqIENvbnZlcnRzIERPTSBub2RlcyB0byBKU1ggZWxlbWVudChzKS5cbiAqXG4gKiBAcGFyYW0gIHtEb21FbGVtZW50W119IG5vZGVzICAgICAgICAgICAgIC0gRE9NIG5vZGVzLlxuICogQHBhcmFtICB7b2JqZWN0fSAgICAgICBbb3B0aW9ucz17fV0gICAgICAtIE9wdGlvbnMuXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gICAgIFtvcHRpb25zLnJlcGxhY2VdIC0gUmVwbGFjZXIuXG4gKiBAcGFyYW0gIHtvYmplY3R9ICAgICAgIFtvcHRpb25zLmxpYnJhcnldIC0gTGlicmFyeSAoUmVhY3QvUHJlYWN0L2V0Yy4pLlxuICogQHJldHVybiB7c3RyaW5nfEpTWC5FbGVtZW50fEpTWC5FbGVtZW50W119XG4gKi9cbmZ1bmN0aW9uIGRvbVRvUmVhY3Qobm9kZXMsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIGxpYnJhcnkgPSBvcHRpb25zLmxpYnJhcnkgfHwgUmVhY3Q7XG4gIHZhciBjbG9uZUVsZW1lbnQgPSBsaWJyYXJ5LmNsb25lRWxlbWVudDtcbiAgdmFyIGNyZWF0ZUVsZW1lbnQgPSBsaWJyYXJ5LmNyZWF0ZUVsZW1lbnQ7XG4gIHZhciBpc1ZhbGlkRWxlbWVudCA9IGxpYnJhcnkuaXNWYWxpZEVsZW1lbnQ7XG5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgbm9kZTtcbiAgdmFyIGlzV2hpdGVzcGFjZTtcbiAgdmFyIGhhc1JlcGxhY2UgPSB0eXBlb2Ygb3B0aW9ucy5yZXBsYWNlID09PSAnZnVuY3Rpb24nO1xuICB2YXIgcmVwbGFjZUVsZW1lbnQ7XG4gIHZhciBwcm9wcztcbiAgdmFyIGNoaWxkcmVuO1xuICB2YXIgdHJpbSA9IG9wdGlvbnMudHJpbTtcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gbm9kZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBub2RlID0gbm9kZXNbaV07XG5cbiAgICAvLyByZXBsYWNlIHdpdGggY3VzdG9tIFJlYWN0IGVsZW1lbnQgKGlmIHByZXNlbnQpXG4gICAgaWYgKGhhc1JlcGxhY2UpIHtcbiAgICAgIHJlcGxhY2VFbGVtZW50ID0gb3B0aW9ucy5yZXBsYWNlKG5vZGUpO1xuXG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQocmVwbGFjZUVsZW1lbnQpKSB7XG4gICAgICAgIC8vIHNldCBcImtleVwiIHByb3AgZm9yIHNpYmxpbmcgZWxlbWVudHNcbiAgICAgICAgLy8gaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWtleXNcbiAgICAgICAgaWYgKGxlbiA+IDEpIHtcbiAgICAgICAgICByZXBsYWNlRWxlbWVudCA9IGNsb25lRWxlbWVudChyZXBsYWNlRWxlbWVudCwge1xuICAgICAgICAgICAga2V5OiByZXBsYWNlRWxlbWVudC5rZXkgfHwgaVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKHJlcGxhY2VFbGVtZW50KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICBpc1doaXRlc3BhY2UgPSAhbm9kZS5kYXRhLnRyaW0oKS5sZW5ndGg7XG5cbiAgICAgIGlmIChpc1doaXRlc3BhY2UgJiYgbm9kZS5wYXJlbnQgJiYgIWNhblRleHRCZUNoaWxkT2ZOb2RlKG5vZGUucGFyZW50KSkge1xuICAgICAgICAvLyBXZSBoYXZlIGEgd2hpdGVzcGFjZSBub2RlIHRoYXQgY2FuJ3QgYmUgbmVzdGVkIGluIGl0cyBwYXJlbnRcbiAgICAgICAgLy8gc28gc2tpcCBpdFxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyaW0gJiYgaXNXaGl0ZXNwYWNlKSB7XG4gICAgICAgIC8vIFRyaW0gaXMgZW5hYmxlZCBhbmQgd2UgaGF2ZSBhIHdoaXRlc3BhY2Ugbm9kZVxuICAgICAgICAvLyBzbyBza2lwIGl0XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBoYXZlIGEgdGV4dCBub2RlIHRoYXQncyBub3Qgd2hpdGVzcGFjZSBhbmQgaXQgY2FuIGJlIG5lc3RlZFxuICAgICAgLy8gaW4gaXRzIHBhcmVudCBzbyBhZGQgaXQgdG8gdGhlIHJlc3VsdHNcbiAgICAgIHJlc3VsdC5wdXNoKG5vZGUuZGF0YSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBwcm9wcyA9IG5vZGUuYXR0cmlicztcbiAgICBpZiAoc2tpcEF0dHJpYnV0ZXNUb1Byb3BzKG5vZGUpKSB7XG4gICAgICBzZXRTdHlsZVByb3AocHJvcHMuc3R5bGUsIHByb3BzKTtcbiAgICB9IGVsc2UgaWYgKHByb3BzKSB7XG4gICAgICBwcm9wcyA9IGF0dHJpYnV0ZXNUb1Byb3BzKHByb3BzKTtcbiAgICB9XG5cbiAgICBjaGlsZHJlbiA9IG51bGw7XG5cbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSAnc2NyaXB0JzpcbiAgICAgIGNhc2UgJ3N0eWxlJzpcbiAgICAgICAgLy8gcHJldmVudCB0ZXh0IGluIDxzY3JpcHQ+IG9yIDxzdHlsZT4gZnJvbSBiZWluZyBlc2NhcGVkXG4gICAgICAgIC8vIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9kb20tZWxlbWVudHMuaHRtbCNkYW5nZXJvdXNseXNldGlubmVyaHRtbFxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlblswXSkge1xuICAgICAgICAgIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID0ge1xuICAgICAgICAgICAgX19odG1sOiBub2RlLmNoaWxkcmVuWzBdLmRhdGFcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd0YWcnOlxuICAgICAgICAvLyBzZXR0aW5nIHRleHRhcmVhIHZhbHVlIGluIGNoaWxkcmVuIGlzIGFuIGFudGlwYXR0ZXJuIGluIFJlYWN0XG4gICAgICAgIC8vIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9mb3Jtcy5odG1sI3RoZS10ZXh0YXJlYS10YWdcbiAgICAgICAgaWYgKG5vZGUubmFtZSA9PT0gJ3RleHRhcmVhJyAmJiBub2RlLmNoaWxkcmVuWzBdKSB7XG4gICAgICAgICAgcHJvcHMuZGVmYXVsdFZhbHVlID0gbm9kZS5jaGlsZHJlblswXS5kYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBjb250aW51ZSByZWN1cnNpb24gb2YgY3JlYXRpbmcgUmVhY3QgZWxlbWVudHMgKGlmIGFwcGxpY2FibGUpXG4gICAgICAgICAgY2hpbGRyZW4gPSBkb21Ub1JlYWN0KG5vZGUuY2hpbGRyZW4sIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBza2lwIGFsbCBvdGhlciBjYXNlcyAoZS5nLiwgY29tbWVudClcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHNldCBcImtleVwiIHByb3AgZm9yIHNpYmxpbmcgZWxlbWVudHNcbiAgICAvLyBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmcta2V5c1xuICAgIGlmIChsZW4gPiAxKSB7XG4gICAgICBwcm9wcy5rZXkgPSBpO1xuICAgIH1cblxuICAgIHJlc3VsdC5wdXNoKGNyZWF0ZUVsZW1lbnQobm9kZS5uYW1lLCBwcm9wcywgY2hpbGRyZW4pKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAxID8gcmVzdWx0WzBdIDogcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBET00gZWxlbWVudCBhdHRyaWJ1dGVzIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB0byBwcm9wcy5cbiAqIFdlYiBDb21wb25lbnRzIHNob3VsZCBub3QgaGF2ZSB0aGVpciBhdHRyaWJ1dGVzIHRyYW5zZm9ybWVkIGV4Y2VwdCBmb3IgYHN0eWxlYC5cbiAqXG4gKiBAcGFyYW0gIHtEb21FbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBza2lwQXR0cmlidXRlc1RvUHJvcHMobm9kZSkge1xuICByZXR1cm4gKFxuICAgIHV0aWxpdGllcy5QUkVTRVJWRV9DVVNUT01fQVRUUklCVVRFUyAmJlxuICAgIG5vZGUudHlwZSA9PT0gJ3RhZycgJiZcbiAgICB1dGlsaXRpZXMuaXNDdXN0b21Db21wb25lbnQobm9kZS5uYW1lLCBub2RlLmF0dHJpYnMpXG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZG9tVG9SZWFjdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7XG59XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07XG5cbiAgaWYgKF9pID09IG51bGwpIHJldHVybjtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG5cbiAgdmFyIF9zLCBfZTtcblxuICB0cnkge1xuICAgIGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfYXJyO1xufVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICByZXR1cm4gYXJyMjtcbn1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxuLy8gQSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4vLyBJdCBpcyBoYW5kbGVkIGJ5IFJlYWN0IHNlcGFyYXRlbHkgYW5kIHNob3VsZG4ndCBiZSB3cml0dGVuIHRvIHRoZSBET00uXG52YXIgUkVTRVJWRUQgPSAwOyAvLyBBIHNpbXBsZSBzdHJpbmcgYXR0cmlidXRlLlxuLy8gQXR0cmlidXRlcyB0aGF0IGFyZW4ndCBpbiB0aGUgZmlsdGVyIGFyZSBwcmVzdW1lZCB0byBoYXZlIHRoaXMgdHlwZS5cblxudmFyIFNUUklORyA9IDE7IC8vIEEgc3RyaW5nIGF0dHJpYnV0ZSB0aGF0IGFjY2VwdHMgYm9vbGVhbnMgaW4gUmVhY3QuIEluIEhUTUwsIHRoZXNlIGFyZSBjYWxsZWRcbi8vIFwiZW51bWVyYXRlZFwiIGF0dHJpYnV0ZXMgd2l0aCBcInRydWVcIiBhbmQgXCJmYWxzZVwiIGFzIHBvc3NpYmxlIHZhbHVlcy5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHNldCB0byBhIFwidHJ1ZVwiIHN0cmluZy5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBcImZhbHNlXCIgc3RyaW5nLlxuXG52YXIgQk9PTEVBTklTSF9TVFJJTkcgPSAyOyAvLyBBIHJlYWwgYm9vbGVhbiBhdHRyaWJ1dGUuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBwcmVzZW50IChzZXQgZWl0aGVyIHRvIGFuIGVtcHR5IHN0cmluZyBvciBpdHMgbmFtZSkuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgb21pdHRlZC5cblxudmFyIEJPT0xFQU4gPSAzOyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIGZsYWcgYXMgd2VsbCBhcyB3aXRoIGEgdmFsdWUuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBwcmVzZW50IChzZXQgZWl0aGVyIHRvIGFuIGVtcHR5IHN0cmluZyBvciBpdHMgbmFtZSkuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgb21pdHRlZC5cbi8vIEZvciBhbnkgb3RoZXIgdmFsdWUsIHNob3VsZCBiZSBwcmVzZW50IHdpdGggdGhhdCB2YWx1ZS5cblxudmFyIE9WRVJMT0FERURfQk9PTEVBTiA9IDQ7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IG11c3QgYmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIG51bWVyaWMuXG4vLyBXaGVuIGZhbHN5LCBpdCBzaG91bGQgYmUgcmVtb3ZlZC5cblxudmFyIE5VTUVSSUMgPSA1OyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBtdXN0IGJlIHBvc2l0aXZlIG51bWVyaWMgb3IgcGFyc2UgYXMgYSBwb3NpdGl2ZSBudW1lcmljLlxuLy8gV2hlbiBmYWxzeSwgaXQgc2hvdWxkIGJlIHJlbW92ZWQuXG5cbnZhciBQT1NJVElWRV9OVU1FUklDID0gNjtcbmZ1bmN0aW9uIGdldFByb3BlcnR5SW5mbyhuYW1lKSB7XG4gIHJldHVybiBwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG5hbWUpID8gcHJvcGVydGllc1tuYW1lXSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCB0eXBlLCBtdXN0VXNlUHJvcGVydHksIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZU5hbWVzcGFjZSwgc2FuaXRpemVVUkwsIHJlbW92ZUVtcHR5U3RyaW5nKSB7XG4gIHRoaXMuYWNjZXB0c0Jvb2xlYW5zID0gdHlwZSA9PT0gQk9PTEVBTklTSF9TVFJJTkcgfHwgdHlwZSA9PT0gQk9PTEVBTiB8fCB0eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU47XG4gIHRoaXMuYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWU7XG4gIHRoaXMuYXR0cmlidXRlTmFtZXNwYWNlID0gYXR0cmlidXRlTmFtZXNwYWNlO1xuICB0aGlzLm11c3RVc2VQcm9wZXJ0eSA9IG11c3RVc2VQcm9wZXJ0eTtcbiAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBuYW1lO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnNhbml0aXplVVJMID0gc2FuaXRpemVVUkw7XG4gIHRoaXMucmVtb3ZlRW1wdHlTdHJpbmcgPSByZW1vdmVFbXB0eVN0cmluZztcbn0gLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGlzIGxpc3QsIGJlIHN1cmUgdG8gYWxzbyBhZGQgdGhlbSB0b1xuLy8gdGhlIGBwb3NzaWJsZVN0YW5kYXJkTmFtZXNgIG1vZHVsZSB0byBlbnN1cmUgY2FzaW5nIGFuZCBpbmNvcnJlY3Rcbi8vIG5hbWUgd2FybmluZ3MuXG5cblxudmFyIHByb3BlcnRpZXMgPSB7fTsgLy8gVGhlc2UgcHJvcHMgYXJlIHJlc2VydmVkIGJ5IFJlYWN0LiBUaGV5IHNob3VsZG4ndCBiZSB3cml0dGVuIHRvIHRoZSBET00uXG5cbnZhciByZXNlcnZlZFByb3BzID0gWydjaGlsZHJlbicsICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsIC8vIFRPRE86IFRoaXMgcHJldmVudHMgdGhlIGFzc2lnbm1lbnQgb2YgZGVmYXVsdFZhbHVlIHRvIHJlZ3VsYXJcbi8vIGVsZW1lbnRzIChub3QganVzdCBpbnB1dHMpLiBOb3cgdGhhdCBSZWFjdERPTUlucHV0IGFzc2lnbnMgdG8gdGhlXG4vLyBkZWZhdWx0VmFsdWUgcHJvcGVydHkgLS0gZG8gd2UgbmVlZCB0aGlzP1xuJ2RlZmF1bHRWYWx1ZScsICdkZWZhdWx0Q2hlY2tlZCcsICdpbm5lckhUTUwnLCAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJywgJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsICdzdHlsZSddO1xucmVzZXJ2ZWRQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFJFU0VSVkVELCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gQSBmZXcgUmVhY3Qgc3RyaW5nIGF0dHJpYnV0ZXMgaGF2ZSBhIGRpZmZlcmVudCBuYW1lLlxuLy8gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBSZWFjdCBwcm9wIG5hbWVzIHRvIHRoZSBhdHRyaWJ1dGUgbmFtZXMuXG5cbltbJ2FjY2VwdENoYXJzZXQnLCAnYWNjZXB0LWNoYXJzZXQnXSwgWydjbGFzc05hbWUnLCAnY2xhc3MnXSwgWydodG1sRm9yJywgJ2ZvciddLCBbJ2h0dHBFcXVpdicsICdodHRwLWVxdWl2J11dLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICBuYW1lID0gX3JlZjJbMF0sXG4gICAgICBhdHRyaWJ1dGVOYW1lID0gX3JlZjJbMV07XG5cbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIFwiZW51bWVyYXRlZFwiIEhUTUwgYXR0cmlidXRlcyB0aGF0IGFjY2VwdCBcInRydWVcIiBhbmQgXCJmYWxzZVwiLlxuLy8gSW4gUmVhY3QsIHdlIGxldCB1c2VycyBwYXNzIGB0cnVlYCBhbmQgYGZhbHNlYCBldmVuIHRob3VnaCB0ZWNobmljYWxseVxuLy8gdGhlc2UgYXJlbid0IGJvb2xlYW4gYXR0cmlidXRlcyAodGhleSBhcmUgY29lcmNlZCB0byBzdHJpbmdzKS5cblxuWydjb250ZW50RWRpdGFibGUnLCAnZHJhZ2dhYmxlJywgJ3NwZWxsQ2hlY2snLCAndmFsdWUnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU5JU0hfU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgXCJlbnVtZXJhdGVkXCIgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG4vLyBTaW5jZSB0aGVzZSBhcmUgU1ZHIGF0dHJpYnV0ZXMsIHRoZWlyIGF0dHJpYnV0ZSBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG5cblsnYXV0b1JldmVyc2UnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdmb2N1c2FibGUnLCAncHJlc2VydmVBbHBoYSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTklTSF9TVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBib29sZWFuIGF0dHJpYnV0ZXMuXG5cblsnYWxsb3dGdWxsU2NyZWVuJywgJ2FzeW5jJywgLy8gTm90ZTogdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBwcmV2ZW50cyBpdCBmcm9tIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIERPTVxuLy8gb24gdGhlIGNsaWVudCBzaWRlIGJlY2F1c2UgdGhlIGJyb3dzZXJzIGFyZSBpbmNvbnNpc3RlbnQuIEluc3RlYWQgd2UgY2FsbCBmb2N1cygpLlxuJ2F1dG9Gb2N1cycsICdhdXRvUGxheScsICdjb250cm9scycsICdkZWZhdWx0JywgJ2RlZmVyJywgJ2Rpc2FibGVkJywgJ2Rpc2FibGVQaWN0dXJlSW5QaWN0dXJlJywgJ2Rpc2FibGVSZW1vdGVQbGF5YmFjaycsICdmb3JtTm9WYWxpZGF0ZScsICdoaWRkZW4nLCAnbG9vcCcsICdub01vZHVsZScsICdub1ZhbGlkYXRlJywgJ29wZW4nLCAncGxheXNJbmxpbmUnLCAncmVhZE9ubHknLCAncmVxdWlyZWQnLCAncmV2ZXJzZWQnLCAnc2NvcGVkJywgJ3NlYW1sZXNzJywgLy8gTWljcm9kYXRhXG4naXRlbVNjb3BlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgdGhlIGZldyBSZWFjdCBwcm9wcyB0aGF0IHdlIHNldCBhcyBET00gcHJvcGVydGllc1xuLy8gcmF0aGVyIHRoYW4gYXR0cmlidXRlcy4gVGhlc2UgYXJlIGFsbCBib29sZWFucy5cblxuWydjaGVja2VkJywgLy8gTm90ZTogYG9wdGlvbi5zZWxlY3RlZGAgaXMgbm90IHVwZGF0ZWQgaWYgYHNlbGVjdC5tdWx0aXBsZWAgaXNcbi8vIGRpc2FibGVkIHdpdGggYHJlbW92ZUF0dHJpYnV0ZWAuIFdlIGhhdmUgc3BlY2lhbCBsb2dpYyBmb3IgaGFuZGxpbmcgdGhpcy5cbidtdWx0aXBsZScsICdtdXRlZCcsICdzZWxlY3RlZCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTiwgdHJ1ZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IGFyZSBcIm92ZXJsb2FkZWQgYm9vbGVhbnNcIjogdGhleSBiZWhhdmUgbGlrZVxuLy8gYm9vbGVhbnMsIGJ1dCBjYW4gYWxzbyBhY2NlcHQgYSBzdHJpbmcgdmFsdWUuXG5cblsnY2FwdHVyZScsICdkb3dubG9hZCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgT1ZFUkxPQURFRF9CT09MRUFOLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtYmVycy5cblxuWydjb2xzJywgJ3Jvd3MnLCAnc2l6ZScsICdzcGFuJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBQT1NJVElWRV9OVU1FUklDLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IG11c3QgYmUgbnVtYmVycy5cblxuWydyb3dTcGFuJywgJ3N0YXJ0J10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBOVU1FUklDLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pO1xudmFyIENBTUVMSVpFID0gL1tcXC1cXDpdKFthLXpdKS9nO1xuXG52YXIgY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uIGNhcGl0YWxpemUodG9rZW4pIHtcbiAgcmV0dXJuIHRva2VuWzFdLnRvVXBwZXJDYXNlKCk7XG59OyAvLyBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBuZWVkIHNwZWNpYWwgY2FzaW5nLCBuYW1lc3BhY2luZyxcbi8vIG9yIGJvb2xlYW4gdmFsdWUgYXNzaWdubWVudC4gUmVndWxhciBhdHRyaWJ1dGVzIHRoYXQganVzdCBhY2NlcHQgc3RyaW5nc1xuLy8gYW5kIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXJlIG9taXR0ZWQsIGp1c3QgbGlrZSBpbiB0aGUgSFRNTCBhdHRyaWJ1dGUgZmlsdGVyLlxuLy8gU29tZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIGNhbiBiZSBoYXJkIHRvIGZpbmQuIFRoaXMgbGlzdCB3YXMgY3JlYXRlZCBieVxuLy8gc2NyYXBpbmcgdGhlIE1ETiBkb2N1bWVudGF0aW9uLlxuXG5cblsnYWNjZW50LWhlaWdodCcsICdhbGlnbm1lbnQtYmFzZWxpbmUnLCAnYXJhYmljLWZvcm0nLCAnYmFzZWxpbmUtc2hpZnQnLCAnY2FwLWhlaWdodCcsICdjbGlwLXBhdGgnLCAnY2xpcC1ydWxlJywgJ2NvbG9yLWludGVycG9sYXRpb24nLCAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJywgJ2NvbG9yLXByb2ZpbGUnLCAnY29sb3ItcmVuZGVyaW5nJywgJ2RvbWluYW50LWJhc2VsaW5lJywgJ2VuYWJsZS1iYWNrZ3JvdW5kJywgJ2ZpbGwtb3BhY2l0eScsICdmaWxsLXJ1bGUnLCAnZmxvb2QtY29sb3InLCAnZmxvb2Qtb3BhY2l0eScsICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zaXplLWFkanVzdCcsICdmb250LXN0cmV0Y2gnLCAnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZ2x5cGgtbmFtZScsICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJywgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJywgJ2hvcml6LWFkdi14JywgJ2hvcml6LW9yaWdpbi14JywgJ2ltYWdlLXJlbmRlcmluZycsICdsZXR0ZXItc3BhY2luZycsICdsaWdodGluZy1jb2xvcicsICdtYXJrZXItZW5kJywgJ21hcmtlci1taWQnLCAnbWFya2VyLXN0YXJ0JywgJ292ZXJsaW5lLXBvc2l0aW9uJywgJ292ZXJsaW5lLXRoaWNrbmVzcycsICdwYWludC1vcmRlcicsICdwYW5vc2UtMScsICdwb2ludGVyLWV2ZW50cycsICdyZW5kZXJpbmctaW50ZW50JywgJ3NoYXBlLXJlbmRlcmluZycsICdzdG9wLWNvbG9yJywgJ3N0b3Atb3BhY2l0eScsICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJywgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJywgJ3N0cm9rZS1kYXNoYXJyYXknLCAnc3Ryb2tlLWRhc2hvZmZzZXQnLCAnc3Ryb2tlLWxpbmVjYXAnLCAnc3Ryb2tlLWxpbmVqb2luJywgJ3N0cm9rZS1taXRlcmxpbWl0JywgJ3N0cm9rZS1vcGFjaXR5JywgJ3N0cm9rZS13aWR0aCcsICd0ZXh0LWFuY2hvcicsICd0ZXh0LWRlY29yYXRpb24nLCAndGV4dC1yZW5kZXJpbmcnLCAndW5kZXJsaW5lLXBvc2l0aW9uJywgJ3VuZGVybGluZS10aGlja25lc3MnLCAndW5pY29kZS1iaWRpJywgJ3VuaWNvZGUtcmFuZ2UnLCAndW5pdHMtcGVyLWVtJywgJ3YtYWxwaGFiZXRpYycsICd2LWhhbmdpbmcnLCAndi1pZGVvZ3JhcGhpYycsICd2LW1hdGhlbWF0aWNhbCcsICd2ZWN0b3ItZWZmZWN0JywgJ3ZlcnQtYWR2LXknLCAndmVydC1vcmlnaW4teCcsICd2ZXJ0LW9yaWdpbi15JywgJ3dvcmQtc3BhY2luZycsICd3cml0aW5nLW1vZGUnLCAneG1sbnM6eGxpbmsnLCAneC1oZWlnaHQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFN0cmluZyBTVkcgYXR0cmlidXRlcyB3aXRoIHRoZSB4bGluayBuYW1lc3BhY2UuXG5cblsneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gU3RyaW5nIFNWRyBhdHRyaWJ1dGVzIHdpdGggdGhlIHhtbCBuYW1lc3BhY2UuXG5cblsneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJywgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGUgZXhpc3RzIGJvdGggaW4gSFRNTCBhbmQgU1ZHLlxuLy8gVGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGNhc2Utc2Vuc2l0aXZlIGluIFNWRyBzbyB3ZSBjYW4ndCBqdXN0IHVzZVxuLy8gdGhlIFJlYWN0IG5hbWUgbGlrZSB3ZSBkbyBmb3IgYXR0cmlidXRlcyB0aGF0IGV4aXN0IG9ubHkgaW4gSFRNTC5cblxuWyd0YWJJbmRleCcsICdjcm9zc09yaWdpbiddLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcHJvcGVydGllc1thdHRyaWJ1dGVOYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoYXR0cmlidXRlTmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGVzIGFjY2VwdCBVUkxzLiBUaGVzZSBtdXN0IG5vdCBhbGxvdyBqYXZhc2NyaXB0OiBVUkxTLlxuLy8gVGhlc2Ugd2lsbCBhbHNvIG5lZWQgdG8gYWNjZXB0IFRydXN0ZWQgVHlwZXMgb2JqZWN0IGluIHRoZSBmdXR1cmUuXG5cbnZhciB4bGlua0hyZWYgPSAneGxpbmtIcmVmJztcbnByb3BlcnRpZXNbeGxpbmtIcmVmXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoJ3hsaW5rSHJlZicsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuJ3hsaW5rOmhyZWYnLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIHRydWUsIC8vIHNhbml0aXplVVJMXG5mYWxzZSk7XG5bJ3NyYycsICdocmVmJywgJ2FjdGlvbicsICdmb3JtQWN0aW9uJ10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICBwcm9wZXJ0aWVzW2F0dHJpYnV0ZU5hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChhdHRyaWJ1dGVOYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICB0cnVlLCAvLyBzYW5pdGl6ZVVSTFxuICB0cnVlKTtcbn0pO1xuXG52YXIgX3JlcXVpcmUgPSByZXF1aXJlKCcuLi9saWIvcG9zc2libGVTdGFuZGFyZE5hbWVzT3B0aW1pemVkJyksXG4gICAgQ0FNRUxDQVNFID0gX3JlcXVpcmUuQ0FNRUxDQVNFLFxuICAgIFNBTUUgPSBfcmVxdWlyZS5TQU1FLFxuICAgIHBvc3NpYmxlU3RhbmRhcmROYW1lc09wdGltaXplZCA9IF9yZXF1aXJlLnBvc3NpYmxlU3RhbmRhcmROYW1lcztcblxudmFyIEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgPSBcIjpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRcIjtcbnZhciBBVFRSSUJVVEVfTkFNRV9DSEFSID0gQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArIFwiXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBcIjtcbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBwcm9wZXJ0eSBuYW1lIGlzIGEgY3VzdG9tIGF0dHJpYnV0ZS5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi8xNS1zdGFibGUvc3JjL3JlbmRlcmVycy9kb20vc2hhcmVkL0hUTUxET01Qcm9wZXJ0eUNvbmZpZy5qcyNMMjMtTDI1fVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuXG52YXIgaXNDdXN0b21BdHRyaWJ1dGUgPSBSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCggLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1pc2xlYWRpbmctY2hhcmFjdGVyLWNsYXNzXG5uZXcgUmVnRXhwKCdeKGRhdGF8YXJpYSktWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpKTtcbnZhciBwb3NzaWJsZVN0YW5kYXJkTmFtZXMgPSBPYmplY3Qua2V5cyhwb3NzaWJsZVN0YW5kYXJkTmFtZXNPcHRpbWl6ZWQpLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIHN0YW5kYXJkTmFtZSkge1xuICB2YXIgcHJvcE5hbWUgPSBwb3NzaWJsZVN0YW5kYXJkTmFtZXNPcHRpbWl6ZWRbc3RhbmRhcmROYW1lXTtcblxuICBpZiAocHJvcE5hbWUgPT09IFNBTUUpIHtcbiAgICBhY2N1bXVsYXRvcltzdGFuZGFyZE5hbWVdID0gc3RhbmRhcmROYW1lO1xuICB9IGVsc2UgaWYgKHByb3BOYW1lID09PSBDQU1FTENBU0UpIHtcbiAgICBhY2N1bXVsYXRvcltzdGFuZGFyZE5hbWUudG9Mb3dlckNhc2UoKV0gPSBzdGFuZGFyZE5hbWU7XG4gIH0gZWxzZSB7XG4gICAgYWNjdW11bGF0b3Jbc3RhbmRhcmROYW1lXSA9IHByb3BOYW1lO1xuICB9XG5cbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufSwge30pO1xuXG5leHBvcnRzLkJPT0xFQU4gPSBCT09MRUFOO1xuZXhwb3J0cy5CT09MRUFOSVNIX1NUUklORyA9IEJPT0xFQU5JU0hfU1RSSU5HO1xuZXhwb3J0cy5OVU1FUklDID0gTlVNRVJJQztcbmV4cG9ydHMuT1ZFUkxPQURFRF9CT09MRUFOID0gT1ZFUkxPQURFRF9CT09MRUFOO1xuZXhwb3J0cy5QT1NJVElWRV9OVU1FUklDID0gUE9TSVRJVkVfTlVNRVJJQztcbmV4cG9ydHMuUkVTRVJWRUQgPSBSRVNFUlZFRDtcbmV4cG9ydHMuU1RSSU5HID0gU1RSSU5HO1xuZXhwb3J0cy5nZXRQcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm87XG5leHBvcnRzLmlzQ3VzdG9tQXR0cmlidXRlID0gaXNDdXN0b21BdHRyaWJ1dGU7XG5leHBvcnRzLnBvc3NpYmxlU3RhbmRhcmROYW1lcyA9IHBvc3NpYmxlU3RhbmRhcmROYW1lcztcbiIsIi8vIEFuIGF0dHJpYnV0ZSBpbiB3aGljaCB0aGUgRE9NL1NWRyBzdGFuZGFyZCBuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSBSZWFjdCBwcm9wIG5hbWUgKGUuZy4sICdhY2NlcHQnKS5cbnZhciBTQU1FID0gMDtcbmV4cG9ydHMuU0FNRSA9IFNBTUU7XG5cbi8vIEFuIGF0dHJpYnV0ZSBpbiB3aGljaCB0aGUgUmVhY3QgcHJvcCBuYW1lIGlzIHRoZSBjYW1lbGNhc2VkIHZlcnNpb24gb2YgdGhlIERPTS9TVkcgc3RhbmRhcmQgbmFtZSAoZS5nLiwgJ2FjY2VwdENoYXJzZXQnKS5cbnZhciBDQU1FTENBU0UgPSAxO1xuZXhwb3J0cy5DQU1FTENBU0UgPSBDQU1FTENBU0U7XG5cbmV4cG9ydHMucG9zc2libGVTdGFuZGFyZE5hbWVzID0ge1xuICBhY2NlcHQ6IDAsXG4gIGFjY2VwdENoYXJzZXQ6IDEsXG4gICdhY2NlcHQtY2hhcnNldCc6ICdhY2NlcHRDaGFyc2V0JyxcbiAgYWNjZXNzS2V5OiAxLFxuICBhY3Rpb246IDAsXG4gIGFsbG93RnVsbFNjcmVlbjogMSxcbiAgYWx0OiAwLFxuICBhczogMCxcbiAgYXN5bmM6IDAsXG4gIGF1dG9DYXBpdGFsaXplOiAxLFxuICBhdXRvQ29tcGxldGU6IDEsXG4gIGF1dG9Db3JyZWN0OiAxLFxuICBhdXRvRm9jdXM6IDEsXG4gIGF1dG9QbGF5OiAxLFxuICBhdXRvU2F2ZTogMSxcbiAgY2FwdHVyZTogMCxcbiAgY2VsbFBhZGRpbmc6IDEsXG4gIGNlbGxTcGFjaW5nOiAxLFxuICBjaGFsbGVuZ2U6IDAsXG4gIGNoYXJTZXQ6IDEsXG4gIGNoZWNrZWQ6IDAsXG4gIGNoaWxkcmVuOiAwLFxuICBjaXRlOiAwLFxuICBjbGFzczogJ2NsYXNzTmFtZScsXG4gIGNsYXNzSUQ6IDEsXG4gIGNsYXNzTmFtZTogMSxcbiAgY29sczogMCxcbiAgY29sU3BhbjogMSxcbiAgY29udGVudDogMCxcbiAgY29udGVudEVkaXRhYmxlOiAxLFxuICBjb250ZXh0TWVudTogMSxcbiAgY29udHJvbHM6IDAsXG4gIGNvbnRyb2xzTGlzdDogMSxcbiAgY29vcmRzOiAwLFxuICBjcm9zc09yaWdpbjogMSxcbiAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IDEsXG4gIGRhdGE6IDAsXG4gIGRhdGVUaW1lOiAxLFxuICBkZWZhdWx0OiAwLFxuICBkZWZhdWx0Q2hlY2tlZDogMSxcbiAgZGVmYXVsdFZhbHVlOiAxLFxuICBkZWZlcjogMCxcbiAgZGlyOiAwLFxuICBkaXNhYmxlZDogMCxcbiAgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmU6IDEsXG4gIGRpc2FibGVSZW1vdGVQbGF5YmFjazogMSxcbiAgZG93bmxvYWQ6IDAsXG4gIGRyYWdnYWJsZTogMCxcbiAgZW5jVHlwZTogMSxcbiAgZW50ZXJLZXlIaW50OiAxLFxuICBmb3I6ICdodG1sRm9yJyxcbiAgZm9ybTogMCxcbiAgZm9ybU1ldGhvZDogMSxcbiAgZm9ybUFjdGlvbjogMSxcbiAgZm9ybUVuY1R5cGU6IDEsXG4gIGZvcm1Ob1ZhbGlkYXRlOiAxLFxuICBmb3JtVGFyZ2V0OiAxLFxuICBmcmFtZUJvcmRlcjogMSxcbiAgaGVhZGVyczogMCxcbiAgaGVpZ2h0OiAwLFxuICBoaWRkZW46IDAsXG4gIGhpZ2g6IDAsXG4gIGhyZWY6IDAsXG4gIGhyZWZMYW5nOiAxLFxuICBodG1sRm9yOiAxLFxuICBodHRwRXF1aXY6IDEsXG4gICdodHRwLWVxdWl2JzogJ2h0dHBFcXVpdicsXG4gIGljb246IDAsXG4gIGlkOiAwLFxuICBpbm5lckhUTUw6IDEsXG4gIGlucHV0TW9kZTogMSxcbiAgaW50ZWdyaXR5OiAwLFxuICBpczogMCxcbiAgaXRlbUlEOiAxLFxuICBpdGVtUHJvcDogMSxcbiAgaXRlbVJlZjogMSxcbiAgaXRlbVNjb3BlOiAxLFxuICBpdGVtVHlwZTogMSxcbiAga2V5UGFyYW1zOiAxLFxuICBrZXlUeXBlOiAxLFxuICBraW5kOiAwLFxuICBsYWJlbDogMCxcbiAgbGFuZzogMCxcbiAgbGlzdDogMCxcbiAgbG9vcDogMCxcbiAgbG93OiAwLFxuICBtYW5pZmVzdDogMCxcbiAgbWFyZ2luV2lkdGg6IDEsXG4gIG1hcmdpbkhlaWdodDogMSxcbiAgbWF4OiAwLFxuICBtYXhMZW5ndGg6IDEsXG4gIG1lZGlhOiAwLFxuICBtZWRpYUdyb3VwOiAxLFxuICBtZXRob2Q6IDAsXG4gIG1pbjogMCxcbiAgbWluTGVuZ3RoOiAxLFxuICBtdWx0aXBsZTogMCxcbiAgbXV0ZWQ6IDAsXG4gIG5hbWU6IDAsXG4gIG5vTW9kdWxlOiAxLFxuICBub25jZTogMCxcbiAgbm9WYWxpZGF0ZTogMSxcbiAgb3BlbjogMCxcbiAgb3B0aW11bTogMCxcbiAgcGF0dGVybjogMCxcbiAgcGxhY2Vob2xkZXI6IDAsXG4gIHBsYXlzSW5saW5lOiAxLFxuICBwb3N0ZXI6IDAsXG4gIHByZWxvYWQ6IDAsXG4gIHByb2ZpbGU6IDAsXG4gIHJhZGlvR3JvdXA6IDEsXG4gIHJlYWRPbmx5OiAxLFxuICByZWZlcnJlclBvbGljeTogMSxcbiAgcmVsOiAwLFxuICByZXF1aXJlZDogMCxcbiAgcmV2ZXJzZWQ6IDAsXG4gIHJvbGU6IDAsXG4gIHJvd3M6IDAsXG4gIHJvd1NwYW46IDEsXG4gIHNhbmRib3g6IDAsXG4gIHNjb3BlOiAwLFxuICBzY29wZWQ6IDAsXG4gIHNjcm9sbGluZzogMCxcbiAgc2VhbWxlc3M6IDAsXG4gIHNlbGVjdGVkOiAwLFxuICBzaGFwZTogMCxcbiAgc2l6ZTogMCxcbiAgc2l6ZXM6IDAsXG4gIHNwYW46IDAsXG4gIHNwZWxsQ2hlY2s6IDEsXG4gIHNyYzogMCxcbiAgc3JjRG9jOiAxLFxuICBzcmNMYW5nOiAxLFxuICBzcmNTZXQ6IDEsXG4gIHN0YXJ0OiAwLFxuICBzdGVwOiAwLFxuICBzdHlsZTogMCxcbiAgc3VtbWFyeTogMCxcbiAgdGFiSW5kZXg6IDEsXG4gIHRhcmdldDogMCxcbiAgdGl0bGU6IDAsXG4gIHR5cGU6IDAsXG4gIHVzZU1hcDogMSxcbiAgdmFsdWU6IDAsXG4gIHdpZHRoOiAwLFxuICB3bW9kZTogMCxcbiAgd3JhcDogMCxcbiAgYWJvdXQ6IDAsXG4gIGFjY2VudEhlaWdodDogMSxcbiAgJ2FjY2VudC1oZWlnaHQnOiAnYWNjZW50SGVpZ2h0JyxcbiAgYWNjdW11bGF0ZTogMCxcbiAgYWRkaXRpdmU6IDAsXG4gIGFsaWdubWVudEJhc2VsaW5lOiAxLFxuICAnYWxpZ25tZW50LWJhc2VsaW5lJzogJ2FsaWdubWVudEJhc2VsaW5lJyxcbiAgYWxsb3dSZW9yZGVyOiAxLFxuICBhbHBoYWJldGljOiAwLFxuICBhbXBsaXR1ZGU6IDAsXG4gIGFyYWJpY0Zvcm06IDEsXG4gICdhcmFiaWMtZm9ybSc6ICdhcmFiaWNGb3JtJyxcbiAgYXNjZW50OiAwLFxuICBhdHRyaWJ1dGVOYW1lOiAxLFxuICBhdHRyaWJ1dGVUeXBlOiAxLFxuICBhdXRvUmV2ZXJzZTogMSxcbiAgYXppbXV0aDogMCxcbiAgYmFzZUZyZXF1ZW5jeTogMSxcbiAgYmFzZWxpbmVTaGlmdDogMSxcbiAgJ2Jhc2VsaW5lLXNoaWZ0JzogJ2Jhc2VsaW5lU2hpZnQnLFxuICBiYXNlUHJvZmlsZTogMSxcbiAgYmJveDogMCxcbiAgYmVnaW46IDAsXG4gIGJpYXM6IDAsXG4gIGJ5OiAwLFxuICBjYWxjTW9kZTogMSxcbiAgY2FwSGVpZ2h0OiAxLFxuICAnY2FwLWhlaWdodCc6ICdjYXBIZWlnaHQnLFxuICBjbGlwOiAwLFxuICBjbGlwUGF0aDogMSxcbiAgJ2NsaXAtcGF0aCc6ICdjbGlwUGF0aCcsXG4gIGNsaXBQYXRoVW5pdHM6IDEsXG4gIGNsaXBSdWxlOiAxLFxuICAnY2xpcC1ydWxlJzogJ2NsaXBSdWxlJyxcbiAgY29sb3I6IDAsXG4gIGNvbG9ySW50ZXJwb2xhdGlvbjogMSxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24nOiAnY29sb3JJbnRlcnBvbGF0aW9uJyxcbiAgY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczogMSxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyc6ICdjb2xvckludGVycG9sYXRpb25GaWx0ZXJzJyxcbiAgY29sb3JQcm9maWxlOiAxLFxuICAnY29sb3ItcHJvZmlsZSc6ICdjb2xvclByb2ZpbGUnLFxuICBjb2xvclJlbmRlcmluZzogMSxcbiAgJ2NvbG9yLXJlbmRlcmluZyc6ICdjb2xvclJlbmRlcmluZycsXG4gIGNvbnRlbnRTY3JpcHRUeXBlOiAxLFxuICBjb250ZW50U3R5bGVUeXBlOiAxLFxuICBjdXJzb3I6IDAsXG4gIGN4OiAwLFxuICBjeTogMCxcbiAgZDogMCxcbiAgZGF0YXR5cGU6IDAsXG4gIGRlY2VsZXJhdGU6IDAsXG4gIGRlc2NlbnQ6IDAsXG4gIGRpZmZ1c2VDb25zdGFudDogMSxcbiAgZGlyZWN0aW9uOiAwLFxuICBkaXNwbGF5OiAwLFxuICBkaXZpc29yOiAwLFxuICBkb21pbmFudEJhc2VsaW5lOiAxLFxuICAnZG9taW5hbnQtYmFzZWxpbmUnOiAnZG9taW5hbnRCYXNlbGluZScsXG4gIGR1cjogMCxcbiAgZHg6IDAsXG4gIGR5OiAwLFxuICBlZGdlTW9kZTogMSxcbiAgZWxldmF0aW9uOiAwLFxuICBlbmFibGVCYWNrZ3JvdW5kOiAxLFxuICAnZW5hYmxlLWJhY2tncm91bmQnOiAnZW5hYmxlQmFja2dyb3VuZCcsXG4gIGVuZDogMCxcbiAgZXhwb25lbnQ6IDAsXG4gIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6IDEsXG4gIGZpbGw6IDAsXG4gIGZpbGxPcGFjaXR5OiAxLFxuICAnZmlsbC1vcGFjaXR5JzogJ2ZpbGxPcGFjaXR5JyxcbiAgZmlsbFJ1bGU6IDEsXG4gICdmaWxsLXJ1bGUnOiAnZmlsbFJ1bGUnLFxuICBmaWx0ZXI6IDAsXG4gIGZpbHRlclJlczogMSxcbiAgZmlsdGVyVW5pdHM6IDEsXG4gIGZsb29kT3BhY2l0eTogMSxcbiAgJ2Zsb29kLW9wYWNpdHknOiAnZmxvb2RPcGFjaXR5JyxcbiAgZmxvb2RDb2xvcjogMSxcbiAgJ2Zsb29kLWNvbG9yJzogJ2Zsb29kQ29sb3InLFxuICBmb2N1c2FibGU6IDAsXG4gIGZvbnRGYW1pbHk6IDEsXG4gICdmb250LWZhbWlseSc6ICdmb250RmFtaWx5JyxcbiAgZm9udFNpemU6IDEsXG4gICdmb250LXNpemUnOiAnZm9udFNpemUnLFxuICBmb250U2l6ZUFkanVzdDogMSxcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnOiAnZm9udFNpemVBZGp1c3QnLFxuICBmb250U3RyZXRjaDogMSxcbiAgJ2ZvbnQtc3RyZXRjaCc6ICdmb250U3RyZXRjaCcsXG4gIGZvbnRTdHlsZTogMSxcbiAgJ2ZvbnQtc3R5bGUnOiAnZm9udFN0eWxlJyxcbiAgZm9udFZhcmlhbnQ6IDEsXG4gICdmb250LXZhcmlhbnQnOiAnZm9udFZhcmlhbnQnLFxuICBmb250V2VpZ2h0OiAxLFxuICAnZm9udC13ZWlnaHQnOiAnZm9udFdlaWdodCcsXG4gIGZvcm1hdDogMCxcbiAgZnJvbTogMCxcbiAgZng6IDAsXG4gIGZ5OiAwLFxuICBnMTogMCxcbiAgZzI6IDAsXG4gIGdseXBoTmFtZTogMSxcbiAgJ2dseXBoLW5hbWUnOiAnZ2x5cGhOYW1lJyxcbiAgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6IDEsXG4gICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJzogJ2dseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsJyxcbiAgZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsOiAxLFxuICAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnOiAnZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsJyxcbiAgZ2x5cGhSZWY6IDEsXG4gIGdyYWRpZW50VHJhbnNmb3JtOiAxLFxuICBncmFkaWVudFVuaXRzOiAxLFxuICBoYW5naW5nOiAwLFxuICBob3JpekFkdlg6IDEsXG4gICdob3Jpei1hZHYteCc6ICdob3JpekFkdlgnLFxuICBob3Jpek9yaWdpblg6IDEsXG4gICdob3Jpei1vcmlnaW4teCc6ICdob3Jpek9yaWdpblgnLFxuICBpZGVvZ3JhcGhpYzogMCxcbiAgaW1hZ2VSZW5kZXJpbmc6IDEsXG4gICdpbWFnZS1yZW5kZXJpbmcnOiAnaW1hZ2VSZW5kZXJpbmcnLFxuICBpbjI6IDAsXG4gIGluOiAwLFxuICBpbmxpc3Q6IDAsXG4gIGludGVyY2VwdDogMCxcbiAgazE6IDAsXG4gIGsyOiAwLFxuICBrMzogMCxcbiAgazQ6IDAsXG4gIGs6IDAsXG4gIGtlcm5lbE1hdHJpeDogMSxcbiAga2VybmVsVW5pdExlbmd0aDogMSxcbiAga2VybmluZzogMCxcbiAga2V5UG9pbnRzOiAxLFxuICBrZXlTcGxpbmVzOiAxLFxuICBrZXlUaW1lczogMSxcbiAgbGVuZ3RoQWRqdXN0OiAxLFxuICBsZXR0ZXJTcGFjaW5nOiAxLFxuICAnbGV0dGVyLXNwYWNpbmcnOiAnbGV0dGVyU3BhY2luZycsXG4gIGxpZ2h0aW5nQ29sb3I6IDEsXG4gICdsaWdodGluZy1jb2xvcic6ICdsaWdodGluZ0NvbG9yJyxcbiAgbGltaXRpbmdDb25lQW5nbGU6IDEsXG4gIGxvY2FsOiAwLFxuICBtYXJrZXJFbmQ6IDEsXG4gICdtYXJrZXItZW5kJzogJ21hcmtlckVuZCcsXG4gIG1hcmtlckhlaWdodDogMSxcbiAgbWFya2VyTWlkOiAxLFxuICAnbWFya2VyLW1pZCc6ICdtYXJrZXJNaWQnLFxuICBtYXJrZXJTdGFydDogMSxcbiAgJ21hcmtlci1zdGFydCc6ICdtYXJrZXJTdGFydCcsXG4gIG1hcmtlclVuaXRzOiAxLFxuICBtYXJrZXJXaWR0aDogMSxcbiAgbWFzazogMCxcbiAgbWFza0NvbnRlbnRVbml0czogMSxcbiAgbWFza1VuaXRzOiAxLFxuICBtYXRoZW1hdGljYWw6IDAsXG4gIG1vZGU6IDAsXG4gIG51bU9jdGF2ZXM6IDEsXG4gIG9mZnNldDogMCxcbiAgb3BhY2l0eTogMCxcbiAgb3BlcmF0b3I6IDAsXG4gIG9yZGVyOiAwLFxuICBvcmllbnQ6IDAsXG4gIG9yaWVudGF0aW9uOiAwLFxuICBvcmlnaW46IDAsXG4gIG92ZXJmbG93OiAwLFxuICBvdmVybGluZVBvc2l0aW9uOiAxLFxuICAnb3ZlcmxpbmUtcG9zaXRpb24nOiAnb3ZlcmxpbmVQb3NpdGlvbicsXG4gIG92ZXJsaW5lVGhpY2tuZXNzOiAxLFxuICAnb3ZlcmxpbmUtdGhpY2tuZXNzJzogJ292ZXJsaW5lVGhpY2tuZXNzJyxcbiAgcGFpbnRPcmRlcjogMSxcbiAgJ3BhaW50LW9yZGVyJzogJ3BhaW50T3JkZXInLFxuICBwYW5vc2UxOiAwLFxuICAncGFub3NlLTEnOiAncGFub3NlMScsXG4gIHBhdGhMZW5ndGg6IDEsXG4gIHBhdHRlcm5Db250ZW50VW5pdHM6IDEsXG4gIHBhdHRlcm5UcmFuc2Zvcm06IDEsXG4gIHBhdHRlcm5Vbml0czogMSxcbiAgcG9pbnRlckV2ZW50czogMSxcbiAgJ3BvaW50ZXItZXZlbnRzJzogJ3BvaW50ZXJFdmVudHMnLFxuICBwb2ludHM6IDAsXG4gIHBvaW50c0F0WDogMSxcbiAgcG9pbnRzQXRZOiAxLFxuICBwb2ludHNBdFo6IDEsXG4gIHByZWZpeDogMCxcbiAgcHJlc2VydmVBbHBoYTogMSxcbiAgcHJlc2VydmVBc3BlY3RSYXRpbzogMSxcbiAgcHJpbWl0aXZlVW5pdHM6IDEsXG4gIHByb3BlcnR5OiAwLFxuICByOiAwLFxuICByYWRpdXM6IDAsXG4gIHJlZlg6IDEsXG4gIHJlZlk6IDEsXG4gIHJlbmRlcmluZ0ludGVudDogMSxcbiAgJ3JlbmRlcmluZy1pbnRlbnQnOiAncmVuZGVyaW5nSW50ZW50JyxcbiAgcmVwZWF0Q291bnQ6IDEsXG4gIHJlcGVhdER1cjogMSxcbiAgcmVxdWlyZWRFeHRlbnNpb25zOiAxLFxuICByZXF1aXJlZEZlYXR1cmVzOiAxLFxuICByZXNvdXJjZTogMCxcbiAgcmVzdGFydDogMCxcbiAgcmVzdWx0OiAwLFxuICByZXN1bHRzOiAwLFxuICByb3RhdGU6IDAsXG4gIHJ4OiAwLFxuICByeTogMCxcbiAgc2NhbGU6IDAsXG4gIHNlY3VyaXR5OiAwLFxuICBzZWVkOiAwLFxuICBzaGFwZVJlbmRlcmluZzogMSxcbiAgJ3NoYXBlLXJlbmRlcmluZyc6ICdzaGFwZVJlbmRlcmluZycsXG4gIHNsb3BlOiAwLFxuICBzcGFjaW5nOiAwLFxuICBzcGVjdWxhckNvbnN0YW50OiAxLFxuICBzcGVjdWxhckV4cG9uZW50OiAxLFxuICBzcGVlZDogMCxcbiAgc3ByZWFkTWV0aG9kOiAxLFxuICBzdGFydE9mZnNldDogMSxcbiAgc3RkRGV2aWF0aW9uOiAxLFxuICBzdGVtaDogMCxcbiAgc3RlbXY6IDAsXG4gIHN0aXRjaFRpbGVzOiAxLFxuICBzdG9wQ29sb3I6IDEsXG4gICdzdG9wLWNvbG9yJzogJ3N0b3BDb2xvcicsXG4gIHN0b3BPcGFjaXR5OiAxLFxuICAnc3RvcC1vcGFjaXR5JzogJ3N0b3BPcGFjaXR5JyxcbiAgc3RyaWtldGhyb3VnaFBvc2l0aW9uOiAxLFxuICAnc3RyaWtldGhyb3VnaC1wb3NpdGlvbic6ICdzdHJpa2V0aHJvdWdoUG9zaXRpb24nLFxuICBzdHJpa2V0aHJvdWdoVGhpY2tuZXNzOiAxLFxuICAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnOiAnc3RyaWtldGhyb3VnaFRoaWNrbmVzcycsXG4gIHN0cmluZzogMCxcbiAgc3Ryb2tlOiAwLFxuICBzdHJva2VEYXNoYXJyYXk6IDEsXG4gICdzdHJva2UtZGFzaGFycmF5JzogJ3N0cm9rZURhc2hhcnJheScsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDEsXG4gICdzdHJva2UtZGFzaG9mZnNldCc6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgc3Ryb2tlTGluZWNhcDogMSxcbiAgJ3N0cm9rZS1saW5lY2FwJzogJ3N0cm9rZUxpbmVjYXAnLFxuICBzdHJva2VMaW5lam9pbjogMSxcbiAgJ3N0cm9rZS1saW5lam9pbic6ICdzdHJva2VMaW5lam9pbicsXG4gIHN0cm9rZU1pdGVybGltaXQ6IDEsXG4gICdzdHJva2UtbWl0ZXJsaW1pdCc6ICdzdHJva2VNaXRlcmxpbWl0JyxcbiAgc3Ryb2tlV2lkdGg6IDEsXG4gICdzdHJva2Utd2lkdGgnOiAnc3Ryb2tlV2lkdGgnLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICAnc3Ryb2tlLW9wYWNpdHknOiAnc3Ryb2tlT3BhY2l0eScsXG4gIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZzogMSxcbiAgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nOiAxLFxuICBzdXJmYWNlU2NhbGU6IDEsXG4gIHN5c3RlbUxhbmd1YWdlOiAxLFxuICB0YWJsZVZhbHVlczogMSxcbiAgdGFyZ2V0WDogMSxcbiAgdGFyZ2V0WTogMSxcbiAgdGV4dEFuY2hvcjogMSxcbiAgJ3RleHQtYW5jaG9yJzogJ3RleHRBbmNob3InLFxuICB0ZXh0RGVjb3JhdGlvbjogMSxcbiAgJ3RleHQtZGVjb3JhdGlvbic6ICd0ZXh0RGVjb3JhdGlvbicsXG4gIHRleHRMZW5ndGg6IDEsXG4gIHRleHRSZW5kZXJpbmc6IDEsXG4gICd0ZXh0LXJlbmRlcmluZyc6ICd0ZXh0UmVuZGVyaW5nJyxcbiAgdG86IDAsXG4gIHRyYW5zZm9ybTogMCxcbiAgdHlwZW9mOiAwLFxuICB1MTogMCxcbiAgdTI6IDAsXG4gIHVuZGVybGluZVBvc2l0aW9uOiAxLFxuICAndW5kZXJsaW5lLXBvc2l0aW9uJzogJ3VuZGVybGluZVBvc2l0aW9uJyxcbiAgdW5kZXJsaW5lVGhpY2tuZXNzOiAxLFxuICAndW5kZXJsaW5lLXRoaWNrbmVzcyc6ICd1bmRlcmxpbmVUaGlja25lc3MnLFxuICB1bmljb2RlOiAwLFxuICB1bmljb2RlQmlkaTogMSxcbiAgJ3VuaWNvZGUtYmlkaSc6ICd1bmljb2RlQmlkaScsXG4gIHVuaWNvZGVSYW5nZTogMSxcbiAgJ3VuaWNvZGUtcmFuZ2UnOiAndW5pY29kZVJhbmdlJyxcbiAgdW5pdHNQZXJFbTogMSxcbiAgJ3VuaXRzLXBlci1lbSc6ICd1bml0c1BlckVtJyxcbiAgdW5zZWxlY3RhYmxlOiAwLFxuICB2QWxwaGFiZXRpYzogMSxcbiAgJ3YtYWxwaGFiZXRpYyc6ICd2QWxwaGFiZXRpYycsXG4gIHZhbHVlczogMCxcbiAgdmVjdG9yRWZmZWN0OiAxLFxuICAndmVjdG9yLWVmZmVjdCc6ICd2ZWN0b3JFZmZlY3QnLFxuICB2ZXJzaW9uOiAwLFxuICB2ZXJ0QWR2WTogMSxcbiAgJ3ZlcnQtYWR2LXknOiAndmVydEFkdlknLFxuICB2ZXJ0T3JpZ2luWDogMSxcbiAgJ3ZlcnQtb3JpZ2luLXgnOiAndmVydE9yaWdpblgnLFxuICB2ZXJ0T3JpZ2luWTogMSxcbiAgJ3ZlcnQtb3JpZ2luLXknOiAndmVydE9yaWdpblknLFxuICB2SGFuZ2luZzogMSxcbiAgJ3YtaGFuZ2luZyc6ICd2SGFuZ2luZycsXG4gIHZJZGVvZ3JhcGhpYzogMSxcbiAgJ3YtaWRlb2dyYXBoaWMnOiAndklkZW9ncmFwaGljJyxcbiAgdmlld0JveDogMSxcbiAgdmlld1RhcmdldDogMSxcbiAgdmlzaWJpbGl0eTogMCxcbiAgdk1hdGhlbWF0aWNhbDogMSxcbiAgJ3YtbWF0aGVtYXRpY2FsJzogJ3ZNYXRoZW1hdGljYWwnLFxuICB2b2NhYjogMCxcbiAgd2lkdGhzOiAwLFxuICB3b3JkU3BhY2luZzogMSxcbiAgJ3dvcmQtc3BhY2luZyc6ICd3b3JkU3BhY2luZycsXG4gIHdyaXRpbmdNb2RlOiAxLFxuICAnd3JpdGluZy1tb2RlJzogJ3dyaXRpbmdNb2RlJyxcbiAgeDE6IDAsXG4gIHgyOiAwLFxuICB4OiAwLFxuICB4Q2hhbm5lbFNlbGVjdG9yOiAxLFxuICB4SGVpZ2h0OiAxLFxuICAneC1oZWlnaHQnOiAneEhlaWdodCcsXG4gIHhsaW5rQWN0dWF0ZTogMSxcbiAgJ3hsaW5rOmFjdHVhdGUnOiAneGxpbmtBY3R1YXRlJyxcbiAgeGxpbmtBcmNyb2xlOiAxLFxuICAneGxpbms6YXJjcm9sZSc6ICd4bGlua0FyY3JvbGUnLFxuICB4bGlua0hyZWY6IDEsXG4gICd4bGluazpocmVmJzogJ3hsaW5rSHJlZicsXG4gIHhsaW5rUm9sZTogMSxcbiAgJ3hsaW5rOnJvbGUnOiAneGxpbmtSb2xlJyxcbiAgeGxpbmtTaG93OiAxLFxuICAneGxpbms6c2hvdyc6ICd4bGlua1Nob3cnLFxuICB4bGlua1RpdGxlOiAxLFxuICAneGxpbms6dGl0bGUnOiAneGxpbmtUaXRsZScsXG4gIHhsaW5rVHlwZTogMSxcbiAgJ3hsaW5rOnR5cGUnOiAneGxpbmtUeXBlJyxcbiAgeG1sQmFzZTogMSxcbiAgJ3htbDpiYXNlJzogJ3htbEJhc2UnLFxuICB4bWxMYW5nOiAxLFxuICAneG1sOmxhbmcnOiAneG1sTGFuZycsXG4gIHhtbG5zOiAwLFxuICAneG1sOnNwYWNlJzogJ3htbFNwYWNlJyxcbiAgeG1sbnNYbGluazogMSxcbiAgJ3htbG5zOnhsaW5rJzogJ3htbG5zWGxpbmsnLFxuICB4bWxTcGFjZTogMSxcbiAgeTE6IDAsXG4gIHkyOiAwLFxuICB5OiAwLFxuICB5Q2hhbm5lbFNlbGVjdG9yOiAxLFxuICB6OiAwLFxuICB6b29tQW5kUGFuOiAxXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIHN0eWxlX3RvX29iamVjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJzdHlsZS10by1vYmplY3RcIikpO1xudmFyIHV0aWxpdGllc18xID0gcmVxdWlyZShcIi4vdXRpbGl0aWVzXCIpO1xuZnVuY3Rpb24gU3R5bGVUb0pTKHN0eWxlLCBvcHRpb25zKSB7XG4gICAgdmFyIG91dHB1dCA9IHt9O1xuICAgIGlmICghc3R5bGUgfHwgdHlwZW9mIHN0eWxlICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbiAgICBzdHlsZV90b19vYmplY3RfMVtcImRlZmF1bHRcIl0oc3R5bGUsIGZ1bmN0aW9uIChwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHByb3BlcnR5ICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBvdXRwdXRbdXRpbGl0aWVzXzEuY2FtZWxDYXNlKHByb3BlcnR5LCBvcHRpb25zKV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvdXRwdXQ7XG59XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IFN0eWxlVG9KUztcbiIsInZhciBwYXJzZSA9IHJlcXVpcmUoJ2lubGluZS1zdHlsZS1wYXJzZXInKTtcblxuLyoqXG4gKiBQYXJzZXMgaW5saW5lIHN0eWxlIHRvIG9iamVjdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gcmV0dXJucyB7ICdsaW5lLWhlaWdodCc6ICc0MicgfVxuICogU3R5bGVUb09iamVjdCgnbGluZS1oZWlnaHQ6IDQyOycpO1xuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gICAgICBzdHlsZSAgICAgIC0gVGhlIGlubGluZSBzdHlsZS5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSAgICBbaXRlcmF0b3JdIC0gVGhlIGl0ZXJhdG9yIGZ1bmN0aW9uLlxuICogQHJldHVybiB7bnVsbHxPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIFN0eWxlVG9PYmplY3Qoc3R5bGUsIGl0ZXJhdG9yKSB7XG4gIHZhciBvdXRwdXQgPSBudWxsO1xuICBpZiAoIXN0eWxlIHx8IHR5cGVvZiBzdHlsZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgdmFyIGRlY2xhcmF0aW9uO1xuICB2YXIgZGVjbGFyYXRpb25zID0gcGFyc2Uoc3R5bGUpO1xuICB2YXIgaGFzSXRlcmF0b3IgPSB0eXBlb2YgaXRlcmF0b3IgPT09ICdmdW5jdGlvbic7XG4gIHZhciBwcm9wZXJ0eTtcbiAgdmFyIHZhbHVlO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBkZWNsYXJhdGlvbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBkZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uc1tpXTtcbiAgICBwcm9wZXJ0eSA9IGRlY2xhcmF0aW9uLnByb3BlcnR5O1xuICAgIHZhbHVlID0gZGVjbGFyYXRpb24udmFsdWU7XG5cbiAgICBpZiAoaGFzSXRlcmF0b3IpIHtcbiAgICAgIGl0ZXJhdG9yKHByb3BlcnR5LCB2YWx1ZSwgZGVjbGFyYXRpb24pO1xuICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgIG91dHB1dCB8fCAob3V0cHV0ID0ge30pO1xuICAgICAgb3V0cHV0W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU3R5bGVUb09iamVjdDtcbiIsIi8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL2dyYW1tYXIuaHRtbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3Zpc2lvbm1lZGlhL2Nzcy1wYXJzZS9wdWxsLzQ5I2lzc3VlY29tbWVudC0zMDA4ODAyN1xudmFyIENPTU1FTlRfUkVHRVggPSAvXFwvXFwqW14qXSpcXCorKFteLypdW14qXSpcXCorKSpcXC8vZztcblxudmFyIE5FV0xJTkVfUkVHRVggPSAvXFxuL2c7XG52YXIgV0hJVEVTUEFDRV9SRUdFWCA9IC9eXFxzKi87XG5cbi8vIGRlY2xhcmF0aW9uXG52YXIgUFJPUEVSVFlfUkVHRVggPSAvXihcXCo/Wy0jLypcXFxcXFx3XSsoXFxbWzAtOWEtel8tXStcXF0pPylcXHMqLztcbnZhciBDT0xPTl9SRUdFWCA9IC9eOlxccyovO1xudmFyIFZBTFVFX1JFR0VYID0gL14oKD86Jyg/OlxcXFwnfC4pKj8nfFwiKD86XFxcXFwifC4pKj9cInxcXChbXildKj9cXCl8W159O10pKykvO1xudmFyIFNFTUlDT0xPTl9SRUdFWCA9IC9eWztcXHNdKi87XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9UcmltI1BvbHlmaWxsXG52YXIgVFJJTV9SRUdFWCA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vLyBzdHJpbmdzXG52YXIgTkVXTElORSA9ICdcXG4nO1xudmFyIEZPUldBUkRfU0xBU0ggPSAnLyc7XG52YXIgQVNURVJJU0sgPSAnKic7XG52YXIgRU1QVFlfU1RSSU5HID0gJyc7XG5cbi8vIHR5cGVzXG52YXIgVFlQRV9DT01NRU5UID0gJ2NvbW1lbnQnO1xudmFyIFRZUEVfREVDTEFSQVRJT04gPSAnZGVjbGFyYXRpb24nO1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHlsZVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHJldHVybiB7T2JqZWN0W119XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9XG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihzdHlsZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHN0eWxlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmICghc3R5bGUpIHJldHVybiBbXTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvKipcbiAgICogUG9zaXRpb25hbC5cbiAgICovXG4gIHZhciBsaW5lbm8gPSAxO1xuICB2YXIgY29sdW1uID0gMTtcblxuICAvKipcbiAgICogVXBkYXRlIGxpbmVubyBhbmQgY29sdW1uIGJhc2VkIG9uIGBzdHJgLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVQb3NpdGlvbihzdHIpIHtcbiAgICB2YXIgbGluZXMgPSBzdHIubWF0Y2goTkVXTElORV9SRUdFWCk7XG4gICAgaWYgKGxpbmVzKSBsaW5lbm8gKz0gbGluZXMubGVuZ3RoO1xuICAgIHZhciBpID0gc3RyLmxhc3RJbmRleE9mKE5FV0xJTkUpO1xuICAgIGNvbHVtbiA9IH5pID8gc3RyLmxlbmd0aCAtIGkgOiBjb2x1bW4gKyBzdHIubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmsgcG9zaXRpb24gYW5kIHBhdGNoIGBub2RlLnBvc2l0aW9uYC5cbiAgICpcbiAgICogQHJldHVybiB7RnVuY3Rpb259XG4gICAqL1xuICBmdW5jdGlvbiBwb3NpdGlvbigpIHtcbiAgICB2YXIgc3RhcnQgPSB7IGxpbmU6IGxpbmVubywgY29sdW1uOiBjb2x1bW4gfTtcbiAgICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgICAgbm9kZS5wb3NpdGlvbiA9IG5ldyBQb3NpdGlvbihzdGFydCk7XG4gICAgICB3aGl0ZXNwYWNlKCk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIHBvc2l0aW9uIGluZm9ybWF0aW9uIGZvciBhIG5vZGUuXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcHJvcGVydHkge09iamVjdH0gc3RhcnRcbiAgICogQHByb3BlcnR5IHtPYmplY3R9IGVuZFxuICAgKiBAcHJvcGVydHkge3VuZGVmaW5lZHxTdHJpbmd9IHNvdXJjZVxuICAgKi9cbiAgZnVuY3Rpb24gUG9zaXRpb24oc3RhcnQpIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSB7IGxpbmU6IGxpbmVubywgY29sdW1uOiBjb2x1bW4gfTtcbiAgICB0aGlzLnNvdXJjZSA9IG9wdGlvbnMuc291cmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vbi1lbnVtZXJhYmxlIHNvdXJjZSBzdHJpbmcuXG4gICAqL1xuICBQb3NpdGlvbi5wcm90b3R5cGUuY29udGVudCA9IHN0eWxlO1xuXG4gIHZhciBlcnJvcnNMaXN0ID0gW107XG5cbiAgLyoqXG4gICAqIEVycm9yIGBtc2dgLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cbiAgZnVuY3Rpb24gZXJyb3IobXNnKSB7XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgIG9wdGlvbnMuc291cmNlICsgJzonICsgbGluZW5vICsgJzonICsgY29sdW1uICsgJzogJyArIG1zZ1xuICAgICk7XG4gICAgZXJyLnJlYXNvbiA9IG1zZztcbiAgICBlcnIuZmlsZW5hbWUgPSBvcHRpb25zLnNvdXJjZTtcbiAgICBlcnIubGluZSA9IGxpbmVubztcbiAgICBlcnIuY29sdW1uID0gY29sdW1uO1xuICAgIGVyci5zb3VyY2UgPSBzdHlsZTtcblxuICAgIGlmIChvcHRpb25zLnNpbGVudCkge1xuICAgICAgZXJyb3JzTGlzdC5wdXNoKGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWF0Y2ggYHJlYCBhbmQgcmV0dXJuIGNhcHR1cmVzLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVcbiAgICogQHJldHVybiB7dW5kZWZpbmVkfEFycmF5fVxuICAgKi9cbiAgZnVuY3Rpb24gbWF0Y2gocmUpIHtcbiAgICB2YXIgbSA9IHJlLmV4ZWMoc3R5bGUpO1xuICAgIGlmICghbSkgcmV0dXJuO1xuICAgIHZhciBzdHIgPSBtWzBdO1xuICAgIHVwZGF0ZVBvc2l0aW9uKHN0cik7XG4gICAgc3R5bGUgPSBzdHlsZS5zbGljZShzdHIubGVuZ3RoKTtcbiAgICByZXR1cm4gbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSB3aGl0ZXNwYWNlLlxuICAgKi9cbiAgZnVuY3Rpb24gd2hpdGVzcGFjZSgpIHtcbiAgICBtYXRjaChXSElURVNQQUNFX1JFR0VYKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBjb21tZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3RbXX0gW3J1bGVzXVxuICAgKiBAcmV0dXJuIHtPYmplY3RbXX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbW1lbnRzKHJ1bGVzKSB7XG4gICAgdmFyIGM7XG4gICAgcnVsZXMgPSBydWxlcyB8fCBbXTtcbiAgICB3aGlsZSAoKGMgPSBjb21tZW50KCkpKSB7XG4gICAgICBpZiAoYyAhPT0gZmFsc2UpIHtcbiAgICAgICAgcnVsZXMucHVzaChjKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGNvbW1lbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICBmdW5jdGlvbiBjb21tZW50KCkge1xuICAgIHZhciBwb3MgPSBwb3NpdGlvbigpO1xuICAgIGlmIChGT1JXQVJEX1NMQVNIICE9IHN0eWxlLmNoYXJBdCgwKSB8fCBBU1RFUklTSyAhPSBzdHlsZS5jaGFyQXQoMSkpIHJldHVybjtcblxuICAgIHZhciBpID0gMjtcbiAgICB3aGlsZSAoXG4gICAgICBFTVBUWV9TVFJJTkcgIT0gc3R5bGUuY2hhckF0KGkpICYmXG4gICAgICAoQVNURVJJU0sgIT0gc3R5bGUuY2hhckF0KGkpIHx8IEZPUldBUkRfU0xBU0ggIT0gc3R5bGUuY2hhckF0KGkgKyAxKSlcbiAgICApIHtcbiAgICAgICsraTtcbiAgICB9XG4gICAgaSArPSAyO1xuXG4gICAgaWYgKEVNUFRZX1NUUklORyA9PT0gc3R5bGUuY2hhckF0KGkgLSAxKSkge1xuICAgICAgcmV0dXJuIGVycm9yKCdFbmQgb2YgY29tbWVudCBtaXNzaW5nJyk7XG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHN0eWxlLnNsaWNlKDIsIGkgLSAyKTtcbiAgICBjb2x1bW4gKz0gMjtcbiAgICB1cGRhdGVQb3NpdGlvbihzdHIpO1xuICAgIHN0eWxlID0gc3R5bGUuc2xpY2UoaSk7XG4gICAgY29sdW1uICs9IDI7XG5cbiAgICByZXR1cm4gcG9zKHtcbiAgICAgIHR5cGU6IFRZUEVfQ09NTUVOVCxcbiAgICAgIGNvbW1lbnQ6IHN0clxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cbiAgZnVuY3Rpb24gZGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIHBvcyA9IHBvc2l0aW9uKCk7XG5cbiAgICAvLyBwcm9wXG4gICAgdmFyIHByb3AgPSBtYXRjaChQUk9QRVJUWV9SRUdFWCk7XG4gICAgaWYgKCFwcm9wKSByZXR1cm47XG4gICAgY29tbWVudCgpO1xuXG4gICAgLy8gOlxuICAgIGlmICghbWF0Y2goQ09MT05fUkVHRVgpKSByZXR1cm4gZXJyb3IoXCJwcm9wZXJ0eSBtaXNzaW5nICc6J1wiKTtcblxuICAgIC8vIHZhbFxuICAgIHZhciB2YWwgPSBtYXRjaChWQUxVRV9SRUdFWCk7XG5cbiAgICB2YXIgcmV0ID0gcG9zKHtcbiAgICAgIHR5cGU6IFRZUEVfREVDTEFSQVRJT04sXG4gICAgICBwcm9wZXJ0eTogdHJpbShwcm9wWzBdLnJlcGxhY2UoQ09NTUVOVF9SRUdFWCwgRU1QVFlfU1RSSU5HKSksXG4gICAgICB2YWx1ZTogdmFsXG4gICAgICAgID8gdHJpbSh2YWxbMF0ucmVwbGFjZShDT01NRU5UX1JFR0VYLCBFTVBUWV9TVFJJTkcpKVxuICAgICAgICA6IEVNUFRZX1NUUklOR1xuICAgIH0pO1xuXG4gICAgLy8gO1xuICAgIG1hdGNoKFNFTUlDT0xPTl9SRUdFWCk7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGRlY2xhcmF0aW9ucy5cbiAgICpcbiAgICogQHJldHVybiB7T2JqZWN0W119XG4gICAqL1xuICBmdW5jdGlvbiBkZWNsYXJhdGlvbnMoKSB7XG4gICAgdmFyIGRlY2xzID0gW107XG5cbiAgICBjb21tZW50cyhkZWNscyk7XG5cbiAgICAvLyBkZWNsYXJhdGlvbnNcbiAgICB2YXIgZGVjbDtcbiAgICB3aGlsZSAoKGRlY2wgPSBkZWNsYXJhdGlvbigpKSkge1xuICAgICAgaWYgKGRlY2wgIT09IGZhbHNlKSB7XG4gICAgICAgIGRlY2xzLnB1c2goZGVjbCk7XG4gICAgICAgIGNvbW1lbnRzKGRlY2xzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVjbHM7XG4gIH1cblxuICB3aGl0ZXNwYWNlKCk7XG4gIHJldHVybiBkZWNsYXJhdGlvbnMoKTtcbn07XG5cbi8qKlxuICogVHJpbSBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIgPyBzdHIucmVwbGFjZShUUklNX1JFR0VYLCBFTVBUWV9TVFJJTkcpIDogRU1QVFlfU1RSSU5HO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jYW1lbENhc2UgPSB2b2lkIDA7XG52YXIgQ1VTVE9NX1BST1BFUlRZX1JFR0VYID0gL14tLVthLXpBLVowLTktXSskLztcbnZhciBIWVBIRU5fUkVHRVggPSAvLShbYS16XSkvZztcbnZhciBOT19IWVBIRU5fUkVHRVggPSAvXlteLV0rJC87XG52YXIgVkVORE9SX1BSRUZJWF9SRUdFWCA9IC9eLSh3ZWJraXR8bW96fG1zfG98a2h0bWwpLS87XG52YXIgc2tpcENhbWVsQ2FzZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgIHJldHVybiAhcHJvcGVydHkgfHxcbiAgICAgICAgTk9fSFlQSEVOX1JFR0VYLnRlc3QocHJvcGVydHkpIHx8XG4gICAgICAgIENVU1RPTV9QUk9QRVJUWV9SRUdFWC50ZXN0KHByb3BlcnR5KTtcbn07XG52YXIgY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uIChtYXRjaCwgY2hhcmFjdGVyKSB7XG4gICAgcmV0dXJuIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpO1xufTtcbnZhciB0cmltSHlwaGVuID0gZnVuY3Rpb24gKG1hdGNoLCBwcmVmaXgpIHsgcmV0dXJuIHByZWZpeCArIFwiLVwiOyB9O1xudmFyIGNhbWVsQ2FzZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgaWYgKHNraXBDYW1lbENhc2UocHJvcGVydHkpKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9XG4gICAgcHJvcGVydHkgPSBwcm9wZXJ0eS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghb3B0aW9ucy5yZWFjdENvbXBhdCkge1xuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5LnJlcGxhY2UoVkVORE9SX1BSRUZJWF9SRUdFWCwgdHJpbUh5cGhlbik7XG4gICAgfVxuICAgIHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKEhZUEhFTl9SRUdFWCwgY2FwaXRhbGl6ZSk7XG59O1xuZXhwb3J0cy5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG4iLCJpbXBvcnQgSFRNTERPTVBhcnNlciBmcm9tICcuL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgSFRNTERPTVBhcnNlcjtcbiIsIi8vIGNvbnN0YW50c1xudmFyIEhUTUwgPSAnaHRtbCc7XG52YXIgSEVBRCA9ICdoZWFkJztcbnZhciBCT0RZID0gJ2JvZHknO1xudmFyIEZJUlNUX1RBR19SRUdFWCA9IC88KFthLXpBLVpdK1swLTldPykvOyAvLyBlLmcuLCA8aDE+XG52YXIgSEVBRF9UQUdfUkVHRVggPSAvPGhlYWQuKj4vaTtcbnZhciBCT0RZX1RBR19SRUdFWCA9IC88Ym9keS4qPi9pO1xuXG4vLyBmYWxscyBiYWNrIHRvIGBwYXJzZUZyb21TdHJpbmdgIGlmIGBjcmVhdGVIVE1MRG9jdW1lbnRgIGNhbm5vdCBiZSB1c2VkXG52YXIgcGFyc2VGcm9tRG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAnVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgYGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudGAnXG4gICk7XG59O1xuXG52YXIgcGFyc2VGcm9tU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGBET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZ2AnXG4gICk7XG59O1xuXG4vKipcbiAqIERPTVBhcnNlciAocGVyZm9ybWFuY2U6IHNsb3cpLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0RPTVBhcnNlciNQYXJzaW5nX2FuX1NWR19vcl9IVE1MX2RvY3VtZW50XG4gKi9cbmlmICh0eXBlb2Ygd2luZG93LkRPTVBhcnNlciA9PT0gJ2Z1bmN0aW9uJykge1xuICB2YXIgZG9tUGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcbiAgdmFyIG1pbWVUeXBlID0gJ3RleHQvaHRtbCc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gSFRNTCBkb2N1bWVudCB1c2luZyBgRE9NUGFyc2VyLnBhcnNlRnJvbVN0cmluZ2AuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gaHRtbCAgICAgIC0gVGhlIEhUTUwgc3RyaW5nLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IFt0YWdOYW1lXSAtIFRoZSBlbGVtZW50IHRvIHJlbmRlciB0aGUgSFRNTCAod2l0aCAnYm9keScgYXMgZmFsbGJhY2spLlxuICAgKiBAcmV0dXJuIHtIVE1MRG9jdW1lbnR9XG4gICAqL1xuICBwYXJzZUZyb21TdHJpbmcgPSBmdW5jdGlvbiAoaHRtbCwgdGFnTmFtZSkge1xuICAgIGlmICh0YWdOYW1lKSB7XG4gICAgICBodG1sID0gJzwnICsgdGFnTmFtZSArICc+JyArIGh0bWwgKyAnPC8nICsgdGFnTmFtZSArICc+JztcbiAgICB9XG5cbiAgICByZXR1cm4gZG9tUGFyc2VyLnBhcnNlRnJvbVN0cmluZyhodG1sLCBtaW1lVHlwZSk7XG4gIH07XG5cbiAgcGFyc2VGcm9tRG9jdW1lbnQgPSBwYXJzZUZyb21TdHJpbmc7XG59XG5cbi8qKlxuICogRE9NSW1wbGVtZW50YXRpb24gKHBlcmZvcm1hbmNlOiBmYWlyKS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9ET01JbXBsZW1lbnRhdGlvbi9jcmVhdGVIVE1MRG9jdW1lbnRcbiAqL1xuaWYgKGRvY3VtZW50LmltcGxlbWVudGF0aW9uKSB7XG4gIHZhciBpc0lFID0gcmVxdWlyZSgnLi91dGlsaXRpZXMnKS5pc0lFO1xuXG4gIC8vIHRpdGxlIHBhcmFtZXRlciBpcyByZXF1aXJlZCBpbiBJRVxuICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2ZmOTc1NDU3KHY9dnMuODUpLmFzcHhcbiAgdmFyIGRvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChcbiAgICBpc0lFKCkgPyAnaHRtbC1kb20tcGFyc2VyJyA6IHVuZGVmaW5lZFxuICApO1xuXG4gIC8qKlxuICAgKiBVc2UgSFRNTCBkb2N1bWVudCBjcmVhdGVkIGJ5IGBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnRgLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IGh0bWwgICAgICAtIFRoZSBIVE1MIHN0cmluZy5cbiAgICogQHBhcmFtICB7c3RyaW5nfSBbdGFnTmFtZV0gLSBUaGUgZWxlbWVudCB0byByZW5kZXIgdGhlIEhUTUwgKHdpdGggJ2JvZHknIGFzIGZhbGxiYWNrKS5cbiAgICogQHJldHVybiB7SFRNTERvY3VtZW50fVxuICAgKi9cbiAgcGFyc2VGcm9tRG9jdW1lbnQgPSBmdW5jdGlvbiAoaHRtbCwgdGFnTmFtZSkge1xuICAgIGlmICh0YWdOYW1lKSB7XG4gICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpWzBdLmlubmVySFRNTCA9IGh0bWw7XG4gICAgICByZXR1cm4gZG9jO1xuICAgIH1cblxuICAgIGRvYy5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gZG9jO1xuICB9O1xufVxuXG4vKipcbiAqIFRlbXBsYXRlIChwZXJmb3JtYW5jZTogZmFzdCkuXG4gKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGVtcGxhdGVcbiAqL1xudmFyIHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcbnZhciBwYXJzZUZyb21UZW1wbGF0ZTtcblxuaWYgKHRlbXBsYXRlLmNvbnRlbnQpIHtcbiAgLyoqXG4gICAqIFVzZXMgYSB0ZW1wbGF0ZSBlbGVtZW50IChjb250ZW50IGZyYWdtZW50KSB0byBwYXJzZSBIVE1MLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IGh0bWwgLSBUaGUgSFRNTCBzdHJpbmcuXG4gICAqIEByZXR1cm4ge05vZGVMaXN0fVxuICAgKi9cbiAgcGFyc2VGcm9tVGVtcGxhdGUgPSBmdW5jdGlvbiAoaHRtbCkge1xuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XG4gICAgcmV0dXJuIHRlbXBsYXRlLmNvbnRlbnQuY2hpbGROb2RlcztcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgSFRNTCBzdHJpbmcgdG8gRE9NIG5vZGVzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gICBodG1sIC0gSFRNTCBtYXJrdXAuXG4gKiBAcmV0dXJuIHtOb2RlTGlzdH1cbiAqL1xuZnVuY3Rpb24gZG9tcGFyc2VyKGh0bWwpIHtcbiAgdmFyIGZpcnN0VGFnTmFtZTtcbiAgdmFyIG1hdGNoID0gaHRtbC5tYXRjaChGSVJTVF9UQUdfUkVHRVgpO1xuXG4gIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xuICAgIGZpcnN0VGFnTmFtZSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICB2YXIgZG9jO1xuICB2YXIgZWxlbWVudDtcbiAgdmFyIGVsZW1lbnRzO1xuXG4gIHN3aXRjaCAoZmlyc3RUYWdOYW1lKSB7XG4gICAgY2FzZSBIVE1MOlxuICAgICAgZG9jID0gcGFyc2VGcm9tU3RyaW5nKGh0bWwpO1xuXG4gICAgICAvLyB0aGUgY3JlYXRlZCBkb2N1bWVudCBtYXkgY29tZSB3aXRoIGZpbGxlciBoZWFkL2JvZHkgZWxlbWVudHMsXG4gICAgICAvLyBzbyBtYWtlIHN1cmUgdG8gcmVtb3ZlIHRoZW0gaWYgdGhleSBkb24ndCBhY3R1YWxseSBleGlzdFxuICAgICAgaWYgKCFIRUFEX1RBR19SRUdFWC50ZXN0KGh0bWwpKSB7XG4gICAgICAgIGVsZW1lbnQgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoSEVBRClbMF07XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghQk9EWV9UQUdfUkVHRVgudGVzdChodG1sKSkge1xuICAgICAgICBlbGVtZW50ID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKEJPRFkpWzBdO1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKEhUTUwpO1xuXG4gICAgY2FzZSBIRUFEOlxuICAgIGNhc2UgQk9EWTpcbiAgICAgIGVsZW1lbnRzID0gcGFyc2VGcm9tRG9jdW1lbnQoaHRtbCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZmlyc3RUYWdOYW1lKTtcblxuICAgICAgLy8gaWYgdGhlcmUncyBhIHNpYmxpbmcgZWxlbWVudCwgdGhlbiByZXR1cm4gYm90aCBlbGVtZW50c1xuICAgICAgaWYgKEJPRFlfVEFHX1JFR0VYLnRlc3QoaHRtbCkgJiYgSEVBRF9UQUdfUkVHRVgudGVzdChodG1sKSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudHNbMF0ucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuXG4gICAgLy8gbG93LWxldmVsIHRhZyBvciB0ZXh0XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChwYXJzZUZyb21UZW1wbGF0ZSkge1xuICAgICAgICByZXR1cm4gcGFyc2VGcm9tVGVtcGxhdGUoaHRtbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZUZyb21Eb2N1bWVudChodG1sLCBCT0RZKS5nZXRFbGVtZW50c0J5VGFnTmFtZShCT0RZKVswXVxuICAgICAgICAuY2hpbGROb2RlcztcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvbXBhcnNlcjtcbiIsIi8qKlxuICogU1ZHIGVsZW1lbnRzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9TVkcvRWxlbWVudCNTVkdfZWxlbWVudHNfQV90b19afVxuICovXG52YXIgQ0FTRV9TRU5TSVRJVkVfVEFHX05BTUVTID0gW1xuICAnYW5pbWF0ZU1vdGlvbicsXG4gICdhbmltYXRlVHJhbnNmb3JtJyxcbiAgJ2NsaXBQYXRoJyxcbiAgJ2ZlQmxlbmQnLFxuICAnZmVDb2xvck1hdHJpeCcsXG4gICdmZUNvbXBvbmVudFRyYW5zZmVyJyxcbiAgJ2ZlQ29tcG9zaXRlJyxcbiAgJ2ZlQ29udm9sdmVNYXRyaXgnLFxuICAnZmVEaWZmdXNlTGlnaHRpbmcnLFxuICAnZmVEaXNwbGFjZW1lbnRNYXAnLFxuICAnZmVEcm9wU2hhZG93JyxcbiAgJ2ZlRmxvb2QnLFxuICAnZmVGdW5jQScsXG4gICdmZUZ1bmNCJyxcbiAgJ2ZlRnVuY0cnLFxuICAnZmVGdW5jUicsXG4gICdmZUdhdXNzYWluQmx1cicsXG4gICdmZUltYWdlJyxcbiAgJ2ZlTWVyZ2UnLFxuICAnZmVNZXJnZU5vZGUnLFxuICAnZmVNb3JwaG9sb2d5JyxcbiAgJ2ZlT2Zmc2V0JyxcbiAgJ2ZlUG9pbnRMaWdodCcsXG4gICdmZVNwZWN1bGFyTGlnaHRpbmcnLFxuICAnZmVTcG90TGlnaHQnLFxuICAnZmVUaWxlJyxcbiAgJ2ZlVHVyYnVsZW5jZScsXG4gICdmb3JlaWduT2JqZWN0JyxcbiAgJ2xpbmVhckdyYWRpZW50JyxcbiAgJ3JhZGlhbEdyYWRpZW50JyxcbiAgJ3RleHRQYXRoJ1xuXTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENBU0VfU0VOU0lUSVZFX1RBR19OQU1FUzogQ0FTRV9TRU5TSVRJVkVfVEFHX05BTUVTXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2xvbmVOb2RlID0gZXhwb3J0cy5oYXNDaGlsZHJlbiA9IGV4cG9ydHMuaXNEb2N1bWVudCA9IGV4cG9ydHMuaXNEaXJlY3RpdmUgPSBleHBvcnRzLmlzQ29tbWVudCA9IGV4cG9ydHMuaXNUZXh0ID0gZXhwb3J0cy5pc0NEQVRBID0gZXhwb3J0cy5pc1RhZyA9IGV4cG9ydHMuRWxlbWVudCA9IGV4cG9ydHMuRG9jdW1lbnQgPSBleHBvcnRzLk5vZGVXaXRoQ2hpbGRyZW4gPSBleHBvcnRzLlByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IGV4cG9ydHMuQ29tbWVudCA9IGV4cG9ydHMuVGV4dCA9IGV4cG9ydHMuRGF0YU5vZGUgPSBleHBvcnRzLk5vZGUgPSB2b2lkIDA7XG52YXIgZG9tZWxlbWVudHR5cGVfMSA9IHJlcXVpcmUoXCJkb21lbGVtZW50dHlwZVwiKTtcbnZhciBub2RlVHlwZXMgPSBuZXcgTWFwKFtcbiAgICBbZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5UYWcsIDFdLFxuICAgIFtkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLlNjcmlwdCwgMV0sXG4gICAgW2RvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuU3R5bGUsIDFdLFxuICAgIFtkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLkRpcmVjdGl2ZSwgMV0sXG4gICAgW2RvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuVGV4dCwgM10sXG4gICAgW2RvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuQ0RBVEEsIDRdLFxuICAgIFtkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLkNvbW1lbnQsIDhdLFxuICAgIFtkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLlJvb3QsIDldLFxuXSk7XG4vKipcbiAqIFRoaXMgb2JqZWN0IHdpbGwgYmUgdXNlZCBhcyB0aGUgcHJvdG90eXBlIGZvciBOb2RlcyB3aGVuIGNyZWF0aW5nIGFcbiAqIERPTS1MZXZlbC0xLWNvbXBsaWFudCBzdHJ1Y3R1cmUuXG4gKi9cbnZhciBOb2RlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIG5vZGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTm9kZSh0eXBlKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIC8qKiBQYXJlbnQgb2YgdGhlIG5vZGUgKi9cbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgICAgICAvKiogUHJldmlvdXMgc2libGluZyAqL1xuICAgICAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgICAgICAvKiogTmV4dCBzaWJsaW5nICovXG4gICAgICAgIHRoaXMubmV4dCA9IG51bGw7XG4gICAgICAgIC8qKiBUaGUgc3RhcnQgaW5kZXggb2YgdGhlIG5vZGUuIFJlcXVpcmVzIGB3aXRoU3RhcnRJbmRpY2VzYCBvbiB0aGUgaGFuZGxlciB0byBiZSBgdHJ1ZS4gKi9cbiAgICAgICAgdGhpcy5zdGFydEluZGV4ID0gbnVsbDtcbiAgICAgICAgLyoqIFRoZSBlbmQgaW5kZXggb2YgdGhlIG5vZGUuIFJlcXVpcmVzIGB3aXRoRW5kSW5kaWNlc2Agb24gdGhlIGhhbmRsZXIgdG8gYmUgYHRydWUuICovXG4gICAgICAgIHRoaXMuZW5kSW5kZXggPSBudWxsO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwibm9kZVR5cGVcIiwge1xuICAgICAgICAvLyBSZWFkLW9ubHkgYWxpYXNlc1xuICAgICAgICAvKipcbiAgICAgICAgICogW0RPTSBzcGVjXShodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ub2RlLW5vZGV0eXBlKS1jb21wYXRpYmxlXG4gICAgICAgICAqIG5vZGUge0BsaW5rIHR5cGV9LlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gbm9kZVR5cGVzLmdldCh0aGlzLnR5cGUpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAxO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcInBhcmVudE5vZGVcIiwge1xuICAgICAgICAvLyBSZWFkLXdyaXRlIGFsaWFzZXMgZm9yIHByb3BlcnRpZXNcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNhbWUgYXMge0BsaW5rIHBhcmVudH0uXG4gICAgICAgICAqIFtET00gc3BlY10oaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnKS1jb21wYXRpYmxlIGFsaWFzLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwicHJldmlvdXNTaWJsaW5nXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNhbWUgYXMge0BsaW5rIHByZXZ9LlxuICAgICAgICAgKiBbRE9NIHNwZWNdKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZyktY29tcGF0aWJsZSBhbGlhcy5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJldjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJldikge1xuICAgICAgICAgICAgdGhpcy5wcmV2ID0gcHJldjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJuZXh0U2libGluZ1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTYW1lIGFzIHtAbGluayBuZXh0fS5cbiAgICAgICAgICogW0RPTSBzcGVjXShodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcpLWNvbXBhdGlibGUgYWxpYXMuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5leHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dCA9IG5leHQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBDbG9uZSB0aGlzIG5vZGUsIGFuZCBvcHRpb25hbGx5IGl0cyBjaGlsZHJlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZWN1cnNpdmUgQ2xvbmUgY2hpbGQgbm9kZXMgYXMgd2VsbC5cbiAgICAgKiBAcmV0dXJucyBBIGNsb25lIG9mIHRoZSBub2RlLlxuICAgICAqL1xuICAgIE5vZGUucHJvdG90eXBlLmNsb25lTm9kZSA9IGZ1bmN0aW9uIChyZWN1cnNpdmUpIHtcbiAgICAgICAgaWYgKHJlY3Vyc2l2ZSA9PT0gdm9pZCAwKSB7IHJlY3Vyc2l2ZSA9IGZhbHNlOyB9XG4gICAgICAgIHJldHVybiBjbG9uZU5vZGUodGhpcywgcmVjdXJzaXZlKTtcbiAgICB9O1xuICAgIHJldHVybiBOb2RlO1xufSgpKTtcbmV4cG9ydHMuTm9kZSA9IE5vZGU7XG4vKipcbiAqIEEgbm9kZSB0aGF0IGNvbnRhaW5zIHNvbWUgZGF0YS5cbiAqL1xudmFyIERhdGFOb2RlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhEYXRhTm9kZSwgX3N1cGVyKTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgbm9kZVxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSBjb250ZW50IG9mIHRoZSBkYXRhIG5vZGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBEYXRhTm9kZSh0eXBlLCBkYXRhKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5cGUpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhTm9kZS5wcm90b3R5cGUsIFwibm9kZVZhbHVlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNhbWUgYXMge0BsaW5rIGRhdGF9LlxuICAgICAgICAgKiBbRE9NIHNwZWNdKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZyktY29tcGF0aWJsZSBhbGlhcy5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBEYXRhTm9kZTtcbn0oTm9kZSkpO1xuZXhwb3J0cy5EYXRhTm9kZSA9IERhdGFOb2RlO1xuLyoqXG4gKiBUZXh0IHdpdGhpbiB0aGUgZG9jdW1lbnQuXG4gKi9cbnZhciBUZXh0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhUZXh0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRleHQoZGF0YSkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5UZXh0LCBkYXRhKSB8fCB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gVGV4dDtcbn0oRGF0YU5vZGUpKTtcbmV4cG9ydHMuVGV4dCA9IFRleHQ7XG4vKipcbiAqIENvbW1lbnRzIHdpdGhpbiB0aGUgZG9jdW1lbnQuXG4gKi9cbnZhciBDb21tZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDb21tZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENvbW1lbnQoZGF0YSkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5Db21tZW50LCBkYXRhKSB8fCB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gQ29tbWVudDtcbn0oRGF0YU5vZGUpKTtcbmV4cG9ydHMuQ29tbWVudCA9IENvbW1lbnQ7XG4vKipcbiAqIFByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCBpbmNsdWRpbmcgZG9jIHR5cGVzLlxuICovXG52YXIgUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUHJvY2Vzc2luZ0luc3RydWN0aW9uKG5hbWUsIGRhdGEpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5EaXJlY3RpdmUsIGRhdGEpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb247XG59KERhdGFOb2RlKSk7XG5leHBvcnRzLlByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IFByb2Nlc3NpbmdJbnN0cnVjdGlvbjtcbi8qKlxuICogQSBgTm9kZWAgdGhhdCBjYW4gaGF2ZSBjaGlsZHJlbi5cbiAqL1xudmFyIE5vZGVXaXRoQ2hpbGRyZW4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE5vZGVXaXRoQ2hpbGRyZW4sIF9zdXBlcik7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHR5cGUgVHlwZSBvZiB0aGUgbm9kZS5cbiAgICAgKiBAcGFyYW0gY2hpbGRyZW4gQ2hpbGRyZW4gb2YgdGhlIG5vZGUuIE9ubHkgY2VydGFpbiBub2RlIHR5cGVzIGNhbiBoYXZlIGNoaWxkcmVuLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIE5vZGVXaXRoQ2hpbGRyZW4odHlwZSwgY2hpbGRyZW4pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHlwZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZVdpdGhDaGlsZHJlbi5wcm90b3R5cGUsIFwiZmlyc3RDaGlsZFwiLCB7XG4gICAgICAgIC8vIEFsaWFzZXNcbiAgICAgICAgLyoqIEZpcnN0IGNoaWxkIG9mIHRoZSBub2RlLiAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSB0aGlzLmNoaWxkcmVuWzBdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGVXaXRoQ2hpbGRyZW4ucHJvdG90eXBlLCBcImxhc3RDaGlsZFwiLCB7XG4gICAgICAgIC8qKiBMYXN0IGNoaWxkIG9mIHRoZSBub2RlLiAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlV2l0aENoaWxkcmVuLnByb3RvdHlwZSwgXCJjaGlsZE5vZGVzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNhbWUgYXMge0BsaW5rIGNoaWxkcmVufS5cbiAgICAgICAgICogW0RPTSBzcGVjXShodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcpLWNvbXBhdGlibGUgYWxpYXMuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIE5vZGVXaXRoQ2hpbGRyZW47XG59KE5vZGUpKTtcbmV4cG9ydHMuTm9kZVdpdGhDaGlsZHJlbiA9IE5vZGVXaXRoQ2hpbGRyZW47XG4vKipcbiAqIFRoZSByb290IG5vZGUgb2YgdGhlIGRvY3VtZW50LlxuICovXG52YXIgRG9jdW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKERvY3VtZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIERvY3VtZW50KGNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLlJvb3QsIGNoaWxkcmVuKSB8fCB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gRG9jdW1lbnQ7XG59KE5vZGVXaXRoQ2hpbGRyZW4pKTtcbmV4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDtcbi8qKlxuICogQW4gZWxlbWVudCB3aXRoaW4gdGhlIERPTS5cbiAqL1xudmFyIEVsZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEVsZW1lbnQsIF9zdXBlcik7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgdGFnLCBlZy4gYGRpdmAsIGBzcGFuYC5cbiAgICAgKiBAcGFyYW0gYXR0cmlicyBPYmplY3QgbWFwcGluZyBhdHRyaWJ1dGUgbmFtZXMgdG8gYXR0cmlidXRlIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0gY2hpbGRyZW4gQ2hpbGRyZW4gb2YgdGhlIG5vZGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gRWxlbWVudChuYW1lLCBhdHRyaWJzLCBjaGlsZHJlbiwgdHlwZSkge1xuICAgICAgICBpZiAoY2hpbGRyZW4gPT09IHZvaWQgMCkgeyBjaGlsZHJlbiA9IFtdOyB9XG4gICAgICAgIGlmICh0eXBlID09PSB2b2lkIDApIHsgdHlwZSA9IG5hbWUgPT09IFwic2NyaXB0XCJcbiAgICAgICAgICAgID8gZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5TY3JpcHRcbiAgICAgICAgICAgIDogbmFtZSA9PT0gXCJzdHlsZVwiXG4gICAgICAgICAgICAgICAgPyBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLlN0eWxlXG4gICAgICAgICAgICAgICAgOiBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLlRhZzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0eXBlLCBjaGlsZHJlbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIF90aGlzLmF0dHJpYnMgPSBhdHRyaWJzO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwgXCJ0YWdOYW1lXCIsIHtcbiAgICAgICAgLy8gRE9NIExldmVsIDEgYWxpYXNlc1xuICAgICAgICAvKipcbiAgICAgICAgICogU2FtZSBhcyB7QGxpbmsgbmFtZX0uXG4gICAgICAgICAqIFtET00gc3BlY10oaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnKS1jb21wYXRpYmxlIGFsaWFzLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcImF0dHJpYnV0ZXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5hdHRyaWJzKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIHJldHVybiAoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3RoaXMuYXR0cmlic1tuYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlOiAoX2EgPSBfdGhpc1tcIngtYXR0cmlic05hbWVzcGFjZVwiXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW25hbWVdLFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IChfYiA9IF90aGlzW1wieC1hdHRyaWJzUHJlZml4XCJdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbbmFtZV0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBFbGVtZW50O1xufShOb2RlV2l0aENoaWxkcmVuKSk7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuLyoqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGlzIGEgYEVsZW1lbnRgLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaXNUYWcobm9kZSkge1xuICAgIHJldHVybiAoMCwgZG9tZWxlbWVudHR5cGVfMS5pc1RhZykobm9kZSk7XG59XG5leHBvcnRzLmlzVGFnID0gaXNUYWc7XG4vKipcbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vZGUgaGFzIHRoZSB0eXBlIGBDREFUQWAsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc0NEQVRBKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLkNEQVRBO1xufVxuZXhwb3J0cy5pc0NEQVRBID0gaXNDREFUQTtcbi8qKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBoYXMgdGhlIHR5cGUgYFRleHRgLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaXNUZXh0KG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLlRleHQ7XG59XG5leHBvcnRzLmlzVGV4dCA9IGlzVGV4dDtcbi8qKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBoYXMgdGhlIHR5cGUgYENvbW1lbnRgLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaXNDb21tZW50KG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLkNvbW1lbnQ7XG59XG5leHBvcnRzLmlzQ29tbWVudCA9IGlzQ29tbWVudDtcbi8qKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBoYXMgdGhlIHR5cGUgYFByb2Nlc3NpbmdJbnN0cnVjdGlvbmAsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc0RpcmVjdGl2ZShub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5EaXJlY3RpdmU7XG59XG5leHBvcnRzLmlzRGlyZWN0aXZlID0gaXNEaXJlY3RpdmU7XG4vKipcbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vZGUgaGFzIHRoZSB0eXBlIGBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25gLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaXNEb2N1bWVudChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5Sb290O1xufVxuZXhwb3J0cy5pc0RvY3VtZW50ID0gaXNEb2N1bWVudDtcbi8qKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBpcyBhIGBOb2RlV2l0aENoaWxkcmVuYCAoaGFzIGNoaWxkcmVuKSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGhhc0NoaWxkcmVuKG5vZGUpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIFwiY2hpbGRyZW5cIik7XG59XG5leHBvcnRzLmhhc0NoaWxkcmVuID0gaGFzQ2hpbGRyZW47XG4vKipcbiAqIENsb25lIGEgbm9kZSwgYW5kIG9wdGlvbmFsbHkgaXRzIGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSByZWN1cnNpdmUgQ2xvbmUgY2hpbGQgbm9kZXMgYXMgd2VsbC5cbiAqIEByZXR1cm5zIEEgY2xvbmUgb2YgdGhlIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGNsb25lTm9kZShub2RlLCByZWN1cnNpdmUpIHtcbiAgICBpZiAocmVjdXJzaXZlID09PSB2b2lkIDApIHsgcmVjdXJzaXZlID0gZmFsc2U7IH1cbiAgICB2YXIgcmVzdWx0O1xuICAgIGlmIChpc1RleHQobm9kZSkpIHtcbiAgICAgICAgcmVzdWx0ID0gbmV3IFRleHQobm9kZS5kYXRhKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNDb21tZW50KG5vZGUpKSB7XG4gICAgICAgIHJlc3VsdCA9IG5ldyBDb21tZW50KG5vZGUuZGF0YSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzVGFnKG5vZGUpKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHJlY3Vyc2l2ZSA/IGNsb25lQ2hpbGRyZW4obm9kZS5jaGlsZHJlbikgOiBbXTtcbiAgICAgICAgdmFyIGNsb25lXzEgPSBuZXcgRWxlbWVudChub2RlLm5hbWUsIF9fYXNzaWduKHt9LCBub2RlLmF0dHJpYnMpLCBjaGlsZHJlbik7XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiAoY2hpbGQucGFyZW50ID0gY2xvbmVfMSk7IH0pO1xuICAgICAgICBpZiAobm9kZS5uYW1lc3BhY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgY2xvbmVfMS5uYW1lc3BhY2UgPSBub2RlLm5hbWVzcGFjZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZVtcIngtYXR0cmlic05hbWVzcGFjZVwiXSkge1xuICAgICAgICAgICAgY2xvbmVfMVtcIngtYXR0cmlic05hbWVzcGFjZVwiXSA9IF9fYXNzaWduKHt9LCBub2RlW1wieC1hdHRyaWJzTmFtZXNwYWNlXCJdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZVtcIngtYXR0cmlic1ByZWZpeFwiXSkge1xuICAgICAgICAgICAgY2xvbmVfMVtcIngtYXR0cmlic1ByZWZpeFwiXSA9IF9fYXNzaWduKHt9LCBub2RlW1wieC1hdHRyaWJzUHJlZml4XCJdKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSBjbG9uZV8xO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0NEQVRBKG5vZGUpKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHJlY3Vyc2l2ZSA/IGNsb25lQ2hpbGRyZW4obm9kZS5jaGlsZHJlbikgOiBbXTtcbiAgICAgICAgdmFyIGNsb25lXzIgPSBuZXcgTm9kZVdpdGhDaGlsZHJlbihkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLkNEQVRBLCBjaGlsZHJlbik7XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiAoY2hpbGQucGFyZW50ID0gY2xvbmVfMik7IH0pO1xuICAgICAgICByZXN1bHQgPSBjbG9uZV8yO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0RvY3VtZW50KG5vZGUpKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHJlY3Vyc2l2ZSA/IGNsb25lQ2hpbGRyZW4obm9kZS5jaGlsZHJlbikgOiBbXTtcbiAgICAgICAgdmFyIGNsb25lXzMgPSBuZXcgRG9jdW1lbnQoY2hpbGRyZW4pO1xuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkgeyByZXR1cm4gKGNoaWxkLnBhcmVudCA9IGNsb25lXzMpOyB9KTtcbiAgICAgICAgaWYgKG5vZGVbXCJ4LW1vZGVcIl0pIHtcbiAgICAgICAgICAgIGNsb25lXzNbXCJ4LW1vZGVcIl0gPSBub2RlW1wieC1tb2RlXCJdO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGNsb25lXzM7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRGlyZWN0aXZlKG5vZGUpKSB7XG4gICAgICAgIHZhciBpbnN0cnVjdGlvbiA9IG5ldyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24obm9kZS5uYW1lLCBub2RlLmRhdGEpO1xuICAgICAgICBpZiAobm9kZVtcIngtbmFtZVwiXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnN0cnVjdGlvbltcIngtbmFtZVwiXSA9IG5vZGVbXCJ4LW5hbWVcIl07XG4gICAgICAgICAgICBpbnN0cnVjdGlvbltcIngtcHVibGljSWRcIl0gPSBub2RlW1wieC1wdWJsaWNJZFwiXTtcbiAgICAgICAgICAgIGluc3RydWN0aW9uW1wieC1zeXN0ZW1JZFwiXSA9IG5vZGVbXCJ4LXN5c3RlbUlkXCJdO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGluc3RydWN0aW9uO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkIHlldDogXCIuY29uY2F0KG5vZGUudHlwZSkpO1xuICAgIH1cbiAgICByZXN1bHQuc3RhcnRJbmRleCA9IG5vZGUuc3RhcnRJbmRleDtcbiAgICByZXN1bHQuZW5kSW5kZXggPSBub2RlLmVuZEluZGV4O1xuICAgIGlmIChub2RlLnNvdXJjZUNvZGVMb2NhdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5zb3VyY2VDb2RlTG9jYXRpb24gPSBub2RlLnNvdXJjZUNvZGVMb2NhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuY2xvbmVOb2RlID0gY2xvbmVOb2RlO1xuZnVuY3Rpb24gY2xvbmVDaGlsZHJlbihjaGlsZHMpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBjaGlsZHMubWFwKGZ1bmN0aW9uIChjaGlsZCkgeyByZXR1cm4gY2xvbmVOb2RlKGNoaWxkLCB0cnVlKTsgfSk7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBjaGlsZHJlbltpXS5wcmV2ID0gY2hpbGRyZW5baSAtIDFdO1xuICAgICAgICBjaGlsZHJlbltpIC0gMV0ubmV4dCA9IGNoaWxkcmVuW2ldO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGRyZW47XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jbG9uZU5vZGUgPSBleHBvcnRzLmhhc0NoaWxkcmVuID0gZXhwb3J0cy5pc0RvY3VtZW50ID0gZXhwb3J0cy5pc0RpcmVjdGl2ZSA9IGV4cG9ydHMuaXNDb21tZW50ID0gZXhwb3J0cy5pc1RleHQgPSBleHBvcnRzLmlzQ0RBVEEgPSBleHBvcnRzLmlzVGFnID0gZXhwb3J0cy5FbGVtZW50ID0gZXhwb3J0cy5Eb2N1bWVudCA9IGV4cG9ydHMuTm9kZVdpdGhDaGlsZHJlbiA9IGV4cG9ydHMuUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gZXhwb3J0cy5Db21tZW50ID0gZXhwb3J0cy5UZXh0ID0gZXhwb3J0cy5EYXRhTm9kZSA9IGV4cG9ydHMuTm9kZSA9IHZvaWQgMDtcbnZhciBkb21lbGVtZW50dHlwZV8xID0gcmVxdWlyZShcImRvbWVsZW1lbnR0eXBlXCIpO1xudmFyIG5vZGVUeXBlcyA9IG5ldyBNYXAoW1xuICAgIFtkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLlRhZywgMV0sXG4gICAgW2RvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuU2NyaXB0LCAxXSxcbiAgICBbZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5TdHlsZSwgMV0sXG4gICAgW2RvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuRGlyZWN0aXZlLCAxXSxcbiAgICBbZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5UZXh0LCAzXSxcbiAgICBbZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5DREFUQSwgNF0sXG4gICAgW2RvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuQ29tbWVudCwgOF0sXG4gICAgW2RvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuUm9vdCwgOV0sXG5dKTtcbi8qKlxuICogVGhpcyBvYmplY3Qgd2lsbCBiZSB1c2VkIGFzIHRoZSBwcm90b3R5cGUgZm9yIE5vZGVzIHdoZW4gY3JlYXRpbmcgYVxuICogRE9NLUxldmVsLTEtY29tcGxpYW50IHN0cnVjdHVyZS5cbiAqL1xudmFyIE5vZGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgbm9kZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBOb2RlKHR5cGUpIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgLyoqIFBhcmVudCBvZiB0aGUgbm9kZSAqL1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgICAgIC8qKiBQcmV2aW91cyBzaWJsaW5nICovXG4gICAgICAgIHRoaXMucHJldiA9IG51bGw7XG4gICAgICAgIC8qKiBOZXh0IHNpYmxpbmcgKi9cbiAgICAgICAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgICAgICAgLyoqIFRoZSBzdGFydCBpbmRleCBvZiB0aGUgbm9kZS4gUmVxdWlyZXMgYHdpdGhTdGFydEluZGljZXNgIG9uIHRoZSBoYW5kbGVyIHRvIGJlIGB0cnVlLiAqL1xuICAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSBudWxsO1xuICAgICAgICAvKiogVGhlIGVuZCBpbmRleCBvZiB0aGUgbm9kZS4gUmVxdWlyZXMgYHdpdGhFbmRJbmRpY2VzYCBvbiB0aGUgaGFuZGxlciB0byBiZSBgdHJ1ZS4gKi9cbiAgICAgICAgdGhpcy5lbmRJbmRleCA9IG51bGw7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJub2RlVHlwZVwiLCB7XG4gICAgICAgIC8vIFJlYWQtb25seSBhbGlhc2VzXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBbRE9NIHNwZWNdKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLW5vZGUtbm9kZXR5cGUpLWNvbXBhdGlibGVcbiAgICAgICAgICogbm9kZSB7QGxpbmsgdHlwZX0uXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSBub2RlVHlwZXMuZ2V0KHRoaXMudHlwZSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDE7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwicGFyZW50Tm9kZVwiLCB7XG4gICAgICAgIC8vIFJlYWQtd3JpdGUgYWxpYXNlcyBmb3IgcHJvcGVydGllc1xuICAgICAgICAvKipcbiAgICAgICAgICogU2FtZSBhcyB7QGxpbmsgcGFyZW50fS5cbiAgICAgICAgICogW0RPTSBzcGVjXShodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcpLWNvbXBhdGlibGUgYWxpYXMuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJwcmV2aW91c1NpYmxpbmdcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU2FtZSBhcyB7QGxpbmsgcHJldn0uXG4gICAgICAgICAqIFtET00gc3BlY10oaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnKS1jb21wYXRpYmxlIGFsaWFzLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcmV2KSB7XG4gICAgICAgICAgICB0aGlzLnByZXYgPSBwcmV2O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIm5leHRTaWJsaW5nXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNhbWUgYXMge0BsaW5rIG5leHR9LlxuICAgICAgICAgKiBbRE9NIHNwZWNdKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZyktY29tcGF0aWJsZSBhbGlhcy5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV4dCkge1xuICAgICAgICAgICAgdGhpcy5uZXh0ID0gbmV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIENsb25lIHRoaXMgbm9kZSwgYW5kIG9wdGlvbmFsbHkgaXRzIGNoaWxkcmVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlY3Vyc2l2ZSBDbG9uZSBjaGlsZCBub2RlcyBhcyB3ZWxsLlxuICAgICAqIEByZXR1cm5zIEEgY2xvbmUgb2YgdGhlIG5vZGUuXG4gICAgICovXG4gICAgTm9kZS5wcm90b3R5cGUuY2xvbmVOb2RlID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xuICAgICAgICBpZiAocmVjdXJzaXZlID09PSB2b2lkIDApIHsgcmVjdXJzaXZlID0gZmFsc2U7IH1cbiAgICAgICAgcmV0dXJuIGNsb25lTm9kZSh0aGlzLCByZWN1cnNpdmUpO1xuICAgIH07XG4gICAgcmV0dXJuIE5vZGU7XG59KCkpO1xuZXhwb3J0cy5Ob2RlID0gTm9kZTtcbi8qKlxuICogQSBub2RlIHRoYXQgY29udGFpbnMgc29tZSBkYXRhLlxuICovXG52YXIgRGF0YU5vZGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKERhdGFOb2RlLCBfc3VwZXIpO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBub2RlXG4gICAgICogQHBhcmFtIGRhdGEgVGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEgbm9kZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIERhdGFOb2RlKHR5cGUsIGRhdGEpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHlwZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFOb2RlLnByb3RvdHlwZSwgXCJub2RlVmFsdWVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU2FtZSBhcyB7QGxpbmsgZGF0YX0uXG4gICAgICAgICAqIFtET00gc3BlY10oaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnKS1jb21wYXRpYmxlIGFsaWFzLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIERhdGFOb2RlO1xufShOb2RlKSk7XG5leHBvcnRzLkRhdGFOb2RlID0gRGF0YU5vZGU7XG4vKipcbiAqIFRleHQgd2l0aGluIHRoZSBkb2N1bWVudC5cbiAqL1xudmFyIFRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRleHQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVGV4dChkYXRhKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLlRleHQsIGRhdGEpIHx8IHRoaXM7XG4gICAgfVxuICAgIHJldHVybiBUZXh0O1xufShEYXRhTm9kZSkpO1xuZXhwb3J0cy5UZXh0ID0gVGV4dDtcbi8qKlxuICogQ29tbWVudHMgd2l0aGluIHRoZSBkb2N1bWVudC5cbiAqL1xudmFyIENvbW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENvbW1lbnQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ29tbWVudChkYXRhKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLkNvbW1lbnQsIGRhdGEpIHx8IHRoaXM7XG4gICAgfVxuICAgIHJldHVybiBDb21tZW50O1xufShEYXRhTm9kZSkpO1xuZXhwb3J0cy5Db21tZW50ID0gQ29tbWVudDtcbi8qKlxuICogUHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMsIGluY2x1ZGluZyBkb2MgdHlwZXMuXG4gKi9cbnZhciBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24obmFtZSwgZGF0YSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLkRpcmVjdGl2ZSwgZGF0YSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjtcbn0oRGF0YU5vZGUpKTtcbmV4cG9ydHMuUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gUHJvY2Vzc2luZ0luc3RydWN0aW9uO1xuLyoqXG4gKiBBIGBOb2RlYCB0aGF0IGNhbiBoYXZlIGNoaWxkcmVuLlxuICovXG52YXIgTm9kZVdpdGhDaGlsZHJlbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTm9kZVdpdGhDaGlsZHJlbiwgX3N1cGVyKTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gdHlwZSBUeXBlIG9mIHRoZSBub2RlLlxuICAgICAqIEBwYXJhbSBjaGlsZHJlbiBDaGlsZHJlbiBvZiB0aGUgbm9kZS4gT25seSBjZXJ0YWluIG5vZGUgdHlwZXMgY2FuIGhhdmUgY2hpbGRyZW4uXG4gICAgICovXG4gICAgZnVuY3Rpb24gTm9kZVdpdGhDaGlsZHJlbih0eXBlLCBjaGlsZHJlbikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0eXBlKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlV2l0aENoaWxkcmVuLnByb3RvdHlwZSwgXCJmaXJzdENoaWxkXCIsIHtcbiAgICAgICAgLy8gQWxpYXNlc1xuICAgICAgICAvKiogRmlyc3QgY2hpbGQgb2YgdGhlIG5vZGUuICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuY2hpbGRyZW5bMF0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZVdpdGhDaGlsZHJlbi5wcm90b3R5cGUsIFwibGFzdENoaWxkXCIsIHtcbiAgICAgICAgLyoqIExhc3QgY2hpbGQgb2YgdGhlIG5vZGUuICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gdGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGVXaXRoQ2hpbGRyZW4ucHJvdG90eXBlLCBcImNoaWxkTm9kZXNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU2FtZSBhcyB7QGxpbmsgY2hpbGRyZW59LlxuICAgICAgICAgKiBbRE9NIHNwZWNdKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZyktY29tcGF0aWJsZSBhbGlhcy5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW47XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gTm9kZVdpdGhDaGlsZHJlbjtcbn0oTm9kZSkpO1xuZXhwb3J0cy5Ob2RlV2l0aENoaWxkcmVuID0gTm9kZVdpdGhDaGlsZHJlbjtcbi8qKlxuICogVGhlIHJvb3Qgbm9kZSBvZiB0aGUgZG9jdW1lbnQuXG4gKi9cbnZhciBEb2N1bWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRG9jdW1lbnQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRG9jdW1lbnQoY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIGRvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuUm9vdCwgY2hpbGRyZW4pIHx8IHRoaXM7XG4gICAgfVxuICAgIHJldHVybiBEb2N1bWVudDtcbn0oTm9kZVdpdGhDaGlsZHJlbikpO1xuZXhwb3J0cy5Eb2N1bWVudCA9IERvY3VtZW50O1xuLyoqXG4gKiBBbiBlbGVtZW50IHdpdGhpbiB0aGUgRE9NLlxuICovXG52YXIgRWxlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRWxlbWVudCwgX3N1cGVyKTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSB0YWcsIGVnLiBgZGl2YCwgYHNwYW5gLlxuICAgICAqIEBwYXJhbSBhdHRyaWJzIE9iamVjdCBtYXBwaW5nIGF0dHJpYnV0ZSBuYW1lcyB0byBhdHRyaWJ1dGUgdmFsdWVzLlxuICAgICAqIEBwYXJhbSBjaGlsZHJlbiBDaGlsZHJlbiBvZiB0aGUgbm9kZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBFbGVtZW50KG5hbWUsIGF0dHJpYnMsIGNoaWxkcmVuLCB0eXBlKSB7XG4gICAgICAgIGlmIChjaGlsZHJlbiA9PT0gdm9pZCAwKSB7IGNoaWxkcmVuID0gW107IH1cbiAgICAgICAgaWYgKHR5cGUgPT09IHZvaWQgMCkgeyB0eXBlID0gbmFtZSA9PT0gXCJzY3JpcHRcIlxuICAgICAgICAgICAgPyBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLlNjcmlwdFxuICAgICAgICAgICAgOiBuYW1lID09PSBcInN0eWxlXCJcbiAgICAgICAgICAgICAgICA/IGRvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuU3R5bGVcbiAgICAgICAgICAgICAgICA6IGRvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuVGFnOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5cGUsIGNoaWxkcmVuKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgX3RoaXMuYXR0cmlicyA9IGF0dHJpYnM7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcInRhZ05hbWVcIiwge1xuICAgICAgICAvLyBET00gTGV2ZWwgMSBhbGlhc2VzXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTYW1lIGFzIHtAbGluayBuYW1lfS5cbiAgICAgICAgICogW0RPTSBzcGVjXShodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcpLWNvbXBhdGlibGUgYWxpYXMuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIFwiYXR0cmlidXRlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnMpLm1hcChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdGhpcy5hdHRyaWJzW25hbWVdLFxuICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IChfYSA9IF90aGlzW1wieC1hdHRyaWJzTmFtZXNwYWNlXCJdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbbmFtZV0sXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeDogKF9iID0gX3RoaXNbXCJ4LWF0dHJpYnNQcmVmaXhcIl0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYltuYW1lXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIEVsZW1lbnQ7XG59KE5vZGVXaXRoQ2hpbGRyZW4pKTtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG4vKipcbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vZGUgaXMgYSBgRWxlbWVudGAsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc1RhZyhub2RlKSB7XG4gICAgcmV0dXJuICgwLCBkb21lbGVtZW50dHlwZV8xLmlzVGFnKShub2RlKTtcbn1cbmV4cG9ydHMuaXNUYWcgPSBpc1RhZztcbi8qKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBoYXMgdGhlIHR5cGUgYENEQVRBYCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGlzQ0RBVEEobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT09IGRvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuQ0RBVEE7XG59XG5leHBvcnRzLmlzQ0RBVEEgPSBpc0NEQVRBO1xuLyoqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGhhcyB0aGUgdHlwZSBgVGV4dGAsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc1RleHQobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT09IGRvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuVGV4dDtcbn1cbmV4cG9ydHMuaXNUZXh0ID0gaXNUZXh0O1xuLyoqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGhhcyB0aGUgdHlwZSBgQ29tbWVudGAsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc0NvbW1lbnQobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT09IGRvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuQ29tbWVudDtcbn1cbmV4cG9ydHMuaXNDb21tZW50ID0gaXNDb21tZW50O1xuLyoqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGhhcyB0aGUgdHlwZSBgUHJvY2Vzc2luZ0luc3RydWN0aW9uYCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGlzRGlyZWN0aXZlKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLkRpcmVjdGl2ZTtcbn1cbmV4cG9ydHMuaXNEaXJlY3RpdmUgPSBpc0RpcmVjdGl2ZTtcbi8qKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBoYXMgdGhlIHR5cGUgYFByb2Nlc3NpbmdJbnN0cnVjdGlvbmAsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc0RvY3VtZW50KG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLlJvb3Q7XG59XG5leHBvcnRzLmlzRG9jdW1lbnQgPSBpc0RvY3VtZW50O1xuLyoqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGlzIGEgYE5vZGVXaXRoQ2hpbGRyZW5gIChoYXMgY2hpbGRyZW4pLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaGFzQ2hpbGRyZW4obm9kZSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgXCJjaGlsZHJlblwiKTtcbn1cbmV4cG9ydHMuaGFzQ2hpbGRyZW4gPSBoYXNDaGlsZHJlbjtcbi8qKlxuICogQ2xvbmUgYSBub2RlLCBhbmQgb3B0aW9uYWxseSBpdHMgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHJlY3Vyc2l2ZSBDbG9uZSBjaGlsZCBub2RlcyBhcyB3ZWxsLlxuICogQHJldHVybnMgQSBjbG9uZSBvZiB0aGUgbm9kZS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVOb2RlKG5vZGUsIHJlY3Vyc2l2ZSkge1xuICAgIGlmIChyZWN1cnNpdmUgPT09IHZvaWQgMCkgeyByZWN1cnNpdmUgPSBmYWxzZTsgfVxuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKGlzVGV4dChub2RlKSkge1xuICAgICAgICByZXN1bHQgPSBuZXcgVGV4dChub2RlLmRhdGEpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0NvbW1lbnQobm9kZSkpIHtcbiAgICAgICAgcmVzdWx0ID0gbmV3IENvbW1lbnQobm9kZS5kYXRhKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNUYWcobm9kZSkpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gcmVjdXJzaXZlID8gY2xvbmVDaGlsZHJlbihub2RlLmNoaWxkcmVuKSA6IFtdO1xuICAgICAgICB2YXIgY2xvbmVfMSA9IG5ldyBFbGVtZW50KG5vZGUubmFtZSwgX19hc3NpZ24oe30sIG5vZGUuYXR0cmlicyksIGNoaWxkcmVuKTtcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHsgcmV0dXJuIChjaGlsZC5wYXJlbnQgPSBjbG9uZV8xKTsgfSk7XG4gICAgICAgIGlmIChub2RlLm5hbWVzcGFjZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjbG9uZV8xLm5hbWVzcGFjZSA9IG5vZGUubmFtZXNwYWNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlW1wieC1hdHRyaWJzTmFtZXNwYWNlXCJdKSB7XG4gICAgICAgICAgICBjbG9uZV8xW1wieC1hdHRyaWJzTmFtZXNwYWNlXCJdID0gX19hc3NpZ24oe30sIG5vZGVbXCJ4LWF0dHJpYnNOYW1lc3BhY2VcIl0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlW1wieC1hdHRyaWJzUHJlZml4XCJdKSB7XG4gICAgICAgICAgICBjbG9uZV8xW1wieC1hdHRyaWJzUHJlZml4XCJdID0gX19hc3NpZ24oe30sIG5vZGVbXCJ4LWF0dHJpYnNQcmVmaXhcIl0pO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGNsb25lXzE7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQ0RBVEEobm9kZSkpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gcmVjdXJzaXZlID8gY2xvbmVDaGlsZHJlbihub2RlLmNoaWxkcmVuKSA6IFtdO1xuICAgICAgICB2YXIgY2xvbmVfMiA9IG5ldyBOb2RlV2l0aENoaWxkcmVuKGRvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuQ0RBVEEsIGNoaWxkcmVuKTtcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHsgcmV0dXJuIChjaGlsZC5wYXJlbnQgPSBjbG9uZV8yKTsgfSk7XG4gICAgICAgIHJlc3VsdCA9IGNsb25lXzI7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRG9jdW1lbnQobm9kZSkpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gcmVjdXJzaXZlID8gY2xvbmVDaGlsZHJlbihub2RlLmNoaWxkcmVuKSA6IFtdO1xuICAgICAgICB2YXIgY2xvbmVfMyA9IG5ldyBEb2N1bWVudChjaGlsZHJlbik7XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiAoY2hpbGQucGFyZW50ID0gY2xvbmVfMyk7IH0pO1xuICAgICAgICBpZiAobm9kZVtcIngtbW9kZVwiXSkge1xuICAgICAgICAgICAgY2xvbmVfM1tcIngtbW9kZVwiXSA9IG5vZGVbXCJ4LW1vZGVcIl07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gY2xvbmVfMztcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNEaXJlY3RpdmUobm9kZSkpIHtcbiAgICAgICAgdmFyIGluc3RydWN0aW9uID0gbmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbihub2RlLm5hbWUsIG5vZGUuZGF0YSk7XG4gICAgICAgIGlmIChub2RlW1wieC1uYW1lXCJdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGluc3RydWN0aW9uW1wieC1uYW1lXCJdID0gbm9kZVtcIngtbmFtZVwiXTtcbiAgICAgICAgICAgIGluc3RydWN0aW9uW1wieC1wdWJsaWNJZFwiXSA9IG5vZGVbXCJ4LXB1YmxpY0lkXCJdO1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bXCJ4LXN5c3RlbUlkXCJdID0gbm9kZVtcIngtc3lzdGVtSWRcIl07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gaW5zdHJ1Y3Rpb247XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWQgeWV0OiBcIi5jb25jYXQobm9kZS50eXBlKSk7XG4gICAgfVxuICAgIHJlc3VsdC5zdGFydEluZGV4ID0gbm9kZS5zdGFydEluZGV4O1xuICAgIHJlc3VsdC5lbmRJbmRleCA9IG5vZGUuZW5kSW5kZXg7XG4gICAgaWYgKG5vZGUuc291cmNlQ29kZUxvY2F0aW9uICE9IG51bGwpIHtcbiAgICAgICAgcmVzdWx0LnNvdXJjZUNvZGVMb2NhdGlvbiA9IG5vZGUuc291cmNlQ29kZUxvY2F0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5jbG9uZU5vZGUgPSBjbG9uZU5vZGU7XG5mdW5jdGlvbiBjbG9uZUNoaWxkcmVuKGNoaWxkcykge1xuICAgIHZhciBjaGlsZHJlbiA9IGNoaWxkcy5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBjbG9uZU5vZGUoY2hpbGQsIHRydWUpOyB9KTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNoaWxkcmVuW2ldLnByZXYgPSBjaGlsZHJlbltpIC0gMV07XG4gICAgICAgIGNoaWxkcmVuW2kgLSAxXS5uZXh0ID0gY2hpbGRyZW5baV07XG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlbjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvMS5iZTBmODliMC5qcGdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwic3RhdGljL21lZGlhLzIuNjNlYjgxNDkuanBnXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9tZWRpYS8zLjhiYjM0YjdjLmpwZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvNC4yMTI5NWY5Yi5qcGdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwic3RhdGljL21lZGlhLzUuOGQ1ZjgzMjUuanBnXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9tZWRpYS82LjE4ZGI3MzM5LmpwZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvNy43YjkwMWRjZC5qcGdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwic3RhdGljL21lZGlhLzguMTc2MTkzMjcuanBnXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9tZWRpYS85Ljg0Y2IxYWQzLmpwZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvMTAuYTAyYzc5NmQuanBnXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9tZWRpYS8xMS44NDFlOTg5OC5qcGdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwic3RhdGljL21lZGlhLzEyLjkyN2UyNDg5LmpwZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvMTMuNmZkMWJjMjguanBnXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9tZWRpYS8xNC4wZjRjMzU4My5qcGdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwic3RhdGljL21lZGlhLzE1LjlmOTE3MGIzLmpwZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvbWVkaWEvMTYuNmE0YTQwNWMuanBnXCI7IiwiLy8gTW9kdWxlXG52YXIgY29kZSA9IFwiPGRpdiBjbGFzcz1cXFwic2l0ZS1jb250ZW50IGdyaWQtY29udGFpbmVyXFxcIj4gPGgxPkhlcnpsaWNoIFdpbGxrb21tZW48L2gxPiA8cD5XaXIgZnJldWVuIHVucywgbWl0IEV1Y2ggdW5zZXJlIEhvY2h6ZWl0IGluIEFhY2hlbiB6dSBmZWllcm4hIE5hY2ggdW5zZXJlciB3dW5kZXJzY2jDtm5lbiBzdGFuZGVzYW10bGljaGVuIFRyYXV1bmcgYW0gMjQuIEFwcmlsIGxldHp0ZXMgSmFociwgZnJldWVuIHdpciB1bnMgYXVmIHVuc2VyZSBraXJjaGxpY2hlIEhvY2h6ZWl0IGFtIDcuIE1haSBkaWVzZXMgSmFoci4gQml0dGUgc2FndCB1bnMgZG9jaCBiaXMgenVtIDE1LiBNw6Ryeiwgb2IgaWhyIGRhYmVpIHNlaW4ga8O2bm50ISBTY2hyZWlidCB1bnMgZGF6dSBnZXJuZSBlaW5lIE1haWwgYW4gPGEgaHJlZj1cXFwibWFpbHRvOmhvY2h6ZWl0LWpzQGdteC5uZXRcXFwiPmhvY2h6ZWl0LWpzQGdteC5uZXQ8L2E+LiA8L3A+IDxwPk5hY2ggZGVuIG5ldXN0ZW4gTG9ja2VydW5nZW4gc2luZCB3aXIgc2VociB6dXZlcnNpY2h0bGljaCwgZGFzcyB1bnNlcmUgSG9jaHplaXQgZGllc2VzIEphaHIgdHJvdHogQ29yb25hIHN0YXR0ZmluZGVuIGthbm4uIFdpciBnZWhlbiBkYXZvbiBhdXMsIGRhc3Mgd2lyIHVudGVyIDJHLSBvZGVyIDJHLXBsdXMtUmVnZWxuIGZlaWVybiB3ZXJkZW4sIGFiZXIgbWl0IGdlbmF1ZXJlbiBJbmZvcyBkYXp1IG1lbGRlbiB3aXIgdW5zIG5vY2htYWwgcmVjaHR6ZWl0aWcgdm9yaGVyLjwvcD4gPHA+RmFsbHMgaWhyIEZyYWdlbiBoYWJ0LCBtZWxkZXQgZXVjaCBnZXJuZSBiZWkgdW5zIDopPC9wPiA8L2Rpdj4gXCI7XG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IGNvZGU7IiwiLy8gSW1wb3J0c1xudmFyIF9fX0hUTUxfTE9BREVSX0dFVF9TT1VSQ0VfRlJPTV9JTVBPUlRfX18gPSByZXF1aXJlKFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2h0bWwtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanNcIik7XG52YXIgX19fSFRNTF9MT0FERVJfSU1QT1JUXzBfX18gPSByZXF1aXJlKFwiLi4vaW1nL2hvdGVsLnBuZ1wiKTtcbnZhciBfX19IVE1MX0xPQURFUl9JTVBPUlRfMV9fXyA9IHJlcXVpcmUoXCIuLi9pbWcvdW50ZXJrdW5mdC5qcGdcIik7XG4vLyBNb2R1bGVcbnZhciBfX19IVE1MX0xPQURFUl9SRVBMQUNFTUVOVF8wX19fID0gX19fSFRNTF9MT0FERVJfR0VUX1NPVVJDRV9GUk9NX0lNUE9SVF9fXyhfX19IVE1MX0xPQURFUl9JTVBPUlRfMF9fXyk7XG52YXIgX19fSFRNTF9MT0FERVJfUkVQTEFDRU1FTlRfMV9fXyA9IF9fX0hUTUxfTE9BREVSX0dFVF9TT1VSQ0VfRlJPTV9JTVBPUlRfX18oX19fSFRNTF9MT0FERVJfSU1QT1JUXzFfX18pO1xudmFyIGNvZGUgPSBcIjxkaXYgY2xhc3M9XFxcImZsZXgtY29udGFpbmVyIGZpbGwtaGVpZ2h0LW1lZGl1bS11cFxcXCI+IDxkaXYgY2xhc3M9XFxcImdyb3cgaGVpZ2h0LTEwMCBvdmVyZmxvdy1hdXRvIHNpdGUtY29udGVudCBoaWRlLXNjcm9sbGJhclxcXCI+IDxoMT5VbnRlcmt1bmZ0PC9oMT4gPHA+IFdpciBmcmV1ZW4gdW5zIHJpZXNpZywgZGFzcyBpaHIgYXVzIG5haCB1bmQgZmVybiBhbnJlaXN0LCB1bSBtaXQgdW5zIGdlbWVpbnNhbSB1bnNlcmVuIEhvY2h6ZWl0c3RhZyB6dSB2ZXJicmluZ2VuISA8L3A+IDxwPiBVbnRlbnN0ZWhlbmQgZmluZGV0IGlociBWb3JzY2hsw6RnZSBmw7xyIMOcYmVybmFjaHR1bmdzbcO2Z2xpY2hrZWl0ZW4gaW4gQWFjaGVuLiBEYXMgQiZCIEhvdGVsIEFhY2hlbiBDaXR5IChHcm/Dn2vDtmxuc3RyYcOfZSA1Ny02MykgaXN0IGZ1w59sw6R1ZmlnIHZvbiB1bnNlcmVyIExvY2F0aW9uIGluIGbDvG5mIE1pbnV0ZW4genUgZXJyZWljaGVuLiBEYSB3aXIgdm9uIGRlciBLaXJjaGUgenUgRnXDnyBpbnMgRm9ydW0gTSBnZWhlbiBrw7ZubmVuLCBrw7ZubnQgaWhyIGRhcyBBdXRvIGltIFBhcmtoYXVzIGFtIERvbSDDvGJlciBOYWNodCBzdGVoZW4gbGFzc2VuLiA8L3A+IDxwPiBBbGxlLCBkaWUgZWhlciBlaW5lIHN0dWRlbnRpc2NoZSDDnGJlcm5hY2h0dW5nc23DtmdsaWNoa2VpdCBzdWNoZW4sIGvDtm5uZW4gc2ljaCBnZXJuZSBiZWkgdW5zIG1lbGRlbi4gSWhyIHdlcmRldCBkYW5uIGJlaSBGcmV1bmRlbiB2b24gdW5zIGluIFdHcyDDvGJlcm5hY2h0ZW4uIFNhZ3QgdW5zIGRhIGJpdHRlIGF1Y2ggc3DDpHRlc3RlbnMgYmlzIHp1bSAxNS4gTcOkcnogQmVzY2hlaWQuIDwvcD4gPGRpdiBjbGFzcz1cXFwiZ3JpZC14IHBhZGRpbmctZGVmYXVsdFxcXCI+IDxkaXYgY2xhc3M9XFxcInNtYWxsLTRcXFwiPiA8YSBocmVmPVxcXCJodHRwczovL3d3dy5ob3RlbC1iYi5jb20vZGUvaG90ZWwvYWFjaGVuLWNpdHlcXFwiIHRhcmdldD1cXFwiX2JsYW5rXFxcIiBjbGFzcz1cXFwiaGlkZGVuLWxpbmtcXFwiPiA8aDM+QiZCIEhvdGVsPC9oMz4gPGltZyBzcmM9XFxcIlwiICsgX19fSFRNTF9MT0FERVJfUkVQTEFDRU1FTlRfMF9fXyArIFwiXFxcIj4gPC9hPiA8L2Rpdj4gPGRpdiBjbGFzcz1cXFwic21hbGwtOFxcXCI+IDxpZnJhbWUgaWQ9XFxcIm1hcF91bnRlcmt1bmZ0XFxcIiBzcmM9XFxcImh0dHBzOi8vbWFwcy5nb29nbGUuY29tL21hcHM/d2lkdGg9NTIwJmFtcDtoZWlnaHQ9Mzk1JmFtcDtobD1kZSZhbXA7cT1CJTI2QitIb3RlbCtBYWNoZW4tQ2l0eSwrR3Jvw59rw7ZsbnN0cmHDn2UrNTctNjMsKzUyMDYyK0FhY2hlbiZhbXA7dD0mYW1wO3o9MTQmYW1wO2llPVVURjgmYW1wO2l3bG9jPUImYW1wO291dHB1dD1lbWJlZFxcXCI+PC9pZnJhbWU+IDwvZGl2PiA8L2Rpdj4gPC9kaXY+IDxkaXYgY2xhc3M9XFxcImhlaWdodC0xMDAgaGlkZS1mb3Itc21hbGwtb25seSBpbWctY29sdW1uXFxcIj4gPGltZyBzcmM9XFxcIlwiICsgX19fSFRNTF9MT0FERVJfUkVQTEFDRU1FTlRfMV9fXyArIFwiXFxcIiBjbGFzcz1cXFwiaGVpZ2h0LTEwMFxcXCI+IDwvZGl2PiA8L2Rpdj4gXCI7XG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IGNvZGU7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9tZWRpYS9ob3RlbC4wMjRlMDQ3NC5wbmdcIjsiLCIvLyBJbXBvcnRzXG52YXIgX19fSFRNTF9MT0FERVJfR0VUX1NPVVJDRV9GUk9NX0lNUE9SVF9fXyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvaHRtbC1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qc1wiKTtcbnZhciBfX19IVE1MX0xPQURFUl9JTVBPUlRfMF9fXyA9IHJlcXVpcmUoXCIuLi9pbWcvdGFnZXNhYmxhdWZfbmV1LmpwZ1wiKTtcbnZhciBfX19IVE1MX0xPQURFUl9JTVBPUlRfMV9fXyA9IHJlcXVpcmUoXCIuLi9pbWcvZWlua3JlaXNlci5wbmdcIik7XG4vLyBNb2R1bGVcbnZhciBfX19IVE1MX0xPQURFUl9SRVBMQUNFTUVOVF8wX19fID0gX19fSFRNTF9MT0FERVJfR0VUX1NPVVJDRV9GUk9NX0lNUE9SVF9fXyhfX19IVE1MX0xPQURFUl9JTVBPUlRfMF9fXyk7XG52YXIgX19fSFRNTF9MT0FERVJfUkVQTEFDRU1FTlRfMV9fXyA9IF9fX0hUTUxfTE9BREVSX0dFVF9TT1VSQ0VfRlJPTV9JTVBPUlRfX18oX19fSFRNTF9MT0FERVJfSU1QT1JUXzFfX18pO1xudmFyIGNvZGUgPSBcIjxkaXYgY2xhc3M9XFxcImZsZXgtY29udGFpbmVyIGZpbGwtaGVpZ2h0LW1lZGl1bS11cFxcXCI+IDxkaXYgY2xhc3M9XFxcImhlaWdodC0xMDBcXFwiIGlkPVxcXCJpbmZvLWltYWdlLWNvbnRhaW5lclxcXCIgZGF0YS1zdGF0ZT1cXFwiZ29kaVxcXCI+IDxpbWcgc3JjPVxcXCJcIiArIF9fX0hUTUxfTE9BREVSX1JFUExBQ0VNRU5UXzBfX18gKyBcIlxcXCIgY2xhc3M9XFxcImhlaWdodC0xMDBcXFwiPiA8aW1nIHNyYz1cXFwiXCIgKyBfX19IVE1MX0xPQURFUl9SRVBMQUNFTUVOVF8xX19fICsgXCJcXFwiIGNsYXNzPVxcXCJjaXJjbGVyIHZpc2libGVcXFwiPiA8aW1nIHNyYz1cXFwiXCIgKyBfX19IVE1MX0xPQURFUl9SRVBMQUNFTUVOVF8xX19fICsgXCJcXFwiIGNsYXNzPVxcXCJjaXJjbGVyIGdvZGlcXFwiIGRhdGEtc3RhdGU9XFxcImdvZGlcXFwiPiA8aW1nIHNyYz1cXFwiXCIgKyBfX19IVE1MX0xPQURFUl9SRVBMQUNFTUVOVF8xX19fICsgXCJcXFwiIGNsYXNzPVxcXCJjaXJjbGVyIGZpbmdlcmZvb2RcXFwiIGRhdGEtc3RhdGU9XFxcImZpbmdlcmZvb2RcXFwiPiA8aW1nIHNyYz1cXFwiXCIgKyBfX19IVE1MX0xPQURFUl9SRVBMQUNFTUVOVF8xX19fICsgXCJcXFwiIGNsYXNzPVxcXCJjaXJjbGVyIGZvdG9cXFwiIGRhdGEtc3RhdGU9XFxcImZvdG9cXFwiPiA8aW1nIHNyYz1cXFwiXCIgKyBfX19IVE1MX0xPQURFUl9SRVBMQUNFTUVOVF8xX19fICsgXCJcXFwiIGNsYXNzPVxcXCJjaXJjbGVyIHNla3RcXFwiIGRhdGEtc3RhdGU9XFxcInNla3RcXFwiPiA8aW1nIHNyYz1cXFwiXCIgKyBfX19IVE1MX0xPQURFUl9SRVBMQUNFTUVOVF8xX19fICsgXCJcXFwiIGNsYXNzPVxcXCJjaXJjbGVyIGVzc2VuXFxcIiBkYXRhLXN0YXRlPVxcXCJlc3NlblxcXCI+IDxpbWcgc3JjPVxcXCJcIiArIF9fX0hUTUxfTE9BREVSX1JFUExBQ0VNRU5UXzFfX18gKyBcIlxcXCIgY2xhc3M9XFxcImNpcmNsZXIgc3BpZWxcXFwiIGRhdGEtc3RhdGU9XFxcInNwaWVsXFxcIj4gPGltZyBzcmM9XFxcIlwiICsgX19fSFRNTF9MT0FERVJfUkVQTEFDRU1FTlRfMV9fXyArIFwiXFxcIiBjbGFzcz1cXFwiY2lyY2xlciBkYW5jZVxcXCIgZGF0YS1zdGF0ZT1cXFwiZGFuY2VcXFwiPiA8L2Rpdj4gPGRpdiBjbGFzcz1cXFwiZ3JvdyBoZWlnaHQtMTAwIG92ZXJmbG93LWF1dG8gc2l0ZS1jb250ZW50IGhpZGUtZm9yLXNtYWxsLW9ubHkgaGlkZS1zY3JvbGxiYXJcXFwiPiA8ZGl2IGNsYXNzPVxcXCJhbmNob3JcXFwiIGRhdGEtc3RhdGU9XFxcImdvZGlcXFwiPiA8aDE+VHJhdWdvdHRlc2RpZW5zdDwvaDE+IDxwPiBVbSAxMjowMCBVaHIgbcO2Y2h0ZW4gd2lyIGdlbWVpbnNhbSBtaXQgZXVjaCB1bnNlcmVuIFRyYXVnb3R0ZXNkaWVuc3QgaW4gZGVyIEFubmFraXJjaGUgZmVpZXJuIChBbm5hc3RyYcOfZSAzNSwgNTIwNjIgQWFjaGVuKS4gV2VubiBpaHIgbWl0IGRlbSBBdXRvIGFucmVpc3Qga8O2bm50IGlociBpbSBQYXJraGF1cyBhbSBEb20gKEplc3VpdGVuc3RyYcOfZSAxMiwgNTIwNjIgQWFjaGVuKSBwYXJrZW4sIGRhcyBpc3QgZGlyZWt0IG5lYmVuIGRlciBLaXJjaGUuIDxici8+S2xlaW5lciBmdW4gZmFjdDogRXMgbG9obnQgc2ljaCBhdWYgZGVyIG9iZXJzdGVuIEV0YWdlIHp1IHBhcmtlbiwgZG9ydCBnaWJ0IGVzIGVpbmUgdG9sbGUgQXVzc2ljaHQgYXVmIGRlbiBEb20gdW5kIGRhIGhhYmVuIHdpciB1bnMgdmVybG9idC4gPC9wPiA8L2Rpdj4gPGRpdiBjbGFzcz1cXFwiYW5jaG9yXFxcIiBkYXRhLXN0YXRlPVxcXCJmaW5nZXJmb29kXFxcIj4gPGgxPkZpbmdlcmZvb2Q8L2gxPiA8cD4gTmFjaCBkZW0gR290dGVzZGllbnN0IGdpYnQgZXMgc8O8w59lcyB1bmQgc2FsemlnZXMgRmluZ2VyZm9vZCB1bmQgZ2FueiB2aWVsIFplaXQgenVtIEdyYXR1bGllcmVuLiBXZW5uIGlociBldHdhcyB6dW0gQnVmZmV0IGJlaXN0ZXVlcm4gbcO2Y2h0ZXQsIGRhbm4gbWVsZGV0IGV1Y2ggZ2VybmUgYmVpIDxhIGhyZWY9XFxcIm1haWx0bzpzaW5haC5zdGlubmVyQGdvb2dsZW1haWwuY29tXFxcIj5TaW5haCBTdGlubmVyIChzaW5haC5zdGlubmVyQGdvb2dsZW1haWwuY29tKTwvYT4uIDwvcD4gPC9kaXY+IDxkaXYgY2xhc3M9XFxcImFuY2hvclxcXCIgZGF0YS1zdGF0ZT1cXFwiZm90b1xcXCI+IDxoMT5HcnVwcGVuZm90b3M8L2gxPiA8cD4gVW0gZ2FueiB2aWVsZSB3dW5kZXJ2b2xsZSBFcmlubmVydW5nZW4gYW4gZGVuIGJlc29uZGVyZW4gVGFnIHp1IGhhYmVuLCBnZWhlbiB3aXIgZ2VnZW4gMTU6MzAgVWhyIGF1ZiBkZW4gS2F0c2NoaG9mLCB6d2lzY2hlbiBkZW0gQWFjaGVuZXIgRG9tIHVuZCBSYXRoYXVzLCB1bmQgbWFjaGVuIGRvcnQgR3J1cHBlbmZvdG9zLiA8L3A+IDwvZGl2PiA8ZGl2IGNsYXNzPVxcXCJhbmNob3JcXFwiIGRhdGEtc3RhdGU9XFxcInNla3RcXFwiPiA8aDE+U2VrdGVtcGZhbmc8L2gxPiA8cD4gV2lyIGZlaWVybiB1bnNlcmUgSG9jaHplaXQgaW0gRm9ydW0gTSDDvGJlciBkZXIgQWFjaGVuZXIgTWF5ZXJzY2hlbiBtaXQgZWluZW0gd3VuZGVydm9sbGVuIEJsaWNrIMO8YmVyIGRpZSBBYWNoZW5lciBJbm5lbnN0YWR0LiBHZWdlbiAxN2ggd29sbGVuIHdpciBkb3J0IGdlbWVpbnNhbSBhbnN0b8OfZW4uIDwvcD4gPC9kaXY+IDxkaXYgY2xhc3M9XFxcImFuY2hvclxcXCIgZGF0YS1zdGF0ZT1cXFwiZXNzZW5cXFwiPiA8aDE+RmVzdGVzc2VuPC9oMT4gPHA+IFVtIGhhbGIgYWNodCBzdGFydGVuIHdpciBkZW4gQWJlbmQgbWl0IGRlbSBsZWNrZXJlbiBIb2NoemVpdHNidWZmZXQuIDwvcD4gPC9kaXY+IDxkaXYgY2xhc3M9XFxcImFuY2hvclxcXCIgZGF0YS1zdGF0ZT1cXFwic3BpZWxcXFwiPiA8aDE+U3BpZWwgdW5kIFNwYXNzPC9oMT4gPHA+IFdpciBmcmV1ZW4gdW5zIGF1ZiB2aWVsZSBlaW56aWdhcnRpZ2UsIGx1c3RpZ2UgdW5kIHNwYcOfaWdlIFByb2dyYW1tYmVpdHLDpGdlIHZvbiBldWNoLiBXZW5uIGlociBlcyBzY2hvbiBnYXIgbmljaHQgZXJ3YXJ0ZW4ga8O2bm50IHVucyBlaW5lIEZyZXVkZSB6dSBtYWNoZW4gdW5kIGVpbmVuIEJlaXRyYWcgYmVpenVzdGV1ZXJuLCBkYW5uIG1lbGRldCBldWNoIGdlcm5lIGJlaSA8YSBocmVmPVxcXCJtYWlsdG86c2VpdHotbWlyaWFtQHdlYi5kZVxcXCI+TWlyaWFtIFNlaXR6IChzZWl0ei1taXJpYW1Ad2ViLmRlKTwvYT4uIFVuZCBrZWluZSBTb3JnZSwgTWlyaWFtIGJlaMOkbHQgYWxsZSBCZWl0csOkZ2UgdW5kIMOcYmVycmFzY2h1bmdlbiBmw7xyIHNpY2gsIGFiZXIgc2FndCBpaHIgYml0dGUgYmVpIGFsbGVtIEJlc2NoZWlkLCB3YXMgaWhyIHBsYW5lbiB3b2xsdC4gPC9wPiA8L2Rpdj4gPGRpdiBjbGFzcz1cXFwiYW5jaG9yXFxcIiBkYXRhLXN0YXRlPVxcXCJkYW5jZVxcXCI+IDxoMT5MZXQncyBEYW5jZTwvaDE+IDxwPiBJaHIga8O2bm50IHp1aGF1c2Ugc2Nob25tYWwgw7xiZW4sIHVtIGRpZSBUYW56ZmzDpGNoZSB1bnNpY2hlciB6dSBtYWNoZW4hIDwvcD4gPC9kaXY+IDwvZGl2PiA8L2Rpdj4gPGRpdiBpZD1cXFwibW9kYWxcXFwiPjwvZGl2PiBcIjtcbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gY29kZTsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwic3RhdGljL21lZGlhL3RhZ2VzYWJsYXVmX25ldS41N2I5NTE0Ny5qcGdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwic3RhdGljL21lZGlhL2VpbmtyZWlzZXIuZTFjZGU5ZjQucG5nXCI7IiwiLy8gSW1wb3J0c1xudmFyIF9fX0hUTUxfTE9BREVSX0dFVF9TT1VSQ0VfRlJPTV9JTVBPUlRfX18gPSByZXF1aXJlKFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2h0bWwtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanNcIik7XG52YXIgX19fSFRNTF9MT0FERVJfSU1QT1JUXzBfX18gPSByZXF1aXJlKFwiLi4vaW1nL2dlc2NoZW5rZS5qcGdcIik7XG4vLyBNb2R1bGVcbnZhciBfX19IVE1MX0xPQURFUl9SRVBMQUNFTUVOVF8wX19fID0gX19fSFRNTF9MT0FERVJfR0VUX1NPVVJDRV9GUk9NX0lNUE9SVF9fXyhfX19IVE1MX0xPQURFUl9JTVBPUlRfMF9fXyk7XG52YXIgY29kZSA9IFwiPGRpdiBjbGFzcz1cXFwiZmxleC1jb250YWluZXIgZmlsbC1oZWlnaHQtbWVkaXVtLXVwXFxcIj4gPGRpdiBjbGFzcz1cXFwiZ3JvdyBoZWlnaHQtMTAwIG92ZXJmbG93LWF1dG8gc2l0ZS1jb250ZW50IGhpZGUtc2Nyb2xsYmFyXFxcIj4gPGgxPkdlc2NoZW5rZWxpc3RlPC9oMT4gPHA+IElociBtYWNodCB1bnMgZGllIGdyw7bDn3RlIEZyZXVkZSwgd2VubiBpaHIgbWl0IHVucyBmZWllcnQgdW5kIGRlbiBUYWcgdmVyYnJpbmd0LiBXZW5uIGlociB1bnMgZ2VybmUgZXR3YXMgc2NoZW5rZW4gbcO2Y2h0ZXQsIGhhYmVuIHdpciBlaW5lIExpc3RlIHp1c2FtbWVuZ2VzdGVsbHQsIHdvcsO8YmVyIHdpciB1bnMgc2VociBmcmV1ZW4uIEF1w59lcmRlbSBsaWViZW4gd2lyIGVzIHp1IHJlaXNlbiB1bmQgZnJldWVuIHVucyBpbW1lciDDvGJlciBHZWxkIGbDvHIgdW5zZXJlIFJlaXNla2Fzc2UuIEZhbGxzIGlociBldWNoIHVudGVuIGluIGRlciBMaXN0ZSBldHdhcyBhdXNnZXN1Y2h0IGhhYnQsIGRhbm4gc2V0enQgZG9ydCBnZXJuZSBlaW5lbiBIYWtlbi4gV2VubiBpaHIgYXVmIGVpbiBCaWxkIGtsaWNrdCwgw7ZmZm5ldCBzaWNoIGRpcmVrdCBkZXIgcGFzc2VuZGUgTGluayBkYXp1LiA8L3A+IDxkaXYgaWQ9XFxcInByZXNlbnQtY29udGFpbmVyXFxcIj4gPGEgaWQ9XFxcInByZXNlbnQtdGVtcGxhdGVcXFwiIGNsYXNzPVxcXCJmbGV4LWNvbnRhaW5lciBwcmVzZW50XFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCI+IDxkaXYgY2xhc3M9XFxcInByZXNlbnQtY2hlY2tib3hcXFwiPiA8ZGl2PjwvZGl2PiA8L2Rpdj4gPGltZyBjbGFzcz1cXFwicHJlc2VudC1pbWFnZVxcXCI+IDxkaXYgY2xhc3M9XFxcImdyb3cgcHJlc2VudC1pbmZvXFxcIj4gPGRpdj4gPGRpdiBjbGFzcz1cXFwicHJlc2VudC1uYW1lXFxcIj48L2Rpdj4gPGRpdiBjbGFzcz1cXFwicHJlc2VudC1kZXNjcmlwdGlvblxcXCI+PC9kaXY+IDwvZGl2PiA8L2Rpdj4gPC9hPiA8L2Rpdj4gPC9kaXY+IDxkaXYgY2xhc3M9XFxcImhlaWdodC0xMDAgaGlkZS1mb3Itc21hbGwtb25seSBpbWctY29sdW1uIGZpbGwtaGVpZ2h0XFxcIj4gPGltZyBzcmM9XFxcIlwiICsgX19fSFRNTF9MT0FERVJfUkVQTEFDRU1FTlRfMF9fXyArIFwiXFxcIiBjbGFzcz1cXFwiaGVpZ2h0LTEwMFxcXCI+IDwvZGl2PiA8L2Rpdj4gXCI7XG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IGNvZGU7IiwiLy8gTW9kdWxlXG52YXIgY29kZSA9IFwiPGRpdiBjbGFzcz1cXFwic2l0ZS1jb250ZW50IGdyaWQtY29udGFpbmVyXFxcIj4gPGgxPlN0YW5kZXNhbXRsaWNoZSBUcmF1dW5nPC9oMT4gPHA+SGllciBmaW5kZXQgaWhyIGVpbiBwYWFyIEltcHJlc3Npb25lbiB6dSB1bnNlcmVyIHN0YW5kZXNhbXRsaWNoZW4gVHJhdXVuZyBsZXR6dGVzIEphaHIuIFdpciBoYWJlbiB0cm90eiBTdGFydCBkZXMgYnVuZGVzd2VpdGVuIExvY2tkb3ducyBlaW5lbiB3dW5kZXJzY2jDtm5lbiBUYWcgaW0ga2xlaW5lbiBGYW1pbGllbmtyZWlzIHZlcmJyYWNodC48L3A+PGJyLz4gPGRpdiBpZD1cXFwiZ2FsbGVyeVxcXCI+PC9kaXY+IDwvZGl2PiBcIjtcbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gY29kZTsiLCIvLyBNb2R1bGVcbnZhciBjb2RlID0gXCI8ZGl2IGNsYXNzPVxcXCJzaXRlLWNvbnRlbnQgZ3JpZC1jb250YWluZXJcXFwiPiA8aDE+Rm90b2JveDwvaDE+IDxwPkVzIHd1cmRlbiBlaW5pZ2UgRm90b3MgaW4gZGVyIEZvdG9ib3ggZ2VtYWNodCwgZGllIGlociBoaWVyIGFuc2VoZW4gdW5kIDxhIGhyZWY9XFxcIi9iaWxkZXIvRm90b2JveC56aXBcXFwiIHRhcmdldD1cXFwiX2JsYW5rXFxcIj5kb3dubG9hZGVuPC9hPiBrw7ZubnQuPC9wPjxici8+IDxkaXYgaWQ9XFxcImdhbGxlcnlcXFwiPjwvZGl2PiA8L2Rpdj4gXCI7XG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IGNvZGU7IiwiLy8gTW9kdWxlXG52YXIgY29kZSA9IFwiPGRpdiBjbGFzcz1cXFwic2l0ZS1jb250ZW50IGdyaWQtY29udGFpbmVyXFxcIj4gPGgxPkhvY2h6ZWl0c2ZvdG9zPC9oMT4gPHA+SGllciBrw7ZubnQgaWhyIGRpZSBGb3RvcyB1bnNlcmVyIEhvY2h6ZWl0IGFuc2VoZW4gdW5kIDxhIGhyZWY9XFxcIi9iaWxkZXIvSG9jaHplaXQuemlwXFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCI+ZG93bmxvYWRlbi48L2E+PC9wPjxici8+IDxkaXYgaWQ9XFxcImdhbGxlcnlcXFwiPjwvZGl2PiA8L2Rpdj4gXCI7XG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IGNvZGU7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9tZWRpYS9ob21lLjY0ZjA1ZWRlLmpwZ1wiOyIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbi8vIENvcmUgRm91bmRhdGlvbiBVdGlsaXRpZXMsIHV0aWxpemVkIGluIGEgbnVtYmVyIG9mIHBsYWNlcy5cblxuICAvKipcbiAgICogUmV0dXJucyBhIGJvb2xlYW4gZm9yIFJUTCBzdXBwb3J0XG4gICAqL1xuZnVuY3Rpb24gcnRsKCkge1xuICByZXR1cm4gJCgnaHRtbCcpLmF0dHIoJ2RpcicpID09PSAncnRsJztcbn1cblxuLyoqXG4gKiByZXR1cm5zIGEgcmFuZG9tIGJhc2UtMzYgdWlkIHdpdGggbmFtZXNwYWNpbmdcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IGxlbmd0aCAtIG51bWJlciBvZiByYW5kb20gYmFzZS0zNiBkaWdpdHMgZGVzaXJlZC4gSW5jcmVhc2UgZm9yIG1vcmUgcmFuZG9tIHN0cmluZ3MuXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlIC0gbmFtZSBvZiBwbHVnaW4gdG8gYmUgaW5jb3Jwb3JhdGVkIGluIHVpZCwgb3B0aW9uYWwuXG4gKiBAZGVmYXVsdCB7U3RyaW5nfSAnJyAtIGlmIG5vIHBsdWdpbiBuYW1lIGlzIHByb3ZpZGVkLCBub3RoaW5nIGlzIGFwcGVuZGVkIHRvIHRoZSB1aWQuXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAtIHVuaXF1ZSBpZFxuICovXG5mdW5jdGlvbiBHZXRZb0RpZ2l0cyhsZW5ndGggPSA2LCBuYW1lc3BhY2Upe1xuICBsZXQgc3RyID0gJyc7XG4gIGNvbnN0IGNoYXJzID0gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7XG4gIGNvbnN0IGNoYXJzTGVuZ3RoID0gY2hhcnMubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgc3RyICs9IGNoYXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzTGVuZ3RoKV07XG4gIH1cbiAgcmV0dXJuIG5hbWVzcGFjZSA/IGAke3N0cn0tJHtuYW1lc3BhY2V9YCA6IHN0cjtcbn1cblxuLyoqXG4gKiBFc2NhcGUgYSBzdHJpbmcgc28gaXQgY2FuIGJlIHVzZWQgYXMgYSByZWdleHAgcGF0dGVyblxuICogQGZ1bmN0aW9uXG4gKiBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85MzEwNzUyLzQzMTczODRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIC0gc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IC0gZXNjYXBlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gUmVnRXhwRXNjYXBlKHN0cil7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKTtcbn1cblxuZnVuY3Rpb24gdHJhbnNpdGlvbmVuZCgkZWxlbSl7XG4gIHZhciB0cmFuc2l0aW9ucyA9IHtcbiAgICAndHJhbnNpdGlvbic6ICd0cmFuc2l0aW9uZW5kJyxcbiAgICAnV2Via2l0VHJhbnNpdGlvbic6ICd3ZWJraXRUcmFuc2l0aW9uRW5kJyxcbiAgICAnTW96VHJhbnNpdGlvbic6ICd0cmFuc2l0aW9uZW5kJyxcbiAgICAnT1RyYW5zaXRpb24nOiAnb3RyYW5zaXRpb25lbmQnXG4gIH07XG4gIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG4gICAgICBlbmQ7XG5cbiAgZm9yIChsZXQgdHJhbnNpdGlvbiBpbiB0cmFuc2l0aW9ucyl7XG4gICAgaWYgKHR5cGVvZiBlbGVtLnN0eWxlW3RyYW5zaXRpb25dICE9PSAndW5kZWZpbmVkJyl7XG4gICAgICBlbmQgPSB0cmFuc2l0aW9uc1t0cmFuc2l0aW9uXTtcbiAgICB9XG4gIH1cbiAgaWYgKGVuZCkge1xuICAgIHJldHVybiBlbmQ7XG4gIH0gZWxzZSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgJGVsZW0udHJpZ2dlckhhbmRsZXIoJ3RyYW5zaXRpb25lbmQnLCBbJGVsZW1dKTtcbiAgICB9LCAxKTtcbiAgICByZXR1cm4gJ3RyYW5zaXRpb25lbmQnO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGV2ZW50IHR5cGUgdG8gbGlzdGVuIGZvciB3aW5kb3cgbG9hZC5cbiAqXG4gKiBJZiBgJGVsZW1gIGlzIHBhc3NlZCwgYW4gZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgb24gYCRlbGVtYC4gSWYgd2luZG93IGlzIGFscmVhZHkgbG9hZGVkLCB0aGUgZXZlbnQgd2lsbCBzdGlsbCBiZSB0cmlnZ2VyZWQuXG4gKiBJZiBgaGFuZGxlcmAgaXMgcGFzc2VkLCBhdHRhY2ggaXQgdG8gdGhlIGV2ZW50IG9uIGAkZWxlbWAuXG4gKiBDYWxsaW5nIGBvbkxvYWRgIHdpdGhvdXQgaGFuZGxlciBhbGxvd3MgeW91IHRvIGdldCB0aGUgZXZlbnQgdHlwZSB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIGJlZm9yZSBhdHRhY2hpbmcgdGhlIGhhbmRsZXIgYnkgeW91cnNlbGYuXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW10gJGVsZW0gLSBqUXVlcnkgZWxlbWVudCBvbiB3aGljaCB0aGUgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgaWYgcGFzc2VkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW10gaGFuZGxlciAtIGZ1bmN0aW9uIHRvIGF0dGFjaCB0byB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAtIGV2ZW50IHR5cGUgdGhhdCBzaG91bGQgb3Igd2lsbCBiZSB0cmlnZ2VyZWQuXG4gKi9cbmZ1bmN0aW9uIG9uTG9hZCgkZWxlbSwgaGFuZGxlcikge1xuICBjb25zdCBkaWRMb2FkID0gZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJztcbiAgY29uc3QgZXZlbnRUeXBlID0gKGRpZExvYWQgPyAnX2RpZExvYWQnIDogJ2xvYWQnKSArICcuemYudXRpbC5vbkxvYWQnO1xuICBjb25zdCBjYiA9ICgpID0+ICRlbGVtLnRyaWdnZXJIYW5kbGVyKGV2ZW50VHlwZSk7XG5cbiAgaWYgKCRlbGVtKSB7XG4gICAgaWYgKGhhbmRsZXIpICRlbGVtLm9uZShldmVudFR5cGUsIGhhbmRsZXIpO1xuXG4gICAgaWYgKGRpZExvYWQpXG4gICAgICBzZXRUaW1lb3V0KGNiKTtcbiAgICBlbHNlXG4gICAgICAkKHdpbmRvdykub25lKCdsb2FkJywgY2IpO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50VHlwZTtcbn1cblxuLyoqXG4gKiBSZXR1bnMgYW4gaGFuZGxlciBmb3IgdGhlIGBtb3VzZWxlYXZlYCB0aGF0IGlnbm9yZSBkaXNhcHBlYXJlZCBtb3VzZXMuXG4gKlxuICogSWYgdGhlIG1vdXNlIFwiZGlzYXBwZWFyZWRcIiBmcm9tIHRoZSBkb2N1bWVudCAobGlrZSB3aGVuIGdvaW5nIG9uIGEgYnJvd3NlciBVSSBlbGVtZW50LCBTZWUgaHR0cHM6Ly9naXQuaW8vemYtMTE0MTApLFxuICogdGhlIGV2ZW50IGlzIGlnbm9yZWQuXG4gKiAtIElmIHRoZSBgaWdub3JlTGVhdmVXaW5kb3dgIGlzIGB0cnVlYCwgdGhlIGV2ZW50IGlzIGlnbm9yZWQgd2hlbiB0aGUgdXNlciBhY3R1YWxseSBsZWZ0IHRoZSB3aW5kb3dcbiAqICAgKGxpa2UgYnkgc3dpdGNoaW5nIHRvIGFuIG90aGVyIHdpbmRvdyB3aXRoIFtBbHRdK1tUYWJdKS5cbiAqIC0gSWYgdGhlIGBpZ25vcmVSZWFwcGVhcmAgaXMgYHRydWVgLCB0aGUgZXZlbnQgd2lsbCBiZSBpZ25vcmVkIHdoZW4gdGhlIG1vdXNlIHdpbGwgcmVhcHBlYXIgbGF0ZXIgb24gdGhlIGRvY3VtZW50XG4gKiAgIG91dHNpZGUgb2YgdGhlIGVsZW1lbnQgaXQgbGVmdC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbXSBoYW5kbGVyIC0gaGFuZGxlciBmb3IgdGhlIGZpbHRlcmVkIGBtb3VzZWxlYXZlYCBldmVudCB0byB3YXRjaC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbXSBvcHRpb25zIC0gb2JqZWN0IG9mIG9wdGlvbnM6XG4gKiAtIHtCb29sZWFufSBbZmFsc2VdIGlnbm9yZUxlYXZlV2luZG93IC0gYWxzbyBpZ25vcmUgd2hlbiB0aGUgdXNlciBzd2l0Y2hlZCB3aW5kb3dzLlxuICogLSB7Qm9vbGVhbn0gW2ZhbHNlXSBpZ25vcmVSZWFwcGVhciAtIGFsc28gaWdub3JlIHdoZW4gdGhlIG1vdXNlIHJlYXBwZWFyZWQgb3V0c2lkZSBvZiB0aGUgZWxlbWVudCBpdCBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSAtIGZpbHRlcmVkIGhhbmRsZXIgdG8gdXNlIHRvIGxpc3RlbiBvbiB0aGUgYG1vdXNlbGVhdmVgIGV2ZW50LlxuICovXG5mdW5jdGlvbiBpZ25vcmVNb3VzZWRpc2FwcGVhcihoYW5kbGVyLCB7IGlnbm9yZUxlYXZlV2luZG93ID0gZmFsc2UsIGlnbm9yZVJlYXBwZWFyID0gZmFsc2UgfSA9IHt9KSB7XG4gIHJldHVybiBmdW5jdGlvbiBsZWF2ZUV2ZW50SGFuZGxlcihlTGVhdmUsIC4uLnJlc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IGhhbmRsZXIuYmluZCh0aGlzLCBlTGVhdmUsIC4uLnJlc3QpO1xuXG4gICAgLy8gVGhlIG1vdXNlIGxlZnQ6IGNhbGwgdGhlIGdpdmVuIGNhbGxiYWNrIGlmIHRoZSBtb3VzZSBlbnRlcmVkIGVsc2V3aGVyZVxuICAgIGlmIChlTGVhdmUucmVsYXRlZFRhcmdldCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBjaGVjayBpZiB0aGUgbW91c2UgYWN0dWFsbHkgbGVmdCB0aGUgd2luZG93LlxuICAgIC8vIEluIGZpcmVmb3ggaWYgdGhlIHVzZXIgc3dpdGNoZWQgYmV0d2VlbiB3aW5kb3dzLCB0aGUgd2luZG93IHNpbGwgaGF2ZSB0aGUgZm9jdXMgYnkgdGhlIHRpbWVcbiAgICAvLyB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBXZSBoYXZlIHRvIGRlYm91bmNlIHRoZSBldmVudCB0byB0ZXN0IHRoaXMgY2FzZS5cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uIGxlYXZlRXZlbnREZWJvdW5jZXIoKSB7XG4gICAgICBpZiAoIWlnbm9yZUxlYXZlV2luZG93ICYmIGRvY3VtZW50Lmhhc0ZvY3VzICYmICFkb2N1bWVudC5oYXNGb2N1cygpKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICAvLyBPdGhlcndpc2UsIHdhaXQgZm9yIHRoZSBtb3VzZSB0byByZWVhcGVhciBvdXRzaWRlIG9mIHRoZSBlbGVtZW50LFxuICAgICAgaWYgKCFpZ25vcmVSZWFwcGVhcikge1xuICAgICAgICAkKGRvY3VtZW50KS5vbmUoJ21vdXNlZW50ZXInLCBmdW5jdGlvbiByZWVudGVyRXZlbnRIYW5kbGVyKGVSZWVudGVyKSB7XG4gICAgICAgICAgaWYgKCEkKGVMZWF2ZS5jdXJyZW50VGFyZ2V0KS5oYXMoZVJlZW50ZXIudGFyZ2V0KS5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIEZpbGwgd2hlcmUgdGhlIG1vdXNlIGZpbmFsbHkgZW50ZXJlZC5cbiAgICAgICAgICAgIGVMZWF2ZS5yZWxhdGVkVGFyZ2V0ID0gZVJlZW50ZXIudGFyZ2V0O1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfSwgMCk7XG4gIH07XG59XG5cbnZhciBmb3VuZGF0aW9uX2NvcmVfdXRpbHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgcnRsOiBydGwsXG4gIEdldFlvRGlnaXRzOiBHZXRZb0RpZ2l0cyxcbiAgUmVnRXhwRXNjYXBlOiBSZWdFeHBFc2NhcGUsXG4gIHRyYW5zaXRpb25lbmQ6IHRyYW5zaXRpb25lbmQsXG4gIG9uTG9hZDogb25Mb2FkLFxuICBpZ25vcmVNb3VzZWRpc2FwcGVhcjogaWdub3JlTW91c2VkaXNhcHBlYXJcbn0pO1xuXG4vLyBEZWZhdWx0IHNldCBvZiBtZWRpYSBxdWVyaWVzXG4vLyBjb25zdCBkZWZhdWx0UXVlcmllcyA9IHtcbi8vICAgJ2RlZmF1bHQnIDogJ29ubHkgc2NyZWVuJyxcbi8vICAgbGFuZHNjYXBlIDogJ29ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSknLFxuLy8gICBwb3J0cmFpdCA6ICdvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCknLFxuLy8gICByZXRpbmEgOiAnb25seSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCcgK1xuLy8gICAgICdvbmx5IHNjcmVlbiBhbmQgKG1pbi0tbW96LWRldmljZS1waXhlbC1yYXRpbzogMiksJyArXG4vLyAgICAgJ29ubHkgc2NyZWVuIGFuZCAoLW8tbWluLWRldmljZS1waXhlbC1yYXRpbzogMi8xKSwnICtcbi8vICAgICAnb25seSBzY3JlZW4gYW5kIChtaW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwnICtcbi8vICAgICAnb25seSBzY3JlZW4gYW5kIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSwnICtcbi8vICAgICAnb25seSBzY3JlZW4gYW5kIChtaW4tcmVzb2x1dGlvbjogMmRwcHgpJ1xuLy8gICB9O1xuXG5cbi8vIG1hdGNoTWVkaWEoKSBwb2x5ZmlsbCAtIFRlc3QgYSBDU1MgbWVkaWEgdHlwZS9xdWVyeSBpbiBKUy5cbi8vIEF1dGhvcnMgJiBjb3B5cmlnaHQgwqkgMjAxMjogU2NvdHQgSmVobCwgUGF1bCBJcmlzaCwgTmljaG9sYXMgWmFrYXMsIERhdmlkIEtuaWdodC4gTUlUIGxpY2Vuc2Vcbi8qIGVzbGludC1kaXNhYmxlICovXG53aW5kb3cubWF0Y2hNZWRpYSB8fCAod2luZG93Lm1hdGNoTWVkaWEgPSAoZnVuY3Rpb24gKCkge1xuXG4gIC8vIEZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgbWF0Y2hNZWRpdW0gYXBpIHN1Y2ggYXMgSUUgOSBhbmQgd2Via2l0XG4gIHZhciBzdHlsZU1lZGlhID0gKHdpbmRvdy5zdHlsZU1lZGlhIHx8IHdpbmRvdy5tZWRpYSk7XG5cbiAgLy8gRm9yIHRob3NlIHRoYXQgZG9uJ3Qgc3VwcG9ydCBtYXRjaE1lZGl1bVxuICBpZiAoIXN0eWxlTWVkaWEpIHtcbiAgICB2YXIgc3R5bGUgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG4gICAgc2NyaXB0ICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF0sXG4gICAgaW5mbyAgICAgICAgPSBudWxsO1xuXG4gICAgc3R5bGUudHlwZSAgPSAndGV4dC9jc3MnO1xuICAgIHN0eWxlLmlkICAgID0gJ21hdGNobWVkaWFqcy10ZXN0JztcblxuICAgIGlmICghc2NyaXB0KSB7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NyaXB0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHN0eWxlLCBzY3JpcHQpO1xuICAgIH1cblxuICAgIC8vICdzdHlsZS5jdXJyZW50U3R5bGUnIGlzIHVzZWQgYnkgSUUgPD0gOCBhbmQgJ3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlJyBmb3IgYWxsIG90aGVyIGJyb3dzZXJzXG4gICAgaW5mbyA9ICgnZ2V0Q29tcHV0ZWRTdHlsZScgaW4gd2luZG93KSAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzdHlsZSwgbnVsbCkgfHwgc3R5bGUuY3VycmVudFN0eWxlO1xuXG4gICAgc3R5bGVNZWRpYSA9IHtcbiAgICAgIG1hdGNoTWVkaXVtOiBmdW5jdGlvbiAobWVkaWEpIHtcbiAgICAgICAgdmFyIHRleHQgPSAnQG1lZGlhICcgKyBtZWRpYSArICd7ICNtYXRjaG1lZGlhanMtdGVzdCB7IHdpZHRoOiAxcHg7IH0gfSc7XG5cbiAgICAgICAgLy8gJ3N0eWxlLnN0eWxlU2hlZXQnIGlzIHVzZWQgYnkgSUUgPD0gOCBhbmQgJ3N0eWxlLnRleHRDb250ZW50JyBmb3IgYWxsIG90aGVyIGJyb3dzZXJzXG4gICAgICAgIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgICAgICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gdGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHlsZS50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUZXN0IGlmIG1lZGlhIHF1ZXJ5IGlzIHRydWUgb3IgZmFsc2VcbiAgICAgICAgcmV0dXJuIGluZm8ud2lkdGggPT09ICcxcHgnO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24obWVkaWEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0Y2hlczogc3R5bGVNZWRpYS5tYXRjaE1lZGl1bShtZWRpYSB8fCAnYWxsJyksXG4gICAgICBtZWRpYTogbWVkaWEgfHwgJ2FsbCdcbiAgICB9O1xuICB9O1xufSkoKSk7XG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbnZhciBNZWRpYVF1ZXJ5ID0ge1xuICBxdWVyaWVzOiBbXSxcblxuICBjdXJyZW50OiAnJyxcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIG1lZGlhIHF1ZXJ5IGhlbHBlciwgYnkgZXh0cmFjdGluZyB0aGUgYnJlYWtwb2ludCBsaXN0IGZyb20gdGhlIENTUyBhbmQgYWN0aXZhdGluZyB0aGUgYnJlYWtwb2ludCB3YXRjaGVyLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSBpbml0aWFsaXphdGlvbiBpcyBvbmx5IGRvbmUgb25jZSB3aGVuIGNhbGxpbmcgX2luaXQoKSBzZXZlcmFsIHRpbWVzXG4gICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciAkbWV0YSA9ICQoJ21ldGEuZm91bmRhdGlvbi1tcScpO1xuICAgIGlmKCEkbWV0YS5sZW5ndGgpe1xuICAgICAgJCgnPG1ldGEgY2xhc3M9XCJmb3VuZGF0aW9uLW1xXCIgbmFtZT1cImZvdW5kYXRpb24tbXFcIiBjb250ZW50PicpLmFwcGVuZFRvKGRvY3VtZW50LmhlYWQpO1xuICAgIH1cblxuICAgIHZhciBleHRyYWN0ZWRTdHlsZXMgPSAkKCcuZm91bmRhdGlvbi1tcScpLmNzcygnZm9udC1mYW1pbHknKTtcbiAgICB2YXIgbmFtZWRRdWVyaWVzO1xuXG4gICAgbmFtZWRRdWVyaWVzID0gcGFyc2VTdHlsZVRvT2JqZWN0KGV4dHJhY3RlZFN0eWxlcyk7XG5cbiAgICBzZWxmLnF1ZXJpZXMgPSBbXTsgLy8gcmVzZXRcblxuICAgIGZvciAodmFyIGtleSBpbiBuYW1lZFF1ZXJpZXMpIHtcbiAgICAgIGlmKG5hbWVkUXVlcmllcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHNlbGYucXVlcmllcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBrZXksXG4gICAgICAgICAgdmFsdWU6IGBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJHtuYW1lZFF1ZXJpZXNba2V5XX0pYFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLl9nZXRDdXJyZW50U2l6ZSgpO1xuXG4gICAgdGhpcy5fd2F0Y2hlcigpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWluaXRpYWxpemVzIHRoZSBtZWRpYSBxdWVyeSBoZWxwZXIuXG4gICAqIFVzZWZ1bCBpZiB5b3VyIENTUyBicmVha3BvaW50IGNvbmZpZ3VyYXRpb24gaGFzIGp1c3QgYmVlbiBsb2FkZWQgb3IgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGluaXRpYWxpemF0aW9uLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZUluaXQoKSB7XG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5faW5pdCgpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHNjcmVlbiBpcyBhdCBsZWFzdCBhcyB3aWRlIGFzIGEgYnJlYWtwb2ludC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzaXplIC0gTmFtZSBvZiB0aGUgYnJlYWtwb2ludCB0byBjaGVjay5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgYnJlYWtwb2ludCBtYXRjaGVzLCBgZmFsc2VgIGlmIGl0J3Mgc21hbGxlci5cbiAgICovXG4gIGF0TGVhc3Qoc2l6ZSkge1xuICAgIHZhciBxdWVyeSA9IHRoaXMuZ2V0KHNpemUpO1xuXG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEocXVlcnkpLm1hdGNoZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHNjcmVlbiBpcyB3aXRoaW4gdGhlIGdpdmVuIGJyZWFrcG9pbnQuXG4gICAqIElmIHNtYWxsZXIgdGhhbiB0aGUgYnJlYWtwb2ludCBvZiBsYXJnZXIgdGhhbiBpdHMgdXBwZXIgbGltaXQgaXQgcmV0dXJucyBmYWxzZS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzaXplIC0gTmFtZSBvZiB0aGUgYnJlYWtwb2ludCB0byBjaGVjay5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgYnJlYWtwb2ludCBtYXRjaGVzLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIG9ubHkoc2l6ZSkge1xuICAgIHJldHVybiBzaXplID09PSB0aGlzLl9nZXRDdXJyZW50U2l6ZSgpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHNjcmVlbiBpcyB3aXRoaW4gYSBicmVha3BvaW50IG9yIHNtYWxsZXIuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gc2l6ZSAtIE5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGJyZWFrcG9pbnQgbWF0Y2hlcywgYGZhbHNlYCBpZiBpdCdzIGxhcmdlci5cbiAgICovXG4gIHVwVG8oc2l6ZSkge1xuICAgIGNvbnN0IG5leHRTaXplID0gdGhpcy5uZXh0KHNpemUpO1xuXG4gICAgLy8gSWYgdGhlIG5leHQgYnJlYWtwb2ludCBkb2VzIG5vdCBtYXRjaCwgdGhlIHNjcmVlbiBpcyBzbWFsbGVyIHRoYW5cbiAgICAvLyB0aGUgdXBwZXIgbGltaXQgb2YgdGhpcyBicmVha3BvaW50LlxuICAgIGlmIChuZXh0U2l6ZSkge1xuICAgICAgcmV0dXJuICF0aGlzLmF0TGVhc3QobmV4dFNpemUpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIG5vIG5leHQgYnJlYWtwb2ludCwgdGhlIFwic2l6ZVwiIGJyZWFrcG9pbnQgZG9lcyBub3QgaGF2ZVxuICAgIC8vIGFuIHVwcGVyIGxpbWl0IGFuZCB0aGUgc2NyZWVuIHdpbGwgYWx3YXlzIGJlIHdpdGhpbiBpdCBvciBzbWFsbGVyLlxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHNjcmVlbiBtYXRjaGVzIHRvIGEgYnJlYWtwb2ludC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzaXplIC0gTmFtZSBvZiB0aGUgYnJlYWtwb2ludCB0byBjaGVjaywgZWl0aGVyICdzbWFsbCBvbmx5JyBvciAnc21hbGwnLiBPbWl0dGluZyAnb25seScgZmFsbHMgYmFjayB0byB1c2luZyBhdExlYXN0KCkgbWV0aG9kLlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBicmVha3BvaW50IG1hdGNoZXMsIGBmYWxzZWAgaWYgaXQgZG9lcyBub3QuXG4gICAqL1xuICBpcyhzaXplKSB7XG4gICAgY29uc3QgcGFydHMgPSBzaXplLnRyaW0oKS5zcGxpdCgnICcpLmZpbHRlcihwID0+ICEhcC5sZW5ndGgpO1xuICAgIGNvbnN0IFticFNpemUsIGJwTW9kaWZpZXIgPSAnJ10gPSBwYXJ0cztcblxuICAgIC8vIE9ubHkgdGhlIGJyZWFrcG9udFxuICAgIGlmIChicE1vZGlmaWVyID09PSAnb25seScpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ubHkoYnBTaXplKTtcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgdGhlIGJyZWFrcG9pbnQgKGluY2x1ZGVkKVxuICAgIGlmICghYnBNb2RpZmllciB8fCBicE1vZGlmaWVyID09PSAndXAnKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdExlYXN0KGJwU2l6ZSk7XG4gICAgfVxuICAgIC8vIFVwIHRvIHRoZSBicmVha3BvaW50IChpbmNsdWRlZClcbiAgICBpZiAoYnBNb2RpZmllciA9PT0gJ2Rvd24nKSB7XG4gICAgICByZXR1cm4gdGhpcy51cFRvKGJwU2l6ZSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBcbiAgICAgIEludmFsaWQgYnJlYWtwb2ludCBwYXNzZWQgdG8gTWVkaWFRdWVyeS5pcygpLlxuICAgICAgRXhwZWN0ZWQgYSBicmVha3BvaW50IG5hbWUgZm9ybWF0dGVkIGxpa2UgXCI8c2l6ZT4gPG1vZGlmaWVyPlwiLCBnb3QgXCIke3NpemV9XCIuXG4gICAgYCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1lZGlhIHF1ZXJ5IG9mIGEgYnJlYWtwb2ludC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzaXplIC0gTmFtZSBvZiB0aGUgYnJlYWtwb2ludCB0byBnZXQuXG4gICAqIEByZXR1cm5zIHtTdHJpbmd8bnVsbH0gLSBUaGUgbWVkaWEgcXVlcnkgb2YgdGhlIGJyZWFrcG9pbnQsIG9yIGBudWxsYCBpZiB0aGUgYnJlYWtwb2ludCBkb2Vzbid0IGV4aXN0LlxuICAgKi9cbiAgZ2V0KHNpemUpIHtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMucXVlcmllcykge1xuICAgICAgaWYodGhpcy5xdWVyaWVzLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcmllc1tpXTtcbiAgICAgICAgaWYgKHNpemUgPT09IHF1ZXJ5Lm5hbWUpIHJldHVybiBxdWVyeS52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IHRoZSBicmVha3BvaW50IGZvbGxvd2luZyB0aGUgZ2l2ZW4gYnJlYWtwb2ludC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzaXplIC0gTmFtZSBvZiB0aGUgYnJlYWtwb2ludC5cbiAgICogQHJldHVybnMge1N0cmluZ3xudWxsfSAtIFRoZSBuYW1lIG9mIHRoZSBmb2xsb3dpbmcgYnJlYWtwb2ludCwgb3IgYG51bGxgIGlmIHRoZSBwYXNzZWQgYnJlYWtwb2ludCB3YXMgdGhlIGxhc3Qgb25lLlxuICAgKi9cbiAgbmV4dChzaXplKSB7XG4gICAgY29uc3QgcXVlcnlJbmRleCA9IHRoaXMucXVlcmllcy5maW5kSW5kZXgoKHEpID0+IHRoaXMuX2dldFF1ZXJ5TmFtZShxKSA9PT0gc2l6ZSk7XG4gICAgaWYgKHF1ZXJ5SW5kZXggPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgICBVbmtub3duIGJyZWFrcG9pbnQgXCIke3NpemV9XCIgcGFzc2VkIHRvIE1lZGlhUXVlcnkubmV4dCgpLlxuICAgICAgICBFbnN1cmUgaXQgaXMgcHJlc2VudCBpbiB5b3VyIFNhc3MgXCIkYnJlYWtwb2ludHNcIiBzZXR0aW5nLlxuICAgICAgYCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFF1ZXJ5ID0gdGhpcy5xdWVyaWVzW3F1ZXJ5SW5kZXggKyAxXTtcbiAgICByZXR1cm4gbmV4dFF1ZXJ5ID8gbmV4dFF1ZXJ5Lm5hbWUgOiBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBicmVha3BvaW50IHJlbGF0ZWQgdG8gdGhlIGdpdmVuIHZhbHVlLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSB2YWx1ZSAtIEJyZWFrcG9pbnQgbmFtZSBvciBxdWVyeSBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IE5hbWUgb2YgdGhlIGJyZWFrcG9pbnQuXG4gICAqL1xuICBfZ2V0UXVlcnlOYW1lKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpXG4gICAgICByZXR1cm4gdmFsdWUubmFtZTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBcbiAgICAgIEludmFsaWQgdmFsdWUgcGFzc2VkIHRvIE1lZGlhUXVlcnkuX2dldFF1ZXJ5TmFtZSgpLlxuICAgICAgRXhwZWN0ZWQgYSBicmVha3BvaW50IG5hbWUgKFN0cmluZykgb3IgYSBicmVha3BvaW50IHF1ZXJ5IChPYmplY3QpLCBnb3QgXCIke3ZhbHVlfVwiICgke3R5cGVvZiB2YWx1ZX0pXG4gICAgYCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBuYW1lIGJ5IHRlc3RpbmcgZXZlcnkgYnJlYWtwb2ludCBhbmQgcmV0dXJuaW5nIHRoZSBsYXN0IG9uZSB0byBtYXRjaCAodGhlIGJpZ2dlc3Qgb25lKS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IE5hbWUgb2YgdGhlIGN1cnJlbnQgYnJlYWtwb2ludC5cbiAgICovXG4gIF9nZXRDdXJyZW50U2l6ZSgpIHtcbiAgICB2YXIgbWF0Y2hlZDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlcnkgPSB0aGlzLnF1ZXJpZXNbaV07XG5cbiAgICAgIGlmICh3aW5kb3cubWF0Y2hNZWRpYShxdWVyeS52YWx1ZSkubWF0Y2hlcykge1xuICAgICAgICBtYXRjaGVkID0gcXVlcnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWQgJiYgdGhpcy5fZ2V0UXVlcnlOYW1lKG1hdGNoZWQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZXMgdGhlIGJyZWFrcG9pbnQgd2F0Y2hlciwgd2hpY2ggZmlyZXMgYW4gZXZlbnQgb24gdGhlIHdpbmRvdyB3aGVuZXZlciB0aGUgYnJlYWtwb2ludCBjaGFuZ2VzLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF93YXRjaGVyKCkge1xuICAgICQod2luZG93KS5vbigncmVzaXplLnpmLnRyaWdnZXInLCAoKSA9PiB7XG4gICAgICB2YXIgbmV3U2l6ZSA9IHRoaXMuX2dldEN1cnJlbnRTaXplKCksIGN1cnJlbnRTaXplID0gdGhpcy5jdXJyZW50O1xuXG4gICAgICBpZiAobmV3U2l6ZSAhPT0gY3VycmVudFNpemUpIHtcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSBjdXJyZW50IG1lZGlhIHF1ZXJ5XG4gICAgICAgIHRoaXMuY3VycmVudCA9IG5ld1NpemU7XG5cbiAgICAgICAgLy8gQnJvYWRjYXN0IHRoZSBtZWRpYSBxdWVyeSBjaGFuZ2Ugb24gdGhlIHdpbmRvd1xuICAgICAgICAkKHdpbmRvdykudHJpZ2dlcignY2hhbmdlZC56Zi5tZWRpYXF1ZXJ5JywgW25ld1NpemUsIGN1cnJlbnRTaXplXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cblxuXG4vLyBUaGFuayB5b3U6IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcXVlcnktc3RyaW5nXG5mdW5jdGlvbiBwYXJzZVN0eWxlVG9PYmplY3Qoc3RyKSB7XG4gIHZhciBzdHlsZU9iamVjdCA9IHt9O1xuXG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzdHlsZU9iamVjdDtcbiAgfVxuXG4gIHN0ciA9IHN0ci50cmltKCkuc2xpY2UoMSwgLTEpOyAvLyBicm93c2VycyByZS1xdW90ZSBzdHJpbmcgc3R5bGUgdmFsdWVzXG5cbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gc3R5bGVPYmplY3Q7XG4gIH1cblxuICBzdHlsZU9iamVjdCA9IHN0ci5zcGxpdCgnJicpLnJlZHVjZShmdW5jdGlvbihyZXQsIHBhcmFtKSB7XG4gICAgdmFyIHBhcnRzID0gcGFyYW0ucmVwbGFjZSgvXFwrL2csICcgJykuc3BsaXQoJz0nKTtcbiAgICB2YXIga2V5ID0gcGFydHNbMF07XG4gICAgdmFyIHZhbCA9IHBhcnRzWzFdO1xuICAgIGtleSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXkpO1xuXG4gICAgLy8gbWlzc2luZyBgPWAgc2hvdWxkIGJlIGBudWxsYDpcbiAgICAvLyBodHRwOi8vdzMub3JnL1RSLzIwMTIvV0QtdXJsLTIwMTIwNTI0LyNjb2xsZWN0LXVybC1wYXJhbWV0ZXJzXG4gICAgdmFsID0gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogZGVjb2RlVVJJQ29tcG9uZW50KHZhbCk7XG5cbiAgICBpZiAoIXJldC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICByZXRba2V5XSA9IHZhbDtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmV0W2tleV0pKSB7XG4gICAgICByZXRba2V5XS5wdXNoKHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gW3JldFtrZXldLCB2YWxdO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHN0eWxlT2JqZWN0O1xufVxuXG52YXIgRk9VTkRBVElPTl9WRVJTSU9OID0gJzYuNy40JztcblxuLy8gR2xvYmFsIEZvdW5kYXRpb24gb2JqZWN0XG4vLyBUaGlzIGlzIGF0dGFjaGVkIHRvIHRoZSB3aW5kb3csIG9yIHVzZWQgYXMgYSBtb2R1bGUgZm9yIEFNRC9Ccm93c2VyaWZ5XG52YXIgRm91bmRhdGlvbiA9IHtcbiAgdmVyc2lvbjogRk9VTkRBVElPTl9WRVJTSU9OLFxuXG4gIC8qKlxuICAgKiBTdG9yZXMgaW5pdGlhbGl6ZWQgcGx1Z2lucy5cbiAgICovXG4gIF9wbHVnaW5zOiB7fSxcblxuICAvKipcbiAgICogU3RvcmVzIGdlbmVyYXRlZCB1bmlxdWUgaWRzIGZvciBwbHVnaW4gaW5zdGFuY2VzXG4gICAqL1xuICBfdXVpZHM6IFtdLFxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgRm91bmRhdGlvbiBwbHVnaW4sIGFkZGluZyBpdCB0byB0aGUgYEZvdW5kYXRpb25gIG5hbWVzcGFjZSBhbmQgdGhlIGxpc3Qgb2YgcGx1Z2lucyB0byBpbml0aWFsaXplIHdoZW4gcmVmbG93aW5nLlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGx1Z2luIC0gVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBwbHVnaW4uXG4gICAqL1xuICBwbHVnaW46IGZ1bmN0aW9uKHBsdWdpbiwgbmFtZSkge1xuICAgIC8vIE9iamVjdCBrZXkgdG8gdXNlIHdoZW4gYWRkaW5nIHRvIGdsb2JhbCBGb3VuZGF0aW9uIG9iamVjdFxuICAgIC8vIEV4YW1wbGVzOiBGb3VuZGF0aW9uLlJldmVhbCwgRm91bmRhdGlvbi5PZmZDYW52YXNcbiAgICB2YXIgY2xhc3NOYW1lID0gKG5hbWUgfHwgZnVuY3Rpb25OYW1lKHBsdWdpbikpO1xuICAgIC8vIE9iamVjdCBrZXkgdG8gdXNlIHdoZW4gc3RvcmluZyB0aGUgcGx1Z2luLCBhbHNvIHVzZWQgdG8gY3JlYXRlIHRoZSBpZGVudGlmeWluZyBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlIHBsdWdpblxuICAgIC8vIEV4YW1wbGVzOiBkYXRhLXJldmVhbCwgZGF0YS1vZmYtY2FudmFzXG4gICAgdmFyIGF0dHJOYW1lICA9IGh5cGhlbmF0ZShjbGFzc05hbWUpO1xuXG4gICAgLy8gQWRkIHRvIHRoZSBGb3VuZGF0aW9uIG9iamVjdCBhbmQgdGhlIHBsdWdpbnMgbGlzdCAoZm9yIHJlZmxvd2luZylcbiAgICB0aGlzLl9wbHVnaW5zW2F0dHJOYW1lXSA9IHRoaXNbY2xhc3NOYW1lXSA9IHBsdWdpbjtcbiAgfSxcbiAgLyoqXG4gICAqIEBmdW5jdGlvblxuICAgKiBQb3B1bGF0ZXMgdGhlIF91dWlkcyBhcnJheSB3aXRoIHBvaW50ZXJzIHRvIGVhY2ggaW5kaXZpZHVhbCBwbHVnaW4gaW5zdGFuY2UuXG4gICAqIEFkZHMgdGhlIGB6ZlBsdWdpbmAgZGF0YS1hdHRyaWJ1dGUgdG8gcHJvZ3JhbW1hdGljYWxseSBjcmVhdGVkIHBsdWdpbnMgdG8gYWxsb3cgdXNlIG9mICQoc2VsZWN0b3IpLmZvdW5kYXRpb24obWV0aG9kKSBjYWxscy5cbiAgICogQWxzbyBmaXJlcyB0aGUgaW5pdGlhbGl6YXRpb24gZXZlbnQgZm9yIGVhY2ggcGx1Z2luLCBjb25zb2xpZGF0aW5nIHJlcGV0aXRpdmUgY29kZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHBsdWdpbiAtIGFuIGluc3RhbmNlIG9mIGEgcGx1Z2luLCB1c3VhbGx5IGB0aGlzYCBpbiBjb250ZXh0LlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBwbHVnaW4sIHBhc3NlZCBhcyBhIGNhbWVsQ2FzZWQgc3RyaW5nLlxuICAgKiBAZmlyZXMgUGx1Z2luI2luaXRcbiAgICovXG4gIHJlZ2lzdGVyUGx1Z2luOiBmdW5jdGlvbihwbHVnaW4sIG5hbWUpe1xuICAgIHZhciBwbHVnaW5OYW1lID0gbmFtZSA/IGh5cGhlbmF0ZShuYW1lKSA6IGZ1bmN0aW9uTmFtZShwbHVnaW4uY29uc3RydWN0b3IpLnRvTG93ZXJDYXNlKCk7XG4gICAgcGx1Z2luLnV1aWQgPSBHZXRZb0RpZ2l0cyg2LCBwbHVnaW5OYW1lKTtcblxuICAgIGlmKCFwbHVnaW4uJGVsZW1lbnQuYXR0cihgZGF0YS0ke3BsdWdpbk5hbWV9YCkpeyBwbHVnaW4uJGVsZW1lbnQuYXR0cihgZGF0YS0ke3BsdWdpbk5hbWV9YCwgcGx1Z2luLnV1aWQpOyB9XG4gICAgaWYoIXBsdWdpbi4kZWxlbWVudC5kYXRhKCd6ZlBsdWdpbicpKXsgcGx1Z2luLiRlbGVtZW50LmRhdGEoJ3pmUGx1Z2luJywgcGx1Z2luKTsgfVxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHBsdWdpbiBoYXMgaW5pdGlhbGl6ZWQuXG4gICAgICAgICAgICogQGV2ZW50IFBsdWdpbiNpbml0XG4gICAgICAgICAgICovXG4gICAgcGx1Z2luLiRlbGVtZW50LnRyaWdnZXIoYGluaXQuemYuJHtwbHVnaW5OYW1lfWApO1xuXG4gICAgdGhpcy5fdXVpZHMucHVzaChwbHVnaW4udXVpZCk7XG5cbiAgICByZXR1cm47XG4gIH0sXG4gIC8qKlxuICAgKiBAZnVuY3Rpb25cbiAgICogUmVtb3ZlcyB0aGUgcGx1Z2lucyB1dWlkIGZyb20gdGhlIF91dWlkcyBhcnJheS5cbiAgICogUmVtb3ZlcyB0aGUgemZQbHVnaW4gZGF0YSBhdHRyaWJ1dGUsIGFzIHdlbGwgYXMgdGhlIGRhdGEtcGx1Z2luLW5hbWUgYXR0cmlidXRlLlxuICAgKiBBbHNvIGZpcmVzIHRoZSBkZXN0cm95ZWQgZXZlbnQgZm9yIHRoZSBwbHVnaW4sIGNvbnNvbGlkYXRpbmcgcmVwZXRpdGl2ZSBjb2RlLlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGx1Z2luIC0gYW4gaW5zdGFuY2Ugb2YgYSBwbHVnaW4sIHVzdWFsbHkgYHRoaXNgIGluIGNvbnRleHQuXG4gICAqIEBmaXJlcyBQbHVnaW4jZGVzdHJveWVkXG4gICAqL1xuICB1bnJlZ2lzdGVyUGx1Z2luOiBmdW5jdGlvbihwbHVnaW4pe1xuICAgIHZhciBwbHVnaW5OYW1lID0gaHlwaGVuYXRlKGZ1bmN0aW9uTmFtZShwbHVnaW4uJGVsZW1lbnQuZGF0YSgnemZQbHVnaW4nKS5jb25zdHJ1Y3RvcikpO1xuXG4gICAgdGhpcy5fdXVpZHMuc3BsaWNlKHRoaXMuX3V1aWRzLmluZGV4T2YocGx1Z2luLnV1aWQpLCAxKTtcbiAgICBwbHVnaW4uJGVsZW1lbnQucmVtb3ZlQXR0cihgZGF0YS0ke3BsdWdpbk5hbWV9YCkucmVtb3ZlRGF0YSgnemZQbHVnaW4nKVxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHBsdWdpbiBoYXMgYmVlbiBkZXN0cm95ZWQuXG4gICAgICAgICAgICogQGV2ZW50IFBsdWdpbiNkZXN0cm95ZWRcbiAgICAgICAgICAgKi9cbiAgICAgICAgICAudHJpZ2dlcihgZGVzdHJveWVkLnpmLiR7cGx1Z2luTmFtZX1gKTtcbiAgICBmb3IodmFyIHByb3AgaW4gcGx1Z2luKXtcbiAgICAgIGlmKHR5cGVvZiBwbHVnaW5bcHJvcF0gPT09ICdmdW5jdGlvbicpe1xuICAgICAgICBwbHVnaW5bcHJvcF0gPSBudWxsOyAvL2NsZWFuIHVwIHNjcmlwdCB0byBwcmVwIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24uXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfSxcblxuICAvKipcbiAgICogQGZ1bmN0aW9uXG4gICAqIENhdXNlcyBvbmUgb3IgbW9yZSBhY3RpdmUgcGx1Z2lucyB0byByZS1pbml0aWFsaXplLCByZXNldHRpbmcgZXZlbnQgbGlzdGVuZXJzLCByZWNhbGN1bGF0aW5nIHBvc2l0aW9ucywgZXRjLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2lucyAtIG9wdGlvbmFsIHN0cmluZyBvZiBhbiBpbmRpdmlkdWFsIHBsdWdpbiBrZXksIGF0dGFpbmVkIGJ5IGNhbGxpbmcgYCQoZWxlbWVudCkuZGF0YSgncGx1Z2luTmFtZScpYCwgb3Igc3RyaW5nIG9mIGEgcGx1Z2luIGNsYXNzIGkuZS4gYCdkcm9wZG93bidgXG4gICAqIEBkZWZhdWx0IElmIG5vIGFyZ3VtZW50IGlzIHBhc3NlZCwgcmVmbG93IGFsbCBjdXJyZW50bHkgYWN0aXZlIHBsdWdpbnMuXG4gICAqL1xuICAgcmVJbml0OiBmdW5jdGlvbihwbHVnaW5zKXtcbiAgICAgdmFyIGlzSlEgPSBwbHVnaW5zIGluc3RhbmNlb2YgJDtcbiAgICAgdHJ5e1xuICAgICAgIGlmKGlzSlEpe1xuICAgICAgICAgcGx1Z2lucy5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICQodGhpcykuZGF0YSgnemZQbHVnaW4nKS5faW5pdCgpO1xuICAgICAgICAgfSk7XG4gICAgICAgfWVsc2Uge1xuICAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgcGx1Z2lucyxcbiAgICAgICAgIF90aGlzID0gdGhpcyxcbiAgICAgICAgIGZucyA9IHtcbiAgICAgICAgICAgJ29iamVjdCc6IGZ1bmN0aW9uKHBsZ3Mpe1xuICAgICAgICAgICAgIHBsZ3MuZm9yRWFjaChmdW5jdGlvbihwKXtcbiAgICAgICAgICAgICAgIHAgPSBoeXBoZW5hdGUocCk7XG4gICAgICAgICAgICAgICAkKCdbZGF0YS0nKyBwICsnXScpLmZvdW5kYXRpb24oJ19pbml0Jyk7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgIH0sXG4gICAgICAgICAgICdzdHJpbmcnOiBmdW5jdGlvbigpe1xuICAgICAgICAgICAgIHBsdWdpbnMgPSBoeXBoZW5hdGUocGx1Z2lucyk7XG4gICAgICAgICAgICAgJCgnW2RhdGEtJysgcGx1Z2lucyArJ10nKS5mb3VuZGF0aW9uKCdfaW5pdCcpO1xuICAgICAgICAgICB9LFxuICAgICAgICAgICAndW5kZWZpbmVkJzogZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICB0aGlzLm9iamVjdChPYmplY3Qua2V5cyhfdGhpcy5fcGx1Z2lucykpO1xuICAgICAgICAgICB9XG4gICAgICAgICB9O1xuICAgICAgICAgZm5zW3R5cGVdKHBsdWdpbnMpO1xuICAgICAgIH1cbiAgICAgfWNhdGNoKGVycil7XG4gICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICB9ZmluYWxseXtcbiAgICAgICByZXR1cm4gcGx1Z2lucztcbiAgICAgfVxuICAgfSxcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBwbHVnaW5zIG9uIGFueSBlbGVtZW50cyB3aXRoaW4gYGVsZW1gIChhbmQgYGVsZW1gIGl0c2VsZikgdGhhdCBhcmVuJ3QgYWxyZWFkeSBpbml0aWFsaXplZC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW0gLSBqUXVlcnkgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQgdG8gY2hlY2sgaW5zaWRlLiBBbHNvIGNoZWNrcyB0aGUgZWxlbWVudCBpdHNlbGYsIHVubGVzcyBpdCdzIHRoZSBgZG9jdW1lbnRgIG9iamVjdC5cbiAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IHBsdWdpbnMgLSBBIGxpc3Qgb2YgcGx1Z2lucyB0byBpbml0aWFsaXplLiBMZWF2ZSB0aGlzIG91dCB0byBpbml0aWFsaXplIGV2ZXJ5dGhpbmcuXG4gICAqL1xuICByZWZsb3c6IGZ1bmN0aW9uKGVsZW0sIHBsdWdpbnMpIHtcblxuICAgIC8vIElmIHBsdWdpbnMgaXMgdW5kZWZpbmVkLCBqdXN0IGdyYWIgZXZlcnl0aGluZ1xuICAgIGlmICh0eXBlb2YgcGx1Z2lucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHBsdWdpbnMgPSBPYmplY3Qua2V5cyh0aGlzLl9wbHVnaW5zKTtcbiAgICB9XG4gICAgLy8gSWYgcGx1Z2lucyBpcyBhIHN0cmluZywgY29udmVydCBpdCB0byBhbiBhcnJheSB3aXRoIG9uZSBpdGVtXG4gICAgZWxzZSBpZiAodHlwZW9mIHBsdWdpbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwbHVnaW5zID0gW3BsdWdpbnNdO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBwbHVnaW5cbiAgICAkLmVhY2gocGx1Z2lucywgZnVuY3Rpb24oaSwgbmFtZSkge1xuICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHBsdWdpblxuICAgICAgdmFyIHBsdWdpbiA9IF90aGlzLl9wbHVnaW5zW25hbWVdO1xuXG4gICAgICAvLyBMb2NhbGl6ZSB0aGUgc2VhcmNoIHRvIGFsbCBlbGVtZW50cyBpbnNpZGUgZWxlbSwgYXMgd2VsbCBhcyBlbGVtIGl0c2VsZiwgdW5sZXNzIGVsZW0gPT09IGRvY3VtZW50XG4gICAgICB2YXIgJGVsZW0gPSAkKGVsZW0pLmZpbmQoJ1tkYXRhLScrbmFtZSsnXScpLmFkZEJhY2soJ1tkYXRhLScrbmFtZSsnXScpLmZpbHRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgJCh0aGlzKS5kYXRhKFwiemZQbHVnaW5cIikgPT09ICd1bmRlZmluZWQnO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEZvciBlYWNoIHBsdWdpbiBmb3VuZCwgaW5pdGlhbGl6ZSBpdFxuICAgICAgJGVsZW0uZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyICRlbCA9ICQodGhpcyksXG4gICAgICAgICAgICBvcHRzID0geyByZWZsb3c6IHRydWUgfTtcblxuICAgICAgICBpZigkZWwuYXR0cignZGF0YS1vcHRpb25zJykpe1xuICAgICAgICAgICRlbC5hdHRyKCdkYXRhLW9wdGlvbnMnKS5zcGxpdCgnOycpLmZvckVhY2goZnVuY3Rpb24ob3B0aW9uKXtcbiAgICAgICAgICAgIHZhciBvcHQgPSBvcHRpb24uc3BsaXQoJzonKS5tYXAoZnVuY3Rpb24oZWwpeyByZXR1cm4gZWwudHJpbSgpOyB9KTtcbiAgICAgICAgICAgIGlmKG9wdFswXSkgb3B0c1tvcHRbMF1dID0gcGFyc2VWYWx1ZShvcHRbMV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAkZWwuZGF0YSgnemZQbHVnaW4nLCBuZXcgcGx1Z2luKCQodGhpcyksIG9wdHMpKTtcbiAgICAgICAgfWNhdGNoKGVyKXtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyKTtcbiAgICAgICAgfWZpbmFsbHl7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSxcbiAgZ2V0Rm5OYW1lOiBmdW5jdGlvbk5hbWUsXG5cbiAgYWRkVG9KcXVlcnk6IGZ1bmN0aW9uKCkge1xuICAgIC8vIFRPRE86IGNvbnNpZGVyIG5vdCBtYWtpbmcgdGhpcyBhIGpRdWVyeSBmdW5jdGlvblxuICAgIC8vIFRPRE86IG5lZWQgd2F5IHRvIHJlZmxvdyB2cy4gcmUtaW5pdGlhbGl6ZVxuICAgIC8qKlxuICAgICAqIFRoZSBGb3VuZGF0aW9uIGpRdWVyeSBtZXRob2QuXG4gICAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IG1ldGhvZCAtIEFuIGFjdGlvbiB0byBwZXJmb3JtIG9uIHRoZSBjdXJyZW50IGpRdWVyeSBvYmplY3QuXG4gICAgICovXG4gICAgdmFyIGZvdW5kYXRpb24gPSBmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIG1ldGhvZCxcbiAgICAgICAgICAkbm9KUyA9ICQoJy5uby1qcycpO1xuXG4gICAgICBpZigkbm9KUy5sZW5ndGgpe1xuICAgICAgICAkbm9KUy5yZW1vdmVDbGFzcygnbm8tanMnKTtcbiAgICAgIH1cblxuICAgICAgaWYodHlwZSA9PT0gJ3VuZGVmaW5lZCcpey8vbmVlZHMgdG8gaW5pdGlhbGl6ZSB0aGUgRm91bmRhdGlvbiBvYmplY3QsIG9yIGFuIGluZGl2aWR1YWwgcGx1Z2luLlxuICAgICAgICBNZWRpYVF1ZXJ5Ll9pbml0KCk7XG4gICAgICAgIEZvdW5kYXRpb24ucmVmbG93KHRoaXMpO1xuICAgICAgfWVsc2UgaWYodHlwZSA9PT0gJ3N0cmluZycpey8vYW4gaW5kaXZpZHVhbCBtZXRob2QgdG8gaW52b2tlIG9uIGEgcGx1Z2luIG9yIGdyb3VwIG9mIHBsdWdpbnNcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOy8vY29sbGVjdCBhbGwgdGhlIGFyZ3VtZW50cywgaWYgbmVjZXNzYXJ5XG4gICAgICAgIHZhciBwbHVnQ2xhc3MgPSB0aGlzLmRhdGEoJ3pmUGx1Z2luJyk7Ly9kZXRlcm1pbmUgdGhlIGNsYXNzIG9mIHBsdWdpblxuXG4gICAgICAgIGlmKHR5cGVvZiBwbHVnQ2xhc3MgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwbHVnQ2xhc3NbbWV0aG9kXSAhPT0gJ3VuZGVmaW5lZCcpey8vbWFrZSBzdXJlIGJvdGggdGhlIGNsYXNzIGFuZCBtZXRob2QgZXhpc3RcbiAgICAgICAgICBpZih0aGlzLmxlbmd0aCA9PT0gMSl7Ly9pZiB0aGVyZSdzIG9ubHkgb25lLCBjYWxsIGl0IGRpcmVjdGx5LlxuICAgICAgICAgICAgICBwbHVnQ2xhc3NbbWV0aG9kXS5hcHBseShwbHVnQ2xhc3MsIGFyZ3MpO1xuICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbihpLCBlbCl7Ly9vdGhlcndpc2UgbG9vcCB0aHJvdWdoIHRoZSBqUXVlcnkgY29sbGVjdGlvbiBhbmQgaW52b2tlIHRoZSBtZXRob2Qgb24gZWFjaFxuICAgICAgICAgICAgICBwbHVnQ2xhc3NbbWV0aG9kXS5hcHBseSgkKGVsKS5kYXRhKCd6ZlBsdWdpbicpLCBhcmdzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfWVsc2Ugey8vZXJyb3IgZm9yIG5vIGNsYXNzIG9yIG5vIG1ldGhvZFxuICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcIldlJ3JlIHNvcnJ5LCAnXCIgKyBtZXRob2QgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBtZXRob2QgZm9yIFwiICsgKHBsdWdDbGFzcyA/IGZ1bmN0aW9uTmFtZShwbHVnQ2xhc3MpIDogJ3RoaXMgZWxlbWVudCcpICsgJy4nKTtcbiAgICAgICAgfVxuICAgICAgfWVsc2Ugey8vZXJyb3IgZm9yIGludmFsaWQgYXJndW1lbnQgdHlwZVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBXZSdyZSBzb3JyeSwgJHt0eXBlfSBpcyBub3QgYSB2YWxpZCBwYXJhbWV0ZXIuIFlvdSBtdXN0IHVzZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG1ldGhvZCB5b3Ugd2lzaCB0byBpbnZva2UuYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgICQuZm4uZm91bmRhdGlvbiA9IGZvdW5kYXRpb247XG4gICAgcmV0dXJuICQ7XG4gIH1cbn07XG5cbkZvdW5kYXRpb24udXRpbCA9IHtcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIGZvciBhcHBseWluZyBhIGRlYm91bmNlIGVmZmVjdCB0byBhIGZ1bmN0aW9uIGNhbGwuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIGF0IGVuZCBvZiB0aW1lb3V0LlxuICAgKiBAcGFyYW0ge051bWJlcn0gZGVsYXkgLSBUaW1lIGluIG1zIHRvIGRlbGF5IHRoZSBjYWxsIG9mIGBmdW5jYC5cbiAgICogQHJldHVybnMgZnVuY3Rpb25cbiAgICovXG4gIHRocm90dGxlOiBmdW5jdGlvbiAoZnVuYywgZGVsYXkpIHtcbiAgICB2YXIgdGltZXIgPSBudWxsO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50cztcblxuICAgICAgaWYgKHRpbWVyID09PSBudWxsKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59O1xuXG53aW5kb3cuRm91bmRhdGlvbiA9IEZvdW5kYXRpb247XG5cbi8vIFBvbHlmaWxsIGZvciByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbihmdW5jdGlvbigpIHtcbiAgaWYgKCFEYXRlLm5vdyB8fCAhd2luZG93LkRhdGUubm93KVxuICAgIHdpbmRvdy5EYXRlLm5vdyA9IERhdGUubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsgfTtcblxuICB2YXIgdmVuZG9ycyA9IFsnd2Via2l0JywgJ21veiddO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHZlbmRvcnMubGVuZ3RoICYmICF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK2kpIHtcbiAgICAgIHZhciB2cCA9IHZlbmRvcnNbaV07XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93W3ZwKydSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9ICh3aW5kb3dbdnArJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHdpbmRvd1t2cCsnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10pO1xuICB9XG4gIGlmICgvaVAoYWR8aG9uZXxvZCkuKk9TIDYvLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpXG4gICAgfHwgIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgIXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIHZhciBsYXN0VGltZSA9IDA7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICB2YXIgbmV4dFRpbWUgPSBNYXRoLm1heChsYXN0VGltZSArIDE2LCBub3cpO1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHsgY2FsbGJhY2sobGFzdFRpbWUgPSBuZXh0VGltZSk7IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRUaW1lIC0gbm93KTtcbiAgICB9O1xuICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGNsZWFyVGltZW91dDtcbiAgfVxuICAvKipcbiAgICogUG9seWZpbGwgZm9yIHBlcmZvcm1hbmNlLm5vdywgcmVxdWlyZWQgYnkgckFGXG4gICAqL1xuICBpZighd2luZG93LnBlcmZvcm1hbmNlIHx8ICF3aW5kb3cucGVyZm9ybWFuY2Uubm93KXtcbiAgICB3aW5kb3cucGVyZm9ybWFuY2UgPSB7XG4gICAgICBzdGFydDogRGF0ZS5ub3coKSxcbiAgICAgIG5vdzogZnVuY3Rpb24oKXsgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLnN0YXJ0OyB9XG4gICAgfTtcbiAgfVxufSkoKTtcbmlmICghRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpIHtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tZXh0ZW5kLW5hdGl2ZSAqL1xuICBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKG9UaGlzKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBjbG9zZXN0IHRoaW5nIHBvc3NpYmxlIHRvIHRoZSBFQ01BU2NyaXB0IDVcbiAgICAgIC8vIGludGVybmFsIElzQ2FsbGFibGUgZnVuY3Rpb25cbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kIC0gd2hhdCBpcyB0cnlpbmcgdG8gYmUgYm91bmQgaXMgbm90IGNhbGxhYmxlJyk7XG4gICAgfVxuXG4gICAgdmFyIGFBcmdzICAgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuICAgICAgICBmVG9CaW5kID0gdGhpcyxcbiAgICAgICAgZk5PUCAgICA9IGZ1bmN0aW9uKCkge30sXG4gICAgICAgIGZCb3VuZCAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gZlRvQmluZC5hcHBseSh0aGlzIGluc3RhbmNlb2YgZk5PUFxuICAgICAgICAgICAgICAgICA/IHRoaXNcbiAgICAgICAgICAgICAgICAgOiBvVGhpcyxcbiAgICAgICAgICAgICAgICAgYUFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgICAgICAgfTtcblxuICAgIGlmICh0aGlzLnByb3RvdHlwZSkge1xuICAgICAgLy8gbmF0aXZlIGZ1bmN0aW9ucyBkb24ndCBoYXZlIGEgcHJvdG90eXBlXG4gICAgICBmTk9QLnByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuICAgIH1cbiAgICBmQm91bmQucHJvdG90eXBlID0gbmV3IGZOT1AoKTtcblxuICAgIHJldHVybiBmQm91bmQ7XG4gIH07XG59XG4vLyBQb2x5ZmlsbCB0byBnZXQgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBpbiBJRTlcbmZ1bmN0aW9uIGZ1bmN0aW9uTmFtZShmbikge1xuICBpZiAodHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZS5uYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBmdW5jTmFtZVJlZ2V4ID0gL2Z1bmN0aW9uXFxzKFteKF17MSx9KVxcKC87XG4gICAgdmFyIHJlc3VsdHMgPSAoZnVuY05hbWVSZWdleCkuZXhlYygoZm4pLnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA+IDEpID8gcmVzdWx0c1sxXS50cmltKCkgOiBcIlwiO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBmbi5wcm90b3R5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZuLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIGZuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG59XG5mdW5jdGlvbiBwYXJzZVZhbHVlKHN0cil7XG4gIGlmICgndHJ1ZScgPT09IHN0cikgcmV0dXJuIHRydWU7XG4gIGVsc2UgaWYgKCdmYWxzZScgPT09IHN0cikgcmV0dXJuIGZhbHNlO1xuICBlbHNlIGlmICghaXNOYU4oc3RyICogMSkpIHJldHVybiBwYXJzZUZsb2F0KHN0cik7XG4gIHJldHVybiBzdHI7XG59XG4vLyBDb252ZXJ0IFBhc2NhbENhc2UgdG8ga2ViYWItY2FzZVxuLy8gVGhhbmsgeW91OiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS84OTU1NTgwXG5mdW5jdGlvbiBoeXBoZW5hdGUoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxLSQyJykudG9Mb3dlckNhc2UoKTtcbn1cblxudmFyIEJveCA9IHtcbiAgSW1Ob3RUb3VjaGluZ1lvdTogSW1Ob3RUb3VjaGluZ1lvdSxcbiAgT3ZlcmxhcEFyZWE6IE92ZXJsYXBBcmVhLFxuICBHZXREaW1lbnNpb25zOiBHZXREaW1lbnNpb25zLFxuICBHZXRFeHBsaWNpdE9mZnNldHM6IEdldEV4cGxpY2l0T2Zmc2V0c1xufTtcblxuLyoqXG4gKiBDb21wYXJlcyB0aGUgZGltZW5zaW9ucyBvZiBhbiBlbGVtZW50IHRvIGEgY29udGFpbmVyIGFuZCBkZXRlcm1pbmVzIGNvbGxpc2lvbiBldmVudHMgd2l0aCBjb250YWluZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byB0ZXN0IGZvciBjb2xsaXNpb25zLlxuICogQHBhcmFtIHtqUXVlcnl9IHBhcmVudCAtIGpRdWVyeSBvYmplY3QgdG8gdXNlIGFzIGJvdW5kaW5nIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbHJPbmx5IC0gc2V0IHRvIHRydWUgdG8gY2hlY2sgbGVmdCBhbmQgcmlnaHQgdmFsdWVzIG9ubHkuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRiT25seSAtIHNldCB0byB0cnVlIHRvIGNoZWNrIHRvcCBhbmQgYm90dG9tIHZhbHVlcyBvbmx5LlxuICogQGRlZmF1bHQgaWYgbm8gcGFyZW50IG9iamVjdCBwYXNzZWQsIGRldGVjdHMgY29sbGlzaW9ucyB3aXRoIGB3aW5kb3dgLlxuICogQHJldHVybnMge0Jvb2xlYW59IC0gdHJ1ZSBpZiBjb2xsaXNpb24gZnJlZSwgZmFsc2UgaWYgYSBjb2xsaXNpb24gaW4gYW55IGRpcmVjdGlvbi5cbiAqL1xuZnVuY3Rpb24gSW1Ob3RUb3VjaGluZ1lvdShlbGVtZW50LCBwYXJlbnQsIGxyT25seSwgdGJPbmx5LCBpZ25vcmVCb3R0b20pIHtcbiAgcmV0dXJuIE92ZXJsYXBBcmVhKGVsZW1lbnQsIHBhcmVudCwgbHJPbmx5LCB0Yk9ubHksIGlnbm9yZUJvdHRvbSkgPT09IDA7XG59XG5cbmZ1bmN0aW9uIE92ZXJsYXBBcmVhKGVsZW1lbnQsIHBhcmVudCwgbHJPbmx5LCB0Yk9ubHksIGlnbm9yZUJvdHRvbSkge1xuICB2YXIgZWxlRGltcyA9IEdldERpbWVuc2lvbnMoZWxlbWVudCksXG4gIHRvcE92ZXIsIGJvdHRvbU92ZXIsIGxlZnRPdmVyLCByaWdodE92ZXI7XG4gIGlmIChwYXJlbnQpIHtcbiAgICB2YXIgcGFyRGltcyA9IEdldERpbWVuc2lvbnMocGFyZW50KTtcblxuICAgIGJvdHRvbU92ZXIgPSAocGFyRGltcy5oZWlnaHQgKyBwYXJEaW1zLm9mZnNldC50b3ApIC0gKGVsZURpbXMub2Zmc2V0LnRvcCArIGVsZURpbXMuaGVpZ2h0KTtcbiAgICB0b3BPdmVyICAgID0gZWxlRGltcy5vZmZzZXQudG9wIC0gcGFyRGltcy5vZmZzZXQudG9wO1xuICAgIGxlZnRPdmVyICAgPSBlbGVEaW1zLm9mZnNldC5sZWZ0IC0gcGFyRGltcy5vZmZzZXQubGVmdDtcbiAgICByaWdodE92ZXIgID0gKHBhckRpbXMud2lkdGggKyBwYXJEaW1zLm9mZnNldC5sZWZ0KSAtIChlbGVEaW1zLm9mZnNldC5sZWZ0ICsgZWxlRGltcy53aWR0aCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgYm90dG9tT3ZlciA9IChlbGVEaW1zLndpbmRvd0RpbXMuaGVpZ2h0ICsgZWxlRGltcy53aW5kb3dEaW1zLm9mZnNldC50b3ApIC0gKGVsZURpbXMub2Zmc2V0LnRvcCArIGVsZURpbXMuaGVpZ2h0KTtcbiAgICB0b3BPdmVyICAgID0gZWxlRGltcy5vZmZzZXQudG9wIC0gZWxlRGltcy53aW5kb3dEaW1zLm9mZnNldC50b3A7XG4gICAgbGVmdE92ZXIgICA9IGVsZURpbXMub2Zmc2V0LmxlZnQgLSBlbGVEaW1zLndpbmRvd0RpbXMub2Zmc2V0LmxlZnQ7XG4gICAgcmlnaHRPdmVyICA9IGVsZURpbXMud2luZG93RGltcy53aWR0aCAtIChlbGVEaW1zLm9mZnNldC5sZWZ0ICsgZWxlRGltcy53aWR0aCk7XG4gIH1cblxuICBib3R0b21PdmVyID0gaWdub3JlQm90dG9tID8gMCA6IE1hdGgubWluKGJvdHRvbU92ZXIsIDApO1xuICB0b3BPdmVyICAgID0gTWF0aC5taW4odG9wT3ZlciwgMCk7XG4gIGxlZnRPdmVyICAgPSBNYXRoLm1pbihsZWZ0T3ZlciwgMCk7XG4gIHJpZ2h0T3ZlciAgPSBNYXRoLm1pbihyaWdodE92ZXIsIDApO1xuXG4gIGlmIChsck9ubHkpIHtcbiAgICByZXR1cm4gbGVmdE92ZXIgKyByaWdodE92ZXI7XG4gIH1cbiAgaWYgKHRiT25seSkge1xuICAgIHJldHVybiB0b3BPdmVyICsgYm90dG9tT3ZlcjtcbiAgfVxuXG4gIC8vIHVzZSBzdW0gb2Ygc3F1YXJlcyBiL2Mgd2UgY2FyZSBhYm91dCBvdmVybGFwIGFyZWEuXG4gIHJldHVybiBNYXRoLnNxcnQoKHRvcE92ZXIgKiB0b3BPdmVyKSArIChib3R0b21PdmVyICogYm90dG9tT3ZlcikgKyAobGVmdE92ZXIgKiBsZWZ0T3ZlcikgKyAocmlnaHRPdmVyICogcmlnaHRPdmVyKSk7XG59XG5cbi8qKlxuICogVXNlcyBuYXRpdmUgbWV0aG9kcyB0byByZXR1cm4gYW4gb2JqZWN0IG9mIGRpbWVuc2lvbiB2YWx1ZXMuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7alF1ZXJ5IHx8IEhUTUx9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IG9yIERPTSBlbGVtZW50IGZvciB3aGljaCB0byBnZXQgdGhlIGRpbWVuc2lvbnMuIENhbiBiZSBhbnkgZWxlbWVudCBvdGhlciB0aGF0IGRvY3VtZW50IG9yIHdpbmRvdy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IC0gbmVzdGVkIG9iamVjdCBvZiBpbnRlZ2VyIHBpeGVsIHZhbHVlc1xuICogVE9ETyAtIGlmIGVsZW1lbnQgaXMgd2luZG93LCByZXR1cm4gb25seSB0aG9zZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIEdldERpbWVuc2lvbnMoZWxlbSl7XG4gIGVsZW0gPSBlbGVtLmxlbmd0aCA/IGVsZW1bMF0gOiBlbGVtO1xuXG4gIGlmIChlbGVtID09PSB3aW5kb3cgfHwgZWxlbSA9PT0gZG9jdW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJJ20gc29ycnksIERhdmUuIEknbSBhZnJhaWQgSSBjYW4ndCBkbyB0aGF0LlwiKTtcbiAgfVxuXG4gIHZhciByZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIHBhclJlY3QgPSBlbGVtLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICB3aW5SZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIHdpblkgPSB3aW5kb3cucGFnZVlPZmZzZXQsXG4gICAgICB3aW5YID0gd2luZG93LnBhZ2VYT2Zmc2V0O1xuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICBvZmZzZXQ6IHtcbiAgICAgIHRvcDogcmVjdC50b3AgKyB3aW5ZLFxuICAgICAgbGVmdDogcmVjdC5sZWZ0ICsgd2luWFxuICAgIH0sXG4gICAgcGFyZW50RGltczoge1xuICAgICAgd2lkdGg6IHBhclJlY3Qud2lkdGgsXG4gICAgICBoZWlnaHQ6IHBhclJlY3QuaGVpZ2h0LFxuICAgICAgb2Zmc2V0OiB7XG4gICAgICAgIHRvcDogcGFyUmVjdC50b3AgKyB3aW5ZLFxuICAgICAgICBsZWZ0OiBwYXJSZWN0LmxlZnQgKyB3aW5YXG4gICAgICB9XG4gICAgfSxcbiAgICB3aW5kb3dEaW1zOiB7XG4gICAgICB3aWR0aDogd2luUmVjdC53aWR0aCxcbiAgICAgIGhlaWdodDogd2luUmVjdC5oZWlnaHQsXG4gICAgICBvZmZzZXQ6IHtcbiAgICAgICAgdG9wOiB3aW5ZLFxuICAgICAgICBsZWZ0OiB3aW5YXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3Qgb2YgdG9wIGFuZCBsZWZ0IGludGVnZXIgcGl4ZWwgdmFsdWVzIGZvciBkeW5hbWljYWxseSByZW5kZXJlZCBlbGVtZW50cyxcbiAqIHN1Y2ggYXM6IFRvb2x0aXAsIFJldmVhbCwgYW5kIERyb3Bkb3duLiBNYWludGFpbmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYW5kIHdoZXJlXG4gKiB5b3UgZG9uJ3Qga25vdyBhbGlnbm1lbnQsIGJ1dCBnZW5lcmFsbHkgZnJvbVxuICogNi40IGZvcndhcmQgeW91IHNob3VsZCB1c2UgR2V0RXhwbGljaXRPZmZzZXRzLCBhcyBHZXRPZmZzZXRzIGNvbmZsYXRlcyBwb3NpdGlvbiBhbmQgYWxpZ25tZW50LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgZm9yIHRoZSBlbGVtZW50IGJlaW5nIHBvc2l0aW9uZWQuXG4gKiBAcGFyYW0ge2pRdWVyeX0gYW5jaG9yIC0galF1ZXJ5IG9iamVjdCBmb3IgdGhlIGVsZW1lbnQncyBhbmNob3IgcG9pbnQuXG4gKiBAcGFyYW0ge1N0cmluZ30gcG9zaXRpb24gLSBhIHN0cmluZyByZWxhdGluZyB0byB0aGUgZGVzaXJlZCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCwgcmVsYXRpdmUgdG8gaXQncyBhbmNob3JcbiAqIEBwYXJhbSB7TnVtYmVyfSB2T2Zmc2V0IC0gaW50ZWdlciBwaXhlbCB2YWx1ZSBvZiBkZXNpcmVkIHZlcnRpY2FsIHNlcGFyYXRpb24gYmV0d2VlbiBhbmNob3IgYW5kIGVsZW1lbnQuXG4gKiBAcGFyYW0ge051bWJlcn0gaE9mZnNldCAtIGludGVnZXIgcGl4ZWwgdmFsdWUgb2YgZGVzaXJlZCBob3Jpem9udGFsIHNlcGFyYXRpb24gYmV0d2VlbiBhbmNob3IgYW5kIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGlzT3ZlcmZsb3cgLSBpZiBhIGNvbGxpc2lvbiBldmVudCBpcyBkZXRlY3RlZCwgc2V0cyB0byB0cnVlIHRvIGRlZmF1bHQgdGhlIGVsZW1lbnQgdG8gZnVsbCB3aWR0aCAtIGFueSBkZXNpcmVkIG9mZnNldC5cbiAqIFRPRE8gYWx0ZXIvcmV3cml0ZSB0byB3b3JrIHdpdGggYGVtYCB2YWx1ZXMgYXMgd2VsbC9pbnN0ZWFkIG9mIHBpeGVsc1xuICovXG5mdW5jdGlvbiBHZXRFeHBsaWNpdE9mZnNldHMoZWxlbWVudCwgYW5jaG9yLCBwb3NpdGlvbiwgYWxpZ25tZW50LCB2T2Zmc2V0LCBoT2Zmc2V0LCBpc092ZXJmbG93KSB7XG4gIHZhciAkZWxlRGltcyA9IEdldERpbWVuc2lvbnMoZWxlbWVudCksXG4gICAgICAkYW5jaG9yRGltcyA9IGFuY2hvciA/IEdldERpbWVuc2lvbnMoYW5jaG9yKSA6IG51bGw7XG5cbiAgICAgIHZhciB0b3BWYWwsIGxlZnRWYWw7XG5cbiAgaWYgKCRhbmNob3JEaW1zICE9PSBudWxsKSB7XG4gIC8vIHNldCBwb3NpdGlvbiByZWxhdGVkIGF0dHJpYnV0ZVxuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIHRvcFZhbCA9ICRhbmNob3JEaW1zLm9mZnNldC50b3AgLSAoJGVsZURpbXMuaGVpZ2h0ICsgdk9mZnNldCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgdG9wVmFsID0gJGFuY2hvckRpbXMub2Zmc2V0LnRvcCArICRhbmNob3JEaW1zLmhlaWdodCArIHZPZmZzZXQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIGxlZnRWYWwgPSAkYW5jaG9yRGltcy5vZmZzZXQubGVmdCAtICgkZWxlRGltcy53aWR0aCArIGhPZmZzZXQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgbGVmdFZhbCA9ICRhbmNob3JEaW1zLm9mZnNldC5sZWZ0ICsgJGFuY2hvckRpbXMud2lkdGggKyBoT2Zmc2V0O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICAvLyBzZXQgYWxpZ25tZW50IHJlbGF0ZWQgYXR0cmlidXRlXG4gIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICBjYXNlICd0b3AnOlxuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBzd2l0Y2ggKGFsaWdubWVudCkge1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBsZWZ0VmFsID0gJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgKyBoT2Zmc2V0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdFZhbCA9ICRhbmNob3JEaW1zLm9mZnNldC5sZWZ0IC0gJGVsZURpbXMud2lkdGggKyAkYW5jaG9yRGltcy53aWR0aCAtIGhPZmZzZXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgICAgbGVmdFZhbCA9IGlzT3ZlcmZsb3cgPyBoT2Zmc2V0IDogKCgkYW5jaG9yRGltcy5vZmZzZXQubGVmdCArICgkYW5jaG9yRGltcy53aWR0aCAvIDIpKSAtICgkZWxlRGltcy53aWR0aCAvIDIpKSArIGhPZmZzZXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICBzd2l0Y2ggKGFsaWdubWVudCkge1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcFZhbCA9ICRhbmNob3JEaW1zLm9mZnNldC50b3AgLSB2T2Zmc2V0ICsgJGFuY2hvckRpbXMuaGVpZ2h0IC0gJGVsZURpbXMuaGVpZ2h0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHRvcFZhbCA9ICRhbmNob3JEaW1zLm9mZnNldC50b3AgKyB2T2Zmc2V0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAgIHRvcFZhbCA9ICgkYW5jaG9yRGltcy5vZmZzZXQudG9wICsgdk9mZnNldCArICgkYW5jaG9yRGltcy5oZWlnaHQgLyAyKSkgLSAoJGVsZURpbXMuaGVpZ2h0IC8gMik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuICB9XG5cbiAgcmV0dXJuIHt0b3A6IHRvcFZhbCwgbGVmdDogbGVmdFZhbH07XG59XG5cbi8qKlxuICogUnVucyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gaW1hZ2VzIGFyZSBmdWxseSBsb2FkZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gaW1hZ2VzIC0gSW1hZ2UocykgdG8gY2hlY2sgaWYgbG9hZGVkLlxuICogQHBhcmFtIHtGdW5jfSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiBpbWFnZSBpcyBmdWxseSBsb2FkZWQuXG4gKi9cbmZ1bmN0aW9uIG9uSW1hZ2VzTG9hZGVkKGltYWdlcywgY2FsbGJhY2spe1xuICB2YXIgdW5sb2FkZWQgPSBpbWFnZXMubGVuZ3RoO1xuXG4gIGlmICh1bmxvYWRlZCA9PT0gMCkge1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cblxuICBpbWFnZXMuZWFjaChmdW5jdGlvbigpe1xuICAgIC8vIENoZWNrIGlmIGltYWdlIGlzIGxvYWRlZFxuICAgIGlmICh0aGlzLmNvbXBsZXRlICYmIHR5cGVvZiB0aGlzLm5hdHVyYWxXaWR0aCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHNpbmdsZUltYWdlTG9hZGVkKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gSWYgdGhlIGFib3ZlIGNoZWNrIGZhaWxlZCwgc2ltdWxhdGUgbG9hZGluZyBvbiBkZXRhY2hlZCBlbGVtZW50LlxuICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAvLyBTdGlsbCBjb3VudCBpbWFnZSBhcyBsb2FkZWQgaWYgaXQgZmluYWxpemVzIHdpdGggYW4gZXJyb3IuXG4gICAgICB2YXIgZXZlbnRzID0gXCJsb2FkLnpmLmltYWdlcyBlcnJvci56Zi5pbWFnZXNcIjtcbiAgICAgICQoaW1hZ2UpLm9uZShldmVudHMsIGZ1bmN0aW9uIG1lKCl7XG4gICAgICAgIC8vIFVuYmluZCB0aGUgZXZlbnQgbGlzdGVuZXJzLiBXZSdyZSB1c2luZyAnb25lJyBidXQgb25seSBvbmUgb2YgdGhlIHR3byBldmVudHMgd2lsbCBoYXZlIGZpcmVkLlxuICAgICAgICAkKHRoaXMpLm9mZihldmVudHMsIG1lKTtcbiAgICAgICAgc2luZ2xlSW1hZ2VMb2FkZWQoKTtcbiAgICAgIH0pO1xuICAgICAgaW1hZ2Uuc3JjID0gJCh0aGlzKS5hdHRyKCdzcmMnKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHNpbmdsZUltYWdlTG9hZGVkKCkge1xuICAgIHVubG9hZGVkLS07XG4gICAgaWYgKHVubG9hZGVkID09PSAwKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqIFRoaXMgdXRpbCB3YXMgY3JlYXRlZCBieSBNYXJpdXMgT2xiZXJ0eiAqXG4gKiBQbGVhc2UgdGhhbmsgTWFyaXVzIG9uIEdpdEh1YiAvb3dsYmVydHogKlxuICogb3IgdGhlIHdlYiBodHRwOi8vd3d3Lm1hcml1c29sYmVydHouZGUvICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5jb25zdCBrZXlDb2RlcyA9IHtcbiAgOTogJ1RBQicsXG4gIDEzOiAnRU5URVInLFxuICAyNzogJ0VTQ0FQRScsXG4gIDMyOiAnU1BBQ0UnLFxuICAzNTogJ0VORCcsXG4gIDM2OiAnSE9NRScsXG4gIDM3OiAnQVJST1dfTEVGVCcsXG4gIDM4OiAnQVJST1dfVVAnLFxuICAzOTogJ0FSUk9XX1JJR0hUJyxcbiAgNDA6ICdBUlJPV19ET1dOJ1xufTtcblxudmFyIGNvbW1hbmRzID0ge307XG5cbi8vIEZ1bmN0aW9ucyBwdWxsZWQgb3V0IHRvIGJlIHJlZmVyZW5jZWFibGUgZnJvbSBpbnRlcm5hbHNcbmZ1bmN0aW9uIGZpbmRGb2N1c2FibGUoJGVsZW1lbnQpIHtcbiAgaWYoISRlbGVtZW50KSB7cmV0dXJuIGZhbHNlOyB9XG4gIHJldHVybiAkZWxlbWVudC5maW5kKCdhW2hyZWZdLCBhcmVhW2hyZWZdLCBpbnB1dDpub3QoW2Rpc2FibGVkXSksIHNlbGVjdDpub3QoW2Rpc2FibGVkXSksIHRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSwgYnV0dG9uOm5vdChbZGlzYWJsZWRdKSwgaWZyYW1lLCBvYmplY3QsIGVtYmVkLCAqW3RhYmluZGV4XSwgKltjb250ZW50ZWRpdGFibGVdJykuZmlsdGVyKGZ1bmN0aW9uKCkge1xuICAgIGlmICghJCh0aGlzKS5pcygnOnZpc2libGUnKSB8fCAkKHRoaXMpLmF0dHIoJ3RhYmluZGV4JykgPCAwKSB7IHJldHVybiBmYWxzZTsgfSAvL29ubHkgaGF2ZSB2aXNpYmxlIGVsZW1lbnRzIGFuZCB0aG9zZSB0aGF0IGhhdmUgYSB0YWJpbmRleCBncmVhdGVyIG9yIGVxdWFsIDBcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSlcbiAgLnNvcnQoIGZ1bmN0aW9uKCBhLCBiICkge1xuICAgIGlmICgkKGEpLmF0dHIoJ3RhYmluZGV4JykgPT09ICQoYikuYXR0cigndGFiaW5kZXgnKSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGxldCBhVGFiSW5kZXggPSBwYXJzZUludCgkKGEpLmF0dHIoJ3RhYmluZGV4JyksIDEwKSxcbiAgICAgIGJUYWJJbmRleCA9IHBhcnNlSW50KCQoYikuYXR0cigndGFiaW5kZXgnKSwgMTApO1xuICAgIC8vIFVuZGVmaW5lZCBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzIDBcbiAgICBpZiAodHlwZW9mICQoYSkuYXR0cigndGFiaW5kZXgnKSA9PT0gJ3VuZGVmaW5lZCcgJiYgYlRhYkluZGV4ID4gMCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgJChiKS5hdHRyKCd0YWJpbmRleCcpID09PSAndW5kZWZpbmVkJyAmJiBhVGFiSW5kZXggPiAwKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChhVGFiSW5kZXggPT09IDAgJiYgYlRhYkluZGV4ID4gMCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmIChiVGFiSW5kZXggPT09IDAgJiYgYVRhYkluZGV4ID4gMCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBpZiAoYVRhYkluZGV4IDwgYlRhYkluZGV4KSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChhVGFiSW5kZXggPiBiVGFiSW5kZXgpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlS2V5KGV2ZW50KSB7XG4gIHZhciBrZXkgPSBrZXlDb2Rlc1tldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlXSB8fCBTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LndoaWNoKS50b1VwcGVyQ2FzZSgpO1xuXG4gIC8vIFJlbW92ZSB1bi1wcmludGFibGUgY2hhcmFjdGVycywgZS5nLiBmb3IgYGZyb21DaGFyQ29kZWAgY2FsbHMgZm9yIENUUkwgb25seSBldmVudHNcbiAga2V5ID0ga2V5LnJlcGxhY2UoL1xcVysvLCAnJyk7XG5cbiAgaWYgKGV2ZW50LnNoaWZ0S2V5KSBrZXkgPSBgU0hJRlRfJHtrZXl9YDtcbiAgaWYgKGV2ZW50LmN0cmxLZXkpIGtleSA9IGBDVFJMXyR7a2V5fWA7XG4gIGlmIChldmVudC5hbHRLZXkpIGtleSA9IGBBTFRfJHtrZXl9YDtcblxuICAvLyBSZW1vdmUgdHJhaWxpbmcgdW5kZXJzY29yZSwgaW4gY2FzZSBvbmx5IG1vZGlmaWVycyB3ZXJlIHVzZWQgKGUuZy4gb25seSBgQ1RSTF9BTFRgKVxuICBrZXkgPSBrZXkucmVwbGFjZSgvXyQvLCAnJyk7XG5cbiAgcmV0dXJuIGtleTtcbn1cblxudmFyIEtleWJvYXJkID0ge1xuICBrZXlzOiBnZXRLZXlDb2RlcyhrZXlDb2RlcyksXG5cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgKGtleWJvYXJkKSBldmVudCBhbmQgcmV0dXJucyBhIFN0cmluZyB0aGF0IHJlcHJlc2VudHMgaXRzIGtleVxuICAgKiBDYW4gYmUgdXNlZCBsaWtlIEZvdW5kYXRpb24ucGFyc2VLZXkoZXZlbnQpID09PSBGb3VuZGF0aW9uLmtleXMuU1BBQ0VcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgLSB0aGUgZXZlbnQgZ2VuZXJhdGVkIGJ5IHRoZSBldmVudCBoYW5kbGVyXG4gICAqIEByZXR1cm4gU3RyaW5nIGtleSAtIFN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGtleSBwcmVzc2VkXG4gICAqL1xuICBwYXJzZUtleTogcGFyc2VLZXksXG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGdpdmVuIChrZXlib2FyZCkgZXZlbnRcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgLSB0aGUgZXZlbnQgZ2VuZXJhdGVkIGJ5IHRoZSBldmVudCBoYW5kbGVyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjb21wb25lbnQgLSBGb3VuZGF0aW9uIGNvbXBvbmVudCdzIG5hbWUsIGUuZy4gU2xpZGVyIG9yIFJldmVhbFxuICAgKiBAcGFyYW0ge09iamVjdHN9IGZ1bmN0aW9ucyAtIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb25zIHRoYXQgYXJlIHRvIGJlIGV4ZWN1dGVkXG4gICAqL1xuICBoYW5kbGVLZXkoZXZlbnQsIGNvbXBvbmVudCwgZnVuY3Rpb25zKSB7XG4gICAgdmFyIGNvbW1hbmRMaXN0ID0gY29tbWFuZHNbY29tcG9uZW50XSxcbiAgICAgIGtleUNvZGUgPSB0aGlzLnBhcnNlS2V5KGV2ZW50KSxcbiAgICAgIGNtZHMsXG4gICAgICBjb21tYW5kLFxuICAgICAgZm47XG5cbiAgICBpZiAoIWNvbW1hbmRMaXN0KSByZXR1cm4gY29uc29sZS53YXJuKCdDb21wb25lbnQgbm90IGRlZmluZWQhJyk7XG5cbiAgICAvLyBJZ25vcmUgdGhlIGV2ZW50IGlmIGl0IHdhcyBhbHJlYWR5IGhhbmRsZWRcbiAgICBpZiAoZXZlbnQuemZJc0tleUhhbmRsZWQgPT09IHRydWUpIHJldHVybjtcblxuICAgIC8vIFRoaXMgY29tcG9uZW50IGRvZXMgbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBsdHIgYW5kIHJ0bFxuICAgIGlmICh0eXBlb2YgY29tbWFuZExpc3QubHRyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjbWRzID0gY29tbWFuZExpc3Q7IC8vIHVzZSBwbGFpbiBsaXN0XG4gICAgfSBlbHNlIHsgLy8gbWVyZ2UgbHRyIGFuZCBydGw6IGlmIGRvY3VtZW50IGlzIHJ0bCwgcnRsIG92ZXJ3cml0ZXMgbHRyIGFuZCB2aWNlIHZlcnNhXG4gICAgICAgIGlmIChydGwoKSkgY21kcyA9ICQuZXh0ZW5kKHt9LCBjb21tYW5kTGlzdC5sdHIsIGNvbW1hbmRMaXN0LnJ0bCk7XG5cbiAgICAgICAgZWxzZSBjbWRzID0gJC5leHRlbmQoe30sIGNvbW1hbmRMaXN0LnJ0bCwgY29tbWFuZExpc3QubHRyKTtcbiAgICB9XG4gICAgY29tbWFuZCA9IGNtZHNba2V5Q29kZV07XG5cbiAgICBmbiA9IGZ1bmN0aW9uc1tjb21tYW5kXTtcbiAgICAgLy8gRXhlY3V0ZSB0aGUgaGFuZGxlciBpZiBmb3VuZFxuICAgIGlmIChmbiAmJiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciByZXR1cm5WYWx1ZSA9IGZuLmFwcGx5KCk7XG5cbiAgICAgIC8vIE1hcmsgdGhlIGV2ZW50IGFzIFwiaGFuZGxlZFwiIHRvIHByZXZlbnQgZnV0dXJlIGhhbmRsaW5nc1xuICAgICAgZXZlbnQuemZJc0tleUhhbmRsZWQgPSB0cnVlO1xuXG4gICAgICAvLyBFeGVjdXRlIGZ1bmN0aW9uIHdoZW4gZXZlbnQgd2FzIGhhbmRsZWRcbiAgICAgIGlmIChmdW5jdGlvbnMuaGFuZGxlZCB8fCB0eXBlb2YgZnVuY3Rpb25zLmhhbmRsZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBmdW5jdGlvbnMuaGFuZGxlZChyZXR1cm5WYWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAvLyBFeGVjdXRlIGZ1bmN0aW9uIHdoZW4gZXZlbnQgd2FzIG5vdCBoYW5kbGVkXG4gICAgICBpZiAoZnVuY3Rpb25zLnVuaGFuZGxlZCB8fCB0eXBlb2YgZnVuY3Rpb25zLnVuaGFuZGxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGZ1bmN0aW9ucy51bmhhbmRsZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZpbmRzIGFsbCBmb2N1c2FibGUgZWxlbWVudHMgd2l0aGluIHRoZSBnaXZlbiBgJGVsZW1lbnRgXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gc2VhcmNoIHdpdGhpblxuICAgKiBAcmV0dXJuIHtqUXVlcnl9ICRmb2N1c2FibGUgLSBhbGwgZm9jdXNhYmxlIGVsZW1lbnRzIHdpdGhpbiBgJGVsZW1lbnRgXG4gICAqL1xuXG4gIGZpbmRGb2N1c2FibGU6IGZpbmRGb2N1c2FibGUsXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbXBvbmVudCBuYW1lIG5hbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbXBvbmVudCAtIEZvdW5kYXRpb24gY29tcG9uZW50LCBlLmcuIFNsaWRlciBvciBSZXZlYWxcbiAgICogQHJldHVybiBTdHJpbmcgY29tcG9uZW50TmFtZVxuICAgKi9cblxuICByZWdpc3Rlcihjb21wb25lbnROYW1lLCBjbWRzKSB7XG4gICAgY29tbWFuZHNbY29tcG9uZW50TmFtZV0gPSBjbWRzO1xuICB9LFxuXG5cbiAgLy8gVE9ETzk0Mzg6IFRoZXNlIHJlZmVyZW5jZXMgdG8gS2V5Ym9hcmQgbmVlZCB0byBub3QgcmVxdWlyZSBnbG9iYWwuIFdpbGwgJ3RoaXMnIHdvcmsgaW4gdGhpcyBjb250ZXh0P1xuICAvL1xuICAvKipcbiAgICogVHJhcHMgdGhlIGZvY3VzIGluIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgKiBAcGFyYW0gIHtqUXVlcnl9ICRlbGVtZW50ICBqUXVlcnkgb2JqZWN0IHRvIHRyYXAgdGhlIGZvdWNzIGludG8uXG4gICAqL1xuICB0cmFwRm9jdXMoJGVsZW1lbnQpIHtcbiAgICB2YXIgJGZvY3VzYWJsZSA9IGZpbmRGb2N1c2FibGUoJGVsZW1lbnQpLFxuICAgICAgICAkZmlyc3RGb2N1c2FibGUgPSAkZm9jdXNhYmxlLmVxKDApLFxuICAgICAgICAkbGFzdEZvY3VzYWJsZSA9ICRmb2N1c2FibGUuZXEoLTEpO1xuXG4gICAgJGVsZW1lbnQub24oJ2tleWRvd24uemYudHJhcGZvY3VzJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC50YXJnZXQgPT09ICRsYXN0Rm9jdXNhYmxlWzBdICYmIHBhcnNlS2V5KGV2ZW50KSA9PT0gJ1RBQicpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgJGZpcnN0Rm9jdXNhYmxlLmZvY3VzKCk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChldmVudC50YXJnZXQgPT09ICRmaXJzdEZvY3VzYWJsZVswXSAmJiBwYXJzZUtleShldmVudCkgPT09ICdTSElGVF9UQUInKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICRsYXN0Rm9jdXNhYmxlLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gIC8qKlxuICAgKiBSZWxlYXNlcyB0aGUgdHJhcHBlZCBmb2N1cyBmcm9tIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgKiBAcGFyYW0gIHtqUXVlcnl9ICRlbGVtZW50ICBqUXVlcnkgb2JqZWN0IHRvIHJlbGVhc2UgdGhlIGZvY3VzIGZvci5cbiAgICovXG4gIHJlbGVhc2VGb2N1cygkZWxlbWVudCkge1xuICAgICRlbGVtZW50Lm9mZigna2V5ZG93bi56Zi50cmFwZm9jdXMnKTtcbiAgfVxufTtcblxuLypcbiAqIENvbnN0YW50cyBmb3IgZWFzaWVyIGNvbXBhcmluZy5cbiAqIENhbiBiZSB1c2VkIGxpa2UgRm91bmRhdGlvbi5wYXJzZUtleShldmVudCkgPT09IEZvdW5kYXRpb24ua2V5cy5TUEFDRVxuICovXG5mdW5jdGlvbiBnZXRLZXlDb2RlcyhrY3MpIHtcbiAgdmFyIGsgPSB7fTtcbiAgZm9yICh2YXIga2MgaW4ga2NzKSB7XG4gICAgaWYgKGtjcy5oYXNPd25Qcm9wZXJ0eShrYykpIGtba2NzW2tjXV0gPSBrY3Nba2NdO1xuICB9XG4gIHJldHVybiBrO1xufVxuXG4vKipcbiAqIE1vdGlvbiBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24ubW90aW9uXG4gKi9cblxuY29uc3QgaW5pdENsYXNzZXMgICA9IFsnbXVpLWVudGVyJywgJ211aS1sZWF2ZSddO1xuY29uc3QgYWN0aXZlQ2xhc3NlcyA9IFsnbXVpLWVudGVyLWFjdGl2ZScsICdtdWktbGVhdmUtYWN0aXZlJ107XG5cbmNvbnN0IE1vdGlvbiA9IHtcbiAgYW5pbWF0ZUluOiBmdW5jdGlvbihlbGVtZW50LCBhbmltYXRpb24sIGNiKSB7XG4gICAgYW5pbWF0ZSh0cnVlLCBlbGVtZW50LCBhbmltYXRpb24sIGNiKTtcbiAgfSxcblxuICBhbmltYXRlT3V0OiBmdW5jdGlvbihlbGVtZW50LCBhbmltYXRpb24sIGNiKSB7XG4gICAgYW5pbWF0ZShmYWxzZSwgZWxlbWVudCwgYW5pbWF0aW9uLCBjYik7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIE1vdmUoZHVyYXRpb24sIGVsZW0sIGZuKXtcbiAgdmFyIGFuaW0sIHByb2csIHN0YXJ0ID0gbnVsbDtcblxuICBpZiAoZHVyYXRpb24gPT09IDApIHtcbiAgICBmbi5hcHBseShlbGVtKTtcbiAgICBlbGVtLnRyaWdnZXIoJ2ZpbmlzaGVkLnpmLmFuaW1hdGUnLCBbZWxlbV0pLnRyaWdnZXJIYW5kbGVyKCdmaW5pc2hlZC56Zi5hbmltYXRlJywgW2VsZW1dKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiBtb3ZlKHRzKXtcbiAgICBpZighc3RhcnQpIHN0YXJ0ID0gdHM7XG4gICAgcHJvZyA9IHRzIC0gc3RhcnQ7XG4gICAgZm4uYXBwbHkoZWxlbSk7XG5cbiAgICBpZihwcm9nIDwgZHVyYXRpb24peyBhbmltID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShtb3ZlLCBlbGVtKTsgfVxuICAgIGVsc2Uge1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW0pO1xuICAgICAgZWxlbS50cmlnZ2VyKCdmaW5pc2hlZC56Zi5hbmltYXRlJywgW2VsZW1dKS50cmlnZ2VySGFuZGxlcignZmluaXNoZWQuemYuYW5pbWF0ZScsIFtlbGVtXSk7XG4gICAgfVxuICB9XG4gIGFuaW0gPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG1vdmUpO1xufVxuXG4vKipcbiAqIEFuaW1hdGVzIGFuIGVsZW1lbnQgaW4gb3Igb3V0IHVzaW5nIGEgQ1NTIHRyYW5zaXRpb24gY2xhc3MuXG4gKiBAZnVuY3Rpb25cbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGlzSW4gLSBEZWZpbmVzIGlmIHRoZSBhbmltYXRpb24gaXMgaW4gb3Igb3V0LlxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb3IgSFRNTCBvYmplY3QgdG8gYW5pbWF0ZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSBhbmltYXRpb24gLSBDU1MgY2xhc3MgdG8gdXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgLSBDYWxsYmFjayB0byBydW4gd2hlbiBhbmltYXRpb24gaXMgZmluaXNoZWQuXG4gKi9cbmZ1bmN0aW9uIGFuaW1hdGUoaXNJbiwgZWxlbWVudCwgYW5pbWF0aW9uLCBjYikge1xuICBlbGVtZW50ID0gJChlbGVtZW50KS5lcSgwKTtcblxuICBpZiAoIWVsZW1lbnQubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGluaXRDbGFzcyA9IGlzSW4gPyBpbml0Q2xhc3Nlc1swXSA6IGluaXRDbGFzc2VzWzFdO1xuICB2YXIgYWN0aXZlQ2xhc3MgPSBpc0luID8gYWN0aXZlQ2xhc3Nlc1swXSA6IGFjdGl2ZUNsYXNzZXNbMV07XG5cbiAgLy8gU2V0IHVwIHRoZSBhbmltYXRpb25cbiAgcmVzZXQoKTtcblxuICBlbGVtZW50XG4gICAgLmFkZENsYXNzKGFuaW1hdGlvbilcbiAgICAuY3NzKCd0cmFuc2l0aW9uJywgJ25vbmUnKTtcblxuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgIGVsZW1lbnQuYWRkQ2xhc3MoaW5pdENsYXNzKTtcbiAgICBpZiAoaXNJbikgZWxlbWVudC5zaG93KCk7XG4gIH0pO1xuXG4gIC8vIFN0YXJ0IHRoZSBhbmltYXRpb25cbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAvLyB3aWxsIHRyaWdnZXIgdGhlIGJyb3dzZXIgdG8gc3luY2hyb25vdXNseSBjYWxjdWxhdGUgdGhlIHN0eWxlIGFuZCBsYXlvdXRcbiAgICAvLyBhbHNvIGNhbGxlZCByZWZsb3cgb3IgbGF5b3V0IHRocmFzaGluZ1xuICAgIC8vIHNlZSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9wYXVsaXJpc2gvNWQ1MmZiMDgxYjM1NzBjODFlM2FcbiAgICBlbGVtZW50WzBdLm9mZnNldFdpZHRoO1xuICAgIGVsZW1lbnRcbiAgICAgIC5jc3MoJ3RyYW5zaXRpb24nLCAnJylcbiAgICAgIC5hZGRDbGFzcyhhY3RpdmVDbGFzcyk7XG4gIH0pO1xuXG4gIC8vIENsZWFuIHVwIHRoZSBhbmltYXRpb24gd2hlbiBpdCBmaW5pc2hlc1xuICBlbGVtZW50Lm9uZSh0cmFuc2l0aW9uZW5kKGVsZW1lbnQpLCBmaW5pc2gpO1xuXG4gIC8vIEhpZGVzIHRoZSBlbGVtZW50IChmb3Igb3V0IGFuaW1hdGlvbnMpLCByZXNldHMgdGhlIGVsZW1lbnQsIGFuZCBydW5zIGEgY2FsbGJhY2tcbiAgZnVuY3Rpb24gZmluaXNoKCkge1xuICAgIGlmICghaXNJbikgZWxlbWVudC5oaWRlKCk7XG4gICAgcmVzZXQoKTtcbiAgICBpZiAoY2IpIGNiLmFwcGx5KGVsZW1lbnQpO1xuICB9XG5cbiAgLy8gUmVzZXRzIHRyYW5zaXRpb25zIGFuZCByZW1vdmVzIG1vdGlvbi1zcGVjaWZpYyBjbGFzc2VzXG4gIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGVsZW1lbnRbMF0uc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gMDtcbiAgICBlbGVtZW50LnJlbW92ZUNsYXNzKGAke2luaXRDbGFzc30gJHthY3RpdmVDbGFzc30gJHthbmltYXRpb259YCk7XG4gIH1cbn1cblxuY29uc3QgTmVzdCA9IHtcbiAgRmVhdGhlcihtZW51LCB0eXBlID0gJ3pmJykge1xuICAgIG1lbnUuYXR0cigncm9sZScsICdtZW51YmFyJyk7XG4gICAgbWVudS5maW5kKCdhJykuYXR0cih7J3JvbGUnOiAnbWVudWl0ZW0nfSk7XG5cbiAgICB2YXIgaXRlbXMgPSBtZW51LmZpbmQoJ2xpJykuYXR0cih7J3JvbGUnOiAnbm9uZSd9KSxcbiAgICAgICAgc3ViTWVudUNsYXNzID0gYGlzLSR7dHlwZX0tc3VibWVudWAsXG4gICAgICAgIHN1Ykl0ZW1DbGFzcyA9IGAke3N1Yk1lbnVDbGFzc30taXRlbWAsXG4gICAgICAgIGhhc1N1YkNsYXNzID0gYGlzLSR7dHlwZX0tc3VibWVudS1wYXJlbnRgLFxuICAgICAgICBhcHBseUFyaWEgPSAodHlwZSAhPT0gJ2FjY29yZGlvbicpOyAvLyBBY2NvcmRpb25zIGhhbmRsZSB0aGVpciBvd24gQVJJQSBhdHRyaXV0ZXMuXG5cbiAgICBpdGVtcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyICRpdGVtID0gJCh0aGlzKSxcbiAgICAgICAgICAkc3ViID0gJGl0ZW0uY2hpbGRyZW4oJ3VsJyk7XG5cbiAgICAgIGlmICgkc3ViLmxlbmd0aCkge1xuICAgICAgICAkaXRlbS5hZGRDbGFzcyhoYXNTdWJDbGFzcyk7XG4gICAgICAgIGlmKGFwcGx5QXJpYSkge1xuICAgICAgICAgICRpdGVtLmNoaWxkcmVuKCdhOmZpcnN0JykuYXR0cih7XG4gICAgICAgICAgICAnYXJpYS1oYXNwb3B1cCc6IHRydWUsXG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6ICRpdGVtLmNoaWxkcmVuKCdhOmZpcnN0JykudGV4dCgpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gTm90ZTogIERyaWxsZG93bnMgYmVoYXZlIGRpZmZlcmVudGx5IGluIGhvdyB0aGV5IGhpZGUsIGFuZCBzbyBuZWVkXG4gICAgICAgICAgLy8gYWRkaXRpb25hbCBhdHRyaWJ1dGVzLiAgV2Ugc2hvdWxkIGxvb2sgaWYgdGhpcyBwb3NzaWJseSBvdmVyLWdlbmVyYWxpemVkXG4gICAgICAgICAgLy8gdXRpbGl0eSAoTmVzdCkgaXMgYXBwcm9wcmlhdGUgd2hlbiB3ZSByZXdvcmsgbWVudXMgaW4gNi40XG4gICAgICAgICAgaWYodHlwZSA9PT0gJ2RyaWxsZG93bicpIHtcbiAgICAgICAgICAgICRpdGVtLmF0dHIoeydhcmlhLWV4cGFuZGVkJzogZmFsc2V9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJHN1YlxuICAgICAgICAgIC5hZGRDbGFzcyhgc3VibWVudSAke3N1Yk1lbnVDbGFzc31gKVxuICAgICAgICAgIC5hdHRyKHtcbiAgICAgICAgICAgICdkYXRhLXN1Ym1lbnUnOiAnJyxcbiAgICAgICAgICAgICdyb2xlJzogJ21lbnViYXInXG4gICAgICAgICAgfSk7XG4gICAgICAgIGlmKHR5cGUgPT09ICdkcmlsbGRvd24nKSB7XG4gICAgICAgICAgJHN1Yi5hdHRyKHsnYXJpYS1oaWRkZW4nOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCRpdGVtLnBhcmVudCgnW2RhdGEtc3VibWVudV0nKS5sZW5ndGgpIHtcbiAgICAgICAgJGl0ZW0uYWRkQ2xhc3MoYGlzLXN1Ym1lbnUtaXRlbSAke3N1Ykl0ZW1DbGFzc31gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybjtcbiAgfSxcblxuICBCdXJuKG1lbnUsIHR5cGUpIHtcbiAgICB2YXIgLy9pdGVtcyA9IG1lbnUuZmluZCgnbGknKSxcbiAgICAgICAgc3ViTWVudUNsYXNzID0gYGlzLSR7dHlwZX0tc3VibWVudWAsXG4gICAgICAgIHN1Ykl0ZW1DbGFzcyA9IGAke3N1Yk1lbnVDbGFzc30taXRlbWAsXG4gICAgICAgIGhhc1N1YkNsYXNzID0gYGlzLSR7dHlwZX0tc3VibWVudS1wYXJlbnRgO1xuXG4gICAgbWVudVxuICAgICAgLmZpbmQoJz5saSwgPiBsaSA+IHVsLCAubWVudSwgLm1lbnUgPiBsaSwgW2RhdGEtc3VibWVudV0gPiBsaScpXG4gICAgICAucmVtb3ZlQ2xhc3MoYCR7c3ViTWVudUNsYXNzfSAke3N1Ykl0ZW1DbGFzc30gJHtoYXNTdWJDbGFzc30gaXMtc3VibWVudS1pdGVtIHN1Ym1lbnUgaXMtYWN0aXZlYClcbiAgICAgIC5yZW1vdmVBdHRyKCdkYXRhLXN1Ym1lbnUnKS5jc3MoJ2Rpc3BsYXknLCAnJyk7XG5cbiAgfVxufTtcblxuZnVuY3Rpb24gVGltZXIoZWxlbSwgb3B0aW9ucywgY2IpIHtcbiAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgIGR1cmF0aW9uID0gb3B0aW9ucy5kdXJhdGlvbiwvL29wdGlvbnMgaXMgYW4gb2JqZWN0IGZvciBlYXNpbHkgYWRkaW5nIGZlYXR1cmVzIGxhdGVyLlxuICAgICAgbmFtZVNwYWNlID0gT2JqZWN0LmtleXMoZWxlbS5kYXRhKCkpWzBdIHx8ICd0aW1lcicsXG4gICAgICByZW1haW4gPSAtMSxcbiAgICAgIHN0YXJ0LFxuICAgICAgdGltZXI7XG5cbiAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuXG4gIHRoaXMucmVzdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgIHJlbWFpbiA9IC0xO1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGhpcy5zdGFydCgpO1xuICB9O1xuXG4gIHRoaXMuc3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gICAgLy8gaWYoIWVsZW0uZGF0YSgncGF1c2VkJykpeyByZXR1cm4gZmFsc2U7IH0vL21heWJlIGltcGxlbWVudCB0aGlzIHNhbml0eSBjaGVjayBpZiB1c2VkIGZvciBvdGhlciB0aGluZ3MuXG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICByZW1haW4gPSByZW1haW4gPD0gMCA/IGR1cmF0aW9uIDogcmVtYWluO1xuICAgIGVsZW0uZGF0YSgncGF1c2VkJywgZmFsc2UpO1xuICAgIHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIGlmKG9wdGlvbnMuaW5maW5pdGUpe1xuICAgICAgICBfdGhpcy5yZXN0YXJ0KCk7Ly9yZXJ1biB0aGUgdGltZXIuXG4gICAgICB9XG4gICAgICBpZiAoY2IgJiYgdHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7IGNiKCk7IH1cbiAgICB9LCByZW1haW4pO1xuICAgIGVsZW0udHJpZ2dlcihgdGltZXJzdGFydC56Zi4ke25hbWVTcGFjZX1gKTtcbiAgfTtcblxuICB0aGlzLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1BhdXNlZCA9IHRydWU7XG4gICAgLy9pZihlbGVtLmRhdGEoJ3BhdXNlZCcpKXsgcmV0dXJuIGZhbHNlOyB9Ly9tYXliZSBpbXBsZW1lbnQgdGhpcyBzYW5pdHkgY2hlY2sgaWYgdXNlZCBmb3Igb3RoZXIgdGhpbmdzLlxuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgZWxlbS5kYXRhKCdwYXVzZWQnLCB0cnVlKTtcbiAgICB2YXIgZW5kID0gRGF0ZS5ub3coKTtcbiAgICByZW1haW4gPSByZW1haW4gLSAoZW5kIC0gc3RhcnQpO1xuICAgIGVsZW0udHJpZ2dlcihgdGltZXJwYXVzZWQuemYuJHtuYW1lU3BhY2V9YCk7XG4gIH07XG59XG5cbi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxudmFyIFRvdWNoID0ge307XG5cbnZhciBzdGFydFBvc1gsXG4gICAgc3RhcnRUaW1lLFxuICAgIGVsYXBzZWRUaW1lLFxuICAgIHN0YXJ0RXZlbnQsXG4gICAgaXNNb3ZpbmcgPSBmYWxzZSxcbiAgICBkaWRNb3ZlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBvblRvdWNoRW5kKGUpIHtcbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBvblRvdWNoTW92ZSk7XG4gIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcblxuICAvLyBJZiB0aGUgdG91Y2ggZGlkIG5vdCBtb3ZlLCBjb25zaWRlciBpdCBhcyBhIFwidGFwXCJcbiAgaWYgKCFkaWRNb3ZlZCkge1xuICAgIHZhciB0YXBFdmVudCA9ICQuRXZlbnQoJ3RhcCcsIHN0YXJ0RXZlbnQgfHwgZSk7XG4gICAgJCh0aGlzKS50cmlnZ2VyKHRhcEV2ZW50KTtcbiAgfVxuXG4gIHN0YXJ0RXZlbnQgPSBudWxsO1xuICBpc01vdmluZyA9IGZhbHNlO1xuICBkaWRNb3ZlZCA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvblRvdWNoTW92ZShlKSB7XG4gIGlmICh0cnVlID09PSAkLnNwb3RTd2lwZS5wcmV2ZW50RGVmYXVsdCkgeyBlLnByZXZlbnREZWZhdWx0KCk7IH1cblxuICBpZihpc01vdmluZykge1xuICAgIHZhciB4ID0gZS50b3VjaGVzWzBdLnBhZ2VYO1xuICAgIC8vIHZhciB5ID0gZS50b3VjaGVzWzBdLnBhZ2VZO1xuICAgIHZhciBkeCA9IHN0YXJ0UG9zWCAtIHg7XG4gICAgLy8gdmFyIGR5ID0gc3RhcnRQb3NZIC0geTtcbiAgICB2YXIgZGlyO1xuICAgIGRpZE1vdmVkID0gdHJ1ZTtcbiAgICBlbGFwc2VkVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnRUaW1lO1xuICAgIGlmKE1hdGguYWJzKGR4KSA+PSAkLnNwb3RTd2lwZS5tb3ZlVGhyZXNob2xkICYmIGVsYXBzZWRUaW1lIDw9ICQuc3BvdFN3aXBlLnRpbWVUaHJlc2hvbGQpIHtcbiAgICAgIGRpciA9IGR4ID4gMCA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgfVxuICAgIC8vIGVsc2UgaWYoTWF0aC5hYnMoZHkpID49ICQuc3BvdFN3aXBlLm1vdmVUaHJlc2hvbGQgJiYgZWxhcHNlZFRpbWUgPD0gJC5zcG90U3dpcGUudGltZVRocmVzaG9sZCkge1xuICAgIC8vICAgZGlyID0gZHkgPiAwID8gJ2Rvd24nIDogJ3VwJztcbiAgICAvLyB9XG4gICAgaWYoZGlyKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvblRvdWNoRW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAkKHRoaXMpXG4gICAgICAgIC50cmlnZ2VyKCQuRXZlbnQoJ3N3aXBlJywgT2JqZWN0LmFzc2lnbih7fSwgZSkpLCBkaXIpXG4gICAgICAgIC50cmlnZ2VyKCQuRXZlbnQoYHN3aXBlJHtkaXJ9YCwgT2JqZWN0LmFzc2lnbih7fSwgZSkpKTtcbiAgICB9XG4gIH1cblxufVxuXG5mdW5jdGlvbiBvblRvdWNoU3RhcnQoZSkge1xuXG4gIGlmIChlLnRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgc3RhcnRQb3NYID0gZS50b3VjaGVzWzBdLnBhZ2VYO1xuICAgIHN0YXJ0RXZlbnQgPSBlO1xuICAgIGlzTW92aW5nID0gdHJ1ZTtcbiAgICBkaWRNb3ZlZCA9IGZhbHNlO1xuICAgIHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgb25Ub3VjaE1vdmUsIHsgcGFzc2l2ZSA6IHRydWUgPT09ICQuc3BvdFN3aXBlLnByZXZlbnREZWZhdWx0IH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvblRvdWNoRW5kLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdCgpIHtcbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyICYmIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCwgeyBwYXNzaXZlIDogdHJ1ZSB9KTtcbn1cblxuLy8gZnVuY3Rpb24gdGVhcmRvd24oKSB7XG4vLyAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4vLyB9XG5cbmNsYXNzIFNwb3RTd2lwZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMudmVyc2lvbiA9ICcxLjAuMCc7XG4gICAgdGhpcy5lbmFibGVkID0gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIHRoaXMucHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICB0aGlzLm1vdmVUaHJlc2hvbGQgPSA3NTtcbiAgICB0aGlzLnRpbWVUaHJlc2hvbGQgPSAyMDA7XG4gICAgdGhpcy5faW5pdCgpO1xuICB9XG5cbiAgX2luaXQoKSB7XG4gICAgJC5ldmVudC5zcGVjaWFsLnN3aXBlID0geyBzZXR1cDogaW5pdCB9O1xuICAgICQuZXZlbnQuc3BlY2lhbC50YXAgPSB7IHNldHVwOiBpbml0IH07XG5cbiAgICAkLmVhY2goWydsZWZ0JywgJ3VwJywgJ2Rvd24nLCAncmlnaHQnXSwgZnVuY3Rpb24gKCkge1xuICAgICAgJC5ldmVudC5zcGVjaWFsW2Bzd2lwZSR7dGhpc31gXSA9IHsgc2V0dXA6IGZ1bmN0aW9uKCl7XG4gICAgICAgICQodGhpcykub24oJ3N3aXBlJywgJC5ub29wKTtcbiAgICAgIH0gfTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQXMgZmFyIGFzIEkgY2FuIHRlbGwsIGJvdGggc2V0dXBTcG90U3dpcGUgYW5kICAgICpcbiAqIHNldHVwVG91Y2hIYW5kbGVyIHNob3VsZCBiZSBpZGVtcG90ZW50LCAgICAgICAgICAqXG4gKiBiZWNhdXNlIHRoZXkgZGlyZWN0bHkgcmVwbGFjZSBmdW5jdGlvbnMgJiAgICAgICAgKlxuICogdmFsdWVzLCBhbmQgZG8gbm90IGFkZCBldmVudCBoYW5kbGVycyBkaXJlY3RseS4gICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5Ub3VjaC5zZXR1cFNwb3RTd2lwZSA9IGZ1bmN0aW9uKCkge1xuICAkLnNwb3RTd2lwZSA9IG5ldyBTcG90U3dpcGUoJCk7XG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogTWV0aG9kIGZvciBhZGRpbmcgcHNldWRvIGRyYWcgZXZlbnRzIHRvIGVsZW1lbnRzICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5Ub3VjaC5zZXR1cFRvdWNoSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuICAkLmZuLmFkZFRvdWNoID0gZnVuY3Rpb24oKXtcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24oaSwgZWwpe1xuICAgICAgJChlbCkuYmluZCgndG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnLCBmdW5jdGlvbihldmVudCkgIHtcbiAgICAgICAgLy93ZSBwYXNzIHRoZSBvcmlnaW5hbCBldmVudCBvYmplY3QgYmVjYXVzZSB0aGUgalF1ZXJ5IGV2ZW50XG4gICAgICAgIC8vb2JqZWN0IGlzIG5vcm1hbGl6ZWQgdG8gdzNjIHNwZWNzIGFuZCBkb2VzIG5vdCBwcm92aWRlIHRoZSBUb3VjaExpc3RcbiAgICAgICAgaGFuZGxlVG91Y2goZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgaGFuZGxlVG91Y2ggPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgICBmaXJzdCA9IHRvdWNoZXNbMF0sXG4gICAgICAgICAgZXZlbnRUeXBlcyA9IHtcbiAgICAgICAgICAgIHRvdWNoc3RhcnQ6ICdtb3VzZWRvd24nLFxuICAgICAgICAgICAgdG91Y2htb3ZlOiAnbW91c2Vtb3ZlJyxcbiAgICAgICAgICAgIHRvdWNoZW5kOiAnbW91c2V1cCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR5cGUgPSBldmVudFR5cGVzW2V2ZW50LnR5cGVdLFxuICAgICAgICAgIHNpbXVsYXRlZEV2ZW50XG4gICAgICAgIDtcblxuICAgICAgaWYoJ01vdXNlRXZlbnQnIGluIHdpbmRvdyAmJiB0eXBlb2Ygd2luZG93Lk1vdXNlRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc2ltdWxhdGVkRXZlbnQgPSBuZXcgd2luZG93Lk1vdXNlRXZlbnQodHlwZSwge1xuICAgICAgICAgICdidWJibGVzJzogdHJ1ZSxcbiAgICAgICAgICAnY2FuY2VsYWJsZSc6IHRydWUsXG4gICAgICAgICAgJ3NjcmVlblgnOiBmaXJzdC5zY3JlZW5YLFxuICAgICAgICAgICdzY3JlZW5ZJzogZmlyc3Quc2NyZWVuWSxcbiAgICAgICAgICAnY2xpZW50WCc6IGZpcnN0LmNsaWVudFgsXG4gICAgICAgICAgJ2NsaWVudFknOiBmaXJzdC5jbGllbnRZXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2ltdWxhdGVkRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudCcpO1xuICAgICAgICBzaW11bGF0ZWRFdmVudC5pbml0TW91c2VFdmVudCh0eXBlLCB0cnVlLCB0cnVlLCB3aW5kb3csIDEsIGZpcnN0LnNjcmVlblgsIGZpcnN0LnNjcmVlblksIGZpcnN0LmNsaWVudFgsIGZpcnN0LmNsaWVudFksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLypsZWZ0Ki8sIG51bGwpO1xuICAgICAgfVxuICAgICAgZmlyc3QudGFyZ2V0LmRpc3BhdGNoRXZlbnQoc2ltdWxhdGVkRXZlbnQpO1xuICAgIH07XG4gIH07XG59O1xuXG5Ub3VjaC5pbml0ID0gZnVuY3Rpb24gKCkge1xuICBpZih0eXBlb2YoJC5zcG90U3dpcGUpID09PSAndW5kZWZpbmVkJykge1xuICAgIFRvdWNoLnNldHVwU3BvdFN3aXBlKCQpO1xuICAgIFRvdWNoLnNldHVwVG91Y2hIYW5kbGVyKCQpO1xuICB9XG59O1xuXG5jb25zdCBNdXRhdGlvbk9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHByZWZpeGVzID0gWydXZWJLaXQnLCAnTW96JywgJ08nLCAnTXMnLCAnJ107XG4gIGZvciAodmFyIGk9MDsgaSA8IHByZWZpeGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGAke3ByZWZpeGVzW2ldfU11dGF0aW9uT2JzZXJ2ZXJgIGluIHdpbmRvdykge1xuICAgICAgcmV0dXJuIHdpbmRvd1tgJHtwcmVmaXhlc1tpXX1NdXRhdGlvbk9ic2VydmVyYF07XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn0pKCk7XG5cbmNvbnN0IHRyaWdnZXJzID0gKGVsLCB0eXBlKSA9PiB7XG4gIGVsLmRhdGEodHlwZSkuc3BsaXQoJyAnKS5mb3JFYWNoKGlkID0+IHtcbiAgICAkKGAjJHtpZH1gKVsgdHlwZSA9PT0gJ2Nsb3NlJyA/ICd0cmlnZ2VyJyA6ICd0cmlnZ2VySGFuZGxlciddKGAke3R5cGV9LnpmLnRyaWdnZXJgLCBbZWxdKTtcbiAgfSk7XG59O1xuXG52YXIgVHJpZ2dlcnMgPSB7XG4gIExpc3RlbmVyczoge1xuICAgIEJhc2ljOiB7fSxcbiAgICBHbG9iYWw6IHt9XG4gIH0sXG4gIEluaXRpYWxpemVyczoge31cbn07XG5cblRyaWdnZXJzLkxpc3RlbmVycy5CYXNpYyAgPSB7XG4gIG9wZW5MaXN0ZW5lcjogZnVuY3Rpb24oKSB7XG4gICAgdHJpZ2dlcnMoJCh0aGlzKSwgJ29wZW4nKTtcbiAgfSxcbiAgY2xvc2VMaXN0ZW5lcjogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGlkID0gJCh0aGlzKS5kYXRhKCdjbG9zZScpO1xuICAgIGlmIChpZCkge1xuICAgICAgdHJpZ2dlcnMoJCh0aGlzKSwgJ2Nsb3NlJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgJCh0aGlzKS50cmlnZ2VyKCdjbG9zZS56Zi50cmlnZ2VyJyk7XG4gICAgfVxuICB9LFxuICB0b2dnbGVMaXN0ZW5lcjogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGlkID0gJCh0aGlzKS5kYXRhKCd0b2dnbGUnKTtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHRyaWdnZXJzKCQodGhpcyksICd0b2dnbGUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJCh0aGlzKS50cmlnZ2VyKCd0b2dnbGUuemYudHJpZ2dlcicpO1xuICAgIH1cbiAgfSxcbiAgY2xvc2VhYmxlTGlzdGVuZXI6IGZ1bmN0aW9uKGUpIHtcbiAgICBsZXQgYW5pbWF0aW9uID0gJCh0aGlzKS5kYXRhKCdjbG9zYWJsZScpO1xuXG4gICAgLy8gT25seSBjbG9zZSB0aGUgZmlyc3QgY2xvc2FibGUgZWxlbWVudC4gU2VlIGh0dHBzOi8vZ2l0LmlvL3pmLTc4MzNcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYoYW5pbWF0aW9uICE9PSAnJyl7XG4gICAgICBNb3Rpb24uYW5pbWF0ZU91dCgkKHRoaXMpLCBhbmltYXRpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgICAkKHRoaXMpLnRyaWdnZXIoJ2Nsb3NlZC56ZicpO1xuICAgICAgfSk7XG4gICAgfWVsc2Uge1xuICAgICAgJCh0aGlzKS5mYWRlT3V0KCkudHJpZ2dlcignY2xvc2VkLnpmJyk7XG4gICAgfVxuICB9LFxuICB0b2dnbGVGb2N1c0xpc3RlbmVyOiBmdW5jdGlvbigpIHtcbiAgICBsZXQgaWQgPSAkKHRoaXMpLmRhdGEoJ3RvZ2dsZS1mb2N1cycpO1xuICAgICQoYCMke2lkfWApLnRyaWdnZXJIYW5kbGVyKCd0b2dnbGUuemYudHJpZ2dlcicsIFskKHRoaXMpXSk7XG4gIH1cbn07XG5cbi8vIEVsZW1lbnRzIHdpdGggW2RhdGEtb3Blbl0gd2lsbCByZXZlYWwgYSBwbHVnaW4gdGhhdCBzdXBwb3J0cyBpdCB3aGVuIGNsaWNrZWQuXG5UcmlnZ2Vycy5Jbml0aWFsaXplcnMuYWRkT3Blbkxpc3RlbmVyID0gKCRlbGVtKSA9PiB7XG4gICRlbGVtLm9mZignY2xpY2suemYudHJpZ2dlcicsIFRyaWdnZXJzLkxpc3RlbmVycy5CYXNpYy5vcGVuTGlzdGVuZXIpO1xuICAkZWxlbS5vbignY2xpY2suemYudHJpZ2dlcicsICdbZGF0YS1vcGVuXScsIFRyaWdnZXJzLkxpc3RlbmVycy5CYXNpYy5vcGVuTGlzdGVuZXIpO1xufTtcblxuLy8gRWxlbWVudHMgd2l0aCBbZGF0YS1jbG9zZV0gd2lsbCBjbG9zZSBhIHBsdWdpbiB0aGF0IHN1cHBvcnRzIGl0IHdoZW4gY2xpY2tlZC5cbi8vIElmIHVzZWQgd2l0aG91dCBhIHZhbHVlIG9uIFtkYXRhLWNsb3NlXSwgdGhlIGV2ZW50IHdpbGwgYnViYmxlLCBhbGxvd2luZyBpdCB0byBjbG9zZSBhIHBhcmVudCBjb21wb25lbnQuXG5UcmlnZ2Vycy5Jbml0aWFsaXplcnMuYWRkQ2xvc2VMaXN0ZW5lciA9ICgkZWxlbSkgPT4ge1xuICAkZWxlbS5vZmYoJ2NsaWNrLnpmLnRyaWdnZXInLCBUcmlnZ2Vycy5MaXN0ZW5lcnMuQmFzaWMuY2xvc2VMaXN0ZW5lcik7XG4gICRlbGVtLm9uKCdjbGljay56Zi50cmlnZ2VyJywgJ1tkYXRhLWNsb3NlXScsIFRyaWdnZXJzLkxpc3RlbmVycy5CYXNpYy5jbG9zZUxpc3RlbmVyKTtcbn07XG5cbi8vIEVsZW1lbnRzIHdpdGggW2RhdGEtdG9nZ2xlXSB3aWxsIHRvZ2dsZSBhIHBsdWdpbiB0aGF0IHN1cHBvcnRzIGl0IHdoZW4gY2xpY2tlZC5cblRyaWdnZXJzLkluaXRpYWxpemVycy5hZGRUb2dnbGVMaXN0ZW5lciA9ICgkZWxlbSkgPT4ge1xuICAkZWxlbS5vZmYoJ2NsaWNrLnpmLnRyaWdnZXInLCBUcmlnZ2Vycy5MaXN0ZW5lcnMuQmFzaWMudG9nZ2xlTGlzdGVuZXIpO1xuICAkZWxlbS5vbignY2xpY2suemYudHJpZ2dlcicsICdbZGF0YS10b2dnbGVdJywgVHJpZ2dlcnMuTGlzdGVuZXJzLkJhc2ljLnRvZ2dsZUxpc3RlbmVyKTtcbn07XG5cbi8vIEVsZW1lbnRzIHdpdGggW2RhdGEtY2xvc2FibGVdIHdpbGwgcmVzcG9uZCB0byBjbG9zZS56Zi50cmlnZ2VyIGV2ZW50cy5cblRyaWdnZXJzLkluaXRpYWxpemVycy5hZGRDbG9zZWFibGVMaXN0ZW5lciA9ICgkZWxlbSkgPT4ge1xuICAkZWxlbS5vZmYoJ2Nsb3NlLnpmLnRyaWdnZXInLCBUcmlnZ2Vycy5MaXN0ZW5lcnMuQmFzaWMuY2xvc2VhYmxlTGlzdGVuZXIpO1xuICAkZWxlbS5vbignY2xvc2UuemYudHJpZ2dlcicsICdbZGF0YS1jbG9zZWFibGVdLCBbZGF0YS1jbG9zYWJsZV0nLCBUcmlnZ2Vycy5MaXN0ZW5lcnMuQmFzaWMuY2xvc2VhYmxlTGlzdGVuZXIpO1xufTtcblxuLy8gRWxlbWVudHMgd2l0aCBbZGF0YS10b2dnbGUtZm9jdXNdIHdpbGwgcmVzcG9uZCB0byBjb21pbmcgaW4gYW5kIG91dCBvZiBmb2N1c1xuVHJpZ2dlcnMuSW5pdGlhbGl6ZXJzLmFkZFRvZ2dsZUZvY3VzTGlzdGVuZXIgPSAoJGVsZW0pID0+IHtcbiAgJGVsZW0ub2ZmKCdmb2N1cy56Zi50cmlnZ2VyIGJsdXIuemYudHJpZ2dlcicsIFRyaWdnZXJzLkxpc3RlbmVycy5CYXNpYy50b2dnbGVGb2N1c0xpc3RlbmVyKTtcbiAgJGVsZW0ub24oJ2ZvY3VzLnpmLnRyaWdnZXIgYmx1ci56Zi50cmlnZ2VyJywgJ1tkYXRhLXRvZ2dsZS1mb2N1c10nLCBUcmlnZ2Vycy5MaXN0ZW5lcnMuQmFzaWMudG9nZ2xlRm9jdXNMaXN0ZW5lcik7XG59O1xuXG5cblxuLy8gTW9yZSBHbG9iYWwvY29tcGxleCBsaXN0ZW5lcnMgYW5kIHRyaWdnZXJzXG5UcmlnZ2Vycy5MaXN0ZW5lcnMuR2xvYmFsICA9IHtcbiAgcmVzaXplTGlzdGVuZXI6IGZ1bmN0aW9uKCRub2Rlcykge1xuICAgIGlmKCFNdXRhdGlvbk9ic2VydmVyKXsvL2ZhbGxiYWNrIGZvciBJRSA5XG4gICAgICAkbm9kZXMuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICAkKHRoaXMpLnRyaWdnZXJIYW5kbGVyKCdyZXNpemVtZS56Zi50cmlnZ2VyJyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy90cmlnZ2VyIGFsbCBsaXN0ZW5pbmcgZWxlbWVudHMgYW5kIHNpZ25hbCBhIHJlc2l6ZSBldmVudFxuICAgICRub2Rlcy5hdHRyKCdkYXRhLWV2ZW50cycsIFwicmVzaXplXCIpO1xuICB9LFxuICBzY3JvbGxMaXN0ZW5lcjogZnVuY3Rpb24oJG5vZGVzKSB7XG4gICAgaWYoIU11dGF0aW9uT2JzZXJ2ZXIpey8vZmFsbGJhY2sgZm9yIElFIDlcbiAgICAgICRub2Rlcy5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgICQodGhpcykudHJpZ2dlckhhbmRsZXIoJ3Njcm9sbG1lLnpmLnRyaWdnZXInKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvL3RyaWdnZXIgYWxsIGxpc3RlbmluZyBlbGVtZW50cyBhbmQgc2lnbmFsIGEgc2Nyb2xsIGV2ZW50XG4gICAgJG5vZGVzLmF0dHIoJ2RhdGEtZXZlbnRzJywgXCJzY3JvbGxcIik7XG4gIH0sXG4gIGNsb3NlTWVMaXN0ZW5lcjogZnVuY3Rpb24oZSwgcGx1Z2luSWQpe1xuICAgIGxldCBwbHVnaW4gPSBlLm5hbWVzcGFjZS5zcGxpdCgnLicpWzBdO1xuICAgIGxldCBwbHVnaW5zID0gJChgW2RhdGEtJHtwbHVnaW59XWApLm5vdChgW2RhdGEteWV0aS1ib3g9XCIke3BsdWdpbklkfVwiXWApO1xuXG4gICAgcGx1Z2lucy5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICBsZXQgX3RoaXMgPSAkKHRoaXMpO1xuICAgICAgX3RoaXMudHJpZ2dlckhhbmRsZXIoJ2Nsb3NlLnpmLnRyaWdnZXInLCBbX3RoaXNdKTtcbiAgICB9KTtcbiAgfVxufTtcblxuLy8gR2xvYmFsLCBwYXJzZXMgd2hvbGUgZG9jdW1lbnQuXG5UcmlnZ2Vycy5Jbml0aWFsaXplcnMuYWRkQ2xvc2VtZUxpc3RlbmVyID0gZnVuY3Rpb24ocGx1Z2luTmFtZSkge1xuICB2YXIgeWV0aUJveGVzID0gJCgnW2RhdGEteWV0aS1ib3hdJyksXG4gICAgICBwbHVnTmFtZXMgPSBbJ2Ryb3Bkb3duJywgJ3Rvb2x0aXAnLCAncmV2ZWFsJ107XG5cbiAgaWYocGx1Z2luTmFtZSl7XG4gICAgaWYodHlwZW9mIHBsdWdpbk5hbWUgPT09ICdzdHJpbmcnKXtcbiAgICAgIHBsdWdOYW1lcy5wdXNoKHBsdWdpbk5hbWUpO1xuICAgIH1lbHNlIGlmKHR5cGVvZiBwbHVnaW5OYW1lID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGx1Z2luTmFtZVswXSA9PT0gJ3N0cmluZycpe1xuICAgICAgcGx1Z05hbWVzID0gcGx1Z05hbWVzLmNvbmNhdChwbHVnaW5OYW1lKTtcbiAgICB9ZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdQbHVnaW4gbmFtZXMgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfVxuICB9XG4gIGlmKHlldGlCb3hlcy5sZW5ndGgpe1xuICAgIGxldCBsaXN0ZW5lcnMgPSBwbHVnTmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICByZXR1cm4gYGNsb3NlbWUuemYuJHtuYW1lfWA7XG4gICAgfSkuam9pbignICcpO1xuXG4gICAgJCh3aW5kb3cpLm9mZihsaXN0ZW5lcnMpLm9uKGxpc3RlbmVycywgVHJpZ2dlcnMuTGlzdGVuZXJzLkdsb2JhbC5jbG9zZU1lTGlzdGVuZXIpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBkZWJvdW5jZUdsb2JhbExpc3RlbmVyKGRlYm91bmNlLCB0cmlnZ2VyLCBsaXN0ZW5lcikge1xuICBsZXQgdGltZXIsIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuICAkKHdpbmRvdykub24odHJpZ2dlciwgZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRpbWVyKSB7IGNsZWFyVGltZW91dCh0aW1lcik7IH1cbiAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIGxpc3RlbmVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0sIGRlYm91bmNlIHx8IDEwKTsgLy9kZWZhdWx0IHRpbWUgdG8gZW1pdCBzY3JvbGwgZXZlbnRcbiAgfSk7XG59XG5cblRyaWdnZXJzLkluaXRpYWxpemVycy5hZGRSZXNpemVMaXN0ZW5lciA9IGZ1bmN0aW9uKGRlYm91bmNlKXtcbiAgbGV0ICRub2RlcyA9ICQoJ1tkYXRhLXJlc2l6ZV0nKTtcbiAgaWYoJG5vZGVzLmxlbmd0aCl7XG4gICAgZGVib3VuY2VHbG9iYWxMaXN0ZW5lcihkZWJvdW5jZSwgJ3Jlc2l6ZS56Zi50cmlnZ2VyJywgVHJpZ2dlcnMuTGlzdGVuZXJzLkdsb2JhbC5yZXNpemVMaXN0ZW5lciwgJG5vZGVzKTtcbiAgfVxufTtcblxuVHJpZ2dlcnMuSW5pdGlhbGl6ZXJzLmFkZFNjcm9sbExpc3RlbmVyID0gZnVuY3Rpb24oZGVib3VuY2Upe1xuICBsZXQgJG5vZGVzID0gJCgnW2RhdGEtc2Nyb2xsXScpO1xuICBpZigkbm9kZXMubGVuZ3RoKXtcbiAgICBkZWJvdW5jZUdsb2JhbExpc3RlbmVyKGRlYm91bmNlLCAnc2Nyb2xsLnpmLnRyaWdnZXInLCBUcmlnZ2Vycy5MaXN0ZW5lcnMuR2xvYmFsLnNjcm9sbExpc3RlbmVyLCAkbm9kZXMpO1xuICB9XG59O1xuXG5UcmlnZ2Vycy5Jbml0aWFsaXplcnMuYWRkTXV0YXRpb25FdmVudHNMaXN0ZW5lciA9IGZ1bmN0aW9uKCRlbGVtKSB7XG4gIGlmKCFNdXRhdGlvbk9ic2VydmVyKXsgcmV0dXJuIGZhbHNlOyB9XG4gIGxldCAkbm9kZXMgPSAkZWxlbS5maW5kKCdbZGF0YS1yZXNpemVdLCBbZGF0YS1zY3JvbGxdLCBbZGF0YS1tdXRhdGVdJyk7XG5cbiAgLy9lbGVtZW50IGNhbGxiYWNrXG4gIHZhciBsaXN0ZW5pbmdFbGVtZW50c011dGF0aW9uID0gZnVuY3Rpb24gKG11dGF0aW9uUmVjb3Jkc0xpc3QpIHtcbiAgICB2YXIgJHRhcmdldCA9ICQobXV0YXRpb25SZWNvcmRzTGlzdFswXS50YXJnZXQpO1xuXG4gICAgLy90cmlnZ2VyIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgZWxlbWVudCBkZXBlbmRpbmcgb24gdHlwZVxuICAgIHN3aXRjaCAobXV0YXRpb25SZWNvcmRzTGlzdFswXS50eXBlKSB7XG4gICAgICBjYXNlIFwiYXR0cmlidXRlc1wiOlxuICAgICAgICBpZiAoJHRhcmdldC5hdHRyKFwiZGF0YS1ldmVudHNcIikgPT09IFwic2Nyb2xsXCIgJiYgbXV0YXRpb25SZWNvcmRzTGlzdFswXS5hdHRyaWJ1dGVOYW1lID09PSBcImRhdGEtZXZlbnRzXCIpIHtcbiAgICAgICAgICAkdGFyZ2V0LnRyaWdnZXJIYW5kbGVyKCdzY3JvbGxtZS56Zi50cmlnZ2VyJywgWyR0YXJnZXQsIHdpbmRvdy5wYWdlWU9mZnNldF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdGFyZ2V0LmF0dHIoXCJkYXRhLWV2ZW50c1wiKSA9PT0gXCJyZXNpemVcIiAmJiBtdXRhdGlvblJlY29yZHNMaXN0WzBdLmF0dHJpYnV0ZU5hbWUgPT09IFwiZGF0YS1ldmVudHNcIikge1xuICAgICAgICAgICR0YXJnZXQudHJpZ2dlckhhbmRsZXIoJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInLCBbJHRhcmdldF0pO1xuICAgICAgICAgfVxuICAgICAgICBpZiAobXV0YXRpb25SZWNvcmRzTGlzdFswXS5hdHRyaWJ1dGVOYW1lID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgICAkdGFyZ2V0LmNsb3Nlc3QoXCJbZGF0YS1tdXRhdGVdXCIpLmF0dHIoXCJkYXRhLWV2ZW50c1wiLFwibXV0YXRlXCIpO1xuICAgICAgICAgICR0YXJnZXQuY2xvc2VzdChcIltkYXRhLW11dGF0ZV1cIikudHJpZ2dlckhhbmRsZXIoJ211dGF0ZW1lLnpmLnRyaWdnZXInLCBbJHRhcmdldC5jbG9zZXN0KFwiW2RhdGEtbXV0YXRlXVwiKV0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiY2hpbGRMaXN0XCI6XG4gICAgICAgICR0YXJnZXQuY2xvc2VzdChcIltkYXRhLW11dGF0ZV1cIikuYXR0cihcImRhdGEtZXZlbnRzXCIsXCJtdXRhdGVcIik7XG4gICAgICAgICR0YXJnZXQuY2xvc2VzdChcIltkYXRhLW11dGF0ZV1cIikudHJpZ2dlckhhbmRsZXIoJ211dGF0ZW1lLnpmLnRyaWdnZXInLCBbJHRhcmdldC5jbG9zZXN0KFwiW2RhdGEtbXV0YXRlXVwiKV0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgLy9ub3RoaW5nXG4gICAgfVxuICB9O1xuXG4gIGlmICgkbm9kZXMubGVuZ3RoKSB7XG4gICAgLy9mb3IgZWFjaCBlbGVtZW50IHRoYXQgbmVlZHMgdG8gbGlzdGVuIGZvciByZXNpemluZywgc2Nyb2xsaW5nLCBvciBtdXRhdGlvbiBhZGQgYSBzaW5nbGUgb2JzZXJ2ZXJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSAkbm9kZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICB2YXIgZWxlbWVudE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobGlzdGVuaW5nRWxlbWVudHNNdXRhdGlvbik7XG4gICAgICBlbGVtZW50T2JzZXJ2ZXIub2JzZXJ2ZSgkbm9kZXNbaV0sIHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiBmYWxzZSwgc3VidHJlZTogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbXCJkYXRhLWV2ZW50c1wiLCBcInN0eWxlXCJdIH0pO1xuICAgIH1cbiAgfVxufTtcblxuVHJpZ2dlcnMuSW5pdGlhbGl6ZXJzLmFkZFNpbXBsZUxpc3RlbmVycyA9IGZ1bmN0aW9uKCkge1xuICBsZXQgJGRvY3VtZW50ID0gJChkb2N1bWVudCk7XG5cbiAgVHJpZ2dlcnMuSW5pdGlhbGl6ZXJzLmFkZE9wZW5MaXN0ZW5lcigkZG9jdW1lbnQpO1xuICBUcmlnZ2Vycy5Jbml0aWFsaXplcnMuYWRkQ2xvc2VMaXN0ZW5lcigkZG9jdW1lbnQpO1xuICBUcmlnZ2Vycy5Jbml0aWFsaXplcnMuYWRkVG9nZ2xlTGlzdGVuZXIoJGRvY3VtZW50KTtcbiAgVHJpZ2dlcnMuSW5pdGlhbGl6ZXJzLmFkZENsb3NlYWJsZUxpc3RlbmVyKCRkb2N1bWVudCk7XG4gIFRyaWdnZXJzLkluaXRpYWxpemVycy5hZGRUb2dnbGVGb2N1c0xpc3RlbmVyKCRkb2N1bWVudCk7XG5cbn07XG5cblRyaWdnZXJzLkluaXRpYWxpemVycy5hZGRHbG9iYWxMaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHtcbiAgbGV0ICRkb2N1bWVudCA9ICQoZG9jdW1lbnQpO1xuICBUcmlnZ2Vycy5Jbml0aWFsaXplcnMuYWRkTXV0YXRpb25FdmVudHNMaXN0ZW5lcigkZG9jdW1lbnQpO1xuICBUcmlnZ2Vycy5Jbml0aWFsaXplcnMuYWRkUmVzaXplTGlzdGVuZXIoMjUwKTtcbiAgVHJpZ2dlcnMuSW5pdGlhbGl6ZXJzLmFkZFNjcm9sbExpc3RlbmVyKCk7XG4gIFRyaWdnZXJzLkluaXRpYWxpemVycy5hZGRDbG9zZW1lTGlzdGVuZXIoKTtcbn07XG5cblxuVHJpZ2dlcnMuaW5pdCA9IGZ1bmN0aW9uIChfXywgRm91bmRhdGlvbikge1xuICBvbkxvYWQoJCh3aW5kb3cpLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCQudHJpZ2dlcnNJbml0aWFsaXplZCAhPT0gdHJ1ZSkge1xuICAgICAgVHJpZ2dlcnMuSW5pdGlhbGl6ZXJzLmFkZFNpbXBsZUxpc3RlbmVycygpO1xuICAgICAgVHJpZ2dlcnMuSW5pdGlhbGl6ZXJzLmFkZEdsb2JhbExpc3RlbmVycygpO1xuICAgICAgJC50cmlnZ2Vyc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmKEZvdW5kYXRpb24pIHtcbiAgICBGb3VuZGF0aW9uLlRyaWdnZXJzID0gVHJpZ2dlcnM7XG4gICAgLy8gTGVnYWN5IGluY2x1ZGVkIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlIGZvciBub3cuXG4gICAgRm91bmRhdGlvbi5JSGVhcllvdSA9IFRyaWdnZXJzLkluaXRpYWxpemVycy5hZGRHbG9iYWxMaXN0ZW5lcnM7XG4gIH1cbn07XG5cbi8vIEFic3RyYWN0IGNsYXNzIGZvciBwcm92aWRpbmcgbGlmZWN5Y2xlIGhvb2tzLiBFeHBlY3QgcGx1Z2lucyB0byBkZWZpbmUgQVQgTEVBU1Rcbi8vIHtmdW5jdGlvbn0gX3NldHVwIChyZXBsYWNlcyBwcmV2aW91cyBjb25zdHJ1Y3RvciksXG4vLyB7ZnVuY3Rpb259IF9kZXN0cm95IChyZXBsYWNlcyBwcmV2aW91cyBkZXN0cm95KVxuY2xhc3MgUGx1Z2luIHtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5fc2V0dXAoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgdmFyIHBsdWdpbk5hbWUgPSBnZXRQbHVnaW5OYW1lKHRoaXMpO1xuICAgIHRoaXMudXVpZCA9IEdldFlvRGlnaXRzKDYsIHBsdWdpbk5hbWUpO1xuXG4gICAgaWYoIXRoaXMuJGVsZW1lbnQuYXR0cihgZGF0YS0ke3BsdWdpbk5hbWV9YCkpeyB0aGlzLiRlbGVtZW50LmF0dHIoYGRhdGEtJHtwbHVnaW5OYW1lfWAsIHRoaXMudXVpZCk7IH1cbiAgICBpZighdGhpcy4kZWxlbWVudC5kYXRhKCd6ZlBsdWdpbicpKXsgdGhpcy4kZWxlbWVudC5kYXRhKCd6ZlBsdWdpbicsIHRoaXMpOyB9XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgcGx1Z2luIGhhcyBpbml0aWFsaXplZC5cbiAgICAgKiBAZXZlbnQgUGx1Z2luI2luaXRcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoYGluaXQuemYuJHtwbHVnaW5OYW1lfWApO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95KCk7XG4gICAgdmFyIHBsdWdpbk5hbWUgPSBnZXRQbHVnaW5OYW1lKHRoaXMpO1xuICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQXR0cihgZGF0YS0ke3BsdWdpbk5hbWV9YCkucmVtb3ZlRGF0YSgnemZQbHVnaW4nKVxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgcGx1Z2luIGhhcyBiZWVuIGRlc3Ryb3llZC5cbiAgICAgICAgICogQGV2ZW50IFBsdWdpbiNkZXN0cm95ZWRcbiAgICAgICAgICovXG4gICAgICAgIC50cmlnZ2VyKGBkZXN0cm95ZWQuemYuJHtwbHVnaW5OYW1lfWApO1xuICAgIGZvcih2YXIgcHJvcCBpbiB0aGlzKXtcbiAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgIHRoaXNbcHJvcF0gPSBudWxsOyAvL2NsZWFuIHVwIHNjcmlwdCB0byBwcmVwIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24uXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIENvbnZlcnQgUGFzY2FsQ2FzZSB0byBrZWJhYi1jYXNlXG4vLyBUaGFuayB5b3U6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzg5NTU1ODBcbmZ1bmN0aW9uIGh5cGhlbmF0ZSQxKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csICckMS0kMicpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIGdldFBsdWdpbk5hbWUob2JqKSB7XG4gIHJldHVybiBoeXBoZW5hdGUkMShvYmouY2xhc3NOYW1lKTtcbn1cblxuLyoqXG4gKiBBYmlkZSBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24uYWJpZGVcbiAqL1xuXG5jbGFzcyBBYmlkZSBleHRlbmRzIFBsdWdpbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIEFiaWRlLlxuICAgKiBAY2xhc3NcbiAgICogQG5hbWUgQWJpZGVcbiAgICogQGZpcmVzIEFiaWRlI2luaXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIGFkZCB0aGUgdHJpZ2dlciB0by5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgX3NldHVwKGVsZW1lbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyAgPSAkLmV4dGVuZCh0cnVlLCB7fSwgQWJpZGUuZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcbiAgICB0aGlzLmlzRW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5mb3Jtbm92YWxpZGF0ZSA9IG51bGw7XG5cbiAgICB0aGlzLmNsYXNzTmFtZSA9ICdBYmlkZSc7IC8vIGllOSBiYWNrIGNvbXBhdFxuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgQWJpZGUgcGx1Z2luIGFuZCBjYWxscyBmdW5jdGlvbnMgdG8gZ2V0IEFiaWRlIGZ1bmN0aW9uaW5nIG9uIGxvYWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB0aGlzLiRpbnB1dHMgPSAkLm1lcmdlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25zaWRlciBhcyBpbnB1dCB0byB2YWxpZGF0ZTpcbiAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnaW5wdXQnKS5ub3QoJ1t0eXBlPVwic3VibWl0XCJdJyksIC8vICogYWxsIGlucHV0IGZpZWxkcyBleHBlY3Qgc3VibWl0XG4gICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ3RleHRhcmVhLCBzZWxlY3QnKSAgICAgICAgICAgICAgLy8gKiBhbGwgdGV4dGFyZWFzIGFuZCBzZWxlY3QgZmllbGRzXG4gICAgKTtcbiAgICB0aGlzLiRzdWJtaXRzID0gdGhpcy4kZWxlbWVudC5maW5kKCdbdHlwZT1cInN1Ym1pdFwiXScpO1xuICAgIGNvbnN0ICRnbG9iYWxFcnJvcnMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLWFiaWRlLWVycm9yXScpO1xuXG4gICAgLy8gQWRkIGExMXkgYXR0cmlidXRlcyB0byBhbGwgZmllbGRzXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hMTF5QXR0cmlidXRlcykge1xuICAgICAgdGhpcy4kaW5wdXRzLmVhY2goKGksIGlucHV0KSA9PiB0aGlzLmFkZEExMXlBdHRyaWJ1dGVzKCQoaW5wdXQpKSk7XG4gICAgICAkZ2xvYmFsRXJyb3JzLmVhY2goKGksIGVycm9yKSA9PiB0aGlzLmFkZEdsb2JhbEVycm9yQTExeUF0dHJpYnV0ZXMoJChlcnJvcikpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBldmVudHMgZm9yIEFiaWRlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB0aGlzLiRlbGVtZW50Lm9mZignLmFiaWRlJylcbiAgICAgIC5vbigncmVzZXQuemYuYWJpZGUnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICB9KVxuICAgICAgLm9uKCdzdWJtaXQuemYuYWJpZGUnLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlRm9ybSgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiRzdWJtaXRzXG4gICAgICAub2ZmKCdjbGljay56Zi5hYmlkZSBrZXlkb3duLnpmLmFiaWRlJylcbiAgICAgIC5vbignY2xpY2suemYuYWJpZGUga2V5ZG93bi56Zi5hYmlkZScsIChlKSA9PiB7XG4gICAgICAgIGlmICghZS5rZXkgfHwgKGUua2V5ID09PSAnICcgfHwgZS5rZXkgPT09ICdFbnRlcicpKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuZm9ybW5vdmFsaWRhdGUgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2Zvcm1ub3ZhbGlkYXRlJykgIT09IG51bGw7XG4gICAgICAgICAgdGhpcy4kZWxlbWVudC5zdWJtaXQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnZhbGlkYXRlT24gPT09ICdmaWVsZENoYW5nZScpIHtcbiAgICAgIHRoaXMuJGlucHV0c1xuICAgICAgICAub2ZmKCdjaGFuZ2UuemYuYWJpZGUnKVxuICAgICAgICAub24oJ2NoYW5nZS56Zi5hYmlkZScsIChlKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0KCQoZS50YXJnZXQpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5saXZlVmFsaWRhdGUpIHtcbiAgICAgIHRoaXMuJGlucHV0c1xuICAgICAgICAub2ZmKCdpbnB1dC56Zi5hYmlkZScpXG4gICAgICAgIC5vbignaW5wdXQuemYuYWJpZGUnLCAoZSkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dCgkKGUudGFyZ2V0KSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMudmFsaWRhdGVPbkJsdXIpIHtcbiAgICAgIHRoaXMuJGlucHV0c1xuICAgICAgICAub2ZmKCdibHVyLnpmLmFiaWRlJylcbiAgICAgICAgLm9uKCdibHVyLnpmLmFiaWRlJywgKGUpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXQoJChlLnRhcmdldCkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgbmVjZXNzYXJ5IGZ1bmN0aW9ucyB0byB1cGRhdGUgQWJpZGUgdXBvbiBET00gY2hhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVmbG93KCkge1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgc3VibWl0dGVkIGZvcm0gc2hvdWxkIGJlIHZhbGlkYXRlZCBvciBub3QsIGNvbnNvZGVyaW5nIGZvcm1ub3ZhbGlkYXRlIGFuZCBpc0VuYWJsZWRcbiAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdmFsaWRhdGlvbklzRGlzYWJsZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNFbmFibGVkID09PSBmYWxzZSkgeyAvLyB3aG9sZSB2YWxpZGF0aW9uIGRpc2FibGVkXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmZvcm1ub3ZhbGlkYXRlID09PSAnYm9vbGVhbicpIHsgLy8gdHJpZ2dlcmVkIGJ5ICRzdWJtaXRcbiAgICAgIHJldHVybiB0aGlzLmZvcm1ub3ZhbGlkYXRlO1xuICAgIH1cbiAgICAvLyB0cmlnZ2VyZWQgYnkgRW50ZXIgaW4gbm9uLXN1Ym1pdCBpbnB1dFxuICAgIHJldHVybiB0aGlzLiRzdWJtaXRzLmxlbmd0aCA/IHRoaXMuJHN1Ym1pdHNbMF0uZ2V0QXR0cmlidXRlKCdmb3Jtbm92YWxpZGF0ZScpICE9PSBudWxsIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgd2hvbGUgdmFsaWRhdGlvblxuICAgKi9cbiAgZW5hYmxlVmFsaWRhdGlvbigpIHtcbiAgICB0aGlzLmlzRW5hYmxlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZXMgdGhlIHdob2xlIHZhbGlkYXRpb25cbiAgICovXG4gIGRpc2FibGVWYWxpZGF0aW9uKCkge1xuICAgIHRoaXMuaXNFbmFibGVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IGEgZm9ybSBlbGVtZW50IGhhcyB0aGUgcmVxdWlyZWQgYXR0cmlidXRlIGFuZCBpZiBpdCdzIGNoZWNrZWQgb3Igbm90XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBjaGVjayBmb3IgcmVxdWlyZWQgYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBCb29sZWFuIHZhbHVlIGRlcGVuZHMgb24gd2hldGhlciBvciBub3QgYXR0cmlidXRlIGlzIGNoZWNrZWQgb3IgZW1wdHlcbiAgICovXG4gIHJlcXVpcmVkQ2hlY2soJGVsKSB7XG4gICAgaWYgKCEkZWwuYXR0cigncmVxdWlyZWQnKSkgcmV0dXJuIHRydWU7XG5cbiAgICB2YXIgaXNHb29kID0gdHJ1ZTtcblxuICAgIHN3aXRjaCAoJGVsWzBdLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgaXNHb29kID0gJGVsWzBdLmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgY2FzZSAnc2VsZWN0LW9uZSc6XG4gICAgICBjYXNlICdzZWxlY3QtbXVsdGlwbGUnOlxuICAgICAgICB2YXIgb3B0ID0gJGVsLmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpO1xuICAgICAgICBpZiAoIW9wdC5sZW5ndGggfHwgIW9wdC52YWwoKSkgaXNHb29kID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoISRlbC52YWwoKSB8fCAhJGVsLnZhbCgpLmxlbmd0aCkgaXNHb29kID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzR29vZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQ6XG4gICAqIC0gQmFzZWQgb24gJGVsLCB0aGUgZmlyc3QgZWxlbWVudChzKSBjb3JyZXNwb25kaW5nIHRvIGBmb3JtRXJyb3JTZWxlY3RvcmAgaW4gdGhpcyBvcmRlcjpcbiAgICogICAxLiBUaGUgZWxlbWVudCdzIGRpcmVjdCBzaWJsaW5nKCdzKS5cbiAgICogICAyLiBUaGUgZWxlbWVudCdzIHBhcmVudCdzIGNoaWxkcmVuLlxuICAgKiAtIEVsZW1lbnQocykgd2l0aCB0aGUgYXR0cmlidXRlIGBbZGF0YS1mb3JtLWVycm9yLWZvcl1gIHNldCB3aXRoIHRoZSBlbGVtZW50J3MgaWQuXG4gICAqXG4gICAqIFRoaXMgYWxsb3dzIGZvciBtdWx0aXBsZSBmb3JtIGVycm9ycyBwZXIgaW5wdXQsIHRob3VnaCBpZiBub25lIGFyZSBmb3VuZCwgbm8gZm9ybSBlcnJvcnMgd2lsbCBiZSBzaG93bi5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbCAtIGpRdWVyeSBvYmplY3QgdG8gdXNlIGFzIHJlZmVyZW5jZSB0byBmaW5kIHRoZSBmb3JtIGVycm9yIHNlbGVjdG9yLlxuICAgKiBAcGFyYW0ge1N0cmluZ1tdfSBbZmFpbGVkVmFsaWRhdG9yc10gLSBMaXN0IG9mIGZhaWxlZCB2YWxpZGF0b3JzLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBqUXVlcnkgb2JqZWN0IHdpdGggdGhlIHNlbGVjdG9yLlxuICAgKi9cbiAgZmluZEZvcm1FcnJvcigkZWwsIGZhaWxlZFZhbGlkYXRvcnMpIHtcbiAgICB2YXIgaWQgPSAkZWwubGVuZ3RoID8gJGVsWzBdLmlkIDogJyc7XG4gICAgdmFyICRlcnJvciA9ICRlbC5zaWJsaW5ncyh0aGlzLm9wdGlvbnMuZm9ybUVycm9yU2VsZWN0b3IpO1xuXG4gICAgaWYgKCEkZXJyb3IubGVuZ3RoKSB7XG4gICAgICAkZXJyb3IgPSAkZWwucGFyZW50KCkuZmluZCh0aGlzLm9wdGlvbnMuZm9ybUVycm9yU2VsZWN0b3IpO1xuICAgIH1cblxuICAgIGlmIChpZCkge1xuICAgICAgJGVycm9yID0gJGVycm9yLmFkZCh0aGlzLiRlbGVtZW50LmZpbmQoYFtkYXRhLWZvcm0tZXJyb3ItZm9yPVwiJHtpZH1cIl1gKSk7XG4gICAgfVxuXG4gICAgaWYgKCEhZmFpbGVkVmFsaWRhdG9ycykge1xuICAgICAgJGVycm9yID0gJGVycm9yLm5vdCgnW2RhdGEtZm9ybS1lcnJvci1vbl0nKTtcblxuICAgICAgZmFpbGVkVmFsaWRhdG9ycy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICRlcnJvciA9ICRlcnJvci5hZGQoJGVsLnNpYmxpbmdzKGBbZGF0YS1mb3JtLWVycm9yLW9uPVwiJHt2fVwiXWApKTtcbiAgICAgICAgJGVycm9yID0gJGVycm9yLmFkZCh0aGlzLiRlbGVtZW50LmZpbmQoYFtkYXRhLWZvcm0tZXJyb3ItZm9yPVwiJHtpZH1cIl1bZGF0YS1mb3JtLWVycm9yLW9uPVwiJHt2fVwiXWApKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiAkZXJyb3I7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmaXJzdCBlbGVtZW50IGluIHRoaXMgb3JkZXI6XG4gICAqIDIuIFRoZSA8bGFiZWw+IHdpdGggdGhlIGF0dHJpYnV0ZSBgW2Zvcj1cInNvbWVJbnB1dElkXCJdYFxuICAgKiAzLiBUaGUgYC5jbG9zZXN0KClgIDxsYWJlbD5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbCAtIGpRdWVyeSBvYmplY3QgdG8gY2hlY2sgZm9yIHJlcXVpcmVkIGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gQm9vbGVhbiB2YWx1ZSBkZXBlbmRzIG9uIHdoZXRoZXIgb3Igbm90IGF0dHJpYnV0ZSBpcyBjaGVja2VkIG9yIGVtcHR5XG4gICAqL1xuICBmaW5kTGFiZWwoJGVsKSB7XG4gICAgdmFyIGlkID0gJGVsWzBdLmlkO1xuICAgIHZhciAkbGFiZWwgPSB0aGlzLiRlbGVtZW50LmZpbmQoYGxhYmVsW2Zvcj1cIiR7aWR9XCJdYCk7XG5cbiAgICBpZiAoISRsYWJlbC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAkZWwuY2xvc2VzdCgnbGFiZWwnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJGxhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2V0IG9mIGxhYmVscyBhc3NvY2lhdGVkIHdpdGggYSBzZXQgb2YgcmFkaW8gZWxzIGluIHRoaXMgb3JkZXJcbiAgICogMi4gVGhlIDxsYWJlbD4gd2l0aCB0aGUgYXR0cmlidXRlIGBbZm9yPVwic29tZUlucHV0SWRcIl1gXG4gICAqIDMuIFRoZSBgLmNsb3Nlc3QoKWAgPGxhYmVsPlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsIC0galF1ZXJ5IG9iamVjdCB0byBjaGVjayBmb3IgcmVxdWlyZWQgYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBCb29sZWFuIHZhbHVlIGRlcGVuZHMgb24gd2hldGhlciBvciBub3QgYXR0cmlidXRlIGlzIGNoZWNrZWQgb3IgZW1wdHlcbiAgICovXG4gIGZpbmRSYWRpb0xhYmVscygkZWxzKSB7XG4gICAgdmFyIGxhYmVscyA9ICRlbHMubWFwKChpLCBlbCkgPT4ge1xuICAgICAgdmFyIGlkID0gZWwuaWQ7XG4gICAgICB2YXIgJGxhYmVsID0gdGhpcy4kZWxlbWVudC5maW5kKGBsYWJlbFtmb3I9XCIke2lkfVwiXWApO1xuXG4gICAgICBpZiAoISRsYWJlbC5sZW5ndGgpIHtcbiAgICAgICAgJGxhYmVsID0gJChlbCkuY2xvc2VzdCgnbGFiZWwnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAkbGFiZWxbMF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJChsYWJlbHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2V0IG9mIGxhYmVscyBhc3NvY2lhdGVkIHdpdGggYSBzZXQgb2YgY2hlY2tib3ggZWxzIGluIHRoaXMgb3JkZXJcbiAgICogMi4gVGhlIDxsYWJlbD4gd2l0aCB0aGUgYXR0cmlidXRlIGBbZm9yPVwic29tZUlucHV0SWRcIl1gXG4gICAqIDMuIFRoZSBgLmNsb3Nlc3QoKWAgPGxhYmVsPlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsIC0galF1ZXJ5IG9iamVjdCB0byBjaGVjayBmb3IgcmVxdWlyZWQgYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBCb29sZWFuIHZhbHVlIGRlcGVuZHMgb24gd2hldGhlciBvciBub3QgYXR0cmlidXRlIGlzIGNoZWNrZWQgb3IgZW1wdHlcbiAgICovXG4gIGZpbmRDaGVja2JveExhYmVscygkZWxzKSB7XG4gICAgdmFyIGxhYmVscyA9ICRlbHMubWFwKChpLCBlbCkgPT4ge1xuICAgICAgdmFyIGlkID0gZWwuaWQ7XG4gICAgICB2YXIgJGxhYmVsID0gdGhpcy4kZWxlbWVudC5maW5kKGBsYWJlbFtmb3I9XCIke2lkfVwiXWApO1xuXG4gICAgICBpZiAoISRsYWJlbC5sZW5ndGgpIHtcbiAgICAgICAgJGxhYmVsID0gJChlbCkuY2xvc2VzdCgnbGFiZWwnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAkbGFiZWxbMF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJChsYWJlbHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgdGhlIENTUyBlcnJvciBjbGFzcyBhcyBzcGVjaWZpZWQgYnkgdGhlIEFiaWRlIHNldHRpbmdzIHRvIHRoZSBsYWJlbCwgaW5wdXQsIGFuZCB0aGUgZm9ybVxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsIC0galF1ZXJ5IG9iamVjdCB0byBhZGQgdGhlIGNsYXNzIHRvXG4gICAqIEBwYXJhbSB7U3RyaW5nW119IFtmYWlsZWRWYWxpZGF0b3JzXSAtIExpc3Qgb2YgZmFpbGVkIHZhbGlkYXRvcnMuXG4gICAqL1xuICBhZGRFcnJvckNsYXNzZXMoJGVsLCBmYWlsZWRWYWxpZGF0b3JzKSB7XG4gICAgdmFyICRsYWJlbCA9IHRoaXMuZmluZExhYmVsKCRlbCk7XG4gICAgdmFyICRmb3JtRXJyb3IgPSB0aGlzLmZpbmRGb3JtRXJyb3IoJGVsLCBmYWlsZWRWYWxpZGF0b3JzKTtcblxuICAgIGlmICgkbGFiZWwubGVuZ3RoKSB7XG4gICAgICAkbGFiZWwuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmxhYmVsRXJyb3JDbGFzcyk7XG4gICAgfVxuXG4gICAgaWYgKCRmb3JtRXJyb3IubGVuZ3RoKSB7XG4gICAgICAkZm9ybUVycm9yLmFkZENsYXNzKHRoaXMub3B0aW9ucy5mb3JtRXJyb3JDbGFzcyk7XG4gICAgfVxuXG4gICAgJGVsLmFkZENsYXNzKHRoaXMub3B0aW9ucy5pbnB1dEVycm9yQ2xhc3MpLmF0dHIoe1xuICAgICAgJ2RhdGEtaW52YWxpZCc6ICcnLFxuICAgICAgJ2FyaWEtaW52YWxpZCc6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIFtmb3JdIGFuZCBbcm9sZT1hbGVydF0gYXR0cmlidXRlcyB0byBhbGwgZm9ybSBlcnJvciB0YXJnZXR0aW5nICRlbCxcbiAgICogYW5kIFthcmlhLWRlc2NyaWJlZGJ5XSBhdHRyaWJ1dGUgdG8gJGVsIHRvd2FyZCB0aGUgZmlyc3QgZm9ybSBlcnJvci5cbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbCAtIGpRdWVyeSBvYmplY3RcbiAgICovXG4gIGFkZEExMXlBdHRyaWJ1dGVzKCRlbCkge1xuICAgIGxldCAkZXJyb3JzID0gdGhpcy5maW5kRm9ybUVycm9yKCRlbCk7XG4gICAgbGV0ICRsYWJlbHMgPSAkZXJyb3JzLmZpbHRlcignbGFiZWwnKTtcbiAgICBsZXQgJGVycm9yID0gJGVycm9ycy5maXJzdCgpO1xuICAgIGlmICghJGVycm9ycy5sZW5ndGgpIHJldHVybjtcblxuICAgIC8vIFNldCBbYXJpYS1kZXNjcmliZWRieV0gb24gdGhlIGlucHV0IHRvd2FyZCB0aGUgZmlyc3QgZm9ybSBlcnJvciBpZiBpdCBpcyBub3Qgc2V0XG4gICAgaWYgKHR5cGVvZiAkZWwuYXR0cignYXJpYS1kZXNjcmliZWRieScpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gR2V0IHRoZSBmaXJzdCBlcnJvciBJRCBvciBjcmVhdGUgb25lXG4gICAgICBsZXQgZXJyb3JJZCA9ICRlcnJvci5hdHRyKCdpZCcpO1xuICAgICAgaWYgKHR5cGVvZiBlcnJvcklkID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBlcnJvcklkID0gR2V0WW9EaWdpdHMoNiwgJ2FiaWRlLWVycm9yJyk7XG4gICAgICAgICRlcnJvci5hdHRyKCdpZCcsIGVycm9ySWQpO1xuICAgICAgfVxuXG4gICAgICAkZWwuYXR0cignYXJpYS1kZXNjcmliZWRieScsIGVycm9ySWQpO1xuICAgIH1cblxuICAgIGlmICgkbGFiZWxzLmZpbHRlcignW2Zvcl0nKS5sZW5ndGggPCAkbGFiZWxzLmxlbmd0aCkge1xuICAgICAgLy8gR2V0IHRoZSBpbnB1dCBJRCBvciBjcmVhdGUgb25lXG4gICAgICBsZXQgZWxlbUlkID0gJGVsLmF0dHIoJ2lkJyk7XG4gICAgICBpZiAodHlwZW9mIGVsZW1JZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZWxlbUlkID0gR2V0WW9EaWdpdHMoNiwgJ2FiaWRlLWlucHV0Jyk7XG4gICAgICAgICRlbC5hdHRyKCdpZCcsIGVsZW1JZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBlYWNoIGxhYmVsIHRhcmdldGluZyAkZWwsIHNldCBbZm9yXSBpZiBpdCBpcyBub3Qgc2V0LlxuICAgICAgJGxhYmVscy5lYWNoKChpLCBsYWJlbCkgPT4ge1xuICAgICAgICBjb25zdCAkbGFiZWwgPSAkKGxhYmVsKTtcbiAgICAgICAgaWYgKHR5cGVvZiAkbGFiZWwuYXR0cignZm9yJykgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICRsYWJlbC5hdHRyKCdmb3InLCBlbGVtSWQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRm9yIGVhY2ggZXJyb3IgdGFyZ2V0aW5nICRlbCwgc2V0IFtyb2xlPWFsZXJ0XSBpZiBpdCBpcyBub3Qgc2V0LlxuICAgICRlcnJvcnMuZWFjaCgoaSwgbGFiZWwpID0+IHtcbiAgICAgIGNvbnN0ICRsYWJlbCA9ICQobGFiZWwpO1xuICAgICAgaWYgKHR5cGVvZiAkbGFiZWwuYXR0cigncm9sZScpID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgJGxhYmVsLmF0dHIoJ3JvbGUnLCAnYWxlcnQnKTtcbiAgICB9KS5lbmQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIFthcmlhLWxpdmVdIGF0dHJpYnV0ZSB0byB0aGUgZ2l2ZW4gZ2xvYmFsIGZvcm0gZXJyb3IgJGVsLlxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsIC0galF1ZXJ5IG9iamVjdCB0byBhZGQgdGhlIGF0dHJpYnV0ZSB0b1xuICAgKi9cbiAgYWRkR2xvYmFsRXJyb3JBMTF5QXR0cmlidXRlcygkZWwpIHtcbiAgICBpZiAodHlwZW9mICRlbC5hdHRyKCdhcmlhLWxpdmUnKSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAkZWwuYXR0cignYXJpYS1saXZlJywgdGhpcy5vcHRpb25zLmExMXlFcnJvckxldmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgQ1NTIGVycm9yIGNsYXNzZXMgZXRjIGZyb20gYW4gZW50aXJlIHJhZGlvIGJ1dHRvbiBncm91cFxuICAgKiBAcGFyYW0ge1N0cmluZ30gZ3JvdXBOYW1lIC0gQSBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSByYWRpbyBidXR0b24gZ3JvdXBcbiAgICpcbiAgICovXG4gIHJlbW92ZVJhZGlvRXJyb3JDbGFzc2VzKGdyb3VwTmFtZSkge1xuICAgIHZhciAkZWxzID0gdGhpcy4kZWxlbWVudC5maW5kKGA6cmFkaW9bbmFtZT1cIiR7Z3JvdXBOYW1lfVwiXWApO1xuICAgIHZhciAkbGFiZWxzID0gdGhpcy5maW5kUmFkaW9MYWJlbHMoJGVscyk7XG4gICAgdmFyICRmb3JtRXJyb3JzID0gdGhpcy5maW5kRm9ybUVycm9yKCRlbHMpO1xuXG4gICAgaWYgKCRsYWJlbHMubGVuZ3RoKSB7XG4gICAgICAkbGFiZWxzLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5sYWJlbEVycm9yQ2xhc3MpO1xuICAgIH1cblxuICAgIGlmICgkZm9ybUVycm9ycy5sZW5ndGgpIHtcbiAgICAgICRmb3JtRXJyb3JzLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5mb3JtRXJyb3JDbGFzcyk7XG4gICAgfVxuXG4gICAgJGVscy5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaW5wdXRFcnJvckNsYXNzKS5hdHRyKHtcbiAgICAgICdkYXRhLWludmFsaWQnOiBudWxsLFxuICAgICAgJ2FyaWEtaW52YWxpZCc6IG51bGxcbiAgICB9KTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBDU1MgZXJyb3IgY2xhc3NlcyBldGMgZnJvbSBhbiBlbnRpcmUgY2hlY2tib3ggZ3JvdXBcbiAgICogQHBhcmFtIHtTdHJpbmd9IGdyb3VwTmFtZSAtIEEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgY2hlY2tib3ggZ3JvdXBcbiAgICpcbiAgICovXG4gIHJlbW92ZUNoZWNrYm94RXJyb3JDbGFzc2VzKGdyb3VwTmFtZSkge1xuICAgIHZhciAkZWxzID0gdGhpcy4kZWxlbWVudC5maW5kKGA6Y2hlY2tib3hbbmFtZT1cIiR7Z3JvdXBOYW1lfVwiXWApO1xuICAgIHZhciAkbGFiZWxzID0gdGhpcy5maW5kQ2hlY2tib3hMYWJlbHMoJGVscyk7XG4gICAgdmFyICRmb3JtRXJyb3JzID0gdGhpcy5maW5kRm9ybUVycm9yKCRlbHMpO1xuXG4gICAgaWYgKCRsYWJlbHMubGVuZ3RoKSB7XG4gICAgICAkbGFiZWxzLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5sYWJlbEVycm9yQ2xhc3MpO1xuICAgIH1cblxuICAgIGlmICgkZm9ybUVycm9ycy5sZW5ndGgpIHtcbiAgICAgICRmb3JtRXJyb3JzLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5mb3JtRXJyb3JDbGFzcyk7XG4gICAgfVxuXG4gICAgJGVscy5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaW5wdXRFcnJvckNsYXNzKS5hdHRyKHtcbiAgICAgICdkYXRhLWludmFsaWQnOiBudWxsLFxuICAgICAgJ2FyaWEtaW52YWxpZCc6IG51bGxcbiAgICB9KTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgQ1NTIGVycm9yIGNsYXNzIGFzIHNwZWNpZmllZCBieSB0aGUgQWJpZGUgc2V0dGluZ3MgZnJvbSB0aGUgbGFiZWwsIGlucHV0LCBhbmQgdGhlIGZvcm1cbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbCAtIGpRdWVyeSBvYmplY3QgdG8gcmVtb3ZlIHRoZSBjbGFzcyBmcm9tXG4gICAqL1xuICByZW1vdmVFcnJvckNsYXNzZXMoJGVsKSB7XG4gICAgLy8gcmFkaW9zIG5lZWQgdG8gY2xlYXIgYWxsIG9mIHRoZSBlbHNcbiAgICBpZiAoJGVsWzBdLnR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbW92ZVJhZGlvRXJyb3JDbGFzc2VzKCRlbC5hdHRyKCduYW1lJykpO1xuICAgIH1cbiAgICAvLyBjaGVja2JveGVzIG5lZWQgdG8gY2xlYXIgYWxsIG9mIHRoZSBlbHNcbiAgICBlbHNlIGlmICgkZWxbMF0udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlQ2hlY2tib3hFcnJvckNsYXNzZXMoJGVsLmF0dHIoJ25hbWUnKSk7XG4gICAgfVxuXG4gICAgdmFyICRsYWJlbCA9IHRoaXMuZmluZExhYmVsKCRlbCk7XG4gICAgdmFyICRmb3JtRXJyb3IgPSB0aGlzLmZpbmRGb3JtRXJyb3IoJGVsKTtcblxuICAgIGlmICgkbGFiZWwubGVuZ3RoKSB7XG4gICAgICAkbGFiZWwucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmxhYmVsRXJyb3JDbGFzcyk7XG4gICAgfVxuXG4gICAgaWYgKCRmb3JtRXJyb3IubGVuZ3RoKSB7XG4gICAgICAkZm9ybUVycm9yLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5mb3JtRXJyb3JDbGFzcyk7XG4gICAgfVxuXG4gICAgJGVsLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5pbnB1dEVycm9yQ2xhc3MpLmF0dHIoe1xuICAgICAgJ2RhdGEtaW52YWxpZCc6IG51bGwsXG4gICAgICAnYXJpYS1pbnZhbGlkJzogbnVsbFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdvZXMgdGhyb3VnaCBhIGZvcm0gdG8gZmluZCBpbnB1dHMgYW5kIHByb2NlZWRzIHRvIHZhbGlkYXRlIHRoZW0gaW4gd2F5cyBzcGVjaWZpYyB0byB0aGVpciB0eXBlLlxuICAgKiBJZ25vcmVzIGlucHV0cyB3aXRoIGRhdGEtYWJpZGUtaWdub3JlLCB0eXBlPVwiaGlkZGVuXCIgb3IgZGlzYWJsZWQgYXR0cmlidXRlcyBzZXRcbiAgICogQGZpcmVzIEFiaWRlI2ludmFsaWRcbiAgICogQGZpcmVzIEFiaWRlI3ZhbGlkXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byB2YWxpZGF0ZSwgc2hvdWxkIGJlIGFuIEhUTUwgaW5wdXRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGdvb2RUb0dvIC0gSWYgdGhlIGlucHV0IGlzIHZhbGlkIG9yIG5vdC5cbiAgICovXG4gIHZhbGlkYXRlSW5wdXQoJGVsKSB7XG4gICAgdmFyIGNsZWFyUmVxdWlyZSA9IHRoaXMucmVxdWlyZWRDaGVjaygkZWwpLFxuICAgICAgICB2YWxpZGF0b3IgPSAkZWwuYXR0cignZGF0YS12YWxpZGF0b3InKSxcbiAgICAgICAgZmFpbGVkVmFsaWRhdG9ycyA9IFtdLFxuICAgICAgICBtYW5hZ2VFcnJvckNsYXNzZXMgPSB0cnVlO1xuXG4gICAgLy8gc2tpcCB2YWxpZGF0aW9uIGlmIGRpc2FibGVkXG4gICAgaWYgKHRoaXMuX3ZhbGlkYXRpb25Jc0Rpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGRvbid0IHZhbGlkYXRlIGlnbm9yZWQgaW5wdXRzIG9yIGhpZGRlbiBpbnB1dHMgb3IgZGlzYWJsZWQgaW5wdXRzXG4gICAgaWYgKCRlbC5pcygnW2RhdGEtYWJpZGUtaWdub3JlXScpIHx8ICRlbC5pcygnW3R5cGU9XCJoaWRkZW5cIl0nKSB8fCAkZWwuaXMoJ1tkaXNhYmxlZF0nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc3dpdGNoICgkZWxbMF0udHlwZSkge1xuICAgICAgY2FzZSAncmFkaW8nOlxuICAgICAgICB0aGlzLnZhbGlkYXRlUmFkaW8oJGVsLmF0dHIoJ25hbWUnKSkgfHwgZmFpbGVkVmFsaWRhdG9ycy5wdXNoKCdyZXF1aXJlZCcpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICB0aGlzLnZhbGlkYXRlQ2hlY2tib3goJGVsLmF0dHIoJ25hbWUnKSkgfHwgZmFpbGVkVmFsaWRhdG9ycy5wdXNoKCdyZXF1aXJlZCcpO1xuICAgICAgICAvLyB2YWxpZGF0ZUNoZWNrYm94KCkgYWRkcy9yZW1vdmVzIGVycm9yIGNsYXNzZXNcbiAgICAgICAgbWFuYWdlRXJyb3JDbGFzc2VzID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgY2FzZSAnc2VsZWN0LW9uZSc6XG4gICAgICBjYXNlICdzZWxlY3QtbXVsdGlwbGUnOlxuICAgICAgICBjbGVhclJlcXVpcmUgfHwgZmFpbGVkVmFsaWRhdG9ycy5wdXNoKCdyZXF1aXJlZCcpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY2xlYXJSZXF1aXJlIHx8IGZhaWxlZFZhbGlkYXRvcnMucHVzaCgncmVxdWlyZWQnKTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVRleHQoJGVsKSB8fCBmYWlsZWRWYWxpZGF0b3JzLnB1c2goJ3BhdHRlcm4nKTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCByZXF1aXJlZCA9ICRlbC5hdHRyKCdyZXF1aXJlZCcpID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICB2YWxpZGF0b3Iuc3BsaXQoJyAnKS5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9ucy52YWxpZGF0b3JzW3ZdKCRlbCwgcmVxdWlyZWQsICRlbC5wYXJlbnQoKSkgfHwgZmFpbGVkVmFsaWRhdG9ycy5wdXNoKHYpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCRlbC5hdHRyKCdkYXRhLWVxdWFsdG8nKSkge1xuICAgICAgdGhpcy5vcHRpb25zLnZhbGlkYXRvcnMuZXF1YWxUbygkZWwpIHx8IGZhaWxlZFZhbGlkYXRvcnMucHVzaCgnZXF1YWxUbycpO1xuICAgIH1cblxuICAgIHZhciBnb29kVG9HbyA9IGZhaWxlZFZhbGlkYXRvcnMubGVuZ3RoID09PSAwO1xuICAgIHZhciBtZXNzYWdlID0gKGdvb2RUb0dvID8gJ3ZhbGlkJyA6ICdpbnZhbGlkJykgKyAnLnpmLmFiaWRlJztcblxuICAgIGlmIChnb29kVG9Hbykge1xuICAgICAgLy8gUmUtdmFsaWRhdGUgaW5wdXRzIHRoYXQgZGVwZW5kIG9uIHRoaXMgb25lIHdpdGggZXF1YWx0b1xuICAgICAgY29uc3QgZGVwZW5kZW50RWxlbWVudHMgPSB0aGlzLiRlbGVtZW50LmZpbmQoYFtkYXRhLWVxdWFsdG89XCIkeyRlbC5hdHRyKCdpZCcpfVwiXWApO1xuICAgICAgaWYgKGRlcGVuZGVudEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgICAgICBkZXBlbmRlbnRFbGVtZW50cy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpKSB7XG4gICAgICAgICAgICBfdGhpcy52YWxpZGF0ZUlucHV0KCQodGhpcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hbmFnZUVycm9yQ2xhc3Nlcykge1xuICAgICAgaWYgKCFnb29kVG9Hbykge1xuICAgICAgICB0aGlzLmFkZEVycm9yQ2xhc3NlcygkZWwsIGZhaWxlZFZhbGlkYXRvcnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFcnJvckNsYXNzZXMoJGVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBpbnB1dCBpcyBkb25lIGNoZWNraW5nIGZvciB2YWxpZGF0aW9uLiBFdmVudCB0cmlnZ2VyIGlzIGVpdGhlciBgdmFsaWQuemYuYWJpZGVgIG9yIGBpbnZhbGlkLnpmLmFiaWRlYFxuICAgICAqIFRyaWdnZXIgaW5jbHVkZXMgdGhlIERPTSBlbGVtZW50IG9mIHRoZSBpbnB1dC5cbiAgICAgKiBAZXZlbnQgQWJpZGUjdmFsaWRcbiAgICAgKiBAZXZlbnQgQWJpZGUjaW52YWxpZFxuICAgICAqL1xuICAgICRlbC50cmlnZ2VyKG1lc3NhZ2UsIFskZWxdKTtcblxuICAgIHJldHVybiBnb29kVG9HbztcbiAgfVxuXG4gIC8qKlxuICAgKiBHb2VzIHRocm91Z2ggYSBmb3JtIGFuZCBpZiB0aGVyZSBhcmUgYW55IGludmFsaWQgaW5wdXRzLCBpdCB3aWxsIGRpc3BsYXkgdGhlIGZvcm0gZXJyb3IgZWxlbWVudFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gbm9FcnJvciAtIHRydWUgaWYgbm8gZXJyb3JzIHdlcmUgZGV0ZWN0ZWQuLi5cbiAgICogQGZpcmVzIEFiaWRlI2Zvcm12YWxpZFxuICAgKiBAZmlyZXMgQWJpZGUjZm9ybWludmFsaWRcbiAgICovXG4gIHZhbGlkYXRlRm9ybSgpIHtcbiAgICB2YXIgYWNjID0gW107XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgY2hlY2tib3hHcm91cE5hbWU7XG5cbiAgICAvLyBSZW1lbWJlciBmaXJzdCBmb3JtIHN1Ym1pc3Npb24gdG8gcHJldmVudCBzcGVjaWZpYyBjaGVja2JveCB2YWxpZGF0aW9uIChtb3JlIHRoYW4gb25lIHJlcXVpcmVkKSB1bnRpbCBmb3JtIGdvdCBpbml0aWFsbHkgc3VibWl0dGVkXG4gICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBza2lwIHZhbGlkYXRpb24gaWYgZGlzYWJsZWRcbiAgICBpZiAodGhpcy5fdmFsaWRhdGlvbklzRGlzYWJsZWQoKSkge1xuICAgICAgdGhpcy5mb3Jtbm92YWxpZGF0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLiRpbnB1dHMuZWFjaChmdW5jdGlvbigpIHtcblxuICAgICAgLy8gT25seSB1c2Ugb25lIGNoZWNrYm94IHBlciBncm91cCBzaW5jZSB2YWxpZGF0ZUNoZWNrYm94KCkgaXRlcmF0ZXMgb3ZlciBhbGwgYXNzb2NpYXRlZCBjaGVja2JveGVzXG4gICAgICBpZiAoJCh0aGlzKVswXS50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ25hbWUnKSA9PT0gY2hlY2tib3hHcm91cE5hbWUpIHJldHVybiB0cnVlO1xuICAgICAgICBjaGVja2JveEdyb3VwTmFtZSA9ICQodGhpcykuYXR0cignbmFtZScpO1xuICAgICAgfVxuXG4gICAgICBhY2MucHVzaChfdGhpcy52YWxpZGF0ZUlucHV0KCQodGhpcykpKTtcbiAgICB9KTtcblxuICAgIHZhciBub0Vycm9yID0gYWNjLmluZGV4T2YoZmFsc2UpID09PSAtMTtcblxuICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnW2RhdGEtYWJpZGUtZXJyb3JdJykuZWFjaCgoaSwgZWxlbSkgPT4ge1xuICAgICAgY29uc3QgJGVsZW0gPSAkKGVsZW0pO1xuICAgICAgLy8gRW5zdXJlIGExMXkgYXR0cmlidXRlcyBhcmUgc2V0XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmExMXlBdHRyaWJ1dGVzKSB0aGlzLmFkZEdsb2JhbEVycm9yQTExeUF0dHJpYnV0ZXMoJGVsZW0pO1xuICAgICAgLy8gU2hvdyBvciBoaWRlIHRoZSBlcnJvclxuICAgICAgJGVsZW0uY3NzKCdkaXNwbGF5JywgKG5vRXJyb3IgPyAnbm9uZScgOiAnYmxvY2snKSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBmb3JtIGlzIGZpbmlzaGVkIHZhbGlkYXRpbmcuIEV2ZW50IHRyaWdnZXIgaXMgZWl0aGVyIGBmb3JtdmFsaWQuemYuYWJpZGVgIG9yIGBmb3JtaW52YWxpZC56Zi5hYmlkZWAuXG4gICAgICogVHJpZ2dlciBpbmNsdWRlcyB0aGUgZWxlbWVudCBvZiB0aGUgZm9ybS5cbiAgICAgKiBAZXZlbnQgQWJpZGUjZm9ybXZhbGlkXG4gICAgICogQGV2ZW50IEFiaWRlI2Zvcm1pbnZhbGlkXG4gICAgICovXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKChub0Vycm9yID8gJ2Zvcm12YWxpZCcgOiAnZm9ybWludmFsaWQnKSArICcuemYuYWJpZGUnLCBbdGhpcy4kZWxlbWVudF0pO1xuXG4gICAgcmV0dXJuIG5vRXJyb3I7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIGEgbm90IGEgdGV4dCBpbnB1dCBpcyB2YWxpZCBiYXNlZCBvbiB0aGUgcGF0dGVybiBzcGVjaWZpZWQgaW4gdGhlIGF0dHJpYnV0ZS4gSWYgbm8gbWF0Y2hpbmcgcGF0dGVybiBpcyBmb3VuZCwgcmV0dXJucyB0cnVlLlxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsIC0galF1ZXJ5IG9iamVjdCB0byB2YWxpZGF0ZSwgc2hvdWxkIGJlIGEgdGV4dCBpbnB1dCBIVE1MIGVsZW1lbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdHRlcm4gLSBzdHJpbmcgdmFsdWUgb2Ygb25lIG9mIHRoZSBSZWdFeCBwYXR0ZXJucyBpbiBBYmlkZS5vcHRpb25zLnBhdHRlcm5zXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBCb29sZWFuIHZhbHVlIGRlcGVuZHMgb24gd2hldGhlciBvciBub3QgdGhlIGlucHV0IHZhbHVlIG1hdGNoZXMgdGhlIHBhdHRlcm4gc3BlY2lmaWVkXG4gICAqL1xuICB2YWxpZGF0ZVRleHQoJGVsLCBwYXR0ZXJuKSB7XG4gICAgLy8gQSBwYXR0ZXJuIGNhbiBiZSBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiwgb3IgaXQgd2lsbCBiZSBpbmZlcmVkIGZyb20gdGhlIGlucHV0J3MgXCJwYXR0ZXJuXCIgYXR0cmlidXRlLCBvciBpdCdzIFwidHlwZVwiIGF0dHJpYnV0ZVxuICAgIHBhdHRlcm4gPSAocGF0dGVybiB8fCAkZWwuYXR0cignZGF0YS1wYXR0ZXJuJykgfHwgJGVsLmF0dHIoJ3BhdHRlcm4nKSB8fCAkZWwuYXR0cigndHlwZScpKTtcbiAgICB2YXIgaW5wdXRUZXh0ID0gJGVsLnZhbCgpO1xuICAgIHZhciB2YWxpZCA9IHRydWU7XG5cbiAgICBpZiAoaW5wdXRUZXh0Lmxlbmd0aCkge1xuICAgICAgLy8gSWYgdGhlIHBhdHRlcm4gYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50IGlzIGluIEFiaWRlJ3MgbGlzdCBvZiBwYXR0ZXJucywgdGhlbiB0ZXN0IHRoYXQgcmVnZXhwXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBhdHRlcm5zLmhhc093blByb3BlcnR5KHBhdHRlcm4pKSB7XG4gICAgICAgIHZhbGlkID0gdGhpcy5vcHRpb25zLnBhdHRlcm5zW3BhdHRlcm5dLnRlc3QoaW5wdXRUZXh0KTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZSBwYXR0ZXJuIG5hbWUgaXNuJ3QgYWxzbyB0aGUgdHlwZSBhdHRyaWJ1dGUgb2YgdGhlIGZpZWxkLCB0aGVuIHRlc3QgaXQgYXMgYSByZWdleHBcbiAgICAgIGVsc2UgaWYgKHBhdHRlcm4gIT09ICRlbC5hdHRyKCd0eXBlJykpIHtcbiAgICAgICAgdmFsaWQgPSBuZXcgUmVnRXhwKHBhdHRlcm4pLnRlc3QoaW5wdXRUZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWQ7XG4gICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBvciBhIG5vdCBhIHJhZGlvIGlucHV0IGlzIHZhbGlkIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IGl0IGlzIHJlcXVpcmVkIGFuZCBzZWxlY3RlZC4gQWx0aG91Z2ggdGhlIGZ1bmN0aW9uIHRhcmdldHMgYSBzaW5nbGUgYDxpbnB1dD5gLCBpdCB2YWxpZGF0ZXMgYnkgY2hlY2tpbmcgdGhlIGByZXF1aXJlZGAgYW5kIGBjaGVja2VkYCBwcm9wZXJ0aWVzIG9mIGFsbCByYWRpbyBidXR0b25zIGluIGl0cyBncm91cC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGdyb3VwTmFtZSAtIEEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgcmFkaW8gYnV0dG9uIGdyb3VwXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBCb29sZWFuIHZhbHVlIGRlcGVuZHMgb24gd2hldGhlciBvciBub3QgYXQgbGVhc3Qgb25lIHJhZGlvIGlucHV0IGhhcyBiZWVuIHNlbGVjdGVkIChpZiBpdCdzIHJlcXVpcmVkKVxuICAgKi9cbiAgdmFsaWRhdGVSYWRpbyhncm91cE5hbWUpIHtcbiAgICAvLyBJZiBhdCBsZWFzdCBvbmUgcmFkaW8gaW4gdGhlIGdyb3VwIGhhcyB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUsIHRoZSBncm91cCBpcyBjb25zaWRlcmVkIHJlcXVpcmVkXG4gICAgLy8gUGVyIFczQyBzcGVjLCBhbGwgcmFkaW8gYnV0dG9ucyBpbiBhIGdyb3VwIHNob3VsZCBoYXZlIGByZXF1aXJlZGAsIGJ1dCB3ZSdyZSBiZWluZyBuaWNlXG4gICAgdmFyICRncm91cCA9IHRoaXMuJGVsZW1lbnQuZmluZChgOnJhZGlvW25hbWU9XCIke2dyb3VwTmFtZX1cIl1gKTtcbiAgICB2YXIgdmFsaWQgPSBmYWxzZSwgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8vIEZvciB0aGUgZ3JvdXAgdG8gYmUgcmVxdWlyZWQsIGF0IGxlYXN0IG9uZSByYWRpbyBuZWVkcyB0byBiZSByZXF1aXJlZFxuICAgICRncm91cC5lYWNoKChpLCBlKSA9PiB7XG4gICAgICBpZiAoJChlKS5hdHRyKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgIHJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXJlcXVpcmVkKSB2YWxpZD10cnVlO1xuXG4gICAgaWYgKCF2YWxpZCkge1xuICAgICAgLy8gRm9yIHRoZSBncm91cCB0byBiZSB2YWxpZCwgYXQgbGVhc3Qgb25lIHJhZGlvIG5lZWRzIHRvIGJlIGNoZWNrZWRcbiAgICAgICRncm91cC5lYWNoKChpLCBlKSA9PiB7XG4gICAgICAgIGlmICgkKGUpLnByb3AoJ2NoZWNrZWQnKSkge1xuICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBvciBhIG5vdCBhIGNoZWNrYm94IGlucHV0IGlzIHZhbGlkIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IGl0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkLiBBbHRob3VnaCB0aGUgZnVuY3Rpb24gdGFyZ2V0cyBhIHNpbmdsZSBgPGlucHV0PmAsIGl0IHZhbGlkYXRlcyBieSBjaGVja2luZyB0aGUgYHJlcXVpcmVkYCBhbmQgYGNoZWNrZWRgIHByb3BlcnRpZXMgb2YgYWxsIGNoZWNrYm94ZXMgaW4gaXRzIGdyb3VwLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZ3JvdXBOYW1lIC0gQSBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBjaGVja2JveCBncm91cFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gQm9vbGVhbiB2YWx1ZSBkZXBlbmRzIG9uIHdoZXRoZXIgb3Igbm90IGF0IGxlYXN0IG9uZSBjaGVja2JveCBpbnB1dCBoYXMgYmVlbiBjaGVja2VkIChpZiBpdCdzIHJlcXVpcmVkKVxuICAgKi9cbiAgdmFsaWRhdGVDaGVja2JveChncm91cE5hbWUpIHtcbiAgICAvLyBJZiBhdCBsZWFzdCBvbmUgY2hlY2tib3ggaW4gdGhlIGdyb3VwIGhhcyB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUsIHRoZSBncm91cCBpcyBjb25zaWRlcmVkIHJlcXVpcmVkXG4gICAgLy8gUGVyIFczQyBzcGVjLCBhbGwgY2hlY2tib3hlcyBpbiBhIGdyb3VwIHNob3VsZCBoYXZlIGByZXF1aXJlZGAsIGJ1dCB3ZSdyZSBiZWluZyBuaWNlXG4gICAgdmFyICRncm91cCA9IHRoaXMuJGVsZW1lbnQuZmluZChgOmNoZWNrYm94W25hbWU9XCIke2dyb3VwTmFtZX1cIl1gKTtcbiAgICB2YXIgdmFsaWQgPSBmYWxzZSwgcmVxdWlyZWQgPSBmYWxzZSwgbWluUmVxdWlyZWQgPSAxLCBjaGVja2VkID0gMDtcblxuICAgIC8vIEZvciB0aGUgZ3JvdXAgdG8gYmUgcmVxdWlyZWQsIGF0IGxlYXN0IG9uZSBjaGVja2JveCBuZWVkcyB0byBiZSByZXF1aXJlZFxuICAgICRncm91cC5lYWNoKChpLCBlKSA9PiB7XG4gICAgICBpZiAoJChlKS5hdHRyKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgIHJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXJlcXVpcmVkKSB2YWxpZD10cnVlO1xuXG4gICAgaWYgKCF2YWxpZCkge1xuICAgICAgLy8gQ291bnQgY2hlY2tlZCBjaGVja2JveGVzIHdpdGhpbiB0aGUgZ3JvdXBcbiAgICAgIC8vIFVzZSBkYXRhLW1pbi1yZXF1aXJlZCBpZiBhdmFpbGFibGUgKGRlZmF1bHQ6IDEpXG4gICAgICAkZ3JvdXAuZWFjaCgoaSwgZSkgPT4ge1xuICAgICAgICBpZiAoJChlKS5wcm9wKCdjaGVja2VkJykpIHtcbiAgICAgICAgICBjaGVja2VkKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiAkKGUpLmF0dHIoJ2RhdGEtbWluLXJlcXVpcmVkJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbWluUmVxdWlyZWQgPSBwYXJzZUludCgkKGUpLmF0dHIoJ2RhdGEtbWluLXJlcXVpcmVkJyksIDEwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEZvciB0aGUgZ3JvdXAgdG8gYmUgdmFsaWQsIHRoZSBtaW5SZXF1aXJlZCBhbW91bnQgb2YgY2hlY2tib3hlcyBoYXZlIHRvIGJlIGNoZWNrZWRcbiAgICAgIGlmIChjaGVja2VkID49IG1pblJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYgbW9yZSB0aGFuIDEgY2hlY2tib3ggaGF2ZSB0byBiZSBjaGVja2VkIEFORCBpZiB0aGUgZm9ybSBoYXNuJ3QgZ290IHN1Ym1pdHRlZCB5ZXQgKG90aGVyd2lzZSBpdCB3aWxsIGFscmVhZHkgc2hvdyBhbiBlcnJvciBkdXJpbmcgdGhlIGZpcnN0IGZpbGwgaW4pXG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQgIT09IHRydWUgJiYgbWluUmVxdWlyZWQgPiAxKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBSZWZyZXNoIGVycm9yIGNsYXNzIGZvciBhbGwgaW5wdXRcbiAgICAkZ3JvdXAuZWFjaCgoaSwgZSkgPT4ge1xuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLmFkZEVycm9yQ2xhc3NlcygkKGUpLCBbJ3JlcXVpcmVkJ10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFcnJvckNsYXNzZXMoJChlKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIHNlbGVjdGVkIGlucHV0IHBhc3NlcyBhIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uLiBNdWx0aXBsZSB2YWxpZGF0aW9ucyBjYW4gYmUgdXNlZCwgaWYgcGFzc2VkIHRvIHRoZSBlbGVtZW50IHdpdGggYGRhdGEtdmFsaWRhdG9yPVwiZm9vIGJhciBiYXpcImAgaW4gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdGVkLlxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsIC0galF1ZXJ5IGlucHV0IGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWxpZGF0b3JzIC0gYSBzdHJpbmcgb2YgZnVuY3Rpb24gbmFtZXMgbWF0Y2hpbmcgZnVuY3Rpb25zIGluIHRoZSBBYmlkZS5vcHRpb25zLnZhbGlkYXRvcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlcXVpcmVkIC0gc2VsZiBleHBsYW5hdG9yeT9cbiAgICogQHJldHVybnMge0Jvb2xlYW59IC0gdHJ1ZSBpZiB2YWxpZGF0aW9ucyBwYXNzZWQuXG4gICAqL1xuICBtYXRjaFZhbGlkYXRpb24oJGVsLCB2YWxpZGF0b3JzLCByZXF1aXJlZCkge1xuICAgIHJlcXVpcmVkID0gcmVxdWlyZWQgPyB0cnVlIDogZmFsc2U7XG5cbiAgICB2YXIgY2xlYXIgPSB2YWxpZGF0b3JzLnNwbGl0KCcgJykubWFwKCh2KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZhbGlkYXRvcnNbdl0oJGVsLCByZXF1aXJlZCwgJGVsLnBhcmVudCgpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY2xlYXIuaW5kZXhPZihmYWxzZSkgPT09IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBmb3JtIGlucHV0cyBhbmQgc3R5bGVzXG4gICAqIEBmaXJlcyBBYmlkZSNmb3JtcmVzZXRcbiAgICovXG4gIHJlc2V0Rm9ybSgpIHtcbiAgICB2YXIgJGZvcm0gPSB0aGlzLiRlbGVtZW50LFxuICAgICAgICBvcHRzID0gdGhpcy5vcHRpb25zO1xuXG4gICAgJChgLiR7b3B0cy5sYWJlbEVycm9yQ2xhc3N9YCwgJGZvcm0pLm5vdCgnc21hbGwnKS5yZW1vdmVDbGFzcyhvcHRzLmxhYmVsRXJyb3JDbGFzcyk7XG4gICAgJChgLiR7b3B0cy5pbnB1dEVycm9yQ2xhc3N9YCwgJGZvcm0pLm5vdCgnc21hbGwnKS5yZW1vdmVDbGFzcyhvcHRzLmlucHV0RXJyb3JDbGFzcyk7XG4gICAgJChgJHtvcHRzLmZvcm1FcnJvclNlbGVjdG9yfS4ke29wdHMuZm9ybUVycm9yQ2xhc3N9YCkucmVtb3ZlQ2xhc3Mob3B0cy5mb3JtRXJyb3JDbGFzcyk7XG4gICAgJGZvcm0uZmluZCgnW2RhdGEtYWJpZGUtZXJyb3JdJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAkKCc6aW5wdXQnLCAkZm9ybSkubm90KCc6YnV0dG9uLCA6c3VibWl0LCA6cmVzZXQsIDpoaWRkZW4sIDpyYWRpbywgOmNoZWNrYm94LCBbZGF0YS1hYmlkZS1pZ25vcmVdJykudmFsKCcnKS5hdHRyKHtcbiAgICAgICdkYXRhLWludmFsaWQnOiBudWxsLFxuICAgICAgJ2FyaWEtaW52YWxpZCc6IG51bGxcbiAgICB9KTtcbiAgICAkKCc6aW5wdXQ6cmFkaW8nLCAkZm9ybSkubm90KCdbZGF0YS1hYmlkZS1pZ25vcmVdJykucHJvcCgnY2hlY2tlZCcsZmFsc2UpLmF0dHIoe1xuICAgICAgJ2RhdGEtaW52YWxpZCc6IG51bGwsXG4gICAgICAnYXJpYS1pbnZhbGlkJzogbnVsbFxuICAgIH0pO1xuICAgICQoJzppbnB1dDpjaGVja2JveCcsICRmb3JtKS5ub3QoJ1tkYXRhLWFiaWRlLWlnbm9yZV0nKS5wcm9wKCdjaGVja2VkJyxmYWxzZSkuYXR0cih7XG4gICAgICAnZGF0YS1pbnZhbGlkJzogbnVsbCxcbiAgICAgICdhcmlhLWludmFsaWQnOiBudWxsXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgZm9ybSBoYXMgYmVlbiByZXNldC5cbiAgICAgKiBAZXZlbnQgQWJpZGUjZm9ybXJlc2V0XG4gICAgICovXG4gICAgJGZvcm0udHJpZ2dlcignZm9ybXJlc2V0LnpmLmFiaWRlJywgWyRmb3JtXSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgYW4gaW5zdGFuY2Ugb2YgQWJpZGUuXG4gICAqIFJlbW92ZXMgZXJyb3Igc3R5bGVzIGFuZCBjbGFzc2VzIGZyb20gZWxlbWVudHMsIHdpdGhvdXQgcmVzZXR0aW5nIHRoZWlyIHZhbHVlcy5cbiAgICovXG4gIF9kZXN0cm95KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdGhpcy4kZWxlbWVudFxuICAgICAgLm9mZignLmFiaWRlJylcbiAgICAgIC5maW5kKCdbZGF0YS1hYmlkZS1lcnJvcl0nKVxuICAgICAgICAuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcblxuICAgIHRoaXMuJGlucHV0c1xuICAgICAgLm9mZignLmFiaWRlJylcbiAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICBfdGhpcy5yZW1vdmVFcnJvckNsYXNzZXMoJCh0aGlzKSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuJHN1Ym1pdHNcbiAgICAgIC5vZmYoJy5hYmlkZScpO1xuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBzZXR0aW5ncyBmb3IgcGx1Z2luXG4gKi9cbkFiaWRlLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgZXZlbnQgdG8gdmFsaWRhdGUgaW5wdXRzLiBDaGVja2JveGVzIGFuZCByYWRpb3MgdmFsaWRhdGUgaW1tZWRpYXRlbHkuXG4gICAqIFJlbW92ZSBvciBjaGFuZ2UgdGhpcyB2YWx1ZSBmb3IgbWFudWFsIHZhbGlkYXRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUgez9zdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdmaWVsZENoYW5nZSdcbiAgICovXG4gIHZhbGlkYXRlT246ICdmaWVsZENoYW5nZScsXG5cbiAgLyoqXG4gICAqIENsYXNzIHRvIGJlIGFwcGxpZWQgdG8gaW5wdXQgbGFiZWxzIG9uIGZhaWxlZCB2YWxpZGF0aW9uLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdpcy1pbnZhbGlkLWxhYmVsJ1xuICAgKi9cbiAgbGFiZWxFcnJvckNsYXNzOiAnaXMtaW52YWxpZC1sYWJlbCcsXG5cbiAgLyoqXG4gICAqIENsYXNzIHRvIGJlIGFwcGxpZWQgdG8gaW5wdXRzIG9uIGZhaWxlZCB2YWxpZGF0aW9uLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdpcy1pbnZhbGlkLWlucHV0J1xuICAgKi9cbiAgaW5wdXRFcnJvckNsYXNzOiAnaXMtaW52YWxpZC1pbnB1dCcsXG5cbiAgLyoqXG4gICAqIENsYXNzIHNlbGVjdG9yIHRvIHVzZSB0byB0YXJnZXQgRm9ybSBFcnJvcnMgZm9yIHNob3cvaGlkZS5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnLmZvcm0tZXJyb3InXG4gICAqL1xuICBmb3JtRXJyb3JTZWxlY3RvcjogJy5mb3JtLWVycm9yJyxcblxuICAvKipcbiAgICogQ2xhc3MgYWRkZWQgdG8gRm9ybSBFcnJvcnMgb24gZmFpbGVkIHZhbGlkYXRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2lzLXZpc2libGUnXG4gICAqL1xuICBmb3JtRXJyb3JDbGFzczogJ2lzLXZpc2libGUnLFxuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBhdXRvbWF0aWNhbGx5IGluc2VydCB3aGVuIHBvc3NpYmxlOlxuICAgKiAtIGBbYXJpYS1kZXNjcmliZWRieV1gIG9uIGZpZWxkc1xuICAgKiAtIGBbcm9sZT1hbGVydF1gIG9uIGZvcm0gZXJyb3JzIGFuZCBgW2Zvcl1gIG9uIGZvcm0gZXJyb3IgbGFiZWxzXG4gICAqIC0gYFthcmlhLWxpdmVdYCBvbiBnbG9iYWwgZXJyb3JzIGBbZGF0YS1hYmlkZS1lcnJvcl1gIChzZWUgb3B0aW9uIGBhMTF5RXJyb3JMZXZlbGApLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhMTF5QXR0cmlidXRlczogdHJ1ZSxcblxuICAvKipcbiAgICogW2FyaWEtbGl2ZV0gYXR0cmlidXRlIHZhbHVlIHRvIGJlIGFwcGxpZWQgb24gZ2xvYmFsIGVycm9ycyBgW2RhdGEtYWJpZGUtZXJyb3JdYC5cbiAgICogT3B0aW9ucyBhcmU6ICdhc3NlcnRpdmUnLCAncG9saXRlJyBhbmQgJ29mZicvbnVsbFxuICAgKiBAb3B0aW9uXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQWNjZXNzaWJpbGl0eS9BUklBL0FSSUFfTGl2ZV9SZWdpb25zXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdhc3NlcnRpdmUnXG4gICAqL1xuICBhMTF5RXJyb3JMZXZlbDogJ2Fzc2VydGl2ZScsXG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIHZhbGlkYXRlIHRleHQgaW5wdXRzIG9uIGFueSB2YWx1ZSBjaGFuZ2UuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBsaXZlVmFsaWRhdGU6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byB2YWxpZGF0ZSBpbnB1dHMgb24gYmx1ci5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHZhbGlkYXRlT25CbHVyOiBmYWxzZSxcblxuICBwYXR0ZXJuczoge1xuICAgIGFscGhhIDogL15bYS16QS1aXSskLyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG4gICAgYWxwaGFfbnVtZXJpYyA6IC9eW2EtekEtWjAtOV0rJC8sXG4gICAgaW50ZWdlciA6IC9eWy0rXT9cXGQrJC8sXG4gICAgbnVtYmVyIDogL15bLStdP1xcZCooPzpbXFwuXFwsXVxcZCspPyQvLFxuXG4gICAgLy8gYW1leCwgdmlzYSwgZGluZXJzXG4gICAgY2FyZCA6IC9eKD86NFswLTldezEyfSg/OlswLTldezN9KT98NVsxLTVdWzAtOV17MTR9fCg/OjIyMlsxLTldfDJbMy02XVswLTldezJ9fDI3WzAtMV1bMC05XXwyNzIwKVswLTldezEyfXw2KD86MDExfDVbMC05XVswLTldKVswLTldezEyfXwzWzQ3XVswLTldezEzfXwzKD86MFswLTVdfFs2OF1bMC05XSlbMC05XXsxMX18KD86MjEzMXwxODAwfDM1XFxkezN9KVxcZHsxMX0pJC8sXG4gICAgY3Z2IDogL14oWzAtOV0pezMsNH0kLyxcblxuICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3N0YXRlcy1vZi10aGUtdHlwZS1hdHRyaWJ1dGUuaHRtbCN2YWxpZC1lLW1haWwtYWRkcmVzc1xuICAgIGVtYWlsIDogL15bYS16QS1aMC05LiEjJCUmJyorXFwvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlxcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrJC8sXG5cbiAgICAvLyBGcm9tIENvbW1vblJlZ2V4SlMgKEB0YWx5c3Nvbm9jKVxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YWx5c3Nvbm9jL0NvbW1vblJlZ2V4SlMvYmxvYi9lMjkwMWI5ZjU3MjIyYmMxNDA2OWRjOGYwNTk4ZDVmNDEyNTU1NDExL2xpYi9jb21tb25yZWdleC5qcyNMNzZcbiAgICAvLyBGb3IgbW9yZSByZXN0cmljdGl2ZSBVUkwgUmVnZXhzLCBzZWUgaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL2RlbW8vdXJsLXJlZ2V4LlxuICAgIHVybDogL14oKD86KGh0dHBzP3xmdHBzP3xmaWxlfHNzaHxzZnRwKTpcXC9cXC98d3d3XFxkezAsM31bLl18W2EtejAtOS5cXC1dK1suXVthLXpdezIsNH1cXC8pKD86W15cXHMoKTw+XSt8XFwoKD86W15cXHMoKTw+XSt8KD86XFwoW15cXHMoKTw+XStcXCkpKSpcXCkpKyg/OlxcKCg/OlteXFxzKCk8Pl0rfCg/OlxcKFteXFxzKCk8Pl0rXFwpKSkqXFwpfFteXFxzYCEoKVxcW1xcXXt9OzpcXCdcIi4sPD4/XFx4YWJcXHhiYlxcdTIwMWNcXHUyMDFkXFx1MjAxOFxcdTIwMTldKSkkLyxcblxuICAgIC8vIGFiYy5kZVxuICAgIGRvbWFpbiA6IC9eKFthLXpBLVowLTldKFthLXpBLVowLTlcXC1dezAsNjF9W2EtekEtWjAtOV0pP1xcLikrW2EtekEtWl17Miw4fSQvLFxuXG4gICAgZGF0ZXRpbWUgOiAvXihbMC0yXVswLTldezN9KVxcLShbMC0xXVswLTldKVxcLShbMC0zXVswLTldKVQoWzAtNV1bMC05XSlcXDooWzAtNV1bMC05XSlcXDooWzAtNV1bMC05XSkoWnwoW1xcLVxcK10oWzAtMV1bMC05XSlcXDowMCkpJC8sXG4gICAgLy8gWVlZWS1NTS1ERFxuICAgIGRhdGUgOiAvKD86MTl8MjApWzAtOV17Mn0tKD86KD86MFsxLTldfDFbMC0yXSktKD86MFsxLTldfDFbMC05XXwyWzAtOV0pfCg/Oig/ITAyKSg/OjBbMS05XXwxWzAtMl0pLSg/OjMwKSl8KD86KD86MFsxMzU3OF18MVswMl0pLTMxKSkkLyxcbiAgICAvLyBISDpNTTpTU1xuICAgIHRpbWUgOiAvXigwWzAtOV18MVswLTldfDJbMC0zXSkoOlswLTVdWzAtOV0pezJ9JC8sXG4gICAgZGF0ZUlTTyA6IC9eXFxkezR9W1xcL1xcLV1cXGR7MSwyfVtcXC9cXC1dXFxkezEsMn0kLyxcbiAgICAvLyBNTS9ERC9ZWVlZXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuICAgIG1vbnRoX2RheV95ZWFyIDogL14oMFsxLTldfDFbMDEyXSlbLSBcXC8uXSgwWzEtOV18WzEyXVswLTldfDNbMDFdKVstIFxcLy5dXFxkezR9JC8sXG4gICAgLy8gREQvTU0vWVlZWVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbiAgICBkYXlfbW9udGhfeWVhciA6IC9eKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gXFwvLl0oMFsxLTldfDFbMDEyXSlbLSBcXC8uXVxcZHs0fSQvLFxuXG4gICAgLy8gI0ZGRiBvciAjRkZGRkZGXG4gICAgY29sb3IgOiAvXiM/KFthLWZBLUYwLTldezZ9fFthLWZBLUYwLTldezN9KSQvLFxuXG4gICAgLy8gRG9tYWluIHx8IFVSTFxuICAgIHdlYnNpdGU6IHtcbiAgICAgIHRlc3Q6ICh0ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBBYmlkZS5kZWZhdWx0cy5wYXR0ZXJucy5kb21haW4udGVzdCh0ZXh0KSB8fCBBYmlkZS5kZWZhdWx0cy5wYXR0ZXJucy51cmwudGVzdCh0ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHZhbGlkYXRpb24gZnVuY3Rpb25zIHRvIGJlIHVzZWQuIGBlcXVhbFRvYCBiZWluZyB0aGUgb25seSBkZWZhdWx0IGluY2x1ZGVkIGZ1bmN0aW9uLlxuICAgKiBGdW5jdGlvbnMgc2hvdWxkIHJldHVybiBvbmx5IGEgYm9vbGVhbiBpZiB0aGUgaW5wdXQgaXMgdmFsaWQgb3Igbm90LiBGdW5jdGlvbnMgYXJlIGdpdmVuIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOlxuICAgKiBlbCA6IFRoZSBqUXVlcnkgZWxlbWVudCB0byB2YWxpZGF0ZS5cbiAgICogQG9wdGlvblxuICAgKi9cbiAgdmFsaWRhdG9yczoge1xuICAgIGVxdWFsVG86IGZ1bmN0aW9uIChlbCkge1xuICAgICAgcmV0dXJuICQoYCMke2VsLmF0dHIoJ2RhdGEtZXF1YWx0bycpfWApLnZhbCgpID09PSBlbC52YWwoKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQWNjb3JkaW9uIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5hY2NvcmRpb25cbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqL1xuXG5jbGFzcyBBY2NvcmRpb24gZXh0ZW5kcyBQbHVnaW4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBhY2NvcmRpb24uXG4gICAqIEBjbGFzc1xuICAgKiBAbmFtZSBBY2NvcmRpb25cbiAgICogQGZpcmVzIEFjY29yZGlvbiNpbml0XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYW4gYWNjb3JkaW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGEgcGxhaW4gb2JqZWN0IHdpdGggc2V0dGluZ3MgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgb3B0aW9ucy5cbiAgICovXG4gIF9zZXR1cChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIEFjY29yZGlvbi5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5jbGFzc05hbWUgPSAnQWNjb3JkaW9uJzsgLy8gaWU5IGJhY2sgY29tcGF0XG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgS2V5Ym9hcmQucmVnaXN0ZXIoJ0FjY29yZGlvbicsIHtcbiAgICAgICdFTlRFUic6ICd0b2dnbGUnLFxuICAgICAgJ1NQQUNFJzogJ3RvZ2dsZScsXG4gICAgICAnQVJST1dfRE9XTic6ICduZXh0JyxcbiAgICAgICdBUlJPV19VUCc6ICdwcmV2aW91cycsXG4gICAgICAnSE9NRSc6ICdmaXJzdCcsXG4gICAgICAnRU5EJzogJ2xhc3QnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBhY2NvcmRpb24gYnkgYW5pbWF0aW5nIHRoZSBwcmVzZXQgYWN0aXZlIHBhbmUocykuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB0aGlzLl9pc0luaXRpYWxpemluZyA9IHRydWU7XG5cbiAgICB0aGlzLiR0YWJzID0gdGhpcy4kZWxlbWVudC5jaGlsZHJlbignW2RhdGEtYWNjb3JkaW9uLWl0ZW1dJyk7XG5cblxuICAgIHRoaXMuJHRhYnMuZWFjaChmdW5jdGlvbihpZHgsIGVsKSB7XG4gICAgICB2YXIgJGVsID0gJChlbCksXG4gICAgICAgICAgJGNvbnRlbnQgPSAkZWwuY2hpbGRyZW4oJ1tkYXRhLXRhYi1jb250ZW50XScpLFxuICAgICAgICAgIGlkID0gJGNvbnRlbnRbMF0uaWQgfHwgR2V0WW9EaWdpdHMoNiwgJ2FjY29yZGlvbicpLFxuICAgICAgICAgIGxpbmtJZCA9IChlbC5pZCkgPyBgJHtlbC5pZH0tbGFiZWxgIDogYCR7aWR9LWxhYmVsYDtcblxuICAgICAgJGVsLmZpbmQoJ2E6Zmlyc3QnKS5hdHRyKHtcbiAgICAgICAgJ2FyaWEtY29udHJvbHMnOiBpZCxcbiAgICAgICAgJ2lkJzogbGlua0lkLFxuICAgICAgICAnYXJpYS1leHBhbmRlZCc6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgJGNvbnRlbnQuYXR0cih7J3JvbGUnOiAncmVnaW9uJywgJ2FyaWEtbGFiZWxsZWRieSc6IGxpbmtJZCwgJ2FyaWEtaGlkZGVuJzogdHJ1ZSwgJ2lkJzogaWR9KTtcbiAgICB9KTtcblxuICAgIHZhciAkaW5pdEFjdGl2ZSA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmlzLWFjdGl2ZScpLmNoaWxkcmVuKCdbZGF0YS10YWItY29udGVudF0nKTtcbiAgICBpZiAoJGluaXRBY3RpdmUubGVuZ3RoKSB7XG4gICAgICAvLyBTYXZlIHVwIHRoZSBpbml0aWFsIGhhc2ggdG8gcmV0dXJuIHRvIGl0IGxhdGVyIHdoZW4gZ29pbmcgYmFjayBpbiBoaXN0b3J5XG4gICAgICB0aGlzLl9pbml0aWFsQW5jaG9yID0gJGluaXRBY3RpdmUucHJldignYScpLmF0dHIoJ2hyZWYnKTtcbiAgICAgIHRoaXMuX29wZW5TaW5nbGVUYWIoJGluaXRBY3RpdmUpO1xuICAgIH1cblxuICAgIHRoaXMuX2NoZWNrRGVlcExpbmsgPSAoKSA9PiB7XG4gICAgICB2YXIgYW5jaG9yID0gd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cbiAgICAgIGlmICghYW5jaG9yLmxlbmd0aCkge1xuICAgICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwgaW5pdGlhbGl6aW5nIGFuZCB0aGVyZSBpcyBubyBhbmNob3IsIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkb1xuICAgICAgICBpZiAodGhpcy5faXNJbml0aWFsaXppbmcpIHJldHVybjtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBtb3ZlIHRvIHRoZSBpbml0aWFsIGFuY2hvclxuICAgICAgICBpZiAodGhpcy5faW5pdGlhbEFuY2hvcikgYW5jaG9yID0gdGhpcy5faW5pdGlhbEFuY2hvcjtcbiAgICAgIH1cblxuICAgICAgdmFyICRhbmNob3IgPSBhbmNob3IgJiYgJChhbmNob3IpO1xuICAgICAgdmFyICRsaW5rID0gYW5jaG9yICYmIHRoaXMuJGVsZW1lbnQuZmluZChgW2hyZWYkPVwiJHthbmNob3J9XCJdYCk7XG4gICAgICAvLyBXaGV0aGVyIHRoZSBhbmNob3IgZWxlbWVudCB0aGF0IGhhcyBiZWVuIGZvdW5kIGlzIHBhcnQgb2YgdGhpcyBlbGVtZW50XG4gICAgICB2YXIgaXNPd25BbmNob3IgPSAhISgkYW5jaG9yLmxlbmd0aCAmJiAkbGluay5sZW5ndGgpO1xuXG4gICAgICBpZiAoaXNPd25BbmNob3IpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gYW5jaG9yIGZvciB0aGUgaGFzaCwgb3BlbiBpdCAoaWYgbm90IGFscmVhZHkgYWN0aXZlKVxuICAgICAgICBpZiAoJGFuY2hvciAmJiAkbGluayAmJiAkbGluay5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAoISRsaW5rLnBhcmVudCgnW2RhdGEtYWNjb3JkaW9uLWl0ZW1dJykuaGFzQ2xhc3MoJ2lzLWFjdGl2ZScpKSB7XG4gICAgICAgICAgICB0aGlzLl9vcGVuU2luZ2xlVGFiKCRhbmNob3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBPdGhlcndpc2UsIGNsb3NlIGV2ZXJ5dGhpbmdcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY2xvc2VBbGxUYWJzKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSb2xsIHVwIGEgbGl0dGxlIHRvIHNob3cgdGhlIHRpdGxlc1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlZXBMaW5rU211ZGdlKSB7XG4gICAgICAgICAgb25Mb2FkKCQod2luZG93KSwgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuJGVsZW1lbnQub2Zmc2V0KCk7XG4gICAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7IHNjcm9sbFRvcDogb2Zmc2V0LnRvcCAtIHRoaXMub3B0aW9ucy5kZWVwTGlua1NtdWRnZU9mZnNldCB9LCB0aGlzLm9wdGlvbnMuZGVlcExpbmtTbXVkZ2VEZWxheSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgcGx1Z2luIGhhcyBkZWVwbGlua2VkIGF0IHBhZ2Vsb2FkXG4gICAgICAgICAqIEBldmVudCBBY2NvcmRpb24jZGVlcGxpbmtcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignZGVlcGxpbmsuemYuYWNjb3JkaW9uJywgWyRsaW5rLCAkYW5jaG9yXSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vdXNlIGJyb3dzZXIgdG8gb3BlbiBhIHRhYiwgaWYgaXQgZXhpc3RzIGluIHRoaXMgdGFic2V0XG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWVwTGluaykge1xuICAgICAgdGhpcy5fY2hlY2tEZWVwTGluaygpO1xuICAgIH1cblxuICAgIHRoaXMuX2V2ZW50cygpO1xuXG4gICAgdGhpcy5faXNJbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGhhbmRsZXJzIGZvciBpdGVtcyB3aXRoaW4gdGhlIGFjY29yZGlvbi5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJHRhYnMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIHZhciAkZWxlbSA9ICQodGhpcyk7XG4gICAgICB2YXIgJHRhYkNvbnRlbnQgPSAkZWxlbS5jaGlsZHJlbignW2RhdGEtdGFiLWNvbnRlbnRdJyk7XG4gICAgICBpZiAoJHRhYkNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgICRlbGVtLmNoaWxkcmVuKCdhJykub2ZmKCdjbGljay56Zi5hY2NvcmRpb24ga2V5ZG93bi56Zi5hY2NvcmRpb24nKVxuICAgICAgICAgICAgICAgLm9uKCdjbGljay56Zi5hY2NvcmRpb24nLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIF90aGlzLnRvZ2dsZSgkdGFiQ29udGVudCk7XG4gICAgICAgIH0pLm9uKCdrZXlkb3duLnpmLmFjY29yZGlvbicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICBLZXlib2FyZC5oYW5kbGVLZXkoZSwgJ0FjY29yZGlvbicsIHtcbiAgICAgICAgICAgIHRvZ2dsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIF90aGlzLnRvZ2dsZSgkdGFiQ29udGVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciAkYSA9ICRlbGVtLm5leHQoKS5maW5kKCdhJykuZm9jdXMoKTtcbiAgICAgICAgICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLm11bHRpRXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgJGEudHJpZ2dlcignY2xpY2suemYuYWNjb3JkaW9uJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmV2aW91czogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciAkYSA9ICRlbGVtLnByZXYoKS5maW5kKCdhJykuZm9jdXMoKTtcbiAgICAgICAgICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLm11bHRpRXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgJGEudHJpZ2dlcignY2xpY2suemYuYWNjb3JkaW9uJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaXJzdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciAkYSA9IF90aGlzLiR0YWJzLmZpcnN0KCkuZmluZCgnLmFjY29yZGlvbi10aXRsZScpLmZvY3VzKCk7XG4gICAgICAgICAgICAgIGlmICghX3RoaXMub3B0aW9ucy5tdWx0aUV4cGFuZCkge1xuICAgICAgICAgICAgICAgICAkYS50cmlnZ2VyKCdjbGljay56Zi5hY2NvcmRpb24nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgJGEgPSBfdGhpcy4kdGFicy5sYXN0KCkuZmluZCgnLmFjY29yZGlvbi10aXRsZScpLmZvY3VzKCk7XG4gICAgICAgICAgICAgIGlmICghX3RoaXMub3B0aW9ucy5tdWx0aUV4cGFuZCkge1xuICAgICAgICAgICAgICAgICAkYS50cmlnZ2VyKCdjbGljay56Zi5hY2NvcmRpb24nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhbmRsZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZGVlcExpbmspIHtcbiAgICAgICQod2luZG93KS5vbignaGFzaGNoYW5nZScsIHRoaXMuX2NoZWNrRGVlcExpbmspO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBzZWxlY3RlZCBjb250ZW50IHBhbmUncyBvcGVuL2Nsb3NlIHN0YXRlLlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJHRhcmdldCAtIGpRdWVyeSBvYmplY3Qgb2YgdGhlIHBhbmUgdG8gdG9nZ2xlIChgLmFjY29yZGlvbi1jb250ZW50YCkuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgdG9nZ2xlKCR0YXJnZXQpIHtcbiAgICBpZiAoJHRhcmdldC5jbG9zZXN0KCdbZGF0YS1hY2NvcmRpb25dJykuaXMoJ1tkaXNhYmxlZF0nKSkge1xuICAgICAgY29uc29sZS5pbmZvKCdDYW5ub3QgdG9nZ2xlIGFuIGFjY29yZGlvbiB0aGF0IGlzIGRpc2FibGVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoJHRhcmdldC5wYXJlbnQoKS5oYXNDbGFzcygnaXMtYWN0aXZlJykpIHtcbiAgICAgIHRoaXMudXAoJHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG93bigkdGFyZ2V0KTtcbiAgICB9XG4gICAgLy9laXRoZXIgcmVwbGFjZSBvciB1cGRhdGUgYnJvd3NlciBoaXN0b3J5XG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWVwTGluaykge1xuICAgICAgdmFyIGFuY2hvciA9ICR0YXJnZXQucHJldignYScpLmF0dHIoJ2hyZWYnKTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy51cGRhdGVIaXN0b3J5KSB7XG4gICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHt9LCAnJywgYW5jaG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAnJywgYW5jaG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIGFjY29yZGlvbiB0YWIgZGVmaW5lZCBieSBgJHRhcmdldGAuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkdGFyZ2V0IC0gQWNjb3JkaW9uIHBhbmUgdG8gb3BlbiAoYC5hY2NvcmRpb24tY29udGVudGApLlxuICAgKiBAZmlyZXMgQWNjb3JkaW9uI2Rvd25cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkb3duKCR0YXJnZXQpIHtcbiAgICBpZiAoJHRhcmdldC5jbG9zZXN0KCdbZGF0YS1hY2NvcmRpb25dJykuaXMoJ1tkaXNhYmxlZF0nKSkgIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnQ2Fubm90IGNhbGwgZG93biBvbiBhbiBhY2NvcmRpb24gdGhhdCBpcyBkaXNhYmxlZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpRXhwYW5kKVxuICAgICAgdGhpcy5fb3BlblRhYigkdGFyZ2V0KTtcbiAgICBlbHNlXG4gICAgICB0aGlzLl9vcGVuU2luZ2xlVGFiKCR0YXJnZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgdGFiIGRlZmluZWQgYnkgYCR0YXJnZXRgLlxuICAgKiBJdCBtYXkgYmUgaWdub3JlZCBpZiB0aGUgQWNjb3JkaW9uIG9wdGlvbnMgZG9uJ3QgYWxsb3cgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkdGFyZ2V0IC0gQWNjb3JkaW9uIHRhYiB0byBjbG9zZSAoYC5hY2NvcmRpb24tY29udGVudGApLlxuICAgKiBAZmlyZXMgQWNjb3JkaW9uI3VwXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgdXAoJHRhcmdldCkge1xuICAgIGlmICh0aGlzLiRlbGVtZW50LmlzKCdbZGlzYWJsZWRdJykpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnQ2Fubm90IGNhbGwgdXAgb24gYW4gYWNjb3JkaW9uIHRoYXQgaXMgZGlzYWJsZWQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgY2xvc2UgdGhlIGl0ZW0gaWYgaXQgaXMgYWxyZWFkeSBjbG9zZWRcbiAgICBjb25zdCAkdGFyZ2V0SXRlbSA9ICR0YXJnZXQucGFyZW50KCk7XG4gICAgaWYgKCEkdGFyZ2V0SXRlbS5oYXNDbGFzcygnaXMtYWN0aXZlJykpIHJldHVybjtcblxuICAgIC8vIERvbid0IGNsb3NlIHRoZSBpdGVtIGlmIHRoZXJlIGlzIG5vIG90aGVyIGFjdGl2ZSBpdGVtICh1bmxlc3Mgd2l0aCBgYWxsb3dBbGxDbG9zZWRgKVxuICAgIGNvbnN0ICRvdGhlcnNJdGVtcyA9ICR0YXJnZXRJdGVtLnNpYmxpbmdzKCk7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuYWxsb3dBbGxDbG9zZWQgJiYgISRvdGhlcnNJdGVtcy5oYXNDbGFzcygnaXMtYWN0aXZlJykpIHJldHVybjtcblxuICAgIHRoaXMuX2Nsb3NlVGFiKCR0YXJnZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgdGhlIHRhYiBkZWZpbmVkIGJ5IGAkdGFyZ2V0YCB0aGUgb25seSBvcGVuZWQgdGFiLCBjbG9zaW5nIGFsbCBvdGhlcnMgdGFicy5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICR0YXJnZXQgLSBBY2NvcmRpb24gdGFiIHRvIG9wZW4gKGAuYWNjb3JkaW9uLWNvbnRlbnRgKS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb3BlblNpbmdsZVRhYigkdGFyZ2V0KSB7XG4gICAgLy8gQ2xvc2UgYWxsIHRoZSBvdGhlcnMgYWN0aXZlIHRhYnMuXG4gICAgY29uc3QgJGFjdGl2ZUNvbnRlbnRzID0gdGhpcy4kZWxlbWVudC5jaGlsZHJlbignLmlzLWFjdGl2ZScpLmNoaWxkcmVuKCdbZGF0YS10YWItY29udGVudF0nKTtcbiAgICBpZiAoJGFjdGl2ZUNvbnRlbnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fY2xvc2VUYWIoJGFjdGl2ZUNvbnRlbnRzLm5vdCgkdGFyZ2V0KSk7XG4gICAgfVxuXG4gICAgLy8gVGhlbiBvcGVuIHRoZSB0YXJnZXQuXG4gICAgdGhpcy5fb3BlblRhYigkdGFyZ2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgdGFiIGRlZmluZWQgYnkgYCR0YXJnZXRgLlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJHRhcmdldCAtIEFjY29yZGlvbiB0YWIgdG8gb3BlbiAoYC5hY2NvcmRpb24tY29udGVudGApLlxuICAgKiBAZmlyZXMgQWNjb3JkaW9uI2Rvd25cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb3BlblRhYigkdGFyZ2V0KSB7XG4gICAgY29uc3QgJHRhcmdldEl0ZW0gPSAkdGFyZ2V0LnBhcmVudCgpO1xuICAgIGNvbnN0IHRhcmdldENvbnRlbnRJZCA9ICR0YXJnZXQuYXR0cignYXJpYS1sYWJlbGxlZGJ5Jyk7XG5cbiAgICAkdGFyZ2V0LmF0dHIoJ2FyaWEtaGlkZGVuJywgZmFsc2UpO1xuICAgICR0YXJnZXRJdGVtLmFkZENsYXNzKCdpcy1hY3RpdmUnKTtcblxuICAgICQoYCMke3RhcmdldENvbnRlbnRJZH1gKS5hdHRyKHtcbiAgICAgICdhcmlhLWV4cGFuZGVkJzogdHJ1ZVxuICAgIH0pO1xuXG4gICAgJHRhcmdldC5maW5pc2goKS5zbGlkZURvd24odGhpcy5vcHRpb25zLnNsaWRlU3BlZWQsICgpID0+IHtcbiAgICAgIC8qKlxuICAgICAgICogRmlyZXMgd2hlbiB0aGUgdGFiIGlzIGRvbmUgb3BlbmluZy5cbiAgICAgICAqIEBldmVudCBBY2NvcmRpb24jZG93blxuICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2Rvd24uemYuYWNjb3JkaW9uJywgWyR0YXJnZXRdKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIHRhYiBkZWZpbmVkIGJ5IGAkdGFyZ2V0YC5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICR0YXJnZXQgLSBBY2NvcmRpb24gdGFiIHRvIGNsb3NlIChgLmFjY29yZGlvbi1jb250ZW50YCkuXG4gICAqIEBmaXJlcyBBY2NvcmRpb24jdXBcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xvc2VUYWIoJHRhcmdldCkge1xuICAgIGNvbnN0ICR0YXJnZXRJdGVtID0gJHRhcmdldC5wYXJlbnQoKTtcbiAgICBjb25zdCB0YXJnZXRDb250ZW50SWQgPSAkdGFyZ2V0LmF0dHIoJ2FyaWEtbGFiZWxsZWRieScpO1xuXG4gICAgJHRhcmdldC5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgICR0YXJnZXRJdGVtLnJlbW92ZUNsYXNzKCdpcy1hY3RpdmUnKTtcblxuICAgICQoYCMke3RhcmdldENvbnRlbnRJZH1gKS5hdHRyKHtcbiAgICAgJ2FyaWEtZXhwYW5kZWQnOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgJHRhcmdldC5maW5pc2goKS5zbGlkZVVwKHRoaXMub3B0aW9ucy5zbGlkZVNwZWVkLCAoKSA9PiB7XG4gICAgICAvKipcbiAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHRhYiBpcyBkb25lIGNvbGxhcHNpbmcgdXAuXG4gICAgICAgKiBAZXZlbnQgQWNjb3JkaW9uI3VwXG4gICAgICAgKi9cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigndXAuemYuYWNjb3JkaW9uJywgWyR0YXJnZXRdKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgYWxsIGFjdGl2ZSB0YWJzXG4gICAqIEBmaXJlcyBBY2NvcmRpb24jdXBcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xvc2VBbGxUYWJzKCkge1xuICAgIHZhciAkYWN0aXZlVGFicyA9IHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oJy5pcy1hY3RpdmUnKS5jaGlsZHJlbignW2RhdGEtdGFiLWNvbnRlbnRdJyk7XG4gICAgaWYgKCRhY3RpdmVUYWJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fY2xvc2VUYWIoJGFjdGl2ZVRhYnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyBhbiBpbnN0YW5jZSBvZiBhbiBhY2NvcmRpb24uXG4gICAqIEBmaXJlcyBBY2NvcmRpb24jZGVzdHJveWVkXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX2Rlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS10YWItY29udGVudF0nKS5zdG9wKHRydWUpLnNsaWRlVXAoMCkuY3NzKCdkaXNwbGF5JywgJycpO1xuICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnYScpLm9mZignLnpmLmFjY29yZGlvbicpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZGVlcExpbmspIHtcbiAgICAgICQod2luZG93KS5vZmYoJ2hhc2hjaGFuZ2UnLCB0aGlzLl9jaGVja0RlZXBMaW5rKTtcbiAgICB9XG5cbiAgfVxufVxuXG5BY2NvcmRpb24uZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBBbW91bnQgb2YgdGltZSB0byBhbmltYXRlIHRoZSBvcGVuaW5nIG9mIGFuIGFjY29yZGlvbiBwYW5lLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDI1MFxuICAgKi9cbiAgc2xpZGVTcGVlZDogMjUwLFxuICAvKipcbiAgICogQWxsb3cgdGhlIGFjY29yZGlvbiB0byBoYXZlIG11bHRpcGxlIG9wZW4gcGFuZXMuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aUV4cGFuZDogZmFsc2UsXG4gIC8qKlxuICAgKiBBbGxvdyB0aGUgYWNjb3JkaW9uIHRvIGNsb3NlIGFsbCBwYW5lcy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGFsbG93QWxsQ2xvc2VkOiBmYWxzZSxcbiAgLyoqXG4gICAqIExpbmsgdGhlIGxvY2F0aW9uIGhhc2ggdG8gdGhlIG9wZW4gcGFuZS5cbiAgICogU2V0IHRoZSBsb2NhdGlvbiBoYXNoIHdoZW4gdGhlIG9wZW5lZCBwYW5lIGNoYW5nZXMsIGFuZCBvcGVuIGFuZCBzY3JvbGwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcGFuZSB3aGVuIHRoZSBsb2NhdGlvbiBjaGFuZ2VzLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVlcExpbms6IGZhbHNlLFxuICAvKipcbiAgICogSWYgYGRlZXBMaW5rYCBpcyBlbmFibGVkLCBhZGp1c3QgdGhlIGRlZXAgbGluayBzY3JvbGwgdG8gbWFrZSBzdXJlIHRoZSB0b3Agb2YgdGhlIGFjY29yZGlvbiBwYW5lbCBpcyB2aXNpYmxlXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWVwTGlua1NtdWRnZTogZmFsc2UsXG4gIC8qKlxuICAgKiBJZiBgZGVlcExpbmtTbXVkZ2VgIGlzIGVuYWJsZWQsIGFuaW1hdGlvbiB0aW1lIChtcykgZm9yIHRoZSBkZWVwIGxpbmsgYWRqdXN0bWVudFxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDMwMFxuICAgKi9cbiAgZGVlcExpbmtTbXVkZ2VEZWxheTogMzAwLFxuICAvKipcbiAgICogSWYgYGRlZXBMaW5rU211ZGdlYCBpcyBlbmFibGVkLCB0aGUgb2Zmc2V0IGZvciBzY3JvbGxUb1R0b3AgdG8gcHJldmVudCBvdmVybGFwIGJ5IGEgc3RpY2t5IGVsZW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgcGFnZVxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGRlZXBMaW5rU211ZGdlT2Zmc2V0OiAwLFxuICAvKipcbiAgICogSWYgYGRlZXBMaW5rYCBpcyBlbmFibGVkLCB1cGRhdGUgdGhlIGJyb3dzZXIgaGlzdG9yeSB3aXRoIHRoZSBvcGVuIGFjY29yZGlvblxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdXBkYXRlSGlzdG9yeTogZmFsc2Vcbn07XG5cbi8qKlxuICogQWNjb3JkaW9uTWVudSBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24uYWNjb3JkaW9uTWVudVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5rZXlib2FyZFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5uZXN0XG4gKi9cblxuY2xhc3MgQWNjb3JkaW9uTWVudSBleHRlbmRzIFBsdWdpbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGFuIGFjY29yZGlvbiBtZW51LlxuICAgKiBAY2xhc3NcbiAgICogQG5hbWUgQWNjb3JkaW9uTWVudVxuICAgKiBAZmlyZXMgQWNjb3JkaW9uTWVudSNpbml0XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYW4gYWNjb3JkaW9uIG1lbnUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIF9zZXR1cChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIEFjY29yZGlvbk1lbnUuZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcbiAgICB0aGlzLmNsYXNzTmFtZSA9ICdBY2NvcmRpb25NZW51JzsgLy8gaWU5IGJhY2sgY29tcGF0XG5cbiAgICB0aGlzLl9pbml0KCk7XG5cbiAgICBLZXlib2FyZC5yZWdpc3RlcignQWNjb3JkaW9uTWVudScsIHtcbiAgICAgICdFTlRFUic6ICd0b2dnbGUnLFxuICAgICAgJ1NQQUNFJzogJ3RvZ2dsZScsXG4gICAgICAnQVJST1dfUklHSFQnOiAnb3BlbicsXG4gICAgICAnQVJST1dfVVAnOiAndXAnLFxuICAgICAgJ0FSUk9XX0RPV04nOiAnZG93bicsXG4gICAgICAnQVJST1dfTEVGVCc6ICdjbG9zZScsXG4gICAgICAnRVNDQVBFJzogJ2Nsb3NlQWxsJ1xuICAgIH0pO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgYWNjb3JkaW9uIG1lbnUgYnkgaGlkaW5nIGFsbCBuZXN0ZWQgbWVudXMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICBOZXN0LkZlYXRoZXIodGhpcy4kZWxlbWVudCwgJ2FjY29yZGlvbicpO1xuXG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnW2RhdGEtc3VibWVudV0nKS5ub3QoJy5pcy1hY3RpdmUnKS5zbGlkZVVwKDApOy8vLmZpbmQoJ2EnKS5jc3MoJ3BhZGRpbmctbGVmdCcsICcxcmVtJyk7XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKHtcbiAgICAgICdhcmlhLW11bHRpc2VsZWN0YWJsZSc6IHRoaXMub3B0aW9ucy5tdWx0aU9wZW5cbiAgICB9KTtcblxuICAgIHRoaXMuJG1lbnVMaW5rcyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmlzLWFjY29yZGlvbi1zdWJtZW51LXBhcmVudCcpO1xuICAgIHRoaXMuJG1lbnVMaW5rcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxpbmtJZCA9IHRoaXMuaWQgfHwgR2V0WW9EaWdpdHMoNiwgJ2FjYy1tZW51LWxpbmsnKSxcbiAgICAgICAgICAkZWxlbSA9ICQodGhpcyksXG4gICAgICAgICAgJHN1YiA9ICRlbGVtLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpLFxuICAgICAgICAgIHN1YklkID0gJHN1YlswXS5pZCB8fCBHZXRZb0RpZ2l0cyg2LCAnYWNjLW1lbnUnKSxcbiAgICAgICAgICBpc0FjdGl2ZSA9ICRzdWIuaGFzQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuXG4gICAgICBpZiAoX3RoaXMub3B0aW9ucy5wYXJlbnRMaW5rKSB7XG4gICAgICAgIGxldCAkYW5jaG9yID0gJGVsZW0uY2hpbGRyZW4oJ2EnKTtcbiAgICAgICAgJGFuY2hvci5jbG9uZSgpLnByZXBlbmRUbygkc3ViKS53cmFwKCc8bGkgZGF0YS1pcy1wYXJlbnQtbGluayBjbGFzcz1cImlzLXN1Ym1lbnUtcGFyZW50LWl0ZW0gaXMtc3VibWVudS1pdGVtIGlzLWFjY29yZGlvbi1zdWJtZW51LWl0ZW1cIj48L2xpPicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMub3B0aW9ucy5zdWJtZW51VG9nZ2xlKSB7XG4gICAgICAgICRlbGVtLmFkZENsYXNzKCdoYXMtc3VibWVudS10b2dnbGUnKTtcbiAgICAgICAgJGVsZW0uY2hpbGRyZW4oJ2EnKS5hZnRlcignPGJ1dHRvbiBpZD1cIicgKyBsaW5rSWQgKyAnXCIgY2xhc3M9XCJzdWJtZW51LXRvZ2dsZVwiIGFyaWEtY29udHJvbHM9XCInICsgc3ViSWQgKyAnXCIgYXJpYS1leHBhbmRlZD1cIicgKyBpc0FjdGl2ZSArICdcIiB0aXRsZT1cIicgKyBfdGhpcy5vcHRpb25zLnN1Ym1lbnVUb2dnbGVUZXh0ICsgJ1wiPjxzcGFuIGNsYXNzPVwic3VibWVudS10b2dnbGUtdGV4dFwiPicgKyBfdGhpcy5vcHRpb25zLnN1Ym1lbnVUb2dnbGVUZXh0ICsgJzwvc3Bhbj48L2J1dHRvbj4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRlbGVtLmF0dHIoe1xuICAgICAgICAgICdhcmlhLWNvbnRyb2xzJzogc3ViSWQsXG4gICAgICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBpc0FjdGl2ZSxcbiAgICAgICAgICAnaWQnOiBsaW5rSWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAkc3ViLmF0dHIoe1xuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogbGlua0lkLFxuICAgICAgICAnYXJpYS1oaWRkZW4nOiAhaXNBY3RpdmUsXG4gICAgICAgICdyb2xlJzogJ2dyb3VwJyxcbiAgICAgICAgJ2lkJzogc3ViSWRcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciBpbml0UGFuZXMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pcy1hY3RpdmUnKTtcbiAgICBpZiAoaW5pdFBhbmVzLmxlbmd0aCkge1xuICAgICAgaW5pdFBhbmVzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLmRvd24oJCh0aGlzKSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBoYW5kbGVycyBmb3IgaXRlbXMgd2l0aGluIHRoZSBtZW51LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgJHN1Ym1lbnUgPSAkKHRoaXMpLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpO1xuXG4gICAgICBpZiAoJHN1Ym1lbnUubGVuZ3RoKSB7XG4gICAgICAgIGlmIChfdGhpcy5vcHRpb25zLnN1Ym1lbnVUb2dnbGUpIHtcbiAgICAgICAgICAkKHRoaXMpLmNoaWxkcmVuKCcuc3VibWVudS10b2dnbGUnKS5vZmYoJ2NsaWNrLnpmLmFjY29yZGlvbk1lbnUnKS5vbignY2xpY2suemYuYWNjb3JkaW9uTWVudScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgX3RoaXMudG9nZ2xlKCRzdWJtZW51KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQodGhpcykuY2hpbGRyZW4oJ2EnKS5vZmYoJ2NsaWNrLnpmLmFjY29yZGlvbk1lbnUnKS5vbignY2xpY2suemYuYWNjb3JkaW9uTWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBfdGhpcy50b2dnbGUoJHN1Ym1lbnUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KS5vbigna2V5ZG93bi56Zi5hY2NvcmRpb25NZW51JywgZnVuY3Rpb24oZSkge1xuICAgICAgdmFyICRlbGVtZW50ID0gJCh0aGlzKSxcbiAgICAgICAgICAkZWxlbWVudHMgPSAkZWxlbWVudC5wYXJlbnQoJ3VsJykuY2hpbGRyZW4oJ2xpJyksXG4gICAgICAgICAgJHByZXZFbGVtZW50LFxuICAgICAgICAgICRuZXh0RWxlbWVudCxcbiAgICAgICAgICAkdGFyZ2V0ID0gJGVsZW1lbnQuY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdJyk7XG5cbiAgICAgICRlbGVtZW50cy5lYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgaWYgKCQodGhpcykuaXMoJGVsZW1lbnQpKSB7XG4gICAgICAgICAgJHByZXZFbGVtZW50ID0gJGVsZW1lbnRzLmVxKE1hdGgubWF4KDAsIGktMSkpLmZpbmQoJ2EnKS5maXJzdCgpO1xuICAgICAgICAgICRuZXh0RWxlbWVudCA9ICRlbGVtZW50cy5lcShNYXRoLm1pbihpKzEsICRlbGVtZW50cy5sZW5ndGgtMSkpLmZpbmQoJ2EnKS5maXJzdCgpO1xuXG4gICAgICAgICAgaWYgKCQodGhpcykuY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdOnZpc2libGUnKS5sZW5ndGgpIHsgLy8gaGFzIG9wZW4gc3ViIG1lbnVcbiAgICAgICAgICAgICRuZXh0RWxlbWVudCA9ICRlbGVtZW50LmZpbmQoJ2xpOmZpcnN0LWNoaWxkJykuZmluZCgnYScpLmZpcnN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkKHRoaXMpLmlzKCc6Zmlyc3QtY2hpbGQnKSkgeyAvLyBpcyBmaXJzdCBlbGVtZW50IG9mIHN1YiBtZW51XG4gICAgICAgICAgICAkcHJldkVsZW1lbnQgPSAkZWxlbWVudC5wYXJlbnRzKCdsaScpLmZpcnN0KCkuZmluZCgnYScpLmZpcnN0KCk7XG4gICAgICAgICAgfSBlbHNlIGlmICgkcHJldkVsZW1lbnQucGFyZW50cygnbGknKS5maXJzdCgpLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XTp2aXNpYmxlJykubGVuZ3RoKSB7IC8vIGlmIHByZXZpb3VzIGVsZW1lbnQgaGFzIG9wZW4gc3ViIG1lbnVcbiAgICAgICAgICAgICRwcmV2RWxlbWVudCA9ICRwcmV2RWxlbWVudC5wYXJlbnRzKCdsaScpLmZpbmQoJ2xpOmxhc3QtY2hpbGQnKS5maW5kKCdhJykuZmlyc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCQodGhpcykuaXMoJzpsYXN0LWNoaWxkJykpIHsgLy8gaXMgbGFzdCBlbGVtZW50IG9mIHN1YiBtZW51XG4gICAgICAgICAgICAkbmV4dEVsZW1lbnQgPSAkZWxlbWVudC5wYXJlbnRzKCdsaScpLmZpcnN0KCkubmV4dCgnbGknKS5maW5kKCdhJykuZmlyc3QoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBLZXlib2FyZC5oYW5kbGVLZXkoZSwgJ0FjY29yZGlvbk1lbnUnLCB7XG4gICAgICAgIG9wZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICgkdGFyZ2V0LmlzKCc6aGlkZGVuJykpIHtcbiAgICAgICAgICAgIF90aGlzLmRvd24oJHRhcmdldCk7XG4gICAgICAgICAgICAkdGFyZ2V0LmZpbmQoJ2xpJykuZmlyc3QoKS5maW5kKCdhJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICgkdGFyZ2V0Lmxlbmd0aCAmJiAhJHRhcmdldC5pcygnOmhpZGRlbicpKSB7IC8vIGNsb3NlIGFjdGl2ZSBzdWIgb2YgdGhpcyBpdGVtXG4gICAgICAgICAgICBfdGhpcy51cCgkdGFyZ2V0KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCRlbGVtZW50LnBhcmVudCgnW2RhdGEtc3VibWVudV0nKS5sZW5ndGgpIHsgLy8gY2xvc2UgY3VycmVudGx5IG9wZW4gc3ViXG4gICAgICAgICAgICBfdGhpcy51cCgkZWxlbWVudC5wYXJlbnQoJ1tkYXRhLXN1Ym1lbnVdJykpO1xuICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50cygnbGknKS5maXJzdCgpLmZpbmQoJ2EnKS5maXJzdCgpLmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1cDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJHByZXZFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGRvd246IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRuZXh0RWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLnN1Ym1lbnVUb2dnbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRlbGVtZW50LmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpLmxlbmd0aCkge1xuICAgICAgICAgICAgX3RoaXMudG9nZ2xlKCRlbGVtZW50LmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xvc2VBbGw6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF90aGlzLmhpZGVBbGwoKTtcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlZDogZnVuY3Rpb24ocHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICBpZiAocHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pOy8vLmF0dHIoJ3RhYmluZGV4JywgMCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIGFsbCBwYW5lcyBvZiB0aGUgbWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBoaWRlQWxsKCkge1xuICAgIHRoaXMudXAodGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1zdWJtZW51XScpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhbGwgcGFuZXMgb2YgdGhlIG1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgc2hvd0FsbCgpIHtcbiAgICB0aGlzLmRvd24odGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1zdWJtZW51XScpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBvcGVuL2Nsb3NlIHN0YXRlIG9mIGEgc3VibWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkdGFyZ2V0IC0gdGhlIHN1Ym1lbnUgdG8gdG9nZ2xlXG4gICAqL1xuICB0b2dnbGUoJHRhcmdldCkge1xuICAgIGlmICghJHRhcmdldC5pcygnOmFuaW1hdGVkJykpIHtcbiAgICAgIGlmICghJHRhcmdldC5pcygnOmhpZGRlbicpKSB7XG4gICAgICAgIHRoaXMudXAoJHRhcmdldCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kb3duKCR0YXJnZXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgc3ViLW1lbnUgZGVmaW5lZCBieSBgJHRhcmdldGAuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkdGFyZ2V0IC0gU3ViLW1lbnUgdG8gb3Blbi5cbiAgICogQGZpcmVzIEFjY29yZGlvbk1lbnUjZG93blxuICAgKi9cbiAgZG93bigkdGFyZ2V0KSB7XG4gICAgLy8gSWYgaGF2aW5nIG11bHRpcGxlIHN1Ym1lbnVzIGFjdGl2ZSBpcyBkaXNhYmxlZCwgY2xvc2UgYWxsIHRoZSBzdWJtZW51c1xuICAgIC8vIHRoYXQgYXJlIG5vdCBwYXJlbnRzIG9yIGNoaWxkcmVuIG9mIHRoZSB0YXJnZXRlZCBzdWJtZW51LlxuICAgIGlmICghdGhpcy5vcHRpb25zLm11bHRpT3Blbikge1xuICAgICAgLy8gVGhlIFwiYnJhbmNoXCIgb2YgdGhlIHRhcmdldHRlZCBzdWJtZW51LCBmcm9tIHRoZSBjb21wb25lbnQgcm9vdCB0b1xuICAgICAgLy8gdGhlIGFjdGl2ZSBzdWJtZW51cyBuZXN0ZWQgaW4gaXQuXG4gICAgICBjb25zdCAkdGFyZ2V0QnJhbmNoID0gJHRhcmdldC5wYXJlbnRzVW50aWwodGhpcy4kZWxlbWVudClcbiAgICAgICAgLmFkZCgkdGFyZ2V0KVxuICAgICAgICAuYWRkKCR0YXJnZXQuZmluZCgnLmlzLWFjdGl2ZScpKTtcbiAgICAgIC8vIEFsbCB0aGUgYWN0aXZlIHN1Ym1lbnVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgYnJhbmNoLlxuICAgICAgY29uc3QgJG90aGVyc0FjdGl2ZVN1Ym1lbnVzID0gdGhpcy4kZWxlbWVudC5maW5kKCcuaXMtYWN0aXZlJykubm90KCR0YXJnZXRCcmFuY2gpO1xuXG4gICAgICB0aGlzLnVwKCRvdGhlcnNBY3RpdmVTdWJtZW51cyk7XG4gICAgfVxuXG4gICAgJHRhcmdldFxuICAgICAgLmFkZENsYXNzKCdpcy1hY3RpdmUnKVxuICAgICAgLmF0dHIoeyAnYXJpYS1oaWRkZW4nOiBmYWxzZSB9KTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3VibWVudVRvZ2dsZSkge1xuICAgICAgJHRhcmdldC5wcmV2KCcuc3VibWVudS10b2dnbGUnKS5hdHRyKHsnYXJpYS1leHBhbmRlZCc6IHRydWV9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAkdGFyZ2V0LnBhcmVudCgnLmlzLWFjY29yZGlvbi1zdWJtZW51LXBhcmVudCcpLmF0dHIoeydhcmlhLWV4cGFuZGVkJzogdHJ1ZX0pO1xuICAgIH1cblxuICAgICR0YXJnZXQuc2xpZGVEb3duKHRoaXMub3B0aW9ucy5zbGlkZVNwZWVkLCAoKSA9PiB7XG4gICAgICAvKipcbiAgICAgICAqIEZpcmVzIHdoZW4gdGhlIG1lbnUgaXMgZG9uZSBvcGVuaW5nLlxuICAgICAgICogQGV2ZW50IEFjY29yZGlvbk1lbnUjZG93blxuICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2Rvd24uemYuYWNjb3JkaW9uTWVudScsIFskdGFyZ2V0XSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBzdWItbWVudSBkZWZpbmVkIGJ5IGAkdGFyZ2V0YC4gQWxsIHN1Yi1tZW51cyBpbnNpZGUgdGhlIHRhcmdldCB3aWxsIGJlIGNsb3NlZCBhcyB3ZWxsLlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJHRhcmdldCAtIFN1Yi1tZW51IHRvIGNsb3NlLlxuICAgKiBAZmlyZXMgQWNjb3JkaW9uTWVudSN1cFxuICAgKi9cbiAgdXAoJHRhcmdldCkge1xuICAgIGNvbnN0ICRzdWJtZW51cyA9ICR0YXJnZXQuZmluZCgnW2RhdGEtc3VibWVudV0nKTtcbiAgICBjb25zdCAkYWxsbWVudXMgPSAkdGFyZ2V0LmFkZCgkc3VibWVudXMpO1xuXG4gICAgJHN1Ym1lbnVzLnNsaWRlVXAoMCk7XG4gICAgJGFsbG1lbnVzXG4gICAgICAucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZScpXG4gICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCB0cnVlKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3VibWVudVRvZ2dsZSkge1xuICAgICAgJGFsbG1lbnVzLnByZXYoJy5zdWJtZW51LXRvZ2dsZScpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgJGFsbG1lbnVzLnBhcmVudCgnLmlzLWFjY29yZGlvbi1zdWJtZW51LXBhcmVudCcpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgJHRhcmdldC5zbGlkZVVwKHRoaXMub3B0aW9ucy5zbGlkZVNwZWVkLCAoKSA9PiB7XG4gICAgICAvKipcbiAgICAgICAqIEZpcmVzIHdoZW4gdGhlIG1lbnUgaXMgZG9uZSBjb2xsYXBzaW5nIHVwLlxuICAgICAgICogQGV2ZW50IEFjY29yZGlvbk1lbnUjdXBcbiAgICAgICAqL1xuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCd1cC56Zi5hY2NvcmRpb25NZW51JywgWyR0YXJnZXRdKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyBhbiBpbnN0YW5jZSBvZiBhY2NvcmRpb24gbWVudS5cbiAgICogQGZpcmVzIEFjY29yZGlvbk1lbnUjZGVzdHJveWVkXG4gICAqL1xuICBfZGVzdHJveSgpIHtcbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLXN1Ym1lbnVdJykuc2xpZGVEb3duKDApLmNzcygnZGlzcGxheScsICcnKTtcbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2EnKS5vZmYoJ2NsaWNrLnpmLmFjY29yZGlvbk1lbnUnKTtcbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLWlzLXBhcmVudC1saW5rXScpLmRldGFjaCgpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdWJtZW51VG9nZ2xlKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5oYXMtc3VibWVudS10b2dnbGUnKS5yZW1vdmVDbGFzcygnaGFzLXN1Ym1lbnUtdG9nZ2xlJyk7XG4gICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5zdWJtZW51LXRvZ2dsZScpLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIE5lc3QuQnVybih0aGlzLiRlbGVtZW50LCAnYWNjb3JkaW9uJyk7XG4gIH1cbn1cblxuQWNjb3JkaW9uTWVudS5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIEFkZHMgdGhlIHBhcmVudCBsaW5rIHRvIHRoZSBzdWJtZW51LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcGFyZW50TGluazogZmFsc2UsXG4gIC8qKlxuICAgKiBBbW91bnQgb2YgdGltZSB0byBhbmltYXRlIHRoZSBvcGVuaW5nIG9mIGEgc3VibWVudSBpbiBtcy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAyNTBcbiAgICovXG4gIHNsaWRlU3BlZWQ6IDI1MCxcbiAgLyoqXG4gICAqIEFkZHMgYSBzZXBhcmF0ZSBzdWJtZW51IHRvZ2dsZSBidXR0b24uIFRoaXMgYWxsb3dzIHRoZSBwYXJlbnQgaXRlbSB0byBoYXZlIGEgbGluay5cbiAgICogQG9wdGlvblxuICAgKiBAZXhhbXBsZSB0cnVlXG4gICAqL1xuICBzdWJtZW51VG9nZ2xlOiBmYWxzZSxcbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHVzZWQgZm9yIHRoZSBzdWJtZW51IHRvZ2dsZSBpZiBlbmFibGVkLiBUaGlzIGlzIHVzZWQgZm9yIHNjcmVlbiByZWFkZXJzIG9ubHkuXG4gICAqIEBvcHRpb25cbiAgICogQGV4YW1wbGUgdHJ1ZVxuICAgKi9cbiAgc3VibWVudVRvZ2dsZVRleHQ6ICdUb2dnbGUgbWVudScsXG4gIC8qKlxuICAgKiBBbGxvdyB0aGUgbWVudSB0byBoYXZlIG11bHRpcGxlIG9wZW4gcGFuZXMuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIG11bHRpT3BlbjogdHJ1ZVxufTtcblxuLyoqXG4gKiBEcmlsbGRvd24gbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLmRyaWxsZG93blxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5rZXlib2FyZFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5uZXN0XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmJveFxuICovXG5cbmNsYXNzIERyaWxsZG93biBleHRlbmRzIFBsdWdpbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGEgZHJpbGxkb3duIG1lbnUuXG4gICAqIEBjbGFzc1xuICAgKiBAbmFtZSBEcmlsbGRvd25cbiAgICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIG1ha2UgaW50byBhbiBhY2NvcmRpb24gbWVudS5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgX3NldHVwKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgRHJpbGxkb3duLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG4gICAgdGhpcy5jbGFzc05hbWUgPSAnRHJpbGxkb3duJzsgLy8gaWU5IGJhY2sgY29tcGF0XG5cbiAgICB0aGlzLl9pbml0KCk7XG5cbiAgICBLZXlib2FyZC5yZWdpc3RlcignRHJpbGxkb3duJywge1xuICAgICAgJ0VOVEVSJzogJ29wZW4nLFxuICAgICAgJ1NQQUNFJzogJ29wZW4nLFxuICAgICAgJ0FSUk9XX1JJR0hUJzogJ25leHQnLFxuICAgICAgJ0FSUk9XX1VQJzogJ3VwJyxcbiAgICAgICdBUlJPV19ET1dOJzogJ2Rvd24nLFxuICAgICAgJ0FSUk9XX0xFRlQnOiAncHJldmlvdXMnLFxuICAgICAgJ0VTQ0FQRSc6ICdjbG9zZScsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGRyaWxsZG93biBieSBjcmVhdGluZyBqUXVlcnkgY29sbGVjdGlvbnMgb2YgZWxlbWVudHNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIE5lc3QuRmVhdGhlcih0aGlzLiRlbGVtZW50LCAnZHJpbGxkb3duJyk7XG5cbiAgICBpZih0aGlzLm9wdGlvbnMuYXV0b0FwcGx5Q2xhc3MpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ2RyaWxsZG93bicpO1xuICAgIH1cblxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cih7XG4gICAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMuJHN1Ym1lbnVBbmNob3JzID0gdGhpcy4kZWxlbWVudC5maW5kKCdsaS5pcy1kcmlsbGRvd24tc3VibWVudS1wYXJlbnQnKS5jaGlsZHJlbignYScpO1xuICAgIHRoaXMuJHN1Ym1lbnVzID0gdGhpcy4kc3VibWVudUFuY2hvcnMucGFyZW50KCdsaScpLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpLmF0dHIoJ3JvbGUnLCAnZ3JvdXAnKTtcbiAgICB0aGlzLiRtZW51SXRlbXMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpJykubm90KCcuanMtZHJpbGxkb3duLWJhY2snKS5maW5kKCdhJyk7XG5cbiAgICAvLyBTZXQgdGhlIG1haW4gbWVudSBhcyBjdXJyZW50IGJ5IGRlZmF1bHQgKHVubGVzcyBhIHN1Ym1lbnUgaXMgc2VsZWN0ZWQpXG4gICAgLy8gVXNlZCB0byBzZXQgdGhlIHdyYXBwZXIgaGVpZ2h0IHdoZW4gdGhlIGRyaWxsZG93biBpcyBjbG9zZWQvcmVvcGVuZWQgZnJvbSBhbnkgKHN1YiltZW51XG4gICAgdGhpcy4kY3VycmVudE1lbnUgPSB0aGlzLiRlbGVtZW50O1xuXG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKCdkYXRhLW11dGF0ZScsICh0aGlzLiRlbGVtZW50LmF0dHIoJ2RhdGEtZHJpbGxkb3duJykgfHwgR2V0WW9EaWdpdHMoNiwgJ2RyaWxsZG93bicpKSk7XG5cbiAgICB0aGlzLl9wcmVwYXJlTWVudSgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyRXZlbnRzKCk7XG5cbiAgICB0aGlzLl9rZXlib2FyZEV2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIHByZXBhcmVzIGRyaWxsZG93biBtZW51IGJ5IHNldHRpbmcgYXR0cmlidXRlcyB0byBsaW5rcyBhbmQgZWxlbWVudHNcbiAgICogc2V0cyBhIG1pbiBoZWlnaHQgdG8gcHJldmVudCBjb250ZW50IGp1bXBpbmdcbiAgICogd3JhcHMgdGhlIGVsZW1lbnQgaWYgbm90IGFscmVhZHkgd3JhcHBlZFxuICAgKiBAcHJpdmF0ZVxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIF9wcmVwYXJlTWVudSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIC8vIGlmKCF0aGlzLm9wdGlvbnMuaG9sZE9wZW4pe1xuICAgIC8vICAgdGhpcy5fbWVudUxpbmtFdmVudHMoKTtcbiAgICAvLyB9XG4gICAgdGhpcy4kc3VibWVudUFuY2hvcnMuZWFjaChmdW5jdGlvbigpe1xuICAgICAgdmFyICRsaW5rID0gJCh0aGlzKTtcbiAgICAgIHZhciAkc3ViID0gJGxpbmsucGFyZW50KCk7XG4gICAgICBpZihfdGhpcy5vcHRpb25zLnBhcmVudExpbmspe1xuICAgICAgICAkbGluay5jbG9uZSgpLnByZXBlbmRUbygkc3ViLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpKS53cmFwKCc8bGkgZGF0YS1pcy1wYXJlbnQtbGluayBjbGFzcz1cImlzLXN1Ym1lbnUtcGFyZW50LWl0ZW0gaXMtc3VibWVudS1pdGVtIGlzLWRyaWxsZG93bi1zdWJtZW51LWl0ZW1cIiByb2xlPVwibm9uZVwiPjwvbGk+Jyk7XG4gICAgICB9XG4gICAgICAkbGluay5kYXRhKCdzYXZlZEhyZWYnLCAkbGluay5hdHRyKCdocmVmJykpLnJlbW92ZUF0dHIoJ2hyZWYnKS5hdHRyKCd0YWJpbmRleCcsIDApO1xuICAgICAgJGxpbmsuY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdJylcbiAgICAgICAgICAuYXR0cih7XG4gICAgICAgICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlLFxuICAgICAgICAgICAgJ3RhYmluZGV4JzogMCxcbiAgICAgICAgICAgICdyb2xlJzogJ2dyb3VwJ1xuICAgICAgICAgIH0pO1xuICAgICAgX3RoaXMuX2V2ZW50cygkbGluayk7XG4gICAgfSk7XG4gICAgdGhpcy4kc3VibWVudXMuZWFjaChmdW5jdGlvbigpe1xuICAgICAgdmFyICRtZW51ID0gJCh0aGlzKSxcbiAgICAgICAgICAkYmFjayA9ICRtZW51LmZpbmQoJy5qcy1kcmlsbGRvd24tYmFjaycpO1xuICAgICAgaWYoISRiYWNrLmxlbmd0aCl7XG4gICAgICAgIHN3aXRjaCAoX3RoaXMub3B0aW9ucy5iYWNrQnV0dG9uUG9zaXRpb24pIHtcbiAgICAgICAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICAgICAgICAkbWVudS5hcHBlbmQoX3RoaXMub3B0aW9ucy5iYWNrQnV0dG9uKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJ0b3BcIjpcbiAgICAgICAgICAgICRtZW51LnByZXBlbmQoX3RoaXMub3B0aW9ucy5iYWNrQnV0dG9uKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVW5zdXBwb3J0ZWQgYmFja0J1dHRvblBvc2l0aW9uIHZhbHVlICdcIiArIF90aGlzLm9wdGlvbnMuYmFja0J1dHRvblBvc2l0aW9uICsgXCInXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBfdGhpcy5fYmFjaygkbWVudSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRzdWJtZW51cy5hZGRDbGFzcygnaW52aXNpYmxlJyk7XG4gICAgaWYoIXRoaXMub3B0aW9ucy5hdXRvSGVpZ2h0KSB7XG4gICAgICB0aGlzLiRzdWJtZW51cy5hZGRDbGFzcygnZHJpbGxkb3duLXN1Ym1lbnUtY292ZXItcHJldmlvdXMnKTtcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgYSB3cmFwcGVyIG9uIGVsZW1lbnQgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICBpZighdGhpcy4kZWxlbWVudC5wYXJlbnQoKS5oYXNDbGFzcygnaXMtZHJpbGxkb3duJykpe1xuICAgICAgdGhpcy4kd3JhcHBlciA9ICQodGhpcy5vcHRpb25zLndyYXBwZXIpLmFkZENsYXNzKCdpcy1kcmlsbGRvd24nKTtcbiAgICAgIGlmKHRoaXMub3B0aW9ucy5hbmltYXRlSGVpZ2h0KSB0aGlzLiR3cmFwcGVyLmFkZENsYXNzKCdhbmltYXRlLWhlaWdodCcpO1xuICAgICAgdGhpcy4kZWxlbWVudC53cmFwKHRoaXMuJHdyYXBwZXIpO1xuICAgIH1cbiAgICAvLyBzZXQgd3JhcHBlclxuICAgIHRoaXMuJHdyYXBwZXIgPSB0aGlzLiRlbGVtZW50LnBhcmVudCgpO1xuICAgIHRoaXMuJHdyYXBwZXIuY3NzKHRoaXMuX2dldE1heERpbXMoKSk7XG4gIH1cblxuICBfcmVzaXplKCkge1xuICAgIHRoaXMuJHdyYXBwZXIuY3NzKHsnbWF4LXdpZHRoJzogJ25vbmUnLCAnbWluLWhlaWdodCc6ICdub25lJ30pO1xuICAgIC8vIF9nZXRNYXhEaW1zIGhhcyBzaWRlIGVmZmVjdHMgKGJvbykgYnV0IGNhbGxpbmcgaXQgc2hvdWxkIHVwZGF0ZSBhbGwgb3RoZXIgbmVjZXNzYXJ5IGhlaWdodHMgJiB3aWR0aHNcbiAgICB0aGlzLiR3cmFwcGVyLmNzcyh0aGlzLl9nZXRNYXhEaW1zKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgaGFuZGxlcnMgdG8gZWxlbWVudHMgaW4gdGhlIG1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW0gLSB0aGUgY3VycmVudCBtZW51IGl0ZW0gdG8gYWRkIGhhbmRsZXJzIHRvLlxuICAgKi9cbiAgX2V2ZW50cygkZWxlbSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAkZWxlbS5vZmYoJ2NsaWNrLnpmLmRyaWxsZG93bicpXG4gICAgLm9uKCdjbGljay56Zi5kcmlsbGRvd24nLCBmdW5jdGlvbihlKSB7XG4gICAgICBpZigkKGUudGFyZ2V0KS5wYXJlbnRzVW50aWwoJ3VsJywgJ2xpJykuaGFzQ2xhc3MoJ2lzLWRyaWxsZG93bi1zdWJtZW51LXBhcmVudCcpKXtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZihlLnRhcmdldCAhPT0gZS5jdXJyZW50VGFyZ2V0LmZpcnN0RWxlbWVudENoaWxkKXtcbiAgICAgIC8vICAgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gfVxuICAgICAgX3RoaXMuX3Nob3coJGVsZW0ucGFyZW50KCdsaScpKTtcblxuICAgICAgaWYoX3RoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2spe1xuICAgICAgICB2YXIgJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgICAgICRib2R5Lm9mZignLnpmLmRyaWxsZG93bicpLm9uKCdjbGljay56Zi5kcmlsbGRvd24nLCBmdW5jdGlvbihldikge1xuICAgICAgICAgIGlmIChldi50YXJnZXQgPT09IF90aGlzLiRlbGVtZW50WzBdIHx8ICQuY29udGFpbnMoX3RoaXMuJGVsZW1lbnRbMF0sIGV2LnRhcmdldCkpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBfdGhpcy5faGlkZUFsbCgpO1xuICAgICAgICAgICRib2R5Lm9mZignLnpmLmRyaWxsZG93bicpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGhhbmRsZXJzIHRvIHRoZSBtZW51IGVsZW1lbnQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlZ2lzdGVyRXZlbnRzKCkge1xuICAgIGlmKHRoaXMub3B0aW9ucy5zY3JvbGxUb3Ape1xuICAgICAgdGhpcy5fYmluZEhhbmRsZXIgPSB0aGlzLl9zY3JvbGxUb3AuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuJGVsZW1lbnQub24oJ29wZW4uemYuZHJpbGxkb3duIGhpZGUuemYuZHJpbGxkb3duIGNsb3NlLnpmLmRyaWxsZG93biBjbG9zZWQuemYuZHJpbGxkb3duJyx0aGlzLl9iaW5kSGFuZGxlcik7XG4gICAgfVxuICAgIHRoaXMuJGVsZW1lbnQub24oJ211dGF0ZW1lLnpmLnRyaWdnZXInLCB0aGlzLl9yZXNpemUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIHRvIFRvcCBvZiBFbGVtZW50IG9yIGRhdGEtc2Nyb2xsLXRvcC1lbGVtZW50XG4gICAqIEBmdW5jdGlvblxuICAgKiBAZmlyZXMgRHJpbGxkb3duI3Njcm9sbG1lXG4gICAqL1xuICBfc2Nyb2xsVG9wKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdmFyICRzY3JvbGxUb3BFbGVtZW50ID0gX3RoaXMub3B0aW9ucy5zY3JvbGxUb3BFbGVtZW50ICE9PSAnJz8kKF90aGlzLm9wdGlvbnMuc2Nyb2xsVG9wRWxlbWVudCk6X3RoaXMuJGVsZW1lbnQsXG4gICAgICAgIHNjcm9sbFBvcyA9IHBhcnNlSW50KCRzY3JvbGxUb3BFbGVtZW50Lm9mZnNldCgpLnRvcCtfdGhpcy5vcHRpb25zLnNjcm9sbFRvcE9mZnNldCwgMTApO1xuICAgICQoJ2h0bWwsIGJvZHknKS5zdG9wKHRydWUpLmFuaW1hdGUoeyBzY3JvbGxUb3A6IHNjcm9sbFBvcyB9LCBfdGhpcy5vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uLCBfdGhpcy5vcHRpb25zLmFuaW1hdGlvbkVhc2luZyxmdW5jdGlvbigpe1xuICAgICAgLyoqXG4gICAgICAgICogRmlyZXMgYWZ0ZXIgdGhlIG1lbnUgaGFzIHNjcm9sbGVkXG4gICAgICAgICogQGV2ZW50IERyaWxsZG93biNzY3JvbGxtZVxuICAgICAgICAqL1xuICAgICAgaWYodGhpcz09PSQoJ2h0bWwnKVswXSlfdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdzY3JvbGxtZS56Zi5kcmlsbGRvd24nKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGtleWRvd24gZXZlbnQgbGlzdGVuZXIgdG8gYGxpYCdzIGluIHRoZSBtZW51LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2tleWJvYXJkRXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLiRtZW51SXRlbXMuYWRkKHRoaXMuJGVsZW1lbnQuZmluZCgnLmpzLWRyaWxsZG93bi1iYWNrID4gYSwgLmlzLXN1Ym1lbnUtcGFyZW50LWl0ZW0gPiBhJykpLm9uKCdrZXlkb3duLnpmLmRyaWxsZG93bicsIGZ1bmN0aW9uKGUpe1xuICAgICAgdmFyICRlbGVtZW50ID0gJCh0aGlzKSxcbiAgICAgICAgICAkZWxlbWVudHMgPSAkZWxlbWVudC5wYXJlbnQoJ2xpJykucGFyZW50KCd1bCcpLmNoaWxkcmVuKCdsaScpLmNoaWxkcmVuKCdhJyksXG4gICAgICAgICAgJHByZXZFbGVtZW50LFxuICAgICAgICAgICRuZXh0RWxlbWVudDtcblxuICAgICAgJGVsZW1lbnRzLmVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgICBpZiAoJCh0aGlzKS5pcygkZWxlbWVudCkpIHtcbiAgICAgICAgICAkcHJldkVsZW1lbnQgPSAkZWxlbWVudHMuZXEoTWF0aC5tYXgoMCwgaS0xKSk7XG4gICAgICAgICAgJG5leHRFbGVtZW50ID0gJGVsZW1lbnRzLmVxKE1hdGgubWluKGkrMSwgJGVsZW1lbnRzLmxlbmd0aC0xKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgS2V5Ym9hcmQuaGFuZGxlS2V5KGUsICdEcmlsbGRvd24nLCB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICgkZWxlbWVudC5pcyhfdGhpcy4kc3VibWVudUFuY2hvcnMpKSB7XG4gICAgICAgICAgICBfdGhpcy5fc2hvdygkZWxlbWVudC5wYXJlbnQoJ2xpJykpO1xuICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50KCdsaScpLm9uZSh0cmFuc2l0aW9uZW5kKCRlbGVtZW50KSwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50KCdsaScpLmZpbmQoJ3VsIGxpIGEnKS5ub3QoJy5qcy1kcmlsbGRvd24tYmFjayBhJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHByZXZpb3VzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5faGlkZSgkZWxlbWVudC5wYXJlbnQoJ2xpJykucGFyZW50KCd1bCcpKTtcbiAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoJ2xpJykucGFyZW50KCd1bCcpLm9uZSh0cmFuc2l0aW9uZW5kKCRlbGVtZW50KSwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICRlbGVtZW50LnBhcmVudCgnbGknKS5wYXJlbnQoJ3VsJykucGFyZW50KCdsaScpLmNoaWxkcmVuKCdhJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIHVwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAkcHJldkVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAvLyBEb24ndCB0YXAgZm9jdXMgb24gZmlyc3QgZWxlbWVudCBpbiByb290IHVsXG4gICAgICAgICAgcmV0dXJuICEkZWxlbWVudC5pcyhfdGhpcy4kZWxlbWVudC5maW5kKCc+IGxpOmZpcnN0LWNoaWxkID4gYScpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZG93bjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJG5leHRFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgLy8gRG9uJ3QgdGFwIGZvY3VzIG9uIGxhc3QgZWxlbWVudCBpbiByb290IHVsXG4gICAgICAgICAgcmV0dXJuICEkZWxlbWVudC5pcyhfdGhpcy4kZWxlbWVudC5maW5kKCc+IGxpOmxhc3QtY2hpbGQgPiBhJykpO1xuICAgICAgICB9LFxuICAgICAgICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgLy8gRG9uJ3QgY2xvc2Ugb24gZWxlbWVudCBpbiByb290IHVsXG4gICAgICAgICAgaWYgKCEkZWxlbWVudC5pcyhfdGhpcy4kZWxlbWVudC5maW5kKCc+IGxpID4gYScpKSkge1xuICAgICAgICAgICAgX3RoaXMuX2hpZGUoJGVsZW1lbnQucGFyZW50KCkucGFyZW50KCkpO1xuICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50KCkucGFyZW50KCkuc2libGluZ3MoJ2EnKS5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb3BlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMucGFyZW50TGluayAmJiAkZWxlbWVudC5hdHRyKCdocmVmJykpIHsgLy8gTGluayB3aXRoIGhyZWZcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCEkZWxlbWVudC5pcyhfdGhpcy4kbWVudUl0ZW1zKSkgeyAvLyBub3QgbWVudSBpdGVtIG1lYW5zIGJhY2sgYnV0dG9uXG4gICAgICAgICAgICBfdGhpcy5faGlkZSgkZWxlbWVudC5wYXJlbnQoJ2xpJykucGFyZW50KCd1bCcpKTtcbiAgICAgICAgICAgICRlbGVtZW50LnBhcmVudCgnbGknKS5wYXJlbnQoJ3VsJykub25lKHRyYW5zaXRpb25lbmQoJGVsZW1lbnQpLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICRlbGVtZW50LnBhcmVudCgnbGknKS5wYXJlbnQoJ3VsJykucGFyZW50KCdsaScpLmNoaWxkcmVuKCdhJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkZWxlbWVudC5pcyhfdGhpcy4kc3VibWVudUFuY2hvcnMpKSB7IC8vIFN1YiBtZW51IGl0ZW1cbiAgICAgICAgICAgIF90aGlzLl9zaG93KCRlbGVtZW50LnBhcmVudCgnbGknKSk7XG4gICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoJ2xpJykub25lKHRyYW5zaXRpb25lbmQoJGVsZW1lbnQpLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoJ2xpJykuZmluZCgndWwgbGkgYScpLm5vdCgnLmpzLWRyaWxsZG93bi1iYWNrIGEnKS5maXJzdCgpLmZvY3VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlZDogZnVuY3Rpb24ocHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICBpZiAocHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pOyAvLyBlbmQga2V5Ym9hcmRBY2Nlc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgYWxsIG9wZW4gZWxlbWVudHMsIGFuZCByZXR1cm5zIHRvIHJvb3QgbWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBEcmlsbGRvd24jY2xvc2VcbiAgICogQGZpcmVzIERyaWxsZG93biNjbG9zZWRcbiAgICovXG4gIF9oaWRlQWxsKCkge1xuICAgIHZhciAkZWxlbSA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmlzLWRyaWxsZG93bi1zdWJtZW51LmlzLWFjdGl2ZScpO1xuICAgICRlbGVtLmFkZENsYXNzKCdpcy1jbG9zaW5nJyk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9IZWlnaHQpIHtcbiAgICAgIGNvbnN0IGNhbGNIZWlnaHQgPSAkZWxlbS5wYXJlbnQoKS5jbG9zZXN0KCd1bCcpLmRhdGEoJ2NhbGNIZWlnaHQnKTtcbiAgICAgIHRoaXMuJHdyYXBwZXIuY3NzKHsgaGVpZ2h0OiBjYWxjSGVpZ2h0IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIG1lbnUgaXMgY2xvc2luZy5cbiAgICAgKiBAZXZlbnQgRHJpbGxkb3duI2Nsb3NlXG4gICAgICovXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjbG9zZS56Zi5kcmlsbGRvd24nKTtcblxuICAgICRlbGVtLm9uZSh0cmFuc2l0aW9uZW5kKCRlbGVtKSwgKCkgPT4ge1xuICAgICAgJGVsZW0ucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZSBpcy1jbG9zaW5nJyk7XG5cbiAgICAgIC8qKlxuICAgICAgICogRmlyZXMgd2hlbiB0aGUgbWVudSBpcyBmdWxseSBjbG9zZWQuXG4gICAgICAgKiBAZXZlbnQgRHJpbGxkb3duI2Nsb3NlZFxuICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2Nsb3NlZC56Zi5kcmlsbGRvd24nKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGxpc3RlbmVyIGZvciBlYWNoIGBiYWNrYCBidXR0b24sIGFuZCBjbG9zZXMgb3BlbiBtZW51cy5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBEcmlsbGRvd24jYmFja1xuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW0gLSB0aGUgY3VycmVudCBzdWItbWVudSB0byBhZGQgYGJhY2tgIGV2ZW50LlxuICAgKi9cbiAgX2JhY2soJGVsZW0pIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICRlbGVtLm9mZignY2xpY2suemYuZHJpbGxkb3duJyk7XG4gICAgJGVsZW0uY2hpbGRyZW4oJy5qcy1kcmlsbGRvd24tYmFjaycpXG4gICAgICAub24oJ2NsaWNrLnpmLmRyaWxsZG93bicsIGZ1bmN0aW9uKCkge1xuICAgICAgICBfdGhpcy5faGlkZSgkZWxlbSk7XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBwYXJlbnQgc3VibWVudSwgY2FsbCBzaG93XG4gICAgICAgIGxldCBwYXJlbnRTdWJNZW51ID0gJGVsZW0ucGFyZW50KCdsaScpLnBhcmVudCgndWwnKS5wYXJlbnQoJ2xpJyk7XG4gICAgICAgIGlmIChwYXJlbnRTdWJNZW51Lmxlbmd0aCkge1xuICAgICAgICAgIF90aGlzLl9zaG93KHBhcmVudFN1Yk1lbnUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIF90aGlzLiRjdXJyZW50TWVudSA9IF90aGlzLiRlbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGxpc3RlbmVyIHRvIG1lbnUgaXRlbXMgdy9vIHN1Ym1lbnVzIHRvIGNsb3NlIG9wZW4gbWVudXMgb24gY2xpY2suXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21lbnVMaW5rRXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdGhpcy4kbWVudUl0ZW1zLm5vdCgnLmlzLWRyaWxsZG93bi1zdWJtZW51LXBhcmVudCcpXG4gICAgICAgIC5vZmYoJ2NsaWNrLnpmLmRyaWxsZG93bicpXG4gICAgICAgIC5vbignY2xpY2suemYuZHJpbGxkb3duJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIF90aGlzLl9oaWRlQWxsKCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBDU1MgY2xhc3NlcyBmb3Igc3VibWVudSB0byBzaG93IGl0LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRlbGVtIC0gdGhlIHRhcmdldCBzdWJtZW51IChgdWxgIHRhZylcbiAgICogQHBhcmFtIHtib29sZWFufSB0cmlnZ2VyIC0gdHJpZ2dlciBkcmlsbGRvd24gZXZlbnRcbiAgICovXG4gIF9zZXRTaG93U3ViTWVudUNsYXNzZXMoJGVsZW0sIHRyaWdnZXIpIHtcbiAgICAkZWxlbS5hZGRDbGFzcygnaXMtYWN0aXZlJykucmVtb3ZlQ2xhc3MoJ2ludmlzaWJsZScpLmF0dHIoJ2FyaWEtaGlkZGVuJywgZmFsc2UpO1xuICAgICRlbGVtLnBhcmVudCgnbGknKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgaWYgKHRyaWdnZXIgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignb3Blbi56Zi5kcmlsbGRvd24nLCBbJGVsZW1dKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgQ1NTIGNsYXNzZXMgZm9yIHN1Ym1lbnUgdG8gaGlkZSBpdC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkZWxlbSAtIHRoZSB0YXJnZXQgc3VibWVudSAoYHVsYCB0YWcpXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJpZ2dlciAtIHRyaWdnZXIgZHJpbGxkb3duIGV2ZW50XG4gICAqL1xuICBfc2V0SGlkZVN1Yk1lbnVDbGFzc2VzKCRlbGVtLCB0cmlnZ2VyKSB7XG4gICAgJGVsZW0ucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZScpLmFkZENsYXNzKCdpbnZpc2libGUnKS5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgICRlbGVtLnBhcmVudCgnbGknKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpO1xuICAgIGlmICh0cmlnZ2VyID09PSB0cnVlKSB7XG4gICAgICAkZWxlbS50cmlnZ2VyKCdoaWRlLnpmLmRyaWxsZG93bicsIFskZWxlbV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIHNwZWNpZmljIGRyaWxsZG93biAoc3ViKW1lbnUgbm8gbWF0dGVyIHdoaWNoIChzdWIpbWVudSBpbiBpdCBpcyBjdXJyZW50bHkgdmlzaWJsZS5cbiAgICogQ29tcGFyZWQgdG8gX3Nob3coKSB0aGlzIGxldHMgeW91IGp1bXAgaW50byBhbnkgc3VibWVudSB3aXRob3V0IGNsaWNraW5nIHRocm91Z2ggZXZlcnkgc3VibWVudSBvbiB0aGUgd2F5IHRvIGl0LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIERyaWxsZG93biNvcGVuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkZWxlbSAtIHRoZSB0YXJnZXQgKHN1YiltZW51IChgdWxgIHRhZylcbiAgICogQHBhcmFtIHtib29sZWFufSBhdXRvRm9jdXMgLSBpZiB0cnVlIHRoZSBmaXJzdCBsaW5rIGluIHRoZSB0YXJnZXQgKHN1YiltZW51IGdldHMgYXV0byBmb2N1c2VkXG4gICAqL1xuICBfc2hvd01lbnUoJGVsZW0sIGF1dG9Gb2N1cykge1xuXG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8vIFJlc2V0IGRyaWxsZG93blxuICAgIHZhciAkZXhwYW5kZWRTdWJtZW51cyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnbGlbYXJpYS1leHBhbmRlZD1cInRydWVcIl0gPiB1bFtkYXRhLXN1Ym1lbnVdJyk7XG4gICAgJGV4cGFuZGVkU3VibWVudXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIF90aGlzLl9zZXRIaWRlU3ViTWVudUNsYXNzZXMoJCh0aGlzKSk7XG4gICAgfSk7XG5cbiAgICAvLyBTYXZlIHRoZSBtZW51IGFzIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIG9uZS5cbiAgICB0aGlzLiRjdXJyZW50TWVudSA9ICRlbGVtO1xuXG4gICAgLy8gSWYgdGFyZ2V0IG1lbnUgaXMgcm9vdCwgZm9jdXMgZmlyc3QgbGluayAmIGV4aXRcbiAgICBpZiAoJGVsZW0uaXMoJ1tkYXRhLWRyaWxsZG93bl0nKSkge1xuICAgICAgaWYgKGF1dG9Gb2N1cyA9PT0gdHJ1ZSkgJGVsZW0uZmluZCgnbGkgPiBhJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvSGVpZ2h0KSB0aGlzLiR3cmFwcGVyLmNzcygnaGVpZ2h0JywgJGVsZW0uZGF0YSgnY2FsY0hlaWdodCcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGaW5kIGFsbCBzdWJtZW51cyBvbiB3YXkgdG8gcm9vdCBpbmNsLiB0aGUgZWxlbWVudCBpdHNlbGZcbiAgICB2YXIgJHN1Ym1lbnVzID0gJGVsZW0uY2hpbGRyZW4oKS5maXJzdCgpLnBhcmVudHNVbnRpbCgnW2RhdGEtZHJpbGxkb3duXScsICdbZGF0YS1zdWJtZW51XScpO1xuXG4gICAgLy8gT3BlbiB0YXJnZXQgbWVudSBhbmQgYWxsIHN1Ym1lbnVzIG9uIGl0cyB3YXkgdG8gcm9vdFxuICAgICRzdWJtZW51cy5lYWNoKGZ1bmN0aW9uKGluZGV4KSB7XG5cbiAgICAgIC8vIFVwZGF0ZSBoZWlnaHQgb2YgZmlyc3QgY2hpbGQgKHRhcmdldCBtZW51KSBpZiBhdXRvSGVpZ2h0IG9wdGlvbiB0cnVlXG4gICAgICBpZiAoaW5kZXggPT09IDAgJiYgX3RoaXMub3B0aW9ucy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgIF90aGlzLiR3cmFwcGVyLmNzcygnaGVpZ2h0JywgJCh0aGlzKS5kYXRhKCdjYWxjSGVpZ2h0JykpO1xuICAgICAgfVxuXG4gICAgICB2YXIgaXNMYXN0Q2hpbGQgPSBpbmRleCA9PT0gJHN1Ym1lbnVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIC8vIEFkZCB0cmFuc2l0aW9uc2VuZCBsaXN0ZW5lciB0byBsYXN0IGNoaWxkIChyb290IGR1ZSB0byByZXZlcnNlIG9yZGVyKSB0byBvcGVuIHRhcmdldCBtZW51J3MgZmlyc3QgbGlua1xuICAgICAgLy8gTGFzdCBjaGlsZCBtYWtlcyBzdXJlIHRoZSBldmVudCBnZXRzIGFsd2F5cyB0cmlnZ2VyZWQgZXZlbiBpZiBnb2luZyB0aHJvdWdoIHNldmVyYWwgbWVudXNcbiAgICAgIGlmIChpc0xhc3RDaGlsZCA9PT0gdHJ1ZSkge1xuICAgICAgICAkKHRoaXMpLm9uZSh0cmFuc2l0aW9uZW5kKCQodGhpcykpLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKGF1dG9Gb2N1cyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgJGVsZW0uZmluZCgnbGkgPiBhJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLl9zZXRTaG93U3ViTWVudUNsYXNzZXMoJCh0aGlzKSwgaXNMYXN0Q2hpbGQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgc3VibWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBEcmlsbGRvd24jb3BlblxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW0gLSB0aGUgY3VycmVudCBlbGVtZW50IHdpdGggYSBzdWJtZW51IHRvIG9wZW4sIGkuZS4gdGhlIGBsaWAgdGFnLlxuICAgKi9cbiAgX3Nob3coJGVsZW0pIHtcbiAgICBjb25zdCAkc3VibWVudSA9ICRlbGVtLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpO1xuXG4gICAgJGVsZW0uYXR0cignYXJpYS1leHBhbmRlZCcsIHRydWUpO1xuXG4gICAgdGhpcy4kY3VycmVudE1lbnUgPSAkc3VibWVudTtcblxuICAgIC8vaGlkZSBkcmlsbGRvd24gcGFyZW50IG1lbnUgd2hlbiBzdWJtZW51IGlzIG9wZW5cbiAgICAvLyB0aGlzIHJlbW92ZXMgaXQgZnJvbSB0aGUgZG9tIHNvIHRoYXQgdGhlIHRhYiBrZXkgd2lsbCB0YWtlIHRoZSB1c2VyIHRvIHRoZSBuZXh0IHZpc2libGUgZWxlbWVudFxuICAgICRlbGVtLnBhcmVudCgpLmNsb3Nlc3QoJ3VsJykuYWRkQ2xhc3MoJ2ludmlzaWJsZScpO1xuXG4gICAgLy8gYWRkIHZpc2libGUgY2xhc3MgdG8gc3VibWVudSB0byBvdmVycmlkZSBpbnZpc2libGUgY2xhc3MgYWJvdmVcbiAgICAkc3VibWVudS5hZGRDbGFzcygnaXMtYWN0aXZlIHZpc2libGUnKS5yZW1vdmVDbGFzcygnaW52aXNpYmxlJykuYXR0cignYXJpYS1oaWRkZW4nLCBmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9IZWlnaHQpIHtcbiAgICAgIHRoaXMuJHdyYXBwZXIuY3NzKHsgaGVpZ2h0OiAkc3VibWVudS5kYXRhKCdjYWxjSGVpZ2h0JykgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgc3VibWVudSBoYXMgb3BlbmVkLlxuICAgICAqIEBldmVudCBEcmlsbGRvd24jb3BlblxuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignb3Blbi56Zi5kcmlsbGRvd24nLCBbJGVsZW1dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyBhIHN1Ym1lbnVcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBEcmlsbGRvd24jaGlkZVxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW0gLSB0aGUgY3VycmVudCBzdWItbWVudSB0byBoaWRlLCBpLmUuIHRoZSBgdWxgIHRhZy5cbiAgICovXG4gIF9oaWRlKCRlbGVtKSB7XG4gICAgaWYodGhpcy5vcHRpb25zLmF1dG9IZWlnaHQpIHRoaXMuJHdyYXBwZXIuY3NzKHtoZWlnaHQ6JGVsZW0ucGFyZW50KCkuY2xvc2VzdCgndWwnKS5kYXRhKCdjYWxjSGVpZ2h0Jyl9KTtcbiAgICAkZWxlbS5wYXJlbnQoKS5jbG9zZXN0KCd1bCcpLnJlbW92ZUNsYXNzKCdpbnZpc2libGUnKTtcbiAgICAkZWxlbS5wYXJlbnQoJ2xpJykuYXR0cignYXJpYS1leHBhbmRlZCcsIGZhbHNlKTtcbiAgICAkZWxlbS5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgICRlbGVtLmFkZENsYXNzKCdpcy1jbG9zaW5nJylcbiAgICAgICAgIC5vbmUodHJhbnNpdGlvbmVuZCgkZWxlbSksIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICRlbGVtLnJlbW92ZUNsYXNzKCdpcy1hY3RpdmUgaXMtY2xvc2luZyB2aXNpYmxlJyk7XG4gICAgICAgICAgICRlbGVtLmJsdXIoKS5hZGRDbGFzcygnaW52aXNpYmxlJyk7XG4gICAgICAgICB9KTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBzdWJtZW51IGhhcyBjbG9zZWQuXG4gICAgICogQGV2ZW50IERyaWxsZG93biNoaWRlXG4gICAgICovXG4gICAgJGVsZW0udHJpZ2dlcignaGlkZS56Zi5kcmlsbGRvd24nLCBbJGVsZW1dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBuZXN0ZWQgbWVudXMgdG8gY2FsY3VsYXRlIHRoZSBtaW4taGVpZ2h0LCBhbmQgbWF4LXdpZHRoIGZvciB0aGUgbWVudS5cbiAgICogUHJldmVudHMgY29udGVudCBqdW1waW5nLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRNYXhEaW1zKCkge1xuICAgIHZhciBtYXhIZWlnaHQgPSAwLCByZXN1bHQgPSB7fSwgX3RoaXMgPSB0aGlzO1xuXG4gICAgLy8gUmVjYWxjdWxhdGUgbWVudSBoZWlnaHRzIGFuZCB0b3RhbCBtYXggaGVpZ2h0XG4gICAgdGhpcy4kc3VibWVudXMuYWRkKHRoaXMuJGVsZW1lbnQpLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgIHZhciBoZWlnaHQgPSBCb3guR2V0RGltZW5zaW9ucyh0aGlzKS5oZWlnaHQ7XG5cbiAgICAgIG1heEhlaWdodCA9IGhlaWdodCA+IG1heEhlaWdodCA/IGhlaWdodCA6IG1heEhlaWdodDtcblxuICAgICAgaWYoX3RoaXMub3B0aW9ucy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgICQodGhpcykuZGF0YSgnY2FsY0hlaWdodCcsaGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b0hlaWdodClcbiAgICAgIHJlc3VsdC5oZWlnaHQgPSB0aGlzLiRjdXJyZW50TWVudS5kYXRhKCdjYWxjSGVpZ2h0Jyk7XG4gICAgZWxzZVxuICAgICAgcmVzdWx0WydtaW4taGVpZ2h0J10gPSBgJHttYXhIZWlnaHR9cHhgO1xuXG4gICAgcmVzdWx0WydtYXgtd2lkdGgnXSA9IGAke3RoaXMuJGVsZW1lbnRbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGh9cHhgO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgRHJpbGxkb3duIE1lbnVcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBfZGVzdHJveSgpIHtcbiAgICAkKCdib2R5Jykub2ZmKCcuemYuZHJpbGxkb3duJyk7XG4gICAgaWYodGhpcy5vcHRpb25zLnNjcm9sbFRvcCkgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi5kcmlsbGRvd24nLHRoaXMuX2JpbmRIYW5kbGVyKTtcbiAgICB0aGlzLl9oaWRlQWxsKCk7XG5cdCAgdGhpcy4kZWxlbWVudC5vZmYoJ211dGF0ZW1lLnpmLnRyaWdnZXInKTtcbiAgICBOZXN0LkJ1cm4odGhpcy4kZWxlbWVudCwgJ2RyaWxsZG93bicpO1xuICAgIHRoaXMuJGVsZW1lbnQudW53cmFwKClcbiAgICAgICAgICAgICAgICAgLmZpbmQoJy5qcy1kcmlsbGRvd24tYmFjaywgLmlzLXN1Ym1lbnUtcGFyZW50LWl0ZW0nKS5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAuZW5kKCkuZmluZCgnLmlzLWFjdGl2ZSwgLmlzLWNsb3NpbmcsIC5pcy1kcmlsbGRvd24tc3VibWVudScpLnJlbW92ZUNsYXNzKCdpcy1hY3RpdmUgaXMtY2xvc2luZyBpcy1kcmlsbGRvd24tc3VibWVudScpLm9mZigndHJhbnNpdGlvbmVuZCBvdHJhbnNpdGlvbmVuZCB3ZWJraXRUcmFuc2l0aW9uRW5kJylcbiAgICAgICAgICAgICAgICAgLmVuZCgpLmZpbmQoJ1tkYXRhLXN1Ym1lbnVdJykucmVtb3ZlQXR0cignYXJpYS1oaWRkZW4gdGFiaW5kZXggcm9sZScpO1xuICAgIHRoaXMuJHN1Ym1lbnVBbmNob3JzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAkKHRoaXMpLm9mZignLnpmLmRyaWxsZG93bicpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1pcy1wYXJlbnQtbGlua10nKS5kZXRhY2goKTtcbiAgICB0aGlzLiRzdWJtZW51cy5yZW1vdmVDbGFzcygnZHJpbGxkb3duLXN1Ym1lbnUtY292ZXItcHJldmlvdXMgaW52aXNpYmxlJyk7XG5cbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2EnKS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgJGxpbmsgPSAkKHRoaXMpO1xuICAgICAgJGxpbmsucmVtb3ZlQXR0cigndGFiaW5kZXgnKTtcbiAgICAgIGlmKCRsaW5rLmRhdGEoJ3NhdmVkSHJlZicpKXtcbiAgICAgICAgJGxpbmsuYXR0cignaHJlZicsICRsaW5rLmRhdGEoJ3NhdmVkSHJlZicpKS5yZW1vdmVEYXRhKCdzYXZlZEhyZWYnKTtcbiAgICAgIH1lbHNlIHsgcmV0dXJuOyB9XG4gICAgfSk7XG4gIH07XG59XG5cbkRyaWxsZG93bi5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIERyaWxsZG93bnMgZGVwZW5kIG9uIHN0eWxlcyBpbiBvcmRlciB0byBmdW5jdGlvbiBwcm9wZXJseTsgaW4gdGhlIGRlZmF1bHQgYnVpbGQgb2YgRm91bmRhdGlvbiB0aGVzZSBhcmVcbiAgICogb24gdGhlIGBkcmlsbGRvd25gIGNsYXNzLiBUaGlzIG9wdGlvbiBhdXRvLWFwcGxpZXMgdGhpcyBjbGFzcyB0byB0aGUgZHJpbGxkb3duIHVwb24gaW5pdGlhbGl6YXRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGF1dG9BcHBseUNsYXNzOiB0cnVlLFxuICAvKipcbiAgICogTWFya3VwIHVzZWQgZm9yIEpTIGdlbmVyYXRlZCBiYWNrIGJ1dHRvbi4gUHJlcGVuZGVkICBvciBhcHBlbmRlZCAoc2VlIGJhY2tCdXR0b25Qb3NpdGlvbikgdG8gc3VibWVudSBsaXN0cyBhbmQgZGVsZXRlZCBvbiBgZGVzdHJveWAgbWV0aG9kLCAnanMtZHJpbGxkb3duLWJhY2snIGNsYXNzIHJlcXVpcmVkLiBSZW1vdmUgdGhlIGJhY2tzbGFzaCAoYFxcYCkgaWYgY29weSBhbmQgcGFzdGluZy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnPGxpIGNsYXNzPVwianMtZHJpbGxkb3duLWJhY2tcIj48YSB0YWJpbmRleD1cIjBcIj5CYWNrPC9hPjwvbGk+J1xuICAgKi9cbiAgYmFja0J1dHRvbjogJzxsaSBjbGFzcz1cImpzLWRyaWxsZG93bi1iYWNrXCI+PGEgdGFiaW5kZXg9XCIwXCI+QmFjazwvYT48L2xpPicsXG4gIC8qKlxuICAgKiBQb3NpdGlvbiB0aGUgYmFjayBidXR0b24gZWl0aGVyIGF0IHRoZSB0b3Agb3IgYm90dG9tIG9mIGRyaWxsZG93biBzdWJtZW51cy4gQ2FuIGJlIGAnbGVmdCdgIG9yIGAnYm90dG9tJ2AuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgdG9wXG4gICAqL1xuICBiYWNrQnV0dG9uUG9zaXRpb246ICd0b3AnLFxuICAvKipcbiAgICogTWFya3VwIHVzZWQgdG8gd3JhcCBkcmlsbGRvd24gbWVudS4gVXNlIGEgY2xhc3MgbmFtZSBmb3IgaW5kZXBlbmRlbnQgc3R5bGluZzsgdGhlIEpTIGFwcGxpZWQgY2xhc3M6IGBpcy1kcmlsbGRvd25gIGlzIHJlcXVpcmVkLiBSZW1vdmUgdGhlIGJhY2tzbGFzaCAoYFxcYCkgaWYgY29weSBhbmQgcGFzdGluZy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnPGRpdj48L2Rpdj4nXG4gICAqL1xuICB3cmFwcGVyOiAnPGRpdj48L2Rpdj4nLFxuICAvKipcbiAgICogQWRkcyB0aGUgcGFyZW50IGxpbmsgdG8gdGhlIHN1Ym1lbnUuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwYXJlbnRMaW5rOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93IHRoZSBtZW51IHRvIHJldHVybiB0byByb290IGxpc3Qgb24gYm9keSBjbGljay5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNsb3NlT25DbGljazogZmFsc2UsXG4gIC8qKlxuICAgKiBBbGxvdyB0aGUgbWVudSB0byBhdXRvIGFkanVzdCBoZWlnaHQuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvSGVpZ2h0OiBmYWxzZSxcbiAgLyoqXG4gICAqIEFuaW1hdGUgdGhlIGF1dG8gYWRqdXN0IGhlaWdodC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGFuaW1hdGVIZWlnaHQ6IGZhbHNlLFxuICAvKipcbiAgICogU2Nyb2xsIHRvIHRoZSB0b3Agb2YgdGhlIG1lbnUgYWZ0ZXIgb3BlbmluZyBhIHN1Ym1lbnUgb3IgbmF2aWdhdGluZyBiYWNrIHVzaW5nIHRoZSBtZW51IGJhY2sgYnV0dG9uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzY3JvbGxUb3A6IGZhbHNlLFxuICAvKipcbiAgICogU3RyaW5nIGpxdWVyeSBzZWxlY3RvciAoZm9yIGV4YW1wbGUgJ2JvZHknKSBvZiBlbGVtZW50IHRvIHRha2Ugb2Zmc2V0KCkudG9wIGZyb20sIGlmIGVtcHR5IHN0cmluZyB0aGUgZHJpbGxkb3duIG1lbnUgb2Zmc2V0KCkudG9wIGlzIHRha2VuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIHNjcm9sbFRvcEVsZW1lbnQ6ICcnLFxuICAvKipcbiAgICogU2Nyb2xsVG9wIG9mZnNldFxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHNjcm9sbFRvcE9mZnNldDogMCxcbiAgLyoqXG4gICAqIFNjcm9sbCBhbmltYXRpb24gZHVyYXRpb25cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCA1MDBcbiAgICovXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiA1MDAsXG4gIC8qKlxuICAgKiBTY3JvbGwgYW5pbWF0aW9uIGVhc2luZy4gQ2FuIGJlIGAnc3dpbmcnYCBvciBgJ2xpbmVhcidgLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vYW5pbWF0ZXxKUXVlcnkgYW5pbWF0ZX1cbiAgICogQGRlZmF1bHQgJ3N3aW5nJ1xuICAgKi9cbiAgYW5pbWF0aW9uRWFzaW5nOiAnc3dpbmcnXG4gIC8vIGhvbGRPcGVuOiBmYWxzZVxufTtcblxuY29uc3QgUE9TSVRJT05TID0gWydsZWZ0JywgJ3JpZ2h0JywgJ3RvcCcsICdib3R0b20nXTtcbmNvbnN0IFZFUlRJQ0FMX0FMSUdOTUVOVFMgPSBbJ3RvcCcsICdib3R0b20nLCAnY2VudGVyJ107XG5jb25zdCBIT1JJWk9OVEFMX0FMSUdOTUVOVFMgPSBbJ2xlZnQnLCAncmlnaHQnLCAnY2VudGVyJ107XG5cbmNvbnN0IEFMSUdOTUVOVFMgPSB7XG4gICdsZWZ0JzogVkVSVElDQUxfQUxJR05NRU5UUyxcbiAgJ3JpZ2h0JzogVkVSVElDQUxfQUxJR05NRU5UUyxcbiAgJ3RvcCc6IEhPUklaT05UQUxfQUxJR05NRU5UUyxcbiAgJ2JvdHRvbSc6IEhPUklaT05UQUxfQUxJR05NRU5UU1xufTtcblxuZnVuY3Rpb24gbmV4dEl0ZW0oaXRlbSwgYXJyYXkpIHtcbiAgdmFyIGN1cnJlbnRJZHggPSBhcnJheS5pbmRleE9mKGl0ZW0pO1xuICBpZihjdXJyZW50SWR4ID09PSBhcnJheS5sZW5ndGggLSAxKSB7XG4gICAgcmV0dXJuIGFycmF5WzBdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhcnJheVtjdXJyZW50SWR4ICsgMV07XG4gIH1cbn1cblxuXG5jbGFzcyBQb3NpdGlvbmFibGUgZXh0ZW5kcyBQbHVnaW4ge1xuICAvKipcbiAgICogQWJzdHJhY3QgY2xhc3MgZW5jYXBzdWxhdGluZyB0aGUgdGV0aGVyLWxpa2UgZXhwbGljaXQgcG9zaXRpb25pbmcgbG9naWNcbiAgICogaW5jbHVkaW5nIHJlcG9zaXRpb25pbmcgYmFzZWQgb24gb3ZlcmxhcC5cbiAgICogRXhwZWN0cyBjbGFzc2VzIHRvIGRlZmluZSBkZWZhdWx0cyBmb3Igdk9mZnNldCwgaE9mZnNldCwgcG9zaXRpb24sXG4gICAqIGFsaWdubWVudCwgYWxsb3dPdmVybGFwLCBhbmQgYWxsb3dCb3R0b21PdmVybGFwLiBUaGV5IGNhbiBkbyB0aGlzIGJ5XG4gICAqIGV4dGVuZGluZyB0aGUgZGVmYXVsdHMsIG9yIChmb3Igbm93IHJlY29tbWVuZGVkIGR1ZSB0byB0aGUgd2F5IGRvY3MgYXJlXG4gICAqIGdlbmVyYXRlZCkgYnkgZXhwbGljaXRseSBkZWNsYXJpbmcgdGhlbS5cbiAgICpcbiAgICoqL1xuXG4gIF9pbml0KCkge1xuICAgIHRoaXMudHJpZWRQb3NpdGlvbnMgPSB7fTtcbiAgICB0aGlzLnBvc2l0aW9uICA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9PT0gJ2F1dG8nID8gdGhpcy5fZ2V0RGVmYXVsdFBvc2l0aW9uKCkgOiB0aGlzLm9wdGlvbnMucG9zaXRpb247XG4gICAgdGhpcy5hbGlnbm1lbnQgPSB0aGlzLm9wdGlvbnMuYWxpZ25tZW50ID09PSAnYXV0bycgPyB0aGlzLl9nZXREZWZhdWx0QWxpZ25tZW50KCkgOiB0aGlzLm9wdGlvbnMuYWxpZ25tZW50O1xuICAgIHRoaXMub3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XG4gICAgdGhpcy5vcmlnaW5hbEFsaWdubWVudCA9IHRoaXMuYWxpZ25tZW50O1xuICB9XG5cbiAgX2dldERlZmF1bHRQb3NpdGlvbiAoKSB7XG4gICAgcmV0dXJuICdib3R0b20nO1xuICB9XG5cbiAgX2dldERlZmF1bHRBbGlnbm1lbnQoKSB7XG4gICAgc3dpdGNoKHRoaXMucG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICByZXR1cm4gcnRsKCkgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIHJldHVybiAnYm90dG9tJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0cyB0aGUgcG9zaXRpb25hYmxlIHBvc3NpYmxlIHBvc2l0aW9ucyBieSBpdGVyYXRpbmcgdGhyb3VnaCBhbGlnbm1lbnRzXG4gICAqIGFuZCBwb3NpdGlvbnMuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlcG9zaXRpb24oKSB7XG4gICAgaWYodGhpcy5fYWxpZ25tZW50c0V4aGF1c3RlZCh0aGlzLnBvc2l0aW9uKSkge1xuICAgICAgdGhpcy5wb3NpdGlvbiA9IG5leHRJdGVtKHRoaXMucG9zaXRpb24sIFBPU0lUSU9OUyk7XG4gICAgICB0aGlzLmFsaWdubWVudCA9IEFMSUdOTUVOVFNbdGhpcy5wb3NpdGlvbl1bMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JlYWxpZ24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0cyB0aGUgZHJvcGRvd24gcGFuZSBwb3NzaWJsZSBwb3NpdGlvbnMgYnkgaXRlcmF0aW5nIHRocm91Z2ggYWxpZ25tZW50c1xuICAgKiBvbiB0aGUgY3VycmVudCBwb3NpdGlvbi5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVhbGlnbigpIHtcbiAgICB0aGlzLl9hZGRUcmllZFBvc2l0aW9uKHRoaXMucG9zaXRpb24sIHRoaXMuYWxpZ25tZW50KTtcbiAgICB0aGlzLmFsaWdubWVudCA9IG5leHRJdGVtKHRoaXMuYWxpZ25tZW50LCBBTElHTk1FTlRTW3RoaXMucG9zaXRpb25dKTtcbiAgfVxuXG4gIF9hZGRUcmllZFBvc2l0aW9uKHBvc2l0aW9uLCBhbGlnbm1lbnQpIHtcbiAgICB0aGlzLnRyaWVkUG9zaXRpb25zW3Bvc2l0aW9uXSA9IHRoaXMudHJpZWRQb3NpdGlvbnNbcG9zaXRpb25dIHx8IFtdO1xuICAgIHRoaXMudHJpZWRQb3NpdGlvbnNbcG9zaXRpb25dLnB1c2goYWxpZ25tZW50KTtcbiAgfVxuXG4gIF9wb3NpdGlvbnNFeGhhdXN0ZWQoKSB7XG4gICAgdmFyIGlzRXhoYXVzdGVkID0gdHJ1ZTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgUE9TSVRJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpc0V4aGF1c3RlZCA9IGlzRXhoYXVzdGVkICYmIHRoaXMuX2FsaWdubWVudHNFeGhhdXN0ZWQoUE9TSVRJT05TW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzRXhoYXVzdGVkO1xuICB9XG5cbiAgX2FsaWdubWVudHNFeGhhdXN0ZWQocG9zaXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy50cmllZFBvc2l0aW9uc1twb3NpdGlvbl0gJiYgdGhpcy50cmllZFBvc2l0aW9uc1twb3NpdGlvbl0ubGVuZ3RoID09PSBBTElHTk1FTlRTW3Bvc2l0aW9uXS5sZW5ndGg7XG4gIH1cblxuXG4gIC8vIFdoZW4gd2UncmUgdHJ5aW5nIHRvIGNlbnRlciwgd2UgZG9uJ3Qgd2FudCB0byBhcHBseSBvZmZzZXQgdGhhdCdzIGdvaW5nIHRvXG4gIC8vIHRha2UgdXMganVzdCBvZmYgY2VudGVyLCBzbyB3cmFwIGFyb3VuZCB0byByZXR1cm4gMCBmb3IgdGhlIGFwcHJvcHJpYXRlXG4gIC8vIG9mZnNldCBpbiB0aG9zZSBhbGlnbm1lbnRzLiAgVE9ETzogRmlndXJlIG91dCBpZiB3ZSB3YW50IHRvIG1ha2UgdGhpc1xuICAvLyBjb25maWd1cmFibGUgYmVoYXZpb3IuLi4gaXQgZmVlbHMgbW9yZSBpbnR1aXRpdmUsIGVzcGVjaWFsbHkgZm9yIHRvb2x0aXBzLCBidXRcbiAgLy8gaXQncyBwb3NzaWJsZSBzb21lb25lIG1pZ2h0IGFjdHVhbGx5IHdhbnQgdG8gc3RhcnQgZnJvbSBjZW50ZXIgYW5kIHRoZW4gbnVkZ2VcbiAgLy8gc2xpZ2h0bHkgb2ZmLlxuICBfZ2V0Vk9mZnNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZPZmZzZXQ7XG4gIH1cblxuICBfZ2V0SE9mZnNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmhPZmZzZXQ7XG4gIH1cblxuICBfc2V0UG9zaXRpb24oJGFuY2hvciwgJGVsZW1lbnQsICRwYXJlbnQpIHtcbiAgICBpZigkYW5jaG9yLmF0dHIoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ2ZhbHNlJyl7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuYWxsb3dPdmVybGFwKSB7XG4gICAgICAvLyByZXN0b3JlIG9yaWdpbmFsIHBvc2l0aW9uICYgYWxpZ25tZW50IGJlZm9yZSBjaGVja2luZyBvdmVybGFwXG4gICAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5vcmlnaW5hbFBvc2l0aW9uO1xuICAgICAgdGhpcy5hbGlnbm1lbnQgPSB0aGlzLm9yaWdpbmFsQWxpZ25tZW50O1xuICAgIH1cblxuICAgICRlbGVtZW50Lm9mZnNldChCb3guR2V0RXhwbGljaXRPZmZzZXRzKCRlbGVtZW50LCAkYW5jaG9yLCB0aGlzLnBvc2l0aW9uLCB0aGlzLmFsaWdubWVudCwgdGhpcy5fZ2V0Vk9mZnNldCgpLCB0aGlzLl9nZXRIT2Zmc2V0KCkpKTtcblxuICAgIGlmKCF0aGlzLm9wdGlvbnMuYWxsb3dPdmVybGFwKSB7XG4gICAgICB2YXIgbWluT3ZlcmxhcCA9IDEwMDAwMDAwMDtcbiAgICAgIC8vIGRlZmF1bHQgY29vcmRpbmF0ZXMgdG8gaG93IHdlIHN0YXJ0LCBpbiBjYXNlIHdlIGNhbid0IGZpZ3VyZSBvdXQgYmV0dGVyXG4gICAgICB2YXIgbWluQ29vcmRpbmF0ZXMgPSB7cG9zaXRpb246IHRoaXMucG9zaXRpb24sIGFsaWdubWVudDogdGhpcy5hbGlnbm1lbnR9O1xuICAgICAgd2hpbGUoIXRoaXMuX3Bvc2l0aW9uc0V4aGF1c3RlZCgpKSB7XG4gICAgICAgIGxldCBvdmVybGFwID0gQm94Lk92ZXJsYXBBcmVhKCRlbGVtZW50LCAkcGFyZW50LCBmYWxzZSwgZmFsc2UsIHRoaXMub3B0aW9ucy5hbGxvd0JvdHRvbU92ZXJsYXApO1xuICAgICAgICBpZihvdmVybGFwID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYob3ZlcmxhcCA8IG1pbk92ZXJsYXApIHtcbiAgICAgICAgICBtaW5PdmVybGFwID0gb3ZlcmxhcDtcbiAgICAgICAgICBtaW5Db29yZGluYXRlcyA9IHtwb3NpdGlvbjogdGhpcy5wb3NpdGlvbiwgYWxpZ25tZW50OiB0aGlzLmFsaWdubWVudH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZXBvc2l0aW9uKCk7XG5cbiAgICAgICAgJGVsZW1lbnQub2Zmc2V0KEJveC5HZXRFeHBsaWNpdE9mZnNldHMoJGVsZW1lbnQsICRhbmNob3IsIHRoaXMucG9zaXRpb24sIHRoaXMuYWxpZ25tZW50LCB0aGlzLl9nZXRWT2Zmc2V0KCksIHRoaXMuX2dldEhPZmZzZXQoKSkpO1xuICAgICAgfVxuICAgICAgLy8gSWYgd2UgZ2V0IHRocm91Z2ggdGhlIGVudGlyZSBsb29wLCB0aGVyZSB3YXMgbm8gbm9uLW92ZXJsYXBwaW5nXG4gICAgICAvLyBwb3NpdGlvbiBhdmFpbGFibGUuIFBpY2sgdGhlIHZlcnNpb24gd2l0aCBsZWFzdCBvdmVybGFwLlxuICAgICAgdGhpcy5wb3NpdGlvbiA9IG1pbkNvb3JkaW5hdGVzLnBvc2l0aW9uO1xuICAgICAgdGhpcy5hbGlnbm1lbnQgPSBtaW5Db29yZGluYXRlcy5hbGlnbm1lbnQ7XG4gICAgICAkZWxlbWVudC5vZmZzZXQoQm94LkdldEV4cGxpY2l0T2Zmc2V0cygkZWxlbWVudCwgJGFuY2hvciwgdGhpcy5wb3NpdGlvbiwgdGhpcy5hbGlnbm1lbnQsIHRoaXMuX2dldFZPZmZzZXQoKSwgdGhpcy5fZ2V0SE9mZnNldCgpKSk7XG4gICAgfVxuICB9XG5cbn1cblxuUG9zaXRpb25hYmxlLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogUG9zaXRpb24gb2YgcG9zaXRpb25hYmxlIHJlbGF0aXZlIHRvIGFuY2hvci4gQ2FuIGJlIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgb3IgYXV0by5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHBvc2l0aW9uOiAnYXV0bycsXG4gIC8qKlxuICAgKiBBbGlnbm1lbnQgb2YgcG9zaXRpb25hYmxlIHJlbGF0aXZlIHRvIGFuY2hvci4gQ2FuIGJlIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgY2VudGVyLCBvciBhdXRvLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgYWxpZ25tZW50OiAnYXV0bycsXG4gIC8qKlxuICAgKiBBbGxvdyBvdmVybGFwIG9mIGNvbnRhaW5lci93aW5kb3cuIElmIGZhbHNlLCBkcm9wZG93biBwb3NpdGlvbmFibGUgZmlyc3RcbiAgICogdHJ5IHRvIHBvc2l0aW9uIGFzIGRlZmluZWQgYnkgZGF0YS1wb3NpdGlvbiBhbmQgZGF0YS1hbGlnbm1lbnQsIGJ1dFxuICAgKiByZXBvc2l0aW9uIGlmIGl0IHdvdWxkIGNhdXNlIGFuIG92ZXJmbG93LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYWxsb3dPdmVybGFwOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93IG92ZXJsYXAgb2Ygb25seSB0aGUgYm90dG9tIG9mIHRoZSBjb250YWluZXIuIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uXG4gICAqIGJlaGF2aW9yIGZvciBkcm9wZG93bnMsIGFsbG93aW5nIHRoZSBkcm9wZG93biB0byBleHRlbmQgdGhlIGJvdHRvbSBvZiB0aGVcbiAgICogc2NyZWVuIGJ1dCBub3Qgb3RoZXJ3aXNlIGluZmx1ZW5jZSBvciBicmVhayBvdXQgb2YgdGhlIGNvbnRhaW5lci5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYWxsb3dCb3R0b21PdmVybGFwOiB0cnVlLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHBpeGVscyB0aGUgcG9zaXRpb25hYmxlIHNob3VsZCBiZSBzZXBhcmF0ZWQgdmVydGljYWxseSBmcm9tIGFuY2hvclxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHZPZmZzZXQ6IDAsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcGl4ZWxzIHRoZSBwb3NpdGlvbmFibGUgc2hvdWxkIGJlIHNlcGFyYXRlZCBob3Jpem9udGFsbHkgZnJvbSBhbmNob3JcbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBoT2Zmc2V0OiAwLFxufTtcblxuLyoqXG4gKiBEcm9wZG93biBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24uZHJvcGRvd25cbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwuYm94XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLnRvdWNoXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLnRyaWdnZXJzXG4gKi9cbmNsYXNzIERyb3Bkb3duIGV4dGVuZHMgUG9zaXRpb25hYmxlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYSBkcm9wZG93bi5cbiAgICogQGNsYXNzXG4gICAqIEBuYW1lIERyb3Bkb3duXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYSBkcm9wZG93bi5cbiAgICogICAgICAgIE9iamVjdCBzaG91bGQgYmUgb2YgdGhlIGRyb3Bkb3duIHBhbmVsLCByYXRoZXIgdGhhbiBpdHMgYW5jaG9yLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBfc2V0dXAoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBEcm9wZG93bi5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuICAgIHRoaXMuY2xhc3NOYW1lID0gJ0Ryb3Bkb3duJzsgLy8gaWU5IGJhY2sgY29tcGF0XG5cbiAgICAvLyBUb3VjaCBhbmQgVHJpZ2dlcnMgaW5pdCBhcmUgaWRlbXBvdGVudCwganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBpbml0aWFsaXplZFxuICAgIFRvdWNoLmluaXQoJCk7XG4gICAgVHJpZ2dlcnMuaW5pdCgkKTtcblxuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEtleWJvYXJkLnJlZ2lzdGVyKCdEcm9wZG93bicsIHtcbiAgICAgICdFTlRFUic6ICd0b2dnbGUnLFxuICAgICAgJ1NQQUNFJzogJ3RvZ2dsZScsXG4gICAgICAnRVNDQVBFJzogJ2Nsb3NlJ1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBwbHVnaW4gYnkgc2V0dGluZy9jaGVja2luZyBvcHRpb25zIGFuZCBhdHRyaWJ1dGVzLCBhZGRpbmcgaGVscGVyIHZhcmlhYmxlcywgYW5kIHNhdmluZyB0aGUgYW5jaG9yLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciAkaWQgPSB0aGlzLiRlbGVtZW50LmF0dHIoJ2lkJyk7XG5cbiAgICB0aGlzLiRhbmNob3JzID0gJChgW2RhdGEtdG9nZ2xlPVwiJHskaWR9XCJdYCkubGVuZ3RoID8gJChgW2RhdGEtdG9nZ2xlPVwiJHskaWR9XCJdYCkgOiAkKGBbZGF0YS1vcGVuPVwiJHskaWR9XCJdYCk7XG4gICAgdGhpcy4kYW5jaG9ycy5hdHRyKHtcbiAgICAgICdhcmlhLWNvbnRyb2xzJzogJGlkLFxuICAgICAgJ2RhdGEtaXMtZm9jdXMnOiBmYWxzZSxcbiAgICAgICdkYXRhLXlldGktYm94JzogJGlkLFxuICAgICAgJ2FyaWEtaGFzcG9wdXAnOiB0cnVlLFxuICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgdGhpcy5fc2V0Q3VycmVudEFuY2hvcih0aGlzLiRhbmNob3JzLmZpcnN0KCkpO1xuXG4gICAgaWYodGhpcy5vcHRpb25zLnBhcmVudENsYXNzKXtcbiAgICAgIHRoaXMuJHBhcmVudCA9IHRoaXMuJGVsZW1lbnQucGFyZW50cygnLicgKyB0aGlzLm9wdGlvbnMucGFyZW50Q2xhc3MpO1xuICAgIH1lbHNlIHtcbiAgICAgIHRoaXMuJHBhcmVudCA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2V0IFthcmlhLWxhYmVsbGVkYnldIG9uIHRoZSBEcm9wZG93biBpZiBpdCBpcyBub3Qgc2V0XG4gICAgaWYgKHR5cGVvZiB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtbGFiZWxsZWRieScpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gR2V0IHRoZSBhbmNob3IgSUQgb3IgY3JlYXRlIG9uZVxuICAgICAgaWYgKHR5cGVvZiB0aGlzLiRjdXJyZW50QW5jaG9yLmF0dHIoJ2lkJykgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuJGN1cnJlbnRBbmNob3IuYXR0cignaWQnLCBHZXRZb0RpZ2l0cyg2LCAnZGQtYW5jaG9yJykpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtbGFiZWxsZWRieScsIHRoaXMuJGN1cnJlbnRBbmNob3IuYXR0cignaWQnKSk7XG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKHtcbiAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJyxcbiAgICAgICdkYXRhLXlldGktYm94JzogJGlkLFxuICAgICAgJ2RhdGEtcmVzaXplJzogJGlkLFxuICAgIH0pO1xuXG4gICAgc3VwZXIuX2luaXQoKTtcbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgfVxuXG4gIF9nZXREZWZhdWx0UG9zaXRpb24oKSB7XG4gICAgLy8gaGFuZGxlIGxlZ2FjeSBjbGFzc25hbWVzXG4gICAgdmFyIHBvc2l0aW9uID0gdGhpcy4kZWxlbWVudFswXS5jbGFzc05hbWUubWF0Y2goLyh0b3B8bGVmdHxyaWdodHxib3R0b20pL2cpO1xuICAgIGlmKHBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gcG9zaXRpb25bMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnYm90dG9tJ1xuICAgIH1cbiAgfVxuXG4gIF9nZXREZWZhdWx0QWxpZ25tZW50KCkge1xuICAgIC8vIGhhbmRsZSBsZWdhY3kgZmxvYXQgYXBwcm9hY2hcbiAgICB2YXIgaG9yaXpvbnRhbFBvc2l0aW9uID0gL2Zsb2F0LShcXFMrKS8uZXhlYyh0aGlzLiRjdXJyZW50QW5jaG9yLmF0dHIoJ2NsYXNzJykpO1xuICAgIGlmKGhvcml6b250YWxQb3NpdGlvbikge1xuICAgICAgcmV0dXJuIGhvcml6b250YWxQb3NpdGlvblsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuX2dldERlZmF1bHRBbGlnbm1lbnQoKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogU2V0cyB0aGUgcG9zaXRpb24gYW5kIG9yaWVudGF0aW9uIG9mIHRoZSBkcm9wZG93biBwYW5lLCBjaGVja3MgZm9yIGNvbGxpc2lvbnMgaWYgYWxsb3ctb3ZlcmxhcCBpcyBub3QgdHJ1ZS5cbiAgICogUmVjdXJzaXZlbHkgY2FsbHMgaXRzZWxmIGlmIGEgY29sbGlzaW9uIGlzIGRldGVjdGVkLCB3aXRoIGEgbmV3IHBvc2l0aW9uIGNsYXNzLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRQb3NpdGlvbigpIHtcbiAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGBoYXMtcG9zaXRpb24tJHt0aGlzLnBvc2l0aW9ufSBoYXMtYWxpZ25tZW50LSR7dGhpcy5hbGlnbm1lbnR9YCk7XG4gICAgc3VwZXIuX3NldFBvc2l0aW9uKHRoaXMuJGN1cnJlbnRBbmNob3IsIHRoaXMuJGVsZW1lbnQsIHRoaXMuJHBhcmVudCk7XG4gICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcyhgaGFzLXBvc2l0aW9uLSR7dGhpcy5wb3NpdGlvbn0gaGFzLWFsaWdubWVudC0ke3RoaXMuYWxpZ25tZW50fWApO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgaXQgYSBjdXJyZW50IGFuY2hvci5cbiAgICogQ3VycmVudCBhbmNob3IgYXMgdGhlIHJlZmVyZW5jZSBmb3IgdGhlIHBvc2l0aW9uIG9mIERyb3Bkb3duIHBhbmVzLlxuICAgKiBAcGFyYW0ge0hUTUx9IGVsIC0gRE9NIGVsZW1lbnQgb2YgdGhlIGFuY2hvci5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0Q3VycmVudEFuY2hvcihlbCkge1xuICAgIHRoaXMuJGN1cnJlbnRBbmNob3IgPSAkKGVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGxpc3RlbmVycyB0byB0aGUgZWxlbWVudCB1dGlsaXppbmcgdGhlIHRyaWdnZXJzIHV0aWxpdHkgbGlicmFyeS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgIGhhc1RvdWNoID0gJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8ICh0eXBlb2Ygd2luZG93Lm9udG91Y2hzdGFydCAhPT0gJ3VuZGVmaW5lZCcpO1xuXG4gICAgdGhpcy4kZWxlbWVudC5vbih7XG4gICAgICAnb3Blbi56Zi50cmlnZ2VyJzogdGhpcy5vcGVuLmJpbmQodGhpcyksXG4gICAgICAnY2xvc2UuemYudHJpZ2dlcic6IHRoaXMuY2xvc2UuYmluZCh0aGlzKSxcbiAgICAgICd0b2dnbGUuemYudHJpZ2dlcic6IHRoaXMudG9nZ2xlLmJpbmQodGhpcyksXG4gICAgICAncmVzaXplbWUuemYudHJpZ2dlcic6IHRoaXMuX3NldFBvc2l0aW9uLmJpbmQodGhpcylcbiAgICB9KTtcblxuICAgIHRoaXMuJGFuY2hvcnMub2ZmKCdjbGljay56Zi50cmlnZ2VyJylcbiAgICAgIC5vbignY2xpY2suemYudHJpZ2dlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgX3RoaXMuX3NldEN1cnJlbnRBbmNob3IodGhpcyk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIGlmIGZvcmNlRm9sbG93IGZhbHNlLCBhbHdheXMgcHJldmVudCBkZWZhdWx0IGFjdGlvblxuICAgICAgICAgIChfdGhpcy5vcHRpb25zLmZvcmNlRm9sbG93ID09PSBmYWxzZSkgfHxcbiAgICAgICAgICAvLyBpZiBmb3JjZUZvbGxvdyB0cnVlIGFuZCBob3ZlciBvcHRpb24gdHJ1ZSwgb25seSBwcmV2ZW50IGRlZmF1bHQgYWN0aW9uIG9uIDFzdCBjbGlja1xuICAgICAgICAgIC8vIG9uIDJuZCBjbGljayAoZHJvcG93biBvcGVuZWQpIHRoZSBkZWZhdWx0IGFjdGlvbiAoZS5nLiBmb2xsb3cgYSBocmVmKSBnZXRzIGV4ZWN1dGVkXG4gICAgICAgICAgKGhhc1RvdWNoICYmIF90aGlzLm9wdGlvbnMuaG92ZXIgJiYgX3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2lzLW9wZW4nKSA9PT0gZmFsc2UpXG4gICAgICAgICkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYodGhpcy5vcHRpb25zLmhvdmVyKXtcbiAgICAgIHRoaXMuJGFuY2hvcnMub2ZmKCdtb3VzZWVudGVyLnpmLmRyb3Bkb3duIG1vdXNlbGVhdmUuemYuZHJvcGRvd24nKVxuICAgICAgLm9uKCdtb3VzZWVudGVyLnpmLmRyb3Bkb3duJywgZnVuY3Rpb24oKXtcbiAgICAgICAgX3RoaXMuX3NldEN1cnJlbnRBbmNob3IodGhpcyk7XG5cbiAgICAgICAgdmFyIGJvZHlEYXRhID0gJCgnYm9keScpLmRhdGEoKTtcbiAgICAgICAgaWYodHlwZW9mKGJvZHlEYXRhLndoYXRpbnB1dCkgPT09ICd1bmRlZmluZWQnIHx8IGJvZHlEYXRhLndoYXRpbnB1dCA9PT0gJ21vdXNlJykge1xuICAgICAgICAgIGNsZWFyVGltZW91dChfdGhpcy50aW1lb3V0KTtcbiAgICAgICAgICBfdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgX3RoaXMub3BlbigpO1xuICAgICAgICAgICAgX3RoaXMuJGFuY2hvcnMuZGF0YSgnaG92ZXInLCB0cnVlKTtcbiAgICAgICAgICB9LCBfdGhpcy5vcHRpb25zLmhvdmVyRGVsYXkpO1xuICAgICAgICB9XG4gICAgICB9KS5vbignbW91c2VsZWF2ZS56Zi5kcm9wZG93bicsIGlnbm9yZU1vdXNlZGlzYXBwZWFyKGZ1bmN0aW9uKCl7XG4gICAgICAgIGNsZWFyVGltZW91dChfdGhpcy50aW1lb3V0KTtcbiAgICAgICAgX3RoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgICAgIF90aGlzLiRhbmNob3JzLmRhdGEoJ2hvdmVyJywgZmFsc2UpO1xuICAgICAgICB9LCBfdGhpcy5vcHRpb25zLmhvdmVyRGVsYXkpO1xuICAgICAgfSkpO1xuICAgICAgaWYodGhpcy5vcHRpb25zLmhvdmVyUGFuZSl7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdtb3VzZWVudGVyLnpmLmRyb3Bkb3duIG1vdXNlbGVhdmUuemYuZHJvcGRvd24nKVxuICAgICAgICAgICAgLm9uKCdtb3VzZWVudGVyLnpmLmRyb3Bkb3duJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnRpbWVvdXQpO1xuICAgICAgICAgICAgfSkub24oJ21vdXNlbGVhdmUuemYuZHJvcGRvd24nLCBpZ25vcmVNb3VzZWRpc2FwcGVhcihmdW5jdGlvbigpe1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMudGltZW91dCk7XG4gICAgICAgICAgICAgIF90aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgX3RoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBfdGhpcy4kYW5jaG9ycy5kYXRhKCdob3ZlcicsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfSwgX3RoaXMub3B0aW9ucy5ob3ZlckRlbGF5KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy4kYW5jaG9ycy5hZGQodGhpcy4kZWxlbWVudCkub24oJ2tleWRvd24uemYuZHJvcGRvd24nLCBmdW5jdGlvbihlKSB7XG5cbiAgICAgIHZhciAkdGFyZ2V0ID0gJCh0aGlzKTtcblxuICAgICAgS2V5Ym9hcmQuaGFuZGxlS2V5KGUsICdEcm9wZG93bicsIHtcbiAgICAgICAgb3BlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCR0YXJnZXQuaXMoX3RoaXMuJGFuY2hvcnMpICYmICEkdGFyZ2V0LmlzKCdpbnB1dCwgdGV4dGFyZWEnKSkge1xuICAgICAgICAgICAgX3RoaXMub3BlbigpO1xuICAgICAgICAgICAgX3RoaXMuJGVsZW1lbnQuYXR0cigndGFiaW5kZXgnLCAtMSkuZm9jdXMoKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgICAgIF90aGlzLiRhbmNob3JzLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgYm9keSB0byBjbG9zZSBhbnkgZHJvcGRvd25zIG9uIGEgY2xpY2suXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZEJvZHlIYW5kbGVyKCkge1xuICAgICB2YXIgJGJvZHkgPSAkKGRvY3VtZW50LmJvZHkpLm5vdCh0aGlzLiRlbGVtZW50KSxcbiAgICAgICAgIF90aGlzID0gdGhpcztcbiAgICAgJGJvZHkub2ZmKCdjbGljay56Zi5kcm9wZG93biB0YXAuemYuZHJvcGRvd24nKVxuICAgICAgICAgIC5vbignY2xpY2suemYuZHJvcGRvd24gdGFwLnpmLmRyb3Bkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGlmKF90aGlzLiRhbmNob3JzLmlzKGUudGFyZ2V0KSB8fCBfdGhpcy4kYW5jaG9ycy5maW5kKGUudGFyZ2V0KS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoX3RoaXMuJGVsZW1lbnQuaXMoZS50YXJnZXQpIHx8IF90aGlzLiRlbGVtZW50LmZpbmQoZS50YXJnZXQpLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgJGJvZHkub2ZmKCdjbGljay56Zi5kcm9wZG93biB0YXAuemYuZHJvcGRvd24nKTtcbiAgICAgICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgZHJvcGRvd24gcGFuZSwgYW5kIGZpcmVzIGEgYnViYmxpbmcgZXZlbnQgdG8gY2xvc2Ugb3RoZXIgZHJvcGRvd25zLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIERyb3Bkb3duI2Nsb3NlbWVcbiAgICogQGZpcmVzIERyb3Bkb3duI3Nob3dcbiAgICovXG4gIG9wZW4oKSB7XG4gICAgLy8gdmFyIF90aGlzID0gdGhpcztcbiAgICAvKipcbiAgICAgKiBGaXJlcyB0byBjbG9zZSBvdGhlciBvcGVuIGRyb3Bkb3ducywgdHlwaWNhbGx5IHdoZW4gZHJvcGRvd24gaXMgb3BlbmluZ1xuICAgICAqIEBldmVudCBEcm9wZG93biNjbG9zZW1lXG4gICAgICovXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjbG9zZW1lLnpmLmRyb3Bkb3duJywgdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpKTtcbiAgICB0aGlzLiRhbmNob3JzLmFkZENsYXNzKCdob3ZlcicpXG4gICAgICAgIC5hdHRyKHsnYXJpYS1leHBhbmRlZCc6IHRydWV9KTtcbiAgICAvLyB0aGlzLiRlbGVtZW50Lyouc2hvdygpKi87XG5cbiAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCdpcy1vcGVuaW5nJyk7XG4gICAgdGhpcy5fc2V0UG9zaXRpb24oKTtcbiAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCdpcy1vcGVuaW5nJykuYWRkQ2xhc3MoJ2lzLW9wZW4nKVxuICAgICAgICAuYXR0cih7J2FyaWEtaGlkZGVuJzogZmFsc2V9KTtcblxuICAgIGlmKHRoaXMub3B0aW9ucy5hdXRvRm9jdXMpe1xuICAgICAgdmFyICRmb2N1c2FibGUgPSBLZXlib2FyZC5maW5kRm9jdXNhYmxlKHRoaXMuJGVsZW1lbnQpO1xuICAgICAgaWYoJGZvY3VzYWJsZS5sZW5ndGgpe1xuICAgICAgICAkZm9jdXNhYmxlLmVxKDApLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYodGhpcy5vcHRpb25zLmNsb3NlT25DbGljayl7IHRoaXMuX2FkZEJvZHlIYW5kbGVyKCk7IH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMudHJhcEZvY3VzKSB7XG4gICAgICBLZXlib2FyZC50cmFwRm9jdXModGhpcy4kZWxlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgb25jZSB0aGUgZHJvcGRvd24gaXMgdmlzaWJsZS5cbiAgICAgKiBAZXZlbnQgRHJvcGRvd24jc2hvd1xuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignc2hvdy56Zi5kcm9wZG93bicsIFt0aGlzLiRlbGVtZW50XSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBvcGVuIGRyb3Bkb3duIHBhbmUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAZmlyZXMgRHJvcGRvd24jaGlkZVxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgaWYoIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2lzLW9wZW4nKSl7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2lzLW9wZW4nKVxuICAgICAgICAuYXR0cih7J2FyaWEtaGlkZGVuJzogdHJ1ZX0pO1xuXG4gICAgdGhpcy4kYW5jaG9ycy5yZW1vdmVDbGFzcygnaG92ZXInKVxuICAgICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uY2UgdGhlIGRyb3Bkb3duIGlzIG5vIGxvbmdlciB2aXNpYmxlLlxuICAgICAqIEBldmVudCBEcm9wZG93biNoaWRlXG4gICAgICovXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdoaWRlLnpmLmRyb3Bkb3duJywgW3RoaXMuJGVsZW1lbnRdKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMudHJhcEZvY3VzKSB7XG4gICAgICBLZXlib2FyZC5yZWxlYXNlRm9jdXModGhpcy4kZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGRyb3Bkb3duIHBhbmUncyB2aXNpYmlsaXR5LlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICBpZih0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdpcy1vcGVuJykpe1xuICAgICAgaWYodGhpcy4kYW5jaG9ycy5kYXRhKCdob3ZlcicpKSByZXR1cm47XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfWVsc2Uge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBkcm9wZG93bi5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBfZGVzdHJveSgpIHtcbiAgICB0aGlzLiRlbGVtZW50Lm9mZignLnpmLnRyaWdnZXInKS5oaWRlKCk7XG4gICAgdGhpcy4kYW5jaG9ycy5vZmYoJy56Zi5kcm9wZG93bicpO1xuICAgICQoZG9jdW1lbnQuYm9keSkub2ZmKCdjbGljay56Zi5kcm9wZG93biB0YXAuemYuZHJvcGRvd24nKTtcblxuICB9XG59XG5cbkRyb3Bkb3duLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQ2xhc3MgdGhhdCBkZXNpZ25hdGVzIGJvdW5kaW5nIGNvbnRhaW5lciBvZiBEcm9wZG93biAoZGVmYXVsdDogd2luZG93KVxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHs/c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBwYXJlbnRDbGFzczogbnVsbCxcbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lIHRvIGRlbGF5IG9wZW5pbmcgYSBzdWJtZW51IG9uIGhvdmVyIGV2ZW50LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDI1MFxuICAgKi9cbiAgaG92ZXJEZWxheTogMjUwLFxuICAvKipcbiAgICogQWxsb3cgc3VibWVudXMgdG8gb3BlbiBvbiBob3ZlciBldmVudHNcbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhvdmVyOiBmYWxzZSxcbiAgLyoqXG4gICAqIERvbid0IGNsb3NlIGRyb3Bkb3duIHdoZW4gaG92ZXJpbmcgb3ZlciBkcm9wZG93biBwYW5lXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBob3ZlclBhbmU6IGZhbHNlLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHBpeGVscyBiZXR3ZWVuIHRoZSBkcm9wZG93biBwYW5lIGFuZCB0aGUgdHJpZ2dlcmluZyBlbGVtZW50IG9uIG9wZW4uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgdk9mZnNldDogMCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiBwaXhlbHMgYmV0d2VlbiB0aGUgZHJvcGRvd24gcGFuZSBhbmQgdGhlIHRyaWdnZXJpbmcgZWxlbWVudCBvbiBvcGVuLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGhPZmZzZXQ6IDAsXG4gIC8qKlxuICAgKiBQb3NpdGlvbiBvZiBkcm9wZG93bi4gQ2FuIGJlIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgb3IgYXV0by5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHBvc2l0aW9uOiAnYXV0bycsXG4gIC8qKlxuICAgKiBBbGlnbm1lbnQgb2YgZHJvcGRvd24gcmVsYXRpdmUgdG8gYW5jaG9yLiBDYW4gYmUgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBjZW50ZXIsIG9yIGF1dG8uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICBhbGlnbm1lbnQ6ICdhdXRvJyxcbiAgLyoqXG4gICAqIEFsbG93IG92ZXJsYXAgb2YgY29udGFpbmVyL3dpbmRvdy4gSWYgZmFsc2UsIGRyb3Bkb3duIHdpbGwgZmlyc3QgdHJ5IHRvIHBvc2l0aW9uIGFzIGRlZmluZWQgYnkgZGF0YS1wb3NpdGlvbiBhbmQgZGF0YS1hbGlnbm1lbnQsIGJ1dCByZXBvc2l0aW9uIGlmIGl0IHdvdWxkIGNhdXNlIGFuIG92ZXJmbG93LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYWxsb3dPdmVybGFwOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93IG92ZXJsYXAgb2Ygb25seSB0aGUgYm90dG9tIG9mIHRoZSBjb250YWluZXIuIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uXG4gICAqIGJlaGF2aW9yIGZvciBkcm9wZG93bnMsIGFsbG93aW5nIHRoZSBkcm9wZG93biB0byBleHRlbmQgdGhlIGJvdHRvbSBvZiB0aGVcbiAgICogc2NyZWVuIGJ1dCBub3Qgb3RoZXJ3aXNlIGluZmx1ZW5jZSBvciBicmVhayBvdXQgb2YgdGhlIGNvbnRhaW5lci5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYWxsb3dCb3R0b21PdmVybGFwOiB0cnVlLFxuICAvKipcbiAgICogQWxsb3cgdGhlIHBsdWdpbiB0byB0cmFwIGZvY3VzIHRvIHRoZSBkcm9wZG93biBwYW5lIGlmIG9wZW5lZCB3aXRoIGtleWJvYXJkIGNvbW1hbmRzLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdHJhcEZvY3VzOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93IHRoZSBwbHVnaW4gdG8gc2V0IGZvY3VzIHRvIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCB3aXRoaW4gdGhlIHBhbmUsIHJlZ2FyZGxlc3Mgb2YgbWV0aG9kIG9mIG9wZW5pbmcuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXM6IGZhbHNlLFxuICAvKipcbiAgICogQWxsb3dzIGEgY2xpY2sgb24gdGhlIGJvZHkgdG8gY2xvc2UgdGhlIGRyb3Bkb3duLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2xvc2VPbkNsaWNrOiBmYWxzZSxcbiAgLyoqXG4gICAqIElmIHRydWUgdGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoZSB0b2dnbGUgKGUuZy4gZm9sbG93IGEgbGluayB3aXRoIGhyZWYpIGdldHMgZXhlY3V0ZWQgb24gY2xpY2suIElmIGhvdmVyIG9wdGlvbiBpcyBhbHNvIHRydWUgdGhlIGRlZmF1bHQgYWN0aW9uIGdldHMgcHJldmVudGVkIG9uIGZpcnN0IGNsaWNrIGZvciBtb2JpbGUgLyB0b3VjaCBkZXZpY2VzIGFuZCBleGVjdXRlZCBvbiBzZWNvbmQgY2xpY2suXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGZvcmNlRm9sbG93OiB0cnVlXG59O1xuXG4vKipcbiAqIERyb3Bkb3duTWVudSBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24uZHJvcGRvd25NZW51XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmtleWJvYXJkXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmJveFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5uZXN0XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLnRvdWNoXG4gKi9cblxuY2xhc3MgRHJvcGRvd25NZW51IGV4dGVuZHMgUGx1Z2luIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgRHJvcGRvd25NZW51LlxuICAgKiBAY2xhc3NcbiAgICogQG5hbWUgRHJvcGRvd25NZW51XG4gICAqIEBmaXJlcyBEcm9wZG93bk1lbnUjaW5pdFxuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gbWFrZSBpbnRvIGEgZHJvcGRvd24gbWVudS5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgX3NldHVwKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgRHJvcGRvd25NZW51LmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG4gICAgdGhpcy5jbGFzc05hbWUgPSAnRHJvcGRvd25NZW51JzsgLy8gaWU5IGJhY2sgY29tcGF0XG5cbiAgICBUb3VjaC5pbml0KCQpOyAvLyBUb3VjaCBpbml0IGlzIGlkZW1wb3RlbnQsIHdlIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgaXQncyBpbml0aWFsaWVkLlxuXG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgS2V5Ym9hcmQucmVnaXN0ZXIoJ0Ryb3Bkb3duTWVudScsIHtcbiAgICAgICdFTlRFUic6ICdvcGVuJyxcbiAgICAgICdTUEFDRSc6ICdvcGVuJyxcbiAgICAgICdBUlJPV19SSUdIVCc6ICduZXh0JyxcbiAgICAgICdBUlJPV19VUCc6ICd1cCcsXG4gICAgICAnQVJST1dfRE9XTic6ICdkb3duJyxcbiAgICAgICdBUlJPV19MRUZUJzogJ3ByZXZpb3VzJyxcbiAgICAgICdFU0NBUEUnOiAnY2xvc2UnXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHBsdWdpbiwgYW5kIGNhbGxzIF9wcmVwYXJlTWVudVxuICAgKiBAcHJpdmF0ZVxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIF9pbml0KCkge1xuICAgIE5lc3QuRmVhdGhlcih0aGlzLiRlbGVtZW50LCAnZHJvcGRvd24nKTtcblxuICAgIHZhciBzdWJzID0gdGhpcy4kZWxlbWVudC5maW5kKCdsaS5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCcpO1xuICAgIHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oJy5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCcpLmNoaWxkcmVuKCcuaXMtZHJvcGRvd24tc3VibWVudScpLmFkZENsYXNzKCdmaXJzdC1zdWInKTtcblxuICAgIHRoaXMuJG1lbnVJdGVtcyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnbGlbcm9sZT1cIm5vbmVcIl0nKTtcbiAgICB0aGlzLiR0YWJzID0gdGhpcy4kZWxlbWVudC5jaGlsZHJlbignbGlbcm9sZT1cIm5vbmVcIl0nKTtcbiAgICB0aGlzLiR0YWJzLmZpbmQoJ3VsLmlzLWRyb3Bkb3duLXN1Ym1lbnUnKS5hZGRDbGFzcyh0aGlzLm9wdGlvbnMudmVydGljYWxDbGFzcyk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmFsaWdubWVudCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKHRoaXMub3B0aW9ucy5yaWdodENsYXNzKSB8fCBydGwoKSB8fCB0aGlzLiRlbGVtZW50LnBhcmVudHMoJy50b3AtYmFyLXJpZ2h0JykuaXMoJyonKSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFsaWdubWVudCA9ICdyaWdodCc7XG4gICAgICAgICAgICBzdWJzLmFkZENsYXNzKCdvcGVucy1sZWZ0Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWxpZ25tZW50ID0gJ2xlZnQnO1xuICAgICAgICAgICAgc3Vicy5hZGRDbGFzcygnb3BlbnMtcmlnaHQnKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFsaWdubWVudCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIHN1YnMuYWRkQ2xhc3MoJ29wZW5zLWxlZnQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3Vicy5hZGRDbGFzcygnb3BlbnMtcmlnaHQnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH07XG5cbiAgX2lzVmVydGljYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuJHRhYnMuY3NzKCdkaXNwbGF5JykgPT09ICdibG9jaycgfHwgdGhpcy4kZWxlbWVudC5jc3MoJ2ZsZXgtZGlyZWN0aW9uJykgPT09ICdjb2x1bW4nO1xuICB9XG5cbiAgX2lzUnRsKCkge1xuICAgIHJldHVybiB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdhbGlnbi1yaWdodCcpIHx8IChydGwoKSAmJiAhdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnYWxpZ24tbGVmdCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGxpc3RlbmVycyB0byBlbGVtZW50cyB3aXRoaW4gdGhlIG1lbnVcbiAgICogQHByaXZhdGVcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgIGhhc1RvdWNoID0gJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8ICh0eXBlb2Ygd2luZG93Lm9udG91Y2hzdGFydCAhPT0gJ3VuZGVmaW5lZCcpLFxuICAgICAgICBwYXJDbGFzcyA9ICdpcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCc7XG5cbiAgICAvLyB1c2VkIGZvciBvbkNsaWNrIGFuZCBpbiB0aGUga2V5Ym9hcmQgaGFuZGxlcnNcbiAgICB2YXIgaGFuZGxlQ2xpY2tGbiA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHZhciAkZWxlbSA9ICQoZS50YXJnZXQpLnBhcmVudHNVbnRpbCgndWwnLCBgLiR7cGFyQ2xhc3N9YCksXG4gICAgICAgICAgaGFzU3ViID0gJGVsZW0uaGFzQ2xhc3MocGFyQ2xhc3MpLFxuICAgICAgICAgIGhhc0NsaWNrZWQgPSAkZWxlbS5hdHRyKCdkYXRhLWlzLWNsaWNrJykgPT09ICd0cnVlJyxcbiAgICAgICAgICAkc3ViID0gJGVsZW0uY2hpbGRyZW4oJy5pcy1kcm9wZG93bi1zdWJtZW51Jyk7XG5cbiAgICAgIGlmIChoYXNTdWIpIHtcbiAgICAgICAgaWYgKGhhc0NsaWNrZWQpIHtcbiAgICAgICAgICBpZiAoIV90aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrXG4gICAgICAgICAgICB8fCAoIV90aGlzLm9wdGlvbnMuY2xpY2tPcGVuICYmICFoYXNUb3VjaClcbiAgICAgICAgICAgIHx8IChfdGhpcy5vcHRpb25zLmZvcmNlRm9sbG93ICYmIGhhc1RvdWNoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBfdGhpcy5faGlkZSgkZWxlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgX3RoaXMuX3Nob3coJHN1Yik7XG4gICAgICAgICAgJGVsZW0uYWRkKCRlbGVtLnBhcmVudHNVbnRpbChfdGhpcy4kZWxlbWVudCwgYC4ke3BhckNsYXNzfWApKS5hdHRyKCdkYXRhLWlzLWNsaWNrJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbGlja09wZW4gfHwgaGFzVG91Y2gpIHtcbiAgICAgIHRoaXMuJG1lbnVJdGVtcy5vbignY2xpY2suemYuZHJvcGRvd25NZW51IHRvdWNoc3RhcnQuemYuZHJvcGRvd25NZW51JywgaGFuZGxlQ2xpY2tGbik7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIExlYWYgZWxlbWVudCBDbGlja3NcbiAgICBpZihfdGhpcy5vcHRpb25zLmNsb3NlT25DbGlja0luc2lkZSl7XG4gICAgICB0aGlzLiRtZW51SXRlbXMub24oJ2NsaWNrLnpmLmRyb3Bkb3duTWVudScsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJGVsZW0gPSAkKHRoaXMpLFxuICAgICAgICAgICAgaGFzU3ViID0gJGVsZW0uaGFzQ2xhc3MocGFyQ2xhc3MpO1xuICAgICAgICBpZighaGFzU3ViKXtcbiAgICAgICAgICBfdGhpcy5faGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVG91Y2ggJiYgdGhpcy5vcHRpb25zLmRpc2FibGVIb3Zlck9uVG91Y2gpIHRoaXMub3B0aW9ucy5kaXNhYmxlSG92ZXIgPSB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuZGlzYWJsZUhvdmVyKSB7XG4gICAgICB0aGlzLiRtZW51SXRlbXMub24oJ21vdXNlZW50ZXIuemYuZHJvcGRvd25NZW51JywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgJGVsZW0gPSAkKHRoaXMpLFxuICAgICAgICAgIGhhc1N1YiA9ICRlbGVtLmhhc0NsYXNzKHBhckNsYXNzKTtcblxuICAgICAgICBpZiAoaGFzU3ViKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KCRlbGVtLmRhdGEoJ19kZWxheScpKTtcbiAgICAgICAgICAkZWxlbS5kYXRhKCdfZGVsYXknLCBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl9zaG93KCRlbGVtLmNoaWxkcmVuKCcuaXMtZHJvcGRvd24tc3VibWVudScpKTtcbiAgICAgICAgICB9LCBfdGhpcy5vcHRpb25zLmhvdmVyRGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgfSkub24oJ21vdXNlbGVhdmUuemYuZHJvcGRvd25NZW51JywgaWdub3JlTW91c2VkaXNhcHBlYXIoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgJGVsZW0gPSAkKHRoaXMpLFxuICAgICAgICAgICAgaGFzU3ViID0gJGVsZW0uaGFzQ2xhc3MocGFyQ2xhc3MpO1xuICAgICAgICBpZiAoaGFzU3ViICYmIF90aGlzLm9wdGlvbnMuYXV0b2Nsb3NlKSB7XG4gICAgICAgICAgaWYgKCRlbGVtLmF0dHIoJ2RhdGEtaXMtY2xpY2snKSA9PT0gJ3RydWUnICYmIF90aGlzLm9wdGlvbnMuY2xpY2tPcGVuKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgICAgICAgY2xlYXJUaW1lb3V0KCRlbGVtLmRhdGEoJ19kZWxheScpKTtcbiAgICAgICAgICAkZWxlbS5kYXRhKCdfZGVsYXknLCBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl9oaWRlKCRlbGVtKTtcbiAgICAgICAgICB9LCBfdGhpcy5vcHRpb25zLmNsb3NpbmdUaW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9XG4gICAgdGhpcy4kbWVudUl0ZW1zLm9uKCdrZXlkb3duLnpmLmRyb3Bkb3duTWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHZhciAkZWxlbWVudCA9ICQoZS50YXJnZXQpLnBhcmVudHNVbnRpbCgndWwnLCAnW3JvbGU9XCJub25lXCJdJyksXG4gICAgICAgICAgaXNUYWIgPSBfdGhpcy4kdGFicy5pbmRleCgkZWxlbWVudCkgPiAtMSxcbiAgICAgICAgICAkZWxlbWVudHMgPSBpc1RhYiA/IF90aGlzLiR0YWJzIDogJGVsZW1lbnQuc2libGluZ3MoJ2xpJykuYWRkKCRlbGVtZW50KSxcbiAgICAgICAgICAkcHJldkVsZW1lbnQsXG4gICAgICAgICAgJG5leHRFbGVtZW50O1xuXG4gICAgICAkZWxlbWVudHMuZWFjaChmdW5jdGlvbihpKSB7XG4gICAgICAgIGlmICgkKHRoaXMpLmlzKCRlbGVtZW50KSkge1xuICAgICAgICAgICRwcmV2RWxlbWVudCA9ICRlbGVtZW50cy5lcShpLTEpO1xuICAgICAgICAgICRuZXh0RWxlbWVudCA9ICRlbGVtZW50cy5lcShpKzEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBuZXh0U2libGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAkbmV4dEVsZW1lbnQuY2hpbGRyZW4oJ2E6Zmlyc3QnKS5mb2N1cygpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9LCBwcmV2U2libGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAkcHJldkVsZW1lbnQuY2hpbGRyZW4oJ2E6Zmlyc3QnKS5mb2N1cygpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9LCBvcGVuU3ViID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciAkc3ViID0gJGVsZW1lbnQuY2hpbGRyZW4oJ3VsLmlzLWRyb3Bkb3duLXN1Ym1lbnUnKTtcbiAgICAgICAgaWYgKCRzdWIubGVuZ3RoKSB7XG4gICAgICAgICAgX3RoaXMuX3Nob3coJHN1Yik7XG4gICAgICAgICAgJGVsZW1lbnQuZmluZCgnbGkgPiBhOmZpcnN0JykuZm9jdXMoKTtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSB7IHJldHVybjsgfVxuICAgICAgfSwgY2xvc2VTdWIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy9pZiAoJGVsZW1lbnQuaXMoJzpmaXJzdC1jaGlsZCcpKSB7XG4gICAgICAgIHZhciBjbG9zZSA9ICRlbGVtZW50LnBhcmVudCgndWwnKS5wYXJlbnQoJ2xpJyk7XG4gICAgICAgIGNsb3NlLmNoaWxkcmVuKCdhOmZpcnN0JykuZm9jdXMoKTtcbiAgICAgICAgX3RoaXMuX2hpZGUoY2xvc2UpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIC8vfVxuICAgICAgfTtcbiAgICAgIHZhciBmdW5jdGlvbnMgPSB7XG4gICAgICAgIG9wZW46IG9wZW5TdWIsXG4gICAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5faGlkZShfdGhpcy4kZWxlbWVudCk7XG4gICAgICAgICAgX3RoaXMuJG1lbnVJdGVtcy5lcSgwKS5jaGlsZHJlbignYScpLmZvY3VzKCk7IC8vIGZvY3VzIHRvIGZpcnN0IGVsZW1lbnRcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChpc1RhYikge1xuICAgICAgICBpZiAoX3RoaXMuX2lzVmVydGljYWwoKSkgeyAvLyB2ZXJ0aWNhbCBtZW51XG4gICAgICAgICAgaWYgKF90aGlzLl9pc1J0bCgpKSB7IC8vIHJpZ2h0IGFsaWduZWRcbiAgICAgICAgICAgICQuZXh0ZW5kKGZ1bmN0aW9ucywge1xuICAgICAgICAgICAgICBkb3duOiBuZXh0U2libGluZyxcbiAgICAgICAgICAgICAgdXA6IHByZXZTaWJsaW5nLFxuICAgICAgICAgICAgICBuZXh0OiBjbG9zZVN1YixcbiAgICAgICAgICAgICAgcHJldmlvdXM6IG9wZW5TdWJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7IC8vIGxlZnQgYWxpZ25lZFxuICAgICAgICAgICAgJC5leHRlbmQoZnVuY3Rpb25zLCB7XG4gICAgICAgICAgICAgIGRvd246IG5leHRTaWJsaW5nLFxuICAgICAgICAgICAgICB1cDogcHJldlNpYmxpbmcsXG4gICAgICAgICAgICAgIG5leHQ6IG9wZW5TdWIsXG4gICAgICAgICAgICAgIHByZXZpb3VzOiBjbG9zZVN1YlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgeyAvLyBob3Jpem9udGFsIG1lbnVcbiAgICAgICAgICBpZiAoX3RoaXMuX2lzUnRsKCkpIHsgLy8gcmlnaHQgYWxpZ25lZFxuICAgICAgICAgICAgJC5leHRlbmQoZnVuY3Rpb25zLCB7XG4gICAgICAgICAgICAgIG5leHQ6IHByZXZTaWJsaW5nLFxuICAgICAgICAgICAgICBwcmV2aW91czogbmV4dFNpYmxpbmcsXG4gICAgICAgICAgICAgIGRvd246IG9wZW5TdWIsXG4gICAgICAgICAgICAgIHVwOiBjbG9zZVN1YlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHsgLy8gbGVmdCBhbGlnbmVkXG4gICAgICAgICAgICAkLmV4dGVuZChmdW5jdGlvbnMsIHtcbiAgICAgICAgICAgICAgbmV4dDogbmV4dFNpYmxpbmcsXG4gICAgICAgICAgICAgIHByZXZpb3VzOiBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgZG93bjogb3BlblN1YixcbiAgICAgICAgICAgICAgdXA6IGNsb3NlU3ViXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7IC8vIG5vdCB0YWJzIC0+IG9uZSBzdWJcbiAgICAgICAgaWYgKF90aGlzLl9pc1J0bCgpKSB7IC8vIHJpZ2h0IGFsaWduZWRcbiAgICAgICAgICAkLmV4dGVuZChmdW5jdGlvbnMsIHtcbiAgICAgICAgICAgIG5leHQ6IGNsb3NlU3ViLFxuICAgICAgICAgICAgcHJldmlvdXM6IG9wZW5TdWIsXG4gICAgICAgICAgICBkb3duOiBuZXh0U2libGluZyxcbiAgICAgICAgICAgIHVwOiBwcmV2U2libGluZ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgeyAvLyBsZWZ0IGFsaWduZWRcbiAgICAgICAgICAkLmV4dGVuZChmdW5jdGlvbnMsIHtcbiAgICAgICAgICAgIG5leHQ6IG9wZW5TdWIsXG4gICAgICAgICAgICBwcmV2aW91czogY2xvc2VTdWIsXG4gICAgICAgICAgICBkb3duOiBuZXh0U2libGluZyxcbiAgICAgICAgICAgIHVwOiBwcmV2U2libGluZ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBLZXlib2FyZC5oYW5kbGVLZXkoZSwgJ0Ryb3Bkb3duTWVudScsIGZ1bmN0aW9ucyk7XG5cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGJvZHkgdG8gY2xvc2UgYW55IGRyb3Bkb3ducyBvbiBhIGNsaWNrLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRCb2R5SGFuZGxlcigpIHtcbiAgICBjb25zdCAkYm9keSA9ICQoZG9jdW1lbnQuYm9keSk7XG4gICAgdGhpcy5fcmVtb3ZlQm9keUhhbmRsZXIoKTtcbiAgICAkYm9keS5vbignY2xpY2suemYuZHJvcGRvd25NZW51IHRhcC56Zi5kcm9wZG93bk1lbnUnLCAoZSkgPT4ge1xuICAgICAgdmFyIGlzSXRzZWxmID0gISEkKGUudGFyZ2V0KS5jbG9zZXN0KHRoaXMuJGVsZW1lbnQpLmxlbmd0aDtcbiAgICAgIGlmIChpc0l0c2VsZikgcmV0dXJuO1xuXG4gICAgICB0aGlzLl9oaWRlKCk7XG4gICAgICB0aGlzLl9yZW1vdmVCb2R5SGFuZGxlcigpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgYm9keSBldmVudCBoYW5kbGVyLiBTZWUgYF9hZGRCb2R5SGFuZGxlcmAuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZUJvZHlIYW5kbGVyKCkge1xuICAgICQoZG9jdW1lbnQuYm9keSkub2ZmKCdjbGljay56Zi5kcm9wZG93bk1lbnUgdGFwLnpmLmRyb3Bkb3duTWVudScpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgZHJvcGRvd24gcGFuZSwgYW5kIGNoZWNrcyBmb3IgY29sbGlzaW9ucyBmaXJzdC5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICRzdWIgLSB1bCBlbGVtZW50IHRoYXQgaXMgYSBzdWJtZW51IHRvIHNob3dcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBmaXJlcyBEcm9wZG93bk1lbnUjc2hvd1xuICAgKi9cbiAgX3Nob3coJHN1Yikge1xuICAgIHZhciBpZHggPSB0aGlzLiR0YWJzLmluZGV4KHRoaXMuJHRhYnMuZmlsdGVyKGZ1bmN0aW9uKGksIGVsKSB7XG4gICAgICByZXR1cm4gJChlbCkuZmluZCgkc3ViKS5sZW5ndGggPiAwO1xuICAgIH0pKTtcbiAgICB2YXIgJHNpYnMgPSAkc3ViLnBhcmVudCgnbGkuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQnKS5zaWJsaW5ncygnbGkuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQnKTtcbiAgICB0aGlzLl9oaWRlKCRzaWJzLCBpZHgpO1xuICAgICRzdWIuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpLmFkZENsYXNzKCdqcy1kcm9wZG93bi1hY3RpdmUnKVxuICAgICAgICAucGFyZW50KCdsaS5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCcpLmFkZENsYXNzKCdpcy1hY3RpdmUnKTtcbiAgICB2YXIgY2xlYXIgPSBCb3guSW1Ob3RUb3VjaGluZ1lvdSgkc3ViLCBudWxsLCB0cnVlKTtcbiAgICBpZiAoIWNsZWFyKSB7XG4gICAgICB2YXIgb2xkQ2xhc3MgPSB0aGlzLm9wdGlvbnMuYWxpZ25tZW50ID09PSAnbGVmdCcgPyAnLXJpZ2h0JyA6ICctbGVmdCcsXG4gICAgICAgICAgJHBhcmVudExpID0gJHN1Yi5wYXJlbnQoJy5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCcpO1xuICAgICAgJHBhcmVudExpLnJlbW92ZUNsYXNzKGBvcGVucyR7b2xkQ2xhc3N9YCkuYWRkQ2xhc3MoYG9wZW5zLSR7dGhpcy5vcHRpb25zLmFsaWdubWVudH1gKTtcbiAgICAgIGNsZWFyID0gQm94LkltTm90VG91Y2hpbmdZb3UoJHN1YiwgbnVsbCwgdHJ1ZSk7XG4gICAgICBpZiAoIWNsZWFyKSB7XG4gICAgICAgICRwYXJlbnRMaS5yZW1vdmVDbGFzcyhgb3BlbnMtJHt0aGlzLm9wdGlvbnMuYWxpZ25tZW50fWApLmFkZENsYXNzKCdvcGVucy1pbm5lcicpO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgJHN1Yi5jc3MoJ3Zpc2liaWxpdHknLCAnJyk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2spIHsgdGhpcy5fYWRkQm9keUhhbmRsZXIoKTsgfVxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIG5ldyBkcm9wZG93biBwYW5lIGlzIHZpc2libGUuXG4gICAgICogQGV2ZW50IERyb3Bkb3duTWVudSNzaG93XG4gICAgICovXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdzaG93LnpmLmRyb3Bkb3duTWVudScsIFskc3ViXSk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZXMgYSBzaW5nbGUsIGN1cnJlbnRseSBvcGVuIGRyb3Bkb3duIHBhbmUsIGlmIHBhc3NlZCBhIHBhcmFtZXRlciwgb3RoZXJ3aXNlLCBoaWRlcyBldmVyeXRoaW5nLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtqUXVlcnl9ICRlbGVtIC0gZWxlbWVudCB3aXRoIGEgc3VibWVudSB0byBoaWRlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZHggLSBpbmRleCBvZiB0aGUgJHRhYnMgY29sbGVjdGlvbiB0byBoaWRlXG4gICAqIEBmaXJlcyBEcm9wZG93bk1lbnUjaGlkZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hpZGUoJGVsZW0sIGlkeCkge1xuICAgIHZhciAkdG9DbG9zZTtcbiAgICBpZiAoJGVsZW0gJiYgJGVsZW0ubGVuZ3RoKSB7XG4gICAgICAkdG9DbG9zZSA9ICRlbGVtO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlkeCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICR0b0Nsb3NlID0gdGhpcy4kdGFicy5ub3QoZnVuY3Rpb24oaSkge1xuICAgICAgICByZXR1cm4gaSA9PT0gaWR4O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgJHRvQ2xvc2UgPSB0aGlzLiRlbGVtZW50O1xuICAgIH1cbiAgICB2YXIgc29tZXRoaW5nVG9DbG9zZSA9ICR0b0Nsb3NlLmhhc0NsYXNzKCdpcy1hY3RpdmUnKSB8fCAkdG9DbG9zZS5maW5kKCcuaXMtYWN0aXZlJykubGVuZ3RoID4gMDtcblxuICAgIGlmIChzb21ldGhpbmdUb0Nsb3NlKSB7XG4gICAgICB2YXIgJGFjdGl2ZUl0ZW0gPSAkdG9DbG9zZS5maW5kKCdsaS5pcy1hY3RpdmUnKTtcbiAgICAgICRhY3RpdmVJdGVtLmFkZCgkdG9DbG9zZSkuYXR0cih7XG4gICAgICAgICdkYXRhLWlzLWNsaWNrJzogZmFsc2VcbiAgICAgIH0pLnJlbW92ZUNsYXNzKCdpcy1hY3RpdmUnKTtcblxuICAgICAgJHRvQ2xvc2UuZmluZCgndWwuanMtZHJvcGRvd24tYWN0aXZlJykucmVtb3ZlQ2xhc3MoJ2pzLWRyb3Bkb3duLWFjdGl2ZScpO1xuXG4gICAgICBpZiAodGhpcy5jaGFuZ2VkIHx8ICR0b0Nsb3NlLmZpbmQoJ29wZW5zLWlubmVyJykubGVuZ3RoKSB7XG4gICAgICAgIHZhciBvbGRDbGFzcyA9IHRoaXMub3B0aW9ucy5hbGlnbm1lbnQgPT09ICdsZWZ0JyA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgICAgICR0b0Nsb3NlLmZpbmQoJ2xpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50JykuYWRkKCR0b0Nsb3NlKVxuICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcyhgb3BlbnMtaW5uZXIgb3BlbnMtJHt0aGlzLm9wdGlvbnMuYWxpZ25tZW50fWApXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKGBvcGVucy0ke29sZENsYXNzfWApO1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY2xlYXJUaW1lb3V0KCRhY3RpdmVJdGVtLmRhdGEoJ19kZWxheScpKTtcbiAgICAgIHRoaXMuX3JlbW92ZUJvZHlIYW5kbGVyKCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogRmlyZXMgd2hlbiB0aGUgb3BlbiBtZW51cyBhcmUgY2xvc2VkLlxuICAgICAgICogQGV2ZW50IERyb3Bkb3duTWVudSNoaWRlXG4gICAgICAgKi9cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignaGlkZS56Zi5kcm9wZG93bk1lbnUnLCBbJHRvQ2xvc2VdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIHBsdWdpbi5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBfZGVzdHJveSgpIHtcbiAgICB0aGlzLiRtZW51SXRlbXMub2ZmKCcuemYuZHJvcGRvd25NZW51JykucmVtb3ZlQXR0cignZGF0YS1pcy1jbGljaycpXG4gICAgICAgIC5yZW1vdmVDbGFzcygnaXMtcmlnaHQtYXJyb3cgaXMtbGVmdC1hcnJvdyBpcy1kb3duLWFycm93IG9wZW5zLXJpZ2h0IG9wZW5zLWxlZnQgb3BlbnMtaW5uZXInKTtcbiAgICAkKGRvY3VtZW50LmJvZHkpLm9mZignLnpmLmRyb3Bkb3duTWVudScpO1xuICAgIE5lc3QuQnVybih0aGlzLiRlbGVtZW50LCAnZHJvcGRvd24nKTtcbiAgfVxufVxuXG4vKipcbiAqIERlZmF1bHQgc2V0dGluZ3MgZm9yIHBsdWdpblxuICovXG5Ecm9wZG93bk1lbnUuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBEaXNhbGxvd3MgaG92ZXIgZXZlbnRzIGZyb20gb3BlbmluZyBzdWJtZW51c1xuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUhvdmVyOiBmYWxzZSxcbiAgLyoqXG4gICAqIERpc2FsbG93cyBob3ZlciBvbiB0b3VjaCBkZXZpY2VzXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGRpc2FibGVIb3Zlck9uVG91Y2g6IHRydWUsXG4gIC8qKlxuICAgKiBBbGxvdyBhIHN1Ym1lbnUgdG8gYXV0b21hdGljYWxseSBjbG9zZSBvbiBhIG1vdXNlbGVhdmUgZXZlbnQsIGlmIG5vdCBjbGlja2VkIG9wZW4uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGF1dG9jbG9zZTogdHJ1ZSxcbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lIHRvIGRlbGF5IG9wZW5pbmcgYSBzdWJtZW51IG9uIGhvdmVyIGV2ZW50LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDUwXG4gICAqL1xuICBob3ZlckRlbGF5OiA1MCxcbiAgLyoqXG4gICAqIEFsbG93IGEgc3VibWVudSB0byBvcGVuL3JlbWFpbiBvcGVuIG9uIHBhcmVudCBjbGljayBldmVudC4gQWxsb3dzIGN1cnNvciB0byBtb3ZlIGF3YXkgZnJvbSBtZW51LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2xpY2tPcGVuOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lIHRvIGRlbGF5IGNsb3NpbmcgYSBzdWJtZW51IG9uIGEgbW91c2VsZWF2ZSBldmVudC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCA1MDBcbiAgICovXG5cbiAgY2xvc2luZ1RpbWU6IDUwMCxcbiAgLyoqXG4gICAqIFBvc2l0aW9uIG9mIHRoZSBtZW51IHJlbGF0aXZlIHRvIHdoYXQgZGlyZWN0aW9uIHRoZSBzdWJtZW51cyBzaG91bGQgb3Blbi4gSGFuZGxlZCBieSBKUy4gQ2FuIGJlIGAnYXV0bydgLCBgJ2xlZnQnYCBvciBgJ3JpZ2h0J2AuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICBhbGlnbm1lbnQ6ICdhdXRvJyxcbiAgLyoqXG4gICAqIEFsbG93IGNsaWNrcyBvbiB0aGUgYm9keSB0byBjbG9zZSBhbnkgb3BlbiBzdWJtZW51cy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgY2xvc2VPbkNsaWNrOiB0cnVlLFxuICAvKipcbiAgICogQWxsb3cgY2xpY2tzIG9uIGxlYWYgYW5jaG9yIGxpbmtzIHRvIGNsb3NlIGFueSBvcGVuIHN1Ym1lbnVzLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBjbG9zZU9uQ2xpY2tJbnNpZGU6IHRydWUsXG4gIC8qKlxuICAgKiBDbGFzcyBhcHBsaWVkIHRvIHZlcnRpY2FsIG9yaWVudGVkIG1lbnVzLCBGb3VuZGF0aW9uIGRlZmF1bHQgaXMgYHZlcnRpY2FsYC4gVXBkYXRlIHRoaXMgaWYgdXNpbmcgeW91ciBvd24gY2xhc3MuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ3ZlcnRpY2FsJ1xuICAgKi9cbiAgdmVydGljYWxDbGFzczogJ3ZlcnRpY2FsJyxcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gcmlnaHQtc2lkZSBvcmllbnRlZCBtZW51cywgRm91bmRhdGlvbiBkZWZhdWx0IGlzIGBhbGlnbi1yaWdodGAuIFVwZGF0ZSB0aGlzIGlmIHVzaW5nIHlvdXIgb3duIGNsYXNzLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdhbGlnbi1yaWdodCdcbiAgICovXG4gIHJpZ2h0Q2xhc3M6ICdhbGlnbi1yaWdodCcsXG4gIC8qKlxuICAgKiBCb29sZWFuIHRvIGZvcmNlIG92ZXJpZGUgdGhlIGNsaWNraW5nIG9mIGxpbmtzIHRvIHBlcmZvcm0gZGVmYXVsdCBhY3Rpb24sIG9uIHNlY29uZCB0b3VjaCBldmVudCBmb3IgbW9iaWxlLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBmb3JjZUZvbGxvdzogdHJ1ZVxufTtcblxuLyoqXG4gKiBFcXVhbGl6ZXIgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLmVxdWFsaXplclxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tZWRpYVF1ZXJ5XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmltYWdlTG9hZGVyIGlmIGVxdWFsaXplciBjb250YWlucyBpbWFnZXNcbiAqL1xuXG5jbGFzcyBFcXVhbGl6ZXIgZXh0ZW5kcyBQbHVnaW4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBFcXVhbGl6ZXIuXG4gICAqIEBjbGFzc1xuICAgKiBAbmFtZSBFcXVhbGl6ZXJcbiAgICogQGZpcmVzIEVxdWFsaXplciNpbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBhZGQgdGhlIHRyaWdnZXIgdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIF9zZXR1cChlbGVtZW50LCBvcHRpb25zKXtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgID0gJC5leHRlbmQoe30sIEVxdWFsaXplci5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuICAgIHRoaXMuY2xhc3NOYW1lID0gJ0VxdWFsaXplcic7IC8vIGllOSBiYWNrIGNvbXBhdFxuXG4gICAgdGhpcy5faW5pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBFcXVhbGl6ZXIgcGx1Z2luIGFuZCBjYWxscyBmdW5jdGlvbnMgdG8gZ2V0IGVxdWFsaXplciBmdW5jdGlvbmluZyBvbiBsb2FkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdmFyIGVxSWQgPSB0aGlzLiRlbGVtZW50LmF0dHIoJ2RhdGEtZXF1YWxpemVyJykgfHwgJyc7XG4gICAgdmFyICR3YXRjaGVkID0gdGhpcy4kZWxlbWVudC5maW5kKGBbZGF0YS1lcXVhbGl6ZXItd2F0Y2g9XCIke2VxSWR9XCJdYCk7XG5cbiAgICBNZWRpYVF1ZXJ5Ll9pbml0KCk7XG5cbiAgICB0aGlzLiR3YXRjaGVkID0gJHdhdGNoZWQubGVuZ3RoID8gJHdhdGNoZWQgOiB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLWVxdWFsaXplci13YXRjaF0nKTtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2RhdGEtcmVzaXplJywgKGVxSWQgfHwgR2V0WW9EaWdpdHMoNiwgJ2VxJykpKTtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2RhdGEtbXV0YXRlJywgKGVxSWQgfHwgR2V0WW9EaWdpdHMoNiwgJ2VxJykpKTtcblxuICAgIHRoaXMuaGFzTmVzdGVkID0gdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1lcXVhbGl6ZXJdJykubGVuZ3RoID4gMDtcbiAgICB0aGlzLmlzTmVzdGVkID0gdGhpcy4kZWxlbWVudC5wYXJlbnRzVW50aWwoZG9jdW1lbnQuYm9keSwgJ1tkYXRhLWVxdWFsaXplcl0nKS5sZW5ndGggPiAwO1xuICAgIHRoaXMuaXNPbiA9IGZhbHNlO1xuICAgIHRoaXMuX2JpbmRIYW5kbGVyID0ge1xuICAgICAgb25SZXNpemVNZUJvdW5kOiB0aGlzLl9vblJlc2l6ZU1lLmJpbmQodGhpcyksXG4gICAgICBvblBvc3RFcXVhbGl6ZWRCb3VuZDogdGhpcy5fb25Qb3N0RXF1YWxpemVkLmJpbmQodGhpcylcbiAgICB9O1xuXG4gICAgdmFyIGltZ3MgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2ltZycpO1xuICAgIHZhciB0b29TbWFsbDtcbiAgICBpZih0aGlzLm9wdGlvbnMuZXF1YWxpemVPbil7XG4gICAgICB0b29TbWFsbCA9IHRoaXMuX2NoZWNrTVEoKTtcbiAgICAgICQod2luZG93KS5vbignY2hhbmdlZC56Zi5tZWRpYXF1ZXJ5JywgdGhpcy5fY2hlY2tNUS5iaW5kKHRoaXMpKTtcbiAgICB9ZWxzZSB7XG4gICAgICB0aGlzLl9ldmVudHMoKTtcbiAgICB9XG4gICAgaWYoKHR5cGVvZiB0b29TbWFsbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdG9vU21hbGwgPT09IGZhbHNlKSB8fCB0eXBlb2YgdG9vU21hbGwgPT09ICd1bmRlZmluZWQnKXtcbiAgICAgIGlmKGltZ3MubGVuZ3RoKXtcbiAgICAgICAgb25JbWFnZXNMb2FkZWQoaW1ncywgdGhpcy5fcmVmbG93LmJpbmQodGhpcykpO1xuICAgICAgfWVsc2Uge1xuICAgICAgICB0aGlzLl9yZWZsb3coKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBldmVudCBsaXN0ZW5lcnMgaWYgdGhlIGJyZWFrcG9pbnQgaXMgdG9vIHNtYWxsLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BhdXNlRXZlbnRzKCkge1xuICAgIHRoaXMuaXNPbiA9IGZhbHNlO1xuICAgIHRoaXMuJGVsZW1lbnQub2ZmKHtcbiAgICAgICcuemYuZXF1YWxpemVyJzogdGhpcy5fYmluZEhhbmRsZXIub25Qb3N0RXF1YWxpemVkQm91bmQsXG4gICAgICAncmVzaXplbWUuemYudHJpZ2dlcic6IHRoaXMuX2JpbmRIYW5kbGVyLm9uUmVzaXplTWVCb3VuZCxcblx0ICAnbXV0YXRlbWUuemYudHJpZ2dlcic6IHRoaXMuX2JpbmRIYW5kbGVyLm9uUmVzaXplTWVCb3VuZFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGZ1bmN0aW9uIHRvIGhhbmRsZSAkZWxlbWVudHMgcmVzaXplbWUuemYudHJpZ2dlciwgd2l0aCBib3VuZCB0aGlzIG9uIF9iaW5kSGFuZGxlci5vblJlc2l6ZU1lQm91bmRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblJlc2l6ZU1lKCkge1xuICAgIHRoaXMuX3JlZmxvdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIGZ1bmN0aW9uIHRvIGhhbmRsZSAkZWxlbWVudHMgcG9zdGVxdWFsaXplZC56Zi5lcXVhbGl6ZXIsIHdpdGggYm91bmQgdGhpcyBvbiBfYmluZEhhbmRsZXIub25Qb3N0RXF1YWxpemVkQm91bmRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblBvc3RFcXVhbGl6ZWQoZSkge1xuICAgIGlmKGUudGFyZ2V0ICE9PSB0aGlzLiRlbGVtZW50WzBdKXsgdGhpcy5fcmVmbG93KCk7IH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBldmVudHMgZm9yIEVxdWFsaXplci5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdGhpcy5fcGF1c2VFdmVudHMoKTtcbiAgICBpZih0aGlzLmhhc05lc3RlZCl7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCdwb3N0ZXF1YWxpemVkLnpmLmVxdWFsaXplcicsIHRoaXMuX2JpbmRIYW5kbGVyLm9uUG9zdEVxdWFsaXplZEJvdW5kKTtcbiAgICB9ZWxzZSB7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCdyZXNpemVtZS56Zi50cmlnZ2VyJywgdGhpcy5fYmluZEhhbmRsZXIub25SZXNpemVNZUJvdW5kKTtcblx0ICB0aGlzLiRlbGVtZW50Lm9uKCdtdXRhdGVtZS56Zi50cmlnZ2VyJywgdGhpcy5fYmluZEhhbmRsZXIub25SZXNpemVNZUJvdW5kKTtcbiAgICB9XG4gICAgdGhpcy5pc09uID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCB0byB0aGUgbWluaW11bSByZXF1aXJlZCBzaXplLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrTVEoKSB7XG4gICAgdmFyIHRvb1NtYWxsID0gIU1lZGlhUXVlcnkuaXModGhpcy5vcHRpb25zLmVxdWFsaXplT24pO1xuICAgIGlmKHRvb1NtYWxsKXtcbiAgICAgIGlmKHRoaXMuaXNPbil7XG4gICAgICAgIHRoaXMuX3BhdXNlRXZlbnRzKCk7XG4gICAgICAgIHRoaXMuJHdhdGNoZWQuY3NzKCdoZWlnaHQnLCAnYXV0bycpO1xuICAgICAgfVxuICAgIH1lbHNlIHtcbiAgICAgIGlmKCF0aGlzLmlzT24pe1xuICAgICAgICB0aGlzLl9ldmVudHMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvb1NtYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgbm9vcCB2ZXJzaW9uIGZvciB0aGUgcGx1Z2luXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfa2lsbHN3aXRjaCgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgbmVjZXNzYXJ5IGZ1bmN0aW9ucyB0byB1cGRhdGUgRXF1YWxpemVyIHVwb24gRE9NIGNoYW5nZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlZmxvdygpIHtcbiAgICBpZighdGhpcy5vcHRpb25zLmVxdWFsaXplT25TdGFjayl7XG4gICAgICBpZih0aGlzLl9pc1N0YWNrZWQoKSl7XG4gICAgICAgIHRoaXMuJHdhdGNoZWQuY3NzKCdoZWlnaHQnLCAnYXV0bycpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZXF1YWxpemVCeVJvdykge1xuICAgICAgdGhpcy5nZXRIZWlnaHRzQnlSb3codGhpcy5hcHBseUhlaWdodEJ5Um93LmJpbmQodGhpcykpO1xuICAgIH1lbHNlIHtcbiAgICAgIHRoaXMuZ2V0SGVpZ2h0cyh0aGlzLmFwcGx5SGVpZ2h0LmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBkZXRlcm1pbmVzIGlmIHRoZSBmaXJzdCAyIGVsZW1lbnRzIGFyZSAqTk9UKiBzdGFja2VkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzU3RhY2tlZCgpIHtcbiAgICBpZiAoIXRoaXMuJHdhdGNoZWRbMF0gfHwgIXRoaXMuJHdhdGNoZWRbMV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4kd2F0Y2hlZFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgIT09IHRoaXMuJHdhdGNoZWRbMV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBvdXRlciBoZWlnaHRzIG9mIGNoaWxkcmVuIGNvbnRhaW5lZCB3aXRoaW4gYW4gRXF1YWxpemVyIHBhcmVudCBhbmQgcmV0dXJucyB0aGVtIGluIGFuIGFycmF5XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIC0gQSBub24tb3B0aW9uYWwgY2FsbGJhY2sgdG8gcmV0dXJuIHRoZSBoZWlnaHRzIGFycmF5IHRvLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGhlaWdodHMgLSBBbiBhcnJheSBvZiBoZWlnaHRzIG9mIGNoaWxkcmVuIHdpdGhpbiBFcXVhbGl6ZXIgY29udGFpbmVyXG4gICAqL1xuICBnZXRIZWlnaHRzKGNiKSB7XG4gICAgdmFyIGhlaWdodHMgPSBbXTtcbiAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSB0aGlzLiR3YXRjaGVkLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXtcbiAgICAgIHRoaXMuJHdhdGNoZWRbaV0uc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgaGVpZ2h0cy5wdXNoKHRoaXMuJHdhdGNoZWRbaV0ub2Zmc2V0SGVpZ2h0KTtcbiAgICB9XG4gICAgY2IoaGVpZ2h0cyk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIG91dGVyIGhlaWdodHMgb2YgY2hpbGRyZW4gY29udGFpbmVkIHdpdGhpbiBhbiBFcXVhbGl6ZXIgcGFyZW50IGFuZCByZXR1cm5zIHRoZW0gaW4gYW4gYXJyYXlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgLSBBIG5vbi1vcHRpb25hbCBjYWxsYmFjayB0byByZXR1cm4gdGhlIGhlaWdodHMgYXJyYXkgdG8uXG4gICAqIEByZXR1cm5zIHtBcnJheX0gZ3JvdXBzIC0gQW4gYXJyYXkgb2YgaGVpZ2h0cyBvZiBjaGlsZHJlbiB3aXRoaW4gRXF1YWxpemVyIGNvbnRhaW5lciBncm91cGVkIGJ5IHJvdyB3aXRoIGVsZW1lbnQsaGVpZ2h0IGFuZCBtYXggYXMgbGFzdCBjaGlsZFxuICAgKi9cbiAgZ2V0SGVpZ2h0c0J5Um93KGNiKSB7XG4gICAgdmFyIGxhc3RFbFRvcE9mZnNldCA9ICh0aGlzLiR3YXRjaGVkLmxlbmd0aCA/IHRoaXMuJHdhdGNoZWQuZmlyc3QoKS5vZmZzZXQoKS50b3AgOiAwKSxcbiAgICAgICAgZ3JvdXBzID0gW10sXG4gICAgICAgIGdyb3VwID0gMDtcbiAgICAvL2dyb3VwIGJ5IFJvd1xuICAgIGdyb3Vwc1tncm91cF0gPSBbXTtcbiAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSB0aGlzLiR3YXRjaGVkLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXtcbiAgICAgIHRoaXMuJHdhdGNoZWRbaV0uc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgLy9tYXliZSBjb3VsZCB1c2UgdGhpcy4kd2F0Y2hlZFtpXS5vZmZzZXRUb3BcbiAgICAgIHZhciBlbE9mZnNldFRvcCA9ICQodGhpcy4kd2F0Y2hlZFtpXSkub2Zmc2V0KCkudG9wO1xuICAgICAgaWYgKGVsT2Zmc2V0VG9wICE9PSBsYXN0RWxUb3BPZmZzZXQpIHtcbiAgICAgICAgZ3JvdXArKztcbiAgICAgICAgZ3JvdXBzW2dyb3VwXSA9IFtdO1xuICAgICAgICBsYXN0RWxUb3BPZmZzZXQ9ZWxPZmZzZXRUb3A7XG4gICAgICB9XG4gICAgICBncm91cHNbZ3JvdXBdLnB1c2goW3RoaXMuJHdhdGNoZWRbaV0sdGhpcy4kd2F0Y2hlZFtpXS5vZmZzZXRIZWlnaHRdKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMCwgbG4gPSBncm91cHMubGVuZ3RoOyBqIDwgbG47IGorKykge1xuICAgICAgdmFyIGhlaWdodHMgPSAkKGdyb3Vwc1tqXSkubWFwKGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzWzFdOyB9KS5nZXQoKTtcbiAgICAgIHZhciBtYXggICAgICAgICA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGhlaWdodHMpO1xuICAgICAgZ3JvdXBzW2pdLnB1c2gobWF4KTtcbiAgICB9XG4gICAgY2IoZ3JvdXBzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRoZSBDU1MgaGVpZ2h0IHByb3BlcnR5IG9mIGVhY2ggY2hpbGQgaW4gYW4gRXF1YWxpemVyIHBhcmVudCB0byBtYXRjaCB0aGUgdGFsbGVzdFxuICAgKiBAcGFyYW0ge2FycmF5fSBoZWlnaHRzIC0gQW4gYXJyYXkgb2YgaGVpZ2h0cyBvZiBjaGlsZHJlbiB3aXRoaW4gRXF1YWxpemVyIGNvbnRhaW5lclxuICAgKiBAZmlyZXMgRXF1YWxpemVyI3ByZWVxdWFsaXplZFxuICAgKiBAZmlyZXMgRXF1YWxpemVyI3Bvc3RlcXVhbGl6ZWRcbiAgICovXG4gIGFwcGx5SGVpZ2h0KGhlaWdodHMpIHtcbiAgICB2YXIgbWF4ID0gTWF0aC5tYXguYXBwbHkobnVsbCwgaGVpZ2h0cyk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIHRoZSBoZWlnaHRzIGFyZSBhcHBsaWVkXG4gICAgICogQGV2ZW50IEVxdWFsaXplciNwcmVlcXVhbGl6ZWRcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3ByZWVxdWFsaXplZC56Zi5lcXVhbGl6ZXInKTtcblxuICAgIHRoaXMuJHdhdGNoZWQuY3NzKCdoZWlnaHQnLCBtYXgpO1xuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgaGVpZ2h0cyBoYXZlIGJlZW4gYXBwbGllZFxuICAgICAqIEBldmVudCBFcXVhbGl6ZXIjcG9zdGVxdWFsaXplZFxuICAgICAqL1xuICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3Bvc3RlcXVhbGl6ZWQuemYuZXF1YWxpemVyJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgQ1NTIGhlaWdodCBwcm9wZXJ0eSBvZiBlYWNoIGNoaWxkIGluIGFuIEVxdWFsaXplciBwYXJlbnQgdG8gbWF0Y2ggdGhlIHRhbGxlc3QgYnkgcm93XG4gICAqIEBwYXJhbSB7YXJyYXl9IGdyb3VwcyAtIEFuIGFycmF5IG9mIGhlaWdodHMgb2YgY2hpbGRyZW4gd2l0aGluIEVxdWFsaXplciBjb250YWluZXIgZ3JvdXBlZCBieSByb3cgd2l0aCBlbGVtZW50LGhlaWdodCBhbmQgbWF4IGFzIGxhc3QgY2hpbGRcbiAgICogQGZpcmVzIEVxdWFsaXplciNwcmVlcXVhbGl6ZWRcbiAgICogQGZpcmVzIEVxdWFsaXplciNwcmVlcXVhbGl6ZWRyb3dcbiAgICogQGZpcmVzIEVxdWFsaXplciNwb3N0ZXF1YWxpemVkcm93XG4gICAqIEBmaXJlcyBFcXVhbGl6ZXIjcG9zdGVxdWFsaXplZFxuICAgKi9cbiAgYXBwbHlIZWlnaHRCeVJvdyhncm91cHMpIHtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgdGhlIGhlaWdodHMgYXJlIGFwcGxpZWRcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3ByZWVxdWFsaXplZC56Zi5lcXVhbGl6ZXInKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGxlbiA7IGkrKykge1xuICAgICAgdmFyIGdyb3Vwc0lMZW5ndGggPSBncm91cHNbaV0ubGVuZ3RoLFxuICAgICAgICAgIG1heCA9IGdyb3Vwc1tpXVtncm91cHNJTGVuZ3RoIC0gMV07XG4gICAgICBpZiAoZ3JvdXBzSUxlbmd0aDw9Mikge1xuICAgICAgICAkKGdyb3Vwc1tpXVswXVswXSkuY3NzKHsnaGVpZ2h0JzonYXV0byd9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAgKiBGaXJlcyBiZWZvcmUgdGhlIGhlaWdodHMgcGVyIHJvdyBhcmUgYXBwbGllZFxuICAgICAgICAqIEBldmVudCBFcXVhbGl6ZXIjcHJlZXF1YWxpemVkcm93XG4gICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3ByZWVxdWFsaXplZHJvdy56Zi5lcXVhbGl6ZXInKTtcbiAgICAgIGZvciAodmFyIGogPSAwLCBsZW5KID0gKGdyb3Vwc0lMZW5ndGgtMSk7IGogPCBsZW5KIDsgaisrKSB7XG4gICAgICAgICQoZ3JvdXBzW2ldW2pdWzBdKS5jc3MoeydoZWlnaHQnOm1heH0pO1xuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgICogRmlyZXMgd2hlbiB0aGUgaGVpZ2h0cyBwZXIgcm93IGhhdmUgYmVlbiBhcHBsaWVkXG4gICAgICAgICogQGV2ZW50IEVxdWFsaXplciNwb3N0ZXF1YWxpemVkcm93XG4gICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3Bvc3RlcXVhbGl6ZWRyb3cuemYuZXF1YWxpemVyJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIGhlaWdodHMgaGF2ZSBiZWVuIGFwcGxpZWRcbiAgICAgKi9cbiAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdwb3N0ZXF1YWxpemVkLnpmLmVxdWFsaXplcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFuIGluc3RhbmNlIG9mIEVxdWFsaXplci5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBfZGVzdHJveSgpIHtcbiAgICB0aGlzLl9wYXVzZUV2ZW50cygpO1xuICAgIHRoaXMuJHdhdGNoZWQuY3NzKCdoZWlnaHQnLCAnYXV0bycpO1xuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBzZXR0aW5ncyBmb3IgcGx1Z2luXG4gKi9cbkVxdWFsaXplci5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIEVuYWJsZSBoZWlnaHQgZXF1YWxpemF0aW9uIHdoZW4gc3RhY2tlZCBvbiBzbWFsbGVyIHNjcmVlbnMuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlcXVhbGl6ZU9uU3RhY2s6IGZhbHNlLFxuICAvKipcbiAgICogRW5hYmxlIGhlaWdodCBlcXVhbGl6YXRpb24gcm93IGJ5IHJvdy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVxdWFsaXplQnlSb3c6IGZhbHNlLFxuICAvKipcbiAgICogU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbWluaW11bSBicmVha3BvaW50IHNpemUgdGhlIHBsdWdpbiBzaG91bGQgZXF1YWxpemUgaGVpZ2h0cyBvbi5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgZXF1YWxpemVPbjogJydcbn07XG5cbi8qKlxuICogSW50ZXJjaGFuZ2UgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLmludGVyY2hhbmdlXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1lZGlhUXVlcnlcbiAqL1xuXG5jbGFzcyBJbnRlcmNoYW5nZSBleHRlbmRzIFBsdWdpbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIEludGVyY2hhbmdlLlxuICAgKiBAY2xhc3NcbiAgICogQG5hbWUgSW50ZXJjaGFuZ2VcbiAgICogQGZpcmVzIEludGVyY2hhbmdlI2luaXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIGFkZCB0aGUgdHJpZ2dlciB0by5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgX3NldHVwKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgSW50ZXJjaGFuZ2UuZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcbiAgICB0aGlzLnJ1bGVzID0gW107XG4gICAgdGhpcy5jdXJyZW50UGF0aCA9ICcnO1xuICAgIHRoaXMuY2xhc3NOYW1lID0gJ0ludGVyY2hhbmdlJzsgLy8gaWU5IGJhY2sgY29tcGF0XG5cbiAgICAvLyBUcmlnZ2VycyBpbml0IGlzIGlkZW1wb3RlbnQsIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgaW5pdGlhbGl6ZWRcbiAgICBUcmlnZ2Vycy5pbml0KCQpO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuICAgIHRoaXMuX2V2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBJbnRlcmNoYW5nZSBwbHVnaW4gYW5kIGNhbGxzIGZ1bmN0aW9ucyB0byBnZXQgaW50ZXJjaGFuZ2UgZnVuY3Rpb25pbmcgb24gbG9hZC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICBNZWRpYVF1ZXJ5Ll9pbml0KCk7XG5cbiAgICB2YXIgaWQgPSB0aGlzLiRlbGVtZW50WzBdLmlkIHx8IEdldFlvRGlnaXRzKDYsICdpbnRlcmNoYW5nZScpO1xuICAgIHRoaXMuJGVsZW1lbnQuYXR0cih7XG4gICAgICAnZGF0YS1yZXNpemUnOiBpZCxcbiAgICAgICdpZCc6IGlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9wYXJzZU9wdGlvbnMoKTtcbiAgICB0aGlzLl9hZGRCcmVha3BvaW50cygpO1xuICAgIHRoaXMuX2dlbmVyYXRlUnVsZXMoKTtcbiAgICB0aGlzLl9yZWZsb3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBldmVudHMgZm9yIEludGVyY2hhbmdlLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInKS5vbigncmVzaXplbWUuemYudHJpZ2dlcicsICgpID0+IHRoaXMuX3JlZmxvdygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBuZWNlc3NhcnkgZnVuY3Rpb25zIHRvIHVwZGF0ZSBJbnRlcmNoYW5nZSB1cG9uIERPTSBjaGFuZ2VcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVmbG93KCkge1xuICAgIHZhciBtYXRjaDtcblxuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIHJ1bGUsIGJ1dCBvbmx5IHNhdmUgdGhlIGxhc3QgbWF0Y2hcbiAgICBmb3IgKHZhciBpIGluIHRoaXMucnVsZXMpIHtcbiAgICAgIGlmKHRoaXMucnVsZXMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzLnJ1bGVzW2ldO1xuICAgICAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEocnVsZS5xdWVyeSkubWF0Y2hlcykge1xuICAgICAgICAgIG1hdGNoID0gcnVsZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgdGhpcy5yZXBsYWNlKG1hdGNoLnBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBvcHRpb25zIHZhbGlmaXR5IGFuZCBzZXQgZGVmYXVsdHMgZm9yOlxuICAgKiAtIGBkYXRhLWludGVyY2hhbmdlLXR5cGVgOiBpZiBzZXQsIGVuZm9yY2UgdGhlIHR5cGUgb2YgcmVwbGFjZW1lbnQgKGF1dG8sIHNyYywgYmFja2dyb3VuZCBvciBodG1sKVxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wYXJzZU9wdGlvbnMoKSB7XG4gICAgdmFyIHR5cGVzID0gWydhdXRvJywgJ3NyYycsICdiYWNrZ3JvdW5kJywgJ2h0bWwnXTtcbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy50eXBlID09PSAndW5kZWZpbmVkJylcbiAgICAgIHRoaXMub3B0aW9ucy50eXBlID0gJ2F1dG8nO1xuICAgIGVsc2UgaWYgKHR5cGVzLmluZGV4T2YodGhpcy5vcHRpb25zLnR5cGUpID09PSAtMSkge1xuICAgICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiBpbnZhbGlkIHZhbHVlIFwiJHt0aGlzLm9wdGlvbnMudHlwZX1cIiBmb3IgSW50ZXJjaGFuZ2Ugb3B0aW9uIFwidHlwZVwiYCk7XG4gICAgICB0aGlzLm9wdGlvbnMudHlwZSA9ICdhdXRvJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgRm91bmRhdGlvbiBicmVha3BvaW50cyBhbmQgYWRkcyB0aGVtIHRvIHRoZSBJbnRlcmNoYW5nZS5TUEVDSUFMX1FVRVJJRVMgb2JqZWN0LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRCcmVha3BvaW50cygpIHtcbiAgICBmb3IgKHZhciBpIGluIE1lZGlhUXVlcnkucXVlcmllcykge1xuICAgICAgaWYgKE1lZGlhUXVlcnkucXVlcmllcy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICB2YXIgcXVlcnkgPSBNZWRpYVF1ZXJ5LnF1ZXJpZXNbaV07XG4gICAgICAgIEludGVyY2hhbmdlLlNQRUNJQUxfUVVFUklFU1txdWVyeS5uYW1lXSA9IHF1ZXJ5LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIEludGVyY2hhbmdlIGVsZW1lbnQgZm9yIHRoZSBwcm92aWRlZCBtZWRpYSBxdWVyeSArIGNvbnRlbnQgcGFpcmluZ3NcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtBcnJheX0gc2NlbmFyaW9zIC0gQXJyYXkgb2Ygb2JqZWN0cyB0aGF0IGhhdmUgJ21xJyBhbmQgJ3BhdGgnIGtleXMgd2l0aCBjb3JyZXNwb25kaW5nIGtleXNcbiAgICovXG4gIF9nZW5lcmF0ZVJ1bGVzKCkge1xuICAgIHZhciBydWxlc0xpc3QgPSBbXTtcbiAgICB2YXIgcnVsZXM7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnJ1bGVzKSB7XG4gICAgICBydWxlcyA9IHRoaXMub3B0aW9ucy5ydWxlcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBydWxlcyA9IHRoaXMuJGVsZW1lbnQuZGF0YSgnaW50ZXJjaGFuZ2UnKTtcbiAgICB9XG5cbiAgICBydWxlcyA9ICB0eXBlb2YgcnVsZXMgPT09ICdzdHJpbmcnID8gcnVsZXMubWF0Y2goL1xcWy4qPywgLio/XFxdL2cpIDogcnVsZXM7XG5cbiAgICBmb3IgKHZhciBpIGluIHJ1bGVzKSB7XG4gICAgICBpZihydWxlcy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICB2YXIgcnVsZSA9IHJ1bGVzW2ldLnNsaWNlKDEsIC0xKS5zcGxpdCgnLCAnKTtcbiAgICAgICAgdmFyIHBhdGggPSBydWxlLnNsaWNlKDAsIC0xKS5qb2luKCcnKTtcbiAgICAgICAgdmFyIHF1ZXJ5ID0gcnVsZVtydWxlLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmIChJbnRlcmNoYW5nZS5TUEVDSUFMX1FVRVJJRVNbcXVlcnldKSB7XG4gICAgICAgICAgcXVlcnkgPSBJbnRlcmNoYW5nZS5TUEVDSUFMX1FVRVJJRVNbcXVlcnldO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVsZXNMaXN0LnB1c2goe1xuICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgcXVlcnk6IHF1ZXJ5XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucnVsZXMgPSBydWxlc0xpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBgc3JjYCBwcm9wZXJ0eSBvZiBhbiBpbWFnZSwgb3IgY2hhbmdlIHRoZSBIVE1MIG9mIGEgY29udGFpbmVyLCB0byB0aGUgc3BlY2lmaWVkIHBhdGguXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCAtIFBhdGggdG8gdGhlIGltYWdlIG9yIEhUTUwgcGFydGlhbC5cbiAgICogQGZpcmVzIEludGVyY2hhbmdlI3JlcGxhY2VkXG4gICAqL1xuICByZXBsYWNlKHBhdGgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aCA9PT0gcGF0aCkgcmV0dXJuO1xuXG4gICAgdmFyIHRyaWdnZXIgPSAncmVwbGFjZWQuemYuaW50ZXJjaGFuZ2UnO1xuXG4gICAgdmFyIHR5cGUgPSB0aGlzLm9wdGlvbnMudHlwZTtcbiAgICBpZiAodHlwZSA9PT0gJ2F1dG8nKSB7XG4gICAgICBpZiAodGhpcy4kZWxlbWVudFswXS5ub2RlTmFtZSA9PT0gJ0lNRycpXG4gICAgICAgIHR5cGUgPSAnc3JjJztcbiAgICAgIGVsc2UgaWYgKHBhdGgubWF0Y2goL1xcLihnaWZ8anBlP2d8cG5nfHN2Z3x0aWZmKShbPyNdLiopPy9pKSlcbiAgICAgICAgdHlwZSA9ICdiYWNrZ3JvdW5kJztcbiAgICAgIGVsc2VcbiAgICAgICAgdHlwZSA9ICdodG1sJztcbiAgICB9XG5cbiAgICAvLyBSZXBsYWNpbmcgaW1hZ2VzXG4gICAgaWYgKHR5cGUgPT09ICdzcmMnKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ3NyYycsIHBhdGgpXG4gICAgICAgIC5vbignbG9hZCcsICgpID0+IHsgdGhpcy5jdXJyZW50UGF0aCA9IHBhdGg7IH0pXG4gICAgICAgIC50cmlnZ2VyKHRyaWdnZXIpO1xuICAgIH1cbiAgICAvLyBSZXBsYWNpbmcgYmFja2dyb3VuZCBpbWFnZXNcbiAgICBlbHNlIGlmICh0eXBlID09PSAnYmFja2dyb3VuZCcpIHtcbiAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcKC9nLCAnJTI4JykucmVwbGFjZSgvXFwpL2csICclMjknKTtcbiAgICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgICAgLmNzcyh7ICdiYWNrZ3JvdW5kLWltYWdlJzogJ3VybCgnICsgcGF0aCArICcpJyB9KVxuICAgICAgICAudHJpZ2dlcih0cmlnZ2VyKTtcbiAgICB9XG4gICAgLy8gUmVwbGFjaW5nIEhUTUxcbiAgICBlbHNlIGlmICh0eXBlID09PSAnaHRtbCcpIHtcbiAgICAgICQuZ2V0KHBhdGgsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLiRlbGVtZW50XG4gICAgICAgICAgLmh0bWwocmVzcG9uc2UpXG4gICAgICAgICAgLnRyaWdnZXIodHJpZ2dlcik7XG4gICAgICAgICQocmVzcG9uc2UpLmZvdW5kYXRpb24oKTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aCA9IHBhdGg7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGNvbnRlbnQgaW4gYW4gSW50ZXJjaGFuZ2UgZWxlbWVudCBpcyBkb25lIGJlaW5nIGxvYWRlZC5cbiAgICAgKiBAZXZlbnQgSW50ZXJjaGFuZ2UjcmVwbGFjZWRcbiAgICAgKi9cbiAgICAvLyB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3JlcGxhY2VkLnpmLmludGVyY2hhbmdlJyk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgYW4gaW5zdGFuY2Ugb2YgaW50ZXJjaGFuZ2UuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX2Rlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInKTtcbiAgfVxufVxuXG4vKipcbiAqIERlZmF1bHQgc2V0dGluZ3MgZm9yIHBsdWdpblxuICovXG5JbnRlcmNoYW5nZS5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIFJ1bGVzIHRvIGJlIGFwcGxpZWQgdG8gSW50ZXJjaGFuZ2UgZWxlbWVudHMuIFNldCB3aXRoIHRoZSBgZGF0YS1pbnRlcmNoYW5nZWAgYXJyYXkgbm90YXRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUgez9hcnJheX1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgcnVsZXM6IG51bGwsXG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIHJlc3BvbnNpdmUgcmVzc291cmNlIHRvIHJlcGxhY2UuIEl0IGNhbiB0YWtlIHRoZSBmb2xsb3dpbmcgb3B0aW9uczpcbiAgICogLSBgYXV0b2AgKGRlZmF1bHQpOiBjaG9vc2UgdGhlIHR5cGUgYWNjb3JkaW5nIHRvIHRoZSBlbGVtZW50IHRhZyBvciB0aGUgcmVzc291cmNlIGV4dGVuc2lvbixcbiAgICogLSBgc3JjYDogcmVwbGFjZSB0aGUgYFtzcmNdYCBhdHRyaWJ1dGUsIHJlY29tbWVuZGVkIGZvciBpbWFnZXMgYDxpbWc+YC5cbiAgICogLSBgYmFja2dyb3VuZGA6IHJlcGxhY2UgdGhlIGBiYWNrZ3JvdW5kLWltYWdlYCBDU1MgcHJvcGVydHkuXG4gICAqIC0gYGh0bWxgOiByZXBsYWNlIHRoZSBlbGVtZW50IGNvbnRlbnQuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICB0eXBlOiAnYXV0bydcbn07XG5cbkludGVyY2hhbmdlLlNQRUNJQUxfUVVFUklFUyA9IHtcbiAgJ2xhbmRzY2FwZSc6ICdzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKScsXG4gICdwb3J0cmFpdCc6ICdzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpJyxcbiAgJ3JldGluYSc6ICdvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIG9ubHkgc2NyZWVuIGFuZCAobWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgb25seSBzY3JlZW4gYW5kICgtby1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyLzEpLCBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCBvbmx5IHNjcmVlbiBhbmQgKG1pbi1yZXNvbHV0aW9uOiAxOTJkcGkpLCBvbmx5IHNjcmVlbiBhbmQgKG1pbi1yZXNvbHV0aW9uOiAyZHBweCknXG59O1xuXG4vKipcbiAqIFNtb290aFNjcm9sbCBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24uc21vb3RoU2Nyb2xsXG4gKi9cbmNsYXNzIFNtb290aFNjcm9sbCBleHRlbmRzIFBsdWdpbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFNtb290aFNjcm9sbC5cbiAgICogQGNsYXNzXG4gICAqIEBuYW1lIFNtb290aFNjcm9sbFxuICAgKiBAZmlyZXMgU21vb3RoU2Nyb2xsI2luaXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIGFkZCB0aGUgdHJpZ2dlciB0by5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgICBfc2V0dXAoZWxlbWVudCwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIFNtb290aFNjcm9sbC5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmNsYXNzTmFtZSA9ICdTbW9vdGhTY3JvbGwnOyAvLyBpZTkgYmFjayBjb21wYXRcblxuICAgICAgICB0aGlzLl9pbml0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSB0aGUgU21vb3RoU2Nyb2xsIHBsdWdpblxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2luaXQoKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy4kZWxlbWVudFswXS5pZCB8fCBHZXRZb0RpZ2l0cyg2LCAnc21vb3RoLXNjcm9sbCcpO1xuICAgICAgICB0aGlzLiRlbGVtZW50LmF0dHIoeyBpZCB9KTtcblxuICAgICAgICB0aGlzLl9ldmVudHMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBldmVudHMgZm9yIFNtb290aFNjcm9sbC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9ldmVudHMoKSB7XG4gICAgICAgIHRoaXMuX2xpbmtDbGlja0xpc3RlbmVyID0gdGhpcy5faGFuZGxlTGlua0NsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQub24oJ2NsaWNrLnpmLnNtb290aFNjcm9sbCcsIHRoaXMuX2xpbmtDbGlja0xpc3RlbmVyKTtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5vbignY2xpY2suemYuc21vb3RoU2Nyb2xsJywgJ2FbaHJlZl49XCIjXCJdJywgdGhpcy5fbGlua0NsaWNrTGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSB0aGUgZ2l2ZW4gZXZlbnQgdG8gc21vb3RobHkgc2Nyb2xsIHRvIHRoZSBhbmNob3IgcG9pbnRlZCBieSB0aGUgZXZlbnQgdGFyZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gZSAtIGV2ZW50XG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfaGFuZGxlTGlua0NsaWNrKGUpIHtcbiAgICAgICAgLy8gRm9sbG93IHRoZSBsaW5rIGlmIGl0IGRvZXMgbm90IHBvaW50IHRvIGFuIGFuY2hvci5cbiAgICAgICAgaWYgKCEkKGUuY3VycmVudFRhcmdldCkuaXMoJ2FbaHJlZl49XCIjXCJdJykpIHJldHVybjtcblxuICAgICAgICBjb25zdCBhcnJpdmFsID0gZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXG4gICAgICAgIHRoaXMuX2luVHJhbnNpdGlvbiA9IHRydWU7XG5cbiAgICAgICAgU21vb3RoU2Nyb2xsLnNjcm9sbFRvTG9jKGFycml2YWwsIHRoaXMub3B0aW9ucywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5UcmFuc2l0aW9uID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gc2Nyb2xsIHRvIGEgZ2l2ZW4gbG9jYXRpb24gb24gdGhlIHBhZ2UuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGxvYyAtIEEgcHJvcGVybHkgZm9ybWF0dGVkIGpRdWVyeSBpZCBzZWxlY3Rvci4gRXhhbXBsZTogJyNmb28nXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byB1c2UuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBmdW5jdGlvblxuICAgICAqL1xuICAgIHN0YXRpYyBzY3JvbGxUb0xvYyhsb2MsIG9wdGlvbnMgPSBTbW9vdGhTY3JvbGwuZGVmYXVsdHMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0ICRsb2MgPSAkKGxvYyk7XG5cbiAgICAgICAgLy8gRG8gbm90aGluZyBpZiB0YXJnZXQgZG9lcyBub3QgZXhpc3QgdG8gcHJldmVudCBlcnJvcnNcbiAgICAgICAgaWYgKCEkbG9jLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHZhciBzY3JvbGxQb3MgPSBNYXRoLnJvdW5kKCRsb2Mub2Zmc2V0KCkudG9wIC0gb3B0aW9ucy50aHJlc2hvbGQgLyAyIC0gb3B0aW9ucy5vZmZzZXQpO1xuXG4gICAgICAgICQoJ2h0bWwsIGJvZHknKS5zdG9wKHRydWUpLmFuaW1hdGUoXG4gICAgICAgICAgICB7IHNjcm9sbFRvcDogc2Nyb2xsUG9zIH0sXG4gICAgICAgICAgICBvcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICAgICAgb3B0aW9ucy5hbmltYXRpb25FYXNpbmcsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyl7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc3Ryb3lzIHRoZSBTbW9vdGhTY3JvbGwgaW5zdGFuY2UuXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICovXG4gICAgX2Rlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdjbGljay56Zi5zbW9vdGhTY3JvbGwnLCB0aGlzLl9saW5rQ2xpY2tMaXN0ZW5lcik7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdjbGljay56Zi5zbW9vdGhTY3JvbGwnLCAnYVtocmVmXj1cIiNcIl0nLCB0aGlzLl9saW5rQ2xpY2tMaXN0ZW5lcik7XG4gICAgfVxufVxuXG4vKipcbiAqIERlZmF1bHQgc2V0dGluZ3MgZm9yIHBsdWdpbi5cbiAqL1xuU21vb3RoU2Nyb2xsLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQW1vdW50IG9mIHRpbWUsIGluIG1zLCB0aGUgYW5pbWF0ZWQgc2Nyb2xsaW5nIHNob3VsZCB0YWtlIGJldHdlZW4gbG9jYXRpb25zLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDUwMFxuICAgKi9cbiAgYW5pbWF0aW9uRHVyYXRpb246IDUwMCxcbiAgLyoqXG4gICAqIEFuaW1hdGlvbiBzdHlsZSB0byB1c2Ugd2hlbiBzY3JvbGxpbmcgYmV0d2VlbiBsb2NhdGlvbnMuIENhbiBiZSBgJ3N3aW5nJ2Agb3IgYCdsaW5lYXInYC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnbGluZWFyJ1xuICAgKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL2FuaW1hdGV8SnF1ZXJ5IGFuaW1hdGV9XG4gICAqL1xuICBhbmltYXRpb25FYXNpbmc6ICdsaW5lYXInLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHBpeGVscyB0byB1c2UgYXMgYSBtYXJrZXIgZm9yIGxvY2F0aW9uIGNoYW5nZXMuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgNTBcbiAgICovXG4gIHRocmVzaG9sZDogNTAsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcGl4ZWxzIHRvIG9mZnNldCB0aGUgc2Nyb2xsIG9mIHRoZSBwYWdlIG9uIGl0ZW0gY2xpY2sgaWYgdXNpbmcgYSBzdGlja3kgbmF2IGJhci5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBvZmZzZXQ6IDBcbn07XG5cbi8qKlxuICogTWFnZWxsYW4gbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLm1hZ2VsbGFuXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi5zbW9vdGhTY3JvbGxcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudHJpZ2dlcnNcbiAqL1xuXG5jbGFzcyBNYWdlbGxhbiBleHRlbmRzIFBsdWdpbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIE1hZ2VsbGFuLlxuICAgKiBAY2xhc3NcbiAgICogQG5hbWUgTWFnZWxsYW5cbiAgICogQGZpcmVzIE1hZ2VsbGFuI2luaXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIGFkZCB0aGUgdHJpZ2dlciB0by5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgX3NldHVwKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgID0gJC5leHRlbmQoe30sIE1hZ2VsbGFuLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG4gICAgdGhpcy5jbGFzc05hbWUgPSAnTWFnZWxsYW4nOyAvLyBpZTkgYmFjayBjb21wYXRcblxuICAgIC8vIFRyaWdnZXJzIGluaXQgaXMgaWRlbXBvdGVudCwganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSBpdCBpcyBpbml0aWFsaXplZFxuICAgIFRyaWdnZXJzLmluaXQoJCk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5jYWxjUG9pbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIE1hZ2VsbGFuIHBsdWdpbiBhbmQgY2FsbHMgZnVuY3Rpb25zIHRvIGdldCBlcXVhbGl6ZXIgZnVuY3Rpb25pbmcgb24gbG9hZC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciBpZCA9IHRoaXMuJGVsZW1lbnRbMF0uaWQgfHwgR2V0WW9EaWdpdHMoNiwgJ21hZ2VsbGFuJyk7XG4gICAgdGhpcy4kdGFyZ2V0cyA9ICQoJ1tkYXRhLW1hZ2VsbGFuLXRhcmdldF0nKTtcbiAgICB0aGlzLiRsaW5rcyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnYScpO1xuICAgIHRoaXMuJGVsZW1lbnQuYXR0cih7XG4gICAgICAnZGF0YS1yZXNpemUnOiBpZCxcbiAgICAgICdkYXRhLXNjcm9sbCc6IGlkLFxuICAgICAgJ2lkJzogaWRcbiAgICB9KTtcbiAgICB0aGlzLiRhY3RpdmUgPSAkKCk7XG4gICAgdGhpcy5zY3JvbGxQb3MgPSBwYXJzZUludCh3aW5kb3cucGFnZVlPZmZzZXQsIDEwKTtcblxuICAgIHRoaXMuX2V2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgYW4gYXJyYXkgb2YgcGl4ZWwgdmFsdWVzIHRoYXQgYXJlIHRoZSBkZW1hcmNhdGlvbiBsaW5lcyBiZXR3ZWVuIGxvY2F0aW9ucyBvbiB0aGUgcGFnZS5cbiAgICogQ2FuIGJlIGludm9rZWQgaWYgbmV3IGVsZW1lbnRzIGFyZSBhZGRlZCBvciB0aGUgc2l6ZSBvZiBhIGxvY2F0aW9uIGNoYW5nZXMuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgY2FsY1BvaW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICBib2R5ID0gZG9jdW1lbnQuYm9keSxcbiAgICAgICAgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgIHRoaXMucG9pbnRzID0gW107XG4gICAgdGhpcy53aW5IZWlnaHQgPSBNYXRoLnJvdW5kKE1hdGgubWF4KHdpbmRvdy5pbm5lckhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQpKTtcbiAgICB0aGlzLmRvY0hlaWdodCA9IE1hdGgucm91bmQoTWF0aC5tYXgoYm9keS5zY3JvbGxIZWlnaHQsIGJvZHkub2Zmc2V0SGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwub2Zmc2V0SGVpZ2h0KSk7XG5cbiAgICB0aGlzLiR0YXJnZXRzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgIHZhciAkdGFyID0gJCh0aGlzKSxcbiAgICAgICAgICBwdCA9IE1hdGgucm91bmQoJHRhci5vZmZzZXQoKS50b3AgLSBfdGhpcy5vcHRpb25zLnRocmVzaG9sZCk7XG4gICAgICAkdGFyLnRhcmdldFBvaW50ID0gcHQ7XG4gICAgICBfdGhpcy5wb2ludHMucHVzaChwdCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgZXZlbnRzIGZvciBNYWdlbGxhbi5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICQod2luZG93KS5vbmUoJ2xvYWQnLCBmdW5jdGlvbigpe1xuICAgICAgaWYoX3RoaXMub3B0aW9ucy5kZWVwTGlua2luZyl7XG4gICAgICAgIGlmKGxvY2F0aW9uLmhhc2gpe1xuICAgICAgICAgIF90aGlzLnNjcm9sbFRvTG9jKGxvY2F0aW9uLmhhc2gpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBfdGhpcy5jYWxjUG9pbnRzKCk7XG4gICAgICBfdGhpcy5fdXBkYXRlQWN0aXZlKCk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5vbkxvYWRMaXN0ZW5lciA9IG9uTG9hZCgkKHdpbmRvdyksIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLiRlbGVtZW50XG4gICAgICAgIC5vbih7XG4gICAgICAgICAgJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInOiBfdGhpcy5yZWZsb3cuYmluZChfdGhpcyksXG4gICAgICAgICAgJ3Njcm9sbG1lLnpmLnRyaWdnZXInOiBfdGhpcy5fdXBkYXRlQWN0aXZlLmJpbmQoX3RoaXMpXG4gICAgICAgIH0pXG4gICAgICAgIC5vbignY2xpY2suemYubWFnZWxsYW4nLCAnYVtocmVmXj1cIiNcIl0nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB2YXIgYXJyaXZhbCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgICAgICAgX3RoaXMuc2Nyb2xsVG9Mb2MoYXJyaXZhbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGVlcExpbmtTY3JvbGwgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmKF90aGlzLm9wdGlvbnMuZGVlcExpbmtpbmcpIHtcbiAgICAgICAgX3RoaXMuc2Nyb2xsVG9Mb2Mod2luZG93LmxvY2F0aW9uLmhhc2gpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAkKHdpbmRvdykub24oJ2hhc2hjaGFuZ2UnLCB0aGlzLl9kZWVwTGlua1Njcm9sbCk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gc2Nyb2xsIHRvIGEgZ2l2ZW4gbG9jYXRpb24gb24gdGhlIHBhZ2UuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBsb2MgLSBhIHByb3Blcmx5IGZvcm1hdHRlZCBqUXVlcnkgaWQgc2VsZWN0b3IuIEV4YW1wbGU6ICcjZm9vJ1xuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIHNjcm9sbFRvTG9jKGxvYykge1xuICAgIHRoaXMuX2luVHJhbnNpdGlvbiA9IHRydWU7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgYW5pbWF0aW9uRWFzaW5nOiB0aGlzLm9wdGlvbnMuYW5pbWF0aW9uRWFzaW5nLFxuICAgICAgYW5pbWF0aW9uRHVyYXRpb246IHRoaXMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbixcbiAgICAgIHRocmVzaG9sZDogdGhpcy5vcHRpb25zLnRocmVzaG9sZCxcbiAgICAgIG9mZnNldDogdGhpcy5vcHRpb25zLm9mZnNldFxuICAgIH07XG5cbiAgICBTbW9vdGhTY3JvbGwuc2Nyb2xsVG9Mb2MobG9jLCBvcHRpb25zLCBmdW5jdGlvbigpIHtcbiAgICAgIF90aGlzLl9pblRyYW5zaXRpb24gPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBuZWNlc3NhcnkgZnVuY3Rpb25zIHRvIHVwZGF0ZSBNYWdlbGxhbiB1cG9uIERPTSBjaGFuZ2VcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICByZWZsb3coKSB7XG4gICAgdGhpcy5jYWxjUG9pbnRzKCk7XG4gICAgdGhpcy5fdXBkYXRlQWN0aXZlKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdmlzaWJpbGl0eSBvZiBhbiBhY3RpdmUgbG9jYXRpb24gbGluaywgYW5kIHVwZGF0ZXMgdGhlIHVybCBoYXNoIGZvciB0aGUgcGFnZSwgaWYgZGVlcExpbmtpbmcgZW5hYmxlZC5cbiAgICogQHByaXZhdGVcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBNYWdlbGxhbiN1cGRhdGVcbiAgICovXG4gIF91cGRhdGVBY3RpdmUoLypldnQsIGVsZW0sIHNjcm9sbFBvcyovKSB7XG4gICAgaWYodGhpcy5faW5UcmFuc2l0aW9uKSByZXR1cm47XG5cbiAgICBjb25zdCBuZXdTY3JvbGxQb3MgPSBwYXJzZUludCh3aW5kb3cucGFnZVlPZmZzZXQsIDEwKTtcbiAgICBjb25zdCBpc1Njcm9sbGluZ1VwID0gdGhpcy5zY3JvbGxQb3MgPiBuZXdTY3JvbGxQb3M7XG4gICAgdGhpcy5zY3JvbGxQb3MgPSBuZXdTY3JvbGxQb3M7XG5cbiAgICBsZXQgYWN0aXZlSWR4O1xuICAgIC8vIEJlZm9yZSB0aGUgZmlyc3QgcG9pbnQ6IG5vIGxpbmtcbiAgICBpZihuZXdTY3JvbGxQb3MgPCB0aGlzLnBvaW50c1swXSAtIHRoaXMub3B0aW9ucy5vZmZzZXQgLSAoaXNTY3JvbGxpbmdVcCA/IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgOiAwKSk7XG4gICAgLy8gQXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZTogbGFzdCBsaW5rXG4gICAgZWxzZSBpZihuZXdTY3JvbGxQb3MgKyB0aGlzLndpbkhlaWdodCA9PT0gdGhpcy5kb2NIZWlnaHQpeyBhY3RpdmVJZHggPSB0aGlzLnBvaW50cy5sZW5ndGggLSAxOyB9XG4gICAgLy8gT3RoZXJ3aGlzZSwgdXNlIHRoZSBsYXN0IHZpc2libGUgbGlua1xuICAgIGVsc2Uge1xuICAgICAgY29uc3QgdmlzaWJsZUxpbmtzID0gdGhpcy5wb2ludHMuZmlsdGVyKChwKSA9PiB7XG4gICAgICAgIHJldHVybiAocCAtIHRoaXMub3B0aW9ucy5vZmZzZXQgLSAoaXNTY3JvbGxpbmdVcCA/IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgOiAwKSkgPD0gbmV3U2Nyb2xsUG9zO1xuICAgICAgfSk7XG4gICAgICBhY3RpdmVJZHggPSB2aXNpYmxlTGlua3MubGVuZ3RoID8gdmlzaWJsZUxpbmtzLmxlbmd0aCAtIDEgOiAwO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgbmV3IGFjdGl2ZSBsaW5rXG4gICAgY29uc3QgJG9sZEFjdGl2ZSA9IHRoaXMuJGFjdGl2ZTtcbiAgICBsZXQgYWN0aXZlSGFzaCA9ICcnO1xuICAgIGlmKHR5cGVvZiBhY3RpdmVJZHggIT09ICd1bmRlZmluZWQnKXtcbiAgICAgIHRoaXMuJGFjdGl2ZSA9IHRoaXMuJGxpbmtzLmZpbHRlcignW2hyZWY9XCIjJyArIHRoaXMuJHRhcmdldHMuZXEoYWN0aXZlSWR4KS5kYXRhKCdtYWdlbGxhbi10YXJnZXQnKSArICdcIl0nKTtcbiAgICAgIGlmICh0aGlzLiRhY3RpdmUubGVuZ3RoKSBhY3RpdmVIYXNoID0gdGhpcy4kYWN0aXZlWzBdLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgIH1lbHNlIHtcbiAgICAgIHRoaXMuJGFjdGl2ZSA9ICQoKTtcbiAgICB9XG4gICAgY29uc3QgaXNOZXdBY3RpdmUgPSAhKCF0aGlzLiRhY3RpdmUubGVuZ3RoICYmICEkb2xkQWN0aXZlLmxlbmd0aCkgJiYgIXRoaXMuJGFjdGl2ZS5pcygkb2xkQWN0aXZlKTtcbiAgICBjb25zdCBpc05ld0hhc2ggPSBhY3RpdmVIYXNoICE9PSB3aW5kb3cubG9jYXRpb24uaGFzaDtcblxuICAgIC8vIFVwZGF0ZSB0aGUgYWN0aXZlIGxpbmsgZWxlbWVudFxuICAgIGlmKGlzTmV3QWN0aXZlKSB7XG4gICAgICAkb2xkQWN0aXZlLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyk7XG4gICAgICB0aGlzLiRhY3RpdmUuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGhhc2ggKGl0IG1heSBoYXZlIGNoYW5nZWQgd2l0aCB0aGUgc2FtZSBhY3RpdmUgbGluaylcbiAgICBpZih0aGlzLm9wdGlvbnMuZGVlcExpbmtpbmcgJiYgaXNOZXdIYXNoKXtcbiAgICAgIGlmKHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSl7XG4gICAgICAgIC8vIFNldCBvciByZW1vdmUgdGhlIGhhc2ggKHNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUyOTg2ODQvNDMxNzM4NFxuICAgICAgICBjb25zdCB1cmwgPSBhY3RpdmVIYXNoID8gYWN0aXZlSGFzaCA6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy51cGRhdGVIaXN0b3J5KXtcbiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sICcnLCB1cmwpO1xuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAnJywgdXJsKTtcbiAgICAgICAgfVxuICAgICAgfWVsc2Uge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IGFjdGl2ZUhhc2g7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzTmV3QWN0aXZlKSB7XG4gICAgICAvKipcbiAgICAgICAqIEZpcmVzIHdoZW4gbWFnZWxsYW4gaXMgZmluaXNoZWQgdXBkYXRpbmcgdG8gdGhlIG5ldyBhY3RpdmUgZWxlbWVudC5cbiAgICAgICAqIEBldmVudCBNYWdlbGxhbiN1cGRhdGVcbiAgICAgICAqL1xuICAgIFx0dGhpcy4kZWxlbWVudC50cmlnZ2VyKCd1cGRhdGUuemYubWFnZWxsYW4nLCBbdGhpcy4kYWN0aXZlXSk7XG5cdCAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFuIGluc3RhbmNlIG9mIE1hZ2VsbGFuIGFuZCByZXNldHMgdGhlIHVybCBvZiB0aGUgd2luZG93LlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIF9kZXN0cm95KCkge1xuICAgIHRoaXMuJGVsZW1lbnQub2ZmKCcuemYudHJpZ2dlciAuemYubWFnZWxsYW4nKVxuICAgICAgICAuZmluZChgLiR7dGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzfWApLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyk7XG5cbiAgICBpZih0aGlzLm9wdGlvbnMuZGVlcExpbmtpbmcpe1xuICAgICAgdmFyIGhhc2ggPSB0aGlzLiRhY3RpdmVbMF0uZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaGFzaC5yZXBsYWNlKGhhc2gsICcnKTtcbiAgICB9XG5cbiAgICAkKHdpbmRvdykub2ZmKCdoYXNoY2hhbmdlJywgdGhpcy5fZGVlcExpbmtTY3JvbGwpO1xuICAgIGlmICh0aGlzLm9uTG9hZExpc3RlbmVyKSAkKHdpbmRvdykub2ZmKHRoaXMub25Mb2FkTGlzdGVuZXIpO1xuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBzZXR0aW5ncyBmb3IgcGx1Z2luXG4gKi9cbk1hZ2VsbGFuLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQW1vdW50IG9mIHRpbWUsIGluIG1zLCB0aGUgYW5pbWF0ZWQgc2Nyb2xsaW5nIHNob3VsZCB0YWtlIGJldHdlZW4gbG9jYXRpb25zLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDUwMFxuICAgKi9cbiAgYW5pbWF0aW9uRHVyYXRpb246IDUwMCxcbiAgLyoqXG4gICAqIEFuaW1hdGlvbiBzdHlsZSB0byB1c2Ugd2hlbiBzY3JvbGxpbmcgYmV0d2VlbiBsb2NhdGlvbnMuIENhbiBiZSBgJ3N3aW5nJ2Agb3IgYCdsaW5lYXInYC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnbGluZWFyJ1xuICAgKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL2FuaW1hdGV8SnF1ZXJ5IGFuaW1hdGV9XG4gICAqL1xuICBhbmltYXRpb25FYXNpbmc6ICdsaW5lYXInLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHBpeGVscyB0byB1c2UgYXMgYSBtYXJrZXIgZm9yIGxvY2F0aW9uIGNoYW5nZXMuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgNTBcbiAgICovXG4gIHRocmVzaG9sZDogNTAsXG4gIC8qKlxuICAgKiBDbGFzcyBhcHBsaWVkIHRvIHRoZSBhY3RpdmUgbG9jYXRpb25zIGxpbmsgb24gdGhlIG1hZ2VsbGFuIGNvbnRhaW5lci5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnaXMtYWN0aXZlJ1xuICAgKi9cbiAgYWN0aXZlQ2xhc3M6ICdpcy1hY3RpdmUnLFxuICAvKipcbiAgICogQWxsb3dzIHRoZSBzY3JpcHQgdG8gbWFuaXB1bGF0ZSB0aGUgdXJsIG9mIHRoZSBjdXJyZW50IHBhZ2UsIGFuZCBpZiBzdXBwb3J0ZWQsIGFsdGVyIHRoZSBoaXN0b3J5LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVlcExpbmtpbmc6IGZhbHNlLFxuICAvKipcbiAgICogVXBkYXRlIHRoZSBicm93c2VyIGhpc3Rvcnkgd2l0aCB0aGUgYWN0aXZlIGxpbmssIGlmIGRlZXAgbGlua2luZyBpcyBlbmFibGVkLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdXBkYXRlSGlzdG9yeTogZmFsc2UsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcGl4ZWxzIHRvIG9mZnNldCB0aGUgc2Nyb2xsIG9mIHRoZSBwYWdlIG9uIGl0ZW0gY2xpY2sgaWYgdXNpbmcgYSBzdGlja3kgbmF2IGJhci5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBvZmZzZXQ6IDBcbn07XG5cbi8qKlxuICogT2ZmQ2FudmFzIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5vZmZDYW52YXNcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubWVkaWFRdWVyeVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICovXG5cbmNsYXNzIE9mZkNhbnZhcyBleHRlbmRzIFBsdWdpbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGFuIG9mZi1jYW52YXMgd3JhcHBlci5cbiAgICogQGNsYXNzXG4gICAqIEBuYW1lIE9mZkNhbnZhc1xuICAgKiBAZmlyZXMgT2ZmQ2FudmFzI2luaXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIGluaXRpYWxpemUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIF9zZXR1cChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5jbGFzc05hbWUgPSAnT2ZmQ2FudmFzJzsgLy8gaWU5IGJhY2sgY29tcGF0XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIE9mZkNhbnZhcy5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuICAgIHRoaXMuY29udGVudENsYXNzZXMgPSB7IGJhc2U6IFtdLCByZXZlYWw6IFtdIH07XG4gICAgdGhpcy4kbGFzdFRyaWdnZXIgPSAkKCk7XG4gICAgdGhpcy4kdHJpZ2dlcnMgPSAkKCk7XG4gICAgdGhpcy5wb3NpdGlvbiA9ICdsZWZ0JztcbiAgICB0aGlzLiRjb250ZW50ID0gJCgpO1xuICAgIHRoaXMubmVzdGVkID0gISEodGhpcy5vcHRpb25zLm5lc3RlZCk7XG4gICAgdGhpcy4kc3RpY2t5ID0gJCgpO1xuICAgIHRoaXMuaXNJbkNhbnZhcyA9IGZhbHNlO1xuXG4gICAgLy8gRGVmaW5lcyB0aGUgQ1NTIHRyYW5zaXRpb24vcG9zaXRpb24gY2xhc3NlcyBvZiB0aGUgb2ZmLWNhbnZhcyBjb250ZW50IGNvbnRhaW5lci5cbiAgICAkKFsncHVzaCcsICdvdmVybGFwJ10pLmVhY2goKGluZGV4LCB2YWwpID0+IHtcbiAgICAgIHRoaXMuY29udGVudENsYXNzZXMuYmFzZS5wdXNoKCdoYXMtdHJhbnNpdGlvbi0nK3ZhbCk7XG4gICAgfSk7XG4gICAgJChbJ2xlZnQnLCAncmlnaHQnLCAndG9wJywgJ2JvdHRvbSddKS5lYWNoKChpbmRleCwgdmFsKSA9PiB7XG4gICAgICB0aGlzLmNvbnRlbnRDbGFzc2VzLmJhc2UucHVzaCgnaGFzLXBvc2l0aW9uLScrdmFsKTtcbiAgICAgIHRoaXMuY29udGVudENsYXNzZXMucmV2ZWFsLnB1c2goJ2hhcy1yZXZlYWwtJyt2YWwpO1xuICAgIH0pO1xuXG4gICAgLy8gVHJpZ2dlcnMgaW5pdCBpcyBpZGVtcG90ZW50LCBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIGl0IGlzIGluaXRpYWxpemVkXG4gICAgVHJpZ2dlcnMuaW5pdCgkKTtcbiAgICBNZWRpYVF1ZXJ5Ll9pbml0KCk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG5cbiAgICBLZXlib2FyZC5yZWdpc3RlcignT2ZmQ2FudmFzJywge1xuICAgICAgJ0VTQ0FQRSc6ICdjbG9zZSdcbiAgICB9KTtcblxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBvZmYtY2FudmFzIHdyYXBwZXIgYnkgYWRkaW5nIHRoZSBleGl0IG92ZXJsYXkgKGlmIG5lZWRlZCkuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdmFyIGlkID0gdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpO1xuXG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG5cbiAgICAvLyBGaW5kIG9mZi1jYW52YXMgY29udGVudCwgZWl0aGVyIGJ5IElEIChpZiBzcGVjaWZpZWQpLCBieSBzaWJsaW5ncyBvciBieSBjbG9zZXN0IHNlbGVjdG9yIChmYWxsYmFjaylcbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRlbnRJZCkge1xuICAgICAgdGhpcy4kY29udGVudCA9ICQoJyMnK3RoaXMub3B0aW9ucy5jb250ZW50SWQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy4kZWxlbWVudC5zaWJsaW5ncygnW2RhdGEtb2ZmLWNhbnZhcy1jb250ZW50XScpLmxlbmd0aCkge1xuICAgICAgdGhpcy4kY29udGVudCA9IHRoaXMuJGVsZW1lbnQuc2libGluZ3MoJ1tkYXRhLW9mZi1jYW52YXMtY29udGVudF0nKS5maXJzdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiRjb250ZW50ID0gdGhpcy4kZWxlbWVudC5jbG9zZXN0KCdbZGF0YS1vZmYtY2FudmFzLWNvbnRlbnRdJykuZmlyc3QoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5jb250ZW50SWQpIHtcbiAgICAgIC8vIEFzc3VtZSB0aGF0IHRoZSBvZmYtY2FudmFzIGVsZW1lbnQgaXMgbmVzdGVkIGlmIGl0IGlzbid0IGEgc2libGluZyBvZiB0aGUgY29udGVudFxuICAgICAgdGhpcy5uZXN0ZWQgPSB0aGlzLiRlbGVtZW50LnNpYmxpbmdzKCdbZGF0YS1vZmYtY2FudmFzLWNvbnRlbnRdJykubGVuZ3RoID09PSAwO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY29udGVudElkICYmIHRoaXMub3B0aW9ucy5uZXN0ZWQgPT09IG51bGwpIHtcbiAgICAgIC8vIFdhcm5pbmcgaWYgdXNpbmcgY29udGVudCBJRCB3aXRob3V0IHNldHRpbmcgdGhlIG5lc3RlZCBvcHRpb25cbiAgICAgIC8vIE9uY2UgdGhlIGVsZW1lbnQgaXMgbmVzdGVkIGl0IGlzIHJlcXVpcmVkIHRvIHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlXG4gICAgICBjb25zb2xlLndhcm4oJ1JlbWVtYmVyIHRvIHVzZSB0aGUgbmVzdGVkIG9wdGlvbiBpZiB1c2luZyB0aGUgY29udGVudCBJRCBvcHRpb24hJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmVzdGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBGb3JjZSB0cmFuc2l0aW9uIG92ZXJsYXAgaWYgbmVzdGVkXG4gICAgICB0aGlzLm9wdGlvbnMudHJhbnNpdGlvbiA9ICdvdmVybGFwJztcbiAgICAgIC8vIFJlbW92ZSBhcHByb3ByaWF0ZSBjbGFzc2VzIGlmIGFscmVhZHkgYXNzaWduZWQgaW4gbWFya3VwXG4gICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCdpcy10cmFuc2l0aW9uLXB1c2gnKTtcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKGBpcy10cmFuc2l0aW9uLSR7dGhpcy5vcHRpb25zLnRyYW5zaXRpb259IGlzLWNsb3NlZGApO1xuXG4gICAgLy8gRmluZCB0cmlnZ2VycyB0aGF0IGFmZmVjdCB0aGlzIGVsZW1lbnQgYW5kIGFkZCBhcmlhLWV4cGFuZGVkIHRvIHRoZW1cbiAgICB0aGlzLiR0cmlnZ2VycyA9ICQoZG9jdW1lbnQpXG4gICAgICAuZmluZCgnW2RhdGEtb3Blbj1cIicraWQrJ1wiXSwgW2RhdGEtY2xvc2U9XCInK2lkKydcIl0sIFtkYXRhLXRvZ2dsZT1cIicraWQrJ1wiXScpXG4gICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpXG4gICAgICAuYXR0cignYXJpYS1jb250cm9scycsIGlkKTtcblxuICAgIC8vIEdldCBwb3NpdGlvbiBieSBjaGVja2luZyBmb3IgcmVsYXRlZCBDU1MgY2xhc3NcbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy4kZWxlbWVudC5pcygnLnBvc2l0aW9uLWxlZnQsIC5wb3NpdGlvbi10b3AsIC5wb3NpdGlvbi1yaWdodCwgLnBvc2l0aW9uLWJvdHRvbScpID8gdGhpcy4kZWxlbWVudC5hdHRyKCdjbGFzcycpLm1hdGNoKC9wb3NpdGlvblxcLShsZWZ0fHRvcHxyaWdodHxib3R0b20pLylbMV0gOiB0aGlzLnBvc2l0aW9uO1xuXG4gICAgLy8gQWRkIGFuIG92ZXJsYXkgb3ZlciB0aGUgY29udGVudCBpZiBuZWNlc3NhcnlcbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRlbnRPdmVybGF5ID09PSB0cnVlKSB7XG4gICAgICB2YXIgb3ZlcmxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdmFyIG92ZXJsYXlQb3NpdGlvbiA9ICQodGhpcy4kZWxlbWVudCkuY3NzKFwicG9zaXRpb25cIikgPT09ICdmaXhlZCcgPyAnaXMtb3ZlcmxheS1maXhlZCcgOiAnaXMtb3ZlcmxheS1hYnNvbHV0ZSc7XG4gICAgICBvdmVybGF5LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnanMtb2ZmLWNhbnZhcy1vdmVybGF5ICcgKyBvdmVybGF5UG9zaXRpb24pO1xuICAgICAgdGhpcy4kb3ZlcmxheSA9ICQob3ZlcmxheSk7XG4gICAgICBpZihvdmVybGF5UG9zaXRpb24gPT09ICdpcy1vdmVybGF5LWZpeGVkJykge1xuICAgICAgICAkKHRoaXMuJG92ZXJsYXkpLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kY29udGVudC5hcHBlbmQodGhpcy4kb3ZlcmxheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSByZXZlYWxPbiBvcHRpb24gZnJvbSB0aGUgY2xhc3MuXG4gICAgdmFyIHJldmVhbE9uUmVnRXhwID0gbmV3IFJlZ0V4cChSZWdFeHBFc2NhcGUodGhpcy5vcHRpb25zLnJldmVhbENsYXNzKSArICcoW15cXFxcc10rKScsICdnJyk7XG4gICAgdmFyIHJldmVhbE9uQ2xhc3MgPSByZXZlYWxPblJlZ0V4cC5leGVjKHRoaXMuJGVsZW1lbnRbMF0uY2xhc3NOYW1lKTtcbiAgICBpZiAocmV2ZWFsT25DbGFzcykge1xuICAgICAgdGhpcy5vcHRpb25zLmlzUmV2ZWFsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5vcHRpb25zLnJldmVhbE9uID0gdGhpcy5vcHRpb25zLnJldmVhbE9uIHx8IHJldmVhbE9uQ2xhc3NbMV07XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHRoZSBgcmV2ZWFsLW9uLSpgIGNsYXNzIGlzIHNldC5cbiAgICBpZiAodGhpcy5vcHRpb25zLmlzUmV2ZWFsZWQgPT09IHRydWUgJiYgdGhpcy5vcHRpb25zLnJldmVhbE9uKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmZpcnN0KCkuYWRkQ2xhc3MoYCR7dGhpcy5vcHRpb25zLnJldmVhbENsYXNzfSR7dGhpcy5vcHRpb25zLnJldmVhbE9ufWApO1xuICAgICAgdGhpcy5fc2V0TVFDaGVja2VyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy50cmFuc2l0aW9uVGltZSkge1xuICAgICAgdGhpcy4kZWxlbWVudC5jc3MoJ3RyYW5zaXRpb24tZHVyYXRpb24nLCB0aGlzLm9wdGlvbnMudHJhbnNpdGlvblRpbWUpO1xuICAgIH1cblxuICAgIC8vIEZpbmQgZml4ZWQgZWxlbWVudHMgdGhhdCBzaG91bGQgc3RheSBmaXhlZCB3aGlsZSBvZmYtY2FudmFzIGlzIG9wZW5lZFxuICAgIHRoaXMuJHN0aWNreSA9IHRoaXMuJGNvbnRlbnQuZmluZCgnW2RhdGEtb2ZmLWNhbnZhcy1zdGlja3ldJyk7XG4gICAgaWYgKHRoaXMuJHN0aWNreS5sZW5ndGggPiAwICYmIHRoaXMub3B0aW9ucy50cmFuc2l0aW9uID09PSAncHVzaCcpIHtcbiAgICAgIC8vIElmIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIG1hdGNoIGZvcmNlIGNvbnRlbnRTY3JvbGw6ZmFsc2UgYmVjYXVzZSB0aGUgYWJzb2x1dGUgdG9wIHZhbHVlIGRvZXNuJ3QgZ2V0IHJlY2FsY3VsYXRlZCBvbiBzY3JvbGxcbiAgICAgIC8vIExpbWl0IHRvIHB1c2ggdHJhbnNpdGlvbiBzaW5jZSB0aGVyZSdzIG5vIHRyYW5zZm9ybSBzY29wZSBmb3Igb3ZlcmxhcFxuICAgICAgdGhpcy5vcHRpb25zLmNvbnRlbnRTY3JvbGwgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgaW5DYW52YXNGb3IgPSB0aGlzLiRlbGVtZW50LmF0dHIoJ2NsYXNzJykubWF0Y2goL1xcYmluLWNhbnZhcy1mb3ItKFxcdyspLyk7XG4gICAgaWYgKGluQ2FudmFzRm9yICYmIGluQ2FudmFzRm9yLmxlbmd0aCA9PT0gMikge1xuICAgICAgLy8gU2V0IGBpbkNhbnZhc09uYCBvcHRpb24gaWYgZm91bmQgaW4tY2FudmFzLWZvci1bQlJFQUtQT05UXSBDU1MgY2xhc3NcbiAgICAgIHRoaXMub3B0aW9ucy5pbkNhbnZhc09uID0gaW5DYW52YXNGb3JbMV07XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuaW5DYW52YXNPbikge1xuICAgICAgLy8gRW5zdXJlIHRoZSBDU1MgY2xhc3MgaXMgc2V0XG4gICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKGBpbi1jYW52YXMtZm9yLSR7dGhpcy5vcHRpb25zLmluQ2FudmFzT259YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pbkNhbnZhc09uKSB7XG4gICAgICB0aGlzLl9jaGVja0luQ2FudmFzKCk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGFsbHkgcmVtb3ZlIGFsbCB0cmFuc2l0aW9uL3Bvc2l0aW9uIENTUyBjbGFzc2VzIGZyb20gb2ZmLWNhbnZhcyBjb250ZW50IGNvbnRhaW5lci5cbiAgICB0aGlzLl9yZW1vdmVDb250ZW50Q2xhc3NlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgaGFuZGxlcnMgdG8gdGhlIG9mZi1jYW52YXMgd3JhcHBlciBhbmQgdGhlIGV4aXQgb3ZlcmxheS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHRoaXMuJGVsZW1lbnQub2ZmKCcuemYudHJpZ2dlciAuemYub2ZmQ2FudmFzJykub24oe1xuICAgICAgJ29wZW4uemYudHJpZ2dlcic6IHRoaXMub3Blbi5iaW5kKHRoaXMpLFxuICAgICAgJ2Nsb3NlLnpmLnRyaWdnZXInOiB0aGlzLmNsb3NlLmJpbmQodGhpcyksXG4gICAgICAndG9nZ2xlLnpmLnRyaWdnZXInOiB0aGlzLnRvZ2dsZS5iaW5kKHRoaXMpLFxuICAgICAgJ2tleWRvd24uemYub2ZmQ2FudmFzJzogdGhpcy5faGFuZGxlS2V5Ym9hcmQuYmluZCh0aGlzKVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2sgPT09IHRydWUpIHtcbiAgICAgIHZhciAkdGFyZ2V0ID0gdGhpcy5vcHRpb25zLmNvbnRlbnRPdmVybGF5ID8gdGhpcy4kb3ZlcmxheSA6IHRoaXMuJGNvbnRlbnQ7XG4gICAgICAkdGFyZ2V0Lm9uKHsnY2xpY2suemYub2ZmQ2FudmFzJzogdGhpcy5jbG9zZS5iaW5kKHRoaXMpfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pbkNhbnZhc09uKSB7XG4gICAgICAkKHdpbmRvdykub24oJ2NoYW5nZWQuemYubWVkaWFxdWVyeScsICgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hlY2tJbkNhbnZhcygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBldmVudCBsaXN0ZW5lciBmb3IgZWxlbWVudHMgdGhhdCB3aWxsIHJldmVhbCBhdCBjZXJ0YWluIGJyZWFrcG9pbnRzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldE1RQ2hlY2tlcigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5vbkxvYWRMaXN0ZW5lciA9IG9uTG9hZCgkKHdpbmRvdyksIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChNZWRpYVF1ZXJ5LmF0TGVhc3QoX3RoaXMub3B0aW9ucy5yZXZlYWxPbikpIHtcbiAgICAgICAgX3RoaXMucmV2ZWFsKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJCh3aW5kb3cpLm9uKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoTWVkaWFRdWVyeS5hdExlYXN0KF90aGlzLm9wdGlvbnMucmV2ZWFsT24pKSB7XG4gICAgICAgIF90aGlzLnJldmVhbCh0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLnJldmVhbChmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIEluQ2FudmFzIG9uIGN1cnJlbnQgYnJlYWtwb2ludCBhbmQgYWRqdXN0IG9mZi1jYW52YXMgYWNjb3JkaW5nbHlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja0luQ2FudmFzKCkge1xuICAgIHRoaXMuaXNJbkNhbnZhcyA9IE1lZGlhUXVlcnkuYXRMZWFzdCh0aGlzLm9wdGlvbnMuaW5DYW52YXNPbik7XG4gICAgaWYgKHRoaXMuaXNJbkNhbnZhcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBDU1MgdHJhbnNpdGlvbi9wb3NpdGlvbiBjbGFzc2VzIG9mIHRoZSBvZmYtY2FudmFzIGNvbnRlbnQgY29udGFpbmVyLlxuICAgKiBSZW1vdmluZyB0aGUgY2xhc3NlcyBpcyBpbXBvcnRhbnQgd2hlbiBhbm90aGVyIG9mZi1jYW52YXMgZ2V0cyBvcGVuZWQgdGhhdCB1c2VzIHRoZSBzYW1lIGNvbnRlbnQgY29udGFpbmVyLlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGhhc1JldmVhbCAtIHRydWUgaWYgcmVsYXRlZCBvZmYtY2FudmFzIGVsZW1lbnQgaXMgcmV2ZWFsZWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVtb3ZlQ29udGVudENsYXNzZXMoaGFzUmV2ZWFsKSB7XG4gICAgaWYgKHR5cGVvZiBoYXNSZXZlYWwgIT09ICdib29sZWFuJykge1xuICAgICAgdGhpcy4kY29udGVudC5yZW1vdmVDbGFzcyh0aGlzLmNvbnRlbnRDbGFzc2VzLmJhc2Uuam9pbignICcpKTtcbiAgICB9IGVsc2UgaWYgKGhhc1JldmVhbCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuJGNvbnRlbnQucmVtb3ZlQ2xhc3MoYGhhcy1yZXZlYWwtJHt0aGlzLnBvc2l0aW9ufWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoZSBDU1MgdHJhbnNpdGlvbi9wb3NpdGlvbiBjbGFzc2VzIG9mIHRoZSBvZmYtY2FudmFzIGNvbnRlbnQgY29udGFpbmVyLCBiYXNlZCBvbiB0aGUgb3BlbmluZyBvZmYtY2FudmFzIGVsZW1lbnQuXG4gICAqIEJlZm9yZWhhbmQgYW55IHRyYW5zaXRpb24vcG9zaXRpb24gY2xhc3MgZ2V0cyByZW1vdmVkLlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGhhc1JldmVhbCAtIHRydWUgaWYgcmVsYXRlZCBvZmYtY2FudmFzIGVsZW1lbnQgaXMgcmV2ZWFsZWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWRkQ29udGVudENsYXNzZXMoaGFzUmV2ZWFsKSB7XG4gICAgdGhpcy5fcmVtb3ZlQ29udGVudENsYXNzZXMoaGFzUmV2ZWFsKTtcbiAgICBpZiAodHlwZW9mIGhhc1JldmVhbCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLiRjb250ZW50LmFkZENsYXNzKGBoYXMtdHJhbnNpdGlvbi0ke3RoaXMub3B0aW9ucy50cmFuc2l0aW9ufSBoYXMtcG9zaXRpb24tJHt0aGlzLnBvc2l0aW9ufWApO1xuICAgIH0gZWxzZSBpZiAoaGFzUmV2ZWFsID09PSB0cnVlKSB7XG4gICAgICB0aGlzLiRjb250ZW50LmFkZENsYXNzKGBoYXMtcmV2ZWFsLSR7dGhpcy5wb3NpdGlvbn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJlc2VydmVzIHRoZSBmaXhlZCBiZWhhdmlvciBvZiBzdGlja3kgZWxlbWVudHMgb24gb3BlbmluZyBhbiBvZmYtY2FudmFzIHdpdGggcHVzaCB0cmFuc2l0aW9uLlxuICAgKiBTaW5jZSB0aGUgb2ZmLWNhbnZhcyBjb250YWluZXIgaGFzIGdvdCBhIHRyYW5zZm9ybSBzY29wZSBpbiBzdWNoIGEgY2FzZSwgaXQgaXMgZG9uZSBieSBjYWxjdWxhdGluZyBwb3NpdGlvbiBhYnNvbHV0ZSB2YWx1ZXMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZml4U3RpY2t5RWxlbWVudHMoKSB7XG4gICAgdGhpcy4kc3RpY2t5LmVhY2goKF8sIGVsKSA9PiB7XG4gICAgICBjb25zdCAkZWwgPSAkKGVsKTtcblxuICAgICAgLy8gSWYgc3RpY2t5IGVsZW1lbnQgaXMgY3VycmVudGx5IGZpeGVkLCBhZGp1c3QgaXRzIHRvcCB2YWx1ZSB0byBtYXRjaCBhYnNvbHV0ZSBwb3NpdGlvbiBkdWUgdG8gdHJhbnNmb3JtIHNjb3BlXG4gICAgICAvLyBMaW1pdCB0byBwdXNoIHRyYW5zaXRpb24gYmVjYXVzZSBwb3N0aW9uOmZpeGVkIHdvcmtzIHdpdGhvdXQgcHJvYmxlbXMgZm9yIG92ZXJsYXAgKG5vIHRyYW5zZm9ybSBzY29wZSlcbiAgICAgIGlmICgkZWwuY3NzKCdwb3NpdGlvbicpID09PSAnZml4ZWQnKSB7XG5cbiAgICAgICAgLy8gU2F2ZSBjdXJyZW50IGlubGluZSBzdHlsaW5nIHRvIHJlc3RvcmUgaXQgaWYgdW5kb2luZyB0aGUgYWJzb2x1dGUgZml4aW5nXG4gICAgICAgIGxldCB0b3BWYWwgPSBwYXJzZUludCgkZWwuY3NzKCd0b3AnKSwgMTApO1xuICAgICAgICAkZWwuZGF0YSgnb2ZmQ2FudmFzU3RpY2t5JywgeyB0b3A6IHRvcFZhbCB9KTtcblxuICAgICAgICBsZXQgYWJzb2x1dGVUb3BWYWwgPSAkKGRvY3VtZW50KS5zY3JvbGxUb3AoKSArIHRvcFZhbDtcbiAgICAgICAgJGVsLmNzcyh7IHRvcDogYCR7YWJzb2x1dGVUb3BWYWx9cHhgLCB3aWR0aDogJzEwMCUnLCB0cmFuc2l0aW9uOiAnbm9uZScgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgdGhlIG9yaWdpbmFsIGZpeGVkIHN0eWxpbmcgb2Ygc3RpY2t5IGVsZW1lbnRzIGFmdGVyIGhhdmluZyBjbG9zZWQgYW4gb2ZmLWNhbnZhcyB0aGF0IGdvdCBwc2V1ZG8gZml4ZWQgYmVmb3JlaGFuZC5cbiAgICogVGhpcyByZXZlcnRzIHRoZSBjaGFuZ2VzIG9mIF9maXhTdGlja3lFbGVtZW50cygpXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdW5maXhTdGlja3lFbGVtZW50cygpIHtcbiAgICB0aGlzLiRzdGlja3kuZWFjaCgoXywgZWwpID0+IHtcbiAgICAgIGNvbnN0ICRlbCA9ICQoZWwpO1xuICAgICAgbGV0IHN0aWNreURhdGEgPSAkZWwuZGF0YSgnb2ZmQ2FudmFzU3RpY2t5Jyk7XG5cbiAgICAgIC8vIElmIHN0aWNreSBlbGVtZW50IGhhcyBnb3QgZGF0YSBvYmplY3Qgd2l0aCBwcmlvciB2YWx1ZXMgKG1lYW5pbmcgaXQgd2FzIG9yaWdpbmFsbHkgZml4ZWQpIHJlc3RvcmUgdGhlc2UgdmFsdWVzIG9uY2Ugb2ZmLWNhbnZhcyBpcyBjbG9zZWRcbiAgICAgIGlmICh0eXBlb2Ygc3RpY2t5RGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgJGVsLmNzcyh7IHRvcDogYCR7c3RpY2t5RGF0YS50b3B9cHhgLCB3aWR0aDogJycsIHRyYW5zaXRpb246ICcnIH0pO1xuICAgICAgICAkZWwuZGF0YSgnb2ZmQ2FudmFzU3RpY2t5JywgJycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIHJldmVhbGluZy9oaWRpbmcgdGhlIG9mZi1jYW52YXMgYXQgYnJlYWtwb2ludHMsIG5vdCB0aGUgc2FtZSBhcyBvcGVuLlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzUmV2ZWFsZWQgLSB0cnVlIGlmIGVsZW1lbnQgc2hvdWxkIGJlIHJldmVhbGVkLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIHJldmVhbChpc1JldmVhbGVkKSB7XG4gICAgaWYgKGlzUmV2ZWFsZWQpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIHRoaXMuaXNSZXZlYWxlZCA9IHRydWU7XG4gICAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9mZignb3Blbi56Zi50cmlnZ2VyIHRvZ2dsZS56Zi50cmlnZ2VyJyk7XG4gICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCdpcy1jbG9zZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1JldmVhbGVkID0gZmFsc2U7XG4gICAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdvcGVuLnpmLnRyaWdnZXIgdG9nZ2xlLnpmLnRyaWdnZXInKS5vbih7XG4gICAgICAgICdvcGVuLnpmLnRyaWdnZXInOiB0aGlzLm9wZW4uYmluZCh0aGlzKSxcbiAgICAgICAgJ3RvZ2dsZS56Zi50cmlnZ2VyJzogdGhpcy50b2dnbGUuYmluZCh0aGlzKVxuICAgICAgfSk7XG4gICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCdpcy1jbG9zZWQnKTtcbiAgICB9XG4gICAgdGhpcy5fYWRkQ29udGVudENsYXNzZXMoaXNSZXZlYWxlZCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgc2Nyb2xsaW5nIG9mIHRoZSBib2R5IHdoZW4gT2ZmQ2FudmFzIGlzIG9wZW4gb24gbW9iaWxlIFNhZmFyaSBhbmQgb3RoZXIgdHJvdWJsZXNvbWUgYnJvd3NlcnMuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3N0b3BTY3JvbGxpbmcoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgY3VycmVudCBmaW5nZXIgeS1wb3NpdGlvblxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZWNvcmRTY3JvbGxhYmxlKGV2ZW50KSB7XG4gICAgY29uc3QgZWxlbSA9IHRoaXM7XG4gICAgZWxlbS5sYXN0WSA9IGV2ZW50LnRvdWNoZXNbMF0ucGFnZVk7XG4gIH1cblxuICAvKipcbiAgICogUHJldmVudCBmdXJ0aGVyIHNjcm9sbGluZyB3aGVuIGl0IGhpdHMgdGhlIGVkZ2VzXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByZXZlbnREZWZhdWx0QXRFZGdlcyhldmVudCkge1xuICAgIGNvbnN0IGVsZW0gPSB0aGlzO1xuICAgIGNvbnN0IF90aGlzID0gZXZlbnQuZGF0YTtcbiAgICBjb25zdCBkZWx0YSA9IGVsZW0ubGFzdFkgLSBldmVudC50b3VjaGVzWzBdLnBhZ2VZO1xuICAgIGVsZW0ubGFzdFkgPSBldmVudC50b3VjaGVzWzBdLnBhZ2VZO1xuXG4gICAgaWYgKCFfdGhpcy5fY2FuU2Nyb2xsKGRlbHRhLCBlbGVtKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNvbnRpbnVvdXMgc2Nyb2xsaW5nIG9mIHNjcm9sbGJveFxuICAgKiBEb24ndCBidWJibGUgdXAgdG8gX3ByZXZlbnREZWZhdWx0QXRFZGdlc1xuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zY3JvbGxib3hUb3VjaE1vdmVkKGV2ZW50KSB7XG4gICAgY29uc3QgZWxlbSA9IHRoaXM7XG4gICAgY29uc3QgX3RoaXMgPSBldmVudC5kYXRhO1xuICAgIGNvbnN0IHBhcmVudCA9IGVsZW0uY2xvc2VzdCgnW2RhdGEtb2ZmLWNhbnZhc10sIFtkYXRhLW9mZi1jYW52YXMtc2Nyb2xsYm94LW91dGVyXScpO1xuICAgIGNvbnN0IGRlbHRhID0gZWxlbS5sYXN0WSAtIGV2ZW50LnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgcGFyZW50Lmxhc3RZID0gZWxlbS5sYXN0WSA9IGV2ZW50LnRvdWNoZXNbMF0ucGFnZVk7XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICghX3RoaXMuX2NhblNjcm9sbChkZWx0YSwgZWxlbSkpIHtcbiAgICAgIGlmICghX3RoaXMuX2NhblNjcm9sbChkZWx0YSwgcGFyZW50KSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50LnNjcm9sbFRvcCArPSBkZWx0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0IHBvc3NpYmlsaXR5IG9mIHNjcm9sbGluZ1xuICAgKiBAcGFyYW0gZGVsdGFcbiAgICogQHBhcmFtIGVsZW1cbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NhblNjcm9sbChkZWx0YSwgZWxlbSkge1xuICAgIGNvbnN0IHVwID0gZGVsdGEgPCAwO1xuICAgIGNvbnN0IGRvd24gPSBkZWx0YSA+IDA7XG4gICAgY29uc3QgYWxsb3dVcCA9IGVsZW0uc2Nyb2xsVG9wID4gMDtcbiAgICBjb25zdCBhbGxvd0Rvd24gPSBlbGVtLnNjcm9sbFRvcCA8IGVsZW0uc2Nyb2xsSGVpZ2h0IC0gZWxlbS5jbGllbnRIZWlnaHQ7XG4gICAgcmV0dXJuIHVwICYmIGFsbG93VXAgfHwgZG93biAmJiBhbGxvd0Rvd247XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIG9mZi1jYW52YXMgbWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCAtIEV2ZW50IG9iamVjdCBwYXNzZWQgZnJvbSBsaXN0ZW5lci5cbiAgICogQHBhcmFtIHtqUXVlcnl9IHRyaWdnZXIgLSBlbGVtZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBvZmYtY2FudmFzIHRvIG9wZW4uXG4gICAqIEBmaXJlcyBPZmZDYW52YXMjb3BlbmVkXG4gICAqIEB0b2RvIGFsc28gdHJpZ2dlciAnb3BlbicgZXZlbnQ/XG4gICAqL1xuICBvcGVuKGV2ZW50LCB0cmlnZ2VyKSB7XG4gICAgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2lzLW9wZW4nKSB8fCB0aGlzLmlzUmV2ZWFsZWQgfHwgdGhpcy5pc0luQ2FudmFzKSB7IHJldHVybjsgfVxuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodHJpZ2dlcikge1xuICAgICAgdGhpcy4kbGFzdFRyaWdnZXIgPSB0cmlnZ2VyO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VUbyA9PT0gJ3RvcCcpIHtcbiAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5mb3JjZVRvID09PSAnYm90dG9tJykge1xuICAgICAgd2luZG93LnNjcm9sbFRvKDAsZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMudHJhbnNpdGlvblRpbWUgJiYgdGhpcy5vcHRpb25zLnRyYW5zaXRpb24gIT09ICdvdmVybGFwJykge1xuICAgICAgdGhpcy4kZWxlbWVudC5zaWJsaW5ncygnW2RhdGEtb2ZmLWNhbnZhcy1jb250ZW50XScpLmNzcygndHJhbnNpdGlvbi1kdXJhdGlvbicsIHRoaXMub3B0aW9ucy50cmFuc2l0aW9uVGltZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQuc2libGluZ3MoJ1tkYXRhLW9mZi1jYW52YXMtY29udGVudF0nKS5jc3MoJ3RyYW5zaXRpb24tZHVyYXRpb24nLCAnJyk7XG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcygnaXMtb3BlbicpLnJlbW92ZUNsYXNzKCdpcy1jbG9zZWQnKTtcblxuICAgIHRoaXMuJHRyaWdnZXJzLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcblxuICAgIHRoaXMuJGNvbnRlbnQuYWRkQ2xhc3MoJ2lzLW9wZW4tJyArIHRoaXMucG9zaXRpb24pO1xuXG4gICAgLy8gSWYgYGNvbnRlbnRTY3JvbGxgIGlzIHNldCB0byBmYWxzZSwgYWRkIGNsYXNzIGFuZCBkaXNhYmxlIHNjcm9sbGluZyBvbiB0b3VjaCBkZXZpY2VzLlxuICAgIGlmICh0aGlzLm9wdGlvbnMuY29udGVudFNjcm9sbCA9PT0gZmFsc2UpIHtcbiAgICAgICQoJ2JvZHknKS5hZGRDbGFzcygnaXMtb2ZmLWNhbnZhcy1vcGVuJykub24oJ3RvdWNobW92ZScsIHRoaXMuX3N0b3BTY3JvbGxpbmcpO1xuICAgICAgdGhpcy4kZWxlbWVudC5vbigndG91Y2hzdGFydCcsIHRoaXMuX3JlY29yZFNjcm9sbGFibGUpO1xuICAgICAgdGhpcy4kZWxlbWVudC5vbigndG91Y2htb3ZlJywgdGhpcywgdGhpcy5fcHJldmVudERlZmF1bHRBdEVkZ2VzKTtcbiAgICAgIHRoaXMuJGVsZW1lbnQub24oJ3RvdWNoc3RhcnQnLCAnW2RhdGEtb2ZmLWNhbnZhcy1zY3JvbGxib3hdJywgdGhpcy5fcmVjb3JkU2Nyb2xsYWJsZSk7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCd0b3VjaG1vdmUnLCAnW2RhdGEtb2ZmLWNhbnZhcy1zY3JvbGxib3hdJywgdGhpcywgdGhpcy5fc2Nyb2xsYm94VG91Y2hNb3ZlZCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb250ZW50T3ZlcmxheSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy4kb3ZlcmxheS5hZGRDbGFzcygnaXMtdmlzaWJsZScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrID09PSB0cnVlICYmIHRoaXMub3B0aW9ucy5jb250ZW50T3ZlcmxheSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy4kb3ZlcmxheS5hZGRDbGFzcygnaXMtY2xvc2FibGUnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Gb2N1cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy4kZWxlbWVudC5vbmUodHJhbnNpdGlvbmVuZCh0aGlzLiRlbGVtZW50KSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghX3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2lzLW9wZW4nKSkge1xuICAgICAgICAgIHJldHVybjsgLy8gZXhpdCBpZiBwcmVtYXR1cmVseSBjbG9zZWRcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FudmFzRm9jdXMgPSBfdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1hdXRvZm9jdXNdJyk7XG4gICAgICAgIGlmIChjYW52YXNGb2N1cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhbnZhc0ZvY3VzLmVxKDApLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy4kZWxlbWVudC5maW5kKCdhLCBidXR0b24nKS5lcSgwKS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnRyYXBGb2N1cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy4kY29udGVudC5hdHRyKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgS2V5Ym9hcmQudHJhcEZvY3VzKHRoaXMuJGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMudHJhbnNpdGlvbiA9PT0gJ3B1c2gnKSB7XG4gICAgICB0aGlzLl9maXhTdGlja3lFbGVtZW50cygpO1xuICAgIH1cblxuICAgIHRoaXMuX2FkZENvbnRlbnRDbGFzc2VzKCk7XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBvZmYtY2FudmFzIG1lbnUgb3BlbnMuXG4gICAgICogQGV2ZW50IE9mZkNhbnZhcyNvcGVuZWRcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ29wZW5lZC56Zi5vZmZDYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIG9mZi1jYW52YXMgbWVudSBvcGVuIHRyYW5zaXRpb24gaXMgZG9uZS5cbiAgICAgKiBAZXZlbnQgT2ZmQ2FudmFzI29wZW5lZEVuZFxuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQub25lKHRyYW5zaXRpb25lbmQodGhpcy4kZWxlbWVudCksICgpID0+IHtcbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignb3BlbmVkRW5kLnpmLm9mZkNhbnZhcycpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgb2ZmLWNhbnZhcyBtZW51LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgLSBvcHRpb25hbCBjYiB0byBmaXJlIGFmdGVyIGNsb3N1cmUuXG4gICAqIEBmaXJlcyBPZmZDYW52YXMjY2xvc2VcbiAgICogQGZpcmVzIE9mZkNhbnZhcyNjbG9zZWRcbiAgICovXG4gIGNsb3NlKCkge1xuICAgIGlmICghdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnaXMtb3BlbicpIHx8IHRoaXMuaXNSZXZlYWxlZCkgeyByZXR1cm47IH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIG9mZi1jYW52YXMgbWVudSBjbG9zZXMuXG4gICAgICogQGV2ZW50IE9mZkNhbnZhcyNjbG9zZVxuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY2xvc2UuemYub2ZmQ2FudmFzJyk7XG5cbiAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCdpcy1vcGVuJyk7XG5cbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcblxuICAgIHRoaXMuJGNvbnRlbnQucmVtb3ZlQ2xhc3MoJ2lzLW9wZW4tbGVmdCBpcy1vcGVuLXRvcCBpcy1vcGVuLXJpZ2h0IGlzLW9wZW4tYm90dG9tJyk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRlbnRPdmVybGF5ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLiRvdmVybGF5LnJlbW92ZUNsYXNzKCdpcy12aXNpYmxlJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2sgPT09IHRydWUgJiYgdGhpcy5vcHRpb25zLmNvbnRlbnRPdmVybGF5ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLiRvdmVybGF5LnJlbW92ZUNsYXNzKCdpcy1jbG9zYWJsZScpO1xuICAgIH1cblxuICAgIHRoaXMuJHRyaWdnZXJzLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcblxuXG4gICAgLy8gTGlzdGVuIHRvIHRyYW5zaXRpb25FbmQ6IGFkZCBjbGFzcywgcmUtZW5hYmxlIHNjcm9sbGluZyBhbmQgcmVsZWFzZSBmb2N1cyB3aGVuIGRvbmUuXG4gICAgdGhpcy4kZWxlbWVudC5vbmUodHJhbnNpdGlvbmVuZCh0aGlzLiRlbGVtZW50KSwgKCkgPT4ge1xuXG4gICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCdpcy1jbG9zZWQnKTtcbiAgICAgIHRoaXMuX3JlbW92ZUNvbnRlbnRDbGFzc2VzKCk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJhbnNpdGlvbiA9PT0gJ3B1c2gnKSB7XG4gICAgICAgIHRoaXMuX3VuZml4U3RpY2t5RWxlbWVudHMoKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgYGNvbnRlbnRTY3JvbGxgIGlzIHNldCB0byBmYWxzZSwgcmVtb3ZlIGNsYXNzIGFuZCByZS1lbmFibGUgc2Nyb2xsaW5nIG9uIHRvdWNoIGRldmljZXMuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRlbnRTY3JvbGwgPT09IGZhbHNlKSB7XG4gICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygnaXMtb2ZmLWNhbnZhcy1vcGVuJykub2ZmKCd0b3VjaG1vdmUnLCB0aGlzLl9zdG9wU2Nyb2xsaW5nKTtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5vZmYoJ3RvdWNoc3RhcnQnLCB0aGlzLl9yZWNvcmRTY3JvbGxhYmxlKTtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5vZmYoJ3RvdWNobW92ZScsIHRoaXMuX3ByZXZlbnREZWZhdWx0QXRFZGdlcyk7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCd0b3VjaHN0YXJ0JywgJ1tkYXRhLW9mZi1jYW52YXMtc2Nyb2xsYm94XScsIHRoaXMuX3JlY29yZFNjcm9sbGFibGUpO1xuICAgICAgICB0aGlzLiRlbGVtZW50Lm9mZigndG91Y2htb3ZlJywgJ1tkYXRhLW9mZi1jYW52YXMtc2Nyb2xsYm94XScsIHRoaXMuX3Njcm9sbGJveFRvdWNoTW92ZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnRyYXBGb2N1cyA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLiRjb250ZW50LnJlbW92ZUF0dHIoJ3RhYmluZGV4Jyk7XG4gICAgICAgIEtleWJvYXJkLnJlbGVhc2VGb2N1cyh0aGlzLiRlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBGaXJlcyB3aGVuIHRoZSBvZmYtY2FudmFzIG1lbnUgY2xvc2UgdHJhbnNpdGlvbiBpcyBkb25lLlxuICAgICAgICogQGV2ZW50IE9mZkNhbnZhcyNjbG9zZWRcbiAgICAgICAqL1xuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjbG9zZWQuemYub2ZmQ2FudmFzJyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgb2ZmLWNhbnZhcyBtZW51IG9wZW4gb3IgY2xvc2VkLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IC0gRXZlbnQgb2JqZWN0IHBhc3NlZCBmcm9tIGxpc3RlbmVyLlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gdHJpZ2dlciAtIGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIG9mZi1jYW52YXMgdG8gb3Blbi5cbiAgICovXG4gIHRvZ2dsZShldmVudCwgdHJpZ2dlcikge1xuICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdpcy1vcGVuJykpIHtcbiAgICAgIHRoaXMuY2xvc2UoZXZlbnQsIHRyaWdnZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMub3BlbihldmVudCwgdHJpZ2dlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMga2V5Ym9hcmQgaW5wdXQgd2hlbiBkZXRlY3RlZC4gV2hlbiB0aGUgZXNjYXBlIGtleSBpcyBwcmVzc2VkLCB0aGUgb2ZmLWNhbnZhcyBtZW51IGNsb3NlcywgYW5kIGZvY3VzIGlzIHJlc3RvcmVkIHRvIHRoZSBlbGVtZW50IHRoYXQgb3BlbmVkIHRoZSBtZW51LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVLZXlib2FyZChlKSB7XG4gICAgS2V5Ym9hcmQuaGFuZGxlS2V5KGUsICdPZmZDYW52YXMnLCB7XG4gICAgICBjbG9zZTogKCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuJGxhc3RUcmlnZ2VyLmZvY3VzKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIGhhbmRsZWQ6ICgpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBPZmZDYW52YXMgcGx1Z2luLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIF9kZXN0cm95KCkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLiRlbGVtZW50Lm9mZignLnpmLnRyaWdnZXIgLnpmLm9mZkNhbnZhcycpO1xuICAgIHRoaXMuJG92ZXJsYXkub2ZmKCcuemYub2ZmQ2FudmFzJyk7XG4gICAgaWYgKHRoaXMub25Mb2FkTGlzdGVuZXIpICQod2luZG93KS5vZmYodGhpcy5vbkxvYWRMaXN0ZW5lcik7XG4gIH1cbn1cblxuT2ZmQ2FudmFzLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQWxsb3cgdGhlIHVzZXIgdG8gY2xpY2sgb3V0c2lkZSBvZiB0aGUgbWVudSB0byBjbG9zZSBpdC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgY2xvc2VPbkNsaWNrOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIG92ZXJsYXkgb24gdG9wIG9mIGBbZGF0YS1vZmYtY2FudmFzLWNvbnRlbnRdYC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgY29udGVudE92ZXJsYXk6IHRydWUsXG5cbiAgLyoqXG4gICAqIFRhcmdldCBhbiBvZmYtY2FudmFzIGNvbnRlbnQgY29udGFpbmVyIGJ5IElEIHRoYXQgbWF5IGJlIHBsYWNlZCBhbnl3aGVyZS4gSWYgbnVsbCB0aGUgY2xvc2VzdCBjb250ZW50IGNvbnRhaW5lciB3aWxsIGJlIHRha2VuLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHs/c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBjb250ZW50SWQ6IG51bGwsXG5cbiAgLyoqXG4gICAqIERlZmluZSB0aGUgb2ZmLWNhbnZhcyBlbGVtZW50IGlzIG5lc3RlZCBpbiBhbiBvZmYtY2FudmFzIGNvbnRlbnQuIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgY29udGVudElkIG9wdGlvbiBmb3IgYSBuZXN0ZWQgZWxlbWVudC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgbmVzdGVkOiBudWxsLFxuXG4gIC8qKlxuICAgKiBFbmFibGUvZGlzYWJsZSBzY3JvbGxpbmcgb2YgdGhlIG1haW4gY29udGVudCB3aGVuIGFuIG9mZiBjYW52YXMgcGFuZWwgaXMgb3Blbi5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgY29udGVudFNjcm9sbDogdHJ1ZSxcblxuICAvKipcbiAgICogQW1vdW50IG9mIHRpbWUgdGhlIG9wZW4gYW5kIGNsb3NlIHRyYW5zaXRpb24gcmVxdWlyZXMsIGluY2x1ZGluZyB0aGUgYXBwcm9wcmlhdGUgbWlsbGlzZWNvbmRzIChgbXNgKSBvciBzZWNvbmRzIChgc2ApIHVuaXQgKGUuZy4gYDUwMG1zYCwgYC43NXNgKSBJZiBub25lIHNlbGVjdGVkLCBwdWxscyBmcm9tIGJvZHkgc3R5bGUuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgdHJhbnNpdGlvblRpbWU6IG51bGwsXG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdHJhbnNpdGlvbiBmb3IgdGhlIE9mZkNhbnZhcyBtZW51LiBPcHRpb25zIGFyZSAncHVzaCcsICdkZXRhY2hlZCcgb3IgJ3NsaWRlJy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBwdXNoXG4gICAqL1xuICB0cmFuc2l0aW9uOiAncHVzaCcsXG5cbiAgLyoqXG4gICAqIEZvcmNlIHRoZSBwYWdlIHRvIHNjcm9sbCB0byB0b3Agb3IgYm90dG9tIG9uIG9wZW4uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUgez9zdHJpbmd9XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGZvcmNlVG86IG51bGwsXG5cbiAgLyoqXG4gICAqIEFsbG93IHRoZSBPZmZDYW52YXMgdG8gcmVtYWluIG9wZW4gZm9yIGNlcnRhaW4gYnJlYWtwb2ludHMuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpc1JldmVhbGVkOiBmYWxzZSxcblxuICAvKipcbiAgICogQnJlYWtwb2ludCBhdCB3aGljaCB0byByZXZlYWwuIEpTIHdpbGwgdXNlIGEgUmVnRXhwIHRvIHRhcmdldCBzdGFuZGFyZCBjbGFzc2VzLCBpZiBjaGFuZ2luZyBjbGFzc25hbWVzLCBwYXNzIHlvdXIgY2xhc3Mgd2l0aCB0aGUgYHJldmVhbENsYXNzYCBvcHRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUgez9zdHJpbmd9XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIHJldmVhbE9uOiBudWxsLFxuXG4gIC8qKlxuICAgKiBCcmVha3BvaW50IGF0IHdoaWNoIHRoZSBvZmYtY2FudmFzIGdldHMgbW92ZWQgaW50byBjYW52YXMgY29udGVudCBhbmQgYWN0cyBhcyByZWd1bGFyIHBhZ2UgZWxlbWVudC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7P3N0cmluZ31cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5DYW52YXNPbjogbnVsbCxcblxuICAvKipcbiAgICogRm9yY2UgZm9jdXMgdG8gdGhlIG9mZmNhbnZhcyBvbiBvcGVuLiBJZiB0cnVlLCB3aWxsIGZvY3VzIHRoZSBvcGVuaW5nIHRyaWdnZXIgb24gY2xvc2UuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGF1dG9Gb2N1czogdHJ1ZSxcblxuICAvKipcbiAgICogQ2xhc3MgdXNlZCB0byBmb3JjZSBhbiBPZmZDYW52YXMgdG8gcmVtYWluIG9wZW4uIEZvdW5kYXRpb24gZGVmYXVsdHMgZm9yIHRoaXMgYXJlIGByZXZlYWwtZm9yLWxhcmdlYCAmIGByZXZlYWwtZm9yLW1lZGl1bWAuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgcmV2ZWFsLWZvci1cbiAgICogQHRvZG8gaW1wcm92ZSB0aGUgcmVnZXggdGVzdGluZyBmb3IgdGhpcy5cbiAgICovXG4gIHJldmVhbENsYXNzOiAncmV2ZWFsLWZvci0nLFxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBvcHRpb25hbCBmb2N1cyB0cmFwcGluZyB3aGVuIG9wZW5pbmcgYW4gT2ZmQ2FudmFzLiBTZXRzIHRhYmluZGV4IG9mIFtkYXRhLW9mZi1jYW52YXMtY29udGVudF0gdG8gLTEgZm9yIGFjY2Vzc2liaWxpdHkgcHVycG9zZXMuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB0cmFwRm9jdXM6IGZhbHNlXG59O1xuXG4vKipcbiAqIE9yYml0IG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5vcmJpdFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5rZXlib2FyZFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tb3Rpb25cbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudGltZXJcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwuaW1hZ2VMb2FkZXJcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudG91Y2hcbiAqL1xuXG5jbGFzcyBPcmJpdCBleHRlbmRzIFBsdWdpbiB7XG4gIC8qKlxuICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gb3JiaXQgY2Fyb3VzZWwuXG4gICogQGNsYXNzXG4gICogQG5hbWUgT3JiaXRcbiAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gbWFrZSBpbnRvIGFuIE9yYml0IENhcm91c2VsLlxuICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgKi9cbiAgX3NldHVwKGVsZW1lbnQsIG9wdGlvbnMpe1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBPcmJpdC5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuICAgIHRoaXMuY2xhc3NOYW1lID0gJ09yYml0JzsgLy8gaWU5IGJhY2sgY29tcGF0XG5cbiAgICBUb3VjaC5pbml0KCQpOyAvLyBUb3VjaCBpbml0IGlzIGlkZW1wb3RlbnQsIHdlIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgaXQncyBpbml0aWFsaWVkLlxuXG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgS2V5Ym9hcmQucmVnaXN0ZXIoJ09yYml0Jywge1xuICAgICAgJ2x0cic6IHtcbiAgICAgICAgJ0FSUk9XX1JJR0hUJzogJ25leHQnLFxuICAgICAgICAnQVJST1dfTEVGVCc6ICdwcmV2aW91cydcbiAgICAgIH0sXG4gICAgICAncnRsJzoge1xuICAgICAgICAnQVJST1dfTEVGVCc6ICduZXh0JyxcbiAgICAgICAgJ0FSUk9XX1JJR0hUJzogJ3ByZXZpb3VzJ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogSW5pdGlhbGl6ZXMgdGhlIHBsdWdpbiBieSBjcmVhdGluZyBqUXVlcnkgY29sbGVjdGlvbnMsIHNldHRpbmcgYXR0cmlidXRlcywgYW5kIHN0YXJ0aW5nIHRoZSBhbmltYXRpb24uXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKi9cbiAgX2luaXQoKSB7XG4gICAgLy8gQFRPRE86IGNvbnNpZGVyIGRpc2N1c3Npb24gb24gUFIgIzkyNzggYWJvdXQgRE9NIHBvbGx1dGlvbiBieSBjaGFuZ2VTbGlkZVxuICAgIHRoaXMuX3Jlc2V0KCk7XG5cbiAgICB0aGlzLiR3cmFwcGVyID0gdGhpcy4kZWxlbWVudC5maW5kKGAuJHt0aGlzLm9wdGlvbnMuY29udGFpbmVyQ2xhc3N9YCk7XG4gICAgdGhpcy4kc2xpZGVzID0gdGhpcy4kZWxlbWVudC5maW5kKGAuJHt0aGlzLm9wdGlvbnMuc2xpZGVDbGFzc31gKTtcblxuICAgIHZhciAkaW1hZ2VzID0gdGhpcy4kZWxlbWVudC5maW5kKCdpbWcnKSxcbiAgICAgICAgaW5pdEFjdGl2ZSA9IHRoaXMuJHNsaWRlcy5maWx0ZXIoJy5pcy1hY3RpdmUnKSxcbiAgICAgICAgaWQgPSB0aGlzLiRlbGVtZW50WzBdLmlkIHx8IEdldFlvRGlnaXRzKDYsICdvcmJpdCcpO1xuXG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKHtcbiAgICAgICdkYXRhLXJlc2l6ZSc6IGlkLFxuICAgICAgJ2lkJzogaWRcbiAgICB9KTtcblxuICAgIGlmICghaW5pdEFjdGl2ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuJHNsaWRlcy5lcSgwKS5hZGRDbGFzcygnaXMtYWN0aXZlJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMudXNlTVVJKSB7XG4gICAgICB0aGlzLiRzbGlkZXMuYWRkQ2xhc3MoJ25vLW1vdGlvbnVpJyk7XG4gICAgfVxuXG4gICAgaWYgKCRpbWFnZXMubGVuZ3RoKSB7XG4gICAgICBvbkltYWdlc0xvYWRlZCgkaW1hZ2VzLCB0aGlzLl9wcmVwYXJlRm9yT3JiaXQuYmluZCh0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ByZXBhcmVGb3JPcmJpdCgpOy8vaGVoZVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYnVsbGV0cykge1xuICAgICAgdGhpcy5fbG9hZEJ1bGxldHMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9ldmVudHMoKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1BsYXkgJiYgdGhpcy4kc2xpZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuZ2VvU3luYygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYWNjZXNzaWJsZSkgeyAvLyBhbGxvdyB3cmFwcGVyIHRvIGJlIGZvY3VzYWJsZSB0byBlbmFibGUgYXJyb3cgbmF2aWdhdGlvblxuICAgICAgdGhpcy4kd3JhcHBlci5hdHRyKCd0YWJpbmRleCcsIDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAqIENyZWF0ZXMgYSBqUXVlcnkgY29sbGVjdGlvbiBvZiBidWxsZXRzLCBpZiB0aGV5IGFyZSBiZWluZyB1c2VkLlxuICAqIEBmdW5jdGlvblxuICAqIEBwcml2YXRlXG4gICovXG4gIF9sb2FkQnVsbGV0cygpIHtcbiAgICB0aGlzLiRidWxsZXRzID0gdGhpcy4kZWxlbWVudC5maW5kKGAuJHt0aGlzLm9wdGlvbnMuYm94T2ZCdWxsZXRzfWApLmZpbmQoJ2J1dHRvbicpO1xuICB9XG5cbiAgLyoqXG4gICogU2V0cyBhIGB0aW1lcmAgb2JqZWN0IG9uIHRoZSBvcmJpdCwgYW5kIHN0YXJ0cyB0aGUgY291bnRlciBmb3IgdGhlIG5leHQgc2xpZGUuXG4gICogQGZ1bmN0aW9uXG4gICovXG4gIGdlb1N5bmMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLnRpbWVyID0gbmV3IFRpbWVyKFxuICAgICAgdGhpcy4kZWxlbWVudCxcbiAgICAgIHtcbiAgICAgICAgZHVyYXRpb246IHRoaXMub3B0aW9ucy50aW1lckRlbGF5LFxuICAgICAgICBpbmZpbml0ZTogZmFsc2VcbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgX3RoaXMuY2hhbmdlU2xpZGUodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB0aGlzLnRpbWVyLnN0YXJ0KCk7XG4gIH1cblxuICAvKipcbiAgKiBTZXRzIHdyYXBwZXIgYW5kIHNsaWRlIGhlaWdodHMgZm9yIHRoZSBvcmJpdC5cbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqL1xuICBfcHJlcGFyZUZvck9yYml0KCkge1xuICAgIHRoaXMuX3NldFdyYXBwZXJIZWlnaHQoKTtcbiAgfVxuXG4gIC8qKlxuICAqIENhbHVsYXRlcyB0aGUgaGVpZ2h0IG9mIGVhY2ggc2xpZGUgaW4gdGhlIGNvbGxlY3Rpb24sIGFuZCB1c2VzIHRoZSB0YWxsZXN0IG9uZSBmb3IgdGhlIHdyYXBwZXIgaGVpZ2h0LlxuICAqIEBmdW5jdGlvblxuICAqIEBwcml2YXRlXG4gICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgLSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGZpcmUgd2hlbiBjb21wbGV0ZS5cbiAgKi9cbiAgX3NldFdyYXBwZXJIZWlnaHQoY2IpIHsvL3Jld3JpdGUgdGhpcyB0byBgZm9yYCBsb29wXG4gICAgdmFyIG1heCA9IDAsIHRlbXAsIGNvdW50ZXIgPSAwLCBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLiRzbGlkZXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIHRlbXAgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICQodGhpcykuYXR0cignZGF0YS1zbGlkZScsIGNvdW50ZXIpO1xuXG4gICAgICAvLyBoaWRlIGFsbCBzbGlkZXMgYnV0IHRoZSBhY3RpdmUgb25lXG4gICAgICBpZiAoIS9tdWkvZy50ZXN0KCQodGhpcylbMF0uY2xhc3NOYW1lKSAmJiBfdGhpcy4kc2xpZGVzLmZpbHRlcignLmlzLWFjdGl2ZScpWzBdICE9PSBfdGhpcy4kc2xpZGVzLmVxKGNvdW50ZXIpWzBdKSB7XG4gICAgICAgICQodGhpcykuY3NzKHsnZGlzcGxheSc6ICdub25lJ30pO1xuICAgICAgfVxuICAgICAgbWF4ID0gdGVtcCA+IG1heCA/IHRlbXAgOiBtYXg7XG4gICAgICBjb3VudGVyKys7XG4gICAgfSk7XG5cbiAgICBpZiAoY291bnRlciA9PT0gdGhpcy4kc2xpZGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy4kd3JhcHBlci5jc3MoeydoZWlnaHQnOiBtYXh9KTsgLy9vbmx5IGNoYW5nZSB0aGUgd3JhcHBlciBoZWlnaHQgcHJvcGVydHkgb25jZS5cbiAgICAgIGlmKGNiKSB7Y2IobWF4KTt9IC8vZmlyZSBjYWxsYmFjayB3aXRoIG1heCBoZWlnaHQgZGltZW5zaW9uLlxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAqIFNldHMgdGhlIG1heC1oZWlnaHQgb2YgZWFjaCBzbGlkZS5cbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqL1xuICBfc2V0U2xpZGVIZWlnaHQoaGVpZ2h0KSB7XG4gICAgdGhpcy4kc2xpZGVzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAkKHRoaXMpLmNzcygnbWF4LWhlaWdodCcsIGhlaWdodCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgKiBBZGRzIGV2ZW50IGxpc3RlbmVycyB0byBiYXNpY2FsbHkgZXZlcnl0aGluZyB3aXRoaW4gdGhlIGVsZW1lbnQuXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAvLyoqTm93IHVzaW5nIGN1c3RvbSBldmVudCAtIHRoYW5rcyB0bzoqKlxuICAgIC8vKiogICAgICBZb2hhaSBBcmFyYXQgb2YgVG9yb250byAgICAgICoqXG4gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAvL1xuICAgIHRoaXMuJGVsZW1lbnQub2ZmKCcucmVzaXplbWUuemYudHJpZ2dlcicpLm9uKHtcbiAgICAgICdyZXNpemVtZS56Zi50cmlnZ2VyJzogdGhpcy5fcHJlcGFyZUZvck9yYml0LmJpbmQodGhpcylcbiAgICB9KTtcbiAgICBpZiAodGhpcy4kc2xpZGVzLmxlbmd0aCA+IDEpIHtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zd2lwZSkge1xuICAgICAgICB0aGlzLiRzbGlkZXMub2ZmKCdzd2lwZWxlZnQuemYub3JiaXQgc3dpcGVyaWdodC56Zi5vcmJpdCcpXG4gICAgICAgIC5vbignc3dpcGVsZWZ0LnpmLm9yYml0JywgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNsaWRlKHRydWUpO1xuICAgICAgICB9KS5vbignc3dpcGVyaWdodC56Zi5vcmJpdCcsIGZ1bmN0aW9uKGUpe1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBfdGhpcy5jaGFuZ2VTbGlkZShmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUGxheSkge1xuICAgICAgICB0aGlzLiRzbGlkZXMub24oJ2NsaWNrLnpmLm9yYml0JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgX3RoaXMuJGVsZW1lbnQuZGF0YSgnY2xpY2tlZE9uJywgX3RoaXMuJGVsZW1lbnQuZGF0YSgnY2xpY2tlZE9uJykgPyBmYWxzZSA6IHRydWUpO1xuICAgICAgICAgIF90aGlzLnRpbWVyW190aGlzLiRlbGVtZW50LmRhdGEoJ2NsaWNrZWRPbicpID8gJ3BhdXNlJyA6ICdzdGFydCddKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucGF1c2VPbkhvdmVyKSB7XG4gICAgICAgICAgdGhpcy4kZWxlbWVudC5vbignbW91c2VlbnRlci56Zi5vcmJpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgX3RoaXMudGltZXIucGF1c2UoKTtcbiAgICAgICAgICB9KS5vbignbW91c2VsZWF2ZS56Zi5vcmJpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCFfdGhpcy4kZWxlbWVudC5kYXRhKCdjbGlja2VkT24nKSkge1xuICAgICAgICAgICAgICBfdGhpcy50aW1lci5zdGFydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubmF2QnV0dG9ucykge1xuICAgICAgICB2YXIgJGNvbnRyb2xzID0gdGhpcy4kZWxlbWVudC5maW5kKGAuJHt0aGlzLm9wdGlvbnMubmV4dENsYXNzfSwgLiR7dGhpcy5vcHRpb25zLnByZXZDbGFzc31gKTtcbiAgICAgICAgJGNvbnRyb2xzLmF0dHIoJ3RhYmluZGV4JywgMClcbiAgICAgICAgLy9hbHNvIG5lZWQgdG8gaGFuZGxlIGVudGVyL3JldHVybiBhbmQgc3BhY2ViYXIga2V5IHByZXNzZXNcbiAgICAgICAgLm9uKCdjbGljay56Zi5vcmJpdCB0b3VjaGVuZC56Zi5vcmJpdCcsIGZ1bmN0aW9uKGUpe1xuXHQgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBfdGhpcy5jaGFuZ2VTbGlkZSgkKHRoaXMpLmhhc0NsYXNzKF90aGlzLm9wdGlvbnMubmV4dENsYXNzKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmJ1bGxldHMpIHtcbiAgICAgICAgdGhpcy4kYnVsbGV0cy5vbignY2xpY2suemYub3JiaXQgdG91Y2hlbmQuemYub3JiaXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoL2lzLWFjdGl2ZS9nLnRlc3QodGhpcy5jbGFzc05hbWUpKSB7IHJldHVybiBmYWxzZTsgfS8vaWYgdGhpcyBpcyBhY3RpdmUsIGtpY2sgb3V0IG9mIGZ1bmN0aW9uLlxuICAgICAgICAgIHZhciBpZHggPSAkKHRoaXMpLmRhdGEoJ3NsaWRlJyksXG4gICAgICAgICAgbHRyID0gaWR4ID4gX3RoaXMuJHNsaWRlcy5maWx0ZXIoJy5pcy1hY3RpdmUnKS5kYXRhKCdzbGlkZScpLFxuICAgICAgICAgICRzbGlkZSA9IF90aGlzLiRzbGlkZXMuZXEoaWR4KTtcblxuICAgICAgICAgIF90aGlzLmNoYW5nZVNsaWRlKGx0ciwgJHNsaWRlLCBpZHgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hY2Nlc3NpYmxlKSB7XG4gICAgICAgIHRoaXMuJHdyYXBwZXIuYWRkKHRoaXMuJGJ1bGxldHMpLm9uKCdrZXlkb3duLnpmLm9yYml0JywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgIC8vIGhhbmRsZSBrZXlib2FyZCBldmVudCB3aXRoIGtleWJvYXJkIHV0aWxcbiAgICAgICAgICBLZXlib2FyZC5oYW5kbGVLZXkoZSwgJ09yYml0Jywge1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIF90aGlzLmNoYW5nZVNsaWRlKHRydWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpb3VzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgX3RoaXMuY2hhbmdlU2xpZGUoZmFsc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhbmRsZWQ6IGZ1bmN0aW9uKCkgeyAvLyBpZiBidWxsZXQgaXMgZm9jdXNlZCwgbWFrZSBzdXJlIGZvY3VzIG1vdmVzXG4gICAgICAgICAgICAgIGlmICgkKGUudGFyZ2V0KS5pcyhfdGhpcy4kYnVsbGV0cykpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy4kYnVsbGV0cy5maWx0ZXIoJy5pcy1hY3RpdmUnKS5mb2N1cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgT3JiaXQgc28gaXQgY2FuIGJlIHJlaW5pdGlhbGl6ZWRcbiAgICovXG4gIF9yZXNldCgpIHtcbiAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBhcmUgbm8gc2xpZGVzIChmaXJzdCBydW4pXG4gICAgaWYgKHR5cGVvZiB0aGlzLiRzbGlkZXMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuJHNsaWRlcy5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBSZW1vdmUgb2xkIGV2ZW50c1xuICAgICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi5vcmJpdCcpLmZpbmQoJyonKS5vZmYoJy56Zi5vcmJpdCcpO1xuXG4gICAgICAvLyBSZXN0YXJ0IHRpbWVyIGlmIGF1dG9QbGF5IGlzIGVuYWJsZWRcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1BsYXkpIHtcbiAgICAgICAgdGhpcy50aW1lci5yZXN0YXJ0KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc2V0IGFsbCBzbGlkZGVzXG4gICAgICB0aGlzLiRzbGlkZXMuZWFjaChmdW5jdGlvbihlbCkge1xuICAgICAgICAkKGVsKS5yZW1vdmVDbGFzcygnaXMtYWN0aXZlIGlzLWFjdGl2ZSBpcy1pbicpXG4gICAgICAgICAgLnJlbW92ZUF0dHIoJ2FyaWEtbGl2ZScpXG4gICAgICAgICAgLmhpZGUoKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTaG93IHRoZSBmaXJzdCBzbGlkZVxuICAgICAgdGhpcy4kc2xpZGVzLmZpcnN0KCkuYWRkQ2xhc3MoJ2lzLWFjdGl2ZScpLnNob3coKTtcblxuICAgICAgLy8gVHJpZ2dlcnMgd2hlbiB0aGUgc2xpZGUgaGFzIGZpbmlzaGVkIGFuaW1hdGluZ1xuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdzbGlkZWNoYW5nZS56Zi5vcmJpdCcsIFt0aGlzLiRzbGlkZXMuZmlyc3QoKV0pO1xuXG4gICAgICAvLyBTZWxlY3QgZmlyc3QgYnVsbGV0IGlmIGJ1bGxldHMgYXJlIHByZXNlbnRcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYnVsbGV0cykge1xuICAgICAgICB0aGlzLl91cGRhdGVCdWxsZXRzKDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAqIENoYW5nZXMgdGhlIGN1cnJlbnQgc2xpZGUgdG8gYSBuZXcgb25lLlxuICAqIEBmdW5jdGlvblxuICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNMVFIgLSBpZiB0cnVlIHRoZSBzbGlkZSBtb3ZlcyBmcm9tIHJpZ2h0IHRvIGxlZnQsIGlmIGZhbHNlIHRoZSBzbGlkZSBtb3ZlcyBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gICogQHBhcmFtIHtqUXVlcnl9IGNob3NlblNsaWRlIC0gdGhlIGpRdWVyeSBlbGVtZW50IG9mIHRoZSBzbGlkZSB0byBzaG93IG5leHQsIGlmIG9uZSBpcyBzZWxlY3RlZC5cbiAgKiBAcGFyYW0ge051bWJlcn0gaWR4IC0gdGhlIGluZGV4IG9mIHRoZSBuZXcgc2xpZGUgaW4gaXRzIGNvbGxlY3Rpb24sIGlmIG9uZSBjaG9zZW4uXG4gICogQGZpcmVzIE9yYml0I3NsaWRlY2hhbmdlXG4gICovXG4gIGNoYW5nZVNsaWRlKGlzTFRSLCBjaG9zZW5TbGlkZSwgaWR4KSB7XG4gICAgaWYgKCF0aGlzLiRzbGlkZXMpIHtyZXR1cm47IH0gLy8gRG9uJ3QgZnJlYWsgb3V0IGlmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgY2xlYW51cFxuICAgIHZhciAkY3VyU2xpZGUgPSB0aGlzLiRzbGlkZXMuZmlsdGVyKCcuaXMtYWN0aXZlJykuZXEoMCk7XG5cbiAgICBpZiAoL211aS9nLnRlc3QoJGN1clNsaWRlWzBdLmNsYXNzTmFtZSkpIHsgcmV0dXJuIGZhbHNlOyB9IC8vaWYgdGhlIHNsaWRlIGlzIGN1cnJlbnRseSBhbmltYXRpbmcsIGtpY2sgb3V0IG9mIHRoZSBmdW5jdGlvblxuXG4gICAgdmFyICRmaXJzdFNsaWRlID0gdGhpcy4kc2xpZGVzLmZpcnN0KCksXG4gICAgJGxhc3RTbGlkZSA9IHRoaXMuJHNsaWRlcy5sYXN0KCksXG4gICAgZGlySW4gPSBpc0xUUiA/ICdSaWdodCcgOiAnTGVmdCcsXG4gICAgZGlyT3V0ID0gaXNMVFIgPyAnTGVmdCcgOiAnUmlnaHQnLFxuICAgIF90aGlzID0gdGhpcyxcbiAgICAkbmV3U2xpZGU7XG5cbiAgICBpZiAoIWNob3NlblNsaWRlKSB7IC8vbW9zdCBvZiB0aGUgdGltZSwgdGhpcyB3aWxsIGJlIGF1dG8gcGxheWVkIG9yIGNsaWNrZWQgZnJvbSB0aGUgbmF2QnV0dG9ucy5cbiAgICAgICRuZXdTbGlkZSA9IGlzTFRSID8gLy9pZiB3cmFwcGluZyBlbmFibGVkLCBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBgbmV4dGAgb3IgYHByZXZgIHNpYmxpbmcsIGlmIG5vdCwgc2VsZWN0IHRoZSBmaXJzdCBvciBsYXN0IHNsaWRlIHRvIGZpbGwgaW4uIGlmIHdyYXBwaW5nIG5vdCBlbmFibGVkLCBhdHRlbXB0IHRvIHNlbGVjdCBgbmV4dGAgb3IgYHByZXZgLCBpZiB0aGVyZSdzIG5vdGhpbmcgdGhlcmUsIHRoZSBmdW5jdGlvbiB3aWxsIGtpY2sgb3V0IG9uIG5leHQgc3RlcC4gQ1JBWlkgTkVTVEVEIFRFUk5BUklFUyEhISEhXG4gICAgICAodGhpcy5vcHRpb25zLmluZmluaXRlV3JhcCA/ICRjdXJTbGlkZS5uZXh0KGAuJHt0aGlzLm9wdGlvbnMuc2xpZGVDbGFzc31gKS5sZW5ndGggPyAkY3VyU2xpZGUubmV4dChgLiR7dGhpcy5vcHRpb25zLnNsaWRlQ2xhc3N9YCkgOiAkZmlyc3RTbGlkZSA6ICRjdXJTbGlkZS5uZXh0KGAuJHt0aGlzLm9wdGlvbnMuc2xpZGVDbGFzc31gKSkvL3BpY2sgbmV4dCBzbGlkZSBpZiBtb3ZpbmcgbGVmdCB0byByaWdodFxuICAgICAgOlxuICAgICAgKHRoaXMub3B0aW9ucy5pbmZpbml0ZVdyYXAgPyAkY3VyU2xpZGUucHJldihgLiR7dGhpcy5vcHRpb25zLnNsaWRlQ2xhc3N9YCkubGVuZ3RoID8gJGN1clNsaWRlLnByZXYoYC4ke3RoaXMub3B0aW9ucy5zbGlkZUNsYXNzfWApIDogJGxhc3RTbGlkZSA6ICRjdXJTbGlkZS5wcmV2KGAuJHt0aGlzLm9wdGlvbnMuc2xpZGVDbGFzc31gKSk7Ly9waWNrIHByZXYgc2xpZGUgaWYgbW92aW5nIHJpZ2h0IHRvIGxlZnRcbiAgICB9IGVsc2Uge1xuICAgICAgJG5ld1NsaWRlID0gY2hvc2VuU2xpZGU7XG4gICAgfVxuXG4gICAgaWYgKCRuZXdTbGlkZS5sZW5ndGgpIHtcbiAgICAgIC8qKlxuICAgICAgKiBUcmlnZ2VycyBiZWZvcmUgdGhlIG5leHQgc2xpZGUgc3RhcnRzIGFuaW1hdGluZyBpbiBhbmQgb25seSBpZiBhIG5leHQgc2xpZGUgaGFzIGJlZW4gZm91bmQuXG4gICAgICAqIEBldmVudCBPcmJpdCNiZWZvcmVzbGlkZWNoYW5nZVxuICAgICAgKi9cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignYmVmb3Jlc2xpZGVjaGFuZ2UuemYub3JiaXQnLCBbJGN1clNsaWRlLCAkbmV3U2xpZGVdKTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5idWxsZXRzKSB7XG4gICAgICAgIGlkeCA9IGlkeCB8fCB0aGlzLiRzbGlkZXMuaW5kZXgoJG5ld1NsaWRlKTsgLy9ncmFiIGluZGV4IHRvIHVwZGF0ZSBidWxsZXRzXG4gICAgICAgIHRoaXMuX3VwZGF0ZUJ1bGxldHMoaWR4KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy51c2VNVUkgJiYgIXRoaXMuJGVsZW1lbnQuaXMoJzpoaWRkZW4nKSkge1xuICAgICAgICBNb3Rpb24uYW5pbWF0ZUluKFxuICAgICAgICAgICRuZXdTbGlkZS5hZGRDbGFzcygnaXMtYWN0aXZlJyksXG4gICAgICAgICAgdGhpcy5vcHRpb25zW2BhbmltSW5Gcm9tJHtkaXJJbn1gXSxcbiAgICAgICAgICBmdW5jdGlvbigpe1xuICAgICAgICAgICAgJG5ld1NsaWRlLmNzcyh7J2Rpc3BsYXknOiAnYmxvY2snfSkuYXR0cignYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBNb3Rpb24uYW5pbWF0ZU91dChcbiAgICAgICAgICAkY3VyU2xpZGUucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZScpLFxuICAgICAgICAgIHRoaXMub3B0aW9uc1tgYW5pbU91dFRvJHtkaXJPdXR9YF0sXG4gICAgICAgICAgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICRjdXJTbGlkZS5yZW1vdmVBdHRyKCdhcmlhLWxpdmUnKTtcbiAgICAgICAgICAgIGlmKF90aGlzLm9wdGlvbnMuYXV0b1BsYXkgJiYgIV90aGlzLnRpbWVyLmlzUGF1c2VkKXtcbiAgICAgICAgICAgICAgX3RoaXMudGltZXIucmVzdGFydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9kbyBzdHVmZj9cbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRjdXJTbGlkZS5yZW1vdmVDbGFzcygnaXMtYWN0aXZlIGlzLWluJykucmVtb3ZlQXR0cignYXJpYS1saXZlJykuaGlkZSgpO1xuICAgICAgICAkbmV3U2xpZGUuYWRkQ2xhc3MoJ2lzLWFjdGl2ZSBpcy1pbicpLmF0dHIoJ2FyaWEtbGl2ZScsICdwb2xpdGUnKS5zaG93KCk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1BsYXkgJiYgIXRoaXMudGltZXIuaXNQYXVzZWQpIHtcbiAgICAgICAgICB0aGlzLnRpbWVyLnJlc3RhcnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIC8qKlxuICAgICogVHJpZ2dlcnMgd2hlbiB0aGUgc2xpZGUgaGFzIGZpbmlzaGVkIGFuaW1hdGluZyBpbi5cbiAgICAqIEBldmVudCBPcmJpdCNzbGlkZWNoYW5nZVxuICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3NsaWRlY2hhbmdlLnpmLm9yYml0JywgWyRuZXdTbGlkZV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAqIFVwZGF0ZXMgdGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgYnVsbGV0cywgaWYgZGlzcGxheWVkLlxuICAqIE1vdmUgdGhlIGRlc2NyaXB0b3Igb2YgdGhlIGN1cnJlbnQgc2xpZGUgYFtkYXRhLXNsaWRlLWFjdGl2ZS1sYWJlbF1gIHRvIHRoZSBuZXdseSBhY3RpdmUgYnVsbGV0LlxuICAqIElmIG5vIGBbZGF0YS1zbGlkZS1hY3RpdmUtbGFiZWxdYCBpcyBzZXQsIHdpbGwgbW92ZSB0aGUgZXhjZWVkaW5nIGBzcGFuYCBlbGVtZW50LlxuICAqXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKiBAcGFyYW0ge051bWJlcn0gaWR4IC0gdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHNsaWRlLlxuICAqL1xuICBfdXBkYXRlQnVsbGV0cyhpZHgpIHtcbiAgICB2YXIgJG9sZEJ1bGxldCA9IHRoaXMuJGJ1bGxldHMuZmlsdGVyKCcuaXMtYWN0aXZlJyk7XG4gICAgdmFyICRvdGhlcnNCdWxsZXRzID0gdGhpcy4kYnVsbGV0cy5ub3QoJy5pcy1hY3RpdmUnKTtcbiAgICB2YXIgJG5ld0J1bGxldCA9IHRoaXMuJGJ1bGxldHMuZXEoaWR4KTtcblxuICAgICRvbGRCdWxsZXQucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZScpLmJsdXIoKTtcbiAgICAkbmV3QnVsbGV0LmFkZENsYXNzKCdpcy1hY3RpdmUnKTtcblxuICAgIC8vIEZpbmQgdGhlIGRlc2NyaXB0b3IgZm9yIHRoZSBjdXJyZW50IHNsaWRlIHRvIG1vdmUgaXQgdG8gdGhlIG5ldyBzbGlkZSBidXR0b25cbiAgICB2YXIgYWN0aXZlU3RhdGVEZXNjcmlwdG9yID0gJG9sZEJ1bGxldC5jaGlsZHJlbignW2RhdGEtc2xpZGUtYWN0aXZlLWxhYmVsXScpLmxhc3QoKTtcblxuICAgIC8vIElmIG5vdCBleHBsaWNpdGVseSBnaXZlbiwgc2VhcmNoIGZvciB0aGUgbGFzdCBcImV4Y2VlZGluZ1wiIHNwYW4gZWxlbWVudCAoY29tcGFyZWQgdG8gb3RoZXJzIGJ1bGxldHMpLlxuICAgIGlmICghYWN0aXZlU3RhdGVEZXNjcmlwdG9yLmxlbmd0aCkge1xuICAgICAgdmFyIHNwYW5zID0gJG9sZEJ1bGxldC5jaGlsZHJlbignc3BhbicpO1xuICAgICAgdmFyIHNwYW5Db3VudEluT3RoZXJzQnVsbGV0cyA9ICRvdGhlcnNCdWxsZXRzLnRvQXJyYXkoKS5tYXAoYiA9PiAkKGIpLmNoaWxkcmVuKCdzcGFuJykubGVuZ3RoKTtcblxuICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gZXhjZWVkaW5nIHNwYW4gZWxlbWVudCwgdXNlIGl0IGFzIGN1cnJlbnQgc2xpZGUgZGVzY3JpcHRvclxuICAgICAgaWYgKHNwYW5Db3VudEluT3RoZXJzQnVsbGV0cy5ldmVyeShjb3VudCA9PiBjb3VudCA8IHNwYW5zLmxlbmd0aCkpIHtcbiAgICAgICAgYWN0aXZlU3RhdGVEZXNjcmlwdG9yID0gc3BhbnMubGFzdCgpO1xuICAgICAgICBhY3RpdmVTdGF0ZURlc2NyaXB0b3IuYXR0cignZGF0YS1zbGlkZS1hY3RpdmUtbGFiZWwnLCAnJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTW92ZSB0aGUgY3VycmVudCBzbGlkZSBkZXNjcmlwdG9yIHRvIHRoZSBuZXcgc2xpZGUgYnV0dG9uXG4gICAgaWYgKGFjdGl2ZVN0YXRlRGVzY3JpcHRvci5sZW5ndGgpIHtcbiAgICAgIGFjdGl2ZVN0YXRlRGVzY3JpcHRvci5kZXRhY2goKTtcbiAgICAgICRuZXdCdWxsZXQuYXBwZW5kKGFjdGl2ZVN0YXRlRGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICogRGVzdHJveXMgdGhlIGNhcm91c2VsIGFuZCBoaWRlcyB0aGUgZWxlbWVudC5cbiAgKiBAZnVuY3Rpb25cbiAgKi9cbiAgX2Rlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi5vcmJpdCcpLmZpbmQoJyonKS5vZmYoJy56Zi5vcmJpdCcpLmVuZCgpLmhpZGUoKTtcbiAgfVxufVxuXG5PcmJpdC5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICogVGVsbHMgdGhlIEpTIHRvIGxvb2sgZm9yIGFuZCBsb2FkQnVsbGV0cy5cbiAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAqIEBkZWZhdWx0IHRydWVcbiAgKi9cbiAgYnVsbGV0czogdHJ1ZSxcbiAgLyoqXG4gICogVGVsbHMgdGhlIEpTIHRvIGFwcGx5IGV2ZW50IGxpc3RlbmVycyB0byBuYXYgYnV0dG9uc1xuICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICogQGRlZmF1bHQgdHJ1ZVxuICAqL1xuICBuYXZCdXR0b25zOiB0cnVlLFxuICAvKipcbiAgKiBtb3Rpb24tdWkgYW5pbWF0aW9uIGNsYXNzIHRvIGFwcGx5XG4gICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAqIEBkZWZhdWx0ICdzbGlkZS1pbi1yaWdodCdcbiAgKi9cbiAgYW5pbUluRnJvbVJpZ2h0OiAnc2xpZGUtaW4tcmlnaHQnLFxuICAvKipcbiAgKiBtb3Rpb24tdWkgYW5pbWF0aW9uIGNsYXNzIHRvIGFwcGx5XG4gICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAqIEBkZWZhdWx0ICdzbGlkZS1vdXQtcmlnaHQnXG4gICovXG4gIGFuaW1PdXRUb1JpZ2h0OiAnc2xpZGUtb3V0LXJpZ2h0JyxcbiAgLyoqXG4gICogbW90aW9uLXVpIGFuaW1hdGlvbiBjbGFzcyB0byBhcHBseVxuICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgKiBAZGVmYXVsdCAnc2xpZGUtaW4tbGVmdCdcbiAgKlxuICAqL1xuICBhbmltSW5Gcm9tTGVmdDogJ3NsaWRlLWluLWxlZnQnLFxuICAvKipcbiAgKiBtb3Rpb24tdWkgYW5pbWF0aW9uIGNsYXNzIHRvIGFwcGx5XG4gICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAqIEBkZWZhdWx0ICdzbGlkZS1vdXQtbGVmdCdcbiAgKi9cbiAgYW5pbU91dFRvTGVmdDogJ3NsaWRlLW91dC1sZWZ0JyxcbiAgLyoqXG4gICogQWxsb3dzIE9yYml0IHRvIGF1dG9tYXRpY2FsbHkgYW5pbWF0ZSBvbiBwYWdlIGxvYWQuXG4gICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgKiBAZGVmYXVsdCB0cnVlXG4gICovXG4gIGF1dG9QbGF5OiB0cnVlLFxuICAvKipcbiAgKiBBbW91bnQgb2YgdGltZSwgaW4gbXMsIGJldHdlZW4gc2xpZGUgdHJhbnNpdGlvbnNcbiAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICogQGRlZmF1bHQgNTAwMFxuICAqL1xuICB0aW1lckRlbGF5OiA1MDAwLFxuICAvKipcbiAgKiBBbGxvd3MgT3JiaXQgdG8gaW5maW5pdGVseSBsb29wIHRocm91Z2ggdGhlIHNsaWRlc1xuICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICogQGRlZmF1bHQgdHJ1ZVxuICAqL1xuICBpbmZpbml0ZVdyYXA6IHRydWUsXG4gIC8qKlxuICAqIEFsbG93cyB0aGUgT3JiaXQgc2xpZGVzIHRvIGJpbmQgdG8gc3dpcGUgZXZlbnRzIGZvciBtb2JpbGUsIHJlcXVpcmVzIGFuIGFkZGl0aW9uYWwgdXRpbCBsaWJyYXJ5XG4gICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgKiBAZGVmYXVsdCB0cnVlXG4gICovXG4gIHN3aXBlOiB0cnVlLFxuICAvKipcbiAgKiBBbGxvd3MgdGhlIHRpbWluZyBmdW5jdGlvbiB0byBwYXVzZSBhbmltYXRpb24gb24gaG92ZXIuXG4gICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgKiBAZGVmYXVsdCB0cnVlXG4gICovXG4gIHBhdXNlT25Ib3ZlcjogdHJ1ZSxcbiAgLyoqXG4gICogQWxsb3dzIE9yYml0IHRvIGJpbmQga2V5Ym9hcmQgZXZlbnRzIHRvIHRoZSBzbGlkZXIsIHRvIGFuaW1hdGUgZnJhbWVzIHdpdGggYXJyb3cga2V5c1xuICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICogQGRlZmF1bHQgdHJ1ZVxuICAqL1xuICBhY2Nlc3NpYmxlOiB0cnVlLFxuICAvKipcbiAgKiBDbGFzcyBhcHBsaWVkIHRvIHRoZSBjb250YWluZXIgb2YgT3JiaXRcbiAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICogQGRlZmF1bHQgJ29yYml0LWNvbnRhaW5lcidcbiAgKi9cbiAgY29udGFpbmVyQ2xhc3M6ICdvcmJpdC1jb250YWluZXInLFxuICAvKipcbiAgKiBDbGFzcyBhcHBsaWVkIHRvIGluZGl2aWR1YWwgc2xpZGVzLlxuICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgKiBAZGVmYXVsdCAnb3JiaXQtc2xpZGUnXG4gICovXG4gIHNsaWRlQ2xhc3M6ICdvcmJpdC1zbGlkZScsXG4gIC8qKlxuICAqIENsYXNzIGFwcGxpZWQgdG8gdGhlIGJ1bGxldCBjb250YWluZXIuIFlvdSdyZSB3ZWxjb21lLlxuICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgKiBAZGVmYXVsdCAnb3JiaXQtYnVsbGV0cydcbiAgKi9cbiAgYm94T2ZCdWxsZXRzOiAnb3JiaXQtYnVsbGV0cycsXG4gIC8qKlxuICAqIENsYXNzIGFwcGxpZWQgdG8gdGhlIGBuZXh0YCBuYXZpZ2F0aW9uIGJ1dHRvbi5cbiAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICogQGRlZmF1bHQgJ29yYml0LW5leHQnXG4gICovXG4gIG5leHRDbGFzczogJ29yYml0LW5leHQnLFxuICAvKipcbiAgKiBDbGFzcyBhcHBsaWVkIHRvIHRoZSBgcHJldmlvdXNgIG5hdmlnYXRpb24gYnV0dG9uLlxuICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgKiBAZGVmYXVsdCAnb3JiaXQtcHJldmlvdXMnXG4gICovXG4gIHByZXZDbGFzczogJ29yYml0LXByZXZpb3VzJyxcbiAgLyoqXG4gICogQm9vbGVhbiB0byBmbGFnIHRoZSBqcyB0byB1c2UgbW90aW9uIHVpIGNsYXNzZXMgb3Igbm90LiBEZWZhdWx0IHRvIHRydWUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICogQGRlZmF1bHQgdHJ1ZVxuICAqL1xuICB1c2VNVUk6IHRydWVcbn07XG5cbmxldCBNZW51UGx1Z2lucyA9IHtcbiAgZHJvcGRvd246IHtcbiAgICBjc3NDbGFzczogJ2Ryb3Bkb3duJyxcbiAgICBwbHVnaW46IERyb3Bkb3duTWVudVxuICB9LFxuIGRyaWxsZG93bjoge1xuICAgIGNzc0NsYXNzOiAnZHJpbGxkb3duJyxcbiAgICBwbHVnaW46IERyaWxsZG93blxuICB9LFxuICBhY2NvcmRpb246IHtcbiAgICBjc3NDbGFzczogJ2FjY29yZGlvbi1tZW51JyxcbiAgICBwbHVnaW46IEFjY29yZGlvbk1lbnVcbiAgfVxufTtcblxuICAvLyBpbXBvcnQgXCJmb3VuZGF0aW9uLnV0aWwudHJpZ2dlcnMuanNcIjtcblxuXG4vKipcbiAqIFJlc3BvbnNpdmVNZW51IG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5yZXNwb25zaXZlTWVudVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tZWRpYVF1ZXJ5XG4gKi9cblxuY2xhc3MgUmVzcG9uc2l2ZU1lbnUgZXh0ZW5kcyBQbHVnaW4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhIHJlc3BvbnNpdmUgbWVudS5cbiAgICogQGNsYXNzXG4gICAqIEBuYW1lIFJlc3BvbnNpdmVNZW51XG4gICAqIEBmaXJlcyBSZXNwb25zaXZlTWVudSNpbml0XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYSBkcm9wZG93biBtZW51LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBfc2V0dXAoZWxlbWVudCkge1xuICAgIHRoaXMuJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgIHRoaXMucnVsZXMgPSB0aGlzLiRlbGVtZW50LmRhdGEoJ3Jlc3BvbnNpdmUtbWVudScpO1xuICAgIHRoaXMuY3VycmVudE1xID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRQbHVnaW4gPSBudWxsO1xuICAgIHRoaXMuY2xhc3NOYW1lID0gJ1Jlc3BvbnNpdmVNZW51JzsgLy8gaWU5IGJhY2sgY29tcGF0XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIE1lbnUgYnkgcGFyc2luZyB0aGUgY2xhc3NlcyBmcm9tIHRoZSAnZGF0YS1SZXNwb25zaXZlTWVudScgYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuXG4gICAgTWVkaWFRdWVyeS5faW5pdCgpO1xuICAgIC8vIFRoZSBmaXJzdCB0aW1lIGFuIEludGVyY2hhbmdlIHBsdWdpbiBpcyBpbml0aWFsaXplZCwgdGhpcy5ydWxlcyBpcyBjb252ZXJ0ZWQgZnJvbSBhIHN0cmluZyBvZiBcImNsYXNzZXNcIiB0byBhbiBvYmplY3Qgb2YgcnVsZXNcbiAgICBpZiAodHlwZW9mIHRoaXMucnVsZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgcnVsZXNUcmVlID0ge307XG5cbiAgICAgIC8vIFBhcnNlIHJ1bGVzIGZyb20gXCJjbGFzc2VzXCIgcHVsbGVkIGZyb20gZGF0YSBhdHRyaWJ1dGVcbiAgICAgIGxldCBydWxlcyA9IHRoaXMucnVsZXMuc3BsaXQoJyAnKTtcblxuICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGV2ZXJ5IHJ1bGUgZm91bmRcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHJ1bGUgPSBydWxlc1tpXS5zcGxpdCgnLScpO1xuICAgICAgICBsZXQgcnVsZVNpemUgPSBydWxlLmxlbmd0aCA+IDEgPyBydWxlWzBdIDogJ3NtYWxsJztcbiAgICAgICAgbGV0IHJ1bGVQbHVnaW4gPSBydWxlLmxlbmd0aCA+IDEgPyBydWxlWzFdIDogcnVsZVswXTtcblxuICAgICAgICBpZiAoTWVudVBsdWdpbnNbcnVsZVBsdWdpbl0gIT09IG51bGwpIHtcbiAgICAgICAgICBydWxlc1RyZWVbcnVsZVNpemVdID0gTWVudVBsdWdpbnNbcnVsZVBsdWdpbl07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5ydWxlcyA9IHJ1bGVzVHJlZTtcbiAgICB9XG5cbiAgICBpZiAoISQuaXNFbXB0eU9iamVjdCh0aGlzLnJ1bGVzKSkge1xuICAgICAgdGhpcy5fY2hlY2tNZWRpYVF1ZXJpZXMoKTtcbiAgICB9XG4gICAgLy8gQWRkIGRhdGEtbXV0YXRlIHNpbmNlIGNoaWxkcmVuIG1heSBuZWVkIGl0LlxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cignZGF0YS1tdXRhdGUnLCAodGhpcy4kZWxlbWVudC5hdHRyKCdkYXRhLW11dGF0ZScpIHx8IEdldFlvRGlnaXRzKDYsICdyZXNwb25zaXZlLW1lbnUnKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGV2ZW50cyBmb3IgdGhlIE1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgJCh3aW5kb3cpLm9uKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCBmdW5jdGlvbigpIHtcbiAgICAgIF90aGlzLl9jaGVja01lZGlhUXVlcmllcygpO1xuICAgIH0pO1xuICAgIC8vICQod2luZG93KS5vbigncmVzaXplLnpmLlJlc3BvbnNpdmVNZW51JywgZnVuY3Rpb24oKSB7XG4gICAgLy8gICBfdGhpcy5fY2hlY2tNZWRpYVF1ZXJpZXMoKTtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIGN1cnJlbnQgc2NyZWVuIHdpZHRoIGFnYWluc3QgYXZhaWxhYmxlIG1lZGlhIHF1ZXJpZXMuIElmIHRoZSBtZWRpYSBxdWVyeSBoYXMgY2hhbmdlZCwgYW5kIHRoZSBwbHVnaW4gbmVlZGVkIGhhcyBjaGFuZ2VkLCB0aGUgcGx1Z2lucyB3aWxsIHN3YXAgb3V0LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja01lZGlhUXVlcmllcygpIHtcbiAgICB2YXIgbWF0Y2hlZE1xLCBfdGhpcyA9IHRoaXM7XG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggcnVsZSBhbmQgZmluZCB0aGUgbGFzdCBtYXRjaGluZyBydWxlXG4gICAgJC5lYWNoKHRoaXMucnVsZXMsIGZ1bmN0aW9uKGtleSkge1xuICAgICAgaWYgKE1lZGlhUXVlcnkuYXRMZWFzdChrZXkpKSB7XG4gICAgICAgIG1hdGNoZWRNcSA9IGtleTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIE5vIG1hdGNoPyBObyBkaWNlXG4gICAgaWYgKCFtYXRjaGVkTXEpIHJldHVybjtcblxuICAgIC8vIFBsdWdpbiBhbHJlYWR5IGluaXRpYWxpemVkPyBXZSBnb29kXG4gICAgaWYgKHRoaXMuY3VycmVudFBsdWdpbiBpbnN0YW5jZW9mIHRoaXMucnVsZXNbbWF0Y2hlZE1xXS5wbHVnaW4pIHJldHVybjtcblxuICAgIC8vIFJlbW92ZSBleGlzdGluZyBwbHVnaW4tc3BlY2lmaWMgQ1NTIGNsYXNzZXNcbiAgICAkLmVhY2goTWVudVBsdWdpbnMsIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgICAgIF90aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHZhbHVlLmNzc0NsYXNzKTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCB0aGUgQ1NTIGNsYXNzIGZvciB0aGUgbmV3IHBsdWdpblxuICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3ModGhpcy5ydWxlc1ttYXRjaGVkTXFdLmNzc0NsYXNzKTtcblxuICAgIC8vIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgbmV3IHBsdWdpblxuICAgIGlmICh0aGlzLmN1cnJlbnRQbHVnaW4pIHRoaXMuY3VycmVudFBsdWdpbi5kZXN0cm95KCk7XG4gICAgdGhpcy5jdXJyZW50UGx1Z2luID0gbmV3IHRoaXMucnVsZXNbbWF0Y2hlZE1xXS5wbHVnaW4odGhpcy4kZWxlbWVudCwge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBpbnN0YW5jZSBvZiB0aGUgY3VycmVudCBwbHVnaW4gb24gdGhpcyBlbGVtZW50LCBhcyB3ZWxsIGFzIHRoZSB3aW5kb3cgcmVzaXplIGhhbmRsZXIgdGhhdCBzd2l0Y2hlcyB0aGUgcGx1Z2lucyBvdXQuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX2Rlc3Ryb3koKSB7XG4gICAgdGhpcy5jdXJyZW50UGx1Z2luLmRlc3Ryb3koKTtcbiAgICAkKHdpbmRvdykub2ZmKCcuemYuUmVzcG9uc2l2ZU1lbnUnKTtcbiAgfVxufVxuXG5SZXNwb25zaXZlTWVudS5kZWZhdWx0cyA9IHt9O1xuXG4vKipcbiAqIFJlc3BvbnNpdmVUb2dnbGUgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLnJlc3BvbnNpdmVUb2dnbGVcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubWVkaWFRdWVyeVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tb3Rpb25cbiAqL1xuXG5jbGFzcyBSZXNwb25zaXZlVG9nZ2xlIGV4dGVuZHMgUGx1Z2luIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgVGFiIEJhci5cbiAgICogQGNsYXNzXG4gICAqIEBuYW1lIFJlc3BvbnNpdmVUb2dnbGVcbiAgICogQGZpcmVzIFJlc3BvbnNpdmVUb2dnbGUjaW5pdFxuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gYXR0YWNoIHRhYiBiYXIgZnVuY3Rpb25hbGl0eSB0by5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgX3NldHVwKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgUmVzcG9uc2l2ZVRvZ2dsZS5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuICAgIHRoaXMuY2xhc3NOYW1lID0gJ1Jlc3BvbnNpdmVUb2dnbGUnOyAvLyBpZTkgYmFjayBjb21wYXRcblxuICAgIHRoaXMuX2luaXQoKTtcbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgdGFiIGJhciBieSBmaW5kaW5nIHRoZSB0YXJnZXQgZWxlbWVudCwgdG9nZ2xpbmcgZWxlbWVudCwgYW5kIHJ1bm5pbmcgdXBkYXRlKCkuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgTWVkaWFRdWVyeS5faW5pdCgpO1xuICAgIHZhciB0YXJnZXRJRCA9IHRoaXMuJGVsZW1lbnQuZGF0YSgncmVzcG9uc2l2ZS10b2dnbGUnKTtcbiAgICBpZiAoIXRhcmdldElEKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdZb3VyIHRhYiBiYXIgbmVlZHMgYW4gSUQgb2YgYSBNZW51IGFzIHRoZSB2YWx1ZSBvZiBkYXRhLXRhYi1iYXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy4kdGFyZ2V0TWVudSA9ICQoYCMke3RhcmdldElEfWApO1xuICAgIHRoaXMuJHRvZ2dsZXIgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLXRvZ2dsZV0nKS5maWx0ZXIoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gJCh0aGlzKS5kYXRhKCd0b2dnbGUnKTtcbiAgICAgIHJldHVybiAodGFyZ2V0ID09PSB0YXJnZXRJRCB8fCB0YXJnZXQgPT09IFwiXCIpO1xuICAgIH0pO1xuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIHRoaXMuJHRhcmdldE1lbnUuZGF0YSgpKTtcblxuICAgIC8vIElmIHRoZXkgd2VyZSBzZXQsIHBhcnNlIHRoZSBhbmltYXRpb24gY2xhc3Nlc1xuICAgIGlmKHRoaXMub3B0aW9ucy5hbmltYXRlKSB7XG4gICAgICBsZXQgaW5wdXQgPSB0aGlzLm9wdGlvbnMuYW5pbWF0ZS5zcGxpdCgnICcpO1xuXG4gICAgICB0aGlzLmFuaW1hdGlvbkluID0gaW5wdXRbMF07XG4gICAgICB0aGlzLmFuaW1hdGlvbk91dCA9IGlucHV0WzFdIHx8IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBuZWNlc3NhcnkgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSB0YWIgYmFyIHRvIHdvcmsuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB0aGlzLl91cGRhdGVNcUhhbmRsZXIgPSB0aGlzLl91cGRhdGUuYmluZCh0aGlzKTtcblxuICAgICQod2luZG93KS5vbignY2hhbmdlZC56Zi5tZWRpYXF1ZXJ5JywgdGhpcy5fdXBkYXRlTXFIYW5kbGVyKTtcblxuICAgIHRoaXMuJHRvZ2dsZXIub24oJ2NsaWNrLnpmLnJlc3BvbnNpdmVUb2dnbGUnLCB0aGlzLnRvZ2dsZU1lbnUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHRoZSBjdXJyZW50IG1lZGlhIHF1ZXJ5IHRvIGRldGVybWluZSBpZiB0aGUgdGFiIGJhciBzaG91bGQgYmUgdmlzaWJsZSBvciBoaWRkZW4uXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZSgpIHtcbiAgICAvLyBNb2JpbGVcbiAgICBpZiAoIU1lZGlhUXVlcnkuYXRMZWFzdCh0aGlzLm9wdGlvbnMuaGlkZUZvcikpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQuc2hvdygpO1xuICAgICAgdGhpcy4kdGFyZ2V0TWVudS5oaWRlKCk7XG4gICAgfVxuXG4gICAgLy8gRGVza3RvcFxuICAgIGVsc2Uge1xuICAgICAgdGhpcy4kZWxlbWVudC5oaWRlKCk7XG4gICAgICB0aGlzLiR0YXJnZXRNZW51LnNob3coKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgZWxlbWVudCBhdHRhY2hlZCB0byB0aGUgdGFiIGJhci4gVGhlIHRvZ2dsZSBvbmx5IGhhcHBlbnMgaWYgdGhlIHNjcmVlbiBpcyBzbWFsbCBlbm91Z2ggdG8gYWxsb3cgaXQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAZmlyZXMgUmVzcG9uc2l2ZVRvZ2dsZSN0b2dnbGVkXG4gICAqL1xuICB0b2dnbGVNZW51KCkge1xuICAgIGlmICghTWVkaWFRdWVyeS5hdExlYXN0KHRoaXMub3B0aW9ucy5oaWRlRm9yKSkge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXJlcyB3aGVuIHRoZSBlbGVtZW50IGF0dGFjaGVkIHRvIHRoZSB0YWIgYmFyIHRvZ2dsZXMuXG4gICAgICAgKiBAZXZlbnQgUmVzcG9uc2l2ZVRvZ2dsZSN0b2dnbGVkXG4gICAgICAgKi9cbiAgICAgIGlmKHRoaXMub3B0aW9ucy5hbmltYXRlKSB7XG4gICAgICAgIGlmICh0aGlzLiR0YXJnZXRNZW51LmlzKCc6aGlkZGVuJykpIHtcbiAgICAgICAgICBNb3Rpb24uYW5pbWF0ZUluKHRoaXMuJHRhcmdldE1lbnUsIHRoaXMuYW5pbWF0aW9uSW4sICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigndG9nZ2xlZC56Zi5yZXNwb25zaXZlVG9nZ2xlJyk7XG4gICAgICAgICAgICB0aGlzLiR0YXJnZXRNZW51LmZpbmQoJ1tkYXRhLW11dGF0ZV0nKS50cmlnZ2VySGFuZGxlcignbXV0YXRlbWUuemYudHJpZ2dlcicpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIE1vdGlvbi5hbmltYXRlT3V0KHRoaXMuJHRhcmdldE1lbnUsIHRoaXMuYW5pbWF0aW9uT3V0LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3RvZ2dsZWQuemYucmVzcG9uc2l2ZVRvZ2dsZScpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy4kdGFyZ2V0TWVudS50b2dnbGUoMCk7XG4gICAgICAgIHRoaXMuJHRhcmdldE1lbnUuZmluZCgnW2RhdGEtbXV0YXRlXScpLnRyaWdnZXIoJ211dGF0ZW1lLnpmLnRyaWdnZXInKTtcbiAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCd0b2dnbGVkLnpmLnJlc3BvbnNpdmVUb2dnbGUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX2Rlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi5yZXNwb25zaXZlVG9nZ2xlJyk7XG4gICAgdGhpcy4kdG9nZ2xlci5vZmYoJy56Zi5yZXNwb25zaXZlVG9nZ2xlJyk7XG5cbiAgICAkKHdpbmRvdykub2ZmKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCB0aGlzLl91cGRhdGVNcUhhbmRsZXIpO1xuICB9XG59XG5cblJlc3BvbnNpdmVUb2dnbGUuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgYnJlYWtwb2ludCBhZnRlciB3aGljaCB0aGUgbWVudSBpcyBhbHdheXMgc2hvd24sIGFuZCB0aGUgdGFiIGJhciBpcyBoaWRkZW4uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIGhpZGVGb3I6ICdtZWRpdW0nLFxuXG4gIC8qKlxuICAgKiBUbyBkZWNpZGUgaWYgdGhlIHRvZ2dsZSBzaG91bGQgYmUgYW5pbWF0ZWQgb3Igbm90LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYW5pbWF0ZTogZmFsc2Vcbn07XG5cbi8qKlxuICogUmV2ZWFsIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5yZXZlYWxcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudG91Y2hcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudHJpZ2dlcnNcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubWVkaWFRdWVyeVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tb3Rpb24gaWYgdXNpbmcgYW5pbWF0aW9uc1xuICovXG5cbmNsYXNzIFJldmVhbCBleHRlbmRzIFBsdWdpbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJldmVhbC5cbiAgICogQGNsYXNzXG4gICAqIEBuYW1lIFJldmVhbFxuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gdXNlIGZvciB0aGUgbW9kYWwuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICovXG4gIF9zZXR1cChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIFJldmVhbC5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuICAgIHRoaXMuY2xhc3NOYW1lID0gJ1JldmVhbCc7IC8vIGllOSBiYWNrIGNvbXBhdFxuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIC8vIFRvdWNoIGFuZCBUcmlnZ2VycyBpbml0IGFyZSBpZGVtcG90ZW50LCBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGluaXRpYWxpemVkXG4gICAgVG91Y2guaW5pdCgkKTtcbiAgICBUcmlnZ2Vycy5pbml0KCQpO1xuXG4gICAgS2V5Ym9hcmQucmVnaXN0ZXIoJ1JldmVhbCcsIHtcbiAgICAgICdFU0NBUEUnOiAnY2xvc2UnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBtb2RhbCBieSBhZGRpbmcgdGhlIG92ZXJsYXkgYW5kIGNsb3NlIGJ1dHRvbnMsIChpZiBzZWxlY3RlZCkuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICBNZWRpYVF1ZXJ5Ll9pbml0KCk7XG4gICAgdGhpcy5pZCA9IHRoaXMuJGVsZW1lbnQuYXR0cignaWQnKTtcbiAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5jYWNoZWQgPSB7bXE6IE1lZGlhUXVlcnkuY3VycmVudH07XG5cbiAgICB0aGlzLiRhbmNob3IgPSAkKGBbZGF0YS1vcGVuPVwiJHt0aGlzLmlkfVwiXWApLmxlbmd0aCA/ICQoYFtkYXRhLW9wZW49XCIke3RoaXMuaWR9XCJdYCkgOiAkKGBbZGF0YS10b2dnbGU9XCIke3RoaXMuaWR9XCJdYCk7XG4gICAgdGhpcy4kYW5jaG9yLmF0dHIoe1xuICAgICAgJ2FyaWEtY29udHJvbHMnOiB0aGlzLmlkLFxuICAgICAgJ2FyaWEtaGFzcG9wdXAnOiAnZGlhbG9nJyxcbiAgICAgICd0YWJpbmRleCc6IDBcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZnVsbFNjcmVlbiB8fCB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsJykpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5mdWxsU2NyZWVuID0gdHJ1ZTtcbiAgICAgIHRoaXMub3B0aW9ucy5vdmVybGF5ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMub3ZlcmxheSAmJiAhdGhpcy4kb3ZlcmxheSkge1xuICAgICAgdGhpcy4kb3ZlcmxheSA9IHRoaXMuX21ha2VPdmVybGF5KHRoaXMuaWQpO1xuICAgIH1cblxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cih7XG4gICAgICAgICdyb2xlJzogJ2RpYWxvZycsXG4gICAgICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgICAgICdkYXRhLXlldGktYm94JzogdGhpcy5pZCxcbiAgICAgICAgJ2RhdGEtcmVzaXplJzogdGhpcy5pZFxuICAgIH0pO1xuXG4gICAgaWYodGhpcy4kb3ZlcmxheSkge1xuICAgICAgdGhpcy4kZWxlbWVudC5kZXRhY2goKS5hcHBlbmRUbyh0aGlzLiRvdmVybGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4kZWxlbWVudC5kZXRhY2goKS5hcHBlbmRUbygkKHRoaXMub3B0aW9ucy5hcHBlbmRUbykpO1xuICAgICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcygnd2l0aG91dC1vdmVybGF5Jyk7XG4gICAgfVxuICAgIHRoaXMuX2V2ZW50cygpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZGVlcExpbmsgJiYgd2luZG93LmxvY2F0aW9uLmhhc2ggPT09ICggYCMke3RoaXMuaWR9YCkpIHtcbiAgICAgIHRoaXMub25Mb2FkTGlzdGVuZXIgPSBvbkxvYWQoJCh3aW5kb3cpLCAoKSA9PiB0aGlzLm9wZW4oKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gb3ZlcmxheSBkaXYgdG8gZGlzcGxheSBiZWhpbmQgdGhlIG1vZGFsLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VPdmVybGF5KCkge1xuICAgIHZhciBhZGRpdGlvbmFsT3ZlcmxheUNsYXNzZXMgPSAnJztcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYWRkaXRpb25hbE92ZXJsYXlDbGFzc2VzKSB7XG4gICAgICBhZGRpdGlvbmFsT3ZlcmxheUNsYXNzZXMgPSAnICcgKyB0aGlzLm9wdGlvbnMuYWRkaXRpb25hbE92ZXJsYXlDbGFzc2VzO1xuICAgIH1cblxuICAgIHJldHVybiAkKCc8ZGl2PjwvZGl2PicpXG4gICAgICAuYWRkQ2xhc3MoJ3JldmVhbC1vdmVybGF5JyArIGFkZGl0aW9uYWxPdmVybGF5Q2xhc3NlcylcbiAgICAgIC5hcHBlbmRUbyh0aGlzLm9wdGlvbnMuYXBwZW5kVG8pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgcG9zaXRpb24gb2YgbW9kYWxcbiAgICogVE9ETzogIEZpZ3VyZSBvdXQgaWYgd2UgYWN0dWFsbHkgbmVlZCB0byBjYWNoZSB0aGVzZSB2YWx1ZXMgb3IgaWYgaXQgZG9lc24ndCBtYXR0ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVQb3NpdGlvbigpIHtcbiAgICB2YXIgd2lkdGggPSB0aGlzLiRlbGVtZW50Lm91dGVyV2lkdGgoKTtcbiAgICB2YXIgb3V0ZXJXaWR0aCA9ICQod2luZG93KS53aWR0aCgpO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLiRlbGVtZW50Lm91dGVySGVpZ2h0KCk7XG4gICAgdmFyIG91dGVySGVpZ2h0ID0gJCh3aW5kb3cpLmhlaWdodCgpO1xuICAgIHZhciBsZWZ0LCB0b3AgPSBudWxsO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaE9mZnNldCA9PT0gJ2F1dG8nKSB7XG4gICAgICBsZWZ0ID0gcGFyc2VJbnQoKG91dGVyV2lkdGggLSB3aWR0aCkgLyAyLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlZnQgPSBwYXJzZUludCh0aGlzLm9wdGlvbnMuaE9mZnNldCwgMTApO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnZPZmZzZXQgPT09ICdhdXRvJykge1xuICAgICAgaWYgKGhlaWdodCA+IG91dGVySGVpZ2h0KSB7XG4gICAgICAgIHRvcCA9IHBhcnNlSW50KE1hdGgubWluKDEwMCwgb3V0ZXJIZWlnaHQgLyAxMCksIDEwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvcCA9IHBhcnNlSW50KChvdXRlckhlaWdodCAtIGhlaWdodCkgLyA0LCAxMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMudk9mZnNldCAhPT0gbnVsbCkge1xuICAgICAgdG9wID0gcGFyc2VJbnQodGhpcy5vcHRpb25zLnZPZmZzZXQsIDEwKTtcbiAgICB9XG5cbiAgICBpZiAodG9wICE9PSBudWxsKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmNzcyh7dG9wOiB0b3AgKyAncHgnfSk7XG4gICAgfVxuXG4gICAgLy8gb25seSB3b3JyeSBhYm91dCBsZWZ0IGlmIHdlIGRvbid0IGhhdmUgYW4gb3ZlcmxheSBvciB3ZSBoYXZlIGEgaG9yaXpvbnRhbCBvZmZzZXQsXG4gICAgLy8gb3RoZXJ3aXNlIHdlJ3JlIHBlcmZlY3RseSBpbiB0aGUgbWlkZGxlXG4gICAgaWYgKCF0aGlzLiRvdmVybGF5IHx8ICh0aGlzLm9wdGlvbnMuaE9mZnNldCAhPT0gJ2F1dG8nKSkge1xuICAgICAgdGhpcy4kZWxlbWVudC5jc3Moe2xlZnQ6IGxlZnQgKyAncHgnfSk7XG4gICAgICB0aGlzLiRlbGVtZW50LmNzcyh7bWFyZ2luOiAnMHB4J30pO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBtb2RhbC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJGVsZW1lbnQub24oe1xuICAgICAgJ29wZW4uemYudHJpZ2dlcic6IHRoaXMub3Blbi5iaW5kKHRoaXMpLFxuICAgICAgJ2Nsb3NlLnpmLnRyaWdnZXInOiAoZXZlbnQsICRlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmICgoZXZlbnQudGFyZ2V0ID09PSBfdGhpcy4kZWxlbWVudFswXSkgfHxcbiAgICAgICAgICAgICgkKGV2ZW50LnRhcmdldCkucGFyZW50cygnW2RhdGEtY2xvc2FibGVdJylbMF0gPT09ICRlbGVtZW50KSkgeyAvLyBvbmx5IGNsb3NlIHJldmVhbCB3aGVuIGl0J3MgZXhwbGljaXRseSBjYWxsZWRcbiAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zZS5hcHBseSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICd0b2dnbGUuemYudHJpZ2dlcic6IHRoaXMudG9nZ2xlLmJpbmQodGhpcyksXG4gICAgICAncmVzaXplbWUuemYudHJpZ2dlcic6IGZ1bmN0aW9uKCkge1xuICAgICAgICBfdGhpcy5fdXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrICYmIHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICB0aGlzLiRvdmVybGF5Lm9mZignLnpmLnJldmVhbCcpLm9uKCdjbGljay56Zi5kcm9wZG93biB0YXAuemYuZHJvcGRvd24nLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChlLnRhcmdldCA9PT0gX3RoaXMuJGVsZW1lbnRbMF0gfHxcbiAgICAgICAgICAkLmNvbnRhaW5zKF90aGlzLiRlbGVtZW50WzBdLCBlLnRhcmdldCkgfHxcbiAgICAgICAgICAgICEkLmNvbnRhaW5zKGRvY3VtZW50LCBlLnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLmNsb3NlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWVwTGluaykge1xuICAgICAgJCh3aW5kb3cpLm9uKGBoYXNoY2hhbmdlLnpmLnJldmVhbDoke3RoaXMuaWR9YCwgdGhpcy5faGFuZGxlU3RhdGUuYmluZCh0aGlzKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgbW9kYWwgbWV0aG9kcyBvbiBiYWNrL2ZvcndhcmQgYnV0dG9uIGNsaWNrcyBvciBhbnkgb3RoZXIgZXZlbnQgdGhhdCB0cmlnZ2VycyBoYXNoY2hhbmdlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZVN0YXRlKCkge1xuICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5oYXNoID09PSAoICcjJyArIHRoaXMuaWQpICYmICF0aGlzLmlzQWN0aXZlKXsgdGhpcy5vcGVuKCk7IH1cbiAgICBlbHNlIHsgdGhpcy5jbG9zZSgpOyB9XG4gIH1cblxuICAvKipcbiAgKiBEaXNhYmxlcyB0aGUgc2Nyb2xsIHdoZW4gUmV2ZWFsIGlzIHNob3duIHRvIHByZXZlbnQgdGhlIGJhY2tncm91bmQgZnJvbSBzaGlmdGluZ1xuICAqIEBwYXJhbSB7bnVtYmVyfSBzY3JvbGxUb3AgLSBTY3JvbGwgdG8gdmlzdWFsbHkgYXBwbHksIHdpbmRvdyBjdXJyZW50IHNjcm9sbCBieSBkZWZhdWx0XG4gICovXG4gIF9kaXNhYmxlU2Nyb2xsKHNjcm9sbFRvcCkge1xuICAgIHNjcm9sbFRvcCA9IHNjcm9sbFRvcCB8fCAkKHdpbmRvdykuc2Nyb2xsVG9wKCk7XG4gICAgaWYgKCQoZG9jdW1lbnQpLmhlaWdodCgpID4gJCh3aW5kb3cpLmhlaWdodCgpKSB7XG4gICAgICAkKFwiaHRtbFwiKVxuICAgICAgICAuY3NzKFwidG9wXCIsIC1zY3JvbGxUb3ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAqIFJlZW5hYmxlcyB0aGUgc2Nyb2xsIHdoZW4gUmV2ZWFsIGNsb3Nlc1xuICAqIEBwYXJhbSB7bnVtYmVyfSBzY3JvbGxUb3AgLSBTY3JvbGwgdG8gcmVzdG9yZSwgaHRtbCBcInRvcFwiIHByb3BlcnR5IGJ5IGRlZmF1bHQgKGFzIHNldCBieSBgX2Rpc2FibGVTY3JvbGxgKVxuICAqL1xuICBfZW5hYmxlU2Nyb2xsKHNjcm9sbFRvcCkge1xuICAgIHNjcm9sbFRvcCA9IHNjcm9sbFRvcCB8fCBwYXJzZUludCgkKFwiaHRtbFwiKS5jc3MoXCJ0b3BcIiksIDEwKTtcbiAgICBpZiAoJChkb2N1bWVudCkuaGVpZ2h0KCkgPiAkKHdpbmRvdykuaGVpZ2h0KCkpIHtcbiAgICAgICQoXCJodG1sXCIpXG4gICAgICAgIC5jc3MoXCJ0b3BcIiwgXCJcIik7XG4gICAgICAkKHdpbmRvdykuc2Nyb2xsVG9wKC1zY3JvbGxUb3ApO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBtb2RhbCBjb250cm9sbGVkIGJ5IGB0aGlzLiRhbmNob3JgLCBhbmQgY2xvc2VzIGFsbCBvdGhlcnMgYnkgZGVmYXVsdC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBSZXZlYWwjY2xvc2VtZVxuICAgKiBAZmlyZXMgUmV2ZWFsI29wZW5cbiAgICovXG4gIG9wZW4oKSB7XG4gICAgLy8gZWl0aGVyIHVwZGF0ZSBvciByZXBsYWNlIGJyb3dzZXIgaGlzdG9yeVxuICAgIGNvbnN0IGhhc2ggPSBgIyR7dGhpcy5pZH1gO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZGVlcExpbmsgJiYgd2luZG93LmxvY2F0aW9uLmhhc2ggIT09IGhhc2gpIHtcblxuICAgICAgaWYgKHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnVwZGF0ZUhpc3RvcnkpIHtcbiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sICcnLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sICcnLCBoYXNoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBoYXNoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbWVtYmVyIGFuY2hvciB0aGF0IG9wZW5lZCBpdCB0byBzZXQgZm9jdXMgYmFjayBsYXRlciwgaGF2ZSBnZW5lcmFsIGFuY2hvcnMgYXMgZmFsbGJhY2tcbiAgICB0aGlzLiRhY3RpdmVBbmNob3IgPSAkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmlzKHRoaXMuJGFuY2hvcikgPyAkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIDogdGhpcy4kYW5jaG9yO1xuXG4gICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cbiAgICAvLyBNYWtlIGVsZW1lbnRzIGludmlzaWJsZSwgYnV0IHJlbW92ZSBkaXNwbGF5OiBub25lIHNvIHdlIGNhbiBnZXQgc2l6ZSBhbmQgcG9zaXRpb25pbmdcbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAgIC5jc3MoeyAndmlzaWJpbGl0eSc6ICdoaWRkZW4nIH0pXG4gICAgICAgIC5zaG93KClcbiAgICAgICAgLnNjcm9sbFRvcCgwKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLm92ZXJsYXkpIHtcbiAgICAgIHRoaXMuJG92ZXJsYXkuY3NzKHsndmlzaWJpbGl0eSc6ICdoaWRkZW4nfSkuc2hvdygpO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCk7XG5cbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAuaGlkZSgpXG4gICAgICAuY3NzKHsgJ3Zpc2liaWxpdHknOiAnJyB9KTtcblxuICAgIGlmKHRoaXMuJG92ZXJsYXkpIHtcbiAgICAgIHRoaXMuJG92ZXJsYXkuY3NzKHsndmlzaWJpbGl0eSc6ICcnfSkuaGlkZSgpO1xuICAgICAgaWYodGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZmFzdCcpKSB7XG4gICAgICAgIHRoaXMuJG92ZXJsYXkuYWRkQ2xhc3MoJ2Zhc3QnKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4kZWxlbWVudC5oYXNDbGFzcygnc2xvdycpKSB7XG4gICAgICAgIHRoaXMuJG92ZXJsYXkuYWRkQ2xhc3MoJ3Nsb3cnKTtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIGlmICghdGhpcy5vcHRpb25zLm11bHRpcGxlT3BlbmVkKSB7XG4gICAgICAvKipcbiAgICAgICAqIEZpcmVzIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgbW9kYWwgb3BlbnMuXG4gICAgICAgKiBDbG9zZXMgYW55IG90aGVyIG1vZGFscyB0aGF0IGFyZSBjdXJyZW50bHkgb3BlblxuICAgICAgICogQGV2ZW50IFJldmVhbCNjbG9zZW1lXG4gICAgICAgKi9cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY2xvc2VtZS56Zi5yZXZlYWwnLCB0aGlzLmlkKTtcbiAgICB9XG5cbiAgICBpZiAoJCgnLnJldmVhbDp2aXNpYmxlJykubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9kaXNhYmxlU2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8vIE1vdGlvbiBVSSBtZXRob2Qgb2YgcmV2ZWFsXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hbmltYXRpb25Jbikge1xuICAgICAgZnVuY3Rpb24gYWZ0ZXJBbmltYXRpb24oKXtcbiAgICAgICAgX3RoaXMuJGVsZW1lbnRcbiAgICAgICAgICAuYXR0cih7XG4gICAgICAgICAgICAnYXJpYS1oaWRkZW4nOiBmYWxzZSxcbiAgICAgICAgICAgICd0YWJpbmRleCc6IC0xXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZm9jdXMoKTtcbiAgICAgICAgX3RoaXMuX2FkZEdsb2JhbENsYXNzZXMoKTtcbiAgICAgICAgS2V5Ym9hcmQudHJhcEZvY3VzKF90aGlzLiRlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMub3ZlcmxheSkge1xuICAgICAgICBNb3Rpb24uYW5pbWF0ZUluKHRoaXMuJG92ZXJsYXksICdmYWRlLWluJyk7XG4gICAgICB9XG4gICAgICBNb3Rpb24uYW5pbWF0ZUluKHRoaXMuJGVsZW1lbnQsIHRoaXMub3B0aW9ucy5hbmltYXRpb25JbiwgKCkgPT4ge1xuICAgICAgICBpZih0aGlzLiRlbGVtZW50KSB7IC8vIHByb3RlY3QgYWdhaW5zdCBvYmplY3QgaGF2aW5nIGJlZW4gcmVtb3ZlZFxuICAgICAgICAgIHRoaXMuZm9jdXNhYmxlRWxlbWVudHMgPSBLZXlib2FyZC5maW5kRm9jdXNhYmxlKHRoaXMuJGVsZW1lbnQpO1xuICAgICAgICAgIGFmdGVyQW5pbWF0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBqUXVlcnkgbWV0aG9kIG9mIHJldmVhbFxuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICAgIHRoaXMuJG92ZXJsYXkuc2hvdygwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJGVsZW1lbnQuc2hvdyh0aGlzLm9wdGlvbnMuc2hvd0RlbGF5KTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgYWNjZXNzaWJpbGl0eVxuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5hdHRyKHtcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogZmFsc2UsXG4gICAgICAgICd0YWJpbmRleCc6IC0xXG4gICAgICB9KVxuICAgICAgLmZvY3VzKCk7XG4gICAgS2V5Ym9hcmQudHJhcEZvY3VzKHRoaXMuJGVsZW1lbnQpO1xuXG4gICAgdGhpcy5fYWRkR2xvYmFsQ2xhc3NlcygpO1xuXG4gICAgdGhpcy5fYWRkR2xvYmFsTGlzdGVuZXJzKCk7XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBtb2RhbCBoYXMgc3VjY2Vzc2Z1bGx5IG9wZW5lZC5cbiAgICAgKiBAZXZlbnQgUmV2ZWFsI29wZW5cbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ29wZW4uemYucmV2ZWFsJyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBjbGFzc2VzIGFuZCBsaXN0ZW5lcnMgb24gZG9jdW1lbnQgcmVxdWlyZWQgYnkgb3BlbiBtb2RhbHMuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgYWRkZWQgYW5kIHVwZGF0ZWQ6XG4gICAqIC0gYC5pcy1yZXZlYWwtb3BlbmAgLSBQcmV2ZW50cyB0aGUgc2Nyb2xsIG9uIGRvY3VtZW50XG4gICAqIC0gYC56Zi1oYXMtc2Nyb2xsYCAgLSBEaXNwbGF5cyBhIGRpc2FibGVkIHNjcm9sbGJhciBvbiBkb2N1bWVudCBpZiByZXF1aXJlZCBsaWtlIGlmIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsIHdhcyBub3QgZGlzYWJsZWQuIFRoaXMgcHJldmVudCBhIFwic2hpZnRcIiBvZiB0aGUgcGFnZSBjb250ZW50IGR1ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNjcm9sbGJhciBkaXNhcHBlYXJpbmcgd2hlbiB0aGUgbW9kYWwgb3BlbnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWRkR2xvYmFsQ2xhc3NlcygpIHtcbiAgICBjb25zdCB1cGRhdGVTY3JvbGxiYXJDbGFzcyA9ICgpID0+IHtcbiAgICAgICQoJ2h0bWwnKS50b2dnbGVDbGFzcygnemYtaGFzLXNjcm9sbCcsICEhKCQoZG9jdW1lbnQpLmhlaWdodCgpID4gJCh3aW5kb3cpLmhlaWdodCgpKSk7XG4gICAgfTtcblxuICAgIHRoaXMuJGVsZW1lbnQub24oJ3Jlc2l6ZW1lLnpmLnRyaWdnZXIucmV2ZWFsU2Nyb2xsYmFyTGlzdGVuZXInLCAoKSA9PiB1cGRhdGVTY3JvbGxiYXJDbGFzcygpKTtcbiAgICB1cGRhdGVTY3JvbGxiYXJDbGFzcygpO1xuICAgICQoJ2h0bWwnKS5hZGRDbGFzcygnaXMtcmV2ZWFsLW9wZW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGNsYXNzZXMgYW5kIGxpc3RlbmVycyBvbiBkb2N1bWVudCB0aGF0IHdlcmUgcmVxdWlyZWQgYnkgb3BlbiBtb2RhbHMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVtb3ZlR2xvYmFsQ2xhc3NlcygpIHtcbiAgICB0aGlzLiRlbGVtZW50Lm9mZigncmVzaXplbWUuemYudHJpZ2dlci5yZXZlYWxTY3JvbGxiYXJMaXN0ZW5lcicpO1xuICAgICQoJ2h0bWwnKS5yZW1vdmVDbGFzcygnaXMtcmV2ZWFsLW9wZW4nKTtcbiAgICAkKCdodG1sJykucmVtb3ZlQ2xhc3MoJ3pmLWhhcy1zY3JvbGwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV4dHJhIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgYm9keSBhbmQgd2luZG93IGlmIG5lY2Vzc2FyeS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRHbG9iYWxMaXN0ZW5lcnMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICBpZighdGhpcy4kZWxlbWVudCkgeyByZXR1cm47IH0gLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBjbGVhbnVwLCBkb24ndCBmcmVhayBvdXRcbiAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzID0gS2V5Ym9hcmQuZmluZEZvY3VzYWJsZSh0aGlzLiRlbGVtZW50KTtcblxuICAgIGlmICghdGhpcy5vcHRpb25zLm92ZXJsYXkgJiYgdGhpcy5vcHRpb25zLmNsb3NlT25DbGljayAmJiAhdGhpcy5vcHRpb25zLmZ1bGxTY3JlZW4pIHtcbiAgICAgICQoJ2JvZHknKS5vbignY2xpY2suemYuZHJvcGRvd24gdGFwLnpmLmRyb3Bkb3duJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoZS50YXJnZXQgPT09IF90aGlzLiRlbGVtZW50WzBdIHx8XG4gICAgICAgICAgJC5jb250YWlucyhfdGhpcy4kZWxlbWVudFswXSwgZS50YXJnZXQpIHx8XG4gICAgICAgICAgICAhJC5jb250YWlucyhkb2N1bWVudCwgZS50YXJnZXQpKSB7IHJldHVybjsgfVxuICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uRXNjKSB7XG4gICAgICAkKHdpbmRvdykub24oJ2tleWRvd24uemYucmV2ZWFsJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBLZXlib2FyZC5oYW5kbGVLZXkoZSwgJ1JldmVhbCcsIHtcbiAgICAgICAgICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5jbG9zZU9uRXNjKSB7XG4gICAgICAgICAgICAgIF90aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG1vZGFsLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIFJldmVhbCNjbG9zZWRcbiAgICovXG4gIGNsb3NlKCkge1xuICAgIGlmICghdGhpcy5pc0FjdGl2ZSB8fCAhdGhpcy4kZWxlbWVudC5pcygnOnZpc2libGUnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLy8gTW90aW9uIFVJIG1ldGhvZCBvZiBoaWRpbmdcbiAgICBpZiAodGhpcy5vcHRpb25zLmFuaW1hdGlvbk91dCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICAgIE1vdGlvbi5hbmltYXRlT3V0KHRoaXMuJG92ZXJsYXksICdmYWRlLW91dCcpO1xuICAgICAgfVxuXG4gICAgICBNb3Rpb24uYW5pbWF0ZU91dCh0aGlzLiRlbGVtZW50LCB0aGlzLm9wdGlvbnMuYW5pbWF0aW9uT3V0LCBmaW5pc2hVcCk7XG4gICAgfVxuICAgIC8vIGpRdWVyeSBtZXRob2Qgb2YgaGlkaW5nXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmhpZGUodGhpcy5vcHRpb25zLmhpZGVEZWxheSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMub3ZlcmxheSkge1xuICAgICAgICB0aGlzLiRvdmVybGF5LmhpZGUoMCwgZmluaXNoVXApO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGZpbmlzaFVwKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29uZGl0aW9uYWxzIHRvIHJlbW92ZSBleHRyYSBldmVudCBsaXN0ZW5lcnMgYWRkZWQgb24gb3BlblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkVzYykge1xuICAgICAgJCh3aW5kb3cpLm9mZigna2V5ZG93bi56Zi5yZXZlYWwnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5vdmVybGF5ICYmIHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2spIHtcbiAgICAgICQoJ2JvZHknKS5vZmYoJ2NsaWNrLnpmLmRyb3Bkb3duIHRhcC56Zi5kcm9wZG93bicpO1xuICAgIH1cblxuICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdrZXlkb3duLnpmLnJldmVhbCcpO1xuXG4gICAgZnVuY3Rpb24gZmluaXNoVXAoKSB7XG5cbiAgICAgIC8vIEdldCB0aGUgY3VycmVudCB0b3AgYmVmb3JlIHRoZSBtb2RhbCBpcyBjbG9zZWQgYW5kIHJlc3RvcmUgdGhlIHNjcm9sbCBhZnRlci5cbiAgICAgIC8vIFRPRE86IHVzZSBjb21wb25lbnQgcHJvcGVydGllcyBpbnN0ZWFkIG9mIEhUTUwgcHJvcGVydGllc1xuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3VuZGF0aW9uL2ZvdW5kYXRpb24tc2l0ZXMvcHVsbC8xMDc4NlxuICAgICAgdmFyIHNjcm9sbFRvcCA9IHBhcnNlSW50KCQoXCJodG1sXCIpLmNzcyhcInRvcFwiKSwgMTApO1xuXG4gICAgICBpZiAoJCgnLnJldmVhbDp2aXNpYmxlJykubGVuZ3RoICA9PT0gMCkge1xuICAgICAgICBfdGhpcy5fcmVtb3ZlR2xvYmFsQ2xhc3NlcygpOyAvLyBhbHNvIHJlbW92ZSAuaXMtcmV2ZWFsLW9wZW4gZnJvbSB0aGUgaHRtbCBlbGVtZW50IHdoZW4gdGhlcmUgaXMgbm8gb3BlbmVkIHJldmVhbFxuICAgICAgfVxuXG4gICAgICBLZXlib2FyZC5yZWxlYXNlRm9jdXMoX3RoaXMuJGVsZW1lbnQpO1xuXG4gICAgICBfdGhpcy4kZWxlbWVudC5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuXG4gICAgICBpZiAoJCgnLnJldmVhbDp2aXNpYmxlJykubGVuZ3RoICA9PT0gMCkge1xuICAgICAgICBfdGhpcy5fZW5hYmxlU2Nyb2xsKHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgKiBGaXJlcyB3aGVuIHRoZSBtb2RhbCBpcyBkb25lIGNsb3NpbmcuXG4gICAgICAqIEBldmVudCBSZXZlYWwjY2xvc2VkXG4gICAgICAqL1xuICAgICAgX3RoaXMuJGVsZW1lbnQudHJpZ2dlcignY2xvc2VkLnpmLnJldmVhbCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogUmVzZXRzIHRoZSBtb2RhbCBjb250ZW50XG4gICAgKiBUaGlzIHByZXZlbnRzIGEgcnVubmluZyB2aWRlbyB0byBrZWVwIGdvaW5nIGluIHRoZSBiYWNrZ3JvdW5kXG4gICAgKi9cbiAgICBpZiAodGhpcy5vcHRpb25zLnJlc2V0T25DbG9zZSkge1xuICAgICAgdGhpcy4kZWxlbWVudC5odG1sKHRoaXMuJGVsZW1lbnQuaHRtbCgpKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgLy8gSWYgZGVlcExpbmsgYW5kIHdlIGRpZCBub3Qgc3dpdGNoZWQgdG8gYW4gb3RoZXIgbW9kYWwuLi5cbiAgICBpZiAoX3RoaXMub3B0aW9ucy5kZWVwTGluayAmJiB3aW5kb3cubG9jYXRpb24uaGFzaCA9PT0gYCMke3RoaXMuaWR9YCkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBoaXN0b3J5IGhhc2hcbiAgICAgIGlmICh3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUpIHtcbiAgICAgICAgY29uc3QgdXJsV2l0aG91dEhhc2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnVwZGF0ZUhpc3RvcnkpIHtcbiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sICcnLCB1cmxXaXRob3V0SGFzaCk7IC8vIHJlbW92ZSB0aGUgaGFzaFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSgnJywgZG9jdW1lbnQudGl0bGUsIHVybFdpdGhvdXRIYXNoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAnJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiRhY3RpdmVBbmNob3IuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBvcGVuL2Nsb3NlZCBzdGF0ZSBvZiBhIG1vZGFsLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFuIGluc3RhbmNlIG9mIGEgbW9kYWwuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX2Rlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmFwcGVuZFRvKCQodGhpcy5vcHRpb25zLmFwcGVuZFRvKSk7IC8vIG1vdmUgJGVsZW1lbnQgb3V0c2lkZSBvZiAkb3ZlcmxheSB0byBwcmV2ZW50IGVycm9yIHVucmVnaXN0ZXJQbHVnaW4oKVxuICAgICAgdGhpcy4kb3ZlcmxheS5oaWRlKCkub2ZmKCkucmVtb3ZlKCk7XG4gICAgfVxuICAgIHRoaXMuJGVsZW1lbnQuaGlkZSgpLm9mZigpO1xuICAgIHRoaXMuJGFuY2hvci5vZmYoJy56ZicpO1xuICAgICQod2luZG93KS5vZmYoYC56Zi5yZXZlYWw6JHt0aGlzLmlkfWApO1xuICAgIGlmICh0aGlzLm9uTG9hZExpc3RlbmVyKSAkKHdpbmRvdykub2ZmKHRoaXMub25Mb2FkTGlzdGVuZXIpO1xuXG4gICAgaWYgKCQoJy5yZXZlYWw6dmlzaWJsZScpLmxlbmd0aCAgPT09IDApIHtcbiAgICAgIHRoaXMuX3JlbW92ZUdsb2JhbENsYXNzZXMoKTsgLy8gYWxzbyByZW1vdmUgLmlzLXJldmVhbC1vcGVuIGZyb20gdGhlIGh0bWwgZWxlbWVudCB3aGVuIHRoZXJlIGlzIG5vIG9wZW5lZCByZXZlYWxcbiAgICB9XG4gIH07XG59XG5cblJldmVhbC5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIE1vdGlvbi1VSSBjbGFzcyB0byB1c2UgZm9yIGFuaW1hdGVkIGVsZW1lbnRzLiBJZiBub25lIHVzZWQsIGRlZmF1bHRzIHRvIHNpbXBsZSBzaG93L2hpZGUuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIGFuaW1hdGlvbkluOiAnJyxcbiAgLyoqXG4gICAqIE1vdGlvbi1VSSBjbGFzcyB0byB1c2UgZm9yIGFuaW1hdGVkIGVsZW1lbnRzLiBJZiBub25lIHVzZWQsIGRlZmF1bHRzIHRvIHNpbXBsZSBzaG93L2hpZGUuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIGFuaW1hdGlvbk91dDogJycsXG4gIC8qKlxuICAgKiBUaW1lLCBpbiBtcywgdG8gZGVsYXkgdGhlIG9wZW5pbmcgb2YgYSBtb2RhbCBhZnRlciBhIGNsaWNrIGlmIG5vIGFuaW1hdGlvbiB1c2VkLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHNob3dEZWxheTogMCxcbiAgLyoqXG4gICAqIFRpbWUsIGluIG1zLCB0byBkZWxheSB0aGUgY2xvc2luZyBvZiBhIG1vZGFsIGFmdGVyIGEgY2xpY2sgaWYgbm8gYW5pbWF0aW9uIHVzZWQuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgaGlkZURlbGF5OiAwLFxuICAvKipcbiAgICogQWxsb3dzIGEgY2xpY2sgb24gdGhlIGJvZHkvb3ZlcmxheSB0byBjbG9zZSB0aGUgbW9kYWwuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGNsb3NlT25DbGljazogdHJ1ZSxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgbW9kYWwgdG8gY2xvc2UgaWYgdGhlIHVzZXIgcHJlc3NlcyB0aGUgYEVTQ0FQRWAga2V5LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBjbG9zZU9uRXNjOiB0cnVlLFxuICAvKipcbiAgICogSWYgdHJ1ZSwgYWxsb3dzIG11bHRpcGxlIG1vZGFscyB0byBiZSBkaXNwbGF5ZWQgYXQgb25jZS5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpcGxlT3BlbmVkOiBmYWxzZSxcbiAgLyoqXG4gICAqIERpc3RhbmNlLCBpbiBwaXhlbHMsIHRoZSBtb2RhbCBzaG91bGQgcHVzaCBkb3duIGZyb20gdGhlIHRvcCBvZiB0aGUgc2NyZWVuLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ8c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBhdXRvXG4gICAqL1xuICB2T2Zmc2V0OiAnYXV0bycsXG4gIC8qKlxuICAgKiBEaXN0YW5jZSwgaW4gcGl4ZWxzLCB0aGUgbW9kYWwgc2hvdWxkIHB1c2ggaW4gZnJvbSB0aGUgc2lkZSBvZiB0aGUgc2NyZWVuLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ8c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBhdXRvXG4gICAqL1xuICBoT2Zmc2V0OiAnYXV0bycsXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIG1vZGFsIHRvIGJlIGZ1bGxzY3JlZW4sIGNvbXBsZXRlbHkgYmxvY2tpbmcgb3V0IHRoZSByZXN0IG9mIHRoZSB2aWV3LiBKUyBjaGVja3MgZm9yIHRoaXMgYXMgd2VsbC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxTY3JlZW46IGZhbHNlLFxuICAvKipcbiAgICogQWxsb3dzIHRoZSBtb2RhbCB0byBnZW5lcmF0ZSBhbiBvdmVybGF5IGRpdiwgd2hpY2ggd2lsbCBjb3ZlciB0aGUgdmlldyB3aGVuIG1vZGFsIG9wZW5zLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBvdmVybGF5OiB0cnVlLFxuICAvKipcbiAgICogQWxsb3dzIHRoZSBtb2RhbCB0byByZW1vdmUgYW5kIHJlaW5qZWN0IG1hcmt1cCBvbiBjbG9zZS4gU2hvdWxkIGJlIHRydWUgaWYgdXNpbmcgdmlkZW8gZWxlbWVudHMgdy9vIHVzaW5nIHByb3ZpZGVyJ3MgYXBpLCBvdGhlcndpc2UsIHZpZGVvcyB3aWxsIGNvbnRpbnVlIHRvIHBsYXkgaW4gdGhlIGJhY2tncm91bmQuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXNldE9uQ2xvc2U6IGZhbHNlLFxuICAvKipcbiAgICogTGluayB0aGUgbG9jYXRpb24gaGFzaCB0byB0aGUgbW9kYWwuXG4gICAqIFNldCB0aGUgbG9jYXRpb24gaGFzaCB3aGVuIHRoZSBtb2RhbCBpcyBvcGVuZWQvY2xvc2VkLCBhbmQgb3Blbi9jbG9zZSB0aGUgbW9kYWwgd2hlbiB0aGUgbG9jYXRpb24gY2hhbmdlcy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlZXBMaW5rOiBmYWxzZSxcbiAgLyoqXG4gICAqIElmIGBkZWVwTGlua2AgaXMgZW5hYmxlZCwgdXBkYXRlIHRoZSBicm93c2VyIGhpc3Rvcnkgd2l0aCB0aGUgb3BlbiBtb2RhbFxuICAgKiBAb3B0aW9uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB1cGRhdGVIaXN0b3J5OiBmYWxzZSxcbiAgICAvKipcbiAgICogQWxsb3dzIHRoZSBtb2RhbCB0byBhcHBlbmQgdG8gY3VzdG9tIGRpdi5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBcImJvZHlcIlxuICAgKi9cbiAgYXBwZW5kVG86IFwiYm9keVwiLFxuICAvKipcbiAgICogQWxsb3dzIGFkZGluZyBhZGRpdGlvbmFsIGNsYXNzIG5hbWVzIHRvIHRoZSByZXZlYWwgb3ZlcmxheS5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgYWRkaXRpb25hbE92ZXJsYXlDbGFzc2VzOiAnJ1xufTtcblxuLyoqXG4gKiBTbGlkZXIgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLnNsaWRlclxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tb3Rpb25cbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudHJpZ2dlcnNcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudG91Y2hcbiAqL1xuXG5jbGFzcyBTbGlkZXIgZXh0ZW5kcyBQbHVnaW4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhIHNsaWRlciBjb250cm9sLlxuICAgKiBAY2xhc3NcbiAgICogQG5hbWUgU2xpZGVyXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYSBzbGlkZXIgY29udHJvbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgX3NldHVwKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgU2xpZGVyLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG4gICAgdGhpcy5jbGFzc05hbWUgPSAnU2xpZGVyJzsgLy8gaWU5IGJhY2sgY29tcGF0XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIC8vIFRvdWNoIGFuZCBUcmlnZ2VycyBpbml0cyBhcmUgaWRlbXBvdGVudCwgd2UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIGluaXRpYWxpZWQuXG4gICAgVG91Y2guaW5pdCgkKTtcbiAgICBUcmlnZ2Vycy5pbml0KCQpO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgS2V5Ym9hcmQucmVnaXN0ZXIoJ1NsaWRlcicsIHtcbiAgICAgICdsdHInOiB7XG4gICAgICAgICdBUlJPV19SSUdIVCc6ICdpbmNyZWFzZScsXG4gICAgICAgICdBUlJPV19VUCc6ICdpbmNyZWFzZScsXG4gICAgICAgICdBUlJPV19ET1dOJzogJ2RlY3JlYXNlJyxcbiAgICAgICAgJ0FSUk9XX0xFRlQnOiAnZGVjcmVhc2UnLFxuICAgICAgICAnU0hJRlRfQVJST1dfUklHSFQnOiAnaW5jcmVhc2VGYXN0JyxcbiAgICAgICAgJ1NISUZUX0FSUk9XX1VQJzogJ2luY3JlYXNlRmFzdCcsXG4gICAgICAgICdTSElGVF9BUlJPV19ET1dOJzogJ2RlY3JlYXNlRmFzdCcsXG4gICAgICAgICdTSElGVF9BUlJPV19MRUZUJzogJ2RlY3JlYXNlRmFzdCcsXG4gICAgICAgICdIT01FJzogJ21pbicsXG4gICAgICAgICdFTkQnOiAnbWF4J1xuICAgICAgfSxcbiAgICAgICdydGwnOiB7XG4gICAgICAgICdBUlJPV19MRUZUJzogJ2luY3JlYXNlJyxcbiAgICAgICAgJ0FSUk9XX1JJR0hUJzogJ2RlY3JlYXNlJyxcbiAgICAgICAgJ1NISUZUX0FSUk9XX0xFRlQnOiAnaW5jcmVhc2VGYXN0JyxcbiAgICAgICAgJ1NISUZUX0FSUk9XX1JJR0hUJzogJ2RlY3JlYXNlRmFzdCdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWxpemVzIHRoZSBwbHVnaW4gYnkgcmVhZGluZy9zZXR0aW5nIGF0dHJpYnV0ZXMsIGNyZWF0aW5nIGNvbGxlY3Rpb25zIGFuZCBzZXR0aW5nIHRoZSBpbml0aWFsIHBvc2l0aW9uIG9mIHRoZSBoYW5kbGUocykuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdGhpcy5pbnB1dHMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2lucHV0Jyk7XG4gICAgdGhpcy5oYW5kbGVzID0gdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1zbGlkZXItaGFuZGxlXScpO1xuXG4gICAgdGhpcy4kaGFuZGxlID0gdGhpcy5oYW5kbGVzLmVxKDApO1xuICAgIHRoaXMuJGlucHV0ID0gdGhpcy5pbnB1dHMubGVuZ3RoID8gdGhpcy5pbnB1dHMuZXEoMCkgOiAkKGAjJHt0aGlzLiRoYW5kbGUuYXR0cignYXJpYS1jb250cm9scycpfWApO1xuICAgIHRoaXMuJGZpbGwgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLXNsaWRlci1maWxsXScpLmNzcyh0aGlzLm9wdGlvbnMudmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCcsIDApO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlZCB8fCB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKHRoaXMub3B0aW9ucy5kaXNhYmxlZENsYXNzKSkge1xuICAgICAgdGhpcy5vcHRpb25zLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmRpc2FibGVkQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaW5wdXRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5pbnB1dHMgPSAkKCkuYWRkKHRoaXMuJGlucHV0KTtcbiAgICAgIHRoaXMub3B0aW9ucy5iaW5kaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRJbml0QXR0cigwKTtcblxuICAgIGlmICh0aGlzLmhhbmRsZXNbMV0pIHtcbiAgICAgIHRoaXMub3B0aW9ucy5kb3VibGVTaWRlZCA9IHRydWU7XG4gICAgICB0aGlzLiRoYW5kbGUyID0gdGhpcy5oYW5kbGVzLmVxKDEpO1xuICAgICAgdGhpcy4kaW5wdXQyID0gdGhpcy5pbnB1dHMubGVuZ3RoID4gMSA/IHRoaXMuaW5wdXRzLmVxKDEpIDogJChgIyR7dGhpcy4kaGFuZGxlMi5hdHRyKCdhcmlhLWNvbnRyb2xzJyl9YCk7XG5cbiAgICAgIGlmICghdGhpcy5pbnB1dHNbMV0pIHtcbiAgICAgICAgdGhpcy5pbnB1dHMgPSB0aGlzLmlucHV0cy5hZGQodGhpcy4kaW5wdXQyKTtcbiAgICAgIH1cblxuICAgICAgLy8gdGhpcy4kaGFuZGxlLnRyaWdnZXJIYW5kbGVyKCdjbGljay56Zi5zbGlkZXInKTtcbiAgICAgIHRoaXMuX3NldEluaXRBdHRyKDEpO1xuICAgIH1cblxuICAgIC8vIFNldCBoYW5kbGUgcG9zaXRpb25zXG4gICAgdGhpcy5zZXRIYW5kbGVzKCk7XG5cbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIHNldEhhbmRsZXMoKSB7XG4gICAgaWYodGhpcy5oYW5kbGVzWzFdKSB7XG4gICAgICB0aGlzLl9zZXRIYW5kbGVQb3ModGhpcy4kaGFuZGxlLCB0aGlzLmlucHV0cy5lcSgwKS52YWwoKSwgKCkgPT4ge1xuICAgICAgICB0aGlzLl9zZXRIYW5kbGVQb3ModGhpcy4kaGFuZGxlMiwgdGhpcy5pbnB1dHMuZXEoMSkudmFsKCkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NldEhhbmRsZVBvcyh0aGlzLiRoYW5kbGUsIHRoaXMuaW5wdXRzLmVxKDApLnZhbCgpKTtcbiAgICB9XG4gIH1cblxuICBfcmVmbG93KCkge1xuICAgIHRoaXMuc2V0SGFuZGxlcygpO1xuICB9XG4gIC8qKlxuICAqIEBmdW5jdGlvblxuICAqIEBwcml2YXRlXG4gICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlIC0gZmxvYXRpbmcgcG9pbnQgKHRoZSB2YWx1ZSkgdG8gYmUgdHJhbnNmb3JtZWQgdXNpbmcgdG8gYSByZWxhdGl2ZSBwb3NpdGlvbiBvbiB0aGUgc2xpZGVyICh0aGUgaW52ZXJzZSBvZiBfdmFsdWUpXG4gICovXG4gIF9wY3RPZkJhcih2YWx1ZSkge1xuICAgIHZhciBwY3RPZkJhciA9IHBlcmNlbnQodmFsdWUgLSB0aGlzLm9wdGlvbnMuc3RhcnQsIHRoaXMub3B0aW9ucy5lbmQgLSB0aGlzLm9wdGlvbnMuc3RhcnQpO1xuXG4gICAgc3dpdGNoKHRoaXMub3B0aW9ucy5wb3NpdGlvblZhbHVlRnVuY3Rpb24pIHtcbiAgICBjYXNlIFwicG93XCI6XG4gICAgICBwY3RPZkJhciA9IHRoaXMuX2xvZ1RyYW5zZm9ybShwY3RPZkJhcik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibG9nXCI6XG4gICAgICBwY3RPZkJhciA9IHRoaXMuX3Bvd1RyYW5zZm9ybShwY3RPZkJhcik7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcGN0T2ZCYXIudG9GaXhlZCgyKVxuICB9XG5cbiAgLyoqXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKiBAcGFyYW0ge051bWJlcn0gcGN0T2ZCYXIgLSBmbG9hdGluZyBwb2ludCwgdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHRoZSBzbGlkZXIgKHR5cGljYWxseSBiZXR3ZWVuIDAtMSkgdG8gYmUgdHJhbnNmb3JtZWQgdG8gYSB2YWx1ZVxuICAqL1xuICBfdmFsdWUocGN0T2ZCYXIpIHtcbiAgICBzd2l0Y2godGhpcy5vcHRpb25zLnBvc2l0aW9uVmFsdWVGdW5jdGlvbikge1xuICAgIGNhc2UgXCJwb3dcIjpcbiAgICAgIHBjdE9mQmFyID0gdGhpcy5fcG93VHJhbnNmb3JtKHBjdE9mQmFyKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJsb2dcIjpcbiAgICAgIHBjdE9mQmFyID0gdGhpcy5fbG9nVHJhbnNmb3JtKHBjdE9mQmFyKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZTtcbiAgICBpZiAodGhpcy5vcHRpb25zLnZlcnRpY2FsKSB7XG4gICAgICAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvbiB3aGljaCBpcyB3b3JraW5nIHdpdGggbmVnYXRpdmUgdmFsdWVzIGZvciBzdGFydFxuICAgICAgLy8gaHR0cHM6Ly9tYXRoLnN0YWNrZXhjaGFuZ2UuY29tL2EvMTAxOTA4NFxuICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHRoaXMub3B0aW9ucy5lbmQpICsgcGN0T2ZCYXIgKiAodGhpcy5vcHRpb25zLnN0YXJ0IC0gdGhpcy5vcHRpb25zLmVuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gKHRoaXMub3B0aW9ucy5lbmQgLSB0aGlzLm9wdGlvbnMuc3RhcnQpICogcGN0T2ZCYXIgKyBwYXJzZUZsb2F0KHRoaXMub3B0aW9ucy5zdGFydCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvKipcbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSAtIGZsb2F0aW5nIHBvaW50ICh0eXBpY2FsbHkgYmV0d2VlbiAwLTEpIHRvIGJlIHRyYW5zZm9ybWVkIHVzaW5nIHRoZSBsb2cgZnVuY3Rpb25cbiAgKi9cbiAgX2xvZ1RyYW5zZm9ybSh2YWx1ZSkge1xuICAgIHJldHVybiBiYXNlTG9nKHRoaXMub3B0aW9ucy5ub25MaW5lYXJCYXNlLCAoKHZhbHVlKih0aGlzLm9wdGlvbnMubm9uTGluZWFyQmFzZS0xKSkrMSkpXG4gIH1cblxuICAvKipcbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSAtIGZsb2F0aW5nIHBvaW50ICh0eXBpY2FsbHkgYmV0d2VlbiAwLTEpIHRvIGJlIHRyYW5zZm9ybWVkIHVzaW5nIHRoZSBwb3dlciBmdW5jdGlvblxuICAqL1xuICBfcG93VHJhbnNmb3JtKHZhbHVlKSB7XG4gICAgcmV0dXJuIChNYXRoLnBvdyh0aGlzLm9wdGlvbnMubm9uTGluZWFyQmFzZSwgdmFsdWUpIC0gMSkgLyAodGhpcy5vcHRpb25zLm5vbkxpbmVhckJhc2UgLSAxKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBzZWxlY3RlZCBoYW5kbGUgYW5kIGZpbGwgYmFyLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRobmRsIC0gdGhlIHNlbGVjdGVkIGhhbmRsZSB0byBtb3ZlLlxuICAgKiBAcGFyYW0ge051bWJlcn0gbG9jYXRpb24gLSBmbG9hdGluZyBwb2ludCBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIHZhbHVlcyBvZiB0aGUgc2xpZGVyIGJhci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgLSBjYWxsYmFjayBmdW5jdGlvbiB0byBmaXJlIG9uIGNvbXBsZXRpb24uXG4gICAqIEBmaXJlcyBTbGlkZXIjbW92ZWRcbiAgICogQGZpcmVzIFNsaWRlciNjaGFuZ2VkXG4gICAqL1xuICBfc2V0SGFuZGxlUG9zKCRobmRsLCBsb2NhdGlvbiwgY2IpIHtcbiAgICAvLyBkb24ndCBtb3ZlIGlmIHRoZSBzbGlkZXIgaGFzIGJlZW4gZGlzYWJsZWQgc2luY2UgaXRzIGluaXRpYWxpemF0aW9uXG4gICAgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3ModGhpcy5vcHRpb25zLmRpc2FibGVkQ2xhc3MpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vbWlnaHQgbmVlZCB0byBhbHRlciB0aGF0IHNsaWdodGx5IGZvciBiYXJzIHRoYXQgd2lsbCBoYXZlIG9kZCBudW1iZXIgc2VsZWN0aW9ucy5cbiAgICBsb2NhdGlvbiA9IHBhcnNlRmxvYXQobG9jYXRpb24pOy8vb24gaW5wdXQgY2hhbmdlIGV2ZW50cywgY29udmVydCBzdHJpbmcgdG8gbnVtYmVyLi4uZ3J1bWJsZS5cblxuICAgIC8vIHByZXZlbnQgc2xpZGVyIGZyb20gcnVubmluZyBvdXQgb2YgYm91bmRzLCBpZiB2YWx1ZSBleGNlZWRzIHRoZSBsaW1pdHMgc2V0IHRocm91Z2ggb3B0aW9ucywgb3ZlcnJpZGUgdGhlIHZhbHVlIHRvIG1pbi9tYXhcbiAgICBpZiAobG9jYXRpb24gPCB0aGlzLm9wdGlvbnMuc3RhcnQpIHsgbG9jYXRpb24gPSB0aGlzLm9wdGlvbnMuc3RhcnQ7IH1cbiAgICBlbHNlIGlmIChsb2NhdGlvbiA+IHRoaXMub3B0aW9ucy5lbmQpIHsgbG9jYXRpb24gPSB0aGlzLm9wdGlvbnMuZW5kOyB9XG5cbiAgICB2YXIgaXNEYmwgPSB0aGlzLm9wdGlvbnMuZG91YmxlU2lkZWQ7XG5cbiAgICBpZiAoaXNEYmwpIHsgLy90aGlzIGJsb2NrIGlzIHRvIHByZXZlbnQgMiBoYW5kbGVzIGZyb20gY3Jvc3NpbmcgZWFjaG90aGVyLiBDb3VsZC9zaG91bGQgYmUgaW1wcm92ZWQuXG4gICAgICBpZiAodGhpcy5oYW5kbGVzLmluZGV4KCRobmRsKSA9PT0gMCkge1xuICAgICAgICB2YXIgaDJWYWwgPSBwYXJzZUZsb2F0KHRoaXMuJGhhbmRsZTIuYXR0cignYXJpYS12YWx1ZW5vdycpKTtcbiAgICAgICAgbG9jYXRpb24gPSBsb2NhdGlvbiA+PSBoMlZhbCA/IGgyVmFsIC0gdGhpcy5vcHRpb25zLnN0ZXAgOiBsb2NhdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBoMVZhbCA9IHBhcnNlRmxvYXQodGhpcy4kaGFuZGxlLmF0dHIoJ2FyaWEtdmFsdWVub3cnKSk7XG4gICAgICAgIGxvY2F0aW9uID0gbG9jYXRpb24gPD0gaDFWYWwgPyBoMVZhbCArIHRoaXMub3B0aW9ucy5zdGVwIDogbG9jYXRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgdmVydCA9IHRoaXMub3B0aW9ucy52ZXJ0aWNhbCxcbiAgICAgICAgaE9yVyA9IHZlcnQgPyAnaGVpZ2h0JyA6ICd3aWR0aCcsXG4gICAgICAgIGxPclQgPSB2ZXJ0ID8gJ3RvcCcgOiAnbGVmdCcsXG4gICAgICAgIGhhbmRsZURpbSA9ICRobmRsWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2hPclddLFxuICAgICAgICBlbGVtRGltID0gdGhpcy4kZWxlbWVudFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtoT3JXXSxcbiAgICAgICAgLy9wZXJjZW50YWdlIG9mIGJhciBtaW4vbWF4IHZhbHVlIGJhc2VkIG9uIGNsaWNrIG9yIGRyYWcgcG9pbnRcbiAgICAgICAgcGN0T2ZCYXIgPSB0aGlzLl9wY3RPZkJhcihsb2NhdGlvbiksXG4gICAgICAgIC8vbnVtYmVyIG9mIGFjdHVhbCBwaXhlbHMgdG8gc2hpZnQgdGhlIGhhbmRsZSwgYmFzZWQgb24gdGhlIHBlcmNlbnRhZ2Ugb2J0YWluZWQgYWJvdmVcbiAgICAgICAgcHhUb01vdmUgPSAoZWxlbURpbSAtIGhhbmRsZURpbSkgKiBwY3RPZkJhcixcbiAgICAgICAgLy9wZXJjZW50YWdlIG9mIGJhciB0byBzaGlmdCB0aGUgaGFuZGxlXG4gICAgICAgIG1vdmVtZW50ID0gKHBlcmNlbnQocHhUb01vdmUsIGVsZW1EaW0pICogMTAwKS50b0ZpeGVkKHRoaXMub3B0aW9ucy5kZWNpbWFsKTtcbiAgICAgICAgLy9maXhpbmcgdGhlIGRlY2ltYWwgdmFsdWUgZm9yIHRoZSBsb2NhdGlvbiBudW1iZXIsIGlzIHBhc3NlZCB0byBvdGhlciBtZXRob2RzIGFzIGEgZml4ZWQgZmxvYXRpbmctcG9pbnQgdmFsdWVcbiAgICAgICAgbG9jYXRpb24gPSBwYXJzZUZsb2F0KGxvY2F0aW9uLnRvRml4ZWQodGhpcy5vcHRpb25zLmRlY2ltYWwpKTtcbiAgICAgICAgLy8gZGVjbGFyZSBlbXB0eSBvYmplY3QgZm9yIGNzcyBhZGp1c3RtZW50cywgb25seSB1c2VkIHdpdGggMiBoYW5kbGVkLXNsaWRlcnNcbiAgICB2YXIgY3NzID0ge307XG5cbiAgICB0aGlzLl9zZXRWYWx1ZXMoJGhuZGwsIGxvY2F0aW9uKTtcblxuICAgIC8vIFRPRE8gdXBkYXRlIHRvIGNhbGN1bGF0ZSBiYXNlZCBvbiB2YWx1ZXMgc2V0IHRvIHJlc3BlY3RpdmUgaW5wdXRzPz9cbiAgICBpZiAoaXNEYmwpIHtcbiAgICAgIHZhciBpc0xlZnRIbmRsID0gdGhpcy5oYW5kbGVzLmluZGV4KCRobmRsKSA9PT0gMCxcbiAgICAgICAgICAvL2VtcHR5IHZhcmlhYmxlLCB3aWxsIGJlIHVzZWQgZm9yIG1pbi1oZWlnaHQvd2lkdGggZm9yIGZpbGwgYmFyXG4gICAgICAgICAgZGltLFxuICAgICAgICAgIC8vcGVyY2VudGFnZSB3L2ggb2YgdGhlIGhhbmRsZSBjb21wYXJlZCB0byB0aGUgc2xpZGVyIGJhclxuICAgICAgICAgIGhhbmRsZVBjdCA9ICBNYXRoLmZsb29yKHBlcmNlbnQoaGFuZGxlRGltLCBlbGVtRGltKSAqIDEwMCk7XG4gICAgICAvL2lmIGxlZnQgaGFuZGxlLCB0aGUgbWF0aCBpcyBzbGlnaHRseSBkaWZmZXJlbnQgdGhhbiBpZiBpdCdzIHRoZSByaWdodCBoYW5kbGUsIGFuZCB0aGUgbGVmdC90b3AgcHJvcGVydHkgbmVlZHMgdG8gYmUgY2hhbmdlZCBmb3IgdGhlIGZpbGwgYmFyXG4gICAgICBpZiAoaXNMZWZ0SG5kbCkge1xuICAgICAgICAvL2xlZnQgb3IgdG9wIHBlcmNlbnRhZ2UgdmFsdWUgdG8gYXBwbHkgdG8gdGhlIGZpbGwgYmFyLlxuICAgICAgICBjc3NbbE9yVF0gPSBgJHttb3ZlbWVudH0lYDtcbiAgICAgICAgLy9jYWxjdWxhdGUgdGhlIG5ldyBtaW4taGVpZ2h0L3dpZHRoIGZvciB0aGUgZmlsbCBiYXIuXG4gICAgICAgIGRpbSA9IHBhcnNlRmxvYXQodGhpcy4kaGFuZGxlMlswXS5zdHlsZVtsT3JUXSkgLSBtb3ZlbWVudCArIGhhbmRsZVBjdDtcbiAgICAgICAgLy90aGlzIGNhbGxiYWNrIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGVycm9ycyBhbmQgYWxsb3cgdGhlIHByb3BlciBwbGFjZW1lbnQgYW5kIGluaXRpYWxpemF0aW9uIG9mIGEgMi1oYW5kbGVkIHNsaWRlclxuICAgICAgICAvL3BsdXMsIGl0IG1lYW5zIHdlIGRvbid0IGNhcmUgaWYgJ2RpbScgaXNOYU4gb24gaW5pdCwgaXQgd29uJ3QgYmUgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgaWYgKGNiICYmIHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykgeyBjYigpOyB9Ly90aGlzIGlzIG9ubHkgbmVlZGVkIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgMiBoYW5kbGVkIHNsaWRlcnNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vanVzdCBjYWNoaW5nIHRoZSB2YWx1ZSBvZiB0aGUgbGVmdC9ib3R0b20gaGFuZGxlJ3MgbGVmdC90b3AgcHJvcGVydHlcbiAgICAgICAgdmFyIGhhbmRsZVBvcyA9IHBhcnNlRmxvYXQodGhpcy4kaGFuZGxlWzBdLnN0eWxlW2xPclRdKTtcbiAgICAgICAgLy9jYWxjdWxhdGUgdGhlIG5ldyBtaW4taGVpZ2h0L3dpZHRoIGZvciB0aGUgZmlsbCBiYXIuIFVzZSBpc05hTiB0byBwcmV2ZW50IGZhbHNlIHBvc2l0aXZlcyBmb3IgbnVtYmVycyA8PSAwXG4gICAgICAgIC8vYmFzZWQgb24gdGhlIHBlcmNlbnRhZ2Ugb2YgbW92ZW1lbnQgb2YgdGhlIGhhbmRsZSBiZWluZyBtYW5pcHVsYXRlZCwgbGVzcyB0aGUgb3Bwb3NpbmcgaGFuZGxlJ3MgbGVmdC90b3AgcG9zaXRpb24sIHBsdXMgdGhlIHBlcmNlbnRhZ2Ugdy9oIG9mIHRoZSBoYW5kbGUgaXRzZWxmXG4gICAgICAgIGRpbSA9IG1vdmVtZW50IC0gKGlzTmFOKGhhbmRsZVBvcykgPyAodGhpcy5vcHRpb25zLmluaXRpYWxTdGFydCAtIHRoaXMub3B0aW9ucy5zdGFydCkvKCh0aGlzLm9wdGlvbnMuZW5kLXRoaXMub3B0aW9ucy5zdGFydCkvMTAwKSA6IGhhbmRsZVBvcykgKyBoYW5kbGVQY3Q7XG4gICAgICB9XG4gICAgICAvLyBhc3NpZ24gdGhlIG1pbi1oZWlnaHQvd2lkdGggdG8gb3VyIGNzcyBvYmplY3RcbiAgICAgIGNzc1tgbWluLSR7aE9yV31gXSA9IGAke2RpbX0lYDtcbiAgICB9XG5cbiAgICAvL2JlY2F1c2Ugd2UgZG9uJ3Qga25vdyBleGFjdGx5IGhvdyB0aGUgaGFuZGxlIHdpbGwgYmUgbW92ZWQsIGNoZWNrIHRoZSBhbW91bnQgb2YgdGltZSBpdCBzaG91bGQgdGFrZSB0byBtb3ZlLlxuICAgIHZhciBtb3ZlVGltZSA9IHRoaXMuJGVsZW1lbnQuZGF0YSgnZHJhZ2dpbmcnKSA/IDEwMDAvNjAgOiB0aGlzLm9wdGlvbnMubW92ZVRpbWU7XG5cbiAgICBNb3ZlKG1vdmVUaW1lLCAkaG5kbCwgZnVuY3Rpb24oKSB7XG4gICAgICAvLyBhZGp1c3RpbmcgdGhlIGxlZnQvdG9wIHByb3BlcnR5IG9mIHRoZSBoYW5kbGUsIGJhc2VkIG9uIHRoZSBwZXJjZW50YWdlIGNhbGN1bGF0ZWQgYWJvdmVcbiAgICAgIC8vIGlmIG1vdmVtZW50IGlzTmFOLCB0aGF0IGlzIGJlY2F1c2UgdGhlIHNsaWRlciBpcyBoaWRkZW4gYW5kIHdlIGNhbm5vdCBkZXRlcm1pbmUgaGFuZGxlIHdpZHRoLFxuICAgICAgLy8gZmFsbCBiYWNrIHRvIG5leHQgYmVzdCBndWVzcy5cbiAgICAgIGlmIChpc05hTihtb3ZlbWVudCkpIHtcbiAgICAgICAgJGhuZGwuY3NzKGxPclQsIGAke3BjdE9mQmFyICogMTAwfSVgKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAkaG5kbC5jc3MobE9yVCwgYCR7bW92ZW1lbnR9JWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV90aGlzLm9wdGlvbnMuZG91YmxlU2lkZWQpIHtcbiAgICAgICAgLy9pZiBzaW5nbGUtaGFuZGxlZCwgYSBzaW1wbGUgbWV0aG9kIHRvIGV4cGFuZCB0aGUgZmlsbCBiYXJcbiAgICAgICAgX3RoaXMuJGZpbGwuY3NzKGhPclcsIGAke3BjdE9mQmFyICogMTAwfSVgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vb3RoZXJ3aXNlLCB1c2UgdGhlIGNzcyBvYmplY3Qgd2UgY3JlYXRlZCBhYm92ZVxuICAgICAgICBfdGhpcy4kZmlsbC5jc3MoY3NzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9uZSgnZmluaXNoZWQuemYuYW5pbWF0ZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgaGFuZGxlIGlzIGRvbmUgbW92aW5nLlxuICAgICAgICAgKiBAZXZlbnQgU2xpZGVyI21vdmVkXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdtb3ZlZC56Zi5zbGlkZXInLCBbJGhuZGxdKTtcbiAgICAgIH0pO1xuICAgICAgLyoqXG4gICAgICAgKiBGaXJlcyB3aGVuIHRoZSB2YWx1ZSBoYXMgbm90IGJlZW4gY2hhbmdlIGZvciBhIGdpdmVuIHRpbWUuXG4gICAgICAgKiBAZXZlbnQgU2xpZGVyI2NoYW5nZWRcbiAgICAgICAqL1xuICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnRpbWVvdXQpO1xuICAgICAgX3RoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgX3RoaXMuJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlZC56Zi5zbGlkZXInLCBbJGhuZGxdKTtcbiAgICAgIH0sIF90aGlzLm9wdGlvbnMuY2hhbmdlZERlbGF5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaW5pdGlhbCBhdHRyaWJ1dGUgZm9yIHRoZSBzbGlkZXIgZWxlbWVudC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZHggLSBpbmRleCBvZiB0aGUgY3VycmVudCBoYW5kbGUvaW5wdXQgdG8gdXNlLlxuICAgKi9cbiAgX3NldEluaXRBdHRyKGlkeCkge1xuICAgIHZhciBpbml0VmFsID0gKGlkeCA9PT0gMCA/IHRoaXMub3B0aW9ucy5pbml0aWFsU3RhcnQgOiB0aGlzLm9wdGlvbnMuaW5pdGlhbEVuZCk7XG4gICAgdmFyIGlkID0gdGhpcy5pbnB1dHMuZXEoaWR4KS5hdHRyKCdpZCcpIHx8IEdldFlvRGlnaXRzKDYsICdzbGlkZXInKTtcbiAgICB0aGlzLmlucHV0cy5lcShpZHgpLmF0dHIoe1xuICAgICAgJ2lkJzogaWQsXG4gICAgICAnbWF4JzogdGhpcy5vcHRpb25zLmVuZCxcbiAgICAgICdtaW4nOiB0aGlzLm9wdGlvbnMuc3RhcnQsXG4gICAgICAnc3RlcCc6IHRoaXMub3B0aW9ucy5zdGVwXG4gICAgfSk7XG4gICAgdGhpcy5pbnB1dHMuZXEoaWR4KS52YWwoaW5pdFZhbCk7XG4gICAgdGhpcy5oYW5kbGVzLmVxKGlkeCkuYXR0cih7XG4gICAgICAncm9sZSc6ICdzbGlkZXInLFxuICAgICAgJ2FyaWEtY29udHJvbHMnOiBpZCxcbiAgICAgICdhcmlhLXZhbHVlbWF4JzogdGhpcy5vcHRpb25zLmVuZCxcbiAgICAgICdhcmlhLXZhbHVlbWluJzogdGhpcy5vcHRpb25zLnN0YXJ0LFxuICAgICAgJ2FyaWEtdmFsdWVub3cnOiBpbml0VmFsLFxuICAgICAgJ2FyaWEtb3JpZW50YXRpb24nOiB0aGlzLm9wdGlvbnMudmVydGljYWwgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnLFxuICAgICAgJ3RhYmluZGV4JzogMFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGlucHV0IGFuZCBgYXJpYS12YWx1ZW5vd2AgdmFsdWVzIGZvciB0aGUgc2xpZGVyIGVsZW1lbnQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGhhbmRsZSAtIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaGFuZGxlLlxuICAgKiBAcGFyYW0ge051bWJlcn0gdmFsIC0gZmxvYXRpbmcgcG9pbnQgb2YgdGhlIG5ldyB2YWx1ZS5cbiAgICovXG4gIF9zZXRWYWx1ZXMoJGhhbmRsZSwgdmFsKSB7XG4gICAgdmFyIGlkeCA9IHRoaXMub3B0aW9ucy5kb3VibGVTaWRlZCA/IHRoaXMuaGFuZGxlcy5pbmRleCgkaGFuZGxlKSA6IDA7XG4gICAgdGhpcy5pbnB1dHMuZXEoaWR4KS52YWwodmFsKTtcbiAgICAkaGFuZGxlLmF0dHIoJ2FyaWEtdmFsdWVub3cnLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZXZlbnRzIG9uIHRoZSBzbGlkZXIgZWxlbWVudC5cbiAgICogQ2FsY3VsYXRlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IGhhbmRsZS5cbiAgICogSWYgdGhlcmUgYXJlIHR3byBoYW5kbGVzIGFuZCB0aGUgYmFyIHdhcyBjbGlja2VkLCBpdCBkZXRlcm1pbmVzIHdoaWNoIGhhbmRsZSB0byBtb3ZlLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGUgLSB0aGUgYGV2ZW50YCBvYmplY3QgcGFzc2VkIGZyb20gdGhlIGxpc3RlbmVyLlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGhhbmRsZSAtIHRoZSBjdXJyZW50IGhhbmRsZSB0byBjYWxjdWxhdGUgZm9yLCBpZiBzZWxlY3RlZC5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbCAtIGZsb2F0aW5nIHBvaW50IG51bWJlciBmb3IgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgc2xpZGVyLlxuICAgKiBUT0RPIGNsZWFuIHRoaXMgdXAsIHRoZXJlJ3MgYSBsb3Qgb2YgcmVwZWF0ZWQgY29kZSBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBfc2V0SGFuZGxlUG9zIGZuLlxuICAgKi9cbiAgX2hhbmRsZUV2ZW50KGUsICRoYW5kbGUsIHZhbCkge1xuICAgIHZhciB2YWx1ZTtcbiAgICBpZiAoIXZhbCkgey8vY2xpY2sgb3IgZHJhZyBldmVudHNcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgICAgdmVydGljYWwgPSB0aGlzLm9wdGlvbnMudmVydGljYWwsXG4gICAgICAgICAgcGFyYW0gPSB2ZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJyxcbiAgICAgICAgICBkaXJlY3Rpb24gPSB2ZXJ0aWNhbCA/ICd0b3AnIDogJ2xlZnQnLFxuICAgICAgICAgIGV2ZW50T2Zmc2V0ID0gdmVydGljYWwgPyBlLnBhZ2VZIDogZS5wYWdlWCxcbiAgICAgICAgICBiYXJEaW0gPSB0aGlzLiRlbGVtZW50WzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3BhcmFtXSxcbiAgICAgICAgICB3aW5kb3dTY3JvbGwgPSB2ZXJ0aWNhbCA/ICQod2luZG93KS5zY3JvbGxUb3AoKSA6ICQod2luZG93KS5zY3JvbGxMZWZ0KCk7XG5cbiAgICAgIHZhciBlbGVtT2Zmc2V0ID0gdGhpcy4kZWxlbWVudC5vZmZzZXQoKVtkaXJlY3Rpb25dO1xuXG4gICAgICAvLyB0b3VjaCBldmVudHMgZW11bGF0ZWQgYnkgdGhlIHRvdWNoIHV0aWwgZ2l2ZSBwb3NpdGlvbiByZWxhdGl2ZSB0byBzY3JlZW4sIGFkZCB3aW5kb3cuc2Nyb2xsIHRvIGV2ZW50IGNvb3JkaW5hdGVzLi4uXG4gICAgICAvLyBiZXN0IHdheSB0byBndWVzcyB0aGlzIGlzIHNpbXVsYXRlZCBpcyBpZiBjbGllbnRZID09IHBhZ2VZXG4gICAgICBpZiAoZS5jbGllbnRZID09PSBlLnBhZ2VZKSB7IGV2ZW50T2Zmc2V0ID0gZXZlbnRPZmZzZXQgKyB3aW5kb3dTY3JvbGw7IH1cbiAgICAgIHZhciBldmVudEZyb21CYXIgPSBldmVudE9mZnNldCAtIGVsZW1PZmZzZXQ7XG4gICAgICB2YXIgYmFyWFk7XG4gICAgICBpZiAoZXZlbnRGcm9tQmFyIDwgMCkge1xuICAgICAgICBiYXJYWSA9IDA7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50RnJvbUJhciA+IGJhckRpbSkge1xuICAgICAgICBiYXJYWSA9IGJhckRpbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhclhZID0gZXZlbnRGcm9tQmFyO1xuICAgICAgfVxuICAgICAgdmFyIG9mZnNldFBjdCA9IHBlcmNlbnQoYmFyWFksIGJhckRpbSk7XG5cbiAgICAgIHZhbHVlID0gdGhpcy5fdmFsdWUob2Zmc2V0UGN0KTtcblxuICAgICAgLy8gdHVybiBldmVyeXRoaW5nIGFyb3VuZCBmb3IgUlRMLCB5YXkgbWF0aCFcbiAgICAgIGlmIChydGwoKSAmJiAhdGhpcy5vcHRpb25zLnZlcnRpY2FsKSB7dmFsdWUgPSB0aGlzLm9wdGlvbnMuZW5kIC0gdmFsdWU7fVxuXG4gICAgICB2YWx1ZSA9IF90aGlzLl9hZGp1c3RWYWx1ZShudWxsLCB2YWx1ZSk7XG5cbiAgICAgIGlmICghJGhhbmRsZSkgey8vZmlndXJlIG91dCB3aGljaCBoYW5kbGUgaXQgaXMsIHBhc3MgaXQgdG8gdGhlIG5leHQgZnVuY3Rpb24uXG4gICAgICAgIHZhciBmaXJzdEhuZGxQb3MgPSBhYnNQb3NpdGlvbih0aGlzLiRoYW5kbGUsIGRpcmVjdGlvbiwgYmFyWFksIHBhcmFtKSxcbiAgICAgICAgICAgIHNlY25kSG5kbFBvcyA9IGFic1Bvc2l0aW9uKHRoaXMuJGhhbmRsZTIsIGRpcmVjdGlvbiwgYmFyWFksIHBhcmFtKTtcbiAgICAgICAgICAgICRoYW5kbGUgPSBmaXJzdEhuZGxQb3MgPD0gc2VjbmRIbmRsUG9zID8gdGhpcy4kaGFuZGxlIDogdGhpcy4kaGFuZGxlMjtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7Ly9jaGFuZ2UgZXZlbnQgb24gaW5wdXRcbiAgICAgIHZhbHVlID0gdGhpcy5fYWRqdXN0VmFsdWUobnVsbCwgdmFsKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRIYW5kbGVQb3MoJGhhbmRsZSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdGVzIHZhbHVlIGZvciBoYW5kbGUgaW4gcmVnYXJkIHRvIHN0ZXAgdmFsdWUuIHJldHVybnMgYWRqdXN0ZWQgdmFsdWVcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkaGFuZGxlIC0gdGhlIHNlbGVjdGVkIGhhbmRsZS5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlIC0gdmFsdWUgdG8gYWRqdXN0LiB1c2VkIGlmICRoYW5kbGUgaXMgZmFsc3lcbiAgICovXG4gIF9hZGp1c3RWYWx1ZSgkaGFuZGxlLCB2YWx1ZSkge1xuICAgIHZhciB2YWwsXG4gICAgICBzdGVwID0gdGhpcy5vcHRpb25zLnN0ZXAsXG4gICAgICBkaXYgPSBwYXJzZUZsb2F0KHN0ZXAvMiksXG4gICAgICBsZWZ0LCBwcmV2aW91c1ZhbCwgbmV4dFZhbDtcbiAgICBpZiAoISEkaGFuZGxlKSB7XG4gICAgICB2YWwgPSBwYXJzZUZsb2F0KCRoYW5kbGUuYXR0cignYXJpYS12YWx1ZW5vdycpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YWwgPSB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHZhbCA+PSAwKSB7XG4gICAgICBsZWZ0ID0gdmFsICUgc3RlcDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGVmdCA9IHN0ZXAgKyAodmFsICUgc3RlcCk7XG4gICAgfVxuICAgIHByZXZpb3VzVmFsID0gdmFsIC0gbGVmdDtcbiAgICBuZXh0VmFsID0gcHJldmlvdXNWYWwgKyBzdGVwO1xuICAgIGlmIChsZWZ0ID09PSAwKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICB2YWwgPSB2YWwgPj0gcHJldmlvdXNWYWwgKyBkaXYgPyBuZXh0VmFsIDogcHJldmlvdXNWYWw7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGxpc3RlbmVycyB0byB0aGUgc2xpZGVyIGVsZW1lbnRzLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdGhpcy5fZXZlbnRzRm9ySGFuZGxlKHRoaXMuJGhhbmRsZSk7XG4gICAgaWYodGhpcy5oYW5kbGVzWzFdKSB7XG4gICAgICB0aGlzLl9ldmVudHNGb3JIYW5kbGUodGhpcy4kaGFuZGxlMik7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogQWRkcyBldmVudCBsaXN0ZW5lcnMgYSBwYXJ0aWN1bGFyIGhhbmRsZVxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRoYW5kbGUgLSB0aGUgY3VycmVudCBoYW5kbGUgdG8gYXBwbHkgbGlzdGVuZXJzIHRvLlxuICAgKi9cbiAgX2V2ZW50c0ZvckhhbmRsZSgkaGFuZGxlKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgY3VySGFuZGxlO1xuXG4gICAgICBjb25zdCBoYW5kbGVDaGFuZ2VFdmVudCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gX3RoaXMuaW5wdXRzLmluZGV4KCQodGhpcykpO1xuICAgICAgICBfdGhpcy5faGFuZGxlRXZlbnQoZSwgX3RoaXMuaGFuZGxlcy5lcShpZHgpLCAkKHRoaXMpLnZhbCgpKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIElFIG9ubHkgdHJpZ2dlcnMgdGhlIGNoYW5nZSBldmVudCB3aGVuIHRoZSBpbnB1dCBsb3NlcyBmb2N1cyB3aGljaCBzdHJpY3RseSBmb2xsb3dzIHRoZSBIVE1MIHNwZWNpZmljYXRpb25cbiAgICAgIC8vIGxpc3RlbiBmb3IgdGhlIGVudGVyIGtleSBhbmQgdHJpZ2dlciBhIGNoYW5nZVxuICAgICAgLy8gQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbnB1dC5odG1sI2NvbW1vbi1pbnB1dC1lbGVtZW50LWV2ZW50c1xuICAgICAgdGhpcy5pbnB1dHMub2ZmKCdrZXl1cC56Zi5zbGlkZXInKS5vbigna2V5dXAuemYuc2xpZGVyJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYoZS5rZXlDb2RlID09PSAxMykgaGFuZGxlQ2hhbmdlRXZlbnQuY2FsbCh0aGlzLCBlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmlucHV0cy5vZmYoJ2NoYW5nZS56Zi5zbGlkZXInKS5vbignY2hhbmdlLnpmLnNsaWRlcicsIGhhbmRsZUNoYW5nZUV2ZW50KTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jbGlja1NlbGVjdCkge1xuICAgICAgICB0aGlzLiRlbGVtZW50Lm9mZignY2xpY2suemYuc2xpZGVyJykub24oJ2NsaWNrLnpmLnNsaWRlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuJGVsZW1lbnQuZGF0YSgnZHJhZ2dpbmcnKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgICAgICAgIGlmICghJChlLnRhcmdldCkuaXMoJ1tkYXRhLXNsaWRlci1oYW5kbGVdJykpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmRvdWJsZVNpZGVkKSB7XG4gICAgICAgICAgICAgIF90aGlzLl9oYW5kbGVFdmVudChlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIF90aGlzLl9oYW5kbGVFdmVudChlLCBfdGhpcy4kaGFuZGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kcmFnZ2FibGUpIHtcbiAgICAgIHRoaXMuaGFuZGxlcy5hZGRUb3VjaCgpO1xuXG4gICAgICB2YXIgJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgICAkaGFuZGxlXG4gICAgICAgIC5vZmYoJ21vdXNlZG93bi56Zi5zbGlkZXInKVxuICAgICAgICAub24oJ21vdXNlZG93bi56Zi5zbGlkZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgJGhhbmRsZS5hZGRDbGFzcygnaXMtZHJhZ2dpbmcnKTtcbiAgICAgICAgICBfdGhpcy4kZmlsbC5hZGRDbGFzcygnaXMtZHJhZ2dpbmcnKTsvL1xuICAgICAgICAgIF90aGlzLiRlbGVtZW50LmRhdGEoJ2RyYWdnaW5nJywgdHJ1ZSk7XG5cbiAgICAgICAgICBjdXJIYW5kbGUgPSAkKGUuY3VycmVudFRhcmdldCk7XG5cbiAgICAgICAgICAkYm9keS5vbignbW91c2Vtb3ZlLnpmLnNsaWRlcicsIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgX3RoaXMuX2hhbmRsZUV2ZW50KGV2LCBjdXJIYW5kbGUpO1xuXG4gICAgICAgICAgfSkub24oJ21vdXNldXAuemYuc2xpZGVyJywgZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgICAgIF90aGlzLl9oYW5kbGVFdmVudChldiwgY3VySGFuZGxlKTtcblxuICAgICAgICAgICAgJGhhbmRsZS5yZW1vdmVDbGFzcygnaXMtZHJhZ2dpbmcnKTtcbiAgICAgICAgICAgIF90aGlzLiRmaWxsLnJlbW92ZUNsYXNzKCdpcy1kcmFnZ2luZycpO1xuICAgICAgICAgICAgX3RoaXMuJGVsZW1lbnQuZGF0YSgnZHJhZ2dpbmcnLCBmYWxzZSk7XG5cbiAgICAgICAgICAgICRib2R5Lm9mZignbW91c2Vtb3ZlLnpmLnNsaWRlciBtb3VzZXVwLnpmLnNsaWRlcicpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC8vIHByZXZlbnQgZXZlbnRzIHRyaWdnZXJlZCBieSB0b3VjaFxuICAgICAgLm9uKCdzZWxlY3RzdGFydC56Zi5zbGlkZXIgdG91Y2htb3ZlLnpmLnNsaWRlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgJGhhbmRsZS5vZmYoJ2tleWRvd24uemYuc2xpZGVyJykub24oJ2tleWRvd24uemYuc2xpZGVyJywgZnVuY3Rpb24oZSkge1xuICAgICAgdmFyIF8kaGFuZGxlID0gJCh0aGlzKSxcbiAgICAgICAgICBpZHggPSBfdGhpcy5vcHRpb25zLmRvdWJsZVNpZGVkID8gX3RoaXMuaGFuZGxlcy5pbmRleChfJGhhbmRsZSkgOiAwLFxuICAgICAgICAgIG9sZFZhbHVlID0gcGFyc2VGbG9hdChfdGhpcy5pbnB1dHMuZXEoaWR4KS52YWwoKSksXG4gICAgICAgICAgbmV3VmFsdWU7XG5cbiAgICAgIC8vIGhhbmRsZSBrZXlib2FyZCBldmVudCB3aXRoIGtleWJvYXJkIHV0aWxcbiAgICAgIEtleWJvYXJkLmhhbmRsZUtleShlLCAnU2xpZGVyJywge1xuICAgICAgICBkZWNyZWFzZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBvbGRWYWx1ZSAtIF90aGlzLm9wdGlvbnMuc3RlcDtcbiAgICAgICAgfSxcbiAgICAgICAgaW5jcmVhc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gb2xkVmFsdWUgKyBfdGhpcy5vcHRpb25zLnN0ZXA7XG4gICAgICAgIH0sXG4gICAgICAgIGRlY3JlYXNlRmFzdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBvbGRWYWx1ZSAtIF90aGlzLm9wdGlvbnMuc3RlcCAqIDEwO1xuICAgICAgICB9LFxuICAgICAgICBpbmNyZWFzZUZhc3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gb2xkVmFsdWUgKyBfdGhpcy5vcHRpb25zLnN0ZXAgKiAxMDtcbiAgICAgICAgfSxcbiAgICAgICAgbWluOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IF90aGlzLm9wdGlvbnMuc3RhcnQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1heDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBfdGhpcy5vcHRpb25zLmVuZDtcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlZDogZnVuY3Rpb24oKSB7IC8vIG9ubHkgc2V0IGhhbmRsZSBwb3Mgd2hlbiBldmVudCB3YXMgaGFuZGxlZCBzcGVjaWFsbHlcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgX3RoaXMuX3NldEhhbmRsZVBvcyhfJGhhbmRsZSwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8qaWYgKG5ld1ZhbHVlKSB7IC8vIGlmIHByZXNzZWQga2V5IGhhcyBzcGVjaWFsIGZ1bmN0aW9uLCB1cGRhdGUgdmFsdWVcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBfdGhpcy5fc2V0SGFuZGxlUG9zKF8kaGFuZGxlLCBuZXdWYWx1ZSk7XG4gICAgICB9Ki9cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgc2xpZGVyIHBsdWdpbi5cbiAgICovXG4gIF9kZXN0cm95KCkge1xuICAgIHRoaXMuaGFuZGxlcy5vZmYoJy56Zi5zbGlkZXInKTtcbiAgICB0aGlzLmlucHV0cy5vZmYoJy56Zi5zbGlkZXInKTtcbiAgICB0aGlzLiRlbGVtZW50Lm9mZignLnpmLnNsaWRlcicpO1xuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gIH1cbn1cblxuU2xpZGVyLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogTWluaW11bSB2YWx1ZSBmb3IgdGhlIHNsaWRlciBzY2FsZS5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBzdGFydDogMCxcbiAgLyoqXG4gICAqIE1heGltdW0gdmFsdWUgZm9yIHRoZSBzbGlkZXIgc2NhbGUuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMTAwXG4gICAqL1xuICBlbmQ6IDEwMCxcbiAgLyoqXG4gICAqIE1pbmltdW0gdmFsdWUgY2hhbmdlIHBlciBjaGFuZ2UgZXZlbnQuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgc3RlcDogMSxcbiAgLyoqXG4gICAqIFZhbHVlIGF0IHdoaWNoIHRoZSBoYW5kbGUvaW5wdXQgKihsZWZ0IGhhbmRsZS9maXJzdCBpbnB1dCkqIHNob3VsZCBiZSBzZXQgdG8gb24gaW5pdGlhbGl6YXRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgaW5pdGlhbFN0YXJ0OiAwLFxuICAvKipcbiAgICogVmFsdWUgYXQgd2hpY2ggdGhlIHJpZ2h0IGhhbmRsZS9zZWNvbmQgaW5wdXQgc2hvdWxkIGJlIHNldCB0byBvbiBpbml0aWFsaXphdGlvbi5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAxMDBcbiAgICovXG4gIGluaXRpYWxFbmQ6IDEwMCxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgaW5wdXQgdG8gYmUgbG9jYXRlZCBvdXRzaWRlIHRoZSBjb250YWluZXIgYW5kIHZpc2libGUuIFNldCB0byBieSB0aGUgSlNcbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGJpbmRpbmc6IGZhbHNlLFxuICAvKipcbiAgICogQWxsb3dzIHRoZSB1c2VyIHRvIGNsaWNrL3RhcCBvbiB0aGUgc2xpZGVyIGJhciB0byBzZWxlY3QgYSB2YWx1ZS5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgY2xpY2tTZWxlY3Q6IHRydWUsXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSBhbmQgdXNlIHRoZSBgdmVydGljYWxgIGNsYXNzIHRvIGNoYW5nZSBhbGlnbm1lbnQgdG8gdmVydGljYWwuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB2ZXJ0aWNhbDogZmFsc2UsXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIHVzZXIgdG8gZHJhZyB0aGUgc2xpZGVyIGhhbmRsZShzKSB0byBzZWxlY3QgYSB2YWx1ZS5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZHJhZ2dhYmxlOiB0cnVlLFxuICAvKipcbiAgICogRGlzYWJsZXMgdGhlIHNsaWRlciBhbmQgcHJldmVudHMgZXZlbnQgbGlzdGVuZXJzIGZyb20gYmVpbmcgYXBwbGllZC4gRG91YmxlIGNoZWNrZWQgYnkgSlMgd2l0aCBgZGlzYWJsZWRDbGFzc2AuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogZmFsc2UsXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIHVzZSBvZiB0d28gaGFuZGxlcy4gRG91YmxlIGNoZWNrZWQgYnkgdGhlIEpTLiBDaGFuZ2VzIHNvbWUgbG9naWMgaGFuZGxpbmcuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkb3VibGVTaWRlZDogZmFsc2UsXG4gIC8qKlxuICAgKiBQb3RlbnRpYWwgZnV0dXJlIGZlYXR1cmUuXG4gICAqL1xuICAvLyBzdGVwczogMTAwLFxuICAvKipcbiAgICogTnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRoZSBwbHVnaW4gc2hvdWxkIGdvIHRvIGZvciBmbG9hdGluZyBwb2ludCBwcmVjaXNpb24uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMlxuICAgKi9cbiAgZGVjaW1hbDogMixcbiAgLyoqXG4gICAqIFRpbWUgZGVsYXkgZm9yIGRyYWdnZWQgZWxlbWVudHMuXG4gICAqL1xuICAvLyBkcmFnRGVsYXk6IDAsXG4gIC8qKlxuICAgKiBUaW1lLCBpbiBtcywgdG8gYW5pbWF0ZSB0aGUgbW92ZW1lbnQgb2YgYSBzbGlkZXIgaGFuZGxlIGlmIHVzZXIgY2xpY2tzL3RhcHMgb24gdGhlIGJhci4gTmVlZHMgdG8gYmUgbWFudWFsbHkgc2V0IGlmIHVwZGF0aW5nIHRoZSB0cmFuc2l0aW9uIHRpbWUgaW4gdGhlIFNhc3Mgc2V0dGluZ3MuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMjAwXG4gICAqL1xuICBtb3ZlVGltZTogMjAwLC8vdXBkYXRlIHRoaXMgaWYgY2hhbmdpbmcgdGhlIHRyYW5zaXRpb24gdGltZSBpbiB0aGUgc2Fzc1xuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byBkaXNhYmxlZCBzbGlkZXJzLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdkaXNhYmxlZCdcbiAgICovXG4gIGRpc2FibGVkQ2xhc3M6ICdkaXNhYmxlZCcsXG4gIC8qKlxuICAgKiBXaWxsIGludmVydCB0aGUgZGVmYXVsdCBsYXlvdXQgZm9yIGEgdmVydGljYWw8c3BhbiBkYXRhLXRvb2x0aXAgdGl0bGU9XCJ3aG8gd291bGQgZG8gdGhpcz8/P1wiPiA8L3NwYW4+c2xpZGVyLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW52ZXJ0VmVydGljYWw6IGZhbHNlLFxuICAvKipcbiAgICogTWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgYGNoYW5nZWQuemYtc2xpZGVyYCBldmVudCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgdmFsdWUgY2hhbmdlLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDUwMFxuICAgKi9cbiAgY2hhbmdlZERlbGF5OiA1MDAsXG4gIC8qKlxuICAqIEJhc2V2YWx1ZSBmb3Igbm9uLWxpbmVhciBzbGlkZXJzXG4gICogQG9wdGlvblxuICAqIEB0eXBlIHtudW1iZXJ9XG4gICogQGRlZmF1bHQgNVxuICAqL1xuICBub25MaW5lYXJCYXNlOiA1LFxuICAvKipcbiAgKiBCYXNldmFsdWUgZm9yIG5vbi1saW5lYXIgc2xpZGVycywgcG9zc2libGUgdmFsdWVzIGFyZTogYCdsaW5lYXInYCwgYCdwb3cnYCAmIGAnbG9nJ2AuIFBvdyBhbmQgTG9nIHVzZSB0aGUgbm9uTGluZWFyQmFzZSBzZXR0aW5nLlxuICAqIEBvcHRpb25cbiAgKiBAdHlwZSB7c3RyaW5nfVxuICAqIEBkZWZhdWx0ICdsaW5lYXInXG4gICovXG4gIHBvc2l0aW9uVmFsdWVGdW5jdGlvbjogJ2xpbmVhcicsXG59O1xuXG5mdW5jdGlvbiBwZXJjZW50KGZyYWMsIG51bSkge1xuICByZXR1cm4gKGZyYWMgLyBudW0pO1xufVxuZnVuY3Rpb24gYWJzUG9zaXRpb24oJGhhbmRsZSwgZGlyLCBjbGlja1BvcywgcGFyYW0pIHtcbiAgcmV0dXJuIE1hdGguYWJzKCgkaGFuZGxlLnBvc2l0aW9uKClbZGlyXSArICgkaGFuZGxlW3BhcmFtXSgpIC8gMikpIC0gY2xpY2tQb3MpO1xufVxuZnVuY3Rpb24gYmFzZUxvZyhiYXNlLCB2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5sb2codmFsdWUpL01hdGgubG9nKGJhc2UpXG59XG5cbi8qKlxuICogU3RpY2t5IG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5zdGlja3lcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudHJpZ2dlcnNcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubWVkaWFRdWVyeVxuICovXG5cbmNsYXNzIFN0aWNreSBleHRlbmRzIFBsdWdpbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGEgc3RpY2t5IHRoaW5nLlxuICAgKiBAY2xhc3NcbiAgICogQG5hbWUgU3RpY2t5XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIHN0aWNreS5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIG9iamVjdCBwYXNzZWQgd2hlbiBjcmVhdGluZyB0aGUgZWxlbWVudCBwcm9ncmFtbWF0aWNhbGx5LlxuICAgKi9cbiAgX3NldHVwKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgU3RpY2t5LmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG4gICAgdGhpcy5jbGFzc05hbWUgPSAnU3RpY2t5JzsgLy8gaWU5IGJhY2sgY29tcGF0XG5cbiAgICAvLyBUcmlnZ2VycyBpbml0IGlzIGlkZW1wb3RlbnQsIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgaW5pdGlhbGl6ZWRcbiAgICBUcmlnZ2Vycy5pbml0KCQpO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBzdGlja3kgZWxlbWVudCBieSBhZGRpbmcgY2xhc3NlcywgZ2V0dGluZy9zZXR0aW5nIGRpbWVuc2lvbnMsIGJyZWFrcG9pbnRzIGFuZCBhdHRyaWJ1dGVzXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgTWVkaWFRdWVyeS5faW5pdCgpO1xuXG4gICAgdmFyICRwYXJlbnQgPSB0aGlzLiRlbGVtZW50LnBhcmVudCgnW2RhdGEtc3RpY2t5LWNvbnRhaW5lcl0nKSxcbiAgICAgICAgaWQgPSB0aGlzLiRlbGVtZW50WzBdLmlkIHx8IEdldFlvRGlnaXRzKDYsICdzdGlja3knKSxcbiAgICAgICAgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYoJHBhcmVudC5sZW5ndGgpe1xuICAgICAgdGhpcy4kY29udGFpbmVyID0gJHBhcmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53YXNXcmFwcGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuJGVsZW1lbnQud3JhcCh0aGlzLm9wdGlvbnMuY29udGFpbmVyKTtcbiAgICAgIHRoaXMuJGNvbnRhaW5lciA9IHRoaXMuJGVsZW1lbnQucGFyZW50KCk7XG4gICAgfVxuICAgIHRoaXMuJGNvbnRhaW5lci5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuY29udGFpbmVyQ2xhc3MpO1xuXG4gICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuc3RpY2t5Q2xhc3MpLmF0dHIoeyAnZGF0YS1yZXNpemUnOiBpZCwgJ2RhdGEtbXV0YXRlJzogaWQgfSk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5hbmNob3IgIT09ICcnKSB7XG4gICAgICAgICQoJyMnICsgX3RoaXMub3B0aW9ucy5hbmNob3IpLmF0dHIoeyAnZGF0YS1tdXRhdGUnOiBpZCB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNjcm9sbENvdW50ID0gdGhpcy5vcHRpb25zLmNoZWNrRXZlcnk7XG4gICAgdGhpcy5pc1N0dWNrID0gZmFsc2U7XG4gICAgdGhpcy5vbkxvYWRMaXN0ZW5lciA9IG9uTG9hZCgkKHdpbmRvdyksIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vV2UgY2FsY3VsYXRlIHRoZSBjb250YWluZXIgaGVpZ2h0IHRvIGhhdmUgY29ycmVjdCB2YWx1ZXMgZm9yIGFuY2hvciBwb2ludHMgb2Zmc2V0IGNhbGN1bGF0aW9uLlxuICAgICAgX3RoaXMuY29udGFpbmVySGVpZ2h0ID0gX3RoaXMuJGVsZW1lbnQuY3NzKFwiZGlzcGxheVwiKSA9PT0gXCJub25lXCIgPyAwIDogX3RoaXMuJGVsZW1lbnRbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgX3RoaXMuJGNvbnRhaW5lci5jc3MoJ2hlaWdodCcsIF90aGlzLmNvbnRhaW5lckhlaWdodCk7XG4gICAgICBfdGhpcy5lbGVtSGVpZ2h0ID0gX3RoaXMuY29udGFpbmVySGVpZ2h0O1xuICAgICAgaWYgKF90aGlzLm9wdGlvbnMuYW5jaG9yICE9PSAnJykge1xuICAgICAgICBfdGhpcy4kYW5jaG9yID0gJCgnIycgKyBfdGhpcy5vcHRpb25zLmFuY2hvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5fcGFyc2VQb2ludHMoKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuX3NldFNpemVzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNjcm9sbCA9IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICAgICAgX3RoaXMuX2NhbGMoZmFsc2UsIHNjcm9sbCk7XG4gICAgICAgIC8vVW5zdGljayB0aGUgZWxlbWVudCB3aWxsIGVuc3VyZSB0aGF0IHByb3BlciBjbGFzc2VzIGFyZSBzZXQuXG4gICAgICAgIGlmICghX3RoaXMuaXNTdHVjaykge1xuICAgICAgICAgIF90aGlzLl9yZW1vdmVTdGlja3koKHNjcm9sbCA+PSBfdGhpcy50b3BQb2ludCkgPyBmYWxzZSA6IHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9ldmVudHMoaWQuc3BsaXQoJy0nKS5yZXZlcnNlKCkuam9pbignLScpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB1c2luZyBtdWx0aXBsZSBlbGVtZW50cyBhcyBhbmNob3JzLCBjYWxjdWxhdGVzIHRoZSB0b3AgYW5kIGJvdHRvbSBwaXhlbCB2YWx1ZXMgdGhlIHN0aWNreSB0aGluZyBzaG91bGQgc3RpY2sgYW5kIHVuc3RpY2sgb24uXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BhcnNlUG9pbnRzKCkge1xuICAgIHZhciB0b3AgPSB0aGlzLm9wdGlvbnMudG9wQW5jaG9yID09PSBcIlwiID8gMSA6IHRoaXMub3B0aW9ucy50b3BBbmNob3IsXG4gICAgICAgIGJ0bSA9IHRoaXMub3B0aW9ucy5idG1BbmNob3IgPT09IFwiXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IDogdGhpcy5vcHRpb25zLmJ0bUFuY2hvcixcbiAgICAgICAgcHRzID0gW3RvcCwgYnRtXSxcbiAgICAgICAgYnJlYWtzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHB0cy5sZW5ndGg7IGkgPCBsZW4gJiYgcHRzW2ldOyBpKyspIHtcbiAgICAgIHZhciBwdDtcbiAgICAgIGlmICh0eXBlb2YgcHRzW2ldID09PSAnbnVtYmVyJykge1xuICAgICAgICBwdCA9IHB0c1tpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwbGFjZSA9IHB0c1tpXS5zcGxpdCgnOicpLFxuICAgICAgICAgICAgYW5jaG9yID0gJChgIyR7cGxhY2VbMF19YCk7XG5cbiAgICAgICAgcHQgPSBhbmNob3Iub2Zmc2V0KCkudG9wO1xuICAgICAgICBpZiAocGxhY2VbMV0gJiYgcGxhY2VbMV0udG9Mb3dlckNhc2UoKSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBwdCArPSBhbmNob3JbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVha3NbaV0gPSBwdDtcbiAgICB9XG5cblxuICAgIHRoaXMucG9pbnRzID0gYnJlYWtzO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgc2Nyb2xsaW5nIGVsZW1lbnQuXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBpZCAtIHBzZXVkby1yYW5kb20gaWQgZm9yIHVuaXF1ZSBzY3JvbGwgZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBfZXZlbnRzKGlkKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgc2Nyb2xsTGlzdGVuZXIgPSB0aGlzLnNjcm9sbExpc3RlbmVyID0gYHNjcm9sbC56Zi4ke2lkfWA7XG4gICAgaWYgKHRoaXMuaXNPbikgeyByZXR1cm47IH1cbiAgICBpZiAodGhpcy5jYW5TdGljaykge1xuICAgICAgdGhpcy5pc09uID0gdHJ1ZTtcbiAgICAgICQod2luZG93KS5vZmYoc2Nyb2xsTGlzdGVuZXIpXG4gICAgICAgICAgICAgICAub24oc2Nyb2xsTGlzdGVuZXIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuc2Nyb2xsQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICBfdGhpcy5zY3JvbGxDb3VudCA9IF90aGlzLm9wdGlvbnMuY2hlY2tFdmVyeTtcbiAgICAgICAgICAgICAgICAgICBfdGhpcy5fc2V0U2l6ZXMoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY2FsYyhmYWxzZSwgd2luZG93LnBhZ2VZT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICBfdGhpcy5zY3JvbGxDb3VudC0tO1xuICAgICAgICAgICAgICAgICAgIF90aGlzLl9jYWxjKGZhbHNlLCB3aW5kb3cucGFnZVlPZmZzZXQpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdyZXNpemVtZS56Zi50cmlnZ2VyJylcbiAgICAgICAgICAgICAgICAgLm9uKCdyZXNpemVtZS56Zi50cmlnZ2VyJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl9ldmVudHNIYW5kbGVyKGlkKTtcbiAgICB9KTtcblxuICAgIHRoaXMuJGVsZW1lbnQub24oJ211dGF0ZW1lLnpmLnRyaWdnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLl9ldmVudHNIYW5kbGVyKGlkKTtcbiAgICB9KTtcblxuICAgIGlmKHRoaXMuJGFuY2hvcikge1xuICAgICAgdGhpcy4kYW5jaG9yLm9uKCdtdXRhdGVtZS56Zi50cmlnZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLl9ldmVudHNIYW5kbGVyKGlkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVyIGZvciBldmVudHMuXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBpZCAtIHBzZXVkby1yYW5kb20gaWQgZm9yIHVuaXF1ZSBzY3JvbGwgZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBfZXZlbnRzSGFuZGxlcihpZCkge1xuICAgICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgIHNjcm9sbExpc3RlbmVyID0gdGhpcy5zY3JvbGxMaXN0ZW5lciA9IGBzY3JvbGwuemYuJHtpZH1gO1xuXG4gICAgICAgX3RoaXMuX3NldFNpemVzKGZ1bmN0aW9uKCkge1xuICAgICAgIF90aGlzLl9jYWxjKGZhbHNlKTtcbiAgICAgICBpZiAoX3RoaXMuY2FuU3RpY2spIHtcbiAgICAgICAgIGlmICghX3RoaXMuaXNPbikge1xuICAgICAgICAgICBfdGhpcy5fZXZlbnRzKGlkKTtcbiAgICAgICAgIH1cbiAgICAgICB9IGVsc2UgaWYgKF90aGlzLmlzT24pIHtcbiAgICAgICAgIF90aGlzLl9wYXVzZUxpc3RlbmVycyhzY3JvbGxMaXN0ZW5lcik7XG4gICAgICAgfVxuICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGV2ZW50IGhhbmRsZXJzIGZvciBzY3JvbGwgYW5kIGNoYW5nZSBldmVudHMgb24gYW5jaG9yLlxuICAgKiBAZmlyZXMgU3RpY2t5I3BhdXNlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzY3JvbGxMaXN0ZW5lciAtIHVuaXF1ZSwgbmFtZXNwYWNlZCBzY3JvbGwgbGlzdGVuZXIgYXR0YWNoZWQgdG8gYHdpbmRvd2BcbiAgICovXG4gIF9wYXVzZUxpc3RlbmVycyhzY3JvbGxMaXN0ZW5lcikge1xuICAgIHRoaXMuaXNPbiA9IGZhbHNlO1xuICAgICQod2luZG93KS5vZmYoc2Nyb2xsTGlzdGVuZXIpO1xuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgcGx1Z2luIGlzIHBhdXNlZCBkdWUgdG8gcmVzaXplIGV2ZW50IHNocmlua2luZyB0aGUgdmlldy5cbiAgICAgKiBAZXZlbnQgU3RpY2t5I3BhdXNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdwYXVzZS56Zi5zdGlja3knKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgb24gZXZlcnkgYHNjcm9sbGAgZXZlbnQgYW5kIG9uIGBfaW5pdGBcbiAgICogZmlyZXMgZnVuY3Rpb25zIGJhc2VkIG9uIGJvb2xlYW5zIGFuZCBjYWNoZWQgdmFsdWVzXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gY2hlY2tTaXplcyAtIHRydWUgaWYgcGx1Z2luIHNob3VsZCByZWNhbGN1bGF0ZSBzaXplcyBhbmQgYnJlYWtwb2ludHMuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBzY3JvbGwgLSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBwYXNzZWQgZnJvbSBzY3JvbGwgZXZlbnQgY2IgZnVuY3Rpb24uIElmIG5vdCBwYXNzZWQsIGRlZmF1bHRzIHRvIGB3aW5kb3cucGFnZVlPZmZzZXRgLlxuICAgKi9cbiAgX2NhbGMoY2hlY2tTaXplcywgc2Nyb2xsKSB7XG4gICAgaWYgKGNoZWNrU2l6ZXMpIHsgdGhpcy5fc2V0U2l6ZXMoKTsgfVxuXG4gICAgaWYgKCF0aGlzLmNhblN0aWNrKSB7XG4gICAgICBpZiAodGhpcy5pc1N0dWNrKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZVN0aWNreSh0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXNjcm9sbCkgeyBzY3JvbGwgPSB3aW5kb3cucGFnZVlPZmZzZXQ7IH1cblxuICAgIGlmIChzY3JvbGwgPj0gdGhpcy50b3BQb2ludCkge1xuICAgICAgaWYgKHNjcm9sbCA8PSB0aGlzLmJvdHRvbVBvaW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0dWNrKSB7XG4gICAgICAgICAgdGhpcy5fc2V0U3RpY2t5KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3R1Y2spIHtcbiAgICAgICAgICB0aGlzLl9yZW1vdmVTdGlja3koZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmlzU3R1Y2spIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlU3RpY2t5KHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYXVzZXMgdGhlICRlbGVtZW50IHRvIGJlY29tZSBzdHVjay5cbiAgICogQWRkcyBgcG9zaXRpb246IGZpeGVkO2AsIGFuZCBoZWxwZXIgY2xhc3Nlcy5cbiAgICogQGZpcmVzIFN0aWNreSNzdHVja3RvXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFN0aWNreSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICBzdGlja1RvID0gdGhpcy5vcHRpb25zLnN0aWNrVG8sXG4gICAgICAgIG1yZ24gPSBzdGlja1RvID09PSAndG9wJyA/ICdtYXJnaW5Ub3AnIDogJ21hcmdpbkJvdHRvbScsXG4gICAgICAgIG5vdFN0dWNrVG8gPSBzdGlja1RvID09PSAndG9wJyA/ICdib3R0b20nIDogJ3RvcCcsXG4gICAgICAgIGNzcyA9IHt9O1xuXG4gICAgY3NzW21yZ25dID0gYCR7dGhpcy5vcHRpb25zW21yZ25dfWVtYDtcbiAgICBjc3Nbc3RpY2tUb10gPSAwO1xuICAgIGNzc1tub3RTdHVja1RvXSA9ICdhdXRvJztcbiAgICB0aGlzLmlzU3R1Y2sgPSB0cnVlO1xuICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoYGlzLWFuY2hvcmVkIGlzLWF0LSR7bm90U3R1Y2tUb31gKVxuICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoYGlzLXN0dWNrIGlzLWF0LSR7c3RpY2tUb31gKVxuICAgICAgICAgICAgICAgICAuY3NzKGNzcylcbiAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAqIEZpcmVzIHdoZW4gdGhlICRlbGVtZW50IGhhcyBiZWNvbWUgYHBvc2l0aW9uOiBmaXhlZDtgXG4gICAgICAgICAgICAgICAgICAqIE5hbWVzcGFjZWQgdG8gYHRvcGAgb3IgYGJvdHRvbWAsIGUuZy4gYHN0aWNreS56Zi5zdHVja3RvOnRvcGBcbiAgICAgICAgICAgICAgICAgICogQGV2ZW50IFN0aWNreSNzdHVja3RvXG4gICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAudHJpZ2dlcihgc3RpY2t5LnpmLnN0dWNrdG86JHtzdGlja1RvfWApO1xuICAgIHRoaXMuJGVsZW1lbnQub24oXCJ0cmFuc2l0aW9uZW5kIHdlYmtpdFRyYW5zaXRpb25FbmQgb1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmQgTVNUcmFuc2l0aW9uRW5kXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgX3RoaXMuX3NldFNpemVzKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2F1c2VzIHRoZSAkZWxlbWVudCB0byBiZWNvbWUgdW5zdHVjay5cbiAgICogUmVtb3ZlcyBgcG9zaXRpb246IGZpeGVkO2AsIGFuZCBoZWxwZXIgY2xhc3Nlcy5cbiAgICogQWRkcyBvdGhlciBoZWxwZXIgY2xhc3Nlcy5cbiAgICogQHBhcmFtIHtCb29sZWFufSBpc1RvcCAtIHRlbGxzIHRoZSBmdW5jdGlvbiBpZiB0aGUgJGVsZW1lbnQgc2hvdWxkIGFuY2hvciB0byB0aGUgdG9wIG9yIGJvdHRvbSBvZiBpdHMgJGFuY2hvciBlbGVtZW50LlxuICAgKiBAZmlyZXMgU3RpY2t5I3Vuc3R1Y2tmcm9tXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVtb3ZlU3RpY2t5KGlzVG9wKSB7XG4gICAgdmFyIHN0aWNrVG8gPSB0aGlzLm9wdGlvbnMuc3RpY2tUbyxcbiAgICAgICAgc3RpY2tUb1RvcCA9IHN0aWNrVG8gPT09ICd0b3AnLFxuICAgICAgICBjc3MgPSB7fSxcbiAgICAgICAgYW5jaG9yUHQgPSAodGhpcy5wb2ludHMgPyB0aGlzLnBvaW50c1sxXSAtIHRoaXMucG9pbnRzWzBdIDogdGhpcy5hbmNob3JIZWlnaHQpIC0gdGhpcy5lbGVtSGVpZ2h0LFxuICAgICAgICBtcmduID0gc3RpY2tUb1RvcCA/ICdtYXJnaW5Ub3AnIDogJ21hcmdpbkJvdHRvbScsXG4gICAgICAgIHRvcE9yQm90dG9tID0gaXNUb3AgPyAndG9wJyA6ICdib3R0b20nO1xuXG4gICAgY3NzW21yZ25dID0gMDtcblxuICAgIGNzcy5ib3R0b20gPSAnYXV0byc7XG4gICAgaWYoaXNUb3ApIHtcbiAgICAgIGNzcy50b3AgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjc3MudG9wID0gYW5jaG9yUHQ7XG4gICAgfVxuXG4gICAgdGhpcy5pc1N0dWNrID0gZmFsc2U7XG4gICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhgaXMtc3R1Y2sgaXMtYXQtJHtzdGlja1RvfWApXG4gICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhgaXMtYW5jaG9yZWQgaXMtYXQtJHt0b3BPckJvdHRvbX1gKVxuICAgICAgICAgICAgICAgICAuY3NzKGNzcylcbiAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAqIEZpcmVzIHdoZW4gdGhlICRlbGVtZW50IGhhcyBiZWNvbWUgYW5jaG9yZWQuXG4gICAgICAgICAgICAgICAgICAqIE5hbWVzcGFjZWQgdG8gYHRvcGAgb3IgYGJvdHRvbWAsIGUuZy4gYHN0aWNreS56Zi51bnN0dWNrZnJvbTpib3R0b21gXG4gICAgICAgICAgICAgICAgICAqIEBldmVudCBTdGlja3kjdW5zdHVja2Zyb21cbiAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgIC50cmlnZ2VyKGBzdGlja3kuemYudW5zdHVja2Zyb206JHt0b3BPckJvdHRvbX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSAkZWxlbWVudCBhbmQgJGNvbnRhaW5lciBzaXplcyBmb3IgcGx1Z2luLlxuICAgKiBDYWxscyBgX3NldEJyZWFrUG9pbnRzYC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgLSBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byBmaXJlIG9uIGNvbXBsZXRpb24gb2YgYF9zZXRCcmVha1BvaW50c2AuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0U2l6ZXMoY2IpIHtcbiAgICB0aGlzLmNhblN0aWNrID0gTWVkaWFRdWVyeS5pcyh0aGlzLm9wdGlvbnMuc3RpY2t5T24pO1xuICAgIGlmICghdGhpcy5jYW5TdGljaykge1xuICAgICAgaWYgKGNiICYmIHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykgeyBjYigpOyB9XG4gICAgfVxuXG4gICAgdmFyIG5ld0VsZW1XaWR0aCA9IHRoaXMuJGNvbnRhaW5lclswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCxcbiAgICAgIGNvbXAgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRjb250YWluZXJbMF0pLFxuICAgICAgcGRuZ2wgPSBwYXJzZUludChjb21wWydwYWRkaW5nLWxlZnQnXSwgMTApLFxuICAgICAgcGRuZ3IgPSBwYXJzZUludChjb21wWydwYWRkaW5nLXJpZ2h0J10sIDEwKTtcblxuICAgIGlmICh0aGlzLiRhbmNob3IgJiYgdGhpcy4kYW5jaG9yLmxlbmd0aCkge1xuICAgICAgdGhpcy5hbmNob3JIZWlnaHQgPSB0aGlzLiRhbmNob3JbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wYXJzZVBvaW50cygpO1xuICAgIH1cblxuICAgIHRoaXMuJGVsZW1lbnQuY3NzKHtcbiAgICAgICdtYXgtd2lkdGgnOiBgJHtuZXdFbGVtV2lkdGggLSBwZG5nbCAtIHBkbmdyfXB4YFxuICAgIH0pO1xuXG4gICAgLy8gUmVjYWxjdWxhdGUgdGhlIGhlaWdodCBvbmx5IGlmIGl0IGlzIFwiZHluYW1pY1wiXG4gICAgaWYgKHRoaXMub3B0aW9ucy5keW5hbWljSGVpZ2h0IHx8ICF0aGlzLmNvbnRhaW5lckhlaWdodCkge1xuICAgICAgLy8gR2V0IHRoZSBzdGlja2VkIGVsZW1lbnQgaGVpZ2h0IGFuZCBhcHBseSBpdCB0byB0aGUgY29udGFpbmVyIHRvIFwiaG9sZCB0aGUgcGxhY2VcIlxuICAgICAgdmFyIG5ld0NvbnRhaW5lckhlaWdodCA9IHRoaXMuJGVsZW1lbnRbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IHx8IHRoaXMuY29udGFpbmVySGVpZ2h0O1xuICAgICAgbmV3Q29udGFpbmVySGVpZ2h0ID0gdGhpcy4kZWxlbWVudC5jc3MoXCJkaXNwbGF5XCIpID09PSBcIm5vbmVcIiA/IDAgOiBuZXdDb250YWluZXJIZWlnaHQ7XG4gICAgICB0aGlzLiRjb250YWluZXIuY3NzKCdoZWlnaHQnLCBuZXdDb250YWluZXJIZWlnaHQpO1xuICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSBuZXdDb250YWluZXJIZWlnaHQ7XG4gICAgfVxuICAgIHRoaXMuZWxlbUhlaWdodCA9IHRoaXMuY29udGFpbmVySGVpZ2h0O1xuXG4gICAgaWYgKCF0aGlzLmlzU3R1Y2spIHtcbiAgICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdpcy1hdC1ib3R0b20nKSkge1xuICAgICAgICB2YXIgYW5jaG9yUHQgPSAodGhpcy5wb2ludHMgPyB0aGlzLnBvaW50c1sxXSAtIHRoaXMuJGNvbnRhaW5lci5vZmZzZXQoKS50b3AgOiB0aGlzLmFuY2hvckhlaWdodCkgLSB0aGlzLmVsZW1IZWlnaHQ7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKCd0b3AnLCBhbmNob3JQdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0QnJlYWtQb2ludHModGhpcy5jb250YWluZXJIZWlnaHQsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGNiICYmIHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykgeyBjYigpOyB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdXBwZXIgYW5kIGxvd2VyIGJyZWFrcG9pbnRzIGZvciB0aGUgZWxlbWVudCB0byBiZWNvbWUgc3RpY2t5L3Vuc3RpY2t5LlxuICAgKiBAcGFyYW0ge051bWJlcn0gZWxlbUhlaWdodCAtIHB4IHZhbHVlIGZvciBzdGlja3kuJGVsZW1lbnQgaGVpZ2h0LCBjYWxjdWxhdGVkIGJ5IGBfc2V0U2l6ZXNgLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYiAtIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBjb21wbGV0aW9uLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldEJyZWFrUG9pbnRzKGVsZW1IZWlnaHQsIGNiKSB7XG4gICAgaWYgKCF0aGlzLmNhblN0aWNrKSB7XG4gICAgICBpZiAoY2IgJiYgdHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7IGNiKCk7IH1cbiAgICAgIGVsc2UgeyByZXR1cm4gZmFsc2U7IH1cbiAgICB9XG4gICAgdmFyIG1Ub3AgPSBlbUNhbGModGhpcy5vcHRpb25zLm1hcmdpblRvcCksXG4gICAgICAgIG1CdG0gPSBlbUNhbGModGhpcy5vcHRpb25zLm1hcmdpbkJvdHRvbSksXG4gICAgICAgIHRvcFBvaW50ID0gdGhpcy5wb2ludHMgPyB0aGlzLnBvaW50c1swXSA6IHRoaXMuJGFuY2hvci5vZmZzZXQoKS50b3AsXG4gICAgICAgIGJvdHRvbVBvaW50ID0gdGhpcy5wb2ludHMgPyB0aGlzLnBvaW50c1sxXSA6IHRvcFBvaW50ICsgdGhpcy5hbmNob3JIZWlnaHQsXG4gICAgICAgIC8vIHRvcFBvaW50ID0gdGhpcy4kYW5jaG9yLm9mZnNldCgpLnRvcCB8fCB0aGlzLnBvaW50c1swXSxcbiAgICAgICAgLy8gYm90dG9tUG9pbnQgPSB0b3BQb2ludCArIHRoaXMuYW5jaG9ySGVpZ2h0IHx8IHRoaXMucG9pbnRzWzFdLFxuICAgICAgICB3aW5IZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnN0aWNrVG8gPT09ICd0b3AnKSB7XG4gICAgICB0b3BQb2ludCAtPSBtVG9wO1xuICAgICAgYm90dG9tUG9pbnQgLT0gKGVsZW1IZWlnaHQgKyBtVG9wKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdGlja1RvID09PSAnYm90dG9tJykge1xuICAgICAgdG9wUG9pbnQgLT0gKHdpbkhlaWdodCAtIChlbGVtSGVpZ2h0ICsgbUJ0bSkpO1xuICAgICAgYm90dG9tUG9pbnQgLT0gKHdpbkhlaWdodCAtIG1CdG0pO1xuICAgIH1cblxuICAgIHRoaXMudG9wUG9pbnQgPSB0b3BQb2ludDtcbiAgICB0aGlzLmJvdHRvbVBvaW50ID0gYm90dG9tUG9pbnQ7XG5cbiAgICBpZiAoY2IgJiYgdHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7IGNiKCk7IH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgY3VycmVudCBzdGlja3kgZWxlbWVudC5cbiAgICogUmVzZXRzIHRoZSBlbGVtZW50IHRvIHRoZSB0b3AgcG9zaXRpb24gZmlyc3QuXG4gICAqIFJlbW92ZXMgZXZlbnQgbGlzdGVuZXJzLCBKUy1hZGRlZCBjc3MgcHJvcGVydGllcyBhbmQgY2xhc3NlcywgYW5kIHVud3JhcHMgdGhlICRlbGVtZW50IGlmIHRoZSBKUyBhZGRlZCB0aGUgJGNvbnRhaW5lci5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBfZGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZW1vdmVTdGlja3kodHJ1ZSk7XG5cbiAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGAke3RoaXMub3B0aW9ucy5zdGlja3lDbGFzc30gaXMtYW5jaG9yZWQgaXMtYXQtdG9wYClcbiAgICAgICAgICAgICAgICAgLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnJyxcbiAgICAgICAgICAgICAgICAgICB0b3A6ICcnLFxuICAgICAgICAgICAgICAgICAgIGJvdHRvbTogJycsXG4gICAgICAgICAgICAgICAgICAgJ21heC13aWR0aCc6ICcnXG4gICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgIC5vZmYoJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInKVxuICAgICAgICAgICAgICAgICAub2ZmKCdtdXRhdGVtZS56Zi50cmlnZ2VyJyk7XG4gICAgaWYgKHRoaXMuJGFuY2hvciAmJiB0aGlzLiRhbmNob3IubGVuZ3RoKSB7XG4gICAgICB0aGlzLiRhbmNob3Iub2ZmKCdjaGFuZ2UuemYuc3RpY2t5Jyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNjcm9sbExpc3RlbmVyKSAkKHdpbmRvdykub2ZmKHRoaXMuc2Nyb2xsTGlzdGVuZXIpO1xuICAgIGlmICh0aGlzLm9uTG9hZExpc3RlbmVyKSAkKHdpbmRvdykub2ZmKHRoaXMub25Mb2FkTGlzdGVuZXIpO1xuXG4gICAgaWYgKHRoaXMud2FzV3JhcHBlZCkge1xuICAgICAgdGhpcy4kZWxlbWVudC51bndyYXAoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4kY29udGFpbmVyLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5jb250YWluZXJDbGFzcylcbiAgICAgICAgICAgICAgICAgICAgIC5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcnXG4gICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuU3RpY2t5LmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQ3VzdG9taXphYmxlIGNvbnRhaW5lciB0ZW1wbGF0ZS4gQWRkIHlvdXIgb3duIGNsYXNzZXMgZm9yIHN0eWxpbmcgYW5kIHNpemluZy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnJmx0O2RpdiBkYXRhLXN0aWNreS1jb250YWluZXImZ3Q7Jmx0Oy9kaXYmZ3Q7J1xuICAgKi9cbiAgY29udGFpbmVyOiAnPGRpdiBkYXRhLXN0aWNreS1jb250YWluZXI+PC9kaXY+JyxcbiAgLyoqXG4gICAqIExvY2F0aW9uIGluIHRoZSB2aWV3IHRoZSBlbGVtZW50IHN0aWNrcyB0by4gQ2FuIGJlIGAndG9wJ2Agb3IgYCdib3R0b20nYC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAndG9wJ1xuICAgKi9cbiAgc3RpY2tUbzogJ3RvcCcsXG4gIC8qKlxuICAgKiBJZiBhbmNob3JlZCB0byBhIHNpbmdsZSBlbGVtZW50LCB0aGUgaWQgb2YgdGhhdCBlbGVtZW50LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBhbmNob3I6ICcnLFxuICAvKipcbiAgICogSWYgdXNpbmcgbW9yZSB0aGFuIG9uZSBlbGVtZW50IGFzIGFuY2hvciBwb2ludHMsIHRoZSBpZCBvZiB0aGUgdG9wIGFuY2hvci5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgdG9wQW5jaG9yOiAnJyxcbiAgLyoqXG4gICAqIElmIHVzaW5nIG1vcmUgdGhhbiBvbmUgZWxlbWVudCBhcyBhbmNob3IgcG9pbnRzLCB0aGUgaWQgb2YgdGhlIGJvdHRvbSBhbmNob3IuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIGJ0bUFuY2hvcjogJycsXG4gIC8qKlxuICAgKiBNYXJnaW4sIGluIGBlbWAncyB0byBhcHBseSB0byB0aGUgdG9wIG9mIHRoZSBlbGVtZW50IHdoZW4gaXQgYmVjb21lcyBzdGlja3kuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgbWFyZ2luVG9wOiAxLFxuICAvKipcbiAgICogTWFyZ2luLCBpbiBgZW1gJ3MgdG8gYXBwbHkgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZWxlbWVudCB3aGVuIGl0IGJlY29tZXMgc3RpY2t5LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIG1hcmdpbkJvdHRvbTogMSxcbiAgLyoqXG4gICAqIEJyZWFrcG9pbnQgc3RyaW5nIHRoYXQgaXMgdGhlIG1pbmltdW0gc2NyZWVuIHNpemUgYW4gZWxlbWVudCBzaG91bGQgYmVjb21lIHN0aWNreS5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc3RpY2t5T246ICdtZWRpdW0nLFxuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byBzdGlja3kgZWxlbWVudCwgYW5kIHJlbW92ZWQgb24gZGVzdHJ1Y3Rpb24uIEZvdW5kYXRpb24gZGVmYXVsdHMgdG8gYHN0aWNreWAuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ3N0aWNreSdcbiAgICovXG4gIHN0aWNreUNsYXNzOiAnc3RpY2t5JyxcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gc3RpY2t5IGNvbnRhaW5lci4gRm91bmRhdGlvbiBkZWZhdWx0cyB0byBgc3RpY2t5LWNvbnRhaW5lcmAuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ3N0aWNreS1jb250YWluZXInXG4gICAqL1xuICBjb250YWluZXJDbGFzczogJ3N0aWNreS1jb250YWluZXInLFxuICAvKipcbiAgICogSWYgdHJ1ZSAoYnkgZGVmYXVsdCksIGtlZXAgdGhlIHN0aWNreSBjb250YWluZXIgdGhlIHNhbWUgaGVpZ2h0IGFzIHRoZSBlbGVtZW50LiBPdGhlcndpc2UsIHRoZSBjb250YWluZXIgaGVpZ2h0IGlzIHNldCBvbmNlIGFuZCBkb2VzIG5vdCBjaGFuZ2UuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGR5bmFtaWNIZWlnaHQ6IHRydWUsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2Nyb2xsIGV2ZW50cyBiZXR3ZWVuIHRoZSBwbHVnaW4ncyByZWNhbGN1bGF0aW5nIHN0aWNreSBwb2ludHMuIFNldHRpbmcgaXQgdG8gYDBgIHdpbGwgY2F1c2UgaXQgdG8gcmVjYWxjIGV2ZXJ5IHNjcm9sbCBldmVudCwgc2V0dGluZyBpdCB0byBgLTFgIHdpbGwgcHJldmVudCByZWNhbGMgb24gc2Nyb2xsLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IC0xXG4gICAqL1xuICBjaGVja0V2ZXJ5OiAtMVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIGVtIHZhbHVlc1xuICogQHBhcmFtIE51bWJlciB7ZW19IC0gbnVtYmVyIG9mIGVtJ3MgdG8gY2FsY3VsYXRlIGludG8gcGl4ZWxzXG4gKi9cbmZ1bmN0aW9uIGVtQ2FsYyhlbSkge1xuICByZXR1cm4gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSwgbnVsbCkuZm9udFNpemUsIDEwKSAqIGVtO1xufVxuXG4vKipcbiAqIFRhYnMgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLnRhYnNcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwuaW1hZ2VMb2FkZXIgaWYgdGFicyBjb250YWluIGltYWdlc1xuICovXG5cbmNsYXNzIFRhYnMgZXh0ZW5kcyBQbHVnaW4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0YWJzLlxuICAgKiBAY2xhc3NcbiAgICogQG5hbWUgVGFic1xuICAgKiBAZmlyZXMgVGFicyNpbml0XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gdGFicy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgX3NldHVwKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgVGFicy5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuICAgIHRoaXMuY2xhc3NOYW1lID0gJ1RhYnMnOyAvLyBpZTkgYmFjayBjb21wYXRcblxuICAgIHRoaXMuX2luaXQoKTtcbiAgICBLZXlib2FyZC5yZWdpc3RlcignVGFicycsIHtcbiAgICAgICdFTlRFUic6ICdvcGVuJyxcbiAgICAgICdTUEFDRSc6ICdvcGVuJyxcbiAgICAgICdBUlJPV19SSUdIVCc6ICduZXh0JyxcbiAgICAgICdBUlJPV19VUCc6ICdwcmV2aW91cycsXG4gICAgICAnQVJST1dfRE9XTic6ICduZXh0JyxcbiAgICAgICdBUlJPV19MRUZUJzogJ3ByZXZpb3VzJ1xuICAgICAgLy8gJ1RBQic6ICduZXh0JyxcbiAgICAgIC8vICdTSElGVF9UQUInOiAncHJldmlvdXMnXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHRhYnMgYnkgc2hvd2luZyBhbmQgZm9jdXNpbmcgKGlmIGF1dG9Gb2N1cz10cnVlKSB0aGUgcHJlc2V0IGFjdGl2ZSB0YWIuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHRoaXMuX2lzSW5pdGlhbGl6aW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cih7J3JvbGUnOiAndGFibGlzdCd9KTtcbiAgICB0aGlzLiR0YWJUaXRsZXMgPSB0aGlzLiRlbGVtZW50LmZpbmQoYC4ke3RoaXMub3B0aW9ucy5saW5rQ2xhc3N9YCk7XG4gICAgdGhpcy4kdGFiQ29udGVudCA9ICQoYFtkYXRhLXRhYnMtY29udGVudD1cIiR7dGhpcy4kZWxlbWVudFswXS5pZH1cIl1gKTtcblxuICAgIHRoaXMuJHRhYlRpdGxlcy5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgJGVsZW0gPSAkKHRoaXMpLFxuICAgICAgICAgICRsaW5rID0gJGVsZW0uZmluZCgnYScpLFxuICAgICAgICAgIGlzQWN0aXZlID0gJGVsZW0uaGFzQ2xhc3MoYCR7X3RoaXMub3B0aW9ucy5saW5rQWN0aXZlQ2xhc3N9YCksXG4gICAgICAgICAgaGFzaCA9ICRsaW5rLmF0dHIoJ2RhdGEtdGFicy10YXJnZXQnKSB8fCAkbGlua1swXS5oYXNoLnNsaWNlKDEpLFxuICAgICAgICAgIGxpbmtJZCA9ICRsaW5rWzBdLmlkID8gJGxpbmtbMF0uaWQgOiBgJHtoYXNofS1sYWJlbGAsXG4gICAgICAgICAgJHRhYkNvbnRlbnQgPSAkKGAjJHtoYXNofWApO1xuXG4gICAgICAkZWxlbS5hdHRyKHsncm9sZSc6ICdwcmVzZW50YXRpb24nfSk7XG5cbiAgICAgICRsaW5rLmF0dHIoe1xuICAgICAgICAncm9sZSc6ICd0YWInLFxuICAgICAgICAnYXJpYS1jb250cm9scyc6IGhhc2gsXG4gICAgICAgICdhcmlhLXNlbGVjdGVkJzogaXNBY3RpdmUsXG4gICAgICAgICdpZCc6IGxpbmtJZCxcbiAgICAgICAgJ3RhYmluZGV4JzogaXNBY3RpdmUgPyAnMCcgOiAnLTEnXG4gICAgICB9KTtcblxuICAgICAgJHRhYkNvbnRlbnQuYXR0cih7XG4gICAgICAgICdyb2xlJzogJ3RhYnBhbmVsJyxcbiAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IGxpbmtJZFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNhdmUgdXAgdGhlIGluaXRpYWwgaGFzaCB0byByZXR1cm4gdG8gaXQgbGF0ZXIgd2hlbiBnb2luZyBiYWNrIGluIGhpc3RvcnlcbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBfdGhpcy5faW5pdGlhbEFuY2hvciA9IGAjJHtoYXNofWA7XG4gICAgICB9XG5cbiAgICAgIGlmKCFpc0FjdGl2ZSkge1xuICAgICAgICAkdGFiQ29udGVudC5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmKGlzQWN0aXZlICYmIF90aGlzLm9wdGlvbnMuYXV0b0ZvY3VzKXtcbiAgICAgICAgX3RoaXMub25Mb2FkTGlzdGVuZXIgPSBvbkxvYWQoJCh3aW5kb3cpLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7IHNjcm9sbFRvcDogJGVsZW0ub2Zmc2V0KCkudG9wIH0sIF90aGlzLm9wdGlvbnMuZGVlcExpbmtTbXVkZ2VEZWxheSwgKCkgPT4ge1xuICAgICAgICAgICAgJGxpbmsuZm9jdXMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZih0aGlzLm9wdGlvbnMubWF0Y2hIZWlnaHQpIHtcbiAgICAgIHZhciAkaW1hZ2VzID0gdGhpcy4kdGFiQ29udGVudC5maW5kKCdpbWcnKTtcblxuICAgICAgaWYgKCRpbWFnZXMubGVuZ3RoKSB7XG4gICAgICAgIG9uSW1hZ2VzTG9hZGVkKCRpbWFnZXMsIHRoaXMuX3NldEhlaWdodC5iaW5kKHRoaXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NldEhlaWdodCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgICAvLyBDdXJyZW50IGNvbnRleHQtYm91bmQgZnVuY3Rpb24gdG8gb3BlbiB0YWJzIG9uIHBhZ2UgbG9hZCBvciBoaXN0b3J5IGhhc2hjaGFuZ2VcbiAgICB0aGlzLl9jaGVja0RlZXBMaW5rID0gKCkgPT4ge1xuICAgICAgdmFyIGFuY2hvciA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXG4gICAgICBpZiAoIWFuY2hvci5sZW5ndGgpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIHN0aWxsIGluaXRpYWxpemluZyBhbmQgdGhlcmUgaXMgbm8gYW5jaG9yLCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6aW5nKSByZXR1cm47XG4gICAgICAgIC8vIE90aGVyd2lzZSwgbW92ZSB0byB0aGUgaW5pdGlhbCBhbmNob3JcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxBbmNob3IpIGFuY2hvciA9IHRoaXMuX2luaXRpYWxBbmNob3I7XG4gICAgICB9XG5cbiAgICAgIHZhciBhbmNob3JOb0hhc2ggPSBhbmNob3IuaW5kZXhPZignIycpID49IDAgPyBhbmNob3Iuc2xpY2UoMSkgOiBhbmNob3I7XG4gICAgICB2YXIgJGFuY2hvciA9IGFuY2hvck5vSGFzaCAmJiAkKGAjJHthbmNob3JOb0hhc2h9YCk7XG4gICAgICB2YXIgJGxpbmsgPSBhbmNob3IgJiYgdGhpcy4kZWxlbWVudC5maW5kKGBbaHJlZiQ9XCIke2FuY2hvcn1cIl0sW2RhdGEtdGFicy10YXJnZXQ9XCIke2FuY2hvck5vSGFzaH1cIl1gKS5maXJzdCgpO1xuICAgICAgLy8gV2hldGhlciB0aGUgYW5jaG9yIGVsZW1lbnQgdGhhdCBoYXMgYmVlbiBmb3VuZCBpcyBwYXJ0IG9mIHRoaXMgZWxlbWVudFxuICAgICAgdmFyIGlzT3duQW5jaG9yID0gISEoJGFuY2hvci5sZW5ndGggJiYgJGxpbmsubGVuZ3RoKTtcblxuICAgICAgaWYgKGlzT3duQW5jaG9yKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGFuY2hvciBmb3IgdGhlIGhhc2gsIHNlbGVjdCBpdFxuICAgICAgICBpZiAoJGFuY2hvciAmJiAkYW5jaG9yLmxlbmd0aCAmJiAkbGluayAmJiAkbGluay5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdFRhYigkYW5jaG9yLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPdGhlcndpc2UsIGNvbGxhcHNlIGV2ZXJ5dGhpbmdcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY29sbGFwc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJvbGwgdXAgYSBsaXR0bGUgdG8gc2hvdyB0aGUgdGl0bGVzXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVlcExpbmtTbXVkZ2UpIHtcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy4kZWxlbWVudC5vZmZzZXQoKTtcbiAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7IHNjcm9sbFRvcDogb2Zmc2V0LnRvcCAtIHRoaXMub3B0aW9ucy5kZWVwTGlua1NtdWRnZU9mZnNldH0sIHRoaXMub3B0aW9ucy5kZWVwTGlua1NtdWRnZURlbGF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBwbHVnaW4gaGFzIGRlZXBsaW5rZWQgYXQgcGFnZWxvYWRcbiAgICAgICAgICogQGV2ZW50IFRhYnMjZGVlcGxpbmtcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignZGVlcGxpbmsuemYudGFicycsIFskbGluaywgJGFuY2hvcl0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvL3VzZSBicm93c2VyIHRvIG9wZW4gYSB0YWIsIGlmIGl0IGV4aXN0cyBpbiB0aGlzIHRhYnNldFxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGVlcExpbmspIHtcbiAgICAgIHRoaXMuX2NoZWNrRGVlcExpbmsoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9ldmVudHMoKTtcblxuICAgIHRoaXMuX2lzSW5pdGlhbGl6aW5nID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBoYW5kbGVycyBmb3IgaXRlbXMgd2l0aGluIHRoZSB0YWJzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB0aGlzLl9hZGRLZXlIYW5kbGVyKCk7XG4gICAgdGhpcy5fYWRkQ2xpY2tIYW5kbGVyKCk7XG4gICAgdGhpcy5fc2V0SGVpZ2h0TXFIYW5kbGVyID0gbnVsbDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubWF0Y2hIZWlnaHQpIHtcbiAgICAgIHRoaXMuX3NldEhlaWdodE1xSGFuZGxlciA9IHRoaXMuX3NldEhlaWdodC5iaW5kKHRoaXMpO1xuXG4gICAgICAkKHdpbmRvdykub24oJ2NoYW5nZWQuemYubWVkaWFxdWVyeScsIHRoaXMuX3NldEhlaWdodE1xSGFuZGxlcik7XG4gICAgfVxuXG4gICAgaWYodGhpcy5vcHRpb25zLmRlZXBMaW5rKSB7XG4gICAgICAkKHdpbmRvdykub24oJ2hhc2hjaGFuZ2UnLCB0aGlzLl9jaGVja0RlZXBMaW5rKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBjbGljayBoYW5kbGVycyBmb3IgaXRlbXMgd2l0aGluIHRoZSB0YWJzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZENsaWNrSGFuZGxlcigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kZWxlbWVudFxuICAgICAgLm9mZignY2xpY2suemYudGFicycpXG4gICAgICAub24oJ2NsaWNrLnpmLnRhYnMnLCBgLiR7dGhpcy5vcHRpb25zLmxpbmtDbGFzc31gLCBmdW5jdGlvbihlKXtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBfdGhpcy5faGFuZGxlVGFiQ2hhbmdlKCQodGhpcykpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBrZXlib2FyZCBldmVudCBoYW5kbGVycyBmb3IgaXRlbXMgd2l0aGluIHRoZSB0YWJzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZEtleUhhbmRsZXIoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJHRhYlRpdGxlcy5vZmYoJ2tleWRvd24uemYudGFicycpLm9uKCdrZXlkb3duLnpmLnRhYnMnLCBmdW5jdGlvbihlKXtcbiAgICAgIGlmIChlLndoaWNoID09PSA5KSByZXR1cm47XG5cblxuICAgICAgdmFyICRlbGVtZW50ID0gJCh0aGlzKSxcbiAgICAgICAgJGVsZW1lbnRzID0gJGVsZW1lbnQucGFyZW50KCd1bCcpLmNoaWxkcmVuKCdsaScpLFxuICAgICAgICAkcHJldkVsZW1lbnQsXG4gICAgICAgICRuZXh0RWxlbWVudDtcblxuICAgICAgJGVsZW1lbnRzLmVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgICBpZiAoJCh0aGlzKS5pcygkZWxlbWVudCkpIHtcbiAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy53cmFwT25LZXlzKSB7XG4gICAgICAgICAgICAkcHJldkVsZW1lbnQgPSBpID09PSAwID8gJGVsZW1lbnRzLmxhc3QoKSA6ICRlbGVtZW50cy5lcShpLTEpO1xuICAgICAgICAgICAgJG5leHRFbGVtZW50ID0gaSA9PT0gJGVsZW1lbnRzLmxlbmd0aCAtMSA/ICRlbGVtZW50cy5maXJzdCgpIDogJGVsZW1lbnRzLmVxKGkrMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRwcmV2RWxlbWVudCA9ICRlbGVtZW50cy5lcShNYXRoLm1heCgwLCBpLTEpKTtcbiAgICAgICAgICAgICRuZXh0RWxlbWVudCA9ICRlbGVtZW50cy5lcShNYXRoLm1pbihpKzEsICRlbGVtZW50cy5sZW5ndGgtMSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBoYW5kbGUga2V5Ym9hcmQgZXZlbnQgd2l0aCBrZXlib2FyZCB1dGlsXG4gICAgICBLZXlib2FyZC5oYW5kbGVLZXkoZSwgJ1RhYnMnLCB7XG4gICAgICAgIG9wZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRlbGVtZW50LmZpbmQoJ1tyb2xlPVwidGFiXCJdJykuZm9jdXMoKTtcbiAgICAgICAgICBfdGhpcy5faGFuZGxlVGFiQ2hhbmdlKCRlbGVtZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlvdXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRwcmV2RWxlbWVudC5maW5kKCdbcm9sZT1cInRhYlwiXScpLmZvY3VzKCk7XG4gICAgICAgICAgX3RoaXMuX2hhbmRsZVRhYkNoYW5nZSgkcHJldkVsZW1lbnQpO1xuICAgICAgICB9LFxuICAgICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAkbmV4dEVsZW1lbnQuZmluZCgnW3JvbGU9XCJ0YWJcIl0nKS5mb2N1cygpO1xuICAgICAgICAgIF90aGlzLl9oYW5kbGVUYWJDaGFuZ2UoJG5leHRFbGVtZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgdGFiIGAkdGFyZ2V0Q29udGVudGAgZGVmaW5lZCBieSBgJHRhcmdldGAuIENvbGxhcHNlcyBhY3RpdmUgdGFiLlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJHRhcmdldCAtIFRhYiB0byBvcGVuLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhpc3RvcnlIYW5kbGVkIC0gYnJvd3NlciBoYXMgYWxyZWFkeSBoYW5kbGVkIGEgaGlzdG9yeSB1cGRhdGVcbiAgICogQGZpcmVzIFRhYnMjY2hhbmdlXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX2hhbmRsZVRhYkNoYW5nZSgkdGFyZ2V0LCBoaXN0b3J5SGFuZGxlZCkge1xuXG4gICAgLy8gV2l0aCBgYWN0aXZlQ29sbGFwc2VgLCBpZiB0aGUgdGFyZ2V0IGlzIHRoZSBhY3RpdmUgVGFiLCBjb2xsYXBzZSBpdC5cbiAgICBpZiAoJHRhcmdldC5oYXNDbGFzcyhgJHt0aGlzLm9wdGlvbnMubGlua0FjdGl2ZUNsYXNzfWApKSB7XG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5hY3RpdmVDb2xsYXBzZSkge1xuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyICRvbGRUYWIgPSB0aGlzLiRlbGVtZW50LlxuICAgICAgICAgIGZpbmQoYC4ke3RoaXMub3B0aW9ucy5saW5rQ2xhc3N9LiR7dGhpcy5vcHRpb25zLmxpbmtBY3RpdmVDbGFzc31gKSxcbiAgICAgICAgICAkdGFiTGluayA9ICR0YXJnZXQuZmluZCgnW3JvbGU9XCJ0YWJcIl0nKSxcbiAgICAgICAgICB0YXJnZXQgPSAkdGFiTGluay5hdHRyKCdkYXRhLXRhYnMtdGFyZ2V0JyksXG4gICAgICAgICAgYW5jaG9yID0gdGFyZ2V0ICYmIHRhcmdldC5sZW5ndGggPyBgIyR7dGFyZ2V0fWAgOiAkdGFiTGlua1swXS5oYXNoLFxuICAgICAgICAgICR0YXJnZXRDb250ZW50ID0gdGhpcy4kdGFiQ29udGVudC5maW5kKGFuY2hvcik7XG5cbiAgICAvL2Nsb3NlIG9sZCB0YWJcbiAgICB0aGlzLl9jb2xsYXBzZVRhYigkb2xkVGFiKTtcblxuICAgIC8vb3BlbiBuZXcgdGFiXG4gICAgdGhpcy5fb3BlblRhYigkdGFyZ2V0KTtcblxuICAgIC8vZWl0aGVyIHJlcGxhY2Ugb3IgdXBkYXRlIGJyb3dzZXIgaGlzdG9yeVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGVlcExpbmsgJiYgIWhpc3RvcnlIYW5kbGVkKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnVwZGF0ZUhpc3RvcnkpIHtcbiAgICAgICAgaGlzdG9yeS5wdXNoU3RhdGUoe30sICcnLCBhbmNob3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sICcnLCBhbmNob3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIHBsdWdpbiBoYXMgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdGFicy5cbiAgICAgKiBAZXZlbnQgVGFicyNjaGFuZ2VcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2NoYW5nZS56Zi50YWJzJywgWyR0YXJnZXQsICR0YXJnZXRDb250ZW50XSk7XG5cbiAgICAvL2ZpcmUgdG8gY2hpbGRyZW4gYSBtdXRhdGlvbiBldmVudFxuICAgICR0YXJnZXRDb250ZW50LmZpbmQoXCJbZGF0YS1tdXRhdGVdXCIpLnRyaWdnZXIoXCJtdXRhdGVtZS56Zi50cmlnZ2VyXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSB0YWIgYCR0YXJnZXRDb250ZW50YCBkZWZpbmVkIGJ5IGAkdGFyZ2V0YC5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICR0YXJnZXQgLSBUYWIgdG8gb3Blbi5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBfb3BlblRhYigkdGFyZ2V0KSB7XG4gICAgICB2YXIgJHRhYkxpbmsgPSAkdGFyZ2V0LmZpbmQoJ1tyb2xlPVwidGFiXCJdJyksXG4gICAgICAgICAgaGFzaCA9ICR0YWJMaW5rLmF0dHIoJ2RhdGEtdGFicy10YXJnZXQnKSB8fCAkdGFiTGlua1swXS5oYXNoLnNsaWNlKDEpLFxuICAgICAgICAgICR0YXJnZXRDb250ZW50ID0gdGhpcy4kdGFiQ29udGVudC5maW5kKGAjJHtoYXNofWApO1xuXG4gICAgICAkdGFyZ2V0LmFkZENsYXNzKGAke3RoaXMub3B0aW9ucy5saW5rQWN0aXZlQ2xhc3N9YCk7XG5cbiAgICAgICR0YWJMaW5rLmF0dHIoe1xuICAgICAgICAnYXJpYS1zZWxlY3RlZCc6ICd0cnVlJyxcbiAgICAgICAgJ3RhYmluZGV4JzogJzAnXG4gICAgICB9KTtcblxuICAgICAgJHRhcmdldENvbnRlbnRcbiAgICAgICAgLmFkZENsYXNzKGAke3RoaXMub3B0aW9ucy5wYW5lbEFjdGl2ZUNsYXNzfWApLnJlbW92ZUF0dHIoJ2FyaWEtaGlkZGVuJyk7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFwc2VzIGAkdGFyZ2V0Q29udGVudGAgZGVmaW5lZCBieSBgJHRhcmdldGAuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkdGFyZ2V0IC0gVGFiIHRvIGNvbGxhcHNlLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIF9jb2xsYXBzZVRhYigkdGFyZ2V0KSB7XG4gICAgdmFyICR0YXJnZXRBbmNob3IgPSAkdGFyZ2V0XG4gICAgICAucmVtb3ZlQ2xhc3MoYCR7dGhpcy5vcHRpb25zLmxpbmtBY3RpdmVDbGFzc31gKVxuICAgICAgLmZpbmQoJ1tyb2xlPVwidGFiXCJdJylcbiAgICAgIC5hdHRyKHtcbiAgICAgICAgJ2FyaWEtc2VsZWN0ZWQnOiAnZmFsc2UnLFxuICAgICAgICAndGFiaW5kZXgnOiAtMVxuICAgICAgfSk7XG5cbiAgICAkKGAjJHskdGFyZ2V0QW5jaG9yLmF0dHIoJ2FyaWEtY29udHJvbHMnKX1gKVxuICAgICAgLnJlbW92ZUNsYXNzKGAke3RoaXMub3B0aW9ucy5wYW5lbEFjdGl2ZUNsYXNzfWApXG4gICAgICAuYXR0cih7ICdhcmlhLWhpZGRlbic6ICd0cnVlJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsYXBzZXMgdGhlIGFjdGl2ZSBUYWIuXG4gICAqIEBmaXJlcyBUYWJzI2NvbGxhcHNlXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX2NvbGxhcHNlKCkge1xuICAgIHZhciAkYWN0aXZlVGFiID0gdGhpcy4kZWxlbWVudC5maW5kKGAuJHt0aGlzLm9wdGlvbnMubGlua0NsYXNzfS4ke3RoaXMub3B0aW9ucy5saW5rQWN0aXZlQ2xhc3N9YCk7XG5cbiAgICBpZiAoJGFjdGl2ZVRhYi5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2NvbGxhcHNlVGFiKCRhY3RpdmVUYWIpO1xuXG4gICAgICAvKipcbiAgICAgICogRmlyZXMgd2hlbiB0aGUgcGx1Z2luIGhhcyBzdWNjZXNzZnVsbHkgY29sbGFwc2VkIHRhYnMuXG4gICAgICAqIEBldmVudCBUYWJzI2NvbGxhcHNlXG4gICAgICAqL1xuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjb2xsYXBzZS56Zi50YWJzJywgWyRhY3RpdmVUYWJdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVibGljIG1ldGhvZCBmb3Igc2VsZWN0aW5nIGEgY29udGVudCBwYW5lIHRvIGRpc3BsYXkuXG4gICAqIEBwYXJhbSB7alF1ZXJ5IHwgU3RyaW5nfSBlbGVtIC0galF1ZXJ5IG9iamVjdCBvciBzdHJpbmcgb2YgdGhlIGlkIG9mIHRoZSBwYW5lIHRvIGRpc3BsYXkuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGlzdG9yeUhhbmRsZWQgLSBicm93c2VyIGhhcyBhbHJlYWR5IGhhbmRsZWQgYSBoaXN0b3J5IHVwZGF0ZVxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIHNlbGVjdFRhYihlbGVtLCBoaXN0b3J5SGFuZGxlZCkge1xuICAgIHZhciBpZFN0ciwgaGFzaElkU3RyO1xuXG4gICAgaWYgKHR5cGVvZiBlbGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgaWRTdHIgPSBlbGVtWzBdLmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZFN0ciA9IGVsZW07XG4gICAgfVxuXG4gICAgaWYgKGlkU3RyLmluZGV4T2YoJyMnKSA8IDApIHtcbiAgICAgIGhhc2hJZFN0ciA9IGAjJHtpZFN0cn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYXNoSWRTdHIgPSBpZFN0cjtcbiAgICAgIGlkU3RyID0gaWRTdHIuc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgdmFyICR0YXJnZXQgPSB0aGlzLiR0YWJUaXRsZXMuaGFzKGBbaHJlZiQ9XCIke2hhc2hJZFN0cn1cIl0sW2RhdGEtdGFicy10YXJnZXQ9XCIke2lkU3RyfVwiXWApLmZpcnN0KCk7XG5cbiAgICB0aGlzLl9oYW5kbGVUYWJDaGFuZ2UoJHRhcmdldCwgaGlzdG9yeUhhbmRsZWQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBoZWlnaHQgb2YgZWFjaCBwYW5lbCB0byB0aGUgaGVpZ2h0IG9mIHRoZSB0YWxsZXN0IHBhbmVsLlxuICAgKiBJZiBlbmFibGVkIGluIG9wdGlvbnMsIGdldHMgY2FsbGVkIG9uIG1lZGlhIHF1ZXJ5IGNoYW5nZS5cbiAgICogSWYgbG9hZGluZyBjb250ZW50IHZpYSBleHRlcm5hbCBzb3VyY2UsIGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgb3Igd2l0aCBfcmVmbG93LlxuICAgKiBJZiBlbmFibGVkIHdpdGggYGRhdGEtbWF0Y2gtaGVpZ2h0PVwidHJ1ZVwiYCwgdGFicyBzZXRzIHRvIGVxdWFsIGhlaWdodFxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRIZWlnaHQoKSB7XG4gICAgdmFyIG1heCA9IDAsXG4gICAgICAgIF90aGlzID0gdGhpczsgLy8gTG9jayBkb3duIHRoZSBgdGhpc2AgdmFsdWUgZm9yIHRoZSByb290IHRhYnMgb2JqZWN0XG5cbiAgICBpZiAoIXRoaXMuJHRhYkNvbnRlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLiR0YWJDb250ZW50XG4gICAgICAuZmluZChgLiR7dGhpcy5vcHRpb25zLnBhbmVsQ2xhc3N9YClcbiAgICAgIC5jc3MoJ21pbi1oZWlnaHQnLCAnJylcbiAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBwYW5lbCA9ICQodGhpcyksXG4gICAgICAgICAgICBpc0FjdGl2ZSA9IHBhbmVsLmhhc0NsYXNzKGAke190aGlzLm9wdGlvbnMucGFuZWxBY3RpdmVDbGFzc31gKTsgLy8gZ2V0IHRoZSBvcHRpb25zIGZyb20gdGhlIHBhcmVudCBpbnN0ZWFkIG9mIHRyeWluZyB0byBnZXQgdGhlbSBmcm9tIHRoZSBjaGlsZFxuXG4gICAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgICBwYW5lbC5jc3Moeyd2aXNpYmlsaXR5JzogJ2hpZGRlbicsICdkaXNwbGF5JzogJ2Jsb2NrJ30pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRlbXAgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcblxuICAgICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgICAgcGFuZWwuY3NzKHtcbiAgICAgICAgICAgICd2aXNpYmlsaXR5JzogJycsXG4gICAgICAgICAgICAnZGlzcGxheSc6ICcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBtYXggPSB0ZW1wID4gbWF4ID8gdGVtcCA6IG1heDtcbiAgICAgIH0pXG4gICAgICAuY3NzKCdtaW4taGVpZ2h0JywgYCR7bWF4fXB4YCk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgYW4gaW5zdGFuY2Ugb2YgdGFicy5cbiAgICogQGZpcmVzIFRhYnMjZGVzdHJveWVkXG4gICAqL1xuICBfZGVzdHJveSgpIHtcbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAuZmluZChgLiR7dGhpcy5vcHRpb25zLmxpbmtDbGFzc31gKVxuICAgICAgLm9mZignLnpmLnRhYnMnKS5oaWRlKCkuZW5kKClcbiAgICAgIC5maW5kKGAuJHt0aGlzLm9wdGlvbnMucGFuZWxDbGFzc31gKVxuICAgICAgLmhpZGUoKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubWF0Y2hIZWlnaHQpIHtcbiAgICAgIGlmICh0aGlzLl9zZXRIZWlnaHRNcUhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgJCh3aW5kb3cpLm9mZignY2hhbmdlZC56Zi5tZWRpYXF1ZXJ5JywgdGhpcy5fc2V0SGVpZ2h0TXFIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmRlZXBMaW5rKSB7XG4gICAgICAkKHdpbmRvdykub2ZmKCdoYXNoY2hhbmdlJywgdGhpcy5fY2hlY2tEZWVwTGluayk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub25Mb2FkTGlzdGVuZXIpIHtcbiAgICAgICQod2luZG93KS5vZmYodGhpcy5vbkxvYWRMaXN0ZW5lcik7XG4gICAgfVxuICB9XG59XG5cblRhYnMuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBMaW5rIHRoZSBsb2NhdGlvbiBoYXNoIHRvIHRoZSBhY3RpdmUgcGFuZS5cbiAgICogU2V0IHRoZSBsb2NhdGlvbiBoYXNoIHdoZW4gdGhlIGFjdGl2ZSBwYW5lIGNoYW5nZXMsIGFuZCBvcGVuIHRoZSBjb3JyZXNwb25kaW5nIHBhbmUgd2hlbiB0aGUgbG9jYXRpb24gY2hhbmdlcy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlZXBMaW5rOiBmYWxzZSxcblxuICAvKipcbiAgICogSWYgYGRlZXBMaW5rYCBpcyBlbmFibGVkLCBhZGp1c3QgdGhlIGRlZXAgbGluayBzY3JvbGwgdG8gbWFrZSBzdXJlIHRoZSB0b3Agb2YgdGhlIHRhYiBwYW5lbCBpcyB2aXNpYmxlXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWVwTGlua1NtdWRnZTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIElmIGBkZWVwTGlua1NtdWRnZWAgaXMgZW5hYmxlZCwgYW5pbWF0aW9uIHRpbWUgKG1zKSBmb3IgdGhlIGRlZXAgbGluayBhZGp1c3RtZW50XG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMzAwXG4gICAqL1xuICBkZWVwTGlua1NtdWRnZURlbGF5OiAzMDAsXG5cbiAgLyoqXG4gICAqIElmIGBkZWVwTGlua1NtdWRnZWAgaXMgZW5hYmxlZCwgYW5pbWF0aW9uIG9mZnNldCBmcm9tIHRoZSB0b3AgZm9yIHRoZSBkZWVwIGxpbmsgYWRqdXN0bWVudFxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGRlZXBMaW5rU211ZGdlT2Zmc2V0OiAwLFxuXG4gIC8qKlxuICAgKiBJZiBgZGVlcExpbmtgIGlzIGVuYWJsZWQsIHVwZGF0ZSB0aGUgYnJvd3NlciBoaXN0b3J5IHdpdGggdGhlIG9wZW4gdGFiXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB1cGRhdGVIaXN0b3J5OiBmYWxzZSxcblxuICAvKipcbiAgICogQWxsb3dzIHRoZSB3aW5kb3cgdG8gc2Nyb2xsIHRvIGNvbnRlbnQgb2YgYWN0aXZlIHBhbmUgb24gbG9hZC5cbiAgICogTm90IHJlY29tbWVuZGVkIGlmIG1vcmUgdGhhbiBvbmUgdGFiIHBhbmVsIHBlciBwYWdlLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBmYWxzZSxcblxuICAvKipcbiAgICogQWxsb3dzIGtleWJvYXJkIGlucHV0IHRvICd3cmFwJyBhcm91bmQgdGhlIHRhYiBsaW5rcy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgd3JhcE9uS2V5czogdHJ1ZSxcblxuICAvKipcbiAgICogQWxsb3dzIHRoZSB0YWIgY29udGVudCBwYW5lcyB0byBtYXRjaCBoZWlnaHRzIGlmIHNldCB0byB0cnVlLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbWF0Y2hIZWlnaHQ6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBBbGxvd3MgYWN0aXZlIHRhYnMgdG8gY29sbGFwc2Ugd2hlbiBjbGlja2VkLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYWN0aXZlQ29sbGFwc2U6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBDbGFzcyBhcHBsaWVkIHRvIGBsaWAncyBpbiB0YWIgbGluayBsaXN0LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICd0YWJzLXRpdGxlJ1xuICAgKi9cbiAgbGlua0NsYXNzOiAndGFicy10aXRsZScsXG5cbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gdGhlIGFjdGl2ZSBgbGlgIGluIHRhYiBsaW5rIGxpc3QuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2lzLWFjdGl2ZSdcbiAgICovXG4gIGxpbmtBY3RpdmVDbGFzczogJ2lzLWFjdGl2ZScsXG5cbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbnRlbnQgY29udGFpbmVycy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAndGFicy1wYW5lbCdcbiAgICovXG4gIHBhbmVsQ2xhc3M6ICd0YWJzLXBhbmVsJyxcblxuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB0aGUgYWN0aXZlIGNvbnRlbnQgY29udGFpbmVyLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdpcy1hY3RpdmUnXG4gICAqL1xuICBwYW5lbEFjdGl2ZUNsYXNzOiAnaXMtYWN0aXZlJ1xufTtcblxuLyoqXG4gKiBUb2dnbGVyIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi50b2dnbGVyXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1vdGlvblxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICovXG5cbmNsYXNzIFRvZ2dsZXIgZXh0ZW5kcyBQbHVnaW4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBUb2dnbGVyLlxuICAgKiBAY2xhc3NcbiAgICogQG5hbWUgVG9nZ2xlclxuICAgKiBAZmlyZXMgVG9nZ2xlciNpbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBhZGQgdGhlIHRyaWdnZXIgdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIF9zZXR1cChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIFRvZ2dsZXIuZGVmYXVsdHMsIGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcbiAgICB0aGlzLmNsYXNzTmFtZSA9ICcnO1xuICAgIHRoaXMuY2xhc3NOYW1lID0gJ1RvZ2dsZXInOyAvLyBpZTkgYmFjayBjb21wYXRcblxuICAgIC8vIFRyaWdnZXJzIGluaXQgaXMgaWRlbXBvdGVudCwganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSBpdCBpcyBpbml0aWFsaXplZFxuICAgIFRyaWdnZXJzLmluaXQoJCk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIFRvZ2dsZXIgcGx1Z2luIGJ5IHBhcnNpbmcgdGhlIHRvZ2dsZSBjbGFzcyBmcm9tIGRhdGEtdG9nZ2xlciwgb3IgYW5pbWF0aW9uIGNsYXNzZXMgZnJvbSBkYXRhLWFuaW1hdGUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgLy8gQ29sbGVjdCB0cmlnZ2VycyB0byBzZXQgQVJJQSBhdHRyaWJ1dGVzIHRvXG4gICAgdmFyIGlkID0gdGhpcy4kZWxlbWVudFswXS5pZCxcbiAgICAgICR0cmlnZ2VycyA9ICQoYFtkYXRhLW9wZW5+PVwiJHtpZH1cIl0sIFtkYXRhLWNsb3Nlfj1cIiR7aWR9XCJdLCBbZGF0YS10b2dnbGV+PVwiJHtpZH1cIl1gKTtcblxuICAgIHZhciBpbnB1dDtcbiAgICAvLyBQYXJzZSBhbmltYXRpb24gY2xhc3NlcyBpZiB0aGV5IHdlcmUgc2V0XG4gICAgaWYgKHRoaXMub3B0aW9ucy5hbmltYXRlKSB7XG4gICAgICBpbnB1dCA9IHRoaXMub3B0aW9ucy5hbmltYXRlLnNwbGl0KCcgJyk7XG5cbiAgICAgIHRoaXMuYW5pbWF0aW9uSW4gPSBpbnB1dFswXTtcbiAgICAgIHRoaXMuYW5pbWF0aW9uT3V0ID0gaW5wdXRbMV0gfHwgbnVsbDtcblxuICAgICAgLy8gLSBhcmlhLWV4cGFuZGVkOiBhY2NvcmRpbmcgdG8gdGhlIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAgICAgICR0cmlnZ2Vycy5hdHRyKCdhcmlhLWV4cGFuZGVkJywgIXRoaXMuJGVsZW1lbnQuaXMoJzpoaWRkZW4nKSk7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSwgcGFyc2UgdG9nZ2xlIGNsYXNzXG4gICAgZWxzZSB7XG4gICAgICBpbnB1dCA9IHRoaXMub3B0aW9ucy50b2dnbGVyO1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgIWlucHV0Lmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAndG9nZ2xlcicgb3B0aW9uIGNvbnRhaW5pbmcgdGhlIHRhcmdldCBjbGFzcyBpcyByZXF1aXJlZCwgZ290IFwiJHtpbnB1dH1cImApO1xuICAgICAgfVxuICAgICAgLy8gQWxsb3cgZm9yIGEgLiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmdcbiAgICAgIHRoaXMuY2xhc3NOYW1lID0gaW5wdXRbMF0gPT09ICcuJyA/IGlucHV0LnNsaWNlKDEpIDogaW5wdXQ7XG5cbiAgICAgIC8vIC0gYXJpYS1leHBhbmRlZDogYWNjb3JkaW5nIHRvIHRoZSBlbGVtZW50cyBjbGFzcyBzZXQuXG4gICAgICAkdHJpZ2dlcnMuYXR0cignYXJpYS1leHBhbmRlZCcsIHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3ModGhpcy5jbGFzc05hbWUpKTtcbiAgICB9XG5cbiAgICAvLyAtIGFyaWEtY29udHJvbHM6IGFkZGluZyB0aGUgZWxlbWVudCBpZCB0byBpdCBpZiBub3QgYWxyZWFkeSBpbiBpdC5cbiAgICAkdHJpZ2dlcnMuZWFjaCgoaW5kZXgsIHRyaWdnZXIpID0+IHtcbiAgICAgIGNvbnN0ICR0cmlnZ2VyID0gJCh0cmlnZ2VyKTtcbiAgICAgIGNvbnN0IGNvbnRyb2xzID0gJHRyaWdnZXIuYXR0cignYXJpYS1jb250cm9scycpIHx8ICcnO1xuXG4gICAgICBjb25zdCBjb250YWluc0lkID0gbmV3IFJlZ0V4cChgXFxcXGIke1JlZ0V4cEVzY2FwZShpZCl9XFxcXGJgKS50ZXN0KGNvbnRyb2xzKTtcbiAgICAgIGlmICghY29udGFpbnNJZCkgJHRyaWdnZXIuYXR0cignYXJpYS1jb250cm9scycsIGNvbnRyb2xzID8gYCR7Y29udHJvbHN9ICR7aWR9YCA6IGlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBldmVudHMgZm9yIHRoZSB0b2dnbGUgdHJpZ2dlci5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHRoaXMuJGVsZW1lbnQub2ZmKCd0b2dnbGUuemYudHJpZ2dlcicpLm9uKCd0b2dnbGUuemYudHJpZ2dlcicsIHRoaXMudG9nZ2xlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIHRhcmdldCBjbGFzcyBvbiB0aGUgdGFyZ2V0IGVsZW1lbnQuIEFuIGV2ZW50IGlzIGZpcmVkIGZyb20gdGhlIG9yaWdpbmFsIHRyaWdnZXIgZGVwZW5kaW5nIG9uIGlmIHRoZSByZXN1bHRhbnQgc3RhdGUgd2FzIFwib25cIiBvciBcIm9mZlwiLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIFRvZ2dsZXIjb25cbiAgICogQGZpcmVzIFRvZ2dsZXIjb2ZmXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgdGhpc1sgdGhpcy5vcHRpb25zLmFuaW1hdGUgPyAnX3RvZ2dsZUFuaW1hdGUnIDogJ190b2dnbGVDbGFzcyddKCk7XG4gIH1cblxuICBfdG9nZ2xlQ2xhc3MoKSB7XG4gICAgdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcyh0aGlzLmNsYXNzTmFtZSk7XG5cbiAgICB2YXIgaXNPbiA9IHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3ModGhpcy5jbGFzc05hbWUpO1xuICAgIGlmIChpc09uKSB7XG4gICAgICAvKipcbiAgICAgICAqIEZpcmVzIGlmIHRoZSB0YXJnZXQgZWxlbWVudCBoYXMgdGhlIGNsYXNzIGFmdGVyIGEgdG9nZ2xlLlxuICAgICAgICogQGV2ZW50IFRvZ2dsZXIjb25cbiAgICAgICAqL1xuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdvbi56Zi50b2dnbGVyJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXJlcyBpZiB0aGUgdGFyZ2V0IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSB0aGUgY2xhc3MgYWZ0ZXIgYSB0b2dnbGUuXG4gICAgICAgKiBAZXZlbnQgVG9nZ2xlciNvZmZcbiAgICAgICAqL1xuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdvZmYuemYudG9nZ2xlcicpO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUFSSUEoaXNPbik7XG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1tdXRhdGVdJykudHJpZ2dlcignbXV0YXRlbWUuemYudHJpZ2dlcicpO1xuICB9XG5cbiAgX3RvZ2dsZUFuaW1hdGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmICh0aGlzLiRlbGVtZW50LmlzKCc6aGlkZGVuJykpIHtcbiAgICAgIE1vdGlvbi5hbmltYXRlSW4odGhpcy4kZWxlbWVudCwgdGhpcy5hbmltYXRpb25JbiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLl91cGRhdGVBUklBKHRydWUpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ29uLnpmLnRvZ2dsZXInKTtcbiAgICAgICAgdGhpcy5maW5kKCdbZGF0YS1tdXRhdGVdJykudHJpZ2dlcignbXV0YXRlbWUuemYudHJpZ2dlcicpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgTW90aW9uLmFuaW1hdGVPdXQodGhpcy4kZWxlbWVudCwgdGhpcy5hbmltYXRpb25PdXQsIGZ1bmN0aW9uKCkge1xuICAgICAgICBfdGhpcy5fdXBkYXRlQVJJQShmYWxzZSk7XG4gICAgICAgIHRoaXMudHJpZ2dlcignb2ZmLnpmLnRvZ2dsZXInKTtcbiAgICAgICAgdGhpcy5maW5kKCdbZGF0YS1tdXRhdGVdJykudHJpZ2dlcignbXV0YXRlbWUuemYudHJpZ2dlcicpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgX3VwZGF0ZUFSSUEoaXNPbikge1xuICAgIHZhciBpZCA9IHRoaXMuJGVsZW1lbnRbMF0uaWQ7XG4gICAgJChgW2RhdGEtb3Blbj1cIiR7aWR9XCJdLCBbZGF0YS1jbG9zZT1cIiR7aWR9XCJdLCBbZGF0YS10b2dnbGU9XCIke2lkfVwiXWApXG4gICAgICAuYXR0cih7XG4gICAgICAgICdhcmlhLWV4cGFuZGVkJzogaXNPbiA/IHRydWUgOiBmYWxzZVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGluc3RhbmNlIG9mIFRvZ2dsZXIgb24gdGhlIGVsZW1lbnQuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX2Rlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi50b2dnbGVyJyk7XG4gIH1cbn1cblxuVG9nZ2xlci5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIENsYXNzIG9mIHRoZSBlbGVtZW50IHRvIHRvZ2dsZS4gSXQgY2FuIGJlIHByb3ZpZGVkIHdpdGggb3Igd2l0aG91dCBcIi5cIlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICB0b2dnbGVyOiB1bmRlZmluZWQsXG4gIC8qKlxuICAgKiBUZWxscyB0aGUgcGx1Z2luIGlmIHRoZSBlbGVtZW50IHNob3VsZCBhbmltYXRlZCB3aGVuIHRvZ2dsZWQuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhbmltYXRlOiBmYWxzZVxufTtcblxuLyoqXG4gKiBUb29sdGlwIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi50b29sdGlwXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmJveFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tZWRpYVF1ZXJ5XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLnRyaWdnZXJzXG4gKi9cblxuY2xhc3MgVG9vbHRpcCBleHRlbmRzIFBvc2l0aW9uYWJsZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGEgVG9vbHRpcC5cbiAgICogQGNsYXNzXG4gICAqIEBuYW1lIFRvb2x0aXBcbiAgICogQGZpcmVzIFRvb2x0aXAjaW5pdFxuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gYXR0YWNoIGEgdG9vbHRpcCB0by5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvYmplY3QgdG8gZXh0ZW5kIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBfc2V0dXAoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBUb29sdGlwLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG4gICAgdGhpcy5jbGFzc05hbWUgPSAnVG9vbHRpcCc7IC8vIGllOSBiYWNrIGNvbXBhdFxuXG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNDbGljayA9IGZhbHNlO1xuXG4gICAgLy8gVHJpZ2dlcnMgaW5pdCBpcyBpZGVtcG90ZW50LCBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIGl0IGlzIGluaXRpYWxpemVkXG4gICAgVHJpZ2dlcnMuaW5pdCgkKTtcblxuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgdG9vbHRpcCBieSBzZXR0aW5nIHRoZSBjcmVhdGluZyB0aGUgdGlwIGVsZW1lbnQsIGFkZGluZyBpdCdzIHRleHQsIHNldHRpbmcgcHJpdmF0ZSB2YXJpYWJsZXMgYW5kIHNldHRpbmcgYXR0cmlidXRlcyBvbiB0aGUgYW5jaG9yLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgTWVkaWFRdWVyeS5faW5pdCgpO1xuICAgIHZhciBlbGVtSWQgPSB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknKSB8fCBHZXRZb0RpZ2l0cyg2LCAndG9vbHRpcCcpO1xuXG4gICAgdGhpcy5vcHRpb25zLnRpcFRleHQgPSB0aGlzLm9wdGlvbnMudGlwVGV4dCB8fCB0aGlzLiRlbGVtZW50LmF0dHIoJ3RpdGxlJyk7XG4gICAgdGhpcy50ZW1wbGF0ZSA9IHRoaXMub3B0aW9ucy50ZW1wbGF0ZSA/ICQodGhpcy5vcHRpb25zLnRlbXBsYXRlKSA6IHRoaXMuX2J1aWxkVGVtcGxhdGUoZWxlbUlkKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dIdG1sKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpXG4gICAgICAgIC5odG1sKHRoaXMub3B0aW9ucy50aXBUZXh0KVxuICAgICAgICAuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRlbXBsYXRlLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpXG4gICAgICAgIC50ZXh0KHRoaXMub3B0aW9ucy50aXBUZXh0KVxuICAgICAgICAuaGlkZSgpO1xuICAgIH1cblxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cih7XG4gICAgICAndGl0bGUnOiAnJyxcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogZWxlbUlkLFxuICAgICAgJ2RhdGEteWV0aS1ib3gnOiBlbGVtSWQsXG4gICAgICAnZGF0YS10b2dnbGUnOiBlbGVtSWQsXG4gICAgICAnZGF0YS1yZXNpemUnOiBlbGVtSWRcbiAgICB9KS5hZGRDbGFzcyh0aGlzLm9wdGlvbnMudHJpZ2dlckNsYXNzKTtcblxuICAgIHN1cGVyLl9pbml0KCk7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICBfZ2V0RGVmYXVsdFBvc2l0aW9uKCkge1xuICAgIC8vIGhhbmRsZSBsZWdhY3kgY2xhc3NuYW1lc1xuICAgIHZhciBlbGVtZW50Q2xhc3NOYW1lID0gdGhpcy4kZWxlbWVudFswXS5jbGFzc05hbWU7XG4gICAgaWYgKHRoaXMuJGVsZW1lbnRbMF0gaW5zdGFuY2VvZiBTVkdFbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnRDbGFzc05hbWUgPSBlbGVtZW50Q2xhc3NOYW1lLmJhc2VWYWw7XG4gICAgfVxuICAgIHZhciBwb3NpdGlvbiA9IGVsZW1lbnRDbGFzc05hbWUubWF0Y2goL1xcYih0b3B8bGVmdHxyaWdodHxib3R0b20pXFxiL2cpO1xuICAgIHJldHVybiBwb3NpdGlvbiA/IHBvc2l0aW9uWzBdIDogJ3RvcCc7XG4gIH1cblxuICBfZ2V0RGVmYXVsdEFsaWdubWVudCgpIHtcbiAgICByZXR1cm4gJ2NlbnRlcic7XG4gIH1cblxuICBfZ2V0SE9mZnNldCgpIHtcbiAgICBpZih0aGlzLnBvc2l0aW9uID09PSAnbGVmdCcgfHwgdGhpcy5wb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5oT2Zmc2V0ICsgdGhpcy5vcHRpb25zLnRvb2x0aXBXaWR0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5oT2Zmc2V0XG4gICAgfVxuICB9XG5cbiAgX2dldFZPZmZzZXQoKSB7XG4gICAgaWYodGhpcy5wb3NpdGlvbiA9PT0gJ3RvcCcgfHwgdGhpcy5wb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMudk9mZnNldCArIHRoaXMub3B0aW9ucy50b29sdGlwSGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZPZmZzZXRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogYnVpbGRzIHRoZSB0b29sdGlwIGVsZW1lbnQsIGFkZHMgYXR0cmlidXRlcywgYW5kIHJldHVybnMgdGhlIHRlbXBsYXRlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2J1aWxkVGVtcGxhdGUoaWQpIHtcbiAgICB2YXIgdGVtcGxhdGVDbGFzc2VzID0gKGAke3RoaXMub3B0aW9ucy50b29sdGlwQ2xhc3N9ICR7dGhpcy5vcHRpb25zLnRlbXBsYXRlQ2xhc3Nlc31gKS50cmltKCk7XG4gICAgdmFyICR0ZW1wbGF0ZSA9ICAkKCc8ZGl2PjwvZGl2PicpLmFkZENsYXNzKHRlbXBsYXRlQ2xhc3NlcykuYXR0cih7XG4gICAgICAncm9sZSc6ICd0b29sdGlwJyxcbiAgICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgICAnZGF0YS1pcy1hY3RpdmUnOiBmYWxzZSxcbiAgICAgICdkYXRhLWlzLWZvY3VzJzogZmFsc2UsXG4gICAgICAnaWQnOiBpZFxuICAgIH0pO1xuICAgIHJldHVybiAkdGVtcGxhdGU7XG4gIH1cblxuICAvKipcbiAgICogc2V0cyB0aGUgcG9zaXRpb24gY2xhc3Mgb2YgYW4gZWxlbWVudCBhbmQgcmVjdXJzaXZlbHkgY2FsbHMgaXRzZWxmIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIHBvc3NpYmxlIHBvc2l0aW9ucyB0byBhdHRlbXB0LCBvciB0aGUgdG9vbHRpcCBlbGVtZW50IGlzIG5vIGxvbmdlciBjb2xsaWRpbmcuXG4gICAqIGlmIHRoZSB0b29sdGlwIGlzIGxhcmdlciB0aGFuIHRoZSBzY3JlZW4gd2lkdGgsIGRlZmF1bHQgdG8gZnVsbCB3aWR0aCAtIGFueSB1c2VyIHNlbGVjdGVkIG1hcmdpblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFBvc2l0aW9uKCkge1xuICAgIHN1cGVyLl9zZXRQb3NpdGlvbih0aGlzLiRlbGVtZW50LCB0aGlzLnRlbXBsYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXZlYWxzIHRoZSB0b29sdGlwLCBhbmQgZmlyZXMgYW4gZXZlbnQgdG8gY2xvc2UgYW55IG90aGVyIG9wZW4gdG9vbHRpcHMgb24gdGhlIHBhZ2VcbiAgICogQGZpcmVzIFRvb2x0aXAjY2xvc2VtZVxuICAgKiBAZmlyZXMgVG9vbHRpcCNzaG93XG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNob3dPbiAhPT0gJ2FsbCcgJiYgIU1lZGlhUXVlcnkuaXModGhpcy5vcHRpb25zLnNob3dPbikpIHtcbiAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ1RoZSBzY3JlZW4gaXMgdG9vIHNtYWxsIHRvIGRpc3BsYXkgdGhpcyB0b29sdGlwJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLnRlbXBsYXRlLmNzcygndmlzaWJpbGl0eScsICdoaWRkZW4nKS5zaG93KCk7XG4gICAgdGhpcy5fc2V0UG9zaXRpb24oKTtcbiAgICB0aGlzLnRlbXBsYXRlLnJlbW92ZUNsYXNzKCd0b3AgYm90dG9tIGxlZnQgcmlnaHQnKS5hZGRDbGFzcyh0aGlzLnBvc2l0aW9uKTtcbiAgICB0aGlzLnRlbXBsYXRlLnJlbW92ZUNsYXNzKCdhbGlnbi10b3AgYWxpZ24tYm90dG9tIGFsaWduLWxlZnQgYWxpZ24tcmlnaHQgYWxpZ24tY2VudGVyJykuYWRkQ2xhc3MoJ2FsaWduLScgKyB0aGlzLmFsaWdubWVudCk7XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyB0byBjbG9zZSBhbGwgb3RoZXIgb3BlbiB0b29sdGlwcyBvbiB0aGUgcGFnZVxuICAgICAqIEBldmVudCBDbG9zZW1lI3Rvb2x0aXBcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2Nsb3NlbWUuemYudG9vbHRpcCcsIHRoaXMudGVtcGxhdGUuYXR0cignaWQnKSk7XG5cblxuICAgIHRoaXMudGVtcGxhdGUuYXR0cih7XG4gICAgICAnZGF0YS1pcy1hY3RpdmUnOiB0cnVlLFxuICAgICAgJ2FyaWEtaGlkZGVuJzogZmFsc2VcbiAgICB9KTtcbiAgICBfdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy50ZW1wbGF0ZS5zdG9wKCkuaGlkZSgpLmNzcygndmlzaWJpbGl0eScsICcnKS5mYWRlSW4odGhpcy5vcHRpb25zLmZhZGVJbkR1cmF0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIC8vbWF5YmUgZG8gc3R1ZmY/XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgdG9vbHRpcCBpcyBzaG93blxuICAgICAqIEBldmVudCBUb29sdGlwI3Nob3dcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3Nob3cuemYudG9vbHRpcCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGVzIHRoZSBjdXJyZW50IHRvb2x0aXAsIGFuZCByZXNldHMgdGhlIHBvc2l0aW9uaW5nIGNsYXNzIGlmIGl0IHdhcyBjaGFuZ2VkIGR1ZSB0byBjb2xsaXNpb25cbiAgICogQGZpcmVzIFRvb2x0aXAjaGlkZVxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGhpZGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLnRlbXBsYXRlLnN0b3AoKS5hdHRyKHtcbiAgICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgICAnZGF0YS1pcy1hY3RpdmUnOiBmYWxzZVxuICAgIH0pLmZhZGVPdXQodGhpcy5vcHRpb25zLmZhZGVPdXREdXJhdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICBfdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgX3RoaXMuaXNDbGljayA9IGZhbHNlO1xuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIGZpcmVzIHdoZW4gdGhlIHRvb2x0aXAgaXMgaGlkZGVuXG4gICAgICogQGV2ZW50IFRvb2x0aXAjaGlkZVxuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignaGlkZS56Zi50b29sdGlwJyk7XG4gIH1cblxuICAvKipcbiAgICogYWRkcyBldmVudCBsaXN0ZW5lcnMgZm9yIHRoZSB0b29sdGlwIGFuZCBpdHMgYW5jaG9yXG4gICAqIFRPRE8gY29tYmluZSBzb21lIG9mIHRoZSBsaXN0ZW5lcnMgbGlrZSBmb2N1cyBhbmQgbW91c2VlbnRlciwgZXRjLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgY29uc3QgaGFzVG91Y2ggPSAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHwgKHR5cGVvZiB3aW5kb3cub250b3VjaHN0YXJ0ICE9PSAndW5kZWZpbmVkJyk7XG4gICAgdmFyIGlzRm9jdXMgPSBmYWxzZTtcblxuICAgIC8vIGBkaXNhYmxlRm9yVG91Y2g6IEZ1bGx5IGRpc2FibGUgdGhlIHRvb2x0aXAgb24gdG91Y2ggZGV2aWNlc1xuICAgIGlmIChoYXNUb3VjaCAmJiB0aGlzLm9wdGlvbnMuZGlzYWJsZUZvclRvdWNoKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5kaXNhYmxlSG92ZXIpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5vbignbW91c2VlbnRlci56Zi50b29sdGlwJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghX3RoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICBfdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIF90aGlzLnNob3coKTtcbiAgICAgICAgICB9LCBfdGhpcy5vcHRpb25zLmhvdmVyRGVsYXkpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm9uKCdtb3VzZWxlYXZlLnpmLnRvb2x0aXAnLCBpZ25vcmVNb3VzZWRpc2FwcGVhcihmdW5jdGlvbigpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnRpbWVvdXQpO1xuICAgICAgICBpZiAoIWlzRm9jdXMgfHwgKF90aGlzLmlzQ2xpY2sgJiYgIV90aGlzLm9wdGlvbnMuY2xpY2tPcGVuKSkge1xuICAgICAgICAgIF90aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmIChoYXNUb3VjaCkge1xuICAgICAgdGhpcy4kZWxlbWVudFxuICAgICAgLm9uKCd0YXAuemYudG9vbHRpcCB0b3VjaGVuZC56Zi50b29sdGlwJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5pc0FjdGl2ZSA/IF90aGlzLmhpZGUoKSA6IF90aGlzLnNob3coKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xpY2tPcGVuKSB7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCdtb3VzZWRvd24uemYudG9vbHRpcCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoX3RoaXMuaXNDbGljaykgOyBlbHNlIHtcbiAgICAgICAgICBfdGhpcy5pc0NsaWNrID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoKF90aGlzLm9wdGlvbnMuZGlzYWJsZUhvdmVyIHx8ICFfdGhpcy4kZWxlbWVudC5hdHRyKCd0YWJpbmRleCcpKSAmJiAhX3RoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIF90aGlzLnNob3coKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCdtb3VzZWRvd24uemYudG9vbHRpcCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICBfdGhpcy5pc0NsaWNrID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuJGVsZW1lbnQub24oe1xuICAgICAgLy8gJ3RvZ2dsZS56Zi50cmlnZ2VyJzogdGhpcy50b2dnbGUuYmluZCh0aGlzKSxcbiAgICAgIC8vICdjbG9zZS56Zi50cmlnZ2VyJzogdGhpcy5oaWRlLmJpbmQodGhpcylcbiAgICAgICdjbG9zZS56Zi50cmlnZ2VyJzogdGhpcy5oaWRlLmJpbmQodGhpcylcbiAgICB9KTtcblxuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5vbignZm9jdXMuemYudG9vbHRpcCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICBpc0ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgaWYgKF90aGlzLmlzQ2xpY2spIHtcbiAgICAgICAgICAvLyBJZiB3ZSdyZSBub3Qgc2hvd2luZyBvcGVuIG9uIGNsaWNrcywgd2UgbmVlZCB0byBwcmV0ZW5kIGEgY2xpY2stbGF1bmNoZWQgZm9jdXMgaXNuJ3RcbiAgICAgICAgICAvLyBhIHJlYWwgZm9jdXMsIG90aGVyd2lzZSBvbiBob3ZlciBhbmQgY29tZSBiYWNrIHdlIGdldCBiYWQgYmVoYXZpb3JcbiAgICAgICAgICBpZighX3RoaXMub3B0aW9ucy5jbGlja09wZW4pIHsgaXNGb2N1cyA9IGZhbHNlOyB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLnNob3coKTtcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLm9uKCdmb2N1c291dC56Zi50b29sdGlwJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlzRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaXNDbGljayA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5oaWRlKCk7XG4gICAgICB9KVxuXG4gICAgICAub24oJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInLCBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKF90aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgX3RoaXMuX3NldFBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGFkZHMgYSB0b2dnbGUgbWV0aG9kLCBpbiBhZGRpdGlvbiB0byB0aGUgc3RhdGljIHNob3coKSAmIGhpZGUoKSBmdW5jdGlvbnNcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3coKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgYW4gaW5zdGFuY2Ugb2YgdG9vbHRpcCwgcmVtb3ZlcyB0ZW1wbGF0ZSBlbGVtZW50IGZyb20gdGhlIHZpZXcuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX2Rlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKCd0aXRsZScsIHRoaXMudGVtcGxhdGUudGV4dCgpKVxuICAgICAgICAgICAgICAgICAub2ZmKCcuemYudHJpZ2dlciAuemYudG9vbHRpcCcpXG4gICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMudHJpZ2dlckNsYXNzKVxuICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3RvcCByaWdodCBsZWZ0IGJvdHRvbScpXG4gICAgICAgICAgICAgICAgIC5yZW1vdmVBdHRyKCdhcmlhLWRlc2NyaWJlZGJ5IGRhdGEtZGlzYWJsZS1ob3ZlciBkYXRhLXJlc2l6ZSBkYXRhLXRvZ2dsZSBkYXRhLXRvb2x0aXAgZGF0YS15ZXRpLWJveCcpO1xuXG4gICAgdGhpcy50ZW1wbGF0ZS5yZW1vdmUoKTtcbiAgfVxufVxuXG5Ub29sdGlwLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogVGltZSwgaW4gbXMsIGJlZm9yZSBhIHRvb2x0aXAgc2hvdWxkIG9wZW4gb24gaG92ZXIuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMjAwXG4gICAqL1xuICBob3ZlckRlbGF5OiAyMDAsXG4gIC8qKlxuICAgKiBUaW1lLCBpbiBtcywgYSB0b29sdGlwIHNob3VsZCB0YWtlIHRvIGZhZGUgaW50byB2aWV3LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDE1MFxuICAgKi9cbiAgZmFkZUluRHVyYXRpb246IDE1MCxcbiAgLyoqXG4gICAqIFRpbWUsIGluIG1zLCBhIHRvb2x0aXAgc2hvdWxkIHRha2UgdG8gZmFkZSBvdXQgb2Ygdmlldy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAxNTBcbiAgICovXG4gIGZhZGVPdXREdXJhdGlvbjogMTUwLFxuICAvKipcbiAgICogRGlzYWJsZXMgaG92ZXIgZXZlbnRzIGZyb20gb3BlbmluZyB0aGUgdG9vbHRpcCBpZiBzZXQgdG8gdHJ1ZVxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUhvdmVyOiBmYWxzZSxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHRvb2x0aXAgZm9yIHRvdWNoIGRldmljZXMuXG4gICAqIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBtYWtlIGVsZW1lbnRzIHdpdGggYSB0b29sdGlwIG9uIGl0IHRyaWdnZXIgdGhlaXJcbiAgICogYWN0aW9uIG9uIHRoZSBmaXJzdCB0YXAgaW5zdGVhZCBvZiBkaXNwbGF5aW5nIHRoZSB0b29sdGlwLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29lbGFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUZvclRvdWNoOiBmYWxzZSxcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFkZHRpb25hbCBjbGFzc2VzIHRvIGFwcGx5IHRvIHRoZSB0b29sdGlwIHRlbXBsYXRlIG9uIGluaXQuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIHRlbXBsYXRlQ2xhc3NlczogJycsXG4gIC8qKlxuICAgKiBOb24tb3B0aW9uYWwgY2xhc3MgYWRkZWQgdG8gdG9vbHRpcCB0ZW1wbGF0ZXMuIEZvdW5kYXRpb24gZGVmYXVsdCBpcyAndG9vbHRpcCcuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ3Rvb2x0aXAnXG4gICAqL1xuICB0b29sdGlwQ2xhc3M6ICd0b29sdGlwJyxcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gdGhlIHRvb2x0aXAgYW5jaG9yIGVsZW1lbnQuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2hhcy10aXAnXG4gICAqL1xuICB0cmlnZ2VyQ2xhc3M6ICdoYXMtdGlwJyxcbiAgLyoqXG4gICAqIE1pbmltdW0gYnJlYWtwb2ludCBzaXplIGF0IHdoaWNoIHRvIG9wZW4gdGhlIHRvb2x0aXAuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ3NtYWxsJ1xuICAgKi9cbiAgc2hvd09uOiAnc21hbGwnLFxuICAvKipcbiAgICogQ3VzdG9tIHRlbXBsYXRlIHRvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgbWFya3VwIGZvciB0b29sdGlwLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICB0ZW1wbGF0ZTogJycsXG4gIC8qKlxuICAgKiBUZXh0IGRpc3BsYXllZCBpbiB0aGUgdG9vbHRpcCB0ZW1wbGF0ZSBvbiBvcGVuLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICB0aXBUZXh0OiAnJyxcbiAgdG91Y2hDbG9zZVRleHQ6ICdUYXAgdG8gY2xvc2UuJyxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgdG9vbHRpcCB0byByZW1haW4gb3BlbiBpZiB0cmlnZ2VyZWQgd2l0aCBhIGNsaWNrIG9yIHRvdWNoIGV2ZW50LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBjbGlja09wZW46IHRydWUsXG4gIC8qKlxuICAgKiBQb3NpdGlvbiBvZiB0b29sdGlwLiBDYW4gYmUgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBvciBhdXRvLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgcG9zaXRpb246ICdhdXRvJyxcbiAgLyoqXG4gICAqIEFsaWdubWVudCBvZiB0b29sdGlwIHJlbGF0aXZlIHRvIGFuY2hvci4gQ2FuIGJlIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgY2VudGVyLCBvciBhdXRvLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgYWxpZ25tZW50OiAnYXV0bycsXG4gIC8qKlxuICAgKiBBbGxvdyBvdmVybGFwIG9mIGNvbnRhaW5lci93aW5kb3cuIElmIGZhbHNlLCB0b29sdGlwIHdpbGwgZmlyc3QgdHJ5IHRvXG4gICAqIHBvc2l0aW9uIGFzIGRlZmluZWQgYnkgZGF0YS1wb3NpdGlvbiBhbmQgZGF0YS1hbGlnbm1lbnQsIGJ1dCByZXBvc2l0aW9uIGlmXG4gICAqIGl0IHdvdWxkIGNhdXNlIGFuIG92ZXJmbG93LiAgQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGFsbG93T3ZlcmxhcDogZmFsc2UsXG4gIC8qKlxuICAgKiBBbGxvdyBvdmVybGFwIG9mIG9ubHkgdGhlIGJvdHRvbSBvZiB0aGUgY29udGFpbmVyLiBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vblxuICAgKiBiZWhhdmlvciBmb3IgZHJvcGRvd25zLCBhbGxvd2luZyB0aGUgZHJvcGRvd24gdG8gZXh0ZW5kIHRoZSBib3R0b20gb2YgdGhlXG4gICAqIHNjcmVlbiBidXQgbm90IG90aGVyd2lzZSBpbmZsdWVuY2Ugb3IgYnJlYWsgb3V0IG9mIHRoZSBjb250YWluZXIuXG4gICAqIExlc3MgY29tbW9uIGZvciB0b29sdGlwcy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGFsbG93Qm90dG9tT3ZlcmxhcDogZmFsc2UsXG4gIC8qKlxuICAgKiBEaXN0YW5jZSwgaW4gcGl4ZWxzLCB0aGUgdGVtcGxhdGUgc2hvdWxkIHB1c2ggYXdheSBmcm9tIHRoZSBhbmNob3Igb24gdGhlIFkgYXhpcy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB2T2Zmc2V0OiAwLFxuICAvKipcbiAgICogRGlzdGFuY2UsIGluIHBpeGVscywgdGhlIHRlbXBsYXRlIHNob3VsZCBwdXNoIGF3YXkgZnJvbSB0aGUgYW5jaG9yIG9uIHRoZSBYIGF4aXNcbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBoT2Zmc2V0OiAwLFxuICAvKipcbiAgICogRGlzdGFuY2UsIGluIHBpeGVscywgdGhlIHRlbXBsYXRlIHNwYWNpbmcgYXV0by1hZGp1c3QgZm9yIGEgdmVydGljYWwgdG9vbHRpcFxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDE0XG4gICAqL1xuICB0b29sdGlwSGVpZ2h0OiAxNCxcbiAgLyoqXG4gICAqIERpc3RhbmNlLCBpbiBwaXhlbHMsIHRoZSB0ZW1wbGF0ZSBzcGFjaW5nIGF1dG8tYWRqdXN0IGZvciBhIGhvcml6b250YWwgdG9vbHRpcFxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDEyXG4gICAqL1xuICB0b29sdGlwV2lkdGg6IDEyLFxuICAgIC8qKlxuICAgKiBBbGxvdyBIVE1MIGluIHRvb2x0aXAuIFdhcm5pbmc6IElmIHlvdSBhcmUgbG9hZGluZyB1c2VyLWdlbmVyYXRlZCBjb250ZW50IGludG8gdG9vbHRpcHMsXG4gICAqIGFsbG93aW5nIEhUTUwgbWF5IG9wZW4geW91cnNlbGYgdXAgdG8gWFNTIGF0dGFja3MuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhbGxvd0h0bWw6IGZhbHNlXG59O1xuXG4vLyBUaGUgcGx1Z2luIG1hdGNoZXMgdGhlIHBsdWdpbiBjbGFzc2VzIHdpdGggdGhlc2UgcGx1Z2luIGluc3RhbmNlcy5cbnZhciBNZW51UGx1Z2lucyQxID0ge1xuICB0YWJzOiB7XG4gICAgY3NzQ2xhc3M6ICd0YWJzJyxcbiAgICBwbHVnaW46ICAgVGFicyxcbiAgICBvcGVuOiAgICAgKHBsdWdpbiwgdGFyZ2V0KSA9PiBwbHVnaW4uc2VsZWN0VGFiKHRhcmdldCksXG4gICAgY2xvc2U6ICAgIG51bGwgLyogbm90IHN1cHBvcnRlZCAqLyxcbiAgICB0b2dnbGU6ICAgbnVsbCAvKiBub3Qgc3VwcG9ydGVkICovLFxuICB9LFxuICBhY2NvcmRpb246IHtcbiAgICBjc3NDbGFzczogJ2FjY29yZGlvbicsXG4gICAgcGx1Z2luOiAgIEFjY29yZGlvbixcbiAgICBvcGVuOiAgICAgKHBsdWdpbiwgdGFyZ2V0KSA9PiBwbHVnaW4uZG93bigkKHRhcmdldCkpLFxuICAgIGNsb3NlOiAgICAocGx1Z2luLCB0YXJnZXQpID0+IHBsdWdpbi51cCgkKHRhcmdldCkpLFxuICAgIHRvZ2dsZTogICAocGx1Z2luLCB0YXJnZXQpID0+IHBsdWdpbi50b2dnbGUoJCh0YXJnZXQpKSxcbiAgfVxufTtcblxuXG4vKipcbiAqIFJlc3BvbnNpdmVBY2NvcmRpb25UYWJzIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5yZXNwb25zaXZlQWNjb3JkaW9uVGFic1xuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tb3Rpb25cbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLmFjY29yZGlvblxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udGFic1xuICovXG5cbmNsYXNzIFJlc3BvbnNpdmVBY2NvcmRpb25UYWJzIGV4dGVuZHMgUGx1Z2lue1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yZWZsb3cgJiYgdGhpcy5zdG9yZXpmRGF0YSB8fCB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYSByZXNwb25zaXZlIGFjY29yZGlvbiB0YWJzLlxuICAgKiBAY2xhc3NcbiAgICogQG5hbWUgUmVzcG9uc2l2ZUFjY29yZGlvblRhYnNcbiAgICogQGZpcmVzIFJlc3BvbnNpdmVBY2NvcmRpb25UYWJzI2luaXRcbiAgICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIG1ha2UgaW50byBSZXNwb25zaXZlIEFjY29yZGlvbiBUYWJzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBfc2V0dXAoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgIHRoaXMuJGVsZW1lbnQuZGF0YSgnemZQbHVnaW5CYXNlJywgdGhpcyk7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIFJlc3BvbnNpdmVBY2NvcmRpb25UYWJzLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLnJ1bGVzID0gdGhpcy4kZWxlbWVudC5kYXRhKCdyZXNwb25zaXZlLWFjY29yZGlvbi10YWJzJyk7XG4gICAgdGhpcy5jdXJyZW50TXEgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJ1bGUgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFBsdWdpbiA9IG51bGw7XG4gICAgdGhpcy5jbGFzc05hbWUgPSAnUmVzcG9uc2l2ZUFjY29yZGlvblRhYnMnOyAvLyBpZTkgYmFjayBjb21wYXRcbiAgICBpZiAoIXRoaXMuJGVsZW1lbnQuYXR0cignaWQnKSkge1xuICAgICAgdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcsR2V0WW9EaWdpdHMoNiwgJ3Jlc3BvbnNpdmVhY2NvcmRpb250YWJzJykpO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXQoKTtcbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgTWVudSBieSBwYXJzaW5nIHRoZSBjbGFzc2VzIGZyb20gdGhlICdkYXRhLXJlc3BvbnNpdmUtYWNjb3JkaW9uLXRhYnMnIGF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICBNZWRpYVF1ZXJ5Ll9pbml0KCk7XG5cbiAgICAvLyBUaGUgZmlyc3QgdGltZSBhbiBJbnRlcmNoYW5nZSBwbHVnaW4gaXMgaW5pdGlhbGl6ZWQsIHRoaXMucnVsZXMgaXMgY29udmVydGVkIGZyb20gYSBzdHJpbmcgb2YgXCJjbGFzc2VzXCIgdG8gYW4gb2JqZWN0IG9mIHJ1bGVzXG4gICAgaWYgKHR5cGVvZiB0aGlzLnJ1bGVzID09PSAnc3RyaW5nJykge1xuICAgICAgbGV0IHJ1bGVzVHJlZSA9IHt9O1xuXG4gICAgICAvLyBQYXJzZSBydWxlcyBmcm9tIFwiY2xhc3Nlc1wiIHB1bGxlZCBmcm9tIGRhdGEgYXR0cmlidXRlXG4gICAgICBsZXQgcnVsZXMgPSB0aGlzLnJ1bGVzLnNwbGl0KCcgJyk7XG5cbiAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBldmVyeSBydWxlIGZvdW5kXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBydWxlID0gcnVsZXNbaV0uc3BsaXQoJy0nKTtcbiAgICAgICAgbGV0IHJ1bGVTaXplID0gcnVsZS5sZW5ndGggPiAxID8gcnVsZVswXSA6ICdzbWFsbCc7XG4gICAgICAgIGxldCBydWxlUGx1Z2luID0gcnVsZS5sZW5ndGggPiAxID8gcnVsZVsxXSA6IHJ1bGVbMF07XG5cbiAgICAgICAgaWYgKE1lbnVQbHVnaW5zJDFbcnVsZVBsdWdpbl0gIT09IG51bGwpIHtcbiAgICAgICAgICBydWxlc1RyZWVbcnVsZVNpemVdID0gTWVudVBsdWdpbnMkMVtydWxlUGx1Z2luXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJ1bGVzID0gcnVsZXNUcmVlO1xuICAgIH1cblxuICAgIHRoaXMuX2dldEFsbE9wdGlvbnMoKTtcblxuICAgIGlmICghJC5pc0VtcHR5T2JqZWN0KHRoaXMucnVsZXMpKSB7XG4gICAgICB0aGlzLl9jaGVja01lZGlhUXVlcmllcygpO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRBbGxPcHRpb25zKCkge1xuICAgIC8vZ2V0IGFsbCBkZWZhdWx0cyBhbmQgb3B0aW9uc1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgX3RoaXMuYWxsT3B0aW9ucyA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBNZW51UGx1Z2lucyQxKSB7XG4gICAgICBpZiAoTWVudVBsdWdpbnMkMS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHZhciBvYmogPSBNZW51UGx1Z2lucyQxW2tleV07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIGR1bW15UGx1Z2luID0gJCgnPHVsPjwvdWw+Jyk7XG4gICAgICAgICAgdmFyIHRtcFBsdWdpbiA9IG5ldyBvYmoucGx1Z2luKGR1bW15UGx1Z2luLF90aGlzLm9wdGlvbnMpO1xuICAgICAgICAgIGZvciAodmFyIGtleUtleSBpbiB0bXBQbHVnaW4ub3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKHRtcFBsdWdpbi5vcHRpb25zLmhhc093blByb3BlcnR5KGtleUtleSkgJiYga2V5S2V5ICE9PSAnemZQbHVnaW4nKSB7XG4gICAgICAgICAgICAgIHZhciBvYmpPYmogPSB0bXBQbHVnaW4ub3B0aW9uc1trZXlLZXldO1xuICAgICAgICAgICAgICBfdGhpcy5hbGxPcHRpb25zW2tleUtleV0gPSBvYmpPYmo7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRtcFBsdWdpbi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2goZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgV2FybmluZzogUHJvYmxlbXMgZ2V0dGluZyBBY2NvcmRpb24vVGFiIG9wdGlvbnM6ICR7ZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBldmVudHMgZm9yIHRoZSBNZW51LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdGhpcy5fY2hhbmdlZFpmTWVkaWFRdWVyeUhhbmRsZXIgPSB0aGlzLl9jaGVja01lZGlhUXVlcmllcy5iaW5kKHRoaXMpO1xuICAgICQod2luZG93KS5vbignY2hhbmdlZC56Zi5tZWRpYXF1ZXJ5JywgdGhpcy5fY2hhbmdlZFpmTWVkaWFRdWVyeUhhbmRsZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgY3VycmVudCBzY3JlZW4gd2lkdGggYWdhaW5zdCBhdmFpbGFibGUgbWVkaWEgcXVlcmllcy4gSWYgdGhlIG1lZGlhIHF1ZXJ5IGhhcyBjaGFuZ2VkLCBhbmQgdGhlIHBsdWdpbiBuZWVkZWQgaGFzIGNoYW5nZWQsIHRoZSBwbHVnaW5zIHdpbGwgc3dhcCBvdXQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrTWVkaWFRdWVyaWVzKCkge1xuICAgIHZhciBtYXRjaGVkTXEsIF90aGlzID0gdGhpcztcbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBydWxlIGFuZCBmaW5kIHRoZSBsYXN0IG1hdGNoaW5nIHJ1bGVcbiAgICAkLmVhY2godGhpcy5ydWxlcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICBpZiAoTWVkaWFRdWVyeS5hdExlYXN0KGtleSkpIHtcbiAgICAgICAgbWF0Y2hlZE1xID0ga2V5O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTm8gbWF0Y2g/IE5vIGRpY2VcbiAgICBpZiAoIW1hdGNoZWRNcSkgcmV0dXJuO1xuXG4gICAgLy8gUGx1Z2luIGFscmVhZHkgaW5pdGlhbGl6ZWQ/IFdlIGdvb2RcbiAgICBpZiAodGhpcy5jdXJyZW50UGx1Z2luIGluc3RhbmNlb2YgdGhpcy5ydWxlc1ttYXRjaGVkTXFdLnBsdWdpbikgcmV0dXJuO1xuXG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIHBsdWdpbi1zcGVjaWZpYyBDU1MgY2xhc3Nlc1xuICAgICQuZWFjaChNZW51UGx1Z2lucyQxLCBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgICBfdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyh2YWx1ZS5jc3NDbGFzcyk7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgdGhlIENTUyBjbGFzcyBmb3IgdGhlIG5ldyBwbHVnaW5cbiAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMucnVsZXNbbWF0Y2hlZE1xXS5jc3NDbGFzcyk7XG5cbiAgICAvLyBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIG5ldyBwbHVnaW5cbiAgICBpZiAodGhpcy5jdXJyZW50UGx1Z2luKSB7XG4gICAgICAvL2Rvbid0IGtub3cgd2h5IGJ1dCBvbiBuZXN0ZWQgZWxlbWVudHMgZGF0YSB6ZlBsdWdpbiBnZXQncyBsb3N0XG4gICAgICBpZiAoIXRoaXMuY3VycmVudFBsdWdpbi4kZWxlbWVudC5kYXRhKCd6ZlBsdWdpbicpICYmIHRoaXMuc3RvcmV6ZkRhdGEpIHRoaXMuY3VycmVudFBsdWdpbi4kZWxlbWVudC5kYXRhKCd6ZlBsdWdpbicsdGhpcy5zdG9yZXpmRGF0YSk7XG4gICAgICB0aGlzLmN1cnJlbnRQbHVnaW4uZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLl9oYW5kbGVNYXJrdXAodGhpcy5ydWxlc1ttYXRjaGVkTXFdLmNzc0NsYXNzKTtcbiAgICB0aGlzLmN1cnJlbnRSdWxlID0gdGhpcy5ydWxlc1ttYXRjaGVkTXFdO1xuICAgIHRoaXMuY3VycmVudFBsdWdpbiA9IG5ldyB0aGlzLmN1cnJlbnRSdWxlLnBsdWdpbih0aGlzLiRlbGVtZW50LCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuc3RvcmV6ZkRhdGEgPSB0aGlzLmN1cnJlbnRQbHVnaW4uJGVsZW1lbnQuZGF0YSgnemZQbHVnaW4nKTtcblxuICB9XG5cbiAgX2hhbmRsZU1hcmt1cCh0b1NldCl7XG4gICAgdmFyIF90aGlzID0gdGhpcywgZnJvbVN0cmluZyA9ICdhY2NvcmRpb24nO1xuICAgIHZhciAkcGFuZWxzID0gJCgnW2RhdGEtdGFicy1jb250ZW50PScrdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpKyddJyk7XG4gICAgaWYgKCRwYW5lbHMubGVuZ3RoKSBmcm9tU3RyaW5nID0gJ3RhYnMnO1xuICAgIGlmIChmcm9tU3RyaW5nID09PSB0b1NldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0YWJzVGl0bGUgPSBfdGhpcy5hbGxPcHRpb25zLmxpbmtDbGFzcz9fdGhpcy5hbGxPcHRpb25zLmxpbmtDbGFzczondGFicy10aXRsZSc7XG4gICAgdmFyIHRhYnNQYW5lbCA9IF90aGlzLmFsbE9wdGlvbnMucGFuZWxDbGFzcz9fdGhpcy5hbGxPcHRpb25zLnBhbmVsQ2xhc3M6J3RhYnMtcGFuZWwnO1xuXG4gICAgdGhpcy4kZWxlbWVudC5yZW1vdmVBdHRyKCdyb2xlJyk7XG4gICAgdmFyICRsaUhlYWRzID0gdGhpcy4kZWxlbWVudC5jaGlsZHJlbignLicrdGFic1RpdGxlKycsW2RhdGEtYWNjb3JkaW9uLWl0ZW1dJykucmVtb3ZlQ2xhc3ModGFic1RpdGxlKS5yZW1vdmVDbGFzcygnYWNjb3JkaW9uLWl0ZW0nKS5yZW1vdmVBdHRyKCdkYXRhLWFjY29yZGlvbi1pdGVtJyk7XG4gICAgdmFyICRsaUhlYWRzQSA9ICRsaUhlYWRzLmNoaWxkcmVuKCdhJykucmVtb3ZlQ2xhc3MoJ2FjY29yZGlvbi10aXRsZScpO1xuXG4gICAgaWYgKGZyb21TdHJpbmcgPT09ICd0YWJzJykge1xuICAgICAgJHBhbmVscyA9ICRwYW5lbHMuY2hpbGRyZW4oJy4nK3RhYnNQYW5lbCkucmVtb3ZlQ2xhc3ModGFic1BhbmVsKS5yZW1vdmVBdHRyKCdyb2xlJykucmVtb3ZlQXR0cignYXJpYS1oaWRkZW4nKS5yZW1vdmVBdHRyKCdhcmlhLWxhYmVsbGVkYnknKTtcbiAgICAgICRwYW5lbHMuY2hpbGRyZW4oJ2EnKS5yZW1vdmVBdHRyKCdyb2xlJykucmVtb3ZlQXR0cignYXJpYS1jb250cm9scycpLnJlbW92ZUF0dHIoJ2FyaWEtc2VsZWN0ZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJHBhbmVscyA9ICRsaUhlYWRzLmNoaWxkcmVuKCdbZGF0YS10YWItY29udGVudF0nKS5yZW1vdmVDbGFzcygnYWNjb3JkaW9uLWNvbnRlbnQnKTtcbiAgICB9XG5cbiAgICAkcGFuZWxzLmNzcyh7ZGlzcGxheTonJyx2aXNpYmlsaXR5OicnfSk7XG4gICAgJGxpSGVhZHMuY3NzKHtkaXNwbGF5OicnLHZpc2liaWxpdHk6Jyd9KTtcbiAgICBpZiAodG9TZXQgPT09ICdhY2NvcmRpb24nKSB7XG4gICAgICAkcGFuZWxzLmVhY2goZnVuY3Rpb24oa2V5LHZhbHVlKXtcbiAgICAgICAgJCh2YWx1ZSkuYXBwZW5kVG8oJGxpSGVhZHMuZ2V0KGtleSkpLmFkZENsYXNzKCdhY2NvcmRpb24tY29udGVudCcpLmF0dHIoJ2RhdGEtdGFiLWNvbnRlbnQnLCcnKS5yZW1vdmVDbGFzcygnaXMtYWN0aXZlJykuY3NzKHtoZWlnaHQ6Jyd9KTtcbiAgICAgICAgJCgnW2RhdGEtdGFicy1jb250ZW50PScrX3RoaXMuJGVsZW1lbnQuYXR0cignaWQnKSsnXScpLmFmdGVyKCc8ZGl2IGlkPVwidGFicy1wbGFjZWhvbGRlci0nK190aGlzLiRlbGVtZW50LmF0dHIoJ2lkJykrJ1wiPjwvZGl2PicpLmRldGFjaCgpO1xuICAgICAgICAkbGlIZWFkcy5hZGRDbGFzcygnYWNjb3JkaW9uLWl0ZW0nKS5hdHRyKCdkYXRhLWFjY29yZGlvbi1pdGVtJywnJyk7XG4gICAgICAgICRsaUhlYWRzQS5hZGRDbGFzcygnYWNjb3JkaW9uLXRpdGxlJyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRvU2V0ID09PSAndGFicycpIHtcbiAgICAgIHZhciAkdGFic0NvbnRlbnQgPSAkKCdbZGF0YS10YWJzLWNvbnRlbnQ9JytfdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpKyddJyk7XG4gICAgICB2YXIgJHBsYWNlaG9sZGVyID0gJCgnI3RhYnMtcGxhY2Vob2xkZXItJytfdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpKTtcbiAgICAgIGlmICgkcGxhY2Vob2xkZXIubGVuZ3RoKSB7XG4gICAgICAgICR0YWJzQ29udGVudCA9ICQoJzxkaXYgY2xhc3M9XCJ0YWJzLWNvbnRlbnRcIj48L2Rpdj4nKS5pbnNlcnRBZnRlcigkcGxhY2Vob2xkZXIpLmF0dHIoJ2RhdGEtdGFicy1jb250ZW50JyxfdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpKTtcbiAgICAgICAgJHBsYWNlaG9sZGVyLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHRhYnNDb250ZW50ID0gJCgnPGRpdiBjbGFzcz1cInRhYnMtY29udGVudFwiPjwvZGl2PicpLmluc2VydEFmdGVyKF90aGlzLiRlbGVtZW50KS5hdHRyKCdkYXRhLXRhYnMtY29udGVudCcsX3RoaXMuJGVsZW1lbnQuYXR0cignaWQnKSk7XG4gICAgICB9XG4gICAgICAkcGFuZWxzLmVhY2goZnVuY3Rpb24oa2V5LHZhbHVlKXtcbiAgICAgICAgdmFyIHRlbXBWYWx1ZSA9ICQodmFsdWUpLmFwcGVuZFRvKCR0YWJzQ29udGVudCkuYWRkQ2xhc3ModGFic1BhbmVsKTtcbiAgICAgICAgdmFyIGhhc2ggPSAkbGlIZWFkc0EuZ2V0KGtleSkuaGFzaC5zbGljZSgxKTtcbiAgICAgICAgdmFyIGlkID0gJCh2YWx1ZSkuYXR0cignaWQnKSB8fCBHZXRZb0RpZ2l0cyg2LCAnYWNjb3JkaW9uJyk7XG4gICAgICAgIGlmIChoYXNoICE9PSBpZCkge1xuICAgICAgICAgIGlmIChoYXNoICE9PSAnJykge1xuICAgICAgICAgICAgJCh2YWx1ZSkuYXR0cignaWQnLGhhc2gpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoYXNoID0gaWQ7XG4gICAgICAgICAgICAkKHZhbHVlKS5hdHRyKCdpZCcsaGFzaCk7XG4gICAgICAgICAgICAkKCRsaUhlYWRzQS5nZXQoa2V5KSkuYXR0cignaHJlZicsJCgkbGlIZWFkc0EuZ2V0KGtleSkpLmF0dHIoJ2hyZWYnKS5yZXBsYWNlKCcjJywnJykrJyMnK2hhc2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgaXNBY3RpdmUgPSAkKCRsaUhlYWRzLmdldChrZXkpKS5oYXNDbGFzcygnaXMtYWN0aXZlJyk7XG4gICAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICAgIHRlbXBWYWx1ZS5hZGRDbGFzcygnaXMtYWN0aXZlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgJGxpSGVhZHMuYWRkQ2xhc3ModGFic1RpdGxlKTtcbiAgICB9ICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBwbHVnaW4gcGFuZSBkZWZpbmVkIGJ5IGB0YXJnZXRgLlxuICAgKiBAcGFyYW0ge2pRdWVyeSB8IFN0cmluZ30gdGFyZ2V0IC0galF1ZXJ5IG9iamVjdCBvciBzdHJpbmcgb2YgdGhlIGlkIG9mIHRoZSBwYW5lIHRvIG9wZW4uXG4gICAqIEBzZWUgQWNjb3JkaW9uLmRvd25cbiAgICogQHNlZSBUYWJzLnNlbGVjdFRhYlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIG9wZW4oKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFJ1bGUgJiYgdHlwZW9mIHRoaXMuY3VycmVudFJ1bGUub3BlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFJ1bGUub3Blbih0aGlzLmN1cnJlbnRQbHVnaW4sIC4uLmFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgcGx1Z2luIHBhbmUgZGVmaW5lZCBieSBgdGFyZ2V0YC4gTm90IGF2YWlsYWlibGUgZm9yIFRhYnMuXG4gICAqIEBwYXJhbSB7alF1ZXJ5IHwgU3RyaW5nfSB0YXJnZXQgLSBqUXVlcnkgb2JqZWN0IG9yIHN0cmluZyBvZiB0aGUgaWQgb2YgdGhlIHBhbmUgdG8gY2xvc2UuXG4gICAqIEBzZWUgQWNjb3JkaW9uLnVwXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFJ1bGUgJiYgdHlwZW9mIHRoaXMuY3VycmVudFJ1bGUuY2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRSdWxlLmNsb3NlKHRoaXMuY3VycmVudFBsdWdpbiwgLi4uYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgcGx1Z2luIHBhbmUgZGVmaW5lZCBieSBgdGFyZ2V0YC4gTm90IGF2YWlsYWlibGUgZm9yIFRhYnMuXG4gICAqIEBwYXJhbSB7alF1ZXJ5IHwgU3RyaW5nfSB0YXJnZXQgLSBqUXVlcnkgb2JqZWN0IG9yIHN0cmluZyBvZiB0aGUgaWQgb2YgdGhlIHBhbmUgdG8gdG9nZ2xlLlxuICAgKiBAc2VlIEFjY29yZGlvbi50b2dnbGVcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFJ1bGUgJiYgdHlwZW9mIHRoaXMuY3VycmVudFJ1bGUudG9nZ2xlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50UnVsZS50b2dnbGUodGhpcy5jdXJyZW50UGx1Z2luLCAuLi5hcmd1bWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgaW5zdGFuY2Ugb2YgdGhlIGN1cnJlbnQgcGx1Z2luIG9uIHRoaXMgZWxlbWVudCwgYXMgd2VsbCBhcyB0aGUgd2luZG93IHJlc2l6ZSBoYW5kbGVyIHRoYXQgc3dpdGNoZXMgdGhlIHBsdWdpbnMgb3V0LlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIF9kZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQbHVnaW4pIHRoaXMuY3VycmVudFBsdWdpbi5kZXN0cm95KCk7XG4gICAgJCh3aW5kb3cpLm9mZignY2hhbmdlZC56Zi5tZWRpYXF1ZXJ5JywgdGhpcy5fY2hhbmdlZFpmTWVkaWFRdWVyeUhhbmRsZXIpO1xuICB9XG59XG5cblJlc3BvbnNpdmVBY2NvcmRpb25UYWJzLmRlZmF1bHRzID0ge307XG5cbkZvdW5kYXRpb24uYWRkVG9KcXVlcnkoJCk7XG5cbi8vIEFkZCBGb3VuZGF0aW9uIFV0aWxzIHRvIEZvdW5kYXRpb24gZ2xvYmFsIG5hbWVzcGFjZSBmb3IgYmFja3dhcmRzXG4vLyBjb21wYXRpYmlsaXR5LlxuRm91bmRhdGlvbi5ydGwgPSBydGw7XG5Gb3VuZGF0aW9uLkdldFlvRGlnaXRzID0gR2V0WW9EaWdpdHM7XG5Gb3VuZGF0aW9uLnRyYW5zaXRpb25lbmQgPSB0cmFuc2l0aW9uZW5kO1xuRm91bmRhdGlvbi5SZWdFeHBFc2NhcGUgPSBSZWdFeHBFc2NhcGU7XG5Gb3VuZGF0aW9uLm9uTG9hZCA9IG9uTG9hZDtcblxuRm91bmRhdGlvbi5Cb3ggPSBCb3g7XG5Gb3VuZGF0aW9uLm9uSW1hZ2VzTG9hZGVkID0gb25JbWFnZXNMb2FkZWQ7XG5Gb3VuZGF0aW9uLktleWJvYXJkID0gS2V5Ym9hcmQ7XG5Gb3VuZGF0aW9uLk1lZGlhUXVlcnkgPSBNZWRpYVF1ZXJ5O1xuRm91bmRhdGlvbi5Nb3Rpb24gPSBNb3Rpb247XG5Gb3VuZGF0aW9uLk1vdmUgPSBNb3ZlO1xuRm91bmRhdGlvbi5OZXN0ID0gTmVzdDtcbkZvdW5kYXRpb24uVGltZXIgPSBUaW1lcjtcblxuLy8gVG91Y2ggYW5kIFRyaWdnZXJzIHByZXZpb3VzbHkgd2VyZSBhbG1vc3QgcHVyZWx5IHNlZGUgZWZmZWN0IGRyaXZlbixcbi8vIHNvIG5vIG5lZWQgdG8gYWRkIGl0IHRvIEZvdW5kYXRpb24sIGp1c3QgaW5pdCB0aGVtLlxuVG91Y2guaW5pdCgkKTtcblRyaWdnZXJzLmluaXQoJCwgRm91bmRhdGlvbik7XG5NZWRpYVF1ZXJ5Ll9pbml0KCk7XG5cbkZvdW5kYXRpb24ucGx1Z2luKEFiaWRlLCAnQWJpZGUnKTtcbkZvdW5kYXRpb24ucGx1Z2luKEFjY29yZGlvbiwgJ0FjY29yZGlvbicpO1xuRm91bmRhdGlvbi5wbHVnaW4oQWNjb3JkaW9uTWVudSwgJ0FjY29yZGlvbk1lbnUnKTtcbkZvdW5kYXRpb24ucGx1Z2luKERyaWxsZG93biwgJ0RyaWxsZG93bicpO1xuRm91bmRhdGlvbi5wbHVnaW4oRHJvcGRvd24sICdEcm9wZG93bicpO1xuRm91bmRhdGlvbi5wbHVnaW4oRHJvcGRvd25NZW51LCAnRHJvcGRvd25NZW51Jyk7XG5Gb3VuZGF0aW9uLnBsdWdpbihFcXVhbGl6ZXIsICdFcXVhbGl6ZXInKTtcbkZvdW5kYXRpb24ucGx1Z2luKEludGVyY2hhbmdlLCAnSW50ZXJjaGFuZ2UnKTtcbkZvdW5kYXRpb24ucGx1Z2luKE1hZ2VsbGFuLCAnTWFnZWxsYW4nKTtcbkZvdW5kYXRpb24ucGx1Z2luKE9mZkNhbnZhcywgJ09mZkNhbnZhcycpO1xuRm91bmRhdGlvbi5wbHVnaW4oT3JiaXQsICdPcmJpdCcpO1xuRm91bmRhdGlvbi5wbHVnaW4oUmVzcG9uc2l2ZU1lbnUsICdSZXNwb25zaXZlTWVudScpO1xuRm91bmRhdGlvbi5wbHVnaW4oUmVzcG9uc2l2ZVRvZ2dsZSwgJ1Jlc3BvbnNpdmVUb2dnbGUnKTtcbkZvdW5kYXRpb24ucGx1Z2luKFJldmVhbCwgJ1JldmVhbCcpO1xuRm91bmRhdGlvbi5wbHVnaW4oU2xpZGVyLCAnU2xpZGVyJyk7XG5Gb3VuZGF0aW9uLnBsdWdpbihTbW9vdGhTY3JvbGwsICdTbW9vdGhTY3JvbGwnKTtcbkZvdW5kYXRpb24ucGx1Z2luKFN0aWNreSwgJ1N0aWNreScpO1xuRm91bmRhdGlvbi5wbHVnaW4oVGFicywgJ1RhYnMnKTtcbkZvdW5kYXRpb24ucGx1Z2luKFRvZ2dsZXIsICdUb2dnbGVyJyk7XG5Gb3VuZGF0aW9uLnBsdWdpbihUb29sdGlwLCAnVG9vbHRpcCcpO1xuRm91bmRhdGlvbi5wbHVnaW4oUmVzcG9uc2l2ZUFjY29yZGlvblRhYnMsICdSZXNwb25zaXZlQWNjb3JkaW9uVGFicycpO1xuXG5leHBvcnQgZGVmYXVsdCBGb3VuZGF0aW9uO1xuZXhwb3J0IHsgQWJpZGUsIEFjY29yZGlvbiwgQWNjb3JkaW9uTWVudSwgQm94LCBGb3VuZGF0aW9uIGFzIENvcmUsIGZvdW5kYXRpb25fY29yZV91dGlscyBhcyBDb3JlVXRpbHMsIERyaWxsZG93biwgRHJvcGRvd24sIERyb3Bkb3duTWVudSwgRXF1YWxpemVyLCBGb3VuZGF0aW9uLCBJbnRlcmNoYW5nZSwgS2V5Ym9hcmQsIE1hZ2VsbGFuLCBNZWRpYVF1ZXJ5LCBNb3Rpb24sIE1vdmUsIE5lc3QsIE9mZkNhbnZhcywgT3JiaXQsIFJlc3BvbnNpdmVBY2NvcmRpb25UYWJzLCBSZXNwb25zaXZlTWVudSwgUmVzcG9uc2l2ZVRvZ2dsZSwgUmV2ZWFsLCBTbGlkZXIsIFNtb290aFNjcm9sbCwgU3RpY2t5LCBUYWJzLCBUaW1lciwgVG9nZ2xlciwgVG9vbHRpcCwgVG91Y2gsIFRyaWdnZXJzLCBvbkltYWdlc0xvYWRlZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm91bmRhdGlvbi5lczYuanMubWFwXG4iLCJleHBvcnQgY2xhc3MgUHJlc2VudHNIYW5kbGVyIHtcbiAgICBwcmVzZW50czoge1xuICAgICAgICBbaWQ6IG51bWJlcl06IHtcbiAgICAgICAgICAgIGlkOiBudW1iZXIsXG4gICAgICAgICAgICB2ZXJzaW9uOiBudW1iZXIsXG4gICAgICAgICAgICBpc0JvdWdodDogYm9vbGVhbixcbiAgICAgICAgICAgIGltYWdlOiBzdHJpbmcsXG4gICAgICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gICAgICAgICAgICBsaW5rOiBzdHJpbmcsXG4gICAgICAgICAgICBpc01pbmU/OiBib29sZWFuLFxuICAgICAgICB9XG4gICAgfSA9IHt9O1xuXG4gICAgcGFzc3dvcmQ6IHN0cmluZztcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJhc2VQYXRoID0gX19CQVNFX1BBVEhfXztcblxuICAgIGFzeW5jIGxvYWRQcmVzZW50cygpIHtcbiAgICAgICAgY29uc3QgcHJlc2VudHMgPSByZXF1aXJlKFwiLi9wcmVzZW50c1wiKS5kZWZhdWx0O1xuICAgICAgICBwcmVzZW50cy5mb3JFYWNoKHAgPT4gdGhpcy5wcmVzZW50c1twLmlkXSA9IHApO1xuICAgICAgICB0aGlzLnBhc3N3b3JkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJwd1wiKSB8fCBcIlwiO1xuXG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU3RhdGVzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgdXBkYXRlU3RhdGVzKCkge1xuICAgICAgICBjb25zdCBwcmVzZW50RGF0YTogYW55W10gPSBhd2FpdCB0aGlzLnNlbmQodGhpcy5iYXNlUGF0aCArIFwiL3ByZXNlbnRzXCIsIHtwYXNzd29yZDogdGhpcy5wYXNzd29yZH0pO1xuXG4gICAgICAgIHByZXNlbnREYXRhLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmVzZW50ID0gdGhpcy5wcmVzZW50c1tkYXRhLmlkXTtcbiAgICAgICAgICAgIGlmIChwcmVzZW50KSB7XG4gICAgICAgICAgICAgICAgcHJlc2VudC5pc0JvdWdodCA9IGRhdGEuaXNCb3VnaHQgPT09IDE7XG4gICAgICAgICAgICAgICAgcHJlc2VudC52ZXJzaW9uID0gZGF0YS52ZXJzaW9uO1xuICAgICAgICAgICAgICAgIHByZXNlbnQuaXNNaW5lID0gZGF0YS5pc01pbmUgPT09IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBhc3luYyBzaG93UHJlc2VudHMoKSB7XG4gICAgICAgIGNvbnN0IHByZXNlbnRDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInByZXNlbnQtY29udGFpbmVyXCIpO1xuICAgICAgICBjb25zdCBwcmVzZW50VGVtcGxhdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInByZXNlbnQtdGVtcGxhdGVcIik7XG4gICAgICAgIHByZXNlbnRUZW1wbGF0ZS5yZW1vdmUoKTtcbiAgICAgICAgcHJlc2VudFRlbXBsYXRlLnJlbW92ZUF0dHJpYnV0ZShcImlkXCIpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFByZXNlbnRzKCk7XG5cbiAgICAgICAgcHJlc2VudENvbnRhaW5lci5pbm5lclRleHQgPSBcIlwiO1xuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMucHJlc2VudHMpLmZvckVhY2gocHJlc2VudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gPEhUTUxMaW5rRWxlbWVudD5wcmVzZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICAgICAgKDxIVE1MSW1hZ2VFbGVtZW50PmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5wcmVzZW50LWltYWdlXCIpKS5zcmMgPSBwcmVzZW50LmltYWdlO1xuICAgICAgICAgICAgKDxIVE1MRWxlbWVudD5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucHJlc2VudC1uYW1lXCIpKS5pbm5lclRleHQgPSBwcmVzZW50Lm5hbWU7XG4gICAgICAgICAgICAoPEhUTUxFbGVtZW50PmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5wcmVzZW50LWRlc2NyaXB0aW9uXCIpKS5pbm5lckhUTUwgPSBwcmVzZW50LmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgZWxlbWVudC5ocmVmID0gcHJlc2VudC5saW5rO1xuXG4gICAgICAgICAgICBjb25zdCBjaGVja2JveEVsZW1lbnQgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucHJlc2VudC1jaGVja2JveFwiKTtcbiAgICAgICAgICAgIGlmIChwcmVzZW50LmlzQm91Z2h0KSB7XG4gICAgICAgICAgICAgICAgY2hlY2tib3hFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJjaGVja2VkXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGVja2JveEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jIGUgPT4ge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYXNzd29yZCB8fCAocHJlc2VudC5pc0JvdWdodCAmJiAhcHJlc2VudC5pc01pbmUpKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHcgPSBwcm9tcHQoXCJCaXR0ZSBnaWIgZWluIFBhc3N3b3J0IGVpbi4gRGFzIGJyYXVjaHN0IGR1LCB3ZW5uIGR1IGRhcyBHZXNjaGVuayB3aWVkZXIgYmVhcmJlaXRlc3Q6XCIpXG4gICAgICAgICAgICAgICAgICAgIGlmIChwdyl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhc3N3b3JkID0gcHc7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInB3XCIsIHB3KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KFwiRHUgYnJhdWNoc3QgZWluIFBhc3N3b3J0LlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0UHJlc2VudElzQm91Z2h0KHByZXNlbnQsICFwcmVzZW50LmlzQm91Z2h0KTtcbiAgICAgICAgICAgICAgICBpZiAocHJlc2VudC5pc0JvdWdodCkge1xuICAgICAgICAgICAgICAgICAgICBjaGVja2JveEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImNoZWNrZWRcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tib3hFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJjaGVja2VkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHByZXNlbnRDb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRQcmVzZW50SXNCb3VnaHQocHJlc2VudDoge1xuICAgICAgICBpZDogbnVtYmVyLFxuICAgICAgICBpc0JvdWdodDogYm9vbGVhbjtcbiAgICAgICAgdmVyc2lvbjogbnVtYmVyLFxuICAgICAgICBpbWFnZTogc3RyaW5nO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgICAgIGxpbms6IHN0cmluZyxcbiAgICAgICAgaXNNaW5lPzogYm9vbGVhblxuICAgIH0sIGlzQm91Z2h0OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuYmFzZVBhdGggKyBcIi9zZXRQcmVzZW50XCJcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICBpZDogcHJlc2VudC5pZCxcbiAgICAgICAgICAgIHZlcnNpb246IHByZXNlbnQudmVyc2lvbixcbiAgICAgICAgICAgIGlzQm91Z2h0OiBpc0JvdWdodCxcbiAgICAgICAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlbmQodXJsLCBwYXJhbXMpO1xuXG4gICAgICAgIGlmIChyZXMucHJlc2VudCAmJiByZXMucHJlc2VudC5pZCA9PT0gcHJlc2VudC5pZCkge1xuICAgICAgICAgICAgcHJlc2VudC52ZXJzaW9uID0gcmVzLnByZXNlbnQudmVyc2lvbjtcbiAgICAgICAgICAgIHByZXNlbnQuaXNCb3VnaHQgPSByZXMucHJlc2VudC5pc0JvdWdodCA9PT0gMVxuICAgICAgICAgICAgaWYgKHByZXNlbnQuaXNCb3VnaHQpe1xuICAgICAgICAgICAgICAgIHByZXNlbnQuaXNNaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXMuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmIChyZXMuZXJyb3IgPT09IFwid3JvbmctdmVyc2lvblwiKSB7XG4gICAgICAgICAgICAgICAgYWxlcnQoXCJKZW1hbmQgaGF0IHNjaG9uIHZvciBkaXIgZGFzIEdlc2NoZW5rIGJlYXJiZWl0ZXQuIEJpdHRlIHZlcnN1Y2hlIGVzIGVybmV1dC5cIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlcy5lcnJvciA9PT0gXCJ3cm9uZy1wYXNzd29yZFwiKXtcbiAgICAgICAgICAgICAgICBhbGVydChcIkRhcyBQYXNzd29ydCwgd2FzIGR1IGFuZ2VnZWJlbiBoYXN0LCBzdGltbXQgbmljaHQuXCIpXG4gICAgICAgICAgICAgICAgcHJlc2VudC5pc01pbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlcy5lcnJvciA9PT0gXCJuby1wYXNzd29yZFwiKXtcbiAgICAgICAgICAgICAgICBhbGVydChcIkJpdHRlIGdpYiBlaW4gUGFzc3dvcnQgYW4uXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNlbmQodXJsLCBwYXJhbXMpIHtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSB7fTtcbiAgICAgICAgaWYgKCEocGFyYW1zIGluc3RhbmNlb2YgRm9ybURhdGEpICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmV0Y2godXJsLCB7XG4gICAgICAgICAgICBcImNyZWRlbnRpYWxzXCI6IFwic2FtZS1vcmlnaW5cIixcbiAgICAgICAgICAgIFwibWV0aG9kXCI6IFwiUE9TVFwiLFxuICAgICAgICAgICAgXCJoZWFkZXJzXCI6IGhlYWRlcnMsXG4gICAgICAgICAgICBcImJvZHlcIjogcGFyYW1zLFxuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIHJldHVybiByZXMuanNvbigpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgZGVidWdnZXI7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3JcIiwgZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIFwic3VjY2Vzc1wiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBcImVycm9yc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgIFwibm90LW9ubGluZVwiXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJ2YXIgcmFmU2NoZCA9IGZ1bmN0aW9uIHJhZlNjaGQoZm4pIHtcbiAgdmFyIGxhc3RBcmdzID0gW107XG4gIHZhciBmcmFtZUlkID0gbnVsbDtcblxuICB2YXIgd3JhcHBlckZuID0gZnVuY3Rpb24gd3JhcHBlckZuKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBsYXN0QXJncyA9IGFyZ3M7XG5cbiAgICBpZiAoZnJhbWVJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgZnJhbWVJZCA9IG51bGw7XG4gICAgICBmbi5hcHBseSh2b2lkIDAsIGxhc3RBcmdzKTtcbiAgICB9KTtcbiAgfTtcblxuICB3cmFwcGVyRm4uY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghZnJhbWVJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lSWQpO1xuICAgIGZyYW1lSWQgPSBudWxsO1xuICB9O1xuXG4gIHJldHVybiB3cmFwcGVyRm47XG59O1xuXG5leHBvcnQgZGVmYXVsdCByYWZTY2hkO1xuIiwiaW1wb3J0IEhUTUxSZWFjdFBhcnNlciBmcm9tICcuL2luZGV4LmpzJztcblxuZXhwb3J0IHZhciBkb21Ub1JlYWN0ID0gSFRNTFJlYWN0UGFyc2VyLmRvbVRvUmVhY3Q7XG5leHBvcnQgdmFyIGh0bWxUb0RPTSA9IEhUTUxSZWFjdFBhcnNlci5odG1sVG9ET007XG5leHBvcnQgdmFyIGF0dHJpYnV0ZXNUb1Byb3BzID0gSFRNTFJlYWN0UGFyc2VyLmF0dHJpYnV0ZXNUb1Byb3BzO1xuZXhwb3J0IHZhciBFbGVtZW50ID0gSFRNTFJlYWN0UGFyc2VyLkVsZW1lbnQ7XG5cbmV4cG9ydCBkZWZhdWx0IEhUTUxSZWFjdFBhcnNlcjtcbiIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuIiwiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY3JlYXRlQmluZGluZyhvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XHJcbiAgICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgcHJpdmF0ZU1hcCkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcml2YXRlTWFwLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHByaXZhdGVNYXAuc2V0KHJlY2VpdmVyLCB2YWx1ZSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuIiwiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY3JlYXRlQmluZGluZyhvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XHJcbiAgICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgcHJpdmF0ZU1hcCkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcml2YXRlTWFwLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHByaXZhdGVNYXAuc2V0KHJlY2VpdmVyLCB2YWx1ZSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmZ1bmN0aW9uIEl0b0koYSkge1xuICAgIHJldHVybiBhO1xufVxuZnVuY3Rpb24gaW5uZXJDcmVhdGVNZWRpdW0oZGVmYXVsdHMsIG1pZGRsZXdhcmUpIHtcbiAgICBpZiAobWlkZGxld2FyZSA9PT0gdm9pZCAwKSB7IG1pZGRsZXdhcmUgPSBJdG9JOyB9XG4gICAgdmFyIGJ1ZmZlciA9IFtdO1xuICAgIHZhciBhc3NpZ25lZCA9IGZhbHNlO1xuICAgIHZhciBtZWRpdW0gPSB7XG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChhc3NpZ25lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhcjogY291bGQgbm90IGByZWFkYCBmcm9tIGFuIGBhc3NpZ25lZGAgbWVkaXVtLiBgcmVhZGAgY291bGQgYmUgdXNlZCBvbmx5IHdpdGggYHVzZU1lZGl1bWAuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJbYnVmZmVyLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgICAgICB9LFxuICAgICAgICB1c2VNZWRpdW06IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IG1pZGRsZXdhcmUoZGF0YSwgYXNzaWduZWQpO1xuICAgICAgICAgICAgYnVmZmVyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggIT09IGl0ZW07IH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgYXNzaWduU3luY01lZGl1bTogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBjYnMgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgY2JzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyID0ge1xuICAgICAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uICh4KSB7IHJldHVybiBjYih4KTsgfSxcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlcjsgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGFzc2lnbk1lZGl1bTogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgcGVuZGluZ1F1ZXVlID0gW107XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBjYnMgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgY2JzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IGJ1ZmZlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBleGVjdXRlUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIGN5Y2xlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihleGVjdXRlUXVldWUpOyB9O1xuICAgICAgICAgICAgY3ljbGUoKTtcbiAgICAgICAgICAgIGJ1ZmZlciA9IHtcbiAgICAgICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUucHVzaCh4KTtcbiAgICAgICAgICAgICAgICAgICAgY3ljbGUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24gKGZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUgPSBwZW5kaW5nUXVldWUuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gbWVkaXVtO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSkge1xuICAgIGlmIChtaWRkbGV3YXJlID09PSB2b2lkIDApIHsgbWlkZGxld2FyZSA9IEl0b0k7IH1cbiAgICByZXR1cm4gaW5uZXJDcmVhdGVNZWRpdW0oZGVmYXVsdHMsIG1pZGRsZXdhcmUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpZGVjYXJNZWRpdW0ob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIG1lZGl1bSA9IGlubmVyQ3JlYXRlTWVkaXVtKG51bGwpO1xuICAgIG1lZGl1bS5vcHRpb25zID0gdHNsaWJfMS5fX2Fzc2lnbih7IGFzeW5jOiB0cnVlLCBzc3I6IGZhbHNlIH0sIG9wdGlvbnMpO1xuICAgIHJldHVybiBtZWRpdW07XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVTaWRlY2FyTWVkaXVtIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuZXhwb3J0IHZhciBlZmZlY3RDYXIgPSBjcmVhdGVTaWRlY2FyTWVkaXVtKCk7XG4iLCJpbXBvcnQgeyB1c2VDYWxsYmFja1JlZiB9IGZyb20gJy4vdXNlUmVmJztcbmltcG9ydCB7IGFzc2lnblJlZiB9IGZyb20gJy4vYXNzaWduUmVmJztcbi8qKlxuICogTWVyZ2VzIHR3byBvciBtb3JlIHJlZnMgdG9nZXRoZXIgcHJvdmlkaW5nIGEgc2luZ2xlIGludGVyZmFjZSB0byBzZXQgdGhlaXIgdmFsdWVcbiAqIEBwYXJhbSB7UmVmT2JqZWN0fFJlZn0gcmVmc1xuICogQHJldHVybnMge011dGFibGVSZWZPYmplY3R9IC0gYSBuZXcgcmVmLCB3aGljaCB0cmFuc2xhdGVzIGFsbCBjaGFuZ2VzIHRvIHtyZWZzfVxuICpcbiAqIEBzZWUge0BsaW5rIG1lcmdlUmVmc30gYSB2ZXJzaW9uIHdpdGhvdXQgYnVpdC1pbiBtZW1vaXphdGlvblxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L3VzZS1jYWxsYmFjay1yZWYjdXNlbWVyZ2VyZWZzXG4gKiBAZXhhbXBsZVxuICogY29uc3QgQ29tcG9uZW50ID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICogICBjb25zdCBvd25SZWYgPSB1c2VSZWYoKTtcbiAqICAgY29uc3QgZG9tUmVmID0gdXNlTWVyZ2VSZWZzKFtyZWYsIG93blJlZl0pOyAvLyDwn5GIIG1lcmdlIHRvZ2V0aGVyXG4gKiAgIHJldHVybiA8ZGl2IHJlZj17ZG9tUmVmfT4uLi48L2Rpdj5cbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lcmdlUmVmcyhyZWZzLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gdXNlQ2FsbGJhY2tSZWYoZGVmYXVsdFZhbHVlLCBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHJlZnMuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7IHJldHVybiBhc3NpZ25SZWYocmVmLCBuZXdWYWx1ZSk7IH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIGNyZWF0ZXMgYSBNdXRhYmxlUmVmIHdpdGggcmVmIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIGluaXRpYWwgcmVmIHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIGEgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdmFsdWUgY2hhbmdlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZWYgPSB1c2VDYWxsYmFja1JlZigwLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiBjb25zb2xlLmxvZyhvbGRWYWx1ZSwgJy0+JywgbmV3VmFsdWUpO1xuICogcmVmLmN1cnJlbnQgPSAxO1xuICogLy8gcHJpbnRzIDAgLT4gMVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2hvb2tzLXJlZmVyZW5jZS5odG1sI3VzZXJlZlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L3VzZS1jYWxsYmFjay1yZWYjdXNlY2FsbGJhY2tyZWYtLS10by1yZXBsYWNlLXJlYWN0dXNlcmVmXG4gKiBAcmV0dXJucyB7TXV0YWJsZVJlZk9iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNhbGxiYWNrUmVmKGluaXRpYWxWYWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgcmVmID0gdXNlU3RhdGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgdmFsdWU6IGluaXRpYWxWYWx1ZSxcbiAgICAgICAgLy8gbGFzdCBjYWxsYmFja1xuICAgICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICAgIC8vIFwibWVtb2l6ZWRcIiBwdWJsaWMgaW50ZXJmYWNlXG4gICAgICAgIGZhY2FkZToge1xuICAgICAgICAgICAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZi52YWx1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgY3VycmVudCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0ID0gcmVmLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0ICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZWYudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVmLmNhbGxiYWNrKHZhbHVlLCBsYXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTsgfSlbMF07XG4gICAgLy8gdXBkYXRlIGNhbGxiYWNrXG4gICAgcmVmLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgcmV0dXJuIHJlZi5mYWNhZGU7XG59XG4iLCIvKipcbiAqIEFzc2lnbnMgYSB2YWx1ZSBmb3IgYSBnaXZlbiByZWYsIG5vIG1hdHRlciBvZiB0aGUgcmVmIGZvcm1hdFxuICogQHBhcmFtIHtSZWZPYmplY3R9IHJlZiAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gb3IgcmVmIG9iamVjdFxuICogQHBhcmFtIHZhbHVlIC0gYSBuZXcgdmFsdWVcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvdXNlLWNhbGxiYWNrLXJlZiNhc3NpZ25yZWZcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZWZPYmplY3QgPSB1c2VSZWYoKTtcbiAqIGNvbnN0IHJlZkZuID0gKHJlZikgPT4gey4uLi59XG4gKlxuICogYXNzaWduUmVmKHJlZk9iamVjdCwgXCJyZWZWYWx1ZVwiKTtcbiAqIGFzc2lnblJlZihyZWZGbiwgXCJyZWZWYWx1ZVwiKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnblJlZihyZWYsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVmKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZWY7XG59XG4iLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZnVsbFdpZHRoQ2xhc3NOYW1lLCB6ZXJvUmlnaHRDbGFzc05hbWUgfSBmcm9tICdyZWFjdC1yZW1vdmUtc2Nyb2xsLWJhci9jb25zdGFudHMnO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xuaW1wb3J0IHsgdXNlTWVyZ2VSZWZzIH0gZnJvbSAndXNlLWNhbGxiYWNrLXJlZic7XG52YXIgbm90aGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm47XG59O1xuLyoqXG4gKiBSZW1vdmVzIHNjcm9sbGJhciBmcm9tIHRoZSBwYWdlIGFuZCBjb250YWluIHRoZSBzY3JvbGwgd2l0aGluIHRoZSBMb2NrXG4gKi9cbnZhciBSZW1vdmVTY3JvbGwgPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcGFyZW50UmVmKSB7XG4gICAgdmFyIHJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICB2YXIgX2EgPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgICAgIG9uU2Nyb2xsQ2FwdHVyZTogbm90aGluZyxcbiAgICAgICAgb25XaGVlbENhcHR1cmU6IG5vdGhpbmcsXG4gICAgICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZTogbm90aGluZ1xuICAgIH0pLCBjYWxsYmFja3MgPSBfYVswXSwgc2V0Q2FsbGJhY2tzID0gX2FbMV07XG4gICAgdmFyIGZvcndhcmRQcm9wcyA9IHByb3BzLmZvcndhcmRQcm9wcywgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCByZW1vdmVTY3JvbGxCYXIgPSBwcm9wcy5yZW1vdmVTY3JvbGxCYXIsIGVuYWJsZWQgPSBwcm9wcy5lbmFibGVkLCBzaGFyZHMgPSBwcm9wcy5zaGFyZHMsIHNpZGVDYXIgPSBwcm9wcy5zaWRlQ2FyLCBub0lzb2xhdGlvbiA9IHByb3BzLm5vSXNvbGF0aW9uLCBpbmVydCA9IHByb3BzLmluZXJ0LCBhbGxvd1BpbmNoWm9vbSA9IHByb3BzLmFsbG93UGluY2hab29tLCBfYiA9IHByb3BzLmFzLCBDb250YWluZXIgPSBfYiA9PT0gdm9pZCAwID8gJ2RpdicgOiBfYiwgcmVzdCA9IHRzbGliXzEuX19yZXN0KHByb3BzLCBbXCJmb3J3YXJkUHJvcHNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInJlbW92ZVNjcm9sbEJhclwiLCBcImVuYWJsZWRcIiwgXCJzaGFyZHNcIiwgXCJzaWRlQ2FyXCIsIFwibm9Jc29sYXRpb25cIiwgXCJpbmVydFwiLCBcImFsbG93UGluY2hab29tXCIsIFwiYXNcIl0pO1xuICAgIHZhciBTaWRlQ2FyID0gc2lkZUNhcjtcbiAgICB2YXIgY29udGFpbmVyUmVmID0gdXNlTWVyZ2VSZWZzKFtcbiAgICAgICAgcmVmLFxuICAgICAgICBwYXJlbnRSZWZcbiAgICBdKTtcbiAgICB2YXIgY29udGFpbmVyUHJvcHMgPSB0c2xpYl8xLl9fYXNzaWduKHt9LCByZXN0LCBjYWxsYmFja3MpO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgZW5hYmxlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCB7IHNpZGVDYXI6IGVmZmVjdENhciwgcmVtb3ZlU2Nyb2xsQmFyOiByZW1vdmVTY3JvbGxCYXIsIHNoYXJkczogc2hhcmRzLCBub0lzb2xhdGlvbjogbm9Jc29sYXRpb24sIGluZXJ0OiBpbmVydCwgc2V0Q2FsbGJhY2tzOiBzZXRDYWxsYmFja3MsIGFsbG93UGluY2hab29tOiAhIWFsbG93UGluY2hab29tLCBsb2NrUmVmOiByZWYgfSkpLFxuICAgICAgICBmb3J3YXJkUHJvcHMgPyAoUmVhY3QuY2xvbmVFbGVtZW50KFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pLCB0c2xpYl8xLl9fYXNzaWduKHt9LCBjb250YWluZXJQcm9wcywgeyByZWY6IGNvbnRhaW5lclJlZiB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGFpbmVyLCB0c2xpYl8xLl9fYXNzaWduKHt9LCBjb250YWluZXJQcm9wcywgeyBjbGFzc05hbWU6IGNsYXNzTmFtZSwgcmVmOiBjb250YWluZXJSZWYgfSksIGNoaWxkcmVuKSkpKTtcbn0pO1xuUmVtb3ZlU2Nyb2xsLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIHJlbW92ZVNjcm9sbEJhcjogdHJ1ZSxcbiAgICBpbmVydDogZmFsc2Vcbn07XG5SZW1vdmVTY3JvbGwuY2xhc3NOYW1lcyA9IHtcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aENsYXNzTmFtZSxcbiAgICB6ZXJvUmlnaHQ6IHplcm9SaWdodENsYXNzTmFtZVxufTtcbmV4cG9ydCB7IFJlbW92ZVNjcm9sbCB9O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJleHBvcnQgdmFyIHplcm9SaWdodENsYXNzTmFtZSA9ICdyaWdodC1zY3JvbGwtYmFyLXBvc2l0aW9uJztcbmV4cG9ydCB2YXIgZnVsbFdpZHRoQ2xhc3NOYW1lID0gJ3dpZHRoLWJlZm9yZS1zY3JvbGwtYmFyJztcbmV4cG9ydCB2YXIgbm9TY3JvbGxiYXJzQ2xhc3NOYW1lID0gJ3dpdGgtc2Nyb2xsLWJhcnMtaGlkZGVuJztcbmV4cG9ydCB2YXIgcmVtb3ZlZEJhclNpemVWYXJpYWJsZSA9ICctLXJlbW92ZWQtYm9keS1zY3JvbGwtYmFyLXNpemUnO1xuIiwiZXhwb3J0IHZhciBGT0NVU19HUk9VUCA9ICdkYXRhLWZvY3VzLWxvY2snO1xuZXhwb3J0IHZhciBGT0NVU19ESVNBQkxFRCA9ICdkYXRhLWZvY3VzLWxvY2stZGlzYWJsZWQnO1xuZXhwb3J0IHZhciBGT0NVU19BTExPVyA9ICdkYXRhLW5vLWZvY3VzLWxvY2snO1xuZXhwb3J0IHZhciBGT0NVU19BVVRPID0gJ2RhdGEtYXV0b2ZvY3VzLWluc2lkZSc7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuZXhwb3J0IHZhciBoaWRkZW5HdWFyZCA9IHtcbiAgd2lkdGg6ICcxcHgnLFxuICBoZWlnaHQ6ICcwcHgnLFxuICBwYWRkaW5nOiAwLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHBvc2l0aW9uOiAnZml4ZWQnLFxuICB0b3A6ICcxcHgnLFxuICBsZWZ0OiAnMXB4J1xufTtcblxudmFyIEluRm9jdXNHdWFyZCA9IGZ1bmN0aW9uIEluRm9jdXNHdWFyZChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJndWFyZC1maXJzdFwiLFxuICAgIFwiZGF0YS1mb2N1cy1ndWFyZFwiOiB0cnVlLFxuICAgIFwiZGF0YS1mb2N1cy1hdXRvLWd1YXJkXCI6IHRydWUsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pLCBjaGlsZHJlbiwgY2hpbGRyZW4gJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJndWFyZC1sYXN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgXCJkYXRhLWZvY3VzLWF1dG8tZ3VhcmRcIjogdHJ1ZSxcbiAgICBzdHlsZTogaGlkZGVuR3VhcmRcbiAgfSkpO1xufTtcblxuSW5Gb2N1c0d1YXJkLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59IDoge307XG5JbkZvY3VzR3VhcmQuZGVmYXVsdFByb3BzID0ge1xuICBjaGlsZHJlbjogbnVsbFxufTtcbmV4cG9ydCBkZWZhdWx0IEluRm9jdXNHdWFyZDsiLCJpbXBvcnQgeyBjcmVhdGVNZWRpdW0sIGNyZWF0ZVNpZGVjYXJNZWRpdW0gfSBmcm9tICd1c2Utc2lkZWNhcic7XG5leHBvcnQgdmFyIG1lZGl1bUZvY3VzID0gY3JlYXRlTWVkaXVtKHt9LCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICBjdXJyZW50VGFyZ2V0ID0gX3JlZi5jdXJyZW50VGFyZ2V0O1xuICByZXR1cm4ge1xuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgfTtcbn0pO1xuZXhwb3J0IHZhciBtZWRpdW1CbHVyID0gY3JlYXRlTWVkaXVtKCk7XG5leHBvcnQgdmFyIG1lZGl1bUVmZmVjdCA9IGNyZWF0ZU1lZGl1bSgpO1xuZXhwb3J0IHZhciBtZWRpdW1TaWRlY2FyID0gY3JlYXRlU2lkZWNhck1lZGl1bSh7XG4gIGFzeW5jOiB0cnVlXG59KTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IG5vZGUsIGJvb2wsIHN0cmluZywgYW55LCBhcnJheU9mLCBvbmVPZlR5cGUsIG9iamVjdCwgZnVuYyB9IGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJ2ZvY3VzLWxvY2svY29uc3RhbnRzJztcbmltcG9ydCB7IHVzZU1lcmdlUmVmcyB9IGZyb20gJ3VzZS1jYWxsYmFjay1yZWYnO1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaGlkZGVuR3VhcmQgfSBmcm9tICcuL0ZvY3VzR3VhcmQnO1xuaW1wb3J0IHsgbWVkaXVtRm9jdXMsIG1lZGl1bUJsdXIsIG1lZGl1bVNpZGVjYXIgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgZW1wdHlBcnJheSA9IFtdO1xudmFyIEZvY3VzTG9jayA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvY3VzTG9ja1VJKHByb3BzLCBwYXJlbnRSZWYpIHtcbiAgdmFyIF9leHRlbmRzMjtcblxuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoKSxcbiAgICAgIHJlYWxPYnNlcnZlZCA9IF9SZWFjdCR1c2VTdGF0ZVswXSxcbiAgICAgIHNldE9ic2VydmVkID0gX1JlYWN0JHVzZVN0YXRlWzFdO1xuXG4gIHZhciBvYnNlcnZlZCA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgaXNBY3RpdmUgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICB2YXIgb3JpZ2luYWxGb2N1c2VkRWxlbWVudCA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgICAgbm9Gb2N1c0d1YXJkcyA9IHByb3BzLm5vRm9jdXNHdWFyZHMsXG4gICAgICBwZXJzaXN0ZW50Rm9jdXMgPSBwcm9wcy5wZXJzaXN0ZW50Rm9jdXMsXG4gICAgICBjcm9zc0ZyYW1lID0gcHJvcHMuY3Jvc3NGcmFtZSxcbiAgICAgIGF1dG9Gb2N1cyA9IHByb3BzLmF1dG9Gb2N1cyxcbiAgICAgIGFsbG93VGV4dFNlbGVjdGlvbiA9IHByb3BzLmFsbG93VGV4dFNlbGVjdGlvbixcbiAgICAgIGdyb3VwID0gcHJvcHMuZ3JvdXAsXG4gICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICB3aGl0ZUxpc3QgPSBwcm9wcy53aGl0ZUxpc3QsXG4gICAgICBoYXNQb3NpdGl2ZUluZGljZXMgPSBwcm9wcy5oYXNQb3NpdGl2ZUluZGljZXMsXG4gICAgICBfcHJvcHMkc2hhcmRzID0gcHJvcHMuc2hhcmRzLFxuICAgICAgc2hhcmRzID0gX3Byb3BzJHNoYXJkcyA9PT0gdm9pZCAwID8gZW1wdHlBcnJheSA6IF9wcm9wcyRzaGFyZHMsXG4gICAgICBfcHJvcHMkYXMgPSBwcm9wcy5hcyxcbiAgICAgIENvbnRhaW5lciA9IF9wcm9wcyRhcyA9PT0gdm9pZCAwID8gJ2RpdicgOiBfcHJvcHMkYXMsXG4gICAgICBfcHJvcHMkbG9ja1Byb3BzID0gcHJvcHMubG9ja1Byb3BzLFxuICAgICAgY29udGFpbmVyUHJvcHMgPSBfcHJvcHMkbG9ja1Byb3BzID09PSB2b2lkIDAgPyB7fSA6IF9wcm9wcyRsb2NrUHJvcHMsXG4gICAgICBTaWRlQ2FyID0gcHJvcHMuc2lkZUNhcixcbiAgICAgIHNob3VsZFJldHVybkZvY3VzID0gcHJvcHMucmV0dXJuRm9jdXMsXG4gICAgICBmb2N1c09wdGlvbnMgPSBwcm9wcy5mb2N1c09wdGlvbnMsXG4gICAgICBvbkFjdGl2YXRpb25DYWxsYmFjayA9IHByb3BzLm9uQWN0aXZhdGlvbixcbiAgICAgIG9uRGVhY3RpdmF0aW9uQ2FsbGJhY2sgPSBwcm9wcy5vbkRlYWN0aXZhdGlvbjtcblxuICB2YXIgX1JlYWN0JHVzZVN0YXRlMiA9IFJlYWN0LnVzZVN0YXRlKHt9KSxcbiAgICAgIGlkID0gX1JlYWN0JHVzZVN0YXRlMlswXTsgLy8gU0lERSBFRkZFQ1QgQ0FMTEJBQ0tTXG5cblxuICB2YXIgb25BY3RpdmF0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudCA9IG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudCB8fCBkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXG4gICAgaWYgKG9ic2VydmVkLmN1cnJlbnQgJiYgb25BY3RpdmF0aW9uQ2FsbGJhY2spIHtcbiAgICAgIG9uQWN0aXZhdGlvbkNhbGxiYWNrKG9ic2VydmVkLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIGlzQWN0aXZlLmN1cnJlbnQgPSB0cnVlO1xuICB9LCBbb25BY3RpdmF0aW9uQ2FsbGJhY2tdKTtcbiAgdmFyIG9uRGVhY3RpdmF0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlzQWN0aXZlLmN1cnJlbnQgPSBmYWxzZTtcblxuICAgIGlmIChvbkRlYWN0aXZhdGlvbkNhbGxiYWNrKSB7XG4gICAgICBvbkRlYWN0aXZhdGlvbkNhbGxiYWNrKG9ic2VydmVkLmN1cnJlbnQpO1xuICAgIH1cbiAgfSwgW29uRGVhY3RpdmF0aW9uQ2FsbGJhY2tdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAvLyBjbGVhbnVwIHJldHVybiBmb2N1cyBvbiB0cmFwIGRlYWN0aXZhdGlvblxuICAgICAgLy8gc2lkZUVmZmVjdC9yZXR1cm5Gb2N1cyBzaG91bGQgaGFwcGVuIGJ5IHRoaXMgdGltZVxuICAgICAgb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtdKTtcbiAgdmFyIHJldHVybkZvY3VzID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGFsbG93RGVmZXIpIHtcbiAgICB2YXIgcmV0dXJuRm9jdXNUbyA9IG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudDtcblxuICAgIGlmIChyZXR1cm5Gb2N1c1RvICYmIHJldHVybkZvY3VzVG8uZm9jdXMpIHtcbiAgICAgIHZhciBob3dUb1JldHVybkZvY3VzID0gdHlwZW9mIHNob3VsZFJldHVybkZvY3VzID09PSAnZnVuY3Rpb24nID8gc2hvdWxkUmV0dXJuRm9jdXMocmV0dXJuRm9jdXNUbykgOiBzaG91bGRSZXR1cm5Gb2N1cztcblxuICAgICAgaWYgKGhvd1RvUmV0dXJuRm9jdXMpIHtcbiAgICAgICAgdmFyIHJldHVybkZvY3VzT3B0aW9ucyA9IHR5cGVvZiBob3dUb1JldHVybkZvY3VzID09PSAnb2JqZWN0JyA/IGhvd1RvUmV0dXJuRm9jdXMgOiB1bmRlZmluZWQ7XG4gICAgICAgIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudCA9IG51bGw7XG5cbiAgICAgICAgaWYgKGFsbG93RGVmZXIpIHtcbiAgICAgICAgICAvLyBSZWFjdCBtaWdodCByZXR1cm4gZm9jdXMgYWZ0ZXIgdXBkYXRlXG4gICAgICAgICAgLy8gaXQncyBzYWZlciB0byBkZWZlciB0aGUgYWN0aW9uXG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuRm9jdXNUby5mb2N1cyhyZXR1cm5Gb2N1c09wdGlvbnMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybkZvY3VzVG8uZm9jdXMocmV0dXJuRm9jdXNPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3Nob3VsZFJldHVybkZvY3VzXSk7IC8vIE1FRElVTSBDQUxMQkFDS1NcblxuICB2YXIgb25Gb2N1cyA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChpc0FjdGl2ZS5jdXJyZW50KSB7XG4gICAgICBtZWRpdW1Gb2N1cy51c2VNZWRpdW0oZXZlbnQpO1xuICAgIH1cbiAgfSwgW10pO1xuICB2YXIgb25CbHVyID0gbWVkaXVtQmx1ci51c2VNZWRpdW07IC8vIFJFRiBQUk9QQUdBVElPTlxuICAvLyBub3QgdXNpbmcgcmVhbCByZWZzIGR1ZSB0byByYWNlIGNvbmRpdGlvbnNcblxuICB2YXIgc2V0T2JzZXJ2ZU5vZGUgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3T2JzZXJ2ZWQpIHtcbiAgICBpZiAob2JzZXJ2ZWQuY3VycmVudCAhPT0gbmV3T2JzZXJ2ZWQpIHtcbiAgICAgIG9ic2VydmVkLmN1cnJlbnQgPSBuZXdPYnNlcnZlZDtcbiAgICAgIHNldE9ic2VydmVkKG5ld09ic2VydmVkKTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2YgYWxsb3dUZXh0U2VsZWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybignUmVhY3QtRm9jdXMtTG9jazogYWxsb3dUZXh0U2VsZWN0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIGVuYWJsZWQgYnkgZGVmYXVsdCcpO1xuICAgIH1cblxuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIW9ic2VydmVkLmN1cnJlbnQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcignRm9jdXNMb2NrOiBjb3VsZCBub3Qgb2J0YWluIHJlZiB0byBpbnRlcm5hbCBub2RlJyk7XG4gICAgICB9XG4gICAgfSwgW10pO1xuICB9XG5cbiAgdmFyIGxvY2tQcm9wcyA9IF9leHRlbmRzKChfZXh0ZW5kczIgPSB7fSwgX2V4dGVuZHMyW2NvbnN0YW50cy5GT0NVU19ESVNBQkxFRF0gPSBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBfZXh0ZW5kczJbY29uc3RhbnRzLkZPQ1VTX0dST1VQXSA9IGdyb3VwLCBfZXh0ZW5kczIpLCBjb250YWluZXJQcm9wcyk7XG5cbiAgdmFyIGhhc0xlYWRpbmdHdWFyZHMgPSBub0ZvY3VzR3VhcmRzICE9PSB0cnVlO1xuICB2YXIgaGFzVGFpbGluZ0d1YXJkcyA9IGhhc0xlYWRpbmdHdWFyZHMgJiYgbm9Gb2N1c0d1YXJkcyAhPT0gJ3RhaWwnO1xuICB2YXIgbWVyZ2VkUmVmID0gdXNlTWVyZ2VSZWZzKFtwYXJlbnRSZWYsIHNldE9ic2VydmVOb2RlXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgaGFzTGVhZGluZ0d1YXJkcyAmJiBbXG4gIC8qI19fUFVSRV9fKi9cbiAgLy8gbmVhcmVzdCBmb2N1cyBndWFyZFxuICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwiZ3VhcmQtZmlyc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IDAsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pLCAvLyBmaXJzdCB0YWJiZWQgZWxlbWVudCBndWFyZFxuICBoYXNQb3NpdGl2ZUluZGljZXMgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLW5lYXJlc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IDEsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pIDogbnVsbF0sICFkaXNhYmxlZCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCB7XG4gICAgaWQ6IGlkLFxuICAgIHNpZGVDYXI6IG1lZGl1bVNpZGVjYXIsXG4gICAgb2JzZXJ2ZWQ6IHJlYWxPYnNlcnZlZCxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgcGVyc2lzdGVudEZvY3VzOiBwZXJzaXN0ZW50Rm9jdXMsXG4gICAgY3Jvc3NGcmFtZTogY3Jvc3NGcmFtZSxcbiAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICB3aGl0ZUxpc3Q6IHdoaXRlTGlzdCxcbiAgICBzaGFyZHM6IHNoYXJkcyxcbiAgICBvbkFjdGl2YXRpb246IG9uQWN0aXZhdGlvbixcbiAgICBvbkRlYWN0aXZhdGlvbjogb25EZWFjdGl2YXRpb24sXG4gICAgcmV0dXJuRm9jdXM6IHJldHVybkZvY3VzLFxuICAgIGZvY3VzT3B0aW9uczogZm9jdXNPcHRpb25zXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250YWluZXIsIF9leHRlbmRzKHtcbiAgICByZWY6IG1lcmdlZFJlZlxuICB9LCBsb2NrUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBvbkJsdXI6IG9uQmx1cixcbiAgICBvbkZvY3VzOiBvbkZvY3VzXG4gIH0pLCBjaGlsZHJlbiksIGhhc1RhaWxpbmdHdWFyZHMgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIFwiZGF0YS1mb2N1cy1ndWFyZFwiOiB0cnVlLFxuICAgIHRhYkluZGV4OiBkaXNhYmxlZCA/IC0xIDogMCxcbiAgICBzdHlsZTogaGlkZGVuR3VhcmRcbiAgfSkpO1xufSk7XG5Gb2N1c0xvY2sucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBjaGlsZHJlbjogbm9kZSxcbiAgZGlzYWJsZWQ6IGJvb2wsXG4gIHJldHVybkZvY3VzOiBvbmVPZlR5cGUoW2Jvb2wsIG9iamVjdCwgZnVuY10pLFxuICBmb2N1c09wdGlvbnM6IG9iamVjdCxcbiAgbm9Gb2N1c0d1YXJkczogYm9vbCxcbiAgaGFzUG9zaXRpdmVJbmRpY2VzOiBib29sLFxuICBhbGxvd1RleHRTZWxlY3Rpb246IGJvb2wsXG4gIGF1dG9Gb2N1czogYm9vbCxcbiAgcGVyc2lzdGVudEZvY3VzOiBib29sLFxuICBjcm9zc0ZyYW1lOiBib29sLFxuICBncm91cDogc3RyaW5nLFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgd2hpdGVMaXN0OiBmdW5jLFxuICBzaGFyZHM6IGFycmF5T2YoYW55KSxcbiAgYXM6IG9uZU9mVHlwZShbc3RyaW5nLCBmdW5jLCBvYmplY3RdKSxcbiAgbG9ja1Byb3BzOiBvYmplY3QsXG4gIG9uQWN0aXZhdGlvbjogZnVuYyxcbiAgb25EZWFjdGl2YXRpb246IGZ1bmMsXG4gIHNpZGVDYXI6IGFueS5pc1JlcXVpcmVkXG59IDoge307XG5Gb2N1c0xvY2suZGVmYXVsdFByb3BzID0ge1xuICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIHJldHVybkZvY3VzOiBmYWxzZSxcbiAgZm9jdXNPcHRpb25zOiB1bmRlZmluZWQsXG4gIG5vRm9jdXNHdWFyZHM6IGZhbHNlLFxuICBhdXRvRm9jdXM6IHRydWUsXG4gIHBlcnNpc3RlbnRGb2N1czogZmFsc2UsXG4gIGNyb3NzRnJhbWU6IHRydWUsXG4gIGhhc1Bvc2l0aXZlSW5kaWNlczogdW5kZWZpbmVkLFxuICBhbGxvd1RleHRTZWxlY3Rpb246IHVuZGVmaW5lZCxcbiAgZ3JvdXA6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIHdoaXRlTGlzdDogdW5kZWZpbmVkLFxuICBzaGFyZHM6IHVuZGVmaW5lZCxcbiAgYXM6ICdkaXYnLFxuICBsb2NrUHJvcHM6IHt9LFxuICBvbkFjdGl2YXRpb246IHVuZGVmaW5lZCxcbiAgb25EZWFjdGl2YXRpb246IHVuZGVmaW5lZFxufTtcbmV4cG9ydCBkZWZhdWx0IEZvY3VzTG9jazsiLCJpbXBvcnQgRm9jdXNMb2NrVUkgZnJvbSAnLi9Mb2NrJztcbmltcG9ydCBBdXRvRm9jdXNJbnNpZGUgZnJvbSAnLi9BdXRvRm9jdXNJbnNpZGUnO1xuaW1wb3J0IE1vdmVGb2N1c0luc2lkZSwgeyB1c2VGb2N1c0luc2lkZSB9IGZyb20gJy4vTW92ZUZvY3VzSW5zaWRlJztcbmltcG9ydCBGcmVlRm9jdXNJbnNpZGUgZnJvbSAnLi9GcmVlRm9jdXNJbnNpZGUnO1xuaW1wb3J0IEluRm9jdXNHdWFyZCBmcm9tICcuL0ZvY3VzR3VhcmQnO1xuZXhwb3J0IHsgQXV0b0ZvY3VzSW5zaWRlLCBNb3ZlRm9jdXNJbnNpZGUsIEZyZWVGb2N1c0luc2lkZSwgSW5Gb2N1c0d1YXJkLCBGb2N1c0xvY2tVSSwgdXNlRm9jdXNJbnNpZGUgfTtcbmV4cG9ydCBkZWZhdWx0IEZvY3VzTG9ja1VJOyIsImltcG9ydCB7IGNyZWF0ZVNpZGVjYXJNZWRpdW0gfSBmcm9tICd1c2Utc2lkZWNhcic7XG5leHBvcnQgdmFyIGVmZmVjdENhciA9IGNyZWF0ZVNpZGVjYXJNZWRpdW0oKTtcbmV4cG9ydCB2YXIgZm9jdXNIaWRkZW5NYXJrZXIgPSAnZGF0YS1mb2N1cy1vbi1oaWRkZW4nO1xuIiwiaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbCB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwvVUknO1xuaW1wb3J0IFJlYWN0Rm9jdXNMb2NrIGZyb20gJ3JlYWN0LWZvY3VzLWxvY2svVUknO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xuZXhwb3J0IHZhciBGb2N1c09uID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHBhcmVudFJlZikge1xuICAgIHZhciBfYSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKSwgbG9ja1Byb3BzID0gX2FbMF0sIHNldExvY2tQcm9wcyA9IF9hWzFdO1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBhdXRvRm9jdXMgPSBwcm9wcy5hdXRvRm9jdXMsIHNoYXJkcyA9IHByb3BzLnNoYXJkcywgX2IgPSBwcm9wcy5lbmFibGVkLCBlbmFibGVkID0gX2IgPT09IHZvaWQgMCA/IHRydWUgOiBfYiwgX2MgPSBwcm9wcy5zY3JvbGxMb2NrLCBzY3JvbGxMb2NrID0gX2MgPT09IHZvaWQgMCA/IHRydWUgOiBfYywgX2QgPSBwcm9wcy5mb2N1c0xvY2ssIGZvY3VzTG9jayA9IF9kID09PSB2b2lkIDAgPyB0cnVlIDogX2QsIF9lID0gcHJvcHMucmV0dXJuRm9jdXMsIHJldHVybkZvY3VzID0gX2UgPT09IHZvaWQgMCA/IHRydWUgOiBfZSwgaW5lcnQgPSBwcm9wcy5pbmVydCwgYWxsb3dQaW5jaFpvb20gPSBwcm9wcy5hbGxvd1BpbmNoWm9vbSwgc2lkZUNhciA9IHByb3BzLnNpZGVDYXIsIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgc2hvdWxkSWdub3JlID0gcHJvcHMuc2hvdWxkSWdub3JlLCBzdHlsZSA9IHByb3BzLnN0eWxlLCBhcyA9IHByb3BzLmFzLCByZXN0ID0gdHNsaWJfMS5fX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiYXV0b0ZvY3VzXCIsIFwic2hhcmRzXCIsIFwiZW5hYmxlZFwiLCBcInNjcm9sbExvY2tcIiwgXCJmb2N1c0xvY2tcIiwgXCJyZXR1cm5Gb2N1c1wiLCBcImluZXJ0XCIsIFwiYWxsb3dQaW5jaFpvb21cIiwgXCJzaWRlQ2FyXCIsIFwiY2xhc3NOYW1lXCIsIFwic2hvdWxkSWdub3JlXCIsIFwic3R5bGVcIiwgXCJhc1wiXSk7XG4gICAgdmFyIFNpZGVDYXIgPSBzaWRlQ2FyO1xuICAgIHZhciBvbkFjdGl2YXRpb24gPSBsb2NrUHJvcHMub25BY3RpdmF0aW9uLCBvbkRlYWN0aXZhdGlvbiA9IGxvY2tQcm9wcy5vbkRlYWN0aXZhdGlvbiwgcmVzdFByb3BzID0gdHNsaWJfMS5fX3Jlc3QobG9ja1Byb3BzLCBbXCJvbkFjdGl2YXRpb25cIiwgXCJvbkRlYWN0aXZhdGlvblwiXSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0Rm9jdXNMb2NrLCB7IHJlZjogcGFyZW50UmVmLCBzaWRlQ2FyOiBzaWRlQ2FyLCBkaXNhYmxlZDogIShsb2NrUHJvcHMgJiYgZW5hYmxlZCAmJiBmb2N1c0xvY2spLCByZXR1cm5Gb2N1czogcmV0dXJuRm9jdXMsIGF1dG9Gb2N1czogYXV0b0ZvY3VzLCBzaGFyZHM6IHNoYXJkcywgb25BY3RpdmF0aW9uOiBvbkFjdGl2YXRpb24sIG9uRGVhY3RpdmF0aW9uOiBvbkRlYWN0aXZhdGlvbiwgY2xhc3NOYW1lOiBjbGFzc05hbWUsIGFzOiBSZW1vdmVTY3JvbGwsIHdoaXRlTGlzdDogc2hvdWxkSWdub3JlLCBsb2NrUHJvcHM6IHRzbGliXzEuX19hc3NpZ24oe30sIHJlc3RQcm9wcywgeyBzaWRlQ2FyOiBzaWRlQ2FyLFxuICAgICAgICAgICAgICAgIHNoYXJkczogc2hhcmRzLFxuICAgICAgICAgICAgICAgIGFsbG93UGluY2hab29tOiBhbGxvd1BpbmNoWm9vbSxcbiAgICAgICAgICAgICAgICBhczogYXMsXG4gICAgICAgICAgICAgICAgaW5lcnQ6IGluZXJ0LFxuICAgICAgICAgICAgICAgIHN0eWxlOiBzdHlsZSwgZW5hYmxlZDogZW5hYmxlZCAmJiBzY3JvbGxMb2NrIH0pIH0sIGNoaWxkcmVuKSxcbiAgICAgICAgZW5hYmxlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCB0c2xpYl8xLl9fYXNzaWduKHt9LCByZXN0LCB7IHNpZGVDYXI6IGVmZmVjdENhciwgc2V0TG9ja1Byb3BzOiBzZXRMb2NrUHJvcHMsIHNoYXJkczogc2hhcmRzIH0pKSkpKTtcbn0pO1xuZXhwb3J0ICogZnJvbSAnLi9yZUV4cG9ydHMnO1xuIiwiaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBTaWRlQ2FyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNpZGVDYXIgPSBfYS5zaWRlQ2FyLCByZXN0ID0gdHNsaWJfMS5fX3Jlc3QoX2EsIFtcInNpZGVDYXJcIl0pO1xuICAgIGlmICghc2lkZUNhcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZGVjYXI6IHBsZWFzZSBwcm92aWRlIGBzaWRlQ2FyYCBwcm9wZXJ0eSB0byBpbXBvcnQgdGhlIHJpZ2h0IGNhcicpO1xuICAgIH1cbiAgICB2YXIgVGFyZ2V0ID0gc2lkZUNhci5yZWFkKCk7XG4gICAgaWYgKCFUYXJnZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlY2FyIG1lZGl1bSBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFyZ2V0LCB0c2xpYl8xLl9fYXNzaWduKHt9LCByZXN0KSk7XG59O1xuU2lkZUNhci5pc1NpZGVDYXJFeHBvcnQgPSB0cnVlO1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFNpZGVjYXIobWVkaXVtLCBleHBvcnRlZCkge1xuICAgIG1lZGl1bS51c2VNZWRpdW0oZXhwb3J0ZWQpO1xuICAgIHJldHVybiBTaWRlQ2FyO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSc7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5JztcbmltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiB3aXRoU2lkZUVmZmVjdChyZWR1Y2VQcm9wc1RvU3RhdGUsIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGlmICh0eXBlb2YgcmVkdWNlUHJvcHNUb1N0YXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHJlZHVjZVByb3BzVG9TdGF0ZSB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50IHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoV3JhcHBlZENvbXBvbmVudCkge1xuICAgIHJldHVybiBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKFdyYXBwZWRDb21wb25lbnQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBpZiAodHlwZW9mIFdyYXBwZWRDb21wb25lbnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBXcmFwcGVkQ29tcG9uZW50IHRvIGJlIGEgUmVhY3QgY29tcG9uZW50LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBtb3VudGVkSW5zdGFuY2VzID0gW107XG4gICAgdmFyIHN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZW1pdENoYW5nZSgpIHtcbiAgICAgIHN0YXRlID0gcmVkdWNlUHJvcHNUb1N0YXRlKG1vdW50ZWRJbnN0YW5jZXMubWFwKGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UucHJvcHM7XG4gICAgICB9KSk7XG4gICAgICBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KHN0YXRlKTtcbiAgICB9XG5cbiAgICB2YXIgU2lkZUVmZmVjdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgICAgIF9pbmhlcml0c0xvb3NlKFNpZGVFZmZlY3QsIF9QdXJlQ29tcG9uZW50KTtcblxuICAgICAgZnVuY3Rpb24gU2lkZUVmZmVjdCgpIHtcbiAgICAgICAgcmV0dXJuIF9QdXJlQ29tcG9uZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gVHJ5IHRvIHVzZSBkaXNwbGF5TmFtZSBvZiB3cmFwcGVkIGNvbXBvbmVudFxuICAgICAgU2lkZUVmZmVjdC5wZWVrID0gZnVuY3Rpb24gcGVlaygpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfTtcblxuICAgICAgdmFyIF9wcm90byA9IFNpZGVFZmZlY3QucHJvdG90eXBlO1xuXG4gICAgICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgbW91bnRlZEluc3RhbmNlcy5wdXNoKHRoaXMpO1xuICAgICAgICBlbWl0Q2hhbmdlKCk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgICBlbWl0Q2hhbmdlKCk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gbW91bnRlZEluc3RhbmNlcy5pbmRleE9mKHRoaXMpO1xuICAgICAgICBtb3VudGVkSW5zdGFuY2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCB0aGlzLnByb3BzKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBTaWRlRWZmZWN0O1xuICAgIH0oUHVyZUNvbXBvbmVudCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoU2lkZUVmZmVjdCwgXCJkaXNwbGF5TmFtZVwiLCBcIlNpZGVFZmZlY3QoXCIgKyBnZXREaXNwbGF5TmFtZShXcmFwcGVkQ29tcG9uZW50KSArIFwiKVwiKTtcblxuICAgIHJldHVybiBTaWRlRWZmZWN0O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU2lkZUVmZmVjdDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSIsImV4cG9ydCB2YXIgdG9BcnJheSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgdmFyIHJldCA9IEFycmF5KGEubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcmV0W2ldID0gYVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG5leHBvcnQgdmFyIGFzQXJyYXkgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gKEFycmF5LmlzQXJyYXkoYSkgPyBhIDogW2FdKTsgfTtcbiIsImV4cG9ydCB2YXIgZ2V0QWN0aXZlRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRcbiAgICAgICAgPyBkb2N1bWVudC5hY3RpdmVFbGVtZW50LnNoYWRvd1Jvb3RcbiAgICAgICAgICAgID8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgIDogZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgICAgICA6IHVuZGVmaW5lZCk7XG59O1xuIiwiaW1wb3J0IHsgRk9DVVNfRElTQUJMRUQsIEZPQ1VTX0dST1VQIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFzQXJyYXksIHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbnZhciBmaWx0ZXJOZXN0ZWQgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICB2YXIgY29udGFpbmVkID0gbmV3IFNldCgpO1xuICAgIHZhciBsID0gbm9kZXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSArPSAxKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IGw7IGogKz0gMSkge1xuICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gbm9kZXNbaV0uY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZXNbal0pO1xuICAgICAgICAgICAgaWYgKChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb250YWluZWQuYWRkKGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMpID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lZC5hZGQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzLmZpbHRlcihmdW5jdGlvbiAoXywgaW5kZXgpIHsgcmV0dXJuICFjb250YWluZWQuaGFzKGluZGV4KTsgfSk7XG59O1xudmFyIGdldFRvcFBhcmVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZSA/IGdldFRvcFBhcmVudChub2RlLnBhcmVudE5vZGUpIDogbm9kZTtcbn07XG5leHBvcnQgdmFyIGdldEFsbEFmZmVjdGVkTm9kZXMgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBub2RlcyA9IGFzQXJyYXkobm9kZSk7XG4gICAgcmV0dXJuIG5vZGVzLmZpbHRlcihCb29sZWFuKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgY3VycmVudE5vZGUpIHtcbiAgICAgICAgdmFyIGdyb3VwID0gY3VycmVudE5vZGUuZ2V0QXR0cmlidXRlKEZPQ1VTX0dST1VQKTtcbiAgICAgICAgYWNjLnB1c2guYXBwbHkoYWNjLCAoZ3JvdXBcbiAgICAgICAgICAgID8gZmlsdGVyTmVzdGVkKHRvQXJyYXkoZ2V0VG9wUGFyZW50KGN1cnJlbnROb2RlKS5xdWVyeVNlbGVjdG9yQWxsKFwiW1wiLmNvbmNhdChGT0NVU19HUk9VUCwgXCI9XFxcIlwiKS5jb25jYXQoZ3JvdXAsIFwiXFxcIl06bm90KFtcIikuY29uY2F0KEZPQ1VTX0RJU0FCTEVELCBcIj1cXFwiZGlzYWJsZWRcXFwiXSlcIikpKSlcbiAgICAgICAgICAgIDogW2N1cnJlbnROb2RlXSkpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbn07XG4iLCJpbXBvcnQgeyBnZXRBbGxBZmZlY3RlZE5vZGVzIH0gZnJvbSAnLi91dGlscy9hbGwtYWZmZWN0ZWQnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgZ2V0QWN0aXZlRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvZ2V0QWN0aXZlRWxlbWVudCc7XG52YXIgZm9jdXNJbkZyYW1lID0gZnVuY3Rpb24gKGZyYW1lKSB7IHJldHVybiBmcmFtZSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsgfTtcbnZhciBmb2N1c0luc2lkZUlmcmFtZSA9IGZ1bmN0aW9uICh0b3BOb2RlKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odG9BcnJheSh0b3BOb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lmcmFtZScpKS5zb21lKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBmb2N1c0luRnJhbWUobm9kZSk7IH0pKTtcbn07XG5leHBvcnQgdmFyIGZvY3VzSW5zaWRlID0gZnVuY3Rpb24gKHRvcE5vZGUpIHtcbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGdldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgKGFjdGl2ZUVsZW1lbnQuZGF0YXNldCAmJiBhY3RpdmVFbGVtZW50LmRhdGFzZXQuZm9jdXNHdWFyZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwgbm9kZSkgeyByZXR1cm4gcmVzdWx0IHx8IG5vZGUuY29udGFpbnMoYWN0aXZlRWxlbWVudCkgfHwgZm9jdXNJbnNpZGVJZnJhbWUobm9kZSk7IH0sIGZhbHNlKTtcbn07XG4iLCJ2YXIgaXNFbGVtZW50SGlkZGVuID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpO1xuICAgIGlmICghY29tcHV0ZWRTdHlsZSB8fCAhY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnIHx8IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAnaGlkZGVuJyk7XG59O1xudmFyIGlzVmlzaWJsZVVuY2FjaGVkID0gZnVuY3Rpb24gKG5vZGUsIGNoZWNrUGFyZW50KSB7XG4gICAgcmV0dXJuICFub2RlIHx8XG4gICAgICAgIG5vZGUgPT09IGRvY3VtZW50IHx8XG4gICAgICAgIChub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkgfHxcbiAgICAgICAgKCFpc0VsZW1lbnRIaWRkZW4obm9kZSkgJiZcbiAgICAgICAgICAgIGNoZWNrUGFyZW50KG5vZGUucGFyZW50Tm9kZSAmJiBub2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERVxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLmhvc3RcbiAgICAgICAgICAgICAgICA6IG5vZGUucGFyZW50Tm9kZSkpO1xufTtcbmV4cG9ydCB2YXIgaXNWaXNpYmxlQ2FjaGVkID0gZnVuY3Rpb24gKHZpc2liaWxpdHlDYWNoZSwgbm9kZSkge1xuICAgIHZhciBjYWNoZWQgPSB2aXNpYmlsaXR5Q2FjaGUuZ2V0KG5vZGUpO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gaXNWaXNpYmxlVW5jYWNoZWQobm9kZSwgaXNWaXNpYmxlQ2FjaGVkLmJpbmQodW5kZWZpbmVkLCB2aXNpYmlsaXR5Q2FjaGUpKTtcbiAgICB2aXNpYmlsaXR5Q2FjaGUuc2V0KG5vZGUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgdmFyIGdldERhdGFzZXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLmRhdGFzZXQ7XG59O1xuZXhwb3J0IHZhciBpc0hUTUxCdXR0b25FbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ0JVVFRPTic7IH07XG5leHBvcnQgdmFyIGlzSFRNTElucHV0RWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdJTlBVVCc7IH07XG5leHBvcnQgdmFyIGlzUmFkaW9FbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpICYmIG5vZGUudHlwZSA9PT0gJ3JhZGlvJztcbn07XG5leHBvcnQgdmFyIG5vdEhpZGRlbklucHV0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gISgoaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpIHx8IGlzSFRNTEJ1dHRvbkVsZW1lbnQobm9kZSkpICYmIChub2RlLnR5cGUgPT09ICdoaWRkZW4nIHx8IG5vZGUuZGlzYWJsZWQpKSAmJlxuICAgICAgICAhbm9kZS5hcmlhRGlzYWJsZWQ7XG59O1xuZXhwb3J0IHZhciBpc0d1YXJkID0gZnVuY3Rpb24gKG5vZGUpIHsgdmFyIF9hOyByZXR1cm4gQm9vbGVhbihub2RlICYmICgoX2EgPSBnZXREYXRhc2V0KG5vZGUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXNHdWFyZCkpOyB9O1xuZXhwb3J0IHZhciBpc05vdEFHdWFyZCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiAhaXNHdWFyZChub2RlKTsgfTtcbmV4cG9ydCB2YXIgaXNEZWZpbmVkID0gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIEJvb2xlYW4oeCk7IH07XG4iLCJpbXBvcnQgeyBpc1JhZGlvRWxlbWVudCB9IGZyb20gJy4vaXMnO1xudmFyIGZpbmRTZWxlY3RlZFJhZGlvID0gZnVuY3Rpb24gKG5vZGUsIG5vZGVzKSB7XG4gICAgcmV0dXJuIG5vZGVzXG4gICAgICAgIC5maWx0ZXIoaXNSYWRpb0VsZW1lbnQpXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5uYW1lID09PSBub2RlLm5hbWU7IH0pXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5jaGVja2VkOyB9KVswXSB8fCBub2RlO1xufTtcbmV4cG9ydCB2YXIgY29ycmVjdE5vZGUgPSBmdW5jdGlvbiAobm9kZSwgbm9kZXMpIHtcbiAgICBpZiAoaXNSYWRpb0VsZW1lbnQobm9kZSkgJiYgbm9kZS5uYW1lKSB7XG4gICAgICAgIHJldHVybiBmaW5kU2VsZWN0ZWRSYWRpbyhub2RlLCBub2Rlcyk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xufTtcbmV4cG9ydCB2YXIgY29ycmVjdE5vZGVzID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gICAgdmFyIHJlc3VsdFNldCA9IG5ldyBTZXQoKTtcbiAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiByZXN1bHRTZXQuYWRkKGNvcnJlY3ROb2RlKG5vZGUsIG5vZGVzKSk7IH0pO1xuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlc3VsdFNldC5oYXMobm9kZSk7IH0pO1xufTtcbiIsImltcG9ydCB7IGNvcnJlY3ROb2RlIH0gZnJvbSAnLi9jb3JyZWN0Rm9jdXMnO1xuZXhwb3J0IHZhciBwaWNrRmlyc3RGb2N1cyA9IGZ1bmN0aW9uIChub2Rlcykge1xuICAgIGlmIChub2Rlc1swXSAmJiBub2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiBjb3JyZWN0Tm9kZShub2Rlc1swXSwgbm9kZXMpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZXNbMF07XG59O1xuZXhwb3J0IHZhciBwaWNrRm9jdXNhYmxlID0gZnVuY3Rpb24gKG5vZGVzLCBpbmRleCkge1xuICAgIGlmIChub2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiBub2Rlcy5pbmRleE9mKGNvcnJlY3ROb2RlKG5vZGVzW2luZGV4XSwgbm9kZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xufTtcbiIsImltcG9ydCB7IGNvcnJlY3ROb2RlcyB9IGZyb20gJy4vdXRpbHMvY29ycmVjdEZvY3VzJztcbmltcG9ydCB7IHBpY2tGb2N1c2FibGUgfSBmcm9tICcuL3V0aWxzL2ZpcnN0Rm9jdXMnO1xuaW1wb3J0IHsgaXNHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuZXhwb3J0IHZhciBORVdfRk9DVVMgPSAnTkVXX0ZPQ1VTJztcbmV4cG9ydCB2YXIgbmV3Rm9jdXMgPSBmdW5jdGlvbiAoaW5uZXJOb2Rlcywgb3V0ZXJOb2RlcywgYWN0aXZlRWxlbWVudCwgbGFzdE5vZGUpIHtcbiAgICB2YXIgY250ID0gaW5uZXJOb2Rlcy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0Rm9jdXMgPSBpbm5lck5vZGVzWzBdO1xuICAgIHZhciBsYXN0Rm9jdXMgPSBpbm5lck5vZGVzW2NudCAtIDFdO1xuICAgIHZhciBpc09uR3VhcmQgPSBpc0d1YXJkKGFjdGl2ZUVsZW1lbnQpO1xuICAgIGlmIChhY3RpdmVFbGVtZW50ICYmIGlubmVyTm9kZXMuaW5kZXhPZihhY3RpdmVFbGVtZW50KSA+PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBhY3RpdmVJbmRleCA9IGFjdGl2ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCA/IG91dGVyTm9kZXMuaW5kZXhPZihhY3RpdmVFbGVtZW50KSA6IC0xO1xuICAgIHZhciBsYXN0SW5kZXggPSBsYXN0Tm9kZSA/IG91dGVyTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiBhY3RpdmVJbmRleDtcbiAgICB2YXIgbGFzdE5vZGVJbnNpZGUgPSBsYXN0Tm9kZSA/IGlubmVyTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiAtMTtcbiAgICB2YXIgaW5kZXhEaWZmID0gYWN0aXZlSW5kZXggLSBsYXN0SW5kZXg7XG4gICAgdmFyIGZpcnN0Tm9kZUluZGV4ID0gb3V0ZXJOb2Rlcy5pbmRleE9mKGZpcnN0Rm9jdXMpO1xuICAgIHZhciBsYXN0Tm9kZUluZGV4ID0gb3V0ZXJOb2Rlcy5pbmRleE9mKGxhc3RGb2N1cyk7XG4gICAgdmFyIGNvcnJlY3RlZE5vZGVzID0gY29ycmVjdE5vZGVzKG91dGVyTm9kZXMpO1xuICAgIHZhciBjb3JyZWN0ZWRJbmRleCA9IGFjdGl2ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCA/IGNvcnJlY3RlZE5vZGVzLmluZGV4T2YoYWN0aXZlRWxlbWVudCkgOiAtMTtcbiAgICB2YXIgY29ycmVjdGVkSW5kZXhEaWZmID0gY29ycmVjdGVkSW5kZXggLSAobGFzdE5vZGUgPyBjb3JyZWN0ZWROb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IGFjdGl2ZUluZGV4KTtcbiAgICB2YXIgcmV0dXJuRmlyc3ROb2RlID0gcGlja0ZvY3VzYWJsZShpbm5lck5vZGVzLCAwKTtcbiAgICB2YXIgcmV0dXJuTGFzdE5vZGUgPSBwaWNrRm9jdXNhYmxlKGlubmVyTm9kZXMsIGNudCAtIDEpO1xuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gLTEgfHwgbGFzdE5vZGVJbnNpZGUgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBORVdfRk9DVVM7XG4gICAgfVxuICAgIGlmICghaW5kZXhEaWZmICYmIGxhc3ROb2RlSW5zaWRlID49IDApIHtcbiAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgIH1cbiAgICBpZiAoYWN0aXZlSW5kZXggPD0gZmlyc3ROb2RlSW5kZXggJiYgaXNPbkd1YXJkICYmIE1hdGguYWJzKGluZGV4RGlmZikgPiAxKSB7XG4gICAgICAgIHJldHVybiByZXR1cm5MYXN0Tm9kZTtcbiAgICB9XG4gICAgaWYgKGFjdGl2ZUluZGV4ID49IGxhc3ROb2RlSW5kZXggJiYgaXNPbkd1YXJkICYmIE1hdGguYWJzKGluZGV4RGlmZikgPiAxKSB7XG4gICAgICAgIHJldHVybiByZXR1cm5GaXJzdE5vZGU7XG4gICAgfVxuICAgIGlmIChpbmRleERpZmYgJiYgTWF0aC5hYnMoY29ycmVjdGVkSW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgIH1cbiAgICBpZiAoYWN0aXZlSW5kZXggPD0gZmlyc3ROb2RlSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkxhc3ROb2RlO1xuICAgIH1cbiAgICBpZiAoYWN0aXZlSW5kZXggPiBsYXN0Tm9kZUluZGV4KSB7XG4gICAgICAgIHJldHVybiByZXR1cm5GaXJzdE5vZGU7XG4gICAgfVxuICAgIGlmIChpbmRleERpZmYpIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKGluZGV4RGlmZikgPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChjbnQgKyBsYXN0Tm9kZUluc2lkZSArIGluZGV4RGlmZikgJSBjbnQ7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwiaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuZXhwb3J0IHZhciB0YWJTb3J0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgdGFiRGlmZiA9IGEudGFiSW5kZXggLSBiLnRhYkluZGV4O1xuICAgIHZhciBpbmRleERpZmYgPSBhLmluZGV4IC0gYi5pbmRleDtcbiAgICBpZiAodGFiRGlmZikge1xuICAgICAgICBpZiAoIWEudGFiSW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYi50YWJJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YWJEaWZmIHx8IGluZGV4RGlmZjtcbn07XG5leHBvcnQgdmFyIG9yZGVyQnlUYWJJbmRleCA9IGZ1bmN0aW9uIChub2RlcywgZmlsdGVyTmVnYXRpdmUsIGtlZXBHdWFyZHMpIHtcbiAgICByZXR1cm4gdG9BcnJheShub2RlcylcbiAgICAgICAgLm1hcChmdW5jdGlvbiAobm9kZSwgaW5kZXgpIHsgcmV0dXJuICh7XG4gICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgdGFiSW5kZXg6IGtlZXBHdWFyZHMgJiYgbm9kZS50YWJJbmRleCA9PT0gLTEgPyAoKG5vZGUuZGF0YXNldCB8fCB7fSkuZm9jdXNHdWFyZCA/IDAgOiAtMSkgOiBub2RlLnRhYkluZGV4LFxuICAgIH0pOyB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiAhZmlsdGVyTmVnYXRpdmUgfHwgZGF0YS50YWJJbmRleCA+PSAwOyB9KVxuICAgICAgICAuc29ydCh0YWJTb3J0KTtcbn07XG4iLCJpbXBvcnQgeyBGT0NVU19BVVRPIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmltcG9ydCB7IHRhYmJhYmxlcyB9IGZyb20gJy4vdGFiYmFibGVzJztcbnZhciBxdWVyeVRhYmJhYmxlcyA9IHRhYmJhYmxlcy5qb2luKCcsJyk7XG52YXIgcXVlcnlHdWFyZFRhYmJhYmxlcyA9IFwiXCIuY29uY2F0KHF1ZXJ5VGFiYmFibGVzLCBcIiwgW2RhdGEtZm9jdXMtZ3VhcmRdXCIpO1xuZXhwb3J0IHZhciBnZXRGb2N1c2FibGVzID0gZnVuY3Rpb24gKHBhcmVudHMsIHdpdGhHdWFyZHMpIHtcbiAgICByZXR1cm4gcGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGFyZW50KSB7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KHRvQXJyYXkocGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwod2l0aEd1YXJkcyA/IHF1ZXJ5R3VhcmRUYWJiYWJsZXMgOiBxdWVyeVRhYmJhYmxlcykpLCBwYXJlbnQucGFyZW50Tm9kZVxuICAgICAgICAgICAgPyB0b0FycmF5KHBhcmVudC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnlUYWJiYWJsZXMpKS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUgPT09IHBhcmVudDsgfSlcbiAgICAgICAgICAgIDogW10pO1xuICAgIH0sIFtdKTtcbn07XG5leHBvcnQgdmFyIGdldFBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgIHZhciBwYXJlbnRGb2N1cyA9IHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW1wiLmNvbmNhdChGT0NVU19BVVRPLCBcIl1cIikpO1xuICAgIHJldHVybiB0b0FycmF5KHBhcmVudEZvY3VzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBnZXRGb2N1c2FibGVzKFtub2RlXSk7IH0pXG4gICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbm9kZXMpIHsgcmV0dXJuIGFjYy5jb25jYXQobm9kZXMpOyB9LCBbXSk7XG59O1xuIiwiZXhwb3J0IHZhciB0YWJiYWJsZXMgPSBbXG4gICAgJ2J1dHRvbjplbmFibGVkJyxcbiAgICAnc2VsZWN0OmVuYWJsZWQnLFxuICAgICd0ZXh0YXJlYTplbmFibGVkJyxcbiAgICAnaW5wdXQ6ZW5hYmxlZCcsXG4gICAgJ2FbaHJlZl0nLFxuICAgICdhcmVhW2hyZWZdJyxcbiAgICAnc3VtbWFyeScsXG4gICAgJ2lmcmFtZScsXG4gICAgJ29iamVjdCcsXG4gICAgJ2VtYmVkJyxcbiAgICAnYXVkaW9bY29udHJvbHNdJyxcbiAgICAndmlkZW9bY29udHJvbHNdJyxcbiAgICAnW3RhYmluZGV4XScsXG4gICAgJ1tjb250ZW50ZWRpdGFibGVdJyxcbiAgICAnW2F1dG9mb2N1c10nLFxuXTtcbiIsImltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmltcG9ydCB7IGlzVmlzaWJsZUNhY2hlZCwgbm90SGlkZGVuSW5wdXQgfSBmcm9tICcuL2lzJztcbmltcG9ydCB7IG9yZGVyQnlUYWJJbmRleCB9IGZyb20gJy4vdGFiT3JkZXInO1xuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlcywgZ2V0UGFyZW50QXV0b2ZvY3VzYWJsZXMgfSBmcm9tICcuL3RhYlV0aWxzJztcbmV4cG9ydCB2YXIgZmlsdGVyRm9jdXNhYmxlID0gZnVuY3Rpb24gKG5vZGVzLCB2aXNpYmlsaXR5Q2FjaGUpIHtcbiAgICByZXR1cm4gdG9BcnJheShub2RlcylcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gaXNWaXNpYmxlQ2FjaGVkKHZpc2liaWxpdHlDYWNoZSwgbm9kZSk7IH0pXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vdEhpZGRlbklucHV0KG5vZGUpOyB9KTtcbn07XG5leHBvcnQgdmFyIGdldFRhYmJhYmxlTm9kZXMgPSBmdW5jdGlvbiAodG9wTm9kZXMsIHZpc2liaWxpdHlDYWNoZSwgd2l0aEd1YXJkcykge1xuICAgIHJldHVybiBvcmRlckJ5VGFiSW5kZXgoZmlsdGVyRm9jdXNhYmxlKGdldEZvY3VzYWJsZXModG9wTm9kZXMsIHdpdGhHdWFyZHMpLCB2aXNpYmlsaXR5Q2FjaGUpLCB0cnVlLCB3aXRoR3VhcmRzKTtcbn07XG5leHBvcnQgdmFyIGdldEFsbFRhYmJhYmxlTm9kZXMgPSBmdW5jdGlvbiAodG9wTm9kZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiBvcmRlckJ5VGFiSW5kZXgoZmlsdGVyRm9jdXNhYmxlKGdldEZvY3VzYWJsZXModG9wTm9kZXMpLCB2aXNpYmlsaXR5Q2FjaGUpLCBmYWxzZSk7XG59O1xuZXhwb3J0IHZhciBwYXJlbnRBdXRvZm9jdXNhYmxlcyA9IGZ1bmN0aW9uICh0b3BOb2RlLCB2aXNpYmlsaXR5Q2FjaGUpIHtcbiAgICByZXR1cm4gZmlsdGVyRm9jdXNhYmxlKGdldFBhcmVudEF1dG9mb2N1c2FibGVzKHRvcE5vZGUpLCB2aXNpYmlsaXR5Q2FjaGUpO1xufTtcbiIsImltcG9ydCB7IHBhcmVudEF1dG9mb2N1c2FibGVzIH0gZnJvbSAnLi9ET011dGlscyc7XG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG52YXIgZ2V0UGFyZW50cyA9IGZ1bmN0aW9uIChub2RlLCBwYXJlbnRzKSB7XG4gICAgaWYgKHBhcmVudHMgPT09IHZvaWQgMCkgeyBwYXJlbnRzID0gW107IH1cbiAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBnZXRQYXJlbnRzKG5vZGUucGFyZW50Tm9kZSwgcGFyZW50cyk7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRzO1xufTtcbmV4cG9ydCB2YXIgZ2V0Q29tbW9uUGFyZW50ID0gZnVuY3Rpb24gKG5vZGVBLCBub2RlQikge1xuICAgIHZhciBwYXJlbnRzQSA9IGdldFBhcmVudHMobm9kZUEpO1xuICAgIHZhciBwYXJlbnRzQiA9IGdldFBhcmVudHMobm9kZUIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50c0EubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRzQVtpXTtcbiAgICAgICAgaWYgKHBhcmVudHNCLmluZGV4T2YoY3VycmVudFBhcmVudCkgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydCB2YXIgZ2V0VG9wQ29tbW9uUGFyZW50ID0gZnVuY3Rpb24gKGJhc2VBY3RpdmVFbGVtZW50LCBsZWZ0RW50cnksIHJpZ2h0RW50cmllcykge1xuICAgIHZhciBhY3RpdmVFbGVtZW50cyA9IGFzQXJyYXkoYmFzZUFjdGl2ZUVsZW1lbnQpO1xuICAgIHZhciBsZWZ0RW50cmllcyA9IGFzQXJyYXkobGVmdEVudHJ5KTtcbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnRzWzBdO1xuICAgIHZhciB0b3BDb21tb24gPSBmYWxzZTtcbiAgICBsZWZ0RW50cmllcy5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgdG9wQ29tbW9uID0gZ2V0Q29tbW9uUGFyZW50KHRvcENvbW1vbiB8fCBlbnRyeSwgZW50cnkpIHx8IHRvcENvbW1vbjtcbiAgICAgICAgcmlnaHRFbnRyaWVzLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChzdWJFbnRyeSkge1xuICAgICAgICAgICAgdmFyIGNvbW1vbiA9IGdldENvbW1vblBhcmVudChhY3RpdmVFbGVtZW50LCBzdWJFbnRyeSk7XG4gICAgICAgICAgICBpZiAoY29tbW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0b3BDb21tb24gfHwgY29tbW9uLmNvbnRhaW5zKHRvcENvbW1vbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wQ29tbW9uID0gY29tbW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wQ29tbW9uID0gZ2V0Q29tbW9uUGFyZW50KGNvbW1vbiwgdG9wQ29tbW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB0b3BDb21tb247XG59O1xuZXhwb3J0IHZhciBhbGxQYXJlbnRBdXRvZm9jdXNhYmxlcyA9IGZ1bmN0aW9uIChlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpIHtcbiAgICByZXR1cm4gZW50cmllcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbm9kZSkgeyByZXR1cm4gYWNjLmNvbmNhdChwYXJlbnRBdXRvZm9jdXNhYmxlcyhub2RlLCB2aXNpYmlsaXR5Q2FjaGUpKTsgfSwgW10pO1xufTtcbiIsImltcG9ydCB7IE5FV19GT0NVUywgbmV3Rm9jdXMgfSBmcm9tICcuL3NvbHZlcic7XG5pbXBvcnQgeyBnZXRBbGxUYWJiYWJsZU5vZGVzLCBnZXRUYWJiYWJsZU5vZGVzIH0gZnJvbSAnLi91dGlscy9ET011dGlscyc7XG5pbXBvcnQgeyBnZXRBbGxBZmZlY3RlZE5vZGVzIH0gZnJvbSAnLi91dGlscy9hbGwtYWZmZWN0ZWQnO1xuaW1wb3J0IHsgcGlja0ZpcnN0Rm9jdXMgfSBmcm9tICcuL3V0aWxzL2ZpcnN0Rm9jdXMnO1xuaW1wb3J0IHsgZ2V0QWN0aXZlRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvZ2V0QWN0aXZlRWxlbWVudCc7XG5pbXBvcnQgeyBnZXREYXRhc2V0LCBpc0RlZmluZWQsIGlzTm90QUd1YXJkIH0gZnJvbSAnLi91dGlscy9pcyc7XG5pbXBvcnQgeyBhbGxQYXJlbnRBdXRvZm9jdXNhYmxlcywgZ2V0VG9wQ29tbW9uUGFyZW50IH0gZnJvbSAnLi91dGlscy9wYXJlbnRpbmcnO1xudmFyIGZpbmRBdXRvRm9jdXNlZCA9IGZ1bmN0aW9uIChhdXRvRm9jdXNhYmxlcykge1xuICAgIHJldHVybiBmdW5jdGlvbiAobm9kZSkgeyB2YXIgX2E7IHJldHVybiBub2RlLmF1dG9mb2N1cyB8fCAhISgoX2EgPSBnZXREYXRhc2V0KG5vZGUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYXV0b2ZvY3VzKSB8fCBhdXRvRm9jdXNhYmxlcy5pbmRleE9mKG5vZGUpID49IDA7IH07XG59O1xudmFyIHJlb3JkZXJOb2RlcyA9IGZ1bmN0aW9uIChzcmNOb2RlcywgZHN0Tm9kZXMpIHtcbiAgICB2YXIgcmVtYXAgPSBuZXcgTWFwKCk7XG4gICAgZHN0Tm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoZW50aXR5KSB7IHJldHVybiByZW1hcC5zZXQoZW50aXR5Lm5vZGUsIGVudGl0eSk7IH0pO1xuICAgIHJldHVybiBzcmNOb2Rlcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlbWFwLmdldChub2RlKTsgfSkuZmlsdGVyKGlzRGVmaW5lZCk7XG59O1xuZXhwb3J0IHZhciBnZXRGb2N1c01lcmdlID0gZnVuY3Rpb24gKHRvcE5vZGUsIGxhc3ROb2RlKSB7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudCAmJiBnZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRBbGxBZmZlY3RlZE5vZGVzKHRvcE5vZGUpLmZpbHRlcihpc05vdEFHdWFyZCk7XG4gICAgdmFyIGNvbW1vblBhcmVudCA9IGdldFRvcENvbW1vblBhcmVudChhY3RpdmVFbGVtZW50IHx8IHRvcE5vZGUsIHRvcE5vZGUsIGVudHJpZXMpO1xuICAgIHZhciB2aXNpYmlsaXR5Q2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgdmFyIGFueUZvY3VzYWJsZSA9IGdldEFsbFRhYmJhYmxlTm9kZXMoZW50cmllcywgdmlzaWJpbGl0eUNhY2hlKTtcbiAgICB2YXIgaW5uZXJFbGVtZW50cyA9IGdldFRhYmJhYmxlTm9kZXMoZW50cmllcywgdmlzaWJpbGl0eUNhY2hlKS5maWx0ZXIoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIGlzTm90QUd1YXJkKG5vZGUpO1xuICAgIH0pO1xuICAgIGlmICghaW5uZXJFbGVtZW50c1swXSkge1xuICAgICAgICBpbm5lckVsZW1lbnRzID0gYW55Rm9jdXNhYmxlO1xuICAgICAgICBpZiAoIWlubmVyRWxlbWVudHNbMF0pIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIG91dGVyTm9kZXMgPSBnZXRBbGxUYWJiYWJsZU5vZGVzKFtjb21tb25QYXJlbnRdLCB2aXNpYmlsaXR5Q2FjaGUpLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgb3JkZXJlZElubmVyRWxlbWVudHMgPSByZW9yZGVyTm9kZXMob3V0ZXJOb2RlcywgaW5uZXJFbGVtZW50cyk7XG4gICAgdmFyIGlubmVyTm9kZXMgPSBvcmRlcmVkSW5uZXJFbGVtZW50cy5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSk7XG4gICAgdmFyIG5ld0lkID0gbmV3Rm9jdXMoaW5uZXJOb2Rlcywgb3V0ZXJOb2RlcywgYWN0aXZlRWxlbWVudCwgbGFzdE5vZGUpO1xuICAgIGlmIChuZXdJZCA9PT0gTkVXX0ZPQ1VTKSB7XG4gICAgICAgIHZhciBhdXRvRm9jdXNhYmxlID0gYW55Rm9jdXNhYmxlXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKGZpbmRBdXRvRm9jdXNlZChhbGxQYXJlbnRBdXRvZm9jdXNhYmxlcyhlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBub2RlOiBhdXRvRm9jdXNhYmxlICYmIGF1dG9Gb2N1c2FibGUubGVuZ3RoID8gcGlja0ZpcnN0Rm9jdXMoYXV0b0ZvY3VzYWJsZSkgOiBwaWNrRmlyc3RGb2N1cyhpbm5lck5vZGVzKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG5ld0lkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5ld0lkO1xuICAgIH1cbiAgICByZXR1cm4gb3JkZXJlZElubmVyRWxlbWVudHNbbmV3SWRdO1xufTtcbiIsImltcG9ydCB7IGdldEZvY3VzTWVyZ2UgfSBmcm9tICcuL2ZvY3VzTWVyZ2UnO1xuZXhwb3J0IHZhciBmb2N1c09uID0gZnVuY3Rpb24gKHRhcmdldCwgZm9jdXNPcHRpb25zKSB7XG4gICAgaWYgKCdmb2N1cycgaW4gdGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC5mb2N1cyhmb2N1c09wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoJ2NvbnRlbnRXaW5kb3cnIGluIHRhcmdldCAmJiB0YXJnZXQuY29udGVudFdpbmRvdykge1xuICAgICAgICB0YXJnZXQuY29udGVudFdpbmRvdy5mb2N1cygpO1xuICAgIH1cbn07XG52YXIgZ3VhcmRDb3VudCA9IDA7XG52YXIgbG9ja0Rpc2FibGVkID0gZmFsc2U7XG5leHBvcnQgdmFyIHNldEZvY3VzID0gZnVuY3Rpb24gKHRvcE5vZGUsIGxhc3ROb2RlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgZm9jdXNhYmxlID0gZ2V0Rm9jdXNNZXJnZSh0b3BOb2RlLCBsYXN0Tm9kZSk7XG4gICAgaWYgKGxvY2tEaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChmb2N1c2FibGUpIHtcbiAgICAgICAgaWYgKGd1YXJkQ291bnQgPiAyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGb2N1c0xvY2s6IGZvY3VzLWZpZ2h0aW5nIGRldGVjdGVkLiBPbmx5IG9uZSBmb2N1cyBtYW5hZ2VtZW50IHN5c3RlbSBjb3VsZCBiZSBhY3RpdmUuICcgK1xuICAgICAgICAgICAgICAgICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS9mb2N1cy1sb2NrLyNmb2N1cy1maWdodGluZycpO1xuICAgICAgICAgICAgbG9ja0Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxvY2tEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZ3VhcmRDb3VudCsrO1xuICAgICAgICBmb2N1c09uKGZvY3VzYWJsZS5ub2RlLCBvcHRpb25zLmZvY3VzT3B0aW9ucyk7XG4gICAgICAgIGd1YXJkQ291bnQtLTtcbiAgICB9XG59O1xuIiwiaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGZvY3VzSW5zaWRlIH0gZnJvbSAnLi9mb2N1c0luc2lkZSc7XG5pbXBvcnQgeyBmb2N1c0lzSGlkZGVuIH0gZnJvbSAnLi9mb2N1c0lzSGlkZGVuJztcbmltcG9ydCB7IGdldEZvY3VzTWVyZ2UgYXMgZm9jdXNNZXJnZSB9IGZyb20gJy4vZm9jdXNNZXJnZSc7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVkSW4gfSBmcm9tICcuL2ZvY3VzYWJsZXMnO1xuaW1wb3J0IHsgc2V0Rm9jdXMgfSBmcm9tICcuL3NldEZvY3VzJztcbmltcG9ydCB7IGZvY3VzTmV4dEVsZW1lbnQsIGZvY3VzUHJldkVsZW1lbnQgfSBmcm9tICcuL3NpYmxpbmcnO1xuaW1wb3J0IHRhYkhvb2sgZnJvbSAnLi90YWJIb29rJztcbmltcG9ydCB7IGdldEFsbEFmZmVjdGVkTm9kZXMgfSBmcm9tICcuL3V0aWxzL2FsbC1hZmZlY3RlZCc7XG5pbXBvcnQgeyBnZXRBY3RpdmVFbGVtZW50IH0gZnJvbSAnLi91dGlscy9nZXRBY3RpdmVFbGVtZW50JztcbmV4cG9ydCB7IHRhYkhvb2ssIGZvY3VzSW5zaWRlLCBmb2N1c0lzSGlkZGVuLCBmb2N1c01lcmdlLCBnZXRGb2N1c2FibGVkSW4sIGNvbnN0YW50cywgZ2V0QWxsQWZmZWN0ZWROb2RlcywgZm9jdXNOZXh0RWxlbWVudCwgZm9jdXNQcmV2RWxlbWVudCwgZ2V0QWN0aXZlRWxlbWVudCwgfTtcbmV4cG9ydCBkZWZhdWx0IHNldEZvY3VzO1xuIiwiZXhwb3J0IGZ1bmN0aW9uIGRlZmVyQWN0aW9uKGFjdGlvbikge1xuICAvLyBIaWRkaW5nIHNldEltbWVkaWF0ZSBmcm9tIFdlYnBhY2sgdG8gYXZvaWQgaW5zZXJ0aW5nIHBvbHlmaWxsXG4gIHZhciBfd2luZG93ID0gd2luZG93LFxuICAgICAgc2V0SW1tZWRpYXRlID0gX3dpbmRvdy5zZXRJbW1lZGlhdGU7XG5cbiAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgc2V0SW1tZWRpYXRlKGFjdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgc2V0VGltZW91dChhY3Rpb24sIDEpO1xuICB9XG59XG5leHBvcnQgdmFyIGlubGluZVByb3AgPSBmdW5jdGlvbiBpbmxpbmVQcm9wKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBvYmogPSB7fTtcbiAgb2JqW25hbWVdID0gdmFsdWU7XG4gIHJldHVybiBvYmo7XG59OyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgd2l0aFNpZGVFZmZlY3QgZnJvbSAncmVhY3QtY2xpZW50c2lkZS1lZmZlY3QnO1xuaW1wb3J0IG1vdmVGb2N1c0luc2lkZSwgeyBmb2N1c0luc2lkZSwgZm9jdXNJc0hpZGRlbiwgZ2V0Rm9jdXNhYmxlZEluIH0gZnJvbSAnZm9jdXMtbG9jayc7XG5pbXBvcnQgeyBkZWZlckFjdGlvbiB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBtZWRpdW1Gb2N1cywgbWVkaXVtQmx1ciwgbWVkaXVtRWZmZWN0IH0gZnJvbSAnLi9tZWRpdW0nO1xuXG52YXIgZm9jdXNPbkJvZHkgPSBmdW5jdGlvbiBmb2N1c09uQm9keSgpIHtcbiAgcmV0dXJuIGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHk7XG59O1xuXG52YXIgaXNGcmVlRm9jdXMgPSBmdW5jdGlvbiBpc0ZyZWVGb2N1cygpIHtcbiAgcmV0dXJuIGZvY3VzT25Cb2R5KCkgfHwgZm9jdXNJc0hpZGRlbigpO1xufTtcblxudmFyIGxhc3RBY3RpdmVUcmFwID0gbnVsbDtcbnZhciBsYXN0QWN0aXZlRm9jdXMgPSBudWxsO1xudmFyIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSBudWxsO1xudmFyIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9IGZhbHNlO1xuXG52YXIgZGVmYXVsdFdoaXRlbGlzdCA9IGZ1bmN0aW9uIGRlZmF1bHRXaGl0ZWxpc3QoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIGZvY3VzV2hpdGVsaXN0ZWQgPSBmdW5jdGlvbiBmb2N1c1doaXRlbGlzdGVkKGFjdGl2ZUVsZW1lbnQpIHtcbiAgcmV0dXJuIChsYXN0QWN0aXZlVHJhcC53aGl0ZUxpc3QgfHwgZGVmYXVsdFdoaXRlbGlzdCkoYWN0aXZlRWxlbWVudCk7XG59O1xuXG52YXIgcmVjb3JkUG9ydGFsID0gZnVuY3Rpb24gcmVjb3JkUG9ydGFsKG9ic2VydmVyTm9kZSwgcG9ydGFsZWRFbGVtZW50KSB7XG4gIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSB7XG4gICAgb2JzZXJ2ZXJOb2RlOiBvYnNlcnZlck5vZGUsXG4gICAgcG9ydGFsZWRFbGVtZW50OiBwb3J0YWxlZEVsZW1lbnRcbiAgfTtcbn07XG5cbnZhciBmb2N1c0lzUG9ydGFsZWRQYWlyID0gZnVuY3Rpb24gZm9jdXNJc1BvcnRhbGVkUGFpcihlbGVtZW50KSB7XG4gIHJldHVybiBsYXN0UG9ydGFsZWRFbGVtZW50ICYmIGxhc3RQb3J0YWxlZEVsZW1lbnQucG9ydGFsZWRFbGVtZW50ID09PSBlbGVtZW50O1xufTtcblxuZnVuY3Rpb24gYXV0b0d1YXJkKHN0YXJ0SW5kZXgsIGVuZCwgc3RlcCwgYWxsTm9kZXMpIHtcbiAgdmFyIGxhc3RHdWFyZCA9IG51bGw7XG4gIHZhciBpID0gc3RhcnRJbmRleDtcblxuICBkbyB7XG4gICAgdmFyIGl0ZW0gPSBhbGxOb2Rlc1tpXTtcblxuICAgIGlmIChpdGVtLmd1YXJkKSB7XG4gICAgICBpZiAoaXRlbS5ub2RlLmRhdGFzZXQuZm9jdXNBdXRvR3VhcmQpIHtcbiAgICAgICAgbGFzdEd1YXJkID0gaXRlbTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGl0ZW0ubG9ja0l0ZW0pIHtcbiAgICAgIGlmIChpICE9PSBzdGFydEluZGV4KSB7XG4gICAgICAgIC8vIHdlIHdpbGwgdGFiIHRvIHRoZSBuZXh0IGVsZW1lbnRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsYXN0R3VhcmQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0gd2hpbGUgKChpICs9IHN0ZXApICE9PSBlbmQpO1xuXG4gIGlmIChsYXN0R3VhcmQpIHtcbiAgICBsYXN0R3VhcmQubm9kZS50YWJJbmRleCA9IDA7XG4gIH1cbn1cblxudmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiBleHRyYWN0UmVmKHJlZikge1xuICByZXR1cm4gcmVmICYmICdjdXJyZW50JyBpbiByZWYgPyByZWYuY3VycmVudCA6IHJlZjtcbn07XG5cbnZhciBmb2N1c1dhc091dHNpZGUgPSBmdW5jdGlvbiBmb2N1c1dhc091dHNpZGUoY3Jvc3NGcmFtZU9wdGlvbikge1xuICBpZiAoY3Jvc3NGcmFtZU9wdGlvbikge1xuICAgIC8vIHdpdGggY3Jvc3MgZnJhbWUgcmV0dXJuIHRydWUgZm9yIGFueSB2YWx1ZVxuICAgIHJldHVybiBCb29sZWFuKGZvY3VzV2FzT3V0c2lkZVdpbmRvdyk7XG4gIH0gLy8gaW4gb3RoZXIgY2FzZSByZXR1cm4gb25seSBvZiBmb2N1cyB3ZW50IGEgd2hpbGUgYWhvXG5cblxuICByZXR1cm4gZm9jdXNXYXNPdXRzaWRlV2luZG93ID09PSAnbWVhbndoaWxlJztcbn07XG5cbnZhciBjaGVja0luSG9zdCA9IGZ1bmN0aW9uIGNoZWNrSW5Ib3N0KGNoZWNrLCBlbCwgYm91bmRhcnkpIHtcbiAgcmV0dXJuIGVsIC8vIGZpbmQgaG9zdCBlcXVhbCB0byBhY3RpdmUgZWxlbWVudCBhbmQgY2hlY2sgbmVzdGVkIGFjdGl2ZSBlbGVtZW50XG4gICYmIChlbC5ob3N0ID09PSBjaGVjayAmJiAoIWVsLmFjdGl2ZUVsZW1lbnQgfHwgYm91bmRhcnkuY29udGFpbnMoZWwuYWN0aXZlRWxlbWVudCkpIC8vIGRpdmUgdXBcbiAgfHwgZWwucGFyZW50Tm9kZSAmJiBjaGVja0luSG9zdChjaGVjaywgZWwucGFyZW50Tm9kZSwgYm91bmRhcnkpKTtcbn07XG5cbnZhciB3aXRoaW5Ib3N0ID0gZnVuY3Rpb24gd2l0aGluSG9zdChhY3RpdmVFbGVtZW50LCB3b3JraW5nQXJlYSkge1xuICByZXR1cm4gd29ya2luZ0FyZWEuc29tZShmdW5jdGlvbiAoYXJlYSkge1xuICAgIHJldHVybiBjaGVja0luSG9zdChhY3RpdmVFbGVtZW50LCBhcmVhLCBhcmVhKTtcbiAgfSk7XG59O1xuXG52YXIgYWN0aXZhdGVUcmFwID0gZnVuY3Rpb24gYWN0aXZhdGVUcmFwKCkge1xuICB2YXIgcmVzdWx0ID0gZmFsc2U7XG5cbiAgaWYgKGxhc3RBY3RpdmVUcmFwKSB7XG4gICAgdmFyIF9sYXN0QWN0aXZlVHJhcCA9IGxhc3RBY3RpdmVUcmFwLFxuICAgICAgICBvYnNlcnZlZCA9IF9sYXN0QWN0aXZlVHJhcC5vYnNlcnZlZCxcbiAgICAgICAgcGVyc2lzdGVudEZvY3VzID0gX2xhc3RBY3RpdmVUcmFwLnBlcnNpc3RlbnRGb2N1cyxcbiAgICAgICAgYXV0b0ZvY3VzID0gX2xhc3RBY3RpdmVUcmFwLmF1dG9Gb2N1cyxcbiAgICAgICAgc2hhcmRzID0gX2xhc3RBY3RpdmVUcmFwLnNoYXJkcyxcbiAgICAgICAgY3Jvc3NGcmFtZSA9IF9sYXN0QWN0aXZlVHJhcC5jcm9zc0ZyYW1lLFxuICAgICAgICBmb2N1c09wdGlvbnMgPSBfbGFzdEFjdGl2ZVRyYXAuZm9jdXNPcHRpb25zO1xuICAgIHZhciB3b3JraW5nTm9kZSA9IG9ic2VydmVkIHx8IGxhc3RQb3J0YWxlZEVsZW1lbnQgJiYgbGFzdFBvcnRhbGVkRWxlbWVudC5wb3J0YWxlZEVsZW1lbnQ7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXG4gICAgaWYgKHdvcmtpbmdOb2RlKSB7XG4gICAgICB2YXIgd29ya2luZ0FyZWEgPSBbd29ya2luZ05vZGVdLmNvbmNhdChzaGFyZHMubWFwKGV4dHJhY3RSZWYpLmZpbHRlcihCb29sZWFuKSk7XG5cbiAgICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCBmb2N1c1doaXRlbGlzdGVkKGFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIGlmIChwZXJzaXN0ZW50Rm9jdXMgfHwgZm9jdXNXYXNPdXRzaWRlKGNyb3NzRnJhbWUpIHx8ICFpc0ZyZWVGb2N1cygpIHx8ICFsYXN0QWN0aXZlRm9jdXMgJiYgYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgaWYgKHdvcmtpbmdOb2RlICYmICEoIC8vIGFjdGl2ZSBlbGVtZW50IGlzIFwiaW5zaWRlXCIgd29ya2luZyBhcmVhXG4gICAgICAgICAgZm9jdXNJbnNpZGUod29ya2luZ0FyZWEpIHx8IC8vIGNoZWNrIGZvciBzaGFkb3ctZG9tIGNvbnRhaW5lZCBlbGVtZW50c1xuICAgICAgICAgIGFjdGl2ZUVsZW1lbnQgJiYgd2l0aGluSG9zdChhY3RpdmVFbGVtZW50LCB3b3JraW5nQXJlYSkgfHwgZm9jdXNJc1BvcnRhbGVkUGFpcihhY3RpdmVFbGVtZW50LCB3b3JraW5nTm9kZSkpKSB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQgJiYgIWxhc3RBY3RpdmVGb2N1cyAmJiBhY3RpdmVFbGVtZW50ICYmICFhdXRvRm9jdXMpIHtcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgYmx1cigpIGV4aXN0cywgd2hpY2ggaXMgbWlzc2luZyBvbiBjZXJ0YWluIGVsZW1lbnRzIG9uIElFXG4gICAgICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50LmJsdXIpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IG1vdmVGb2N1c0luc2lkZSh3b3JraW5nQXJlYSwgbGFzdEFjdGl2ZUZvY3VzLCB7XG4gICAgICAgICAgICAgICAgZm9jdXNPcHRpb25zOiBmb2N1c09wdGlvbnNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb2N1c1dhc091dHNpZGVXaW5kb3cgPSBmYWxzZTtcbiAgICAgICAgICBsYXN0QWN0aXZlRm9jdXMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkb2N1bWVudCkge1xuICAgICAgICB2YXIgbmV3QWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHZhciBhbGxOb2RlcyA9IGdldEZvY3VzYWJsZWRJbih3b3JraW5nQXJlYSk7XG4gICAgICAgIHZhciBmb2N1c2VkSW5kZXggPSBhbGxOb2Rlcy5tYXAoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IF9yZWYubm9kZTtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSkuaW5kZXhPZihuZXdBY3RpdmVFbGVtZW50KTtcblxuICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAvLyByZW1vdmUgb2xkIGZvY3VzXG4gICAgICAgICAgYWxsTm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICAgICAgdmFyIGd1YXJkID0gX3JlZjIuZ3VhcmQsXG4gICAgICAgICAgICAgICAgbm9kZSA9IF9yZWYyLm5vZGU7XG4gICAgICAgICAgICByZXR1cm4gZ3VhcmQgJiYgbm9kZS5kYXRhc2V0LmZvY3VzQXV0b0d1YXJkO1xuICAgICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IF9yZWYzLm5vZGU7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYkluZGV4Jyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXV0b0d1YXJkKGZvY3VzZWRJbmRleCwgYWxsTm9kZXMubGVuZ3RoLCArMSwgYWxsTm9kZXMpO1xuICAgICAgICAgIGF1dG9HdWFyZChmb2N1c2VkSW5kZXgsIC0xLCAtMSwgYWxsTm9kZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciBvblRyYXAgPSBmdW5jdGlvbiBvblRyYXAoZXZlbnQpIHtcbiAgaWYgKGFjdGl2YXRlVHJhcCgpICYmIGV2ZW50KSB7XG4gICAgLy8gcHJldmVudCBzY3JvbGwganVtcFxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn07XG5cbnZhciBvbkJsdXIgPSBmdW5jdGlvbiBvbkJsdXIoKSB7XG4gIHJldHVybiBkZWZlckFjdGlvbihhY3RpdmF0ZVRyYXApO1xufTtcblxudmFyIG9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKGV2ZW50KSB7XG4gIC8vIGRldGVjdCBwb3J0YWxcbiAgdmFyIHNvdXJjZSA9IGV2ZW50LnRhcmdldDtcbiAgdmFyIGN1cnJlbnROb2RlID0gZXZlbnQuY3VycmVudFRhcmdldDtcblxuICBpZiAoIWN1cnJlbnROb2RlLmNvbnRhaW5zKHNvdXJjZSkpIHtcbiAgICByZWNvcmRQb3J0YWwoY3VycmVudE5vZGUsIHNvdXJjZSk7XG4gIH1cbn07XG5cbnZhciBGb2N1c1dhdGNoZXIgPSBmdW5jdGlvbiBGb2N1c1dhdGNoZXIoKSB7XG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIEZvY3VzVHJhcCA9IGZ1bmN0aW9uIEZvY3VzVHJhcChfcmVmNCkge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmNC5jaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBvbkJsdXI6IG9uQmx1cixcbiAgICBvbkZvY3VzOiBvbkZvY3VzXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5cbkZvY3VzVHJhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG59IDoge307XG5cbnZhciBvbldpbmRvd0JsdXIgPSBmdW5jdGlvbiBvbldpbmRvd0JsdXIoKSB7XG4gIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdqdXN0JzsgLy8gdXNpbmcgc2V0VGltZW91dCB0byBzZXQgIHRoaXMgdmFyaWFibGUgYWZ0ZXIgUmVhY3Qvc2lkZWNhciByZWFjdGlvblxuXG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdtZWFud2hpbGUnO1xuICB9LCAwKTtcbn07XG5cbnZhciBhdHRhY2hIYW5kbGVyID0gZnVuY3Rpb24gYXR0YWNoSGFuZGxlcigpIHtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIG9uVHJhcCk7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0Jywgb25CbHVyKTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbldpbmRvd0JsdXIpO1xufTtcblxudmFyIGRldGFjaEhhbmRsZXIgPSBmdW5jdGlvbiBkZXRhY2hIYW5kbGVyKCkge1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJywgb25UcmFwKTtcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBvbkJsdXIpO1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uV2luZG93Qmx1cik7XG59O1xuXG5mdW5jdGlvbiByZWR1Y2VQcm9wc1RvU3RhdGUocHJvcHNMaXN0KSB7XG4gIHJldHVybiBwcm9wc0xpc3QuZmlsdGVyKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgIHZhciBkaXNhYmxlZCA9IF9yZWY1LmRpc2FibGVkO1xuICAgIHJldHVybiAhZGlzYWJsZWQ7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KHRyYXBzKSB7XG4gIHZhciB0cmFwID0gdHJhcHMuc2xpY2UoLTEpWzBdO1xuXG4gIGlmICh0cmFwICYmICFsYXN0QWN0aXZlVHJhcCkge1xuICAgIGF0dGFjaEhhbmRsZXIoKTtcbiAgfVxuXG4gIHZhciBsYXN0VHJhcCA9IGxhc3RBY3RpdmVUcmFwO1xuICB2YXIgc2FtZVRyYXAgPSBsYXN0VHJhcCAmJiB0cmFwICYmIHRyYXAuaWQgPT09IGxhc3RUcmFwLmlkO1xuICBsYXN0QWN0aXZlVHJhcCA9IHRyYXA7XG5cbiAgaWYgKGxhc3RUcmFwICYmICFzYW1lVHJhcCkge1xuICAgIGxhc3RUcmFwLm9uRGVhY3RpdmF0aW9uKCk7IC8vIHJldHVybiBmb2N1cyBvbmx5IG9mIGxhc3QgdHJhcCB3YXMgcmVtb3ZlZFxuXG4gICAgaWYgKCF0cmFwcy5maWx0ZXIoZnVuY3Rpb24gKF9yZWY2KSB7XG4gICAgICB2YXIgaWQgPSBfcmVmNi5pZDtcbiAgICAgIHJldHVybiBpZCA9PT0gbGFzdFRyYXAuaWQ7XG4gICAgfSkubGVuZ3RoKSB7XG4gICAgICAvLyBhbGxvdyBkZWZlciBpcyBubyBvdGhlciB0cmFwIGlzIGF3YWl0aW5nIHJlc3RvcmVcbiAgICAgIGxhc3RUcmFwLnJldHVybkZvY3VzKCF0cmFwKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHJhcCkge1xuICAgIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG5cbiAgICBpZiAoIXNhbWVUcmFwIHx8IGxhc3RUcmFwLm9ic2VydmVkICE9PSB0cmFwLm9ic2VydmVkKSB7XG4gICAgICB0cmFwLm9uQWN0aXZhdGlvbigpO1xuICAgIH1cblxuICAgIGFjdGl2YXRlVHJhcCh0cnVlKTtcbiAgICBkZWZlckFjdGlvbihhY3RpdmF0ZVRyYXApO1xuICB9IGVsc2Uge1xuICAgIGRldGFjaEhhbmRsZXIoKTtcbiAgICBsYXN0QWN0aXZlRm9jdXMgPSBudWxsO1xuICB9XG59IC8vIGJpbmQgbWVkaXVtXG5cblxubWVkaXVtRm9jdXMuYXNzaWduU3luY01lZGl1bShvbkZvY3VzKTtcbm1lZGl1bUJsdXIuYXNzaWduTWVkaXVtKG9uQmx1cik7XG5tZWRpdW1FZmZlY3QuYXNzaWduTWVkaXVtKGZ1bmN0aW9uIChjYikge1xuICByZXR1cm4gY2Ioe1xuICAgIG1vdmVGb2N1c0luc2lkZTogbW92ZUZvY3VzSW5zaWRlLFxuICAgIGZvY3VzSW5zaWRlOiBmb2N1c0luc2lkZVxuICB9KTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgd2l0aFNpZGVFZmZlY3QocmVkdWNlUHJvcHNUb1N0YXRlLCBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KShGb2N1c1dhdGNoZXIpOyIsImltcG9ydCB7IEZPQ1VTX0FMTE9XIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgZ2V0QWN0aXZlRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvZ2V0QWN0aXZlRWxlbWVudCc7XG5leHBvcnQgdmFyIGZvY3VzSXNIaWRkZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudCAmJiBnZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRvQXJyYXkoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfQUxMT1csIFwiXVwiKSkpLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUuY29udGFpbnMoYWN0aXZlRWxlbWVudCk7IH0pO1xufTtcbiIsImltcG9ydCB7IGdldFRhYmJhYmxlTm9kZXMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmltcG9ydCB7IGdldEFsbEFmZmVjdGVkTm9kZXMgfSBmcm9tICcuL3V0aWxzL2FsbC1hZmZlY3RlZCc7XG5pbXBvcnQgeyBpc0d1YXJkLCBpc05vdEFHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgZ2V0VG9wQ29tbW9uUGFyZW50IH0gZnJvbSAnLi91dGlscy9wYXJlbnRpbmcnO1xuZXhwb3J0IHZhciBnZXRGb2N1c2FibGVkSW4gPSBmdW5jdGlvbiAodG9wTm9kZSkge1xuICAgIHZhciBlbnRyaWVzID0gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5maWx0ZXIoaXNOb3RBR3VhcmQpO1xuICAgIHZhciBjb21tb25QYXJlbnQgPSBnZXRUb3BDb21tb25QYXJlbnQodG9wTm9kZSwgdG9wTm9kZSwgZW50cmllcyk7XG4gICAgdmFyIHZpc2liaWxpdHlDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICB2YXIgb3V0ZXJOb2RlcyA9IGdldFRhYmJhYmxlTm9kZXMoW2NvbW1vblBhcmVudF0sIHZpc2liaWxpdHlDYWNoZSwgdHJ1ZSk7XG4gICAgdmFyIGlubmVyRWxlbWVudHMgPSBnZXRUYWJiYWJsZU5vZGVzKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gaXNOb3RBR3VhcmQobm9kZSk7XG4gICAgfSlcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0ZXJOb2Rlcy5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZSwgaW5kZXggPSBfYS5pbmRleDtcbiAgICAgICAgcmV0dXJuICh7XG4gICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgbG9ja0l0ZW06IGlubmVyRWxlbWVudHMuaW5kZXhPZihub2RlKSA+PSAwLFxuICAgICAgICAgICAgZ3VhcmQ6IGlzR3VhcmQobm9kZSksXG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbiIsInZhciBjdXJyZW50Tm9uY2U7XG5leHBvcnQgdmFyIHNldE5vbmNlID0gZnVuY3Rpb24gKG5vbmNlKSB7XG4gICAgY3VycmVudE5vbmNlID0gbm9uY2U7XG59O1xuZXhwb3J0IHZhciBnZXROb25jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY3VycmVudE5vbmNlKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9uY2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBfX3dlYnBhY2tfbm9uY2VfXztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuL1RyYXAnO1xuaW1wb3J0IHsgbWVkaXVtU2lkZWNhciB9IGZyb20gJy4vbWVkaXVtJztcbmV4cG9ydCBkZWZhdWx0IGV4cG9ydFNpZGVjYXIobWVkaXVtU2lkZWNhciwgRm9jdXNUcmFwKTsiLCJpbXBvcnQgeyBnZXROb25jZSB9IGZyb20gXCJnZXQtbm9uY2VcIjtcbmZ1bmN0aW9uIG1ha2VTdHlsZVRhZygpIHtcbiAgICBpZiAoIWRvY3VtZW50KVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICB0YWcudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgdmFyIG5vbmNlID0gZ2V0Tm9uY2UoKTtcbiAgICBpZiAobm9uY2UpIHtcbiAgICAgICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBub25jZSk7XG4gICAgfVxuICAgIHJldHVybiB0YWc7XG59XG5mdW5jdGlvbiBpbmplY3RTdHlsZXModGFnLCBjc3MpIHtcbiAgICBpZiAodGFnLnN0eWxlU2hlZXQpIHtcbiAgICAgICAgdGFnLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnNlcnRTdHlsZVRhZyh0YWcpIHtcbiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHRhZyk7XG59XG5leHBvcnQgdmFyIHN0eWxlc2hlZXRTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBzdHlsZXNoZWV0ID0gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBhZGQ6IGZ1bmN0aW9uIChzdHlsZSkge1xuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChzdHlsZXNoZWV0ID0gbWFrZVN0eWxlVGFnKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0U3R5bGVzKHN0eWxlc2hlZXQsIHN0eWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0U3R5bGVUYWcoc3R5bGVzaGVldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvdW50ZXItLTtcbiAgICAgICAgICAgIGlmICghY291bnRlciAmJiBzdHlsZXNoZWV0KSB7XG4gICAgICAgICAgICAgICAgc3R5bGVzaGVldC5wYXJlbnROb2RlICYmIHN0eWxlc2hlZXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZXNoZWV0KTtcbiAgICAgICAgICAgICAgICBzdHlsZXNoZWV0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwiaW1wb3J0IHsgc3R5bGVIb29rU2luZ2xldG9uIH0gZnJvbSBcIi4vaG9va1wiO1xuZXhwb3J0IHZhciBzdHlsZVNpbmdsZXRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXNlU3R5bGUgPSBzdHlsZUhvb2tTaW5nbGV0b24oKTtcbiAgICB2YXIgU2hlZXQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIHN0eWxlcyA9IF9hLnN0eWxlcztcbiAgICAgICAgdXNlU3R5bGUoc3R5bGVzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gU2hlZXQ7XG59O1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVzaGVldFNpbmdsZXRvbiB9IGZyb20gXCIuL3NpbmdsZXRvblwiO1xuZXhwb3J0IHZhciBzdHlsZUhvb2tTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNoZWV0ID0gc3R5bGVzaGVldFNpbmdsZXRvbigpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3R5bGVzKSB7XG4gICAgICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzaGVldC5hZGQoc3R5bGVzKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2hlZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCBbXSk7XG4gICAgfTtcbn07XG4iLCJleHBvcnQgdmFyIHplcm9HYXAgPSB7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgZ2FwOiAwLFxufTtcbnZhciBwYXJzZSA9IGZ1bmN0aW9uICh4KSB7IHJldHVybiBwYXJzZUludCh4IHx8ICcnLCAxMCkgfHwgMDsgfTtcbnZhciBnZXRPZmZzZXQgPSBmdW5jdGlvbiAoZ2FwTW9kZSkge1xuICAgIHZhciBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpO1xuICAgIHZhciBsZWZ0ID0gY3NbZ2FwTW9kZSA9PT0gJ3BhZGRpbmcnID8gJ3BhZGRpbmdMZWZ0JyA6ICdtYXJnaW5MZWZ0J107XG4gICAgdmFyIHRvcCA9IGNzW2dhcE1vZGUgPT09ICdwYWRkaW5nJyA/ICdwYWRkaW5nVG9wJyA6ICdtYXJnaW5Ub3AnXTtcbiAgICB2YXIgcmlnaHQgPSBjc1tnYXBNb2RlID09PSAncGFkZGluZycgPyAncGFkZGluZ1JpZ2h0JyA6ICdtYXJnaW5SaWdodCddO1xuICAgIHJldHVybiBbXG4gICAgICAgIHBhcnNlKGxlZnQpLFxuICAgICAgICBwYXJzZSh0b3ApLFxuICAgICAgICBwYXJzZShyaWdodCksXG4gICAgXTtcbn07XG5leHBvcnQgdmFyIGdldEdhcFdpZHRoID0gZnVuY3Rpb24gKGdhcE1vZGUpIHtcbiAgICBpZiAoZ2FwTW9kZSA9PT0gdm9pZCAwKSB7IGdhcE1vZGUgPSAnbWFyZ2luJzsgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gemVyb0dhcDtcbiAgICB9XG4gICAgdmFyIG9mZnNldHMgPSBnZXRPZmZzZXQoZ2FwTW9kZSk7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgdmFyIHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogb2Zmc2V0c1swXSxcbiAgICAgICAgdG9wOiBvZmZzZXRzWzFdLFxuICAgICAgICByaWdodDogb2Zmc2V0c1syXSxcbiAgICAgICAgZ2FwOiBNYXRoLm1heCgwLCB3aW5kb3dXaWR0aCAtIGRvY3VtZW50V2lkdGggKyBvZmZzZXRzWzJdIC0gb2Zmc2V0c1swXSksXG4gICAgfTtcbn07XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZVNpbmdsZXRvbiB9IGZyb20gJ3JlYWN0LXN0eWxlLXNpbmdsZXRvbic7XG5pbXBvcnQgeyBnZXRHYXBXaWR0aCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZnVsbFdpZHRoQ2xhc3NOYW1lLCB6ZXJvUmlnaHRDbGFzc05hbWUsIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgcmVtb3ZlZEJhclNpemVWYXJpYWJsZSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xudmFyIFN0eWxlID0gc3R5bGVTaW5nbGV0b24oKTtcbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiAoX2EsIGFsbG93UmVsYXRpdmUsIGdhcE1vZGUsIGltcG9ydGFudCkge1xuICAgIHZhciBsZWZ0ID0gX2EubGVmdCwgdG9wID0gX2EudG9wLCByaWdodCA9IF9hLnJpZ2h0LCBnYXAgPSBfYS5nYXA7XG4gICAgaWYgKGdhcE1vZGUgPT09IHZvaWQgMCkgeyBnYXBNb2RlID0gJ21hcmdpbic7IH1cbiAgICByZXR1cm4gXCJcXG4gIC5cIiArIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSArIFwiIHtcXG4gICBvdmVyZmxvdzogaGlkZGVuIFwiICsgaW1wb3J0YW50ICsgXCI7XFxuICAgcGFkZGluZy1yaWdodDogXCIgKyBnYXAgKyBcInB4IFwiICsgaW1wb3J0YW50ICsgXCI7XFxuICB9XFxuICBib2R5IHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbiBcIiArIGltcG9ydGFudCArIFwiO1xcbiAgICBcIiArIFtcbiAgICAgICAgYWxsb3dSZWxhdGl2ZSAmJiBcInBvc2l0aW9uOiByZWxhdGl2ZSBcIiArIGltcG9ydGFudCArIFwiO1wiLFxuICAgICAgICBnYXBNb2RlID09PSAnbWFyZ2luJyAmJiBcIlxcbiAgICBwYWRkaW5nLWxlZnQ6IFwiICsgbGVmdCArIFwicHg7XFxuICAgIHBhZGRpbmctdG9wOiBcIiArIHRvcCArIFwicHg7XFxuICAgIHBhZGRpbmctcmlnaHQ6IFwiICsgcmlnaHQgKyBcInB4O1xcbiAgICBtYXJnaW4tbGVmdDowO1xcbiAgICBtYXJnaW4tdG9wOjA7XFxuICAgIG1hcmdpbi1yaWdodDogXCIgKyBnYXAgKyBcInB4IFwiICsgaW1wb3J0YW50ICsgXCI7XFxuICAgIFwiLFxuICAgICAgICBnYXBNb2RlID09PSAncGFkZGluZycgJiYgXCJwYWRkaW5nLXJpZ2h0OiBcIiArIGdhcCArIFwicHggXCIgKyBpbXBvcnRhbnQgKyBcIjtcIixcbiAgICBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcnKSArIFwiXFxuICB9XFxuICBcXG4gIC5cIiArIHplcm9SaWdodENsYXNzTmFtZSArIFwiIHtcXG4gICAgcmlnaHQ6IFwiICsgZ2FwICsgXCJweCBcIiArIGltcG9ydGFudCArIFwiO1xcbiAgfVxcbiAgXFxuICAuXCIgKyBmdWxsV2lkdGhDbGFzc05hbWUgKyBcIiB7XFxuICAgIG1hcmdpbi1yaWdodDogXCIgKyBnYXAgKyBcInB4IFwiICsgaW1wb3J0YW50ICsgXCI7XFxuICB9XFxuICBcXG4gIC5cIiArIHplcm9SaWdodENsYXNzTmFtZSArIFwiIC5cIiArIHplcm9SaWdodENsYXNzTmFtZSArIFwiIHtcXG4gICAgcmlnaHQ6IDAgXCIgKyBpbXBvcnRhbnQgKyBcIjtcXG4gIH1cXG4gIFxcbiAgLlwiICsgZnVsbFdpZHRoQ2xhc3NOYW1lICsgXCIgLlwiICsgZnVsbFdpZHRoQ2xhc3NOYW1lICsgXCIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAgXCIgKyBpbXBvcnRhbnQgKyBcIjtcXG4gIH1cXG4gIFxcbiAgYm9keSB7XFxuICAgIFwiICsgcmVtb3ZlZEJhclNpemVWYXJpYWJsZSArIFwiOiBcIiArIGdhcCArIFwicHg7XFxuICB9XFxuXCI7XG59O1xuZXhwb3J0IHZhciBSZW1vdmVTY3JvbGxCYXIgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgX2EgPSBSZWFjdC51c2VTdGF0ZShnZXRHYXBXaWR0aChwcm9wcy5nYXBNb2RlKSksIGdhcCA9IF9hWzBdLCBzZXRHYXAgPSBfYVsxXTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRHYXAoZ2V0R2FwV2lkdGgocHJvcHMuZ2FwTW9kZSkpO1xuICAgIH0sIFtwcm9wcy5nYXBNb2RlXSk7XG4gICAgdmFyIG5vUmVsYXRpdmUgPSBwcm9wcy5ub1JlbGF0aXZlLCBub0ltcG9ydGFudCA9IHByb3BzLm5vSW1wb3J0YW50LCBfYiA9IHByb3BzLmdhcE1vZGUsIGdhcE1vZGUgPSBfYiA9PT0gdm9pZCAwID8gJ21hcmdpbicgOiBfYjtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IGdldFN0eWxlcyhnYXAsICFub1JlbGF0aXZlLCBnYXBNb2RlLCAhbm9JbXBvcnRhbnQgPyBcIiFpbXBvcnRhbnRcIiA6ICcnKSB9KTtcbn07XG4iLCJ2YXIgZWxlbWVudENvdWxkQmVWU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcbiAgICByZXR1cm4gKHN0eWxlcy5vdmVyZmxvd1kgIT09ICdoaWRkZW4nICYmIC8vIG5vdC1ub3Qtc2Nyb2xsYWJsZVxuICAgICAgICAhKHN0eWxlcy5vdmVyZmxvd1kgPT09IHN0eWxlcy5vdmVyZmxvd1ggJiYgc3R5bGVzLm92ZXJmbG93WSA9PT0gJ3Zpc2libGUnKSAvLyBzY3JvbGxhYmxlXG4gICAgKTtcbn07XG52YXIgZWxlbWVudENvdWxkQmVIU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcbiAgICAvLyB3ZSBhbGxvdyBob3Jpem9udGFsIHNjcm9sbCBvbiByYW5nZSBlbGVtZW50c1xuICAgIGlmIChub2RlLnR5cGUgPT09IFwicmFuZ2VcIikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIChzdHlsZXMub3ZlcmZsb3dYICE9PSAnaGlkZGVuJyAmJiAvLyBub3Qtbm90LXNjcm9sbGFibGVcbiAgICAgICAgIShzdHlsZXMub3ZlcmZsb3dZID09PSBzdHlsZXMub3ZlcmZsb3dYICYmIHN0eWxlcy5vdmVyZmxvd1ggPT09ICd2aXNpYmxlJykgLy8gc2Nyb2xsYWJsZVxuICAgICk7XG59O1xuZXhwb3J0IHZhciBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZCA9IGZ1bmN0aW9uIChheGlzLCBub2RlKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBub2RlO1xuICAgIGRvIHtcbiAgICAgICAgLy8gU2tpcCBvdmVyIHNoYWRvdyByb290XG4gICAgICAgIGlmICh0eXBlb2YgU2hhZG93Um9vdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjdXJyZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaXNTY3JvbGxhYmxlID0gZWxlbWVudENvdWxkQmVTY3JvbGxlZChheGlzLCBjdXJyZW50KTtcbiAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSkge1xuICAgICAgICAgICAgdmFyIF9hID0gZ2V0U2Nyb2xsVmFyaWFibGVzKGF4aXMsIGN1cnJlbnQpLCBzID0gX2FbMV0sIGQgPSBfYVsyXTtcbiAgICAgICAgICAgIGlmIChzID4gZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7XG4gICAgfSB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50ICE9PSBkb2N1bWVudC5ib2R5KTtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xudmFyIGdldFZTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2Nyb2xsVG9wID0gX2Euc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgPSBfYS5zY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCA9IF9hLmNsaWVudEhlaWdodDtcbiAgICByZXR1cm4gW3Njcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHRdO1xufTtcbnZhciBnZXRIU2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNjcm9sbExlZnQgPSBfYS5zY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCA9IF9hLnNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aCA9IF9hLmNsaWVudFdpZHRoO1xuICAgIHJldHVybiBbc2Nyb2xsTGVmdCwgc2Nyb2xsV2lkdGgsIGNsaWVudFdpZHRoXTtcbn07XG52YXIgZWxlbWVudENvdWxkQmVTY3JvbGxlZCA9IGZ1bmN0aW9uIChheGlzLCBub2RlKSB7XG4gICAgcmV0dXJuIGF4aXMgPT09ICd2JyA/IGVsZW1lbnRDb3VsZEJlVlNjcm9sbGVkKG5vZGUpIDogZWxlbWVudENvdWxkQmVIU2Nyb2xsZWQobm9kZSk7XG59O1xudmFyIGdldFNjcm9sbFZhcmlhYmxlcyA9IGZ1bmN0aW9uIChheGlzLCBub2RlKSB7XG4gICAgcmV0dXJuIGF4aXMgPT09ICd2JyA/IGdldFZTY3JvbGxWYXJpYWJsZXMobm9kZSkgOiBnZXRIU2Nyb2xsVmFyaWFibGVzKG5vZGUpO1xufTtcbnZhciBnZXREaXJlY3Rpb25GYWN0b3IgPSBmdW5jdGlvbiAoYXhpcywgZGlyZWN0aW9uKSB7IHJldHVybiAoXG4vKipcbiAqIElmIHRoZSBlbGVtZW50J3MgZGlyZWN0aW9uIGlzIHJ0bCAocmlnaHQtdG8tbGVmdCksIHRoZW4gc2Nyb2xsTGVmdCBpcyAwIHdoZW4gdGhlIHNjcm9sbGJhciBpcyBhdCBpdHMgcmlnaHRtb3N0IHBvc2l0aW9uLFxuICogYW5kIHRoZW4gaW5jcmVhc2luZ2x5IG5lZ2F0aXZlIGFzIHlvdSBzY3JvbGwgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBjb250ZW50LlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9zY3JvbGxMZWZ0XG4gKi9cbmF4aXMgPT09ICdoJyAmJiBkaXJlY3Rpb24gPT09ICdydGwnID8gLTEgOiAxKTsgfTtcbmV4cG9ydCB2YXIgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKGF4aXMsIGVuZFRhcmdldCwgZXZlbnQsIHNvdXJjZURlbHRhLCBub092ZXJzY3JvbGwpIHtcbiAgICB2YXIgZGlyZWN0aW9uRmFjdG9yID0gZ2V0RGlyZWN0aW9uRmFjdG9yKGF4aXMsIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVuZFRhcmdldCkuZGlyZWN0aW9uKTtcbiAgICB2YXIgZGVsdGEgPSBkaXJlY3Rpb25GYWN0b3IgKiBzb3VyY2VEZWx0YTtcbiAgICAvLyBmaW5kIHNjcm9sbGFibGUgdGFyZ2V0XG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICB2YXIgdGFyZ2V0SW5Mb2NrID0gZW5kVGFyZ2V0LmNvbnRhaW5zKHRhcmdldCk7XG4gICAgdmFyIHNob3VsZENhbmNlbFNjcm9sbCA9IGZhbHNlO1xuICAgIHZhciBpc0RlbHRhUG9zaXRpdmUgPSBkZWx0YSA+IDA7XG4gICAgdmFyIGF2YWlsYWJsZVNjcm9sbCA9IDA7XG4gICAgdmFyIGF2YWlsYWJsZVNjcm9sbFRvcCA9IDA7XG4gICAgZG8ge1xuICAgICAgICB2YXIgX2EgPSBnZXRTY3JvbGxWYXJpYWJsZXMoYXhpcywgdGFyZ2V0KSwgcG9zaXRpb24gPSBfYVswXSwgc2Nyb2xsXzEgPSBfYVsxXSwgY2FwYWNpdHkgPSBfYVsyXTtcbiAgICAgICAgdmFyIGVsZW1lbnRTY3JvbGwgPSBzY3JvbGxfMSAtIGNhcGFjaXR5IC0gZGlyZWN0aW9uRmFjdG9yICogcG9zaXRpb247XG4gICAgICAgIGlmIChwb3NpdGlvbiB8fCBlbGVtZW50U2Nyb2xsKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudENvdWxkQmVTY3JvbGxlZChheGlzLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlU2Nyb2xsICs9IGVsZW1lbnRTY3JvbGw7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlU2Nyb2xsVG9wICs9IHBvc2l0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgIH0gd2hpbGUgKFxuICAgIC8vIHBvcnRhbGVkIGNvbnRlbnRcbiAgICAoIXRhcmdldEluTG9jayAmJiB0YXJnZXQgIT09IGRvY3VtZW50LmJvZHkpIHx8XG4gICAgICAgIC8vIHNlbGYgY29udGVudFxuICAgICAgICAodGFyZ2V0SW5Mb2NrICYmIChlbmRUYXJnZXQuY29udGFpbnModGFyZ2V0KSB8fCBlbmRUYXJnZXQgPT09IHRhcmdldCkpKTtcbiAgICBpZiAoaXNEZWx0YVBvc2l0aXZlICYmXG4gICAgICAgICgobm9PdmVyc2Nyb2xsICYmIGF2YWlsYWJsZVNjcm9sbCA9PT0gMCkgfHxcbiAgICAgICAgICAgICghbm9PdmVyc2Nyb2xsICYmIGRlbHRhID4gYXZhaWxhYmxlU2Nyb2xsKSkpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWlzRGVsdGFQb3NpdGl2ZSAmJlxuICAgICAgICAoKG5vT3ZlcnNjcm9sbCAmJiBhdmFpbGFibGVTY3JvbGxUb3AgPT09IDApIHx8XG4gICAgICAgICAgICAoIW5vT3ZlcnNjcm9sbCAmJiAtZGVsdGEgPiBhdmFpbGFibGVTY3JvbGxUb3ApKSkge1xuICAgICAgICBzaG91bGRDYW5jZWxTY3JvbGwgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc2hvdWxkQ2FuY2VsU2Nyb2xsO1xufTtcbiIsInZhciBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCB2YXIgbm9uUGFzc2l2ZSA9IHBhc3NpdmVTdXBwb3J0ZWQgPyB7IHBhc3NpdmU6IGZhbHNlIH0gOiBmYWxzZTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbEJhciB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyJztcbmltcG9ydCB7IHN0eWxlU2luZ2xldG9uIH0gZnJvbSAncmVhY3Qtc3R5bGUtc2luZ2xldG9uJztcbmltcG9ydCB7IGhhbmRsZVNjcm9sbCwgbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQgfSBmcm9tICcuL2hhbmRsZVNjcm9sbCc7XG5pbXBvcnQgeyBub25QYXNzaXZlIH0gZnJvbSAnLi9hZ2dyZXNpdmVDYXB0dXJlJztcbmV4cG9ydCB2YXIgZ2V0VG91Y2hYWSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnY2hhbmdlZFRvdWNoZXMnIGluIGV2ZW50XG4gICAgICAgID8gW2V2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFgsIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFldXG4gICAgICAgIDogWzAsIDBdO1xufTtcbmV4cG9ydCB2YXIgZ2V0RGVsdGFYWSA9IGZ1bmN0aW9uIChldmVudCkgeyByZXR1cm4gW2V2ZW50LmRlbHRhWCwgZXZlbnQuZGVsdGFZXTsgfTtcbnZhciBleHRyYWN0UmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgIHJldHVybiByZWYgJiYgJ2N1cnJlbnQnIGluIHJlZiA/IHJlZi5jdXJyZW50IDogcmVmO1xufTtcbnZhciBkZWx0YUNvbXBhcmUgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgIHJldHVybiB4WzBdID09PSB5WzBdICYmIHhbMV0gPT09IHlbMV07XG59O1xudmFyIGdlbmVyYXRlU3R5bGUgPSBmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIFwiXFxuICAuYmxvY2staW50ZXJhY3Rpdml0eS1cIiArIGlkICsgXCIge3BvaW50ZXItZXZlbnRzOiBub25lO31cXG4gIC5hbGxvdy1pbnRlcmFjdGl2aXR5LVwiICsgaWQgKyBcIiB7cG9pbnRlci1ldmVudHM6IGFsbDt9XFxuXCI7IH07XG52YXIgaWRDb3VudGVyID0gMDtcbnZhciBsb2NrU3RhY2sgPSBbXTtcbmV4cG9ydCBmdW5jdGlvbiBSZW1vdmVTY3JvbGxTaWRlQ2FyKHByb3BzKSB7XG4gICAgdmFyIHNob3VsZFByZXZlbnRRdWV1ZSA9IFJlYWN0LnVzZVJlZihbXSk7XG4gICAgdmFyIHRvdWNoU3RhcnRSZWYgPSBSZWFjdC51c2VSZWYoWzAsIDBdKTtcbiAgICB2YXIgYWN0aXZlQXhpcyA9IFJlYWN0LnVzZVJlZigpO1xuICAgIHZhciBpZCA9IFJlYWN0LnVzZVN0YXRlKGlkQ291bnRlcisrKVswXTtcbiAgICB2YXIgU3R5bGUgPSBSZWFjdC51c2VTdGF0ZShmdW5jdGlvbiAoKSB7IHJldHVybiBzdHlsZVNpbmdsZXRvbigpOyB9KVswXTtcbiAgICB2YXIgbGFzdFByb3BzID0gUmVhY3QudXNlUmVmKHByb3BzKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBsYXN0UHJvcHMuY3VycmVudCA9IHByb3BzO1xuICAgIH0sIFtwcm9wc10pO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwcm9wcy5pbmVydCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiYmxvY2staW50ZXJhY3Rpdml0eS1cIiArIGlkKTtcbiAgICAgICAgICAgIHZhciBhbGxvd18xID0gW1xuICAgICAgICAgICAgICAgIHByb3BzLmxvY2tSZWYuY3VycmVudFxuICAgICAgICAgICAgXS5jb25jYXQoKHByb3BzLnNoYXJkcyB8fCBbXSkubWFwKGV4dHJhY3RSZWYpKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgICAgICBhbGxvd18xLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKFwiYWxsb3ctaW50ZXJhY3Rpdml0eS1cIiArIGlkKTsgfSk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcImJsb2NrLWludGVyYWN0aXZpdHktXCIgKyBpZCk7XG4gICAgICAgICAgICAgICAgYWxsb3dfMS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWwuY2xhc3NMaXN0LnJlbW92ZShcImFsbG93LWludGVyYWN0aXZpdHktXCIgKyBpZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9LCBbcHJvcHMuaW5lcnQsIHByb3BzLmxvY2tSZWYuY3VycmVudCwgcHJvcHMuc2hhcmRzXSk7XG4gICAgdmFyIHNob3VsZENhbmNlbEV2ZW50ID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50LCBwYXJlbnQpIHtcbiAgICAgICAgaWYgKCd0b3VjaGVzJyBpbiBldmVudCAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuICFsYXN0UHJvcHMuY3VycmVudC5hbGxvd1BpbmNoWm9vbTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG91Y2ggPSBnZXRUb3VjaFhZKGV2ZW50KTtcbiAgICAgICAgdmFyIHRvdWNoU3RhcnQgPSB0b3VjaFN0YXJ0UmVmLmN1cnJlbnQ7XG4gICAgICAgIHZhciBkZWx0YVggPSAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6IHRvdWNoU3RhcnRbMF0gLSB0b3VjaFswXTtcbiAgICAgICAgdmFyIGRlbHRhWSA9ICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDogdG91Y2hTdGFydFsxXSAtIHRvdWNoWzFdO1xuICAgICAgICB2YXIgY3VycmVudEF4aXM7XG4gICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIHZhciBtb3ZlRGlyZWN0aW9uID0gTWF0aC5hYnMoZGVsdGFYKSA+IE1hdGguYWJzKGRlbHRhWSkgPyAnaCcgOiAndic7XG4gICAgICAgIHZhciBjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uID0gbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQobW92ZURpcmVjdGlvbiwgdGFyZ2V0KTtcbiAgICAgICAgaWYgKCFjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbikge1xuICAgICAgICAgICAgY3VycmVudEF4aXMgPSBtb3ZlRGlyZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudEF4aXMgPSBtb3ZlRGlyZWN0aW9uID09PSAndicgPyAnaCcgOiAndic7XG4gICAgICAgICAgICBjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uID0gbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQobW92ZURpcmVjdGlvbiwgdGFyZ2V0KTtcbiAgICAgICAgICAgIC8vIG90aGVyIGF4aXMgbWlnaHQgYmUgbm90IHNjcm9sbGFibGVcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFjdGl2ZUF4aXMuY3VycmVudCAmJlxuICAgICAgICAgICAgJ2NoYW5nZWRUb3VjaGVzJyBpbiBldmVudCAmJlxuICAgICAgICAgICAgKGRlbHRhWCB8fCBkZWx0YVkpKSB7XG4gICAgICAgICAgICBhY3RpdmVBeGlzLmN1cnJlbnQgPSBjdXJyZW50QXhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN1cnJlbnRBeGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FuY2VsaW5nQXhpcyA9IGFjdGl2ZUF4aXMuY3VycmVudCB8fCBjdXJyZW50QXhpcztcbiAgICAgICAgcmV0dXJuIGhhbmRsZVNjcm9sbChjYW5jZWxpbmdBeGlzLCBwYXJlbnQsIGV2ZW50LCBjYW5jZWxpbmdBeGlzID09PSAnaCcgPyBkZWx0YVggOiBkZWx0YVksIHRydWUpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2hvdWxkUHJldmVudCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfZXZlbnQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gX2V2ZW50O1xuICAgICAgICBpZiAoIWxvY2tTdGFjay5sZW5ndGggfHwgbG9ja1N0YWNrW2xvY2tTdGFjay5sZW5ndGggLSAxXSAhPT0gU3R5bGUpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbGFzdCBhY3RpdmVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsdGEgPSAnZGVsdGFZJyBpbiBldmVudCA/IGdldERlbHRhWFkoZXZlbnQpIDogZ2V0VG91Y2hYWShldmVudCk7XG4gICAgICAgIHZhciBzb3VyY2VFdmVudCA9IHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUubmFtZSA9PT0gZXZlbnQudHlwZSAmJlxuICAgICAgICAgICAgICAgIGUudGFyZ2V0ID09PSBldmVudC50YXJnZXQgJiZcbiAgICAgICAgICAgICAgICBkZWx0YUNvbXBhcmUoZS5kZWx0YSwgZGVsdGEpO1xuICAgICAgICB9KVswXTtcbiAgICAgICAgLy8gc2VsZiBldmVudCwgYW5kIHNob3VsZCBiZSBjYW5jZWxlZFxuICAgICAgICBpZiAoc291cmNlRXZlbnQgJiYgc291cmNlRXZlbnQuc2hvdWxkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIG91dHNpZGUgb3Igc2hhcmQgZXZlbnRcbiAgICAgICAgaWYgKCFzb3VyY2VFdmVudCkge1xuICAgICAgICAgICAgdmFyIHNoYXJkTm9kZXMgPSAobGFzdFByb3BzLmN1cnJlbnQuc2hhcmRzIHx8IFtdKVxuICAgICAgICAgICAgICAgIC5tYXAoZXh0cmFjdFJlZilcbiAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZS5jb250YWlucyhldmVudC50YXJnZXQpOyB9KTtcbiAgICAgICAgICAgIHZhciBzaG91bGRTdG9wID0gc2hhcmROb2Rlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBzaG91bGRDYW5jZWxFdmVudChldmVudCwgc2hhcmROb2Rlc1swXSlcbiAgICAgICAgICAgICAgICA6ICFsYXN0UHJvcHMuY3VycmVudC5ub0lzb2xhdGlvbjtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdG9wKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICB2YXIgc2hvdWxkQ2FuY2VsID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5hbWUsIGRlbHRhLCB0YXJnZXQsIHNob3VsZCkge1xuICAgICAgICB2YXIgZXZlbnQgPSB7IG5hbWU6IG5hbWUsIGRlbHRhOiBkZWx0YSwgdGFyZ2V0OiB0YXJnZXQsIHNob3VsZDogc2hvdWxkIH07XG4gICAgICAgIHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LnB1c2goZXZlbnQpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50ID0gc2hvdWxkUHJldmVudFF1ZXVlLmN1cnJlbnQuZmlsdGVyKGZ1bmN0aW9uIChlKSB7IHJldHVybiBlICE9PSBldmVudDsgfSk7XG4gICAgICAgIH0sIDEpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2Nyb2xsVG91Y2hTdGFydCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB0b3VjaFN0YXJ0UmVmLmN1cnJlbnQgPSBnZXRUb3VjaFhZKGV2ZW50KTtcbiAgICAgICAgYWN0aXZlQXhpcy5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2Nyb2xsV2hlZWwgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsKGV2ZW50LnR5cGUsIGdldERlbHRhWFkoZXZlbnQpLCBldmVudC50YXJnZXQsIHNob3VsZENhbmNlbEV2ZW50KGV2ZW50LCBwcm9wcy5sb2NrUmVmLmN1cnJlbnQpKTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNjcm9sbFRvdWNoTW92ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBzaG91bGRDYW5jZWwoZXZlbnQudHlwZSwgZ2V0VG91Y2hYWShldmVudCksIGV2ZW50LnRhcmdldCwgc2hvdWxkQ2FuY2VsRXZlbnQoZXZlbnQsIHByb3BzLmxvY2tSZWYuY3VycmVudCkpO1xuICAgIH0sIFtdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBsb2NrU3RhY2sucHVzaChTdHlsZSk7XG4gICAgICAgIHByb3BzLnNldENhbGxiYWNrcyh7XG4gICAgICAgICAgICBvblNjcm9sbENhcHR1cmU6IHNjcm9sbFdoZWVsLFxuICAgICAgICAgICAgb25XaGVlbENhcHR1cmU6IHNjcm9sbFdoZWVsLFxuICAgICAgICAgICAgb25Ub3VjaE1vdmVDYXB0dXJlOiBzY3JvbGxUb3VjaE1vdmVcbiAgICAgICAgfSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHNob3VsZFByZXZlbnQsIG5vblBhc3NpdmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc2Nyb2xsVG91Y2hTdGFydCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2NrU3RhY2sgPSBsb2NrU3RhY2suZmlsdGVyKGZ1bmN0aW9uIChpbnN0KSB7IHJldHVybiBpbnN0ICE9PSBTdHlsZTsgfSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIHNob3VsZFByZXZlbnQsIG5vblBhc3NpdmUpO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc2Nyb2xsVG91Y2hTdGFydCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHZhciByZW1vdmVTY3JvbGxCYXIgPSBwcm9wcy5yZW1vdmVTY3JvbGxCYXIsIGluZXJ0ID0gcHJvcHMuaW5lcnQ7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBpbmVydCA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGUsIHsgc3R5bGVzOiBnZW5lcmF0ZVN0eWxlKGlkKSB9KSA6IG51bGwsXG4gICAgICAgIHJlbW92ZVNjcm9sbEJhciA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVtb3ZlU2Nyb2xsQmFyLCB7IGdhcE1vZGU6IFwibWFyZ2luXCIgfSkgOiBudWxsKSk7XG59XG4iLCJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0IHsgUmVtb3ZlU2Nyb2xsU2lkZUNhciB9IGZyb20gJy4vU2lkZUVmZmVjdCc7XG5pbXBvcnQgeyBlZmZlY3RDYXIgfSBmcm9tICcuL21lZGl1bSc7XG5leHBvcnQgZGVmYXVsdCBleHBvcnRTaWRlY2FyKGVmZmVjdENhciwgUmVtb3ZlU2Nyb2xsU2lkZUNhcik7XG4iLCJ2YXIgZ2V0RGVmYXVsdFBhcmVudCA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgc2FtcGxlVGFyZ2V0ID0gQXJyYXkuaXNBcnJheShvcmlnaW5hbFRhcmdldCkgPyBvcmlnaW5hbFRhcmdldFswXSA6IG9yaWdpbmFsVGFyZ2V0O1xuICAgIHJldHVybiBzYW1wbGVUYXJnZXQub3duZXJEb2N1bWVudC5ib2R5O1xufTtcbnZhciBjb3VudGVyTWFwID0gbmV3IFdlYWtNYXAoKTtcbnZhciB1bmNvbnRyb2xsZWROb2RlcyA9IG5ldyBXZWFrTWFwKCk7XG52YXIgbWFya2VyTWFwID0ge307XG52YXIgbG9ja0NvdW50ID0gMDtcbmV4cG9ydCB2YXIgaGlkZU90aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSkge1xuICAgIGlmIChwYXJlbnROb2RlID09PSB2b2lkIDApIHsgcGFyZW50Tm9kZSA9IGdldERlZmF1bHRQYXJlbnQob3JpZ2luYWxUYXJnZXQpOyB9XG4gICAgaWYgKG1hcmtlck5hbWUgPT09IHZvaWQgMCkgeyBtYXJrZXJOYW1lID0gXCJkYXRhLWFyaWEtaGlkZGVuXCI7IH1cbiAgICB2YXIgdGFyZ2V0cyA9IEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXQgOiBbb3JpZ2luYWxUYXJnZXRdO1xuICAgIGlmICghbWFya2VyTWFwW21hcmtlck5hbWVdKSB7XG4gICAgICAgIG1hcmtlck1hcFttYXJrZXJOYW1lXSA9IG5ldyBXZWFrTWFwKCk7XG4gICAgfVxuICAgIHZhciBtYXJrZXJDb3VudGVyID0gbWFya2VyTWFwW21hcmtlck5hbWVdO1xuICAgIHZhciBoaWRkZW5Ob2RlcyA9IFtdO1xuICAgIHZhciBlbGVtZW50c1RvS2VlcCA9IG5ldyBTZXQoKTtcbiAgICB2YXIga2VlcCA9IChmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgaWYgKCFlbCB8fCBlbGVtZW50c1RvS2VlcC5oYXMoZWwpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudHNUb0tlZXAuYWRkKGVsKTtcbiAgICAgICAga2VlcChlbC5wYXJlbnROb2RlKTtcbiAgICB9KTtcbiAgICB0YXJnZXRzLmZvckVhY2goa2VlcCk7XG4gICAgdmFyIGRlZXAgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIGlmICghcGFyZW50IHx8IHRhcmdldHMuaW5kZXhPZihwYXJlbnQpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHBhcmVudC5jaGlsZHJlbiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1RvS2VlcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBkZWVwKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBub2RlLmdldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgICAgICAgICB2YXIgYWxyZWFkeUhpZGRlbiA9IGF0dHIgIT09IG51bGwgJiYgYXR0ciAhPT0gJ2ZhbHNlJztcbiAgICAgICAgICAgICAgICB2YXIgY291bnRlclZhbHVlID0gKGNvdW50ZXJNYXAuZ2V0KG5vZGUpIHx8IDApICsgMTtcbiAgICAgICAgICAgICAgICB2YXIgbWFya2VyVmFsdWUgPSAobWFya2VyQ291bnRlci5nZXQobm9kZSkgfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgIGNvdW50ZXJNYXAuc2V0KG5vZGUsIGNvdW50ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgbWFya2VyQ291bnRlci5zZXQobm9kZSwgbWFya2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgIGhpZGRlbk5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ZXJWYWx1ZSA9PT0gMSAmJiBhbHJlYWR5SGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuY29udHJvbGxlZE5vZGVzLnNldChub2RlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1hcmtlclZhbHVlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG1hcmtlck5hbWUsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghYWxyZWFkeUhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBkZWVwKHBhcmVudE5vZGUpO1xuICAgIGVsZW1lbnRzVG9LZWVwLmNsZWFyKCk7XG4gICAgbG9ja0NvdW50Kys7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGlkZGVuTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgdmFyIGNvdW50ZXJWYWx1ZSA9IGNvdW50ZXJNYXAuZ2V0KG5vZGUpIC0gMTtcbiAgICAgICAgICAgIHZhciBtYXJrZXJWYWx1ZSA9IG1hcmtlckNvdW50ZXIuZ2V0KG5vZGUpIC0gMTtcbiAgICAgICAgICAgIGNvdW50ZXJNYXAuc2V0KG5vZGUsIGNvdW50ZXJWYWx1ZSk7XG4gICAgICAgICAgICBtYXJrZXJDb3VudGVyLnNldChub2RlLCBtYXJrZXJWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWNvdW50ZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghdW5jb250cm9sbGVkTm9kZXMuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1bmNvbnRyb2xsZWROb2Rlcy5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1hcmtlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobWFya2VyTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2NrQ291bnQtLTtcbiAgICAgICAgaWYgKCFsb2NrQ291bnQpIHtcbiAgICAgICAgICAgIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgY291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB1bmNvbnRyb2xsZWROb2RlcyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICBtYXJrZXJNYXAgPSB7fTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgZm9jdXNIaWRkZW5NYXJrZXIgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgU3R5bGUgPSBzdHlsZVNpbmdsZXRvbigpO1xudmFyIHN0eWxlcyA9IFwiXFxuIFtcIiArIGZvY3VzSGlkZGVuTWFya2VyICsgXCJdIHtcXG4gICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xcbiB9XFxuXCI7XG5leHBvcnQgdmFyIEludGVyYWN0aXZpdHlEaXNhYmxlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGUsIHsgc3R5bGVzOiBzdHlsZXMgfSk7IH07XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBoaWRlT3RoZXJzIH0gZnJvbSAnYXJpYS1oaWRkZW4nO1xuaW1wb3J0IHsgSW50ZXJhY3Rpdml0eURpc2FibGVyIH0gZnJvbSAnLi9JbnRlcmFjdGl2aXR5RGlzYWJsZXInO1xuaW1wb3J0IHsgZm9jdXNIaWRkZW5NYXJrZXIgfSBmcm9tICcuL21lZGl1bSc7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG52YXIgZXh0cmFjdFJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICByZXR1cm4gJ2N1cnJlbnQnIGluIHJlZiA/IHJlZi5jdXJyZW50IDogcmVmO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBFZmZlY3QoX2EpIHtcbiAgICB2YXIgc2V0TG9ja1Byb3BzID0gX2Euc2V0TG9ja1Byb3BzLCBvbkVzY2FwZUtleSA9IF9hLm9uRXNjYXBlS2V5LCBvbkNsaWNrT3V0c2lkZSA9IF9hLm9uQ2xpY2tPdXRzaWRlLCBzaGFyZHMgPSBfYS5zaGFyZHMsIG9uQWN0aXZhdGlvbiA9IF9hLm9uQWN0aXZhdGlvbiwgb25EZWFjdGl2YXRpb24gPSBfYS5vbkRlYWN0aXZhdGlvbiwgbm9Jc29sYXRpb24gPSBfYS5ub0lzb2xhdGlvbjtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZSh1bmRlZmluZWQpLCBhY3RpdmVOb2RlID0gX2JbMF0sIHNldEFjdGl2ZU5vZGUgPSBfYlsxXTtcbiAgICB2YXIgbGFzdEV2ZW50VGFyZ2V0ID0gdXNlUmVmKG51bGwpO1xuICAgIHZhciBtb3VzZVRvdWNoZXMgPSB1c2VSZWYoMCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKChldmVudC5jb2RlID09PSAnRXNjYXBlJyB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudC5rZXkgPT09ICdFc2NhcGUnIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleUNvZGUgPT09IDI3KSAmJlxuICAgICAgICAgICAgICAgICAgICBvbkVzY2FwZUtleSkge1xuICAgICAgICAgICAgICAgICAgICBvbkVzY2FwZUtleShldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgb25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkIHx8XG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0ID09PSBsYXN0RXZlbnRUYXJnZXQuY3VycmVudCB8fFxuICAgICAgICAgICAgICAgIChldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQgJiYgZXZlbnQuYnV0dG9uICE9PSAwKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaGFyZHMgJiZcbiAgICAgICAgICAgICAgICBzaGFyZHNcbiAgICAgICAgICAgICAgICAgICAgLm1hcChleHRyYWN0UmVmKVxuICAgICAgICAgICAgICAgICAgICAuc29tZShmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5vZGUgJiYgbm9kZS5jb250YWlucyhldmVudC50YXJnZXQpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9PT0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uQ2xpY2tPdXRzaWRlKSB7XG4gICAgICAgICAgICAgICAgb25DbGlja091dHNpZGUoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgb25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBvbk1vdXNlRG93bihldmVudCk7XG4gICAgICAgICAgICBtb3VzZVRvdWNoZXMuY3VycmVudCA9IGV2ZW50LnRvdWNoZXMubGVuZ3RoO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgbW91c2VUb3VjaGVzLmN1cnJlbnQgPSBldmVudC50b3VjaGVzLmxlbmd0aDtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Nb3VzZURvd24pO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIG9uVG91Y2hFbmQpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbk1vdXNlRG93bik7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LCBbYWN0aXZlTm9kZSwgb25DbGlja091dHNpZGUsIG9uRXNjYXBlS2V5XSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGFjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgIGlmIChvbkFjdGl2YXRpb24pIHtcbiAgICAgICAgICAgICAgICBvbkFjdGl2YXRpb24oYWN0aXZlTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChvbkRlYWN0aXZhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBvbkRlYWN0aXZhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LCBbISFhY3RpdmVOb2RlXSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF91bmRvID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfTtcbiAgICAgICAgdmFyIHVubW91bnRlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgb25Ob2RlQWN0aXZhdGlvbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBfdW5kbyA9IGhpZGVPdGhlcnMoW25vZGVdLmNvbmNhdCgoc2hhcmRzIHx8IFtdKS5tYXAoZXh0cmFjdFJlZikpLCBkb2N1bWVudC5ib2R5LCBub0lzb2xhdGlvbiA/IHVuZGVmaW5lZCA6IGZvY3VzSGlkZGVuTWFya2VyKTtcbiAgICAgICAgICAgIHNldEFjdGl2ZU5vZGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZTsgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvbk5vZGVEZWFjdGl2YXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdW5kbygpO1xuICAgICAgICAgICAgaWYgKCF1bm1vdW50ZWQpIHtcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVOb2RlKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRMb2NrUHJvcHMoe1xuICAgICAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblRvdWNoU3RhcnQ6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkFjdGl2YXRpb246IG9uTm9kZUFjdGl2YXRpb24sXG4gICAgICAgICAgICBvbkRlYWN0aXZhdGlvbjogb25Ob2RlRGVhY3RpdmF0aW9uXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdW5tb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldExvY2tQcm9wcyhmYWxzZSk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEludGVyYWN0aXZpdHlEaXNhYmxlciwgbnVsbCk7XG59XG4iLCJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0ICdyZWFjdC1mb2N1cy1sb2NrL3NpZGVjYXInO1xuaW1wb3J0ICdyZWFjdC1yZW1vdmUtc2Nyb2xsL3NpZGVjYXInO1xuaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSAnLi9FZmZlY3QnO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xuZXhwb3J0IGRlZmF1bHQgZXhwb3J0U2lkZWNhcihlZmZlY3RDYXIsIEVmZmVjdCk7XG4iLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRm9jdXNPbiBhcyBSZWFjdEZvY3VzT24gfSBmcm9tICcuL1VJJztcbmltcG9ydCBTaWRlQ2FyIGZyb20gJy4vc2lkZWNhcic7XG52YXIgUmVxdWlyZVNpZGVDYXIgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCB0c2xpYl8xLl9fYXNzaWduKHt9LCBwcm9wcykpO1xufTtcbmV4cG9ydCB2YXIgRm9jdXNPbiA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHsgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3RGb2N1c09uLCB0c2xpYl8xLl9fYXNzaWduKHt9LCBwcm9wcywgeyByZWY6IHJlZiwgc2lkZUNhcjogUmVxdWlyZVNpZGVDYXIgfSkpOyB9KTtcbiIsInZhciBrZXkgPSB7XHJcbiAgICBmdWxsc2NyZWVuRW5hYmxlZDogMCxcclxuICAgIGZ1bGxzY3JlZW5FbGVtZW50OiAxLFxyXG4gICAgcmVxdWVzdEZ1bGxzY3JlZW46IDIsXHJcbiAgICBleGl0RnVsbHNjcmVlbjogMyxcclxuICAgIGZ1bGxzY3JlZW5jaGFuZ2U6IDQsXHJcbiAgICBmdWxsc2NyZWVuZXJyb3I6IDUsXHJcbiAgICBmdWxsc2NyZWVuOiA2XHJcbn07XHJcbnZhciB3ZWJraXQgPSBbXHJcbiAgICAnd2Via2l0RnVsbHNjcmVlbkVuYWJsZWQnLFxyXG4gICAgJ3dlYmtpdEZ1bGxzY3JlZW5FbGVtZW50JyxcclxuICAgICd3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbicsXHJcbiAgICAnd2Via2l0RXhpdEZ1bGxzY3JlZW4nLFxyXG4gICAgJ3dlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UnLFxyXG4gICAgJ3dlYmtpdGZ1bGxzY3JlZW5lcnJvcicsXHJcbiAgICAnLXdlYmtpdC1mdWxsLXNjcmVlbicsXHJcbl07XHJcbnZhciBtb3ogPSBbXHJcbiAgICAnbW96RnVsbFNjcmVlbkVuYWJsZWQnLFxyXG4gICAgJ21vekZ1bGxTY3JlZW5FbGVtZW50JyxcclxuICAgICdtb3pSZXF1ZXN0RnVsbFNjcmVlbicsXHJcbiAgICAnbW96Q2FuY2VsRnVsbFNjcmVlbicsXHJcbiAgICAnbW96ZnVsbHNjcmVlbmNoYW5nZScsXHJcbiAgICAnbW96ZnVsbHNjcmVlbmVycm9yJyxcclxuICAgICctbW96LWZ1bGwtc2NyZWVuJyxcclxuXTtcclxudmFyIG1zID0gW1xyXG4gICAgJ21zRnVsbHNjcmVlbkVuYWJsZWQnLFxyXG4gICAgJ21zRnVsbHNjcmVlbkVsZW1lbnQnLFxyXG4gICAgJ21zUmVxdWVzdEZ1bGxzY3JlZW4nLFxyXG4gICAgJ21zRXhpdEZ1bGxzY3JlZW4nLFxyXG4gICAgJ01TRnVsbHNjcmVlbkNoYW5nZScsXHJcbiAgICAnTVNGdWxsc2NyZWVuRXJyb3InLFxyXG4gICAgJy1tcy1mdWxsc2NyZWVuJyxcclxuXTtcclxuLy8gc28gaXQgZG9lc24ndCB0aHJvdyBpZiBubyB3aW5kb3cgb3IgZG9jdW1lbnRcclxudmFyIGRvY3VtZW50ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuZG9jdW1lbnQgOiB7fTtcclxudmFyIHZlbmRvciA9ICgoJ2Z1bGxzY3JlZW5FbmFibGVkJyBpbiBkb2N1bWVudCAmJiBPYmplY3Qua2V5cyhrZXkpKSB8fFxyXG4gICAgKHdlYmtpdFswXSBpbiBkb2N1bWVudCAmJiB3ZWJraXQpIHx8XHJcbiAgICAobW96WzBdIGluIGRvY3VtZW50ICYmIG1veikgfHxcclxuICAgIChtc1swXSBpbiBkb2N1bWVudCAmJiBtcykgfHxcclxuICAgIFtdKTtcclxudmFyIGZzY3JlZW4gPSB7XHJcbiAgICByZXF1ZXN0RnVsbHNjcmVlbjogZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnRbdmVuZG9yW2tleS5yZXF1ZXN0RnVsbHNjcmVlbl1dKCk7IH0sXHJcbiAgICByZXF1ZXN0RnVsbHNjcmVlbkZ1bmN0aW9uOiBmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gZWxlbWVudFt2ZW5kb3Jba2V5LnJlcXVlc3RGdWxsc2NyZWVuXV07IH0sXHJcbiAgICBnZXQgZXhpdEZ1bGxzY3JlZW4oKSB7IHJldHVybiBkb2N1bWVudFt2ZW5kb3Jba2V5LmV4aXRGdWxsc2NyZWVuXV0uYmluZChkb2N1bWVudCk7IH0sXHJcbiAgICBnZXQgZnVsbHNjcmVlblBzZXVkb0NsYXNzKCkgeyByZXR1cm4gXCI6XCIgKyB2ZW5kb3Jba2V5LmZ1bGxzY3JlZW5dOyB9LFxyXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKHR5cGUsIGhhbmRsZXIsIG9wdGlvbnMpIHsgcmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodmVuZG9yW2tleVt0eXBlXV0sIGhhbmRsZXIsIG9wdGlvbnMpOyB9LFxyXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKHR5cGUsIGhhbmRsZXIsIG9wdGlvbnMpIHsgcmV0dXJuIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodmVuZG9yW2tleVt0eXBlXV0sIGhhbmRsZXIsIG9wdGlvbnMpOyB9LFxyXG4gICAgZ2V0IGZ1bGxzY3JlZW5FbmFibGVkKCkgeyByZXR1cm4gQm9vbGVhbihkb2N1bWVudFt2ZW5kb3Jba2V5LmZ1bGxzY3JlZW5FbmFibGVkXV0pOyB9LFxyXG4gICAgc2V0IGZ1bGxzY3JlZW5FbmFibGVkKHZhbCkgeyB9LFxyXG4gICAgZ2V0IGZ1bGxzY3JlZW5FbGVtZW50KCkgeyByZXR1cm4gZG9jdW1lbnRbdmVuZG9yW2tleS5mdWxsc2NyZWVuRWxlbWVudF1dOyB9LFxyXG4gICAgc2V0IGZ1bGxzY3JlZW5FbGVtZW50KHZhbCkgeyB9LFxyXG4gICAgZ2V0IG9uZnVsbHNjcmVlbmNoYW5nZSgpIHsgcmV0dXJuIGRvY3VtZW50WyhcIm9uXCIgKyB2ZW5kb3Jba2V5LmZ1bGxzY3JlZW5jaGFuZ2VdKS50b0xvd2VyQ2FzZSgpXTsgfSxcclxuICAgIHNldCBvbmZ1bGxzY3JlZW5jaGFuZ2UoaGFuZGxlcikgeyByZXR1cm4gZG9jdW1lbnRbKFwib25cIiArIHZlbmRvcltrZXkuZnVsbHNjcmVlbmNoYW5nZV0pLnRvTG93ZXJDYXNlKCldID0gaGFuZGxlcjsgfSxcclxuICAgIGdldCBvbmZ1bGxzY3JlZW5lcnJvcigpIHsgcmV0dXJuIGRvY3VtZW50WyhcIm9uXCIgKyB2ZW5kb3Jba2V5LmZ1bGxzY3JlZW5lcnJvcl0pLnRvTG93ZXJDYXNlKCldOyB9LFxyXG4gICAgc2V0IG9uZnVsbHNjcmVlbmVycm9yKGhhbmRsZXIpIHsgcmV0dXJuIGRvY3VtZW50WyhcIm9uXCIgKyB2ZW5kb3Jba2V5LmZ1bGxzY3JlZW5lcnJvcl0pLnRvTG93ZXJDYXNlKCldID0gaGFuZGxlcjsgfSxcclxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnNjcmVlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZzY3JlZW4uZXNtLmpzLm1hcFxuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZnNjcmVlbiBmcm9tICdmc2NyZWVuJztcblxuZnVuY3Rpb24gdXNlRnVsbFNjcmVlbkhhbmRsZSgpIHtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIGFjdGl2ZSA9IF91c2VTdGF0ZVswXSxcbiAgICAgIHNldEFjdGl2ZSA9IF91c2VTdGF0ZVsxXTtcblxuICB2YXIgbm9kZSA9IHVzZVJlZihudWxsKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKCkge1xuICAgICAgc2V0QWN0aXZlKGZzY3JlZW4uZnVsbHNjcmVlbkVsZW1lbnQgPT09IG5vZGUuY3VycmVudCk7XG4gICAgfTtcblxuICAgIGZzY3JlZW4uYWRkRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsIGhhbmRsZUNoYW5nZSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmc2NyZWVuLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Z1bGxzY3JlZW5jaGFuZ2UnLCBoYW5kbGVDaGFuZ2UpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgdmFyIGVudGVyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlmIChmc2NyZWVuLmZ1bGxzY3JlZW5FbGVtZW50KSB7XG4gICAgICByZXR1cm4gZnNjcmVlbi5leGl0RnVsbHNjcmVlbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZnNjcmVlbi5yZXF1ZXN0RnVsbHNjcmVlbihub2RlLmN1cnJlbnQpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChub2RlLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiBmc2NyZWVuLnJlcXVlc3RGdWxsc2NyZWVuKG5vZGUuY3VycmVudCk7XG4gICAgfVxuICB9LCBbXSk7XG4gIHZhciBleGl0ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlmIChmc2NyZWVuLmZ1bGxzY3JlZW5FbGVtZW50ID09PSBub2RlLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiBmc2NyZWVuLmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9LCBbXSk7XG4gIHJldHVybiB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWN0aXZlOiBhY3RpdmUsXG4gICAgICBlbnRlcjogZW50ZXIsXG4gICAgICBleGl0OiBleGl0LFxuICAgICAgbm9kZTogbm9kZVxuICAgIH07XG4gIH0sIFthY3RpdmUsIGVudGVyLCBleGl0XSk7XG59XG52YXIgRnVsbFNjcmVlbiA9IGZ1bmN0aW9uIEZ1bGxTY3JlZW4oX3JlZikge1xuICB2YXIgaGFuZGxlID0gX3JlZi5oYW5kbGUsXG4gICAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZTtcbiAgdmFyIGNsYXNzTmFtZXMgPSBbXTtcblxuICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgY2xhc3NOYW1lcy5wdXNoKGNsYXNzTmFtZSk7XG4gIH1cblxuICBjbGFzc05hbWVzLnB1c2goJ2Z1bGxzY3JlZW4nKTtcblxuICBpZiAoaGFuZGxlLmFjdGl2ZSkge1xuICAgIGNsYXNzTmFtZXMucHVzaCgnZnVsbHNjcmVlbi1lbmFibGVkJyk7XG4gIH1cblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoaGFuZGxlLmFjdGl2ZSwgaGFuZGxlKTtcbiAgICB9XG4gIH0sIFtoYW5kbGUuYWN0aXZlXSk7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMuam9pbignICcpLFxuICAgIHJlZjogaGFuZGxlLm5vZGUsXG4gICAgc3R5bGU6IGhhbmRsZS5hY3RpdmUgPyB7XG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIHdpZHRoOiAnMTAwJSdcbiAgICB9IDogdW5kZWZpbmVkXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5cbmV4cG9ydCB7IEZ1bGxTY3JlZW4sIHVzZUZ1bGxTY3JlZW5IYW5kbGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1vZGVybi5qcy5tYXBcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSIsImV4cG9ydCBkZWZhdWx0IHtcbiAgZGlzYWJsZWQ6IGZhbHNlXG59OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyB0aW1lb3V0c1NoYXBlIH0gZnJvbSAnLi91dGlscy9Qcm9wVHlwZXMnO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcbmV4cG9ydCB2YXIgVU5NT1VOVEVEID0gJ3VubW91bnRlZCc7XG5leHBvcnQgdmFyIEVYSVRFRCA9ICdleGl0ZWQnO1xuZXhwb3J0IHZhciBFTlRFUklORyA9ICdlbnRlcmluZyc7XG5leHBvcnQgdmFyIEVOVEVSRUQgPSAnZW50ZXJlZCc7XG5leHBvcnQgdmFyIEVYSVRJTkcgPSAnZXhpdGluZyc7XG4vKipcbiAqIFRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudCBsZXRzIHlvdSBkZXNjcmliZSBhIHRyYW5zaXRpb24gZnJvbSBvbmUgY29tcG9uZW50XG4gKiBzdGF0ZSB0byBhbm90aGVyIF9vdmVyIHRpbWVfIHdpdGggYSBzaW1wbGUgZGVjbGFyYXRpdmUgQVBJLiBNb3N0IGNvbW1vbmx5XG4gKiBpdCdzIHVzZWQgdG8gYW5pbWF0ZSB0aGUgbW91bnRpbmcgYW5kIHVubW91bnRpbmcgb2YgYSBjb21wb25lbnQsIGJ1dCBjYW4gYWxzb1xuICogYmUgdXNlZCB0byBkZXNjcmliZSBpbi1wbGFjZSB0cmFuc2l0aW9uIHN0YXRlcyBhcyB3ZWxsLlxuICpcbiAqIC0tLVxuICpcbiAqICoqTm90ZSoqOiBgVHJhbnNpdGlvbmAgaXMgYSBwbGF0Zm9ybS1hZ25vc3RpYyBiYXNlIGNvbXBvbmVudC4gSWYgeW91J3JlIHVzaW5nXG4gKiB0cmFuc2l0aW9ucyBpbiBDU1MsIHlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVzZVxuICogW2BDU1NUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9jc3MtdHJhbnNpdGlvbilcbiAqIGluc3RlYWQuIEl0IGluaGVyaXRzIGFsbCB0aGUgZmVhdHVyZXMgb2YgYFRyYW5zaXRpb25gLCBidXQgY29udGFpbnNcbiAqIGFkZGl0aW9uYWwgZmVhdHVyZXMgbmVjZXNzYXJ5IHRvIHBsYXkgbmljZSB3aXRoIENTUyB0cmFuc2l0aW9ucyAoaGVuY2UgdGhlXG4gKiBuYW1lIG9mIHRoZSBjb21wb25lbnQpLlxuICpcbiAqIC0tLVxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGBUcmFuc2l0aW9uYCBjb21wb25lbnQgZG9lcyBub3QgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIHRoZVxuICogY29tcG9uZW50IGl0IHJlbmRlcnMsIGl0IG9ubHkgdHJhY2tzIFwiZW50ZXJcIiBhbmQgXCJleGl0XCIgc3RhdGVzIGZvciB0aGVcbiAqIGNvbXBvbmVudHMuIEl0J3MgdXAgdG8geW91IHRvIGdpdmUgbWVhbmluZyBhbmQgZWZmZWN0IHRvIHRob3NlIHN0YXRlcy4gRm9yXG4gKiBleGFtcGxlIHdlIGNhbiBhZGQgc3R5bGVzIHRvIGEgY29tcG9uZW50IHdoZW4gaXQgZW50ZXJzIG9yIGV4aXRzOlxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuICpcbiAqIGNvbnN0IGR1cmF0aW9uID0gMzAwO1xuICpcbiAqIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAqICAgdHJhbnNpdGlvbjogYG9wYWNpdHkgJHtkdXJhdGlvbn1tcyBlYXNlLWluLW91dGAsXG4gKiAgIG9wYWNpdHk6IDAsXG4gKiB9XG4gKlxuICogY29uc3QgdHJhbnNpdGlvblN0eWxlcyA9IHtcbiAqICAgZW50ZXJpbmc6IHsgb3BhY2l0eTogMSB9LFxuICogICBlbnRlcmVkOiAgeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGV4aXRpbmc6ICB7IG9wYWNpdHk6IDAgfSxcbiAqICAgZXhpdGVkOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiB9O1xuICpcbiAqIGNvbnN0IEZhZGUgPSAoeyBpbjogaW5Qcm9wIH0pID0+IChcbiAqICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17ZHVyYXRpb259PlxuICogICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICA8ZGl2IHN0eWxlPXt7XG4gKiAgICAgICAgIC4uLmRlZmF1bHRTdHlsZSxcbiAqICAgICAgICAgLi4udHJhbnNpdGlvblN0eWxlc1tzdGF0ZV1cbiAqICAgICAgIH19PlxuICogICAgICAgICBJJ20gYSBmYWRlIFRyYW5zaXRpb24hXG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICApfVxuICogICA8L1RyYW5zaXRpb24+XG4gKiApO1xuICogYGBgXG4gKlxuICogVGhlcmUgYXJlIDQgbWFpbiBzdGF0ZXMgYSBUcmFuc2l0aW9uIGNhbiBiZSBpbjpcbiAqICAtIGAnZW50ZXJpbmcnYFxuICogIC0gYCdlbnRlcmVkJ2BcbiAqICAtIGAnZXhpdGluZydgXG4gKiAgLSBgJ2V4aXRlZCdgXG4gKlxuICogVHJhbnNpdGlvbiBzdGF0ZSBpcyB0b2dnbGVkIHZpYSB0aGUgYGluYCBwcm9wLiBXaGVuIGB0cnVlYCB0aGUgY29tcG9uZW50XG4gKiBiZWdpbnMgdGhlIFwiRW50ZXJcIiBzdGFnZS4gRHVyaW5nIHRoaXMgc3RhZ2UsIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCBmcm9tXG4gKiBpdHMgY3VycmVudCB0cmFuc2l0aW9uIHN0YXRlLCB0byBgJ2VudGVyaW5nJ2AgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGVcbiAqIHRyYW5zaXRpb24gYW5kIHRoZW4gdG8gdGhlIGAnZW50ZXJlZCdgIHN0YWdlIG9uY2UgaXQncyBjb21wbGV0ZS4gTGV0J3MgdGFrZVxuICogdGhlIGZvbGxvd2luZyBleGFtcGxlICh3ZSdsbCB1c2UgdGhlXG4gKiBbdXNlU3RhdGVdKGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VzdGF0ZSkgaG9vayk6XG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezUwMH0+XG4gKiAgICAgICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICAgICAgLy8gLi4uXG4gKiAgICAgICAgICl9XG4gKiAgICAgICA8L1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldEluUHJvcCh0cnVlKX0+XG4gKiAgICAgICAgIENsaWNrIHRvIEVudGVyXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCB0byB0aGUgYCdlbnRlcmluZydgIHN0YXRlXG4gKiBhbmQgc3RheSB0aGVyZSBmb3IgNTAwbXMgKHRoZSB2YWx1ZSBvZiBgdGltZW91dGApIGJlZm9yZSBpdCBmaW5hbGx5IHN3aXRjaGVzXG4gKiB0byBgJ2VudGVyZWQnYC5cbiAqXG4gKiBXaGVuIGBpbmAgaXMgYGZhbHNlYCB0aGUgc2FtZSB0aGluZyBoYXBwZW5zIGV4Y2VwdCB0aGUgc3RhdGUgbW92ZXMgZnJvbVxuICogYCdleGl0aW5nJ2AgdG8gYCdleGl0ZWQnYC5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG4gICAgdmFyIHBhcmVudEdyb3VwID0gY29udGV4dDsgLy8gSW4gdGhlIGNvbnRleHQgb2YgYSBUcmFuc2l0aW9uR3JvdXAgYWxsIGVudGVycyBhcmUgcmVhbGx5IGFwcGVhcnNcblxuICAgIHZhciBhcHBlYXIgPSBwYXJlbnRHcm91cCAmJiAhcGFyZW50R3JvdXAuaXNNb3VudGluZyA/IHByb3BzLmVudGVyIDogcHJvcHMuYXBwZWFyO1xuICAgIHZhciBpbml0aWFsU3RhdHVzO1xuICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJvcHMuaW4pIHtcbiAgICAgIGlmIChhcHBlYXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gRU5URVJJTkc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRU5URVJFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb3BzLnVubW91bnRPbkV4aXQgfHwgcHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBVTk1PVU5URUQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzOiBpbml0aWFsU3RhdHVzXG4gICAgfTtcbiAgICBfdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIFRyYW5zaXRpb24uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKF9yZWYsIHByZXZTdGF0ZSkge1xuICAgIHZhciBuZXh0SW4gPSBfcmVmLmluO1xuXG4gICAgaWYgKG5leHRJbiAmJiBwcmV2U3RhdGUuc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcykge1xuICAvLyAgIGxldCBuZXh0U3RhdHVzID0gbnVsbFxuICAvLyAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgLy8gICAgIGNvbnN0IHsgc3RhdHVzIH0gPSB0aGlzLnN0YXRlXG4gIC8vICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAvLyAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4geyBuZXh0U3RhdHVzIH1cbiAgLy8gfVxuICA7XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3RhdHVzKHRydWUsIHRoaXMuYXBwZWFyU3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBuZXh0U3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElORztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdHVzKGZhbHNlLCBuZXh0U3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuICB9O1xuXG4gIF9wcm90by5nZXRUaW1lb3V0cyA9IGZ1bmN0aW9uIGdldFRpbWVvdXRzKCkge1xuICAgIHZhciB0aW1lb3V0ID0gdGhpcy5wcm9wcy50aW1lb3V0O1xuICAgIHZhciBleGl0LCBlbnRlciwgYXBwZWFyO1xuICAgIGV4aXQgPSBlbnRlciA9IGFwcGVhciA9IHRpbWVvdXQ7XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsICYmIHR5cGVvZiB0aW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgZXhpdCA9IHRpbWVvdXQuZXhpdDtcbiAgICAgIGVudGVyID0gdGltZW91dC5lbnRlcjsgLy8gVE9ETzogcmVtb3ZlIGZhbGxiYWNrIGZvciBuZXh0IG1ham9yXG5cbiAgICAgIGFwcGVhciA9IHRpbWVvdXQuYXBwZWFyICE9PSB1bmRlZmluZWQgPyB0aW1lb3V0LmFwcGVhciA6IGVudGVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBleGl0OiBleGl0LFxuICAgICAgZW50ZXI6IGVudGVyLFxuICAgICAgYXBwZWFyOiBhcHBlYXJcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVTdGF0dXMgPSBmdW5jdGlvbiB1cGRhdGVTdGF0dXMobW91bnRpbmcsIG5leHRTdGF0dXMpIHtcbiAgICBpZiAobW91bnRpbmcgPT09IHZvaWQgMCkge1xuICAgICAgbW91bnRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgLy8gbmV4dFN0YXR1cyB3aWxsIGFsd2F5cyBiZSBFTlRFUklORyBvciBFWElUSU5HLlxuICAgICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcblxuICAgICAgaWYgKG5leHRTdGF0dXMgPT09IEVOVEVSSU5HKSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUVudGVyKG1vdW50aW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUV4aXQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMudW5tb3VudE9uRXhpdCAmJiB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gRVhJVEVEKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBVTk1PVU5URURcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucGVyZm9ybUVudGVyID0gZnVuY3Rpb24gcGVyZm9ybUVudGVyKG1vdW50aW5nKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgZW50ZXIgPSB0aGlzLnByb3BzLmVudGVyO1xuICAgIHZhciBhcHBlYXJpbmcgPSB0aGlzLmNvbnRleHQgPyB0aGlzLmNvbnRleHQuaXNNb3VudGluZyA6IG1vdW50aW5nO1xuXG4gICAgdmFyIF9yZWYyID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gW2FwcGVhcmluZ10gOiBbUmVhY3RET00uZmluZERPTU5vZGUodGhpcyksIGFwcGVhcmluZ10sXG4gICAgICAgIG1heWJlTm9kZSA9IF9yZWYyWzBdLFxuICAgICAgICBtYXliZUFwcGVhcmluZyA9IF9yZWYyWzFdO1xuXG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBlbnRlclRpbWVvdXQgPSBhcHBlYXJpbmcgPyB0aW1lb3V0cy5hcHBlYXIgOiB0aW1lb3V0cy5lbnRlcjsgLy8gbm8gZW50ZXIgYW5pbWF0aW9uIHNraXAgcmlnaHQgdG8gRU5URVJFRFxuICAgIC8vIGlmIHdlIGFyZSBtb3VudGluZyBhbmQgcnVubmluZyB0aGlzIGl0IG1lYW5zIGFwcGVhciBfbXVzdF8gYmUgc2V0XG5cbiAgICBpZiAoIW1vdW50aW5nICYmICFlbnRlciB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25FbnRlcihtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVOVEVSSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJpbmcobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG5cbiAgICAgIF90aGlzMi5vblRyYW5zaXRpb25FbmQoZW50ZXJUaW1lb3V0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zYWZlU2V0U3RhdGUoe1xuICAgICAgICAgIHN0YXR1czogRU5URVJFRFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucGVyZm9ybUV4aXQgPSBmdW5jdGlvbiBwZXJmb3JtRXhpdCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBleGl0ID0gdGhpcy5wcm9wcy5leGl0O1xuICAgIHZhciB0aW1lb3V0cyA9IHRoaXMuZ2V0VGltZW91dHMoKTtcbiAgICB2YXIgbWF5YmVOb2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdW5kZWZpbmVkIDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7IC8vIG5vIGV4aXQgYW5pbWF0aW9uIHNraXAgcmlnaHQgdG8gRVhJVEVEXG5cbiAgICBpZiAoIWV4aXQgfHwgY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9wcy5vbkV4aXQobWF5YmVOb2RlKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVYSVRJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMucHJvcHMub25FeGl0aW5nKG1heWJlTm9kZSk7XG5cbiAgICAgIF90aGlzMy5vblRyYW5zaXRpb25FbmQodGltZW91dHMuZXhpdCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIGNhbmNlbE5leHRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5uZXh0Q2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHRoaXMubmV4dENhbGxiYWNrLmNhbmNlbCgpO1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2FmZVNldFN0YXRlID0gZnVuY3Rpb24gc2FmZVNldFN0YXRlKG5leHRTdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnksIGJ1dCB0aGVyZSBhcmUgd2VpcmQgcmFjZSBjb25kaXRpb25zIHdpdGhcbiAgICAvLyBzZXRTdGF0ZSBjYWxsYmFja3MgYW5kIHVubW91bnRpbmcgaW4gdGVzdGluZywgc28gYWx3YXlzIG1ha2Ugc3VyZSB0aGF0XG4gICAgLy8gd2UgY2FuIGNhbmNlbCBhbnkgcGVuZGluZyBzZXRTdGF0ZSBjYWxsYmFja3MgYWZ0ZXIgd2UgdW5tb3VudC5cbiAgICBjYWxsYmFjayA9IHRoaXMuc2V0TmV4dENhbGxiYWNrKGNhbGxiYWNrKTtcbiAgICB0aGlzLnNldFN0YXRlKG5leHRTdGF0ZSwgY2FsbGJhY2spO1xuICB9O1xuXG4gIF9wcm90by5zZXROZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiBzZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBhY3RpdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIF90aGlzNC5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMubmV4dENhbGxiYWNrLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5uZXh0Q2FsbGJhY2s7XG4gIH07XG5cbiAgX3Byb3RvLm9uVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIG9uVHJhbnNpdGlvbkVuZCh0aW1lb3V0LCBoYW5kbGVyKSB7XG4gICAgdGhpcy5zZXROZXh0Q2FsbGJhY2soaGFuZGxlcik7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB0aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIHZhciBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyID0gdGltZW91dCA9PSBudWxsICYmICF0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyO1xuXG4gICAgaWYgKCFub2RlIHx8IGRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5uZXh0Q2FsbGJhY2ssIDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyKSB7XG4gICAgICB2YXIgX3JlZjMgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyBbdGhpcy5uZXh0Q2FsbGJhY2tdIDogW25vZGUsIHRoaXMubmV4dENhbGxiYWNrXSxcbiAgICAgICAgICBtYXliZU5vZGUgPSBfcmVmM1swXSxcbiAgICAgICAgICBtYXliZU5leHRDYWxsYmFjayA9IF9yZWYzWzFdO1xuXG4gICAgICB0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyKG1heWJlTm9kZSwgbWF5YmVOZXh0Q2FsbGJhY2spO1xuICAgIH1cblxuICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5uZXh0Q2FsbGJhY2ssIHRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgIGlmIChzdGF0dXMgPT09IFVOTU9VTlRFRCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgX2luID0gX3RoaXMkcHJvcHMuaW4sXG4gICAgICAgIF9tb3VudE9uRW50ZXIgPSBfdGhpcyRwcm9wcy5tb3VudE9uRW50ZXIsXG4gICAgICAgIF91bm1vdW50T25FeGl0ID0gX3RoaXMkcHJvcHMudW5tb3VudE9uRXhpdCxcbiAgICAgICAgX2FwcGVhciA9IF90aGlzJHByb3BzLmFwcGVhcixcbiAgICAgICAgX2VudGVyID0gX3RoaXMkcHJvcHMuZW50ZXIsXG4gICAgICAgIF9leGl0ID0gX3RoaXMkcHJvcHMuZXhpdCxcbiAgICAgICAgX3RpbWVvdXQgPSBfdGhpcyRwcm9wcy50aW1lb3V0LFxuICAgICAgICBfYWRkRW5kTGlzdGVuZXIgPSBfdGhpcyRwcm9wcy5hZGRFbmRMaXN0ZW5lcixcbiAgICAgICAgX29uRW50ZXIgPSBfdGhpcyRwcm9wcy5vbkVudGVyLFxuICAgICAgICBfb25FbnRlcmluZyA9IF90aGlzJHByb3BzLm9uRW50ZXJpbmcsXG4gICAgICAgIF9vbkVudGVyZWQgPSBfdGhpcyRwcm9wcy5vbkVudGVyZWQsXG4gICAgICAgIF9vbkV4aXQgPSBfdGhpcyRwcm9wcy5vbkV4aXQsXG4gICAgICAgIF9vbkV4aXRpbmcgPSBfdGhpcyRwcm9wcy5vbkV4aXRpbmcsXG4gICAgICAgIF9vbkV4aXRlZCA9IF90aGlzJHByb3BzLm9uRXhpdGVkLFxuICAgICAgICBfbm9kZVJlZiA9IF90aGlzJHByb3BzLm5vZGVSZWYsXG4gICAgICAgIGNoaWxkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJpblwiLCBcIm1vdW50T25FbnRlclwiLCBcInVubW91bnRPbkV4aXRcIiwgXCJhcHBlYXJcIiwgXCJlbnRlclwiLCBcImV4aXRcIiwgXCJ0aW1lb3V0XCIsIFwiYWRkRW5kTGlzdGVuZXJcIiwgXCJvbkVudGVyXCIsIFwib25FbnRlcmluZ1wiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRXhpdFwiLCBcIm9uRXhpdGluZ1wiLCBcIm9uRXhpdGVkXCIsIFwibm9kZVJlZlwiXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgLyojX19QVVJFX18qL1xuICAgICAgLy8gYWxsb3dzIGZvciBuZXN0ZWQgVHJhbnNpdGlvbnNcbiAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgfSwgdHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4oc3RhdHVzLCBjaGlsZFByb3BzKSA6IFJlYWN0LmNsb25lRWxlbWVudChSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSwgY2hpbGRQcm9wcykpXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbi5jb250ZXh0VHlwZSA9IFRyYW5zaXRpb25Hcm91cENvbnRleHQ7XG5UcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIEEgUmVhY3QgcmVmZXJlbmNlIHRvIERPTSBlbGVtZW50IHRoYXQgbmVlZCB0byB0cmFuc2l0aW9uOlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTExMjcxMzAvNDY3MTkzMlxuICAgKlxuICAgKiAgIC0gV2hlbiBgbm9kZVJlZmAgcHJvcCBpcyB1c2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZCB0byBjYWxsYmFjayBmdW5jdGlvbnNcbiAgICogICAgICAoZS5nLiBgb25FbnRlcmApIGJlY2F1c2UgdXNlciBhbHJlYWR5IGhhcyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBub2RlLlxuICAgKiAgIC0gV2hlbiBjaGFuZ2luZyBga2V5YCBwcm9wIG9mIGBUcmFuc2l0aW9uYCBpbiBhIGBUcmFuc2l0aW9uR3JvdXBgIGEgbmV3XG4gICAqICAgICBgbm9kZVJlZmAgbmVlZCB0byBiZSBwcm92aWRlZCB0byBgVHJhbnNpdGlvbmAgd2l0aCBjaGFuZ2VkIGBrZXlgIHByb3BcbiAgICogICAgIChzZWVcbiAgICogICAgIFt0ZXN0L0NTU1RyYW5zaXRpb24tdGVzdC5qc10oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9ibG9iLzEzNDM1Zjg5N2IzYWI3MWY2ZTE5ZDcyNGYxNDU1OTZmNTkxMDU4MWMvdGVzdC9DU1NUcmFuc2l0aW9uLXRlc3QuanMjTDM2Mi1MNDM3KSkuXG4gICAqL1xuICBub2RlUmVmOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IHR5cGVvZiBFbGVtZW50ID09PSAndW5kZWZpbmVkJyA/IFByb3BUeXBlcy5hbnkgOiBmdW5jdGlvbiAocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHZhbHVlID0gcHJvcFZhbHVlW2tleV07XG4gICAgICByZXR1cm4gUHJvcFR5cGVzLmluc3RhbmNlT2YodmFsdWUgJiYgJ293bmVyRG9jdW1lbnQnIGluIHZhbHVlID8gdmFsdWUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5FbGVtZW50IDogRWxlbWVudCkocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCk7XG4gICAgfVxuICB9KSxcblxuICAvKipcbiAgICogQSBgZnVuY3Rpb25gIGNoaWxkIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBSZWFjdCBlbGVtZW50LiBUaGlzIGZ1bmN0aW9uIGlzXG4gICAqIGNhbGxlZCB3aXRoIHRoZSBjdXJyZW50IHRyYW5zaXRpb24gc3RhdHVzIChgJ2VudGVyaW5nJ2AsIGAnZW50ZXJlZCdgLFxuICAgKiBgJ2V4aXRpbmcnYCwgYCdleGl0ZWQnYCksIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFwcGx5IGNvbnRleHRcbiAgICogc3BlY2lmaWMgcHJvcHMgdG8gYSBjb21wb25lbnQuXG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiA8VHJhbnNpdGlvbiBpbj17dGhpcy5zdGF0ZS5pbn0gdGltZW91dD17MTUwfT5cbiAgICogICB7c3RhdGUgPT4gKFxuICAgKiAgICAgPE15Q29tcG9uZW50IGNsYXNzTmFtZT17YGZhZGUgZmFkZS0ke3N0YXRlfWB9IC8+XG4gICAqICAgKX1cbiAgICogPC9UcmFuc2l0aW9uPlxuICAgKiBgYGBcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogU2hvdyB0aGUgY29tcG9uZW50OyB0cmlnZ2VycyB0aGUgZW50ZXIgb3IgZXhpdCBzdGF0ZXNcbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IGlzIG1vdW50ZWQgaW1tZWRpYXRlbHkgYWxvbmcgd2l0aFxuICAgKiB0aGUgcGFyZW50IGBUcmFuc2l0aW9uYCBjb21wb25lbnQuIElmIHlvdSB3YW50IHRvIFwibGF6eSBtb3VudFwiIHRoZSBjb21wb25lbnQgb24gdGhlXG4gICAqIGZpcnN0IGBpbj17dHJ1ZX1gIHlvdSBjYW4gc2V0IGBtb3VudE9uRW50ZXJgLiBBZnRlciB0aGUgZmlyc3QgZW50ZXIgdHJhbnNpdGlvbiB0aGUgY29tcG9uZW50IHdpbGwgc3RheVxuICAgKiBtb3VudGVkLCBldmVuIG9uIFwiZXhpdGVkXCIsIHVubGVzcyB5b3UgYWxzbyBzcGVjaWZ5IGB1bm1vdW50T25FeGl0YC5cbiAgICovXG4gIG1vdW50T25FbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBzdGF5cyBtb3VudGVkIGFmdGVyIGl0IHJlYWNoZXMgdGhlIGAnZXhpdGVkJ2Agc3RhdGUuXG4gICAqIFNldCBgdW5tb3VudE9uRXhpdGAgaWYgeW91J2QgcHJlZmVyIHRvIHVubW91bnQgdGhlIGNvbXBvbmVudCBhZnRlciBpdCBmaW5pc2hlcyBleGl0aW5nLlxuICAgKi9cbiAgdW5tb3VudE9uRXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBkb2VzIG5vdCBwZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW5cbiAgICogaXQgZmlyc3QgbW91bnRzLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiBgaW5gLiBJZiB5b3Ugd2FudCB0aGlzXG4gICAqIGJlaGF2aW9yLCBzZXQgYm90aCBgYXBwZWFyYCBhbmQgYGluYCB0byBgdHJ1ZWAuXG4gICAqXG4gICAqID4gKipOb3RlKio6IHRoZXJlIGFyZSBubyBzcGVjaWFsIGFwcGVhciBzdGF0ZXMgbGlrZSBgYXBwZWFyaW5nYC9gYXBwZWFyZWRgLCB0aGlzIHByb3BcbiAgICogPiBvbmx5IGFkZHMgYW4gYWRkaXRpb25hbCBlbnRlciB0cmFuc2l0aW9uLiBIb3dldmVyLCBpbiB0aGVcbiAgICogPiBgPENTU1RyYW5zaXRpb24+YCBjb21wb25lbnQgdGhhdCBmaXJzdCBlbnRlciB0cmFuc2l0aW9uIGRvZXMgcmVzdWx0IGluXG4gICAqID4gYWRkaXRpb25hbCBgLmFwcGVhci0qYCBjbGFzc2VzLCB0aGF0IHdheSB5b3UgY2FuIGNob29zZSB0byBzdHlsZSBpdFxuICAgKiA+IGRpZmZlcmVudGx5LlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZW50ZXIgdHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGV4aXQgdHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFJlcXVpcmVkIHVubGVzcyBgYWRkRW5kTGlzdGVuZXJgIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgdGltZW91dCBmb3IgYWxsIHRyYW5zaXRpb25zOlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogdGltZW91dD17NTAwfVxuICAgKiBgYGBcbiAgICpcbiAgICogb3IgaW5kaXZpZHVhbGx5OlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogdGltZW91dD17e1xuICAgKiAgYXBwZWFyOiA1MDAsXG4gICAqICBlbnRlcjogMzAwLFxuICAgKiAgZXhpdDogNTAwLFxuICAgKiB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogLSBgYXBwZWFyYCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgYGVudGVyYFxuICAgKiAtIGBlbnRlcmAgZGVmYXVsdHMgdG8gYDBgXG4gICAqIC0gYGV4aXRgIGRlZmF1bHRzIHRvIGAwYFxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyIHwgeyBlbnRlcj86IG51bWJlciwgZXhpdD86IG51bWJlciwgYXBwZWFyPzogbnVtYmVyIH19XG4gICAqL1xuICB0aW1lb3V0OiBmdW5jdGlvbiB0aW1lb3V0KHByb3BzKSB7XG4gICAgdmFyIHB0ID0gdGltZW91dHNTaGFwZTtcbiAgICBpZiAoIXByb3BzLmFkZEVuZExpc3RlbmVyKSBwdCA9IHB0LmlzUmVxdWlyZWQ7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHQuYXBwbHkodm9pZCAwLCBbcHJvcHNdLmNvbmNhdChhcmdzKSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZ1xuICAgKiBET00gbm9kZSBhbmQgYSBgZG9uZWAgY2FsbGJhY2suIEFsbG93cyBmb3IgbW9yZSBmaW5lIGdyYWluZWQgdHJhbnNpdGlvbiBlbmRcbiAgICogbG9naWMuIFRpbWVvdXRzIGFyZSBzdGlsbCB1c2VkIGFzIGEgZmFsbGJhY2sgaWYgcHJvdmlkZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiBhZGRFbmRMaXN0ZW5lcj17KG5vZGUsIGRvbmUpID0+IHtcbiAgICogICAvLyB1c2UgdGhlIGNzcyB0cmFuc2l0aW9uZW5kIGV2ZW50IHRvIG1hcmsgdGhlIGZpbmlzaCBvZiBhIHRyYW5zaXRpb25cbiAgICogICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBkb25lLCBmYWxzZSk7XG4gICAqIH19XG4gICAqIGBgYFxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9OyAvLyBOYW1lIHRoZSBmdW5jdGlvbiBzbyBpdCBpcyBjbGVhcmVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5UcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgaW46IGZhbHNlLFxuICBtb3VudE9uRW50ZXI6IGZhbHNlLFxuICB1bm1vdW50T25FeGl0OiBmYWxzZSxcbiAgYXBwZWFyOiBmYWxzZSxcbiAgZW50ZXI6IHRydWUsXG4gIGV4aXQ6IHRydWUsXG4gIG9uRW50ZXI6IG5vb3AsXG4gIG9uRW50ZXJpbmc6IG5vb3AsXG4gIG9uRW50ZXJlZDogbm9vcCxcbiAgb25FeGl0OiBub29wLFxuICBvbkV4aXRpbmc6IG5vb3AsXG4gIG9uRXhpdGVkOiBub29wXG59O1xuVHJhbnNpdGlvbi5VTk1PVU5URUQgPSBVTk1PVU5URUQ7XG5UcmFuc2l0aW9uLkVYSVRFRCA9IEVYSVRFRDtcblRyYW5zaXRpb24uRU5URVJJTkcgPSBFTlRFUklORztcblRyYW5zaXRpb24uRU5URVJFRCA9IEVOVEVSRUQ7XG5UcmFuc2l0aW9uLkVYSVRJTkcgPSBFWElUSU5HO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbjsiLCJpbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogR2l2ZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gLCByZXR1cm4gYW4gb2JqZWN0IG1hcHBpbmcga2V5IHRvIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Kn0gY2hpbGRyZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gXG4gKiBAcmV0dXJuIHtvYmplY3R9IE1hcHBpbmcgb2Yga2V5IHRvIGNoaWxkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkTWFwcGluZyhjaGlsZHJlbiwgbWFwRm4pIHtcbiAgdmFyIG1hcHBlciA9IGZ1bmN0aW9uIG1hcHBlcihjaGlsZCkge1xuICAgIHJldHVybiBtYXBGbiAmJiBpc1ZhbGlkRWxlbWVudChjaGlsZCkgPyBtYXBGbihjaGlsZCkgOiBjaGlsZDtcbiAgfTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKGNoaWxkcmVuKSBDaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGM7XG4gIH0pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgLy8gcnVuIHRoZSBtYXAgZnVuY3Rpb24gaGVyZSBpbnN0ZWFkIHNvIHRoYXQgdGhlIGtleSBpcyB0aGUgY29tcHV0ZWQgb25lXG4gICAgcmVzdWx0W2NoaWxkLmtleV0gPSBtYXBwZXIoY2hpbGQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogV2hlbiB5b3UncmUgYWRkaW5nIG9yIHJlbW92aW5nIGNoaWxkcmVuIHNvbWUgbWF5IGJlIGFkZGVkIG9yIHJlbW92ZWQgaW4gdGhlXG4gKiBzYW1lIHJlbmRlciBwYXNzLiBXZSB3YW50IHRvIHNob3cgKmJvdGgqIHNpbmNlIHdlIHdhbnQgdG8gc2ltdWx0YW5lb3VzbHlcbiAqIGFuaW1hdGUgZWxlbWVudHMgaW4gYW5kIG91dC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHByZXZpb3VzIHNldCBvZiBrZXlzXG4gKiBhbmQgYSBuZXcgc2V0IG9mIGtleXMgYW5kIG1lcmdlcyB0aGVtIHdpdGggaXRzIGJlc3QgZ3Vlc3Mgb2YgdGhlIGNvcnJlY3RcbiAqIG9yZGVyaW5nLiBJbiB0aGUgZnV0dXJlIHdlIG1heSBleHBvc2Ugc29tZSBvZiB0aGUgdXRpbGl0aWVzIGluXG4gKiBSZWFjdE11bHRpQ2hpbGQgdG8gbWFrZSB0aGlzIGVhc3ksIGJ1dCBmb3Igbm93IFJlYWN0IGl0c2VsZiBkb2VzIG5vdFxuICogZGlyZWN0bHkgaGF2ZSB0aGlzIGNvbmNlcHQgb2YgdGhlIHVuaW9uIG9mIHByZXZDaGlsZHJlbiBhbmQgbmV4dENoaWxkcmVuXG4gKiBzbyB3ZSBpbXBsZW1lbnQgaXQgaGVyZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJldiBwcmV2IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHBhcmFtIHtvYmplY3R9IG5leHQgbmV4dCBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEByZXR1cm4ge29iamVjdH0gYSBrZXkgc2V0IHRoYXQgY29udGFpbnMgYWxsIGtleXMgaW4gYHByZXZgIGFuZCBhbGwga2V5c1xuICogaW4gYG5leHRgIGluIGEgcmVhc29uYWJsZSBvcmRlci5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXYsIG5leHQpIHtcbiAgcHJldiA9IHByZXYgfHwge307XG4gIG5leHQgPSBuZXh0IHx8IHt9O1xuXG4gIGZ1bmN0aW9uIGdldFZhbHVlRm9yS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkgaW4gbmV4dCA/IG5leHRba2V5XSA6IHByZXZba2V5XTtcbiAgfSAvLyBGb3IgZWFjaCBrZXkgb2YgYG5leHRgLCB0aGUgbGlzdCBvZiBrZXlzIHRvIGluc2VydCBiZWZvcmUgdGhhdCBrZXkgaW5cbiAgLy8gdGhlIGNvbWJpbmVkIGxpc3RcblxuXG4gIHZhciBuZXh0S2V5c1BlbmRpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgcGVuZGluZ0tleXMgPSBbXTtcblxuICBmb3IgKHZhciBwcmV2S2V5IGluIHByZXYpIHtcbiAgICBpZiAocHJldktleSBpbiBuZXh0KSB7XG4gICAgICBpZiAocGVuZGluZ0tleXMubGVuZ3RoKSB7XG4gICAgICAgIG5leHRLZXlzUGVuZGluZ1twcmV2S2V5XSA9IHBlbmRpbmdLZXlzO1xuICAgICAgICBwZW5kaW5nS2V5cyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nS2V5cy5wdXNoKHByZXZLZXkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpO1xuICB2YXIgY2hpbGRNYXBwaW5nID0ge307XG5cbiAgZm9yICh2YXIgbmV4dEtleSBpbiBuZXh0KSB7XG4gICAgaWYgKG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGVuZGluZ05leHRLZXkgPSBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV07XG4gICAgICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ05leHRLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5XSA9IGdldFZhbHVlRm9yS2V5KG5leHRLZXkpO1xuICB9IC8vIEZpbmFsbHksIGFkZCB0aGUga2V5cyB3aGljaCBkaWRuJ3QgYXBwZWFyIGJlZm9yZSBhbnkga2V5IGluIGBuZXh0YFxuXG5cbiAgZm9yIChpID0gMDsgaSA8IHBlbmRpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hpbGRNYXBwaW5nW3BlbmRpbmdLZXlzW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdLZXlzW2ldKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZE1hcHBpbmc7XG59XG5cbmZ1bmN0aW9uIGdldFByb3AoY2hpbGQsIHByb3AsIHByb3BzKSB7XG4gIHJldHVybiBwcm9wc1twcm9wXSAhPSBudWxsID8gcHJvcHNbcHJvcF0gOiBjaGlsZC5wcm9wc1twcm9wXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxDaGlsZE1hcHBpbmcocHJvcHMsIG9uRXhpdGVkKSB7XG4gIHJldHVybiBnZXRDaGlsZE1hcHBpbmcocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgIGluOiB0cnVlLFxuICAgICAgYXBwZWFyOiBnZXRQcm9wKGNoaWxkLCAnYXBwZWFyJywgcHJvcHMpLFxuICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIHByb3BzKSxcbiAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgcHJvcHMpXG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBvbkV4aXRlZCkge1xuICB2YXIgbmV4dENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyhuZXh0UHJvcHMuY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRyZW4gPSBtZXJnZUNoaWxkTWFwcGluZ3MocHJldkNoaWxkTWFwcGluZywgbmV4dENoaWxkTWFwcGluZyk7XG4gIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltrZXldO1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSByZXR1cm47XG4gICAgdmFyIGhhc1ByZXYgPSAoa2V5IGluIHByZXZDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBoYXNOZXh0ID0gKGtleSBpbiBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgICB2YXIgcHJldkNoaWxkID0gcHJldkNoaWxkTWFwcGluZ1trZXldO1xuICAgIHZhciBpc0xlYXZpbmcgPSBpc1ZhbGlkRWxlbWVudChwcmV2Q2hpbGQpICYmICFwcmV2Q2hpbGQucHJvcHMuaW47IC8vIGl0ZW0gaXMgbmV3IChlbnRlcmluZylcblxuICAgIGlmIChoYXNOZXh0ICYmICghaGFzUHJldiB8fCBpc0xlYXZpbmcpKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnZW50ZXJpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgICAgaW46IHRydWUsXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIWhhc05leHQgJiYgaGFzUHJldiAmJiAhaXNMZWF2aW5nKSB7XG4gICAgICAvLyBpdGVtIGlzIG9sZCAoZXhpdGluZylcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdsZWF2aW5nJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBpbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaGFzTmV4dCAmJiBoYXNQcmV2ICYmIGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkpIHtcbiAgICAgIC8vIGl0ZW0gaGFzbid0IGNoYW5nZWQgdHJhbnNpdGlvbiBzdGF0ZXNcbiAgICAgIC8vIGNvcHkgb3ZlciB0aGUgbGFzdCB0cmFuc2l0aW9uIHByb3BzO1xuICAgICAgLy8gY29uc29sZS5sb2coJ3VuY2hhbmdlZCcsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogcHJldkNoaWxkLnByb3BzLmluLFxuICAgICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIG5leHRQcm9wcyksXG4gICAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBuZXh0UHJvcHMpXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2hpbGRyZW47XG59IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRNYXBwaW5nLCBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nLCBnZXROZXh0Q2hpbGRNYXBwaW5nIH0gZnJvbSAnLi91dGlscy9DaGlsZE1hcHBpbmcnO1xuXG52YXIgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBvYmpba107XG4gIH0pO1xufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY29tcG9uZW50OiAnZGl2JyxcbiAgY2hpbGRGYWN0b3J5OiBmdW5jdGlvbiBjaGlsZEZhY3RvcnkoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cbn07XG4vKipcbiAqIFRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIGNvbXBvbmVudCBtYW5hZ2VzIGEgc2V0IG9mIHRyYW5zaXRpb24gY29tcG9uZW50c1xuICogKGA8VHJhbnNpdGlvbj5gIGFuZCBgPENTU1RyYW5zaXRpb24+YCkgaW4gYSBsaXN0LiBMaWtlIHdpdGggdGhlIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudHMsIGA8VHJhbnNpdGlvbkdyb3VwPmAgaXMgYSBzdGF0ZSBtYWNoaW5lIGZvciBtYW5hZ2luZyB0aGUgbW91bnRpbmdcbiAqIGFuZCB1bm1vdW50aW5nIG9mIGNvbXBvbmVudHMgb3ZlciB0aW1lLlxuICpcbiAqIENvbnNpZGVyIHRoZSBleGFtcGxlIGJlbG93LiBBcyBpdGVtcyBhcmUgcmVtb3ZlZCBvciBhZGRlZCB0byB0aGUgVG9kb0xpc3QgdGhlXG4gKiBgaW5gIHByb3AgaXMgdG9nZ2xlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gLlxuICpcbiAqIE5vdGUgdGhhdCBgPFRyYW5zaXRpb25Hcm91cD5gICBkb2VzIG5vdCBkZWZpbmUgYW55IGFuaW1hdGlvbiBiZWhhdmlvciFcbiAqIEV4YWN0bHkgX2hvd18gYSBsaXN0IGl0ZW0gYW5pbWF0ZXMgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWwgdHJhbnNpdGlvblxuICogY29tcG9uZW50LiBUaGlzIG1lYW5zIHlvdSBjYW4gbWl4IGFuZCBtYXRjaCBhbmltYXRpb25zIGFjcm9zcyBkaWZmZXJlbnQgbGlzdFxuICogaXRlbXMuXG4gKi9cblxudmFyIFRyYW5zaXRpb25Hcm91cCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uR3JvdXAsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb25Hcm91cChwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuXG4gICAgdmFyIGhhbmRsZUV4aXRlZCA9IF90aGlzLmhhbmRsZUV4aXRlZC5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTsgLy8gSW5pdGlhbCBjaGlsZHJlbiBzaG91bGQgYWxsIGJlIGVudGVyaW5nLCBkZXBlbmRlbnQgb24gYXBwZWFyXG5cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IHRydWVcbiAgICAgIH0sXG4gICAgICBoYW5kbGVFeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICAgIGZpcnN0UmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gIH07XG5cbiAgVHJhbnNpdGlvbkdyb3VwLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIF9yZWYpIHtcbiAgICB2YXIgcHJldkNoaWxkTWFwcGluZyA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICAgIGhhbmRsZUV4aXRlZCA9IF9yZWYuaGFuZGxlRXhpdGVkLFxuICAgICAgICBmaXJzdFJlbmRlciA9IF9yZWYuZmlyc3RSZW5kZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuOiBmaXJzdFJlbmRlciA/IGdldEluaXRpYWxDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBoYW5kbGVFeGl0ZWQpIDogZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIGhhbmRsZUV4aXRlZCksXG4gICAgICBmaXJzdFJlbmRlcjogZmFsc2VcbiAgICB9O1xuICB9IC8vIG5vZGUgaXMgYHVuZGVmaW5lZGAgd2hlbiB1c2VyIHByb3ZpZGVkIGBub2RlUmVmYCBwcm9wXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gaGFuZGxlRXhpdGVkKGNoaWxkLCBub2RlKSB7XG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkLmtleSBpbiBjdXJyZW50Q2hpbGRNYXBwaW5nKSByZXR1cm47XG5cbiAgICBpZiAoY2hpbGQucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uRXhpdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IF9leHRlbmRzKHt9LCBzdGF0ZS5jaGlsZHJlbik7XG5cbiAgICAgICAgZGVsZXRlIGNoaWxkcmVuW2NoaWxkLmtleV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBDb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgIGNoaWxkRmFjdG9yeSA9IF90aGlzJHByb3BzLmNoaWxkRmFjdG9yeSxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY29tcG9uZW50XCIsIFwiY2hpbGRGYWN0b3J5XCJdKTtcblxuICAgIHZhciBjb250ZXh0VmFsdWUgPSB0aGlzLnN0YXRlLmNvbnRleHRWYWx1ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2YWx1ZXModGhpcy5zdGF0ZS5jaGlsZHJlbikubWFwKGNoaWxkRmFjdG9yeSk7XG4gICAgZGVsZXRlIHByb3BzLmFwcGVhcjtcbiAgICBkZWxldGUgcHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLmV4aXQ7XG5cbiAgICBpZiAoQ29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uR3JvdXA7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBgPFRyYW5zaXRpb25Hcm91cD5gIHJlbmRlcnMgYSBgPGRpdj5gIGJ5IGRlZmF1bHQuIFlvdSBjYW4gY2hhbmdlIHRoaXNcbiAgICogYmVoYXZpb3IgYnkgcHJvdmlkaW5nIGEgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogSWYgeW91IHVzZSBSZWFjdCB2MTYrIGFuZCB3b3VsZCBsaWtlIHRvIGF2b2lkIGEgd3JhcHBpbmcgYDxkaXY+YCBlbGVtZW50XG4gICAqIHlvdSBjYW4gcGFzcyBpbiBgY29tcG9uZW50PXtudWxsfWAuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB3cmFwcGluZyBkaXZcbiAgICogYm9ya3MgeW91ciBjc3Mgc3R5bGVzLlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBgPFRyYW5zaXRpb24+YCBjb21wb25lbnRzLCB0aGF0IGFyZSB0b2dnbGVkIGBpbmAgYW5kIG91dCBhcyB0aGV5XG4gICAqIGxlYXZlLiB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YCB3aWxsIGluamVjdCBzcGVjaWZpYyB0cmFuc2l0aW9uIHByb3BzLCBzb1xuICAgKiByZW1lbWJlciB0byBzcHJlYWQgdGhlbSB0aHJvdWdoIGlmIHlvdSBhcmUgd3JhcHBpbmcgdGhlIGA8VHJhbnNpdGlvbj5gIGFzXG4gICAqIHdpdGggb3VyIGA8RmFkZT5gIGV4YW1wbGUuXG4gICAqXG4gICAqIFdoaWxlIHRoaXMgY29tcG9uZW50IGlzIG1lYW50IGZvciBtdWx0aXBsZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gXG4gICAqIGNoaWxkcmVuLCBzb21ldGltZXMgeW91IG1heSB3YW50IHRvIGhhdmUgYSBzaW5nbGUgdHJhbnNpdGlvbiBjaGlsZCB3aXRoXG4gICAqIGNvbnRlbnQgdGhhdCB5b3Ugd2FudCB0byBiZSB0cmFuc2l0aW9uZWQgb3V0IGFuZCBpbiB3aGVuIHlvdSBjaGFuZ2UgaXRcbiAgICogKGUuZy4gcm91dGVzLCBpbWFnZXMgZXRjLikgSW4gdGhhdCBjYXNlIHlvdSBjYW4gY2hhbmdlIHRoZSBga2V5YCBwcm9wIG9mXG4gICAqIHRoZSB0cmFuc2l0aW9uIGNoaWxkIGFzIHlvdSBjaGFuZ2UgaXRzIGNvbnRlbnQsIHRoaXMgd2lsbCBjYXVzZVxuICAgKiBgVHJhbnNpdGlvbkdyb3VwYCB0byB0cmFuc2l0aW9uIHRoZSBjaGlsZCBvdXQgYW5kIGJhY2sgaW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYXBwZWFyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50ZXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGV4aXQgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFlvdSBtYXkgbmVlZCB0byBhcHBseSByZWFjdGl2ZSB1cGRhdGVzIHRvIGEgY2hpbGQgYXMgaXQgaXMgZXhpdGluZy5cbiAgICogVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSBieSB1c2luZyBgY2xvbmVFbGVtZW50YCBob3dldmVyIGluIHRoZSBjYXNlIG9mIGFuIGV4aXRpbmdcbiAgICogY2hpbGQgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGFuZCBub3QgYWNjZXNzaWJsZSB0byB0aGUgY29uc3VtZXIuXG4gICAqXG4gICAqIElmIHlvdSBkbyBuZWVkIHRvIHVwZGF0ZSBhIGNoaWxkIGFzIGl0IGxlYXZlcyB5b3UgY2FuIHByb3ZpZGUgYSBgY2hpbGRGYWN0b3J5YFxuICAgKiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlIGxlYXZpbmcuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKGNoaWxkOiBSZWFjdEVsZW1lbnQpIC0+IFJlYWN0RWxlbWVudFxuICAgKi9cbiAgY2hpbGRGYWN0b3J5OiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9O1xuVHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25Hcm91cDsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIENvbXBvbmVudCwgQ2hpbGRyZW4gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmaW5kRE9NTm9kZSwgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBnbGFtIGZyb20gJ2dsYW0nO1xuaW1wb3J0IHJhZlNjaGVkdWxlciBmcm9tICdyYWYtc2NoZCc7XG5pbXBvcnQgeyBWaWV3UGFnZXIsIEZyYW1lLCBUcmFjaywgVmlldyBhcyBWaWV3JDEgfSBmcm9tICdyZWFjdC12aWV3LXBhZ2VyJztcbmltcG9ydCBQYXJzZUh0bWwgZnJvbSAnaHRtbC1yZWFjdC1wYXJzZXInO1xuaW1wb3J0IHsgRm9jdXNPbiB9IGZyb20gJ3JlYWN0LWZvY3VzLW9uJztcbmltcG9ydCB7IEZ1bGxTY3JlZW4gfSBmcm9tICdyZWFjdC1mdWxsLXNjcmVlbic7XG5pbXBvcnQgZm9jdXNTdG9yZSBmcm9tICdhMTF5LWZvY3VzLXN0b3JlJztcbmltcG9ydCB7IFRyYW5zaXRpb24sIFRyYW5zaXRpb25Hcm91cCB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuXG52YXIgY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTtcblxudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG52YXIgaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59O1xuXG52YXIgb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqLCBrZXlzKSB7XG4gIHZhciB0YXJnZXQgPSB7fTtcblxuICBmb3IgKHZhciBpIGluIG9iaikge1xuICAgIGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7XG4gICAgdGFyZ2V0W2ldID0gb2JqW2ldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbnZhciBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuID0gZnVuY3Rpb24gKHNlbGYsIGNhbGwpIHtcbiAgaWYgKCFzZWxmKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG59O1xuXG52YXIgQmFzZSA9IGZ1bmN0aW9uIEJhc2UoX3JlZikge1xuICB2YXIgY3NzID0gX3JlZi5jc3MsXG4gICAgICBpbm5lclJlZiA9IF9yZWYuaW5uZXJSZWYsXG4gICAgICBUYWcgPSBfcmVmLnRhZyxcbiAgICAgIHByb3BzID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydjc3MnLCAnaW5uZXJSZWYnLCAndGFnJ10pO1xuICByZXR1cm4gZ2xhbShUYWcsIF9leHRlbmRzKHtcbiAgICByZWY6IGlubmVyUmVmLFxuICAgIGNzczogX2V4dGVuZHMoe1xuICAgICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCdcbiAgICB9LCBjc3MpXG4gIH0sIHByb3BzKSk7XG59O1xudmFyIEJ1dHRvbiA9IGZ1bmN0aW9uIEJ1dHRvbihwcm9wcykge1xuICByZXR1cm4gZ2xhbShCYXNlLCBfZXh0ZW5kcyh7IHRhZzogJ2J1dHRvbicgfSwgcHJvcHMpKTtcbn07XG52YXIgRGl2ID0gZnVuY3Rpb24gRGl2KHByb3BzKSB7XG4gIHJldHVybiBnbGFtKEJhc2UsIF9leHRlbmRzKHsgdGFnOiAnZGl2JyB9LCBwcm9wcykpO1xufTtcbnZhciBJbWcgPSBmdW5jdGlvbiBJbWcocHJvcHMpIHtcbiAgcmV0dXJuIGdsYW0oQmFzZSwgX2V4dGVuZHMoeyB0YWc6ICdpbWcnIH0sIHByb3BzKSk7XG59O1xudmFyIE5hdiA9IGZ1bmN0aW9uIE5hdihwcm9wcykge1xuICByZXR1cm4gZ2xhbShCYXNlLCBfZXh0ZW5kcyh7IHRhZzogJ25hdicgfSwgcHJvcHMpKTtcbn07XG52YXIgU3BhbiA9IGZ1bmN0aW9uIFNwYW4ocHJvcHMpIHtcbiAgcmV0dXJuIGdsYW0oQmFzZSwgX2V4dGVuZHMoeyB0YWc6ICdzcGFuJyB9LCBwcm9wcykpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDbGFzcyBOYW1lIFByZWZpeGVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIENMQVNTX1BSRUZJWCA9ICdyZWFjdC1pbWFnZXMnO1xuXG4vKipcbiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29tcG9uZW50IHN0YXRlIGZvciBzdHlsaW5nIHdpdGggY2xhc3MgbmFtZXMuXG5cbiBFeHBlY3RzIGFuIGFycmF5IG9mIHN0cmluZ3MgT1IgYSBzdHJpbmcvb2JqZWN0IHBhaXI6XG4gLSBjbGFzc05hbWUoWydjb21wJywgJ2NvbXAtYXJnJywgJ2NvbXAtYXJnLTInXSlcbiAgIEByZXR1cm5zICdyZWFjdC1pbWFnZXNfX2NvbXAgcmVhY3QtaW1hZ2VzX19jb21wLWFyZyByZWFjdC1pbWFnZXNfX2NvbXAtYXJnLTInXG4gLSBjbGFzc05hbWUoJ2NvbXAnLCB7IHNvbWU6IHRydWUsIHN0YXRlOiBmYWxzZSB9KVxuICAgQHJldHVybnMgJ3JlYWN0LWltYWdlc19fY29tcCByZWFjdC1pbWFnZXNfX2NvbXAtLXNvbWUnXG4qL1xuZnVuY3Rpb24gY2xhc3NOYW1lKG5hbWUsIHN0YXRlKSB7XG4gIHZhciBhcnIgPSBBcnJheS5pc0FycmF5KG5hbWUpID8gbmFtZSA6IFtuYW1lXTtcblxuICAvLyBsb29wIHRocm91Z2ggc3RhdGUgb2JqZWN0LCByZW1vdmUgZmFsc2V5IHZhbHVlcyBhbmQgY29tYmluZSB3aXRoIG5hbWVcbiAgaWYgKHN0YXRlICYmIHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGZvciAodmFyIF9rZXkgaW4gc3RhdGUpIHtcbiAgICAgIGlmIChzdGF0ZS5oYXNPd25Qcm9wZXJ0eShfa2V5KSAmJiBzdGF0ZVtfa2V5XSkge1xuICAgICAgICBhcnIucHVzaChuYW1lICsgJy0tJyArIF9rZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHByZWZpeCBldmVyeXRoaW5nIGFuZCByZXR1cm4gYSBzdHJpbmdcbiAgcmV0dXJuIGFyci5tYXAoZnVuY3Rpb24gKGNuKSB7XG4gICAgcmV0dXJuIENMQVNTX1BSRUZJWCArICdfXycgKyBjbjtcbiAgfSkuam9pbignICcpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRvdWNoIENhcGFiaWxpdHkgRGV0ZWN0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBpc1RvdWNoKCkge1xuICB0cnkge1xuICAgIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdUb3VjaEV2ZW50Jyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxudmFyIGNvbnRhaW5lckNTUyA9IGZ1bmN0aW9uIGNvbnRhaW5lckNTUyhfcmVmKSB7XG4gIHZhciBpc0Z1bGxzY3JlZW4gPSBfcmVmLmlzRnVsbHNjcmVlbjtcbiAgcmV0dXJuIHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzRnVsbHNjcmVlbiA/ICdibGFjaycgOiBudWxsLFxuICAgIGRpc3BsYXk6ICdmbGV4ICcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgaGVpZ2h0OiAnMTAwJSdcbiAgfTtcbn07XG5cbnZhciBDb250YWluZXIgPSBmdW5jdGlvbiBDb250YWluZXIocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBpc0Z1bGxzY3JlZW4gPSBwcm9wcy5pc0Z1bGxzY3JlZW4sXG4gICAgICBpc01vZGFsID0gcHJvcHMuaXNNb2RhbCxcbiAgICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuXG4gIHJldHVybiBnbGFtKFxuICAgIERpdixcbiAgICBfZXh0ZW5kcyh7IGNzczogZ2V0U3R5bGVzKCdjb250YWluZXInLCBwcm9wcyksIGNsYXNzTmFtZTogY2xhc3NOYW1lKCdjb250YWluZXInLCB7IGlzRnVsbHNjcmVlbjogaXNGdWxsc2NyZWVuLCBpc01vZGFsOiBpc01vZGFsIH0pIH0sIGlubmVyUHJvcHMpLFxuICAgIGNoaWxkcmVuXG4gICk7XG59O1xuXG52YXIgc21hbGxEZXZpY2UgPSAnQG1lZGlhIChtYXgtd2lkdGg6IDc2OXB4KSc7XG5cbi8qKlxuICogVXNlZCB0byBnZXQgdGhlIEhUTUwgY2xhc3MgdG8gc2VsZWN0IHNwZWNpZmljIGNvbXBvbmVudHMuXG4gKiBXZSBjYWxsIGBjbGFzc05hbWUoKWAgaW4gdXRpbHMgd2l0aCBlYWNoIG9mIHRoZXNlIHRvIGdldCB0aGUgZnVsbCBjbGFzc05hbWUsXG4gKiB3aXRoIHByZWZpeGVzLlxuICovXG52YXIgY29tcG9uZW50QmFzZUNsYXNzTmFtZXMgPSB7XG4gIEhlYWRlcjogJ2hlYWRlcicsXG4gIEZvb3RlcjogJ2Zvb3RlcicsXG4gIFZpZXc6ICd2aWV3JyxcbiAgVHJhY2s6ICd0cmFjaycsXG4gIFBvc2l0aW9uZXI6ICdwb3NpdGlvbmVyJ1xufTtcblxudmFyIGZvb3RlckNTUyA9IGZ1bmN0aW9uIGZvb3RlckNTUyhfcmVmKSB7XG4gIHZhciBpc01vZGFsID0gX3JlZi5pc01vZGFsLFxuICAgICAgaW50ZXJhY3Rpb25Jc0lkbGUgPSBfcmVmLmludGVyYWN0aW9uSXNJZGxlO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoe1xuICAgIGFsaWduSXRlbXM6ICd0b3AnLFxuICAgIGJvdHRvbTogaXNNb2RhbCA/IDAgOiBudWxsLFxuICAgIGNvbG9yOiBpc01vZGFsID8gJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC45KScgOiAnIzY2NicsXG4gICAgZGlzcGxheTogJ2ZsZXggJyxcbiAgICBmbGV4OiAnMCAwIGF1dG8nLFxuICAgIGZvbnRTaXplOiAxMyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIGxlZnQ6IGlzTW9kYWwgPyAwIDogbnVsbCxcbiAgICBvcGFjaXR5OiBpbnRlcmFjdGlvbklzSWRsZSAmJiBpc01vZGFsID8gMCA6IDEsXG4gICAgcGFkZGluZzogaXNNb2RhbCA/ICczMHB4IDIwcHggMjBweCcgOiAnMTBweCAwJyxcbiAgICBwb3NpdGlvbjogaXNNb2RhbCA/ICdhYnNvbHV0ZScgOiBudWxsLFxuICAgIHJpZ2h0OiBpc01vZGFsID8gMCA6IG51bGwsXG4gICAgdHJhbnNmb3JtOiBpc01vZGFsID8gJ3RyYW5zbGF0ZVkoJyArIChpbnRlcmFjdGlvbklzSWRsZSA/IDEwIDogMCkgKyAncHgpJyA6IG51bGwsXG4gICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMzAwbXMsIHRyYW5zZm9ybSAzMDBtcycsXG4gICAgekluZGV4OiBpc01vZGFsID8gMSA6IG51bGwsXG5cbiAgICAnJiAqOmZvY3VzJzoge1xuICAgICAgb3V0bGluZTogJzEuNXB4IHNvbGlkIG9yYW5nZSdcbiAgICB9XG5cbiAgfSwgc21hbGxEZXZpY2UsIHtcbiAgICBwYWRkaW5nOiBpc01vZGFsID8gJzIwcHggMTVweCAxNXB4JyA6ICc1cHggMCdcbiAgfSk7XG59O1xuXG52YXIgZm9vdGVyQmFzZUNsYXNzTmFtZSA9IGNvbXBvbmVudEJhc2VDbGFzc05hbWVzLkZvb3RlcjtcblxudmFyIEZvb3RlciA9IGZ1bmN0aW9uIEZvb3Rlcihwcm9wcykge1xuICB2YXIgY29tcG9uZW50cyA9IHByb3BzLmNvbXBvbmVudHMsXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICAgIGlzRnVsbHNjcmVlbiA9IHByb3BzLmlzRnVsbHNjcmVlbixcbiAgICAgIGlzTW9kYWwgPSBwcm9wcy5pc01vZGFsO1xuXG5cbiAgdmFyIHN0eWxlID0gaXNNb2RhbCA/IHsgYmFja2dyb3VuZDogJ2xpbmVhci1ncmFkaWVudChyZ2JhKDAsMCwwLDApLCByZ2JhKDAsMCwwLDAuMzMpKScgfSA6IG51bGw7XG5cbiAgdmFyIHN0YXRlID0geyBpc0Z1bGxzY3JlZW46IGlzRnVsbHNjcmVlbiwgaXNNb2RhbDogaXNNb2RhbCB9O1xuICB2YXIgY24gPSB7XG4gICAgY29udGFpbmVyOiBjbGFzc05hbWUoZm9vdGVyQmFzZUNsYXNzTmFtZSwgc3RhdGUpLFxuICAgIGNhcHRpb246IGNsYXNzTmFtZSgnZm9vdGVyX19jYXB0aW9uJywgc3RhdGUpLFxuICAgIGNvdW50OiBjbGFzc05hbWUoJ2Zvb3Rlcl9fY291bnQnLCBzdGF0ZSlcbiAgfTtcbiAgdmFyIGNzcyA9IHtcbiAgICBjb250YWluZXI6IGdldFN0eWxlcyhmb290ZXJCYXNlQ2xhc3NOYW1lLCBwcm9wcyksXG4gICAgY2FwdGlvbjogZ2V0U3R5bGVzKCdmb290ZXJDYXB0aW9uJywgcHJvcHMpLFxuICAgIGNvdW50OiBnZXRTdHlsZXMoJ2Zvb3RlckNvdW50JywgcHJvcHMpXG4gIH07XG4gIHZhciBDYXB0aW9uID0gY29tcG9uZW50cy5DYXB0aW9uLFxuICAgICAgQ291bnQgPSBjb21wb25lbnRzLkNvdW50O1xuXG5cbiAgcmV0dXJuIGdsYW0oXG4gICAgRGl2LFxuICAgIF9leHRlbmRzKHtcbiAgICAgIGNzczogY3NzLmNvbnRhaW5lcixcbiAgICAgIGNsYXNzTmFtZTogY24uY29udGFpbmVyXG4gICAgICAvLyBUT0RPIGdsYW0gcHJlZml4ZXIgZmFpbHMgb24gZ3JhZGllbnRzXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGhyZWVwb2ludG9uZS9nbGFtL2lzc3Vlcy8zNVxuICAgICAgLCBzdHlsZTogc3R5bGVcbiAgICB9LCBpbm5lclByb3BzKSxcbiAgICBnbGFtKENhcHRpb24sIHByb3BzKSxcbiAgICBnbGFtKENvdW50LCBwcm9wcylcbiAgKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSW5uZXIgRWxlbWVudHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgZm9vdGVyQ2FwdGlvbkNTUyA9IGZ1bmN0aW9uIGZvb3RlckNhcHRpb25DU1MoKSB7XG4gIHJldHVybiB7fTtcbn07XG5cbnZhciBGb290ZXJDYXB0aW9uID0gZnVuY3Rpb24gRm9vdGVyQ2FwdGlvbihwcm9wcykge1xuICB2YXIgY3VycmVudFZpZXcgPSBwcm9wcy5jdXJyZW50VmlldyxcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIGlzRnVsbHNjcmVlbiA9IHByb3BzLmlzRnVsbHNjcmVlbixcbiAgICAgIGlzTW9kYWwgPSBwcm9wcy5pc01vZGFsO1xuICB2YXIgY2FwdGlvbiA9IGN1cnJlbnRWaWV3LmNhcHRpb247XG5cbiAgdmFyIHN0YXRlID0geyBpc0Z1bGxzY3JlZW46IGlzRnVsbHNjcmVlbiwgaXNNb2RhbDogaXNNb2RhbCB9O1xuXG4gIHJldHVybiBnbGFtKFxuICAgIFNwYW4sXG4gICAgeyBjc3M6IGdldFN0eWxlcygnZm9vdGVyQ2FwdGlvbicsIHByb3BzKSwgY2xhc3NOYW1lOiBjbGFzc05hbWUoJ2Zvb3Rlcl9fY2FwdGlvbicsIHN0YXRlKSB9LFxuICAgIHR5cGVvZiBjYXB0aW9uID09PSAnc3RyaW5nJyA/IFBhcnNlSHRtbCgnPHNwYW4+JyArIGNhcHRpb24gKyAnPC9zcGFuPicpIDogY2FwdGlvblxuICApO1xufTtcblxudmFyIGZvb3RlckNvdW50Q1NTID0gZnVuY3Rpb24gZm9vdGVyQ291bnRDU1MoKSB7XG4gIHJldHVybiB7IGZsZXhTaHJpbms6IDAsIG1hcmdpbkxlZnQ6ICcxZW0nIH07XG59O1xuXG52YXIgRm9vdGVyQ291bnQgPSBmdW5jdGlvbiBGb290ZXJDb3VudChwcm9wcykge1xuICB2YXIgY3VycmVudEluZGV4ID0gcHJvcHMuY3VycmVudEluZGV4LFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgaXNGdWxsc2NyZWVuID0gcHJvcHMuaXNGdWxsc2NyZWVuLFxuICAgICAgaXNNb2RhbCA9IHByb3BzLmlzTW9kYWwsXG4gICAgICB2aWV3cyA9IHByb3BzLnZpZXdzO1xuXG4gIHZhciBzdGF0ZSA9IHsgaXNGdWxsc2NyZWVuOiBpc0Z1bGxzY3JlZW4sIGlzTW9kYWw6IGlzTW9kYWwgfTtcbiAgdmFyIGFjdGl2ZVZpZXcgPSBjdXJyZW50SW5kZXggKyAxO1xuICB2YXIgdG90YWxWaWV3cyA9IHZpZXdzLmxlbmd0aDtcblxuICBpZiAoIWFjdGl2ZVZpZXcgfHwgIXRvdGFsVmlld3MpIHJldHVybiBudWxsO1xuXG4gIHJldHVybiBnbGFtKFxuICAgIFNwYW4sXG4gICAgeyBjc3M6IGdldFN0eWxlcygnZm9vdGVyQ291bnQnLCBwcm9wcyksIGNsYXNzTmFtZTogY2xhc3NOYW1lKCdmb290ZXJfX2NvdW50Jywgc3RhdGUpIH0sXG4gICAgYWN0aXZlVmlldyxcbiAgICAnIG9mICcsXG4gICAgdG90YWxWaWV3c1xuICApO1xufTtcblxudmFyIFN2ZyA9IGZ1bmN0aW9uIFN2ZyhfcmVmKSB7XG4gIHZhciBzaXplID0gX3JlZi5zaXplLFxuICAgICAgcHJvcHMgPSBvYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ3NpemUnXSk7XG4gIHJldHVybiBnbGFtKCdzdmcnLCBfZXh0ZW5kcyh7XG4gICAgcm9sZTogJ3ByZXNlbnRhdGlvbicsXG4gICAgdmlld0JveDogJzAgMCAyNCAyNCcsXG4gICAgY3NzOiB7XG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAgICAgaGVpZ2h0OiBzaXplLFxuICAgICAgc3Ryb2tlOiAnY3VycmVudENvbG9yJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAwLFxuICAgICAgd2lkdGg6IHNpemVcbiAgICB9XG4gIH0sIHByb3BzKSk7XG59O1xuXG52YXIgQ2hldnJvbkxlZnQgPSBmdW5jdGlvbiBDaGV2cm9uTGVmdChfcmVmMikge1xuICB2YXIgX3JlZjIkc2l6ZSA9IF9yZWYyLnNpemUsXG4gICAgICBzaXplID0gX3JlZjIkc2l6ZSA9PT0gdW5kZWZpbmVkID8gMzIgOiBfcmVmMiRzaXplLFxuICAgICAgcHJvcHMgPSBvYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgWydzaXplJ10pO1xuICByZXR1cm4gZ2xhbShcbiAgICBTdmcsXG4gICAgX2V4dGVuZHMoeyBzaXplOiBzaXplIH0sIHByb3BzKSxcbiAgICBnbGFtKCdwYXRoJywgeyBkOiAnTTE1LjQyMiAxNi4wNzhsLTEuNDA2IDEuNDA2LTYtNiA2LTYgMS40MDYgMS40MDYtNC41OTQgNC41OTR6JyB9KVxuICApO1xufTtcbnZhciBDaGV2cm9uUmlnaHQgPSBmdW5jdGlvbiBDaGV2cm9uUmlnaHQoX3JlZjMpIHtcbiAgdmFyIF9yZWYzJHNpemUgPSBfcmVmMy5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYzJHNpemUgPT09IHVuZGVmaW5lZCA/IDMyIDogX3JlZjMkc2l6ZSxcbiAgICAgIHByb3BzID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIFsnc2l6ZSddKTtcbiAgcmV0dXJuIGdsYW0oXG4gICAgU3ZnLFxuICAgIF9leHRlbmRzKHsgc2l6ZTogc2l6ZSB9LCBwcm9wcyksXG4gICAgZ2xhbSgncGF0aCcsIHsgZDogJ005Ljk4NCA2bDYgNi02IDYtMS40MDYtMS40MDYgNC41OTQtNC41OTQtNC41OTQtNC41OTR6JyB9KVxuICApO1xufTtcbnZhciBDbG9zZSA9IGZ1bmN0aW9uIENsb3NlKF9yZWY0KSB7XG4gIHZhciBfcmVmNCRzaXplID0gX3JlZjQuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmNCRzaXplID09PSB1bmRlZmluZWQgPyAzMiA6IF9yZWY0JHNpemUsXG4gICAgICBwcm9wcyA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY0LCBbJ3NpemUnXSk7XG4gIHJldHVybiBnbGFtKFxuICAgIFN2ZyxcbiAgICBfZXh0ZW5kcyh7IHNpemU6IHNpemUgfSwgcHJvcHMpLFxuICAgIGdsYW0oJ3BhdGgnLCB7IGQ6ICdNMTguOTg0IDYuNDIybC01LjU3OCA1LjU3OCA1LjU3OCA1LjU3OC0xLjQwNiAxLjQwNi01LjU3OC01LjU3OC01LjU3OCA1LjU3OC0xLjQwNi0xLjQwNiA1LjU3OC01LjU3OC01LjU3OC01LjU3OCAxLjQwNi0xLjQwNiA1LjU3OCA1LjU3OCA1LjU3OC01LjU3OHonIH0pXG4gICk7XG59O1xudmFyIEZ1bGxzY3JlZW5FbnRlciA9IGZ1bmN0aW9uIEZ1bGxzY3JlZW5FbnRlcihfcmVmNSkge1xuICB2YXIgX3JlZjUkc2l6ZSA9IF9yZWY1LnNpemUsXG4gICAgICBzaXplID0gX3JlZjUkc2l6ZSA9PT0gdW5kZWZpbmVkID8gMzIgOiBfcmVmNSRzaXplLFxuICAgICAgcHJvcHMgPSBvYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmNSwgWydzaXplJ10pO1xuICByZXR1cm4gZ2xhbShcbiAgICBTdmcsXG4gICAgX2V4dGVuZHMoeyBzaXplOiBzaXplIH0sIHByb3BzKSxcbiAgICBnbGFtKCdwYXRoJywgeyBkOiAnTTE0LjAxNiA1LjAxNmg0Ljk2OXY0Ljk2OWgtMS45Njl2LTNoLTN2LTEuOTY5ek0xNy4wMTYgMTcuMDE2di0zaDEuOTY5djQuOTY5aC00Ljk2OXYtMS45NjloM3pNNS4wMTYgOS45ODR2LTQuOTY5aDQuOTY5djEuOTY5aC0zdjNoLTEuOTY5ek02Ljk4NCAxNC4wMTZ2M2gzdjEuOTY5aC00Ljk2OXYtNC45NjloMS45Njl6JyB9KVxuICApO1xufTtcbnZhciBGdWxsc2NyZWVuRXhpdCA9IGZ1bmN0aW9uIEZ1bGxzY3JlZW5FeGl0KF9yZWY2KSB7XG4gIHZhciBfcmVmNiRzaXplID0gX3JlZjYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmNiRzaXplID09PSB1bmRlZmluZWQgPyAzMiA6IF9yZWY2JHNpemUsXG4gICAgICBwcm9wcyA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY2LCBbJ3NpemUnXSk7XG4gIHJldHVybiBnbGFtKFxuICAgIFN2ZyxcbiAgICBfZXh0ZW5kcyh7IHNpemU6IHNpemUgfSwgcHJvcHMpLFxuICAgIGdsYW0oJ3BhdGgnLCB7IGQ6ICdNMTUuOTg0IDguMDE2aDN2MS45NjloLTQuOTY5di00Ljk2OWgxLjk2OXYzek0xNC4wMTYgMTguOTg0di00Ljk2OWg0Ljk2OXYxLjk2OWgtM3YzaC0xLjk2OXpNOC4wMTYgOC4wMTZ2LTNoMS45Njl2NC45NjloLTQuOTY5di0xLjk2OWgzek01LjAxNiAxNS45ODR2LTEuOTY5aDQuOTY5djQuOTY5aC0xLjk2OXYtM2gtM3onIH0pXG4gICk7XG59O1xuXG52YXIgaGVhZGVyQ1NTID0gZnVuY3Rpb24gaGVhZGVyQ1NTKF9yZWYpIHtcbiAgdmFyIGludGVyYWN0aW9uSXNJZGxlID0gX3JlZi5pbnRlcmFjdGlvbklzSWRsZTtcbiAgcmV0dXJuIHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBkaXNwbGF5OiAnZmxleCAnLFxuICAgIGZsZXg6ICcwIDAgYXV0bycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBvcGFjaXR5OiBpbnRlcmFjdGlvbklzSWRsZSA/IDAgOiAxLFxuICAgIHBhZGRpbmc6IDEwLFxuICAgIHBhZGRpbmdCb3R0b206IDIwLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoJyArIChpbnRlcmFjdGlvbklzSWRsZSA/IC0xMCA6IDApICsgJ3B4KScsXG4gICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMzAwbXMsIHRyYW5zZm9ybSAzMDBtcycsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgekluZGV4OiAxLFxuICAgICcmICo6Zm9jdXMnOiB7XG4gICAgICBvdXRsaW5lOiAnMS41cHggc29saWQgb3JhbmdlJ1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBoZWFkZXJCYXNlQ2xhc3NOYW1lID0gY29tcG9uZW50QmFzZUNsYXNzTmFtZXMuSGVhZGVyO1xuXG52YXIgSGVhZGVyID0gZnVuY3Rpb24gSGVhZGVyKHByb3BzKSB7XG4gIHZhciBjb21wb25lbnRzID0gcHJvcHMuY29tcG9uZW50cyxcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIGdldENsb3NlTGFiZWwgPSBwcm9wcy5nZXRDbG9zZUxhYmVsLFxuICAgICAgZ2V0RnVsbHNjcmVlbkxhYmVsID0gcHJvcHMuZ2V0RnVsbHNjcmVlbkxhYmVsLFxuICAgICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgICBpc01vZGFsID0gcHJvcHMuaXNNb2RhbCxcbiAgICAgIG1vZGFsUHJvcHMgPSBwcm9wcy5tb2RhbFByb3BzO1xuXG5cbiAgaWYgKCFpc01vZGFsKSByZXR1cm4gbnVsbDtcblxuICB2YXIgYWxsb3dGdWxsc2NyZWVuID0gbW9kYWxQcm9wcy5hbGxvd0Z1bGxzY3JlZW4sXG4gICAgICBpc0Z1bGxzY3JlZW4gPSBtb2RhbFByb3BzLmlzRnVsbHNjcmVlbixcbiAgICAgIG9uQ2xvc2UgPSBtb2RhbFByb3BzLm9uQ2xvc2UsXG4gICAgICB0b2dnbGVGdWxsc2NyZWVuID0gbW9kYWxQcm9wcy50b2dnbGVGdWxsc2NyZWVuO1xuXG4gIHZhciBGc0ljb24gPSBpc0Z1bGxzY3JlZW4gPyBGdWxsc2NyZWVuRXhpdCA6IEZ1bGxzY3JlZW5FbnRlcjtcbiAgdmFyIENsb3NlQnV0dG9uID0gY29tcG9uZW50cy5DbG9zZUJ1dHRvbixcbiAgICAgIEZ1bGxzY3JlZW5CdXR0b24gPSBjb21wb25lbnRzLkZ1bGxzY3JlZW5CdXR0b247XG5cbiAgdmFyIHN0YXRlID0geyBpc0Z1bGxzY3JlZW46IGlzRnVsbHNjcmVlbiwgaXNNb2RhbDogaXNNb2RhbCB9O1xuXG4gIHJldHVybiBnbGFtKFxuICAgIERpdixcbiAgICBfZXh0ZW5kcyh7XG4gICAgICBjc3M6IGdldFN0eWxlcyhoZWFkZXJCYXNlQ2xhc3NOYW1lLCBwcm9wcyksXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZShoZWFkZXJCYXNlQ2xhc3NOYW1lLCBzdGF0ZSlcbiAgICAgIC8vIFRPRE8gZ2xhbSBwcmVmaXhlciBmYWlscyBvbiBncmFkaWVudHNcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90aHJlZXBvaW50b25lL2dsYW0vaXNzdWVzLzM1XG4gICAgICAsIHN0eWxlOiB7XG4gICAgICAgIGJhY2tncm91bmQ6ICdsaW5lYXItZ3JhZGllbnQocmdiYSgwLDAsMCwwLjMzKSwgcmdiYSgwLDAsMCwwKSknXG4gICAgICB9XG4gICAgfSwgaW5uZXJQcm9wcyksXG4gICAgZ2xhbSgnc3BhbicsIG51bGwpLFxuICAgIGdsYW0oXG4gICAgICAnc3BhbicsXG4gICAgICBudWxsLFxuICAgICAgYWxsb3dGdWxsc2NyZWVuID8gZ2xhbShcbiAgICAgICAgRnVsbHNjcmVlbkJ1dHRvbixcbiAgICAgICAge1xuICAgICAgICAgIGdldFN0eWxlczogZ2V0U3R5bGVzLFxuICAgICAgICAgIGlubmVyUHJvcHM6IHtcbiAgICAgICAgICAgIG9uQ2xpY2s6IHRvZ2dsZUZ1bGxzY3JlZW4sXG4gICAgICAgICAgICB0aXRsZTogZ2V0RnVsbHNjcmVlbkxhYmVsKHN0YXRlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2xhbShGc0ljb24sIHsgc2l6ZTogMzIgfSlcbiAgICAgICkgOiBudWxsLFxuICAgICAgZ2xhbShcbiAgICAgICAgQ2xvc2VCdXR0b24sXG4gICAgICAgIHtcbiAgICAgICAgICBnZXRTdHlsZXM6IGdldFN0eWxlcyxcbiAgICAgICAgICBpbm5lclByb3BzOiB7XG4gICAgICAgICAgICBvbkNsaWNrOiBvbkNsb3NlLFxuICAgICAgICAgICAgdGl0bGU6IGdldENsb3NlTGFiZWwoc3RhdGUpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnbGFtKENsb3NlLCB7IHNpemU6IDMyIH0pXG4gICAgICApXG4gICAgKVxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIZWFkZXIgQnV0dG9uc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBoZWFkZXJCdXR0b25DU1MgPSBmdW5jdGlvbiBoZWFkZXJCdXR0b25DU1MoKSB7XG4gIHJldHVybiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZDogMCxcbiAgICBib3JkZXI6IDAsXG4gICAgY29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWZsZXggJyxcbiAgICBoZWlnaHQ6IDQ0LFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBvdXRsaW5lOiAwLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgd2lkdGg6IDQ0LFxuXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBjb2xvcjogJ3doaXRlJ1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBoZWFkZXJGdWxsc2NyZWVuQ1NTID0gaGVhZGVyQnV0dG9uQ1NTO1xudmFyIEhlYWRlckZ1bGxzY3JlZW4gPSBmdW5jdGlvbiBIZWFkZXJGdWxsc2NyZWVuKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG5cblxuICByZXR1cm4gZ2xhbShcbiAgICBCdXR0b24sXG4gICAgX2V4dGVuZHMoeyBjc3M6IGdldFN0eWxlcygnaGVhZGVyRnVsbHNjcmVlbicsIHByb3BzKSwgY2xhc3NOYW1lOiBjbGFzc05hbWUoWydoZWFkZXJfYnV0dG9uJywgJ2hlYWRlcl9idXR0b24tLWZ1bGxzY3JlZW4nXSksIHR5cGU6ICdidXR0b24nIH0sIGlubmVyUHJvcHMpLFxuICAgIGNoaWxkcmVuXG4gICk7XG59O1xuXG52YXIgaGVhZGVyQ2xvc2VDU1MgPSBoZWFkZXJCdXR0b25DU1M7XG52YXIgSGVhZGVyQ2xvc2UgPSBmdW5jdGlvbiBIZWFkZXJDbG9zZShwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuXG5cbiAgcmV0dXJuIGdsYW0oXG4gICAgQnV0dG9uLFxuICAgIF9leHRlbmRzKHsgY3NzOiBnZXRTdHlsZXMoJ2hlYWRlckNsb3NlJywgcHJvcHMpLCBjbGFzc05hbWU6IGNsYXNzTmFtZShbJ2hlYWRlcl9idXR0b24nLCAnaGVhZGVyX2J1dHRvbi0tY2xvc2UnXSksIHR5cGU6ICdidXR0b24nIH0sIGlubmVyUHJvcHMpLFxuICAgIGNoaWxkcmVuXG4gICk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE5hdmlnYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbmF2aWdhdGlvbkNTUyA9IGZ1bmN0aW9uIG5hdmlnYXRpb25DU1MoX3JlZikge1xuICB2YXIgaW50ZXJhY3Rpb25Jc0lkbGUgPSBfcmVmLmludGVyYWN0aW9uSXNJZGxlO1xuICByZXR1cm4ge1xuICAgIGRpc3BsYXk6ICdmbGV4ICcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBvcGFjaXR5OiBpbnRlcmFjdGlvbklzSWRsZSA/IDAgOiAxLFxuICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDMwMG1zJyxcbiAgICAnJiAqOmZvY3VzJzoge1xuICAgICAgb3V0bGluZTogJzEuNXB4IHNvbGlkIG9yYW5nZSdcbiAgICB9XG4gIH07XG59O1xuXG52YXIgTmF2aWdhdGlvbiA9IGZ1bmN0aW9uIE5hdmlnYXRpb24ocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBpc0Z1bGxzY3JlZW4gPSBwcm9wcy5pc0Z1bGxzY3JlZW4sXG4gICAgICBpc01vZGFsID0gcHJvcHMuaXNNb2RhbCxcbiAgICAgIHNob3dOYXZpZ2F0aW9uT25Ub3VjaERldmljZSA9IHByb3BzLnNob3dOYXZpZ2F0aW9uT25Ub3VjaERldmljZTtcblxuICByZXR1cm4gIWlzVG91Y2goKSB8fCBpc1RvdWNoKCkgJiYgc2hvd05hdmlnYXRpb25PblRvdWNoRGV2aWNlID8gZ2xhbShcbiAgICBOYXYsXG4gICAgeyBjc3M6IGdldFN0eWxlcygnbmF2aWdhdGlvbicsIHByb3BzKSwgY2xhc3NOYW1lOiBjbGFzc05hbWUoJ25hdmlnYXRpb24nLCB7IGlzRnVsbHNjcmVlbjogaXNGdWxsc2NyZWVuLCBpc01vZGFsOiBpc01vZGFsIH0pIH0sXG4gICAgY2hpbGRyZW5cbiAgKSA6IG51bGw7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE5hdiBJdGVtXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIEJVVFRPTl9TSVpFID0gNTA7XG5cbnZhciBuYXZpZ2F0aW9uSXRlbUNTUyA9IGZ1bmN0aW9uIG5hdmlnYXRpb25JdGVtQ1NTKF9yZWYyKSB7XG4gIHZhciBfcmVmMztcblxuICB2YXIgYWxpZ24gPSBfcmVmMi5hbGlnbjtcbiAgcmV0dXJuIF9yZWYzID0ge1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGJhY2tncm91bmQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiknLFxuICAgIGJvcmRlcjogMCxcbiAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgIGNvbG9yOiAnd2hpdGUnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGRpc3BsYXk6ICdmbGV4ICcsXG4gICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICBoZWlnaHQ6IEJVVFRPTl9TSVpFLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBtYXJnaW5Ub3A6IC0oQlVUVE9OX1NJWkUgLyAyKSxcbiAgICBvdXRsaW5lOiAwLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogJzUwJScsXG4gICAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQtY29sb3IgMjAwbXMnLFxuICAgIHdpZHRoOiBCVVRUT05fU0laRVxuICB9LCBkZWZpbmVQcm9wZXJ0eShfcmVmMywgYWxpZ24sIDIwKSwgZGVmaW5lUHJvcGVydHkoX3JlZjMsICcmOmhvdmVyJywge1xuICAgIGJhY2tncm91bmQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyknXG4gIH0pLCBkZWZpbmVQcm9wZXJ0eShfcmVmMywgJyY6YWN0aXZlJywge1xuICAgIGJhY2tncm91bmQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiknXG4gIH0pLCBfcmVmMztcbn07XG5cbnZhciBuYXZpZ2F0aW9uUHJldkNTUyA9IG5hdmlnYXRpb25JdGVtQ1NTO1xudmFyIE5hdmlnYXRpb25QcmV2ID0gZnVuY3Rpb24gTmF2aWdhdGlvblByZXYocHJvcHMpIHtcbiAgdmFyIF9wcm9wcyRjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgY2hpbGRyZW4gPSBfcHJvcHMkY2hpbGRyZW4gPT09IHVuZGVmaW5lZCA/IGdsYW0oQ2hldnJvbkxlZnQsIHsgc2l6ZTogNDggfSkgOiBfcHJvcHMkY2hpbGRyZW4sXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcblxuXG4gIHJldHVybiBnbGFtKFxuICAgIEJ1dHRvbixcbiAgICBfZXh0ZW5kcyh7IHR5cGU6ICdidXR0b24nLCBjc3M6IGdldFN0eWxlcygnbmF2aWdhdGlvblByZXYnLCBwcm9wcykgfSwgaW5uZXJQcm9wcyksXG4gICAgY2hpbGRyZW5cbiAgKTtcbn07XG5cbnZhciBuYXZpZ2F0aW9uTmV4dENTUyA9IG5hdmlnYXRpb25JdGVtQ1NTO1xudmFyIE5hdmlnYXRpb25OZXh0ID0gZnVuY3Rpb24gTmF2aWdhdGlvbk5leHQocHJvcHMpIHtcbiAgdmFyIF9wcm9wcyRjaGlsZHJlbjIgPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGNoaWxkcmVuID0gX3Byb3BzJGNoaWxkcmVuMiA9PT0gdW5kZWZpbmVkID8gZ2xhbShDaGV2cm9uUmlnaHQsIHsgc2l6ZTogNDggfSkgOiBfcHJvcHMkY2hpbGRyZW4yLFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG5cblxuICByZXR1cm4gZ2xhbShcbiAgICBCdXR0b24sXG4gICAgX2V4dGVuZHMoeyB0eXBlOiAnYnV0dG9uJywgY3NzOiBnZXRTdHlsZXMoJ25hdmlnYXRpb25OZXh0JywgcHJvcHMpIH0sIGlubmVyUHJvcHMpLFxuICAgIGNoaWxkcmVuXG4gICk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJsYW5rZXRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgYmxhbmtldENTUyA9IGZ1bmN0aW9uIGJsYW5rZXRDU1MoX3JlZikge1xuICB2YXIgaXNGdWxsc2NyZWVuID0gX3JlZi5pc0Z1bGxzY3JlZW47XG4gIHJldHVybiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBpc0Z1bGxzY3JlZW4gPyAnYmxhY2snIDogJ3JnYmEoMCwgMCwgMCwgMC44KScsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgcmlnaHQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHpJbmRleDogMTE5OVxuICB9O1xufTtcblxudmFyIEJsYW5rZXQgPSBmdW5jdGlvbiBCbGFua2V0KHByb3BzKSB7XG4gIHZhciBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICAgIGlzRnVsbHNjcmVlbiA9IHByb3BzLmlzRnVsbHNjcmVlbjtcblxuICByZXR1cm4gZ2xhbShEaXYsIF9leHRlbmRzKHsgY3NzOiBnZXRTdHlsZXMoJ2JsYW5rZXQnLCBwcm9wcyksIGNsYXNzTmFtZTogY2xhc3NOYW1lKCdibGFua2V0JywgeyBpc0Z1bGxzY3JlZW46IGlzRnVsbHNjcmVlbiB9KSB9LCBpbm5lclByb3BzKSk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFBvc2l0aW9uZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgcG9zaXRpb25lckNTUyA9IGZ1bmN0aW9uIHBvc2l0aW9uZXJDU1MoKSB7XG4gIHJldHVybiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYm90dG9tOiAwLFxuICAgIGRpc3BsYXk6ICdmbGV4ICcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGxlZnQ6IDAsXG4gICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgcmlnaHQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHpJbmRleDogMTIwMFxuICB9O1xufTtcblxudmFyIFBvc2l0aW9uZXIgPSBmdW5jdGlvbiBQb3NpdGlvbmVyKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgICBpc0Z1bGxzY3JlZW4gPSBwcm9wcy5pc0Z1bGxzY3JlZW47XG5cbiAgcmV0dXJuIGdsYW0oXG4gICAgRGl2LFxuICAgIF9leHRlbmRzKHsgY3NzOiBnZXRTdHlsZXMoY29tcG9uZW50QmFzZUNsYXNzTmFtZXMuUG9zaXRpb25lciwgcHJvcHMpLCBjbGFzc05hbWU6IGNsYXNzTmFtZShjb21wb25lbnRCYXNlQ2xhc3NOYW1lcy5Qb3NpdGlvbmVyLCB7IGlzRnVsbHNjcmVlbjogaXNGdWxsc2NyZWVuIH0pIH0sIGlubmVyUHJvcHMpLFxuICAgIGNoaWxkcmVuXG4gICk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERpYWxvZ1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBkaWFsb2dDU1MgPSBmdW5jdGlvbiBkaWFsb2dDU1MoKSB7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6ICcxMDAlJ1xuICB9O1xufTtcblxudmFyIERpYWxvZyA9IGZ1bmN0aW9uIERpYWxvZyhwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzLFxuICAgICAgaXNGdWxsc2NyZWVuID0gcHJvcHMuaXNGdWxsc2NyZWVuLFxuICAgICAgcmVtb3ZlRm9jdXNPbiA9IHByb3BzLnJlbW92ZUZvY3VzT247XG5cblxuICByZXR1cm4gcmVtb3ZlRm9jdXNPbiA/IGdsYW0oXG4gICAgRGl2LFxuICAgIF9leHRlbmRzKHsgY3NzOiBnZXRTdHlsZXMoJ2RpYWxvZycsIHByb3BzKSwgY2xhc3NOYW1lOiBjbGFzc05hbWUoJ2RpYWxvZycsIHsgaXNGdWxsc2NyZWVuOiBpc0Z1bGxzY3JlZW4gfSkgfSwgaW5uZXJQcm9wcyksXG4gICAgY2hpbGRyZW5cbiAgKSA6IGdsYW0oXG4gICAgRm9jdXNPbixcbiAgICBudWxsLFxuICAgIGdsYW0oXG4gICAgICBEaXYsXG4gICAgICBfZXh0ZW5kcyh7IGNzczogZ2V0U3R5bGVzKCdkaWFsb2cnLCBwcm9wcyksIGNsYXNzTmFtZTogY2xhc3NOYW1lKCdkaWFsb2cnLCB7IGlzRnVsbHNjcmVlbjogaXNGdWxsc2NyZWVuIH0pIH0sIGlubmVyUHJvcHMpLFxuICAgICAgY2hpbGRyZW5cbiAgICApXG4gICk7XG59O1xuXG5mdW5jdGlvbiBnZXRTb3VyY2UoX3JlZikge1xuICB2YXIgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgIGlzRnVsbHNjcmVlbiA9IF9yZWYuaXNGdWxsc2NyZWVuO1xuICB2YXIgX2RhdGEkc291cmNlID0gZGF0YS5zb3VyY2UsXG4gICAgICBzb3VyY2UgPSBfZGF0YSRzb3VyY2UgPT09IHVuZGVmaW5lZCA/IGRhdGEuc3JjIDogX2RhdGEkc291cmNlO1xuXG4gIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJykgcmV0dXJuIHNvdXJjZTtcblxuICByZXR1cm4gaXNGdWxsc2NyZWVuID8gc291cmNlLmZ1bGxzY3JlZW4gOiBzb3VyY2UucmVndWxhcjtcbn1cblxudmFyIHZpZXdDU1MgPSBmdW5jdGlvbiB2aWV3Q1NTKCkge1xuICByZXR1cm4ge1xuICAgIGxpbmVIZWlnaHQ6IDAsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJ1xuICB9O1xufTtcblxudmFyIHZpZXdCYXNlQ2xhc3NOYW1lID0gY29tcG9uZW50QmFzZUNsYXNzTmFtZXMuVmlldztcblxudmFyIFZpZXcgPSBmdW5jdGlvbiBWaWV3KHByb3BzKSB7XG4gIHZhciBkYXRhID0gcHJvcHMuZGF0YSxcbiAgICAgIGZvcm1hdHRlcnMgPSBwcm9wcy5mb3JtYXR0ZXJzLFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgaW5kZXggPSBwcm9wcy5pbmRleCxcbiAgICAgIGlzRnVsbHNjcmVlbiA9IHByb3BzLmlzRnVsbHNjcmVlbixcbiAgICAgIGlzTW9kYWwgPSBwcm9wcy5pc01vZGFsO1xuXG4gIHZhciBpbm5lclByb3BzID0ge1xuICAgIGFsdDogZm9ybWF0dGVycy5nZXRBbHRUZXh0KHsgZGF0YTogZGF0YSwgaW5kZXg6IGluZGV4IH0pLFxuICAgIHNyYzogZ2V0U291cmNlKHsgZGF0YTogZGF0YSwgaXNGdWxsc2NyZWVuOiBpc0Z1bGxzY3JlZW4gfSlcbiAgfTtcblxuICByZXR1cm4gZ2xhbShcbiAgICBEaXYsXG4gICAgeyBjc3M6IGdldFN0eWxlcyh2aWV3QmFzZUNsYXNzTmFtZSwgcHJvcHMpLCBjbGFzc05hbWU6IGNsYXNzTmFtZSh2aWV3QmFzZUNsYXNzTmFtZSwgeyBpc0Z1bGxzY3JlZW46IGlzRnVsbHNjcmVlbiwgaXNNb2RhbDogaXNNb2RhbCB9KSB9LFxuICAgIGdsYW0oSW1nLCBfZXh0ZW5kcyh7fSwgaW5uZXJQcm9wcywge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUoJ3ZpZXctaW1hZ2UnLCB7IGlzRnVsbHNjcmVlbjogaXNGdWxsc2NyZWVuLCBpc01vZGFsOiBpc01vZGFsIH0pLFxuICAgICAgY3NzOiB7XG4gICAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgICBtYXhIZWlnaHQ6ICcxMDB2aCcsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgIHVzZXJTZWxlY3Q6ICdub25lJ1xuICAgICAgfVxuICAgIH0pKVxuICApO1xufTtcblxudmFyIGNhcm91c2VsQ29tcG9uZW50cyA9IHtcbiAgQ29udGFpbmVyOiBDb250YWluZXIsXG4gIEZvb3RlcjogRm9vdGVyLFxuICBGb290ZXJDYXB0aW9uOiBGb290ZXJDYXB0aW9uLFxuICBGb290ZXJDb3VudDogRm9vdGVyQ291bnQsXG4gIEhlYWRlcjogSGVhZGVyLFxuICBIZWFkZXJDbG9zZTogSGVhZGVyQ2xvc2UsXG4gIEhlYWRlckZ1bGxzY3JlZW46IEhlYWRlckZ1bGxzY3JlZW4sXG4gIE5hdmlnYXRpb246IE5hdmlnYXRpb24sXG4gIE5hdmlnYXRpb25QcmV2OiBOYXZpZ2F0aW9uUHJldixcbiAgTmF2aWdhdGlvbk5leHQ6IE5hdmlnYXRpb25OZXh0LFxuICBWaWV3OiBWaWV3XG59O1xuXG52YXIgZGVmYXVsdENhcm91c2VsQ29tcG9uZW50cyA9IGZ1bmN0aW9uIGRlZmF1bHRDYXJvdXNlbENvbXBvbmVudHMocHJvdmlkZWRDb21wb25lbnRzKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2Fyb3VzZWxDb21wb25lbnRzLCBwcm92aWRlZENvbXBvbmVudHMpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNb2RhbFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBtb2RhbENvbXBvbmVudHMgPSB7XG4gIEJsYW5rZXQ6IEJsYW5rZXQsXG4gIFBvc2l0aW9uZXI6IFBvc2l0aW9uZXIsXG4gIERpYWxvZzogRGlhbG9nXG59O1xuXG52YXIgZGVmYXVsdE1vZGFsQ29tcG9uZW50cyA9IGZ1bmN0aW9uIGRlZmF1bHRNb2RhbENvbXBvbmVudHMocHJvdmlkZWRDb21wb25lbnRzKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgbW9kYWxDb21wb25lbnRzLCBwcm92aWRlZENvbXBvbmVudHMpO1xufTtcblxudmFyIGRlZmF1bHRDYXJvdXNlbFN0eWxlcyA9IHtcbiAgY29udGFpbmVyOiBjb250YWluZXJDU1MsXG4gIGZvb3RlcjogZm9vdGVyQ1NTLFxuICBmb290ZXJDYXB0aW9uOiBmb290ZXJDYXB0aW9uQ1NTLFxuICBmb290ZXJDb3VudDogZm9vdGVyQ291bnRDU1MsXG4gIGhlYWRlcjogaGVhZGVyQ1NTLFxuICBoZWFkZXJDbG9zZTogaGVhZGVyQ2xvc2VDU1MsXG4gIGhlYWRlckZ1bGxzY3JlZW46IGhlYWRlckZ1bGxzY3JlZW5DU1MsXG4gIG5hdmlnYXRpb246IG5hdmlnYXRpb25DU1MsXG4gIG5hdmlnYXRpb25QcmV2OiBuYXZpZ2F0aW9uUHJldkNTUyxcbiAgbmF2aWdhdGlvbk5leHQ6IG5hdmlnYXRpb25OZXh0Q1NTLFxuICB2aWV3OiB2aWV3Q1NTXG59O1xudmFyIGRlZmF1bHRNb2RhbFN0eWxlcyA9IHtcbiAgYmxhbmtldDogYmxhbmtldENTUyxcbiAgZGlhbG9nOiBkaWFsb2dDU1MsXG4gIHBvc2l0aW9uZXI6IHBvc2l0aW9uZXJDU1NcblxuICAvLyBNZXJnZSBVdGlsaXR5XG4gIC8vIEFsbG93cyBjb25zdW1lcnMgdG8gZXh0ZW5kIGEgYmFzZSBDYXJvdXNlbCBvciBNb2RhbCB3aXRoIGFkZGl0aW9uYWwgc3R5bGVzXG5cbn07XG5cbnZhciBlYXNpbmcgPSAnY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpJzsgLy8gZWFzZU91dFF1aW50XG52YXIgdmVydGljYWxPZmZzZXQgPSA0MDtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBGYWRlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIEZhZGUgPSBmdW5jdGlvbiBGYWRlKF9yZWYpIHtcbiAgdmFyIFRhZyA9IF9yZWYuY29tcG9uZW50LFxuICAgICAgb25FbnRlcmVkID0gX3JlZi5vbkVudGVyZWQsXG4gICAgICBvbkV4aXRlZCA9IF9yZWYub25FeGl0ZWQsXG4gICAgICBpblByb3AgPSBfcmVmLmluLFxuICAgICAgb3JpZ2luYWxQcm9wcyA9IF9yZWYuaW5uZXJQcm9wcyxcbiAgICAgIHByb3BzID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydjb21wb25lbnQnLCAnb25FbnRlcmVkJywgJ29uRXhpdGVkJywgJ2luJywgJ2lubmVyUHJvcHMnXSk7XG5cbiAgdmFyIGVudGVyID0gMzAwO1xuICB2YXIgZXhpdCA9IDUwMDtcbiAgdmFyIGZhZGVTdHlsZSA9IHtcbiAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAyMDBtcycsXG4gICAgb3BhY2l0eTogMFxuICB9O1xuICB2YXIgZmFkZVRyYW5zaXRpb24gPSB7XG4gICAgZW50ZXJpbmc6IHsgb3BhY2l0eTogMCB9LFxuICAgIGVudGVyZWQ6IHsgb3BhY2l0eTogMSB9LFxuICAgIGV4aXRpbmc6IHsgb3BhY2l0eTogMCwgdHJhbnNpdGlvbkR1cmF0aW9uOiBleGl0ICsgJ21zJyB9XG4gIH07XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgVHJhbnNpdGlvbixcbiAgICB7IGFwcGVhcjogdHJ1ZSwgbW91bnRPbkVudGVyOiB0cnVlLCB1bm1vdW50T25FeGl0OiB0cnVlLCBvbkVudGVyZWQ6IG9uRW50ZXJlZCwgb25FeGl0ZWQ6IG9uRXhpdGVkLCBrZXk6ICdmYWRlJywgJ2luJzogaW5Qcm9wLCB0aW1lb3V0OiB7IGVudGVyOiBlbnRlciwgZXhpdDogZXhpdCB9IH0sXG4gICAgZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgdmFyIGlubmVyUHJvcHMgPSBfZXh0ZW5kcyh7fSwgb3JpZ2luYWxQcm9wcywge1xuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe30sIGZhZGVTdHlsZSwgZmFkZVRyYW5zaXRpb25bc3RhdHVzXSlcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc3RhdHVzID09PSAnZXhpdGVkJykgcmV0dXJuIG51bGw7XG5cbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhZywgX2V4dGVuZHMoeyBpbm5lclByb3BzOiBpbm5lclByb3BzIH0sIHByb3BzKSk7XG4gICAgfVxuICApO1xufTtcbnZhciBTbGlkZVVwID0gZnVuY3Rpb24gU2xpZGVVcChfcmVmMikge1xuICB2YXIgVGFnID0gX3JlZjIuY29tcG9uZW50LFxuICAgICAgb25FbnRlcmVkID0gX3JlZjIub25FbnRlcmVkLFxuICAgICAgb25FeGl0ZWQgPSBfcmVmMi5vbkV4aXRlZCxcbiAgICAgIGluUHJvcCA9IF9yZWYyLmluLFxuICAgICAgb3JpZ2luYWxQcm9wcyA9IF9yZWYyLmlubmVyUHJvcHMsXG4gICAgICBwcm9wcyA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBbJ2NvbXBvbmVudCcsICdvbkVudGVyZWQnLCAnb25FeGl0ZWQnLCAnaW4nLCAnaW5uZXJQcm9wcyddKTtcblxuICB2YXIgZW50ZXIgPSAzMDA7XG4gIHZhciBleGl0ID0gNTAwO1xuICB2YXIgcmVzdGluZ1RyYW5zZm9ybSA9ICd0cmFuc2xhdGUzZCgwLCAwLCAwKSc7XG4gIHZhciBzbGlkZVN0eWxlID0ge1xuICAgIHRyYW5zaXRpb246ICd0cmFuc2Zvcm0gJyArIGVudGVyICsgJ21zICcgKyBlYXNpbmcgKyAnLCBvcGFjaXR5ICcgKyBlbnRlciArICdtcyAnICsgZWFzaW5nLFxuICAgIHRyYW5zZm9ybTogcmVzdGluZ1RyYW5zZm9ybVxuICB9O1xuICB2YXIgc2xpZGVUcmFuc2l0aW9uID0ge1xuICAgIGVudGVyaW5nOiB7XG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgJyArIHZlcnRpY2FsT2Zmc2V0ICsgJ3B4LCAwKSBzY2FsZSgwLjkpJ1xuICAgIH0sXG4gICAgZW50ZXJlZDoge1xuICAgICAgb3BhY2l0eTogMSxcbiAgICAgIHRyYW5zZm9ybTogcmVzdGluZ1RyYW5zZm9ybVxuICAgIH0sXG4gICAgZXhpdGluZzoge1xuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKDAsICcgKyB2ZXJ0aWNhbE9mZnNldCArICdweCwgMCkgc2NhbGUoMC45KScsXG4gICAgICB0cmFuc2l0aW9uOiAndHJhbnNmb3JtICcgKyBleGl0ICsgJ21zICcgKyBlYXNpbmcgKyAnLCBvcGFjaXR5ICcgKyBleGl0ICsgJ21zICcgKyBlYXNpbmdcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgVHJhbnNpdGlvbixcbiAgICB7IGFwcGVhcjogdHJ1ZSwgJ2luJzogaW5Qcm9wLCBtb3VudE9uRW50ZXI6IHRydWUsIG9uRW50ZXJlZDogb25FbnRlcmVkLCBvbkV4aXRlZDogb25FeGl0ZWQsIHRpbWVvdXQ6IHsgZW50ZXI6IGVudGVyLCBleGl0OiBleGl0IH0sIHVubW91bnRPbkV4aXQ6IHRydWUgfSxcbiAgICBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gICAgICBpZiAoc3RhdHVzID09PSAnZXhpdGVkJykgcmV0dXJuIG51bGw7XG5cbiAgICAgIHZhciBpbm5lclByb3BzID0gX2V4dGVuZHMoe30sIG9yaWdpbmFsUHJvcHMsIHtcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHt9LCBzbGlkZVN0eWxlLCBzbGlkZVRyYW5zaXRpb25bc3RhdHVzXSlcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWcsIF9leHRlbmRzKHsgaW5uZXJQcm9wczogaW5uZXJQcm9wcyB9LCBwcm9wcykpO1xuICAgIH1cbiAgKTtcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGFsbG93RnVsbHNjcmVlbjogIWlzVG91Y2goKSxcbiAgY2xvc2VPbkJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gIGNsb3NlT25Fc2M6IHRydWUsXG4gIHByZXZlbnRTY3JvbGw6IHRydWUsXG4gIHN0eWxlczoge31cblxuICAvKiogQ2xhc3NlcyB0aGF0IHdoZW4gY2xpY2tlZCBvbiwgY2xvc2UgdGhlIGJhY2tkcm9wICovXG59O3ZhciBiYWNrZHJvcENsYXNzTmFtZXMgPSBuZXcgU2V0KFtjb21wb25lbnRCYXNlQ2xhc3NOYW1lcy5WaWV3LCBjb21wb25lbnRCYXNlQ2xhc3NOYW1lcy5IZWFkZXIsIGNvbXBvbmVudEJhc2VDbGFzc05hbWVzLkZvb3RlciwgY29tcG9uZW50QmFzZUNsYXNzTmFtZXMuVHJhY2ssIGNvbXBvbmVudEJhc2VDbGFzc05hbWVzLlBvc2l0aW9uZXJdLm1hcChjbGFzc05hbWUpKTtcblxudmFyIE1vZGFsID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgaW5oZXJpdHMoTW9kYWwsIF9Db21wb25lbnQpO1xuXG4gIC8vIFRPRE9cbiAgZnVuY3Rpb24gTW9kYWwocHJvcHMpIHtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBNb2RhbCk7XG5cbiAgICB2YXIgX3RoaXMgPSBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChNb2RhbC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKE1vZGFsKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xuXG4gICAgX2luaXRpYWxpc2VQcm9wcy5jYWxsKF90aGlzKTtcblxuICAgIF90aGlzLmNhY2hlQ29tcG9uZW50cyhwcm9wcy5jb21wb25lbnRzKTtcblxuICAgIF90aGlzLnN0YXRlID0geyBpc0Z1bGxzY3JlZW46IGZhbHNlLCBpc0Nsb3Npbmc6IGZhbHNlIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgY3JlYXRlQ2xhc3MoTW9kYWwsIFt7XG4gICAga2V5OiAnY29tcG9uZW50RGlkVXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKHByZXZQcm9wcy5jb21wb25lbnRzICE9PSB0aGlzLnByb3BzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgdGhpcy5jYWNoZUNvbXBvbmVudHMocHJldlByb3BzLmNvbXBvbmVudHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVtdWxhdGUgYGNvbXBvbmVudERpZE1vdW50YCAmIGBjb21wb25lbnRXaWxsVW5tb3VudGBcbiAgICAvLyBjYWxsZWQgb24gY29tcGxldGUgb2YgZW50ZXIgJiBleGl0IHRyYW5zaXRpb25zIHJlc3BlY3RpdmVseVxuXG4gIH0sIHtcbiAgICBrZXk6ICdnZXRDb21tb25Qcm9wcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbW1vblByb3BzKCkge1xuICAgICAgdmFyIGlzRnVsbHNjcmVlbiA9IHRoaXMuc3RhdGUuaXNGdWxsc2NyZWVuO1xuXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldFN0eWxlczogdGhpcy5nZXRTdHlsZXMsXG4gICAgICAgIGlzRnVsbHNjcmVlbjogaXNGdWxsc2NyZWVuLFxuICAgICAgICBtb2RhbFByb3BzOiB0aGlzLnByb3BzXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfY29tcG9uZW50cyA9IHRoaXMuY29tcG9uZW50cyxcbiAgICAgICAgICBCbGFua2V0ID0gX2NvbXBvbmVudHMuQmxhbmtldCxcbiAgICAgICAgICBQb3NpdGlvbmVyID0gX2NvbXBvbmVudHMuUG9zaXRpb25lcixcbiAgICAgICAgICBEaWFsb2cgPSBfY29tcG9uZW50cy5EaWFsb2c7XG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBhbGxvd0Z1bGxzY3JlZW4gPSBfcHJvcHMuYWxsb3dGdWxsc2NyZWVuLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3Byb3BzLmNoaWxkcmVuO1xuICAgICAgdmFyIGlzRnVsbHNjcmVlbiA9IHRoaXMuc3RhdGUuaXNGdWxsc2NyZWVuO1xuXG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzID0gdGhpcy5nZXRDb21tb25Qcm9wcygpO1xuXG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICB2YXIgdHJhbnNpdGlvbkluID0gdGhpcy5wcm9wcy5pbjtcblxuICAgICAgLy8gZm9yd2FyZCBwcm9wcyB0byBtb2RhbCBmb3IgdXNlIGluIGludGVybmFsIGNvbXBvbmVudHNcbiAgICAgIHZhciBtb2RhbFByb3BzID0ge1xuICAgICAgICBhbGxvd0Z1bGxzY3JlZW46IGFsbG93RnVsbHNjcmVlbixcbiAgICAgICAgaXNGdWxsc2NyZWVuOiBpc0Z1bGxzY3JlZW4sXG4gICAgICAgIG9uQ2xvc2U6IHRoaXMuaGFuZGxlQ2xvc2UsXG4gICAgICAgIHByZXZlbnRTY3JvbGw6IHRoaXMucHJldmVudFNjcm9sbCxcbiAgICAgICAgdG9nZ2xlRnVsbHNjcmVlbjogdGhpcy50b2dnbGVGdWxsc2NyZWVuXG5cbiAgICAgICAgLy8gYXVnbWVudCB1c2VyIGNhcm91c2VsIHdpdGggbW9kYWwgcHJvcHNcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgfTt2YXIgY2Fyb3VzZWxDb21wb25lbnQgPSBjbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgaXNNb2RhbDogdHJ1ZSxcbiAgICAgICAgbW9kYWxQcm9wczogbW9kYWxQcm9wc1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBnbGFtKFxuICAgICAgICBGdWxsU2NyZWVuLFxuICAgICAgICB7IGhhbmRsZTogeyBhY3RpdmU6IGlzRnVsbHNjcmVlbiB9LCBvbkNoYW5nZTogdGhpcy5oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlIH0sXG4gICAgICAgIGdsYW0oRmFkZSwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7IGNvbXBvbmVudDogQmxhbmtldCwgJ2luJzogdHJhbnNpdGlvbkluIH0pKSxcbiAgICAgICAgZ2xhbShcbiAgICAgICAgICBTbGlkZVVwLFxuICAgICAgICAgIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICAgICAgY29tcG9uZW50OiBQb3NpdGlvbmVyLFxuICAgICAgICAgICAgJ2luJzogdHJhbnNpdGlvbkluLFxuICAgICAgICAgICAgaW5uZXJQcm9wczoge1xuICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLnN0YXRlLmlzQ2xvc2luZyA/IG51bGwgOiB0aGlzLmhhbmRsZUJhY2tkcm9wQ2xpY2tcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkVudGVyZWQ6IHRoaXMubW9kYWxEaWRNb3VudCxcbiAgICAgICAgICAgIG9uRXhpdGVkOiB0aGlzLm1vZGFsV2lsbFVubW91bnRcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBnbGFtKFxuICAgICAgICAgICAgRGlhbG9nLFxuICAgICAgICAgICAgX2V4dGVuZHMoeyByZW1vdmVGb2N1c09uOiB0aGlzLnN0YXRlLmlzQ2xvc2luZyB9LCBjb21tb25Qcm9wcyksXG4gICAgICAgICAgICBjYXJvdXNlbENvbXBvbmVudFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIE1vZGFsO1xufShDb21wb25lbnQpO1xuXG5Nb2RhbC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5cbnZhciBfaW5pdGlhbGlzZVByb3BzID0gZnVuY3Rpb24gX2luaXRpYWxpc2VQcm9wcygpIHtcbiAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgdGhpcy5tb2RhbERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgX3RoaXMyLmhhbmRsZUtleVVwKTtcbiAgICBmb2N1c1N0b3JlLnN0b3JlRm9jdXMoKTtcbiAgfTtcblxuICB0aGlzLm1vZGFsV2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBfdGhpczIuaGFuZGxlS2V5VXApO1xuICAgIGZvY3VzU3RvcmUucmVzdG9yZUZvY3VzKCk7XG4gICAgX3RoaXMyLnNldFN0YXRlKHsgaXNDbG9zaW5nOiBmYWxzZSB9KTtcbiAgfTtcblxuICB0aGlzLmNhY2hlQ29tcG9uZW50cyA9IGZ1bmN0aW9uIChjb21wcykge1xuICAgIF90aGlzMi5jb21wb25lbnRzID0gZGVmYXVsdE1vZGFsQ29tcG9uZW50cyhjb21wcyk7XG4gIH07XG5cbiAgdGhpcy5oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlID0gZnVuY3Rpb24gKGlzRnVsbHNjcmVlbikge1xuICAgIF90aGlzMi5zZXRTdGF0ZSh7IGlzRnVsbHNjcmVlbjogaXNGdWxsc2NyZWVuIH0pO1xuICB9O1xuXG4gIHRoaXMuaGFuZGxlS2V5VXAgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgX3Byb3BzMiA9IF90aGlzMi5wcm9wcyxcbiAgICAgICAgYWxsb3dGdWxsc2NyZWVuID0gX3Byb3BzMi5hbGxvd0Z1bGxzY3JlZW4sXG4gICAgICAgIGNsb3NlT25Fc2MgPSBfcHJvcHMyLmNsb3NlT25Fc2M7XG4gICAgdmFyIGlzRnVsbHNjcmVlbiA9IF90aGlzMi5zdGF0ZS5pc0Z1bGxzY3JlZW47XG5cbiAgICB2YXIgYWxsb3dDbG9zZSA9IGV2ZW50LmtleSA9PT0gJ0VzY2FwZScgJiYgY2xvc2VPbkVzYyAmJiAhaXNGdWxsc2NyZWVuO1xuXG4gICAgLy8gdG9nZ2xlIGZ1bGxzY3JlZW5cbiAgICBpZiAoYWxsb3dGdWxsc2NyZWVuICYmIGV2ZW50LmtleSA9PT0gJ2YnKSB7XG4gICAgICBfdGhpczIudG9nZ2xlRnVsbHNjcmVlbigpO1xuICAgIH1cblxuICAgIC8vIGNsb3NlIG9uIGVzY2FwZSB3aGVuIG5vdCBmdWxsc2NyZWVuXG4gICAgaWYgKGFsbG93Q2xvc2UpIF90aGlzMi5oYW5kbGVDbG9zZShldmVudCk7XG4gIH07XG5cbiAgdGhpcy5oYW5kbGVCYWNrZHJvcENsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGhhc0JhY2tkcm9wQ2xhc3NOYW1lID0gZmFsc2U7XG4gICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlO1xuICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlO1xuICAgIHZhciBfaXRlcmF0b3JFcnJvciA9IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBfaXRlcmF0b3IgPSBldmVudC50YXJnZXQuY2xhc3NMaXN0W1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXA7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IChfc3RlcCA9IF9pdGVyYXRvci5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZSkge1xuICAgICAgICB2YXIgdGFyZ2V0Q2xhc3MgPSBfc3RlcC52YWx1ZTtcblxuICAgICAgICBpZiAoYmFja2Ryb3BDbGFzc05hbWVzLmhhcyh0YXJnZXRDbGFzcykpIHtcbiAgICAgICAgICBoYXNCYWNrZHJvcENsYXNzTmFtZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTtcbiAgICAgIF9pdGVyYXRvckVycm9yID0gZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gJiYgX2l0ZXJhdG9yLnJldHVybikge1xuICAgICAgICAgIF9pdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWhhc0JhY2tkcm9wQ2xhc3NOYW1lIHx8ICFfdGhpczIucHJvcHMuY2xvc2VPbkJhY2tkcm9wQ2xpY2spIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBfdGhpczIuaGFuZGxlQ2xvc2UoZXZlbnQpO1xuICB9O1xuXG4gIHRoaXMudG9nZ2xlRnVsbHNjcmVlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBfdGhpczIuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICByZXR1cm4geyBpc0Z1bGxzY3JlZW46ICFzdGF0ZS5pc0Z1bGxzY3JlZW4gfTtcbiAgICB9KTtcbiAgfTtcblxuICB0aGlzLmhhbmRsZUNsb3NlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIG9uQ2xvc2UgPSBfdGhpczIucHJvcHMub25DbG9zZTtcbiAgICB2YXIgX3N0YXRlID0gX3RoaXMyLnN0YXRlLFxuICAgICAgICBpc0Z1bGxzY3JlZW4gPSBfc3RhdGUuaXNGdWxsc2NyZWVuLFxuICAgICAgICBpc0Nsb3NpbmcgPSBfc3RhdGUuaXNDbG9zaW5nO1xuXG5cbiAgICBpZiAoIWlzQ2xvc2luZykge1xuICAgICAgX3RoaXMyLnNldFN0YXRlKHsgaXNDbG9zaW5nOiB0cnVlIH0pO1xuXG4gICAgICAvLyBmb3JjZSBleGl0IGZ1bGxzY3JlZW4gbW9kZSBvbiBjbG9zZVxuICAgICAgaWYgKGlzRnVsbHNjcmVlbikge1xuICAgICAgICBfdGhpczIudG9nZ2xlRnVsbHNjcmVlbigpO1xuICAgICAgfVxuXG4gICAgICAvLyBjYWxsIHRoZSBjb25zdW1lcidzIG9uQ2xvc2UgZnVuY1xuICAgICAgb25DbG9zZShldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuZ2V0U3R5bGVzID0gZnVuY3Rpb24gKGtleSwgcHJvcHMpIHtcbiAgICB2YXIgYmFzZSA9IGRlZmF1bHRNb2RhbFN0eWxlc1trZXldKHByb3BzKTtcbiAgICBiYXNlLmJveFNpemluZyA9ICdib3JkZXItYm94JztcbiAgICB2YXIgY3VzdG9tID0gX3RoaXMyLnByb3BzLnN0eWxlc1trZXldO1xuICAgIHJldHVybiBjdXN0b20gPyBjdXN0b20oYmFzZSwgcHJvcHMpIDogYmFzZTtcbiAgfTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTmF2aWdhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qIEFSSUEgbGFiZWwgZm9yIHRoZSBuZXh0IGJ1dHRvbiAqL1xuXG5cbi8vIE5PVEU6IHByb3BzIGFyZW4ndCB1c2VkIGJ5IGRlZmF1bHQgZm9yIHNvbWUgZ2V0dGVycyBidXQgY29uc3VtZXJzIG1heSBuZWVkXG4vLyB0aGVtLCB0aGlzIG5lZWRzIHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUgZmxvdyB0eXBlLlxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG5mdW5jdGlvbiBnZXROZXh0TGFiZWwoX3JlZikge1xuICB2YXIgY3VycmVudEluZGV4ID0gX3JlZi5jdXJyZW50SW5kZXgsXG4gICAgICB2aWV3cyA9IF9yZWYudmlld3M7XG5cbiAgcmV0dXJuICdTaG93IHNsaWRlICcgKyAoY3VycmVudEluZGV4ICsgMikgKyAnIG9mICcgKyB2aWV3cy5sZW5ndGg7XG59XG5cbi8qIEFSSUEgbGFiZWwgZm9yIHRoZSBwcmV2aW91cyBidXR0b24gKi9cbmZ1bmN0aW9uIGdldFByZXZMYWJlbChfcmVmMikge1xuICB2YXIgY3VycmVudEluZGV4ID0gX3JlZjIuY3VycmVudEluZGV4LFxuICAgICAgdmlld3MgPSBfcmVmMi52aWV3cztcblxuICByZXR1cm4gJ1Nob3cgc2xpZGUgJyArIGN1cnJlbnRJbmRleCArICcgb2YgJyArIHZpZXdzLmxlbmd0aDtcbn1cblxuLyogSFRNTCB0aXRsZSBmb3IgdGhlIG5leHQgYnV0dG9uICovXG5mdW5jdGlvbiBnZXROZXh0VGl0bGUocHJvcHMpIHtcbiAgcmV0dXJuICdOZXh0IChyaWdodCBhcnJvdyknO1xufVxuXG4vKiBIVE1MIHRpdGxlIGZvciB0aGUgcHJldmlvdXMgYnV0dG9uICovXG5mdW5jdGlvbiBnZXRQcmV2VGl0bGUocHJvcHMpIHtcbiAgcmV0dXJuICdQcmV2aW91cyAobGVmdCBhcnJvdyknO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhlYWRlclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qIEFSSUEgbGFiZWwgZm9yIHRoZSBjbG9zZSBidXR0b24gKi9cbmZ1bmN0aW9uIGdldENsb3NlTGFiZWwocHJvcHMpIHtcbiAgcmV0dXJuICdDbG9zZSAoZXNjKSc7XG59XG4vKiBBUklBIGxhYmVsIGZvciB0aGUgZnVsbHNjcmVlbiBidXR0b24gKi9cbmZ1bmN0aW9uIGdldEZ1bGxzY3JlZW5MYWJlbChfcmVmMykge1xuICB2YXIgaXNGdWxsc2NyZWVuID0gX3JlZjMuaXNGdWxsc2NyZWVuO1xuXG4gIHJldHVybiBpc0Z1bGxzY3JlZW4gPyAnRXhpdCBmdWxsc2NyZWVuIChmKScgOiAnRW50ZXIgZnVsbHNjcmVlbiAoZiknO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFZpZXdcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiBhbHQgdGV4dCBmb3IgZWFjaCBpbWFnZSBpbiB0aGUgY2Fyb3VzZWwgKi9cbmZ1bmN0aW9uIGdldEFsdFRleHQoX3JlZjQpIHtcbiAgdmFyIGRhdGEgPSBfcmVmNC5kYXRhLFxuICAgICAgaW5kZXggPSBfcmVmNC5pbmRleDtcblxuICBpZiAoZGF0YS5hbHQpIHtcbiAgICBpZiAodHlwZW9mIGRhdGEuYWx0ICE9PSAnc3RyaW5nJykge1xuICAgICAgY29uc29sZS5lcnJvcignSW1hZ2UgJyArIChpbmRleCArIDEpICsgJyBoYWQgYSBub24tc3RyaW5nIGFsdCBwcm9wZXJ0eSwgd2hpY2ggd2lsbCBwcm9iYWJseSByZW5kZXIgaW5jb3JyZWN0bHkuXFxuSW5zdGVhZCBvZiBhIHBsYWluIHN0cmluZyBpdCB3YXMgJywgZGF0YS5hbHQpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhLmFsdDtcbiAgfVxuXG4gIGlmIChkYXRhLmNhcHRpb24pIHtcbiAgICBpZiAodHlwZW9mIGRhdGEuY2FwdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnNvbGUud2FybignSW1hZ2UgJyArIChpbmRleCArIDEpICsgJyBoYXMgYSBub24tc3RyaW5nIGNhcHRpb24sIGJ1dCBubyBhbHRcXHhBMHZhbHVlIHByb3ZpZGVkLiBUaGlzIHdpbGwgcHJvYmFibHkgbWFrZSB0aGUgYWx0IHByb3AgdW5pbnRlbGxpZ2libGUgZm9yIHNjcmVlbiByZWFkZXJzLiBJcyB0aGlzIGludGVudGlvbmFsPycpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhLmNhcHRpb247XG4gIH1cblxuICByZXR1cm4gJ0ltYWdlICcgKyAoaW5kZXggKyAxKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFeHBvcnRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGZvcm1hdHRlcnMgPSB7XG4gIGdldEFsdFRleHQ6IGdldEFsdFRleHQsXG4gIGdldE5leHRMYWJlbDogZ2V0TmV4dExhYmVsLFxuICBnZXRQcmV2TGFiZWw6IGdldFByZXZMYWJlbCxcbiAgZ2V0TmV4dFRpdGxlOiBnZXROZXh0VGl0bGUsXG4gIGdldFByZXZUaXRsZTogZ2V0UHJldlRpdGxlLFxuICBnZXRDbG9zZUxhYmVsOiBnZXRDbG9zZUxhYmVsLFxuICBnZXRGdWxsc2NyZWVuTGFiZWw6IGdldEZ1bGxzY3JlZW5MYWJlbFxufTtcblxudmFyIHZpZXdQYWdlclN0eWxlcyA9IHtcbiAgZmxleDogJzEgMSBhdXRvJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbn07XG52YXIgZnJhbWVTdHlsZXMgPSB7IG91dGxpbmU6IDAgfTtcblxudmFyIGRlZmF1bHRQcm9wcyQxID0ge1xuICBjdXJyZW50SW5kZXg6IDAsXG4gIGZvcm1hdHRlcnM6IGZvcm1hdHRlcnMsXG4gIGhpZGVDb250cm9sc1doZW5JZGxlOiAzMDAwLFxuICBzaG93TmF2aWdhdGlvbk9uVG91Y2hEZXZpY2U6IGZhbHNlLFxuICBzdHlsZXM6IHt9LFxuICB0cmFja1Byb3BzOiB7XG4gICAgaW5zdGFudDogIWlzVG91Y2goKSxcbiAgICBzd2lwZTogJ3RvdWNoJ1xuICB9XG59O1xuXG52YXIgdHJhY2tCYXNlQ2xhc3NOYW1lID0gY29tcG9uZW50QmFzZUNsYXNzTmFtZXMuVHJhY2s7XG5cbnZhciBDYXJvdXNlbCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGluaGVyaXRzKENhcm91c2VsLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBDYXJvdXNlbChwcm9wcykge1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIENhcm91c2VsKTtcblxuICAgIHZhciBfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKENhcm91c2VsLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ2Fyb3VzZWwpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cbiAgICBfaW5pdGlhbGlzZVByb3BzJDEuY2FsbChfdGhpcyk7XG5cbiAgICBfdGhpcy5jYWNoZUNvbXBvbmVudHMocHJvcHMuY29tcG9uZW50cyk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGN1cnJlbnRJbmRleDogcHJvcHMuY3VycmVudEluZGV4LFxuICAgICAgaW50ZXJhY3Rpb25Jc0lkbGU6IGlzVG91Y2goKVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9IC8vIFRPRE9cblxuXG4gIGNyZWF0ZUNsYXNzKENhcm91c2VsLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBoaWRlQ29udHJvbHNXaGVuSWRsZSA9IF9wcm9wcy5oaWRlQ29udHJvbHNXaGVuSWRsZSxcbiAgICAgICAgICBtb2RhbFByb3BzID0gX3Byb3BzLm1vZGFsUHJvcHM7XG5cbiAgICAgIHZhciBpc01vZGFsID0gQm9vbGVhbihtb2RhbFByb3BzKTtcblxuICAgICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKGhpZGVDb250cm9sc1doZW5JZGxlICYmIHRoaXMuY29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGFuZGxlTW91c2VBY3Rpdml0eSk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuaGFuZGxlTW91c2VBY3Rpdml0eSk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuaGFuZGxlTW91c2VBY3Rpdml0eSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNNb2RhbCkge1xuICAgICAgICB0aGlzLmZvY3VzVmlld0ZyYW1lKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50RGlkVXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKHByZXZQcm9wcy5jb21wb25lbnRzICE9PSB0aGlzLnByb3BzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgdGhpcy5jYWNoZUNvbXBvbmVudHMocHJldlByb3BzLmNvbXBvbmVudHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5jdXJyZW50SW5kZXggIT09IHByZXZQcm9wcy5jdXJyZW50SW5kZXgpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGN1cnJlbnRJbmRleDogdGhpcy5wcm9wcy5jdXJyZW50SW5kZXggfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMubW91bnRlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5oaWRlQ29udHJvbHNXaGVuSWRsZSAmJiB0aGlzLmNvbnRhaW5lcikge1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmhhbmRsZU1vdXNlQWN0aXZpdHkpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZU1vdXNlQWN0aXZpdHkpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLmhhbmRsZU1vdXNlQWN0aXZpdHkpO1xuICAgICAgICB0aGlzLmhhbmRsZU1vdXNlQWN0aXZpdHkuY2FuY2VsKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gUmVmc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gVXRpbGl0aWVzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAvLyBjb21iaW5lIGRlZmF1bHRQcm9wcyB3aXRoIGNvbnN1bWVyIHByb3BzIHRvIG1haW50YWluIGV4cGVjdGVkIGJlaGF2aW91clxuXG4gICAgLy8gY29tYmluZSBkZWZhdWx0UHJvcHMgd2l0aCBjb25zdW1lciBwcm9wcyB0byBtYWludGFpbiBleHBlY3RlZCBiZWhhdmlvdXJcblxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFJlbmRlcmVyc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIH0sIHtcbiAgICBrZXk6ICdnZXRDb21tb25Qcm9wcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbW1vblByb3BzKCkge1xuICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGZyYW1lUHJvcHMgPSBfcHJvcHMyLmZyYW1lUHJvcHMsXG4gICAgICAgICAgdHJhY2tQcm9wcyA9IF9wcm9wczIudHJhY2tQcm9wcyxcbiAgICAgICAgICBtb2RhbFByb3BzID0gX3Byb3BzMi5tb2RhbFByb3BzLFxuICAgICAgICAgIHZpZXdzID0gX3Byb3BzMi52aWV3cyxcbiAgICAgICAgICBzaG93TmF2aWdhdGlvbk9uVG91Y2hEZXZpY2UgPSBfcHJvcHMyLnNob3dOYXZpZ2F0aW9uT25Ub3VjaERldmljZTtcblxuICAgICAgdmFyIGlzTW9kYWwgPSBCb29sZWFuKG1vZGFsUHJvcHMpO1xuICAgICAgdmFyIGlzRnVsbHNjcmVlbiA9IEJvb2xlYW4obW9kYWxQcm9wcyAmJiBtb2RhbFByb3BzLmlzRnVsbHNjcmVlbik7XG4gICAgICB2YXIgX3N0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBjdXJyZW50SW5kZXggPSBfc3RhdGUuY3VycmVudEluZGV4LFxuICAgICAgICAgIGludGVyYWN0aW9uSXNJZGxlID0gX3N0YXRlLmludGVyYWN0aW9uSXNJZGxlO1xuXG4gICAgICB2YXIgY3VycmVudFZpZXcgPSB0aGlzLmdldFZpZXdEYXRhKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNhcm91c2VsUHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICAgIGN1cnJlbnRJbmRleDogY3VycmVudEluZGV4LFxuICAgICAgICBjdXJyZW50VmlldzogY3VycmVudFZpZXcsXG4gICAgICAgIGZvcm1hdHRlcnM6IHRoaXMucHJvcHMuZm9ybWF0dGVycyxcbiAgICAgICAgZnJhbWVQcm9wczogZnJhbWVQcm9wcyxcbiAgICAgICAgZ2V0U3R5bGVzOiB0aGlzLmdldFN0eWxlcyxcbiAgICAgICAgc2hvd05hdmlnYXRpb25PblRvdWNoRGV2aWNlOiBzaG93TmF2aWdhdGlvbk9uVG91Y2hEZXZpY2UsXG4gICAgICAgIGlzRnVsbHNjcmVlbjogaXNGdWxsc2NyZWVuLFxuICAgICAgICBpc01vZGFsOiBpc01vZGFsLFxuICAgICAgICBtb2RhbFByb3BzOiBtb2RhbFByb3BzLFxuICAgICAgICBpbnRlcmFjdGlvbklzSWRsZTogaW50ZXJhY3Rpb25Jc0lkbGUsXG4gICAgICAgIHRyYWNrUHJvcHM6IHRyYWNrUHJvcHMsXG4gICAgICAgIHZpZXdzOiB2aWV3c1xuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudHMgPSB0aGlzLmNvbXBvbmVudHMsXG4gICAgICAgICAgQ29udGFpbmVyID0gX2NvbXBvbmVudHMuQ29udGFpbmVyLFxuICAgICAgICAgIFZpZXcgPSBfY29tcG9uZW50cy5WaWV3O1xuICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuc3RhdGUuY3VycmVudEluZGV4O1xuICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGZyYW1lUHJvcHMgPSBfcHJvcHMzLmZyYW1lUHJvcHMsXG4gICAgICAgICAgdmlld3MgPSBfcHJvcHMzLnZpZXdzO1xuXG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzID0gdGhpcy5nZXRDb21tb25Qcm9wcygpO1xuXG4gICAgICByZXR1cm4gZ2xhbShcbiAgICAgICAgQ29udGFpbmVyLFxuICAgICAgICBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHsgaW5uZXJQcm9wczogeyBpbm5lclJlZjogdGhpcy5nZXRDb250YWluZXIgfSB9KSxcbiAgICAgICAgdGhpcy5yZW5kZXJIZWFkZXIoKSxcbiAgICAgICAgZ2xhbShcbiAgICAgICAgICBWaWV3UGFnZXIsXG4gICAgICAgICAgeyB0YWc6ICdtYWluJywgc3R5bGU6IHZpZXdQYWdlclN0eWxlcywgY2xhc3NOYW1lOiBjbGFzc05hbWUoJ3BhZ2VyJykgfSxcbiAgICAgICAgICBnbGFtKFxuICAgICAgICAgICAgRnJhbWUsXG4gICAgICAgICAgICBfZXh0ZW5kcyh7fSwgZnJhbWVQcm9wcywgeyByZWY6IHRoaXMuZ2V0RnJhbWUsIGNsYXNzTmFtZTogY2xhc3NOYW1lKCdmcmFtZScpLCBzdHlsZTogZnJhbWVTdHlsZXMsIHRhYkluZGV4OiAnLTEnIH0pLFxuICAgICAgICAgICAgZ2xhbShcbiAgICAgICAgICAgICAgVHJhY2ssXG4gICAgICAgICAgICAgIF9leHRlbmRzKHt9LCB0aGlzLmdldFRyYWNrUHJvcHModGhpcy5wcm9wcyksIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogeyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0sXG4gICAgICAgICAgICAgICAgY3VycmVudFZpZXc6IGN1cnJlbnRJbmRleCxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSh0cmFja0Jhc2VDbGFzc05hbWUpLFxuICAgICAgICAgICAgICAgIG9uVmlld0NoYW5nZTogdGhpcy5oYW5kbGVWaWV3Q2hhbmdlLFxuICAgICAgICAgICAgICAgIHJlZjogdGhpcy5nZXRUcmFja1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgdmlld3MgJiYgdmlld3MubWFwKGZ1bmN0aW9uIChkYXRhLCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnbGFtKFxuICAgICAgICAgICAgICAgICAgVmlldyQxLFxuICAgICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6IGNsYXNzTmFtZSgndmlldy13cmFwcGVyJyksIGtleTogaW5kZXggfSxcbiAgICAgICAgICAgICAgICAgIGdsYW0oVmlldywgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7IGRhdGE6IGRhdGEsIGluZGV4OiBpbmRleCB9KSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgdGhpcy5yZW5kZXJOYXZpZ2F0aW9uKClcbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy5yZW5kZXJGb290ZXIoKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIENhcm91c2VsO1xufShDb21wb25lbnQpO1xuXG5DYXJvdXNlbC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHMkMTtcblxudmFyIF9pbml0aWFsaXNlUHJvcHMkMSA9IGZ1bmN0aW9uIF9pbml0aWFsaXNlUHJvcHMoKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gIHRoaXMubW91bnRlZCA9IGZhbHNlO1xuXG4gIHRoaXMuY2FjaGVDb21wb25lbnRzID0gZnVuY3Rpb24gKGNvbXBzKSB7XG4gICAgX3RoaXMyLmNvbXBvbmVudHMgPSBkZWZhdWx0Q2Fyb3VzZWxDb21wb25lbnRzKGNvbXBzKTtcbiAgfTtcblxuICB0aGlzLmdldENvbnRhaW5lciA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICBfdGhpczIuY29udGFpbmVyID0gcmVmO1xuICB9O1xuXG4gIHRoaXMuZ2V0Rm9vdGVyID0gZnVuY3Rpb24gKHJlZikge1xuICAgIF90aGlzMi5mb290ZXIgPSByZWY7XG4gIH07XG5cbiAgdGhpcy5nZXRGcmFtZSA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICBfdGhpczIuZnJhbWUgPSBmaW5kRE9NTm9kZShyZWYpO1xuICB9O1xuXG4gIHRoaXMuZ2V0SGVhZGVyID0gZnVuY3Rpb24gKHJlZikge1xuICAgIF90aGlzMi5oZWFkZXIgPSByZWY7XG4gIH07XG5cbiAgdGhpcy5nZXRUcmFjayA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICBfdGhpczIudHJhY2sgPSByZWY7XG4gIH07XG5cbiAgdGhpcy5oYXNQcmV2aW91c1ZpZXcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRyYWNrUHJvcHMgPSBfdGhpczIucHJvcHMudHJhY2tQcm9wcztcbiAgICB2YXIgY3VycmVudEluZGV4ID0gX3RoaXMyLnN0YXRlLmN1cnJlbnRJbmRleDtcblxuXG4gICAgcmV0dXJuIHRyYWNrUHJvcHMuaW5maW5pdGUgfHwgY3VycmVudEluZGV4ICE9PSAwO1xuICB9O1xuXG4gIHRoaXMuaGFzTmV4dFZpZXcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9wcm9wczQgPSBfdGhpczIucHJvcHMsXG4gICAgICAgIHRyYWNrUHJvcHMgPSBfcHJvcHM0LnRyYWNrUHJvcHMsXG4gICAgICAgIHZpZXdzID0gX3Byb3BzNC52aWV3cztcbiAgICB2YXIgY3VycmVudEluZGV4ID0gX3RoaXMyLnN0YXRlLmN1cnJlbnRJbmRleDtcblxuXG4gICAgcmV0dXJuIHRyYWNrUHJvcHMuaW5maW5pdGUgfHwgY3VycmVudEluZGV4ICE9PSB2aWV3cy5sZW5ndGggLSAxO1xuICB9O1xuXG4gIHRoaXMuZ2V0U3R5bGVzID0gZnVuY3Rpb24gKGtleSwgcHJvcHMpIHtcbiAgICB2YXIgYmFzZSA9IGRlZmF1bHRDYXJvdXNlbFN0eWxlc1trZXldKHByb3BzKTtcbiAgICBiYXNlLmJveFNpemluZyA9ICdib3JkZXItYm94JztcbiAgICB2YXIgY3VzdG9tID0gX3RoaXMyLnByb3BzLnN0eWxlc1trZXldO1xuICAgIHJldHVybiBjdXN0b20gPyBjdXN0b20oYmFzZSwgcHJvcHMpIDogYmFzZTtcbiAgfTtcblxuICB0aGlzLmdldFRyYWNrUHJvcHMgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGRlZmF1bHRQcm9wcyQxLnRyYWNrUHJvcHMsIHByb3BzLnRyYWNrUHJvcHMpO1xuICB9O1xuXG4gIHRoaXMuZ2V0Rm9ybWF0dGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGRlZmF1bHRQcm9wcyQxLmZvcm1hdHRlcnMsIF90aGlzMi5wcm9wcy5mb3JtYXR0ZXJzKTtcbiAgfTtcblxuICB0aGlzLmdldFZpZXdEYXRhID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2aWV3cyA9IF90aGlzMi5wcm9wcy52aWV3cztcbiAgICB2YXIgY3VycmVudEluZGV4ID0gX3RoaXMyLnN0YXRlLmN1cnJlbnRJbmRleDtcblxuXG4gICAgcmV0dXJuIHZpZXdzW2N1cnJlbnRJbmRleF07XG4gIH07XG5cbiAgdGhpcy5mb2N1c1ZpZXdGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoX3RoaXMyLmZyYW1lICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IF90aGlzMi5mcmFtZSkge1xuICAgICAgX3RoaXMyLmZyYW1lLmZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMucHJldiA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIF90aGlzMi50cmFjay5wcmV2KCk7XG4gICAgX3RoaXMyLmZvY3VzVmlld0ZyYW1lKCk7XG4gIH07XG5cbiAgdGhpcy5uZXh0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgX3RoaXMyLnRyYWNrLm5leHQoKTtcbiAgICBfdGhpczIuZm9jdXNWaWV3RnJhbWUoKTtcbiAgfTtcblxuICB0aGlzLmhhbmRsZU1vdXNlQWN0aXZpdHkgPSByYWZTY2hlZHVsZXIoZnVuY3Rpb24gKCkge1xuICAgIGNsZWFyVGltZW91dChfdGhpczIudGltZXIpO1xuXG4gICAgaWYgKF90aGlzMi5zdGF0ZS5pbnRlcmFjdGlvbklzSWRsZSkge1xuICAgICAgX3RoaXMyLnNldFN0YXRlKHsgaW50ZXJhY3Rpb25Jc0lkbGU6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIF90aGlzMi50aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzMi5tb3VudGVkKSB7XG4gICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7IGludGVyYWN0aW9uSXNJZGxlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0sIF90aGlzMi5wcm9wcy5oaWRlQ29udHJvbHNXaGVuSWRsZSk7XG4gIH0pO1xuXG4gIHRoaXMuaGFuZGxlVmlld0NoYW5nZSA9IGZ1bmN0aW9uIChpbmRpY2llcykge1xuICAgIHZhciB0cmFja1Byb3BzID0gX3RoaXMyLnByb3BzLnRyYWNrUHJvcHM7XG5cbiAgICAvLyBzaW1wbGlmeSBieSBlbmZvcmNpbmcgbnVtYmVyXG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gaW5kaWNpZXNbMF07XG5cbiAgICBfdGhpczIuc2V0U3RhdGUoeyBjdXJyZW50SW5kZXg6IGN1cnJlbnRJbmRleCB9KTtcblxuICAgIC8vIGNhbGwgdGhlIGNvbnN1bWVyJ3Mgb25WaWV3Q2hhbmdlIGZuXG4gICAgaWYgKHRyYWNrUHJvcHMgJiYgdHJhY2tQcm9wcy5vblZpZXdDaGFuZ2UpIHtcbiAgICAgIHRyYWNrUHJvcHMub25WaWV3Q2hhbmdlKGN1cnJlbnRJbmRleCk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMucmVuZGVyTmF2aWdhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2dldEZvcm1hdHRlcnMgPSBfdGhpczIuZ2V0Rm9ybWF0dGVycygpLFxuICAgICAgICBnZXROZXh0TGFiZWwgPSBfZ2V0Rm9ybWF0dGVycy5nZXROZXh0TGFiZWwsXG4gICAgICAgIGdldFByZXZMYWJlbCA9IF9nZXRGb3JtYXR0ZXJzLmdldFByZXZMYWJlbCxcbiAgICAgICAgZ2V0TmV4dFRpdGxlID0gX2dldEZvcm1hdHRlcnMuZ2V0TmV4dFRpdGxlLFxuICAgICAgICBnZXRQcmV2VGl0bGUgPSBfZ2V0Rm9ybWF0dGVycy5nZXRQcmV2VGl0bGU7XG5cbiAgICB2YXIgX2NvbXBvbmVudHMyID0gX3RoaXMyLmNvbXBvbmVudHMsXG4gICAgICAgIE5hdmlnYXRpb24gPSBfY29tcG9uZW50czIuTmF2aWdhdGlvbixcbiAgICAgICAgTmF2aWdhdGlvblByZXYgPSBfY29tcG9uZW50czIuTmF2aWdhdGlvblByZXYsXG4gICAgICAgIE5hdmlnYXRpb25OZXh0ID0gX2NvbXBvbmVudHMyLk5hdmlnYXRpb25OZXh0O1xuICAgIHZhciBjb21tb25Qcm9wcyA9IF90aGlzMi5jb21tb25Qcm9wcztcblxuXG4gICAgdmFyIHNob3dQcmV2ID0gX3RoaXMyLmhhc1ByZXZpb3VzVmlldygpO1xuICAgIHZhciBzaG93TmV4dCA9IF90aGlzMi5oYXNOZXh0VmlldygpO1xuICAgIHZhciBzaG93TmF2ID0gKHNob3dQcmV2IHx8IHNob3dOZXh0KSAmJiBOYXZpZ2F0aW9uO1xuXG4gICAgcmV0dXJuIHNob3dOYXYgPyBnbGFtKFxuICAgICAgTmF2aWdhdGlvbixcbiAgICAgIGNvbW1vblByb3BzLFxuICAgICAgc2hvd1ByZXYgJiYgZ2xhbShOYXZpZ2F0aW9uUHJldiwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGFsaWduOiAnbGVmdCcsXG4gICAgICAgIGlubmVyUHJvcHM6IHtcbiAgICAgICAgICAnYXJpYS1sYWJlbCc6IGdldFByZXZMYWJlbChjb21tb25Qcm9wcyksXG4gICAgICAgICAgb25DbGljazogX3RoaXMyLnByZXYsXG4gICAgICAgICAgdGl0bGU6IGdldFByZXZUaXRsZShjb21tb25Qcm9wcylcbiAgICAgICAgfVxuICAgICAgfSkpLFxuICAgICAgc2hvd05leHQgJiYgZ2xhbShOYXZpZ2F0aW9uTmV4dCwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGFsaWduOiAncmlnaHQnLFxuICAgICAgICBpbm5lclByb3BzOiB7XG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBnZXROZXh0TGFiZWwoY29tbW9uUHJvcHMpLFxuICAgICAgICAgIG9uQ2xpY2s6IF90aGlzMi5uZXh0LFxuICAgICAgICAgIHRpdGxlOiBnZXROZXh0VGl0bGUoY29tbW9uUHJvcHMpXG4gICAgICAgIH1cbiAgICAgIH0pKVxuICAgICkgOiBudWxsO1xuICB9O1xuXG4gIHRoaXMucmVuZGVyRm9vdGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfY29tcG9uZW50czMgPSBfdGhpczIuY29tcG9uZW50cyxcbiAgICAgICAgRm9vdGVyID0gX2NvbXBvbmVudHMzLkZvb3RlcixcbiAgICAgICAgRm9vdGVyQ2FwdGlvbiA9IF9jb21wb25lbnRzMy5Gb290ZXJDYXB0aW9uLFxuICAgICAgICBGb290ZXJDb3VudCA9IF9jb21wb25lbnRzMy5Gb290ZXJDb3VudDtcbiAgICB2YXIgY29tbW9uUHJvcHMgPSBfdGhpczIuY29tbW9uUHJvcHM7XG5cblxuICAgIHJldHVybiBGb290ZXIgPyBnbGFtKEZvb3RlciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIENhcHRpb246IEZvb3RlckNhcHRpb24sXG4gICAgICAgIENvdW50OiBGb290ZXJDb3VudFxuICAgICAgfSxcbiAgICAgIGlubmVyUHJvcHM6IHsgaW5uZXJSZWY6IF90aGlzMi5nZXRGb290ZXIgfVxuICAgIH0pKSA6IG51bGw7XG4gIH07XG5cbiAgdGhpcy5yZW5kZXJIZWFkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9jb21wb25lbnRzNCA9IF90aGlzMi5jb21wb25lbnRzLFxuICAgICAgICBIZWFkZXIgPSBfY29tcG9uZW50czQuSGVhZGVyLFxuICAgICAgICBIZWFkZXJDbG9zZSA9IF9jb21wb25lbnRzNC5IZWFkZXJDbG9zZSxcbiAgICAgICAgSGVhZGVyRnVsbHNjcmVlbiA9IF9jb21wb25lbnRzNC5IZWFkZXJGdWxsc2NyZWVuO1xuXG4gICAgdmFyIF9nZXRGb3JtYXR0ZXJzMiA9IF90aGlzMi5nZXRGb3JtYXR0ZXJzKCksXG4gICAgICAgIGdldENsb3NlTGFiZWwgPSBfZ2V0Rm9ybWF0dGVyczIuZ2V0Q2xvc2VMYWJlbCxcbiAgICAgICAgZ2V0RnVsbHNjcmVlbkxhYmVsID0gX2dldEZvcm1hdHRlcnMyLmdldEZ1bGxzY3JlZW5MYWJlbDtcblxuICAgIHZhciBjb21tb25Qcm9wcyA9IF90aGlzMi5jb21tb25Qcm9wcztcblxuXG4gICAgcmV0dXJuIEhlYWRlciA/IGdsYW0oSGVhZGVyLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgIGdldENsb3NlTGFiZWw6IGdldENsb3NlTGFiZWwsXG4gICAgICBnZXRGdWxsc2NyZWVuTGFiZWw6IGdldEZ1bGxzY3JlZW5MYWJlbCxcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQ2xvc2VCdXR0b246IEhlYWRlckNsb3NlLFxuICAgICAgICBGdWxsc2NyZWVuQnV0dG9uOiBIZWFkZXJGdWxsc2NyZWVuXG4gICAgICB9LFxuICAgICAgZGF0YTogX3RoaXMyLmdldFZpZXdEYXRhKCksXG4gICAgICBpbm5lclByb3BzOiB7IGlubmVyUmVmOiBfdGhpczIuZ2V0SGVhZGVyIH1cbiAgICB9KSkgOiBudWxsO1xuICB9O1xufTtcblxudmFyIEZpcnN0Q2hpbGQgPSBmdW5jdGlvbiBGaXJzdENoaWxkKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIENoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pWzBdIHx8IG51bGw7XG59O1xuXG52YXIgTW9kYWxHYXRld2F5ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgaW5oZXJpdHMoTW9kYWxHYXRld2F5LCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBNb2RhbEdhdGV3YXkoKSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgTW9kYWxHYXRld2F5KTtcbiAgICByZXR1cm4gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoTW9kYWxHYXRld2F5Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTW9kYWxHYXRld2F5KSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICBjcmVhdGVDbGFzcyhNb2RhbEdhdGV3YXksIFt7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHRhcmdldCA9IF9wcm9wcy50YXJnZXQsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfcHJvcHMuY2hpbGRyZW47XG5cbiAgICAgIHJldHVybiBjcmVhdGVQb3J0YWwoUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXAsIHsgY29tcG9uZW50OiBGaXJzdENoaWxkLCBjaGlsZHJlbjogY2hpbGRyZW4gfSksIHRhcmdldCk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBNb2RhbEdhdGV3YXk7XG59KENvbXBvbmVudCk7XG5cbk1vZGFsR2F0ZXdheS5kZWZhdWx0UHJvcHMgPSB7XG4gIHRhcmdldDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudC5ib2R5IDogbnVsbFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ2Fyb3VzZWw7XG5leHBvcnQgeyBNb2RhbCwgTW9kYWxHYXRld2F5LCBjYXJvdXNlbENvbXBvbmVudHMsIG1vZGFsQ29tcG9uZW50cyB9O1xuIiwiZXhwb3J0IGNvbnN0IHBob3RvcyA9IFtcbiAgICB7XG4gICAgICAgIHNyYzogcmVxdWlyZShcIi4uLy4uL2ltZy9zdGFuZGVzYW10LzEuanBnXCIpLmRlZmF1bHQsXG4gICAgICAgIHdpZHRoOiAzMDI0LFxuICAgICAgICBoZWlnaHQ6IDQwMzJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgc3JjOiByZXF1aXJlKFwiLi4vLi4vaW1nL3N0YW5kZXNhbXQvMi5qcGdcIikuZGVmYXVsdCxcbiAgICAgICAgd2lkdGg6IDQ5MjgsXG4gICAgICAgIGhlaWdodDogMzI2NFxuICAgIH0sXG4gICAge1xuICAgICAgICBzcmM6IHJlcXVpcmUoXCIuLi8uLi9pbWcvc3RhbmRlc2FtdC8zLmpwZ1wiKS5kZWZhdWx0LFxuICAgICAgICB3aWR0aDogNDkyOCxcbiAgICAgICAgaGVpZ2h0OiAzMjY0XG4gICAgfSxcbiAgICB7XG4gICAgICAgIHNyYzogcmVxdWlyZShcIi4uLy4uL2ltZy9zdGFuZGVzYW10LzQuanBnXCIpLmRlZmF1bHQsXG4gICAgICAgIHdpZHRoOiAzMjY0LFxuICAgICAgICBoZWlnaHQ6IDQ5MjhcbiAgICB9LFxuICAgIHtcbiAgICAgICAgc3JjOiByZXF1aXJlKFwiLi4vLi4vaW1nL3N0YW5kZXNhbXQvNS5qcGdcIikuZGVmYXVsdCxcbiAgICAgICAgd2lkdGg6IDMyNjQsXG4gICAgICAgIGhlaWdodDogNDkyOFxuICAgIH0sXG4gICAge1xuICAgICAgICBzcmM6IHJlcXVpcmUoXCIuLi8uLi9pbWcvc3RhbmRlc2FtdC82LmpwZ1wiKS5kZWZhdWx0LFxuICAgICAgICB3aWR0aDogNDkyOCxcbiAgICAgICAgaGVpZ2h0OiAzMjY0XG4gICAgfSxcbiAgICB7XG4gICAgICAgIHNyYzogcmVxdWlyZShcIi4uLy4uL2ltZy9zdGFuZGVzYW10LzcuanBnXCIpLmRlZmF1bHQsXG4gICAgICAgIHdpZHRoOiAzMjY0LFxuICAgICAgICBoZWlnaHQ6IDQ5MjhcbiAgICB9LFxuICAgIHtcbiAgICAgICAgc3JjOiByZXF1aXJlKFwiLi4vLi4vaW1nL3N0YW5kZXNhbXQvOC5qcGdcIikuZGVmYXVsdCxcbiAgICAgICAgd2lkdGg6IDQ5MjgsXG4gICAgICAgIGhlaWdodDogMzI2NFxuICAgIH0sXG4gICAge1xuICAgICAgICBzcmM6IHJlcXVpcmUoXCIuLi8uLi9pbWcvc3RhbmRlc2FtdC85LmpwZ1wiKS5kZWZhdWx0LFxuICAgICAgICB3aWR0aDogNDkyOCxcbiAgICAgICAgaGVpZ2h0OiAzMjY0XG4gICAgfSxcbiAgICB7XG4gICAgICAgIHNyYzogcmVxdWlyZShcIi4uLy4uL2ltZy9zdGFuZGVzYW10LzEwLmpwZ1wiKS5kZWZhdWx0LFxuICAgICAgICB3aWR0aDogNDkyOCxcbiAgICAgICAgaGVpZ2h0OiAzMjY0XG4gICAgfSxcbiAgICB7XG4gICAgICAgIHNyYzogcmVxdWlyZShcIi4uLy4uL2ltZy9zdGFuZGVzYW10LzExLmpwZ1wiKS5kZWZhdWx0LFxuICAgICAgICB3aWR0aDogMzI5OSxcbiAgICAgICAgaGVpZ2h0OiAyMjA5XG4gICAgfSxcbiAgICB7XG4gICAgICAgIHNyYzogcmVxdWlyZShcIi4uLy4uL2ltZy9zdGFuZGVzYW10LzEyLmpwZ1wiKS5kZWZhdWx0LFxuICAgICAgICB3aWR0aDogMjU5MixcbiAgICAgICAgaGVpZ2h0OiAzODcyXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHNyYzogcmVxdWlyZShcIi4uLy4uL2ltZy9zdGFuZGVzYW10LzEzLmpwZ1wiKS5kZWZhdWx0LFxuICAgICAgICB3aWR0aDogMzg3MixcbiAgICAgICAgaGVpZ2h0OiAyNTkyXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHNyYzogcmVxdWlyZShcIi4uLy4uL2ltZy9zdGFuZGVzYW10LzE0LmpwZ1wiKS5kZWZhdWx0LFxuICAgICAgICB3aWR0aDogMzg3MixcbiAgICAgICAgaGVpZ2h0OiAyNTkyXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHNyYzogcmVxdWlyZShcIi4uLy4uL2ltZy9zdGFuZGVzYW10LzE1LmpwZ1wiKS5kZWZhdWx0LFxuICAgICAgICB3aWR0aDogMzg3MixcbiAgICAgICAgaGVpZ2h0OiAyNTkyXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHNyYzogcmVxdWlyZShcIi4uLy4uL2ltZy9zdGFuZGVzYW10LzE2LmpwZ1wiKS5kZWZhdWx0LFxuICAgICAgICB3aWR0aDogMzg3MixcbiAgICAgICAgaGVpZ2h0OiAyNTkyXG4gICAgfSxcbl1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5jb25zdCBpbWdXaXRoQ2xpY2sgPSB7IGN1cnNvcjogJ3BvaW50ZXInIH07XG5cbmNvbnN0IFBob3RvID0gKHsgaW5kZXgsIG9uQ2xpY2ssIHBob3RvLCBtYXJnaW4sIGRpcmVjdGlvbiwgdG9wLCBsZWZ0LCBrZXkgfSkgPT4ge1xuICBjb25zdCBpbWdTdHlsZSA9IHsgbWFyZ2luOiBtYXJnaW4sIGRpc3BsYXk6ICdibG9jaycgfTtcbiAgaW1nU3R5bGUud2lkdGggPSBwaG90by53aWR0aCtcInB4XCI7XG4gIGltZ1N0eWxlLmhlaWdodD1waG90by5oZWlnaHQrXCJweFwiO1xuICBpZiAoZGlyZWN0aW9uID09PSAnY29sdW1uJykge1xuICAgIGltZ1N0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBpbWdTdHlsZS5sZWZ0ID0gbGVmdDtcbiAgICBpbWdTdHlsZS50b3AgPSB0b3A7XG4gIH1cblxuICBjb25zdCBoYW5kbGVDbGljayA9IGV2ZW50ID0+IHtcbiAgICBvbkNsaWNrKGV2ZW50LCB7IHBob3RvLCBpbmRleCB9KTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxpbWdcbiAgICAgIGtleT17a2V5fVxuICAgICAgc3R5bGU9e29uQ2xpY2sgPyB7IC4uLmltZ1N0eWxlLCAuLi5pbWdXaXRoQ2xpY2sgfSA6IGltZ1N0eWxlfVxuICAgICAgey4uLnBob3RvfVxuICAgICAgb25DbGljaz17b25DbGljayA/IGhhbmRsZUNsaWNrIDogbnVsbH1cbiAgICAvPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHBob3RvUHJvcFR5cGUgPSBQcm9wVHlwZXMuc2hhcGUoe1xuICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNyYzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB3aWR0aDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgYWx0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgc3JjU2V0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuYXJyYXldKSxcbiAgc2l6ZXM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5hcnJheV0pLFxufSk7XG5cblBob3RvLnByb3BUeXBlcyA9IHtcbiAgaW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIHBob3RvOiBwaG90b1Byb3BUeXBlLmlzUmVxdWlyZWQsXG4gIG1hcmdpbjogUHJvcFR5cGVzLm51bWJlcixcbiAgdG9wOiBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzLmRpcmVjdGlvbiA9PT0gJ2NvbHVtbicgJiYgdHlwZW9mIHByb3BzLnRvcCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ3RvcCBpcyBhIHJlcXVpcmVkIG51bWJlciB3aGVuIGRpcmVjdGlvbiBpcyBzZXQgdG8gYGNvbHVtbmAnKTtcbiAgICB9XG4gIH0sXG4gIGxlZnQ6IHByb3BzID0+IHtcbiAgICBpZiAocHJvcHMuZGlyZWN0aW9uID09PSAnY29sdW1uJyAmJiB0eXBlb2YgcHJvcHMubGVmdCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2xlZnQgaXMgYSByZXF1aXJlZCBudW1iZXIgd2hlbiBkaXJlY3Rpb24gaXMgc2V0IHRvIGBjb2x1bW5gJyk7XG4gICAgfVxuICB9LFxuICBkaXJlY3Rpb246IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBQaG90bztcbiIsImV4cG9ydCBjb25zdCByb3VuZCA9ICh2YWx1ZSwgZGVjaW1hbHMpID0+IHtcbiAgaWYgKCFkZWNpbWFscykgZGVjaW1hbHMgPSAwO1xuICByZXR1cm4gTnVtYmVyKE1hdGgucm91bmQodmFsdWUgKyAnZScgKyBkZWNpbWFscykgKyAnZS0nICsgZGVjaW1hbHMpO1xufTtcbiIsImltcG9ydCB7IHJvdW5kIH0gZnJvbSAnLi4vdXRpbHMvcm91bmQnO1xuXG4vLyBjb21wdXRlIHNpemVzIGZvciBjb2x1bW4gZGlyZWN0ZWQgbGF5b3V0c1xuZXhwb3J0IGNvbnN0IGNvbXB1dGVDb2x1bW5MYXlvdXQgPSAoeyBwaG90b3MsIGNvbHVtbnMsIGNvbnRhaW5lcldpZHRoLCBtYXJnaW4gfSkgPT4ge1xuICAvLyBjYWxjdWxhdGUgZWFjaCBjb2xXaWR0aCBiYXNlZCBvbiB0b3RhbCB3aWR0aCBhbmQgY29sdW1uIGFtb3VudFxuICBsZXQgY29sV2lkdGggPSAoY29udGFpbmVyV2lkdGggLSBtYXJnaW4gKiAyICogY29sdW1ucykgLyBjb2x1bW5zO1xuXG4gIC8vIG1hcCB0aHJvdWdoIGVhY2ggcGhvdG8gdG8gYXNzaWduIGFkanVzdGVkIGhlaWdodCBhbmQgd2lkdGggYmFzZWQgb24gY29sV2lkdGhcbiAgY29uc3QgcGhvdG9zV2l0aFNpemVzID0gcGhvdG9zLm1hcChwaG90byA9PiB7XG4gICAgY29uc3QgbmV3SGVpZ2h0ID0gcGhvdG8uaGVpZ2h0IC8gcGhvdG8ud2lkdGggKiBjb2xXaWR0aDtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucGhvdG8sXG4gICAgICB3aWR0aDogcm91bmQoY29sV2lkdGgsIDEpLFxuICAgICAgaGVpZ2h0OiByb3VuZChuZXdIZWlnaHQsIDEpLFxuICAgIH07XG4gIH0pO1xuXG4gIC8vIHN0b3JlIGFsbCBwb3NzaWJsZSBsZWZ0IHBvc2l0aW9uc1xuICAvLyBhbmQgY3VycmVudCB0b3AgcG9zaXRpb25zIGZvciBlYWNoIGNvbHVtblxuICBjb25zdCBjb2xMZWZ0UG9zaXRpb25zID0gW107XG4gIGNvbnN0IGNvbEN1cnJUb3BQb3NpdGlvbnMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zOyBpKyspIHtcbiAgICBjb2xMZWZ0UG9zaXRpb25zW2ldID0gcm91bmQoaSAqIChjb2xXaWR0aCArIG1hcmdpbiAqIDIpLCAxKTtcbiAgICBjb2xDdXJyVG9wUG9zaXRpb25zW2ldID0gMDtcbiAgfVxuXG4gIC8vIG1hcCB0aHJvdWdoIGVhY2ggcGhvdG8sIHRoZW4gcmVkdWNlIHRocnUgZWFjaCBcImNvbHVtblwiXG4gIC8vIGZpbmQgY29sdW1uIHdpdGggdGhlIHNtYWxsZXN0IGhlaWdodCBhbmQgYXNzaWduIHRvIHBob3RvJ3MgJ3RvcCdcbiAgLy8gdXBkYXRlIHRoYXQgY29sdW1uJ3MgaGVpZ2h0IHdpdGggdGhpcyBwaG90bydzIGhlaWdodFxuICBjb25zdCBwaG90b3NQb3NpdGlvbmVkID0gcGhvdG9zV2l0aFNpemVzLm1hcChwaG90byA9PiB7XG4gICAgY29uc3Qgc21hbGxlc3RDb2wgPSBjb2xDdXJyVG9wUG9zaXRpb25zLnJlZHVjZSgoYWNjLCBpdGVtLCBpKSA9PiB7XG4gICAgICBhY2MgPSBpdGVtIDwgY29sQ3VyclRvcFBvc2l0aW9uc1thY2NdID8gaSA6IGFjYztcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgMCk7XG5cbiAgICBwaG90by50b3AgPSBjb2xDdXJyVG9wUG9zaXRpb25zW3NtYWxsZXN0Q29sXTtcbiAgICBwaG90by5sZWZ0ID0gY29sTGVmdFBvc2l0aW9uc1tzbWFsbGVzdENvbF07XG4gICAgY29sQ3VyclRvcFBvc2l0aW9uc1tzbWFsbGVzdENvbF0gPSBjb2xDdXJyVG9wUG9zaXRpb25zW3NtYWxsZXN0Q29sXSArIHBob3RvLmhlaWdodCArIG1hcmdpbiAqIDI7XG5cbiAgICAvLyBzdG9yZSB0aGUgdGFsbGVzdCBjb2wgdG8gdXNlIGZvciBnYWxsZXJ5IGhlaWdodCBiZWNhdXNlIG9mIGFicyBwb3NpdGlvbmVkIGVsZW1lbnRzXG4gICAgY29uc3QgdGFsbGVzdENvbCA9IGNvbEN1cnJUb3BQb3NpdGlvbnMucmVkdWNlKChhY2MsIGl0ZW0sIGkpID0+IHtcbiAgICAgIGFjYyA9IGl0ZW0gPiBjb2xDdXJyVG9wUG9zaXRpb25zW2FjY10gPyBpIDogYWNjO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCAwKTtcbiAgICBwaG90by5jb250YWluZXJIZWlnaHQgPSBjb2xDdXJyVG9wUG9zaXRpb25zW3RhbGxlc3RDb2xdO1xuICAgIHJldHVybiBwaG90bztcbiAgfSk7XG4gIHJldHVybiBwaG90b3NQb3NpdGlvbmVkO1xufTtcbiIsImltcG9ydCB7IHJvdW5kIH0gZnJvbSAnLi9yb3VuZCc7XG5cbi8vIHJldHVybiB0d28gZGVjaW1hbCBwbGFjZXMgcm91bmRlZCBudW1iZXJcbmV4cG9ydCBjb25zdCByYXRpbyA9ICh7IHdpZHRoLCBoZWlnaHQgfSkgPT4gcm91bmQod2lkdGggLyBoZWlnaHQsIDIpO1xuIiwiLypcbkNvcHlyaWdodCAyMDA3LTIwMTMgTWFyaWpuIEhhdmVyYmVrZSBmcmluIFwiRWxvcXVlbnQgSmF2YXNjcmlwdCwgMXN0IEVkaXRpb25cIlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuXG5leHBvcnQgZnVuY3Rpb24gQmluYXJ5SGVhcChzY29yZUZ1bmN0aW9uKSB7XG4gIHRoaXMuY29udGVudCA9IFtdO1xuICB0aGlzLnNjb3JlRnVuY3Rpb24gPSBzY29yZUZ1bmN0aW9uO1xufVxuXG5CaW5hcnlIZWFwLnByb3RvdHlwZSA9IHtcbiAgcHVzaDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIC8vIEFkZCB0aGUgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuXG4gICAgdGhpcy5jb250ZW50LnB1c2goZWxlbWVudCk7XG4gICAgLy8gQWxsb3cgaXQgdG8gYnViYmxlIHVwLlxuICAgIHRoaXMuYnViYmxlVXAodGhpcy5jb250ZW50Lmxlbmd0aCAtIDEpO1xuICB9LFxuXG4gIHBvcDogZnVuY3Rpb24oKSB7XG4gICAgLy8gU3RvcmUgdGhlIGZpcnN0IGVsZW1lbnQgc28gd2UgY2FuIHJldHVybiBpdCBsYXRlci5cbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5jb250ZW50WzBdO1xuICAgIC8vIEdldCB0aGUgZWxlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheS5cbiAgICB2YXIgZW5kID0gdGhpcy5jb250ZW50LnBvcCgpO1xuICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgZWxlbWVudHMgbGVmdCwgcHV0IHRoZSBlbmQgZWxlbWVudCBhdCB0aGVcbiAgICAvLyBzdGFydCwgYW5kIGxldCBpdCBzaW5rIGRvd24uXG4gICAgaWYgKHRoaXMuY29udGVudC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvbnRlbnRbMF0gPSBlbmQ7XG4gICAgICB0aGlzLnNpbmtEb3duKDApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuXG4gIHJlbW92ZTogZnVuY3Rpb24obm9kZSkge1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmNvbnRlbnQubGVuZ3RoO1xuICAgIC8vIFRvIHJlbW92ZSBhIHZhbHVlLCB3ZSBtdXN0IHNlYXJjaCB0aHJvdWdoIHRoZSBhcnJheSB0byBmaW5kXG4gICAgLy8gaXQuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY29udGVudFtpXSAhPSBub2RlKSBjb250aW51ZTtcbiAgICAgIC8vIFdoZW4gaXQgaXMgZm91bmQsIHRoZSBwcm9jZXNzIHNlZW4gaW4gJ3BvcCcgaXMgcmVwZWF0ZWRcbiAgICAgIC8vIHRvIGZpbGwgdXAgdGhlIGhvbGUuXG4gICAgICB2YXIgZW5kID0gdGhpcy5jb250ZW50LnBvcCgpO1xuICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgd2UgcG9wcGVkIHdhcyB0aGUgb25lIHdlIG5lZWRlZCB0byByZW1vdmUsXG4gICAgICAvLyB3ZSdyZSBkb25lLlxuICAgICAgaWYgKGkgPT0gbGVuZ3RoIC0gMSkgYnJlYWs7XG4gICAgICAvLyBPdGhlcndpc2UsIHdlIHJlcGxhY2UgdGhlIHJlbW92ZWQgZWxlbWVudCB3aXRoIHRoZSBwb3BwZWRcbiAgICAgIC8vIG9uZSwgYW5kIGFsbG93IGl0IHRvIGZsb2F0IHVwIG9yIHNpbmsgZG93biBhcyBhcHByb3ByaWF0ZS5cbiAgICAgIHRoaXMuY29udGVudFtpXSA9IGVuZDtcbiAgICAgIHRoaXMuYnViYmxlVXAoaSk7XG4gICAgICB0aGlzLnNpbmtEb3duKGkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9LFxuXG4gIHNpemU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQubGVuZ3RoO1xuICB9LFxuXG4gIGJ1YmJsZVVwOiBmdW5jdGlvbihuKSB7XG4gICAgLy8gRmV0Y2ggdGhlIGVsZW1lbnQgdGhhdCBoYXMgdG8gYmUgbW92ZWQuXG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLmNvbnRlbnRbbl0sXG4gICAgICBzY29yZSA9IHRoaXMuc2NvcmVGdW5jdGlvbihlbGVtZW50KTtcbiAgICAvLyBXaGVuIGF0IDAsIGFuIGVsZW1lbnQgY2FuIG5vdCBnbyB1cCBhbnkgZnVydGhlci5cbiAgICB3aGlsZSAobiA+IDApIHtcbiAgICAgIC8vIENvbXB1dGUgdGhlIHBhcmVudCBlbGVtZW50J3MgaW5kZXgsIGFuZCBmZXRjaCBpdC5cbiAgICAgIHZhciBwYXJlbnROID0gTWF0aC5mbG9vcigobiArIDEpIC8gMikgLSAxLFxuICAgICAgICBwYXJlbnQgPSB0aGlzLmNvbnRlbnRbcGFyZW50Tl07XG4gICAgICAvLyBJZiB0aGUgcGFyZW50IGhhcyBhIGxlc3NlciBzY29yZSwgdGhpbmdzIGFyZSBpbiBvcmRlciBhbmQgd2VcbiAgICAgIC8vIGFyZSBkb25lLlxuICAgICAgaWYgKHNjb3JlID49IHRoaXMuc2NvcmVGdW5jdGlvbihwYXJlbnQpKSBicmVhaztcblxuICAgICAgLy8gT3RoZXJ3aXNlLCBzd2FwIHRoZSBwYXJlbnQgd2l0aCB0aGUgY3VycmVudCBlbGVtZW50IGFuZFxuICAgICAgLy8gY29udGludWUuXG4gICAgICB0aGlzLmNvbnRlbnRbcGFyZW50Tl0gPSBlbGVtZW50O1xuICAgICAgdGhpcy5jb250ZW50W25dID0gcGFyZW50O1xuICAgICAgbiA9IHBhcmVudE47XG4gICAgfVxuICB9LFxuXG4gIHNpbmtEb3duOiBmdW5jdGlvbihuKSB7XG4gICAgLy8gTG9vayB1cCB0aGUgdGFyZ2V0IGVsZW1lbnQgYW5kIGl0cyBzY29yZS5cbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5jb250ZW50Lmxlbmd0aCxcbiAgICAgIGVsZW1lbnQgPSB0aGlzLmNvbnRlbnRbbl0sXG4gICAgICBlbGVtU2NvcmUgPSB0aGlzLnNjb3JlRnVuY3Rpb24oZWxlbWVudCk7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gQ29tcHV0ZSB0aGUgaW5kaWNlcyBvZiB0aGUgY2hpbGQgZWxlbWVudHMuXG4gICAgICB2YXIgY2hpbGQyTiA9IChuICsgMSkgKiAyLFxuICAgICAgICBjaGlsZDFOID0gY2hpbGQyTiAtIDE7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gc3RvcmUgdGhlIG5ldyBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCxcbiAgICAgIC8vIGlmIGFueS5cbiAgICAgIHZhciBzd2FwID0gbnVsbDtcbiAgICAgIC8vIElmIHRoZSBmaXJzdCBjaGlsZCBleGlzdHMgKGlzIGluc2lkZSB0aGUgYXJyYXkpLi4uXG4gICAgICBpZiAoY2hpbGQxTiA8IGxlbmd0aCkge1xuICAgICAgICAvLyBMb29rIGl0IHVwIGFuZCBjb21wdXRlIGl0cyBzY29yZS5cbiAgICAgICAgdmFyIGNoaWxkMSA9IHRoaXMuY29udGVudFtjaGlsZDFOXSxcbiAgICAgICAgICBjaGlsZDFTY29yZSA9IHRoaXMuc2NvcmVGdW5jdGlvbihjaGlsZDEpO1xuICAgICAgICAvLyBJZiB0aGUgc2NvcmUgaXMgbGVzcyB0aGFuIG91ciBlbGVtZW50J3MsIHdlIG5lZWQgdG8gc3dhcC5cbiAgICAgICAgaWYgKGNoaWxkMVNjb3JlIDwgZWxlbVNjb3JlKSBzd2FwID0gY2hpbGQxTjtcbiAgICAgIH1cbiAgICAgIC8vIERvIHRoZSBzYW1lIGNoZWNrcyBmb3IgdGhlIG90aGVyIGNoaWxkLlxuICAgICAgaWYgKGNoaWxkMk4gPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGNoaWxkMiA9IHRoaXMuY29udGVudFtjaGlsZDJOXSxcbiAgICAgICAgICBjaGlsZDJTY29yZSA9IHRoaXMuc2NvcmVGdW5jdGlvbihjaGlsZDIpO1xuICAgICAgICBpZiAoY2hpbGQyU2NvcmUgPCAoc3dhcCA9PSBudWxsID8gZWxlbVNjb3JlIDogY2hpbGQxU2NvcmUpKSBzd2FwID0gY2hpbGQyTjtcbiAgICAgIH1cblxuICAgICAgLy8gTm8gbmVlZCB0byBzd2FwIGZ1cnRoZXIsIHdlIGFyZSBkb25lLlxuICAgICAgaWYgKHN3YXAgPT0gbnVsbCkgYnJlYWs7XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgc3dhcCBhbmQgY29udGludWUuXG4gICAgICB0aGlzLmNvbnRlbnRbbl0gPSB0aGlzLmNvbnRlbnRbc3dhcF07XG4gICAgICB0aGlzLmNvbnRlbnRbc3dhcF0gPSBlbGVtZW50O1xuICAgICAgbiA9IHN3YXA7XG4gICAgfVxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQmluYXJ5SGVhcDtcbiIsImltcG9ydCB7IEJpbmFyeUhlYXAgfSBmcm9tICcuL2JpbmFyeS1oZWFwJztcblxuY29uc3QgYnVpbGRQcmVjZWRlbnRzTWFwID0gKGdyYXBoLCBzdGFydE5vZGUsIGVuZE5vZGUpID0+IHtcbiAgLy8gc3RvcmUgdGhlIHByZXZpb3VzIHZlcnRleCBvZiB0aGUgc2hvcnRlc3QgcGF0aCBvZiBhcnJpdmFsXG4gIGNvbnN0IHByZWNlZGVudHNNYXAgPSB7fTtcblxuICAvLyBzdG9yZSBub2RlcyBhbHJlYWR5IHZpc2l0ZWRcbiAgY29uc3QgdmlzaXRlZCA9IHt9O1xuXG4gIC8vIHN0b3JlL3VwZGF0ZSBvbmx5IHRoZSBzaG9ydGVzdCBlZGdlIHdlaWdodHMgbWVhc3VyZWRcbiAgLy8gdGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyBvYmplY3QgaXMgY29uc3RhbnQgdGltZSBsb29rdXAgdnMuIGJpbmFyeSBoZWFwIGxvb2t1cCBPKG4pXG4gIGNvbnN0IHN0b3JlZFNob3J0ZXN0UGF0aHMgPSB7fTtcbiAgc3RvcmVkU2hvcnRlc3RQYXRoc1tzdGFydE5vZGVdID0gMDtcblxuICAvLyBwcmlvcml0eSBxdWV1ZSBvZiBBTEwgbm9kZXMgYW5kIHN0b3JlZFNob3J0ZXN0UGF0aHNcbiAgLy8gZG9uJ3QgYm90aGVyIHRvIGRlbGV0ZSB0aGVtIGJlY2F1c2UgaXQncyBmYXN0ZXIgdG8gbG9vayBhdCB2aXNpdGVkP1xuICBjb25zdCBwUXVldWUgPSBuZXcgQmluYXJ5SGVhcChmdW5jdGlvbihuKSB7XG4gICAgcmV0dXJuIG4ud2VpZ2h0O1xuICB9KTtcbiAgcFF1ZXVlLnB1c2goeyBpZDogc3RhcnROb2RlLCB3ZWlnaHQ6IDAgfSk7XG5cbiAgd2hpbGUgKHBRdWV1ZS5zaXplKCkpIHtcbiAgICAvLyBwb3Agbm9kZSB3aXRoIHNob3J0ZXN0IHRvdGFsIHdlaWdodCBmcm9tIHN0YXJ0IG5vZGVcbiAgICBjb25zdCBzaG9ydGVzdE5vZGUgPSBwUXVldWUucG9wKCk7XG4gICAgY29uc3Qgc2hvcnRlc3ROb2RlSWQgPSBzaG9ydGVzdE5vZGUuaWQ7XG5cbiAgICAvLyBpZiBhbHJlYWR5IHZpc2l0ZWQsIGNvbnRpbnVlXG4gICAgaWYgKHZpc2l0ZWRbc2hvcnRlc3ROb2RlSWRdKSBjb250aW51ZTtcblxuICAgIC8vIHZpc2l0IG5laWdoYm9yaW5nIG5vZGVzXG4gICAgY29uc3QgbmVpZ2hib3JpbmdOb2RlcyA9IGdyYXBoKHNob3J0ZXN0Tm9kZUlkKSB8fCB7fTtcbiAgICB2aXNpdGVkW3Nob3J0ZXN0Tm9kZUlkXSA9IDE7XG5cbiAgICAvLyBtZWV0IHRoZSBuZWlnaGJvcnMsIGxvb2tpbmcgZm9yIHNob3J0ZXIgcGF0aHNcbiAgICBmb3IgKGxldCBuZWlnaGJvciBpbiBuZWlnaGJvcmluZ05vZGVzKSB7XG4gICAgICAvLyB3ZWlnaHQgb2YgcGF0aCBmcm9tIHN0YXJ0Tm9kZSB0byB0aGlzIG5laWdoYm9yXG4gICAgICBjb25zdCBuZXdUb3RhbFdlaWdodCA9IHNob3J0ZXN0Tm9kZS53ZWlnaHQgKyBuZWlnaGJvcmluZ05vZGVzW25laWdoYm9yXTtcblxuICAgICAgLy8gaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBtZWV0aW5nIHRoZSBuZWlnaGJvciBPUiBpZiB0aGUgbmV3IHRvdGFsIHdlaWdodCBmcm9tXG4gICAgICAvLyBzdGFydCBub2RlIHRvIHRoaXMgbmVpZ2hib3Igbm9kZSBpcyBncmVhdGVyIHRoYW4gdGhlIG9sZCB3ZWlnaHQgcGF0aCwgdXBkYXRlIGl0LFxuICAgICAgLy8gYW5kIHVwZGF0ZSBwcmVjZWRlbnQgbm9kZVxuICAgICAgaWYgKHR5cGVvZiBzdG9yZWRTaG9ydGVzdFBhdGhzW25laWdoYm9yXSA9PT0gJ3VuZGVmaW5lZCcgfHwgc3RvcmVkU2hvcnRlc3RQYXRoc1tuZWlnaGJvcl0gPiBuZXdUb3RhbFdlaWdodCkge1xuICAgICAgICBzdG9yZWRTaG9ydGVzdFBhdGhzW25laWdoYm9yXSA9IG5ld1RvdGFsV2VpZ2h0O1xuICAgICAgICBwUXVldWUucHVzaCh7IGlkOiBuZWlnaGJvciwgd2VpZ2h0OiBuZXdUb3RhbFdlaWdodCB9KTtcbiAgICAgICAgcHJlY2VkZW50c01hcFtuZWlnaGJvcl0gPSBzaG9ydGVzdE5vZGVJZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHN0b3JlZFNob3J0ZXN0UGF0aHNbZW5kTm9kZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBubyBwYXRoIGZyb20gJHtzdGFydE5vZGV9IHRvICR7ZW5kTm9kZX1gKTtcbiAgfVxuXG4gIHJldHVybiBwcmVjZWRlbnRzTWFwO1xufTtcblxuLy8gYnVpbGQgdGhlIHJvdXRlIGZyb20gcHJlY2VkZW50IG5vZGUgdmVydGljZXNcbmNvbnN0IGdldFBhdGhGcm9tUHJlY2VkZW50c01hcCA9IChwcmVjZWRlbnRzTWFwLCBlbmROb2RlKSA9PiB7XG4gIGNvbnN0IG5vZGVzID0gW107XG4gIGxldCBuID0gZW5kTm9kZTtcbiAgbGV0IHByZWNlZGVudDtcbiAgd2hpbGUgKG4pIHtcbiAgICBub2Rlcy5wdXNoKG4pO1xuICAgIHByZWNlZGVudCA9IHByZWNlZGVudHNNYXBbbl07XG4gICAgbiA9IHByZWNlZGVudHNNYXBbbl07XG4gIH1cbiAgcmV0dXJuIG5vZGVzLnJldmVyc2UoKTtcbn07XG5cbi8vIGJ1aWxkIHRoZSBwcmVjZWRlbnRzTWFwIGFuZCBmaW5kIHRoZSBzaG9ydGVzdCBwYXRoIGZyb20gaXRcbmV4cG9ydCBjb25zdCBmaW5kU2hvcnRlc3RQYXRoID0gKGdyYXBoLCBzdGFydE5vZGUsIGVuZE5vZGUpID0+IHtcbiAgY29uc3QgcHJlY2VkZW50c01hcCA9IGJ1aWxkUHJlY2VkZW50c01hcChncmFwaCwgc3RhcnROb2RlLCBlbmROb2RlKTtcbiAgcmV0dXJuIGdldFBhdGhGcm9tUHJlY2VkZW50c01hcChwcmVjZWRlbnRzTWFwLCBlbmROb2RlKTtcbn07XG4iLCJpbXBvcnQgeyByYXRpbyB9IGZyb20gJy4uL3V0aWxzL3JhdGlvJztcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSAnLi4vdXRpbHMvcm91bmQnO1xuaW1wb3J0IHsgZmluZFNob3J0ZXN0UGF0aCB9IGZyb20gJy4uL3V0aWxzL2RpamtzdHJhJztcblxuLy8gY29tcHV0ZSBzaXplcyBieSBjcmVhdGluZyBhIGdyYXBoIHdpdGggcm93cyBhcyBlZGdlcyBhbmQgcGhvdG8gdG8gYnJlYWsgb24gYXMgbm9kZXNcbi8vIHRvIGNhbGN1bGF0ZSB0aGUgc2luZ2xlIGJlc3QgbGF5b3V0IHVzaW5nIERpamtzdHJhJ3MgZmluZFNob3J0ZXN0UGF0XG5cbi8vIGdldCB0aGUgaGVpZ2h0IGZvciBhIHNldCBvZiBwaG90b3MgaW4gYSBwb3RlbnRpYWwgcm93XG5jb25zdCBnZXRDb21tb25IZWlnaHQgPSAocm93LCBjb250YWluZXJXaWR0aCwgbWFyZ2luKSA9PiB7XG4gIGNvbnN0IHJvd1dpZHRoID0gY29udGFpbmVyV2lkdGggLSByb3cubGVuZ3RoICogKG1hcmdpbiAqIDIpO1xuICBjb25zdCB0b3RhbEFzcGVjdFJhdGlvID0gcm93LnJlZHVjZSgoYWNjLCBwaG90bykgPT4gYWNjICsgcmF0aW8ocGhvdG8pLCAwKTtcbiAgcmV0dXJuIHJvd1dpZHRoIC8gdG90YWxBc3BlY3RSYXRpbztcbn07XG5cbi8vIGNhbGN1bGF0ZSB0aGUgY29zdCBvZiBicmVha2luZyBhdCB0aGlzIG5vZGUgKGVkZ2Ugd2VpZ2h0KVxuY29uc3QgY29zdCA9IChwaG90b3MsIGksIGosIHdpZHRoLCB0YXJnZXRIZWlnaHQsIG1hcmdpbikgPT4ge1xuICBjb25zdCByb3cgPSBwaG90b3Muc2xpY2UoaSwgaik7XG4gIGNvbnN0IGNvbW1vbkhlaWdodCA9IGdldENvbW1vbkhlaWdodChyb3csIHdpZHRoLCBtYXJnaW4pO1xuICByZXR1cm4gTWF0aC5wb3coTWF0aC5hYnMoY29tbW9uSGVpZ2h0IC0gdGFyZ2V0SGVpZ2h0KSwgMik7XG59O1xuXG4vLyByZXR1cm4gZnVuY3Rpb24gdGhhdCBnZXRzIHRoZSBuZWlnaGJvcmluZyBub2RlcyBvZiBub2RlIGFuZCByZXR1cm5zIGNvc3RzXG5jb25zdCBtYWtlR2V0TmVpZ2hib3JzID0gKHRhcmdldEhlaWdodCwgY29udGFpbmVyV2lkdGgsIHBob3RvcywgbGltaXROb2RlU2VhcmNoLCBtYXJnaW4pID0+IHN0YXJ0ID0+IHtcbiAgY29uc3QgcmVzdWx0cyA9IHt9O1xuICBzdGFydCA9ICtzdGFydDtcbiAgcmVzdWx0c1src3RhcnRdID0gMDtcbiAgZm9yIChsZXQgaSA9IHN0YXJ0ICsgMTsgaSA8IHBob3Rvcy5sZW5ndGggKyAxOyArK2kpIHtcbiAgICBpZiAoaSAtIHN0YXJ0ID4gbGltaXROb2RlU2VhcmNoKSBicmVhaztcbiAgICByZXN1bHRzW2kudG9TdHJpbmcoKV0gPSBjb3N0KHBob3Rvcywgc3RhcnQsIGksIGNvbnRhaW5lcldpZHRoLCB0YXJnZXRIZWlnaHQsIG1hcmdpbik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG5leHBvcnQgY29uc3QgY29tcHV0ZVJvd0xheW91dCA9ICh7IGNvbnRhaW5lcldpZHRoLCBsaW1pdE5vZGVTZWFyY2gsIHRhcmdldFJvd0hlaWdodCwgbWFyZ2luLCBwaG90b3MgfSkgPT4ge1xuICAvLyBjb25zdCB0ID0gK25ldyBEYXRlKCk7XG4gIGNvbnN0IGdldE5laWdoYm9ycyA9IG1ha2VHZXROZWlnaGJvcnModGFyZ2V0Um93SGVpZ2h0LCBjb250YWluZXJXaWR0aCwgcGhvdG9zLCBsaW1pdE5vZGVTZWFyY2gsIG1hcmdpbik7XG4gIGxldCBwYXRoID0gZmluZFNob3J0ZXN0UGF0aChnZXROZWlnaGJvcnMsICcwJywgcGhvdG9zLmxlbmd0aCk7XG4gIHBhdGggPSBwYXRoLm1hcChub2RlID0+ICtub2RlKTtcbiAgLy8gY29uc29sZS5sb2coYHRpbWUgdG8gZmluZCB0aGUgc2hvcnRlc3QgcGF0aDogJHsoK25ldyBEYXRlKCkgLSB0KX0gbXNgKTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXRoLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3Qgcm93ID0gcGhvdG9zLnNsaWNlKHBhdGhbaSAtIDFdLCBwYXRoW2ldKTtcbiAgICBjb25zdCBoZWlnaHQgPSBnZXRDb21tb25IZWlnaHQocm93LCBjb250YWluZXJXaWR0aCwgbWFyZ2luKTtcbiAgICBmb3IgKGxldCBqID0gcGF0aFtpIC0gMV07IGogPCBwYXRoW2ldOyArK2opIHtcbiAgICAgIHBob3Rvc1tqXS53aWR0aCA9IHJvdW5kKGhlaWdodCAqIHJhdGlvKHBob3Rvc1tqXSksIDEpO1xuICAgICAgcGhvdG9zW2pdLmhlaWdodCA9IGhlaWdodDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBob3Rvcztcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZXNpemVPYnNlcnZlciBmcm9tICdyZXNpemUtb2JzZXJ2ZXItcG9seWZpbGwnO1xuaW1wb3J0IFBob3RvLCB7IHBob3RvUHJvcFR5cGUgfSBmcm9tICcuL1Bob3RvJztcbmltcG9ydCB7IGNvbXB1dGVDb2x1bW5MYXlvdXQgfSBmcm9tICcuL2xheW91dHMvY29sdW1ucyc7XG5pbXBvcnQgeyBjb21wdXRlUm93TGF5b3V0IH0gZnJvbSAnLi9sYXlvdXRzL2p1c3RpZmllZCc7XG5pbXBvcnQgeyBmaW5kSWRlYWxOb2RlU2VhcmNoIH0gZnJvbSAnLi91dGlscy9maW5kSWRlYWxOb2RlU2VhcmNoJztcblxuY29uc3QgR2FsbGVyeSA9IFJlYWN0Lm1lbW8oZnVuY3Rpb24gR2FsbGVyeSh7XG4gIHBob3RvcyxcbiAgb25DbGljayxcbiAgZGlyZWN0aW9uLFxuICBtYXJnaW4sXG4gIGxpbWl0Tm9kZVNlYXJjaCxcbiAgdGFyZ2V0Um93SGVpZ2h0LFxuICBjb2x1bW5zLFxuICByZW5kZXJJbWFnZSxcbn0pIHtcbiAgY29uc3QgW2NvbnRhaW5lcldpZHRoLCBzZXRDb250YWluZXJXaWR0aF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgZ2FsbGVyeUVsID0gdXNlUmVmKG51bGwpO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGFuaW1hdGlvbkZyYW1lSUQgPSBudWxsO1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgLy8gb25seSBkbyBzb21ldGhpbmcgaWYgd2lkdGggY2hhbmdlc1xuICAgICAgY29uc3QgbmV3V2lkdGggPSBlbnRyaWVzWzBdLmNvbnRlbnRSZWN0LndpZHRoO1xuICAgICAgaWYgKGNvbnRhaW5lcldpZHRoICE9PSBuZXdXaWR0aCkge1xuICAgICAgICAvLyBwdXQgaW4gYW4gYW5pbWF0aW9uIGZyYW1lIHRvIHN0b3AgXCJiZW5pZ24gZXJyb3JzXCIgZnJvbVxuICAgICAgICAvLyBSZXNpek9ic2VydmVyIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5Mzg0MTIwL3Jlc2l6ZW9ic2VydmVyLWxvb3AtbGltaXQtZXhjZWVkZWRcbiAgICAgICAgYW5pbWF0aW9uRnJhbWVJRCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHNldENvbnRhaW5lcldpZHRoKE1hdGguZmxvb3IobmV3V2lkdGgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShnYWxsZXJ5RWwuY3VycmVudCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRpb25GcmFtZUlEKTtcbiAgICB9O1xuICB9KTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IChldmVudCwgeyBpbmRleCB9KSA9PiB7XG4gICAgb25DbGljayhldmVudCwge1xuICAgICAgaW5kZXgsXG4gICAgICBwaG90bzogcGhvdG9zW2luZGV4XSxcbiAgICAgIHByZXZpb3VzOiBwaG90b3NbaW5kZXggLSAxXSB8fCBudWxsLFxuICAgICAgbmV4dDogcGhvdG9zW2luZGV4ICsgMV0gfHwgbnVsbCxcbiAgICB9KTtcbiAgfTtcblxuICAvLyBubyBjb250YWluZXJXaWR0aCB1bnRpbCBhZnRlciBmaXJzdCByZW5kZXIgd2l0aCByZWZzLCBza2lwIGNhbGN1bGF0aW9ucyBhbmQgcmVuZGVyIG5vdGhpbmdcbiAgaWYgKCFjb250YWluZXJXaWR0aCkgcmV0dXJuIDxkaXYgcmVmPXtnYWxsZXJ5RWx9PiZuYnNwOzwvZGl2PjtcbiAgLy8gc3VidHJhY3QgMSBwaXhlbCBiZWNhdXNlIHRoZSBicm93c2VyIG1heSByb3VuZCB1cCBhIHBpeGVsXG4gIGNvbnN0IHdpZHRoID0gY29udGFpbmVyV2lkdGggLSAxO1xuICBsZXQgZ2FsbGVyeVN0eWxlLCB0aHVtYnM7XG5cbiAgaWYgKGRpcmVjdGlvbiA9PT0gJ3JvdycpIHtcbiAgICAvLyBhbGxvdyB1c2VyIHRvIGNhbGN1bGF0ZSBsaW1pdE5vZGVTZWFyY2ggZnJvbSBjb250YWluZXJXaWR0aFxuICAgIGlmICh0eXBlb2YgbGltaXROb2RlU2VhcmNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsaW1pdE5vZGVTZWFyY2ggPSBsaW1pdE5vZGVTZWFyY2goY29udGFpbmVyV2lkdGgpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRhcmdldFJvd0hlaWdodCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGFyZ2V0Um93SGVpZ2h0ID0gdGFyZ2V0Um93SGVpZ2h0KGNvbnRhaW5lcldpZHRoKTtcbiAgICB9XG4gICAgLy8gc2V0IGhvdyBtYW55IG5laWdoYm9yaW5nIG5vZGVzIHRoZSBncmFwaCB3aWxsIHZpc2l0XG4gICAgaWYgKGxpbWl0Tm9kZVNlYXJjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW1pdE5vZGVTZWFyY2ggPSAyO1xuICAgICAgaWYgKGNvbnRhaW5lcldpZHRoID49IDQ1MCkge1xuICAgICAgICBsaW1pdE5vZGVTZWFyY2ggPSBmaW5kSWRlYWxOb2RlU2VhcmNoKHsgY29udGFpbmVyV2lkdGgsIHRhcmdldFJvd0hlaWdodCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBnYWxsZXJ5U3R5bGUgPSB7IGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgZmxleERpcmVjdGlvbjogJ3JvdycgfTtcbiAgICB0aHVtYnMgPSBjb21wdXRlUm93TGF5b3V0KHsgY29udGFpbmVyV2lkdGg6IHdpZHRoLCBsaW1pdE5vZGVTZWFyY2gsIHRhcmdldFJvd0hlaWdodCwgbWFyZ2luLCBwaG90b3MgfSk7XG4gIH1cbiAgaWYgKGRpcmVjdGlvbiA9PT0gJ2NvbHVtbicpIHtcbiAgICAvLyBhbGxvdyB1c2VyIHRvIGNhbGN1bGF0ZSBjb2x1bW5zIGZyb20gY29udGFpbmVyV2lkdGhcbiAgICBpZiAodHlwZW9mIGNvbHVtbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbHVtbnMgPSBjb2x1bW5zKGNvbnRhaW5lcldpZHRoKTtcbiAgICB9XG4gICAgLy8gc2V0IGRlZmF1bHQgYnJlYWtwb2ludHMgaWYgdXNlciBkb2Vzbid0IHNwZWNpZnkgY29sdW1ucyBwcm9wXG4gICAgaWYgKGNvbHVtbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29sdW1ucyA9IDE7XG4gICAgICBpZiAoY29udGFpbmVyV2lkdGggPj0gNTAwKSBjb2x1bW5zID0gMjtcbiAgICAgIGlmIChjb250YWluZXJXaWR0aCA+PSA5MDApIGNvbHVtbnMgPSAzO1xuICAgICAgaWYgKGNvbnRhaW5lcldpZHRoID49IDE1MDApIGNvbHVtbnMgPSA0O1xuICAgIH1cbiAgICBnYWxsZXJ5U3R5bGUgPSB7IHBvc2l0aW9uOiAncmVsYXRpdmUnIH07XG4gICAgdGh1bWJzID0gY29tcHV0ZUNvbHVtbkxheW91dCh7IGNvbnRhaW5lcldpZHRoOiB3aWR0aCwgY29sdW1ucywgbWFyZ2luLCBwaG90b3MgfSk7XG4gICAgZ2FsbGVyeVN0eWxlLmhlaWdodCA9IHRodW1ic1t0aHVtYnMubGVuZ3RoIC0gMV0uY29udGFpbmVySGVpZ2h0O1xuICB9XG5cbiAgY29uc3QgcmVuZGVyQ29tcG9uZW50ID0gcmVuZGVySW1hZ2UgfHwgUGhvdG87XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWFjdC1waG90by1nYWxsZXJ5LS1nYWxsZXJ5XCI+XG4gICAgICA8ZGl2IHJlZj17Z2FsbGVyeUVsfSBzdHlsZT17Z2FsbGVyeVN0eWxlfT5cbiAgICAgICAge3RodW1icy5tYXAoKHRodW1iLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgbGVmdCwgdG9wLCBjb250YWluZXJIZWlnaHQsIC4uLnBob3RvIH0gPSB0aHVtYjtcbiAgICAgICAgICByZXR1cm4gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBrZXk6IHRodW1iLmtleSB8fCB0aHVtYi5zcmMsXG4gICAgICAgICAgICBjb250YWluZXJIZWlnaHQsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIG1hcmdpbixcbiAgICAgICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgICAgIG9uQ2xpY2s6IG9uQ2xpY2sgPyBoYW5kbGVDbGljayA6IG51bGwsXG4gICAgICAgICAgICBwaG90byxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuXG5HYWxsZXJ5LnByb3BUeXBlcyA9IHtcbiAgcGhvdG9zOiBQcm9wVHlwZXMuYXJyYXlPZihwaG90b1Byb3BUeXBlKS5pc1JlcXVpcmVkLFxuICBkaXJlY3Rpb246IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBjb2x1bW5zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICB0YXJnZXRSb3dIZWlnaHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gIGxpbWl0Tm9kZVNlYXJjaDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5udW1iZXJdKSxcbiAgbWFyZ2luOiBQcm9wVHlwZXMubnVtYmVyLFxuICByZW5kZXJJbWFnZTogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5HYWxsZXJ5LmRlZmF1bHRQcm9wcyA9IHtcbiAgbWFyZ2luOiAyLFxuICBkaXJlY3Rpb246ICdyb3cnLFxuICB0YXJnZXRSb3dIZWlnaHQ6IDMwMCxcbn07XG5leHBvcnQgeyBQaG90byB9O1xuZXhwb3J0IGRlZmF1bHQgR2FsbGVyeTtcbiIsImltcG9ydCB7IHJvdW5kIH0gZnJvbSAnLi9yb3VuZCc7XG5cbi8vIGd1ZXNzdGltYXRlIGhvdyBtYW55IG5laWdoYm9yaW5nIG5vZGVzIHNob3VsZCBiZSBzZWFyY2hlZCBiYXNlZCBvblxuLy8gdGhlIGFzcGVjdCByYXRpbyBvZiB0aGUgY29udGFpbmVyIHdpdGggaW1hZ2VzIGhhdmluZyBhbiBhdmcgQVIgb2YgMS41XG4vLyBhcyB0aGUgbWluaW11bSBhbW91bnQgb2YgcGhvdG9zIHBlciByb3csIHBsdXMgc29tZSBub2Rlc1xuZXhwb3J0IGNvbnN0IGZpbmRJZGVhbE5vZGVTZWFyY2ggPSAoeyB0YXJnZXRSb3dIZWlnaHQsIGNvbnRhaW5lcldpZHRoIH0pID0+IHtcbiAgY29uc3Qgcm93QVIgPSBjb250YWluZXJXaWR0aCAvIHRhcmdldFJvd0hlaWdodDtcbiAgcmV0dXJuIHJvdW5kKHJvd0FSIC8gMS41KSArIDg7XG59O1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENhcm91c2VsLCB7TW9kYWwsIE1vZGFsR2F0ZXdheX0gZnJvbSBcInJlYWN0LWltYWdlc1wiO1xuaW1wb3J0IHt1c2VDYWxsYmFjaywgdXNlU3RhdGV9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtwaG90b3MgYXMgZGVmYXVsdFBob3Rvc30gZnJvbSBcIi4vcGhvdG9zXCI7XG5pbXBvcnQgR2FsbGVyeSBmcm9tIFwiLi9HYWxsZXJ5L0dhbGxlcnlcIjtcblxuZXhwb3J0IHR5cGUgSW1hZ2VHYWxsZXJ5UHJvcHMgPSB7cGhvdG9zPzogYW55fTtcblxuZnVuY3Rpb24gSW1hZ2VHYWxsZXJ5KHtwaG90b3MgPSBkZWZhdWx0UGhvdG9zfTogSW1hZ2VHYWxsZXJ5UHJvcHMpIHtcblxuICAgIGNvbnN0IFtjdXJyZW50SW1hZ2UsIHNldEN1cnJlbnRJbWFnZV0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbdmlld2VySXNPcGVuLCBzZXRWaWV3ZXJJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgY29uc3Qgb3BlbkxpZ2h0Ym94ID0gdXNlQ2FsbGJhY2soKGV2ZW50LCB7cGhvdG8sIGluZGV4fSkgPT4ge1xuICAgICAgICBzZXRDdXJyZW50SW1hZ2UoaW5kZXgpO1xuICAgICAgICBzZXRWaWV3ZXJJc09wZW4odHJ1ZSk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgY2xvc2VMaWdodGJveCA9ICgpID0+IHtcbiAgICAgICAgc2V0Q3VycmVudEltYWdlKDApO1xuICAgICAgICBzZXRWaWV3ZXJJc09wZW4oZmFsc2UpO1xuICAgIH07XG5cbiAgICByZXR1cm4gPGRpdj5cbiAgICAgICAgey8qIEB0cy1pZ25vcmUqL31cbiAgICAgICAgPEdhbGxlcnkgcGhvdG9zPXtwaG90b3N9IG9uQ2xpY2s9e29wZW5MaWdodGJveH0+PC9HYWxsZXJ5PlxuICAgICAgICA8TW9kYWxHYXRld2F5PlxuICAgICAgICAgICAge3ZpZXdlcklzT3BlbiA/IChcbiAgICAgICAgICAgICAgICA8TW9kYWwgb25DbG9zZT17Y2xvc2VMaWdodGJveH0+XG4gICAgICAgICAgICAgICAgICAgIDxDYXJvdXNlbFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEluZGV4PXtjdXJyZW50SW1hZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3cz17cGhvdG9zLm1hcCh4ID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHguc3JjXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Jjc2V0OiB4LnNyY1NldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXB0aW9uOiB4LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Nb2RhbD5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L01vZGFsR2F0ZXdheT5cbiAgICA8L2Rpdj47XG59XG5cbi8vIE5lZWQgSW1hZ2VHYWxsZXJ5TWVtbyBmb3IgYXV0b2NvbXBsZXRpb24gb2YgcGhwc3Rvcm1cbmNvbnN0IEltYWdlR2FsbGVyeU1lbW8gPSBSZWFjdC5tZW1vKEltYWdlR2FsbGVyeSkgYXMgdHlwZW9mIEltYWdlR2FsbGVyeTtcbmV4cG9ydCB7SW1hZ2VHYWxsZXJ5TWVtbyBhcyBJbWFnZUdhbGxlcnl9XG4iLCJpbXBvcnQgKiBhcyAkIGZyb20gXCJqcXVlcnlcIjtcbmltcG9ydCBcImZvdW5kYXRpb24tc2l0ZXMvZGlzdC9qcy9mb3VuZGF0aW9uLmVzNlwiO1xuaW1wb3J0IHtQcmVzZW50c0hhbmRsZXJ9IGZyb20gXCIuL1ByZXNlbnRzSGFuZGxlclwiO1xuXG5pbXBvcnQgXCIuLi9zYXNzL2luZGV4LnNjc3NcIlxuaW1wb3J0IHtzZXR1cEltYWdlR2FsbGVyeX0gZnJvbSBcIi4vc2V0dXBJbWFnZUdhbGxlcnlcIjtcbmltcG9ydCB7c2V0dXBGb3RvYm94fSBmcm9tIFwiLi9zZXR1cEZvdG9ib3hcIjtcbmltcG9ydCB7c2V0dXBIb2NoemVpdHNmb3Rvc30gZnJvbSBcIi4vc2V0dXBIb2NoemVpdHNmb3Rvc1wiO1xuXG5jb25zdCB0ZW1wbGF0ZXMgPSB7XG4gICAgaG9tZTogcmVxdWlyZShcIi4uL2h0bWwvaG9tZS5odG1sXCIpLFxuICAgIHVudGVya3VuZnQ6IHJlcXVpcmUoXCIuLi9odG1sL3VudGVya3VuZnQuaHRtbFwiKSxcbiAgICB0YWdlc2FibGF1ZjogcmVxdWlyZShcIi4uL2h0bWwvdGFnZXNhYmxhdWYuaHRtbFwiKSxcbiAgICBnZXNjaGVua2U6IHJlcXVpcmUoXCIuLi9odG1sL2dlc2NoZW5rZS5odG1sXCIpLFxuICAgIHN0YW5kZXNhbXQ6IHJlcXVpcmUoXCIuLi9odG1sL3N0YW5kZXNhbXQuaHRtbFwiKSxcbiAgICBmb3RvYm94OiByZXF1aXJlKFwiLi4vaHRtbC9mb3RvYm94Lmh0bWxcIiksXG4gICAgaG9jaHplaXRzZm90b3M6IHJlcXVpcmUoXCIuLi9odG1sL2hvY2h6ZWl0c2ZvdG9zLmh0bWxcIiksXG59XG5cbmNvbnN0IGltYWdlcyA9IHtcbiAgICBob21lOiByZXF1aXJlKFwiLi4vaW1nL2hvbWUuanBnXCIpLmRlZmF1bHQsXG4gICAgdW50ZXJrdW5mdDogcmVxdWlyZShcIi4uL2ltZy91bnRlcmt1bmZ0LmpwZ1wiKS5kZWZhdWx0LFxuICAgIHRhZ2VzYWJsYXVmOiBudWxsLFxuICAgIGdlc2NoZW5rZTogcmVxdWlyZShcIi4uL2ltZy9nZXNjaGVua2UuanBnXCIpLmRlZmF1bHQsXG4gICAgc3RhbmRlc2FtdDogbnVsbCxcbiAgICBmb3RvYm94OiBudWxsLFxuICAgIGhvY2h6ZWl0c2ZvdG9zOiBudWxsLFxufVxuXG5jb25zdCBjYWxsYmFja3MgPSB7XG4gICAgaG9tZTogKCkgPT4ge1xuICAgIH0sXG4gICAgdW50ZXJrdW5mdDogKCkgPT4ge1xuICAgIH0sXG4gICAgdGFnZXNhYmxhdWY6ICgpID0+IHtcbiAgICAgICAgbGV0IHN0YXRlID0gXCJnb2RpXCI7XG4gICAgICAgIGxldCBzY3JvbGxUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgbGV0IHNjcm9sbFRvVmlldyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibW9kYWxcIik7XG4gICAgICAgIG1vZGFsLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICBtb2RhbC5jbGFzc0xpc3QucmVtb3ZlKFwic2hvd1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZm9JbWFnZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5mby1pbWFnZS1jb250YWluZXJcIik7XG4gICAgICAgIGluZm9JbWFnZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiLmNpcmNsZXJcIikuZm9yRWFjaChjaXJjbGUgPT4ge1xuICAgICAgICAgICAgY2lyY2xlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUgPSAoPEhUTUxFbGVtZW50PmNpcmNsZSkuZGF0YXNldFtcInN0YXRlXCJdO1xuICAgICAgICAgICAgICAgIGluZm9JbWFnZUNvbnRhaW5lci5kYXRhc2V0W1wic3RhdGVcIl0gPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICBzY3JvbGxUb1ZpZXcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1Ub1Nob3cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmFuY2hvcltkYXRhLXN0YXRlPSdcIiArIHN0YXRlICsgXCInXVwiKTtcbiAgICAgICAgICAgICAgICBlbGVtVG9TaG93LnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICAgICAgICAgICAgXCJiZWhhdmlvclwiOiBcInNtb290aFwiLFxuICAgICAgICAgICAgICAgICAgICBcImJsb2NrXCI6IFwic3RhcnRcIlxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGlmIChGb3VuZGF0aW9uLk1lZGlhUXVlcnkub25seShcInNtYWxsXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLmlubmVyVGV4dCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLmFwcGVuZENoaWxkKGVsZW1Ub1Nob3cuY2xvbmVOb2RlKHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuY2xhc3NMaXN0LmFkZChcInNob3dcIilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbmF2QmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi50b3AtYmFyXCIpO1xuICAgICAgICBjb25zdCBhbmNob3JzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5hbmNob3JcIik7XG5cbiAgICAgICAgY29uc3QgbWFyZ2luID0gbmF2QmFyLmNsaWVudEhlaWdodCArIDUwO1xuXG4gICAgICAgIGNvbnN0IG9ic2VydmVyRG93biA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgICAgICAgIGVudHJpZXMuc29tZShlbnRyeSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlbnRyeS5pc0ludGVyc2VjdGluZyAmJiBlbnRyeS5pbnRlcnNlY3Rpb25SZWN0LnRvcCA9PT0gbWFyZ2luICYmICFzY3JvbGxUb1ZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAoPEhUTUxFbGVtZW50PmVudHJ5LnRhcmdldCkuZGF0YXNldFtcInN0YXRlXCJdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB7dGhyZXNob2xkOiAxLCByb290TWFyZ2luOiBcIi1cIiArIG1hcmdpbiArIFwicHggMHB4IDBweCAwcHhcIn0pO1xuICAgICAgICBjb25zdCBvYnNlcnZlclVwID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgICAgICAgZW50cmllcy5zb21lKGVudHJ5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgJiYgZW50cnkuaW50ZXJzZWN0aW9uUmVjdC50b3AgPT09IG5hdkJhci5jbGllbnRIZWlnaHQgJiYgIXNjcm9sbFRvVmlldykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICg8SFRNTEVsZW1lbnQ+ZW50cnkudGFyZ2V0KS5kYXRhc2V0W1wic3RhdGVcIl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHt0aHJlc2hvbGQ6IDAuMX0pO1xuXG4gICAgICAgIGFuY2hvcnMuZm9yRWFjaChhbmNob3IgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXJEb3duLm9ic2VydmUoYW5jaG9yKTtcbiAgICAgICAgICAgIG9ic2VydmVyVXAub2JzZXJ2ZShhbmNob3IpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjaW5mby1pbWFnZS1jb250YWluZXIgKyAuc2l0ZS1jb250ZW50XCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgZSA9PiB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoc2Nyb2xsVGltZW91dCk7XG4gICAgICAgICAgICBzY3JvbGxUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2Nyb2xsVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaW5mb0ltYWdlQ29udGFpbmVyLmRhdGFzZXRbXCJzdGF0ZVwiXSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgIHNjcm9sbFRvVmlldyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3RvcHBlZCBzY3JvbGxpbmdcIilcbiAgICAgICAgICAgIH0sIDUwKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXNjaGVua2U6IGFzeW5jICgpID0+IGF3YWl0IG5ldyBQcmVzZW50c0hhbmRsZXIoKS5zaG93UHJlc2VudHMoKSxcbiAgICBzdGFuZGVzYW10OiBzZXR1cEltYWdlR2FsbGVyeSxcbiAgICBmb3RvYm94OiBzZXR1cEZvdG9ib3gsXG4gICAgaG9jaHplaXRzZm90b3M6IHNldHVwSG9jaHplaXRzZm90b3MsXG59XG5cbiQoZG9jdW1lbnQpLmZvdW5kYXRpb24oKTtcblxuJChmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluLWNvbnRlbnRcIik7XG4gICAgY29uc3QgaW1nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJob21lLWltZy1jb250YWluZXJcIik7XG5cbiAgICBsZXQgY3VycmVudFNpdGUgPSBcImhvbWVcIjtcblxuICAgIC8vTmF2aWdhdGlvblxuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSB0ZW1wbGF0ZXMuaG9tZTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLm1lbnUgbGlbZGF0YS1zaXRlXVwiKS5mb3JFYWNoKChlbGVtOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvbGRBY3RpdmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLm1lbnUgLmFjdGl2ZVwiKTtcbiAgICAgICAgICAgIG9sZEFjdGl2ZS5mb3JFYWNoKGVsZW0gPT4gZWxlbS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpKTtcblxuICAgICAgICAgICAgY29uc3Qgbm93QWN0aXZlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5tZW51IGxpW2RhdGEtc2l0ZT0nXCIgKyBlbGVtLmRhdGFzZXRbXCJzaXRlXCJdICsgXCInXVwiKTtcbiAgICAgICAgICAgIG5vd0FjdGl2ZS5mb3JFYWNoKGVsZW0gPT4gZWxlbS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpKTtcblxuICAgICAgICAgICAgY3VycmVudFNpdGUgPSBlbGVtLmRhdGFzZXRbXCJzaXRlXCJdO1xuICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IHRlbXBsYXRlc1tjdXJyZW50U2l0ZV07XG4gICAgICAgICAgICBpZiAoaW1hZ2VzW2N1cnJlbnRTaXRlXSkge1xuICAgICAgICAgICAgICAgIGltZy5xdWVyeVNlbGVjdG9yKFwiaW1nXCIpLnNyYyA9IGltYWdlc1tjdXJyZW50U2l0ZV07XG4gICAgICAgICAgICAgICAgaW1nLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW0uZGF0YXNldFtcImltZ1Nob3dBbHdheXNcIl0gPT09IFwiMVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGltZy5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZS1mb3ItbWVkaXVtXCIpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW1nLmNsYXNzTGlzdC5hZGQoXCJoaWRlLWZvci1tZWRpdW1cIilcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW1nLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFja3NbY3VycmVudFNpdGVdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3NbY3VycmVudFNpdGVdKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmxvZ28taW1nXCIpLmZvckVhY2goaW1nID0+IHtcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibGlbZGF0YS1zaXRlPSdob21lJ11cIikuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjbGlja1wiKSk7XG4gICAgICAgIH0pXG4gICAgfSlcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7SW1hZ2VHYWxsZXJ5fSBmcm9tIFwiLi9JbWFnZUdhbGxlcnkvSW1hZ2VHYWxsZXJ5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEltYWdlR2FsbGVyeSgpe1xuICAgIFJlYWN0RE9NLnJlbmRlcig8SW1hZ2VHYWxsZXJ5Lz4sIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZ2FsbGVyeVwiKSk7XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHtJbWFnZUdhbGxlcnl9IGZyb20gXCIuL0ltYWdlR2FsbGVyeS9JbWFnZUdhbGxlcnlcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwRm90b2JveCgpe1xuICAgIGNvbnN0IHBob3RvcyA9IGF3YWl0IGZldGNoKFwiL2JpbGRlci9mb3RvYm94L3Bob3Rvcy5qc29uXCIpLnRoZW4ociA9PiByLmpzb24oKSk7XG4gICAgY29uc29sZS5sb2coXCJMT0ctZCBwaG90b3NcIiwgcGhvdG9zKTtcbiAgICBSZWFjdERPTS5yZW5kZXIoPEltYWdlR2FsbGVyeSBwaG90b3M9e3Bob3Rvc30vPiwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnYWxsZXJ5XCIpKTtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQge0ltYWdlR2FsbGVyeX0gZnJvbSBcIi4vSW1hZ2VHYWxsZXJ5L0ltYWdlR2FsbGVyeVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0dXBIb2NoemVpdHNmb3Rvcygpe1xuICAgIGNvbnN0IHBob3RvcyA9IGF3YWl0IGZldGNoKFwiL2JpbGRlci9qdWxpYV9zYW0vcGhvdG9zLmpzb25cIikudGhlbihyID0+IHIuanNvbigpKTtcbiAgICBSZWFjdERPTS5yZW5kZXIoPEltYWdlR2FsbGVyeSBwaG90b3M9e3Bob3Rvc30vPiwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnYWxsZXJ5XCIpKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=