ibp-max 1.1.12 → 1.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +2 -2
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(self,(()=>(()=>{var __webpack_modules__={468:()=>{agora((function(){$(document).ready((function(){"#SignUp"==location.hash&&OpenPopup()}))}))},440:function(e,t){var n,r,o;r="undefined"!=typeof window?window:this,o=function(r,o){function a(e){var t=e.length,n=Q.type(e);return"function"!==n&&!Q.isWindow(e)&&(!(1!==e.nodeType||!t)||"array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t,n){if(Q.isFunction(t))return Q.grep(e,(function(e,r){return!!t.call(e,r,e)!==n}));if(t.nodeType)return Q.grep(e,(function(e){return e===t!==n}));if("string"==typeof t){if(ae.test(t))return Q.filter(t,e,n);t=Q.filter(t,e)}return Q.grep(e,(function(e){return z.call(t,e)>=0!==n}))}function s(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function l(){Y.removeEventListener("DOMContentLoaded",l,!1),r.removeEventListener("load",l,!1),Q.ready()}function c(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=Q.expando+Math.random()}function u(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ye,"-$1").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:ve.test(n)?Q.parseJSON(n):n)}catch(e){}me.set(e,t,n)}else n=void 0;return n}function d(){return!0}function f(){return!1}function p(){try{return Y.activeElement}catch(e){}}function h(e,t){return Q.nodeName(e,"table")&&Q.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function g(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function m(e){var t=je.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function v(e,t){for(var n=0,r=e.length;r>n;n++)ge.set(e[n],"globalEval",!t||ge.get(t[n],"globalEval"))}function y(e,t){var n,r,o,a,i,s,l,c;if(1===t.nodeType){if(ge.hasData(e)&&(a=ge.access(e),i=ge.set(t,a),c=a.events))for(o in delete i.handle,i.events={},c)for(n=0,r=c[o].length;r>n;n++)Q.event.add(t,o,c[o][n]);me.hasData(e)&&(s=me.access(e),l=Q.extend({},s),me.set(t,l))}}function b(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&Q.nodeName(e,t)?Q.merge([e],n):n}function x(e,t){var n=t.nodeName.toLowerCase();"input"===n&&Ee.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}function w(e,t){var n,o=Q(t.createElement(e)).appendTo(t.body),a=r.getDefaultComputedStyle&&(n=r.getDefaultComputedStyle(o[0]))?n.display:Q.css(o[0],"display");return o.detach(),a}function E(e){var t=Y,n=Fe[e];return n||("none"!==(n=w(e,t))&&n||((t=(Ie=(Ie||Q("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement))[0].contentDocument).write(),t.close(),n=w(e,t),Ie.detach()),Fe[e]=n),n}function C(e,t,n){var r,o,a,i,s=e.style;return(n=n||Me(e))&&(i=n.getPropertyValue(t)||n[t]),n&&(""!==i||Q.contains(e.ownerDocument,e)||(i=Q.style(e,t)),He.test(i)&&Re.test(t)&&(r=s.width,o=s.minWidth,a=s.maxWidth,s.minWidth=s.maxWidth=s.width=i,i=n.width,s.width=r,s.minWidth=o,s.maxWidth=a)),void 0!==i?i+"":i}function A(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function L(e,t){if(t in e)return t;for(var n=t[0].toUpperCase()+t.slice(1),r=t,o=Ge.length;o--;)if((t=Ge[o]+n)in e)return t;return r}function S(e,t,n){var r=Ue.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function T(e,t,n,r,o){for(var a=n===(r?"border":"content")?4:"width"===t?1:0,i=0;4>a;a+=2)"margin"===n&&(i+=Q.css(e,n+xe[a],!0,o)),r?("content"===n&&(i-=Q.css(e,"padding"+xe[a],!0,o)),"margin"!==n&&(i-=Q.css(e,"border"+xe[a]+"Width",!0,o))):(i+=Q.css(e,"padding"+xe[a],!0,o),"padding"!==n&&(i+=Q.css(e,"border"+xe[a]+"Width",!0,o)));return i}function k(e,t,n){var r=!0,o="width"===t?e.offsetWidth:e.offsetHeight,a=Me(e),i="border-box"===Q.css(e,"boxSizing",!1,a);if(0>=o||null==o){if((0>(o=C(e,t,a))||null==o)&&(o=e.style[t]),He.test(o))return o;r=i&&(X.boxSizingReliable()||o===e.style[t]),o=parseFloat(o)||0}return o+T(e,t,n||(i?"border":"content"),r,a)+"px"}function N(e,t){for(var n,r,o,a=[],i=0,s=e.length;s>i;i++)(r=e[i]).style&&(a[i]=ge.get(r,"olddisplay"),n=r.style.display,t?(a[i]||"none"!==n||(r.style.display=""),""===r.style.display&&we(r)&&(a[i]=ge.access(r,"olddisplay",E(r.nodeName)))):(o=we(r),"none"===n&&o||ge.set(r,"olddisplay",o?n:Q.css(r,"display"))));for(i=0;s>i;i++)(r=e[i]).style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?a[i]||"":"none"));return e}function O(e,t,n,r,o){return new O.prototype.init(e,t,n,r,o)}function D(){return setTimeout((function(){Xe=void 0})),Xe=Q.now()}function _(e,t){var n,r=0,o={height:e};for(t=t?1:0;4>r;r+=2-t)o["margin"+(n=xe[r])]=o["padding"+n]=e;return t&&(o.opacity=o.width=e),o}function P(e,t,n){for(var r,o=(et[t]||[]).concat(et["*"]),a=0,i=o.length;i>a;a++)if(r=o[a].call(n,t,e))return r}function j(e,t,n){var r,o,a=0,i=Ze.length,s=Q.Deferred().always((function(){delete l.elem})),l=function(){if(o)return!1;for(var t=Xe||D(),n=Math.max(0,c.startTime+c.duration-t),r=1-(n/c.duration||0),a=0,i=c.tweens.length;i>a;a++)c.tweens[a].run(r);return s.notifyWith(e,[c,r,n]),1>r&&i?n:(s.resolveWith(e,[c]),!1)},c=s.promise({elem:e,props:Q.extend({},t),opts:Q.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xe||D(),duration:n.duration,tweens:[],createTween:function(t,n){var r=Q.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(r),r},stop:function(t){var n=0,r=t?c.tweens.length:0;if(o)return this;for(o=!0;r>n;n++)c.tweens[n].run(1);return t?s.resolveWith(e,[c,t]):s.rejectWith(e,[c,t]),this}}),u=c.props;for(function(e,t){var n,r,o,a,i;for(n in e)if(o=t[r=Q.camelCase(n)],a=e[n],Q.isArray(a)&&(o=a[1],a=e[n]=a[0]),n!==r&&(e[r]=a,delete e[n]),(i=Q.cssHooks[r])&&"expand"in i)for(n in a=i.expand(a),delete e[r],a)n in e||(e[n]=a[n],t[n]=o);else t[r]=o}(u,c.opts.specialEasing);i>a;a++)if(r=Ze[a].call(c,e,u,c.opts))return r;return Q.map(u,P,c),Q.isFunction(c.opts.start)&&c.opts.start.call(e,c),Q.fx.timer(Q.extend(l,{elem:e,anim:c,queue:c.opts.queue})),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always)}function $(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,o=0,a=t.toLowerCase().match(fe)||[];if(Q.isFunction(n))for(;r=a[o++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function q(e,t,n,r){function o(s){var l;return a[s]=!0,Q.each(e[s]||[],(function(e,s){var c=s(t,n,r);return"string"!=typeof c||i||a[c]?i?!(l=c):void 0:(t.dataTypes.unshift(c),o(c),!1)})),l}var a={},i=e===vt;return o(t.dataTypes[0])||!a["*"]&&o("*")}function I(e,t){var n,r,o=Q.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((o[n]?e:r||(r={}))[n]=t[n]);return r&&Q.extend(!0,e,r),e}function F(e,t,n,r){var o;if(Q.isArray(t))Q.each(t,(function(t,o){n||xt.test(e)?r(e,o):F(e+"["+("object"==typeof o?t:"")+"]",o,n,r)}));else if(n||"object"!==Q.type(t))r(e,t);else for(o in t)F(e+"["+o+"]",t[o],n,r)}function R(e){return Q.isWindow(e)?e:9===e.nodeType&&e.defaultView}var H=[],M=H.slice,B=H.concat,U=H.push,z=H.indexOf,W={},V=W.toString,G=W.hasOwnProperty,X={},Y=r.document,J="2.1.1",Q=function(e,t){return new Q.fn.init(e,t)},K=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,Z=/^-ms-/,ee=/-([\da-z])/gi,te=function(e,t){return t.toUpperCase()};Q.fn=Q.prototype={jquery:J,constructor:Q,selector:"",length:0,toArray:function(){return M.call(this)},get:function(e){return null!=e?0>e?this[e+this.length]:this[e]:M.call(this)},pushStack:function(e){var t=Q.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return Q.each(this,e,t)},map:function(e){return this.pushStack(Q.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(M.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:U,sort:H.sort,splice:H.splice},Q.extend=Q.fn.extend=function(){var e,t,n,r,o,a,i=arguments[0]||{},s=1,l=arguments.length,c=!1;for("boolean"==typeof i&&(c=i,i=arguments[s]||{},s++),"object"==typeof i||Q.isFunction(i)||(i={}),s===l&&(i=this,s--);l>s;s++)if(null!=(e=arguments[s]))for(t in e)n=i[t],i!==(r=e[t])&&(c&&r&&(Q.isPlainObject(r)||(o=Q.isArray(r)))?(o?(o=!1,a=n&&Q.isArray(n)?n:[]):a=n&&Q.isPlainObject(n)?n:{},i[t]=Q.extend(c,a,r)):void 0!==r&&(i[t]=r));return i},Q.extend({expando:"jQuery"+(J+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===Q.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!Q.isArray(e)&&e-parseFloat(e)>=0},isPlainObject:function(e){return!("object"!==Q.type(e)||e.nodeType||Q.isWindow(e)||e.constructor&&!G.call(e.constructor.prototype,"isPrototypeOf"))},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?W[V.call(e)]||"object":typeof e},globalEval:function(e){var t,n=eval;(e=Q.trim(e))&&(1===e.indexOf("use strict")?((t=Y.createElement("script")).text=e,Y.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(Z,"ms-").replace(ee,te)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r=0,o=e.length,i=a(e);if(n){if(i)for(;o>r&&!1!==t.apply(e[r],n);r++);else for(r in e)if(!1===t.apply(e[r],n))break}else if(i)for(;o>r&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(K,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(a(Object(e))?Q.merge(n,"string"==typeof e?[e]:e):U.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:z.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,o=e.length;n>r;r++)e[o++]=t[r];return e.length=o,e},grep:function(e,t,n){for(var r=[],o=0,a=e.length,i=!n;a>o;o++)!t(e[o],o)!==i&&r.push(e[o]);return r},map:function(e,t,n){var r,o=0,i=e.length,s=[];if(a(e))for(;i>o;o++)null!=(r=t(e[o],o,n))&&s.push(r);else for(o in e)null!=(r=t(e[o],o,n))&&s.push(r);return B.apply([],s)},guid:1,proxy:function(e,t){var n,r,o;return"string"==typeof t&&(n=e[t],t=e,e=n),Q.isFunction(e)?(r=M.call(arguments,2),o=function(){return e.apply(t||this,r.concat(M.call(arguments)))},o.guid=e.guid=e.guid||Q.guid++,o):void 0},now:Date.now,support:X}),Q.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(function(e,t){W["[object "+t+"]"]=t.toLowerCase()}));var ne=function(e){function t(e,t,n,r){var o,a,i,s,l,c,d,p,h,g;if((t?t.ownerDocument||t:H)!==_&&D(t),n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=(t=t||_).nodeType)&&9!==s)return[];if(j&&!r){if(o=ye.exec(e))if(i=o[1]){if(9===s){if(!(a=t.getElementById(i))||!a.parentNode)return n;if(a.id===i)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(i))&&F(t,a)&&a.id===i)return n.push(a),n}else{if(o[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((i=o[3])&&w.getElementsByClassName&&t.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(i)),n}if(w.qsa&&(!$||!$.test(e))){if(p=d=R,h=t,g=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=L(e),(d=t.getAttribute("id"))?p=d.replace(xe,"\\$&"):t.setAttribute("id",p),p="[id='"+p+"'] ",l=c.length;l--;)c[l]=p+f(c[l]);h=be.test(e)&&u(t.parentNode)||t,g=c.join(",")}if(g)try{return Z.apply(n,h.querySelectorAll(g)),n}catch(e){}finally{d||t.removeAttribute("id")}}}return T(e.replace(le,"$1"),t,n,r)}function n(){var e=[];return function t(n,r){return e.push(n+" ")>E.cacheLength&&delete t[e.shift()],t[n+" "]=r}}function r(e){return e[R]=!0,e}function o(e){var t=_.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function a(e,t){for(var n=e.split("|"),r=e.length;r--;)E.attrHandle[n[r]]=t}function i(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||X)-(~e.sourceIndex||X);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return r((function(t){return t=+t,r((function(n,r){for(var o,a=e([],n.length,t),i=a.length;i--;)n[o=a[i]]&&(n[o]=!(r[o]=n[o]))}))}))}function u(e){return e&&typeof e.getElementsByTagName!==G&&e}function d(){}function f(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function p(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=B++;return t.first?function(t,n,a){for(;t=t[r];)if(1===t.nodeType||o)return e(t,n,a)}:function(t,n,i){var s,l,c=[M,a];if(i){for(;t=t[r];)if((1===t.nodeType||o)&&e(t,n,i))return!0}else for(;t=t[r];)if(1===t.nodeType||o){if((s=(l=t[R]||(t[R]={}))[r])&&s[0]===M&&s[1]===a)return c[2]=s[2];if(l[r]=c,c[2]=e(t,n,i))return!0}}}function h(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)if(!e[o](t,n,r))return!1;return!0}:e[0]}function g(e,n,r){for(var o=0,a=n.length;a>o;o++)t(e,n[o],r);return r}function m(e,t,n,r,o){for(var a,i=[],s=0,l=e.length,c=null!=t;l>s;s++)(a=e[s])&&(!n||n(a,r,o))&&(i.push(a),c&&t.push(s));return i}function v(e,t,n,o,a,i){return o&&!o[R]&&(o=v(o)),a&&!a[R]&&(a=v(a,i)),r((function(r,i,s,l){var c,u,d,f=[],p=[],h=i.length,v=r||g(t||"*",s.nodeType?[s]:s,[]),y=!e||!r&&t?v:m(v,f,e,s,l),b=n?a||(r?e:h||o)?[]:i:y;if(n&&n(y,b,s,l),o)for(c=m(b,p),o(c,[],s,l),u=c.length;u--;)(d=c[u])&&(b[p[u]]=!(y[p[u]]=d));if(r){if(a||e){if(a){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(y[u]=d);a(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=a?te.call(r,d):f[u])>-1&&(r[c]=!(i[c]=d))}}else b=m(b===i?b.splice(h,b.length):b),a?a(null,i,b,l):Z.apply(i,b)}))}function y(e){for(var t,n,r,o=e.length,a=E.relative[e[0].type],i=a||E.relative[" "],s=a?1:0,l=p((function(e){return e===t}),i,!0),c=p((function(e){return te.call(t,e)>-1}),i,!0),u=[function(e,n,r){return!a&&(r||n!==k)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];o>s;s++)if(n=E.relative[e[s].type])u=[p(h(u),n)];else{if((n=E.filter[e[s].type].apply(null,e[s].matches))[R]){for(r=++s;o>r&&!E.relative[e[r].type];r++);return v(s>1&&h(u),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(le,"$1"),n,r>s&&y(e.slice(s,r)),o>r&&y(e=e.slice(r)),o>r&&f(e))}u.push(n)}return h(u)}function b(e,n){var o=n.length>0,a=e.length>0,i=function(r,i,s,l,c){var u,d,f,p=0,h="0",g=r&&[],v=[],y=k,b=r||a&&E.find.TAG("*",c),x=M+=null==y?1:Math.random()||.1,w=b.length;for(c&&(k=i!==_&&i);h!==w&&null!=(u=b[h]);h++){if(a&&u){for(d=0;f=e[d++];)if(f(u,i,s)){l.push(u);break}c&&(M=x)}o&&((u=!f&&u)&&p--,r&&g.push(u))}if(p+=h,o&&h!==p){for(d=0;f=n[d++];)f(g,v,i,s);if(r){if(p>0)for(;h--;)g[h]||v[h]||(v[h]=Q.call(l));v=m(v)}Z.apply(l,v),c&&!r&&v.length>0&&p+n.length>1&&t.uniqueSort(l)}return c&&(M=x,k=y),g};return o?r(i):i}var x,w,E,C,A,L,S,T,k,N,O,D,_,P,j,$,q,I,F,R="sizzle"+-new Date,H=e.document,M=0,B=0,U=n(),z=n(),W=n(),V=function(e,t){return e===t&&(O=!0),0},G="undefined",X=1<<31,Y={}.hasOwnProperty,J=[],Q=J.pop,K=J.push,Z=J.push,ee=J.slice,te=J.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},ne="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",re="[\\x20\\t\\r\\n\\f]",oe="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ae=oe.replace("w","w#"),ie="\\["+re+"*("+oe+")(?:"+re+"*([*^$|!~]?=)"+re+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ae+"))|)"+re+"*\\]",se=":("+oe+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ie+")*)|.*)\\)|)",le=new RegExp("^"+re+"+|((?:^|[^\\\\])(?:\\\\.)*)"+re+"+$","g"),ce=new RegExp("^"+re+"*,"+re+"*"),ue=new RegExp("^"+re+"*([>+~]|"+re+")"+re+"*"),de=new RegExp("="+re+"*([^\\]'\"]*?)"+re+"*\\]","g"),fe=new RegExp(se),pe=new RegExp("^"+ae+"$"),he={ID:new RegExp("^#("+oe+")"),CLASS:new RegExp("^\\.("+oe+")"),TAG:new RegExp("^("+oe.replace("w","w*")+")"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+se),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+re+"*(even|odd|(([+-]|)(\\d*)n|)"+re+"*(?:([+-]|)"+re+"*(\\d+)|))"+re+"*\\)|)","i"),bool:new RegExp("^(?:"+ne+")$","i"),needsContext:new RegExp("^"+re+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+re+"*((?:-\\d)?\\d*)"+re+"*\\)|)(?=[^-]|$)","i")},ge=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ve=/^[^{]+\{\s*\[native \w/,ye=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,be=/[+~]/,xe=/'|\\/g,we=new RegExp("\\\\([\\da-f]{1,6}"+re+"?|("+re+")|.)","ig"),Ee=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)};try{Z.apply(J=ee.call(H.childNodes),H.childNodes),J[H.childNodes.length].nodeType}catch(e){Z={apply:J.length?function(e,t){K.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}for(x in w=t.support={},A=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},D=t.setDocument=function(e){var t,n=e?e.ownerDocument||e:H,r=n.defaultView;return n!==_&&9===n.nodeType&&n.documentElement?(_=n,P=n.documentElement,j=!A(n),r&&r!==r.top&&(r.addEventListener?r.addEventListener("unload",(function(){D()}),!1):r.attachEvent&&r.attachEvent("onunload",(function(){D()}))),w.attributes=o((function(e){return e.className="i",!e.getAttribute("className")})),w.getElementsByTagName=o((function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length})),w.getElementsByClassName=ve.test(n.getElementsByClassName)&&o((function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length})),w.getById=o((function(e){return P.appendChild(e).id=R,!n.getElementsByName||!n.getElementsByName(R).length})),w.getById?(E.find.ID=function(e,t){if(typeof t.getElementById!==G&&j){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},E.filter.ID=function(e){var t=e.replace(we,Ee);return function(e){return e.getAttribute("id")===t}}):(delete E.find.ID,E.filter.ID=function(e){var t=e.replace(we,Ee);return function(e){var n=typeof e.getAttributeNode!==G&&e.getAttributeNode("id");return n&&n.value===t}}),E.find.TAG=w.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==G?t.getElementsByTagName(e):void 0}:function(e,t){var n,r=[],o=0,a=t.getElementsByTagName(e);if("*"===e){for(;n=a[o++];)1===n.nodeType&&r.push(n);return r}return a},E.find.CLASS=w.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==G&&j?t.getElementsByClassName(e):void 0},q=[],$=[],(w.qsa=ve.test(n.querySelectorAll))&&(o((function(e){e.innerHTML="<select msallowclip=''><option selected=''></option></select>",e.querySelectorAll("[msallowclip^='']").length&&$.push("[*^$]="+re+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||$.push("\\["+re+"*(?:value|"+ne+")"),e.querySelectorAll(":checked").length||$.push(":checked")})),o((function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&$.push("name"+re+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||$.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),$.push(",.*:")}))),(w.matchesSelector=ve.test(I=P.matches||P.webkitMatchesSelector||P.mozMatchesSelector||P.oMatchesSelector||P.msMatchesSelector))&&o((function(e){w.disconnectedMatch=I.call(e,"div"),I.call(e,"[s!='']:x"),q.push("!=",se)})),$=$.length&&new RegExp($.join("|")),q=q.length&&new RegExp(q.join("|")),t=ve.test(P.compareDocumentPosition),F=t||ve.test(P.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},V=t?function(e,t){if(e===t)return O=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!w.sortDetached&&t.compareDocumentPosition(e)===r?e===n||e.ownerDocument===H&&F(H,e)?-1:t===n||t.ownerDocument===H&&F(H,t)?1:N?te.call(N,e)-te.call(N,t):0:4&r?-1:1)}:function(e,t){if(e===t)return O=!0,0;var r,o=0,a=e.parentNode,s=t.parentNode,l=[e],c=[t];if(!a||!s)return e===n?-1:t===n?1:a?-1:s?1:N?te.call(N,e)-te.call(N,t):0;if(a===s)return i(e,t);for(r=e;r=r.parentNode;)l.unshift(r);for(r=t;r=r.parentNode;)c.unshift(r);for(;l[o]===c[o];)o++;return o?i(l[o],c[o]):l[o]===H?-1:c[o]===H?1:0},n):_},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==_&&D(e),n=n.replace(de,"='$1']"),!(!w.matchesSelector||!j||q&&q.test(n)||$&&$.test(n)))try{var r=I.call(e,n);if(r||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,_,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==_&&D(e),F(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==_&&D(e);var n=E.attrHandle[t.toLowerCase()],r=n&&Y.call(E.attrHandle,t.toLowerCase())?n(e,t,!j):void 0;return void 0!==r?r:w.attributes||!j?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,o=0;if(O=!w.detectDuplicates,N=!w.sortStable&&e.slice(0),e.sort(V),O){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)e.splice(n[r],1)}return N=null,e},C=t.getText=function(e){var t,n="",r=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+=C(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=C(t);return n},E=t.selectors={cacheLength:50,createPseudo:r,match:he,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(we,Ee),e[3]=(e[3]||e[4]||e[5]||"").replace(we,Ee),"~="===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]||t.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]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=L(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(we,Ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=U[e+" "];return t||(t=new RegExp("(^|"+re+")"+e+"("+re+"|$)"))&&U(e,(function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==G&&e.getAttribute("class")||"")}))},ATTR:function(e,n,r){return function(o){var a=t.attr(o,e);return null==a?"!="===n:!n||(a+="","="===n?a===r:"!="===n?a!==r:"^="===n?r&&0===a.indexOf(r):"*="===n?r&&a.indexOf(r)>-1:"$="===n?r&&a.slice(-r.length)===r:"~="===n?(" "+a+" ").indexOf(r)>-1:"|="===n&&(a===r||a.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,o){var a="nth"!==e.slice(0,3),i="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===o?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,h,g=a!==i?"nextSibling":"previousSibling",m=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(m){if(a){for(;g;){for(d=t;d=d[g];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[i?m.firstChild:m.lastChild],i&&y){for(p=(c=(u=m[R]||(m[R]={}))[e]||[])[0]===M&&c[1],f=c[0]===M&&c[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(f=p=0)||h.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[M,p,f];break}}else if(y&&(c=(t[R]||(t[R]={}))[e])&&c[0]===M)f=c[1];else for(;(d=++p&&d&&d[g]||(f=p=0)||h.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[R]||(d[R]={}))[e]=[M,f]),d!==t)););return(f-=o)===r||f%r==0&&f/r>=0}}},PSEUDO:function(e,n){var o,a=E.pseudos[e]||E.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return a[R]?a(n):a.length>1?(o=[e,e,"",n],E.setFilters.hasOwnProperty(e.toLowerCase())?r((function(e,t){for(var r,o=a(e,n),i=o.length;i--;)e[r=te.call(e,o[i])]=!(t[r]=o[i])})):function(e){return a(e,0,o)}):a}},pseudos:{not:r((function(e){var t=[],n=[],o=S(e.replace(le,"$1"));return o[R]?r((function(e,t,n,r){for(var a,i=o(e,null,r,[]),s=e.length;s--;)(a=i[s])&&(e[s]=!(t[s]=a))})):function(e,r,a){return t[0]=e,o(t,null,a,n),!n.pop()}})),has:r((function(e){return function(n){return t(e,n).length>0}})),contains:r((function(e){return function(t){return(t.textContent||t.innerText||C(t)).indexOf(e)>-1}})),lang:r((function(e){return pe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(we,Ee).toLowerCase(),function(t){var n;do{if(n=j?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===_.activeElement&&(!_.hasFocus||_.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return!1===e.disabled},disabled:function(e){return!0===e.disabled},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!E.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return ge.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:c((function(){return[0]})),last:c((function(e,t){return[t-1]})),eq:c((function(e,t,n){return[0>n?n+t:n]})),even:c((function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e})),odd:c((function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e})),lt:c((function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e})),gt:c((function(e,t,n){for(var r=0>n?n+t:n;++r<t;)e.push(r);return e}))}},E.pseudos.nth=E.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})E.pseudos[x]=s(x);for(x in{submit:!0,reset:!0})E.pseudos[x]=l(x);return d.prototype=E.filters=E.pseudos,E.setFilters=new d,L=t.tokenize=function(e,n){var r,o,a,i,s,l,c,u=z[e+" "];if(u)return n?0:u.slice(0);for(s=e,l=[],c=E.preFilter;s;){for(i in(!r||(o=ce.exec(s)))&&(o&&(s=s.slice(o[0].length)||s),l.push(a=[])),r=!1,(o=ue.exec(s))&&(r=o.shift(),a.push({value:r,type:o[0].replace(le," ")}),s=s.slice(r.length)),E.filter)!(o=he[i].exec(s))||c[i]&&!(o=c[i](o))||(r=o.shift(),a.push({value:r,type:i,matches:o}),s=s.slice(r.length));if(!r)break}return n?s.length:s?t.error(e):z(e,l).slice(0)},S=t.compile=function(e,t){var n,r=[],o=[],a=W[e+" "];if(!a){for(t||(t=L(e)),n=t.length;n--;)(a=y(t[n]))[R]?r.push(a):o.push(a);(a=W(e,b(o,r))).selector=e}return a},T=t.select=function(e,t,n,r){var o,a,i,s,l,c="function"==typeof e&&e,d=!r&&L(e=c.selector||e);if(n=n||[],1===d.length){if((a=d[0]=d[0].slice(0)).length>2&&"ID"===(i=a[0]).type&&w.getById&&9===t.nodeType&&j&&E.relative[a[1].type]){if(!(t=(E.find.ID(i.matches[0].replace(we,Ee),t)||[])[0]))return n;c&&(t=t.parentNode),e=e.slice(a.shift().value.length)}for(o=he.needsContext.test(e)?0:a.length;o--&&(i=a[o],!E.relative[s=i.type]);)if((l=E.find[s])&&(r=l(i.matches[0].replace(we,Ee),be.test(a[0].type)&&u(t.parentNode)||t))){if(a.splice(o,1),!(e=r.length&&f(a)))return Z.apply(n,r),n;break}}return(c||S(e,d))(r,t,!j,n,be.test(e)&&u(t.parentNode)||t),n},w.sortStable=R.split("").sort(V).join("")===R,w.detectDuplicates=!!O,D(),w.sortDetached=o((function(e){return 1&e.compareDocumentPosition(_.createElement("div"))})),o((function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")}))||a("type|href|height|width",(function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),w.attributes&&o((function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||a("value",(function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue})),o((function(e){return null==e.getAttribute("disabled")}))||a(ne,(function(e,t,n){var r;return n?void 0:!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null})),t}(r);Q.find=ne,Q.expr=ne.selectors,Q.expr[":"]=Q.expr.pseudos,Q.unique=ne.uniqueSort,Q.text=ne.getText,Q.isXMLDoc=ne.isXML,Q.contains=ne.contains;var re=Q.expr.match.needsContext,oe=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ae=/^.[^:#\[\.,]*$/;Q.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?Q.find.matchesSelector(r,e)?[r]:[]:Q.find.matches(e,Q.grep(t,(function(e){return 1===e.nodeType})))},Q.fn.extend({find:function(e){var t,n=this.length,r=[],o=this;if("string"!=typeof e)return this.pushStack(Q(e).filter((function(){for(t=0;n>t;t++)if(Q.contains(o[t],this))return!0})));for(t=0;n>t;t++)Q.find(e,o[t],r);return(r=this.pushStack(n>1?Q.unique(r):r)).selector=this.selector?this.selector+" "+e:e,r},filter:function(e){return this.pushStack(i(this,e||[],!1))},not:function(e){return this.pushStack(i(this,e||[],!0))},is:function(e){return!!i(this,"string"==typeof e&&re.test(e)?Q(e):e||[],!1).length}});var ie,se=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,le=Q.fn.init=function(e,t){var n,r;if(!e)return this;if("string"==typeof e){if(!(n="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:se.exec(e))||!n[1]&&t)return!t||t.jquery?(t||ie).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof Q?t[0]:t,Q.merge(this,Q.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:Y,!0)),oe.test(n[1])&&Q.isPlainObject(t))for(n in t)Q.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}return(r=Y.getElementById(n[2]))&&r.parentNode&&(this.length=1,this[0]=r),this.context=Y,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):Q.isFunction(e)?void 0!==ie.ready?ie.ready(e):e(Q):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),Q.makeArray(e,this))};le.prototype=Q.fn,ie=Q(Y);var ce=/^(?:parents|prev(?:Until|All))/,ue={children:!0,contents:!0,next:!0,prev:!0};Q.extend({dir:function(e,t,n){for(var r=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&Q(e).is(n))break;r.push(e)}return r},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}}),Q.fn.extend({has:function(e){var t=Q(e,this),n=t.length;return this.filter((function(){for(var e=0;n>e;e++)if(Q.contains(this,t[e]))return!0}))},closest:function(e,t){for(var n,r=0,o=this.length,a=[],i=re.test(e)||"string"!=typeof e?Q(e,t||this.context):0;o>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(i?i.index(n)>-1:1===n.nodeType&&Q.find.matchesSelector(n,e))){a.push(n);break}return this.pushStack(a.length>1?Q.unique(a):a)},index:function(e){return e?"string"==typeof e?z.call(Q(e),this[0]):z.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(Q.unique(Q.merge(this.get(),Q(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),Q.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return Q.dir(e,"parentNode")},parentsUntil:function(e,t,n){return Q.dir(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return Q.dir(e,"nextSibling")},prevAll:function(e){return Q.dir(e,"previousSibling")},nextUntil:function(e,t,n){return Q.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return Q.dir(e,"previousSibling",n)},siblings:function(e){return Q.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return Q.sibling(e.firstChild)},contents:function(e){return e.contentDocument||Q.merge([],e.childNodes)}},(function(e,t){Q.fn[e]=function(n,r){var o=Q.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(o=Q.filter(r,o)),this.length>1&&(ue[e]||Q.unique(o),ce.test(e)&&o.reverse()),this.pushStack(o)}}));var de,fe=/\S+/g,pe={};Q.Callbacks=function(e){e="string"==typeof e?pe[e]||function(e){var t=pe[e]={};return Q.each(e.match(fe)||[],(function(e,n){t[n]=!0})),t}(e):Q.extend({},e);var t,n,r,o,a,i,s=[],l=!e.once&&[],c=function(d){for(t=e.memory&&d,n=!0,i=o||0,o=0,a=s.length,r=!0;s&&a>i;i++)if(!1===s[i].apply(d[0],d[1])&&e.stopOnFalse){t=!1;break}r=!1,s&&(l?l.length&&c(l.shift()):t?s=[]:u.disable())},u={add:function(){if(s){var n=s.length;!function t(n){Q.each(n,(function(n,r){var o=Q.type(r);"function"===o?e.unique&&u.has(r)||s.push(r):r&&r.length&&"string"!==o&&t(r)}))}(arguments),r?a=s.length:t&&(o=n,c(t))}return this},remove:function(){return s&&Q.each(arguments,(function(e,t){for(var n;(n=Q.inArray(t,s,n))>-1;)s.splice(n,1),r&&(a>=n&&a--,i>=n&&i--)})),this},has:function(e){return e?Q.inArray(e,s)>-1:!(!s||!s.length)},empty:function(){return s=[],a=0,this},disable:function(){return s=l=t=void 0,this},disabled:function(){return!s},lock:function(){return l=void 0,t||u.disable(),this},locked:function(){return!l},fireWith:function(e,t){return!s||n&&!l||(t=[e,(t=t||[]).slice?t.slice():t],r?l.push(t):c(t)),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!n}};return u},Q.extend({Deferred:function(e){var t=[["resolve","done",Q.Callbacks("once memory"),"resolved"],["reject","fail",Q.Callbacks("once memory"),"rejected"],["notify","progress",Q.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var e=arguments;return Q.Deferred((function(n){Q.each(t,(function(t,a){var i=Q.isFunction(e[t])&&e[t];o[a[1]]((function(){var e=i&&i.apply(this,arguments);e&&Q.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a[0]+"With"](this===r?n.promise():this,i?[e]:arguments)}))})),e=null})).promise()},promise:function(e){return null!=e?Q.extend(e,r):r}},o={};return r.pipe=r.then,Q.each(t,(function(e,a){var i=a[2],s=a[3];r[a[1]]=i.add,s&&i.add((function(){n=s}),t[1^e][2].disable,t[2][2].lock),o[a[0]]=function(){return o[a[0]+"With"](this===o?r:this,arguments),this},o[a[0]+"With"]=i.fireWith})),r.promise(o),e&&e.call(o,o),o},when:function(e){var t,n,r,o=0,a=M.call(arguments),i=a.length,s=1!==i||e&&Q.isFunction(e.promise)?i:0,l=1===s?e:Q.Deferred(),c=function(e,n,r){return function(o){n[e]=this,r[e]=arguments.length>1?M.call(arguments):o,r===t?l.notifyWith(n,r):--s||l.resolveWith(n,r)}};if(i>1)for(t=new Array(i),n=new Array(i),r=new Array(i);i>o;o++)a[o]&&Q.isFunction(a[o].promise)?a[o].promise().done(c(o,r,a)).fail(l.reject).progress(c(o,n,t)):--s;return s||l.resolveWith(r,a),l.promise()}}),Q.fn.ready=function(e){return Q.ready.promise().done(e),this},Q.extend({isReady:!1,readyWait:1,holdReady:function(e){e?Q.readyWait++:Q.ready(!0)},ready:function(e){(!0===e?--Q.readyWait:Q.isReady)||(Q.isReady=!0,!0!==e&&--Q.readyWait>0||(de.resolveWith(Y,[Q]),Q.fn.triggerHandler&&(Q(Y).triggerHandler("ready"),Q(Y).off("ready"))))}}),Q.ready.promise=function(e){return de||(de=Q.Deferred(),"complete"===Y.readyState?setTimeout(Q.ready):(Y.addEventListener("DOMContentLoaded",l,!1),r.addEventListener("load",l,!1))),de.promise(e)},Q.ready.promise();var he=Q.access=function(e,t,n,r,o,a,i){var s=0,l=e.length,c=null==n;if("object"===Q.type(n))for(s in o=!0,n)Q.access(e,t,s,n[s],!0,a,i);else if(void 0!==r&&(o=!0,Q.isFunction(r)||(i=!0),c&&(i?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(Q(e),n)})),t))for(;l>s;s++)t(e[s],n,i?r:r.call(e[s],s,t(e[s],n)));return o?e:c?t.call(e):l?t(e[0],n):a};Q.acceptData=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType},c.uid=1,c.accepts=Q.acceptData,c.prototype={key:function(e){if(!c.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=c.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,Q.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,o=this.key(e),a=this.cache[o];if("string"==typeof t)a[t]=n;else if(Q.isEmptyObject(a))Q.extend(this.cache[o],t);else for(r in t)a[r]=t[r];return a},get:function(e,t){var n=this.cache[this.key(e)];return void 0===t?n:n[t]},access:function(e,t,n){var r;return void 0===t||t&&"string"==typeof t&&void 0===n?void 0!==(r=this.get(e,t))?r:this.get(e,Q.camelCase(t)):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r,o,a=this.key(e),i=this.cache[a];if(void 0===t)this.cache[a]={};else{Q.isArray(t)?r=t.concat(t.map(Q.camelCase)):(o=Q.camelCase(t),r=t in i?[t,o]:(r=o)in i?[r]:r.match(fe)||[]),n=r.length;for(;n--;)delete i[r[n]]}},hasData:function(e){return!Q.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}};var ge=new c,me=new c,ve=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ye=/([A-Z])/g;Q.extend({hasData:function(e){return me.hasData(e)||ge.hasData(e)},data:function(e,t,n){return me.access(e,t,n)},removeData:function(e,t){me.remove(e,t)},_data:function(e,t,n){return ge.access(e,t,n)},_removeData:function(e,t){ge.remove(e,t)}}),Q.fn.extend({data:function(e,t){var n,r,o,a=this[0],i=a&&a.attributes;if(void 0===e){if(this.length&&(o=me.get(a),1===a.nodeType&&!ge.get(a,"hasDataAttrs"))){for(n=i.length;n--;)i[n]&&0===(r=i[n].name).indexOf("data-")&&(r=Q.camelCase(r.slice(5)),u(a,r,o[r]));ge.set(a,"hasDataAttrs",!0)}return o}return"object"==typeof e?this.each((function(){me.set(this,e)})):he(this,(function(t){var n,r=Q.camelCase(e);if(a&&void 0===t){if(void 0!==(n=me.get(a,e)))return n;if(void 0!==(n=me.get(a,r)))return n;if(void 0!==(n=u(a,r,void 0)))return n}else this.each((function(){var n=me.get(this,r);me.set(this,r,t),-1!==e.indexOf("-")&&void 0!==n&&me.set(this,e,t)}))}),null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each((function(){me.remove(this,e)}))}}),Q.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=ge.get(e,t),n&&(!r||Q.isArray(n)?r=ge.access(e,t,Q.makeArray(n)):r.push(n)),r||[]):void 0},dequeue:function(e,t){t=t||"fx";var n=Q.queue(e,t),r=n.length,o=n.shift(),a=Q._queueHooks(e,t);"inprogress"===o&&(o=n.shift(),r--),o&&("fx"===t&&n.unshift("inprogress"),delete a.stop,o.call(e,(function(){Q.dequeue(e,t)}),a)),!r&&a&&a.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return ge.get(e,n)||ge.access(e,n,{empty:Q.Callbacks("once memory").add((function(){ge.remove(e,[t+"queue",n])}))})}}),Q.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?Q.queue(this[0],e):void 0===t?this:this.each((function(){var n=Q.queue(this,e,t);Q._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&Q.dequeue(this,e)}))},dequeue:function(e){return this.each((function(){Q.dequeue(this,e)}))},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,o=Q.Deferred(),a=this,i=this.length,s=function(){--r||o.resolveWith(a,[a])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";i--;)(n=ge.get(a[i],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),o.promise(t)}});var be=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,xe=["Top","Right","Bottom","Left"],we=function(e,t){return e=t||e,"none"===Q.css(e,"display")||!Q.contains(e.ownerDocument,e)},Ee=/^(?:checkbox|radio)$/i;!function(){var e=Y.createDocumentFragment().appendChild(Y.createElement("div")),t=Y.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),X.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",X.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var Ce="undefined";X.focusinBubbles="onfocusin"in r;var Ae=/^key/,Le=/^(?:mouse|pointer|contextmenu)|click/,Se=/^(?:focusinfocus|focusoutblur)$/,Te=/^([^.]*)(?:\.(.+)|)$/;Q.event={global:{},add:function(e,t,n,r,o){var a,i,s,l,c,u,d,f,p,h,g,m=ge.get(e);if(m)for(n.handler&&(n=(a=n).handler,o=a.selector),n.guid||(n.guid=Q.guid++),(l=m.events)||(l=m.events={}),(i=m.handle)||(i=m.handle=function(t){return typeof Q!==Ce&&Q.event.triggered!==t.type?Q.event.dispatch.apply(e,arguments):void 0}),c=(t=(t||"").match(fe)||[""]).length;c--;)p=g=(s=Te.exec(t[c])||[])[1],h=(s[2]||"").split(".").sort(),p&&(d=Q.event.special[p]||{},p=(o?d.delegateType:d.bindType)||p,d=Q.event.special[p]||{},u=Q.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&Q.expr.match.needsContext.test(o),namespace:h.join(".")},a),(f=l[p])||((f=l[p]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(e,r,h,i)||e.addEventListener&&e.addEventListener(p,i,{capture:!1,passive:p.indexOf("touch")>-1&&p.indexOf("scroll")>-1})),d.add&&(d.add.call(e,u),u.handler.guid||(u.handler.guid=n.guid)),o?f.splice(f.delegateCount++,0,u):f.push(u),Q.event.global[p]=!0)},remove:function(e,t,n,r,o){var a,i,s,l,c,u,d,f,p,h,g,m=ge.hasData(e)&&ge.get(e);if(m&&(l=m.events)){for(c=(t=(t||"").match(fe)||[""]).length;c--;)if(p=g=(s=Te.exec(t[c])||[])[1],h=(s[2]||"").split(".").sort(),p){for(d=Q.event.special[p]||{},f=l[p=(r?d.delegateType:d.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=a=f.length;a--;)u=f[a],!o&&g!==u.origType||n&&n.guid!==u.guid||s&&!s.test(u.namespace)||r&&r!==u.selector&&("**"!==r||!u.selector)||(f.splice(a,1),u.selector&&f.delegateCount--,d.remove&&d.remove.call(e,u));i&&!f.length&&(d.teardown&&!1!==d.teardown.call(e,h,m.handle)||Q.removeEvent(e,p,m.handle),delete l[p])}else for(p in l)Q.event.remove(e,p+t[c],n,r,!0);Q.isEmptyObject(l)&&(delete m.handle,ge.remove(e,"events"))}},trigger:function(e,t,n,o){var a,i,s,l,c,u,d,f=[n||Y],p=G.call(e,"type")?e.type:e,h=G.call(e,"namespace")?e.namespace.split("."):[];if(i=s=n=n||Y,3!==n.nodeType&&8!==n.nodeType&&!Se.test(p+Q.event.triggered)&&(p.indexOf(".")>=0&&(h=p.split("."),p=h.shift(),h.sort()),c=p.indexOf(":")<0&&"on"+p,(e=e[Q.expando]?e:new Q.Event(p,"object"==typeof e&&e)).isTrigger=o?2:3,e.namespace=h.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:Q.makeArray(t,[e]),d=Q.event.special[p]||{},o||!d.trigger||!1!==d.trigger.apply(n,t))){if(!o&&!d.noBubble&&!Q.isWindow(n)){for(l=d.delegateType||p,Se.test(l+p)||(i=i.parentNode);i;i=i.parentNode)f.push(i),s=i;s===(n.ownerDocument||Y)&&f.push(s.defaultView||s.parentWindow||r)}for(a=0;(i=f[a++])&&!e.isPropagationStopped();)e.type=a>1?l:d.bindType||p,(u=(ge.get(i,"events")||{})[e.type]&&ge.get(i,"handle"))&&u.apply(i,t),(u=c&&i[c])&&u.apply&&Q.acceptData(i)&&(e.result=u.apply(i,t),!1===e.result&&e.preventDefault());return e.type=p,o||e.isDefaultPrevented()||d._default&&!1!==d._default.apply(f.pop(),t)||!Q.acceptData(n)||c&&Q.isFunction(n[p])&&!Q.isWindow(n)&&((s=n[c])&&(n[c]=null),Q.event.triggered=p,n[p](),Q.event.triggered=void 0,s&&(n[c]=s)),e.result}},dispatch:function(e){e=Q.event.fix(e);var t,n,r,o,a,i=[],s=M.call(arguments),l=(ge.get(this,"events")||{})[e.type]||[],c=Q.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,e)){for(i=Q.event.handlers.call(this,e,l),t=0;(o=i[t++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,n=0;(a=o.handlers[n++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(a.namespace))&&(e.handleObj=a,e.data=a.data,void 0!==(r=((Q.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,s))&&!1===(e.result=r)&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,o,a,i=[],s=t.delegateCount,l=e.target;if(s&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!==this;l=l.parentNode||this)if(!0!==l.disabled||"click"!==e.type){for(r=[],n=0;s>n;n++)void 0===r[o=(a=t[n]).selector+" "]&&(r[o]=a.needsContext?Q(o,this).index(l)>=0:Q.find(o,this,null,[l]).length),r[o]&&r.push(a);r.length&&i.push({elem:l,handlers:r})}return s<t.length&&i.push({elem:this,handlers:t.slice(s)}),i},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,o,a=t.button;return null==e.pageX&&null!=t.clientX&&(r=(n=e.target.ownerDocument||Y).documentElement,o=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||o&&o.scrollLeft||0)-(r&&r.clientLeft||o&&o.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||o&&o.scrollTop||0)-(r&&r.clientTop||o&&o.clientTop||0)),e.which||void 0===a||(e.which=1&a?1:2&a?3:4&a?2:0),e}},fix:function(e){if(e[Q.expando])return e;var t,n,r,o=e.type,a=e,i=this.fixHooks[o];for(i||(this.fixHooks[o]=i=Le.test(o)?this.mouseHooks:Ae.test(o)?this.keyHooks:{}),r=i.props?this.props.concat(i.props):this.props,e=new Q.Event(a),t=r.length;t--;)e[n=r[t]]=a[n];return e.target||(e.target=Y),3===e.target.nodeType&&(e.target=e.target.parentNode),i.filter?i.filter(e,a):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==p()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===p()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&Q.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(e){return Q.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var o=Q.extend(new Q.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?Q.event.trigger(o,null,t):Q.event.dispatch.call(t,o),o.isDefaultPrevented()&&n.preventDefault()}},Q.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},Q.Event=function(e,t){return this instanceof Q.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?d:f):this.type=e,t&&Q.extend(this,t),this.timeStamp=e&&e.timeStamp||Q.now(),void(this[Q.expando]=!0)):new Q.Event(e,t)},Q.Event.prototype={isDefaultPrevented:f,isPropagationStopped:f,isImmediatePropagationStopped:f,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=d,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=d,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=d,e&&e.stopImmediatePropagation&&e.stopImmediatePropagation(),this.stopPropagation()}},Q.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},(function(e,t){Q.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=e.relatedTarget,o=e.handleObj;return(!r||r!==this&&!Q.contains(this,r))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}})),X.focusinBubbles||Q.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){Q.event.simulate(t,e.target,Q.event.fix(e),!0)};Q.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=ge.access(r,t);o||r.addEventListener(e,n,!0),ge.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=ge.access(r,t)-1;o?ge.access(r,t,o):(r.removeEventListener(e,n,!0),ge.remove(r,t))}}})),Q.fn.extend({on:function(e,t,n,r,o){var a,i;if("object"==typeof e){for(i in"string"!=typeof t&&(n=n||t,t=void 0),e)this.on(i,t,n,e[i],o);return this}if(null==n&&null==r?(r=t,n=t=void 0):null==r&&("string"==typeof t?(r=n,n=void 0):(r=n,n=t,t=void 0)),!1===r)r=f;else if(!r)return this;return 1===o&&(a=r,r=function(e){return Q().off(e),a.apply(this,arguments)},r.guid=a.guid||(a.guid=Q.guid++)),this.each((function(){Q.event.add(this,e,r,n,t)}))},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,o;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,Q(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(o in e)this.off(o,t,e[o]);return this}return(!1===t||"function"==typeof t)&&(n=t,t=void 0),!1===n&&(n=f),this.each((function(){Q.event.remove(this,e,n,t)}))},trigger:function(e,t){return this.each((function(){Q.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];return n?Q.event.trigger(e,t,n,!0):void 0}});var ke=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Ne=/<([\w:]+)/,Oe=/<|&#?\w+;/,De=/<(?:script|style|link)/i,_e=/checked\s*(?:[^=]|=\s*.checked.)/i,Pe=/^$|\/(?:java|ecma)script/i,je=/^true\/(.*)/,$e=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,qe={option:[1,"<select multiple='multiple'>","</select>"],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,"",""]};qe.optgroup=qe.option,qe.tbody=qe.tfoot=qe.colgroup=qe.caption=qe.thead,qe.th=qe.td,Q.extend({clone:function(e,t,n){var r,o,a,i,s=e.cloneNode(!0),l=Q.contains(e.ownerDocument,e);if(!(X.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||Q.isXMLDoc(e)))for(i=b(s),r=0,o=(a=b(e)).length;o>r;r++)x(a[r],i[r]);if(t)if(n)for(a=a||b(e),i=i||b(s),r=0,o=a.length;o>r;r++)y(a[r],i[r]);else y(e,s);return(i=b(s,"script")).length>0&&v(i,!l&&b(e,"script")),s},buildFragment:function(e,t,n,r){for(var o,a,i,s,l,c,u=t.createDocumentFragment(),d=[],f=0,p=e.length;p>f;f++)if((o=e[f])||0===o)if("object"===Q.type(o))Q.merge(d,o.nodeType?[o]:o);else if(Oe.test(o)){for(a=a||u.appendChild(t.createElement("div")),i=(Ne.exec(o)||["",""])[1].toLowerCase(),s=qe[i]||qe._default,a.innerHTML=s[1]+o.replace(ke,"<$1></$2>")+s[2],c=s[0];c--;)a=a.lastChild;Q.merge(d,a.childNodes),(a=u.firstChild).textContent=""}else d.push(t.createTextNode(o));for(u.textContent="",f=0;o=d[f++];)if((!r||-1===Q.inArray(o,r))&&(l=Q.contains(o.ownerDocument,o),a=b(u.appendChild(o),"script"),l&&v(a),n))for(c=0;o=a[c++];)Pe.test(o.type||"")&&n.push(o);return u},cleanData:function(e){for(var t,n,r,o,a=Q.event.special,i=0;void 0!==(n=e[i]);i++){if(Q.acceptData(n)&&(o=n[ge.expando])&&(t=ge.cache[o])){if(t.events)for(r in t.events)a[r]?Q.event.remove(n,r):Q.removeEvent(n,r,t.handle);ge.cache[o]&&delete ge.cache[o]}delete me.cache[n[me.expando]]}}}),Q.fn.extend({text:function(e){return he(this,(function(e){return void 0===e?Q.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 this.domManip(arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||h(this,e).appendChild(e)}))},prepend:function(){return this.domManip(arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=h(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return this.domManip(arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return this.domManip(arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},remove:function(e,t){for(var n,r=e?Q.filter(e,this):this,o=0;null!=(n=r[o]);o++)t||1!==n.nodeType||Q.cleanData(b(n)),n.parentNode&&(t&&Q.contains(n.ownerDocument,n)&&v(b(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(Q.cleanData(b(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return Q.clone(this,e,t)}))},html:function(e){return he(this,(function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!De.test(e)&&!qe[(Ne.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(ke,"<$1></$2>");try{for(;r>n;n++)1===(t=this[n]||{}).nodeType&&(Q.cleanData(b(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)}),null,e,arguments.length)},replaceWith:function(){var e=arguments[0];return this.domManip(arguments,(function(t){e=this.parentNode,Q.cleanData(b(this)),e&&e.replaceChild(t,this)})),e&&(e.length||e.nodeType)?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t){e=B.apply([],e);var n,r,o,a,i,s,l=0,c=this.length,u=this,d=c-1,f=e[0],p=Q.isFunction(f);if(p||c>1&&"string"==typeof f&&!X.checkClone&&_e.test(f))return this.each((function(n){var r=u.eq(n);p&&(e[0]=f.call(this,n,r.html())),r.domManip(e,t)}));if(c&&(r=(n=Q.buildFragment(e,this[0].ownerDocument,!1,this)).firstChild,1===n.childNodes.length&&(n=r),r)){for(a=(o=Q.map(b(n,"script"),g)).length;c>l;l++)i=n,l!==d&&(i=Q.clone(i,!0,!0),a&&Q.merge(o,b(i,"script"))),t.call(this[l],i,l);if(a)for(s=o[o.length-1].ownerDocument,Q.map(o,m),l=0;a>l;l++)i=o[l],Pe.test(i.type||"")&&!ge.access(i,"globalEval")&&Q.contains(s,i)&&(i.src?Q._evalUrl&&Q._evalUrl(i.src):Q.globalEval(i.textContent.replace($e,"")))}return this}}),Q.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},(function(e,t){Q.fn[e]=function(e){for(var n,r=[],o=Q(e),a=o.length-1,i=0;a>=i;i++)n=i===a?this:this.clone(!0),Q(o[i])[t](n),U.apply(r,n.get());return this.pushStack(r)}}));var Ie,Fe={},Re=/^margin/,He=new RegExp("^("+be+")(?!px)[a-z%]+$","i"),Me=function(e){return e.ownerDocument.defaultView.getComputedStyle(e,null)};!function(){function e(){i.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",i.innerHTML="",o.appendChild(a);var e=r.getComputedStyle(i,null);t="1%"!==e.top,n="4px"===e.width,o.removeChild(a)}var t,n,o=Y.documentElement,a=Y.createElement("div"),i=Y.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",X.clearCloneStyle="content-box"===i.style.backgroundClip,a.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",a.appendChild(i),r.getComputedStyle&&Q.extend(X,{pixelPosition:function(){return e(),t},boxSizingReliable:function(){return null==n&&e(),n},reliableMarginRight:function(){var e,t=i.appendChild(Y.createElement("div"));return t.style.cssText=i.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",t.style.marginRight=t.style.width="0",i.style.width="1px",o.appendChild(a),e=!parseFloat(r.getComputedStyle(t,null).marginRight),o.removeChild(a),e}}))}(),Q.swap=function(e,t,n,r){var o,a,i={};for(a in t)i[a]=e.style[a],e.style[a]=t[a];for(a in o=n.apply(e,r||[]),t)e.style[a]=i[a];return o};var Be=/^(none|table(?!-c[ea]).+)/,Ue=new RegExp("^("+be+")(.*)$","i"),ze=new RegExp("^([+-])=("+be+")","i"),We={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","O","Moz","ms"];Q.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=C(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,i,s=Q.camelCase(t),l=e.style;return t=Q.cssProps[s]||(Q.cssProps[s]=L(l,s)),i=Q.cssHooks[t]||Q.cssHooks[s],void 0===n?i&&"get"in i&&void 0!==(o=i.get(e,!1,r))?o:l[t]:("string"==(a=typeof n)&&(o=ze.exec(n))&&(n=(o[1]+1)*o[2]+parseFloat(Q.css(e,t)),a="number"),void(null!=n&&n==n&&("number"!==a||Q.cssNumber[s]||(n+="px"),X.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),i&&"set"in i&&void 0===(n=i.set(e,n,r))||(l[t]=n))))}},css:function(e,t,n,r){var o,a,i,s=Q.camelCase(t);return t=Q.cssProps[s]||(Q.cssProps[s]=L(e.style,s)),(i=Q.cssHooks[t]||Q.cssHooks[s])&&"get"in i&&(o=i.get(e,!0,n)),void 0===o&&(o=C(e,t,r)),"normal"===o&&t in Ve&&(o=Ve[t]),""===n||n?(a=parseFloat(o),!0===n||Q.isNumeric(a)?a||0:o):o}}),Q.each(["height","width"],(function(e,t){Q.cssHooks[t]={get:function(e,n,r){return n?Be.test(Q.css(e,"display"))&&0===e.offsetWidth?Q.swap(e,We,(function(){return k(e,t,r)})):k(e,t,r):void 0},set:function(e,n,r){var o=r&&Me(e);return S(0,n,r?T(e,t,r,"border-box"===Q.css(e,"boxSizing",!1,o),o):0)}}})),Q.cssHooks.marginRight=A(X.reliableMarginRight,(function(e,t){return t?Q.swap(e,{display:"inline-block"},C,[e,"marginRight"]):void 0})),Q.each({margin:"",padding:"",border:"Width"},(function(e,t){Q.cssHooks[e+t]={expand:function(n){for(var r=0,o={},a="string"==typeof n?n.split(" "):[n];4>r;r++)o[e+xe[r]+t]=a[r]||a[r-2]||a[0];return o}},Re.test(e)||(Q.cssHooks[e+t].set=S)})),Q.fn.extend({css:function(e,t){return he(this,(function(e,t,n){var r,o,a={},i=0;if(Q.isArray(t)){for(r=Me(e),o=t.length;o>i;i++)a[t[i]]=Q.css(e,t[i],!1,r);return a}return void 0!==n?Q.style(e,t,n):Q.css(e,t)}),e,t,arguments.length>1)},show:function(){return N(this,!0)},hide:function(){return N(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each((function(){we(this)?Q(this).show():Q(this).hide()}))}}),Q.Tween=O,O.prototype={constructor:O,init:function(e,t,n,r,o,a){this.elem=e,this.prop=n,this.easing=o||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=a||(Q.cssNumber[n]?"":"px")},cur:function(){var e=O.propHooks[this.prop];return e&&e.get?e.get(this):O.propHooks._default.get(this)},run:function(e){var t,n=O.propHooks[this.prop];return this.pos=t=this.options.duration?Q.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):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):O.propHooks._default.set(this),this}},O.prototype.init.prototype=O.prototype,O.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=Q.css(e.elem,e.prop,""))&&"auto"!==t?t:0:e.elem[e.prop]},set:function(e){Q.fx.step[e.prop]?Q.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[Q.cssProps[e.prop]]||Q.cssHooks[e.prop])?Q.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},O.propHooks.scrollTop=O.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},Q.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},Q.fx=O.prototype.init,Q.fx.step={};var Xe,Ye,Je=/^(?:toggle|show|hide)$/,Qe=new RegExp("^(?:([+-])=|)("+be+")([a-z%]*)$","i"),Ke=/queueHooks$/,Ze=[function(e,t,n){var r,o,a,i,s,l,c,u=this,d={},f=e.style,p=e.nodeType&&we(e),h=ge.get(e,"fxshow");for(r in n.queue||(null==(s=Q._queueHooks(e,"fx")).unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always((function(){u.always((function(){s.unqueued--,Q.queue(e,"fx").length||s.empty.fire()}))}))),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[f.overflow,f.overflowX,f.overflowY],"inline"===("none"===(c=Q.css(e,"display"))?ge.get(e,"olddisplay")||E(e.nodeName):c)&&"none"===Q.css(e,"float")&&(f.display="inline-block")),n.overflow&&(f.overflow="hidden",u.always((function(){f.overflow=n.overflow[0],f.overflowX=n.overflow[1],f.overflowY=n.overflow[2]}))),t)if(o=t[r],Je.exec(o)){if(delete t[r],a=a||"toggle"===o,o===(p?"hide":"show")){if("show"!==o||!h||void 0===h[r])continue;p=!0}d[r]=h&&h[r]||Q.style(e,r)}else c=void 0;if(Q.isEmptyObject(d))"inline"===("none"===c?E(e.nodeName):c)&&(f.display=c);else for(r in h?"hidden"in h&&(p=h.hidden):h=ge.access(e,"fxshow",{}),a&&(h.hidden=!p),p?Q(e).show():u.done((function(){Q(e).hide()})),u.done((function(){var t;for(t in ge.remove(e,"fxshow"),d)Q.style(e,t,d[t])})),d)i=P(p?h[r]:0,r,u),r in h||(h[r]=i.start,p&&(i.end=i.start,i.start="width"===r||"height"===r?1:0))}],et={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),o=Qe.exec(t),a=o&&o[3]||(Q.cssNumber[e]?"":"px"),i=(Q.cssNumber[e]||"px"!==a&&+r)&&Qe.exec(Q.css(n.elem,e)),s=1,l=20;if(i&&i[3]!==a){a=a||i[3],o=o||[],i=+r||1;do{i/=s=s||".5",Q.style(n.elem,e,i+a)}while(s!==(s=n.cur()/r)&&1!==s&&--l)}return o&&(i=n.start=+i||+r||0,n.unit=a,n.end=o[1]?i+(o[1]+1)*o[2]:+o[2]),n}]};Q.Animation=Q.extend(j,{tweener:function(e,t){Q.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,r=0,o=e.length;o>r;r++)n=e[r],et[n]=et[n]||[],et[n].unshift(t)},prefilter:function(e,t){t?Ze.unshift(e):Ze.push(e)}}),Q.speed=function(e,t,n){var r=e&&"object"==typeof e?Q.extend({},e):{complete:n||!n&&t||Q.isFunction(e)&&e,duration:e,easing:n&&t||t&&!Q.isFunction(t)&&t};return r.duration=Q.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in Q.fx.speeds?Q.fx.speeds[r.duration]:Q.fx.speeds._default,(null==r.queue||!0===r.queue)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){Q.isFunction(r.old)&&r.old.call(this),r.queue&&Q.dequeue(this,r.queue)},r},Q.fn.extend({fadeTo:function(e,t,n,r){return this.filter(we).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var o=Q.isEmptyObject(e),a=Q.speed(t,n,r),i=function(){var t=j(this,Q.extend({},e),a);(o||ge.get(this,"finish"))&&t.stop(!0)};return i.finish=i,o||!1===a.queue?this.each(i):this.queue(a.queue,i)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each((function(){var t=!0,o=null!=e&&e+"queueHooks",a=Q.timers,i=ge.get(this);if(o)i[o]&&i[o].stop&&r(i[o]);else for(o in i)i[o]&&i[o].stop&&Ke.test(o)&&r(i[o]);for(o=a.length;o--;)a[o].elem!==this||null!=e&&a[o].queue!==e||(a[o].anim.stop(n),t=!1,a.splice(o,1));(t||!n)&&Q.dequeue(this,e)}))},finish:function(e){return!1!==e&&(e=e||"fx"),this.each((function(){var t,n=ge.get(this),r=n[e+"queue"],o=n[e+"queueHooks"],a=Q.timers,i=r?r.length:0;for(n.finish=!0,Q.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=a.length;t--;)a[t].elem===this&&a[t].queue===e&&(a[t].anim.stop(!0),a.splice(t,1));for(t=0;i>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish}))}}),Q.each(["toggle","show","hide"],(function(e,t){var n=Q.fn[t];Q.fn[t]=function(e,r,o){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(_(t,!0),e,r,o)}})),Q.each({slideDown:_("show"),slideUp:_("hide"),slideToggle:_("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},(function(e,t){Q.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}})),Q.timers=[],Q.fx.tick=function(){var e,t=0,n=Q.timers;for(Xe=Q.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||Q.fx.stop(),Xe=void 0},Q.fx.timer=function(e){Q.timers.push(e),e()?Q.fx.start():Q.timers.pop()},Q.fx.interval=13,Q.fx.start=function(){Ye||(Ye=setInterval(Q.fx.tick,Q.fx.interval))},Q.fx.stop=function(){clearInterval(Ye),Ye=null},Q.fx.speeds={slow:600,fast:200,_default:400},Q.fn.delay=function(e,t){return e=Q.fx&&Q.fx.speeds[e]||e,t=t||"fx",this.queue(t,(function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}}))},function(){var e=Y.createElement("input"),t=Y.createElement("select"),n=t.appendChild(Y.createElement("option"));e.type="checkbox",X.checkOn=""!==e.value,X.optSelected=n.selected,t.disabled=!0,X.optDisabled=!n.disabled,(e=Y.createElement("input")).value="t",e.type="radio",X.radioValue="t"===e.value}();var tt,nt=Q.expr.attrHandle;Q.fn.extend({attr:function(e,t){return he(this,Q.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each((function(){Q.removeAttr(this,e)}))}}),Q.extend({attr:function(e,t,n){var r,o,a=e.nodeType;if(e&&3!==a&&8!==a&&2!==a)return typeof e.getAttribute===Ce?Q.prop(e,t,n):(1===a&&Q.isXMLDoc(e)||(t=t.toLowerCase(),r=Q.attrHooks[t]||(Q.expr.match.bool.test(t)?tt:void 0)),void 0===n?r&&"get"in r&&null!==(o=r.get(e,t))?o:null==(o=Q.find.attr(e,t))?void 0:o:null!==n?r&&"set"in r&&void 0!==(o=r.set(e,n,t))?o:(e.setAttribute(t,n+""),n):void Q.removeAttr(e,t))},removeAttr:function(e,t){var n,r,o=0,a=t&&t.match(fe);if(a&&1===e.nodeType)for(;n=a[o++];)r=Q.propFix[n]||n,Q.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!X.radioValue&&"radio"===t&&Q.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}}}),tt={set:function(e,t,n){return!1===t?Q.removeAttr(e,n):e.setAttribute(n,n),n}},Q.each(Q.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=nt[t]||Q.find.attr;nt[t]=function(e,t,r){var o,a;return r||(a=nt[t],nt[t]=o,o=null!=n(e,t,r)?t.toLowerCase():null,nt[t]=a),o}}));var rt=/^(?:input|select|textarea|button)$/i;Q.fn.extend({prop:function(e,t){return he(this,Q.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[Q.propFix[e]||e]}))}}),Q.extend({propFix:{for:"htmlFor",class:"className"},prop:function(e,t,n){var r,o,a=e.nodeType;if(e&&3!==a&&8!==a&&2!==a)return(1!==a||!Q.isXMLDoc(e))&&(t=Q.propFix[t]||t,o=Q.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||rt.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),X.optSelected||(Q.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),Q.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){Q.propFix[this.toLowerCase()]=this}));var ot=/[\t\r\n\f]/g;Q.fn.extend({addClass:function(e){var t,n,r,o,a,i,s="string"==typeof e&&e,l=0,c=this.length;if(Q.isFunction(e))return this.each((function(t){Q(this).addClass(e.call(this,t,this.className))}));if(s)for(t=(e||"").match(fe)||[];c>l;l++)if(r=1===(n=this[l]).nodeType&&(n.className?(" "+n.className+" ").replace(ot," "):" ")){for(a=0;o=t[a++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");i=Q.trim(r),n.className!==i&&(n.className=i)}return this},removeClass:function(e){var t,n,r,o,a,i,s=0===arguments.length||"string"==typeof e&&e,l=0,c=this.length;if(Q.isFunction(e))return this.each((function(t){Q(this).removeClass(e.call(this,t,this.className))}));if(s)for(t=(e||"").match(fe)||[];c>l;l++)if(r=1===(n=this[l]).nodeType&&(n.className?(" "+n.className+" ").replace(ot," "):"")){for(a=0;o=t[a++];)for(;r.indexOf(" "+o+" ")>=0;)r=r.replace(" "+o+" "," ");i=e?Q.trim(r):"",n.className!==i&&(n.className=i)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):this.each(Q.isFunction(e)?function(n){Q(this).toggleClass(e.call(this,n,this.className,t),t)}:function(){if("string"===n)for(var t,r=0,o=Q(this),a=e.match(fe)||[];t=a[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else(n===Ce||"boolean"===n)&&(this.className&&ge.set(this,"__className__",this.className),this.className=this.className||!1===e?"":ge.get(this,"__className__")||"")})},hasClass:function(e){for(var t=" "+e+" ",n=0,r=this.length;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(ot," ").indexOf(t)>=0)return!0;return!1}});var at=/\r/g;Q.fn.extend({val:function(e){var t,n,r,o=this[0];return arguments.length?(r=Q.isFunction(e),this.each((function(n){var o;1===this.nodeType&&(null==(o=r?e.call(this,n,Q(this).val()):e)?o="":"number"==typeof o?o+="":Q.isArray(o)&&(o=Q.map(o,(function(e){return null==e?"":e+""}))),(t=Q.valHooks[this.type]||Q.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))}))):o?(t=Q.valHooks[o.type]||Q.valHooks[o.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:"string"==typeof(n=o.value)?n.replace(at,""):null==n?"":n:void 0}}),Q.extend({valHooks:{option:{get:function(e){var t=Q.find.attr(e,"value");return null!=t?t:Q.trim(Q.text(e))}},select:{get:function(e){for(var t,n,r=e.options,o=e.selectedIndex,a="select-one"===e.type||0>o,i=a?null:[],s=a?o+1:r.length,l=0>o?s:a?o:0;s>l;l++)if(!(!(n=r[l]).selected&&l!==o||(X.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&Q.nodeName(n.parentNode,"optgroup"))){if(t=Q(n).val(),a)return t;i.push(t)}return i},set:function(e,t){for(var n,r,o=e.options,a=Q.makeArray(t),i=o.length;i--;)((r=o[i]).selected=Q.inArray(r.value,a)>=0)&&(n=!0);return n||(e.selectedIndex=-1),a}}}}),Q.each(["radio","checkbox"],(function(){Q.valHooks[this]={set:function(e,t){return Q.isArray(t)?e.checked=Q.inArray(Q(e).val(),t)>=0:void 0}},X.checkOn||(Q.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),Q.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),(function(e,t){Q.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}})),Q.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},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,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var it=Q.now(),st=/\?/;Q.parseJSON=function(e){return JSON.parse(e+"")},Q.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return(!t||t.getElementsByTagName("parsererror").length)&&Q.error("Invalid XML: "+e),t};var lt,ct,ut=/#.*$/,dt=/([?&])_=[^&]*/,ft=/^(.*?):[ \t]*([^\r\n]*)$/gm,pt=/^(?:GET|HEAD)$/,ht=/^\/\//,gt=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,mt={},vt={},yt="*/".concat("*");try{ct=location.href}catch(e){(ct=Y.createElement("a")).href="",ct=ct.href}lt=gt.exec(ct.toLowerCase())||[],Q.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ct,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(lt[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":yt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":Q.parseJSON,"text xml":Q.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?I(I(e,Q.ajaxSettings),t):I(Q.ajaxSettings,e)},ajaxPrefilter:$(mt),ajaxTransport:$(vt),ajax:function(e,t){function n(e,t,n,i){var l,u,v,y,x,E=t;2!==b&&(b=2,s&&clearTimeout(s),r=void 0,a=i||"",w.readyState=e>0?4:0,l=e>=200&&300>e||304===e,n&&(y=function(e,t,n){for(var r,o,a,i,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(o in s)if(s[o]&&s[o].test(r)){l.unshift(o);break}if(l[0]in n)a=l[0];else{for(o in n){if(!l[0]||e.converters[o+" "+l[0]]){a=o;break}i||(i=o)}a=a||i}return a?(a!==l[0]&&l.unshift(a),n[a]):void 0}(d,w,n)),y=function(e,t,n,r){var o,a,i,s,l,c={},u=e.dataTypes.slice();if(u[1])for(i in e.converters)c[i.toLowerCase()]=e.converters[i];for(a=u.shift();a;)if(e.responseFields[a]&&(n[e.responseFields[a]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=a,a=u.shift())if("*"===a)a=l;else if("*"!==l&&l!==a){if(!(i=c[l+" "+a]||c["* "+a]))for(o in c)if((s=o.split(" "))[1]===a&&(i=c[l+" "+s[0]]||c["* "+s[0]])){!0===i?i=c[o]:!0!==c[o]&&(a=s[0],u.unshift(s[1]));break}if(!0!==i)if(i&&e.throws)t=i(t);else try{t=i(t)}catch(e){return{state:"parsererror",error:i?e:"No conversion from "+l+" to "+a}}}return{state:"success",data:t}}(d,y,w,l),l?(d.ifModified&&((x=w.getResponseHeader("Last-Modified"))&&(Q.lastModified[o]=x),(x=w.getResponseHeader("etag"))&&(Q.etag[o]=x)),204===e||"HEAD"===d.type?E="nocontent":304===e?E="notmodified":(E=y.state,u=y.data,l=!(v=y.error))):(v=E,(e||!E)&&(E="error",0>e&&(e=0))),w.status=e,w.statusText=(t||E)+"",l?h.resolveWith(f,[u,E,w]):h.rejectWith(f,[w,E,v]),w.statusCode(m),m=void 0,c&&p.trigger(l?"ajaxSuccess":"ajaxError",[w,d,l?u:v]),g.fireWith(f,[w,E]),c&&(p.trigger("ajaxComplete",[w,d]),--Q.active||Q.event.trigger("ajaxStop")))}"object"==typeof e&&(t=e,e=void 0),t=t||{};var r,o,a,i,s,l,c,u,d=Q.ajaxSetup({},t),f=d.context||d,p=d.context&&(f.nodeType||f.jquery)?Q(f):Q.event,h=Q.Deferred(),g=Q.Callbacks("once memory"),m=d.statusCode||{},v={},y={},b=0,x="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!i)for(i={};t=ft.exec(a);)i[t[1].toLowerCase()]=t[2];t=i[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=y[n]=y[n]||e,v[e]=t),this},overrideMimeType:function(e){return b||(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else w.always(e[w.status]);return this},abort:function(e){var t=e||x;return r&&r.abort(t),n(0,t),this}};if(h.promise(w).complete=g.add,w.success=w.done,w.error=w.fail,d.url=((e||d.url||ct)+"").replace(ut,"").replace(ht,lt[1]+"//"),d.type=t.method||t.type||d.method||d.type,d.dataTypes=Q.trim(d.dataType||"*").toLowerCase().match(fe)||[""],null==d.crossDomain&&(l=gt.exec(d.url.toLowerCase()),d.crossDomain=!(!l||l[1]===lt[1]&&l[2]===lt[2]&&(l[3]||("http:"===l[1]?"80":"443"))===(lt[3]||("http:"===lt[1]?"80":"443")))),d.data&&d.processData&&"string"!=typeof d.data&&(d.data=Q.param(d.data,d.traditional)),q(mt,d,t,w),2===b)return w;for(u in(c=d.global)&&0==Q.active++&&Q.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!pt.test(d.type),o=d.url,d.hasContent||(d.data&&(o=d.url+=(st.test(o)?"&":"?")+d.data,delete d.data),!1===d.cache&&(d.url=dt.test(o)?o.replace(dt,"$1_="+it++):o+(st.test(o)?"&":"?")+"_="+it++)),d.ifModified&&(Q.lastModified[o]&&w.setRequestHeader("If-Modified-Since",Q.lastModified[o]),Q.etag[o]&&w.setRequestHeader("If-None-Match",Q.etag[o])),(d.data&&d.hasContent&&!1!==d.contentType||t.contentType)&&w.setRequestHeader("Content-Type",d.contentType),w.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+yt+"; q=0.01":""):d.accepts["*"]),d.headers)w.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(!1===d.beforeSend.call(f,w,d)||2===b))return w.abort();for(u in x="abort",{success:1,error:1,complete:1})w[u](d[u]);if(r=q(vt,d,t,w)){w.readyState=1,c&&p.trigger("ajaxSend",[w,d]),d.async&&d.timeout>0&&(s=setTimeout((function(){w.abort("timeout")}),d.timeout));try{b=1,r.send(v,n)}catch(e){if(!(2>b))throw e;n(-1,e)}}else n(-1,"No Transport");return w},getJSON:function(e,t,n){return Q.get(e,t,n,"json")},getScript:function(e,t){return Q.get(e,void 0,t,"script")}}),Q.each(["get","post"],(function(e,t){Q[t]=function(e,n,r,o){return Q.isFunction(n)&&(o=o||r,r=n,n=void 0),Q.ajax({url:e,type:t,dataType:o,data:n,success:r})}})),Q.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],(function(e,t){Q.fn[t]=function(e){return this.on(t,e)}})),Q._evalUrl=function(e){return Q.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},Q.fn.extend({wrapAll:function(e){var t;return Q.isFunction(e)?this.each((function(t){Q(this).wrapAll(e.call(this,t))})):(this[0]&&(t=Q(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 this.each(Q.isFunction(e)?function(t){Q(this).wrapInner(e.call(this,t))}:function(){var t=Q(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=Q.isFunction(e);return this.each((function(n){Q(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(){return this.parent().each((function(){Q.nodeName(this,"body")||Q(this).replaceWith(this.childNodes)})).end()}}),Q.expr.filters.hidden=function(e){return e.offsetWidth<=0&&e.offsetHeight<=0},Q.expr.filters.visible=function(e){return!Q.expr.filters.hidden(e)};var bt=/%20/g,xt=/\[\]$/,wt=/\r?\n/g,Et=/^(?:submit|button|image|reset|file)$/i,Ct=/^(?:input|select|textarea|keygen)/i;Q.param=function(e,t){var n,r=[],o=function(e,t){t=Q.isFunction(t)?t():null==t?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=Q.ajaxSettings&&Q.ajaxSettings.traditional),Q.isArray(e)||e.jquery&&!Q.isPlainObject(e))Q.each(e,(function(){o(this.name,this.value)}));else for(n in e)F(n,e[n],t,o);return r.join("&").replace(bt,"+")},Q.fn.extend({serialize:function(){return Q.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=Q.prop(this,"elements");return e?Q.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!Q(this).is(":disabled")&&Ct.test(this.nodeName)&&!Et.test(e)&&(this.checked||!Ee.test(e))})).map((function(e,t){var n=Q(this).val();return null==n?null:Q.isArray(n)?Q.map(n,(function(e){return{name:t.name,value:e.replace(wt,"\r\n")}})):{name:t.name,value:n.replace(wt,"\r\n")}})).get()}}),Q.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(e){}};var At=0,Lt={},St={0:200,1223:204},Tt=Q.ajaxSettings.xhr();r.ActiveXObject&&Q(r).on("unload",(function(){for(var e in Lt)Lt[e]()})),X.cors=!!Tt&&"withCredentials"in Tt,X.ajax=Tt=!!Tt,Q.ajaxTransport((function(e){var t;return X.cors||Tt&&!e.crossDomain?{send:function(n,r){var o,a=e.xhr(),i=++At;if(a.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(o in e.xhrFields)a[o]=e.xhrFields[o];for(o in e.mimeType&&a.overrideMimeType&&a.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest"),n)a.setRequestHeader(o,n[o]);t=function(e){return function(){t&&(delete Lt[i],t=a.onload=a.onerror=null,"abort"===e?a.abort():"error"===e?r(a.status,a.statusText):r(St[a.status]||a.status,a.statusText,"string"==typeof a.responseText?{text:a.responseText}:void 0,a.getAllResponseHeaders()))}},a.onload=t(),a.onerror=t("error"),t=Lt[i]=t("abort");try{a.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}:void 0})),Q.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return Q.globalEval(e),e}}}),Q.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),Q.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain)return{send:function(r,o){t=Q("<script>").prop({async:!0,charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),Y.head.appendChild(t[0])},abort:function(){n&&n()}}}));var kt=[],Nt=/(=)\?(?=&|$)|\?\?/;Q.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=kt.pop()||Q.expando+"_"+it++;return this[e]=!0,e}}),Q.ajaxPrefilter("json jsonp",(function(e,t,n){var o,a,i,s=!1!==e.jsonp&&(Nt.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Nt.test(e.data)&&"data");return s||"jsonp"===e.dataTypes[0]?(o=e.jsonpCallback=Q.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(Nt,"$1"+o):!1!==e.jsonp&&(e.url+=(st.test(e.url)?"&":"?")+e.jsonp+"="+o),e.converters["script json"]=function(){return i||Q.error(o+" was not called"),i[0]},e.dataTypes[0]="json",a=r[o],r[o]=function(){i=arguments},n.always((function(){r[o]=a,e[o]&&(e.jsonpCallback=t.jsonpCallback,kt.push(o)),i&&Q.isFunction(a)&&a(i[0]),i=a=void 0})),"script"):void 0})),Q.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||Y;var r=oe.exec(e),o=!n&&[];return r?[t.createElement(r[1])]:(r=Q.buildFragment([e],t,o),o&&o.length&&Q(o).remove(),Q.merge([],r.childNodes))};var Ot=Q.fn.load;Q.fn.load=function(e,t,n){if("string"!=typeof e&&Ot)return Ot.apply(this,arguments);var r,o,a,i=this,s=e.indexOf(" ");return s>=0&&(r=Q.trim(e.slice(s)),e=e.slice(0,s)),Q.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(o="POST"),i.length>0&&Q.ajax({url:e,type:o,dataType:"html",data:t}).done((function(e){a=arguments,i.html(r?Q("<div>").append(Q.parseHTML(e)).find(r):e)})).complete(n&&function(e,t){i.each(n,a||[e.responseText,t,e])}),this},Q.expr.filters.animated=function(e){return Q.grep(Q.timers,(function(t){return e===t.elem})).length};var Dt=r.document.documentElement;Q.offset={setOffset:function(e,t,n){var r,o,a,i,s,l,c=Q.css(e,"position"),u=Q(e),d={};"static"===c&&(e.style.position="relative"),s=u.offset(),a=Q.css(e,"top"),l=Q.css(e,"left"),("absolute"===c||"fixed"===c)&&(a+l).indexOf("auto")>-1?(i=(r=u.position()).top,o=r.left):(i=parseFloat(a)||0,o=parseFloat(l)||0),Q.isFunction(t)&&(t=t.call(e,n,s)),null!=t.top&&(d.top=t.top-s.top+i),null!=t.left&&(d.left=t.left-s.left+o),"using"in t?t.using.call(e,d):u.css(d)}},Q.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){Q.offset.setOffset(this,e,t)}));var t,n,r=this[0],o={top:0,left:0},a=r&&r.ownerDocument;return a?(t=a.documentElement,Q.contains(t,r)?(typeof r.getBoundingClientRect!==Ce&&(o=r.getBoundingClientRect()),n=R(a),{top:o.top+n.pageYOffset-t.clientTop,left:o.left+n.pageXOffset-t.clientLeft}):o):void 0},position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return"fixed"===Q.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),Q.nodeName(e[0],"html")||(r=e.offset()),r.top+=Q.css(e[0],"borderTopWidth",!0),r.left+=Q.css(e[0],"borderLeftWidth",!0)),{top:t.top-r.top-Q.css(n,"marginTop",!0),left:t.left-r.left-Q.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent||Dt;e&&!Q.nodeName(e,"html")&&"static"===Q.css(e,"position");)e=e.offsetParent;return e||Dt}))}}),Q.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},(function(e,t){var n="pageYOffset"===t;Q.fn[e]=function(o){return he(this,(function(e,o,a){var i=R(e);return void 0===a?i?i[t]:e[o]:void(i?i.scrollTo(n?r.pageXOffset:a,n?a:r.pageYOffset):e[o]=a)}),e,o,arguments.length,null)}})),Q.each(["top","left"],(function(e,t){Q.cssHooks[t]=A(X.pixelPosition,(function(e,n){return n?(n=C(e,t),He.test(n)?Q(e).position()[t]+"px":n):void 0}))})),Q.each({Height:"height",Width:"width"},(function(e,t){Q.each({padding:"inner"+e,content:t,"":"outer"+e},(function(n,r){Q.fn[r]=function(r,o){var a=arguments.length&&(n||"boolean"!=typeof r),i=n||(!0===r||!0===o?"margin":"border");return he(this,(function(t,n,r){var o;return Q.isWindow(t)?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?Q.css(t,n,i):Q.style(t,n,r,i)}),t,a?r:void 0,a,null)}}))})),Q.fn.size=function(){return this.length},Q.fn.andSelf=Q.fn.addBack,void 0===(n=function(){return Q}.apply(t,[]))||(e.exports=n);var _t=r.jQuery,Pt=r.$;return Q.noConflict=function(e){return r.$===Q&&(r.$=Pt),e&&r.jQuery===Q&&(r.jQuery=_t),Q},typeof o===Ce&&(r.jQuery=r.$=Q),Q},"object"==typeof e.exports?e.exports=r.document?o(r,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return o(e)}:o(r)},816:()=>{function e(e){return null==e||null==e||""==e||"string"==typeof e&&""==e.trim()}function t(e){var t=$(e).closest("[data-back-to-top-container]").offset();null!=t?$("html,body").animate({scrollTop:t.top},700):$("html,body").animate({scrollTop:0},700)}function n(e){$("html,body").animate({scrollTop:$(window).height()-$("#agora-layout-header").height()},700)}agora((function(){function r(){var e=$(this),t=$("#"+e.data("page-scroll")),n=null!=t&&null!=t&&t.length>0?t.offset().top:0,r=0;try{var o=e.data("page-scroll-offset");r=void 0!==o&&""!=o?parseInt(o):$("#agora-layout-header").height()}catch(e){}$("html, body").animate({scrollTop:n-r},1500);try{$("#"+e.data("page-scroll-tab-id")).trigger("click")}catch(e){}}jQuery.fn.ForceNumericOnly=function(){return this.each((function(){$(this).keydown((function(e){var t=e.charCode||e.keyCode||0;return e.shiftKey&&(t=0),8==t||9==t||13==t||46==t||110==t||190==t||t>=35&&t<=40||t>=48&&t<=57||t>=96&&t<=105}))}))},$("[data-numeric-only]").ForceNumericOnly(),$(document).ready((function(){$("[data-numeric-only]").ForceNumericOnly()})),$(document).on("click","[data-page-scroll]",r),$(document).on("tap","[data-page-scroll]",r),$(document).on("click","[data-back-to-top]",(function(){t(this)})),$(document).on("tap","[data-back-to-top]",(function(){t(this)})),$(document).on("click","[data-back-to-down]",(function(){n()})),$(document).on("tap","[data-back-to-down]",(function(){n()})),$(document).on("click","[data-href]",(function(t){$(t.target).closest("[data-non-click-content]").length>0||e($(this).data("href"))||(e($(this).data("target"))?location.href=$(this).data("href"):window.open($(this).data("href"),$(this).data("target")))}))}))},264:()=>{function ClosePopup(){$("[data-modaldialog-close]").trigger("click")}agora((function(){$(document).on("click","[data-modaldialog]",(function(){var e=$(this);e.prop("disabled")||(e.prop("disabled",!0),setTimeout((function(){e.prop("disabled",!1)}),2e3),$(this).AgoraDialogModal({AfterLoad:$(this).attr("data-modaldialog-afterLoad")}))})),$(document).on("click","[data-modaldialog-close]",(function(){$(this).AgoraDialogModal({CloseModal:!0}),"clear"==$(this).data("modaldialog-close")&&ClearFormval("[data-request]")})),$(document).on("click","[data-modaldialog-close-form]",(function(){$(this).AgoraDialogModal({CloseModal:!0,AfterLoad:$(this).attr("data-modaldialog-afterLoad")})}))})),function($){function agoraDialog(sender,options){var _defaults={ServiceUrl:"",ModalId:"IBPmodalcontainer",Params:null,Html:null,ParentCss:null,EnableCloseButton:!0,EnableLoader:!0,EnableAjaxHtmlLoad:!1,HideCloseButton:!1,CloseModal:!1,CloseWhenUserPressEscape:!0,Transition:"FadeIn",BeforeLoad:null,AfterLoad:null},_options=$.extend(_defaults,options);if(_options.CloseModal)return $(sender).closest(".agora-mdl-data-dialog-container").trigger("dispose"),$(sender).closest(".agora-mdl-data-dialog-container").removeClass("popup-open"),$(sender).closest(".agora-mdl-data-dialog-container").remove(),void $("body").removeClass("popup-active");function LoadOptions(){IsNotNull(sender.attr("data-modaldialog-src"))&&(_options.ServiceUrl=sender.attr("data-modaldialog-src")),IsNotNull(sender.attr("data-modaldialog-ajax"))&&(_options.EnableAjaxHtmlLoad=sender.attr("data-modaldialog-ajax")),IsNotNull(sender.attr("data-modaldialog-ParentCss"))&&(_options.ParentCss=sender.attr("data-modaldialog-ParentCss")),IsNotNull(sender.attr("data-modaldialog-CloseWhenUserPressEscape"))&&(_options.CloseWhenUserPressEscape="true"==sender.attr("data-modaldialog-CloseWhenUserPressEscape")),IsNotNull(sender.attr("data-modaldialog-HideCloseButton"))&&(_options.HideCloseButton="true"==sender.attr("data-modaldialog-HideCloseButton")),IsNotNull(sender.attr("data-modaldialog-id"))&&(_options.ModalId=sender.attr("data-modaldialog-id")),GetHtml()}function GetHtml(){_options.EnableAjaxHtmlLoad?($("#"+_options.ModalId).remove(),$.ajax({url:_options.ServiceUrl,type:"post",dataType:"html",data:_options.Params,cache:!1,success:function(e){_options.Html=e,BindHtml()},error:function(e){ShowAlert("Unknown Error. Please try later!",3e3,"alert_box",null),_options.EnableLoader&&ShowLoading()},statusCode:{404:function(){ShowAlert("Service not found!",3e3,"alert_box",null),_options.EnableLoader&&ShowLoading()}}})):(_options.AfterLoad&&_options.AfterLoad(),_options.Html=$("#"+sender.attr("data-modaldialog-id")).clone().wrap("#"+sender.attr("data-modaldialog-id")).html()),BindHtml()}function BindHtml(){null!=_options.Html&&($('<div id="'+_options.ModalId+'" class="agora-mdl-data-dialog-container '+_options.ParentCss+'"><div class="agora-mdl-data-dialog-container-body">'+(_options.HideCloseButton?"":'<div data-modaldialog-close="" class="mdl-close"></div>')+_options.Html+'</div><div id="popup" class="mdl-js-snackbar mdl-snackbar"><div class="mdl-snackbar__text"></div><button aria-label="button" class="mdl-snackbar__action" type="button"></button></div> </div>').appendTo("body"),$("#"+_options.ModalId).addClass("popup-open"),$("body").addClass("popup-active"),_options.EnableLoader&&ShowLoading(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom(),$("#"+_options.ModalId).find(".mdl-textfield--floating-label input.mdl-textfield__input:not([placeholder])").attr("placeholder"," "))}_options.AfterLoad&&(_options.AfterLoad=eval("(function() { "+_options.AfterLoad+"("+sender.attr("data-modaldialog-id")+"); })")),_options.EnableLoader&&ShowLoading(),LoadOptions(),$(document).keydown((function(e){"27"==e.keyCode&&_options.CloseWhenUserPressEscape&&($("#"+_options.ModalId).removeClass("popup-open"),$("#"+_options.ModalId).remove(),$("body").removeClass("popup-active"))}))}$.fn.AgoraDialogModal=function(e){return new agoraDialog(this,e)}}(jQuery)},136:()=>{function e(e){return null!=e&&null!=e&&e.length>0&&"0"!=e&&0!=e}window.agRequest={GET:async function(e,t){var n="";for(var r in t)n=n+(""!=n?"&":"")+r+"="+t[r];return e+=e.indexOf("?")>-1?"&":"?"+n,(await fetch(e,{method:"GET",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()},POST:async function(e,t){var n=new URLSearchParams;for(var r in t)n.append(r,t[r]);return(await fetch(e,{method:"POST",cache:"no-cache",body:n})).json()}},async function(){async function e(){document.querySelectorAll('[data-src]:not(.ag-lazy):not(.no-ag):not([data-src*="{{"])').forEach((function(e,n){e.classList.add("ag-lazy");var r=function(){!async function(e,n){var r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";if(await async function(e){var t=e.getBoundingClientRect(),n=document.body,r=document.documentElement,o=window.pageYOffset||r.scrollTop||n.scrollTop,a=(window.pageXOffset||r.scrollLeft||n.scrollLeft,r.clientTop||n.clientTop||0),i=(r.clientLeft||n.clientLeft,t.top+o-a),s=t.bottom+o-a;let l=o,c=l+window.innerHeight;return s>l&&i<c}(e)){if(null==e)return;var o=await async function(e,n){if(null==n)return null;var r=n.hasAttribute("data-ratio-auto");if(r)return{url:e};var o=await t(n,16,9);if(null==o)return null;var a=/.*\?(.*?(mh|mw)\=(\d+))*/gi.exec(e),i="";null!=n.getAttribute("data-crop")&&(i+="&mode=crop");e.indexOf("/"),0;return null!=a?{url:e,size:o}:{url:`${e}?`+(o.width>0?`mw=${o.width}`+(o.height>0?"&":""):"")+(o.height>0?`mh=${o.height}`:"")+`${i}`,size:o}}(e.getAttribute("data-src"),e);"VIDEO"==e.nodeName?setTimeout((function(){e.setAttribute("src",o.url)}),1e4):"OBJECT"==e.nodeName||"AUDIO"==e.nodeName?e.setAttribute("src",o.url):"IMG"==e.nodeName?(e.addEventListener("load",(function(){e.getAttribute("src")!=r&&e.classList.add("ag-lazy-s")})),e.setAttribute("src",r),null!=o&&(o.size&&(o.size.width>0&&e.setAttribute("width",o.size.width),o.size.height>0&&e.setAttribute("height",o.size.height)),e.setAttribute("src",o.url))):e.style["background-image"]=`url('${o.url}')`,n()}new IntersectionObserver((function(){console.log(e,"View")}),{root:null,rootMargin:"0px",threshold:.1})}(e,(function(){document.body.removeEventListener("ag.lazy",r)}))};document.body.addEventListener("ag.lazy",r),r()}))}async function t(e,n,r){if(null==e)return null;var o=e.getBoundingClientRect(),a=e.getAttribute("data-ratio"),i=null;a&&null!=a&&null!=(i=/^(?<width>[0-9\.]{1,4}):(?<height>[0-9\.]{1,4})$/gi.exec(a))&&(0==(n=parseFloat(i.groups.width))&&(n=-1),0==(r=parseFloat(i.groups.height))&&(r=-1));var s=o.width,l=o.height;return e.classList.contains("ag-lazy")&&(s=e.getAttribute("width"),l=e.getAttribute("height"),null!=s&&null!=s&&""!=s||(s=e.style.width),s=null==s||null==s||""==s?0:parseInt(s.replace(/[^\d]+/gi,"")),l=null==l||null==l||""==l?0:parseInt(l.replace(/[^\d]+/gi,""))),s!=l&&(null==s||null==l||l<s/n*r||s<l/r*n)&&(s>0?l=s/n*r:s=l/r*n),(s>0||n<0)&&(l>0||r<0)?(s=Math.floor(s),l=Math.floor(l),{width:n<0?0:s+(10-s%10),height:r<0?0:l+(10-l%10)}):await t(e.parentElement,n,r)}async function n(){if(null!=document.querySelector(".burger-c")){async function e(){document.querySelector(".burger-c").classList.contains("item-n-2")&&(document.querySelector(".burger-c").classList.remove("item-n-2"),document.querySelector(".burger-c").classList.add("item-n-1"));const e=document.querySelector(".item-uc");document.querySelector(".item-h").querySelector("nav").insertBefore(e,document.querySelector(".item-h").querySelector("nav").firstChild)}window.innerWidth<=1024&&e(),window.innerWidth>1024&&async function(){document.querySelector(".burger-c").classList.contains("item-n-1")&&(document.querySelector(".burger-c").classList.remove("item-n-1"),document.querySelector(".burger-c").classList.add("item-n-2"));const e=document.querySelector(".item-uc");document.querySelector(".item-h").appendChild(e)}(),document.querySelector(".burger-c ~ nav").offsetWidth<document.querySelector(".burger-c ~ nav").scrollWidth&&e()}}document.addEventListener("DOMContentLoaded",(async function(){document.body.addEventListener("ag.lazy.refresh",e),document.body.addEventListener("ag.refresh",e);var t=new CustomEvent("ag.lazy.refresh");document.body.dispatchEvent(t),document.addEventListener("scroll",(function(e){var t=new CustomEvent("ag.lazy");document.body.dispatchEvent(t)})),t=new CustomEvent("ag.lazy"),document.body.dispatchEvent(t),window.agLazy={refresh:function(){var e=new CustomEvent("ag.lazy.refresh");document.body.dispatchEvent(e)},validate:function(){var e=new CustomEvent("ag.lazy");document.body.dispatchEvent(e)}}})),async function(){null!=document.querySelector(".item-acc-i")&&document.querySelectorAll(".item-acc-i").forEach((e=>{const t=e.closest(".item-acc-c");e.classList.contains("open")&&(t.style.maxHeight=t.scrollHeight+"px"),e.addEventListener("click",(()=>{e.classList.toggle("open"),e.classList.contains("open")?t.style.maxHeight=t.scrollHeight+"px":e.classList.contains("open")||(t.style.maxHeight=document.querySelector(".item-acc-i").offsetHeight+"px")}))}))}(),async function(){null!=document.querySelector(".item-tab-b")&&document.querySelectorAll(".item-tab-b").forEach(((e,t)=>{e.addEventListener("click",(()=>{const n=document.querySelectorAll(".item-tab-c"),r=e.parentElement,o=r.parentElement;r.querySelectorAll(".item-tab-b").forEach((e=>{e.classList.remove("active")})),o.querySelectorAll(".item-tab-c").forEach((e=>{e.classList.remove("active"),n[t].classList.add("active")})),e.classList.add("active")}))}))}(),async function(){if(null!=document.querySelector(".item-sea")){document.querySelectorAll(".con-menu a").forEach((function(e){e.addEventListener("click",(function(){document.querySelector(".label-con").setAttribute("data-country",e.innerHTML),e.closest(".item-dr-c").previousElementSibling.classList.contains("active")&&e.closest(".item-dr-c").previousElementSibling.classList.remove("active")}))}));const t=document.querySelectorAll(".item-dr > .item-dr-la");async function e(){window.innerWidth<=1024&&(document.querySelector(".item-onstxt").addEventListener("click",(function(){document.body.classList.add("srch-opnd")})),document.querySelectorAll(".cancel-btn").forEach((function(e){e.addEventListener("click",(function(){document.body.classList.remove("srch-opnd")}))})))}t.forEach(((e,n)=>{e.addEventListener("click",(()=>{var r;r=n,e.classList.toggle("active"),t.forEach(((e,t)=>{t!==r&&e.classList.remove("active")}))}))})),window.addEventListener("mouseup",(function(e){t.forEach((t=>{e.target.closest(".item-dr-la")||e.target.closest(".item-dr-c")||t.classList.remove("active")}))})),document.querySelectorAll(".item-cl").forEach((function(e){e.addEventListener("click",(function(){e.closest(".item-dr-c").previousElementSibling.classList.contains("active")&&e.closest(".item-dr-c").previousElementSibling.classList.remove("active")}))})),e(),window.addEventListener("resize",e)}}(),window.addEventListener("scroll",(async function(){window.scrollY>10?document.body.classList.add("scroll"):document.body.classList.remove("scroll")})),n(),window.addEventListener("resize",n),async function(){var e=document.querySelectorAll(".a-b-1, .a-b-2, .a-b-3, .a-b-4, .a-b-5");null!=e&&e.forEach((e=>{e.addEventListener("click",(function(e){var t=e.offsetX,n=e.offsetY;if(document.getElementsByClassName("ripple").length<10){var r=document.createElement("span");r.classList.add("ripple"),r.style.left=t+"px",r.style.top=n+"px",this.appendChild(r),setTimeout((function(){r.remove()}),1e3)}}))}))}(),async function(){var e=document.querySelectorAll(".video-play");null!=e&&e.forEach((e=>{e.addEventListener("playing",(function(){e.closest("figure").classList.add("no-btn")})),e.addEventListener("pause",(function(){e.closest("figure").classList.remove("no-btn")}))}))}()}(),agora((function(){$(document).on("click","[data-for]",(function(e){try{var t=$(this).data("for");$('[for="'+t+'"]').trigger("click")}catch(e){}}))})),async function(){var e=!1;async function t(){var e=null;return null!=window.localStorage.getItem("AGUSER")&&(e=JSON.parse(window.localStorage.getItem("AGUSER"))),e}async function n(e){if(null==e)window.localStorage.removeItem("AGUSER"),document.body.dispatchEvent(new CustomEvent("ag.user.clear"));else if(e.Guid){var t={};t.Guid=e.Guid,t.Name=e.Name,t.FirstName=e.FirstName,t.LastName=e.LastName,t.Email=e.Email,t.Phone=e.Phone,t.MobilePhone=e.MobilePhone,window.localStorage.setItem("AGUSER",JSON.stringify(t)),async function(){}()}}async function r(){document.querySelectorAll("[ag-user]").forEach((function(n){!async function(n){n.classList.add("is-applied");n.cloneNode(!0);var r=await t();if(null!=r){!async function(){e?o():document.body.addEventListener("ag.sync.verified.contact",(function(){o()}));document.body.addEventListener("ag.lazy.refresh",(function(){o()})),document.body.addEventListener("ag.user.refresh.collection",(function(){o(!0)})),document.body.addEventListener("ag.user.clear.collection",(function(){window.localStorage.removeItem("AGUSERCOLLECTION3")})),document.body.addEventListener("ag.user.clear",(function(){document.body.dispatchEvent(new CustomEvent("ag.user.clear.collection"))}))}();var i=await async function(e){var t=new a("p");t.a("ag-user","");var n=t.n("button");n.a("class","user-logged-in a-b-1 f-s-2 u-logined s-c-p m-l-16 xa-b-w-l r-b"),n.h(e.Name),n.cl((function(e){return e.preventDefault(),n.node.classList.contains("active")?n.node.classList.remove("active"):n.node.classList.add("active"),!1}));var r=t.n("span");return r.n("span").h("Hi, "+e.Name),r.n("input").a("type","hidden").a("id","CONTACT_GUID").a("value",e.Guid),r.n("a").a("href","/dashboard/default.aspx").h("Dashboard"),r.n("span").a("data-modaldialog-src","/dashboard/EditProfile.aspx").a("data-modaldialog-ajax","true").a("data-modaldialog","").h("Edit Profile"),r.n("a").a("href","/dashboard/SignOut.aspx").a("data-agora-icon","").h("Log out").cl((function(){document.body.dispatchEvent(new CustomEvent("ag.user.out"))})),t.node}(r);n.parentElement.insertBefore(i,n),n.remove()}}(n)}))}async function o(e){var t=await async function(e,t){return new Promise((async function(n,r){var o=null,a=t?null:window.localStorage.getItem("AGUSERCOLLECTION"+e);null==a?(o=await window.agRequest.GET("/services/agoraClient.ashx",{type:"USERCOLLECTION",collectionType:e}),window.localStorage.setItem("AGUSERCOLLECTION"+e,JSON.stringify(o)),n(o)):n(o=JSON.parse(a))}))}(3,e);t.Items.reduce((function(e,t){return e?[...e,...t.Items]:[...t.Items]}),[]).forEach((async function(e){!async function(e,t){var n=document.querySelectorAll('[data-perform-action-url*="pk='+e.PK+'"][data-perform-action-url*="rt='+e.RT+'"]');n.forEach((async function(e){e.setAttribute("ag-user-collection",t)}))}(e,3)}))}function a(e){return this.node=document.createElement(e),this}document.body.addEventListener("ag.user.in",(function(e){n(e.detail)})),document.body.addEventListener("ag.user.out",(function(e){n(null)})),a.prototype.a=function(e,t){return this.node.setAttribute(e,t),this},a.prototype.n=function(e){var t=new a(e);return this.node.appendChild(t.node),t},a.prototype.h=function(e){return this.node.innerHTML=e,this},a.prototype.cl=function(e){return this.node.removeEventListener("click",e),this.node.addEventListener("click",e),this},window.agUser={collection:{refresh:function(){document.body.dispatchEvent(new CustomEvent("ag.user.refresh.collection"))}}},r(),document.body.addEventListener("ag.sync.check",(async function(){var n=await t(),r=window.localStorage.getItem("AGSYNC");null==r||null==n||JSON.parse(r).ContactGuid==n.Guid?(document.body.dispatchEvent(new CustomEvent("ag.sync.verified.contact")),e=!0):document.body.dispatchEvent(new CustomEvent("ag.sync.set",{detail:{contactguid:n.Guid,eventType:"contact"}}))})),document.body.addEventListener("ag.sync.verified",(async function(){document.body.dispatchEvent(new CustomEvent("ag.sync.verified.contact")),e=!0}))}(),async function(){async function e(){var e=window.localStorage.getItem("AGSYNC");if(null!=e){var t=JSON.parse(e),n=new Date(t.updatedOn),r=new Date;if(r.setMinutes(r.getMinutes()-1),n>r)return void document.body.dispatchEvent(new CustomEvent("ag.sync.verified"))}!async function(){var e=await window.agRequest.GET("/services/agoraClient.ashx",{type:"SYNC"});e.updatedOn=new Date,window.localStorage.setItem("AGSYNC",JSON.stringify(e)),document.body.dispatchEvent(new CustomEvent("ag.sync.check"))}()}!async function(){document.body.addEventListener("ag.sync.set",(async function(e){await window.agRequest.POST("/services/agoraClient.ashx",Object.assign({type:"SET"},e.detail)),e.detail?.eventType&&document.body.dispatchEvent(new CustomEvent("ag.sync.verified."+e.detail.eventType))})),document.body.addEventListener("ag.sync.invalid",(async function(e){document.body.dispatchEvent(new CustomEvent("ag.sync.reset")),window.location.reload()})),e()}()}();var t=new CustomEvent("onAgoraLoad");document.dispatchEvent(t),document.isAgoraLoaded=!0,t=new CustomEvent("onCssLoad"),document.dispatchEvent(t),document.isCssLoaded=!0,function(){function t(t,n,r,o){if(!t.closest("div[contenteditable]").attr("contenteditable")&&void 0!==n||void 0!==r)switch((o=void 0!==o?o:"gallery").toLowerCase()){case"gallery":var a=t.find('[data-sort-object="CMNCMN"]');("undefined"!=a&&null!=a&&a.length>0||!n.match(/(^|\/)(d)?sort\-[a-z]+/g))&&(n=(function(t){var n=t.find('[data-sort-object="CMNCMN"]');if("undefined"!=n&&null!=n&&n.length>0&&e(n.val()))return n.val();return function(e){switch(e){case"PROPERTY":case"PROPERTYRENT":return"/dsort-p";case"AGENT":case"AGENTTEAM":case"OFFICE":return"/sort-n"}return""}("PROPERTY")}(t)+"/"+n.replace("http://","").replace(/(^|\/)(d)?sort\-[a-z]+/g,"")).replace("//","/")),$.ajax({type:"POST",url:"/services/MAX/agoraGetGalleryView.aspx",data:{UrlQuery:n,TypeOfSearch:"SALE",IsContentPage:"true",DemandKey:r},dataType:"html",success:function(a){if(!t.closest("div[contenteditable]").attr("contenteditable")){var i='<section class="result-page" data-ck-propertylist="" data-ck-demand-key="'+r+'" data-ck-property-url="'+n+'" data-ck-demand-layout="'+o+'">'+a+"</section>";t.after(i),t.remove(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom(),$('[data-ck-demand-key="'+r+'"] #propertyGrid').each((function(){$(this).find(".property:not(.init)").each((function(){!function(t){var n=t,r=n.find(".slides");r.attr("data-css-slider","0");var o=n.find("[data-mk]").data("mk"),a=n.find("[data-mlsboard]").data("mlsboard"),i=n.find("[data-detail-url]").data("detail-url"),s=$("[data-pcode]").data("pcode"),l=n.find("[data-mls-photo]").data("mls-photo"),c=n.find("[data-native-tab]").data("native-tab");e(l)||(l="/images/company/"+s+"/NoPhotoImage/image-not-found.jpg");var u=parseInt(r.data("value"),10),d=n.closest("[id]"),f=0==n.length?"un":d.attr("id").replace(/\$/gi,"");(function(e,t,n,r,o,a,i,s){var l=0,c=n+r+o+"_";$('<input type="radio" aria-label="'+c+'slider" name="'+c+'slider" id="'+(c+l)+'" checked />').appendTo(a);var u=$('<div class="nav"></div>'),d=$('<label aria-label="next" aria-controls="myCarousel-items" data-css-slider-nav="propphoto" for="'+(c+(l+1))+'" class="next"><span aria-label="next" class="visuallyhidden">next</span></label>'),f=$('<label aria-label="prev" aria-controls="myCarousel-items" data-css-slider-nav="propphoto" for="'+(c+(parseInt(t,10)-1))+'" class="prev"><span aria-label="prev" class="visuallyhidden">prev</span></label>');if(f.on("click",g),d.on("click",g),f.appendTo(u),d.appendTo(u),"PSB"==$("[data-pcode]").data("pcode"))var p="";else p='target = "_blank"';"undefined"!=s&&""!=s&&1==s&&(p="");var h=$('<li class="slide-container" aria-roledescription="carousel" role="contentinfo"><div class="slide"><div class="Prop_img" role="img" aria-label="bannerImage" style="background-image:url(\''+e+'\');"><a aria-label="'+c+'slider"'+p+'href="'+i+'"></a></div></div></li>');function g(){var e=$(this);f.off("click"),d.off("click"),$.ajax({url:"/services/agoraPropertyPhotos.aspx",data:{mlsboard:r,mlsno:o,container:c},success:function(t){a.append(t),e.trigger("click")}})}h.append(u),h.appendTo(a)})(l,u,f+(new Date).getMilliseconds(),a,o,r,i,c),n.addClass("init")}($(this))}))})),window.agLazy.refresh()}},error:function(){ShowLoading()}});break;case"carousel":$.ajax({type:"POST",url:"/services/agoraGetCarouselItem.aspx",data:{UrlQuery:n,TypeOfSearch:"SALE",IsContentPage:"true",DemandKey:r},dataType:"html",success:function(e){if(!t.closest("div[contenteditable]").attr("contenteditable")){var a='<section class="result-page" data-ck-propertylist="" data-ck-demand-key="'+r+'" data-ck-property-url="'+n+'" data-ck-demand-layout="'+o+'">'+e+"</section>";t.after(a),$('[data-query-list]:not(.init)[data-service-url][data-rt^="CMN"]').each((function(){$(this).trigger("init"),$(this).addClass("init")})),t.remove(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom()}},error:function(){ShowLoading()}})}}$("img[data-demand-key]").each((function(){t($(this),$(this).data("demand-url"),$(this).data("demand-key"),$(this).data("layout"))})),$(document).on("click","[data-ck-href]",null,(function(){t($(this).parents("[data-ck-propertylist]:first"),$(this).data("ck-href"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-key"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-layout"))})),async function(){var e,t,n={languages:[{code:"en",label:"English"},{code:"es",label:"Spanish",localLabel:"Español"},{code:"nl",label:"Dutch",localLabel:"Nederlands"},{code:"pr",label:"Portugese",localLabel:"Português"},{code:"fr",label:"French",localLabel:"Français"}],currencies:[{code:"USD",base:"USD",label:"Dollar",format:"$###,###,###.##"},{code:"AED",base:"USD",label:"United Arab Emirates Dirham",format:"AED###,###,###.##"},{code:"BSD",base:"USD",label:"Bahamian Dollar",format:"B$###,###,###.##"},{code:"CAD",base:"USD",label:"Canadian Dollar",format:"$###,###,###.##"},{code:"DOP",base:"USD",label:"Dominican Peso",format:"RD$###,###,###.##"},{code:"EUR",base:"USD",label:"Euro",format:"€###,###,###.##"},{code:"JMD",base:"USD",label:"Jamaican Dollar",format:"J$###,###,###.##"},{code:"KYD",base:"USD",label:"Cayman Islands Dollar",format:"CI$###,###,###.##"},{code:"MXN",base:"USD",label:"Mexican Peso",format:"$###,###,###.##"},{code:"PAB",base:"USD",label:"Panamanian Balboa",format:"B/.###,###,###.##"}],units:[{code:"imperial",label:"Imperial"},{code:"metric",label:"Metric"}],presets:[{code:"BS",label:"Bahamas",currency:"BSD",language:"en",messurement:"metric"},{code:"CA",label:"Canada",currency:"CAD",language:["en","fr"],messurement:"metric"},{code:"JM",label:"Jamaica",currency:"JMD",language:"en",messurement:"metric"},{code:"KY",label:"Cayman Islands",currency:"KYD",language:"en",messurement:"metric"},{code:"TC",label:"Turks & Caicos Islands",localLabel:"",currency:"USD",language:"en",messurement:"metric"},{code:"US",label:"United States",localLabel:"",currency:"USD",language:"en",messurement:"imperial"},{code:"DY",label:"Dominican Republic",localLabel:"República Dominicana",currency:"USD",language:"en",messurement:"metric"},{code:"ES",label:"Spain",localLabel:"España",currency:"USD",language:"en",messurement:"metric"},{code:"MX",label:"Mexico",localLabel:"México",currency:"MXN",language:"en",messurement:"metric"},{code:"PA",label:"Panama",localLabel:"Panamá",currency:"PAB",language:"en",messurement:"metric"},{code:"NL",label:"Nederlands",localLabel:"Nederland",currency:"EUR",language:"en",messurement:"metric"},{code:"PT",label:"Portugal",currency:"EUR",language:"en",messurement:"metric"}],unitConvertions:[{unit:"SQFT",tragetUnit:"Sq.M",constant:.092903,notation:["Sqft","Sq.Ft","Sq.Ft.","Sq. Ft.","SF"]},{unit:"MI",tragetUnit:"KM",constant:1.60934,notation:["mi","miles","mile"]},{unit:"AC",tragetUnit:"SQM",constant:4046.86,notation:["acre","acres"]},{unit:"LOTSIZE",tragetUnit:"Lot Size",targetNotation:"㎡",constant:4046.86,notation:["Lot Size"]}]},r=null;async function o(){var e=b();if(null==r&&(r=Object.assign({},e)),e?.language==r?.language){r=Object.assign({},e);var t=await async function(){return new Promise((async function(e,t){var n=await async function(){var e=window.localStorage.getItem("LOCALLABELS"),t=null;null!=e&&(t=JSON.parse(e));return t}(),r=b();if(null!=n){var o=new Date;if(o.setHours(o.getHours()-1),new Date(n.updatedOn)>o&&n.Locale.indexOf(r.language)>-1)return void e(n)}(n=await T("/services/agoraClient.ashx",{type:"LABELS"})).updatedOn=new Date,a(n),e(n)}))}();e?.language&&-1==t.Locale.indexOf(e.language)&&(await C("language"),window.location.reload());var n=document.querySelectorAll("[ag-l-k]");n&&n.forEach((function(e){!async function(e,t){var n=e.getAttribute("ag-l-k"),r=null;if(t[n]||s.test(n))if(e.childNodes&&1==e.childNodes.length)if(s.lastIndex=0,s.test(n)){s.lastIndex=0;for(var o=n;null!=(r=s.exec(o));)o=o.replace(r[0],t[r.groups.LabelID]?t[r.groups.LabelID].lbl:"");e.childNodes[0].textContent=o}else e.childNodes[0].textContent=t[n]?t[n].lbl:"";else if(t[n]){var a=document.createElement("span");a.innerHTML=t[n].lbl,l(e,a)}for(var c=0;c<e.attributes.length;c++){var u=e.attributes[c];if(i.lastIndex=0,null!=(r=i.exec(u.name))){for(var d=r.groups.Attribute,f=u.value;null!=(r=s.exec(f));)f=f.replace(r[0],t[r.groups.LabelID]?t[r.groups.LabelID].lbl:"");e.setAttribute(d,f)}}}(e,t.Labels)}))}else window.location.reload()}async function a(e){window.localStorage.setItem("LOCALLABELS",JSON.stringify(e))}var i=/ag\-l\-k\-(?<Attribute>[^\=]+)/gm,s=/\[(?<LabelID>[^\]]+)\]/gm;async function l(e,t){for(var n=0;n<t.childNodes.length;n++)if(t.childNodes[n]?.textContent&&e.childNodes[n]?.textContent)e.childNodes[n].textContent=t.childNodes[n]?.textContent;else{if(!(n<t.childNodes.length&&n<e.childNodes.length))return;l(e.childNodes[n],t.childNodes[n])}}async function c(e){var t,r,o=await async function(){return new Promise((async function(e,t){var n=localStorage.getItem("CONVERTIONRATES"),r=null;if(n&&null!=n){r=JSON.parse(n);var o=new Date;if(o.setDate(o.getDate()-1),new Date(r.updatedOn)>o)return void e(r)}(r=await T("/services/agoraClient.ashx",{type:"CONVERTIONRATES"})).updatedOn=(new Date).toISOString(),localStorage.setItem("CONVERTIONRATES",JSON.stringify(r)),e(r)}))}(),a=b();if(a.currency){var i=o.Rates?.ExchangeRates?.filter((function(e){return e.Code==a.currency}))[0],s=n.currencies.filter((function(e){return e.code==a.currency}))[0];s&&(i.formatter=(t=s.format,r=t.replace(/[#\,\.]+/gi,""),function(e){return r+e.toLocaleString("en-US")}));var l=i.Code,c=e?document.querySelectorAll("[ag-l-p]:not(.is-applied)"):document.querySelectorAll("[ag-l-p]");c&&c.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||(async function(e){if(!e.classList.contains("is-applied")){var t=e.getBoundingClientRect(),n=null,r=null!=(n=e.closest("article"))&&n.length>0?n[0].getBoundingClientRect():e.parentElement?.getBoundingClientRect(),o={y:(r.top+r.bottom)/2,x:(r.left+r.right)/2},a={y:(t.top+t.bottom)/2,x:(t.left+t.right)/2},i="ag-l-p-p";i+="-"+(o.x>a.x?"l":"r"),i+="-"+(o.y>a.y?"b":"t"),e.classList.add(i)}}(e),e.classList.add("is-applied"),async function(e,t,n){var r=null!=e.getAttribute("ag-l-p-c")&&null==e.getAttribute("ag-l-p-o");if(e.getAttribute("ag-l-p-c")==n&&r)return;for(var o=0;o<e.childNodes.length;o++){var a=e.childNodes[o],i=null;if(u.lastIndex=0,a.textContent&&null!=(i=u.exec(a.textContent))){r&&e.setAttribute("ag-l-p-o",i[0]),u.lastIndex=0;var s=Math.round(parseFloat(e.getAttribute("ag-l-p"))*t.Constant);return void(a.textContent=a.textContent.replace(i[0],t.formatter?t.formatter(s):s.toString()))}}}(e,i,l))}))}}var u=/(([^A-z0-9]|[A-Z]|[A-Z]{3})*\s?[0-9\,\.]+)/gm;async function d(e){var t="metric"==b().messurement,n=t?document.querySelectorAll("[ag-l-m]:not(.is-applied)"):document.querySelectorAll("[ag-l-m]");t?setTimeout((function(){n&&n.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||(f(e,e),e.classList.add("is-applied"))}))}),e?500:0):n&&n.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||(e.dispatchEvent(new CustomEvent("ag.language.messurement.revert")),e.classList.remove("is-applied"))}))}async function f(e,t,r,o,a){if(!o||!a){if(function(e){var t=n.unitConvertionSchema.haveValidAttribute(e)?n.unitConvertionSchema.getLabelForAttribute(e).match(n.unitConvertionSchema.notationExpression):null;return null!=t}(e)){var i=n.unitConvertionSchema.getLabelForAttribute(e),s=await p(i,1);n.unitConvertionSchema.setLabelForAttribute(e,s.content);var l=n.unitConvertionSchema.getValueForAttribute(e),c=await h(l,2,s.units[0]);n.unitConvertionSchema.setValueForAttribute(e,c.content),t.addEventListener("ag.language.messurement.revert",(function(){n.unitConvertionSchema.setLabelForAttribute(e,i),n.unitConvertionSchema.setValueForAttribute(e,l)}))}else e?.childNodes?.length>0&&e.childNodes.forEach((async function(e){if(e?.textContent&&function(e){return n.unitConvertionSchema.expression.test(e.textContent)||n.unitConvertionSchema.notationExpression.test(e.textContent)}(e)){var r=e.textContent,o=await p(r);o.success?e.textContent=o.content:(o=await p(e.textContent,1),e.textContent=o.content,f(e.parentElement,t,!1,!0,o.units[0])),t.addEventListener("ag.language.messurement.revert",(function(){e.textContent=r}))}else f(e,t)}));return!1}e?.childNodes?.length>0&&e.childNodes.forEach((async function(e){if(e?.textContent){var n=e.textContent,r=await h(e.textContent,2,a);r.success&&(e.textContent=r.content,t.addEventListener("ag.language.messurement.revert",(function(){e.textContent=n})))}}))}async function p(e,t){var r=[],o=!1;for(var a of(t||(t=0),n.unitConvertions)){var i=await h(e,t,a);e=i.content,o|=i.success,i.success&&r.push(a),n.unitConvertionSchema.notationExpressions[a.unit].lastIndex=-1,n.unitConvertionSchema.notationOnlyExpressions[a.unit].lastIndex=-1}return{content:e,success:o,units:r}}async function h(e,t,r){for(var o=null,a=!1;null!=(o=g(e,r,t));){a=!0;var i=1==t?0:parseFloat(n.unitConvertionSchema.getValue(o.groups.V)),s=o.groups.N,l=o.index,c=l+o[0].length,u=(1!=t?o[0].replaceAll(o.groups.V,n.unitConvertionSchema.formatValue(i*r.constant)):o[0]).replaceAll(s,r.tragetUnit);if(2==t&&r.targetNotation&&(u+=" "+r.targetNotation),e=e.substring(0,l)+u+e.substring(c),2==t)return{content:e,success:a}}return{content:e,success:a}}function g(e,t,r){return 0==r?n.unitConvertionSchema.notationExpressions[t.unit].exec(e):1==r?n.unitConvertionSchema.notationOnlyExpressions[t.unit].exec(e):2==r?(n.unitConvertionSchema.valueExpression.lastIndex=-1,n.unitConvertionSchema.valueExpression.exec(e)):null}async function m(t){y("US").split(" ").map((function(e){t.classList.add(e)})),document.body.addEventListener("ag.language.update",(function(e){t.className=t.className.replace(/fflag\-[A-Z]{1,2}/gi,""),y(e.detail.code).split(" ").map((function(e){t.classList.add(e)}));b()})),t.addEventListener("click",(async function(r){e||(e=await async function(){var e,t,r=new S("span"),o=r.n("span");function a(e){L(t,"Language","language",e,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e?e.localLabel?e.localLabel:e.label:""}))}L(o,"Location","code",n.presets,(function(e,t){e.n("i").a("class",y(t.code)),e.n("b").h(t.localLabel?t.localLabel:t.label)}),(function(t,r){return e.a("class",y(t.code)),a(n.languages.filter((function(e){return Array.isArray(t.language)?t.language.indexOf(e.code)>-1:e.code==t.language}))),r||document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:t})),t.localLabel?t.localLabel:t.label})),e=o.n("i"),t=r.n("span"),a(n.languages),L(r.n("span"),"Currency","currency",n.currencies,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),L(r.n("span"),"Property Messurement","messurement",n.units,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),L(r.n("span"),"Distance Messurement","messurement",n.units,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),r.node.setAttribute("ag-language-select",""),document.body.appendChild(r.node);var i=b();i?.code&&document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:i}));return r}()),r.stopPropagation(),async function(t){var n=t.getBoundingClientRect();e.node.style.top=Math.floor(n.top-8)+"px",e.node.style.right="calc(100% - "+Math.floor(n.right+8)+"px)",e.node.querySelectorAll(".active")?.forEach((function(e){e.classList.remove("active")})),e.node.classList.add("active")}(t),document.body.addEventListener("click",v)}))}function v(t){t.stopPropagation(),null==t.target.closest("[ag-language-select],[ag-language]")&&(document.body.removeEventListener("click",v),async function(t){e.node.classList.remove("active")}(t.target))}function y(e){return"fflag ff-lg fflag-"+e}function b(){var e=window.localStorage.AGLANGUAGE,t={};return e&&""!=e&&(t=JSON.parse(e)),t}var x=null,w=null;function E(e,t){var n=b();if(null==n&&(n={}),!n[e]||n[e]!=t){n[e]=t,window.localStorage.setItem("AGLANGUAGE",JSON.stringify(n)),null!=x&&clearTimeout(C),x=setTimeout((async function(){x=null,await C(e),null!=w&&(w(),w=null)}),100);var r=w;w=function(){null!=r&&r(),document.body.dispatchEvent(new CustomEvent("ag.language.change."+e))}}}async function C(e){var n=b();JSON.stringify(t)!=JSON.stringify(n)&&(t=n,n&&n.code&&await window.agRequest.POST("/services/agoraClient.ashx",Object.assign({type:"SET"},n)))}var A={};function L(t,n,r,o,a,i){var s=n.toLowerCase().replace(/[^A-z0-9]/gi,""),l=!!A["itemList"+s];l||t.h(n);var c=l?A["itemList"+s]:A["itemList"+s]=t.n("span"),u=l?A["itemListValue"+s]:A["itemListValue"+s]=c.n("label");if(u.h("Selected Value"),!l){u.cl((function(t){t.stopPropagation(),e.node.querySelectorAll(".active")?.forEach((function(e){e!=u.node&&e.classList.remove("active")})),u.node.classList.contains("active")?u.node.classList.remove("active"):u.node.classList.add("active")}))}var d=l?A["itemOptions"+s]:A["itemOptions"+s]=c.n("span");d.h(""),o.map((function(e){var t=d.n("label");t.cl((function(){u.node.classList.remove("active"),E(r,e.code),u.h(i(e))})),a(t,e)})),r&&""!=r&&(A["General"+s]||(A["General"+s]=function(e){document.body.dispatchEvent(new CustomEvent("ag.language.update."+s,{detail:e.detail}))},document.body.addEventListener("ag.language.update",A["General"+s])),A["Field"+s]||(A["Field"+s]=function(e){var t=e.detail[r],n=Array.isArray(t)?t[0]:t,a=o.find((function(e,t){return e.code==n}));i&&(E(r,n),u.h(i(a,!0)))},document.body.addEventListener("ag.language.update."+s,A["Field"+s])))}function S(e){return this.node=document.createElement(e),this}async function T(e,t){var n="";for(var r in t)n=n+(""!=n?"&":"")+r+"="+t[r];return e+=e.indexOf("?")>-1?"&":"?"+n,(await fetch(e,{method:"GET",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()}S.prototype.a=function(e,t){return this.node.setAttribute(e,t),this},S.prototype.n=function(e){var t=new S(e);return this.node.appendChild(t.node),t},S.prototype.h=function(e){return this.node.innerHTML=e,this},S.prototype.cl=function(e){return this.node.removeEventListener("click",e),this.node.addEventListener("click",e),this},window.agLanguage={refresh:function(){document.body.dispatchEvent(new CustomEvent("ag.language.refresh.currency"))}},async function(){document.querySelectorAll("[ag-language]").forEach(m);var e=b();if(e?.code)document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:e}));else{for(var t in e=n.presets.filter((function(e){return"US"==e.code}))[0])E(t,Array.isArray(e[t])?e[t][0]:e[t]);document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:e}))}c(!0),e.language&&-1==e.language.indexOf("en")?o():(r=Object.assign({},e),a({Locale:"en_US"})),async function(){document.body.addEventListener("ag.language.change.language",(function(){o()})),document.body.addEventListener("ag.language.change.currency",(function(){c()})),document.body.addEventListener("ag.language.change.messurement",(function(){d()})),document.body.addEventListener("ag.lazy.refresh",(function(){d()})),document.body.addEventListener("ag.language.refresh.currency",(function(){c()}))}(),n.unitConvertionSchema=await async function(){var e="",t="",r={notationExpressions:{},notationOnlyExpressions:{},getValue:function(e){return parseFloat(e.replaceAll(/[^0-9\\.]/gi,""))},formatValue:function(e){return e.toLocaleString("en-US",{maximumFractionDigits:2})},haveValidAttribute:function(e){return!!e.hasAttribute&&e.hasAttribute("data-th")},getLabelForAttribute:function(e){return e.getAttribute?e.getAttribute("data-th"):""},setLabelForAttribute:function(e,t){e.setAttribute&&e.setAttribute("data-th",t)},getValueForAttribute:function(e){return e.innerText},setValueForAttribute:function(e,t){e.innerText=t}};return n.unitConvertions.forEach((function(n){var o="",a="";n.notation.forEach((function(e){a+=(""!=a?"|":"")+"((?<N>"+e.replaceAll(/\s/gi,"\\s").replaceAll(/([^0-9A-z])/gi,"\\$1")+")(\\s|[^A-z]|$))",o+=(""!=o?"|":"")+"((?<V>[0-9\\,\\.]+)(\\n|\\s)*(?<N>"+e.replaceAll(/\s/gi,"\\s").replaceAll(/([^0-9A-z])/gi,"\\$1")+")(\\s|[^A-z]|$))"})),r.notationExpressions[n.unit]=new RegExp(o,"gmi"),r.notationOnlyExpressions[n.unit]=new RegExp(a,"gmi"),e+=(""!=e?"|":"")+"("+o+")",t+=(""!=t?"|":"")+"("+a+")"})),r.expression=new RegExp(e,"gmi"),r.notationExpression=new RegExp(t,"gmi"),r.valueExpression=new RegExp("((?<V>[0-9\\,]+(\\.[0-9]+)?)(\\n|\\s)*)","gmi"),r}(),d(!0)}()}(),$(document).on("change",'[data-ck-propertylist] [data-sort-object="CMNCMN"]',{},(function(){t($(this).parents("[data-ck-propertylist]:first"),$(this).parents("[data-ck-property-url]:first").data("ck-property-url"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-key"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-layout"))}))}(),function(){function t(e){setTimeout((function(){var t=$(e).closest("[data-search-form]"),n=composeUrlQuery({select:t}),r=t.data("search-form"),o=$('[data-sort-object="'+r+'"]'),a=t.data("default-search"),i=t.data("default-sort");if(void 0!==a&&""!=a&&-1==n.indexOf("/address-")&&-1==n.indexOf("/mls-")&&(n+=a),o.length>0){var s=o.val();n+=null!=s&&""!=s?s:""}else void 0!==i&&null!=i&&""!=i&&(n+=i);t.triggerHandler("search",[{query:n}])}),200)}$(document).on("click","[data-search-form] [data-search-button]",{},(function(){t(this)})),$(document).on("keydown","[data-search-form] [data-search-action]",{},(function(e){13==e.keyCode&&t(this)})),$("[data-search-form]").on("search",(function(t,n){var r=$(this),o=r.data("search-prefix"),a=e(o)&&"undefined"!=o?o:function(e){switch(e){case"PROPERTY":return"/properties";case"PROPERTYRENT":return"/property-search-map-on-rent";case"PROPERTYSOLD":return"/property-search-map/sold";case"AGENT":case"AGENTTEAM":return"/real-estate-agents";case"OFFICE":return"/real-estate-offices";case"BLOG":return"/blog/search"}return"/"}(r.data("search-form"));/^\/\//.test((null!=a&&""!=a&&"undefined"!=a?a:"")+n.query)||(window.location=(null!=a&&""!=a&&"undefined"!=a?a:"")+n.query)}))}()},368:()=>{(async function(){var systemFunctions={};function Interpolation(e,t,n,r=[],o=[],a=(()=>{})){let i=new RegExp("\\{\\{[^\\}]+\\}\\}","gi"),s=e=>{a()},l="";for(let e of t.getAttributeNames()){let n=t.getAttribute(e);null!=n&&u(n,(n=>{t.setAttribute(e,n),c(t)}))}function c(e){null!=e&&(e.classList.contains("aga-fake-contains")||e.classList.contains("ag-fake-inline-contains"))&&(e.classList.remove("ag-fake-contains"),e.classList.remove("ag-fake-inline-contains"),1==e.childNodes[0].nodeType&&e.childNodes[0].remove())}function u(e,r){let o=e.match(i),a=()=>"",c=()=>{r(a())};if(null!=o){l=e;let r=[],i=!1;o.forEach((e=>{let o=e.substring(2,e.length-2);l=l.replace(e,`\${typeof(${o})!='undefined'&&${o}!=null?${o}:''}`);let a=ExtractVariablesTopLevelIdentifiers(o);r.push(...a.filter((e=>r.indexOf(e)<0))),o!=r[r.length-1]&&Watch(t,n,r[r.length-1],((e,t,n)=>{c()})),IsFunction(systemFunctions,o)?(i=!0,ExtractArgumentVariablesForFunctionFromString(o).forEach((e=>{Watch(t,n,e,((e,t,n)=>{c()}))}))):Watch(t,n,o,((e,t,n)=>{c()}))}));let u=new Function(`try{const {${r.join(",")}} = this; return \`${l}\`; }catch(e){ console.error(e); }return '';`).bind(i?interpolateObject(n):n);a=()=>u();let d=s;s=e=>{c(),d(e)}}}t.childNodes.forEach((t=>{if(t.nodeType==Node.ELEMENT_NODE){Interpolation(e,t,n,r,o,(()=>{}));let a=t;for(let e of a.getAttributeNames()){let t=a.getAttribute(e);null!=t&&u(t,(t=>{a.setAttribute(e,t),c(a)}))}}t.nodeType==Node.TEXT_NODE&&null!=t.textContent&&t.textContent.trim().length>0&&(0==t.textContent.indexOf("{{")&&t.textContent==t.parentElement.innerText?u(t.textContent,(e=>{c(t.parentElement),t.parentElement.innerHTML=e})):u(t.textContent,(e=>{c(t.parentElement),t.textContent=e})))})),s(n)}function interpolateObject(e){return Object.assign(e,systemFunctions)}function PreInterpolation(e,t){null==t&&(t=e);let n=t.hasAttribute("ag-fake");if(n)for(let t of e.getAttributeNames()){let n=e.getAttribute(t);null!=n&&n.indexOf("{{")>-1&&e.setAttribute(t,n.replace(/(\{\{)|(\}\})/gi,"")),e.classList.add("ag-fake-inline-contains")}e.childNodes.forEach((e=>{if(e.nodeType==Node.ELEMENT_NODE&&"OPTION"!=e.nodeName){if(PreInterpolation(e,t),n)for(let t of e.getAttributeNames()){let n=e.getAttribute(t);null!=n&&n.indexOf("{{")>-1&&e.setAttribute(t,n.replace(/(\{\{)|(\}\})/gi,""))}}else if(e.nodeType==Node.TEXT_NODE&&null!=e.textContent&&e.textContent.indexOf("{{")>-1&&e.textContent.trim().length>0){let t=document.createElement("i");t.classList.add("ag-fake");let r=e.parentElement;null==r||r.classList.contains("ag-fake-contains")||(r.insertBefore(t,r.firstChild),r.classList.add("ag-fake-contains"),n&&(e.textContent=e.textContent.replace(/(\{\{)|(\}\})/gi,"")))}}))}function Watch(){}function GetValue(e,t){if(t.indexOf("(")<0&&t.indexOf(".")>-1){let n=t.substring(0,t.indexOf(".")),r=t.substring(t.indexOf(".")+1,t.length);return GetValue(e[n],r)}return t.indexOf("(")>-1?getValueFromFunction(e,t):null!=e?e[t]:void 0}function IsFunction(e,t){return t.indexOf("(")>-1&&"function"==typeof e[getFunctionName(t)]}function GetProxyObject(e){if(void 0===e||null==e)return e;let t={};for(let n in e)SetPropertyToProxyObject(e,t,n);return t}function SetPropertyToProxyObject(e,t,n){"function"==typeof e[n]?t[n]=e[n]:Object.defineProperty(t,n,{get:()=>e[n],set(t){e[n]=t,Notify(null,e,n,!0)},enumerable:!0,configurable:!0})}function SetPropertyDescriptorToProxyObject(e,t,n){Object.defineProperty(e,t,n)}function ConverObjectToArgumentArray(e){let t={arguments:[],values:[]};for(let n in e)t.arguments.push(n),t.values.push(e[n]);return t}function insertAfter(e,t){null!=t.parentNode&&t.parentNode.insertBefore(e,t.nextSibling)}function insertBefore(e,t){t.parentNode.insertBefore(e,t)}let variablesFromStringExpression=new RegExp("((?<string>([\"'`].*?[\"'`]))|(?<boolean>(true|false))|((?<function>[A-z_][A-z0-9.$]+)[(])|(?<identifier>[A-z_][A-z0-9.$]+))","gi"),variableTopLevelIdentifiersExpression=new RegExp("(?<variable>[A-z0-9_\\$]+)(((\\.[^\\s\\=\\&\\|]*)|\\())?","gi");function ExtractVariablesTopLevelIdentifiers(e){let t=[];try{let n=null;for(;null!=(n=variableTopLevelIdentifiersExpression.exec(e));)n.groups&&n.groups.variable&&t.push(n.groups.variable)}catch(e){}return t}function ExtractVariablesFromString(e){let t={functions:[],identifiers:[]};try{let n=null;for(;null!=(n=variablesFromStringExpression.exec(e));)n.groups&&(n.groups.identifier&&t.identifiers.push(n.groups.identifier),n.groups.function&&t.functions.push(n.groups.function))}catch(e){}return t}function ExtractArgumentVariablesForFunctionFromString(e){let t=[],n=e.indexOf("("),r=e.indexOf(")"),o=(n>-1&&e.substring(0,n),e.substring(n+1,r).match(new RegExp("[^,]+","gi")));return null!=o&&o.forEach((e=>{/^(_|[A-z])(_|[A-z]|[0-9]|\$)+$/.test(e.trim())&&t.push(e.trim())})),t}function getFunctionName(e){let t=-1;return(t=e.indexOf("("))>-1?e.substring(0,t):e}function getValueFromFunction(e,t){let n=[],r=t.indexOf("("),o=t.indexOf(")"),a=r>-1?t.substring(0,r):t,i=t.substring(r+1,o).match(new RegExp("[^,]+","gi"));return null!=i&&i.forEach((t=>{n.push(GetValue(e,t))})),"function"==typeof e[a]?e[a].apply(e,n):void 0}function If(e,t,n){t.querySelectorAll("[ag-if]",t).forEach((t=>{let r=[],o=t,a=t.parentElement,i=null,s=[],l="ag-if",c="ag-else-if",u="ag-else";for(;null!=o&&(t==o&&o.hasAttribute(l)||o.hasAttribute(c)||o.hasAttribute(u));){let e=o;e.classList.remove("ag-fake-mask"),o=e.nextElementSibling;let t=e.hasAttribute(l)?l:e.hasAttribute(c)?c:u,n=e.getAttribute(t);e.removeAttribute(t),null!=n&&ExtractVariablesFromString(n).identifiers.forEach((e=>{s.indexOf(e)<0&&s.push(e)})),r.push({node:e.cloneNode(!0),expression:n,position:e.nextSibling,isDefault:t==u}),e.remove()}let d=ConverObjectToArgumentArray(n),f=t=>{d=ConverObjectToArgumentArray(t),null!=i&&i.active.remove();for(let t of r){let r=!1;if(t.isDefault)r=t.isDefault;else{r=new Function(...d.arguments,`return ${t.expression};`)(...d.values)}if(r){i=t;try{let r=p(t.position);if(null!=a){let o=t.node.cloneNode(!0);t.active=o,a.insertBefore(o,r),TransformInternal(e,o,n)}}catch(e){console.log(e)}break}}};function p(e){return null==e||document.contains(e)?e:p(e.previousElementSibling)}for(let e of s)Watch(t,n,e,((e,t,n)=>{t&&f(e)}));f(n)}))}function PreIf(e){let t=e.querySelectorAll("[ag-if]",e),n=e.hasAttribute("ag-fake");t.forEach((e=>{let t=e,r=!1,o="ag-if",a="ag-else-if",i="ag-else";for(;null!=t&&(e==t&&t.hasAttribute(o)||t.hasAttribute(a)||t.hasAttribute(i));){let e=t;!r&&e.hasAttribute("ag-fake")?r=!0:r||!r&&!t.hasAttribute(i)?e.classList.add("ag-fake-mask"):r=!0,n&&(e.removeAttribute(o),e.removeAttribute(a),e.removeAttribute(i)),t=e.nextElementSibling}r||e.classList.remove("ag-fake-mask")}))}function For(html,dom,context){let htmlDocument=html,loops=dom.querySelectorAll("[ag-for]",dom);return loops.forEach((item=>{let fakeItem=item.nextElementSibling,fakeItemCount=0,isfakeItemCountReaded=!1,expression=new RegExp("\\s*([A-z0-9]+)\\s+(in)\\s+([A-z0-9\\.]+)\\s*","gi"),loopConstraint=item.getAttribute("ag-for");if(null==loopConstraint)return;let itratorFinished=item.getAttribute("ag-for-complete"),fieldsAndValue=expression.exec(loopConstraint),itrator=null!=fieldsAndValue?fieldsAndValue[1]:"",collection=null!=fieldsAndValue?fieldsAndValue[3]:"",htmlToClone=item.cloneNode(!0),htmlToCloneParent=item.parentElement,htmlToCloneLocation=item.nextSibling;htmlToClone.removeAttribute("ag-for"),item.remove();let itemElements=[],isDirtyFake=!1,collectionContext=getCollectionObject(context,collection),collectionContextField=getCollectionName(collection);try{SetPropertyDescriptorToProxyObject(collectionContext,`${collectionContextField}$for`,{value:0,writable:!0,enumerable:!0})}catch(e){}let render=e=>{for(let e of itemElements)e.remove();let t=GetValue(e,collection),n=0,r=!1;if(Array.isArray(t)){isDirtyFake=!0,htmlToCloneLocation=removePreFor(fakeItem);for(let e of t){let t=GetProxyObject(context);SetPropertyDescriptorToProxyObject(t,itrator,{get:()=>e,set(t){e=t},enumerable:!0}),SetPropertyDescriptorToProxyObject(t,"row$Index",{value:n+1,writable:!0,enumerable:!0}),SetPropertyDescriptorToProxyObject(t,`${itrator}$Index`,{value:n+1,writable:!0,enumerable:!0});let o=htmlToClone.cloneNode(!0);r?insertAfter(o,itemElements[itemElements.length-1]):(htmlToCloneParent?.insertBefore(o,htmlToCloneLocation),r=!0),TransformInternal(htmlDocument,o,t),itemElements.push(o),n++}try{SetPropertyDescriptorToProxyObject(collectionContext,`${collectionContextField}$for`,{value:Date.now(),writable:!0,enumerable:!0});let e=new CustomEvent("ag-for-completed");htmlToCloneParent?.dispatchEvent(e)}catch(e){}}else void 0===t&&null!=fakeItem&&fakeItem.hasAttribute("ag-for-fake")&&isDirtyFake&&(fakeItem=PreForPartial(fakeItem,htmlToCloneParent,htmlToCloneLocation,fakeItemCount))};if(itratorFinished){let functionName="",value=itratorFinished;if(null!=value&&""!=value){let getParameterName=e=>"this"==e?"sender":e.indexOf(".")>-1?e.replace(".","_"):e,getValue=(e,t)=>{if(t.indexOf("(")<0&&t.indexOf(".")>-1){let n=t.substring(0,t.indexOf(".")),r=t.substring(t.indexOf(".")+1,t.length);return getValue(e[n],r)}return t.indexOf("(")>-1?getValueFromFunction(e,t):e[t]},getFunctionFromCollection=(e,t,n)=>()=>{if(null!=e.__proto__[t])return e.__proto__[t](...n);Object.keys(e).forEach((r=>"object"==typeof e[r]?getFunctionFromCollection(e[r],t,n):"function"==typeof e[r]&&r==t?e[r](...n):void 0))},getValueFromFunction=(e,t)=>{let n=[],r=t.indexOf("("),o=t.indexOf(")"),a=r>-1?t.substring(0,r):t,i=t.substring(r+1,o).match(new RegExp("[^,]+","gi"));return null!=i&&i.forEach((t=>{n.push(getValue(e,t))})),e[a].apply(e,n)};functionName=value.substring(0,value.indexOf("(")>-1?value.indexOf("("):value.length);let expression=new RegExp("(\\((?<params>.*?)\\))");if(expression.test(value)){let paramsString=value.match(expression);if(null!=paramsString&&null!=paramsString&&null!=paramsString.groups){let params=paramsString.groups.params.split(","),paramsItem={};for(let e in params){if("this"==params[e])continue;let t=new RegExp("^(\\'|[0-9])").test(params[e]),n=t?"item_"+e:getParameterName(params[e]);paramsItem[n]=t}Watch(item,collectionContext,`${collectionContextField}$for`,((data,isChange,isUserChange)=>{let args=[];for(var key in params)if("this"==params[key]||"sender"==params[key])args.push(htmlToCloneParent);else if("data"==params[key])args.push(data);else{let paramValue=paramsItem[getParameterName(params[key])]?eval(params[key]):getValue(data,params[key]);args.push(paramValue)}try{if(null!=data[functionName])data[functionName].apply(data,args);else{let e=getFunctionFromCollection(data,functionName,args);null!=e&&e(args)}}catch(e){}}))}}}}function getCollectionObject(e,t){if(t.indexOf("(")<0&&t.indexOf(".")>-1){let n=t.substring(0,t.indexOf(".")),r=t.substring(t.indexOf(".")+1,t.length);return getCollectionObject(e[n],r)}t.indexOf("(");return e}function getCollectionName(e){if(e.indexOf("(")<0&&e.indexOf(".")>-1){e.substring(0,e.indexOf("."));return getCollectionName(e.substring(e.indexOf(".")+1,e.length))}return e}function removePreFor(e){if(null!=e&&e.hasAttribute("ag-for-fake")){htmlToClone.classList.remove("ag-fake-mask");let t=e;for(;null!=t&&t.hasAttribute("ag-for-fake");){isfakeItemCountReaded||fakeItemCount++;let e=t;t=t.nextElementSibling,e.remove()}return isfakeItemCountReaded=!0,t}return e}render(context),Watch(item,context,collection,((e,t,n)=>{t&&render(e)}))})),htmlDocument.innerHTML}function PreForPartial(e,t,n,r){let o=null,a=null,i=!1;for(let s=0;s<r;s++){let r=e.cloneNode(!0);i?insertAfter(r,o):(t?.insertBefore(r,n),i=!0,a=r),o=r}return a}function PreFor(e){e.querySelectorAll("[ag-for][ag-for-fake]:not(.ag-fake-mask)",e).forEach((e=>{if("OPTION"==e.tagName)return;let t=e.cloneNode(!0);t.setAttribute("ag-fake","");let n=1,r=e.getAttribute("ag-for-fake");null!=r?n=parseInt(r):t.setAttribute("ag-for-fake",""),t.removeAttribute("ag-for"),e.removeAttribute("ag-for-fake"),e.classList.add("ag-fake-mask"),PreTransformInternal(t);for(let r=0;r<n;r++)e.parentElement?.appendChild(t.cloneNode(!0))}))}function TransformInternal(e,t,n){For(t,t,n),If(t,t,n),Interpolation(t,t,n)}function PreTransformInternal(e){PreFor(e),PreIf(e),PreInterpolation(e)}async function findRenders(){document.querySelectorAll("[ag-render]:not(.ag-render)").forEach((async function(e,t){attachAction(e)}))}async function attachAction(e){e.classList.add("ag-render");var t=e.getAttribute("ag-render");PreTransformInternal(e);var n="ag.render.hydrate."+t,r=e.innerHTML;document.body.addEventListener(n,(async function(){var n=GetValue(window,t);e.innerHTML=r,TransformInternal(e,e,n)}))}async function requestData(e,t,n){n&&(t=n(t));var r="";for(var o in t)r=r+(""!=r?"&":"")+o+"="+t[o];return e+=e.indexOf("?")>-1?"&":"?"+r,(await fetch(e,{method:"GET",mode:"cors",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()}async function initPage(e,t,n,r,o){n||(n={}),n.PageSize||(n.PageSize=12),n.PageNumber||(n.PageNumber=1);var a=await requestData(t,n,o);window[e]=a,window.agRender.hydrate(e),r&&r(a)}async function nextPage(e,t,n,r,o){n.PageNumber+=1;var a=await requestData(t,n,o);window[e]=a,window.agRender.hydrate(e),r&&r(a)}async function previousPage(e,t,n,r,o){if(n.PageNumber>1){n.PageNumber-=1;var a=await requestData(t,n,o);window[e]=a,window.agRender.hydrate(e),r&&r(a)}}async function morePage(e,t,n,r,o){n.PageNumber+=1;var a=await requestData(t,n,o);window[e].Items.push(...a.Items),window.agRender.hydrate(e),r&&r(a)}async function init(){document.body.addEventListener("ag.render.refresh",findRenders),document.body.addEventListener("ag.refresh",findRenders);var e=new CustomEvent("ag.render.refresh");document.body.dispatchEvent(e),window.agRender={hydrate:function(e){var t=new CustomEvent("ag.render.hydrate."+e);document.body.dispatchEvent(t);t=new CustomEvent("ag.lazy.refresh");document.body.dispatchEvent(t),window.agLanguage.refresh()},next:function(e){var t=new CustomEvent("ag.render."+e+".page.next");document.body.dispatchEvent(t)},previous:function(e){var t=new CustomEvent("ag.render."+e+".page.previous");document.body.dispatchEvent(t)},more:function(e){var t=new CustomEvent("ag.render."+e+".page.more");document.body.dispatchEvent(t)},pagedResult:function(e,t,n,r,o){document.body.addEventListener("ag.render."+e+".page.next",(function(){nextPage(e,t,n,r,o)})),document.body.addEventListener("ag.render."+e+".page.previous",(function(){previousPage(e,t,n,r,o)})),document.body.addEventListener("ag.render."+e+".page.more",(function(){morePage(e,t,n,r,o)})),initPage(e,t,n,r,o)}}}init()})()}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(n.exports,n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};return(()=>{"use strict";__webpack_require__.r(__webpack_exports__);__webpack_require__(440),__webpack_require__(468),__webpack_require__(816),__webpack_require__(136),__webpack_require__(368),__webpack_require__(264)})(),__webpack_exports__})()));
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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cUJBR3BFMXhDLEVBQU9ELE9BQ2YsQ0NyQkEyeEMsb0JBQW9CN3RDLEVBQUs3RCxJQUN4QixJQUFJOHhDLEVBQVM5eEMsR0FBVUEsRUFBTyt4QyxXQUM3QixJQUFPL3hDLEVBQWlCLFFBQ3hCLElBQU0sRUFFUCxPQURBMHhDLG9CQUFvQnB3QyxFQUFFd3dDLEVBQVEsQ0FBRTN4QyxFQUFHMnhDLElBQzVCQSxDQUFNLEVDTGRKLG9CQUFvQnB3QyxFQUFJLENBQUN2QixFQUFTaXlDLEtBQ2pDLElBQUksSUFBSTc0QixLQUFPNjRCLEVBQ1hOLG9CQUFvQjV0QyxFQUFFa3VDLEVBQVk3NEIsS0FBU3U0QixvQkFBb0I1dEMsRUFBRS9ELEVBQVNvWixJQUM1RWhYLE9BQU9DLGVBQWVyQyxFQUFTb1osRUFBSyxDQUFFcXhCLFlBQVksRUFBTWxvQyxJQUFLMHZDLEVBQVc3NEIsSUFFMUUsRUNORHU0QixvQkFBb0I1dEMsRUFBSSxDQUFDbXVDLEVBQUs5dUIsSUFBVWhoQixPQUFPOEYsVUFBVTBFLGVBQWVsTCxLQUFLd3dDLEVBQUs5dUIsR0NDbEZ1dUIsb0JBQW9CN3NDLEVBQUs5RSxJQUNILG9CQUFYbXlDLFFBQTBCQSxPQUFPQyxhQUMxQ2h3QyxPQUFPQyxlQUFlckMsRUFBU215QyxPQUFPQyxZQUFhLENBQUUvaEMsTUFBTyxXQUU3RGpPLE9BQU9DLGVBQWVyQyxFQUFTLGFBQWMsQ0FBRXFRLE9BQU8sR0FBTyxFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi4vLi4vQWdvcmEgNC4wL0lkY0dsb2JhbC5BZ29yYS5KYXZhU2NyaXB0LlBsdWdJbi9NYXhDb250YWN0MS4xLmpzIiwid2VicGFjazovLy8uLi8uLi9BZ29yYSA0LjAvSWRjR2xvYmFsLkFnb3JhLkphdmFTY3JpcHQuUGx1Z0luL01heEpxdWVyeTIuMS4xLmpzIiwid2VicGFjazovLy8uLi8uLi9BZ29yYSA0LjAvSWRjR2xvYmFsLkFnb3JhLkphdmFTY3JpcHQuUGx1Z0luL01heFV0aWxpdHkuanMiLCJ3ZWJwYWNrOi8vLy4uL0lkY0dsb2JhbC5JQlAuV2ViL2pzL21heC9EaWFsb2dNb2RhbC5qcyIsIndlYnBhY2s6Ly8vLi4vSWRjR2xvYmFsLklCUC5XZWIvanMvbWF4L2NvbW1vbi5qcyIsIndlYnBhY2s6Ly8vLi4vSWRjR2xvYmFsLklCUC5XZWIvanMvbWF4L2RhdGFiaW5kZXIuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Il0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSB7XG5cdFx0dmFyIGEgPSBmYWN0b3J5KCk7XG5cdFx0Zm9yKHZhciBpIGluIGEpICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuXHR9XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gIiwi77u/YWdvcmEoZnVuY3Rpb24gKCkge1xyXG4gICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChsb2NhdGlvbi5oYXNoID09IFwiI1NpZ25VcFwiKSB7XHJcbiAgICAgICAgICAgIE9wZW5Qb3B1cCgpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59KTtcclxuXHJcbmZ1bmN0aW9uIFNpZ25VcChjb250YWluZXJJZCwgYWNjZXNzVXJsLCBhY2Nlc3NVcmxWaWV3TW9kZSwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUFjY2Vzcy5hc2h4P2FjdGlvbj1TaWduVXAnLFxyXG4gICAgICAgIGRhdGE6ICh7IGNvbnRhY3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgIT0gbnVsbCkgaWYob25TdWNjZXNzKHJlc3BvbnNlLkNvbnRhY3QpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KGFjY2Vzc1VybCkgJiYgaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmxWaWV3TW9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24ucmVwbGFjZShhY2Nlc3NVcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvY2F0aW9uLnJlbG9hZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc051bGxPckVtcHR5KGFjY2Vzc1VybCkgJiYgIWlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsVmlld01vZGUpICYmIGFjY2Vzc1VybFZpZXdNb2RlID09ICdwb3B1cCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlVXNlckFyZWEocmVzcG9uc2UuVXNlckFyZWFIdG1sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1BFUkZPUk1fQUNUSU9OX1RSSUdHRVInKS5hdHRyKCdocmVmJywgYWNjZXNzVXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBPcGVuUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsKSAmJiAhaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmxWaWV3TW9kZSkgJiYgYWNjZXNzVXJsVmlld01vZGUgPT0gJ3N0YXknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZVVzZXJBcmVhKHJlc3BvbnNlLlVzZXJBcmVhSHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UoKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9kYXNoYm9hcmQvZGVmYXVsdC5hc3B4P21vZGU9c2lnblVwJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygncmVzdHJpY3RlZC1saXN0aW5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgRGF0YS4gUGxlYXNlIHJldHJ5IScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgRGF0YS4gUGxlYXNlIHJldHJ5IScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMTogLy8gRHVwbGljYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1RoZSBlbWFpbCBhZGRyZXNzIHlvdSBlbnRlcmVkIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC4gUGxlYXNlIHNpZ24gaW4gdG8geW91ciBleGlzdGluZyBhY2NvdW50IG9yIGNsaWNrIFwiRm9yZ290IFBhc3N3b3JkXCIgZm9yIGhlbHAuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCAnVGhlIGVtYWlsIGFkZHJlc3MgeW91IGVudGVyZWQgaXMgYWxyZWFkeSByZWdpc3RlcmVkLiBQbGVhc2Ugc2lnbiBpbiB0byB5b3VyIGV4aXN0aW5nIGFjY291bnQgb3IgY2xpY2sgXCJGb3Jnb3QgUGFzc3dvcmRcIiBmb3IgaGVscC4nKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYUFjY2Vzcykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNpZ25Jbihjb250YWluZXJJZCwgYWNjZXNzVXJsLCBhY2Nlc3NVcmxWaWV3TW9kZSwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUFjY2Vzcy5hc2h4P2FjdGlvbj1TaWduSW4nLFxyXG4gICAgICAgIGRhdGE6ICh7IGNvbnRhY3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgIT0gbnVsbCkgb25TdWNjZXNzKHJlc3BvbnNlLkNvbnRhY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmwpICYmIGlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsVmlld01vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLnJlcGxhY2UoYWNjZXNzVXJsKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc051bGxPckVtcHR5KGFjY2Vzc1VybCkgJiYgIWlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsVmlld01vZGUpICYmIGFjY2Vzc1VybFZpZXdNb2RlID09ICdwb3B1cCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlVXNlckFyZWEocmVzcG9uc2UuVXNlckFyZWFIdG1sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1BFUkZPUk1fQUNUSU9OX1RSSUdHRVInKS5hdHRyKCdocmVmJywgYWNjZXNzVXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBPcGVuUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsKSAmJiAhaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmxWaWV3TW9kZSkgJiYgYWNjZXNzVXJsVmlld01vZGUgPT0gJ3N0YXknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZVVzZXJBcmVhKHJlc3BvbnNlLlVzZXJBcmVhSHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UoKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9kYXNoYm9hcmQvZGVmYXVsdC5hc3B4P21vZGU9c2lnbkluJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygncmVzdHJpY3RlZC1saXN0aW5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQwMTpcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBlbWFpbCBhZGRyZXNzIG9yIHBhc3N3b3JkLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcig0MDEsICdJbnZhbGlkIGVtYWlsIGFkZHJlc3Mgb3IgcGFzc3dvcmQuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMwMjpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkocmVzcG9uc2UuVXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gcmVzcG9uc2UuVXJsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBlbWFpbCBhZGRyZXNzIG9yIHBhc3N3b3JkLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgZW1haWwgYWRkcmVzcyBvciBwYXNzd29yZC4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYUFjY2Vzcykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNhdmVTZWFyY2goY29udGFpbmVySWQsIGFjY2Vzc1VybCwgYWNjZXNzVXJsVmlld01vZGUsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFBY2Nlc3MuYXNoeD9hY3Rpb249U2F2ZVNlYXJjaCcsXHJcbiAgICAgICAgZGF0YTogKHsgZGVtYW5kOiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdZb3UgaGF2ZSBzdWNjZXNzZnVsbHkgc2F2ZWQgdGhlIHNlYXJjaCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1lvdSBoYXZlIHN1Y2Nlc3NmdWxseSBzYXZlZCB0aGUgc2VhcmNoJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGVtYWlsIGFkZHJlc3Mgb3IgcGFzc3dvcmQuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBlbWFpbCBhZGRyZXNzIG9yIHBhc3N3b3JkLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhQWNjZXNzKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gUmVxdWVzdEluZm8oY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFSZXF1ZXN0SW5mby5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhUmVxdWVzdEluZm8pIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBOZWlnaGJvcmhvb2RSZXBvcnQoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFOZWlnaGJvcmhvb2RSZXBvcnQuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnWW91ciBOZWlnaGJvcmhvb2QgUmVwb3J0IHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkLiBBIHJlcG9ydCB3aWxsIGJlIGVtYWlsZWQgdG8geW91IHdpdGhpbiB0aGUgbmV4dCAyNCBidXNpbmVzcyBob3Vycy4nKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdZb3VyIE5laWdoYm9yaG9vZCBSZXBvcnQgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQuIEEgcmVwb3J0IHdpbGwgYmUgZW1haWxlZCB0byB5b3Ugd2l0aGluIHRoZSBuZXh0IDI0IGJ1c2luZXNzIGhvdXJzLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYU5laWdoYm9yaG9vZFJlcG9ydCkgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbnRhY3RNb3J0Z2FnZVNwZWNpYWxpc3QoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFDb250YWN0TW9ydGdhZ2VTcGVjaWFsaXN0LmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1RoYW5rIHlvdSBmb3IgeW91ciByZXF1ZXN0LiBBIE1vcnRnYWdlIENvbnN1bHRhbnQgd2lsbCBjb250YWN0IHlvdSBzaG9ydGx5LicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1RoYW5rIHlvdSBmb3IgeW91ciByZXF1ZXN0LiBBIE1vcnRnYWdlIENvbnN1bHRhbnQgd2lsbCBjb250YWN0IHlvdSBzaG9ydGx5LicpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChDb250YWN0TW9ydGdhZ2VTcGVjaWFsaXN0KSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIFJlcXVlc3RTaG93aW5nKGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhUmVxdWVzdFNob3dpbmcuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYVJlcXVlc3RTaG93aW5nKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gVGV4dExpc3RpbmcoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFUZXh0TGlzdGluZy5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhVGV4dExpc3RpbmcpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBFbWFpbExpc3RpbmcoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFFbWFpbExpc3RpbmcuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnVGhlIHByb3BlcnR5IGRldGFpbHMgaGFzIGJlZW4gc2VudCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdUaGUgcHJvcGVydHkgZGV0YWlscyBoYXMgYmVlbiBzZW50IHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYUVtYWlsTGlzdGluZykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbnRhY3RVcyhjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yLCBjb250YWN0VHlwZSkge1xyXG4gICAgdmFyICRmb3JtID0gJCgnIycgKyBjb250YWluZXJJZCk7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCRmb3JtKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUNvbnRhY3RVcy5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCwgQ29udGFjdFR5cGU6IGNvbnRhY3RUeXBlIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDAxOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICRmb3JtLmZpbmQoJ1tkYXRhLWNhcHRjaGEtcmVsb2FkXScpLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFDb250YWN0VXMpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gU2VsbEFIb21lKGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhU2VsbEFIb21lLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFDb250YWN0VXMpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBNYWludGVuYW5jZVNlcnZpY2UoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvTWFpbnRlbmFuY2VTZXJ2aWNlLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFDb250YWN0VXMpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBPcmRlclJlbG9jKGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhT3JkZXJSZWxvYy5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhT3JkZXJSZWxvYykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcblxyXG5cclxuZnVuY3Rpb24gRm9yZ290UGFzc3dvcmQoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFGb3Jnb3RQYXNzd29yZC5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBDb250YWN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdQbGVhc2UgY2hlY2sgeW91ciBlbWFpbCBzaG9ydGx5IGZvciBpbnN0cnVjdGlvbnMgb24gcmVzZXR0aW5nIHlvdXIgcGFzc3dvcmQuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnUGxlYXNlIGNoZWNrIHlvdXIgZW1haWwgc2hvcnRseSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIHJlc2V0dGluZyB5b3VyIHBhc3N3b3JkLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnQW4gYWNjb3VudCB3aXRoIHRoYXQgZW1haWwgYWRkcmVzcyBjYW5ub3QgYmUgZm91bmQuIFBsZWFzZSB0cnkgYWdhaW4uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnQW4gYWNjb3VudCB3aXRoIHRoYXQgZW1haWwgYWRkcmVzcyBjYW5ub3QgYmUgZm91bmQuIFBsZWFzZSB0cnkgYWdhaW4uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoRm9yZ290UGFzc3dvcmQpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gQ29tcGFueU5ld3NMZXR0ZXIoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhQ29tcGFueU5ld3NMZXR0ZXIuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnWW91IGhhdmUgcmVnaXN0ZXJlZCBmb3IgbmV3c2xldHRlciBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdZb3UgaGF2ZSByZWdpc3RlcmVkIGZvciBuZXdzbGV0dGVyIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYUVtYWlsTGlzdGluZykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBFbWFpbEZyaWVuZChjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUVtYWlsRnJpZW5kLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1RoZSBkZXRhaWxzIGhhcyBiZWVuIHNlbnQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnVGhlIGRldGFpbHMgaGFzIGJlZW4gc2VudCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFFbWFpbExpc3RpbmcpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBVcGRhdGVVc2VyQXJlYShodG1sKSB7XHJcbiAgICAkKCcjRElWX1VTRVJfQVJFQScpLmh0bWwoaHRtbCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFBlcmZvcm1BY3Rpb24oYWN0aW9uLCBxdWVyeVN0cmluZykge1xyXG4gICAgdmFyIF9hY2Nlc3NVcmwgPSAnJztcclxuICAgIHZhciBfYWNjZXNzRmlyZVdhbGwgPSAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL2Rhc2hib2FyZC9BY2Nlc3MuYXNweCc7XHJcblxyXG4gICAgaWYgKGFjdGlvbiAhPSAnU2lnblVwJyAmJiBhY3Rpb24gIT0gJ1NpZ25JbicgJiYgYWN0aW9uICE9ICdNYXJrZXRUcmVuZHMnKSB7XHJcbiAgICAgICAgaWYgKCFJc1NpZ25lZEluKCkpIHtcclxuICAgICAgICAgICAgX2FjY2Vzc1VybCA9IF9hY2Nlc3NGaXJlV2FsbCArICc/dmlldz1wb3B1cCZhY2Nlc3NVcmw9JyArIGVzY2FwZSgnL2Rhc2hib2FyZC8nICsgYWN0aW9uICsgJy5hc3B4Jyk7XHJcbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JFbXB0eShxdWVyeVN0cmluZykpIF9hY2Nlc3NVcmwgKz0gJz8nICsgZXNjYXBlKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBfYWNjZXNzVXJsID0gKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9kYXNoYm9hcmQvJyArIGFjdGlvbiArICcuYXNweCc7XHJcbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JFbXB0eShxdWVyeVN0cmluZykpIF9hY2Nlc3NVcmwgKz0gJz8nICsgcXVlcnlTdHJpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gJ01hcmtldFRyZW5kcycpIHtcclxuICAgICAgICBfYWNjZXNzVXJsID0gJy9kYXNoYm9hcmQvTWFya2V0VHJlbmRzLmFzcHg/JyArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBfYWNjZXNzVXJsID0gX2FjY2Vzc0ZpcmVXYWxsO1xyXG4gICAgICAgIGlmICghaXNOdWxsT3JFbXB0eShxdWVyeVN0cmluZykpIF9hY2Nlc3NVcmwgKz0gJz8nICsgcXVlcnlTdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgJCgnI1BFUkZPUk1fQUNUSU9OX1RSSUdHRVInKS5hdHRyKCdocmVmJywgX2FjY2Vzc1VybCk7XHJcbiAgICAkKCcjUEVSRk9STV9BQ1RJT05fVFJJR0dFUicpLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIElzU2lnbmVkSW4oKSB7XHJcbiAgICBpZiAoaXNOdWxsT3JFbXB0eSgkKCcjQ09OVEFDVF9HVUlEJykpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoaXNOdWxsT3JFbXB0eSgkKCcjQ09OVEFDVF9HVUlEJykudmFsKCkpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoJCgnI0NPTlRBQ1RfR1VJRCcpLnZhbCgpLmxlbmd0aCAhPSAzNikgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbnRhY3RPZmZpY2UoZW1haWwpIHtcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUNvbnRhY3RPZmZpY2UuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHtcclxuICAgICAgICAgICAgTmFtZTogJChcIiN0ZXh0bmFtZVwiKS52YWwoKSxcclxuICAgICAgICAgICAgRW1haWw6ICQoXCIjdHh0RW1haWxcIikudmFsKCksXHJcbiAgICAgICAgICAgIFRvRW1haWw6IGVtYWlsLFxyXG4gICAgICAgICAgICBTdWJqZWN0OiAkKFwiI3RleHRzdWJqZWN0XCIpLnZhbCgpLFxyXG4gICAgICAgICAgICBjb21tZW50OiAkKFwiI3RleHRtc2dcIikudmFsKClcclxuICAgICAgICB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ3RleHQnLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgPT0gXCIxMDBcIikge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFDb250YWN0VXMpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59IiwiLypcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjIuMS4xXG4gKiBodHRwOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBJbmNsdWRlcyBTaXp6bGUuanNcbiAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IDIwMDUsIDIwMTQgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxNC0wNS0wMVQxNzoxMVpcbiAqL1xuIWZ1bmN0aW9uKGEsYil7XCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlvbihhKXtpZighYS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIpO3JldHVybiBiKGEpfTpiKGEpfShcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXt2YXIgYj1hLmxlbmd0aCxjPV8udHlwZShhKTtyZXR1cm5cImZ1bmN0aW9uXCI9PT1jfHxfLmlzV2luZG93KGEpPyExOjE9PT1hLm5vZGVUeXBlJiZiPyEwOlwiYXJyYXlcIj09PWN8fDA9PT1ifHxcIm51bWJlclwiPT10eXBlb2YgYiYmYj4wJiZiLTEgaW4gYX1mdW5jdGlvbiBkKGEsYixjKXtpZihfLmlzRnVuY3Rpb24oYikpcmV0dXJuIF8uZ3JlcChhLGZ1bmN0aW9uKGEsZCl7cmV0dXJuISFiLmNhbGwoYSxkLGEpIT09Y30pO2lmKGIubm9kZVR5cGUpcmV0dXJuIF8uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09YiE9PWN9KTtpZihcInN0cmluZ1wiPT10eXBlb2YgYil7aWYoaGIudGVzdChiKSlyZXR1cm4gXy5maWx0ZXIoYixhLGMpO2I9Xy5maWx0ZXIoYixhKX1yZXR1cm4gXy5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIFUuY2FsbChiLGEpPj0wIT09Y30pfWZ1bmN0aW9uIGUoYSxiKXtmb3IoOyhhPWFbYl0pJiYxIT09YS5ub2RlVHlwZTspO3JldHVybiBhfWZ1bmN0aW9uIGYoYSl7dmFyIGI9b2JbYV09e307cmV0dXJuIF8uZWFjaChhLm1hdGNoKG5iKXx8W10sZnVuY3Rpb24oYSxjKXtiW2NdPSEwfSksYn1mdW5jdGlvbiBnKCl7Wi5yZW1vdmVFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLGcsITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIixnLCExKSxfLnJlYWR5KCl9ZnVuY3Rpb24gaCgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmNhY2hlPXt9LDAse2dldDpmdW5jdGlvbigpe3JldHVybnt9fX0pLHRoaXMuZXhwYW5kbz1fLmV4cGFuZG8rTWF0aC5yYW5kb20oKX1mdW5jdGlvbiBpKGEsYixjKXt2YXIgZDtpZih2b2lkIDA9PT1jJiYxPT09YS5ub2RlVHlwZSlpZihkPVwiZGF0YS1cIitiLnJlcGxhY2UodWIsXCItJDFcIikudG9Mb3dlckNhc2UoKSxjPWEuZ2V0QXR0cmlidXRlKGQpLFwic3RyaW5nXCI9PXR5cGVvZiBjKXt0cnl7Yz1cInRydWVcIj09PWM/ITA6XCJmYWxzZVwiPT09Yz8hMTpcIm51bGxcIj09PWM/bnVsbDorYytcIlwiPT09Yz8rYzp0Yi50ZXN0KGMpP18ucGFyc2VKU09OKGMpOmN9Y2F0Y2goZSl7fXNiLnNldChhLGIsYyl9ZWxzZSBjPXZvaWQgMDtyZXR1cm4gY31mdW5jdGlvbiBqKCl7cmV0dXJuITB9ZnVuY3Rpb24gaygpe3JldHVybiExfWZ1bmN0aW9uIGwoKXt0cnl7cmV0dXJuIFouYWN0aXZlRWxlbWVudH1jYXRjaChhKXt9fWZ1bmN0aW9uIG0oYSxiKXtyZXR1cm4gXy5ub2RlTmFtZShhLFwidGFibGVcIikmJl8ubm9kZU5hbWUoMTEhPT1iLm5vZGVUeXBlP2I6Yi5maXJzdENoaWxkLFwidHJcIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRib2R5XCIpWzBdfHxhLmFwcGVuZENoaWxkKGEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGJvZHlcIikpOmF9ZnVuY3Rpb24gbihhKXtyZXR1cm4gYS50eXBlPShudWxsIT09YS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpKStcIi9cIithLnR5cGUsYX1mdW5jdGlvbiBvKGEpe3ZhciBiPUtiLmV4ZWMoYS50eXBlKTtyZXR1cm4gYj9hLnR5cGU9YlsxXTphLnJlbW92ZUF0dHJpYnV0ZShcInR5cGVcIiksYX1mdW5jdGlvbiBwKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKXJiLnNldChhW2NdLFwiZ2xvYmFsRXZhbFwiLCFifHxyYi5nZXQoYltjXSxcImdsb2JhbEV2YWxcIikpfWZ1bmN0aW9uIHEoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2lmKDE9PT1iLm5vZGVUeXBlKXtpZihyYi5oYXNEYXRhKGEpJiYoZj1yYi5hY2Nlc3MoYSksZz1yYi5zZXQoYixmKSxqPWYuZXZlbnRzKSl7ZGVsZXRlIGcuaGFuZGxlLGcuZXZlbnRzPXt9O2ZvcihlIGluIGopZm9yKGM9MCxkPWpbZV0ubGVuZ3RoO2Q+YztjKyspXy5ldmVudC5hZGQoYixlLGpbZV1bY10pfXNiLmhhc0RhdGEoYSkmJihoPXNiLmFjY2VzcyhhKSxpPV8uZXh0ZW5kKHt9LGgpLHNiLnNldChiLGkpKX19ZnVuY3Rpb24gcihhLGIpe3ZhciBjPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWU/YS5nZXRFbGVtZW50c0J5VGFnTmFtZShifHxcIipcIik6YS5xdWVyeVNlbGVjdG9yQWxsP2EucXVlcnlTZWxlY3RvckFsbChifHxcIipcIik6W107cmV0dXJuIHZvaWQgMD09PWJ8fGImJl8ubm9kZU5hbWUoYSxiKT9fLm1lcmdlKFthXSxjKTpjfWZ1bmN0aW9uIHMoYSxiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XCJpbnB1dFwiPT09YyYmeWIudGVzdChhLnR5cGUpP2IuY2hlY2tlZD1hLmNoZWNrZWQ6KFwiaW5wdXRcIj09PWN8fFwidGV4dGFyZWFcIj09PWMpJiYoYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIHQoYixjKXt2YXIgZCxlPV8oYy5jcmVhdGVFbGVtZW50KGIpKS5hcHBlbmRUbyhjLmJvZHkpLGY9YS5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZSYmKGQ9YS5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZShlWzBdKSk/ZC5kaXNwbGF5Ol8uY3NzKGVbMF0sXCJkaXNwbGF5XCIpO3JldHVybiBlLmRldGFjaCgpLGZ9ZnVuY3Rpb24gdShhKXt2YXIgYj1aLGM9T2JbYV07cmV0dXJuIGN8fChjPXQoYSxiKSxcIm5vbmVcIiE9PWMmJmN8fChOYj0oTmJ8fF8oXCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+XCIpKS5hcHBlbmRUbyhiLmRvY3VtZW50RWxlbWVudCksYj1OYlswXS5jb250ZW50RG9jdW1lbnQsYi53cml0ZSgpLGIuY2xvc2UoKSxjPXQoYSxiKSxOYi5kZXRhY2goKSksT2JbYV09YyksY31mdW5jdGlvbiB2KGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuc3R5bGU7cmV0dXJuIGM9Y3x8UmIoYSksYyYmKGc9Yy5nZXRQcm9wZXJ0eVZhbHVlKGIpfHxjW2JdKSxjJiYoXCJcIiE9PWd8fF8uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfHwoZz1fLnN0eWxlKGEsYikpLFFiLnRlc3QoZykmJlBiLnRlc3QoYikmJihkPWgud2lkdGgsZT1oLm1pbldpZHRoLGY9aC5tYXhXaWR0aCxoLm1pbldpZHRoPWgubWF4V2lkdGg9aC53aWR0aD1nLGc9Yy53aWR0aCxoLndpZHRoPWQsaC5taW5XaWR0aD1lLGgubWF4V2lkdGg9ZikpLHZvaWQgMCE9PWc/ZytcIlwiOmd9ZnVuY3Rpb24gdyhhLGIpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYSgpP3ZvaWQgZGVsZXRlIHRoaXMuZ2V0Oih0aGlzLmdldD1iKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1mdW5jdGlvbiB4KGEsYil7aWYoYiBpbiBhKXJldHVybiBiO2Zvcih2YXIgYz1iWzBdLnRvVXBwZXJDYXNlKCkrYi5zbGljZSgxKSxkPWIsZT1YYi5sZW5ndGg7ZS0tOylpZihiPVhiW2VdK2MsYiBpbiBhKXJldHVybiBiO3JldHVybiBkfWZ1bmN0aW9uIHkoYSxiLGMpe3ZhciBkPVRiLmV4ZWMoYik7cmV0dXJuIGQ/TWF0aC5tYXgoMCxkWzFdLShjfHwwKSkrKGRbMl18fFwicHhcIik6Yn1mdW5jdGlvbiB6KGEsYixjLGQsZSl7Zm9yKHZhciBmPWM9PT0oZD9cImJvcmRlclwiOlwiY29udGVudFwiKT80Olwid2lkdGhcIj09PWI/MTowLGc9MDs0PmY7Zis9MilcIm1hcmdpblwiPT09YyYmKGcrPV8uY3NzKGEsYyt3YltmXSwhMCxlKSksZD8oXCJjb250ZW50XCI9PT1jJiYoZy09Xy5jc3MoYSxcInBhZGRpbmdcIit3YltmXSwhMCxlKSksXCJtYXJnaW5cIiE9PWMmJihnLT1fLmNzcyhhLFwiYm9yZGVyXCIrd2JbZl0rXCJXaWR0aFwiLCEwLGUpKSk6KGcrPV8uY3NzKGEsXCJwYWRkaW5nXCIrd2JbZl0sITAsZSksXCJwYWRkaW5nXCIhPT1jJiYoZys9Xy5jc3MoYSxcImJvcmRlclwiK3diW2ZdK1wiV2lkdGhcIiwhMCxlKSkpO3JldHVybiBnfWZ1bmN0aW9uIEEoYSxiLGMpe3ZhciBkPSEwLGU9XCJ3aWR0aFwiPT09Yj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0LGY9UmIoYSksZz1cImJvcmRlci1ib3hcIj09PV8uY3NzKGEsXCJib3hTaXppbmdcIiwhMSxmKTtpZigwPj1lfHxudWxsPT1lKXtpZihlPXYoYSxiLGYpLCgwPmV8fG51bGw9PWUpJiYoZT1hLnN0eWxlW2JdKSxRYi50ZXN0KGUpKXJldHVybiBlO2Q9ZyYmKFkuYm94U2l6aW5nUmVsaWFibGUoKXx8ZT09PWEuc3R5bGVbYl0pLGU9cGFyc2VGbG9hdChlKXx8MH1yZXR1cm4gZSt6KGEsYixjfHwoZz9cImJvcmRlclwiOlwiY29udGVudFwiKSxkLGYpK1wicHhcIn1mdW5jdGlvbiBCKGEsYil7Zm9yKHZhciBjLGQsZSxmPVtdLGc9MCxoPWEubGVuZ3RoO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihmW2ddPXJiLmdldChkLFwib2xkZGlzcGxheVwiKSxjPWQuc3R5bGUuZGlzcGxheSxiPyhmW2ddfHxcIm5vbmVcIiE9PWN8fChkLnN0eWxlLmRpc3BsYXk9XCJcIiksXCJcIj09PWQuc3R5bGUuZGlzcGxheSYmeGIoZCkmJihmW2ddPXJiLmFjY2VzcyhkLFwib2xkZGlzcGxheVwiLHUoZC5ub2RlTmFtZSkpKSk6KGU9eGIoZCksXCJub25lXCI9PT1jJiZlfHxyYi5zZXQoZCxcIm9sZGRpc3BsYXlcIixlP2M6Xy5jc3MoZCxcImRpc3BsYXlcIikpKSk7Zm9yKGc9MDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoYiYmXCJub25lXCIhPT1kLnN0eWxlLmRpc3BsYXkmJlwiXCIhPT1kLnN0eWxlLmRpc3BsYXl8fChkLnN0eWxlLmRpc3BsYXk9Yj9mW2ddfHxcIlwiOlwibm9uZVwiKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQyhhLGIsYyxkLGUpe3JldHVybiBuZXcgQy5wcm90b3R5cGUuaW5pdChhLGIsYyxkLGUpfWZ1bmN0aW9uIEQoKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1liPXZvaWQgMH0pLFliPV8ubm93KCl9ZnVuY3Rpb24gRShhLGIpe3ZhciBjLGQ9MCxlPXtoZWlnaHQ6YX07Zm9yKGI9Yj8xOjA7ND5kO2QrPTItYiljPXdiW2RdLGVbXCJtYXJnaW5cIitjXT1lW1wicGFkZGluZ1wiK2NdPWE7cmV0dXJuIGImJihlLm9wYWNpdHk9ZS53aWR0aD1hKSxlfWZ1bmN0aW9uIEYoYSxiLGMpe2Zvcih2YXIgZCxlPShjY1tiXXx8W10pLmNvbmNhdChjY1tcIipcIl0pLGY9MCxnPWUubGVuZ3RoO2c+ZjtmKyspaWYoZD1lW2ZdLmNhbGwoYyxiLGEpKXJldHVybiBkfWZ1bmN0aW9uIEcoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbD10aGlzLG09e30sbj1hLnN0eWxlLG89YS5ub2RlVHlwZSYmeGIoYSkscD1yYi5nZXQoYSxcImZ4c2hvd1wiKTtjLnF1ZXVlfHwoaD1fLl9xdWV1ZUhvb2tzKGEsXCJmeFwiKSxudWxsPT1oLnVucXVldWVkJiYoaC51bnF1ZXVlZD0wLGk9aC5lbXB0eS5maXJlLGguZW1wdHkuZmlyZT1mdW5jdGlvbigpe2gudW5xdWV1ZWR8fGkoKX0pLGgudW5xdWV1ZWQrKyxsLmFsd2F5cyhmdW5jdGlvbigpe2wuYWx3YXlzKGZ1bmN0aW9uKCl7aC51bnF1ZXVlZC0tLF8ucXVldWUoYSxcImZ4XCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2RlVHlwZSYmKFwiaGVpZ2h0XCJpbiBifHxcIndpZHRoXCJpbiBiKSYmKGMub3ZlcmZsb3c9W24ub3ZlcmZsb3csbi5vdmVyZmxvd1gsbi5vdmVyZmxvd1ldLGo9Xy5jc3MoYSxcImRpc3BsYXlcIiksaz1cIm5vbmVcIj09PWo/cmIuZ2V0KGEsXCJvbGRkaXNwbGF5XCIpfHx1KGEubm9kZU5hbWUpOmosXCJpbmxpbmVcIj09PWsmJlwibm9uZVwiPT09Xy5jc3MoYSxcImZsb2F0XCIpJiYobi5kaXNwbGF5PVwiaW5saW5lLWJsb2NrXCIpKSxjLm92ZXJmbG93JiYobi5vdmVyZmxvdz1cImhpZGRlblwiLGwuYWx3YXlzKGZ1bmN0aW9uKCl7bi5vdmVyZmxvdz1jLm92ZXJmbG93WzBdLG4ub3ZlcmZsb3dYPWMub3ZlcmZsb3dbMV0sbi5vdmVyZmxvd1k9Yy5vdmVyZmxvd1syXX0pKTtmb3IoZCBpbiBiKWlmKGU9YltkXSwkYi5leGVjKGUpKXtpZihkZWxldGUgYltkXSxmPWZ8fFwidG9nZ2xlXCI9PT1lLGU9PT0obz9cImhpZGVcIjpcInNob3dcIikpe2lmKFwic2hvd1wiIT09ZXx8IXB8fHZvaWQgMD09PXBbZF0pY29udGludWU7bz0hMH1tW2RdPXAmJnBbZF18fF8uc3R5bGUoYSxkKX1lbHNlIGo9dm9pZCAwO2lmKF8uaXNFbXB0eU9iamVjdChtKSlcImlubGluZVwiPT09KFwibm9uZVwiPT09aj91KGEubm9kZU5hbWUpOmopJiYobi5kaXNwbGF5PWopO2Vsc2V7cD9cImhpZGRlblwiaW4gcCYmKG89cC5oaWRkZW4pOnA9cmIuYWNjZXNzKGEsXCJmeHNob3dcIix7fSksZiYmKHAuaGlkZGVuPSFvKSxvP18oYSkuc2hvdygpOmwuZG9uZShmdW5jdGlvbigpe18oYSkuaGlkZSgpfSksbC5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7cmIucmVtb3ZlKGEsXCJmeHNob3dcIik7Zm9yKGIgaW4gbSlfLnN0eWxlKGEsYixtW2JdKX0pO2ZvcihkIGluIG0pZz1GKG8/cFtkXTowLGQsbCksZCBpbiBwfHwocFtkXT1nLnN0YXJ0LG8mJihnLmVuZD1nLnN0YXJ0LGcuc3RhcnQ9XCJ3aWR0aFwiPT09ZHx8XCJoZWlnaHRcIj09PWQ/MTowKSl9fWZ1bmN0aW9uIEgoYSxiKXt2YXIgYyxkLGUsZixnO2ZvcihjIGluIGEpaWYoZD1fLmNhbWVsQ2FzZShjKSxlPWJbZF0sZj1hW2NdLF8uaXNBcnJheShmKSYmKGU9ZlsxXSxmPWFbY109ZlswXSksYyE9PWQmJihhW2RdPWYsZGVsZXRlIGFbY10pLGc9Xy5jc3NIb29rc1tkXSxnJiZcImV4cGFuZFwiaW4gZyl7Zj1nLmV4cGFuZChmKSxkZWxldGUgYVtkXTtmb3IoYyBpbiBmKWMgaW4gYXx8KGFbY109ZltjXSxiW2NdPWUpfWVsc2UgYltkXT1lfWZ1bmN0aW9uIEkoYSxiLGMpe3ZhciBkLGUsZj0wLGc9YmMubGVuZ3RoLGg9Xy5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3IodmFyIGI9WWJ8fEQoKSxjPU1hdGgubWF4KDAsai5zdGFydFRpbWUrai5kdXJhdGlvbi1iKSxkPWMvai5kdXJhdGlvbnx8MCxmPTEtZCxnPTAsaT1qLnR3ZWVucy5sZW5ndGg7aT5nO2crKylqLnR3ZWVuc1tnXS5ydW4oZik7cmV0dXJuIGgubm90aWZ5V2l0aChhLFtqLGYsY10pLDE+ZiYmaT9jOihoLnJlc29sdmVXaXRoKGEsW2pdKSwhMSl9LGo9aC5wcm9taXNlKHtlbGVtOmEscHJvcHM6Xy5leHRlbmQoe30sYiksb3B0czpfLmV4dGVuZCghMCx7c3BlY2lhbEVhc2luZzp7fX0sYyksb3JpZ2luYWxQcm9wZXJ0aWVzOmIsb3JpZ2luYWxPcHRpb25zOmMsc3RhcnRUaW1lOllifHxEKCksZHVyYXRpb246Yy5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oYixjKXt2YXIgZD1fLlR3ZWVuKGEsai5vcHRzLGIsYyxqLm9wdHMuc3BlY2lhbEVhc2luZ1tiXXx8ai5vcHRzLmVhc2luZyk7cmV0dXJuIGoudHdlZW5zLnB1c2goZCksZH0sc3RvcDpmdW5jdGlvbihiKXt2YXIgYz0wLGQ9Yj9qLnR3ZWVucy5sZW5ndGg6MDtpZihlKXJldHVybiB0aGlzO2ZvcihlPSEwO2Q+YztjKyspai50d2VlbnNbY10ucnVuKDEpO3JldHVybiBiP2gucmVzb2x2ZVdpdGgoYSxbaixiXSk6aC5yZWplY3RXaXRoKGEsW2osYl0pLHRoaXN9fSksaz1qLnByb3BzO2ZvcihIKGssai5vcHRzLnNwZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1iY1tmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIGQ7cmV0dXJuIF8ubWFwKGssRixqKSxfLmlzRnVuY3Rpb24oai5vcHRzLnN0YXJ0KSYmai5vcHRzLnN0YXJ0LmNhbGwoYSxqKSxfLmZ4LnRpbWVyKF8uZXh0ZW5kKGkse2VsZW06YSxhbmltOmoscXVldWU6ai5vcHRzLnF1ZXVlfSkpLGoucHJvZ3Jlc3Moai5vcHRzLnByb2dyZXNzKS5kb25lKGoub3B0cy5kb25lLGoub3B0cy5jb21wbGV0ZSkuZmFpbChqLm9wdHMuZmFpbCkuYWx3YXlzKGoub3B0cy5hbHdheXMpfWZ1bmN0aW9uIEooYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7XCJzdHJpbmdcIiE9dHlwZW9mIGImJihjPWIsYj1cIipcIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKG5iKXx8W107aWYoXy5pc0Z1bmN0aW9uKGMpKWZvcig7ZD1mW2UrK107KVwiK1wiPT09ZFswXT8oZD1kLnNsaWNlKDEpfHxcIipcIiwoYVtkXT1hW2RdfHxbXSkudW5zaGlmdChjKSk6KGFbZF09YVtkXXx8W10pLnB1c2goYyl9fWZ1bmN0aW9uIEsoYSxiLGMsZCl7ZnVuY3Rpb24gZShoKXt2YXIgaTtyZXR1cm4gZltoXT0hMCxfLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2Yganx8Z3x8ZltqXT9nPyEoaT1qKTp2b2lkIDA6KGIuZGF0YVR5cGVzLnVuc2hpZnQoaiksZShqKSwhMSl9KSxpfXZhciBmPXt9LGc9YT09PXZjO3JldHVybiBlKGIuZGF0YVR5cGVzWzBdKXx8IWZbXCIqXCJdJiZlKFwiKlwiKX1mdW5jdGlvbiBMKGEsYil7dmFyIGMsZCxlPV8uYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoYyBpbiBiKXZvaWQgMCE9PWJbY10mJigoZVtjXT9hOmR8fChkPXt9KSlbY109YltjXSk7cmV0dXJuIGQmJl8uZXh0ZW5kKCEwLGEsZCksYX1mdW5jdGlvbiBNKGEsYixjKXtmb3IodmFyIGQsZSxmLGcsaD1hLmNvbnRlbnRzLGk9YS5kYXRhVHlwZXM7XCIqXCI9PT1pWzBdOylpLnNoaWZ0KCksdm9pZCAwPT09ZCYmKGQ9YS5taW1lVHlwZXx8Yi5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKSk7aWYoZClmb3IoZSBpbiBoKWlmKGhbZV0mJmhbZV0udGVzdChkKSl7aS51bnNoaWZ0KGUpO2JyZWFrfWlmKGlbMF1pbiBjKWY9aVswXTtlbHNle2ZvcihlIGluIGMpe2lmKCFpWzBdfHxhLmNvbnZlcnRlcnNbZStcIiBcIitpWzBdXSl7Zj1lO2JyZWFrfWd8fChnPWUpfWY9Znx8Z31yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gTihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGo9e30saz1hLmRhdGFUeXBlcy5zbGljZSgpO2lmKGtbMV0pZm9yKGcgaW4gYS5jb252ZXJ0ZXJzKWpbZy50b0xvd2VyQ2FzZSgpXT1hLmNvbnZlcnRlcnNbZ107Zm9yKGY9ay5zaGlmdCgpO2Y7KWlmKGEucmVzcG9uc2VGaWVsZHNbZl0mJihjW2EucmVzcG9uc2VGaWVsZHNbZl1dPWIpLCFpJiZkJiZhLmRhdGFGaWx0ZXImJihiPWEuZGF0YUZpbHRlcihiLGEuZGF0YVR5cGUpKSxpPWYsZj1rLnNoaWZ0KCkpaWYoXCIqXCI9PT1mKWY9aTtlbHNlIGlmKFwiKlwiIT09aSYmaSE9PWYpe2lmKGc9altpK1wiIFwiK2ZdfHxqW1wiKiBcIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdChcIiBcIiksaFsxXT09PWYmJihnPWpbaStcIiBcIitoWzBdXXx8altcIiogXCIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhW1widGhyb3dzXCJdKWI9ZyhiKTtlbHNlIHRyeXtiPWcoYil9Y2F0Y2gobCl7cmV0dXJue3N0YXRlOlwicGFyc2VyZXJyb3JcIixlcnJvcjpnP2w6XCJObyBjb252ZXJzaW9uIGZyb20gXCIraStcIiB0byBcIitmfX19cmV0dXJue3N0YXRlOlwic3VjY2Vzc1wiLGRhdGE6Yn19ZnVuY3Rpb24gTyhhLGIsYyxkKXt2YXIgZTtpZihfLmlzQXJyYXkoYikpXy5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHx6Yy50ZXN0KGEpP2QoYSxlKTpPKGErXCJbXCIrKFwib2JqZWN0XCI9PXR5cGVvZiBlP2I6XCJcIikrXCJdXCIsZSxjLGQpfSk7ZWxzZSBpZihjfHxcIm9iamVjdFwiIT09Xy50eXBlKGIpKWQoYSxiKTtlbHNlIGZvcihlIGluIGIpTyhhK1wiW1wiK2UrXCJdXCIsYltlXSxjLGQpfWZ1bmN0aW9uIFAoYSl7cmV0dXJuIF8uaXNXaW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZSYmYS5kZWZhdWx0Vmlld312YXIgUT1bXSxSPVEuc2xpY2UsUz1RLmNvbmNhdCxUPVEucHVzaCxVPVEuaW5kZXhPZixWPXt9LFc9Vi50b1N0cmluZyxYPVYuaGFzT3duUHJvcGVydHksWT17fSxaPWEuZG9jdW1lbnQsJD1cIjIuMS4xXCIsXz1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgXy5mbi5pbml0KGEsYil9LGFiPS9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZyxiYj0vXi1tcy0vLGNiPS8tKFtcXGRhLXpdKS9naSxkYj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O18uZm49Xy5wcm90b3R5cGU9e2pxdWVyeTokLGNvbnN0cnVjdG9yOl8sc2VsZWN0b3I6XCJcIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIFIuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hPzA+YT90aGlzW2ErdGhpcy5sZW5ndGhdOnRoaXNbYV06Ui5jYWxsKHRoaXMpfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSl7dmFyIGI9Xy5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksYSk7cmV0dXJuIGIucHJldk9iamVjdD10aGlzLGIuY29udGV4dD10aGlzLmNvbnRleHQsYn0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBfLmVhY2godGhpcyxhLGIpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKF8ubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSthKygwPmE/YjowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYj5jP1t0aGlzW2NdXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6VCxzb3J0OlEuc29ydCxzcGxpY2U6US5zcGxpY2V9LF8uZXh0ZW5kPV8uZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc9YXJndW1lbnRzWzBdfHx7fSxoPTEsaT1hcmd1bWVudHMubGVuZ3RoLGo9ITE7Zm9yKFwiYm9vbGVhblwiPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSxcIm9iamVjdFwiPT10eXBlb2YgZ3x8Xy5pc0Z1bmN0aW9uKGcpfHwoZz17fSksaD09PWkmJihnPXRoaXMsaC0tKTtpPmg7aCsrKWlmKG51bGwhPShhPWFyZ3VtZW50c1toXSkpZm9yKGIgaW4gYSljPWdbYl0sZD1hW2JdLGchPT1kJiYoaiYmZCYmKF8uaXNQbGFpbk9iamVjdChkKXx8KGU9Xy5pc0FycmF5KGQpKSk/KGU/KGU9ITEsZj1jJiZfLmlzQXJyYXkoYyk/YzpbXSk6Zj1jJiZfLmlzUGxhaW5PYmplY3QoYyk/Yzp7fSxnW2JdPV8uZXh0ZW5kKGosZixkKSk6dm9pZCAwIT09ZCYmKGdbYl09ZCkpO3JldHVybiBnfSxfLmV4dGVuZCh7ZXhwYW5kbzpcImpRdWVyeVwiKygkK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xcRC9nLFwiXCIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29wOmZ1bmN0aW9uKCl7fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVyblwiZnVuY3Rpb25cIj09PV8udHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5LGlzV2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hJiZhPT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4hXy5pc0FycmF5KGEpJiZhLXBhcnNlRmxvYXQoYSk+PTB9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIiE9PV8udHlwZShhKXx8YS5ub2RlVHlwZXx8Xy5pc1dpbmRvdyhhKT8hMTphLmNvbnN0cnVjdG9yJiYhWC5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLFwiaXNQcm90b3R5cGVPZlwiKT8hMTohMH0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP2ErXCJcIjpcIm9iamVjdFwiPT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT10eXBlb2YgYT9WW1cuY2FsbChhKV18fFwib2JqZWN0XCI6dHlwZW9mIGF9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYSl7dmFyIGIsYz1ldmFsO2E9Xy50cmltKGEpLGEmJigxPT09YS5pbmRleE9mKFwidXNlIHN0cmljdFwiKT8oYj1aLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksYi50ZXh0PWEsWi5oZWFkLmFwcGVuZENoaWxkKGIpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYikpOmMoYSkpfSxjYW1lbENhc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShiYixcIm1zLVwiKS5yZXBsYWNlKGNiLGRiKX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYixkKXt2YXIgZSxmPTAsZz1hLmxlbmd0aCxoPWMoYSk7aWYoZCl7aWYoaClmb3IoO2c+ZiYmKGU9Yi5hcHBseShhW2ZdLGQpLGUhPT0hMSk7ZisrKTtlbHNlIGZvcihmIGluIGEpaWYoZT1iLmFwcGx5KGFbZl0sZCksZT09PSExKWJyZWFrfWVsc2UgaWYoaClmb3IoO2c+ZiYmKGU9Yi5jYWxsKGFbZl0sZixhW2ZdKSxlIT09ITEpO2YrKyk7ZWxzZSBmb3IoZiBpbiBhKWlmKGU9Yi5jYWxsKGFbZl0sZixhW2ZdKSxlPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/XCJcIjooYStcIlwiKS5yZXBsYWNlKGFiLFwiXCIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oYSxiKXt2YXIgZD1ifHxbXTtyZXR1cm4gbnVsbCE9YSYmKGMoT2JqZWN0KGEpKT9fLm1lcmdlKGQsXCJzdHJpbmdcIj09dHlwZW9mIGE/W2FdOmEpOlQuY2FsbChkLGEpKSxkfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbD09Yj8tMTpVLmNhbGwoYixhLGMpfSxtZXJnZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7Yz5kO2QrKylhW2UrK109YltkXTtyZXR1cm4gYS5sZW5ndGg9ZSxhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQsZT1bXSxmPTAsZz1hLmxlbmd0aCxoPSFjO2c+ZjtmKyspZD0hYihhW2ZdLGYpLGQhPT1oJiZlLnB1c2goYVtmXSk7cmV0dXJuIGV9LG1hcDpmdW5jdGlvbihhLGIsZCl7dmFyIGUsZj0wLGc9YS5sZW5ndGgsaD1jKGEpLGk9W107aWYoaClmb3IoO2c+ZjtmKyspZT1iKGFbZl0sZixkKSxudWxsIT1lJiZpLnB1c2goZSk7ZWxzZSBmb3IoZiBpbiBhKWU9YihhW2ZdLGYsZCksbnVsbCE9ZSYmaS5wdXNoKGUpO3JldHVybiBTLmFwcGx5KFtdLGkpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGImJihjPWFbYl0sYj1hLGE9YyksXy5pc0Z1bmN0aW9uKGEpPyhkPVIuY2FsbChhcmd1bWVudHMsMiksZT1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGJ8fHRoaXMsZC5jb25jYXQoUi5jYWxsKGFyZ3VtZW50cykpKX0sZS5ndWlkPWEuZ3VpZD1hLmd1aWR8fF8uZ3VpZCsrLGUpOnZvaWQgMH0sbm93OkRhdGUubm93LHN1cHBvcnQ6WX0pLF8uZWFjaChcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3JcIi5zcGxpdChcIiBcIiksZnVuY3Rpb24oYSxiKXtWW1wiW29iamVjdCBcIitiK1wiXVwiXT1iLnRvTG93ZXJDYXNlKCl9KTt2YXIgZWI9LypcbiAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYxLjEwLjE5XG4gKiBodHRwOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCAyMDEzIGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMTQtMDQtMThcbiAqL1xuICAgIGZ1bmN0aW9uIChhKSB7IGZ1bmN0aW9uIGIoYSwgYiwgYywgZCkgeyB2YXIgZSwgZiwgZywgaCwgaSwgaiwgbCwgbiwgbywgcDsgaWYgKChiID8gYi5vd25lckRvY3VtZW50IHx8IGIgOiBPKSAhPT0gRyAmJiBGKGIpLCBiID0gYiB8fCBHLCBjID0gYyB8fCBbXSwgIWEgfHwgXCJzdHJpbmdcIiAhPSB0eXBlb2YgYSkgcmV0dXJuIGM7IGlmICgxICE9PSAoaCA9IGIubm9kZVR5cGUpICYmIDkgIT09IGgpIHJldHVybiBbXTsgaWYgKEkgJiYgIWQpIHsgaWYgKGUgPSBzYi5leGVjKGEpKSBpZiAoZyA9IGVbMV0pIHsgaWYgKDkgPT09IGgpIHsgaWYgKGYgPSBiLmdldEVsZW1lbnRCeUlkKGcpLCAhZiB8fCAhZi5wYXJlbnROb2RlKSByZXR1cm4gYzsgaWYgKGYuaWQgPT09IGcpIHJldHVybiBjLnB1c2goZiksIGMgfSBlbHNlIGlmIChiLm93bmVyRG9jdW1lbnQgJiYgKGYgPSBiLm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZykpICYmIE0oYiwgZikgJiYgZi5pZCA9PT0gZykgcmV0dXJuIGMucHVzaChmKSwgYyB9IGVsc2UgeyBpZiAoZVsyXSkgcmV0dXJuIF8uYXBwbHkoYywgYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksIGM7IGlmICgoZyA9IGVbM10pICYmIHYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpIHJldHVybiBfLmFwcGx5KGMsIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShnKSksIGMgfSBpZiAodi5xc2EgJiYgKCFKIHx8ICFKLnRlc3QoYSkpKSB7IGlmIChuID0gbCA9IE4sIG8gPSBiLCBwID0gOSA9PT0gaCAmJiBhLCAxID09PSBoICYmIFwib2JqZWN0XCIgIT09IGIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgeyBmb3IgKGogPSB6KGEpLCAobCA9IGIuZ2V0QXR0cmlidXRlKFwiaWRcIikpID8gbiA9IGwucmVwbGFjZSh1YiwgXCJcXFxcJCZcIikgOiBiLnNldEF0dHJpYnV0ZShcImlkXCIsIG4pLCBuID0gXCJbaWQ9J1wiICsgbiArIFwiJ10gXCIsIGkgPSBqLmxlbmd0aDsgaS0tOylqW2ldID0gbiArIG0oaltpXSk7IG8gPSB0Yi50ZXN0KGEpICYmIGsoYi5wYXJlbnROb2RlKSB8fCBiLCBwID0gai5qb2luKFwiLFwiKSB9IGlmIChwKSB0cnkgeyByZXR1cm4gXy5hcHBseShjLCBvLnF1ZXJ5U2VsZWN0b3JBbGwocCkpLCBjIH0gY2F0Y2ggKHEpIHsgfSBmaW5hbGx5IHsgbCB8fCBiLnJlbW92ZUF0dHJpYnV0ZShcImlkXCIpIH0gfSB9IHJldHVybiBCKGEucmVwbGFjZShpYiwgXCIkMVwiKSwgYiwgYywgZCkgfSBmdW5jdGlvbiBjKCkgeyBmdW5jdGlvbiBhKGMsIGQpIHsgcmV0dXJuIGIucHVzaChjICsgXCIgXCIpID4gdy5jYWNoZUxlbmd0aCAmJiBkZWxldGUgYVtiLnNoaWZ0KCldLCBhW2MgKyBcIiBcIl0gPSBkIH0gdmFyIGIgPSBbXTsgcmV0dXJuIGEgfSBmdW5jdGlvbiBkKGEpIHsgcmV0dXJuIGFbTl0gPSAhMCwgYSB9IGZ1bmN0aW9uIGUoYSkgeyB2YXIgYiA9IEcuY3JlYXRlRWxlbWVudChcImRpdlwiKTsgdHJ5IHsgcmV0dXJuICEhYShiKSB9IGNhdGNoIChjKSB7IHJldHVybiAhMSB9IGZpbmFsbHkgeyBiLnBhcmVudE5vZGUgJiYgYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLCBiID0gbnVsbCB9IH0gZnVuY3Rpb24gZihhLCBiKSB7IGZvciAodmFyIGMgPSBhLnNwbGl0KFwifFwiKSwgZCA9IGEubGVuZ3RoOyBkLS07KXcuYXR0ckhhbmRsZVtjW2RdXSA9IGIgfSBmdW5jdGlvbiBnKGEsIGIpIHsgdmFyIGMgPSBiICYmIGEsIGQgPSBjICYmIDEgPT09IGEubm9kZVR5cGUgJiYgMSA9PT0gYi5ub2RlVHlwZSAmJiAofmIuc291cmNlSW5kZXggfHwgVykgLSAofmEuc291cmNlSW5kZXggfHwgVyk7IGlmIChkKSByZXR1cm4gZDsgaWYgKGMpIGZvciAoOyBjID0gYy5uZXh0U2libGluZzspaWYgKGMgPT09IGIpIHJldHVybiAtMTsgcmV0dXJuIGEgPyAxIDogLTEgfSBmdW5jdGlvbiBoKGEpIHsgcmV0dXJuIGZ1bmN0aW9uIChiKSB7IHZhciBjID0gYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gXCJpbnB1dFwiID09PSBjICYmIGIudHlwZSA9PT0gYSB9IH0gZnVuY3Rpb24gaShhKSB7IHJldHVybiBmdW5jdGlvbiAoYikgeyB2YXIgYyA9IGIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsgcmV0dXJuIChcImlucHV0XCIgPT09IGMgfHwgXCJidXR0b25cIiA9PT0gYykgJiYgYi50eXBlID09PSBhIH0gfSBmdW5jdGlvbiBqKGEpIHsgcmV0dXJuIGQoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIgPSArYiwgZChmdW5jdGlvbiAoYywgZCkgeyBmb3IgKHZhciBlLCBmID0gYShbXSwgYy5sZW5ndGgsIGIpLCBnID0gZi5sZW5ndGg7IGctLTspY1tlID0gZltnXV0gJiYgKGNbZV0gPSAhKGRbZV0gPSBjW2VdKSkgfSkgfSkgfSBmdW5jdGlvbiBrKGEpIHsgcmV0dXJuIGEgJiYgdHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFYgJiYgYSB9IGZ1bmN0aW9uIGwoKSB7IH0gZnVuY3Rpb24gbShhKSB7IGZvciAodmFyIGIgPSAwLCBjID0gYS5sZW5ndGgsIGQgPSBcIlwiOyBjID4gYjsgYisrKWQgKz0gYVtiXS52YWx1ZTsgcmV0dXJuIGQgfSBmdW5jdGlvbiBuKGEsIGIsIGMpIHsgdmFyIGQgPSBiLmRpciwgZSA9IGMgJiYgXCJwYXJlbnROb2RlXCIgPT09IGQsIGYgPSBRKys7IHJldHVybiBiLmZpcnN0ID8gZnVuY3Rpb24gKGIsIGMsIGYpIHsgZm9yICg7IGIgPSBiW2RdOylpZiAoMSA9PT0gYi5ub2RlVHlwZSB8fCBlKSByZXR1cm4gYShiLCBjLCBmKSB9IDogZnVuY3Rpb24gKGIsIGMsIGcpIHsgdmFyIGgsIGksIGogPSBbUCwgZl07IGlmIChnKSB7IGZvciAoOyBiID0gYltkXTspaWYgKCgxID09PSBiLm5vZGVUeXBlIHx8IGUpICYmIGEoYiwgYywgZykpIHJldHVybiAhMCB9IGVsc2UgZm9yICg7IGIgPSBiW2RdOylpZiAoMSA9PT0gYi5ub2RlVHlwZSB8fCBlKSB7IGlmIChpID0gYltOXSB8fCAoYltOXSA9IHt9KSwgKGggPSBpW2RdKSAmJiBoWzBdID09PSBQICYmIGhbMV0gPT09IGYpIHJldHVybiBqWzJdID0gaFsyXTsgaWYgKGlbZF0gPSBqLCBqWzJdID0gYShiLCBjLCBnKSkgcmV0dXJuICEwIH0gfSB9IGZ1bmN0aW9uIG8oYSkgeyByZXR1cm4gYS5sZW5ndGggPiAxID8gZnVuY3Rpb24gKGIsIGMsIGQpIHsgZm9yICh2YXIgZSA9IGEubGVuZ3RoOyBlLS07KWlmICghYVtlXShiLCBjLCBkKSkgcmV0dXJuICExOyByZXR1cm4gITAgfSA6IGFbMF0gfSBmdW5jdGlvbiBwKGEsIGMsIGQpIHsgZm9yICh2YXIgZSA9IDAsIGYgPSBjLmxlbmd0aDsgZiA+IGU7IGUrKyliKGEsIGNbZV0sIGQpOyByZXR1cm4gZCB9IGZ1bmN0aW9uIHEoYSwgYiwgYywgZCwgZSkgeyBmb3IgKHZhciBmLCBnID0gW10sIGggPSAwLCBpID0gYS5sZW5ndGgsIGogPSBudWxsICE9IGI7IGkgPiBoOyBoKyspKGYgPSBhW2hdKSAmJiAoIWMgfHwgYyhmLCBkLCBlKSkgJiYgKGcucHVzaChmKSwgaiAmJiBiLnB1c2goaCkpOyByZXR1cm4gZyB9IGZ1bmN0aW9uIHIoYSwgYiwgYywgZSwgZiwgZykgeyByZXR1cm4gZSAmJiAhZVtOXSAmJiAoZSA9IHIoZSkpLCBmICYmICFmW05dICYmIChmID0gcihmLCBnKSksIGQoZnVuY3Rpb24gKGQsIGcsIGgsIGkpIHsgdmFyIGosIGssIGwsIG0gPSBbXSwgbiA9IFtdLCBvID0gZy5sZW5ndGgsIHIgPSBkIHx8IHAoYiB8fCBcIipcIiwgaC5ub2RlVHlwZSA/IFtoXSA6IGgsIFtdKSwgcyA9ICFhIHx8ICFkICYmIGIgPyByIDogcShyLCBtLCBhLCBoLCBpKSwgdCA9IGMgPyBmIHx8IChkID8gYSA6IG8gfHwgZSkgPyBbXSA6IGcgOiBzOyBpZiAoYyAmJiBjKHMsIHQsIGgsIGkpLCBlKSBmb3IgKGogPSBxKHQsIG4pLCBlKGosIFtdLCBoLCBpKSwgayA9IGoubGVuZ3RoOyBrLS07KShsID0galtrXSkgJiYgKHRbbltrXV0gPSAhKHNbbltrXV0gPSBsKSk7IGlmIChkKSB7IGlmIChmIHx8IGEpIHsgaWYgKGYpIHsgZm9yIChqID0gW10sIGsgPSB0Lmxlbmd0aDsgay0tOykobCA9IHRba10pICYmIGoucHVzaChzW2tdID0gbCk7IGYobnVsbCwgdCA9IFtdLCBqLCBpKSB9IGZvciAoayA9IHQubGVuZ3RoOyBrLS07KShsID0gdFtrXSkgJiYgKGogPSBmID8gYmIuY2FsbChkLCBsKSA6IG1ba10pID4gLTEgJiYgKGRbal0gPSAhKGdbal0gPSBsKSkgfSB9IGVsc2UgdCA9IHEodCA9PT0gZyA/IHQuc3BsaWNlKG8sIHQubGVuZ3RoKSA6IHQpLCBmID8gZihudWxsLCBnLCB0LCBpKSA6IF8uYXBwbHkoZywgdCkgfSkgfSBmdW5jdGlvbiBzKGEpIHsgZm9yICh2YXIgYiwgYywgZCwgZSA9IGEubGVuZ3RoLCBmID0gdy5yZWxhdGl2ZVthWzBdLnR5cGVdLCBnID0gZiB8fCB3LnJlbGF0aXZlW1wiIFwiXSwgaCA9IGYgPyAxIDogMCwgaSA9IG4oZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgPT09IGIgfSwgZywgITApLCBqID0gbihmdW5jdGlvbiAoYSkgeyByZXR1cm4gYmIuY2FsbChiLCBhKSA+IC0xIH0sIGcsICEwKSwgayA9IFtmdW5jdGlvbiAoYSwgYywgZCkgeyByZXR1cm4gIWYgJiYgKGQgfHwgYyAhPT0gQykgfHwgKChiID0gYykubm9kZVR5cGUgPyBpKGEsIGMsIGQpIDogaihhLCBjLCBkKSkgfV07IGUgPiBoOyBoKyspaWYgKGMgPSB3LnJlbGF0aXZlW2FbaF0udHlwZV0pIGsgPSBbbihvKGspLCBjKV07IGVsc2UgeyBpZiAoYyA9IHcuZmlsdGVyW2FbaF0udHlwZV0uYXBwbHkobnVsbCwgYVtoXS5tYXRjaGVzKSwgY1tOXSkgeyBmb3IgKGQgPSArK2g7IGUgPiBkICYmICF3LnJlbGF0aXZlW2FbZF0udHlwZV07IGQrKyk7IHJldHVybiByKGggPiAxICYmIG8oayksIGggPiAxICYmIG0oYS5zbGljZSgwLCBoIC0gMSkuY29uY2F0KHsgdmFsdWU6IFwiIFwiID09PSBhW2ggLSAyXS50eXBlID8gXCIqXCIgOiBcIlwiIH0pKS5yZXBsYWNlKGliLCBcIiQxXCIpLCBjLCBkID4gaCAmJiBzKGEuc2xpY2UoaCwgZCkpLCBlID4gZCAmJiBzKGEgPSBhLnNsaWNlKGQpKSwgZSA+IGQgJiYgbShhKSkgfSBrLnB1c2goYykgfSByZXR1cm4gbyhrKSB9IGZ1bmN0aW9uIHQoYSwgYykgeyB2YXIgZSA9IGMubGVuZ3RoID4gMCwgZiA9IGEubGVuZ3RoID4gMCwgZyA9IGZ1bmN0aW9uIChkLCBnLCBoLCBpLCBqKSB7IHZhciBrLCBsLCBtLCBuID0gMCwgbyA9IFwiMFwiLCBwID0gZCAmJiBbXSwgciA9IFtdLCBzID0gQywgdCA9IGQgfHwgZiAmJiB3LmZpbmQuVEFHKFwiKlwiLCBqKSwgdSA9IFAgKz0gbnVsbCA9PSBzID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgLjEsIHYgPSB0Lmxlbmd0aDsgZm9yIChqICYmIChDID0gZyAhPT0gRyAmJiBnKTsgbyAhPT0gdiAmJiBudWxsICE9IChrID0gdFtvXSk7IG8rKykgeyBpZiAoZiAmJiBrKSB7IGZvciAobCA9IDA7IG0gPSBhW2wrK107KWlmIChtKGssIGcsIGgpKSB7IGkucHVzaChrKTsgYnJlYWsgfSBqICYmIChQID0gdSkgfSBlICYmICgoayA9ICFtICYmIGspICYmIG4tLSwgZCAmJiBwLnB1c2goaykpIH0gaWYgKG4gKz0gbywgZSAmJiBvICE9PSBuKSB7IGZvciAobCA9IDA7IG0gPSBjW2wrK107KW0ocCwgciwgZywgaCk7IGlmIChkKSB7IGlmIChuID4gMCkgZm9yICg7IG8tLTspcFtvXSB8fCByW29dIHx8IChyW29dID0gWi5jYWxsKGkpKTsgciA9IHEocikgfSBfLmFwcGx5KGksIHIpLCBqICYmICFkICYmIHIubGVuZ3RoID4gMCAmJiBuICsgYy5sZW5ndGggPiAxICYmIGIudW5pcXVlU29ydChpKSB9IHJldHVybiBqICYmIChQID0gdSwgQyA9IHMpLCBwIH07IHJldHVybiBlID8gZChnKSA6IGcgfSB2YXIgdSwgdiwgdywgeCwgeSwgeiwgQSwgQiwgQywgRCwgRSwgRiwgRywgSCwgSSwgSiwgSywgTCwgTSwgTiA9IFwic2l6emxlXCIgKyAtbmV3IERhdGUsIE8gPSBhLmRvY3VtZW50LCBQID0gMCwgUSA9IDAsIFIgPSBjKCksIFMgPSBjKCksIFQgPSBjKCksIFUgPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSA9PT0gYiAmJiAoRSA9ICEwKSwgMCB9LCBWID0gXCJ1bmRlZmluZWRcIiwgVyA9IDEgPDwgMzEsIFggPSB7fS5oYXNPd25Qcm9wZXJ0eSwgWSA9IFtdLCBaID0gWS5wb3AsICQgPSBZLnB1c2gsIF8gPSBZLnB1c2gsIGFiID0gWS5zbGljZSwgYmIgPSBZLmluZGV4T2YgfHwgZnVuY3Rpb24gKGEpIHsgZm9yICh2YXIgYiA9IDAsIGMgPSB0aGlzLmxlbmd0aDsgYyA+IGI7IGIrKylpZiAodGhpc1tiXSA9PT0gYSkgcmV0dXJuIGI7IHJldHVybiAtMSB9LCBjYiA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIiwgZGIgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsIGViID0gXCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXFxceDAwLVxcXFx4YTBdKStcIiwgZmIgPSBlYi5yZXBsYWNlKFwid1wiLCBcIncjXCIpLCBnYiA9IFwiXFxcXFtcIiArIGRiICsgXCIqKFwiICsgZWIgKyBcIikoPzpcIiArIGRiICsgXCIqKFsqXiR8IX5dPz0pXCIgKyBkYiArIFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBmYiArIFwiKSl8KVwiICsgZGIgKyBcIipcXFxcXVwiLCBoYiA9IFwiOihcIiArIGViICsgXCIpKD86XFxcXCgoKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8KCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgZ2IgKyBcIikqKXwuKilcXFxcKXwpXCIsIGliID0gbmV3IFJlZ0V4cChcIl5cIiArIGRiICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICsgZGIgKyBcIiskXCIsIFwiZ1wiKSwgamIgPSBuZXcgUmVnRXhwKFwiXlwiICsgZGIgKyBcIiosXCIgKyBkYiArIFwiKlwiKSwga2IgPSBuZXcgUmVnRXhwKFwiXlwiICsgZGIgKyBcIiooWz4rfl18XCIgKyBkYiArIFwiKVwiICsgZGIgKyBcIipcIiksIGxiID0gbmV3IFJlZ0V4cChcIj1cIiArIGRiICsgXCIqKFteXFxcXF0nXFxcIl0qPylcIiArIGRiICsgXCIqXFxcXF1cIiwgXCJnXCIpLCBtYiA9IG5ldyBSZWdFeHAoaGIpLCBuYiA9IG5ldyBSZWdFeHAoXCJeXCIgKyBmYiArIFwiJFwiKSwgb2IgPSB7IElEOiBuZXcgUmVnRXhwKFwiXiMoXCIgKyBlYiArIFwiKVwiKSwgQ0xBU1M6IG5ldyBSZWdFeHAoXCJeXFxcXC4oXCIgKyBlYiArIFwiKVwiKSwgVEFHOiBuZXcgUmVnRXhwKFwiXihcIiArIGViLnJlcGxhY2UoXCJ3XCIsIFwidypcIikgKyBcIilcIiksIEFUVFI6IG5ldyBSZWdFeHAoXCJeXCIgKyBnYiksIFBTRVVETzogbmV3IFJlZ0V4cChcIl5cIiArIGhiKSwgQ0hJTEQ6IG5ldyBSZWdFeHAoXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICsgZGIgKyBcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgZGIgKyBcIiooPzooWystXXwpXCIgKyBkYiArIFwiKihcXFxcZCspfCkpXCIgKyBkYiArIFwiKlxcXFwpfClcIiwgXCJpXCIpLCBib29sOiBuZXcgUmVnRXhwKFwiXig/OlwiICsgY2IgKyBcIikkXCIsIFwiaVwiKSwgbmVlZHNDb250ZXh0OiBuZXcgUmVnRXhwKFwiXlwiICsgZGIgKyBcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgKyBkYiArIFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIGRiICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIpIH0sIHBiID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSwgcWIgPSAvXmhcXGQkL2ksIHJiID0gL15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3Lywgc2IgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLywgdGIgPSAvWyt+XS8sIHViID0gLyd8XFxcXC9nLCB2YiA9IG5ldyBSZWdFeHAoXCJcXFxcXFxcXChbXFxcXGRhLWZdezEsNn1cIiArIGRiICsgXCI/fChcIiArIGRiICsgXCIpfC4pXCIsIFwiaWdcIiksIHdiID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQgPSBcIjB4XCIgKyBiIC0gNjU1MzY7IHJldHVybiBkICE9PSBkIHx8IGMgPyBiIDogMCA+IGQgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGQgKyA2NTUzNikgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGQgPj4gMTAgfCA1NTI5NiwgMTAyMyAmIGQgfCA1NjMyMCkgfTsgdHJ5IHsgXy5hcHBseShZID0gYWIuY2FsbChPLmNoaWxkTm9kZXMpLCBPLmNoaWxkTm9kZXMpLCBZW08uY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlIH0gY2F0Y2ggKHhiKSB7IF8gPSB7IGFwcGx5OiBZLmxlbmd0aCA/IGZ1bmN0aW9uIChhLCBiKSB7ICQuYXBwbHkoYSwgYWIuY2FsbChiKSkgfSA6IGZ1bmN0aW9uIChhLCBiKSB7IGZvciAodmFyIGMgPSBhLmxlbmd0aCwgZCA9IDA7IGFbYysrXSA9IGJbZCsrXTspOyBhLmxlbmd0aCA9IGMgLSAxIH0gfSB9IHYgPSBiLnN1cHBvcnQgPSB7fSwgeSA9IGIuaXNYTUwgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEgJiYgKGEub3duZXJEb2N1bWVudCB8fCBhKS5kb2N1bWVudEVsZW1lbnQ7IHJldHVybiBiID8gXCJIVE1MXCIgIT09IGIubm9kZU5hbWUgOiAhMSB9LCBGID0gYi5zZXREb2N1bWVudCA9IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBjID0gYSA/IGEub3duZXJEb2N1bWVudCB8fCBhIDogTywgZCA9IGMuZGVmYXVsdFZpZXc7IHJldHVybiBjICE9PSBHICYmIDkgPT09IGMubm9kZVR5cGUgJiYgYy5kb2N1bWVudEVsZW1lbnQgPyAoRyA9IGMsIEggPSBjLmRvY3VtZW50RWxlbWVudCwgSSA9ICF5KGMpLCBkICYmIGQgIT09IGQudG9wICYmIChkLmFkZEV2ZW50TGlzdGVuZXIgPyBkLmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmxvYWRcIiwgZnVuY3Rpb24gKCkgeyBGKCkgfSwgITEpIDogZC5hdHRhY2hFdmVudCAmJiBkLmF0dGFjaEV2ZW50KFwib251bmxvYWRcIiwgZnVuY3Rpb24gKCkgeyBGKCkgfSkpLCB2LmF0dHJpYnV0ZXMgPSBlKGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmNsYXNzTmFtZSA9IFwiaVwiLCAhYS5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIikgfSksIHYuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBlKGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmFwcGVuZENoaWxkKGMuY3JlYXRlQ29tbWVudChcIlwiKSksICFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKS5sZW5ndGggfSksIHYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJiLnRlc3QoYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSAmJiBlKGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmlubmVySFRNTCA9IFwiPGRpdiBjbGFzcz0nYSc+PC9kaXY+PGRpdiBjbGFzcz0nYSBpJz48L2Rpdj5cIiwgYS5maXJzdENoaWxkLmNsYXNzTmFtZSA9IFwiaVwiLCAyID09PSBhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJpXCIpLmxlbmd0aCB9KSwgdi5nZXRCeUlkID0gZShmdW5jdGlvbiAoYSkgeyByZXR1cm4gSC5hcHBlbmRDaGlsZChhKS5pZCA9IE4sICFjLmdldEVsZW1lbnRzQnlOYW1lIHx8ICFjLmdldEVsZW1lbnRzQnlOYW1lKE4pLmxlbmd0aCB9KSwgdi5nZXRCeUlkID8gKHcuZmluZC5JRCA9IGZ1bmN0aW9uIChhLCBiKSB7IGlmICh0eXBlb2YgYi5nZXRFbGVtZW50QnlJZCAhPT0gViAmJiBJKSB7IHZhciBjID0gYi5nZXRFbGVtZW50QnlJZChhKTsgcmV0dXJuIGMgJiYgYy5wYXJlbnROb2RlID8gW2NdIDogW10gfSB9LCB3LmZpbHRlci5JRCA9IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS5yZXBsYWNlKHZiLCB3Yik7IHJldHVybiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSA9PT0gYiB9IH0pIDogKGRlbGV0ZSB3LmZpbmQuSUQsIHcuZmlsdGVyLklEID0gZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLnJlcGxhY2UodmIsIHdiKTsgcmV0dXJuIGZ1bmN0aW9uIChhKSB7IHZhciBjID0gdHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSAhPT0gViAmJiBhLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTsgcmV0dXJuIGMgJiYgYy52YWx1ZSA9PT0gYiB9IH0pLCB3LmZpbmQuVEFHID0gdi5nZXRFbGVtZW50c0J5VGFnTmFtZSA/IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB0eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gViA/IGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSkgOiB2b2lkIDAgfSA6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkID0gW10sIGUgPSAwLCBmID0gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKTsgaWYgKFwiKlwiID09PSBhKSB7IGZvciAoOyBjID0gZltlKytdOykxID09PSBjLm5vZGVUeXBlICYmIGQucHVzaChjKTsgcmV0dXJuIGQgfSByZXR1cm4gZiB9LCB3LmZpbmQuQ0xBU1MgPSB2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFYgJiYgSSA/IGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhKSA6IHZvaWQgMCB9LCBLID0gW10sIEogPSBbXSwgKHYucXNhID0gcmIudGVzdChjLnF1ZXJ5U2VsZWN0b3JBbGwpKSAmJiAoZShmdW5jdGlvbiAoYSkgeyBhLmlubmVySFRNTCA9IFwiPHNlbGVjdCBtc2FsbG93Y2xpcD0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiLCBhLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbXNhbGxvd2NsaXBePScnXVwiKS5sZW5ndGggJiYgSi5wdXNoKFwiWypeJF09XCIgKyBkYiArIFwiKig/OicnfFxcXCJcXFwiKVwiKSwgYS5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGggfHwgSi5wdXNoKFwiXFxcXFtcIiArIGRiICsgXCIqKD86dmFsdWV8XCIgKyBjYiArIFwiKVwiKSwgYS5xdWVyeVNlbGVjdG9yQWxsKFwiOmNoZWNrZWRcIikubGVuZ3RoIHx8IEoucHVzaChcIjpjaGVja2VkXCIpIH0pLCBlKGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYy5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7IGIuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcImhpZGRlblwiKSwgYS5hcHBlbmRDaGlsZChiKS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwiRFwiKSwgYS5xdWVyeVNlbGVjdG9yQWxsKFwiW25hbWU9ZF1cIikubGVuZ3RoICYmIEoucHVzaChcIm5hbWVcIiArIGRiICsgXCIqWypeJHwhfl0/PVwiKSwgYS5xdWVyeVNlbGVjdG9yQWxsKFwiOmVuYWJsZWRcIikubGVuZ3RoIHx8IEoucHVzaChcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIpLCBhLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqLDp4XCIpLCBKLnB1c2goXCIsLio6XCIpIH0pKSwgKHYubWF0Y2hlc1NlbGVjdG9yID0gcmIudGVzdChMID0gSC5tYXRjaGVzIHx8IEgud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8IEgubW96TWF0Y2hlc1NlbGVjdG9yIHx8IEgub01hdGNoZXNTZWxlY3RvciB8fCBILm1zTWF0Y2hlc1NlbGVjdG9yKSkgJiYgZShmdW5jdGlvbiAoYSkgeyB2LmRpc2Nvbm5lY3RlZE1hdGNoID0gTC5jYWxsKGEsIFwiZGl2XCIpLCBMLmNhbGwoYSwgXCJbcyE9JyddOnhcIiksIEsucHVzaChcIiE9XCIsIGhiKSB9KSwgSiA9IEoubGVuZ3RoICYmIG5ldyBSZWdFeHAoSi5qb2luKFwifFwiKSksIEsgPSBLLmxlbmd0aCAmJiBuZXcgUmVnRXhwKEsuam9pbihcInxcIikpLCBiID0gcmIudGVzdChILmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSwgTSA9IGIgfHwgcmIudGVzdChILmNvbnRhaW5zKSA/IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gOSA9PT0gYS5ub2RlVHlwZSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSwgZCA9IGIgJiYgYi5wYXJlbnROb2RlOyByZXR1cm4gYSA9PT0gZCB8fCAhKCFkIHx8IDEgIT09IGQubm9kZVR5cGUgfHwgIShjLmNvbnRhaW5zID8gYy5jb250YWlucyhkKSA6IGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgMTYgJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQpKSkgfSA6IGZ1bmN0aW9uIChhLCBiKSB7IGlmIChiKSBmb3IgKDsgYiA9IGIucGFyZW50Tm9kZTspaWYgKGIgPT09IGEpIHJldHVybiAhMDsgcmV0dXJuICExIH0sIFUgPSBiID8gZnVuY3Rpb24gKGEsIGIpIHsgaWYgKGEgPT09IGIpIHJldHVybiBFID0gITAsIDA7IHZhciBkID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjsgcmV0dXJuIGQgPyBkIDogKGQgPSAoYS5vd25lckRvY3VtZW50IHx8IGEpID09PSAoYi5vd25lckRvY3VtZW50IHx8IGIpID8gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSA6IDEsIDEgJiBkIHx8ICF2LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpID09PSBkID8gYSA9PT0gYyB8fCBhLm93bmVyRG9jdW1lbnQgPT09IE8gJiYgTShPLCBhKSA/IC0xIDogYiA9PT0gYyB8fCBiLm93bmVyRG9jdW1lbnQgPT09IE8gJiYgTShPLCBiKSA/IDEgOiBEID8gYmIuY2FsbChELCBhKSAtIGJiLmNhbGwoRCwgYikgOiAwIDogNCAmIGQgPyAtMSA6IDEpIH0gOiBmdW5jdGlvbiAoYSwgYikgeyBpZiAoYSA9PT0gYikgcmV0dXJuIEUgPSAhMCwgMDsgdmFyIGQsIGUgPSAwLCBmID0gYS5wYXJlbnROb2RlLCBoID0gYi5wYXJlbnROb2RlLCBpID0gW2FdLCBqID0gW2JdOyBpZiAoIWYgfHwgIWgpIHJldHVybiBhID09PSBjID8gLTEgOiBiID09PSBjID8gMSA6IGYgPyAtMSA6IGggPyAxIDogRCA/IGJiLmNhbGwoRCwgYSkgLSBiYi5jYWxsKEQsIGIpIDogMDsgaWYgKGYgPT09IGgpIHJldHVybiBnKGEsIGIpOyBmb3IgKGQgPSBhOyBkID0gZC5wYXJlbnROb2RlOylpLnVuc2hpZnQoZCk7IGZvciAoZCA9IGI7IGQgPSBkLnBhcmVudE5vZGU7KWoudW5zaGlmdChkKTsgZm9yICg7IGlbZV0gPT09IGpbZV07KWUrKzsgcmV0dXJuIGUgPyBnKGlbZV0sIGpbZV0pIDogaVtlXSA9PT0gTyA/IC0xIDogaltlXSA9PT0gTyA/IDEgOiAwIH0sIGMpIDogRyB9LCBiLm1hdGNoZXMgPSBmdW5jdGlvbiAoYSwgYykgeyByZXR1cm4gYihhLCBudWxsLCBudWxsLCBjKSB9LCBiLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uIChhLCBjKSB7IGlmICgoYS5vd25lckRvY3VtZW50IHx8IGEpICE9PSBHICYmIEYoYSksIGMgPSBjLnJlcGxhY2UobGIsIFwiPSckMSddXCIpLCAhKCF2Lm1hdGNoZXNTZWxlY3RvciB8fCAhSSB8fCBLICYmIEsudGVzdChjKSB8fCBKICYmIEoudGVzdChjKSkpIHRyeSB7IHZhciBkID0gTC5jYWxsKGEsIGMpOyBpZiAoZCB8fCB2LmRpc2Nvbm5lY3RlZE1hdGNoIHx8IGEuZG9jdW1lbnQgJiYgMTEgIT09IGEuZG9jdW1lbnQubm9kZVR5cGUpIHJldHVybiBkIH0gY2F0Y2ggKGUpIHsgfSByZXR1cm4gYihjLCBHLCBudWxsLCBbYV0pLmxlbmd0aCA+IDAgfSwgYi5jb250YWlucyA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiAoYS5vd25lckRvY3VtZW50IHx8IGEpICE9PSBHICYmIEYoYSksIE0oYSwgYikgfSwgYi5hdHRyID0gZnVuY3Rpb24gKGEsIGIpIHsgKGEub3duZXJEb2N1bWVudCB8fCBhKSAhPT0gRyAmJiBGKGEpOyB2YXIgYyA9IHcuYXR0ckhhbmRsZVtiLnRvTG93ZXJDYXNlKCldLCBkID0gYyAmJiBYLmNhbGwody5hdHRySGFuZGxlLCBiLnRvTG93ZXJDYXNlKCkpID8gYyhhLCBiLCAhSSkgOiB2b2lkIDA7IHJldHVybiB2b2lkIDAgIT09IGQgPyBkIDogdi5hdHRyaWJ1dGVzIHx8ICFJID8gYS5nZXRBdHRyaWJ1dGUoYikgOiAoZCA9IGEuZ2V0QXR0cmlidXRlTm9kZShiKSkgJiYgZC5zcGVjaWZpZWQgPyBkLnZhbHVlIDogbnVsbCB9LCBiLmVycm9yID0gZnVuY3Rpb24gKGEpIHsgdGhyb3cgbmV3IEVycm9yKFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBhKSB9LCBiLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYyA9IFtdLCBkID0gMCwgZSA9IDA7IGlmIChFID0gIXYuZGV0ZWN0RHVwbGljYXRlcywgRCA9ICF2LnNvcnRTdGFibGUgJiYgYS5zbGljZSgwKSwgYS5zb3J0KFUpLCBFKSB7IGZvciAoOyBiID0gYVtlKytdOyliID09PSBhW2VdICYmIChkID0gYy5wdXNoKGUpKTsgZm9yICg7IGQtLTspYS5zcGxpY2UoY1tkXSwgMSkgfSByZXR1cm4gRCA9IG51bGwsIGEgfSwgeCA9IGIuZ2V0VGV4dCA9IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBjID0gXCJcIiwgZCA9IDAsIGUgPSBhLm5vZGVUeXBlOyBpZiAoZSkgeyBpZiAoMSA9PT0gZSB8fCA5ID09PSBlIHx8IDExID09PSBlKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBhLnRleHRDb250ZW50KSByZXR1cm4gYS50ZXh0Q29udGVudDsgZm9yIChhID0gYS5maXJzdENoaWxkOyBhOyBhID0gYS5uZXh0U2libGluZyljICs9IHgoYSkgfSBlbHNlIGlmICgzID09PSBlIHx8IDQgPT09IGUpIHJldHVybiBhLm5vZGVWYWx1ZSB9IGVsc2UgZm9yICg7IGIgPSBhW2QrK107KWMgKz0geChiKTsgcmV0dXJuIGMgfSwgdyA9IGIuc2VsZWN0b3JzID0geyBjYWNoZUxlbmd0aDogNTAsIGNyZWF0ZVBzZXVkbzogZCwgbWF0Y2g6IG9iLCBhdHRySGFuZGxlOiB7fSwgZmluZDoge30sIHJlbGF0aXZlOiB7IFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiAhMCB9LCBcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sIFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6ICEwIH0sIFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9IH0sIHByZUZpbHRlcjogeyBBVFRSOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYVsxXSA9IGFbMV0ucmVwbGFjZSh2Yiwgd2IpLCBhWzNdID0gKGFbM10gfHwgYVs0XSB8fCBhWzVdIHx8IFwiXCIpLnJlcGxhY2UodmIsIHdiKSwgXCJ+PVwiID09PSBhWzJdICYmIChhWzNdID0gXCIgXCIgKyBhWzNdICsgXCIgXCIpLCBhLnNsaWNlKDAsIDQpIH0sIENISUxEOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYVsxXSA9IGFbMV0udG9Mb3dlckNhc2UoKSwgXCJudGhcIiA9PT0gYVsxXS5zbGljZSgwLCAzKSA/IChhWzNdIHx8IGIuZXJyb3IoYVswXSksIGFbNF0gPSArKGFbNF0gPyBhWzVdICsgKGFbNl0gfHwgMSkgOiAyICogKFwiZXZlblwiID09PSBhWzNdIHx8IFwib2RkXCIgPT09IGFbM10pKSwgYVs1XSA9ICsoYVs3XSArIGFbOF0gfHwgXCJvZGRcIiA9PT0gYVszXSkpIDogYVszXSAmJiBiLmVycm9yKGFbMF0pLCBhIH0sIFBTRVVETzogZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGMgPSAhYVs2XSAmJiBhWzJdOyByZXR1cm4gb2IuQ0hJTEQudGVzdChhWzBdKSA/IG51bGwgOiAoYVszXSA/IGFbMl0gPSBhWzRdIHx8IGFbNV0gfHwgXCJcIiA6IGMgJiYgbWIudGVzdChjKSAmJiAoYiA9IHooYywgITApKSAmJiAoYiA9IGMuaW5kZXhPZihcIilcIiwgYy5sZW5ndGggLSBiKSAtIGMubGVuZ3RoKSAmJiAoYVswXSA9IGFbMF0uc2xpY2UoMCwgYiksIGFbMl0gPSBjLnNsaWNlKDAsIGIpKSwgYS5zbGljZSgwLCAzKSkgfSB9LCBmaWx0ZXI6IHsgVEFHOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEucmVwbGFjZSh2Yiwgd2IpLnRvTG93ZXJDYXNlKCk7IHJldHVybiBcIipcIiA9PT0gYSA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuICEwIH0gOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5ub2RlTmFtZSAmJiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IGIgfSB9LCBDTEFTUzogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBSW2EgKyBcIiBcIl07IHJldHVybiBiIHx8IChiID0gbmV3IFJlZ0V4cChcIihefFwiICsgZGIgKyBcIilcIiArIGEgKyBcIihcIiArIGRiICsgXCJ8JClcIikpICYmIFIoYSwgZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGIudGVzdChcInN0cmluZ1wiID09IHR5cGVvZiBhLmNsYXNzTmFtZSAmJiBhLmNsYXNzTmFtZSB8fCB0eXBlb2YgYS5nZXRBdHRyaWJ1dGUgIT09IFYgJiYgYS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiKSB9KSB9LCBBVFRSOiBmdW5jdGlvbiAoYSwgYywgZCkgeyByZXR1cm4gZnVuY3Rpb24gKGUpIHsgdmFyIGYgPSBiLmF0dHIoZSwgYSk7IHJldHVybiBudWxsID09IGYgPyBcIiE9XCIgPT09IGMgOiBjID8gKGYgKz0gXCJcIiwgXCI9XCIgPT09IGMgPyBmID09PSBkIDogXCIhPVwiID09PSBjID8gZiAhPT0gZCA6IFwiXj1cIiA9PT0gYyA/IGQgJiYgMCA9PT0gZi5pbmRleE9mKGQpIDogXCIqPVwiID09PSBjID8gZCAmJiBmLmluZGV4T2YoZCkgPiAtMSA6IFwiJD1cIiA9PT0gYyA/IGQgJiYgZi5zbGljZSgtZC5sZW5ndGgpID09PSBkIDogXCJ+PVwiID09PSBjID8gKFwiIFwiICsgZiArIFwiIFwiKS5pbmRleE9mKGQpID4gLTEgOiBcInw9XCIgPT09IGMgPyBmID09PSBkIHx8IGYuc2xpY2UoMCwgZC5sZW5ndGggKyAxKSA9PT0gZCArIFwiLVwiIDogITEpIDogITAgfSB9LCBDSElMRDogZnVuY3Rpb24gKGEsIGIsIGMsIGQsIGUpIHsgdmFyIGYgPSBcIm50aFwiICE9PSBhLnNsaWNlKDAsIDMpLCBnID0gXCJsYXN0XCIgIT09IGEuc2xpY2UoLTQpLCBoID0gXCJvZi10eXBlXCIgPT09IGI7IHJldHVybiAxID09PSBkICYmIDAgPT09IGUgPyBmdW5jdGlvbiAoYSkgeyByZXR1cm4gISFhLnBhcmVudE5vZGUgfSA6IGZ1bmN0aW9uIChiLCBjLCBpKSB7IHZhciBqLCBrLCBsLCBtLCBuLCBvLCBwID0gZiAhPT0gZyA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsIHEgPSBiLnBhcmVudE5vZGUsIHIgPSBoICYmIGIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgcyA9ICFpICYmICFoOyBpZiAocSkgeyBpZiAoZikgeyBmb3IgKDsgcDspIHsgZm9yIChsID0gYjsgbCA9IGxbcF07KWlmIChoID8gbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSByIDogMSA9PT0gbC5ub2RlVHlwZSkgcmV0dXJuICExOyBvID0gcCA9IFwib25seVwiID09PSBhICYmICFvICYmIFwibmV4dFNpYmxpbmdcIiB9IHJldHVybiAhMCB9IGlmIChvID0gW2cgPyBxLmZpcnN0Q2hpbGQgOiBxLmxhc3RDaGlsZF0sIGcgJiYgcykgeyBmb3IgKGsgPSBxW05dIHx8IChxW05dID0ge30pLCBqID0ga1thXSB8fCBbXSwgbiA9IGpbMF0gPT09IFAgJiYgalsxXSwgbSA9IGpbMF0gPT09IFAgJiYgalsyXSwgbCA9IG4gJiYgcS5jaGlsZE5vZGVzW25dOyBsID0gKytuICYmIGwgJiYgbFtwXSB8fCAobSA9IG4gPSAwKSB8fCBvLnBvcCgpOylpZiAoMSA9PT0gbC5ub2RlVHlwZSAmJiArK20gJiYgbCA9PT0gYikgeyBrW2FdID0gW1AsIG4sIG1dOyBicmVhayB9IH0gZWxzZSBpZiAocyAmJiAoaiA9IChiW05dIHx8IChiW05dID0ge30pKVthXSkgJiYgalswXSA9PT0gUCkgbSA9IGpbMV07IGVsc2UgZm9yICg7IChsID0gKytuICYmIGwgJiYgbFtwXSB8fCAobSA9IG4gPSAwKSB8fCBvLnBvcCgpKSAmJiAoKGggPyBsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IHIgOiAxICE9PSBsLm5vZGVUeXBlKSB8fCAhKyttIHx8IChzICYmICgobFtOXSB8fCAobFtOXSA9IHt9KSlbYV0gPSBbUCwgbV0pLCBsICE9PSBiKSk7KTsgcmV0dXJuIG0gLT0gZSwgbSA9PT0gZCB8fCBtICUgZCA9PT0gMCAmJiBtIC8gZCA+PSAwIH0gfSB9LCBQU0VVRE86IGZ1bmN0aW9uIChhLCBjKSB7IHZhciBlLCBmID0gdy5wc2V1ZG9zW2FdIHx8IHcuc2V0RmlsdGVyc1thLnRvTG93ZXJDYXNlKCldIHx8IGIuZXJyb3IoXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgYSk7IHJldHVybiBmW05dID8gZihjKSA6IGYubGVuZ3RoID4gMSA/IChlID0gW2EsIGEsIFwiXCIsIGNdLCB3LnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKSA/IGQoZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgZCwgZSA9IGYoYSwgYyksIGcgPSBlLmxlbmd0aDsgZy0tOylkID0gYmIuY2FsbChhLCBlW2ddKSwgYVtkXSA9ICEoYltkXSA9IGVbZ10pIH0pIDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGYoYSwgMCwgZSkgfSkgOiBmIH0gfSwgcHNldWRvczogeyBub3Q6IGQoZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBbXSwgYyA9IFtdLCBlID0gQShhLnJlcGxhY2UoaWIsIFwiJDFcIikpOyByZXR1cm4gZVtOXSA/IGQoZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgZm9yICh2YXIgZiwgZyA9IGUoYSwgbnVsbCwgZCwgW10pLCBoID0gYS5sZW5ndGg7IGgtLTspKGYgPSBnW2hdKSAmJiAoYVtoXSA9ICEoYltoXSA9IGYpKSB9KSA6IGZ1bmN0aW9uIChhLCBkLCBmKSB7IHJldHVybiBiWzBdID0gYSwgZShiLCBudWxsLCBmLCBjKSwgIWMucG9wKCkgfSB9KSwgaGFzOiBkKGZ1bmN0aW9uIChhKSB7IHJldHVybiBmdW5jdGlvbiAoYykgeyByZXR1cm4gYihhLCBjKS5sZW5ndGggPiAwIH0gfSksIGNvbnRhaW5zOiBkKGZ1bmN0aW9uIChhKSB7IHJldHVybiBmdW5jdGlvbiAoYikgeyByZXR1cm4gKGIudGV4dENvbnRlbnQgfHwgYi5pbm5lclRleHQgfHwgeChiKSkuaW5kZXhPZihhKSA+IC0xIH0gfSksIGxhbmc6IGQoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG5iLnRlc3QoYSB8fCBcIlwiKSB8fCBiLmVycm9yKFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBhKSwgYSA9IGEucmVwbGFjZSh2Yiwgd2IpLnRvTG93ZXJDYXNlKCksIGZ1bmN0aW9uIChiKSB7IHZhciBjOyBkbyBpZiAoYyA9IEkgPyBiLmxhbmcgOiBiLmdldEF0dHJpYnV0ZShcInhtbDpsYW5nXCIpIHx8IGIuZ2V0QXR0cmlidXRlKFwibGFuZ1wiKSkgcmV0dXJuIGMgPSBjLnRvTG93ZXJDYXNlKCksIGMgPT09IGEgfHwgMCA9PT0gYy5pbmRleE9mKGEgKyBcIi1cIik7IHdoaWxlICgoYiA9IGIucGFyZW50Tm9kZSkgJiYgMSA9PT0gYi5ub2RlVHlwZSk7IHJldHVybiAhMSB9IH0pLCB0YXJnZXQ6IGZ1bmN0aW9uIChiKSB7IHZhciBjID0gYS5sb2NhdGlvbiAmJiBhLmxvY2F0aW9uLmhhc2g7IHJldHVybiBjICYmIGMuc2xpY2UoMSkgPT09IGIuaWQgfSwgcm9vdDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgPT09IEggfSwgZm9jdXM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhID09PSBHLmFjdGl2ZUVsZW1lbnQgJiYgKCFHLmhhc0ZvY3VzIHx8IEcuaGFzRm9jdXMoKSkgJiYgISEoYS50eXBlIHx8IGEuaHJlZiB8fCB+YS50YWJJbmRleCkgfSwgZW5hYmxlZDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuZGlzYWJsZWQgPT09ICExIH0sIGRpc2FibGVkOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5kaXNhYmxlZCA9PT0gITAgfSwgY2hlY2tlZDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7IHJldHVybiBcImlucHV0XCIgPT09IGIgJiYgISFhLmNoZWNrZWQgfHwgXCJvcHRpb25cIiA9PT0gYiAmJiAhIWEuc2VsZWN0ZWQgfSwgc2VsZWN0ZWQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLnBhcmVudE5vZGUgJiYgYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsIGEuc2VsZWN0ZWQgPT09ICEwIH0sIGVtcHR5OiBmdW5jdGlvbiAoYSkgeyBmb3IgKGEgPSBhLmZpcnN0Q2hpbGQ7IGE7IGEgPSBhLm5leHRTaWJsaW5nKWlmIChhLm5vZGVUeXBlIDwgNikgcmV0dXJuICExOyByZXR1cm4gITAgfSwgcGFyZW50OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gIXcucHNldWRvcy5lbXB0eShhKSB9LCBoZWFkZXI6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBxYi50ZXN0KGEubm9kZU5hbWUpIH0sIGlucHV0OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gcGIudGVzdChhLm5vZGVOYW1lKSB9LCBidXR0b246IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gXCJpbnB1dFwiID09PSBiICYmIFwiYnV0dG9uXCIgPT09IGEudHlwZSB8fCBcImJ1dHRvblwiID09PSBiIH0sIHRleHQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiOyByZXR1cm4gXCJpbnB1dFwiID09PSBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgJiYgXCJ0ZXh0XCIgPT09IGEudHlwZSAmJiAobnVsbCA9PSAoYiA9IGEuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkgfHwgXCJ0ZXh0XCIgPT09IGIudG9Mb3dlckNhc2UoKSkgfSwgZmlyc3Q6IGooZnVuY3Rpb24gKCkgeyByZXR1cm4gWzBdIH0pLCBsYXN0OiBqKGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBbYiAtIDFdIH0pLCBlcTogaihmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gWzAgPiBjID8gYyArIGIgOiBjXSB9KSwgZXZlbjogaihmdW5jdGlvbiAoYSwgYikgeyBmb3IgKHZhciBjID0gMDsgYiA+IGM7IGMgKz0gMilhLnB1c2goYyk7IHJldHVybiBhIH0pLCBvZGQ6IGooZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgYyA9IDE7IGIgPiBjOyBjICs9IDIpYS5wdXNoKGMpOyByZXR1cm4gYSB9KSwgbHQ6IGooZnVuY3Rpb24gKGEsIGIsIGMpIHsgZm9yICh2YXIgZCA9IDAgPiBjID8gYyArIGIgOiBjOyAtLWQgPj0gMDspYS5wdXNoKGQpOyByZXR1cm4gYSB9KSwgZ3Q6IGooZnVuY3Rpb24gKGEsIGIsIGMpIHsgZm9yICh2YXIgZCA9IDAgPiBjID8gYyArIGIgOiBjOyArK2QgPCBiOylhLnB1c2goZCk7IHJldHVybiBhIH0pIH0gfSwgdy5wc2V1ZG9zLm50aCA9IHcucHNldWRvcy5lcTsgZm9yICh1IGluIHsgcmFkaW86ICEwLCBjaGVja2JveDogITAsIGZpbGU6ICEwLCBwYXNzd29yZDogITAsIGltYWdlOiAhMCB9KSB3LnBzZXVkb3NbdV0gPSBoKHUpOyBmb3IgKHUgaW4geyBzdWJtaXQ6ICEwLCByZXNldDogITAgfSkgdy5wc2V1ZG9zW3VdID0gaSh1KTsgcmV0dXJuIGwucHJvdG90eXBlID0gdy5maWx0ZXJzID0gdy5wc2V1ZG9zLCB3LnNldEZpbHRlcnMgPSBuZXcgbCwgeiA9IGIudG9rZW5pemUgPSBmdW5jdGlvbiAoYSwgYykgeyB2YXIgZCwgZSwgZiwgZywgaCwgaSwgaiwgayA9IFNbYSArIFwiIFwiXTsgaWYgKGspIHJldHVybiBjID8gMCA6IGsuc2xpY2UoMCk7IGZvciAoaCA9IGEsIGkgPSBbXSwgaiA9IHcucHJlRmlsdGVyOyBoOykgeyAoIWQgfHwgKGUgPSBqYi5leGVjKGgpKSkgJiYgKGUgJiYgKGggPSBoLnNsaWNlKGVbMF0ubGVuZ3RoKSB8fCBoKSwgaS5wdXNoKGYgPSBbXSkpLCBkID0gITEsIChlID0ga2IuZXhlYyhoKSkgJiYgKGQgPSBlLnNoaWZ0KCksIGYucHVzaCh7IHZhbHVlOiBkLCB0eXBlOiBlWzBdLnJlcGxhY2UoaWIsIFwiIFwiKSB9KSwgaCA9IGguc2xpY2UoZC5sZW5ndGgpKTsgZm9yIChnIGluIHcuZmlsdGVyKSAhKGUgPSBvYltnXS5leGVjKGgpKSB8fCBqW2ddICYmICEoZSA9IGpbZ10oZSkpIHx8IChkID0gZS5zaGlmdCgpLCBmLnB1c2goeyB2YWx1ZTogZCwgdHlwZTogZywgbWF0Y2hlczogZSB9KSwgaCA9IGguc2xpY2UoZC5sZW5ndGgpKTsgaWYgKCFkKSBicmVhayB9IHJldHVybiBjID8gaC5sZW5ndGggOiBoID8gYi5lcnJvcihhKSA6IFMoYSwgaSkuc2xpY2UoMCkgfSwgQSA9IGIuY29tcGlsZSA9IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkID0gW10sIGUgPSBbXSwgZiA9IFRbYSArIFwiIFwiXTsgaWYgKCFmKSB7IGZvciAoYiB8fCAoYiA9IHooYSkpLCBjID0gYi5sZW5ndGg7IGMtLTspZiA9IHMoYltjXSksIGZbTl0gPyBkLnB1c2goZikgOiBlLnB1c2goZik7IGYgPSBUKGEsIHQoZSwgZCkpLCBmLnNlbGVjdG9yID0gYSB9IHJldHVybiBmIH0sIEIgPSBiLnNlbGVjdCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHZhciBlLCBmLCBnLCBoLCBpLCBqID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBhICYmIGEsIGwgPSAhZCAmJiB6KGEgPSBqLnNlbGVjdG9yIHx8IGEpOyBpZiAoYyA9IGMgfHwgW10sIDEgPT09IGwubGVuZ3RoKSB7IGlmIChmID0gbFswXSA9IGxbMF0uc2xpY2UoMCksIGYubGVuZ3RoID4gMiAmJiBcIklEXCIgPT09IChnID0gZlswXSkudHlwZSAmJiB2LmdldEJ5SWQgJiYgOSA9PT0gYi5ub2RlVHlwZSAmJiBJICYmIHcucmVsYXRpdmVbZlsxXS50eXBlXSkgeyBpZiAoYiA9ICh3LmZpbmQuSUQoZy5tYXRjaGVzWzBdLnJlcGxhY2UodmIsIHdiKSwgYikgfHwgW10pWzBdLCAhYikgcmV0dXJuIGM7IGogJiYgKGIgPSBiLnBhcmVudE5vZGUpLCBhID0gYS5zbGljZShmLnNoaWZ0KCkudmFsdWUubGVuZ3RoKSB9IGZvciAoZSA9IG9iLm5lZWRzQ29udGV4dC50ZXN0KGEpID8gMCA6IGYubGVuZ3RoOyBlLS0gJiYgKGcgPSBmW2VdLCAhdy5yZWxhdGl2ZVtoID0gZy50eXBlXSk7KWlmICgoaSA9IHcuZmluZFtoXSkgJiYgKGQgPSBpKGcubWF0Y2hlc1swXS5yZXBsYWNlKHZiLCB3YiksIHRiLnRlc3QoZlswXS50eXBlKSAmJiBrKGIucGFyZW50Tm9kZSkgfHwgYikpKSB7IGlmIChmLnNwbGljZShlLCAxKSwgYSA9IGQubGVuZ3RoICYmIG0oZiksICFhKSByZXR1cm4gXy5hcHBseShjLCBkKSwgYzsgYnJlYWsgfSB9IHJldHVybiAoaiB8fCBBKGEsIGwpKShkLCBiLCAhSSwgYywgdGIudGVzdChhKSAmJiBrKGIucGFyZW50Tm9kZSkgfHwgYiksIGMgfSwgdi5zb3J0U3RhYmxlID0gTi5zcGxpdChcIlwiKS5zb3J0KFUpLmpvaW4oXCJcIikgPT09IE4sIHYuZGV0ZWN0RHVwbGljYXRlcyA9ICEhRSwgRigpLCB2LnNvcnREZXRhY2hlZCA9IGUoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIDEgJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKEcuY3JlYXRlRWxlbWVudChcImRpdlwiKSkgfSksIGUoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCIsIFwiI1wiID09PSBhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSB9KSB8fCBmKFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLCBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gYyA/IHZvaWQgMCA6IGEuZ2V0QXR0cmlidXRlKGIsIFwidHlwZVwiID09PSBiLnRvTG93ZXJDYXNlKCkgPyAxIDogMikgfSksIHYuYXR0cmlidXRlcyAmJiBlKGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmlubmVySFRNTCA9IFwiPGlucHV0Lz5cIiwgYS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsIFwiXCIpLCBcIlwiID09PSBhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwidmFsdWVcIikgfSkgfHwgZihcInZhbHVlXCIsIGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBjIHx8IFwiaW5wdXRcIiAhPT0gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID8gdm9pZCAwIDogYS5kZWZhdWx0VmFsdWUgfSksIGUoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG51bGwgPT0gYS5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSB9KSB8fCBmKGNiLCBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZDsgcmV0dXJuIGMgPyB2b2lkIDAgOiBhW2JdID09PSAhMCA/IGIudG9Mb3dlckNhc2UoKSA6IChkID0gYS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSAmJiBkLnNwZWNpZmllZCA/IGQudmFsdWUgOiBudWxsIH0pLCBiIH0oYSk7IF8uZmluZCA9IGViLCBfLmV4cHIgPSBlYi5zZWxlY3RvcnMsIF8uZXhwcltcIjpcIl0gPSBfLmV4cHIucHNldWRvcywgXy51bmlxdWUgPSBlYi51bmlxdWVTb3J0LCBfLnRleHQgPSBlYi5nZXRUZXh0LCBfLmlzWE1MRG9jID0gZWIuaXNYTUwsIF8uY29udGFpbnMgPSBlYi5jb250YWluczsgdmFyIGZiID0gXy5leHByLm1hdGNoLm5lZWRzQ29udGV4dCwgZ2IgPSAvXjwoXFx3KylcXHMqXFwvPz4oPzo8XFwvXFwxPnwpJC8sIGhiID0gL14uW146I1xcW1xcLixdKiQvOyBfLmZpbHRlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkID0gYlswXTsgcmV0dXJuIGMgJiYgKGEgPSBcIjpub3QoXCIgKyBhICsgXCIpXCIpLCAxID09PSBiLmxlbmd0aCAmJiAxID09PSBkLm5vZGVUeXBlID8gXy5maW5kLm1hdGNoZXNTZWxlY3RvcihkLCBhKSA/IFtkXSA6IFtdIDogXy5maW5kLm1hdGNoZXMoYSwgXy5ncmVwKGIsIGZ1bmN0aW9uIChhKSB7IHJldHVybiAxID09PSBhLm5vZGVUeXBlIH0pKSB9LCBfLmZuLmV4dGVuZCh7IGZpbmQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBjID0gdGhpcy5sZW5ndGgsIGQgPSBbXSwgZSA9IHRoaXM7IGlmIChcInN0cmluZ1wiICE9IHR5cGVvZiBhKSByZXR1cm4gdGhpcy5wdXNoU3RhY2soXyhhKS5maWx0ZXIoZnVuY3Rpb24gKCkgeyBmb3IgKGIgPSAwOyBjID4gYjsgYisrKWlmIChfLmNvbnRhaW5zKGVbYl0sIHRoaXMpKSByZXR1cm4gITAgfSkpOyBmb3IgKGIgPSAwOyBjID4gYjsgYisrKV8uZmluZChhLCBlW2JdLCBkKTsgcmV0dXJuIGQgPSB0aGlzLnB1c2hTdGFjayhjID4gMSA/IF8udW5pcXVlKGQpIDogZCksIGQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yID8gdGhpcy5zZWxlY3RvciArIFwiIFwiICsgYSA6IGEsIGQgfSwgZmlsdGVyOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5wdXNoU3RhY2soZCh0aGlzLCBhIHx8IFtdLCAhMSkpIH0sIG5vdDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKGQodGhpcywgYSB8fCBbXSwgITApKSB9LCBpczogZnVuY3Rpb24gKGEpIHsgcmV0dXJuICEhZCh0aGlzLCBcInN0cmluZ1wiID09IHR5cGVvZiBhICYmIGZiLnRlc3QoYSkgPyBfKGEpIDogYSB8fCBbXSwgITEpLmxlbmd0aCB9IH0pOyB2YXIgaWIsIGpiID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKikpJC8sIGtiID0gXy5mbi5pbml0ID0gZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQ7IGlmICghYSkgcmV0dXJuIHRoaXM7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBhKSB7IGlmIChjID0gXCI8XCIgPT09IGFbMF0gJiYgXCI+XCIgPT09IGFbYS5sZW5ndGggLSAxXSAmJiBhLmxlbmd0aCA+PSAzID8gW251bGwsIGEsIG51bGxdIDogamIuZXhlYyhhKSwgIWMgfHwgIWNbMV0gJiYgYikgcmV0dXJuICFiIHx8IGIuanF1ZXJ5ID8gKGIgfHwgaWIpLmZpbmQoYSkgOiB0aGlzLmNvbnN0cnVjdG9yKGIpLmZpbmQoYSk7IGlmIChjWzFdKSB7IGlmIChiID0gYiBpbnN0YW5jZW9mIF8gPyBiWzBdIDogYiwgXy5tZXJnZSh0aGlzLCBfLnBhcnNlSFRNTChjWzFdLCBiICYmIGIubm9kZVR5cGUgPyBiLm93bmVyRG9jdW1lbnQgfHwgYiA6IFosICEwKSksIGdiLnRlc3QoY1sxXSkgJiYgXy5pc1BsYWluT2JqZWN0KGIpKSBmb3IgKGMgaW4gYikgXy5pc0Z1bmN0aW9uKHRoaXNbY10pID8gdGhpc1tjXShiW2NdKSA6IHRoaXMuYXR0cihjLCBiW2NdKTsgcmV0dXJuIHRoaXMgfSByZXR1cm4gZCA9IFouZ2V0RWxlbWVudEJ5SWQoY1syXSksIGQgJiYgZC5wYXJlbnROb2RlICYmICh0aGlzLmxlbmd0aCA9IDEsIHRoaXNbMF0gPSBkKSwgdGhpcy5jb250ZXh0ID0gWiwgdGhpcy5zZWxlY3RvciA9IGEsIHRoaXMgfSByZXR1cm4gYS5ub2RlVHlwZSA/ICh0aGlzLmNvbnRleHQgPSB0aGlzWzBdID0gYSwgdGhpcy5sZW5ndGggPSAxLCB0aGlzKSA6IF8uaXNGdW5jdGlvbihhKSA/IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIGliLnJlYWR5ID8gaWIucmVhZHkoYSkgOiBhKF8pIDogKHZvaWQgMCAhPT0gYS5zZWxlY3RvciAmJiAodGhpcy5zZWxlY3RvciA9IGEuc2VsZWN0b3IsIHRoaXMuY29udGV4dCA9IGEuY29udGV4dCksIF8ubWFrZUFycmF5KGEsIHRoaXMpKSB9OyBrYi5wcm90b3R5cGUgPSBfLmZuLCBpYiA9IF8oWik7IHZhciBsYiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLCBtYiA9IHsgY2hpbGRyZW46ICEwLCBjb250ZW50czogITAsIG5leHQ6ICEwLCBwcmV2OiAhMCB9OyBfLmV4dGVuZCh7IGRpcjogZnVuY3Rpb24gKGEsIGIsIGMpIHsgZm9yICh2YXIgZCA9IFtdLCBlID0gdm9pZCAwICE9PSBjOyAoYSA9IGFbYl0pICYmIDkgIT09IGEubm9kZVR5cGU7KWlmICgxID09PSBhLm5vZGVUeXBlKSB7IGlmIChlICYmIF8oYSkuaXMoYykpIGJyZWFrOyBkLnB1c2goYSkgfSByZXR1cm4gZCB9LCBzaWJsaW5nOiBmdW5jdGlvbiAoYSwgYikgeyBmb3IgKHZhciBjID0gW107IGE7IGEgPSBhLm5leHRTaWJsaW5nKTEgPT09IGEubm9kZVR5cGUgJiYgYSAhPT0gYiAmJiBjLnB1c2goYSk7IHJldHVybiBjIH0gfSksIF8uZm4uZXh0ZW5kKHsgaGFzOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IF8oYSwgdGhpcyksIGMgPSBiLmxlbmd0aDsgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uICgpIHsgZm9yICh2YXIgYSA9IDA7IGMgPiBhOyBhKyspaWYgKF8uY29udGFpbnModGhpcywgYlthXSkpIHJldHVybiAhMCB9KSB9LCBjbG9zZXN0OiBmdW5jdGlvbiAoYSwgYikgeyBmb3IgKHZhciBjLCBkID0gMCwgZSA9IHRoaXMubGVuZ3RoLCBmID0gW10sIGcgPSBmYi50ZXN0KGEpIHx8IFwic3RyaW5nXCIgIT0gdHlwZW9mIGEgPyBfKGEsIGIgfHwgdGhpcy5jb250ZXh0KSA6IDA7IGUgPiBkOyBkKyspZm9yIChjID0gdGhpc1tkXTsgYyAmJiBjICE9PSBiOyBjID0gYy5wYXJlbnROb2RlKWlmIChjLm5vZGVUeXBlIDwgMTEgJiYgKGcgPyBnLmluZGV4KGMpID4gLTEgOiAxID09PSBjLm5vZGVUeXBlICYmIF8uZmluZC5tYXRjaGVzU2VsZWN0b3IoYywgYSkpKSB7IGYucHVzaChjKTsgYnJlYWsgfSByZXR1cm4gdGhpcy5wdXNoU3RhY2soZi5sZW5ndGggPiAxID8gXy51bmlxdWUoZikgOiBmKSB9LCBpbmRleDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgPyBcInN0cmluZ1wiID09IHR5cGVvZiBhID8gVS5jYWxsKF8oYSksIHRoaXNbMF0pIDogVS5jYWxsKHRoaXMsIGEuanF1ZXJ5ID8gYVswXSA6IGEpIDogdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xIH0sIGFkZDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKF8udW5pcXVlKF8ubWVyZ2UodGhpcy5nZXQoKSwgXyhhLCBiKSkpKSB9LCBhZGRCYWNrOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5hZGQobnVsbCA9PSBhID8gdGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlcihhKSkgfSB9KSwgXy5lYWNoKHsgcGFyZW50OiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEucGFyZW50Tm9kZTsgcmV0dXJuIGIgJiYgMTEgIT09IGIubm9kZVR5cGUgPyBiIDogbnVsbCB9LCBwYXJlbnRzOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gXy5kaXIoYSwgXCJwYXJlbnROb2RlXCIpIH0sIHBhcmVudHNVbnRpbDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIF8uZGlyKGEsIFwicGFyZW50Tm9kZVwiLCBjKSB9LCBuZXh0OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gZShhLCBcIm5leHRTaWJsaW5nXCIpIH0sIHByZXY6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBlKGEsIFwicHJldmlvdXNTaWJsaW5nXCIpIH0sIG5leHRBbGw6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfLmRpcihhLCBcIm5leHRTaWJsaW5nXCIpIH0sIHByZXZBbGw6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfLmRpcihhLCBcInByZXZpb3VzU2libGluZ1wiKSB9LCBuZXh0VW50aWw6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBfLmRpcihhLCBcIm5leHRTaWJsaW5nXCIsIGMpIH0sIHByZXZVbnRpbDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIF8uZGlyKGEsIFwicHJldmlvdXNTaWJsaW5nXCIsIGMpIH0sIHNpYmxpbmdzOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gXy5zaWJsaW5nKChhLnBhcmVudE5vZGUgfHwge30pLmZpcnN0Q2hpbGQsIGEpIH0sIGNoaWxkcmVuOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gXy5zaWJsaW5nKGEuZmlyc3RDaGlsZCkgfSwgY29udGVudHM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmNvbnRlbnREb2N1bWVudCB8fCBfLm1lcmdlKFtdLCBhLmNoaWxkTm9kZXMpIH0gfSwgZnVuY3Rpb24gKGEsIGIpIHsgXy5mblthXSA9IGZ1bmN0aW9uIChjLCBkKSB7IHZhciBlID0gXy5tYXAodGhpcywgYiwgYyk7IHJldHVybiBcIlVudGlsXCIgIT09IGEuc2xpY2UoLTUpICYmIChkID0gYyksIGQgJiYgXCJzdHJpbmdcIiA9PSB0eXBlb2YgZCAmJiAoZSA9IF8uZmlsdGVyKGQsIGUpKSwgdGhpcy5sZW5ndGggPiAxICYmIChtYlthXSB8fCBfLnVuaXF1ZShlKSwgbGIudGVzdChhKSAmJiBlLnJldmVyc2UoKSksIHRoaXMucHVzaFN0YWNrKGUpIH0gfSk7IHZhciBuYiA9IC9cXFMrL2csIG9iID0ge307IF8uQ2FsbGJhY2tzID0gZnVuY3Rpb24gKGEpIHsgYSA9IFwic3RyaW5nXCIgPT0gdHlwZW9mIGEgPyBvYlthXSB8fCBmKGEpIDogXy5leHRlbmQoe30sIGEpOyB2YXIgYiwgYywgZCwgZSwgZywgaCwgaSA9IFtdLCBqID0gIWEub25jZSAmJiBbXSwgayA9IGZ1bmN0aW9uIChmKSB7IGZvciAoYiA9IGEubWVtb3J5ICYmIGYsIGMgPSAhMCwgaCA9IGUgfHwgMCwgZSA9IDAsIGcgPSBpLmxlbmd0aCwgZCA9ICEwOyBpICYmIGcgPiBoOyBoKyspaWYgKGlbaF0uYXBwbHkoZlswXSwgZlsxXSkgPT09ICExICYmIGEuc3RvcE9uRmFsc2UpIHsgYiA9ICExOyBicmVhayB9IGQgPSAhMSwgaSAmJiAoaiA/IGoubGVuZ3RoICYmIGsoai5zaGlmdCgpKSA6IGIgPyBpID0gW10gOiBsLmRpc2FibGUoKSkgfSwgbCA9IHsgYWRkOiBmdW5jdGlvbiAoKSB7IGlmIChpKSB7IHZhciBjID0gaS5sZW5ndGg7ICFmdW5jdGlvbiBmKGIpIHsgXy5lYWNoKGIsIGZ1bmN0aW9uIChiLCBjKSB7IHZhciBkID0gXy50eXBlKGMpOyBcImZ1bmN0aW9uXCIgPT09IGQgPyBhLnVuaXF1ZSAmJiBsLmhhcyhjKSB8fCBpLnB1c2goYykgOiBjICYmIGMubGVuZ3RoICYmIFwic3RyaW5nXCIgIT09IGQgJiYgZihjKSB9KSB9KGFyZ3VtZW50cyksIGQgPyBnID0gaS5sZW5ndGggOiBiICYmIChlID0gYywgayhiKSkgfSByZXR1cm4gdGhpcyB9LCByZW1vdmU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgJiYgXy5lYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgYzsgKGMgPSBfLmluQXJyYXkoYiwgaSwgYykpID4gLTE7KWkuc3BsaWNlKGMsIDEpLCBkICYmIChnID49IGMgJiYgZy0tLCBoID49IGMgJiYgaC0tKSB9KSwgdGhpcyB9LCBoYXM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhID8gXy5pbkFycmF5KGEsIGkpID4gLTEgOiAhKCFpIHx8ICFpLmxlbmd0aCkgfSwgZW1wdHk6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgPSBbXSwgZyA9IDAsIHRoaXMgfSwgZGlzYWJsZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gaSA9IGogPSBiID0gdm9pZCAwLCB0aGlzIH0sIGRpc2FibGVkOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhaSB9LCBsb2NrOiBmdW5jdGlvbiAoKSB7IHJldHVybiBqID0gdm9pZCAwLCBiIHx8IGwuZGlzYWJsZSgpLCB0aGlzIH0sIGxvY2tlZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gIWogfSwgZmlyZVdpdGg6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiAhaSB8fCBjICYmICFqIHx8IChiID0gYiB8fCBbXSwgYiA9IFthLCBiLnNsaWNlID8gYi5zbGljZSgpIDogYl0sIGQgPyBqLnB1c2goYikgOiBrKGIpKSwgdGhpcyB9LCBmaXJlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBsLmZpcmVXaXRoKHRoaXMsIGFyZ3VtZW50cyksIHRoaXMgfSwgZmlyZWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICEhYyB9IH07IHJldHVybiBsIH0sIF8uZXh0ZW5kKHsgRGVmZXJyZWQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gW1tcInJlc29sdmVcIiwgXCJkb25lXCIsIF8uQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksIFwicmVzb2x2ZWRcIl0sIFtcInJlamVjdFwiLCBcImZhaWxcIiwgXy5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSwgXCJyZWplY3RlZFwiXSwgW1wibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgXy5DYWxsYmFja3MoXCJtZW1vcnlcIildXSwgYyA9IFwicGVuZGluZ1wiLCBkID0geyBzdGF0ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gYyB9LCBhbHdheXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSwgdGhpcyB9LCB0aGVuOiBmdW5jdGlvbiAoKSB7IHZhciBhID0gYXJndW1lbnRzOyByZXR1cm4gXy5EZWZlcnJlZChmdW5jdGlvbiAoYykgeyBfLmVhY2goYiwgZnVuY3Rpb24gKGIsIGYpIHsgdmFyIGcgPSBfLmlzRnVuY3Rpb24oYVtiXSkgJiYgYVtiXTsgZVtmWzFdXShmdW5jdGlvbiAoKSB7IHZhciBhID0gZyAmJiBnLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IGEgJiYgXy5pc0Z1bmN0aW9uKGEucHJvbWlzZSkgPyBhLnByb21pc2UoKS5kb25lKGMucmVzb2x2ZSkuZmFpbChjLnJlamVjdCkucHJvZ3Jlc3MoYy5ub3RpZnkpIDogY1tmWzBdICsgXCJXaXRoXCJdKHRoaXMgPT09IGQgPyBjLnByb21pc2UoKSA6IHRoaXMsIGcgPyBbYV0gOiBhcmd1bWVudHMpIH0pIH0pLCBhID0gbnVsbCB9KS5wcm9taXNlKCkgfSwgcHJvbWlzZTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG51bGwgIT0gYSA/IF8uZXh0ZW5kKGEsIGQpIDogZCB9IH0sIGUgPSB7fTsgcmV0dXJuIGQucGlwZSA9IGQudGhlbiwgXy5lYWNoKGIsIGZ1bmN0aW9uIChhLCBmKSB7IHZhciBnID0gZlsyXSwgaCA9IGZbM107IGRbZlsxXV0gPSBnLmFkZCwgaCAmJiBnLmFkZChmdW5jdGlvbiAoKSB7IGMgPSBoIH0sIGJbMSBeIGFdWzJdLmRpc2FibGUsIGJbMl1bMl0ubG9jayksIGVbZlswXV0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBlW2ZbMF0gKyBcIldpdGhcIl0odGhpcyA9PT0gZSA/IGQgOiB0aGlzLCBhcmd1bWVudHMpLCB0aGlzIH0sIGVbZlswXSArIFwiV2l0aFwiXSA9IGcuZmlyZVdpdGggfSksIGQucHJvbWlzZShlKSwgYSAmJiBhLmNhbGwoZSwgZSksIGUgfSwgd2hlbjogZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGMsIGQsIGUgPSAwLCBmID0gUi5jYWxsKGFyZ3VtZW50cyksIGcgPSBmLmxlbmd0aCwgaCA9IDEgIT09IGcgfHwgYSAmJiBfLmlzRnVuY3Rpb24oYS5wcm9taXNlKSA/IGcgOiAwLCBpID0gMSA9PT0gaCA/IGEgOiBfLkRlZmVycmVkKCksIGogPSBmdW5jdGlvbiAoYSwgYywgZCkgeyByZXR1cm4gZnVuY3Rpb24gKGUpIHsgY1thXSA9IHRoaXMsIGRbYV0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IFIuY2FsbChhcmd1bWVudHMpIDogZSwgZCA9PT0gYiA/IGkubm90aWZ5V2l0aChjLCBkKSA6IC0taCB8fCBpLnJlc29sdmVXaXRoKGMsIGQpIH0gfTsgaWYgKGcgPiAxKSBmb3IgKGIgPSBuZXcgQXJyYXkoZyksIGMgPSBuZXcgQXJyYXkoZyksIGQgPSBuZXcgQXJyYXkoZyk7IGcgPiBlOyBlKyspZltlXSAmJiBfLmlzRnVuY3Rpb24oZltlXS5wcm9taXNlKSA/IGZbZV0ucHJvbWlzZSgpLmRvbmUoaihlLCBkLCBmKSkuZmFpbChpLnJlamVjdCkucHJvZ3Jlc3MoaihlLCBjLCBiKSkgOiAtLWg7IHJldHVybiBoIHx8IGkucmVzb2x2ZVdpdGgoZCwgZiksIGkucHJvbWlzZSgpIH0gfSk7IHZhciBwYjsgXy5mbi5yZWFkeSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfLnJlYWR5LnByb21pc2UoKS5kb25lKGEpLCB0aGlzIH0sIF8uZXh0ZW5kKHsgaXNSZWFkeTogITEsIHJlYWR5V2FpdDogMSwgaG9sZFJlYWR5OiBmdW5jdGlvbiAoYSkgeyBhID8gXy5yZWFkeVdhaXQrKyA6IF8ucmVhZHkoITApIH0sIHJlYWR5OiBmdW5jdGlvbiAoYSkgeyAoYSA9PT0gITAgPyAtLV8ucmVhZHlXYWl0IDogXy5pc1JlYWR5KSB8fCAoXy5pc1JlYWR5ID0gITAsIGEgIT09ICEwICYmIC0tXy5yZWFkeVdhaXQgPiAwIHx8IChwYi5yZXNvbHZlV2l0aChaLCBbX10pLCBfLmZuLnRyaWdnZXJIYW5kbGVyICYmIChfKFopLnRyaWdnZXJIYW5kbGVyKFwicmVhZHlcIiksIF8oWikub2ZmKFwicmVhZHlcIikpKSkgfSB9KSwgXy5yZWFkeS5wcm9taXNlID0gZnVuY3Rpb24gKGIpIHsgcmV0dXJuIHBiIHx8IChwYiA9IF8uRGVmZXJyZWQoKSwgXCJjb21wbGV0ZVwiID09PSBaLnJlYWR5U3RhdGUgPyBzZXRUaW1lb3V0KF8ucmVhZHkpIDogKFouYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZywgITEpLCBhLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGcsICExKSkpLCBwYi5wcm9taXNlKGIpIH0sIF8ucmVhZHkucHJvbWlzZSgpOyB2YXIgcWIgPSBfLmFjY2VzcyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlLCBmLCBnKSB7IHZhciBoID0gMCwgaSA9IGEubGVuZ3RoLCBqID0gbnVsbCA9PSBjOyBpZiAoXCJvYmplY3RcIiA9PT0gXy50eXBlKGMpKSB7IGUgPSAhMDsgZm9yIChoIGluIGMpIF8uYWNjZXNzKGEsIGIsIGgsIGNbaF0sICEwLCBmLCBnKSB9IGVsc2UgaWYgKHZvaWQgMCAhPT0gZCAmJiAoZSA9ICEwLCBfLmlzRnVuY3Rpb24oZCkgfHwgKGcgPSAhMCksIGogJiYgKGcgPyAoYi5jYWxsKGEsIGQpLCBiID0gbnVsbCkgOiAoaiA9IGIsIGIgPSBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gai5jYWxsKF8oYSksIGMpIH0pKSwgYikpIGZvciAoOyBpID4gaDsgaCsrKWIoYVtoXSwgYywgZyA/IGQgOiBkLmNhbGwoYVtoXSwgaCwgYihhW2hdLCBjKSkpOyByZXR1cm4gZSA/IGEgOiBqID8gYi5jYWxsKGEpIDogaSA/IGIoYVswXSwgYykgOiBmIH07IF8uYWNjZXB0RGF0YSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiAxID09PSBhLm5vZGVUeXBlIHx8IDkgPT09IGEubm9kZVR5cGUgfHwgISthLm5vZGVUeXBlIH0sIGgudWlkID0gMSwgaC5hY2NlcHRzID0gXy5hY2NlcHREYXRhLCBoLnByb3RvdHlwZSA9IHsga2V5OiBmdW5jdGlvbiAoYSkgeyBpZiAoIWguYWNjZXB0cyhhKSkgcmV0dXJuIDA7IHZhciBiID0ge30sIGMgPSBhW3RoaXMuZXhwYW5kb107IGlmICghYykgeyBjID0gaC51aWQrKzsgdHJ5IHsgYlt0aGlzLmV4cGFuZG9dID0geyB2YWx1ZTogYyB9LCBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhLCBiKSB9IGNhdGNoIChkKSB7IGJbdGhpcy5leHBhbmRvXSA9IGMsIF8uZXh0ZW5kKGEsIGIpIH0gfSByZXR1cm4gdGhpcy5jYWNoZVtjXSB8fCAodGhpcy5jYWNoZVtjXSA9IHt9KSwgYyB9LCBzZXQ6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkLCBlID0gdGhpcy5rZXkoYSksIGYgPSB0aGlzLmNhY2hlW2VdOyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgYikgZltiXSA9IGM7IGVsc2UgaWYgKF8uaXNFbXB0eU9iamVjdChmKSkgXy5leHRlbmQodGhpcy5jYWNoZVtlXSwgYik7IGVsc2UgZm9yIChkIGluIGIpIGZbZF0gPSBiW2RdOyByZXR1cm4gZiB9LCBnZXQ6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gdGhpcy5jYWNoZVt0aGlzLmtleShhKV07IHJldHVybiB2b2lkIDAgPT09IGIgPyBjIDogY1tiXSB9LCBhY2Nlc3M6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkOyByZXR1cm4gdm9pZCAwID09PSBiIHx8IGIgJiYgXCJzdHJpbmdcIiA9PSB0eXBlb2YgYiAmJiB2b2lkIDAgPT09IGMgPyAoZCA9IHRoaXMuZ2V0KGEsIGIpLCB2b2lkIDAgIT09IGQgPyBkIDogdGhpcy5nZXQoYSwgXy5jYW1lbENhc2UoYikpKSA6ICh0aGlzLnNldChhLCBiLCBjKSwgdm9pZCAwICE9PSBjID8gYyA6IGIpIH0sIHJlbW92ZTogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQsIGUsIGYgPSB0aGlzLmtleShhKSwgZyA9IHRoaXMuY2FjaGVbZl07IGlmICh2b2lkIDAgPT09IGIpIHRoaXMuY2FjaGVbZl0gPSB7fTsgZWxzZSB7IF8uaXNBcnJheShiKSA/IGQgPSBiLmNvbmNhdChiLm1hcChfLmNhbWVsQ2FzZSkpIDogKGUgPSBfLmNhbWVsQ2FzZShiKSwgYiBpbiBnID8gZCA9IFtiLCBlXSA6IChkID0gZSwgZCA9IGQgaW4gZyA/IFtkXSA6IGQubWF0Y2gobmIpIHx8IFtdKSksIGMgPSBkLmxlbmd0aDsgZm9yICg7IGMtLTspZGVsZXRlIGdbZFtjXV0gfSB9LCBoYXNEYXRhOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gIV8uaXNFbXB0eU9iamVjdCh0aGlzLmNhY2hlW2FbdGhpcy5leHBhbmRvXV0gfHwge30pIH0sIGRpc2NhcmQ6IGZ1bmN0aW9uIChhKSB7IGFbdGhpcy5leHBhbmRvXSAmJiBkZWxldGUgdGhpcy5jYWNoZVthW3RoaXMuZXhwYW5kb11dIH0gfTsgdmFyIHJiID0gbmV3IGgsIHNiID0gbmV3IGgsIHRiID0gL14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLCB1YiA9IC8oW0EtWl0pL2c7IF8uZXh0ZW5kKHsgaGFzRGF0YTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHNiLmhhc0RhdGEoYSkgfHwgcmIuaGFzRGF0YShhKSB9LCBkYXRhOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gc2IuYWNjZXNzKGEsIGIsIGMpIH0sIHJlbW92ZURhdGE6IGZ1bmN0aW9uIChhLCBiKSB7IHNiLnJlbW92ZShhLCBiKSB9LCBfZGF0YTogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIHJiLmFjY2VzcyhhLCBiLCBjKSB9LCBfcmVtb3ZlRGF0YTogZnVuY3Rpb24gKGEsIGIpIHsgcmIucmVtb3ZlKGEsIGIpIH0gfSksIF8uZm4uZXh0ZW5kKHsgZGF0YTogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQsIGUsIGYgPSB0aGlzWzBdLCBnID0gZiAmJiBmLmF0dHJpYnV0ZXM7IGlmICh2b2lkIDAgPT09IGEpIHsgaWYgKHRoaXMubGVuZ3RoICYmIChlID0gc2IuZ2V0KGYpLCAxID09PSBmLm5vZGVUeXBlICYmICFyYi5nZXQoZiwgXCJoYXNEYXRhQXR0cnNcIikpKSB7IGZvciAoYyA9IGcubGVuZ3RoOyBjLS07KWdbY10gJiYgKGQgPSBnW2NdLm5hbWUsIDAgPT09IGQuaW5kZXhPZihcImRhdGEtXCIpICYmIChkID0gXy5jYW1lbENhc2UoZC5zbGljZSg1KSksIGkoZiwgZCwgZVtkXSkpKTsgcmIuc2V0KGYsIFwiaGFzRGF0YUF0dHJzXCIsICEwKSB9IHJldHVybiBlIH0gcmV0dXJuIFwib2JqZWN0XCIgPT0gdHlwZW9mIGEgPyB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBzYi5zZXQodGhpcywgYSkgfSkgOiBxYih0aGlzLCBmdW5jdGlvbiAoYikgeyB2YXIgYywgZCA9IF8uY2FtZWxDYXNlKGEpOyBpZiAoZiAmJiB2b2lkIDAgPT09IGIpIHsgaWYgKGMgPSBzYi5nZXQoZiwgYSksIHZvaWQgMCAhPT0gYykgcmV0dXJuIGM7IGlmIChjID0gc2IuZ2V0KGYsIGQpLCB2b2lkIDAgIT09IGMpIHJldHVybiBjOyBpZiAoYyA9IGkoZiwgZCwgdm9pZCAwKSwgdm9pZCAwICE9PSBjKSByZXR1cm4gYyB9IGVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGMgPSBzYi5nZXQodGhpcywgZCk7IHNiLnNldCh0aGlzLCBkLCBiKSwgLTEgIT09IGEuaW5kZXhPZihcIi1cIikgJiYgdm9pZCAwICE9PSBjICYmIHNiLnNldCh0aGlzLCBhLCBiKSB9KSB9LCBudWxsLCBiLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgITApIH0sIHJlbW92ZURhdGE6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBzYi5yZW1vdmUodGhpcywgYSkgfSkgfSB9KSwgXy5leHRlbmQoeyBxdWV1ZTogZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQ7IHJldHVybiBhID8gKGIgPSAoYiB8fCBcImZ4XCIpICsgXCJxdWV1ZVwiLCBkID0gcmIuZ2V0KGEsIGIpLCBjICYmICghZCB8fCBfLmlzQXJyYXkoYykgPyBkID0gcmIuYWNjZXNzKGEsIGIsIF8ubWFrZUFycmF5KGMpKSA6IGQucHVzaChjKSksIGQgfHwgW10pIDogdm9pZCAwIH0sIGRlcXVldWU6IGZ1bmN0aW9uIChhLCBiKSB7IGIgPSBiIHx8IFwiZnhcIjsgdmFyIGMgPSBfLnF1ZXVlKGEsIGIpLCBkID0gYy5sZW5ndGgsIGUgPSBjLnNoaWZ0KCksIGYgPSBfLl9xdWV1ZUhvb2tzKGEsIGIpLCBnID0gZnVuY3Rpb24gKCkgeyBfLmRlcXVldWUoYSwgYikgfTsgXCJpbnByb2dyZXNzXCIgPT09IGUgJiYgKGUgPSBjLnNoaWZ0KCksIGQtLSksIGUgJiYgKFwiZnhcIiA9PT0gYiAmJiBjLnVuc2hpZnQoXCJpbnByb2dyZXNzXCIpLCBkZWxldGUgZi5zdG9wLCBlLmNhbGwoYSwgZywgZikpLCAhZCAmJiBmICYmIGYuZW1wdHkuZmlyZSgpIH0sIF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IGIgKyBcInF1ZXVlSG9va3NcIjsgcmV0dXJuIHJiLmdldChhLCBjKSB8fCByYi5hY2Nlc3MoYSwgYywgeyBlbXB0eTogXy5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKS5hZGQoZnVuY3Rpb24gKCkgeyByYi5yZW1vdmUoYSwgW2IgKyBcInF1ZXVlXCIsIGNdKSB9KSB9KSB9IH0pLCBfLmZuLmV4dGVuZCh7IHF1ZXVlOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IDI7IHJldHVybiBcInN0cmluZ1wiICE9IHR5cGVvZiBhICYmIChiID0gYSwgYSA9IFwiZnhcIiwgYy0tKSwgYXJndW1lbnRzLmxlbmd0aCA8IGMgPyBfLnF1ZXVlKHRoaXNbMF0sIGEpIDogdm9pZCAwID09PSBiID8gdGhpcyA6IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBjID0gXy5xdWV1ZSh0aGlzLCBhLCBiKTsgXy5fcXVldWVIb29rcyh0aGlzLCBhKSwgXCJmeFwiID09PSBhICYmIFwiaW5wcm9ncmVzc1wiICE9PSBjWzBdICYmIF8uZGVxdWV1ZSh0aGlzLCBhKSB9KSB9LCBkZXF1ZXVlOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgXy5kZXF1ZXVlKHRoaXMsIGEpIH0pIH0sIGNsZWFyUXVldWU6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLnF1ZXVlKGEgfHwgXCJmeFwiLCBbXSkgfSwgcHJvbWlzZTogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQgPSAxLCBlID0gXy5EZWZlcnJlZCgpLCBmID0gdGhpcywgZyA9IHRoaXMubGVuZ3RoLCBoID0gZnVuY3Rpb24gKCkgeyAtLWQgfHwgZS5yZXNvbHZlV2l0aChmLCBbZl0pIH07IGZvciAoXCJzdHJpbmdcIiAhPSB0eXBlb2YgYSAmJiAoYiA9IGEsIGEgPSB2b2lkIDApLCBhID0gYSB8fCBcImZ4XCI7IGctLTspYyA9IHJiLmdldChmW2ddLCBhICsgXCJxdWV1ZUhvb2tzXCIpLCBjICYmIGMuZW1wdHkgJiYgKGQrKywgYy5lbXB0eS5hZGQoaCkpOyByZXR1cm4gaCgpLCBlLnByb21pc2UoYikgfSB9KTsgdmFyIHZiID0gL1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8uc291cmNlLCB3YiA9IFtcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiXSwgeGIgPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSA9IGIgfHwgYSwgXCJub25lXCIgPT09IF8uY3NzKGEsIFwiZGlzcGxheVwiKSB8fCAhXy5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsIGEpIH0sIHliID0gL14oPzpjaGVja2JveHxyYWRpbykkL2k7ICFmdW5jdGlvbiAoKSB7IHZhciBhID0gWi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGIgPSBhLmFwcGVuZENoaWxkKFouY3JlYXRlRWxlbWVudChcImRpdlwiKSksIGMgPSBaLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTsgYy5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwicmFkaW9cIiksIGMuc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiksIGMuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcInRcIiksIGIuYXBwZW5kQ2hpbGQoYyksIFkuY2hlY2tDbG9uZSA9IGIuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLCBiLmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiLCBZLm5vQ2xvbmVDaGVja2VkID0gISFiLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZSB9KCk7IHZhciB6YiA9IFwidW5kZWZpbmVkXCI7IFkuZm9jdXNpbkJ1YmJsZXMgPSBcIm9uZm9jdXNpblwiIGluIGE7IHZhciBBYiA9IC9ea2V5LywgQmIgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnUpfGNsaWNrLywgQ2IgPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sIERiID0gL14oW14uXSopKD86XFwuKC4rKXwpJC87IF8uZXZlbnQgPSB7XHJcbiAgICAgICAgZ2xvYmFsOiB7fSwgYWRkOiBmdW5jdGlvbiAoYSwgYiwgYywgZCwgZSkgeyB2YXIgZiwgZywgaCwgaSwgaiwgaywgbCwgbSwgbiwgbywgcCwgcSA9IHJiLmdldChhKTsgaWYgKHEpIGZvciAoYy5oYW5kbGVyICYmIChmID0gYywgYyA9IGYuaGFuZGxlciwgZSA9IGYuc2VsZWN0b3IpLCBjLmd1aWQgfHwgKGMuZ3VpZCA9IF8uZ3VpZCsrKSwgKGkgPSBxLmV2ZW50cykgfHwgKGkgPSBxLmV2ZW50cyA9IHt9KSwgKGcgPSBxLmhhbmRsZSkgfHwgKGcgPSBxLmhhbmRsZSA9IGZ1bmN0aW9uIChiKSB7IHJldHVybiB0eXBlb2YgXyAhPT0gemIgJiYgXy5ldmVudC50cmlnZ2VyZWQgIT09IGIudHlwZSA/IF8uZXZlbnQuZGlzcGF0Y2guYXBwbHkoYSwgYXJndW1lbnRzKSA6IHZvaWQgMCB9KSwgYiA9IChiIHx8IFwiXCIpLm1hdGNoKG5iKSB8fCBbXCJcIl0sIGogPSBiLmxlbmd0aDsgai0tOyloID0gRGIuZXhlYyhiW2pdKSB8fCBbXSwgbiA9IHAgPSBoWzFdLCBvID0gKGhbMl0gfHwgXCJcIikuc3BsaXQoXCIuXCIpLnNvcnQoKSwgbiAmJiAobCA9IF8uZXZlbnQuc3BlY2lhbFtuXSB8fCB7fSwgbiA9IChlID8gbC5kZWxlZ2F0ZVR5cGUgOiBsLmJpbmRUeXBlKSB8fCBuLCBsID0gXy5ldmVudC5zcGVjaWFsW25dIHx8IHt9LCBrID0gXy5leHRlbmQoeyB0eXBlOiBuLCBvcmlnVHlwZTogcCwgZGF0YTogZCwgaGFuZGxlcjogYywgZ3VpZDogYy5ndWlkLCBzZWxlY3RvcjogZSwgbmVlZHNDb250ZXh0OiBlICYmIF8uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSwgbmFtZXNwYWNlOiBvLmpvaW4oXCIuXCIpIH0sIGYpLCAobSA9IGlbbl0pIHx8IChtID0gaVtuXSA9IFtdLCBtLmRlbGVnYXRlQ291bnQgPSAwLCBsLnNldHVwICYmIGwuc2V0dXAuY2FsbChhLCBkLCBvLCBnKSAhPT0gITEgfHwgYS5hZGRFdmVudExpc3RlbmVyICYmIGEuYWRkRXZlbnRMaXN0ZW5lcihuLCBnLCB7IGNhcHR1cmU6IGZhbHNlLCBwYXNzaXZlOiBuLmluZGV4T2YoJ3RvdWNoJykgPiAtMSAmJiBuLmluZGV4T2YoJ3Njcm9sbCcpPi0xfSkpLGwuYWRkJiYobC5hZGQuY2FsbChhLGspLGsuaGFuZGxlci5ndWlkfHwoay5oYW5kbGVyLmd1aWQ9Yy5ndWlkKSksZT9tLnNwbGljZShtLmRlbGVnYXRlQ291bnQrKywwLGspOm0ucHVzaChrKSxfLmV2ZW50Lmdsb2JhbFtuXT0hMCl9LHJlbW92ZTpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbixvLHAscT1yYi5oYXNEYXRhKGEpJiZyYi5nZXQoYSk7aWYocSYmKGk9cS5ldmVudHMpKXtmb3IoYj0oYnx8XCJcIikubWF0Y2gobmIpfHxbXCJcIl0saj1iLmxlbmd0aDtqLS07KWlmKGg9RGIuZXhlYyhiW2pdKXx8W10sbj1wPWhbMV0sbz0oaFsyXXx8XCJcIikuc3BsaXQoXCIuXCIpLnNvcnQoKSxuKXtmb3IobD1fLmV2ZW50LnNwZWNpYWxbbl18fHt9LG49KGQ/bC5kZWxlZ2F0ZVR5cGU6bC5iaW5kVHlwZSl8fG4sbT1pW25dfHxbXSxoPWhbMl0mJm5ldyBSZWdFeHAoXCIoXnxcXFxcLilcIitvLmpvaW4oXCJcXFxcLig/Oi4qXFxcXC58KVwiKStcIihcXFxcLnwkKVwiKSxnPWY9bS5sZW5ndGg7Zi0tOylrPW1bZl0sIWUmJnAhPT1rLm9yaWdUeXBlfHxjJiZjLmd1aWQhPT1rLmd1aWR8fGgmJiFoLnRlc3Qoay5uYW1lc3BhY2UpfHxkJiZkIT09ay5zZWxlY3RvciYmKFwiKipcIiE9PWR8fCFrLnNlbGVjdG9yKXx8KG0uc3BsaWNlKGYsMSksay5zZWxlY3RvciYmbS5kZWxlZ2F0ZUNvdW50LS0sbC5yZW1vdmUmJmwucmVtb3ZlLmNhbGwoYSxrKSk7ZyYmIW0ubGVuZ3RoJiYobC50ZWFyZG93biYmbC50ZWFyZG93bi5jYWxsKGEsbyxxLmhhbmRsZSkhPT0hMXx8Xy5yZW1vdmVFdmVudChhLG4scS5oYW5kbGUpLGRlbGV0ZSBpW25dKX1lbHNlIGZvcihuIGluIGkpXy5ldmVudC5yZW1vdmUoYSxuK2Jbal0sYyxkLCEwKTtfLmlzRW1wdHlPYmplY3QoaSkmJihkZWxldGUgcS5oYW5kbGUscmIucmVtb3ZlKGEsXCJldmVudHNcIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtPVtkfHxaXSxuPVguY2FsbChiLFwidHlwZVwiKT9iLnR5cGU6YixvPVguY2FsbChiLFwibmFtZXNwYWNlXCIpP2IubmFtZXNwYWNlLnNwbGl0KFwiLlwiKTpbXTtpZihnPWg9ZD1kfHxaLDMhPT1kLm5vZGVUeXBlJiY4IT09ZC5ub2RlVHlwZSYmIUNiLnRlc3QobitfLmV2ZW50LnRyaWdnZXJlZCkmJihuLmluZGV4T2YoXCIuXCIpPj0wJiYobz1uLnNwbGl0KFwiLlwiKSxuPW8uc2hpZnQoKSxvLnNvcnQoKSksaj1uLmluZGV4T2YoXCI6XCIpPDAmJlwib25cIituLGI9YltfLmV4cGFuZG9dP2I6bmV3IF8uRXZlbnQobixcIm9iamVjdFwiPT10eXBlb2YgYiYmYiksYi5pc1RyaWdnZXI9ZT8yOjMsYi5uYW1lc3BhY2U9by5qb2luKFwiLlwiKSxiLm5hbWVzcGFjZV9yZT1iLm5hbWVzcGFjZT9uZXcgUmVnRXhwKFwiKF58XFxcXC4pXCIrby5qb2luKFwiXFxcXC4oPzouKlxcXFwufClcIikrXCIoXFxcXC58JClcIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChiLnRhcmdldD1kKSxjPW51bGw9PWM/W2JdOl8ubWFrZUFycmF5KGMsW2JdKSxsPV8uZXZlbnQuc3BlY2lhbFtuXXx8e30sZXx8IWwudHJpZ2dlcnx8bC50cmlnZ2VyLmFwcGx5KGQsYykhPT0hMSkpe2lmKCFlJiYhbC5ub0J1YmJsZSYmIV8uaXNXaW5kb3coZCkpe2ZvcihpPWwuZGVsZWdhdGVUeXBlfHxuLENiLnRlc3QoaStuKXx8KGc9Zy5wYXJlbnROb2RlKTtnO2c9Zy5wYXJlbnROb2RlKW0ucHVzaChnKSxoPWc7XG5oPT09KGQub3duZXJEb2N1bWVudHx8WikmJm0ucHVzaChoLmRlZmF1bHRWaWV3fHxoLnBhcmVudFdpbmRvd3x8YSl9Zm9yKGY9MDsoZz1tW2YrK10pJiYhYi5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpOyliLnR5cGU9Zj4xP2k6bC5iaW5kVHlwZXx8bixrPShyYi5nZXQoZyxcImV2ZW50c1wiKXx8e30pW2IudHlwZV0mJnJiLmdldChnLFwiaGFuZGxlXCIpLGsmJmsuYXBwbHkoZyxjKSxrPWomJmdbal0sayYmay5hcHBseSYmXy5hY2NlcHREYXRhKGcpJiYoYi5yZXN1bHQ9ay5hcHBseShnLGMpLGIucmVzdWx0PT09ITEmJmIucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGIudHlwZT1uLGV8fGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fGwuX2RlZmF1bHQmJmwuX2RlZmF1bHQuYXBwbHkobS5wb3AoKSxjKSE9PSExfHwhXy5hY2NlcHREYXRhKGQpfHxqJiZfLmlzRnVuY3Rpb24oZFtuXSkmJiFfLmlzV2luZG93KGQpJiYoaD1kW2pdLGgmJihkW2pdPW51bGwpLF8uZXZlbnQudHJpZ2dlcmVkPW4sZFtuXSgpLF8uZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCxoJiYoZFtqXT1oKSksYi5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihhKXthPV8uZXZlbnQuZml4KGEpO3ZhciBiLGMsZCxlLGYsZz1bXSxoPVIuY2FsbChhcmd1bWVudHMpLGk9KHJiLmdldCh0aGlzLFwiZXZlbnRzXCIpfHx7fSlbYS50eXBlXXx8W10saj1fLmV2ZW50LnNwZWNpYWxbYS50eXBlXXx8e307aWYoaFswXT1hLGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhai5wcmVEaXNwYXRjaHx8ai5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsYSkhPT0hMSl7Zm9yKGc9Xy5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsYSxpKSxiPTA7KGU9Z1tiKytdKSYmIWEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspZm9yKGEuY3VycmVudFRhcmdldD1lLmVsZW0sYz0wOyhmPWUuaGFuZGxlcnNbYysrXSkmJiFhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7KSghYS5uYW1lc3BhY2VfcmV8fGEubmFtZXNwYWNlX3JlLnRlc3QoZi5uYW1lc3BhY2UpKSYmKGEuaGFuZGxlT2JqPWYsYS5kYXRhPWYuZGF0YSxkPSgoXy5ldmVudC5zcGVjaWFsW2Yub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxmLmhhbmRsZXIpLmFwcGx5KGUuZWxlbSxoKSx2b2lkIDAhPT1kJiYoYS5yZXN1bHQ9ZCk9PT0hMSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpKSk7cmV0dXJuIGoucG9zdERpc3BhdGNoJiZqLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9W10saD1iLmRlbGVnYXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBlJiYoIWEuYnV0dG9ufHxcImNsaWNrXCIhPT1hLnR5cGUpKWZvcig7aSE9PXRoaXM7aT1pLnBhcmVudE5vZGV8fHRoaXMpaWYoaS5kaXNhYmxlZCE9PSEwfHxcImNsaWNrXCIhPT1hLnR5cGUpe2ZvcihkPVtdLGM9MDtoPmM7YysrKWY9YltjXSxlPWYuc2VsZWN0b3IrXCIgXCIsdm9pZCAwPT09ZFtlXSYmKGRbZV09Zi5uZWVkc0NvbnRleHQ/XyhlLHRoaXMpLmluZGV4KGkpPj0wOl8uZmluZChlLHRoaXMsbnVsbCxbaV0pLmxlbmd0aCksZFtlXSYmZC5wdXNoKGYpO2QubGVuZ3RoJiZnLnB1c2goe2VsZW06aSxoYW5kbGVyczpkfSl9cmV0dXJuIGg8Yi5sZW5ndGgmJmcucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOmIuc2xpY2UoaCl9KSxnfSxwcm9wczpcImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaFwiLnNwbGl0KFwiIFwiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6XCJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlXCIuc3BsaXQoXCIgXCIpLGZpbHRlcjpmdW5jdGlvbihhLGIpe3JldHVybiBudWxsPT1hLndoaWNoJiYoYS53aGljaD1udWxsIT1iLmNoYXJDb2RlP2IuY2hhckNvZGU6Yi5rZXlDb2RlKSxhfX0sbW91c2VIb29rczp7cHJvcHM6XCJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnRcIi5zcGxpdChcIiBcIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9Yi5idXR0b247cmV0dXJuIG51bGw9PWEucGFnZVgmJm51bGwhPWIuY2xpZW50WCYmKGM9YS50YXJnZXQub3duZXJEb2N1bWVudHx8WixkPWMuZG9jdW1lbnRFbGVtZW50LGU9Yy5ib2R5LGEucGFnZVg9Yi5jbGllbnRYKyhkJiZkLnNjcm9sbExlZnR8fGUmJmUuc2Nyb2xsTGVmdHx8MCktKGQmJmQuY2xpZW50TGVmdHx8ZSYmZS5jbGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWIuY2xpZW50WSsoZCYmZC5zY3JvbGxUb3B8fGUmJmUuc2Nyb2xsVG9wfHwwKS0oZCYmZC5jbGllbnRUb3B8fGUmJmUuY2xpZW50VG9wfHwwKSksYS53aGljaHx8dm9pZCAwPT09Znx8KGEud2hpY2g9MSZmPzE6MiZmPzM6NCZmPzI6MCksYX19LGZpeDpmdW5jdGlvbihhKXtpZihhW18uZXhwYW5kb10pcmV0dXJuIGE7dmFyIGIsYyxkLGU9YS50eXBlLGY9YSxnPXRoaXMuZml4SG9va3NbZV07Zm9yKGd8fCh0aGlzLmZpeEhvb2tzW2VdPWc9QmIudGVzdChlKT90aGlzLm1vdXNlSG9va3M6QWIudGVzdChlKT90aGlzLmtleUhvb2tzOnt9KSxkPWcucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoZy5wcm9wcyk6dGhpcy5wcm9wcyxhPW5ldyBfLkV2ZW50KGYpLGI9ZC5sZW5ndGg7Yi0tOyljPWRbYl0sYVtjXT1mW2NdO3JldHVybiBhLnRhcmdldHx8KGEudGFyZ2V0PVopLDM9PT1hLnRhcmdldC5ub2RlVHlwZSYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGcuZmlsdGVyP2cuZmlsdGVyKGEsZik6YX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMhPT1sKCkmJnRoaXMuZm9jdXM/KHRoaXMuZm9jdXMoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6XCJmb2N1c2luXCJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PWwoKSYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6XCJmb2N1c291dFwifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVyblwiY2hlY2tib3hcIj09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmXy5ub2RlTmFtZSh0aGlzLFwiaW5wdXRcIik/KHRoaXMuY2xpY2soKSwhMSk6dm9pZCAwfSxfZGVmYXVsdDpmdW5jdGlvbihhKXtyZXR1cm4gXy5ub2RlTmFtZShhLnRhcmdldCxcImFcIil9fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihhKXt2b2lkIDAhPT1hLnJlc3VsdCYmYS5vcmlnaW5hbEV2ZW50JiYoYS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWEucmVzdWx0KX19fSxzaW11bGF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1fLmV4dGVuZChuZXcgXy5FdmVudCxjLHt0eXBlOmEsaXNTaW11bGF0ZWQ6ITAsb3JpZ2luYWxFdmVudDp7fX0pO2Q/Xy5ldmVudC50cmlnZ2VyKGUsbnVsbCxiKTpfLmV2ZW50LmRpc3BhdGNoLmNhbGwoYixlKSxlLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZjLnByZXZlbnREZWZhdWx0KCl9fSxfLnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGEsYixjKXthLnJlbW92ZUV2ZW50TGlzdGVuZXImJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpfSxfLkV2ZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfLkV2ZW50PyhhJiZhLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1hLHRoaXMudHlwZT1hLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9YS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1hLmRlZmF1bHRQcmV2ZW50ZWQmJmEucmV0dXJuVmFsdWU9PT0hMT9qOmspOnRoaXMudHlwZT1hLGImJl8uZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fF8ubm93KCksdm9pZCh0aGlzW18uZXhwYW5kb109ITApKTpuZXcgXy5FdmVudChhLGIpfSxfLkV2ZW50LnByb3RvdHlwZT17aXNEZWZhdWx0UHJldmVudGVkOmssaXNQcm9wYWdhdGlvblN0b3BwZWQ6ayxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDprLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPWosYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1qLGEmJmEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1qLGEmJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJiZhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSxfLmVhY2goe21vdXNlZW50ZXI6XCJtb3VzZW92ZXJcIixtb3VzZWxlYXZlOlwibW91c2VvdXRcIixwb2ludGVyZW50ZXI6XCJwb2ludGVyb3ZlclwiLHBvaW50ZXJsZWF2ZTpcInBvaW50ZXJvdXRcIn0sZnVuY3Rpb24oYSxiKXtfLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybighZXx8ZSE9PWQmJiFfLmNvbnRhaW5zKGQsZSkpJiYoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxZLmZvY3VzaW5CdWJibGVzfHxfLmVhY2goe2ZvY3VzOlwiZm9jdXNpblwiLGJsdXI6XCJmb2N1c291dFwifSxmdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGEpe18uZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxfLmV2ZW50LmZpeChhKSwhMCl9O18uZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1yYi5hY2Nlc3MoZCxiKTtlfHxkLmFkZEV2ZW50TGlzdGVuZXIoYSxjLCEwKSxyYi5hY2Nlc3MoZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1yYi5hY2Nlc3MoZCxiKS0xO2U/cmIuYWNjZXNzKGQsYixlKTooZC5yZW1vdmVFdmVudExpc3RlbmVyKGEsYywhMCkscmIucmVtb3ZlKGQsYikpfX19KSxfLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBhKXtcInN0cmluZ1wiIT10eXBlb2YgYiYmKGM9Y3x8YixiPXZvaWQgMCk7Zm9yKGcgaW4gYSl0aGlzLm9uKGcsYixjLGFbZ10sZSk7cmV0dXJuIHRoaXN9aWYobnVsbD09YyYmbnVsbD09ZD8oZD1iLGM9Yj12b2lkIDApOm51bGw9PWQmJihcInN0cmluZ1wiPT10eXBlb2YgYj8oZD1jLGM9dm9pZCAwKTooZD1jLGM9YixiPXZvaWQgMCkpLGQ9PT0hMSlkPWs7ZWxzZSBpZighZClyZXR1cm4gdGhpcztyZXR1cm4gMT09PWUmJihmPWQsZD1mdW5jdGlvbihhKXtyZXR1cm4gXygpLm9mZihhKSxmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5ndWlkPWYuZ3VpZHx8KGYuZ3VpZD1fLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe18uZXZlbnQuYWRkKHRoaXMsYSxkLGMsYil9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRsZU9iaixfKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlK1wiLlwiK2QubmFtZXNwYWNlOmQub3JpZ1R5cGUsZC5zZWxlY3RvcixkLmhhbmRsZXIpLHRoaXM7aWYoXCJvYmplY3RcIj09dHlwZW9mIGEpe2ZvcihlIGluIGEpdGhpcy5vZmYoZSxiLGFbZV0pO3JldHVybiB0aGlzfXJldHVybihiPT09ITF8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGIpJiYoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPWspLHRoaXMuZWFjaChmdW5jdGlvbigpe18uZXZlbnQucmVtb3ZlKHRoaXMsYSxjLGIpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Xy5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/Xy5ldmVudC50cmlnZ2VyKGEsYixjLCEwKTp2b2lkIDB9fSk7dmFyIEViPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcXHc6XSspW14+XSopXFwvPi9naSxGYj0vPChbXFx3Ol0rKS8sR2I9Lzx8JiM/XFx3KzsvLEhiPS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksSWI9L2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxKYj0vXiR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pLEtiPS9edHJ1ZVxcLyguKikvLExiPS9eXFxzKjwhKD86XFxbQ0RBVEFcXFt8LS0pfCg/OlxcXVxcXXwtLSk+XFxzKiQvZyxNYj17b3B0aW9uOlsxLFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLFwiPC9zZWxlY3Q+XCJdLHRoZWFkOlsxLFwiPHRhYmxlPlwiLFwiPC90YWJsZT5cIl0sY29sOlsyLFwiPHRhYmxlPjxjb2xncm91cD5cIixcIjwvY29sZ3JvdXA+PC90YWJsZT5cIl0sdHI6WzIsXCI8dGFibGU+PHRib2R5PlwiLFwiPC90Ym9keT48L3RhYmxlPlwiXSx0ZDpbMyxcIjx0YWJsZT48dGJvZHk+PHRyPlwiLFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCJdLF9kZWZhdWx0OlswLFwiXCIsXCJcIl19O01iLm9wdGdyb3VwPU1iLm9wdGlvbixNYi50Ym9keT1NYi50Zm9vdD1NYi5jb2xncm91cD1NYi5jYXB0aW9uPU1iLnRoZWFkLE1iLnRoPU1iLnRkLF8uZXh0ZW5kKHtjbG9uZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLmNsb25lTm9kZSghMCksaT1fLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKTtpZighKFkubm9DbG9uZUNoZWNrZWR8fDEhPT1hLm5vZGVUeXBlJiYxMSE9PWEubm9kZVR5cGV8fF8uaXNYTUxEb2MoYSkpKWZvcihnPXIoaCksZj1yKGEpLGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKyspcyhmW2RdLGdbZF0pO2lmKGIpaWYoYylmb3IoZj1mfHxyKGEpLGc9Z3x8cihoKSxkPTAsZT1mLmxlbmd0aDtlPmQ7ZCsrKXEoZltkXSxnW2RdKTtlbHNlIHEoYSxoKTtyZXR1cm4gZz1yKGgsXCJzY3JpcHRcIiksZy5sZW5ndGg+MCYmcChnLCFpJiZyKGEsXCJzY3JpcHRcIikpLGh9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlLGYsZyxoLGksaixrPWIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGw9W10sbT0wLG49YS5sZW5ndGg7bj5tO20rKylpZihlPWFbbV0sZXx8MD09PWUpaWYoXCJvYmplY3RcIj09PV8udHlwZShlKSlfLm1lcmdlKGwsZS5ub2RlVHlwZT9bZV06ZSk7ZWxzZSBpZihHYi50ZXN0KGUpKXtmb3IoZj1mfHxrLmFwcGVuZENoaWxkKGIuY3JlYXRlRWxlbWVudChcImRpdlwiKSksZz0oRmIuZXhlYyhlKXx8W1wiXCIsXCJcIl0pWzFdLnRvTG93ZXJDYXNlKCksaD1NYltnXXx8TWIuX2RlZmF1bHQsZi5pbm5lckhUTUw9aFsxXStlLnJlcGxhY2UoRWIsXCI8JDE+PC8kMj5cIikraFsyXSxqPWhbMF07ai0tOylmPWYubGFzdENoaWxkO18ubWVyZ2UobCxmLmNoaWxkTm9kZXMpLGY9ay5maXJzdENoaWxkLGYudGV4dENvbnRlbnQ9XCJcIn1lbHNlIGwucHVzaChiLmNyZWF0ZVRleHROb2RlKGUpKTtmb3Ioay50ZXh0Q29udGVudD1cIlwiLG09MDtlPWxbbSsrXTspaWYoKCFkfHwtMT09PV8uaW5BcnJheShlLGQpKSYmKGk9Xy5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSksZj1yKGsuYXBwZW5kQ2hpbGQoZSksXCJzY3JpcHRcIiksaSYmcChmKSxjKSlmb3Ioaj0wO2U9ZltqKytdOylKYi50ZXN0KGUudHlwZXx8XCJcIikmJmMucHVzaChlKTtyZXR1cm4ga30sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQsZSxmPV8uZXZlbnQuc3BlY2lhbCxnPTA7dm9pZCAwIT09KGM9YVtnXSk7ZysrKXtpZihfLmFjY2VwdERhdGEoYykmJihlPWNbcmIuZXhwYW5kb10sZSYmKGI9cmIuY2FjaGVbZV0pKSl7aWYoYi5ldmVudHMpZm9yKGQgaW4gYi5ldmVudHMpZltkXT9fLmV2ZW50LnJlbW92ZShjLGQpOl8ucmVtb3ZlRXZlbnQoYyxkLGIuaGFuZGxlKTtyYi5jYWNoZVtlXSYmZGVsZXRlIHJiLmNhY2hlW2VdfWRlbGV0ZSBzYi5jYWNoZVtjW3NiLmV4cGFuZG9dXX19fSksXy5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHFiKHRoaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/Xy50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7KDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKSYmKHRoaXMudGV4dENvbnRlbnQ9YSl9KX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPW0odGhpcyxhKTtiLmFwcGVuZENoaWxkKGEpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj1tKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjLGQ9YT9fLmZpbHRlcihhLHRoaXMpOnRoaXMsZT0wO251bGwhPShjPWRbZV0pO2UrKylifHwxIT09Yy5ub2RlVHlwZXx8Xy5jbGVhbkRhdGEocihjKSksYy5wYXJlbnROb2RlJiYoYiYmXy5jb250YWlucyhjLm93bmVyRG9jdW1lbnQsYykmJnAocihjLFwic2NyaXB0XCIpKSxjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYykpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgYSxiPTA7bnVsbCE9KGE9dGhpc1tiXSk7YisrKTE9PT1hLm5vZGVUeXBlJiYoXy5jbGVhbkRhdGEocihhLCExKSksYS50ZXh0Q29udGVudD1cIlwiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1udWxsPT1hPyExOmEsYj1udWxsPT1iP2E6Yix0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBfLmNsb25lKHRoaXMsYSxiKX0pfSxodG1sOmZ1bmN0aW9uKGEpe3JldHVybiBxYih0aGlzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEmJjE9PT1iLm5vZGVUeXBlKXJldHVybiBiLmlubmVySFRNTDtpZihcInN0cmluZ1wiPT10eXBlb2YgYSYmIUhiLnRlc3QoYSkmJiFNYlsoRmIuZXhlYyhhKXx8W1wiXCIsXCJcIl0pWzFdLnRvTG93ZXJDYXNlKCldKXthPWEucmVwbGFjZShFYixcIjwkMT48LyQyPlwiKTt0cnl7Zm9yKDtkPmM7YysrKWI9dGhpc1tjXXx8e30sMT09PWIubm9kZVR5cGUmJihfLmNsZWFuRGF0YShyKGIsITEpKSxiLmlubmVySFRNTD1hKTtiPTB9Y2F0Y2goZSl7fX1iJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGEpfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihiKXthPXRoaXMucGFyZW50Tm9kZSxfLmNsZWFuRGF0YShyKHRoaXMpKSxhJiZhLnJlcGxhY2VDaGlsZChiLHRoaXMpfSksYSYmKGEubGVuZ3RofHxhLm5vZGVUeXBlKT90aGlzOnRoaXMucmVtb3ZlKCl9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGEsYil7YT1TLmFwcGx5KFtdLGEpO3ZhciBjLGQsZSxmLGcsaCxpPTAsaj10aGlzLmxlbmd0aCxrPXRoaXMsbD1qLTEsbT1hWzBdLHA9Xy5pc0Z1bmN0aW9uKG0pO2lmKHB8fGo+MSYmXCJzdHJpbmdcIj09dHlwZW9mIG0mJiFZLmNoZWNrQ2xvbmUmJkliLnRlc3QobSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZD1rLmVxKGMpO3AmJihhWzBdPW0uY2FsbCh0aGlzLGMsZC5odG1sKCkpKSxkLmRvbU1hbmlwKGEsYil9KTtpZihqJiYoYz1fLmJ1aWxkRnJhZ21lbnQoYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQsITEsdGhpcyksZD1jLmZpcnN0Q2hpbGQsMT09PWMuY2hpbGROb2Rlcy5sZW5ndGgmJihjPWQpLGQpKXtmb3IoZT1fLm1hcChyKGMsXCJzY3JpcHRcIiksbiksZj1lLmxlbmd0aDtqPmk7aSsrKWc9YyxpIT09bCYmKGc9Xy5jbG9uZShnLCEwLCEwKSxmJiZfLm1lcmdlKGUscihnLFwic2NyaXB0XCIpKSksYi5jYWxsKHRoaXNbaV0sZyxpKTtpZihmKWZvcihoPWVbZS5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxfLm1hcChlLG8pLGk9MDtmPmk7aSsrKWc9ZVtpXSxKYi50ZXN0KGcudHlwZXx8XCJcIikmJiFyYi5hY2Nlc3MoZyxcImdsb2JhbEV2YWxcIikmJl8uY29udGFpbnMoaCxnKSYmKGcuc3JjP18uX2V2YWxVcmwmJl8uX2V2YWxVcmwoZy5zcmMpOl8uZ2xvYmFsRXZhbChnLnRleHRDb250ZW50LnJlcGxhY2UoTGIsXCJcIikpKX1yZXR1cm4gdGhpc319KSxfLmVhY2goe2FwcGVuZFRvOlwiYXBwZW5kXCIscHJlcGVuZFRvOlwicHJlcGVuZFwiLGluc2VydEJlZm9yZTpcImJlZm9yZVwiLGluc2VydEFmdGVyOlwiYWZ0ZXJcIixyZXBsYWNlQWxsOlwicmVwbGFjZVdpdGhcIn0sZnVuY3Rpb24oYSxiKXtfLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPVtdLGU9XyhhKSxmPWUubGVuZ3RoLTEsZz0wO2Y+PWc7ZysrKWM9Zz09PWY/dGhpczp0aGlzLmNsb25lKCEwKSxfKGVbZ10pW2JdKGMpLFQuYXBwbHkoZCxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZCl9fSk7dmFyIE5iLE9iPXt9LFBiPS9ebWFyZ2luLyxRYj1uZXcgUmVnRXhwKFwiXihcIit2YitcIikoPyFweClbYS16JV0rJFwiLFwiaVwiKSxSYj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSxudWxsKX07IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYigpe2cuc3R5bGUuY3NzVGV4dD1cIi13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MSU7dG9wOjElO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NHB4O3Bvc2l0aW9uOmFic29sdXRlXCIsZy5pbm5lckhUTUw9XCJcIixlLmFwcGVuZENoaWxkKGYpO3ZhciBiPWEuZ2V0Q29tcHV0ZWRTdHlsZShnLG51bGwpO2M9XCIxJVwiIT09Yi50b3AsZD1cIjRweFwiPT09Yi53aWR0aCxlLnJlbW92ZUNoaWxkKGYpfXZhciBjLGQsZT1aLmRvY3VtZW50RWxlbWVudCxmPVouY3JlYXRlRWxlbWVudChcImRpdlwiKSxnPVouY3JlYXRlRWxlbWVudChcImRpdlwiKTtnLnN0eWxlJiYoZy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD1cImNvbnRlbnQtYm94XCIsZy5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPVwiXCIsWS5jbGVhckNsb25lU3R5bGU9XCJjb250ZW50LWJveFwiPT09Zy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxmLnN0eWxlLmNzc1RleHQ9XCJib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweDttYXJnaW4tdG9wOjFweDtwb3NpdGlvbjphYnNvbHV0ZVwiLGYuYXBwZW5kQ2hpbGQoZyksYS5nZXRDb21wdXRlZFN0eWxlJiZfLmV4dGVuZChZLHtwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGIoKSxjfSxib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT1kJiZiKCksZH0scmVsaWFibGVNYXJnaW5SaWdodDpmdW5jdGlvbigpe3ZhciBiLGM9Zy5hcHBlbmRDaGlsZChaLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO3JldHVybiBjLnN0eWxlLmNzc1RleHQ9Zy5zdHlsZS5jc3NUZXh0PVwiLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowXCIsYy5zdHlsZS5tYXJnaW5SaWdodD1jLnN0eWxlLndpZHRoPVwiMFwiLGcuc3R5bGUud2lkdGg9XCIxcHhcIixlLmFwcGVuZENoaWxkKGYpLGI9IXBhcnNlRmxvYXQoYS5nZXRDb21wdXRlZFN0eWxlKGMsbnVsbCkubWFyZ2luUmlnaHQpLGUucmVtb3ZlQ2hpbGQoZiksYn19KSl9KCksXy5zd2FwPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZz17fTtmb3IoZiBpbiBiKWdbZl09YS5zdHlsZVtmXSxhLnN0eWxlW2ZdPWJbZl07ZT1jLmFwcGx5KGEsZHx8W10pO2ZvcihmIGluIGIpYS5zdHlsZVtmXT1nW2ZdO3JldHVybiBlfTt2YXIgU2I9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFRiPW5ldyBSZWdFeHAoXCJeKFwiK3ZiK1wiKSguKikkXCIsXCJpXCIpLFViPW5ldyBSZWdFeHAoXCJeKFsrLV0pPShcIit2YitcIilcIixcImlcIiksVmI9e3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix2aXNpYmlsaXR5OlwiaGlkZGVuXCIsZGlzcGxheTpcImJsb2NrXCJ9LFdiPXtsZXR0ZXJTcGFjaW5nOlwiMFwiLGZvbnRXZWlnaHQ6XCI0MDBcIn0sWGI9W1wiV2Via2l0XCIsXCJPXCIsXCJNb3pcIixcIm1zXCJdO18uZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9dihhLFwib3BhY2l0eVwiKTtyZXR1cm5cIlwiPT09Yz9cIjFcIjpjfX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZsZXhHcm93OiEwLGZsZXhTaHJpbms6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOntcImZsb2F0XCI6XCJjc3NGbG9hdFwifSxzdHlsZTpmdW5jdGlvbihhLGIsYyxkKXtpZihhJiYzIT09YS5ub2RlVHlwZSYmOCE9PWEubm9kZVR5cGUmJmEuc3R5bGUpe3ZhciBlLGYsZyxoPV8uY2FtZWxDYXNlKGIpLGk9YS5zdHlsZTtyZXR1cm4gYj1fLmNzc1Byb3BzW2hdfHwoXy5jc3NQcm9wc1toXT14KGksaCkpLGc9Xy5jc3NIb29rc1tiXXx8Xy5jc3NIb29rc1toXSx2b2lkIDA9PT1jP2cmJlwiZ2V0XCJpbiBnJiZ2b2lkIDAhPT0oZT1nLmdldChhLCExLGQpKT9lOmlbYl06KGY9dHlwZW9mIGMsXCJzdHJpbmdcIj09PWYmJihlPVViLmV4ZWMoYykpJiYoYz0oZVsxXSsxKSplWzJdK3BhcnNlRmxvYXQoXy5jc3MoYSxiKSksZj1cIm51bWJlclwiKSxudWxsIT1jJiZjPT09YyYmKFwibnVtYmVyXCIhPT1mfHxfLmNzc051bWJlcltoXXx8KGMrPVwicHhcIiksWS5jbGVhckNsb25lU3R5bGV8fFwiXCIhPT1jfHwwIT09Yi5pbmRleE9mKFwiYmFja2dyb3VuZFwiKXx8KGlbYl09XCJpbmhlcml0XCIpLGcmJlwic2V0XCJpbiBnJiZ2b2lkIDA9PT0oYz1nLnNldChhLGMsZCkpfHwoaVtiXT1jKSksdm9pZCAwKX19LGNzczpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaD1fLmNhbWVsQ2FzZShiKTtyZXR1cm4gYj1fLmNzc1Byb3BzW2hdfHwoXy5jc3NQcm9wc1toXT14KGEuc3R5bGUsaCkpLGc9Xy5jc3NIb29rc1tiXXx8Xy5jc3NIb29rc1toXSxnJiZcImdldFwiaW4gZyYmKGU9Zy5nZXQoYSwhMCxjKSksdm9pZCAwPT09ZSYmKGU9dihhLGIsZCkpLFwibm9ybWFsXCI9PT1lJiZiIGluIFdiJiYoZT1XYltiXSksXCJcIj09PWN8fGM/KGY9cGFyc2VGbG9hdChlKSxjPT09ITB8fF8uaXNOdW1lcmljKGYpP2Z8fDA6ZSk6ZX19KSxfLmVhY2goW1wiaGVpZ2h0XCIsXCJ3aWR0aFwiXSxmdW5jdGlvbihhLGIpe18uY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGM/U2IudGVzdChfLmNzcyhhLFwiZGlzcGxheVwiKSkmJjA9PT1hLm9mZnNldFdpZHRoP18uc3dhcChhLFZiLGZ1bmN0aW9uKCl7cmV0dXJuIEEoYSxiLGQpfSk6QShhLGIsZCk6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQmJlJiKGEpO3JldHVybiB5KGEsYyxkP3ooYSxiLGQsXCJib3JkZXItYm94XCI9PT1fLmNzcyhhLFwiYm94U2l6aW5nXCIsITEsZSksZSk6MCl9fX0pLF8uY3NzSG9va3MubWFyZ2luUmlnaHQ9dyhZLnJlbGlhYmxlTWFyZ2luUmlnaHQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9fLnN3YXAoYSx7ZGlzcGxheTpcImlubGluZS1ibG9ja1wifSx2LFthLFwibWFyZ2luUmlnaHRcIl0pOnZvaWQgMH0pLF8uZWFjaCh7bWFyZ2luOlwiXCIscGFkZGluZzpcIlwiLGJvcmRlcjpcIldpZHRoXCJ9LGZ1bmN0aW9uKGEsYil7Xy5jc3NIb29rc1thK2JdPXtleHBhbmQ6ZnVuY3Rpb24oYyl7Zm9yKHZhciBkPTAsZT17fSxmPVwic3RyaW5nXCI9PXR5cGVvZiBjP2Muc3BsaXQoXCIgXCIpOltjXTs0PmQ7ZCsrKWVbYSt3YltkXStiXT1mW2RdfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSxQYi50ZXN0KGEpfHwoXy5jc3NIb29rc1thK2JdLnNldD15KX0pLF8uZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcWIodGhpcyxmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtpZihfLmlzQXJyYXkoYikpe2ZvcihkPVJiKGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylmW2JbZ11dPV8uY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAwIT09Yz9fLnN0eWxlKGEsYixjKTpfLmNzcyhhLGIpfSxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBCKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIEIodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihhKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGE/YT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt4Yih0aGlzKT9fKHRoaXMpLnNob3coKTpfKHRoaXMpLmhpZGUoKX0pfX0pLF8uVHdlZW49QyxDLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Qyxpbml0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmVsZW09YSx0aGlzLnByb3A9Yyx0aGlzLmVhc2luZz1lfHxcInN3aW5nXCIsdGhpcy5vcHRpb25zPWIsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPWQsdGhpcy51bml0PWZ8fChfLmNzc051bWJlcltjXT9cIlwiOlwicHhcIil9LGN1cjpmdW5jdGlvbigpe3ZhciBhPUMucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGEmJmEuZ2V0P2EuZ2V0KHRoaXMpOkMucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGEpe3ZhciBiLGM9Qy5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5wb3M9Yj10aGlzLm9wdGlvbnMuZHVyYXRpb24/Xy5lYXNpbmdbdGhpcy5lYXNpbmddKGEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6YSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqYit0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxjJiZjLnNldD9jLnNldCh0aGlzKTpDLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LEMucHJvdG90eXBlLmluaXQucHJvdG90eXBlPUMucHJvdG90eXBlLEMucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBudWxsPT1hLmVsZW1bYS5wcm9wXXx8YS5lbGVtLnN0eWxlJiZudWxsIT1hLmVsZW0uc3R5bGVbYS5wcm9wXT8oYj1fLmNzcyhhLmVsZW0sYS5wcm9wLFwiXCIpLGImJlwiYXV0b1wiIT09Yj9iOjApOmEuZWxlbVthLnByb3BdfSxzZXQ6ZnVuY3Rpb24oYSl7Xy5meC5zdGVwW2EucHJvcF0/Xy5meC5zdGVwW2EucHJvcF0oYSk6YS5lbGVtLnN0eWxlJiYobnVsbCE9YS5lbGVtLnN0eWxlW18uY3NzUHJvcHNbYS5wcm9wXV18fF8uY3NzSG9va3NbYS5wcm9wXSk/Xy5zdHlsZShhLmVsZW0sYS5wcm9wLGEubm93K2EudW5pdCk6YS5lbGVtW2EucHJvcF09YS5ub3d9fX0sQy5wcm9wSG9va3Muc2Nyb2xsVG9wPUMucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihhKXthLmVsZW0ubm9kZVR5cGUmJmEuZWxlbS5wYXJlbnROb2RlJiYoYS5lbGVtW2EucHJvcF09YS5ub3cpfX0sXy5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sc3dpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuLjUtTWF0aC5jb3MoYSpNYXRoLlBJKS8yfX0sXy5meD1DLnByb3RvdHlwZS5pbml0LF8uZnguc3RlcD17fTt2YXIgWWIsWmIsJGI9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLF9iPW5ldyBSZWdFeHAoXCJeKD86KFsrLV0pPXwpKFwiK3ZiK1wiKShbYS16JV0qKSRcIixcImlcIiksYWM9L3F1ZXVlSG9va3MkLyxiYz1bR10sY2M9e1wiKlwiOltmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY3JlYXRlVHdlZW4oYSxiKSxkPWMuY3VyKCksZT1fYi5leGVjKGIpLGY9ZSYmZVszXXx8KF8uY3NzTnVtYmVyW2FdP1wiXCI6XCJweFwiKSxnPShfLmNzc051bWJlclthXXx8XCJweFwiIT09ZiYmK2QpJiZfYi5leGVjKF8uY3NzKGMuZWxlbSxhKSksaD0xLGk9MjA7aWYoZyYmZ1szXSE9PWYpe2Y9Znx8Z1szXSxlPWV8fFtdLGc9K2R8fDE7ZG8gaD1ofHxcIi41XCIsZy89aCxfLnN0eWxlKGMuZWxlbSxhLGcrZik7d2hpbGUoaCE9PShoPWMuY3VyKCkvZCkmJjEhPT1oJiYtLWkpfXJldHVybiBlJiYoZz1jLnN0YXJ0PStnfHwrZHx8MCxjLnVuaXQ9ZixjLmVuZD1lWzFdP2crKGVbMV0rMSkqZVsyXTorZVsyXSksY31dfTtfLkFuaW1hdGlvbj1fLmV4dGVuZChJLHt0d2VlbmVyOmZ1bmN0aW9uKGEsYil7Xy5pc0Z1bmN0aW9uKGEpPyhiPWEsYT1bXCIqXCJdKTphPWEuc3BsaXQoXCIgXCIpO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxjY1tjXT1jY1tjXXx8W10sY2NbY10udW5zaGlmdChiKX0scHJlZmlsdGVyOmZ1bmN0aW9uKGEsYil7Yj9iYy51bnNoaWZ0KGEpOmJjLnB1c2goYSl9fSksXy5zcGVlZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmXCJvYmplY3RcIj09dHlwZW9mIGE/Xy5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxfLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIV8uaXNGdW5jdGlvbihiKSYmYn07cmV0dXJuIGQuZHVyYXRpb249Xy5meC5vZmY/MDpcIm51bWJlclwiPT10eXBlb2YgZC5kdXJhdGlvbj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gXy5meC5zcGVlZHM/Xy5meC5zcGVlZHNbZC5kdXJhdGlvbl06Xy5meC5zcGVlZHMuX2RlZmF1bHQsKG51bGw9PWQucXVldWV8fGQucXVldWU9PT0hMCkmJihkLnF1ZXVlPVwiZnhcIiksZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7Xy5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZfLmRlcXVldWUodGhpcyxkLnF1ZXVlKX0sZH0sXy5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoeGIpLmNzcyhcIm9wYWNpdHlcIiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9Xy5pc0VtcHR5T2JqZWN0KGEpLGY9Xy5zcGVlZChiLGMsZCksZz1mdW5jdGlvbigpe3ZhciBiPUkodGhpcyxfLmV4dGVuZCh7fSxhKSxmKTsoZXx8cmIuZ2V0KHRoaXMsXCJmaW5pc2hcIikpJiZiLnN0b3AoITApfTtyZXR1cm4gZy5maW5pc2g9ZyxlfHxmLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZi5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5zdG9wO2RlbGV0ZSBhLnN0b3AsYihjKX07cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihjPWIsYj1hLGE9dm9pZCAwKSxiJiZhIT09ITEmJnRoaXMucXVldWUoYXx8XCJmeFwiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj0hMCxlPW51bGwhPWEmJmErXCJxdWV1ZUhvb2tzXCIsZj1fLnRpbWVycyxnPXJiLmdldCh0aGlzKTtpZihlKWdbZV0mJmdbZV0uc3RvcCYmZChnW2VdKTtlbHNlIGZvcihlIGluIGcpZ1tlXSYmZ1tlXS5zdG9wJiZhYy50ZXN0KGUpJiZkKGdbZV0pO2ZvcihlPWYubGVuZ3RoO2UtLTspZltlXS5lbGVtIT09dGhpc3x8bnVsbCE9YSYmZltlXS5xdWV1ZSE9PWF8fChmW2VdLmFuaW0uc3RvcChjKSxiPSExLGYuc3BsaWNlKGUsMSkpOyhifHwhYykmJl8uZGVxdWV1ZSh0aGlzLGEpfSl9LGZpbmlzaDpmdW5jdGlvbihhKXtyZXR1cm4gYSE9PSExJiYoYT1hfHxcImZ4XCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiLGM9cmIuZ2V0KHRoaXMpLGQ9Y1thK1wicXVldWVcIl0sZT1jW2ErXCJxdWV1ZUhvb2tzXCJdLGY9Xy50aW1lcnMsZz1kP2QubGVuZ3RoOjA7Zm9yKGMuZmluaXNoPSEwLF8ucXVldWUodGhpcyxhLFtdKSxlJiZlLnN0b3AmJmUuc3RvcC5jYWxsKHRoaXMsITApLGI9Zi5sZW5ndGg7Yi0tOylmW2JdLmVsZW09PT10aGlzJiZmW2JdLnF1ZXVlPT09YSYmKGZbYl0uYW5pbS5zdG9wKCEwKSxmLnNwbGljZShiLDEpKTtmb3IoYj0wO2c+YjtiKyspZFtiXSYmZFtiXS5maW5pc2gmJmRbYl0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIGMuZmluaXNofSl9fSksXy5lYWNoKFtcInRvZ2dsZVwiLFwic2hvd1wiLFwiaGlkZVwiXSxmdW5jdGlvbihhLGIpe3ZhciBjPV8uZm5bYl07Xy5mbltiXT1mdW5jdGlvbihhLGQsZSl7cmV0dXJuIG51bGw9PWF8fFwiYm9vbGVhblwiPT10eXBlb2YgYT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoRShiLCEwKSxhLGQsZSl9fSksXy5lYWNoKHtzbGlkZURvd246RShcInNob3dcIiksc2xpZGVVcDpFKFwiaGlkZVwiKSxzbGlkZVRvZ2dsZTpFKFwidG9nZ2xlXCIpLGZhZGVJbjp7b3BhY2l0eTpcInNob3dcIn0sZmFkZU91dDp7b3BhY2l0eTpcImhpZGVcIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eTpcInRvZ2dsZVwifX0sZnVuY3Rpb24oYSxiKXtfLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0pLF8udGltZXJzPVtdLF8uZngudGljaz1mdW5jdGlvbigpe3ZhciBhLGI9MCxjPV8udGltZXJzO2ZvcihZYj1fLm5vdygpO2I8Yy5sZW5ndGg7YisrKWE9Y1tiXSxhKCl8fGNbYl0hPT1hfHxjLnNwbGljZShiLS0sMSk7Yy5sZW5ndGh8fF8uZnguc3RvcCgpLFliPXZvaWQgMH0sXy5meC50aW1lcj1mdW5jdGlvbihhKXtfLnRpbWVycy5wdXNoKGEpLGEoKT9fLmZ4LnN0YXJ0KCk6Xy50aW1lcnMucG9wKCl9LF8uZnguaW50ZXJ2YWw9MTMsXy5meC5zdGFydD1mdW5jdGlvbigpe1pifHwoWmI9c2V0SW50ZXJ2YWwoXy5meC50aWNrLF8uZnguaW50ZXJ2YWwpKX0sXy5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChaYiksWmI9bnVsbH0sXy5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sXy5mbi5kZWxheT1mdW5jdGlvbihhLGIpe3JldHVybiBhPV8uZng/Xy5meC5zcGVlZHNbYV18fGE6YSxiPWJ8fFwiZnhcIix0aGlzLnF1ZXVlKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1zZXRUaW1lb3V0KGIsYSk7Yy5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGQpfX0pfSxmdW5jdGlvbigpe3ZhciBhPVouY3JlYXRlRWxlbWVudChcImlucHV0XCIpLGI9Wi5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpLGM9Yi5hcHBlbmRDaGlsZChaLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIikpO2EudHlwZT1cImNoZWNrYm94XCIsWS5jaGVja09uPVwiXCIhPT1hLnZhbHVlLFkub3B0U2VsZWN0ZWQ9Yy5zZWxlY3RlZCxiLmRpc2FibGVkPSEwLFkub3B0RGlzYWJsZWQ9IWMuZGlzYWJsZWQsYT1aLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKSxhLnZhbHVlPVwidFwiLGEudHlwZT1cInJhZGlvXCIsWS5yYWRpb1ZhbHVlPVwidFwiPT09YS52YWx1ZX0oKTt2YXIgZGMsZWMsZmM9Xy5leHByLmF0dHJIYW5kbGU7Xy5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcWIodGhpcyxfLmF0dHIsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe18ucmVtb3ZlQXR0cih0aGlzLGEpfSl9fSksXy5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj1hLm5vZGVUeXBlO2lmKGEmJjMhPT1mJiY4IT09ZiYmMiE9PWYpcmV0dXJuIHR5cGVvZiBhLmdldEF0dHJpYnV0ZT09PXpiP18ucHJvcChhLGIsYyk6KDE9PT1mJiZfLmlzWE1MRG9jKGEpfHwoYj1iLnRvTG93ZXJDYXNlKCksZD1fLmF0dHJIb29rc1tiXXx8KF8uZXhwci5tYXRjaC5ib29sLnRlc3QoYik/ZWM6ZGMpKSx2b2lkIDA9PT1jP2QmJlwiZ2V0XCJpbiBkJiZudWxsIT09KGU9ZC5nZXQoYSxiKSk/ZTooZT1fLmZpbmQuYXR0cihhLGIpLG51bGw9PWU/dm9pZCAwOmUpOm51bGwhPT1jP2QmJlwic2V0XCJpbiBkJiZ2b2lkIDAhPT0oZT1kLnNldChhLGMsYikpP2U6KGEuc2V0QXR0cmlidXRlKGIsYytcIlwiKSxjKTp2b2lkIF8ucmVtb3ZlQXR0cihhLGIpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT0wLGY9YiYmYi5tYXRjaChuYik7aWYoZiYmMT09PWEubm9kZVR5cGUpZm9yKDtjPWZbZSsrXTspZD1fLnByb3BGaXhbY118fGMsXy5leHByLm1hdGNoLmJvb2wudGVzdChjKSYmKGFbZF09ITEpLGEucmVtb3ZlQXR0cmlidXRlKGMpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lmKCFZLnJhZGlvVmFsdWUmJlwicmFkaW9cIj09PWImJl8ubm9kZU5hbWUoYSxcImlucHV0XCIpKXt2YXIgYz1hLnZhbHVlO3JldHVybiBhLnNldEF0dHJpYnV0ZShcInR5cGVcIixiKSxjJiYoYS52YWx1ZT1jKSxifX19fX0pLGVjPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/Xy5yZW1vdmVBdHRyKGEsYyk6YS5zZXRBdHRyaWJ1dGUoYyxjKSxjfX0sXy5lYWNoKF8uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXFx3Ky9nKSxmdW5jdGlvbihhLGIpe3ZhciBjPWZjW2JdfHxfLmZpbmQuYXR0cjtmY1tiXT1mdW5jdGlvbihhLGIsZCl7dmFyIGUsZjtyZXR1cm4gZHx8KGY9ZmNbYl0sZmNbYl09ZSxlPW51bGwhPWMoYSxiLGQpP2IudG9Mb3dlckNhc2UoKTpudWxsLGZjW2JdPWYpLGV9fSk7dmFyIGdjPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2k7Xy5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcWIodGhpcyxfLnByb3AsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW18ucHJvcEZpeFthXXx8YV19KX19KSxfLmV4dGVuZCh7cHJvcEZpeDp7XCJmb3JcIjpcImh0bWxGb3JcIixcImNsYXNzXCI6XCJjbGFzc05hbWVcIn0scHJvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGc9YS5ub2RlVHlwZTtpZihhJiYzIT09ZyYmOCE9PWcmJjIhPT1nKXJldHVybiBmPTEhPT1nfHwhXy5pc1hNTERvYyhhKSxmJiYoYj1fLnByb3BGaXhbYl18fGIsZT1fLnByb3BIb29rc1tiXSksdm9pZCAwIT09Yz9lJiZcInNldFwiaW4gZSYmdm9pZCAwIT09KGQ9ZS5zZXQoYSxjLGIpKT9kOmFbYl09YzplJiZcImdldFwiaW4gZSYmbnVsbCE9PShkPWUuZ2V0KGEsYikpP2Q6YVtiXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmhhc0F0dHJpYnV0ZShcInRhYmluZGV4XCIpfHxnYy50ZXN0KGEubm9kZU5hbWUpfHxhLmhyZWY/YS50YWJJbmRleDotMX19fX0pLFkub3B0U2VsZWN0ZWR8fChfLnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxudWxsfX0pLF8uZWFjaChbXCJ0YWJJbmRleFwiLFwicmVhZE9ubHlcIixcIm1heExlbmd0aFwiLFwiY2VsbFNwYWNpbmdcIixcImNlbGxQYWRkaW5nXCIsXCJyb3dTcGFuXCIsXCJjb2xTcGFuXCIsXCJ1c2VNYXBcIixcImZyYW1lQm9yZGVyXCIsXCJjb250ZW50RWRpdGFibGVcIl0sZnVuY3Rpb24oKXtfLnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSk7dmFyIGhjPS9bXFx0XFxyXFxuXFxmXS9nO18uZm4uZXh0ZW5kKHthZGRDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaD1cInN0cmluZ1wiPT10eXBlb2YgYSYmYSxpPTAsaj10aGlzLmxlbmd0aDtpZihfLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtfKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGgpZm9yKGI9KGF8fFwiXCIpLm1hdGNoKG5iKXx8W107aj5pO2krKylpZihjPXRoaXNbaV0sZD0xPT09Yy5ub2RlVHlwZSYmKGMuY2xhc3NOYW1lPyhcIiBcIitjLmNsYXNzTmFtZStcIiBcIikucmVwbGFjZShoYyxcIiBcIik6XCIgXCIpKXtmb3IoZj0wO2U9YltmKytdOylkLmluZGV4T2YoXCIgXCIrZStcIiBcIik8MCYmKGQrPWUrXCIgXCIpO2c9Xy50cmltKGQpLGMuY2xhc3NOYW1lIT09ZyYmKGMuY2xhc3NOYW1lPWcpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaD0wPT09YXJndW1lbnRzLmxlbmd0aHx8XCJzdHJpbmdcIj09dHlwZW9mIGEmJmEsaT0wLGo9dGhpcy5sZW5ndGg7aWYoXy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Xyh0aGlzKS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihoKWZvcihiPShhfHxcIlwiKS5tYXRjaChuYil8fFtdO2o+aTtpKyspaWYoYz10aGlzW2ldLGQ9MT09PWMubm9kZVR5cGUmJihjLmNsYXNzTmFtZT8oXCIgXCIrYy5jbGFzc05hbWUrXCIgXCIpLnJlcGxhY2UoaGMsXCIgXCIpOlwiXCIpKXtmb3IoZj0wO2U9YltmKytdOylmb3IoO2QuaW5kZXhPZihcIiBcIitlK1wiIFwiKT49MDspZD1kLnJlcGxhY2UoXCIgXCIrZStcIiBcIixcIiBcIik7Zz1hP18udHJpbShkKTpcIlwiLGMuY2xhc3NOYW1lIT09ZyYmKGMuY2xhc3NOYW1lPWcpfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhO3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgYiYmXCJzdHJpbmdcIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6dGhpcy5lYWNoKF8uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihjKXtfKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsdGhpcy5jbGFzc05hbWUsYiksYil9OmZ1bmN0aW9uKCl7aWYoXCJzdHJpbmdcIj09PWMpZm9yKHZhciBiLGQ9MCxlPV8odGhpcyksZj1hLm1hdGNoKG5iKXx8W107Yj1mW2QrK107KWUuaGFzQ2xhc3MoYik/ZS5yZW1vdmVDbGFzcyhiKTplLmFkZENsYXNzKGIpO2Vsc2UoYz09PXpifHxcImJvb2xlYW5cIj09PWMpJiYodGhpcy5jbGFzc05hbWUmJnJiLnNldCh0aGlzLFwiX19jbGFzc05hbWVfX1wiLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8YT09PSExP1wiXCI6cmIuZ2V0KHRoaXMsXCJfX2NsYXNzTmFtZV9fXCIpfHxcIlwiKX0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXtmb3IodmFyIGI9XCIgXCIrYStcIiBcIixjPTAsZD10aGlzLmxlbmd0aDtkPmM7YysrKWlmKDE9PT10aGlzW2NdLm5vZGVUeXBlJiYoXCIgXCIrdGhpc1tjXS5jbGFzc05hbWUrXCIgXCIpLnJlcGxhY2UoaGMsXCIgXCIpLmluZGV4T2YoYik+PTApcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIGljPS9cXHIvZztfLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQ9Xy5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLF8odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPVwiXCI6XCJudW1iZXJcIj09dHlwZW9mIGU/ZSs9XCJcIjpfLmlzQXJyYXkoZSkmJihlPV8ubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/XCJcIjphK1wiXCJ9KSksYj1fLnZhbEhvb2tzW3RoaXMudHlwZV18fF8udmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiZcInNldFwiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLFwidmFsdWVcIil8fCh0aGlzLnZhbHVlPWUpKX0pO2lmKGUpcmV0dXJuIGI9Xy52YWxIb29rc1tlLnR5cGVdfHxfLnZhbEhvb2tzW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmXCJnZXRcImluIGImJnZvaWQgMCE9PShjPWIuZ2V0KGUsXCJ2YWx1ZVwiKSk/YzooYz1lLnZhbHVlLFwic3RyaW5nXCI9PXR5cGVvZiBjP2MucmVwbGFjZShpYyxcIlwiKTpudWxsPT1jP1wiXCI6Yyl9fX0pLF8uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9Xy5maW5kLmF0dHIoYSxcInZhbHVlXCIpO3JldHVybiBudWxsIT1iP2I6Xy50cmltKF8udGV4dChhKSl9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkPWEub3B0aW9ucyxlPWEuc2VsZWN0ZWRJbmRleCxmPVwic2VsZWN0LW9uZVwiPT09YS50eXBlfHwwPmUsZz1mP251bGw6W10saD1mP2UrMTpkLmxlbmd0aCxpPTA+ZT9oOmY/ZTowO2g+aTtpKyspaWYoYz1kW2ldLCEoIWMuc2VsZWN0ZWQmJmkhPT1lfHwoWS5vcHREaXNhYmxlZD9jLmRpc2FibGVkOm51bGwhPT1jLmdldEF0dHJpYnV0ZShcImRpc2FibGVkXCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZfLm5vZGVOYW1lKGMucGFyZW50Tm9kZSxcIm9wdGdyb3VwXCIpKSl7aWYoYj1fKGMpLnZhbCgpLGYpcmV0dXJuIGI7Zy5wdXNoKGIpfXJldHVybiBnfSxzZXQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZCxlPWEub3B0aW9ucyxmPV8ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7Zy0tOylkPWVbZ10sKGQuc2VsZWN0ZWQ9Xy5pbkFycmF5KGQudmFsdWUsZik+PTApJiYoYz0hMCk7cmV0dXJuIGN8fChhLnNlbGVjdGVkSW5kZXg9LTEpLGZ9fX19KSxfLmVhY2goW1wicmFkaW9cIixcImNoZWNrYm94XCJdLGZ1bmN0aW9uKCl7Xy52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIF8uaXNBcnJheShiKT9hLmNoZWNrZWQ9Xy5pbkFycmF5KF8oYSkudmFsKCksYik+PTA6dm9pZCAwfX0sWS5jaGVja09ufHwoXy52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpP1wib25cIjphLnZhbHVlfSl9KSxfLmVhY2goXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51XCIuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKGEsYil7Xy5mbltiXT1mdW5jdGlvbihhLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbihiLG51bGwsYSxjKTp0aGlzLnRyaWdnZXIoYil9fSksXy5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfSxiaW5kOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vbihhLG51bGwsYixjKX0sdW5iaW5kOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub2ZmKGEsbnVsbCxiKX0sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYixhLGMsZCl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihhLFwiKipcIik6dGhpcy5vZmYoYixhfHxcIioqXCIsYyl9fSk7dmFyIGpjPV8ubm93KCksa2M9L1xcPy87Xy5wYXJzZUpTT049ZnVuY3Rpb24oYSl7cmV0dXJuIEpTT04ucGFyc2UoYStcIlwiKX0sXy5wYXJzZVhNTD1mdW5jdGlvbihhKXt2YXIgYixjO2lmKCFhfHxcInN0cmluZ1wiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0cnl7Yz1uZXcgRE9NUGFyc2VyLGI9Yy5wYXJzZUZyb21TdHJpbmcoYSxcInRleHQveG1sXCIpfWNhdGNoKGQpe2I9dm9pZCAwfXJldHVybighYnx8Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShcInBhcnNlcmVycm9yXCIpLmxlbmd0aCkmJl8uZXJyb3IoXCJJbnZhbGlkIFhNTDogXCIrYSksYn07dmFyIGxjLG1jLG5jPS8jLiokLyxvYz0vKFs/Jl0pXz1bXiZdKi8scGM9L14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9nbSxxYz0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxyYz0vXig/OkdFVHxIRUFEKSQvLHNjPS9eXFwvXFwvLyx0Yz0vXihbXFx3ListXSs6KSg/OlxcL1xcLyg/OlteXFwvPyNdKkB8KShbXlxcLz8jOl0qKSg/OjooXFxkKyl8KXwpLyx1Yz17fSx2Yz17fSx3Yz1cIiovXCIuY29uY2F0KFwiKlwiKTt0cnl7bWM9bG9jYXRpb24uaHJlZn1jYXRjaCh4Yyl7bWM9Wi5jcmVhdGVFbGVtZW50KFwiYVwiKSxtYy5ocmVmPVwiXCIsbWM9bWMuaHJlZn1sYz10Yy5leGVjKG1jLnRvTG93ZXJDYXNlKCkpfHxbXSxfLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6bWMsdHlwZTpcIkdFVFwiLGlzTG9jYWw6cWMudGVzdChsY1sxXSksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOlwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsYWNjZXB0czp7XCIqXCI6d2MsdGV4dDpcInRleHQvcGxhaW5cIixodG1sOlwidGV4dC9odG1sXCIseG1sOlwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLGpzb246XCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIn0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDpcInJlc3BvbnNlWE1MXCIsdGV4dDpcInJlc3BvbnNlVGV4dFwiLGpzb246XCJyZXNwb25zZUpTT05cIn0sY29udmVydGVyczp7XCIqIHRleHRcIjpTdHJpbmcsXCJ0ZXh0IGh0bWxcIjohMCxcInRleHQganNvblwiOl8ucGFyc2VKU09OLFwidGV4dCB4bWxcIjpfLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9MKEwoYSxfLmFqYXhTZXR0aW5ncyksYik6TChfLmFqYXhTZXR0aW5ncyxhKX0sYWpheFByZWZpbHRlcjpKKHVjKSxhamF4VHJhbnNwb3J0OkoodmMpLGFqYXg6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixjLGcpe3ZhciBpLGsscixzLHUsdz1iOzIhPT10JiYodD0yLGgmJmNsZWFyVGltZW91dChoKSxkPXZvaWQgMCxmPWd8fFwiXCIsdi5yZWFkeVN0YXRlPWE+MD80OjAsaT1hPj0yMDAmJjMwMD5hfHwzMDQ9PT1hLGMmJihzPU0obCx2LGMpKSxzPU4obCxzLHYsaSksaT8obC5pZk1vZGlmaWVkJiYodT12LmdldFJlc3BvbnNlSGVhZGVyKFwiTGFzdC1Nb2RpZmllZFwiKSx1JiYoXy5sYXN0TW9kaWZpZWRbZV09dSksdT12LmdldFJlc3BvbnNlSGVhZGVyKFwiZXRhZ1wiKSx1JiYoXy5ldGFnW2VdPXUpKSwyMDQ9PT1hfHxcIkhFQURcIj09PWwudHlwZT93PVwibm9jb250ZW50XCI6MzA0PT09YT93PVwibm90bW9kaWZpZWRcIjoodz1zLnN0YXRlLGs9cy5kYXRhLHI9cy5lcnJvcixpPSFyKSk6KHI9dywoYXx8IXcpJiYodz1cImVycm9yXCIsMD5hJiYoYT0wKSkpLHYuc3RhdHVzPWEsdi5zdGF0dXNUZXh0PShifHx3KStcIlwiLGk/by5yZXNvbHZlV2l0aChtLFtrLHcsdl0pOm8ucmVqZWN0V2l0aChtLFt2LHcscl0pLHYuc3RhdHVzQ29kZShxKSxxPXZvaWQgMCxqJiZuLnRyaWdnZXIoaT9cImFqYXhTdWNjZXNzXCI6XCJhamF4RXJyb3JcIixbdixsLGk/azpyXSkscC5maXJlV2l0aChtLFt2LHddKSxqJiYobi50cmlnZ2VyKFwiYWpheENvbXBsZXRlXCIsW3YsbF0pLC0tXy5hY3RpdmV8fF8uZXZlbnQudHJpZ2dlcihcImFqYXhTdG9wXCIpKSl9XCJvYmplY3RcIj09dHlwZW9mIGEmJihiPWEsYT12b2lkIDApLGI9Ynx8e307dmFyIGQsZSxmLGcsaCxpLGosayxsPV8uYWpheFNldHVwKHt9LGIpLG09bC5jb250ZXh0fHxsLG49bC5jb250ZXh0JiYobS5ub2RlVHlwZXx8bS5qcXVlcnkpP18obSk6Xy5ldmVudCxvPV8uRGVmZXJyZWQoKSxwPV8uQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIikscT1sLnN0YXR1c0NvZGV8fHt9LHI9e30scz17fSx0PTAsdT1cImNhbmNlbGVkXCIsdj17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKDI9PT10KXtpZighZylmb3IoZz17fTtiPXBjLmV4ZWMoZik7KWdbYlsxXS50b0xvd2VyQ2FzZSgpXT1iWzJdO2I9Z1thLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT1iP251bGw6Yn0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT10P2Y6bnVsbH0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTtyZXR1cm4gdHx8KGE9c1tjXT1zW2NdfHxhLHJbYV09YiksdGhpc30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdHx8KGwubWltZVR5cGU9YSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihhKXt2YXIgYjtpZihhKWlmKDI+dClmb3IoYiBpbiBhKXFbYl09W3FbYl0sYVtiXV07ZWxzZSB2LmFsd2F5cyhhW3Yuc3RhdHVzXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe3ZhciBiPWF8fHU7cmV0dXJuIGQmJmQuYWJvcnQoYiksYygwLGIpLHRoaXN9fTtpZihvLnByb21pc2UodikuY29tcGxldGU9cC5hZGQsdi5zdWNjZXNzPXYuZG9uZSx2LmVycm9yPXYuZmFpbCxsLnVybD0oKGF8fGwudXJsfHxtYykrXCJcIikucmVwbGFjZShuYyxcIlwiKS5yZXBsYWNlKHNjLGxjWzFdK1wiLy9cIiksbC50eXBlPWIubWV0aG9kfHxiLnR5cGV8fGwubWV0aG9kfHxsLnR5cGUsbC5kYXRhVHlwZXM9Xy50cmltKGwuZGF0YVR5cGV8fFwiKlwiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKG5iKXx8W1wiXCJdLG51bGw9PWwuY3Jvc3NEb21haW4mJihpPXRjLmV4ZWMobC51cmwudG9Mb3dlckNhc2UoKSksbC5jcm9zc0RvbWFpbj0hKCFpfHxpWzFdPT09bGNbMV0mJmlbMl09PT1sY1syXSYmKGlbM118fChcImh0dHA6XCI9PT1pWzFdP1wiODBcIjpcIjQ0M1wiKSk9PT0obGNbM118fChcImh0dHA6XCI9PT1sY1sxXT9cIjgwXCI6XCI0NDNcIikpKSksbC5kYXRhJiZsLnByb2Nlc3NEYXRhJiZcInN0cmluZ1wiIT10eXBlb2YgbC5kYXRhJiYobC5kYXRhPV8ucGFyYW0obC5kYXRhLGwudHJhZGl0aW9uYWwpKSxLKHVjLGwsYix2KSwyPT09dClyZXR1cm4gdjtqPWwuZ2xvYmFsLGomJjA9PT1fLmFjdGl2ZSsrJiZfLmV2ZW50LnRyaWdnZXIoXCJhamF4U3RhcnRcIiksbC50eXBlPWwudHlwZS50b1VwcGVyQ2FzZSgpLGwuaGFzQ29udGVudD0hcmMudGVzdChsLnR5cGUpLGU9bC51cmwsbC5oYXNDb250ZW50fHwobC5kYXRhJiYoZT1sLnVybCs9KGtjLnRlc3QoZSk/XCImXCI6XCI/XCIpK2wuZGF0YSxkZWxldGUgbC5kYXRhKSxsLmNhY2hlPT09ITEmJihsLnVybD1vYy50ZXN0KGUpP2UucmVwbGFjZShvYyxcIiQxXz1cIitqYysrKTplKyhrYy50ZXN0KGUpP1wiJlwiOlwiP1wiKStcIl89XCIramMrKykpLGwuaWZNb2RpZmllZCYmKF8ubGFzdE1vZGlmaWVkW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoXCJJZi1Nb2RpZmllZC1TaW5jZVwiLF8ubGFzdE1vZGlmaWVkW2VdKSxfLmV0YWdbZV0mJnYuc2V0UmVxdWVzdEhlYWRlcihcIklmLU5vbmUtTWF0Y2hcIixfLmV0YWdbZV0pKSwobC5kYXRhJiZsLmhhc0NvbnRlbnQmJmwuY29udGVudFR5cGUhPT0hMXx8Yi5jb250ZW50VHlwZSkmJnYuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLGwuY29udGVudFR5cGUpLHYuc2V0UmVxdWVzdEhlYWRlcihcIkFjY2VwdFwiLGwuZGF0YVR5cGVzWzBdJiZsLmFjY2VwdHNbbC5kYXRhVHlwZXNbMF1dP2wuYWNjZXB0c1tsLmRhdGFUeXBlc1swXV0rKFwiKlwiIT09bC5kYXRhVHlwZXNbMF0/XCIsIFwiK3djK1wiOyBxPTAuMDFcIjpcIlwiKTpsLmFjY2VwdHNbXCIqXCJdKTtmb3IoayBpbiBsLmhlYWRlcnMpdi5zZXRSZXF1ZXN0SGVhZGVyKGssbC5oZWFkZXJzW2tdKTtpZihsLmJlZm9yZVNlbmQmJihsLmJlZm9yZVNlbmQuY2FsbChtLHYsbCk9PT0hMXx8Mj09PXQpKXJldHVybiB2LmFib3J0KCk7dT1cImFib3J0XCI7Zm9yKGsgaW57c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0pdltrXShsW2tdKTtpZihkPUsodmMsbCxiLHYpKXt2LnJlYWR5U3RhdGU9MSxqJiZuLnRyaWdnZXIoXCJhamF4U2VuZFwiLFt2LGxdKSxsLmFzeW5jJiZsLnRpbWVvdXQ+MCYmKGg9c2V0VGltZW91dChmdW5jdGlvbigpe3YuYWJvcnQoXCJ0aW1lb3V0XCIpfSxsLnRpbWVvdXQpKTt0cnl7dD0xLGQuc2VuZChyLGMpfWNhdGNoKHcpe2lmKCEoMj50KSl0aHJvdyB3O2MoLTEsdyl9fWVsc2UgYygtMSxcIk5vIFRyYW5zcG9ydFwiKTtyZXR1cm4gdn0sZ2V0SlNPTjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIF8uZ2V0KGEsYixjLFwianNvblwiKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIF8uZ2V0KGEsdm9pZCAwLGIsXCJzY3JpcHRcIil9fSksXy5lYWNoKFtcImdldFwiLFwicG9zdFwiXSxmdW5jdGlvbihhLGIpe19bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIF8uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLF8uYWpheCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0pfX0pLF8uZWFjaChbXCJhamF4U3RhcnRcIixcImFqYXhTdG9wXCIsXCJhamF4Q29tcGxldGVcIixcImFqYXhFcnJvclwiLFwiYWpheFN1Y2Nlc3NcIixcImFqYXhTZW5kXCJdLGZ1bmN0aW9uKGEsYil7Xy5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vbihiLGEpfX0pLF8uX2V2YWxVcmw9ZnVuY3Rpb24oYSl7cmV0dXJuIF8uYWpheCh7dXJsOmEsdHlwZTpcIkdFVFwiLGRhdGFUeXBlOlwic2NyaXB0XCIsYXN5bmM6ITEsZ2xvYmFsOiExLFwidGhyb3dzXCI6ITB9KX0sXy5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIF8uaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYil7Xyh0aGlzKS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pOih0aGlzWzBdJiYoYj1fKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzO2EuZmlyc3RFbGVtZW50Q2hpbGQ7KWE9YS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKSksdGhpcyl9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKF8uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihiKXtfKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9OmZ1bmN0aW9uKCl7dmFyIGI9Xyh0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1fLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXtfKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7Xy5ub2RlTmFtZSh0aGlzLFwiYm9keVwiKXx8Xyh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9fSksXy5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiBhLm9mZnNldFdpZHRoPD0wJiZhLm9mZnNldEhlaWdodDw9MH0sXy5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4hXy5leHByLmZpbHRlcnMuaGlkZGVuKGEpfTt2YXIgeWM9LyUyMC9nLHpjPS9cXFtcXF0kLyxBYz0vXFxyP1xcbi9nLEJjPS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxDYz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7Xy5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9Xy5pc0Z1bmN0aW9uKGIpP2IoKTpudWxsPT1iP1wiXCI6YixkW2QubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoYSkrXCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtpZih2b2lkIDA9PT1iJiYoYj1fLmFqYXhTZXR0aW5ncyYmXy5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLF8uaXNBcnJheShhKXx8YS5qcXVlcnkmJiFfLmlzUGxhaW5PYmplY3QoYSkpXy5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKVxufSk7ZWxzZSBmb3IoYyBpbiBhKU8oYyxhW2NdLGIsZSk7cmV0dXJuIGQuam9pbihcIiZcIikucmVwbGFjZSh5YyxcIitcIil9LF8uZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gXy5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPV8ucHJvcCh0aGlzLFwiZWxlbWVudHNcIik7cmV0dXJuIGE/Xy5tYWtlQXJyYXkoYSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBhPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhXyh0aGlzKS5pcyhcIjpkaXNhYmxlZFwiKSYmQ2MudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUJjLnRlc3QoYSkmJih0aGlzLmNoZWNrZWR8fCF5Yi50ZXN0KGEpKX0pLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPV8odGhpcykudmFsKCk7cmV0dXJuIG51bGw9PWM/bnVsbDpfLmlzQXJyYXkoYyk/Xy5tYXAoYyxmdW5jdGlvbihhKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKEFjLFwiXFxyXFxuXCIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoQWMsXCJcXHJcXG5cIil9fSkuZ2V0KCl9fSksXy5hamF4U2V0dGluZ3MueGhyPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYSl7fX07dmFyIERjPTAsRWM9e30sRmM9ezA6MjAwLDEyMjM6MjA0fSxHYz1fLmFqYXhTZXR0aW5ncy54aHIoKTthLkFjdGl2ZVhPYmplY3QmJl8oYSkub24oXCJ1bmxvYWRcIixmdW5jdGlvbigpe2Zvcih2YXIgYSBpbiBFYylFY1thXSgpfSksWS5jb3JzPSEhR2MmJlwid2l0aENyZWRlbnRpYWxzXCJpbiBHYyxZLmFqYXg9R2M9ISFHYyxfLmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIFkuY29yc3x8R2MmJiFhLmNyb3NzRG9tYWluP3tzZW5kOmZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hLnhocigpLGc9KytEYztpZihmLm9wZW4oYS50eXBlLGEudXJsLGEuYXN5bmMsYS51c2VybmFtZSxhLnBhc3N3b3JkKSxhLnhockZpZWxkcylmb3IoZSBpbiBhLnhockZpZWxkcylmW2VdPWEueGhyRmllbGRzW2VdO2EubWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlKGEubWltZVR5cGUpLGEuY3Jvc3NEb21haW58fGNbXCJYLVJlcXVlc3RlZC1XaXRoXCJdfHwoY1tcIlgtUmVxdWVzdGVkLVdpdGhcIl09XCJYTUxIdHRwUmVxdWVzdFwiKTtmb3IoZSBpbiBjKWYuc2V0UmVxdWVzdEhlYWRlcihlLGNbZV0pO2I9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7YiYmKGRlbGV0ZSBFY1tnXSxiPWYub25sb2FkPWYub25lcnJvcj1udWxsLFwiYWJvcnRcIj09PWE/Zi5hYm9ydCgpOlwiZXJyb3JcIj09PWE/ZChmLnN0YXR1cyxmLnN0YXR1c1RleHQpOmQoRmNbZi5zdGF0dXNdfHxmLnN0YXR1cyxmLnN0YXR1c1RleHQsXCJzdHJpbmdcIj09dHlwZW9mIGYucmVzcG9uc2VUZXh0P3t0ZXh0OmYucmVzcG9uc2VUZXh0fTp2b2lkIDAsZi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sZi5vbmxvYWQ9YigpLGYub25lcnJvcj1iKFwiZXJyb3JcIiksYj1FY1tnXT1iKFwiYWJvcnRcIik7dHJ5e2Yuc2VuZChhLmhhc0NvbnRlbnQmJmEuZGF0YXx8bnVsbCl9Y2F0Y2goaCl7aWYoYil0aHJvdyBofX0sYWJvcnQ6ZnVuY3Rpb24oKXtiJiZiKCl9fTp2b2lkIDB9KSxfLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OlwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIn0sY29udGVudHM6e3NjcmlwdDovKD86amF2YXxlY21hKXNjcmlwdC99LGNvbnZlcnRlcnM6e1widGV4dCBzY3JpcHRcIjpmdW5jdGlvbihhKXtyZXR1cm4gXy5nbG9iYWxFdmFsKGEpLGF9fX0pLF8uYWpheFByZWZpbHRlcihcInNjcmlwdFwiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPVwiR0VUXCIpfSksXy5hamF4VHJhbnNwb3J0KFwic2NyaXB0XCIsZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGIsYztyZXR1cm57c2VuZDpmdW5jdGlvbihkLGUpe2I9XyhcIjxzY3JpcHQ+XCIpLnByb3Aoe2FzeW5jOiEwLGNoYXJzZXQ6YS5zY3JpcHRDaGFyc2V0LHNyYzphLnVybH0pLm9uKFwibG9hZCBlcnJvclwiLGM9ZnVuY3Rpb24oYSl7Yi5yZW1vdmUoKSxjPW51bGwsYSYmZShcImVycm9yXCI9PT1hLnR5cGU/NDA0OjIwMCxhLnR5cGUpfSksWi5oZWFkLmFwcGVuZENoaWxkKGJbMF0pfSxhYm9ydDpmdW5jdGlvbigpe2MmJmMoKX19fX0pO3ZhciBIYz1bXSxJYz0vKD0pXFw/KD89JnwkKXxcXD9cXD8vO18uYWpheFNldHVwKHtqc29ucDpcImNhbGxiYWNrXCIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBhPUhjLnBvcCgpfHxfLmV4cGFuZG8rXCJfXCIramMrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLF8uYWpheFByZWZpbHRlcihcImpzb24ganNvbnBcIixmdW5jdGlvbihiLGMsZCl7dmFyIGUsZixnLGg9Yi5qc29ucCE9PSExJiYoSWMudGVzdChiLnVybCk/XCJ1cmxcIjpcInN0cmluZ1wiPT10eXBlb2YgYi5kYXRhJiYhKGIuY29udGVudFR5cGV8fFwiXCIpLmluZGV4T2YoXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIikmJkljLnRlc3QoYi5kYXRhKSYmXCJkYXRhXCIpO3JldHVybiBofHxcImpzb25wXCI9PT1iLmRhdGFUeXBlc1swXT8oZT1iLmpzb25wQ2FsbGJhY2s9Xy5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGg/YltoXT1iW2hdLnJlcGxhY2UoSWMsXCIkMVwiK2UpOmIuanNvbnAhPT0hMSYmKGIudXJsKz0oa2MudGVzdChiLnVybCk/XCImXCI6XCI/XCIpK2IuanNvbnArXCI9XCIrZSksYi5jb252ZXJ0ZXJzW1wic2NyaXB0IGpzb25cIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8Xy5lcnJvcihlK1wiIHdhcyBub3QgY2FsbGVkXCIpLGdbMF19LGIuZGF0YVR5cGVzWzBdPVwianNvblwiLGY9YVtlXSxhW2VdPWZ1bmN0aW9uKCl7Zz1hcmd1bWVudHN9LGQuYWx3YXlzKGZ1bmN0aW9uKCl7YVtlXT1mLGJbZV0mJihiLmpzb25wQ2FsbGJhY2s9Yy5qc29ucENhbGxiYWNrLEhjLnB1c2goZSkpLGcmJl8uaXNGdW5jdGlvbihmKSYmZihnWzBdKSxnPWY9dm9pZCAwfSksXCJzY3JpcHRcIik6dm9pZCAwfSksXy5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHxcInN0cmluZ1wiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDtcImJvb2xlYW5cIj09dHlwZW9mIGImJihjPWIsYj0hMSksYj1ifHxaO3ZhciBkPWdiLmV4ZWMoYSksZT0hYyYmW107cmV0dXJuIGQ/W2IuY3JlYXRlRWxlbWVudChkWzFdKV06KGQ9Xy5idWlsZEZyYWdtZW50KFthXSxiLGUpLGUmJmUubGVuZ3RoJiZfKGUpLnJlbW92ZSgpLF8ubWVyZ2UoW10sZC5jaGlsZE5vZGVzKSl9O3ZhciBKYz1fLmZuLmxvYWQ7Xy5mbi5sb2FkPWZ1bmN0aW9uKGEsYixjKXtpZihcInN0cmluZ1wiIT10eXBlb2YgYSYmSmMpcmV0dXJuIEpjLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgZCxlLGYsZz10aGlzLGg9YS5pbmRleE9mKFwiIFwiKTtyZXR1cm4gaD49MCYmKGQ9Xy50cmltKGEuc2xpY2UoaCkpLGE9YS5zbGljZSgwLGgpKSxfLmlzRnVuY3Rpb24oYik/KGM9YixiPXZvaWQgMCk6YiYmXCJvYmplY3RcIj09dHlwZW9mIGImJihlPVwiUE9TVFwiKSxnLmxlbmd0aD4wJiZfLmFqYXgoe3VybDphLHR5cGU6ZSxkYXRhVHlwZTpcImh0bWxcIixkYXRhOmJ9KS5kb25lKGZ1bmN0aW9uKGEpe2Y9YXJndW1lbnRzLGcuaHRtbChkP18oXCI8ZGl2PlwiKS5hcHBlbmQoXy5wYXJzZUhUTUwoYSkpLmZpbmQoZCk6YSl9KS5jb21wbGV0ZShjJiZmdW5jdGlvbihhLGIpe2cuZWFjaChjLGZ8fFthLnJlc3BvbnNlVGV4dCxiLGFdKX0pLHRoaXN9LF8uZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGEpe3JldHVybiBfLmdyZXAoXy50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19KS5sZW5ndGh9O3ZhciBLYz1hLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtfLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPV8uY3NzKGEsXCJwb3NpdGlvblwiKSxsPV8oYSksbT17fTtcInN0YXRpY1wiPT09ayYmKGEuc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiKSxoPWwub2Zmc2V0KCksZj1fLmNzcyhhLFwidG9wXCIpLGk9Xy5jc3MoYSxcImxlZnRcIiksaj0oXCJhYnNvbHV0ZVwiPT09a3x8XCJmaXhlZFwiPT09aykmJihmK2kpLmluZGV4T2YoXCJhdXRvXCIpPi0xLGo/KGQ9bC5wb3NpdGlvbigpLGc9ZC50b3AsZT1kLmxlZnQpOihnPXBhcnNlRmxvYXQoZil8fDAsZT1wYXJzZUZsb2F0KGkpfHwwKSxfLmlzRnVuY3Rpb24oYikmJihiPWIuY2FsbChhLGMsaCkpLG51bGwhPWIudG9wJiYobS50b3A9Yi50b3AtaC50b3ArZyksbnVsbCE9Yi5sZWZ0JiYobS5sZWZ0PWIubGVmdC1oLmxlZnQrZSksXCJ1c2luZ1wiaW4gYj9iLnVzaW5nLmNhbGwoYSxtKTpsLmNzcyhtKX19LF8uZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24oYSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09YT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihiKXtfLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7dmFyIGIsYyxkPXRoaXNbMF0sZT17dG9wOjAsbGVmdDowfSxmPWQmJmQub3duZXJEb2N1bWVudDtpZihmKXJldHVybiBiPWYuZG9jdW1lbnRFbGVtZW50LF8uY29udGFpbnMoYixkKT8odHlwZW9mIGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0IT09emImJihlPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLGM9UChmKSx7dG9wOmUudG9wK2MucGFnZVlPZmZzZXQtYi5jbGllbnRUb3AsbGVmdDplLmxlZnQrYy5wYWdlWE9mZnNldC1iLmNsaWVudExlZnR9KTplfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBhLGIsYz10aGlzWzBdLGQ9e3RvcDowLGxlZnQ6MH07cmV0dXJuXCJmaXhlZFwiPT09Xy5jc3MoYyxcInBvc2l0aW9uXCIpP2I9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooYT10aGlzLm9mZnNldFBhcmVudCgpLGI9dGhpcy5vZmZzZXQoKSxfLm5vZGVOYW1lKGFbMF0sXCJodG1sXCIpfHwoZD1hLm9mZnNldCgpKSxkLnRvcCs9Xy5jc3MoYVswXSxcImJvcmRlclRvcFdpZHRoXCIsITApLGQubGVmdCs9Xy5jc3MoYVswXSxcImJvcmRlckxlZnRXaWR0aFwiLCEwKSkse3RvcDpiLnRvcC1kLnRvcC1fLmNzcyhjLFwibWFyZ2luVG9wXCIsITApLGxlZnQ6Yi5sZWZ0LWQubGVmdC1fLmNzcyhjLFwibWFyZ2luTGVmdFwiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fEtjO2EmJiFfLm5vZGVOYW1lKGEsXCJodG1sXCIpJiZcInN0YXRpY1wiPT09Xy5jc3MoYSxcInBvc2l0aW9uXCIpOylhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxLY30pfX0pLF8uZWFjaCh7c2Nyb2xsTGVmdDpcInBhZ2VYT2Zmc2V0XCIsc2Nyb2xsVG9wOlwicGFnZVlPZmZzZXRcIn0sZnVuY3Rpb24oYixjKXt2YXIgZD1cInBhZ2VZT2Zmc2V0XCI9PT1jO18uZm5bYl09ZnVuY3Rpb24oZSl7cmV0dXJuIHFiKHRoaXMsZnVuY3Rpb24oYixlLGYpe3ZhciBnPVAoYik7cmV0dXJuIHZvaWQgMD09PWY/Zz9nW2NdOmJbZV06dm9pZChnP2cuc2Nyb2xsVG8oZD9hLnBhZ2VYT2Zmc2V0OmYsZD9mOmEucGFnZVlPZmZzZXQpOmJbZV09Zil9LGIsZSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pLF8uZWFjaChbXCJ0b3BcIixcImxlZnRcIl0sZnVuY3Rpb24oYSxiKXtfLmNzc0hvb2tzW2JdPXcoWS5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGM/KGM9dihhLGIpLFFiLnRlc3QoYyk/XyhhKS5wb3NpdGlvbigpW2JdK1wicHhcIjpjKTp2b2lkIDB9KX0pLF8uZWFjaCh7SGVpZ2h0OlwiaGVpZ2h0XCIsV2lkdGg6XCJ3aWR0aFwifSxmdW5jdGlvbihhLGIpe18uZWFjaCh7cGFkZGluZzpcImlubmVyXCIrYSxjb250ZW50OmIsXCJcIjpcIm91dGVyXCIrYX0sZnVuY3Rpb24oYyxkKXtfLmZuW2RdPWZ1bmN0aW9uKGQsZSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aCYmKGN8fFwiYm9vbGVhblwiIT10eXBlb2YgZCksZz1jfHwoZD09PSEwfHxlPT09ITA/XCJtYXJnaW5cIjpcImJvcmRlclwiKTtyZXR1cm4gcWIodGhpcyxmdW5jdGlvbihiLGMsZCl7dmFyIGU7cmV0dXJuIF8uaXNXaW5kb3coYik/Yi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbXCJjbGllbnRcIithXTo5PT09Yi5ub2RlVHlwZT8oZT1iLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChiLmJvZHlbXCJzY3JvbGxcIithXSxlW1wic2Nyb2xsXCIrYV0sYi5ib2R5W1wib2Zmc2V0XCIrYV0sZVtcIm9mZnNldFwiK2FdLGVbXCJjbGllbnRcIithXSkpOnZvaWQgMD09PWQ/Xy5jc3MoYixjLGcpOl8uc3R5bGUoYixjLGQsZyl9LGIsZj9kOnZvaWQgMCxmLG51bGwpfX0pfSksXy5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxfLmZuLmFuZFNlbGY9Xy5mbi5hZGRCYWNrLFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKFwianF1ZXJ5XCIsW10sZnVuY3Rpb24oKXtyZXR1cm4gX30pO3ZhciBMYz1hLmpRdWVyeSxNYz1hLiQ7cmV0dXJuIF8ubm9Db25mbGljdD1mdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09XyYmKGEuJD1NYyksYiYmYS5qUXVlcnk9PT1fJiYoYS5qUXVlcnk9TGMpLF99LHR5cGVvZiBiPT09emImJihhLmpRdWVyeT1hLiQ9XyksX30pO1xuIiwi77u/ZnVuY3Rpb24gR2V0Rm9ybVhtbChjb250YWluZXIpIHtcclxuICAgIC8vIFRoaXMgaXMgYW4gYXV0byBnZW5lcmF0ZWQgZmllbGQgdG8gYmxvY2sgc2NyaXB0L3Byb2dyYW1zIHRvIHN1Ym1pdCBmb3JtIGF1dG9tYXRpY2FsbHkuIFxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkVsZW1lbnQgTGVuZ3RoOlwiICsgJChjb250YWluZXIpLmZpbmQoJCgnaW5wdXRbaWRePVwidHh0RmF4SW5mb1wiXScpKS5sZW5ndGgpO1xyXG4gICAgaWYgKCQoY29udGFpbmVyKS5maW5kKCQoJ2lucHV0W2lkXj1cInR4dEZheEluZm9cIl0nKSkubGVuZ3RoID4gMCAmJiAkKGNvbnRhaW5lcikuZmluZCgkKCdpbnB1dFtpZF49XCJ0eHRGYXhJbmZvXCJdJykpLnZhbCgpICE9ICcnKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICB2YXIgX2VudGl0eVhtbCA9IFtdO1xyXG4gICAgdmFyIF90ZW1wWG1sID0gJyc7XHJcbiAgICB2YXIgX3RlbXBWYWx1ZSA9ICcnO1xyXG4gICAgdmFyIF90ZW1wTGFiZWwgPSAnJztcclxuICAgIHZhciBfaXNWYWxpZGF0ZWQgPSB0cnVlO1xyXG5cclxuICAgICQoY29udGFpbmVyKS5maW5kKCcqW0Zvcm1Ob2RlPVwidHJ1ZVwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIF90ZW1wVmFsdWUgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKCQodGhpcykuYXR0cigndHlwZScpID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgICAgdmFyIF9kZWxpbWl0ZXIgPSAnJztcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICgkKGNvbnRhaW5lcikuZmluZCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW25hbWU9XCInICsgJCh0aGlzKS5hdHRyKCduYW1lJykgKyAnXCJdOmNoZWNrZWQnKS5sZW5ndGggPiAxKSBfZGVsaW1pdGVyID0gJzsnO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsgfVxyXG4gICAgICAgICAgICAkKGNvbnRhaW5lcikuZmluZCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW25hbWU9XCInICsgJCh0aGlzKS5hdHRyKCduYW1lJykgKyAnXCJdOmNoZWNrZWQnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIF90ZW1wVmFsdWUgPSBfdGVtcFZhbHVlICsgJCh0aGlzKS52YWwoKSArIF9kZWxpbWl0ZXI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoJCh0aGlzKS5hdHRyKCd0eXBlJykgPT0gJ3JhZGlvJykge1xyXG4gICAgICAgICAgICBpZiAoJCh0aGlzKS5pcygnOmNoZWNrZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgX3RlbXBWYWx1ZSA9ICQodGhpcykudmFsKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKCQodGhpcykuYXR0cignY2FwdGNoYScpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2NhcHRjaGEgPSAnJztcclxuICAgICAgICAgICAgICAgIHZhciAkY2FwdGNoYSA9ICQodGhpcykuY2xvc2VzdCgnLmNhcHRjaGEnKS5maW5kKCdbY2FwdGNoYS12YWx1ZV0nKTtcclxuICAgICAgICAgICAgICAgIF9jYXB0Y2hhID0gJzxDYXB0Y2hhVmFsaWRhdG9yIElEPVwiJyArICRjYXB0Y2hhLmF0dHIoJ2NhcHRjaGEtaWQnKSArICdcIj4nICsgJCh0aGlzKS52YWwoKSArICc8L0NhcHRjaGFWYWxpZGF0b3I+JztcclxuICAgICAgICAgICAgICAgIGlmIChNRDUoJCh0aGlzKS52YWwoKSkudG9Mb3dlckNhc2UoKSAhPSAkY2FwdGNoYS5hdHRyKCdjYXB0Y2hhLXZhbHVlJykudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pc1ZhbGlkYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQodGhpcykuYXR0cignRm9ybU1lc3NhZ2UnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgX2VudGl0eVhtbFtcIkNhcHRjaGFcIl0gPSBfY2FwdGNoYTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyBfaXNWYWxpZGF0ZWQgPSBmYWxzZTsgYWxlcnQoZSk7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIF90ZW1wVmFsdWUgPSAkKHRoaXMpLnZhbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzTnVsbE9yRW1wdHkoX3RlbXBWYWx1ZSkpIHtcclxuICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cignUmVxdWlyZWQnKSA9PSAndHJ1ZScgfHwgJCh0aGlzKS5hdHRyKCdSZXF1aXJlZCcpID09ICdyZXF1aXJlZCcpIHtcclxuICAgICAgICAgICAgICAgIF9pc1ZhbGlkYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJCh0aGlzKS5hdHRyKCdGb3JtTWVzc2FnZScpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ0Zvcm1UeXBlJykgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ0Zvcm1UeXBlJykgPT0gJ0VtYWlsJyAmJiAhaXNWYWxpZEVtYWlsKF90ZW1wVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2lzVmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCh0aGlzKS5hdHRyKCdGb3JtTWVzc2FnZScpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JFbXB0eSgkKHRoaXMpLmF0dHIoJ01pbkxlbmd0aCcpKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KCQodGhpcykuYXR0cignTWluTGVuZ3RoJykpID4gX3RlbXBWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBfaXNWYWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydCgkKHRoaXMpLmF0dHIoJ0Zvcm1NZXNzYWdlJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzTnVsbE9yRW1wdHkoJCh0aGlzKS5hdHRyKCdFbnRpdHknKSkpIHJldHVybjtcclxuICAgICAgICBpZiAoaXNOdWxsT3JFbXB0eSgkKHRoaXMpLmF0dHIoJ05vZGUnKSkpIHJldHVybjtcclxuICAgICAgICBfdGVtcFhtbCA9IF9lbnRpdHlYbWxbJCh0aGlzKS5hdHRyKCdFbnRpdHknKV07XHJcbiAgICAgICAgaWYgKGlzTnVsbE9yRW1wdHkoX3RlbXBYbWwpKSBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkoX3RlbXBWYWx1ZSkpIHtcclxuICAgICAgICAgICAgX3RlbXBWYWx1ZSA9IF90ZW1wVmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkoJCh0aGlzKS5hdHRyKCdsYWJlbCcpKSkgX3RlbXBMYWJlbCA9ICcgbGFiZWw9XCInICsgJCh0aGlzKS5hdHRyKCdsYWJlbCcpICsgJ1wiICc7IGVsc2UgX3RlbXBMYWJlbCA9ICcnO1xyXG4gICAgICAgICAgICBfdGVtcFhtbCA9ICc8JyArICQodGhpcykuYXR0cignTm9kZScpICsgX3RlbXBMYWJlbCArICc+JyArICgkKHRoaXMpLmF0dHIoJ2RhdGEtYWdvcmEtdHlwZScpICE9ICd4bWwnID8gJzwhW0NEQVRBWycgKyBfdGVtcFZhbHVlICsgJ11dPicgOiBfdGVtcFZhbHVlKSArICc8LycgKyAkKHRoaXMpLmF0dHIoJ05vZGUnKSArICc+JztcclxuICAgICAgICAgICAgX2VudGl0eVhtbFskKHRoaXMpLmF0dHIoJ0VudGl0eScpXSArPSBfdGVtcFhtbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCQodGhpcykuYXR0cignRW50aXR5JykgPT09ICdMZWFkJykge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gbmV3IFVSTChjdXJyZW50VXJsKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHVybC5zZWFyY2gpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5oYXMoXCJ1dG1fdGVybVwiKSkge1xyXG4gICAgICAgICAgICAgICAgX3RlbXBWYWx1ZSA9IHBhcmFtcy5nZXQoXCJ1dG1fdGVybVwiKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBfdGVtcExhYmVsID0gJyBsYWJlbD1cIlVUTSBUZXJtXCIgJztcclxuICAgICAgICAgICAgICAgIF90ZW1wWG1sID0gJzxVVE1UZXJtJyArIF90ZW1wTGFiZWwgKyAnPicgKyAoJCh0aGlzKS5hdHRyKCdkYXRhLWFnb3JhLXR5cGUnKSAhPSAneG1sJyA/ICc8IVtDREFUQVsnICsgX3RlbXBWYWx1ZSArICddXT4nIDogX3RlbXBWYWx1ZSkgKyAnPC9VVE1UZXJtPic7XHJcbiAgICAgICAgICAgICAgICBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldICs9IF90ZW1wWG1sO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMuaGFzKFwidG1fY29ycF9wYXJ0bmVyXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFZhbHVlID0gcGFyYW1zLmdldChcInRtX2NvcnBfcGFydG5lclwiKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBfdGVtcExhYmVsID0gJyBsYWJlbD1cIkNvcnBvcmF0ZSBQYXJ0bmVyXCIgJztcclxuICAgICAgICAgICAgICAgIF90ZW1wWG1sID0gJzxDb3Jwb3JhdGVQYXJ0bmVyJyArIF90ZW1wTGFiZWwgKyAnPicgKyAoJCh0aGlzKS5hdHRyKCdkYXRhLWFnb3JhLXR5cGUnKSAhPSAneG1sJyA/ICc8IVtDREFUQVsnICsgX3RlbXBWYWx1ZSArICddXT4nIDogX3RlbXBWYWx1ZSkgKyAnPC9Db3Jwb3JhdGVQYXJ0bmVyPic7XHJcbiAgICAgICAgICAgICAgICBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldICs9IF90ZW1wWG1sO1xyXG4gICAgICAgICAgICB9IGlmIChwYXJhbXMuaGFzKFwidXRtX2NhbXBhaWduXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFZhbHVlID0gcGFyYW1zLmdldChcInV0bV9jYW1wYWlnblwiKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBfdGVtcExhYmVsID0gJyBsYWJlbD1cIlVUTSBDYW1wYWlnblwiICc7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFhtbCA9ICc8VVRNQ2FtcGFpZ24nICsgX3RlbXBMYWJlbCArICc+JyArICgkKHRoaXMpLmF0dHIoJ2RhdGEtYWdvcmEtdHlwZScpICE9ICd4bWwnID8gJzwhW0NEQVRBWycgKyBfdGVtcFZhbHVlICsgJ11dPicgOiBfdGVtcFZhbHVlKSArICc8L1VUTUNhbXBhaWduPic7XHJcbiAgICAgICAgICAgICAgICBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldICs9IF90ZW1wWG1sO1xyXG4gICAgICAgICAgICB9IGlmIChwYXJhbXMuaGFzKFwidXRtX2NvbnRlbnRcIikpIHtcclxuICAgICAgICAgICAgICAgIF90ZW1wVmFsdWUgPSBwYXJhbXMuZ2V0KFwidXRtX2NvbnRlbnRcIikudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgX3RlbXBMYWJlbCA9ICcgbGFiZWw9XCJVVE0gQ29udGVudFwiICc7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFhtbCA9ICc8VVRNQ29udGVudCcgKyBfdGVtcExhYmVsICsgJz4nICsgKCQodGhpcykuYXR0cignZGF0YS1hZ29yYS10eXBlJykgIT0gJ3htbCcgPyAnPCFbQ0RBVEFbJyArIF90ZW1wVmFsdWUgKyAnXV0+JyA6IF90ZW1wVmFsdWUpICsgJzwvVVRNQ29udGVudD4nO1xyXG4gICAgICAgICAgICAgICAgX2VudGl0eVhtbFskKHRoaXMpLmF0dHIoJ0VudGl0eScpXSArPSBfdGVtcFhtbDtcclxuICAgICAgICAgICAgfSBpZiAocGFyYW1zLmhhcyhcInV0bV9tZWRpdW1cIikpIHtcclxuICAgICAgICAgICAgICAgIF90ZW1wVmFsdWUgPSBwYXJhbXMuZ2V0KFwidXRtX21lZGl1bVwiKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBfdGVtcExhYmVsID0gJyBsYWJlbD1cIlVUTSBNZWRpdW1cIiAnO1xyXG4gICAgICAgICAgICAgICAgX3RlbXBYbWwgPSAnPFVUTU1lZGl1bScgKyBfdGVtcExhYmVsICsgJz4nICsgKCQodGhpcykuYXR0cignZGF0YS1hZ29yYS10eXBlJykgIT0gJ3htbCcgPyAnPCFbQ0RBVEFbJyArIF90ZW1wVmFsdWUgKyAnXV0+JyA6IF90ZW1wVmFsdWUpICsgJzwvVVRNTWVkaXVtPic7XHJcbiAgICAgICAgICAgICAgICBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldICs9IF90ZW1wWG1sO1xyXG4gICAgICAgICAgICB9IGlmIChwYXJhbXMuaGFzKFwidXRtX3NvdXJjZVwiKSkge1xyXG4gICAgICAgICAgICAgICAgX3RlbXBWYWx1ZSA9IHBhcmFtcy5nZXQoXCJ1dG1fc291cmNlXCIpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIF90ZW1wTGFiZWwgPSAnIGxhYmVsPVwiVVRNIFNvdXJjZVwiICc7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFhtbCA9ICc8VVRNU291cmNlJyArIF90ZW1wTGFiZWwgKyAnPicgKyAoJCh0aGlzKS5hdHRyKCdkYXRhLWFnb3JhLXR5cGUnKSAhPSAneG1sJyA/ICc8IVtDREFUQVsnICsgX3RlbXBWYWx1ZSArICddXT4nIDogX3RlbXBWYWx1ZSkgKyAnPC9VVE1Tb3VyY2U+JztcclxuICAgICAgICAgICAgICAgIF9lbnRpdHlYbWxbJCh0aGlzKS5hdHRyKCdFbnRpdHknKV0gKz0gX3RlbXBYbWw7XHJcbiAgICAgICAgICAgIH0gaWYgKHBhcmFtcy5oYXMoXCJ1dG1fdGVybVwiKSkge1xyXG4gICAgICAgICAgICAgICAgX3RlbXBWYWx1ZSA9IHBhcmFtcy5nZXQoXCJ1dG1fdGVybVwiKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBfdGVtcExhYmVsID0gJyBsYWJlbD1cIlVUTSBUZXJtXCIgJztcclxuICAgICAgICAgICAgICAgIF90ZW1wWG1sID0gJzxVVE1UZXJtJyArIF90ZW1wTGFiZWwgKyAnPicgKyAoJCh0aGlzKS5hdHRyKCdkYXRhLWFnb3JhLXR5cGUnKSAhPSAneG1sJyA/ICc8IVtDREFUQVsnICsgX3RlbXBWYWx1ZSArICddXT4nIDogX3RlbXBWYWx1ZSkgKyAnPC9VVE1UZXJtPic7XHJcbiAgICAgICAgICAgICAgICBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldICs9IF90ZW1wWG1sO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFfaXNWYWxpZGF0ZWQpIHJldHVybiBudWxsO1xyXG5cclxuICAgIHZhciBfZm9ybVhtbCA9ICc8ZD4nO1xyXG4gICAgZm9yIChwID0gMDsgcCA8IE9iamVjdC5rZXlzKF9lbnRpdHlYbWwpLmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgX2Zvcm1YbWwgKz0gJzwnICsgT2JqZWN0LmtleXMoX2VudGl0eVhtbClbcF0gKyAnPicgKyBfZW50aXR5WG1sW09iamVjdC5rZXlzKF9lbnRpdHlYbWwpW3BdXSArICc8LycgKyBPYmplY3Qua2V5cyhfZW50aXR5WG1sKVtwXSArICc+JztcclxuICAgIH1cclxuICAgIF9mb3JtWG1sICs9ICc8L2Q+JztcclxuXHJcbiAgICByZXR1cm4gZXNjYXBlKF9mb3JtWG1sKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29tcG9zZVVybFF1ZXJ5KG9wdGlvbnMpIHtcclxuICAgIC8vY29uc29sZS5sb2coJ1N0YXJ0ZWQgLi4uJyk7XHJcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsKVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIHZhciB1cmxRdWVyeSA9ICcnO1xyXG4gICAgdmFyIF91cmxRdWVyeVRyYXZlcnNlID0gbmV3IE9iamVjdCgpO1xyXG5cclxuICAgIHZhciAkY29udHJvbHMgPSAkKG9wdGlvbnMuc2VsZWN0KS5hZGQoJChvcHRpb25zLnNlbGVjdCkuZmluZCgnW3VybGlkZW50aWZpZXJdJykpO1xyXG4gICAgaWYgKG9wdGlvbnMubm9uc2VsZWN0ICE9IHVuZGVmaW5lZCAmJiBvcHRpb25zLm5vbnNlbGVjdCAhPSBudWxsKVxyXG4gICAgICAgICRjb250cm9scyA9ICQoJGNvbnRyb2xzKS5ub3Qob3B0aW9ucy5ub25zZWxlY3QpO1xyXG5cclxuICAgIHZhciAkdHJhdmVyc2VkQ29udHJvbHMgPSAkKCk7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdDb250cm9scyBmZXRjaCBzdGFydGVkIC4uLicpO1xyXG4gICAgJCgkY29udHJvbHMpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfcXVlcnlEYXRhID0gX2dldFF1ZXJ5RGF0YUZvckZpZWxkKHRoaXMsICRjb250cm9scywgJHRyYXZlcnNlZENvbnRyb2xzKTtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdRRDonICsgSlNPTi5zdHJpbmdpZnkoX3F1ZXJ5RGF0YSkpO1xyXG4gICAgICAgIF9hZGRUb1F1ZXJ5T2JqZWN0KF9xdWVyeURhdGEsIF91cmxRdWVyeVRyYXZlcnNlKTtcclxuICAgIH0pO1xyXG4gICAgLy9jb25zb2xlLmxvZygnQ29udHJvbHMgZmV0Y2ggY29tcGxldGVkIC4uLicpO1xyXG4gICAgdXJsUXVlcnkgPSBfZ2V0VXJsUXVlcnlGcm9tUXVlcnlPYmplY3QoX3VybFF1ZXJ5VHJhdmVyc2UpO1xyXG5cclxuICAgIGlmIChvcHRpb25zLmFkZGl0aW9uYWwgIT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuYWRkaXRpb25hbCAhPSBudWxsKVxyXG4gICAgICAgIHJldHVybiBvcHRpb25zLmFkZGl0aW9uYWwodXJsUXVlcnkpO1xyXG5cclxuICAgIHJldHVybiB1cmxRdWVyeTtcclxuXHJcbiAgICBmdW5jdGlvbiBfYWRkVG9RdWVyeU9iamVjdChxdWVyeURhdGEsIHVybFF1ZXJ5VHJhdmVyc2UpIHtcclxuICAgICAgICBpZiAocXVlcnlEYXRhID09IG51bGwpIHJldHVybjtcclxuICAgICAgICBpZiAocXVlcnlEYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHF1ZXJ5RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgX2FkZFF1ZXJ5RGF0YVRvUXVlcnlPYmplY3QocXVlcnlEYXRhW2tleV0sIHVybFF1ZXJ5VHJhdmVyc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgX2FkZFF1ZXJ5RGF0YVRvUXVlcnlPYmplY3QocXVlcnlEYXRhLCB1cmxRdWVyeVRyYXZlcnNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gX2FkZFF1ZXJ5RGF0YVRvUXVlcnlPYmplY3QocXVlcnlEYXRhLCB1cmxRdWVyeVRyYXZlcnNlKSB7XHJcbiAgICAgICAgaWYgKHF1ZXJ5RGF0YSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHVybFF1ZXJ5VHJhdmVyc2VbcXVlcnlEYXRhLlVybElkZW50aWZpZXJdID09IG51bGwpIHtcclxuICAgICAgICAgICAgdXJsUXVlcnlUcmF2ZXJzZVtxdWVyeURhdGEuVXJsSWRlbnRpZmllcl0gPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdXJsUXVlcnlUcmF2ZXJzZVtxdWVyeURhdGEuVXJsSWRlbnRpZmllcl0ucHVzaChxdWVyeURhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIF9nZXRVcmxRdWVyeUZyb21RdWVyeU9iamVjdCh1cmxRdWVyeVRyYXZlcnNlKSB7XHJcbiAgICAgICAgdmFyIF91cmxxdWVyeSA9ICcnO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB1cmxRdWVyeVRyYXZlcnNlKSB7XHJcbiAgICAgICAgICAgIHZhciBfaXNWYWx1ZU9ubHkgPSAoa2V5LnRvTG93ZXJDYXNlKCkgPT0gJ3skdmFsdWV9Jyk7XHJcbiAgICAgICAgICAgIHZhciBfdmFsdWVTZXBlcmF0b3IgPSBfaXNWYWx1ZU9ubHkgPyAnLycgOiAnOyc7XHJcbiAgICAgICAgICAgIHZhciBfdmFsdWVTdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgdmFyIE1pbk1heE9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN1YktleSBpbiB1cmxRdWVyeVRyYXZlcnNlW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAnbWluJyB8fCB1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAnbWF4Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChNaW5NYXhPYmplY3QgPT0gbnVsbCkgTWluTWF4T2JqZWN0ID0geyBNaW46IDAsIE1heDogMCB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAnbWluJykgTWluTWF4T2JqZWN0Lk1pbiA9IHVybFF1ZXJ5VHJhdmVyc2Vba2V5XVtzdWJLZXldLlZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAnbWF4JykgTWluTWF4T2JqZWN0Lk1heCA9IHVybFF1ZXJ5VHJhdmVyc2Vba2V5XVtzdWJLZXldLlZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAndGhlcycpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdmFsdWVTdHJpbmcgPSB1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5WYWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1teMC05QS16XFxcXC5dL2csICc7Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8ucmVwbGFjZSgvOysvZywgJzsnKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfdmFsdWVTdHJpbmcgKz0gdXJsUXVlcnlUcmF2ZXJzZVtrZXldW3N1YktleV0uVmFsdWUudG9TdHJpbmcoKSArICh1cmxRdWVyeVRyYXZlcnNlW2tleV0ubGVuZ3RoID4gMSAmJiB1cmxRdWVyeVRyYXZlcnNlW2tleV0ubGVuZ3RoIC0gMSA+IHN1YktleSA/IF92YWx1ZVNlcGVyYXRvciA6ICcnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoTWluTWF4T2JqZWN0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfaXNWYWx1ZU9ubHkpXHJcbiAgICAgICAgICAgICAgICAgICAgX3VybHF1ZXJ5ID0gJy8nICsgTWluTWF4T2JqZWN0Lk1pbiArIChNaW5NYXhPYmplY3QuTWF4ICE9IDAgPyAoJy0nICsgTWluTWF4T2JqZWN0Lk1heCkgOiAnJykgKyBfdXJscXVlcnk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgX3VybHF1ZXJ5ICs9ICcvJyArIGtleSArICctJyArIE1pbk1heE9iamVjdC5NaW4gKyAoTWluTWF4T2JqZWN0Lk1heCAhPSAwID8gKCctJyArIE1pbk1heE9iamVjdC5NYXgpIDogJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9pc1ZhbHVlT25seSlcclxuICAgICAgICAgICAgICAgICAgICBfdXJscXVlcnkgPSAnLycgKyBfdmFsdWVTdHJpbmcgKyBfdXJscXVlcnk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgX3VybHF1ZXJ5ICs9ICcvJyArIGtleSArICctJyArIF92YWx1ZVN0cmluZztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF91cmxxdWVyeTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfZ2V0UXVlcnlEYXRhRm9yT25lU2VhcmNoKHNlbmRlciwgY29udHJvbHMsIHRyYXZlcnNlZENvbnRyb2xzKSB7XHJcblxyXG4gICAgICAgIHZhciBfcXVlcnlEYXRhRm9yT25lU2VhcmNoID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgJChzZW5kZXIpLnBhcmVudCgpLmZpbmQoJ1tvbmVzZWFyY2hpZGVudGlmaWVyXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgX3F1ZXJ5RGF0YSA9IF9nZXRRdWVyeURhdGFWYWx1ZUZvckZpZWxkKHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAoX3F1ZXJ5RGF0YSAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgX3F1ZXJ5RGF0YUZvck9uZVNlYXJjaC5wdXNoKF9xdWVyeURhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChfcXVlcnlEYXRhRm9yT25lU2VhcmNoLmxlbmd0aCA9PSAwIHx8IF9jaGVja09uZVNlYXJjaElzTXVsdGlTZWxlY3Qoc2VuZGVyKSlcclxuICAgICAgICAgICAgaWYgKF9pc05vdE51bGxPckVtcHR5KHNlbmRlcikpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfb25lU2VhcmNoVGV4dFNlYXJjaCA9IF9nZXRRdWVyeURhdGFWYWx1ZUZvckZpZWxkKHNlbmRlcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX29uZVNlYXJjaFRleHRTZWFyY2g7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3F1ZXJ5RGF0YUZvck9uZVNlYXJjaDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfY2hlY2tPbmVTZWFyY2hJc011bHRpU2VsZWN0KHNlbmRlcikge1xyXG4gICAgICAgIHJldHVybiBzZW5kZXIgIT0gbnVsbCAmJiAkKHNlbmRlcikuYXR0cignbXVsdGlzZWxlY3Rib3hpZCcpICE9IHVuZGVmaW5lZCAmJiAkKHNlbmRlcikuYXR0cignbXVsdGlzZWxlY3Rib3hpZCcpICE9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gX2dldFF1ZXJ5RGF0YUZvckZpZWxkKHNlbmRlciwgY29udHJvbHMsIHRyYXZlcnNlZENvbnRyb2xzKSB7XHJcbiAgICAgICAgaWYgKCQoc2VuZGVyKS5hdHRyKFwib25lc2VhcmNobmFtZVwiKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfZ2V0UXVlcnlEYXRhRm9yT25lU2VhcmNoKHNlbmRlciwgY29udHJvbHMsIHRyYXZlcnNlZENvbnRyb2xzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCQodHJhdmVyc2VkQ29udHJvbHMpLmZpbmQoc2VuZGVyKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgdHJhdmVyc2VkQ29udHJvbHMgPSB0cmF2ZXJzZWRDb250cm9scy5hZGQoc2VuZGVyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0UXVlcnlEYXRhVmFsdWVGb3JGaWVsZChzZW5kZXIpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IGNvbnNvbGUubG9nKCdFcnJvciBGb3IgRmllbGQnKTsgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfZ2V0UXVlcnlEYXRhVmFsdWVGb3JGaWVsZChzZW5kZXIpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoIV9pc05vdE51bGxPckVtcHR5KHNlbmRlcikpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBGb3IgRmllbGQgVmFsdWUgQ2hlY2s6JyArICQoc2VuZGVyKS5hdHRyKFwidHlwZVwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IFVybElkZW50aWZpZXI6ICgkKHNlbmRlcikuYXR0cigndXJsaWRlbnRpZmllcicpICE9IG51bGwgPyAkKHNlbmRlcikuYXR0cigndXJsaWRlbnRpZmllcicpIDogJChzZW5kZXIpLmF0dHIoJ29uZXNlYXJjaGlkZW50aWZpZXInKSksIFZhbHVlOiBfZ2V0VmFsdWUoc2VuZGVyKSwgT3BlcmF0aW9uOiAoJChzZW5kZXIpLmF0dHIoJ29wZXJhdGlvbicpICE9IG51bGwgPyAkKHNlbmRlcikuYXR0cignb3BlcmF0aW9uJykgOiAnJykgfTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBGb3IgRmllbGQgVmFsdWU6JyArICQoc2VuZGVyKS5wcm9wKFwidGFnTmFtZVwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIF9nZXRWYWx1ZShzZW5kZXIpIHtcclxuICAgICAgICB2YXIgX3ZhbHVlID0gJChzZW5kZXIpLnZhbCgpO1xyXG4gICAgICAgIHZhciBfaXNPbmVTZWFyY2ggPSB0eXBlb2YgKCQoc2VuZGVyKS5hdHRyKCdvbmVzZWFyY2hpZGVudGlmaWVyJykpICE9ICd1bmRlZmluZWQnO1xyXG4gICAgICAgIGlmICh0eXBlb2YgKF92YWx1ZSkgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdmFyIF92YWx1ZXMgPSAnJztcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIF92YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF92YWx1ZVtrZXldICE9ICcnKVxyXG4gICAgICAgICAgICAgICAgICAgIF92YWx1ZXMgKz0gKF92YWx1ZXMgPT0gJycgPyAnJyA6ICc7JykgKyBfdmFsdWVba2V5XS5yZXBsYWNlKC9cXC0vZywgJ18nKS5yZXBsYWNlKC9cXC8vZywgJyEnKS5yZXBsYWNlKC9cXCwvZywgJ0AnKS5yZXBsYWNlKC9cXCYvLCAnJCcpLnJlcGxhY2UoL1xcIy9nLCAnJTIzJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF92YWx1ZXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCQoc2VuZGVyKS5hdHRyKCd1cmxpZGVudGlmaWVyJykgIT0gbnVsbCAmJiAkKHNlbmRlcikuYXR0cihcInVybGlkZW50aWZpZXJcIikgPT0gJ3ByaWNlJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF92YWx1ZS5yZXBsYWNlKC9cXCwvZywgJycpLnJlcGxhY2UoL1xcLS9nLCAnXycpLnJlcGxhY2UoL1xcLy9nLCAnIScpLnJlcGxhY2UoL1xcJi8sICckJykucmVwbGFjZSgvXFxAL2csICcnKS5yZXBsYWNlKC9cXCMvZywgJyUyMycpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9pc09uZVNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdmFsdWUucmVwbGFjZSgvXFwsL2csICdAJykucmVwbGFjZSgvXFwtL2csICdfJykucmVwbGFjZSgvXFwvL2csICchJykucmVwbGFjZSgvXFwmLywgJyQnKS5yZXBsYWNlKC9cXCMvZywgJyUyMycpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZhbHVlLnJlcGxhY2UoL1xcLS9nLCAnXycpLnJlcGxhY2UoL1xcLy9nLCAnIScpLnJlcGxhY2UoL1xcJi8sICckJykucmVwbGFjZSgvXFwjL2csICclMjMnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfcmVwbGFjZVdoaXRlU3BhY2UodmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXFxzL2csICctJyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIF9pc05vdE51bGxPckVtcHR5KHNlbmRlcikge1xyXG4gICAgICAgIGlmICgkKHNlbmRlcikuYXR0cigndHlwZScpICE9IG51bGwgJiYgKCQoc2VuZGVyKS5hdHRyKCd0eXBlJykgPT0gJ3JhZGlvJyB8fCAkKHNlbmRlcikuYXR0cigndHlwZScpID09ICdjaGVja2JveCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZW5kZXIgIT0gbnVsbCAmJiBzZW5kZXIgIT0gdW5kZWZpbmVkICYmICQoc2VuZGVyKS52YWwoKS50cmltKCkgIT0gJycgJiYgJChzZW5kZXIpWzBdLmNoZWNrZWQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZW5kZXIgIT0gbnVsbCAmJiBzZW5kZXIgIT0gdW5kZWZpbmVkICYmICQoc2VuZGVyKS5pcygnc2VsZWN0JykpIHtcclxuICAgICAgICAgICAgdmFyIF92YWx1ZSA9ICQoc2VuZGVyKS52YWwoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiAoX3ZhbHVlKSA9PSAnb2JqZWN0JyA/IF92YWx1ZSAhPSBudWxsICYmIF92YWx1ZSAhPSAnJyA6IF92YWx1ZS50cmltKCkgIT0gJyc7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBzZW5kZXIgIT0gbnVsbCAmJiBzZW5kZXIgIT0gdW5kZWZpbmVkICYmICQoc2VuZGVyKS52YWwoKS50cmltKCkgIT0gJyc7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVmFsaWRFbWFpbCh2YWx1ZSkge1xyXG4gICAgdmFyIGVtYWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4dEVtYWlsJyk7XHJcbiAgICB2YXIgZmlsdGVyID0gL14oW2EtekEtWjAtOV9cXC5cXC1cXCtdKStcXEAoKFthLXpBLVowLTlcXC1dKStcXC4pKyhbYS16QS1aMC05XXsyLDR9KSskLztcclxuXHJcbiAgICBpZiAoIWZpbHRlci50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc051bGxPckVtcHR5KHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gJycpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKHR5cGVvZiAodmFsdWUpID09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSA9PSAnJykgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTm90TnVsbE9yWmVybyhWYWx1ZSkge1xyXG4gICAgcmV0dXJuIFZhbHVlICE9IG51bGwgJiYgVmFsdWUgIT0gdW5kZWZpbmVkICYmIFZhbHVlLmxlbmd0aCA+IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTnVsbE9yRW1wdHlDb250cm9sKGN0cmwpIHtcclxuICAgIGlmIChjdHJsID09IG51bGwgfHwgY3RybCA9PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICgkKGN0cmwpLnZhbCgpID09IG51bGwgfHwgJChjdHJsKS52YWwoKSA9PSB1bmRlZmluZWQgfHwgJChjdHJsKS52YWwoKSA9PSAnJykgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wZW5JV0JQb3B1cCh1cmwsIHF1ZXJ5U3RyaW5nLCB3aXRoaW4pIHtcclxuICAgIGlmICghaXNOdWxsT3JFbXB0eShxdWVyeVN0cmluZykpIHVybCArPSAnPycgKyBxdWVyeVN0cmluZztcclxuICAgICQoJyNQRVJGT1JNX0lXQl9BQ1RJT05fVFJJR0dFUicpLmF0dHIoJ2hyZWYnLCB1cmwpO1xyXG4gICAgJCgnI1BFUkZPUk1fSVdCX0FDVElPTl9UUklHR0VSJykudHJpZ2dlcignY2xpY2snKTtcclxuXHJcbiAgICBpZiAoaXNOdWxsT3JFbXB0eSh3aXRoaW4pKSB3aXRoaW4gPSAxMDAwO1xyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJCgnI1BFUkZPUk1fSVdCX0FDVElPTl9UUklHR0VSJykudHJpZ2dlcignY2xpY2snKTtcclxuICAgIH0sIHdpdGhpbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENsb3NlSVdCUG9wdXAoKSB7XHJcbiAgICAkKCcjTU9EQUxfQUNDRVNTJykuZm91bmRhdGlvbigncmV2ZWFsJywgJ2Nsb3NlJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wZW5Qb3B1cCh3aXRoaW4pIHtcclxuICAgIGlmIChpc051bGxPckVtcHR5KHdpdGhpbikpIHdpdGhpbiA9IDEwMDA7XHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKCcjUEVSRk9STV9BQ1RJT05fVFJJR0dFUicpLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbiAgICB9LCB3aXRoaW4pO1xyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gQ2xvc2VQb3B1cCgpIHtcclxuICAgICQoJyNNT0RBTF9BQ0NFU1MnKS5mb3VuZGF0aW9uKCdyZXZlYWwnLCAnY2xvc2UnKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0Rm9ybWF0dGVkUHJpY2UocHJpY2UpIHtcclxuICAgIHZhciBsYWJlbCA9IFwiXCI7XHJcbiAgICBpZiAocHJpY2UudG9TdHJpbmcoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKHByaWNlLnRvU3RyaW5nKCkubGVuZ3RoIDw9IDYgJiYgcHJpY2UudG9TdHJpbmcoKS5sZW5ndGggPiAzKSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gcHJpY2UudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgcHJpY2UudG9TdHJpbmcoKS5sZW5ndGggLSAzKSArIFwiS1wiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJpY2UudG9TdHJpbmcoKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gcHJpY2UudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgcHJpY2UudG9TdHJpbmcoKS5sZW5ndGggLSA2KSArIFwiLlwiICsgcHJpY2UudG9TdHJpbmcoKS5zdWJzdHJpbmcocHJpY2UudG9TdHJpbmcoKS5sZW5ndGggLSA2LCBwcmljZS50b1N0cmluZygpLmxlbmd0aCAtIDUpICsgXCJNXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGFiZWwgPSBwcmljZS50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGFiZWwgPSBcIk4vQVwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwiJFwiICsgbGFiZWw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTXVsdGlMaW5ndWFsKCkge1xyXG4gICAgaWYgKCQoXCIjTVVMVElMSU5HVUFMXCIpICE9IG51bGwgJiYgJChcIiNNVUxUSUxJTkdVQUxcIikgIT0gdW5kZWZpbmVkICYmICFpc051bGxPckVtcHR5KCQoXCIjTVVMVElMSU5HVUFMXCIpLnZhbCgpKSAmJiAkKFwiI01VTFRJTElOR1VBTFwiKS52YWwoKSA9PSBcIjFcIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldExvY2FsZSgpIHtcclxuICAgIGlmIChpc011bHRpTGluZ3VhbCgpKSByZXR1cm4gJCgnI0xPQ0FMRScpLnZhbCgpOyBlbHNlIHJldHVybiBcIlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBJbml0RGF0YVNvdXJjZVJlbGF0aW9uKHNjdHJsLCBwY3RybCwgYWZ0ZXJMb2FkKSB7XHJcbiAgICB2YXIgX3NvdXJjZSA9ICQoJyMnICsgc2N0cmwpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGN0cmwuc3BsaXQoJywnKS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBfcGFyZW50ID0gJCgnIycgKyBwY3RybC5zcGxpdCgnLCcpW2ldKTtcclxuXHJcbiAgICAgICAgJChfcGFyZW50KS5jaGFuZ2UoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgX3Bvc3REYXRhID0gJyc7XHJcbiAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnU291cmNlPScgKyAkKF9zb3VyY2UpLmF0dHIoJ1NvdXJjZScpO1xyXG4gICAgICAgICAgICBfcG9zdERhdGEgKz0gJyZBdXRvU29ydD0nICsgJChfc291cmNlKS5hdHRyKCdBdXRvU29ydCcpO1xyXG4gICAgICAgICAgICBfcG9zdERhdGEgKz0gJyZEZWZhdWx0SXRlbT0nICsgJChfc291cmNlKS5hdHRyKCdEZWZhdWx0SXRlbScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCQoX3NvdXJjZSkuYXR0cignU291cmNlJykgPT0gXCJYbWxcIikge1xyXG4gICAgICAgICAgICAgICAgX3Bvc3REYXRhICs9ICcmWG1sRmlsZUNvZGU9JyArICQoX3NvdXJjZSkuYXR0cignWG1sRmlsZUNvZGUnKTtcclxuICAgICAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnJlhtbERhdGFMaXN0S2V5PScgKyAkKF9zb3VyY2UpLmF0dHIoJ1htbERhdGFMaXN0S2V5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoJChfc291cmNlKS5hdHRyKCdTb3VyY2UnKSA9PSBcIkRhdGFiYXNlXCIpIHtcclxuICAgICAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnJkRhdGFPYmplY3ROYW1lPScgKyAkKF9zb3VyY2UpLmF0dHIoJ0RhdGFPYmplY3ROYW1lJyk7XHJcbiAgICAgICAgICAgICAgICBfcG9zdERhdGEgKz0gJyZVcmxJZGVudGlmaWVyPScgKyAkKF9zb3VyY2UpLmF0dHIoJ1VybElkZW50aWZpZXInKTtcclxuICAgICAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnJkFkZGl0aW9uYWxXaGVyZT0nICsgJChfc291cmNlKS5hdHRyKCdBZGRpdGlvbmFsV2hlcmUnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIF9wYXJlbnRWYWx1ZSA9ICcnO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwY3RybC5zcGxpdCgnLCcpLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3BhcmVudElubmVyID0gJyMnICsgcGN0cmwuc3BsaXQoJywnKVtqXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaiA+IDApIF9wYXJlbnRWYWx1ZSArPSAnLCc7XHJcbiAgICAgICAgICAgICAgICBpZiAoJChfcGFyZW50SW5uZXIpLnZhbCgpID09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudFZhbHVlICs9ICQoX3BhcmVudElubmVyICsgJyBpbnB1dDpjaGVja2VkJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfcGFyZW50VmFsdWUgKz0gJChfcGFyZW50SW5uZXIpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF9wYXJlbnRWYWx1ZSA9IF9wYXJlbnRWYWx1ZS5yZXBsYWNlKCd1bmRlZmluZWQnLCAnJyk7XHJcbiAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnJlBhcmVudFZhbHVlPScgKyBfcGFyZW50VmFsdWU7XHJcblxyXG4gICAgICAgICAgICAkKF9zb3VyY2UpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvc2VydmljZXMvYWdvcmFSZWxhdGlvbmFsRGF0YVNvdXJjZS5hc2h4JyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IF9wb3N0RGF0YSxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0TGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoX3NvdXJjZSkuZ2V0KDApLm9wdGlvbnMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJC5lYWNoKHJlc3VsdExpc3QsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9zb3VyY2UpLmdldCgwKS5vcHRpb25zWyQoX3NvdXJjZSkuZ2V0KDApLm9wdGlvbnMubGVuZ3RoXSA9IG5ldyBPcHRpb24oaXRlbS5WYWx1ZSwgaXRlbS5LZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkKF9zb3VyY2UpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhZnRlckxvYWQgIT0gbnVsbCkgYWZ0ZXJMb2FkKCQoX3NvdXJjZSkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhUGFyZW50RGF0YVNvdXJjZSkgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBlbnRlckZ1bGxTY3JlZW4oKSB7XHJcbiAgICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xyXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xyXG4gICAgfSBlbHNlIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oRWxlbWVudC5BTExPV19LRVlCT0FSRF9JTlBVVCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4aXRGdWxsU2NyZWVuKCkge1xyXG4gICAgaWYgKGRvY3VtZW50LmNhbmNlbEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICBkb2N1bWVudC5jYW5jZWxGdWxsU2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICBkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICBkb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNob3dMb2FkaW5nKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBpZiAoJChcImJvZHlcIikuaGFzQ2xhc3MoJ2lzLWJ1c3knKSlcclxuICAgICAgICAgICAgJChcImJvZHlcIikucmVtb3ZlQ2xhc3MoJ2lzLWJ1c3knKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICQoXCJib2R5XCIpLmFkZENsYXNzKCdpcy1idXN5Jyk7XHJcbiAgICB9IGNhdGNoIChlKSB7IH1cclxufVxyXG5cclxudmFyIF9hZ29yYU1zZ0RlbGF5ID0gbnVsbDtcclxuZnVuY3Rpb24gU2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSkge1xyXG4gICAgX3Nob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIHRydWUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBTaG93QWxlcnQobWVzc2FnZSwgZGVsYXksIGNzc0NsYXNzLCB0eXBlLCBlbmFibGVBdXRvQ2xvc2UpIHtcclxuICAgIF9zaG93QWxlcnQobWVzc2FnZSwgZGVsYXksIGNzc0NsYXNzLCB0eXBlLCBlbmFibGVBdXRvQ2xvc2UpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBTaG93QWxlcnQobWVzc2FnZSwgZGVsYXksIGNzc0NsYXNzLCB0eXBlLCBlbmFibGVBdXRvQ2xvc2UsIGVuYWJsZU9LQnV0dG9uKSB7XHJcbiAgICBfc2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSwgZW5hYmxlQXV0b0Nsb3NlLCBlbmFibGVPS0J1dHRvbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIGVuYWJsZUF1dG9DbG9zZSwgZW5hYmxlT0tCdXR0b24sIEFjdGlvblVybCkge1xyXG4gICAgX3Nob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIGVuYWJsZUF1dG9DbG9zZSwgZW5hYmxlT0tCdXR0b24sIEFjdGlvblVybCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIGVuYWJsZUF1dG9DbG9zZSwgZW5hYmxlT0tCdXR0b24sIEFjdGlvblVybCwgRGlzYWJsZUNsb3NlQnV0dG9uKSB7XHJcbiAgICBfc2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSwgZW5hYmxlQXV0b0Nsb3NlLCBlbmFibGVPS0J1dHRvbiwgQWN0aW9uVXJsLCBEaXNhYmxlQ2xvc2VCdXR0b24pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfc2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSwgZW5hYmxlQXV0b0Nsb3NlLCBlbmFibGVPS0J1dHRvbiwgQWN0aW9uVXJsLCBEaXNhYmxlQ2xvc2VCdXR0b24pIHtcclxuICAgICQoJ2JvZHknKS5hZGRDbGFzcygnYWxlcnRfYm94X2xvYWRlZCcpO1xyXG4gICAgdmFyIF9tc2dCb3ggPSAkKCdkaXYjYWdvcmFBbGVydE1lc3NhZ2VCb3gnKTtcclxuICAgIGlmIChfbXNnQm94ID09IG51bGwgfHwgX21zZ0JveC5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgX21zZ0JveCA9ICQoJzxkaXY+JylcclxuICAgICAgICAgICAgICAgICAgICAuYXR0cignaWQnLCAnYWdvcmFBbGVydE1lc3NhZ2VCb3gnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhjc3NDbGFzcylcclxuICAgICAgICAgICAgICAgICAgICAuaHRtbCgnPGRpdiBjbGFzcz1cIm1lc3NhZ2UtYm9keVwiPjxzcGFuIGlkPVwibXNnXCIgY2xhc3M9XCJtc2dcIj48L3NwYW4+PGRpdiBpZD1cImJ0bl9va1wiPjwvZGl2PjxkaXYgaWQ9XCJidG5fY2xvc2VcIj48L2Rpdj48L2Rpdj4nKTtcclxuICAgICAgICAkKF9tc2dCb3gpLnByZXBlbmRUbygnYm9keScpO1xyXG4gICAgfVxyXG4gICAgJChfbXNnQm94KS5hdHRyKCdjbGFzcycsICcnKTtcclxuICAgICQoX21zZ0JveCkuYWRkQ2xhc3MoY3NzQ2xhc3MpO1xyXG4gICAgJChfbXNnQm94KS5zaG93KCk7XHJcbiAgICAkKF9tc2dCb3gpLmZpbmQoJ3NwYW4jbXNnJykuaHRtbChtZXNzYWdlKTtcclxuICAgIGlmICghRGlzYWJsZUNsb3NlQnV0dG9uKSB7ICQoX21zZ0JveCkuZmluZCgnZGl2I2J0bl9jbG9zZScpLmh0bWwoJzxhIGNsYXNzPVwiY2xvc2VCdG4gcmlnaHRcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIG9uY2xpY2s9XCJqYXZhc2NyaXB0OkNsb3NlQWxlcnQoKTtcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjwvaT48L2E+Jyk7IH1cclxuICAgIGlmIChlbmFibGVPS0J1dHRvbikge1xyXG4gICAgICAgICQoX21zZ0JveCkuZmluZCgnZGl2I2J0bl9vaycpLmh0bWwoJzxhICcgKyAoaXNOb3ROdWxsT3JaZXJvKEFjdGlvblVybCkgPyAnaHJlZj1cIicgKyBBY3Rpb25VcmwgKyAnXCInIDogJ2hyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgb25jbGljaz1cImphdmFzY3JpcHQ6Q2xvc2VBbGVydCgpO1wiJykgKyAnICB0aXRsZT1cIkNsb3NlXCIgY2xhc3M9XCJtZGwtYnV0dG9uIG1kbC1idXR0b24tLXByaW1hcnkgbWRsLWJ1dHRvbi0tcmFpc2VkIG1kbC1qcy1idXR0b24gbWRsLWpzLXJpcHBsZS1lZmZlY3RcIiBzdHlsZT1cImFsaWduLWNvbnRlbnQ6IHJpZ2h0O1wiPk9rPC9hPicpO1xyXG4gICAgfVxyXG4gICAgY2xlYXJUaW1lb3V0KF9hZ29yYU1zZ0RlbGF5KTtcclxuICAgIGlmIChlbmFibGVBdXRvQ2xvc2UpIHtcclxuICAgICAgICBpZiAoZGVsYXkgPT0gbnVsbCkgZGVsYXkgPSA0MDAwO1xyXG4gICAgICAgIF9hZ29yYU1zZ0RlbGF5ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIENsb3NlQWxlcnQoKTtcclxuICAgICAgICB9LCBkZWxheSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENsb3NlQWxlcnQoKSB7XHJcbiAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ2FsZXJ0X2JveF9sb2FkZWQnKTtcclxuICAgICQoJ2RpdiNhZ29yYUFsZXJ0TWVzc2FnZUJveCcpLmhpZGUoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gUmVjYWxsQ2tlSUZyYW1lKCkge1xyXG4gICAgJCgnaW1nLmNrZV9pZnJhbWUnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKHRoaXMpLnJlcGxhY2VXaXRoKHVuZXNjYXBlKCQodGhpcykuYXR0cignZGF0YS1ja2UtcmVhbGVsZW1lbnQnKSkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEVuYWJsZU5lYXJCeVNlYXJjaChjdHJsLCB1cmxQcmVmaXgsIHVybFN1Zml4LCByYWRpdXMsIGVycmxhbmRpbmdVcmwpIHtcclxuICAgICQoY3RybCkuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJCh0aGlzKS5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGJyb3dzZXIgaGF2ZSBnZW9sb2NhdGlvbiBzdXBwb3J0XHJcbiAgICAgICAgICAgIGlmIChuYXZpZ2F0b3IuZ2VvbG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oc3VjY2Vzc0hhbmRsZXIsIGVycm9ySGFuZGxlciwgeyB0aW1lb3V0OiAyMDAwMCB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KFwiR2VvbG9jYXRpb24gZnVuY3Rpb25hbGl0eSBub3QgYXZhaWxhYmxlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHN1Y2Nlc3NIYW5kbGVyKHBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2xhdGl0dWRlID0gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlLnRvU3RyaW5nKCkucmVwbGFjZSgnLScsICdfJyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2xvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUudG9TdHJpbmcoKS5yZXBsYWNlKCctJywgJ18nKTtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB1cmxQcmVmaXggKyBcIi9ybGF0LVwiICsgX2xhdGl0dWRlICsgXCIvcmxvbi1cIiArIF9sb25naXR1ZGUgKyBcIi9yYWQtXCIgKyByYWRpdXMgKyB1cmxTdWZpeDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiBlcnJvckhhbmRsZXIoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5kZXhPZihcIk9ubHkgc2VjdXJlIG9yaWdpbnMgYXJlIGFsbG93ZWRcIikgPT0gMCkgeyBhbGVydChcIllvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZVwiKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyLmNvZGUgPT0gMSAvKiBQRVJNSVNTSU9OX0RFTklFRCAqLykgeyBhbGVydChcIlBlcm1pc3Npb24gZGVuaWVkIHRvIGFjY2VzcyBnZW9sb2NhdGlvblwiKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyLmNvZGUgPT0gMiAvKiBQT1NJVElPTl9VTkFWQUlMQUJMRSAqLykgeyBhbGVydChcIllvdXIgZ2VvbG9jYXRpb24gaXMgbm90IGF2YWlsYWJsZVwiKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyLmNvZGUgPT0gMyAvKiBUSU1FT1VUICovKSB7IGFsZXJ0KFwiWW91ciBnZW9sb2NhdGlvbiBpcyBub3QgYXZhaWxhYmxlXCIpOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgYWxlcnQoXCJZb3VyIGdlb2xvY2F0aW9uIGlzIG5vdCBhdmFpbGFibGVcIik7IH1cclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBlcnJsYW5kaW5nVXJsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gQmFja1RvVG9wKHNlbmRlcikge1xyXG4gICAgdmFyIF9uYXZpZ2F0b3JQb3NpdGlvbiA9ICQoc2VuZGVyKS5jbG9zZXN0KCdbZGF0YS1iYWNrLXRvLXRvcC1jb250YWluZXJdJykub2Zmc2V0KCk7XHJcbiAgICBpZiAoX25hdmlnYXRvclBvc2l0aW9uICE9IG51bGwpIHtcclxuICAgICAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiBfbmF2aWdhdG9yUG9zaXRpb24udG9wIH0sIDcwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgICQoJ2h0bWwsYm9keScpLmFuaW1hdGUoeyBzY3JvbGxUb3A6IDAgfSwgNzAwKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gVG9wVG9Cb3R0b20oc2VuZGVyKSB7XHJcbiAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiAkKHdpbmRvdykuaGVpZ2h0KCkgLSAkKCcjYWdvcmEtbGF5b3V0LWhlYWRlcicpLmhlaWdodCgpIH0sIDcwMCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEVuYWJsZUdvb2dsZUV2ZW50VHJhY2tpbmcoKSB7XHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtZ2EtdHJhY2tdJywgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBfdHJhY2sgPSAkKHRoaXMpLmRhdGEoJ2dhLXRyYWNrJyk7XHJcbiAgICAgICAgICAgIEdvb2dsZUFuYWx5dGljTG9nRXZlbnQoX3RyYWNrKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBHb29nbGVBbmFseXRpY0xvZ0V2ZW50KHRyYWNrKSB7XHJcbiAgICBpZiAoZ2EgPT0gbnVsbCB8fCB0eXBlb2YgKGdhKSA9PSAndW5kZWZpbmVkJykgcmV0dXJuO1xyXG4gICAgdmFyIF9wYXJhbSA9IHRyYWNrLnNwbGl0KCcsJyk7XHJcbiAgICBzd2l0Y2ggKF9wYXJhbS5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgX3BhcmFtWzBdLCBfcGFyYW1bMV0sIF9wYXJhbVsyXSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCBfcGFyYW1bMF0sIF9wYXJhbVsxXSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBFbmFibGVTdGlja3lIZWFkZXIoc3RhcnRQb2ludCkge1xyXG4gICAgaWYgKHN0YXJ0UG9pbnQgPT0gbnVsbCkgc3RhcnRQb2ludCA9IDA7XHJcblxyXG4gICAgKGZ1bmN0aW9uIChzZW5kZXIpIHtcclxuICAgICAgICB2YXIgX29sZFZhbHVlID0gMDtcclxuICAgICAgICB2YXIgJGNvbnRleHQgPSAkKHNlbmRlcik7XHJcbiAgICAgICAgJCh3aW5kb3cpLm9uKCdzY3JvbGwnLCBfY2hlY2tTdGF0ZSk7XHJcbiAgICAgICAgZnVuY3Rpb24gX2NoZWNrU3RhdGUoKSB7XHJcbiAgICAgICAgICAgIHZhciBfbmV3VmFsdWUgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCk7XHJcbiAgICAgICAgICAgIGlmIChfbmV3VmFsdWUgPiBzdGFydFBvaW50KSAkY29udGV4dC5hZGRDbGFzcygnc2Nyb2xsJyk7IGVsc2UgJGNvbnRleHQucmVtb3ZlQ2xhc3MoJ3Njcm9sbCcpLnJlbW92ZUNsYXNzKCdzY3JvbGwtZG93bicpLnJlbW92ZUNsYXNzKCdzY3JvbGwtdXAnKTtcclxuICAgICAgICAgICAgaWYgKF9vbGRWYWx1ZSA+IF9uZXdWYWx1ZSkgJGNvbnRleHQuYWRkQ2xhc3MoJ3Njcm9sbC11cCcpLnJlbW92ZUNsYXNzKCdzY3JvbGwtZG93bicpO1xyXG4gICAgICAgICAgICBpZiAoX29sZFZhbHVlIDwgX25ld1ZhbHVlKSAkY29udGV4dC5hZGRDbGFzcygnc2Nyb2xsLWRvd24nKS5yZW1vdmVDbGFzcygnc2Nyb2xsLXVwJyk7XHJcbiAgICAgICAgICAgIF9vbGRWYWx1ZSA9IF9uZXdWYWx1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIF9jaGVja1N0YXRlKCk7XHJcbiAgICB9KSgkKCdib2R5JykpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBDbG9zZUFnb3JhRHJvcERvd25PbkJvZHlDbGljaygpIHtcclxuICAgICQoZG9jdW1lbnQpLm9uKCdyZXNldCcsICcuYWdvcmEtZHJvcGRvd24nLCBudWxsLCBmdW5jdGlvbiAoKSB7IHRyeSB7IHZhciBzdGF0ZSA9ICQodGhpcykuY2hpbGRyZW4oJ2lucHV0JykuZ2V0KDApOyBpZiAoc3RhdGUuY2hlY2tlZCkgc3RhdGUuY2hlY2tlZCA9IGZhbHNlOyB9IGNhdGNoIChlKSB7IH0gfSk7XHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgJHRhcmdldCA9ICQoZS50YXJnZXQpO1xyXG4gICAgICAgICAgICBpZiAoJHRhcmdldC5pcygnaW5wdXQnKSB8fCAkKGRvY3VtZW50KS5maW5kKCR0YXJnZXQpLmxlbmd0aD09MCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB2YXIgJGRyb3BEb3duY29udGFpbmVyID0gJHRhcmdldC5jbG9zZXN0KCcuYWdvcmEtZHJvcGRvd24nKTtcclxuICAgICAgICAgICAgaWYgKCRkcm9wRG93bmNvbnRhaW5lci5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgJCgnLmFnb3JhLWRyb3Bkb3duJykudHJpZ2dlcigncmVzZXQnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICgkZHJvcERvd25jb250YWluZXIuaGFzQ2xhc3MoJ2FjdGlvbnMnKSAmJiAhJHRhcmdldC5oYXNDbGFzcygnYWdvcmEtZHJvcGRvd24taGFuZGxlJykgJiYgJGRyb3BEb3duY29udGFpbmVyLmNoaWxkcmVuKCdpbnB1dDpjaGVja2VkJykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICRkcm9wRG93bmNvbnRhaW5lci50cmlnZ2VyKCdyZXNldCcpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCcuYWdvcmEtZHJvcGRvd24nKS5ub3QoJGRyb3BEb3duY29udGFpbmVyKS50cmlnZ2VyKCdyZXNldCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXgpIHsgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBNZGxSZWxvYWRDb250cm9sU3RhdGUoaXRlbSwgcGFyZW50LCBub0FjdGlvbikge1xyXG4gICAgaWYgKG5vQWN0aW9uID09IG51bGwgfHwgbm9BY3Rpb24gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgbm9BY3Rpb24gPSBmYWxzZTtcclxuICAgIH1cclxuICAgICR0aGlzID0gaXRlbTtcclxuICAgICRwYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICB2YXIgJHBhcnRuZXIgPSAkKFwiI1wiICsgJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSk7XHJcbiAgICB2YXIgJHZhbHVlQmluZCA9ICQoJyMnICsgJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdmFsdWUtYmluZFwiKSk7XHJcbiAgICB2YXIgJHNlYXJjaFZpZXcgPSAkKCcjJyArICRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXZpZXdcIikpO1xyXG4gICAgc3dpdGNoICgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaFwiKSkge1xyXG4gICAgICAgIGNhc2UgXCJTZWxlY3RCb3hcIjpcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICRwYXJlbnQucGFyZW50KCkuZmluZCgnW2RhdGEtc2VhcmNoLWVuYWJsZS1mb3JdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnbWRsLWNlbGwtLWhpZGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJ2lucHV0OmNoZWNrYm94JykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9BY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQXR0cignY2hlY2tlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuY2xvc2VzdCgnLm1kbC1qcy1jaGVja2JveCcpLmxlbmd0aCA+IDApICQodGhpcykuY2xvc2VzdCgnLm1kbC1qcy1jaGVja2JveCcpWzBdLk1hdGVyaWFsQ2hlY2tib3gudW5jaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCdzZWxlY3Qgb3B0aW9uJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQXR0cignc2VsZWN0ZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcubWRsLWpzLXNlbGVjdGZpZWxkJylbMF0uTWF0ZXJpYWxTZWxlY3RmaWVsZC5tZGxEb3duZ3JhZGVfKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7IGNvbnNvbGUubG9nKGVyci5tZXNzYWdlKTsgfVxyXG4gICAgICAgICAgICAkKCdbZGF0YS1zZWFyY2gtZW5hYmxlLWZvcj1cIicgKyAkcGFyZW50LnZhbCgpICsgJ1wiXScpLnJlbW92ZUNsYXNzKCdtZGwtY2VsbC0taGlkZScpO1xyXG4gICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIikgKyAnICgnICsgJHBhcmVudC5wYXJlbnQoKS5maW5kKCdbZGF0YS1zZWFyY2gtZW5hYmxlLWZvcj1cIicgKyAkcGFyZW50LnZhbCgpICsgJ1wiXScpLmZpbmQoXCJpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkXCIpLmxlbmd0aCArICcpJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJncm91cFwiOlxyXG4gICAgICAgICAgICB2YXIgJGdyb3VwUGFyZW50ID0gJHRoaXMuY2xvc2VzdCgnW2RhdGEtc2VhcmNoLWdyb3VwXScpO1xyXG4gICAgICAgICAgICAkc2VhcmNoVmlldyA9ICQoJyMnICsgJGdyb3VwUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12aWV3XCIpKTtcclxuICAgICAgICAgICAgdmFyIF9jb3VudCA9ICRncm91cFBhcmVudC5maW5kKCdbZGF0YS1zZWFyY2g9XCJncm91cFwiXSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkJykubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgX3JlYWRMaXN0ID0ge307XHJcblxyXG4gICAgICAgICAgICAkZ3JvdXBQYXJlbnQuZmluZCgnW2RhdGEtc2VhcmNoPVwiZ3JvdXBcIl0gW2RhdGEtdHlwZT1cImRyb3Bkb3duXCJdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgJF90ZW1wID0gJCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIGlmKCRfdGVtcC52YWwoKSE9XCJcIiAmJiB0eXBlb2YoJF90ZW1wLmRhdGEoJ2RlZmF1bHQtaXRlbScpIT0ndW5kZWZpbmVkJykgJiYgJF90ZW1wLnZhbCgpIT0kX3RlbXAuZGF0YSgnZGVmYXVsdC1pdGVtJykpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NvdW50Kys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJGdyb3VwUGFyZW50LmZpbmQoJ1tkYXRhLXNlYXJjaD1cImdyb3VwXCJdIGlucHV0W3R5cGU9dGV4dF0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciAkX3RlbXAgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9rZXkgPSAkX3RlbXAuYXR0cigndXJsaWRlbnRpZmllcicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTm90TnVsbE9yWmVybygkX3RlbXAudmFsKCkpICYmIHR5cGVvZiAoX3JlYWRMaXN0W19rZXldKSA9PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgICAgICAgICAgICBfcmVhZExpc3RbX2tleV0gPSBfY291bnQrKztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoJGdyb3VwUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJyAoJyArIF9jb3VudCArICcpJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJjaGVja0xpc3RcIjpcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICgkcGFyZW50LmF0dHIoJ2RhdGEtc2VhcmNoLWNoaWxkJykgIT0gbnVsbCAmJiAkcGFyZW50LmF0dHIoJ2RhdGEtc2VhcmNoLWNoaWxkJykgPT0gXCJ0cnVlXCIgJiYgJHBhcmVudC5wYXJlbnRzKCkuZmluZCgnW2RhdGEtc2VhcmNoLXBhcmVudD1cInRydWVcIl0nKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJyAoJyArICRwYXJlbnQucGFyZW50KCkuZmluZChcImlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWRcIikubGVuZ3RoICsgJyknKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJyAoJyArICRwYXJlbnQuZmluZChcImlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWRcIikubGVuZ3RoICsgJyknKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIikgKyAnICgnICsgJHBhcmVudC5maW5kKFwiaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZFwiKS5sZW5ndGggKyAnKScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzaW5nbGVJdGVtXCI6XHJcbiAgICAgICAgICAgIGlmICgkdGhpcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAkcGFyZW50LmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoXCJzZWxlY3RcIik7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfbGFiZWxQb3NpdGlvbiA9ICRwYXJlbnQuYXR0cignZGF0YS1zZWFyY2gtbmFtZS1sYWJlbC1wb3NpdGlvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfc2VsZWN0T3B0aW9uID0gdHlwZW9mICgkcGFyZW50LmF0dHIoJ2RhdGEtc2VsZWN0JykpICE9IHVuZGVmaW5lZCAmJiAkcGFyZW50LmF0dHIoJ2RhdGEtc2VsZWN0JykgIT0gbnVsbCAmJiAkcGFyZW50LmF0dHIoJ2RhdGEtc2VsZWN0JykgIT0gJycgPyAkcGFyZW50LmF0dHIoJ2RhdGEtc2VsZWN0JykgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF9sYWJlbFBvc2l0aW9uICE9PSB0eXBlb2YgdW5kZWZpbmVkICYmIF9sYWJlbFBvc2l0aW9uICE9PSBmYWxzZSAmJiBfbGFiZWxQb3NpdGlvbiA9PSAnbGVmdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9zZWxlY3RPcHRpb24gPT0gJ2xhYmVsJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJHRoaXMuYXR0cihcImxhYmVsXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hWaWV3LmF0dHIoJ2RhdGEtc2VsZWN0ZWQtdmFsdWUnLCAkdGhpcy5hdHRyKFwidmFsdWVcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKSArICR0aGlzLmF0dHIoXCJ2YWx1ZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3NlbGVjdE9wdGlvbiA9PSAnbGFiZWwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCR0aGlzLmF0dHIoXCJsYWJlbFwiKSArICRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuYXR0cignZGF0YS1zZWxlY3RlZC12YWx1ZScsICR0aGlzLmF0dHIoXCJ2YWx1ZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkdGhpcy5hdHRyKFwidmFsdWVcIikgKyAkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfc2hvd0NvdW50T25seSA9ICRwYXJlbnQuYXR0cignZGF0YS1zZWFyY2gtbmFtZS1sYWJlbC1zaG93Q291bnRPbmx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKF9zaG93Q291bnRPbmx5KSAhPSAndW5kZWZpbmVkJyAmJiBfc2hvd0NvdW50T25seSAhPSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJyAoJyArICR0aGlzLmxlbmd0aCArICcpJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsgY29uc29sZS5sb2coZXJyLm1lc3NhZ2UpOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfc2tpcExhYmVsQXBwZW5kTGlzdCA9ICRwYXJlbnQuYXR0cignZGF0YS1zZWFyY2gtbmFtZS1sYWJlbC1za2lwLWZvcicpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBfc2tpcExhYmVsQXBwZW5kTGlzdC5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfc2tpcExhYmVsQXBwZW5kTGlzdFtpXSAhPSB1bmRlZmluZWQgJiYgX3NraXBMYWJlbEFwcGVuZExpc3RbaV0gIT0gbnVsbCAmJiBfc2tpcExhYmVsQXBwZW5kTGlzdFtpXSA9PSAkdGhpcy5hdHRyKFwidmFsdWVcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCR0aGlzLmF0dHIoXCJ2YWx1ZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsgY29uc29sZS5sb2coZXJyLm1lc3NhZ2UpOyB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkdGhpcy5hdHRyKFwidmFsdWVcIikgKyAkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICR0aGlzLmFkZENsYXNzKFwic2VsZWN0XCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKElzTm90TnVsbCgkdGhpcy5hdHRyKFwidmFsdWVcIikpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHZhbHVlQmluZC5hdHRyKFwidmFsdWVcIiwgJHRoaXMuYXR0cihcInZhbHVlXCIpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHZhbHVlQmluZC5hdHRyKFwidmFsdWVcIiwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm9uZVNlYXJjaFwiOlxyXG4gICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCR0aGlzLmF0dHIoJ2RhdGEtc2VhcmNoLW5hbWUtbGFiZWwnKSArICcgKCcgKyAoJCgnLm11bHRpc2VsZWN0LWNvbnRleHQgLmFnb3JhLW9uZXNlYXJjaC1tdWx0aS1zZWwtaXRlbS1jb250JykubGVuZ3RoKSArICcpJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJyYW5nZVwiOlxyXG4gICAgICAgICAgICAkcGFydG5lci5yZW1vdmVDbGFzcyhcInMtZC1uXCIpO1xyXG4gICAgICAgICAgICAkcGFyZW50LmFkZENsYXNzKFwicy1kLW5cIik7XHJcbiAgICAgICAgICAgIGlmICgkdGhpcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoSXNOb3ROdWxsKCR0aGlzLmF0dHIoXCJ2YWx1ZVwiKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAkdmFsdWVCaW5kLnZhbCgkdGhpcy5hdHRyKFwidmFsdWVcIikpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAkdmFsdWVCaW5kLnZhbChcIlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoJHZhbHVlQmluZC5jbG9zZXN0KCcubWRsLWpzLXRleHRmaWVsZCcpLmxlbmd0aCA+IDAgJiYgJHZhbHVlQmluZC5jbG9zZXN0KCcubWRsLWpzLXRleHRmaWVsZCcpLmdldCgwKS5NYXRlcmlhbFRleHRmaWVsZCkgJHZhbHVlQmluZC5jbG9zZXN0KCcubWRsLWpzLXRleHRmaWVsZCcpLmdldCgwKS5NYXRlcmlhbFRleHRmaWVsZC5jaGVja0RpcnR5KCk7XHJcbiAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoQmluZFJhbmdlVmlldygkcGFyZW50KSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuLy9TZWFyY2ggQ29udHJvbGVcclxuZnVuY3Rpb24gQmluZFJhbmdlVmlldyhQYXJlbnQpIHtcclxuICAgIHZhciBfbWluTWF4ID0gbmV3IGdldE1pbk1heChQYXJlbnQpO1xyXG4gICAgaWYgKElzTm90TnVsbChfbWluTWF4Lk1pbikgJiYgSXNOb3ROdWxsKF9taW5NYXguTWF4KSAmJiBwYXJzZUludChfbWluTWF4Lk1pbikgPiBwYXJzZUludChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICBhbGVydChcIk1pbmltdW0gdmFsdWUgc2hvdWxkIG5vdCBleGNlZWQgdGhlIG1heGltdW0gdmFsdWVcIik7XHJcbiAgICAgICAgJCgnIycgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXZhbHVlLWJpbmRcIikpLmF0dHIoXCJ2YWx1ZVwiLCBcIlwiKTtcclxuICAgICAgICAkKFwiI1wiICsgJCgnIycgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXBhcnRuZXJcIikpLmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS5hdHRyKFwidmFsdWVcIiwgXCJcIik7XHJcbiAgICAgICAgcmV0dXJuIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3dpdGNoICgkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS5hdHRyKFwib3BlcmF0aW9uXCIpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtaW5cIjpcclxuICAgICAgICAgICAgICAgIHZhciBfbWluVmFsdWUgPSBfbWluTWF4Lk1pbjtcclxuICAgICAgICAgICAgICAgIHZhciAkcGFydG5lciA9ICQoXCIjXCIgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXBhcnRuZXJcIikpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKCRwYXJ0bmVyLmRhdGEoJ2lzLWluaXQnKSkgPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5kYXRhKCdpbml0LXZhbHVlJywgJHBhcnRuZXIuaHRtbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5kYXRhKCdpcy1pbml0JywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKElzTm90TnVsbChfbWluVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2lzU2VsZWN0ID0gJChcIiNcIiArIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSkuaXMoJ3NlbGVjdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWdOYW1lID0gX2lzU2VsZWN0ID8gJ29wdGlvbicgOiAnbGknO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNTZWxlY3QpICRwYXJ0bmVyLmFwcGVuZCgnPG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC10eXBlXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicHJpY2VcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JhbmdlVG9JbmNyZW1lbnQgPSBfZ2V0SW5jcmVtZW50VmFsdWUoX21pblZhbHVlLCBQYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9taW5WYWx1ZSA9IF9nZXRSb3VuZE9mVmFsdWUoX21pblZhbHVlLCBfcmFuZ2VUb0luY3JlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21pblZhbHVlID0gKHBhcnNlSW50KF9taW5WYWx1ZSkgKyBfcmFuZ2VUb0luY3JlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuYXBwZW5kKCc8JyArIHRhZ05hbWUgKyAnIHZhbHVlPVwiJyArIF9taW5WYWx1ZSArICdcIiB0YWJpbmRleD1cIjIyXCI+PHNwYW4+JCcgKyBfbWluVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC8oXFxkKSg/PShcXGRcXGRcXGQpKyg/IVxcZCkpL2csIFwiJDEsXCIpICsgJzwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ5ZWFyXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21pblZhbHVlID0gKHBhcnNlSW50KF9taW5WYWx1ZSkgKyA1KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5hcHBlbmQoJzwnICsgdGFnTmFtZSArICcgdmFsdWU9XCInICsgX21pblZhbHVlICsgJ1wiIHRhYmluZGV4PVwiMjJcIj48c3Bhbj4nICsgX21pblZhbHVlICsgJzwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm90TnVsbE9yWmVybyhQYXJlbnQuYXR0cignZGF0YS1kZWZhdWx0LWluY3JlbWVudCcpKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9taW5WYWx1ZSA9IChwYXJzZUludChfbWluVmFsdWUpICsgcGFyc2VJbnQoUGFyZW50LmF0dHIoJ2RhdGEtZGVmYXVsdC1pbmNyZW1lbnQnKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5hcHBlbmQoJzwnICsgdGFnTmFtZSArICcgdmFsdWU9XCInICsgX21pblZhbHVlICsgJ1wiIHRhYmluZGV4PVwiMjJcIj48c3Bhbj4nICsgX21pblZhbHVlICsgJzwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuYXBwZW5kKCc8JyArIHRhZ05hbWUgKyAnIHZhbHVlPVwiMFwiIHRhYmluZGV4PVwiMjJcIj48c3Bhbj5Bbnk8L3NwYW4+PC8nICsgdGFnTmFtZSArICc+Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICgkcGFydG5lci5kYXRhKCdpcy1pbml0JykpICE9ICd1bmRlZmluZWQnICYmICRwYXJ0bmVyLmRhdGEoJ2lzLWluaXQnKSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLmh0bWwoJHBhcnRuZXIuZGF0YSgnaW5pdC12YWx1ZScpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1heFwiOlxyXG4gICAgICAgICAgICAgICAgdmFyIF9tYXhWYWx1ZSA9IF9taW5NYXguTWF4O1xyXG4gICAgICAgICAgICAgICAgdmFyICRwYXJ0bmVyID0gJChcIiNcIiArIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mICgkcGFydG5lci5kYXRhKCdpcy1pbml0JykpID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuZGF0YSgnaW5pdC12YWx1ZScsICRwYXJ0bmVyLmh0bWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuZGF0YSgnaXMtaW5pdCcsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKElzTm90TnVsbChfbWF4VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2lzU2VsZWN0ID0gJChcIiNcIiArIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSkuaXMoJ3NlbGVjdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWdOYW1lID0gX2lzU2VsZWN0ID8gJ29wdGlvbicgOiAnbGknO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNTZWxlY3QpICRwYXJ0bmVyLmFwcGVuZCgnPG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmFuZ2VUb0RlY3JlbWVudCA9IF9nZXREZWNyZW1lbnRWYWx1ZShfbWF4VmFsdWUsIFBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgX21heFZhbHVlID0gX2dldFJvdW5kT2ZWYWx1ZShfbWF4VmFsdWUsIF9yYW5nZVRvRGVjcmVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDU7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdHlwZVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInByaWNlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21heFZhbHVlID0gKHBhcnNlSW50KF9tYXhWYWx1ZSkgLSBfcmFuZ2VUb0RlY3JlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXhWYWx1ZSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIucHJlcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWF4VmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPiQnICsgX21heFZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvKFxcZCkoPz0oXFxkXFxkXFxkKSsoPyFcXGQpKS9nLCBcIiQxLFwiKSArICc8L3NwYW4+PC8nICsgdGFnTmFtZSArICc+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInllYXJcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWF4VmFsdWUgPSAocGFyc2VJbnQoX21heFZhbHVlKSAtIDUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbWF4VmFsdWUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLmFwcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWF4VmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPicgKyBfbWF4VmFsdWUgKyAnPC9zcGFuPjwvJyArIHRhZ05hbWUgKyAnPicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm90TnVsbE9yWmVybyhQYXJlbnQuYXR0cignZGF0YS1kZWZhdWx0LWRlY3JlbWVudCcpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNTZXRNYXhWYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc051bGxPckVtcHR5KGlzU2V0TWF4VmFsKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21heFZhbHVlID0gX21pbk1heC5NYXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldE1heFZhbCA9ICdZZXMnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tYXhWYWx1ZSA9IChwYXJzZUludChfbWF4VmFsdWUpIC0gcGFyc2VJbnQoUGFyZW50LmF0dHIoJ2RhdGEtZGVmYXVsdC1kZWNyZW1lbnQnKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX21heFZhbHVlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIucHJlcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWF4VmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPicgKyBfbWF4VmFsdWUgKyAnPC9zcGFuPjwvJyArIHRhZ05hbWUgKyAnPicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLnByZXBlbmQoJzwnICsgdGFnTmFtZSArICcgdmFsdWU9XCIwXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPkFueTwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKCRwYXJ0bmVyLmRhdGEoJ2lzLWluaXQnKSkgIT0gJ3VuZGVmaW5lZCcgJiYgJHBhcnRuZXIuZGF0YSgnaXMtaW5pdCcpID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuaHRtbCgkcGFydG5lci5kYXRhKCdpbml0LXZhbHVlJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzd2l0Y2ggKFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdHlwZVwiKSkge1xyXG4gICAgICAgICAgICBjYXNlIFwicHJpY2VcIjpcclxuICAgICAgICAgICAgICAgIGlmIChJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Zvcm1hdHRvUHJpY2UoX21pbk1heC5NaW4pICsgXCItXCIgKyBfZm9ybWF0dG9QcmljZShfbWluTWF4Lk1heCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKElzTm90TnVsbChfbWluTWF4Lk1pbikgJiYgIUlzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Zvcm1hdHRvUHJpY2UoX21pbk1heC5NaW4pICsgXCIrXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCI8XCIgKyBfZm9ybWF0dG9QcmljZShfbWluTWF4Lk1heCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGlmIChJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX21pbk1heC5NaW4gKyBcIi1cIiArIF9taW5NYXguTWF4O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChJc05vdE51bGwoX21pbk1heC5NaW4pICYmICFJc05vdE51bGwoX21pbk1heC5NYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9taW5NYXguTWluICsgXCIrXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCI8XCIgKyBfbWluTWF4Lk1heDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX2Zvcm1hdHRvUHJpY2UobnVtKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGb3JtYXR0IDogJyArIG51bSk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2xhYmVsID0gbnVtO1xyXG4gICAgICAgICAgICAgICAgaWYgKG51bSA9PSBudWxsIHx8IG51bSA9PSB1bmRlZmluZWQgfHwgbnVtID09ICcnKSBfbGFiZWwgPSAnMCc7XHJcbiAgICAgICAgICAgICAgICBpZiAobnVtID49IDEwMDAwMDApIHtcclxuICAgICAgICAgICAgICAgICAgICBfbGFiZWwgPSAnJCcgKyAoX2xhYmVsIC8gMTAwMDAwMCkudG9GaXhlZCgyKS5yZXBsYWNlKC9cXC4/MCskLywgXCJcIikgKyAnTSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChudW0gPj0gMTAwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9sYWJlbCA9ICckJyArIChfbGFiZWwgLyAxMDAwKS50b0ZpeGVkKDIpLnJlcGxhY2UoL1xcLj8wKyQvLCBcIlwiKSArICdLJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF9sYWJlbCA9ICckJyArIF9sYWJlbC5yZXBsYWNlKC9cXC4wKyQvLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBfbGFiZWw7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX2dldEluY3JlbWVudFZhbHVlKHZhbHVlLCBwYXJlbnQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciBfc3RhZ2UgPSAkKHBhcmVudCkuZGF0YSgnc3RhZ2UnKTtcclxuICAgICAgICAgICAgICAgIHZhciBfbWluVmFsdWVUZXh0ID0gJChwYXJlbnQpLmRhdGEoJ21pbi12YWx1ZScpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9taW5WYWx1ZSA9IDEwMDAwMDA7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3N0YWdlVmFsdWUgPSAxMDAwMDA7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNOdWxsT3JFbXB0eShfc3RhZ2UpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfc3RhZ2VWYWx1ZSA9IHBhcnNlSW50KF9zdGFnZSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKF9taW5WYWx1ZSkgIT0gJ3VuZGVmaW5lZCcgJiYgX21pblZhbHVlICE9IG51bGwgJiYgX21pblZhbHVlICE9ICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbWluVmFsdWUgPSBwYXJzZUludChfbWluVmFsdWVUZXh0LCAxMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpIDwgX21pblZhbHVlID8gMjUwMDAgOiAocGFyc2VJbnQodmFsdWUpIDwgX21pblZhbHVlICogMTAgPyA1MDAwMCA6IF9zdGFnZVZhbHVlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIHJldHVybiAxMDAwMDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBfZ2V0RGVjcmVtZW50VmFsdWUodmFsdWUsIHBhcmVudCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9zdGFnZSA9ICQocGFyZW50KS5kYXRhKCdzdGFnZScpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9zdGFnZVZhbHVlID0gMTAwMDAwO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkoX3N0YWdlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3N0YWdlVmFsdWUgPSBwYXJzZUludChfc3RhZ2UsIDEwKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKSA8IDEwMDAwMCA/IDEwMDAwIDogKHBhcnNlSW50KHZhbHVlKSA8IDEwMDAwMDAgPyA1MDAwMCA6IF9zdGFnZVZhbHVlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIHJldHVybiAxMDAwMDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBfZ2V0Um91bmRPZlZhbHVlKHZhbHVlLCBpbmNyZW1lbnRhbFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKHBhcnNlSW50KHZhbHVlKSAtIChwYXJzZUludCh2YWx1ZSkgJSBpbmNyZW1lbnRhbFZhbHVlKSkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE1pbk1heChQYXJlbnQpIHtcclxuICAgIHZhciBfbWluVmFsdWUgPSAwLCBfbWF4VmFsdWUgPSAwO1xyXG4gICAgc3dpdGNoICgkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS5hdHRyKFwib3BlcmF0aW9uXCIpKSB7XHJcbiAgICAgICAgY2FzZSBcIm1pblwiOlxyXG4gICAgICAgICAgICBfbWluVmFsdWUgPSAkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS52YWwoKTtcclxuICAgICAgICAgICAgX21heFZhbHVlID0gJChcIiNcIiArICQoXCIjXCIgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXBhcnRuZXJcIikpLmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS52YWwoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm1heFwiOlxyXG4gICAgICAgICAgICBfbWluVmFsdWUgPSAkKFwiI1wiICsgJChcIiNcIiArIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSkuYXR0cihcImRhdGEtc2VhcmNoLXZhbHVlLWJpbmRcIikpLnZhbCgpO1xyXG4gICAgICAgICAgICBfbWF4VmFsdWUgPSAkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS52YWwoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBNaW46IF9taW5WYWx1ZSwgTWF4OiBfbWF4VmFsdWUgfTtcclxufVxyXG5cclxuYWdvcmEoZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gTnVtZXJpYyBvbmx5IGNvbnRyb2wgaGFuZGxlclxyXG4gICAgalF1ZXJ5LmZuLkZvcmNlTnVtZXJpY09ubHkgPVxyXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmtleWRvd24oZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gZS5jaGFyQ29kZSB8fCBlLmtleUNvZGUgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5zaGlmdEtleSkga2V5ID0gMFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFsbG93IGJhY2tzcGFjZSwgdGFiLCBkZWxldGUsIGVudGVyLCBhcnJvd3MsIG51bWJlcnMgYW5kIGtleXBhZCBudW1iZXJzIE9OTFlcclxuICAgICAgICAgICAgICAgICAgICAvLyBob21lLCBlbmQsIHBlcmlvZCwgYW5kIG51bXBhZCBkZWNpbWFsXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09IDggfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09IDkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09IDEzIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9PSA0NiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPT0gMTEwIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9PSAxOTAgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleSA+PSAzNSAmJiBrZXkgPD0gNDApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXkgPj0gNDggJiYga2V5IDw9IDU3KSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ID49IDk2ICYmIGtleSA8PSAxMDUpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuXHJcbiAgICAkKFwiW2RhdGEtbnVtZXJpYy1vbmx5XVwiKS5Gb3JjZU51bWVyaWNPbmx5KCk7XHJcblxyXG4gICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQoXCJbZGF0YS1udW1lcmljLW9ubHldXCIpLkZvcmNlTnVtZXJpY09ubHkoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFsbG93IGJvb2ttYXJrIGNvbnNpZGVyaW5nIHRoZSBwYWdlIGhlYWRlciB3aXRoIGFuaW1hdGUgc2Nyb2xsXHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtcGFnZS1zY3JvbGxdJywgX3Njcm9sbEZvclBhZ2VTY3JvbGwpO1xyXG4gICAgJChkb2N1bWVudCkub24oJ3RhcCcsICdbZGF0YS1wYWdlLXNjcm9sbF0nLCBfc2Nyb2xsRm9yUGFnZVNjcm9sbCk7XHJcbiAgICBmdW5jdGlvbiBfc2Nyb2xsRm9yUGFnZVNjcm9sbCgpIHtcclxuICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgICAgIHZhciAkcmVmZXJlbmNlZEl0ZW0gPSAkKCcjJyArICR0aGlzLmRhdGEoJ3BhZ2Utc2Nyb2xsJykpO1xyXG4gICAgICAgIHZhciBfaXRlbVBvc2l0aW9uID0gJHJlZmVyZW5jZWRJdGVtICE9IHVuZGVmaW5lZCAmJiAkcmVmZXJlbmNlZEl0ZW0gIT0gbnVsbCAmJiAkcmVmZXJlbmNlZEl0ZW0ubGVuZ3RoID4gMCA/ICRyZWZlcmVuY2VkSXRlbS5vZmZzZXQoKS50b3AgOiAwO1xyXG4gICAgICAgIHZhciBfb2Zmc2V0ID0gMDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgX3ZhbHVlID0gJHRoaXMuZGF0YSgncGFnZS1zY3JvbGwtb2Zmc2V0Jyk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKF92YWx1ZSkgIT0gJ3VuZGVmaW5lZCcgJiYgX3ZhbHVlICE9ICcnKSBfb2Zmc2V0ID0gcGFyc2VJbnQoX3ZhbHVlKTtcclxuICAgICAgICAgICAgZWxzZSBfb2Zmc2V0ID0gJCgnI2Fnb3JhLWxheW91dC1oZWFkZXInKS5oZWlnaHQoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAkKFwiaHRtbCwgYm9keVwiKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiAoX2l0ZW1Qb3NpdGlvbiAtIF9vZmZzZXQpIH0sIDE1MDApO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciAkcmVmZXJlbmNlZFRhYkl0ZW0gPSAkKCcjJyArICR0aGlzLmRhdGEoJ3BhZ2Utc2Nyb2xsLXRhYi1pZCcpKTtcclxuICAgICAgICAgICAgJHJlZmVyZW5jZWRUYWJJdGVtLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBCdXR0b24gdG8gbW92ZSB0b3Agb2YgdGhlIHBhZ2VcclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1iYWNrLXRvLXRvcF0nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgQmFja1RvVG9wKHRoaXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJChkb2N1bWVudCkub24oJ3RhcCcsICdbZGF0YS1iYWNrLXRvLXRvcF0nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgQmFja1RvVG9wKHRoaXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQnV0dG9uIHRvIG1vdmUgYm90dG9tIG9mIHRoZSBwYWdlXHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtYmFjay10by1kb3duXScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBUb3BUb0JvdHRvbSh0aGlzKTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKCd0YXAnLCAnW2RhdGEtYmFjay10by1kb3duXScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBUb3BUb0JvdHRvbSh0aGlzKTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvKiBUaGlzIGNvZGUgd2lsbCBhbGxvdyB0byBnaXZlIGEgcmVkaXJlY3QgdXJsIHRvIGEgY29udGFpbmVyXHJcbiAgICAgICAgZGF0YS1ocmVmPVwiPHVybD5cIlxyXG4gICAgICAgIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAqL1xyXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJ1tkYXRhLWhyZWZdJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoJChlLnRhcmdldCkuY2xvc2VzdCgnW2RhdGEtbm9uLWNsaWNrLWNvbnRlbnRdJykubGVuZ3RoID4gMCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghaXNOdWxsT3JFbXB0eSgkKHRoaXMpLmRhdGEoJ2hyZWYnKSkpIHtcclxuICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KCQodGhpcykuZGF0YSgndGFyZ2V0JykpKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cub3BlbigkKHRoaXMpLmRhdGEoJ2hyZWYnKSwgJCh0aGlzKS5kYXRhKCd0YXJnZXQnKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gJCh0aGlzKS5kYXRhKCdocmVmJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG4vKnJlY3Vyc3Rpb24gZm9yIGZpcmUgZXZlbnQgd2hlbiBjbGFzcyBuYW1lIGlzIGNoYW5nZWQqL1xyXG5mdW5jdGlvbiBPbkNsYXNzQmVoYXZpb3JDaGFuZ2UoY3RybCwgaGFuZGxlcikge1xyXG4gICAgaWYgKCFJc051bGxvckVtcHR5KCQoY3RybCkuYXR0cignb2xkQ2xhc3NOYW1lJykpICYmICQoY3RybCkuYXR0cignb2xkQ2xhc3NOYW1lJykgIT0gJChjdHJsKS5hdHRyKCdjbGFzcycpKSBoYW5kbGVyKCk7XHJcbiAgICAkKGN0cmwpLmF0dHIoJ29sZENsYXNzTmFtZScsICQoY3RybCkuYXR0cignY2xhc3MnKSk7XHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgT25DbGFzc0JlaGF2aW9yQ2hhbmdlKGN0cmwsIGhhbmRsZXIpOyB9LCAxMDApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBBbmltYXRlUGxhY2Vob2xkZXJUZXh0KGN0cmwsIHBodCwgaWR4KSB7XHJcbiAgICB2YXIgX3BodCA9IHBodDtcclxuICAgIGlmIChpZHggPT0gMCkge1xyXG4gICAgICAgIF9waHQgPSBjdHJsLmF0dHIoJ3BsYWNlaG9sZGVyJyk7XHJcbiAgICAgICAgY3RybC5hdHRyKCdwbGFjZWhvbGRlcicsICcnKTtcclxuICAgIH1cclxuICAgIGlmIChpZHggPT0gX3BodC5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjdHJsLmF0dHIoJ3BsYWNlaG9sZGVyJywgX3BodC5zdWJzdHIoMCwgKytpZHgpKTsgXHJcbiAgICAgICAgQW5pbWF0ZVBsYWNlaG9sZGVyVGV4dChjdHJsLCBfcGh0LCBpZHgpO1xyXG4gICAgfSwgMTUwKTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIEFkZFJlYWRNb3JlKG1pbkxpbWl0LCBsYmxNb3JlLCBsYmxMZXNzKSB7XHJcbiAgICAvL1RoaXMgbGltaXQgeW91IGNhbiBzZXQgYWZ0ZXIgaG93IG11Y2ggY2hhcmFjdGVycyB5b3Ugd2FudCB0byBzaG93IFJlYWQgTW9yZS5cclxuICAgIHZhciBjYXJMbXQgPSBtaW5MaW1pdDtcclxuICAgIC8vIFRleHQgdG8gc2hvdyB3aGVuIHRleHQgaXMgY29sbGFwc2VkXHJcbiAgICB2YXIgcmVhZE1vcmVUeHQgPSBsYmxNb3JlO1xyXG4gICAgLy8gVGV4dCB0byBzaG93IHdoZW4gdGV4dCBpcyBleHBhbmRlZFxyXG4gICAgdmFyIHJlYWRMZXNzVHh0ID0gbGJsTGVzcztcclxuXHJcblxyXG4gICAgLy9UcmF2ZXJzZSBhbGwgc2VsZWN0b3JzIHdpdGggdGhpcyBjbGFzcyBhbmQgbWFudXB1bGF0ZSBIVE1MIHBhcnQgdG8gc2hvdyBSZWFkIE1vcmVcclxuICAgICQoXCIuYWRkUmVhZE1vcmVcIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCQodGhpcykuZmluZChcIi5maXJzdFNlY1wiKS5sZW5ndGgpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIGFsbHN0ciA9ICQodGhpcykudGV4dCgpO1xyXG4gICAgICAgIGlmIChhbGxzdHIubGVuZ3RoID4gY2FyTG10KSB7XHJcbiAgICAgICAgICAgIHZhciBmaXJzdFNldCA9IGFsbHN0ci5zdWJzdHJpbmcoMCwgY2FyTG10KTtcclxuICAgICAgICAgICAgdmFyIHNlY2RIYWxmID0gYWxsc3RyLnN1YnN0cmluZyhjYXJMbXQsIGFsbHN0ci5sZW5ndGgpO1xyXG4gICAgICAgICAgICB2YXIgc3RydG9hZGQgPSBmaXJzdFNldCArIFwiPHNwYW4gY2xhc3M9J1NlY1NlYyc+XCIgKyBzZWNkSGFsZiArIFwiPC9zcGFuPjxzcGFuIGNsYXNzPSdyZWFkTW9yZScgIHRpdGxlPSdDbGljayB0byBTaG93IE1vcmUnPlwiICsgcmVhZE1vcmVUeHQgKyBcIjwvc3Bhbj48c3BhbiBjbGFzcz0ncmVhZExlc3MnIHRpdGxlPSdDbGljayB0byBTaG93IExlc3MnPlwiICsgcmVhZExlc3NUeHQgKyBcIjwvc3Bhbj5cIjtcclxuICAgICAgICAgICAgJCh0aGlzKS5odG1sKHN0cnRvYWRkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgICAvL1JlYWQgTW9yZSBhbmQgUmVhZCBMZXNzIENsaWNrIEV2ZW50IGJpbmRpbmdcclxuICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCIucmVhZE1vcmUsLnJlYWRMZXNzXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoXCIuYWRkUmVhZE1vcmVcIikudG9nZ2xlQ2xhc3MoXCJzaG93bGVzc2NvbnRlbnQgc2hvd21vcmVjb250ZW50XCIpO1xyXG4gICAgfSk7XHJcbn1cclxuIiwi77u/YWdvcmEoZnVuY3Rpb24gKCkge1xyXG4gICAgJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIltkYXRhLW1vZGFsZGlhbG9nXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHRyaWdnZXJFbGVtZW50ID0gJCh0aGlzKTtcclxuICAgICAgICBpZiAodHJpZ2dlckVsZW1lbnQucHJvcCgnZGlzYWJsZWQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm47IFxyXG4gICAgICAgIH1cclxuICAgICAgICB0cmlnZ2VyRWxlbWVudC5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyRWxlbWVudC5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcclxuICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAkKHRoaXMpLkFnb3JhRGlhbG9nTW9kYWwoeyBBZnRlckxvYWQ6ICQodGhpcykuYXR0cignZGF0YS1tb2RhbGRpYWxvZy1hZnRlckxvYWQnKSB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1tb2RhbGRpYWxvZy1jbG9zZV1cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQodGhpcykuQWdvcmFEaWFsb2dNb2RhbCh7IENsb3NlTW9kYWw6IHRydWUgfSk7XHJcbiAgICAgICAgdmFyIHNlbmRlciA9ICQodGhpcyk7XHJcbiAgICAgICAgaWYgKHNlbmRlci5kYXRhKCdtb2RhbGRpYWxvZy1jbG9zZScpID09ICdjbGVhcicpXHJcbiAgICAgICAgQ2xlYXJGb3JtdmFsKCdbZGF0YS1yZXF1ZXN0XScpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIltkYXRhLW1vZGFsZGlhbG9nLWNsb3NlLWZvcm1dXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKHRoaXMpLkFnb3JhRGlhbG9nTW9kYWwoeyBDbG9zZU1vZGFsOiB0cnVlLCBBZnRlckxvYWQ6ICQodGhpcykuYXR0cignZGF0YS1tb2RhbGRpYWxvZy1hZnRlckxvYWQnKSB9KTtcclxuICAgIH0pO1xyXG59KTtcclxuXHJcbihmdW5jdGlvbiAoJCkge1xyXG4gICAgLy9Gb3JtYXQgOiBkYXRhLW1vZGFsZGlhbG9nPVwiXCIgZGF0YS1tb2RhbGRpYWxvZy1pZD1cIlwiIGRhdGEtbW9kYWxkaWFsb2ctYWpheD1cInRydWVcIiBkYXRhLW1vZGFsZGlhbG9nLXNyYz1cIlwiXHJcbiAgICAkLmZuLkFnb3JhRGlhbG9nTW9kYWwgPSBmdW5jdGlvbiAob3B0aW9ucykgeyByZXR1cm4gbmV3IGFnb3JhRGlhbG9nKHRoaXMsIG9wdGlvbnMpOyB9O1xyXG4gICAgZnVuY3Rpb24gYWdvcmFEaWFsb2coc2VuZGVyLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIF9kZWZhdWx0cyA9IHtcclxuICAgICAgICAgICAgU2VydmljZVVybDogJycsXHJcbiAgICAgICAgICAgIE1vZGFsSWQ6ICdJQlBtb2RhbGNvbnRhaW5lcicsXHJcbiAgICAgICAgICAgIFBhcmFtczogbnVsbCxcclxuICAgICAgICAgICAgSHRtbDogbnVsbCxcclxuICAgICAgICAgICAgUGFyZW50Q3NzOiBudWxsLFxyXG4gICAgICAgICAgICBFbmFibGVDbG9zZUJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgICAgRW5hYmxlTG9hZGVyOiB0cnVlLFxyXG4gICAgICAgICAgICBFbmFibGVBamF4SHRtbExvYWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBIaWRlQ2xvc2VCdXR0b246IGZhbHNlLFxyXG4gICAgICAgICAgICBDbG9zZU1vZGFsOiBmYWxzZSxcclxuICAgICAgICAgICAgQ2xvc2VXaGVuVXNlclByZXNzRXNjYXBlOiB0cnVlLFxyXG4gICAgICAgICAgICBUcmFuc2l0aW9uOiAnRmFkZUluJywgLyogRmFkZUluLCBBcHBlbmQgKi9cclxuICAgICAgICAgICAgQmVmb3JlTG9hZDogbnVsbCxcclxuICAgICAgICAgICAgQWZ0ZXJMb2FkOiBudWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgX29wdGlvbnMgPSAkLmV4dGVuZChfZGVmYXVsdHMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuQ2xvc2VNb2RhbCkge1xyXG4gICAgICAgICAgICAkKHNlbmRlcikuY2xvc2VzdCgnLmFnb3JhLW1kbC1kYXRhLWRpYWxvZy1jb250YWluZXInKS50cmlnZ2VyKCdkaXNwb3NlJyk7XHJcbiAgICAgICAgICAgICQoc2VuZGVyKS5jbG9zZXN0KCcuYWdvcmEtbWRsLWRhdGEtZGlhbG9nLWNvbnRhaW5lcicpLnJlbW92ZUNsYXNzKCdwb3B1cC1vcGVuJyk7XHJcbiAgICAgICAgICAgICQoc2VuZGVyKS5jbG9zZXN0KCcuYWdvcmEtbWRsLWRhdGEtZGlhbG9nLWNvbnRhaW5lcicpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAvLyQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkudHJpZ2dlcignZGlzcG9zZScpO1xyXG4gICAgICAgICAgICAvLyQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkucmVtb3ZlQ2xhc3MoJ3BvcHVwLW9wZW4nKTtcclxuICAgICAgICAgICAgLy8kKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ3BvcHVwLWFjdGl2ZScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuQWZ0ZXJMb2FkKSB7XHJcbiAgICAgICAgICAgIF9vcHRpb25zLkFmdGVyTG9hZCA9IGV2YWwoXCIoZnVuY3Rpb24oKSB7IFwiICsgX29wdGlvbnMuQWZ0ZXJMb2FkICsgXCIoXCIgKyBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctaWRcIikgK1wiKTsgfSlcIik7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUxvYWRlcikgU2hvd0xvYWRpbmcoKTtcclxuXHJcbiAgICAgICAgTG9hZE9wdGlvbnMoKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gTG9hZE9wdGlvbnMoKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1zcmNcIikpKSBfb3B0aW9ucy5TZXJ2aWNlVXJsID0gc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLXNyY1wiKTtcclxuICAgICAgICAgICAgaWYgKElzTm90TnVsbChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctYWpheFwiKSkpIF9vcHRpb25zLkVuYWJsZUFqYXhIdG1sTG9hZCA9IHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1hamF4XCIpO1xyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1QYXJlbnRDc3NcIikpKSBfb3B0aW9ucy5QYXJlbnRDc3MgPSBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctUGFyZW50Q3NzXCIpO1xyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1DbG9zZVdoZW5Vc2VyUHJlc3NFc2NhcGVcIikpKSBfb3B0aW9ucy5DbG9zZVdoZW5Vc2VyUHJlc3NFc2NhcGUgPSAoc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLUNsb3NlV2hlblVzZXJQcmVzc0VzY2FwZVwiKSA9PSAndHJ1ZScpO1xyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1IaWRlQ2xvc2VCdXR0b25cIikpKSBfb3B0aW9ucy5IaWRlQ2xvc2VCdXR0b24gPSAoc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLUhpZGVDbG9zZUJ1dHRvblwiKSA9PSAndHJ1ZScpO1xyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1pZFwiKSkpIF9vcHRpb25zLk1vZGFsSWQgPSBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctaWRcIik7XHJcbiAgICAgICAgICAgIEdldEh0bWwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIEdldEh0bWwoKSB7XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUFqYXhIdG1sTG9hZCkge1xyXG4gICAgICAgICAgICAgICAgLy9SZW1vdmUgaWYgdGhlIGNvbnRhaW5lciBpcyBhbHJlYWR5IG9wZW4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAvL0dldCBIdG1sIEZyb20gVGhlIFNlcnZpY2UgVXJsXHJcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogX29wdGlvbnMuU2VydmljZVVybCxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAncG9zdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdodG1sJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBfb3B0aW9ucy5QYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW9ucy5IdG1sID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJpbmRIdG1sKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNob3dBbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnLCAzMDAwLCAnYWxlcnRfYm94JywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVMb2FkZXIpIFNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd0FsZXJ0KCdTZXJ2aWNlIG5vdCBmb3VuZCEnLCAzMDAwLCAnYWxlcnRfYm94JywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlTG9hZGVyKSBTaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQWZ0ZXJMb2FkKSBfb3B0aW9ucy5BZnRlckxvYWQoKTtcclxuICAgICAgICAgICAgICAgIF9vcHRpb25zLkh0bWwgPSAkKCcjJyArIHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1pZFwiKSkuY2xvbmUoKS53cmFwKCcjJyArIHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1pZFwiKSkuaHRtbCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBCaW5kSHRtbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gQmluZEh0bWwoKSB7XHJcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5IdG1sICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIC8vQ3JlYXRlIHBvcHVwIGNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgJCgnPGRpdiBpZD1cIicgKyBfb3B0aW9ucy5Nb2RhbElkICsgJ1wiIGNsYXNzPVwiYWdvcmEtbWRsLWRhdGEtZGlhbG9nLWNvbnRhaW5lciAnICsgX29wdGlvbnMuUGFyZW50Q3NzICsgJ1wiPjxkaXYgY2xhc3M9XCJhZ29yYS1tZGwtZGF0YS1kaWFsb2ctY29udGFpbmVyLWJvZHlcIj4nICsoIV9vcHRpb25zLkhpZGVDbG9zZUJ1dHRvbiA/ICc8ZGl2IGRhdGEtbW9kYWxkaWFsb2ctY2xvc2U9XCJcIiBjbGFzcz1cIm1kbC1jbG9zZVwiPjwvZGl2PicgOiAnJykgKyBfb3B0aW9ucy5IdG1sICsgJzwvZGl2PjxkaXYgaWQ9XCJwb3B1cFwiIGNsYXNzPVwibWRsLWpzLXNuYWNrYmFyIG1kbC1zbmFja2JhclwiPjxkaXYgY2xhc3M9XCJtZGwtc25hY2tiYXJfX3RleHRcIj48L2Rpdj48YnV0dG9uIGFyaWEtbGFiZWw9XCJidXR0b25cIiBjbGFzcz1cIm1kbC1zbmFja2Jhcl9fYWN0aW9uXCIgdHlwZT1cImJ1dHRvblwiPjwvYnV0dG9uPjwvZGl2PiA8L2Rpdj4nKS5hcHBlbmRUbyhcImJvZHlcIik7XHJcbiAgICAgICAgICAgICAgICAvLyQoJy5hZ29yYS1tZGwtZGF0YS1kaWFsb2ctY29udGFpbmVyJykuY3NzKCd0b3AnLCAoJCh3aW5kb3cpLnNjcm9sbFRvcCgpKSArICdweCcpO1xyXG4gICAgICAgICAgICAgICAgJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5hZGRDbGFzcygncG9wdXAtb3BlbicpO1xyXG4gICAgICAgICAgICAgICAgJCgnYm9keScpLmFkZENsYXNzKCdwb3B1cC1hY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIC8vQmluZCBIdG1sXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlTG9hZGVyKSBTaG93TG9hZGluZygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghKHR5cGVvZiAoY29tcG9uZW50SGFuZGxlcikgPT0gJ3VuZGVmaW5lZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SGFuZGxlci51cGdyYWRlRG9tKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5maW5kKCcubWRsLXRleHRmaWVsZC0tZmxvYXRpbmctbGFiZWwgaW5wdXQubWRsLXRleHRmaWVsZF9faW5wdXQ6bm90KFtwbGFjZWhvbGRlcl0pJykuYXR0cihcInBsYWNlaG9sZGVyXCIsIFwiICBcIik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vaWYgKHJlQ2FwdGNoYUFnb3JhKSB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAkKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLmZpbmQoJ1tkYXRhLXJlY2FwdGNoYS1hZ29yYV0nKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIC8vICAgIHJlQ2FwdGNoYUFnb3JhLmluaXQocmVDYXB0Y2hhQWdvcmEucmVDYXB0Y2hhQXBwSUQsIHJlQ2FwdGNoYUFnb3JhLnRva2VuLCBmYWxzZSwgMSk7XHJcbiAgICAgICAgICAgICAgICAvL31cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJChkb2N1bWVudCkua2V5ZG93bihmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IFwiMjdcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkNsb3NlV2hlblVzZXJQcmVzc0VzY2FwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkucmVtb3ZlQ2xhc3MoJ3BvcHVwLW9wZW4nKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygncG9wdXAtYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSkoalF1ZXJ5KTtcclxuXHJcbmZ1bmN0aW9uIENsb3NlUG9wdXAoKSB7XHJcbiAgICAkKCdbZGF0YS1tb2RhbGRpYWxvZy1jbG9zZV0nKS50cmlnZ2VyKFwiY2xpY2tcIik7XHJcbn0iLCLvu79cclxuXHJcblxyXG4gICAgd2luZG93LmFnUmVxdWVzdCA9IHtcclxuICAgICAgICBHRVQ6IGFzeW5jIGZ1bmN0aW9uIChzZXJ2aWNlVXJsLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZyArICgocXVlcnlTdHJpbmcgIT0gJycgPyAnJicgOiAnJykgKyBrZXkgKyAnPScgKyBkYXRhW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlcnZpY2VVcmwgKz0gc2VydmljZVVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JyArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IGF3YWl0IGZldGNoKHNlcnZpY2VVcmwsIHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgICAgIGNhY2hlOiBcIm5vLWNhY2hlXCIsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QuanNvbigpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgUE9TVDogYXN5bmMgZnVuY3Rpb24gKHNlcnZpY2VVcmwsIGRhdGEpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1EYXRhID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YVtrZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IGF3YWl0IGZldGNoKHNlcnZpY2VVcmwsIHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICBjYWNoZTogXCJuby1jYWNoZVwiLFxyXG4gICAgICAgICAgICAgICAgYm9keTogZm9ybURhdGFcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5qc29uKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG5cclxuLy9MYXp5IGxvYWRlclxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgYXN5bmMgZnVuY3Rpb24gZmluZExhenkoKSB7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc3JjXTpub3QoLmFnLWxhenkpOm5vdCgubm8tYWcpOm5vdChbZGF0YS1zcmMqPVwie3tcIl0pJyk7XHJcblxyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XHJcbiAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnYWctbGF6eScpO1xyXG4gICAgICAgICAgICB2YXIgYWN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYXR0YWNoQWN0aW9uKGl0ZW0sIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FnLmxhenknLCBhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhenknLCBhY3Rpb24pO1xyXG5cclxuICAgICAgICAgICAgYWN0aW9uKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXQoKSB7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGF6eS5yZWZyZXNoJywgZmluZExhenkpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnJlZnJlc2gnLCBmaW5kTGF6eSk7XHJcblxyXG4gICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcubGF6eS5yZWZyZXNoJyk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uIChlKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhenknKTtcclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhenknKTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgd2luZG93LmFnTGF6eSA9IHtcclxuICAgICAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5sYXp5LnJlZnJlc2gnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2YWxpZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5sYXp5Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGF0dGFjaEFjdGlvbihpdGVtLCBzdWNjZXNzKSB7ICAgICAgICAgXHJcbiAgICAgICAgdmFyIGJsYW5rSW1hZ2UgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FRQUFBQzFIQXdDQUFBQUMwbEVRVlI0Mm1Oa1lBQUFBQVlBQWpDQjBDOEFBQUFBU1VWT1JLNUNZSUk9JztcclxuICAgICAgICBpZiAoYXdhaXQgY2hlY2tpc0luVmlld3BvcnQoaXRlbSkpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB2YXIgc3JjVXJsID0gYXdhaXQgZ2V0Rm9ybWF0dGVkSW1hZ2VVcmwoaXRlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJyksIGl0ZW0pO1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnVklERU8nKSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgaXRlbS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHNyY1VybC51cmwpIH0sIDEwMDAwKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnT0JKRUNUJyB8fCBpdGVtLm5vZGVOYW1lID09ICdBVURJTycpXHJcbiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnc3JjJywgc3JjVXJsLnVybClcclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnSU1HJykgeyAgIFxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnc3JjJykgIT0gYmxhbmtJbWFnZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdhZy1sYXp5LXMnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdzcmMnLCBibGFua0ltYWdlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc3JjVXJsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3JjVXJsLnNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY1VybC5zaXplLndpZHRoPjApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBzcmNVcmwuc2l6ZS53aWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNVcmwuc2l6ZS5oZWlnaHQgPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHNyY1VybC5zaXplLmhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdzcmMnLCBzcmNVcmwudXJsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZVsnYmFja2dyb3VuZC1pbWFnZSddID0gYHVybCgnJHtzcmNVcmwudXJsfScpYDtcclxuICAgICAgICAgICAgc3VjY2VzcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHJvb3Q6IG51bGwsXHJcbiAgICAgICAgICAgIHJvb3RNYXJnaW46IFwiMHB4XCIsXHJcbiAgICAgICAgICAgIHRocmVzaG9sZDogMC4xLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhpdGVtLCdWaWV3Jyk7XHJcblxyXG4gICAgICAgIH0sIG9wdGlvbnMpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRGb3JtYXR0ZWRJbWFnZVVybCh1cmwsIGl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgaXNBdXRvID0gaXRlbS5oYXNBdHRyaWJ1dGUoJ2RhdGEtcmF0aW8tYXV0bycpOyAgICAgICAgXHJcbiAgICAgICAgaWYgKGlzQXV0bykgcmV0dXJuIHsgdXJsOiB1cmwgfTsgICAgICAgIFxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gYXdhaXQgZ2V0QmVzdEZpdENvbnRhaW5lcihpdGVtLCAxNiwgOSk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gLy4qXFw/KC4qPyhtaHxtdylcXD0oXFxkKykpKi9naS5leGVjKHVybCk7XHJcbiAgICAgICAgdmFyIGFkZGl0aW9uYWxVcmwgPSAnJzsgICAgICAgIFxyXG4gICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1jcm9wJykgIT0gbnVsbCkgYWRkaXRpb25hbFVybCArPSAnJm1vZGU9Y3JvcCc7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvJykgPT0gMCAmJiBmYWxzZSkge1xyXG4gICAgICAgICAgICB2YXIgcHJvamVjdENvZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1wY29kZScpO1xyXG4gICAgICAgICAgICB1cmwgPSBgaHR0cHM6Ly9jZG4uZGF0YWZsb2F0LmNvbS8ke3Byb2plY3RDb2RlfV9DV1Mke3VybH1gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh1cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0Y2ggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyB1cmw6IHVybCwgc2l6ZTogY3VycmVudCB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHVybDogYCR7dXJsfT9gICsgKGN1cnJlbnQud2lkdGggPiAwID8gYG13PSR7Y3VycmVudC53aWR0aH1gICsgKGN1cnJlbnQuaGVpZ2h0PjA/JyYnOicnKSA6ICcnKSArIChjdXJyZW50LmhlaWdodCA+IDAgPyBgbWg9JHtjdXJyZW50LmhlaWdodH1gIDogJycpICsgYCR7YWRkaXRpb25hbFVybH1gLCBzaXplOiBjdXJyZW50IH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldEJlc3RGaXRDb250YWluZXIoaXRlbSwgZGVmYXVsdFJhdGlvV2lkdGgsIGRlZmF1bHRSYXRpb0hlaWdodCkge1xyXG4gICAgICAgIGlmIChpdGVtID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICB2YXIgcmF0aW8gPSBpdGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1yYXRpbycpO1xyXG4gICAgICAgIHZhciByYXRpb01hdGNoID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHJhdGlvICYmIHJhdGlvICE9IG51bGwgJiYgKHJhdGlvTWF0Y2ggPSAvXig/PHdpZHRoPlswLTlcXC5dezEsNH0pOig/PGhlaWdodD5bMC05XFwuXXsxLDR9KSQvZ2kuZXhlYyhyYXRpbykpICE9IG51bGwpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgZGVmYXVsdFJhdGlvV2lkdGggPSBwYXJzZUZsb2F0KHJhdGlvTWF0Y2guZ3JvdXBzLndpZHRoKTtcclxuICAgICAgICAgICAgZGVmYXVsdFJhdGlvSGVpZ2h0ID0gcGFyc2VGbG9hdChyYXRpb01hdGNoLmdyb3Vwcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFJhdGlvV2lkdGggPT0gMCkgZGVmYXVsdFJhdGlvV2lkdGggPSAtMTtcclxuICAgICAgICAgICAgaWYgKGRlZmF1bHRSYXRpb0hlaWdodCA9PSAwKSBkZWZhdWx0UmF0aW9IZWlnaHQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3aWR0aCA9IGN1cnJlbnQud2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IGN1cnJlbnQuaGVpZ2h0O1xyXG4gICAgICAgIGlmIChpdGVtLmNsYXNzTGlzdC5jb250YWlucygnYWctbGF6eScpKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gaXRlbS5nZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiKTtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gaXRlbS5nZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIik7XHJcbiAgICAgICAgICAgIGlmICh3aWR0aCA9PSB1bmRlZmluZWQgfHwgd2lkdGggPT0gbnVsbCB8fCB3aWR0aCA9PSAnJylcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gaXRlbS5zdHlsZS53aWR0aDtcclxuXHJcbiAgICAgICAgICAgIGlmICh3aWR0aCA9PSB1bmRlZmluZWQgfHwgd2lkdGggPT0gbnVsbCB8fCB3aWR0aCA9PSAnJykgd2lkdGggPSAwO1xyXG4gICAgICAgICAgICBlbHNlIHdpZHRoID0gcGFyc2VJbnQod2lkdGgucmVwbGFjZSgvW15cXGRdKy9naSwgJycpKTtcclxuICAgICAgICAgICAgaWYgKGhlaWdodCA9PSB1bmRlZmluZWQgfHwgaGVpZ2h0ID09IG51bGwgfHwgaGVpZ2h0ID09ICcnKSBoZWlnaHQgPSAwO1xyXG4gICAgICAgICAgICBlbHNlIGhlaWdodCA9IHBhcnNlSW50KGhlaWdodC5yZXBsYWNlKC9bXlxcZF0rL2dpLCAnJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmICh3aWR0aCAhPSBoZWlnaHQgJiYgKCh3aWR0aCA9PSB1bmRlZmluZWQgfHwgaGVpZ2h0ID09IHVuZGVmaW5lZCkgfHwgKGhlaWdodCA8IHdpZHRoIC8gZGVmYXVsdFJhdGlvV2lkdGggKiBkZWZhdWx0UmF0aW9IZWlnaHQpIHx8IHdpZHRoIDwgaGVpZ2h0IC8gZGVmYXVsdFJhdGlvSGVpZ2h0ICogZGVmYXVsdFJhdGlvV2lkdGgpKSB7XHJcbiAgICAgICAgICAgIGlmICh3aWR0aCA+IDApXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSB3aWR0aCAvIGRlZmF1bHRSYXRpb1dpZHRoICogZGVmYXVsdFJhdGlvSGVpZ2h0O1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCAvIGRlZmF1bHRSYXRpb0hlaWdodCAqIGRlZmF1bHRSYXRpb1dpZHRoO1xyXG4gICAgICAgIH0gICAgXHJcblxyXG5cclxuICAgICAgICBpZiAoKHdpZHRoID4gMCB8fCBkZWZhdWx0UmF0aW9XaWR0aDwwICkgJiYgKGhlaWdodCA+IDAgfHwgZGVmYXVsdFJhdGlvSGVpZ2h0PDApICkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGguZmxvb3Iod2lkdGgpO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHdpZHRoOiBkZWZhdWx0UmF0aW9XaWR0aCA8IDAgPyAwIDogd2lkdGggKyAoMTAgLSAod2lkdGggJSAxMCkpLCBoZWlnaHQ6IGRlZmF1bHRSYXRpb0hlaWdodCA8IDAgPyAwIDogaGVpZ2h0ICsgKDEwIC0gKGhlaWdodCAlIDEwKSkgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdldEJlc3RGaXRDb250YWluZXIoaXRlbS5wYXJlbnRFbGVtZW50LCBkZWZhdWx0UmF0aW9XaWR0aCwgZGVmYXVsdFJhdGlvSGVpZ2h0KTsgICAgICAgIFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBtYXBUb0F1dG9TaXplKHdpZHRoLCBoZWlnaHQpIHsgICAgICAgIFxyXG4gICAgICAgIHJldHVybiB7IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGNoZWNraXNJblZpZXdwb3J0KGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgY3VycmVudCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcclxuICAgICAgICB2YXIgZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZhciBzY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jRWwuc2Nyb2xsVG9wIHx8IGJvZHkuc2Nyb2xsVG9wO1xyXG4gICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY0VsLnNjcm9sbExlZnQgfHwgYm9keS5zY3JvbGxMZWZ0O1xyXG5cclxuICAgICAgICB2YXIgY2xpZW50VG9wID0gZG9jRWwuY2xpZW50VG9wIHx8IGJvZHkuY2xpZW50VG9wIHx8IDA7XHJcbiAgICAgICAgdmFyIGNsaWVudExlZnQgPSBkb2NFbC5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8fCAwO1xyXG5cclxuICAgICAgICB2YXIgZWxlbWVudFRvcCA9IGN1cnJlbnQudG9wICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wO1xyXG4gICAgICAgIHZhciBlbGVtZW50Qm90dG9tID0gY3VycmVudC5ib3R0b20gKyBzY3JvbGxUb3AgLSBjbGllbnRUb3A7XHJcblxyXG4gICAgICAgIGxldCB2aWV3cG9ydFRvcCA9IHNjcm9sbFRvcDtcclxuICAgICAgICBsZXQgdmlld3BvcnRCb3R0b20gPSB2aWV3cG9ydFRvcCArIHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gZWxlbWVudEJvdHRvbSA+IHZpZXdwb3J0VG9wICYmIGVsZW1lbnRUb3AgPCB2aWV3cG9ydEJvdHRvbTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBpbml0KTtcclxuXHJcbiAgICAgXHJcblxyXG4gICAgLypBY2NvcmRpb24gSlMqL1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIEFjY29yZGlvbkZuKCkge1xyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWFjYy1pXCIpICE9IG51bGwpIHtcclxuXHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tYWNjLWlcIikuZm9yRWFjaCgoYWNjaXRlbSkgPT4ge1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY2NvcmRpb25JdGVtQm9keSA9IGFjY2l0ZW0uY2xvc2VzdChcIi5pdGVtLWFjYy1jXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhY2NpdGVtLmNsYXNzTGlzdC5jb250YWlucyhcIm9wZW5cIikpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW9uSXRlbUJvZHkuc3R5bGUubWF4SGVpZ2h0ID0gYWNjb3JkaW9uSXRlbUJvZHkuc2Nyb2xsSGVpZ2h0ICsgXCJweFwiO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgYWNjaXRlbS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaXRlbS5jbGFzc0xpc3QudG9nZ2xlKFwib3BlblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2l0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW9uSXRlbUJvZHkuc3R5bGUubWF4SGVpZ2h0ID0gYWNjb3JkaW9uSXRlbUJvZHkuc2Nyb2xsSGVpZ2h0ICsgXCJweFwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhY2NpdGVtLmNsYXNzTGlzdC5jb250YWlucyhcIm9wZW5cIikpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY29yZGlvbkl0ZW1Cb2R5LnN0eWxlLm1heEhlaWdodCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS1hY2MtaVwiKS5vZmZzZXRIZWlnaHQgKyBcInB4XCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICBcclxuICAgIEFjY29yZGlvbkZuKCk7XHJcblxyXG5cclxuICAgIC8qVGFiIEpTKi9cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBUYWJGbigpIHtcclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS10YWItYlwiKSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGFiLWJcIikuZm9yRWFjaCgoYnV0dG9uLCBpbmRleCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGFiLWNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lkZUJhciA9IGJ1dHRvbi5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYnNDb250YWluZXIgPSBzaWRlQmFyLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkZUJhci5xdWVyeVNlbGVjdG9yQWxsKCcuaXRlbS10YWItYicpLmZvckVhY2goYnV0dG9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGFic0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuaXRlbS10YWItYycpLmZvckVhY2godGFiID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1tpbmRleF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgIH1cclxuICAgXHJcbiAgICBUYWJGbigpO1xyXG5cclxuXHJcbiAgICAgXHJcbiAgICAvKlByb3BlcnR5U2VhcmNoQ29udHJvbFdvcmtpbmcgSlMqL1xyXG4gICAgYXN5bmMgZnVuY3Rpb24gUHJvcGVydHlTZWFyY2hDb250cm9sV29ya2luZygpIHtcclxuXHJcblxyXG4gICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLml0ZW0tc2VhXCIpICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jb24tbWVudSBhJykuZm9yRWFjaChmdW5jdGlvbiAobWVudWl0ZW0pIHtcclxuXHJcbiAgICAgICAgICAgICAgICBtZW51aXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxhYmVsLWNvbicpLnNldEF0dHJpYnV0ZSgnZGF0YS1jb3VudHJ5JywgbWVudWl0ZW0uaW5uZXJIVE1MKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lbnVpdGVtLmNsb3Nlc3QoXCIuaXRlbS1kci1jXCIpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0uY2xvc2VzdChcIi5pdGVtLWRyLWNcIikucHJldmlvdXNFbGVtZW50U2libGluZy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRyb3BzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLml0ZW0tZHIgPiAuaXRlbS1kci1sYScpO1xyXG5cclxuICAgICAgICAgICAgZHJvcHMuZm9yRWFjaCgoZHJvcCwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkcm9wLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIFRvZ2dsZUFjdGl2ZShkcm9wLCBpZHgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gVG9nZ2xlQWN0aXZlKGVsLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICBkcm9wcy5mb3JFYWNoKChkcm9wLCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWR4ICE9PSBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkcm9wLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZHJvcHMuZm9yRWFjaCgoZHJvcERpdikgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIShldmVudC50YXJnZXQuY2xvc2VzdChcIi5pdGVtLWRyLWxhXCIpKSAmJiAhKGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiLml0ZW0tZHItY1wiKSkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BEaXYuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pdGVtLWNsJykuZm9yRWFjaChmdW5jdGlvbiAoY2xvc2VidG4pIHtcclxuXHJcbiAgICAgICAgICAgICAgICBjbG9zZWJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbG9zZWJ0bi5jbG9zZXN0KFwiLml0ZW0tZHItY1wiKS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlYnRuLmNsb3Nlc3QoXCIuaXRlbS1kci1jXCIpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBFbmFibGVTZWFyY2hiZWxvd1RhYigpIHtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDEwMjQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLml0ZW0tb25zdHh0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3NyY2gtb3BuZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNhbmNlbC1idG4nKS5mb3JFYWNoKGZ1bmN0aW9uIChjYW5jZWxidG4pIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3NyY2gtb3BuZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICBFbmFibGVTZWFyY2hiZWxvd1RhYigpO1xyXG5cclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIEVuYWJsZVNlYXJjaGJlbG93VGFiKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBQcm9wZXJ0eVNlYXJjaENvbnRyb2xXb3JraW5nKCk7XHJcblxyXG5cclxuXHJcbiAgICAvLyBzY3JvbGwgY2xhc3MgYWRkZWQgaW4gYm9keSB3aGVuIHNjcm9sbGluZ1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIFNjcm9sbGJvZHljbGFzcygpIHtcclxuICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB3aW5kb3cuc2Nyb2xsWTtcclxuICAgICAgICAgICAgaWYgKHNjcm9sbFRvcCA+IDEwKSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3Njcm9sbCcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdzY3JvbGwnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBTY3JvbGxib2R5Y2xhc3MpO1xyXG5cclxuXHJcbiAgICAvLyBCdXJnZXIgbWVudVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBIZWFkZXJCdXJnZXJDaGFuZ2UoKSB7XHJcblxyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBCdXJnZXJBY3RpdmUoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVyZ2VyLWNcIikuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaXRlbS1uLTJcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5yZW1vdmUoXCJpdGVtLW4tMlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5hZGQoXCJpdGVtLW4tMVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtdWNub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLXVjXCIpO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWhcIikucXVlcnlTZWxlY3RvcihcIm5hdlwiKS5pbnNlcnRCZWZvcmUoaXRlbXVjbm9kZSwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWhcIikucXVlcnlTZWxlY3RvcihcIm5hdlwiKS5maXJzdENoaWxkKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIEJ1cmdlckRlYWN0aXZlKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5jb250YWlucyhcIml0ZW0tbi0xXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKS5jbGFzc0xpc3QucmVtb3ZlKFwiaXRlbS1uLTFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKS5jbGFzc0xpc3QuYWRkKFwiaXRlbS1uLTJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXVjbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS11Y1wiKTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS1oXCIpLmFwcGVuZENoaWxkKGl0ZW11Y25vZGUpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSAxMDI0KSB7IEJ1cmdlckFjdGl2ZSgpOyB9XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID4gMTAyNCkgeyBCdXJnZXJEZWFjdGl2ZSgpOyB9XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVyZ2VyLWMgfiBuYXZcIikub2Zmc2V0V2lkdGggPCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jIH4gbmF2XCIpLnNjcm9sbFdpZHRoKSB7IEJ1cmdlckFjdGl2ZSgpOyB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIEhlYWRlckJ1cmdlckNoYW5nZSgpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIEhlYWRlckJ1cmdlckNoYW5nZSk7XHJcblxyXG5cclxuXHJcbiAgICAvLyBSaXBwbGUgZWZmZWN0XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gUmlwcGxlRm4oKSB7XHJcblxyXG4gICAgICAgIHZhciByaXBwbGVidXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5hLWItMSwgLmEtYi0yLCAuYS1iLTMsIC5hLWItNCwgLmEtYi01XCIpO1xyXG5cclxuICAgICAgICBpZiAocmlwcGxlYnV0dG9ucyAhPSBudWxsKSB7XHJcblxyXG5cclxuICAgICAgICAgICAgcmlwcGxlYnV0dG9ucy5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IGUub2Zmc2V0WDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IGUub2Zmc2V0WTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJpcHBsZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyaXBwbGUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJpcHBsZXMubGVuZ3RoIDwgMTApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJpcHBsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlwcGxlLmNsYXNzTGlzdC5hZGQoJ3JpcHBsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByaXBwbGUuc3R5bGUubGVmdCA9IHggKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByaXBwbGUuc3R5bGUudG9wID0geSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQocmlwcGxlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlwcGxlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIFJpcHBsZUZuKCk7XHJcblxyXG5cclxuICAgIC8qSG9tZSBwYWdlIHZpZGVvIHBsYXllciBzY3JpcHQgdG8gaGlkZSBidXR0b24qL1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIFZpZGVvUGxheUZuKCkge1xyXG5cclxuICAgICAgICB2YXIgdmlkZW9FbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIudmlkZW8tcGxheVwiKTtcclxuXHJcblxyXG4gICAgICAgIGlmICh2aWRlb0VsZW1lbnRzICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHZpZGVvRWxlbWVudHMuZm9yRWFjaCh2aWRlbyA9PiB7XHJcbiAgICAgICAgICAgICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvLmNsb3Nlc3QoXCJmaWd1cmVcIikuY2xhc3NMaXN0LmFkZChcIm5vLWJ0blwiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlkZW8uY2xvc2VzdChcImZpZ3VyZVwiKS5jbGFzc0xpc3QucmVtb3ZlKFwibm8tYnRuXCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgVmlkZW9QbGF5Rm4oKTtcclxuXHJcbn0pKCk7XHJcblxyXG5mdW5jdGlvbiBzaG93UHJvcGVydHlHYWxsZXJ5KGNsaWVudENvZGUsIHByb3BlcnR5UlQsIG1sc051bWJlciwgcGhvdG9Db3VudCwgcm9vdENsYXNzKSB7XHJcbiAgICB2YXIgX3NUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQ7XHJcbiAgICB2YXIgX2dDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucHJvcGVydHktZ2FsbGVyeS1jb250YWluZXInKTtcclxuICAgIHZhciBfZ0NvbnRhaW5lckNsb3NlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICBfZ0NvbnRhaW5lckNsb3NlLmNsYXNzTGlzdC5hZGQoJ3Byb3BlcnR5LWdhbGxlcnktY29udGFpbmVyLWNsb3NlJyk7XHJcbiAgICBfZ0NvbnRhaW5lckNsb3NlLnNldEF0dHJpYnV0ZSgndGl0bGUnLCAnQ2xvc2UgUHJvcGVydHkgR2FsbGVyeScpO1xyXG4gICAgX2dDb250YWluZXJDbG9zZS5pbm5lclRleHQgPSAnWCc7XHJcbiAgICBfZ0NvbnRhaW5lckNsb3NlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByb3BlcnR5LWdhbGxlcnktY29udGFpbmVyJykgIT0gbnVsbCkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByb3BlcnR5LWdhbGxlcnktY29udGFpbmVyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIF9zVG9wKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ3Zpc2libGUnO1xyXG4gICAgfSwgdHJ1ZSk7XHJcbiAgICBpZiAoX2dDb250YWluZXIgPT0gbnVsbCkge1xyXG4gICAgICAgIF9nQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgX2dDb250YWluZXIuY2xhc3NMaXN0LmFkZCgncHJvcGVydHktZ2FsbGVyeS1jb250YWluZXInKTtcclxuICAgICAgICBpZiAocm9vdENsYXNzICE9IG1sc051bWJlcikgX2dDb250YWluZXIuY2xhc3NMaXN0LmFkZChyb290Q2xhc3MpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoX2dDb250YWluZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIF9nQ29udGFpbmVyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwicy13LTEwMCBzLXAtciBoZXJvLXNsaWRlclwiPjxpIGNsYXNzPVwibGVmdC1idG5cIj4mbHQ7PC9pPjxkaXYgY2xhc3M9XCJpdGVtLXMgc2hvdy1uYXZcIj48L2Rpdj48aSBjbGFzcz1cInJpZ2h0LWJ0blwiPiZndDs8L2k+PGRpdiBjbGFzcz1cImRvdHMtd3JhcHBlclwiPjwvZGl2PjxkaXYgc3R5bGU9XCJjbGVhcjogYm90aDtcIj48L2Rpdj48L2Rpdj4nO1xyXG4gICAgX2dDb250YWluZXIuYXBwZW5kQ2hpbGQoX2dDb250YWluZXJDbG9zZSk7XHJcblxyXG4gICAgdmFyIF9pdGVtQ29udGFpbmVyID0gX2dDb250YWluZXIucXVlcnlTZWxlY3RvcignLml0ZW0tcycpO1xyXG4gICAgdmFyIF9pdGVtSHRtbCA9IG51bGw7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBob3RvQ291bnQ7IGkrKykge1xyXG4gICAgICAgIF9pdGVtSHRtbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIF9pdGVtSHRtbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIml0ZW1cIj48aW1nIGNsYXNzPVwibGF6eSBzLXctMTAwIHMtaC0xMDAgcy1vZi1jdlwiIGFsdD1cInByb3BlcnR5IHBob3RvICcgKyAoaSArIDEpICsgJ1wiIGRhdGEtc3JjPVwiaHR0cHM6Ly9jZG4uZGF0YWZsb2F0LmNvbS8nICsgY2xpZW50Q29kZSArICdfUFVCTElDL01MU1Bob3Rvcy8nICsgcHJvcGVydHlSVC50b1VwcGVyQ2FzZSgpICsgJy8nICsgbWxzTnVtYmVyICsgJ18nICsgKGkgKyAxKSArICcuanBnXCIgLz48L2Rpdj4nXHJcbiAgICAgICAgX2l0ZW1Db250YWluZXIuYXBwZW5kKF9pdGVtSHRtbC5maXJzdEVsZW1lbnRDaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWdTbGlkZXIoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhdXRvUGxheTogdHJ1ZSxcclxuICAgICAgICAgICAgYXV0b1BsYXlEZWxheTogNTAwMCxcclxuICAgICAgICAgICAgbG9vcDogdHJ1ZSxcclxuICAgICAgICAgICAgc2hvd0J1bGxldHM6IHRydWUsXHJcbiAgICAgICAgICAgIHNob3dDb250cm9sczogdHJ1ZSxcclxuICAgICAgICAgICAgYnVsbGV0Q29udGFpbmVyOiAnLmRvdHMtd3JhcHBlcicsXHJcbiAgICAgICAgICAgIHNob3dCdWxsZXRzQXNUaHVtYjogdHJ1ZSxcclxuICAgICAgICAgICAgaXRlbVdyYXBwZXI6ICcuaXRlbS1zJyxcclxuICAgICAgICAgICAgaXRlbUNvbnRhaW5lcjogJy5pdGVtJyxcclxuICAgICAgICB9LCAnLnByb3BlcnR5LWdhbGxlcnktY29udGFpbmVyJywgZnVuY3Rpb24gKHNsaWRlcikge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcclxuICAgICAgICB9KTtcclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFnU2xpZGVyKHNldHRpbmdzLCBjb250YWluZXIsIG9uSW5pdENvbXBsZXRlKSB7XHJcbiAgICB2YXIgX3NldHRpbmdzID0ge1xyXG4gICAgICAgIGF1dG9QbGF5OiBmYWxzZSxcclxuICAgICAgICBhdXRvUGxheURlbGF5OiAzMDAwLFxyXG4gICAgICAgIGxvb3A6IGZhbHNlLFxyXG4gICAgICAgIHNob3dDb250cm9sczogdHJ1ZSxcclxuICAgICAgICBidG5MZWZ0OiAnLmxlZnQtYnRuJyxcclxuICAgICAgICBidG5SaWdodDogJy5yaWdodC1idG4nLFxyXG4gICAgICAgIHNob3dCdWxsZXRzOiBmYWxzZSxcclxuICAgICAgICBzaG93QnVsbGV0c0FzVGh1bWI6IGZhbHNlLCBcclxuICAgICAgICBidWxsZXRDb250YWluZXI6ICcuYnVsbGV0cycsXHJcbiAgICAgICAgaXRlbVdyYXBwZXI6ICcuYWd5LWNhcm8taW4nLFxyXG4gICAgICAgIHdyYXBwZXJNYXNrOiAwLCAvKiBJdCBzaG91bGQgYmUgaW4gcGVyY2VudGFnZSAwLTEwMCAqL1xyXG4gICAgICAgIGl0ZW1Db250YWluZXI6ICcuYWd5LWNhcm8taXQnXHJcbiAgICB9XHJcbiAgICBpZiAoc2V0dGluZ3MgIT0gbnVsbCAmJiBzZXR0aW5ncyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBfc2V0dGluZ3MgPSBleHRlbmRKc29uKF9zZXR0aW5ncywgc2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb250YWluZXIgPT0gdW5kZWZpbmVkIHx8IGNvbnRhaW5lciA9PSBudWxsKSBjb250YWluZXIgPSAnLmFneS1jYXJvJztcclxuICAgIHZhciBfc2xpZGVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoY29udGFpbmVyKTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgX3NsaWRlcnMgIT0gbnVsbCAmJiBfc2xpZGVycyAhPSB1bmRlZmluZWQgJiYgX3NsaWRlcnMubGVuZ3RoID4gaTsgaSsrKSB7XHJcbiAgICAgICAgaW5pdFNsaWRlcihfc2xpZGVyc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaW5pdFNsaWRlcihzbGlkZXIpIHtcclxuICAgICAgICB2YXIgX2l0ZW1zID0gc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1XcmFwcGVyKTtcclxuICAgICAgICB2YXIgX2l0ZW1zQ291bnQgPSBfaXRlbXMucXVlcnlTZWxlY3RvckFsbChfc2V0dGluZ3MuaXRlbUNvbnRhaW5lcikubGVuZ3RoO1xyXG4gICAgICAgIHZhciBfaXRlbVdpZHRoID0gX2l0ZW1zLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1Db250YWluZXIpLm9mZnNldFdpZHRoO1xyXG4gICAgICAgIHZhciBfaXRlbXNJblZpZXdQb3J0ID0gTWF0aC5yb3VuZChfaXRlbXMub2Zmc2V0V2lkdGggLyBfaXRlbVdpZHRoKTtcclxuICAgICAgICB2YXIgX2FjdGl2ZVNJdGVtSWR4ID0gMCwgX2FjdGl2ZUVJdGVtSWR4ID0gX2l0ZW1zQ291bnQsIF9hY3RpdmVQYWdlSWR4ID0gMDtcclxuICAgICAgICB2YXIgX2J0bkxlZnQgPSAoX3NldHRpbmdzLmJ0bkxlZnQgIT0gbnVsbCAmJiBfc2V0dGluZ3MuYnRuTGVmdCAhPSB1bmRlZmluZWQpID8gc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ0bkxlZnQpIDogbnVsbDtcclxuICAgICAgICB2YXIgX2J0blJpZ2h0ID0gKF9zZXR0aW5ncy5idG5SaWdodCAhPSBudWxsICYmIF9zZXR0aW5ncy5idG5SaWdodCAhPSB1bmRlZmluZWQpID8gc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ0blJpZ2h0KSA6IG51bGw7XHJcbiAgICAgICAgdmFyIF9wYXVzZVBsYXkgPSBmYWxzZTtcclxuICAgICAgICB2YXIgX2lzSGVyb1NsaWRlciA9IChfaXRlbXMub2Zmc2V0V2lkdGggPT0gX2l0ZW1XaWR0aCk7XHJcbiAgICAgICAgdmFyIF9tb3ZlTGFzdEl0ZW1Ub0ZpcnN0Rm9yV3JhcHBlck1hc2sgPSBmYWxzZTtcclxuICAgICAgICB2YXIgX3dyYXBwZXJNYXN0U2Nyb2xsTGVmdCA9IDA7XHJcblxyXG4gICAgICAgIGlmICghaXNOYU4oX3NldHRpbmdzLndyYXBwZXJNYXNrKSAmJiBfc2V0dGluZ3Mud3JhcHBlck1hc2sgPiAwKSB7XHJcbiAgICAgICAgICAgIF9zZXR0aW5ncy53cmFwcGVyTWFzayA9IF9zZXR0aW5ncy53cmFwcGVyTWFzayA+IDEwMCA/IDEwMCA6IF9zZXR0aW5ncy53cmFwcGVyTWFzaztcclxuICAgICAgICAgICAgX2l0ZW1zLnN0eWxlLnNjcm9sbFBhZGRpbmcgPSBfc2V0dGluZ3Mud3JhcHBlck1hc2sgKyAnJSc7XHJcblxyXG4gICAgICAgICAgICBpZiAoX2l0ZW1zQ291bnQgPiAyKSB7XHJcbiAgICAgICAgICAgICAgICBfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF9pdGVtQXJyYXkgPSBfaXRlbXMucXVlcnlTZWxlY3RvckFsbChfc2V0dGluZ3MuaXRlbUNvbnRhaW5lcik7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfaXRlbUFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIF9pdGVtQXJyYXlbaV0uY2xhc3NMaXN0LmFkZCgnaWR4LScgKyBpKTtcclxuICAgICAgICAgICAgaWYgKF9tb3ZlTGFzdEl0ZW1Ub0ZpcnN0Rm9yV3JhcHBlck1hc2sgJiYgaSA9PSBfaXRlbUFycmF5Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIF9pdGVtcy5wcmVwZW5kKF9pdGVtQXJyYXlbaV0pO1xyXG4gICAgICAgICAgICAgICAgX3dyYXBwZXJNYXN0U2Nyb2xsTGVmdCA9IF9pdGVtcy5zY3JvbGxMZWZ0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoX2J0bkxlZnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoIV9zZXR0aW5ncy5zaG93Q29udHJvbHMpIF9idG5MZWZ0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIF9idG5MZWZ0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9hY3RpdmVTSXRlbUlkeCA9PSAwICYmICFfc2V0dGluZ3MubG9vcCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgaWYgKF9hY3RpdmVTSXRlbUlkeCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1zLnNjcm9sbExlZnQgPSBfaXRlbVdpZHRoICogKF9pdGVtc0NvdW50IC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlSXRlbXMoX2l0ZW1XaWR0aCAqIChfaXRlbXNDb3VudCAtIF9pdGVtc0luVmlld1BvcnQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5zY3JvbGxMZWZ0ID0gX2l0ZW1zLnNjcm9sbExlZnQgKyAoLV9pdGVtV2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZUl0ZW1zKCghX2lzSGVyb1NsaWRlcikgPyAoX2l0ZW1zLnNjcm9sbExlZnQgKyAoLV9pdGVtV2lkdGgpKSA6ICgoX2FjdGl2ZVNJdGVtSWR4IC0gMSkgKiBfaXRlbVdpZHRoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF9idG5SaWdodCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICghX3NldHRpbmdzLnNob3dDb250cm9scykgX2J0blJpZ2h0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIF9idG5SaWdodC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChfYWN0aXZlRUl0ZW1JZHggPT0gKF9pdGVtc0NvdW50IC0gMSkgJiYgIV9zZXR0aW5ncy5sb29wKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBpZiAoX2FjdGl2ZUVJdGVtSWR4ID09IChfaXRlbXNDb3VudCAtIDEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1zLnNjcm9sbExlZnQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZUl0ZW1zKF93cmFwcGVyTWFzdFNjcm9sbExlZnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1zLnNjcm9sbExlZnQgPSBfaXRlbXMuc2Nyb2xsTGVmdCArICgrX2l0ZW1XaWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlSXRlbXMoKCFfaXNIZXJvU2xpZGVyKSA/IChfaXRlbXMuc2Nyb2xsTGVmdCArICgrX2l0ZW1XaWR0aCkpIDogKChfYWN0aXZlU0l0ZW1JZHggKyAxKSAqIF9pdGVtV2lkdGgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGlmIChfc2V0dGluZ3Muc2hvd0J1bGxldHMpIHtcclxuXHJcbiAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgaWYgKHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpID09IG51bGwgfHwgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBfc2V0dGluZ3Muc2hvd0J1bGxldHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IChNYXRoLnJvdW5kKF9pdGVtc0NvdW50IC8gX2l0ZW1zSW5WaWV3UG9ydCkpOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBfYnVsbGV0ID0gKCFfc2V0dGluZ3Muc2hvd0J1bGxldHNBc1RodW1iICYmICFfaXNIZXJvU2xpZGVyKSA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgICAgICBfYnVsbGV0LmNsYXNzTGlzdC5hZGQoJ2RvdCcpO1xyXG4gICAgICAgICAgICAgICAgX2J1bGxldC5jbGFzc0xpc3QuYWRkKCdpZHgtJyArIGkpO1xyXG4gICAgICAgICAgICAgICAgX2J1bGxldC5zZXRBdHRyaWJ1dGUoJ2lkeCcsIGkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKF9zZXR0aW5ncy5zaG93QnVsbGV0c0FzVGh1bWIgJiYgX2lzSGVyb1NsaWRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfdGh1bWJJbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfdGh1bWJJbWFnZVMgPSBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyBpbWcnKSAhPSBudWxsID8gX2l0ZW1zLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1Db250YWluZXIgKyAnLmlkeC0nICsgaSArICcgaW1nJykgOiBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyB2aWRlbycpO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aHVtYkltYWdlLnNldEF0dHJpYnV0ZSgnc3JjJywgKF90aHVtYkltYWdlUy5ub2RlTmFtZSA9PSAnSU1HJykgPyBfdGh1bWJJbWFnZVMuZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpIDogX3RodW1iSW1hZ2VTLmdldEF0dHJpYnV0ZSgnZGF0YS10aHVtYicpKTtcclxuICAgICAgICAgICAgICAgICAgICBfYnVsbGV0LmFwcGVuZENoaWxkKF90aHVtYkltYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChpID09IDApIF9idWxsZXQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICBfYnVsbGV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsb2FkUGFnZShwYXJzZUludChpLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCdpZHgnKSkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5hcHBlbmRDaGlsZChfYnVsbGV0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICBpZiAoX3NldHRpbmdzLnNob3dCdWxsZXRzQXNUaHVtYikge1xyXG5cclxuICAgICAgICAgICAgdmFyIFRodW1iV2lkdGggPSBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5xdWVyeVNlbGVjdG9yKCcuZG90Jykub2Zmc2V0V2lkdGg7XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKF9idG5MZWZ0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIF9idG5MZWZ0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLnNjcm9sbExlZnQgLT0gVGh1bWJXaWR0aDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKF9idG5SaWdodCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBfYnRuUmlnaHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikuc2Nyb2xsTGVmdCArPSBUaHVtYldpZHRoOyBcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgdmFyIGlzRHJhZ2dpbmcgPSBmYWxzZSwgc3RhcnRYLCBzdGFydFNjcm9sbExlZnQ7XHJcblxyXG5cclxuICAgICAgICAgICAgdmFyIGRyYWdTdGFydCA9IChlKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7IFxyXG4gICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikuY2xhc3NMaXN0LmFkZChcImRyYWdnaW5nXCIpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnRYID0gZS5wYWdlWDtcclxuICAgICAgICAgICAgICAgIHN0YXJ0U2Nyb2xsTGVmdCA9IHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLnNjcm9sbExlZnQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgZHJhZ2dpbmcgPSAoZSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghaXNEcmFnZ2luZykgcmV0dXJuOyBcclxuICAgICAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLnNjcm9sbExlZnQgPSBzdGFydFNjcm9sbExlZnQgLSAoZS5wYWdlWCAtIHN0YXJ0WCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgZHJhZ1N0b3AgPSAoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlOyBcclxuICAgICAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLmNsYXNzTGlzdC5yZW1vdmUoXCJkcmFnZ2luZ1wiKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgZHJhZ1N0YXJ0KTtcclxuICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBkcmFnZ2luZyk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGRyYWdTdG9wKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChfc2V0dGluZ3MuYXV0b1BsYXkpIHtcclxuICAgICAgICAgICAgYXV0b1BsYXkoKTtcclxuICAgICAgICAgICAgX2l0ZW1zLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIGZ1bmN0aW9uICgpIHsgaWYgKF9pdGVtcy5vZmZzZXRXaWR0aCA9PSBfaXRlbVdpZHRoKSByZXR1cm47IF9wYXVzZVBsYXkgPSB0cnVlOyB9KTtcclxuICAgICAgICAgICAgX2l0ZW1zLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIGZ1bmN0aW9uICgpIHsgaWYgKF9pdGVtcy5vZmZzZXRXaWR0aCA9PSBfaXRlbVdpZHRoKSByZXR1cm47IF9wYXVzZVBsYXkgPSBmYWxzZTsgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBhdXRvUGxheSgpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIV9wYXVzZVBsYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBfYnRuUmlnaHQuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF1dG9QbGF5KCk7XHJcbiAgICAgICAgICAgIH0sIF9zZXR0aW5ncy5hdXRvUGxheURlbGF5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRQYWdlKGlkeCkge1xyXG4gICAgICAgICAgICBfYWN0aXZlUGFnZUlkeCA9IGlkeDtcclxuICAgICAgICAgICAgX3NldHRpbmdzLmF1dG9QbGF5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIF9wYXVzZVBsYXkgPSB0cnVlO1xyXG4gICAgICAgICAgICBfaXRlbXMuc2Nyb2xsTGVmdCA9IChpZHggKiBfaXRlbXNJblZpZXdQb3J0KSAqIF9pdGVtV2lkdGg7XHJcbiAgICAgICAgICAgIHNldEFjdGl2ZUl0ZW1zKChpZHggKiBfaXRlbXNJblZpZXdQb3J0KSAqIF9pdGVtV2lkdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0QWN0aXZlSXRlbXMoX2l0ZW1zLnNjcm9sbExlZnQpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHNldEFjdGl2ZUl0ZW1zKHNMZWZ0KSB7XHJcbiAgICAgICAgICAgIF9hY3RpdmVTSXRlbUlkeCA9IE1hdGgucm91bmQoKHNMZWZ0IC0gX3dyYXBwZXJNYXN0U2Nyb2xsTGVmdCkgLyBfaXRlbVdpZHRoKTtcclxuICAgICAgICAgICAgX2FjdGl2ZUVJdGVtSWR4ID0gTWF0aC5yb3VuZChfYWN0aXZlU0l0ZW1JZHggKyBfaXRlbXNJblZpZXdQb3J0IC0gMSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9pdGVtc0NvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIF9pdGVtcy5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIGkpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgPj0gX2FjdGl2ZVNJdGVtSWR4ICYmIGkgPD0gX2FjdGl2ZUVJdGVtSWR4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPD0gX2FjdGl2ZUVJdGVtSWR4IC0gKChfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrKSA/IDEgOiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9pdGVtcy5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIGkgKyAnIHZpZGVvJykgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF92aWRlbyA9IF9pdGVtcy5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIGkgKyAnIHZpZGVvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmlkZW8uc2V0QXR0cmlidXRlKCdzcmMnLCBfdmlkZW8uZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92aWRlby5wYXVzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZpZGVvLmN1cnJlbnRUaW1lID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92aWRlby5wbGF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcGF1c2VQbGF5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92aWRlby5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIGZ1bmN0aW9uIChlKSB7IF9wYXVzZVBsYXkgPSBmYWxzZTsgfSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5xdWVyeVNlbGVjdG9yQWxsKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIGkgKyAnIGltZycpLmZvckVhY2goaW1nID0+IHsgaW1nLnNldEF0dHJpYnV0ZSgnc3JjJywgaW1nLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSk7IH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKF9tb3ZlTGFzdEl0ZW1Ub0ZpcnN0Rm9yV3JhcHBlck1hc2sgJiYgaSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGwoX3NldHRpbmdzLml0ZW1Db250YWluZXIgKyAnLmlkeC0nICsgKF9pdGVtc0NvdW50IC0gMSkgKyAnIGltZycpLmZvckVhY2goaW1nID0+IHsgaW1nLnNldEF0dHJpYnV0ZSgnc3JjJywgaW1nLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSk7IH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChfYWN0aXZlU0l0ZW1JZHggPT0gMCAmJiAhX3NldHRpbmdzLmxvb3ApIF9idG5MZWZ0LmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJyk7IGVsc2UgX2J0bkxlZnQuY2xhc3NMaXN0LnJlbW92ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgaWYgKF9hY3RpdmVFSXRlbUlkeCA9PSAoX2l0ZW1zQ291bnQgLSAxKSAmJiAhX3NldHRpbmdzLmxvb3ApIF9idG5SaWdodC5jbGFzc0xpc3QuYWRkKCdkaXNhYmxlZCcpOyBlbHNlIF9idG5SaWdodC5jbGFzc0xpc3QucmVtb3ZlKCdkaXNhYmxlZCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9zZXR0aW5ncy5zaG93QnVsbGV0cykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAoTWF0aC5yb3VuZChfaXRlbXNDb3VudCAvIF9pdGVtc0luVmlld1BvcnQpKTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gKE1hdGgucm91bmQoKF9hY3RpdmVTSXRlbUlkeCArIF9pdGVtc0luVmlld1BvcnQpIC8gX2l0ZW1zSW5WaWV3UG9ydCkgLSAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyICsgJyAuZG90LmlkeC0nICsgaSkuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyICsgJyAuZG90LmlkeC0nICsgaSkuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9uSW5pdENvbXBsZXRlICE9IG51bGwgJiYgb25Jbml0Q29tcGxldGUgIT0gdW5kZWZpbmVkKSBvbkluaXRDb21wbGV0ZShzbGlkZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGV4dGVuZEpzb24oc0RlZmF1bHQsIGN1c3RvbSkge1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBjdXN0b20pIHtcclxuICAgICAgICAgICAgaWYgKGN1c3RvbS5oYXNPd25Qcm9wZXJ0eShrZXkpKSBzRGVmYXVsdFtrZXldID0gY3VzdG9tW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzRGVmYXVsdDtcclxuICAgIH1cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIElzTm90TnVsbChWYWx1ZSkge1xyXG4gICAgcmV0dXJuIFZhbHVlICE9IG51bGwgJiYgVmFsdWUgIT0gdW5kZWZpbmVkICYmIFZhbHVlLmxlbmd0aCA+IDAgJiYgVmFsdWUgIT0gXCIwXCIgJiYgVmFsdWUgIT0gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gSXNOb3ROdWxsT3JJc1plcm8oVmFsdWUpIHtcclxuICAgIHJldHVybiBWYWx1ZSAhPSBudWxsICYmIFZhbHVlICE9IHVuZGVmaW5lZCAmJiBWYWx1ZS5sZW5ndGggPiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBFbmFibGVTZWFyY2hGb3JtKCkge1xyXG4gICAgZnVuY3Rpb24gc2VhcmNoQWN0b24oc2VuZGVyKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciAkc2VuZGVyID0gJChzZW5kZXIpO1xyXG4gICAgICAgICAgICB2YXIgJGZvcm0gPSAkc2VuZGVyLmNsb3Nlc3QoJ1tkYXRhLXNlYXJjaC1mb3JtXScpO1xyXG4gICAgICAgICAgICB2YXIgX3VybFF1ZXJ5ID0gY29tcG9zZVVybFF1ZXJ5KHsgc2VsZWN0OiAkZm9ybSB9KTtcclxuICAgICAgICAgICAgdmFyIF9ydCA9ICRmb3JtLmRhdGEoJ3NlYXJjaC1mb3JtJyk7XHJcbiAgICAgICAgICAgIHZhciAkc29ydCA9ICQoJ1tkYXRhLXNvcnQtb2JqZWN0PVwiJyArIF9ydCArICdcIl0nKTtcclxuICAgICAgICAgICAgdmFyIF9kZWZhdWx0ID0gJGZvcm0uZGF0YSgnZGVmYXVsdC1zZWFyY2gnKTtcclxuICAgICAgICAgICAgdmFyIF9kZWZhdWx0U29ydCA9ICRmb3JtLmRhdGEoJ2RlZmF1bHQtc29ydCcpO1xyXG4gICAgICAgICAgICBpZiAoKHR5cGVvZiAoX2RlZmF1bHQpICE9ICd1bmRlZmluZWQnICYmIF9kZWZhdWx0ICE9ICcnICYmIF91cmxRdWVyeS5pbmRleE9mKCcvYWRkcmVzcy0nKSA9PSAtMSAmJiBfdXJsUXVlcnkuaW5kZXhPZignL21scy0nKSA9PSAtMSkpIF91cmxRdWVyeSArPSBfZGVmYXVsdDtcclxuICAgICAgICAgICAgaWYgKCRzb3J0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBfc29ydFZhbHVlID0gJHNvcnQudmFsKCk7XHJcbiAgICAgICAgICAgICAgICBfdXJsUXVlcnkgKz0gX3NvcnRWYWx1ZSAhPSBudWxsICYmIF9zb3J0VmFsdWUgIT0gJycgPyBfc29ydFZhbHVlIDogJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIChfZGVmYXVsdFNvcnQpICE9ICd1bmRlZmluZWQnICYmIF9kZWZhdWx0U29ydCAhPSBudWxsICYmIF9kZWZhdWx0U29ydCAhPSAnJykgX3VybFF1ZXJ5ICs9IF9kZWZhdWx0U29ydDtcclxuICAgICAgICAgICAgJGZvcm0udHJpZ2dlckhhbmRsZXIoJ3NlYXJjaCcsIFt7IHF1ZXJ5OiBfdXJsUXVlcnkgfV0pO1xyXG4gICAgICAgIH0sIDIwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJ1tkYXRhLXNlYXJjaC1mb3JtXSBbZGF0YS1zZWFyY2gtYnV0dG9uXScsIHt9LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc2VhcmNoQWN0b24odGhpcyk7XHJcbiAgICB9KTtcclxuICAgICQoZG9jdW1lbnQpLm9uKCdrZXlkb3duJywgJ1tkYXRhLXNlYXJjaC1mb3JtXSBbZGF0YS1zZWFyY2gtYWN0aW9uXScsIHt9LCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpXHJcbiAgICAgICAgICAgIHNlYXJjaEFjdG9uKHRoaXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJCgnW2RhdGEtc2VhcmNoLWZvcm1dJykub24oJ3NlYXJjaCcsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgdmFyICRzZW5kZXIgPSAkKHRoaXMpO1xyXG4gICAgICAgIHZhciAkcHJlZml4ID0gJHNlbmRlci5kYXRhKCdzZWFyY2gtcHJlZml4Jyk7XHJcbiAgICAgICAgdmFyIF9wcmVmaXggPSAoSXNOb3ROdWxsKCRwcmVmaXgpICYmICRwcmVmaXggIT0gJ3VuZGVmaW5lZCcpID8gJHByZWZpeCA6IEdldFNlYXJjaFByZWZpeEZvclJlY29yZFR5cGUoJHNlbmRlci5kYXRhKCdzZWFyY2gtZm9ybScpKTtcclxuICAgICAgICB2YXIgcGF0dGVybiA9IC9eXFwvXFwvLztcclxuICAgICAgICBpZiAoIXBhdHRlcm4udGVzdCgoX3ByZWZpeCAhPSBudWxsICYmIF9wcmVmaXggIT0gJycgJiYgX3ByZWZpeCAhPSAndW5kZWZpbmVkJyA/IF9wcmVmaXggOiAnJykgKyBkYXRhLnF1ZXJ5KSlcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gKF9wcmVmaXggIT0gbnVsbCAmJiBfcHJlZml4ICE9ICcnICYmIF9wcmVmaXggIT0gJ3VuZGVmaW5lZCcgPyBfcHJlZml4IDogJycpICsgZGF0YS5xdWVyeTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBHZXRTZWFyY2hQcmVmaXhGb3JSZWNvcmRUeXBlKHJlY29yZFR5cGUpIHtcclxuICAgIHN3aXRjaCAocmVjb3JkVHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ1BST1BFUlRZJzogcmV0dXJuICcvcHJvcGVydGllcyc7XHJcbiAgICAgICAgY2FzZSAnUFJPUEVSVFlSRU5UJzogcmV0dXJuICcvcHJvcGVydHktc2VhcmNoLW1hcC1vbi1yZW50JztcclxuICAgICAgICBjYXNlICdQUk9QRVJUWVNPTEQnOiByZXR1cm4gJy9wcm9wZXJ0eS1zZWFyY2gtbWFwL3NvbGQnO1xyXG4gICAgICAgIGNhc2UgJ0FHRU5UJzogcmV0dXJuICcvcmVhbC1lc3RhdGUtYWdlbnRzJztcclxuICAgICAgICBjYXNlICdPRkZJQ0UnOiByZXR1cm4gJy9yZWFsLWVzdGF0ZS1vZmZpY2VzJztcclxuICAgICAgICBjYXNlICdCTE9HJzogcmV0dXJuICcvYmxvZy9zZWFyY2gnO1xyXG4gICAgICAgIGNhc2UgJ0FHRU5UVEVBTSc6IHJldHVybiAnL3JlYWwtZXN0YXRlLWFnZW50cyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJy8nO1xyXG59XHJcbmZ1bmN0aW9uIEdldERlZmF1bHRTb3J0Rm9yUmVjb3JkVHlwZShyZWNvcmRUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHJlY29yZFR5cGUpIHtcclxuICAgICAgICBjYXNlICdQUk9QRVJUWSc6IHJldHVybiAnL2Rzb3J0LXAnO1xyXG4gICAgICAgIGNhc2UgJ1BST1BFUlRZUkVOVCc6IHJldHVybiAnL2Rzb3J0LXAnO1xyXG4gICAgICAgIGNhc2UgJ0FHRU5UJzogcmV0dXJuICcvc29ydC1uJztcclxuICAgICAgICBjYXNlICdBR0VOVFRFQU0nOiByZXR1cm4gJy9zb3J0LW4nO1xyXG4gICAgICAgIGNhc2UgJ09GRklDRSc6IHJldHVybiAnL3NvcnQtbic7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBpbml0TWFwRGVmYXVsdCgpIHtcclxuICAgIGlmICh3aW5kb3cub25NYXBMb2FkZWQpIHdpbmRvdy5vbk1hcExvYWRlZCgpO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gRW5hYmxlRGVtYW5kSW1wb3J0KCkge1xyXG4gICAgX2luaXQoKTtcclxuICAgIGZ1bmN0aW9uIF9pbml0KCkge1xyXG4gICAgICAgICQoXCJpbWdbZGF0YS1kZW1hbmQta2V5XVwiKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgR2V0UHJvcGVydGllcygkKHRoaXMpLCAkKHRoaXMpLmRhdGEoJ2RlbWFuZC11cmwnKSwgJCh0aGlzKS5kYXRhKCdkZW1hbmQta2V5JyksICQodGhpcykuZGF0YSgnbGF5b3V0JykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJ1tkYXRhLWNrLWhyZWZdJywgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIEdldFByb3BlcnRpZXMoJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eWxpc3RdOmZpcnN0JyksICQodGhpcykuZGF0YSgnY2staHJlZicpLCAkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWNrLXByb3BlcnR5bGlzdF06Zmlyc3QnKS5kYXRhKCdjay1kZW1hbmQta2V5JyksICQodGhpcykucGFyZW50cygnW2RhdGEtY2stcHJvcGVydHlsaXN0XTpmaXJzdCcpLmRhdGEoJ2NrLWRlbWFuZC1sYXlvdXQnKSk7XHJcbiAgICB9KTtcclxuXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgc2VsZWN0b3JFbGVtZW50O1xyXG4gICAgdmFyIGN1cnJlbnRTZXR0aW5ncztcclxuICAgIHZhciBsYW5ndWFnZVNvdXJjZXMgPSB7XHJcbiAgICAgICAgbGFuZ3VhZ2VzOiBbXHJcbiAgICAgICAgICAgIHsgY29kZTogJ2VuJywgbGFiZWw6ICdFbmdsaXNoJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdlcycsIGxhYmVsOiAnU3BhbmlzaCcsIGxvY2FsTGFiZWw6ICdFc3Bhw7FvbCcgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnbmwnLCBsYWJlbDogJ0R1dGNoJywgbG9jYWxMYWJlbDogJ05lZGVybGFuZHMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ3ByJywgbGFiZWw6ICdQb3J0dWdlc2UnLCBsb2NhbExhYmVsOiAnUG9ydHVndcOqcycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnZnInLCBsYWJlbDogJ0ZyZW5jaCcsIGxvY2FsTGFiZWw6J0ZyYW7Dp2FpcycgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGN1cnJlbmNpZXM6IFtcclxuICAgICAgICAgICAgeyBjb2RlOiAnVVNEJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnRG9sbGFyJywgZm9ybWF0OiAnJCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdBRUQnLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdVbml0ZWQgQXJhYiBFbWlyYXRlcyBEaXJoYW0nLCBmb3JtYXQ6ICdBRUQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnQlNEJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnQmFoYW1pYW4gRG9sbGFyJywgZm9ybWF0OiAnQiQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnQ0FEJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnQ2FuYWRpYW4gRG9sbGFyJywgZm9ybWF0OiAnJCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdET1AnLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdEb21pbmljYW4gUGVzbycsIGZvcm1hdDogJ1JEJCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdFVVInLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdFdXJvJywgZm9ybWF0OiAn4oKsIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0pNRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0phbWFpY2FuIERvbGxhcicsIGZvcm1hdDogJ0okIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0tZRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0NheW1hbiBJc2xhbmRzIERvbGxhcicsIGZvcm1hdDogJ0NJJCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdNWE4nLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdNZXhpY2FuIFBlc28nLCBmb3JtYXQ6ICckIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ1BBQicsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ1BhbmFtYW5pYW4gQmFsYm9hJywgZm9ybWF0OiAnQi8uIyMjLCMjIywjIyMuIyMnIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIHVuaXRzOiBbXHJcbiAgICAgICAgICAgIHsgY29kZTogJ2ltcGVyaWFsJywgbGFiZWw6ICdJbXBlcmlhbCcgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnbWV0cmljJywgbGFiZWw6ICdNZXRyaWMnIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIHByZXNldHM6IFtcclxuICAgICAgICAgICAgeyBjb2RlOiAnQlMnLCBsYWJlbDogJ0JhaGFtYXMnLCBjdXJyZW5jeTogJ0JTRCcsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnQ0EnLCBsYWJlbDogJ0NhbmFkYScsIGN1cnJlbmN5OiAnQ0FEJywgbGFuZ3VhZ2U6IFsnZW4nLCAnZnInXSwgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0pNJywgbGFiZWw6ICdKYW1haWNhJywgY3VycmVuY3k6ICdKTUQnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0tZJywgbGFiZWw6ICdDYXltYW4gSXNsYW5kcycsIGN1cnJlbmN5OiAnS1lEJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdUQycsIGxhYmVsOiAnVHVya3MgJiBDYWljb3MgSXNsYW5kcycsIGxvY2FsTGFiZWw6ICcnLCBjdXJyZW5jeTogJ1VTRCcsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnVVMnLCBsYWJlbDogJ1VuaXRlZCBTdGF0ZXMnLCBsb2NhbExhYmVsOiAnJywgY3VycmVuY3k6ICdVU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdpbXBlcmlhbCcgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnRFknLCBsYWJlbDogJ0RvbWluaWNhbiBSZXB1YmxpYycsIGxvY2FsTGFiZWw6ICdSZXDDumJsaWNhIERvbWluaWNhbmEnLCBjdXJyZW5jeTogJ1VTRCcsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnRVMnLCBsYWJlbDogJ1NwYWluJywgbG9jYWxMYWJlbDogJ0VzcGHDsWEnLCBjdXJyZW5jeTogJ1VTRCcsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnTVgnLCBsYWJlbDogJ01leGljbycsIGxvY2FsTGFiZWw6ICdNw6l4aWNvJywgY3VycmVuY3k6ICdNWE4nLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ1BBJywgbGFiZWw6ICdQYW5hbWEnLCBsb2NhbExhYmVsOiAnUGFuYW3DoScsIGN1cnJlbmN5OiAnUEFCJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdOTCcsIGxhYmVsOiAnTmVkZXJsYW5kcycsIGxvY2FsTGFiZWw6ICdOZWRlcmxhbmQnLCBjdXJyZW5jeTogJ0VVUicsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnUFQnLCBsYWJlbDogJ1BvcnR1Z2FsJywgY3VycmVuY3k6ICdFVVInLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcblxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5pdENvbnZlcnRpb25zOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHVuaXQ6ICdTUUZUJyxcclxuICAgICAgICAgICAgICAgIHRyYWdldFVuaXQ6ICdTcS5NJywgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdGFudDogMC4wOTI5MDMsXHJcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogWydTcWZ0JywgJ1NxLkZ0JywgJ1NxLkZ0LicsICdTcS4gRnQuJywgJ1NGJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdDogJ01JJyxcclxuICAgICAgICAgICAgICAgIHRyYWdldFVuaXQ6ICdLTScsXHJcbiAgICAgICAgICAgICAgICBjb25zdGFudDogMS42MDkzNCxcclxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOlsnbWknLCdtaWxlcycsJ21pbGUnXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB1bml0OiAnQUMnLFxyXG4gICAgICAgICAgICAgICAgdHJhZ2V0VW5pdDogJ1NRTScsXHJcbiAgICAgICAgICAgICAgICBjb25zdGFudDogNDA0Ni44NixcclxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiBbJ2FjcmUnLCAnYWNyZXMnXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB1bml0OiAnTE9UU0laRScsXHJcbiAgICAgICAgICAgICAgICB0cmFnZXRVbml0OiAnTG90IFNpemUnLFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Tm90YXRpb246ICfjjqEnLFxyXG4gICAgICAgICAgICAgICAgY29uc3RhbnQ6IDQwNDYuODYsXHJcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogWydMb3QgU2l6ZSddXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcblxyXG5cclxuICAgIH07XHJcblxyXG4gICAgdmFyIHJlY2VudFN0YXRlID0gbnVsbDtcclxuICAgIHZhciB1bml0Q29udmVydGlvblNjaGVtYSA9IG51bGw7ICAgIFxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXQoKSB7XHJcbiAgICAgICAgdmFyIGNoYW5nZUxhbmd1YWdlTm9kZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYWctbGFuZ3VhZ2VdJyk7XHJcbiAgICAgICAgY2hhbmdlTGFuZ3VhZ2VOb2Rlcy5mb3JFYWNoKGVuYWJsZUxhbmd1YWdlU2VsZWN0b3IpOyAgICAgICAgICAgICAgICBcclxuICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50Py5jb2RlKVxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUnLCB7IGRldGFpbDogY3VycmVudCB9KSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBsYW5ndWFnZVNvdXJjZXMucHJlc2V0cy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGl0ZW0uY29kZSA9PSAnVVMnOyB9KVswXTtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBzZXQoa2V5LCBBcnJheS5pc0FycmF5KGN1cnJlbnRba2V5XSkgPyBjdXJyZW50W2tleV1bMF0gOiBjdXJyZW50W2tleV0pO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUnLCB7IGRldGFpbDogY3VycmVudCB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVwZGF0ZVByaWNlKHRydWUpOyAgICAgICAgICBcclxuICAgICAgICBpZiAoY3VycmVudC5sYW5ndWFnZSAmJiBjdXJyZW50Lmxhbmd1YWdlLmluZGV4T2YoJ2VuJykgPT0gLTEpXHJcbiAgICAgICAgICAgIHVwZGF0ZUxhbmd1YWdlKCk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlY2VudFN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgY3VycmVudCk7XHJcbiAgICAgICAgICAgIHNldExhbmd1YWdlVG9TdG9yZSh7IExvY2FsZTogJ2VuX1VTJyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXR0YWNoQWN0aW9ucygpO1xyXG4gICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYSA9IGF3YWl0IGJ1aWxkVW5pdENvbnZlcnRpb25TY2hlbWEoKTtcclxuICAgICAgICB1cGRhdGVNZXNzdXJlbWVudCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBidWlsZFVuaXRDb252ZXJ0aW9uU2NoZW1hKCkge1xyXG4gICAgICAgIHZhciBleHByZXNzaW9uU3RyaW5nID0gJyc7XHJcbiAgICAgICAgdmFyIG5vdGF0aW9uRXhwcmVzc2lvblN0cmluZyA9ICcnO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgIG5vdGF0aW9uRXhwcmVzc2lvbnM6IHt9LFxyXG4gICAgICAgICAgICBub3RhdGlvbk9ubHlFeHByZXNzaW9uczoge30sXHJcbiAgICAgICAgICAgIGdldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS5yZXBsYWNlQWxsKC9bXjAtOVxcXFwuXS9naSwgJycpKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmb3JtYXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJyx7IG1heGltdW1GcmFjdGlvbkRpZ2l0czogMiB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaGF2ZVZhbGlkQXR0cmlidXRlOiBmdW5jdGlvbiAoaXRlbSkgeyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmhhc0F0dHJpYnV0ZSA/IGl0ZW0uaGFzQXR0cmlidXRlKCdkYXRhLXRoJykgOiBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0TGFiZWxGb3JBdHRyaWJ1dGU6IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXRBdHRyaWJ1dGU/aXRlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGgnKTonJztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0TGFiZWxGb3JBdHRyaWJ1dGU6IGZ1bmN0aW9uIChpdGVtLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2V0QXR0cmlidXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdkYXRhLXRoJywgdmFsdWUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRWYWx1ZUZvckF0dHJpYnV0ZTogZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmlubmVyVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0VmFsdWVGb3JBdHRyaWJ1dGU6IGZ1bmN0aW9uIChpdGVtLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5pbm5lclRleHQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHZhciBzdWJFeHByZXNzaW9uU3RyaW5nID0gJycsIHN1Yk5vdGF0aW9uRXhwcmVzc2lvblN0cmluZyA9ICcnO1xyXG4gICAgICAgICAgICBpdGVtLm5vdGF0aW9uLmZvckVhY2goZnVuY3Rpb24gKG5vdGF0aW9uSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgc3ViTm90YXRpb25FeHByZXNzaW9uU3RyaW5nICs9IChzdWJOb3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgIT0gJycgPyAnfCcgOiAnJykgKyAnKCg/PE4+JyArIG5vdGF0aW9uSXRlbS5yZXBsYWNlQWxsKC9cXHMvZ2ksICdcXFxccycpLnJlcGxhY2VBbGwoLyhbXjAtOUEtel0pL2dpLCAnXFxcXCQxJykgKyAnKShcXFxcc3xbXkEtel18JCkpJztcclxuICAgICAgICAgICAgICAgIHN1YkV4cHJlc3Npb25TdHJpbmcgKz0gKHN1YkV4cHJlc3Npb25TdHJpbmcgIT0gJycgPyAnfCcgOiAnJykgKyAnKCg/PFY+WzAtOVxcXFwsXFxcXC5dKykoXFxcXG58XFxcXHMpKig/PE4+JyArIG5vdGF0aW9uSXRlbS5yZXBsYWNlQWxsKC9cXHMvZ2ksICdcXFxccycpLnJlcGxhY2VBbGwoLyhbXjAtOUEtel0pL2dpLCdcXFxcJDEnKSArICcpKFxcXFxzfFteQS16XXwkKSknO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmVzdWx0Lm5vdGF0aW9uRXhwcmVzc2lvbnNbaXRlbS51bml0XSA9IG5ldyBSZWdFeHAoc3ViRXhwcmVzc2lvblN0cmluZywgJ2dtaScpO1xyXG4gICAgICAgICAgICByZXN1bHQubm90YXRpb25Pbmx5RXhwcmVzc2lvbnNbaXRlbS51bml0XSA9IG5ldyBSZWdFeHAoc3ViTm90YXRpb25FeHByZXNzaW9uU3RyaW5nLCAnZ21pJyk7XHJcbiAgICAgICAgICAgIGV4cHJlc3Npb25TdHJpbmcgKz0gKGV4cHJlc3Npb25TdHJpbmcgIT0gJycgPyAnfCcgOiAnJykgKyAnKCcgKyBzdWJFeHByZXNzaW9uU3RyaW5nICsgJyknOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBub3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgKz0gKG5vdGF0aW9uRXhwcmVzc2lvblN0cmluZyAhPSAnJyA/ICd8JyA6ICcnKSArICcoJyArIHN1Yk5vdGF0aW9uRXhwcmVzc2lvblN0cmluZyArICcpJzsgXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmVzdWx0LmV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKGV4cHJlc3Npb25TdHJpbmcsICdnbWknKTtcclxuICAgICAgICByZXN1bHQubm90YXRpb25FeHByZXNzaW9uID0gbmV3IFJlZ0V4cChub3RhdGlvbkV4cHJlc3Npb25TdHJpbmcsICdnbWknKTtcclxuICAgICAgICByZXN1bHQudmFsdWVFeHByZXNzaW9uID0gbmV3IFJlZ0V4cCgnKCg/PFY+WzAtOVxcXFwsXSsoXFxcXC5bMC05XSspPykoXFxcXG58XFxcXHMpKiknLCAnZ21pJyk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBhdHRhY2hBY3Rpb25zKCkge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UuY2hhbmdlLmxhbmd1YWdlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB1cGRhdGVMYW5ndWFnZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UuY2hhbmdlLmN1cnJlbmN5JywgZnVuY3Rpb24gKCkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB1cGRhdGVQcmljZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UuY2hhbmdlLm1lc3N1cmVtZW50JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB1cGRhdGVNZXNzdXJlbWVudCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGF6eS5yZWZyZXNoJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB1cGRhdGVNZXNzdXJlbWVudCgpO1xyXG4gICAgICAgIH0pOyAgICAgICAgXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYW5ndWFnZS5yZWZyZXNoLmN1cnJlbmN5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB1cGRhdGVQcmljZSgpOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSAgICBcclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVMYW5ndWFnZSgpIHtcclxuICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIGlmIChyZWNlbnRTdGF0ZSA9PSBudWxsKSByZWNlbnRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChjdXJyZW50Py5sYW5ndWFnZSAhPSByZWNlbnRTdGF0ZT8ubGFuZ3VhZ2UpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZWNlbnRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnQpO1xyXG5cclxuICAgICAgICB2YXIgbGFiZWxzID0gYXdhaXQgZ2V0TGFuZ3VhZ2VMYWJlbHMoKTsgICAgICAgICAgIFxyXG4gICAgICAgIGlmIChjdXJyZW50Py5sYW5ndWFnZSAmJiBsYWJlbHMuTG9jYWxlLmluZGV4T2YoY3VycmVudC5sYW5ndWFnZSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgYXdhaXQgdXBkYXRlVG9TZXJ2ZXIoJ2xhbmd1YWdlJyk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGxhYmVsc1RvQ2hhbmdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwta10nKTtcclxuICAgICAgICBpZiAobGFiZWxzVG9DaGFuZ2UpXHJcbiAgICAgICAgICAgIGxhYmVsc1RvQ2hhbmdlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsgdXBkYXRlTGFuZ3VhZ2VMYWJlbChpdGVtLCBsYWJlbHMuTGFiZWxzKTsgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VMYWJlbHNGcm9tU3RvcmUoKSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRMYWJlbHNTdHJpbmcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0xPQ0FMTEFCRUxTJyk7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRMYWJlbHMgPSBudWxsO1xyXG4gICAgICAgIGlmIChjdXJyZW50TGFiZWxzU3RyaW5nICE9IG51bGwpXHJcbiAgICAgICAgICAgIGN1cnJlbnRMYWJlbHMgPSBKU09OLnBhcnNlKGN1cnJlbnRMYWJlbHNTdHJpbmcpO1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50TGFiZWxzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHNldExhbmd1YWdlVG9TdG9yZShjdXJyZW50TGFiZWxzKSB7XHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdMT0NBTExBQkVMUycsIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRMYWJlbHMpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRMYW5ndWFnZUxhYmVscygpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudExhYmVscyA9IGF3YWl0IGdldExhbmd1YWdlTGFiZWxzRnJvbVN0b3JlKCk7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50TGFiZWxzICE9IG51bGwpIHsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB2YXIgZXhwaXJ5ID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIGV4cGlyeS5zZXRIb3VycyhleHBpcnkuZ2V0SG91cnMoKSAtIDEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ldyBEYXRlKGN1cnJlbnRMYWJlbHMudXBkYXRlZE9uKSA+IGV4cGlyeSAmJiBjdXJyZW50TGFiZWxzLkxvY2FsZS5pbmRleE9mKGN1cnJlbnQubGFuZ3VhZ2UpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGN1cnJlbnRMYWJlbHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdXJyZW50TGFiZWxzID0gYXdhaXQgR0VUKCcvc2VydmljZXMvYWdvcmFDbGllbnQuYXNoeCcsIHsgdHlwZTogJ0xBQkVMUycgfSk7XHJcbiAgICAgICAgICAgIGN1cnJlbnRMYWJlbHMudXBkYXRlZE9uID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgc2V0TGFuZ3VhZ2VUb1N0b3JlKGN1cnJlbnRMYWJlbHMpO1xyXG4gICAgICAgICAgICByZXNvbHZlKGN1cnJlbnRMYWJlbHMpO1xyXG4gICAgICAgIH0pOyAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGV4cHJlc3Npb25Gb3JBdHRyaWJ1dGUgPSAvYWdcXC1sXFwta1xcLSg/PEF0dHJpYnV0ZT5bXlxcPV0rKS9nbTtcclxuICAgIHZhciBleHByZXNzaW9uRm9yQXR0cmlidXRlVmFsdWUgPSAvXFxbKD88TGFiZWxJRD5bXlxcXV0rKVxcXS9nbTtcclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUxhbmd1YWdlTGFiZWwoaXRlbSwgbGFiZWxzKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLWsnKTtcclxuICAgICAgICB2YXIgbWF0Y2ggPSBudWxsO1xyXG4gICAgICAgIGlmIChsYWJlbHNba2V5XSB8fCBleHByZXNzaW9uRm9yQXR0cmlidXRlVmFsdWUudGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkTm9kZXMgJiYgaXRlbS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uRm9yQXR0cmlidXRlVmFsdWUubGFzdEluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uRm9yQXR0cmlidXRlVmFsdWUudGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLmxhc3RJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRDb250ZW50ID0ga2V5OyAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IGV4cHJlc3Npb25Gb3JBdHRyaWJ1dGVWYWx1ZS5leGVjKHRleHRDb250ZW50KSkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudCA9IHRleHRDb250ZW50LnJlcGxhY2UobWF0Y2hbMF0sIGxhYmVsc1ttYXRjaC5ncm91cHMuTGFiZWxJRF0gPyBsYWJlbHNbbWF0Y2guZ3JvdXBzLkxhYmVsSURdLmxibCA6ICcnKTtcclxuICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmNoaWxkTm9kZXNbMF0udGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jaGlsZE5vZGVzWzBdLnRleHRDb250ZW50ID0gbGFiZWxzW2tleV0gPyBsYWJlbHNba2V5XS5sYmwgOiAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChsYWJlbHNba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkdW1teU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZHVtbXlOb2RlLmlubmVySFRNTCA9IGxhYmVsc1trZXldLmxibDtcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaEh0bWxXaXRoTGFiZWwoaXRlbSwgZHVtbXlOb2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbS5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IGl0ZW0uYXR0cmlidXRlc1tpXTsgICAgICAgICAgXHJcbiAgICAgICAgICAgIGV4cHJlc3Npb25Gb3JBdHRyaWJ1dGUubGFzdEluZGV4ID0gMDsgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKChtYXRjaCA9IGV4cHJlc3Npb25Gb3JBdHRyaWJ1dGUuZXhlYyhhdHRyaWJ1dGUubmFtZSkpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVJZGVudGlmaWVyID0gbWF0Y2guZ3JvdXBzLkF0dHJpYnV0ZTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVWYWx1ZSA9IGF0dHJpYnV0ZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBleHByZXNzaW9uRm9yQXR0cmlidXRlVmFsdWUuZXhlYyhhdHRyaWJ1dGVWYWx1ZSkpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGF0dHJpYnV0ZVZhbHVlLnJlcGxhY2UobWF0Y2hbMF0sIGxhYmVsc1ttYXRjaC5ncm91cHMuTGFiZWxJRF0/bGFiZWxzW21hdGNoLmdyb3Vwcy5MYWJlbElEXS5sYmw6JycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlSWRlbnRpZmllciwgYXR0cmlidXRlVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIG1hdGNoSHRtbFdpdGhMYWJlbChpdGVtLCBkb20pIHsgICAgICAgIFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9tLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKGRvbS5jaGlsZE5vZGVzW2ldPy50ZXh0Q29udGVudCAmJiBpdGVtLmNoaWxkTm9kZXNbaV0/LnRleHRDb250ZW50KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5jaGlsZE5vZGVzW2ldLnRleHRDb250ZW50ID0gZG9tLmNoaWxkTm9kZXNbaV0/LnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICBlbHNlIGlmIChpIDwgZG9tLmNoaWxkTm9kZXMubGVuZ3RoICYmIGkgPCBpdGVtLmNoaWxkTm9kZXMubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgbWF0Y2hIdG1sV2l0aExhYmVsKGl0ZW0uY2hpbGROb2Rlc1tpXSwgZG9tLmNoaWxkTm9kZXNbaV0pO1xyXG4gICAgICAgICAgICBlbHNlIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHJpY2UoaXNJbml0KSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbmNpZXMgPSBhd2FpdCBnZXRDb252ZXJ0aW9uUmF0ZXMoKTtcclxuICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50LmN1cnJlbmN5KSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW5jeSA9IGN1cnJlbmNpZXMuUmF0ZXM/LkV4Y2hhbmdlUmF0ZXM/LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5Db2RlID09IGN1cnJlbnQuY3VycmVuY3k7IH0pWzBdO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVuY3lNZXRhID0gbGFuZ3VhZ2VTb3VyY2VzLmN1cnJlbmNpZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLmNvZGUgPT0gY3VycmVudC5jdXJyZW5jeTsgfSlbMF07XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeU1ldGEpXHJcbiAgICAgICAgICAgICAgICBjdXJyZW5jeS5mb3JtYXR0ZXIgPSBjb252ZXJ0Rm9ybWF0VG9FeHByZXNzaW9uKGN1cnJlbmN5TWV0YS5mb3JtYXQpO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudEN1cnJlbmN5ID0gY3VycmVuY3kuQ29kZTtcclxuICAgICAgICAgICAgdmFyIHByaWNlVG9DaGFuZ2UgPSBpc0luaXQgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYWctbC1wXTpub3QoLmlzLWFwcGxpZWQpJykgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYWctbC1wXScpO1xyXG4gICAgICAgICAgICBpZiAocHJpY2VUb0NoYW5nZSlcclxuICAgICAgICAgICAgICAgIHByaWNlVG9DaGFuZ2UuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoaXRlbSkgeyBpZiAoaXRlbS5pbm5lckhUTUwuaW5kZXhPZigne3snKSA+IC0xKSByZXR1cm47IHVwZGF0ZUl0ZW1PZmZzZXRDbGFzcyhpdGVtKTsgaXRlbS5jbGFzc0xpc3QuYWRkKCdpcy1hcHBsaWVkJyk7IHVwZGF0ZVByaWNlRm9ySXRlbShpdGVtLCBjdXJyZW5jeSwgY3VycmVudEN1cnJlbmN5KTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUl0ZW1PZmZzZXRDbGFzcyhpdGVtKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtLmNsYXNzTGlzdC5jb250YWlucygnaXMtYXBwbGllZCcpKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgdmFyIHBhcmVudENvbGxlY3Rpb24gPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgcGFyZW50T2Zmc2V0ID0gKHBhcmVudENvbGxlY3Rpb24gPSBpdGVtLmNsb3Nlc3QoJ2FydGljbGUnKSkgIT0gbnVsbCAmJiBwYXJlbnRDb2xsZWN0aW9uLmxlbmd0aCA+IDAgPyBwYXJlbnRDb2xsZWN0aW9uWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIDogaXRlbS5wYXJlbnRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgdmFyIHBhcmVudFBvaW50cyA9IHsgeTogKHBhcmVudE9mZnNldC50b3AgKyBwYXJlbnRPZmZzZXQuYm90dG9tKSAvIDIsIHg6IChwYXJlbnRPZmZzZXQubGVmdCArIHBhcmVudE9mZnNldC5yaWdodCkgLyAyIH07XHJcbiAgICAgICAgICAgIHZhciBpdGVtUG9pbnRzID0geyB5OiAoY3VycmVudE9mZnNldC50b3AgKyBjdXJyZW50T2Zmc2V0LmJvdHRvbSkgLyAyLCB4OiAoY3VycmVudE9mZnNldC5sZWZ0ICsgY3VycmVudE9mZnNldC5yaWdodCkgLyAyIH07XHJcbiAgICAgICAgICAgIHZhciBjbGFzc0F4aXMgPSAnYWctbC1wLXAnO1xyXG4gICAgICAgICAgICBjbGFzc0F4aXMgKz0gJy0nICsgKHBhcmVudFBvaW50cy54ID4gaXRlbVBvaW50cy54ID8gJ2wnIDogJ3InKTtcclxuICAgICAgICAgICAgY2xhc3NBeGlzICs9ICctJyArIChwYXJlbnRQb2ludHMueSA+IGl0ZW1Qb2ludHMueSA/ICdiJyA6ICd0Jyk7XHJcbiAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZChjbGFzc0F4aXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRDb252ZXJ0aW9uUmF0ZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgdmFyIGNvbnZlcnRpb25SYXRlc1N0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDT05WRVJUSU9OUkFURVMnKTtcclxuICAgICAgICAgICAgdmFyIGNvbnZlcnRpb25SYXRlcyA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChjb252ZXJ0aW9uUmF0ZXNTdG9yZWQgJiYgY29udmVydGlvblJhdGVzU3RvcmVkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb252ZXJ0aW9uUmF0ZXMgPSBKU09OLnBhcnNlKGNvbnZlcnRpb25SYXRlc1N0b3JlZCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXhwaXJ5ID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIGV4cGlyeS5zZXREYXRlKGV4cGlyeS5nZXREYXRlKCkgLSAxKTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAobmV3IERhdGUoY29udmVydGlvblJhdGVzLnVwZGF0ZWRPbikgPiBleHBpcnkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNvbnZlcnRpb25SYXRlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnZlcnRpb25SYXRlcyA9IGF3YWl0IEdFVCgnL3NlcnZpY2VzL2Fnb3JhQ2xpZW50LmFzaHgnLCB7IHR5cGU6ICdDT05WRVJUSU9OUkFURVMnIH0pO1xyXG4gICAgICAgICAgICBjb252ZXJ0aW9uUmF0ZXMudXBkYXRlZE9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQ09OVkVSVElPTlJBVEVTJywgSlNPTi5zdHJpbmdpZnkoY29udmVydGlvblJhdGVzKSk7XHJcbiAgICAgICAgICAgIHJlc29sdmUoY29udmVydGlvblJhdGVzKTtcclxuICAgICAgICB9KTsgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHZhciBleHByZXNzaW9uRm9yUHJpY2UgPSAvKChbXkEtejAtOV18W0EtWl18W0EtWl17M30pKlxccz9bMC05XFwsXFwuXSspL2dtO1xyXG5cclxuICAgIGZ1bmN0aW9uIGNvbnZlcnRGb3JtYXRUb0V4cHJlc3Npb24oZm9ybWF0KSB7XHJcbiAgICAgICAgdmFyIGZvcm1hdFN0cmluZyA9IGZvcm1hdC5yZXBsYWNlKC9bI1xcLFxcLl0rL2dpLCcnKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0U3RyaW5nICsgbnVtYmVyLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHJpY2VGb3JJdGVtKGl0ZW0sIGN1cnJlbmN5LCBjdXJyZW50Q3VycmVuY3kpIHsgICAgICAgIFxyXG4gICAgICAgIHZhciBpc0RlZmF1bHRDdXJyZW5jeUNoYW5nZSA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAtYycpICE9IG51bGwgJiYgaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWwtcC1vJykgPT0gbnVsbDsgXHJcbiAgICAgICAgaWYgKGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAtYycpID09IGN1cnJlbnRDdXJyZW5jeSAmJiBpc0RlZmF1bHRDdXJyZW5jeUNoYW5nZSkgcmV0dXJuOyAgICAgICAgXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSBpdGVtLmNoaWxkTm9kZXNbaV0sIG1hdGNoID0gbnVsbDtcclxuICAgICAgICAgICAgZXhwcmVzc2lvbkZvclByaWNlLmxhc3RJbmRleCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChub2RlLnRleHRDb250ZW50ICYmIChtYXRjaCA9IGV4cHJlc3Npb25Gb3JQcmljZS5leGVjKG5vZGUudGV4dENvbnRlbnQpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZWZhdWx0Q3VycmVuY3lDaGFuZ2UpIGl0ZW0uc2V0QXR0cmlidXRlKCdhZy1sLXAtbycsIG1hdGNoWzBdKTtcclxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25Gb3JQcmljZS5sYXN0SW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHByaWNlQ29udmVydGVkID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAnKSkgKiBjdXJyZW5jeS5Db25zdGFudCk7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbm9kZS50ZXh0Q29udGVudCA9IG5vZGUudGV4dENvbnRlbnQucmVwbGFjZShtYXRjaFswXSwgY3VycmVuY3kuZm9ybWF0dGVyID8gY3VycmVuY3kuZm9ybWF0dGVyKHByaWNlQ29udmVydGVkKSA6IHByaWNlQ29udmVydGVkLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTWVzc3VyZW1lbnQoaXNJbml0KSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuICAgICAgICB2YXIgaXNBcHBsaWVkID0gY3VycmVudC5tZXNzdXJlbWVudCA9PSAnbWV0cmljJztcclxuICAgICAgICB2YXIgbWVzc3VyZW1lbnRzVG9DaGFuZ2UgPSBpc0FwcGxpZWQgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYWctbC1tXTpub3QoLmlzLWFwcGxpZWQpJykgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYWctbC1tXScpO1xyXG4gICAgICAgIGlmIChpc0FwcGxpZWQpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWVzc3VyZW1lbnRzVG9DaGFuZ2UpIG1lc3N1cmVtZW50c1RvQ2hhbmdlLmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGl0ZW0pIHsgaWYgKGl0ZW0uaW5uZXJIVE1MLmluZGV4T2YoJ3t7JykgPiAtMSkgcmV0dXJuOyB1cGRhdGVJdGVtTWVzc3VyZW1lbnQoaXRlbSwgaXRlbSk7IGl0ZW0uY2xhc3NMaXN0LmFkZCgnaXMtYXBwbGllZCcpOyB9KTtcclxuICAgICAgICAgICAgfSwgaXNJbml0PzUwMDowKTsgICAgICAgICAgICBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAobWVzc3VyZW1lbnRzVG9DaGFuZ2UpIG1lc3N1cmVtZW50c1RvQ2hhbmdlLmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGl0ZW0pIHsgaWYgKGl0ZW0uaW5uZXJIVE1MLmluZGV4T2YoJ3t7JykgPiAtMSkgcmV0dXJuOyBpdGVtLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS5tZXNzdXJlbWVudC5yZXZlcnQnKSk7IGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnaXMtYXBwbGllZCcpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlSXRlbU1lc3N1cmVtZW50KGl0ZW0scm9vdEVsZW1lbnQsIGlzSW5pdCwgaXNVbml0Rm91bmQsIHVuaXQpIHtcclxuXHJcbiAgICAgICAgaWYgKGlzVW5pdEZvdW5kICYmIHVuaXQpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkTm9kZXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGROb2Rlcy5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChjaGlsZE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlPy50ZXh0Q29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFRleHQgPSBjaGlsZE5vZGUudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXBsYWNlUmVzdWx0ID0gYXdhaXQgcmVwbGFjZU1lc3N1cmVtZW50V2l0aFVuaXQoY2hpbGROb2RlLnRleHRDb250ZW50LCAyLCB1bml0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VSZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLnRleHRDb250ZW50ID0gcmVwbGFjZVJlc3VsdC5jb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UubWVzc3VyZW1lbnQucmV2ZXJ0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS50ZXh0Q29udGVudCA9IGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaW5kTWVzc3VyZW1lbnRGcm9tQXR0cmlidXRlKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50TGFiZWwgPSBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEuZ2V0TGFiZWxGb3JBdHRyaWJ1dGUoaXRlbSk7XHJcbiAgICAgICAgICAgIHZhciBsYWJlbFJlcGxhY2VSZXN1bHQgPSBhd2FpdCByZXBsYWNlTWVzc3VyZW1lbnQoY3VycmVudExhYmVsLCAxKTtcclxuICAgICAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLnNldExhYmVsRm9yQXR0cmlidXRlKGl0ZW0sIGxhYmVsUmVwbGFjZVJlc3VsdC5jb250ZW50KTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5nZXRWYWx1ZUZvckF0dHJpYnV0ZShpdGVtKTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlUmVwbGFjZVJlc3VsdCA9IGF3YWl0IHJlcGxhY2VNZXNzdXJlbWVudFdpdGhVbml0KGN1cnJlbnRWYWx1ZSwgMiwgbGFiZWxSZXBsYWNlUmVzdWx0LnVuaXRzWzBdKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLnNldFZhbHVlRm9yQXR0cmlidXRlKGl0ZW0sIHZhbHVlUmVwbGFjZVJlc3VsdC5jb250ZW50KTtcclxuICAgICAgICAgICAgcm9vdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UubWVzc3VyZW1lbnQucmV2ZXJ0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLnNldExhYmVsRm9yQXR0cmlidXRlKGl0ZW0sIGN1cnJlbnRMYWJlbCk7XHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEuc2V0VmFsdWVGb3JBdHRyaWJ1dGUoaXRlbSwgY3VycmVudFZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkTm9kZXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGROb2Rlcy5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChjaGlsZE5vZGUpIHsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGU/LnRleHRDb250ZW50ICYmIGZpbmRNZXNzdXJlbWVudEZyb21Ob2RlKGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUZXh0ID0gY2hpbGROb2RlLnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZVJlc3VsdCA9IGF3YWl0IHJlcGxhY2VNZXNzdXJlbWVudChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS50ZXh0Q29udGVudCA9IHJlcGxhY2VSZXN1bHQuY29udGVudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlUmVzdWx0ID0gYXdhaXQgcmVwbGFjZU1lc3N1cmVtZW50KGNoaWxkTm9kZS50ZXh0Q29udGVudCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUudGV4dENvbnRlbnQgPSByZXBsYWNlUmVzdWx0LmNvbnRlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbU1lc3N1cmVtZW50KGNoaWxkTm9kZS5wYXJlbnRFbGVtZW50LCByb290RWxlbWVudCwgZmFsc2UsIHRydWUsIHJlcGxhY2VSZXN1bHQudW5pdHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLm1lc3N1cmVtZW50LnJldmVydCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS50ZXh0Q29udGVudCA9IGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtTWVzc3VyZW1lbnQoY2hpbGROb2RlLCByb290RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZpbmRNZXNzdXJlbWVudEZyb21Ob2RlKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmV4cHJlc3Npb24udGVzdChpdGVtLnRleHRDb250ZW50KSB8fCBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEubm90YXRpb25FeHByZXNzaW9uLnRlc3QoaXRlbS50ZXh0Q29udGVudCk7ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmaW5kTWVzc3VyZW1lbnRGcm9tQXR0cmlidXRlKGl0ZW0pIHsgICAgICAgICAgICBcclxuICAgICAgICB2YXIgbWF0Y2ggPSBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEuaGF2ZVZhbGlkQXR0cmlidXRlKGl0ZW0pID8gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmdldExhYmVsRm9yQXR0cmlidXRlKGl0ZW0pLm1hdGNoKGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5ub3RhdGlvbkV4cHJlc3Npb24pIDogbnVsbDsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIG1hdGNoICE9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZU1lc3N1cmVtZW50KGNvbnRlbnQsIG1vZGUpIHtcclxuICAgICAgICB2YXIgdW5pdHMgPSBbXTtcclxuICAgICAgICB2YXIgcmVwbGFjZVN1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIW1vZGUpIG1vZGUgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGl0ZW0gb2YgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9ucykge1xyXG4gICAgICAgICAgICB2YXIgcmVwbGFjZVVuaXRSZXN1bHQgPSBhd2FpdCByZXBsYWNlTWVzc3VyZW1lbnRXaXRoVW5pdChjb250ZW50LCBtb2RlLCBpdGVtKTtcclxuICAgICAgICAgICAgY29udGVudCA9IHJlcGxhY2VVbml0UmVzdWx0LmNvbnRlbnQ7XHJcbiAgICAgICAgICAgIHJlcGxhY2VTdWNjZXNzIHw9IHJlcGxhY2VVbml0UmVzdWx0LnN1Y2Nlc3M7XHJcbiAgICAgICAgICAgIGlmIChyZXBsYWNlVW5pdFJlc3VsdC5zdWNjZXNzKVxyXG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLm5vdGF0aW9uRXhwcmVzc2lvbnNbaXRlbS51bml0XS5sYXN0SW5kZXggPSAtMTtcclxuICAgICAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLm5vdGF0aW9uT25seUV4cHJlc3Npb25zW2l0ZW0udW5pdF0ubGFzdEluZGV4ID0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IGNvbnRlbnQsIHN1Y2Nlc3M6IHJlcGxhY2VTdWNjZXNzLCB1bml0czogdW5pdHMgfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZXBsYWNlTWVzc3VyZW1lbnRXaXRoVW5pdChjb250ZW50LCBtb2RlLCBpdGVtKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gbnVsbDtcclxuICAgICAgICB2YXIgbWF0Y2hTdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IGdldFJlcGxhY2VNZXNzdXJlbWVudEV4cHJlc3Npb25NYXRjaChjb250ZW50LCBpdGVtLCBtb2RlKSkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBtYXRjaFN1Y2Nlc3MgPSB0cnVlO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBtb2RlID09IDEgPyAwIDogcGFyc2VGbG9hdChsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEuZ2V0VmFsdWUobWF0Y2guZ3JvdXBzLlYpKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHVuaXQgPSBtYXRjaC5ncm91cHMuTjtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSBtYXRjaC5pbmRleDtcclxuICAgICAgICAgICAgdmFyIGVuZEluZGV4ID0gc3RhcnRJbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcclxuICAgICAgICAgICAgdmFyIG1hdGNoVmFsdWUgPSAobW9kZSAhPSAxID8gbWF0Y2hbMF0ucmVwbGFjZUFsbChtYXRjaC5ncm91cHMuViwgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmZvcm1hdFZhbHVlKCh2YWx1ZSAqIGl0ZW0uY29uc3RhbnQpKSkgOiBtYXRjaFswXSkucmVwbGFjZUFsbCh1bml0LCBpdGVtLnRyYWdldFVuaXQpO1xyXG4gICAgICAgICAgICBpZiAobW9kZSA9PSAyICYmIGl0ZW0udGFyZ2V0Tm90YXRpb24pIG1hdGNoVmFsdWUgKz0gJyAnICsgaXRlbS50YXJnZXROb3RhdGlvbjtcclxuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIHN0YXJ0SW5kZXgpICsgbWF0Y2hWYWx1ZSArIGNvbnRlbnQuc3Vic3RyaW5nKGVuZEluZGV4KTtcclxuICAgICAgICAgICAgaWYgKG1vZGUgPT0gMikgcmV0dXJuIHsgY29udGVudDogY29udGVudCwgc3VjY2VzczogbWF0Y2hTdWNjZXNzIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IGNvbnRlbnQsIHN1Y2Nlc3M6IG1hdGNoU3VjY2VzcyB9O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFJlcGxhY2VNZXNzdXJlbWVudEV4cHJlc3Npb25NYXRjaCh2YWx1ZSwgaXRlbSwgbW9kZSkge1xyXG4gICAgICAgIGlmIChtb2RlID09IDApIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5ub3RhdGlvbkV4cHJlc3Npb25zW2l0ZW0udW5pdF0uZXhlYyh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IDEpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5ub3RhdGlvbk9ubHlFeHByZXNzaW9uc1tpdGVtLnVuaXRdLmV4ZWModmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSAyKSB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS52YWx1ZUV4cHJlc3Npb24ubGFzdEluZGV4ID0gLTE7XHJcbiAgICAgICAgICAgIHJldHVybiBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEudmFsdWVFeHByZXNzaW9uLmV4ZWModmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZW5hYmxlTGFuZ3VhZ2VTZWxlY3RvcihpdGVtKSB7XHJcbiAgICAgICAgZ2V0RmxhZ0Nzc0NsYXNzKCdVUycpLnNwbGl0KCcgJykubWFwKGZ1bmN0aW9uIChjbGFzc05hbWUpIHsgaXRlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7IH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UudXBkYXRlJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaXRlbS5jbGFzc05hbWUgPSBpdGVtLmNsYXNzTmFtZS5yZXBsYWNlKC9mZmxhZ1xcLVtBLVpdezEsMn0vZ2ksICcnKTtcclxuICAgICAgICAgICAgZ2V0RmxhZ0Nzc0NsYXNzKGUuZGV0YWlsLmNvZGUpLnNwbGl0KCcgJykubWFwKGZ1bmN0aW9uIChjbGFzc05hbWUpIHsgaXRlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7IH0pO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG5cclxuICAgICAgICB9KTtcclxuICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKCFzZWxlY3RvckVsZW1lbnQpIHNlbGVjdG9yRWxlbWVudCA9IGF3YWl0IHJlbmRlckxhbmd1YWdlU2VsZWN0b3IoKTtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgZW5nYWdlTGFuZ3VhZ2VTZWxlY3RvcihpdGVtKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGRpc2VuZ2FnZUFjdGlvbkxpc3RlbmVyKTtcclxuICAgICAgICB9KTsgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBkaXNlbmdhZ2VBY3Rpb25MaXN0ZW5lcihlKSB7ICAgICAgICBcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGlmIChlLnRhcmdldC5jbG9zZXN0KCdbYWctbGFuZ3VhZ2Utc2VsZWN0XSxbYWctbGFuZ3VhZ2VdJykgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZGlzZW5nYWdlQWN0aW9uTGlzdGVuZXIpO1xyXG4gICAgICAgICAgICBkaXNlbmdhZ2VMYW5ndWFnZVNlbGVjdG9yKGUudGFyZ2V0KTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBlbmdhZ2VMYW5ndWFnZVNlbGVjdG9yKGl0ZW0pIHtcclxuICAgICAgICB2YXIgcG9zaXRpb24gPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyAgICAgICAgICAgICAgICBcclxuICAgICAgICBzZWxlY3RvckVsZW1lbnQubm9kZS5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHBvc2l0aW9uLnRvcCAtIDgpICsgJ3B4JztcclxuICAgICAgICBzZWxlY3RvckVsZW1lbnQubm9kZS5zdHlsZS5yaWdodCA9ICdjYWxjKDEwMCUgLSAnICsgTWF0aC5mbG9vcihwb3NpdGlvbi5yaWdodCArIDgpICsgJ3B4KSc7XHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZScpPy5mb3JFYWNoKGZ1bmN0aW9uIChhY3RpdmVJdGVtKSB7IGFjdGl2ZUl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IH0pXHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZGlzZW5nYWdlTGFuZ3VhZ2VTZWxlY3RvcihpdGVtKSB7ICAgICAgICBcclxuICAgICAgICBzZWxlY3RvckVsZW1lbnQubm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRGbGFnQ3NzQ2xhc3MoY29kZSkge1xyXG4gICAgICAgIHJldHVybiAnZmZsYWcgZmYtbGcgZmZsYWctJyArIGNvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0KCkge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2VbJ0FHTEFOR1VBR0UnXTtcclxuICAgICAgICB2YXIgY3VycmVudFZhbHVlID0ge307XHJcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9ICcnKSBjdXJyZW50VmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB1cGRhdGVUb3NlcnZlckNhbGwgPSBudWxsO1xyXG4gICAgdmFyIHVwZGF0ZVN1Y2NlcyA9IG51bGw7XHJcblxyXG4gICAgZnVuY3Rpb24gc2V0KGZpZWxkLCB2YWx1ZSkgeyAgICAgICAgXHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTsgICAgICAgIFxyXG4gICAgICAgIGlmIChjdXJyZW50ID09IHVuZGVmaW5lZCkgY3VycmVudCA9IHt9O1xyXG4gICAgICAgIGlmIChjdXJyZW50W2ZpZWxkXSAmJiBjdXJyZW50W2ZpZWxkXSA9PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIGN1cnJlbnRbZmllbGRdID0gdmFsdWU7XHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdBR0xBTkdVQUdFJywgSlNPTi5zdHJpbmdpZnkoY3VycmVudCkpO1xyXG5cclxuICAgICAgICAvL1Rocm90dGxpbmdcclxuICAgICAgICBpZiAodXBkYXRlVG9zZXJ2ZXJDYWxsICE9IG51bGwpIGNsZWFyVGltZW91dCh1cGRhdGVUb1NlcnZlcik7XHJcbiAgICAgICAgdXBkYXRlVG9zZXJ2ZXJDYWxsID0gc2V0VGltZW91dChhc3luYyBmdW5jdGlvbiAoKSB7IHVwZGF0ZVRvc2VydmVyQ2FsbCA9IG51bGw7IGF3YWl0IHVwZGF0ZVRvU2VydmVyKGZpZWxkKTsgaWYgKHVwZGF0ZVN1Y2NlcyAhPSBudWxsKSB7IHVwZGF0ZVN1Y2NlcygpOyB1cGRhdGVTdWNjZXMgPSBudWxsOyB9IH0sIDEwMCk7XHJcbiAgICAgICAgdmFyIG9sZFVwZGF0ZVN1Y2Nlc3MgPSB1cGRhdGVTdWNjZXM7XHJcbiAgICAgICAgdXBkYXRlU3VjY2VzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAob2xkVXBkYXRlU3VjY2VzcyAhPSBudWxsKSBvbGRVcGRhdGVTdWNjZXNzKCk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLmNoYW5nZS4nICsgZmllbGQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlVG9TZXJ2ZXIoZmllbGQpIHsgICAgICAgIFxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7XHJcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRTZXR0aW5ncykgIT0gSlNPTi5zdHJpbmdpZnkoY3VycmVudCkpIHtcclxuICAgICAgICAgICAgY3VycmVudFNldHRpbmdzID0gY3VycmVudDtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudC5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB3aW5kb3cuYWdSZXF1ZXN0LlBPU1QoJy9zZXJ2aWNlcy9hZ29yYUNsaWVudC5hc2h4JywgT2JqZWN0LmFzc2lnbih7IHR5cGU6ICdTRVQnIH0sIGN1cnJlbnQpKTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVuZGVyTGFuZ3VhZ2VTZWxlY3RvcigpIHtcclxuICAgICAgICB2YXIgZWxlbWVudCA9IG5ldyBjKCdzcGFuJyk7XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uRWxlbWVudCA9IGVsZW1lbnQubignc3BhbicpOyAgICAgICAgXHJcbiAgICAgICAgdmFyIGxvY2F0aW9uRmxhZztcclxuICAgICAgICB2YXIgbGFuZ3VhZ2VFbGVtZW50O1xyXG4gICAgICAgIGZ1bmN0aW9uIHJlbmRlckxhbmd1YWdlRWxlbWVudChsYW5ndWFnZXMpIHsgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVuZGVyQ2hvaWNlTGlzdChsYW5ndWFnZUVsZW1lbnQsICdMYW5ndWFnZScsICdsYW5ndWFnZScsIGxhbmd1YWdlcywgZnVuY3Rpb24gKGl0ZW1FbGVtZW50LCBzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtRWxlbWVudC5oKHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWwpO1xyXG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZUl0ZW0/KHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWwpOicnO1xyXG4gICAgICAgICAgICB9KTsgICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyQ2hvaWNlTGlzdChsb2NhdGlvbkVsZW1lbnQsICdMb2NhdGlvbicsJ2NvZGUnLCBsYW5ndWFnZVNvdXJjZXMucHJlc2V0cywgZnVuY3Rpb24gKGl0ZW1FbGVtZW50LCBzb3VyY2VJdGVtKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50Lm4oJ2knKS5hKCdjbGFzcycsIGdldEZsYWdDc3NDbGFzcyhzb3VyY2VJdGVtLmNvZGUpKTtcclxuICAgICAgICAgICAgaXRlbUVsZW1lbnQubignYicpLmgoc291cmNlSXRlbS5sb2NhbExhYmVsID8gc291cmNlSXRlbS5sb2NhbExhYmVsIDogc291cmNlSXRlbS5sYWJlbCk7XHJcblxyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzb3VyY2VJdGVtLGlzRXZlbnQpIHtcclxuICAgICAgICAgICAgbG9jYXRpb25GbGFnLmEoJ2NsYXNzJywgZ2V0RmxhZ0Nzc0NsYXNzKHNvdXJjZUl0ZW0uY29kZSkpO1xyXG4gICAgICAgICAgICByZW5kZXJMYW5ndWFnZUVsZW1lbnQobGFuZ3VhZ2VTb3VyY2VzLmxhbmd1YWdlcy5maWx0ZXIoZnVuY3Rpb24gKGxhbmd1YWdlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShzb3VyY2VJdGVtLmxhbmd1YWdlKSA/IHNvdXJjZUl0ZW0ubGFuZ3VhZ2UuaW5kZXhPZihsYW5ndWFnZS5jb2RlKSA+IC0xIDogbGFuZ3VhZ2UuY29kZSA9PSBzb3VyY2VJdGVtLmxhbmd1YWdlO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIGlmICghaXNFdmVudClcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLnVwZGF0ZScsIHsgZGV0YWlsOiBzb3VyY2VJdGVtIH0pKTtcclxuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbG9jYXRpb25GbGFnID0gbG9jYXRpb25FbGVtZW50Lm4oJ2knKTtcclxuXHJcbiAgICAgICAgbGFuZ3VhZ2VFbGVtZW50ID0gZWxlbWVudC5uKCdzcGFuJyk7ICAgICBcclxuXHJcbiAgICAgICAgcmVuZGVyTGFuZ3VhZ2VFbGVtZW50KGxhbmd1YWdlU291cmNlcy5sYW5ndWFnZXMpO1xyXG5cclxuICAgICAgICB2YXIgY3VycmVuY3lFbGVtZW50ID0gZWxlbWVudC5uKCdzcGFuJyk7XHJcbiAgICAgICAgcmVuZGVyQ2hvaWNlTGlzdChjdXJyZW5jeUVsZW1lbnQsICdDdXJyZW5jeScsICdjdXJyZW5jeScsIGxhbmd1YWdlU291cmNlcy5jdXJyZW5jaWVzLCBmdW5jdGlvbiAoaXRlbUVsZW1lbnQsIHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgaXRlbUVsZW1lbnQuaChzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsKTtcclxuICAgICAgICB9LCBmdW5jdGlvbiAoc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc291cmNlSXRlbS5sb2NhbExhYmVsID8gc291cmNlSXRlbS5sb2NhbExhYmVsIDogc291cmNlSXRlbS5sYWJlbDtcclxuICAgICAgICB9KTsgIFxyXG5cclxuICAgICAgICB2YXIgcHJvcGVydHlNZXNzdXJlbWVudEVsZW1lbnQgPSBlbGVtZW50Lm4oJ3NwYW4nKTtcclxuICAgICAgICByZW5kZXJDaG9pY2VMaXN0KHByb3BlcnR5TWVzc3VyZW1lbnRFbGVtZW50LCAnUHJvcGVydHkgTWVzc3VyZW1lbnQnLCAnbWVzc3VyZW1lbnQnLCBsYW5ndWFnZVNvdXJjZXMudW5pdHMsIGZ1bmN0aW9uIChpdGVtRWxlbWVudCwgc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICBpdGVtRWxlbWVudC5oKHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWwpO1xyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsO1xyXG4gICAgICAgIH0pOyAgXHJcblxyXG4gICAgICAgIHZhciBkaXN0YW5jZU1lc3N1cmVtZW50RWxlbWVudCA9IGVsZW1lbnQubignc3BhbicpO1xyXG4gICAgICAgIHJlbmRlckNob2ljZUxpc3QoZGlzdGFuY2VNZXNzdXJlbWVudEVsZW1lbnQsICdEaXN0YW5jZSBNZXNzdXJlbWVudCcsICdtZXNzdXJlbWVudCcsIGxhbmd1YWdlU291cmNlcy51bml0cywgZnVuY3Rpb24gKGl0ZW1FbGVtZW50LCBzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50Lmgoc291cmNlSXRlbS5sb2NhbExhYmVsID8gc291cmNlSXRlbS5sb2NhbExhYmVsIDogc291cmNlSXRlbS5sYWJlbCk7XHJcbiAgICAgICAgfSwgZnVuY3Rpb24gKHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWw7XHJcbiAgICAgICAgfSk7ICAgICAgICAgIFxyXG5cclxuICAgICAgICBlbGVtZW50Lm5vZGUuc2V0QXR0cmlidXRlKCdhZy1sYW5ndWFnZS1zZWxlY3QnLCcnKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQubm9kZSk7XHJcblxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQ/LmNvZGUpXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLnVwZGF0ZScsIHsgZGV0YWlsOiBjdXJyZW50IH0pKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9ucyA9IHt9O1xyXG5cclxuICAgIGZ1bmN0aW9uIHJlbmRlckNob2ljZUxpc3QoaXRlbSwgdGl0bGUsIGZpZWxkLCBzb3VyY2UsIHJlbmRlckl0ZW0sIHNlbGVjdGVkSXRlbSkge1xyXG4gICAgICAgIHZhciBmaWVsZEtleSA9IHRpdGxlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15BLXowLTldL2dpLCAnJyk7XHJcbiAgICAgICAgdmFyIHJlbmRlckV4aXN0ID0gcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3QnICsgZmllbGRLZXldID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIGlmICghcmVuZGVyRXhpc3QpXHJcbiAgICAgICAgICAgIGl0ZW0uaCh0aXRsZSk7XHJcbiAgICAgICAgdmFyIGl0ZW1MaXN0ID0gcmVuZGVyRXhpc3QgPyByZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydpdGVtTGlzdCcgKyBmaWVsZEtleV0gOiAocmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3QnICsgZmllbGRLZXldID0gaXRlbS5uKCdzcGFuJykpO1xyXG4gICAgICAgIHZhciBpdGVtTGlzdFZhbHVlID0gcmVuZGVyRXhpc3QgPyByZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydpdGVtTGlzdFZhbHVlJyArIGZpZWxkS2V5XSA6IChyZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydpdGVtTGlzdFZhbHVlJyArIGZpZWxkS2V5XSA9IGl0ZW1MaXN0Lm4oJ2xhYmVsJykpO1xyXG4gICAgICAgIGl0ZW1MaXN0VmFsdWUuaCgnU2VsZWN0ZWQgVmFsdWUnKTtcclxuICAgICAgICBpZiAoIXJlbmRlckV4aXN0KSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtQ2xpY2tGdW5jdGlvbiA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZScpPy5mb3JFYWNoKGZ1bmN0aW9uIChhY3RpdmVJdGVtKSB7IGlmIChhY3RpdmVJdGVtICE9IGl0ZW1MaXN0VmFsdWUubm9kZSkgYWN0aXZlSXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUxpc3RWYWx1ZS5ub2RlLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIGl0ZW1MaXN0VmFsdWUubm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaXRlbUxpc3RWYWx1ZS5ub2RlLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpdGVtTGlzdFZhbHVlLmNsKGl0ZW1DbGlja0Z1bmN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGl0ZW1PcHRpb25zID0gcmVuZGVyRXhpc3QgPyByZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydpdGVtT3B0aW9ucycgKyBmaWVsZEtleV0gOiAocmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbU9wdGlvbnMnICsgZmllbGRLZXldID0gaXRlbUxpc3Qubignc3BhbicpKTtcclxuICAgICAgICBpdGVtT3B0aW9ucy5oKCcnKTtcclxuICAgICAgICBzb3VyY2UubWFwKGZ1bmN0aW9uIChzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgIHZhciBjaG9pY2VJdGVtID0gaXRlbU9wdGlvbnMubignbGFiZWwnKTtcclxuICAgICAgICAgICAgY2hvaWNlSXRlbS5jbChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtTGlzdFZhbHVlLm5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICBzZXQoZmllbGQsIHNvdXJjZUl0ZW0uY29kZSk7XHJcbiAgICAgICAgICAgICAgICBpdGVtTGlzdFZhbHVlLmgoc2VsZWN0ZWRJdGVtKHNvdXJjZUl0ZW0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlbmRlckl0ZW0oY2hvaWNlSXRlbSwgc291cmNlSXRlbSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChmaWVsZCAmJiBmaWVsZCAhPSAnJykgeyAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgaWYgKCFyZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydHZW5lcmFsJyArIGZpZWxkS2V5XSkge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snR2VuZXJhbCcgKyBmaWVsZEtleV0gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLnVwZGF0ZS4nICsgZmllbGRLZXksIHsgZGV0YWlsOiBlLmRldGFpbCB9KSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UudXBkYXRlJywgcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snR2VuZXJhbCcgKyBmaWVsZEtleV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ0ZpZWxkJyArIGZpZWxkS2V5XSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ0ZpZWxkJyArIGZpZWxkS2V5XSA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRJdGVtID0gZS5kZXRhaWw7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRJdGVtW2ZpZWxkXTsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZFZhbHVlID0gQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpID8gY3VycmVudFZhbHVlWzBdIDogY3VycmVudFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZEl0ZW1Gcm9tU291cmNlID0gc291cmNlLmZpbmQoZnVuY3Rpb24gKHgsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguY29kZSA9PSBzZWxlY3RlZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0KGZpZWxkLCBzZWxlY3RlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUxpc3RWYWx1ZS5oKHNlbGVjdGVkSXRlbShzZWxlY3RlZEl0ZW1Gcm9tU291cmNlLCB0cnVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLnVwZGF0ZS4nICsgZmllbGRLZXksIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ0ZpZWxkJyArIGZpZWxkS2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGMobmFtZSkge1xyXG4gICAgICAgIHRoaXMubm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUuYSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUubiA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSBuZXcgYyhuYW1lKTtcclxuICAgICAgICB0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoaXRlbS5ub2RlKTtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH0gICAgXHJcblxyXG4gICAgYy5wcm90b3R5cGUuaCA9IGZ1bmN0aW9uICh0ZXh0KSB7ICAgICAgICBcclxuICAgICAgICB0aGlzLm5vZGUuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBjLnByb3RvdHlwZS5jbCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB0aGlzLm5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhY3Rpb24pO1xyXG4gICAgICAgIHRoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFjdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gR0VUKHNlcnZpY2VVcmwsIGRhdGEpIHtcclxuICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSAnJztcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nICsgKChxdWVyeVN0cmluZyAhPSAnJyA/ICcmJyA6ICcnKSArIGtleSArICc9JyArIGRhdGFba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlcnZpY2VVcmwgKz0gc2VydmljZVVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JyArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgICAgIHZhciByZXF1ZXN0ID0gYXdhaXQgZmV0Y2goc2VydmljZVVybCwge1xyXG4gICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgIGNhY2hlOiBcIm5vLWNhY2hlXCIsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXF1ZXN0Lmpzb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cuYWdMYW5ndWFnZSA9IHtcclxuICAgICAgICByZWZyZXNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLnJlZnJlc2guY3VycmVuY3knKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpbml0KCk7XHJcblxyXG59KSgpO1xyXG5cclxuXHJcblxyXG4gICAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsICdbZGF0YS1jay1wcm9wZXJ0eWxpc3RdIFtkYXRhLXNvcnQtb2JqZWN0PVwiQ01OQ01OXCJdJywge30sIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBHZXRQcm9wZXJ0aWVzKCQodGhpcykucGFyZW50cygnW2RhdGEtY2stcHJvcGVydHlsaXN0XTpmaXJzdCcpLCAkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWNrLXByb3BlcnR5LXVybF06Zmlyc3QnKS5kYXRhKCdjay1wcm9wZXJ0eS11cmwnKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eWxpc3RdOmZpcnN0JykuZGF0YSgnY2stZGVtYW5kLWtleScpLCAkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWNrLXByb3BlcnR5bGlzdF06Zmlyc3QnKS5kYXRhKCdjay1kZW1hbmQtbGF5b3V0JykpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZnVuY3Rpb24gR2V0UHJvcGVydGllcygkdGhpcywgdXJsLCBkZW1hbmRLZXksIGxheW91dCkge1xyXG4gICAgICAgIHZhciBpc0VkaXRNb2RlID0gJHRoaXMuY2xvc2VzdCgnZGl2W2NvbnRlbnRlZGl0YWJsZV0nKS5hdHRyKCdjb250ZW50ZWRpdGFibGUnKTtcclxuICAgICAgICBpZiAoIWlzRWRpdE1vZGUgJiYgdHlwZW9mICh1cmwpICE9ICd1bmRlZmluZWQnIHx8IHR5cGVvZiAoZGVtYW5kS2V5KSAhPSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAvL1Nob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIGxheW91dCA9ICh0eXBlb2YgKGxheW91dCkgIT0gJ3VuZGVmaW5lZCcgPyBsYXlvdXQgOiBcImdhbGxlcnlcIik7XHJcbiAgICAgICAgICAgIHN3aXRjaCAobGF5b3V0LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJnYWxsZXJ5XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyICRzb3J0ID0gJHRoaXMuZmluZCgnW2RhdGEtc29ydC1vYmplY3Q9XCJDTU5DTU5cIl0nKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKCRzb3J0ICE9ICd1bmRlZmluZWQnICYmICRzb3J0ICE9IG51bGwgJiYgJHNvcnQubGVuZ3RoID4gMCkgfHwgIXVybC5tYXRjaCgvKF58XFwvKShkKT9zb3J0XFwtW2Etel0rL2cpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSAoX2dldENNTkNNTlNvcnRCeSgkdGhpcykgKyAnLycgKyAodXJsLnJlcGxhY2UoJ2h0dHA6Ly8nLCAnJykucmVwbGFjZSgvKF58XFwvKShkKT9zb3J0XFwtW2Etel0rL2csICcnKSkpLnJlcGxhY2UoJy8vJywgJy8nKTtcclxuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJy9zZXJ2aWNlcy9NQVgvYWdvcmFHZXRHYWxsZXJ5Vmlldy5hc3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogeyBVcmxRdWVyeTogdXJsLCBUeXBlT2ZTZWFyY2g6ICdTQUxFJywgSXNDb250ZW50UGFnZTogXCJ0cnVlXCIsIERlbWFuZEtleTogZGVtYW5kS2V5IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnaHRtbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzRWRpdE1vZGUgPSAkdGhpcy5jbG9zZXN0KCdkaXZbY29udGVudGVkaXRhYmxlXScpLmF0dHIoJ2NvbnRlbnRlZGl0YWJsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VkaXRNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRodG1sID0gJzxzZWN0aW9uIGNsYXNzPVwicmVzdWx0LXBhZ2VcIiBkYXRhLWNrLXByb3BlcnR5bGlzdD1cIlwiIGRhdGEtY2stZGVtYW5kLWtleT1cIicgKyBkZW1hbmRLZXkgKyAnXCIgZGF0YS1jay1wcm9wZXJ0eS11cmw9XCInICsgdXJsICsgJ1wiIGRhdGEtY2stZGVtYW5kLWxheW91dD1cIicgKyBsYXlvdXQgKyAnXCI+JyArIHJlc3BvbnNlICsgJzwvc2VjdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLmFmdGVyKCRodG1sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0eXBlb2YgKGNvbXBvbmVudEhhbmRsZXIpID09ICd1bmRlZmluZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRIYW5kbGVyLnVwZ3JhZGVEb20oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnW2RhdGEtY2stZGVtYW5kLWtleT1cIicgKyBkZW1hbmRLZXkgKyAnXCJdICNwcm9wZXJ0eUdyaWQnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcucHJvcGVydHk6bm90KC5pbml0KScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0UHJvcGVydHlJbWFnZUdhbGxlcnkoJCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hZ0xhenkucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImNhcm91c2VsXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvc2VydmljZXMvYWdvcmFHZXRDYXJvdXNlbEl0ZW0uYXNweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgVXJsUXVlcnk6IHVybCwgVHlwZU9mU2VhcmNoOiAnU0FMRScsIElzQ29udGVudFBhZ2U6IFwidHJ1ZVwiLCBEZW1hbmRLZXk6IGRlbWFuZEtleSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2h0bWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0VkaXRNb2RlID0gJHRoaXMuY2xvc2VzdCgnZGl2W2NvbnRlbnRlZGl0YWJsZV0nKS5hdHRyKCdjb250ZW50ZWRpdGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFZGl0TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkaHRtbCA9ICc8c2VjdGlvbiBjbGFzcz1cInJlc3VsdC1wYWdlXCIgZGF0YS1jay1wcm9wZXJ0eWxpc3Q9XCJcIiBkYXRhLWNrLWRlbWFuZC1rZXk9XCInICsgZGVtYW5kS2V5ICsgJ1wiIGRhdGEtY2stcHJvcGVydHktdXJsPVwiJyArIHVybCArICdcIiBkYXRhLWNrLWRlbWFuZC1sYXlvdXQ9XCInICsgbGF5b3V0ICsgJ1wiPicgKyByZXNwb25zZSArICc8L3NlY3Rpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5hZnRlcigkaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnW2RhdGEtcXVlcnktbGlzdF06bm90KC5pbml0KVtkYXRhLXNlcnZpY2UtdXJsXVtkYXRhLXJ0Xj1cIkNNTlwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnRyaWdnZXIoJ2luaXQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaW5pdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHR5cGVvZiAoY29tcG9uZW50SGFuZGxlcikgPT0gJ3VuZGVmaW5lZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEhhbmRsZXIudXBncmFkZURvbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfZ2V0Q01OQ01OU29ydEJ5KCRwYXJlbnQpIHtcclxuICAgICAgICB2YXIgJHNvcnQgPSAkcGFyZW50LmZpbmQoJ1tkYXRhLXNvcnQtb2JqZWN0PVwiQ01OQ01OXCJdJyk7XHJcbiAgICAgICAgaWYgKCRzb3J0ICE9ICd1bmRlZmluZWQnICYmICRzb3J0ICE9IG51bGwgJiYgJHNvcnQubGVuZ3RoID4gMCAmJiBJc05vdE51bGwoJHNvcnQudmFsKCkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAkc29ydC52YWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEdldERlZmF1bHRTb3J0Rm9yUmVjb3JkVHlwZSgnUFJPUEVSVFknKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBHZXRQcm9wZXJ0eUltYWdlR2FsbGVyeSgkdGhpcykge1xyXG4gICAgdmFyICRpdGVtQ29udGV4dCA9ICR0aGlzO1xyXG4gICAgdmFyICRzbGlkZUNvbnRleHQgPSAkaXRlbUNvbnRleHQuZmluZCgnLnNsaWRlcycpO1xyXG4gICAgJHNsaWRlQ29udGV4dC5hdHRyKCdkYXRhLWNzcy1zbGlkZXInLCAnMCcpO1xyXG4gICAgdmFyIG1sc051bWJlciA9ICRpdGVtQ29udGV4dC5maW5kKCdbZGF0YS1ta10nKS5kYXRhKCdtaycpO1xyXG4gICAgdmFyIG1sc0JvYXJkID0gJGl0ZW1Db250ZXh0LmZpbmQoJ1tkYXRhLW1sc2JvYXJkXScpLmRhdGEoJ21sc2JvYXJkJyk7XHJcbiAgICB2YXIgdXJsID0gJGl0ZW1Db250ZXh0LmZpbmQoJ1tkYXRhLWRldGFpbC11cmxdJykuZGF0YSgnZGV0YWlsLXVybCcpO1xyXG4gICAgdmFyIHByb2plY3RDb2RlID0gJCgnW2RhdGEtcGNvZGVdJykuZGF0YSgncGNvZGUnKTtcclxuICAgIHZhciBpbWFnZVRlbXBsYXRlID0gJGl0ZW1Db250ZXh0LmZpbmQoJ1tkYXRhLW1scy1waG90b10nKS5kYXRhKCdtbHMtcGhvdG8nKTtcclxuICAgIHZhciBuYXRpdmVUYWIgPSAkaXRlbUNvbnRleHQuZmluZCgnW2RhdGEtbmF0aXZlLXRhYl0nKS5kYXRhKCduYXRpdmUtdGFiJyk7XHJcbiAgICBpZiAoIUlzTm90TnVsbChpbWFnZVRlbXBsYXRlKSkgaW1hZ2VUZW1wbGF0ZSA9ICcvaW1hZ2VzL2NvbXBhbnkvJyArIHByb2plY3RDb2RlICsgJy9Ob1Bob3RvSW1hZ2UvaW1hZ2Utbm90LWZvdW5kLmpwZyc7XHJcbiAgICB2YXIgY291bnQgPSBwYXJzZUludCgkc2xpZGVDb250ZXh0LmRhdGEoJ3ZhbHVlJyksIDEwKTtcclxuICAgIHZhciAkaXRlbVdpdGhJRENvbnRleHQgPSAkaXRlbUNvbnRleHQuY2xvc2VzdCgnW2lkXScpO1xyXG4gICAgdmFyIHVJRCA9ICRpdGVtQ29udGV4dC5sZW5ndGggPT0gMCA/IFwidW5cIiA6ICRpdGVtV2l0aElEQ29udGV4dC5hdHRyKCdpZCcpLnJlcGxhY2UoL1xcJC9naSwgJycpO1xyXG4gICAgYnVpbGRGaXJzdFRlbXBsYXRlKGltYWdlVGVtcGxhdGUsIGNvdW50LCB1SUQgKyBuZXcgRGF0ZSgpLmdldE1pbGxpc2Vjb25kcygpLCBtbHNCb2FyZCwgbWxzTnVtYmVyLCAkc2xpZGVDb250ZXh0LCB1cmwsIG5hdGl2ZVRhYik7XHJcbiAgICAkaXRlbUNvbnRleHQuYWRkQ2xhc3MoJ2luaXQnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYnVpbGRGaXJzdFRlbXBsYXRlKHRlbXBsYXRlLCBjb3VudCwgdUlELCBtbHNCb2FyZCwgbWxzTnVtYmVyLCAkc2xpZGVDb250ZXh0LCB1cmwsIG5hdGl2ZVRhYikge1xyXG4gICAgdmFyIGkgPSAwLCBwcmVmaXggPSAodUlEICsgbWxzQm9hcmQgKyBtbHNOdW1iZXIgKyAnXycpO1xyXG4gICAgJCgnPGlucHV0IHR5cGU9XCJyYWRpb1wiIGFyaWEtbGFiZWw9XCInICsgKHByZWZpeCArICdzbGlkZXInKSArICdcIiAgbmFtZT1cIicgKyAocHJlZml4ICsgJ3NsaWRlcicpICsgJ1wiIGlkPVwiJyArIChwcmVmaXggKyBpKSArICdcIiBjaGVja2VkIC8+JykuYXBwZW5kVG8oJHNsaWRlQ29udGV4dCk7XHJcbiAgICB2YXIgJG5hdmlnYXRpb25zID0gJCgnPGRpdiBjbGFzcz1cIm5hdlwiPjwvZGl2PicpO1xyXG4gICAgLy92YXIgJG5leHQgPSAkKCc8bGFiZWwgZGF0YS1jc3Mtc2xpZGVyLW5hdj1cInByb3BwaG90b1wiIGZvcj1cIicgKyAocHJlZml4ICsgKGkgKyAxKSkgKyAnXCIgY2xhc3M9XCJuZXh0XCI+PC9sYWJlbD4nKTtcclxuICAgIC8vdmFyICRwcmV2ID0gJCgnPGxhYmVsIGRhdGEtY3NzLXNsaWRlci1uYXY9XCJwcm9wcGhvdG9cIiBmb3I9XCInICsgKHByZWZpeCArIChwYXJzZUludChjb3VudCwgMTApIC0gMSkpICsgJ1wiIGNsYXNzPVwicHJldlwiPjwvbGFiZWw+Jyk7XHJcbiAgICB2YXIgJG5leHQgPSAkKCc8bGFiZWwgYXJpYS1sYWJlbD1cIm5leHRcIiBhcmlhLWNvbnRyb2xzPVwibXlDYXJvdXNlbC1pdGVtc1wiIGRhdGEtY3NzLXNsaWRlci1uYXY9XCJwcm9wcGhvdG9cIiBmb3I9XCInICsgKHByZWZpeCArIChpICsgMSkpICsgJ1wiICBjbGFzcz1cIm5leHRcIj48c3BhbiBhcmlhLWxhYmVsPVwibmV4dFwiIGNsYXNzPVwidmlzdWFsbHloaWRkZW5cIj5uZXh0PC9zcGFuPjwvbGFiZWw+Jyk7XHJcbiAgICB2YXIgJHByZXYgPSAkKCc8bGFiZWwgYXJpYS1sYWJlbD1cInByZXZcIiBhcmlhLWNvbnRyb2xzPVwibXlDYXJvdXNlbC1pdGVtc1wiIGRhdGEtY3NzLXNsaWRlci1uYXY9XCJwcm9wcGhvdG9cIiBmb3I9XCInICsgKHByZWZpeCArIChwYXJzZUludChjb3VudCwgMTApIC0gMSkpICsgJ1wiIGNsYXNzPVwicHJldlwiPjxzcGFuIGFyaWEtbGFiZWw9XCJwcmV2XCIgY2xhc3M9XCJ2aXN1YWxseWhpZGRlblwiPnByZXY8L3NwYW4+PC9sYWJlbD4nKTtcclxuICAgICRwcmV2Lm9uKCdjbGljaycsIF9sb2FkTW9yZSk7XHJcbiAgICAkbmV4dC5vbignY2xpY2snLCBfbG9hZE1vcmUpO1xyXG4gICAgJHByZXYuYXBwZW5kVG8oJG5hdmlnYXRpb25zKTtcclxuICAgICRuZXh0LmFwcGVuZFRvKCRuYXZpZ2F0aW9ucyk7XHJcbiAgICBpZiAoJCgnW2RhdGEtcGNvZGVdJykuZGF0YSgncGNvZGUnKSA9PSAnUFNCJykgeyB2YXIgdGFyZ2V0ID0gJyc7IH0gZWxzZSB7IHZhciB0YXJnZXQgPSAndGFyZ2V0ID0gXCJfYmxhbmtcIic7IH1cclxuICAgIGlmIChuYXRpdmVUYWIgIT0gJ3VuZGVmaW5lZCcgJiYgbmF0aXZlVGFiICE9ICcnICYmIG5hdGl2ZVRhYiA9PSAxKVxyXG4gICAgICAgIHRhcmdldCA9ICcnO1xyXG4gICAgdmFyICRub2RlID0gJCgnPGxpIGNsYXNzPVwic2xpZGUtY29udGFpbmVyXCIgYXJpYS1yb2xlZGVzY3JpcHRpb249XCJjYXJvdXNlbFwiIHJvbGU9XCJjb250ZW50aW5mb1wiPjxkaXYgY2xhc3M9XCJzbGlkZVwiPjxkaXYgY2xhc3M9XCJQcm9wX2ltZ1wiIHJvbGU9XCJpbWdcIiBhcmlhLWxhYmVsPVwiYmFubmVySW1hZ2VcIiAgc3R5bGU9XCJiYWNrZ3JvdW5kLWltYWdlOnVybChcXCcnICsgdGVtcGxhdGUgKyAnXFwnKTtcIj48YSBhcmlhLWxhYmVsPVwiJyArIChwcmVmaXggKyAnc2xpZGVyJykgKyAnXCInICsgdGFyZ2V0ICsgJ2hyZWY9XCInICsgdXJsICsgJ1wiPjwvYT48L2Rpdj48L2Rpdj48L2xpPicpO1xyXG4gICAgJG5vZGUuYXBwZW5kKCRuYXZpZ2F0aW9ucyk7XHJcbiAgICAkbm9kZS5hcHBlbmRUbygkc2xpZGVDb250ZXh0KTtcclxuICAgIGZ1bmN0aW9uIF9sb2FkTW9yZSgpIHtcclxuICAgICAgICB2YXIgJHNlbmRlciA9ICQodGhpcyk7XHJcbiAgICAgICAgJHByZXYub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICRuZXh0Lm9mZignY2xpY2snKTtcclxuICAgICAgICAkLmFqYXgoeyB1cmw6ICcvc2VydmljZXMvYWdvcmFQcm9wZXJ0eVBob3Rvcy5hc3B4JywgZGF0YTogeyBtbHNib2FyZDogbWxzQm9hcmQsIG1sc25vOiBtbHNOdW1iZXIsIGNvbnRhaW5lcjogcHJlZml4IH0sIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkgeyAkc2xpZGVDb250ZXh0LmFwcGVuZChyZXNwb25zZSk7ICRzZW5kZXIudHJpZ2dlcignY2xpY2snKTsgfSB9KTtcclxuICAgIH1cclxufVxyXG5cclxuYWdvcmEoZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gQURBIENvbXBsYWluY2VzIC8vIGNhbmNlbCBidXR0b24gd29ya2luZ1xyXG4gICAgJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIltkYXRhLWZvcl1cIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgX2ZvciA9ICQodGhpcykuZGF0YSgnZm9yJyk7XHJcbiAgICAgICAgICAgICQoJ1tmb3I9XCInICsgX2ZvciArICdcIl0nKS50cmlnZ2VyKFwiY2xpY2tcIik7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICB9KTtcclxuICAgIC8vIEVORFxyXG59KTtcclxuXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIGlzU3luY2VkID0gZmFsc2U7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy51c2VyLmluJywgZnVuY3Rpb24gKGUpIHtcclxuXHJcbiAgICAgICAgc2V0KGUuZGV0YWlsKTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnVzZXIub3V0JywgZnVuY3Rpb24gKGUpIHtcclxuXHJcbiAgICAgICAgc2V0KG51bGwpO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldCgpIHtcclxuICAgICAgICB2YXIgY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQUdVU0VSJykgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjdXJyZW50ID0gSlNPTi5wYXJzZSh3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0FHVVNFUicpKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBzZXQodXNlcikge1xyXG4gICAgICAgIGlmICh1c2VyID09IG51bGwpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdBR1VTRVInKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcudXNlci5jbGVhcicpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh1c2VyLkd1aWQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsb2NhbFVzZXIgPSB7fTtcclxuICAgICAgICAgICAgICAgIGxvY2FsVXNlci5HdWlkID0gdXNlci5HdWlkO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxVc2VyLk5hbWUgPSB1c2VyLk5hbWU7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFVzZXIuRmlyc3ROYW1lID0gdXNlci5GaXJzdE5hbWU7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFVzZXIuTGFzdE5hbWUgPSB1c2VyLkxhc3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxVc2VyLkVtYWlsID0gdXNlci5FbWFpbDtcclxuICAgICAgICAgICAgICAgIGxvY2FsVXNlci5QaG9uZSA9IHVzZXIuUGhvbmU7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFVzZXIuTW9iaWxlUGhvbmUgPSB1c2VyLk1vYmlsZVBob25lO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdBR1VTRVInLCBKU09OLnN0cmluZ2lmeShsb2NhbFVzZXIpKTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVuZGVyKCkgeyAgICAgICAgXHJcbiAgICAgICAgdmFyIHVzZXJTdGF0ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYWctdXNlcl0nKTtcclxuICAgICAgICB1c2VyU3RhdGVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsgcmVuZGVyU3RhdGVzKGl0ZW0pOyB9KTsgXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVuZGVyU3RhdGVzKGl0ZW0pIHtcclxuXHJcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdpcy1hcHBsaWVkJyk7ICAgICAgICBcclxuICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gaXRlbS5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBhd2FpdCBnZXQoKTtcclxuICAgICAgICBpZiAoY3VycmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGluaXRQcm9wZXJ0eUNvbGxlY3Rpb24oKTtcclxuICAgICAgICAgICAgdmFyIGxvZ2dpbmVkTm9kZSA9IGF3YWl0IGdldExvZ2luZWRJdGVtKGN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpdGVtLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGxvZ2dpbmVkTm9kZSwgaXRlbSk7XHJcbiAgICAgICAgICAgIGl0ZW0ucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXRQcm9wZXJ0eUNvbGxlY3Rpb24oKSB7ICAgICAgICBcclxuICAgICAgICBpZiAoaXNTeW5jZWQpIHtcclxuICAgICAgICAgICAgdXBkYXRlUHJvcGVydHlDb2xsZWN0aW9uKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5zeW5jLnZlcmlmaWVkLmNvbnRhY3QnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVQcm9wZXJ0eUNvbGxlY3Rpb24oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGF6eS5yZWZyZXNoJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB1cGRhdGVQcm9wZXJ0eUNvbGxlY3Rpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnVzZXIucmVmcmVzaC5jb2xsZWN0aW9uJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB1cGRhdGVQcm9wZXJ0eUNvbGxlY3Rpb24odHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy51c2VyLmNsZWFyLmNvbGxlY3Rpb24nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnQUdVU0VSQ09MTEVDVElPTjMnKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnVzZXIuY2xlYXInLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnVzZXIuY2xlYXIuY29sbGVjdGlvbicpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVQcm9wZXJ0eUNvbGxlY3Rpb24oaXNGb3JjZWQpIHtcclxuICAgICAgICB2YXIgY29sbGVjdGlvblR5cGUgPSAzO1xyXG4gICAgICAgIHZhciBpdGVtcyA9IGF3YWl0IGdldFByb3BlcnR5Q29sbGVjdGlvbihjb2xsZWN0aW9uVHlwZSwgaXNGb3JjZWQpO1xyXG4gICAgICAgIHZhciBpdGVtc0V4dHJhY3RlZCA9IGl0ZW1zLkl0ZW1zLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBjdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyBbLi4ucmVzdWx0LCAuLi5jdXJyZW50Lkl0ZW1zXSA6IFsuLi5jdXJyZW50Lkl0ZW1zXTtcclxuICAgICAgICB9LCBbXSk7XHJcbiAgICAgICAgaXRlbXNFeHRyYWN0ZWQuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICByZW5kZXJQcm9wZXJ0eUNvbGxlY3Rpb25JdGVtKGl0ZW0sIGNvbGxlY3Rpb25UeXBlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZW5kZXJQcm9wZXJ0eUNvbGxlY3Rpb25JdGVtKGl0ZW0sdHlwZSkge1xyXG4gICAgICAgIHZhciBpdGVtRG9tID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtcGVyZm9ybS1hY3Rpb24tdXJsKj1cInBrPScgKyBpdGVtLlBLICsgJ1wiXVtkYXRhLXBlcmZvcm0tYWN0aW9uLXVybCo9XCJydD0nICsgaXRlbS5SVCArICdcIl0nKTsgICAgICAgIFxyXG4gICAgICAgIGl0ZW1Eb20uZm9yRWFjaChhc3luYyBmdW5jdGlvbihkb20pIHtcclxuICAgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZSgnYWctdXNlci1jb2xsZWN0aW9uJywgdHlwZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0UHJvcGVydHlDb2xsZWN0aW9uKGNvbGxlY3Rpb25UeXBlLCBpc0ZvcmNlZCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eUNvbGxlY3Rpb24gPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgcHJvcGVydHlDb2xsZWN0aW9uU3RyaW5nID0gaXNGb3JjZWQgPyBudWxsIDogd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdBR1VTRVJDT0xMRUNUSU9OJyArIGNvbGxlY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgaWYgKHByb3BlcnR5Q29sbGVjdGlvblN0cmluZyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUNvbGxlY3Rpb24gPSBKU09OLnBhcnNlKHByb3BlcnR5Q29sbGVjdGlvblN0cmluZyk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHByb3BlcnR5Q29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJvcGVydHlDb2xsZWN0aW9uID0gYXdhaXQgd2luZG93LmFnUmVxdWVzdC5HRVQoJy9zZXJ2aWNlcy9hZ29yYUNsaWVudC5hc2h4JywgeyB0eXBlOiAnVVNFUkNPTExFQ1RJT04nLCBjb2xsZWN0aW9uVHlwZTogY29sbGVjdGlvblR5cGUgfSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQUdVU0VSQ09MTEVDVElPTicgKyBjb2xsZWN0aW9uVHlwZSwgSlNPTi5zdHJpbmdpZnkocHJvcGVydHlDb2xsZWN0aW9uKSk7XHJcbiAgICAgICAgICAgIHJlc29sdmUocHJvcGVydHlDb2xsZWN0aW9uKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0TG9naW5lZEl0ZW0oY29udGFjdCkge1xyXG4gICAgICAgIHZhciB3cmFwcGVyID0gbmV3IGMoJ3AnKTtcclxuICAgICAgICB3cmFwcGVyLmEoJ2FnLXVzZXInLCcnKTtcclxuICAgICAgICB2YXIgdXNlckNvbnRhaW5lciA9IHdyYXBwZXIubignYnV0dG9uJyk7XHJcbiAgICAgICAgdXNlckNvbnRhaW5lci5hKCdjbGFzcycsICd1c2VyLWxvZ2dlZC1pbiBhLWItMSBmLXMtMiB1LWxvZ2luZWQgcy1jLXAgbS1sLTE2IHhhLWItdy1sIHItYicpO1xyXG4gICAgICAgIHVzZXJDb250YWluZXIuaChjb250YWN0Lk5hbWUpO1xyXG4gICAgICAgIHVzZXJDb250YWluZXIuY2woZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBpZiAodXNlckNvbnRhaW5lci5ub2RlLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIHtcclxuICAgICAgICAgICAgICAgIHVzZXJDb250YWluZXIubm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHVzZXJDb250YWluZXIubm9kZS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB3cmFwcGVyLm4oJ3NwYW4nKTtcclxuICAgICAgICBvcHRpb25zLm4oJ3NwYW4nKS5oKCdIaSwgJyArIGNvbnRhY3QuTmFtZSk7XHJcbiAgICAgICAgb3B0aW9ucy5uKCdpbnB1dCcpLmEoJ3R5cGUnLCAnaGlkZGVuJykuYSgnaWQnLCAnQ09OVEFDVF9HVUlEJykuYSgndmFsdWUnLCBjb250YWN0Lkd1aWQpO1xyXG4gICAgICAgIG9wdGlvbnMubignYScpLmEoJ2hyZWYnLCAnL2Rhc2hib2FyZC9kZWZhdWx0LmFzcHgnKS5oKCdEYXNoYm9hcmQnKTtcclxuICAgICAgICBvcHRpb25zLm4oJ3NwYW4nKS5hKCdkYXRhLW1vZGFsZGlhbG9nLXNyYycsICcvZGFzaGJvYXJkL0VkaXRQcm9maWxlLmFzcHgnKS5hKCdkYXRhLW1vZGFsZGlhbG9nLWFqYXgnLCAndHJ1ZScpLmEoJ2RhdGEtbW9kYWxkaWFsb2cnLCcnKS5oKCdFZGl0IFByb2ZpbGUnKTtcclxuICAgICAgICBvcHRpb25zLm4oJ2EnKS5hKCdocmVmJywgJy9kYXNoYm9hcmQvU2lnbk91dC5hc3B4JykuYSgnZGF0YS1hZ29yYS1pY29uJywgJ+6ksScpLmgoJ0xvZyBvdXQnKS5jbChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnVzZXIub3V0JykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB3cmFwcGVyLm5vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYyhuYW1lKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBjLnByb3RvdHlwZS5hID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSlcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBjLnByb3RvdHlwZS5uID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICB2YXIgaXRlbSA9IG5ldyBjKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubm9kZS5hcHBlbmRDaGlsZChpdGVtLm5vZGUpO1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLmggPSBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgICAgIHRoaXMubm9kZS5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLmNsID0gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHRoaXMubm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGFjdGlvbik7XHJcbiAgICAgICAgdGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYWN0aW9uKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbml0KCkge1xyXG4gICAgICAgIHJlbmRlcigpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcuc3luYy5jaGVjaycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBhd2FpdCBnZXQoKTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZXNTdHJpbmcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0FHU1lOQycpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlc1N0cmluZyAhPSBudWxsICYmIGN1cnJlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IEpTT04ucGFyc2UoY3VycmVudFZhbHVlc1N0cmluZyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlLkNvbnRhY3RHdWlkICE9IGN1cnJlbnQuR3VpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnN5bmMuc2V0JywgeyBkZXRhaWw6IHsgY29udGFjdGd1aWQ6IGN1cnJlbnQuR3VpZCwgZXZlbnRUeXBlOiAnY29udGFjdCcgfSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnN5bmMudmVyaWZpZWQuY29udGFjdCcpKTtcclxuICAgICAgICAgICAgaXNTeW5jZWQgPSB0cnVlOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnN5bmMudmVyaWZpZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnN5bmMudmVyaWZpZWQuY29udGFjdCcpKTtcclxuICAgICAgICAgICAgaXNTeW5jZWQgPSB0cnVlOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHdpbmRvdy5hZ1VzZXIgPSB7XHJcbiAgICAgICAgY29sbGVjdGlvbjoge1xyXG4gICAgICAgICAgICByZWZyZXNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy51c2VyLnJlZnJlc2guY29sbGVjdGlvbicpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgaW5pdCgpO1xyXG5cclxufSkoKTtcclxuXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7ICAgIFxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGNoZWNrRm9yU3luYygpIHtcclxuICAgICAgICB2YXIgY3VycmVudFZhbHVlc1N0cmluZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQUdTWU5DJyk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZXNTdHJpbmcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gSlNPTi5wYXJzZShjdXJyZW50VmFsdWVzU3RyaW5nKTtcclxuICAgICAgICAgICAgdmFyIHVwZGF0ZWRPbiA9IG5ldyBEYXRlKGN1cnJlbnRWYWx1ZS51cGRhdGVkT24pOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgY3VycmVudERhdGVUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgY3VycmVudERhdGVUaW1lLnNldE1pbnV0ZXMoY3VycmVudERhdGVUaW1lLmdldE1pbnV0ZXMoKSAtIDEpO1xyXG4gICAgICAgICAgICBpZiAodXBkYXRlZE9uID4gY3VycmVudERhdGVUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5zeW5jLnZlcmlmaWVkJykpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgXHJcbiAgICAgICAgcmVhZEZyb21TZXJ2ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZWFkRnJvbVNlcnZlcigpIHtcclxuICAgICAgICB2YXIgZGF0YVRvUmV2aWV3ID0gYXdhaXQgd2luZG93LmFnUmVxdWVzdC5HRVQoJy9zZXJ2aWNlcy9hZ29yYUNsaWVudC5hc2h4JywgeyB0eXBlOiAnU1lOQycgfSk7XHJcbiAgICAgICAgZGF0YVRvUmV2aWV3LnVwZGF0ZWRPbiA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdBR1NZTkMnLCBKU09OLnN0cmluZ2lmeShkYXRhVG9SZXZpZXcpKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5zeW5jLmNoZWNrJykpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXQoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5zeW5jLnNldCcsIGFzeW5jIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHdpbmRvdy5hZ1JlcXVlc3QuUE9TVCgnL3NlcnZpY2VzL2Fnb3JhQ2xpZW50LmFzaHgnLCBPYmplY3QuYXNzaWduKHsgdHlwZTogJ1NFVCcgfSwgZS5kZXRhaWwpKTtcclxuICAgICAgICAgICAgaWYgKGUuZGV0YWlsPy5ldmVudFR5cGUpXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5zeW5jLnZlcmlmaWVkLicgKyBlLmRldGFpbC5ldmVudFR5cGUpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5zeW5jLmludmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoZSkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5zeW5jLnJlc2V0JykpO1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNoZWNrRm9yU3luYygpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoKTtcclxufSkoKTtcclxuXHJcblxyXG5cclxuXHJcbnZhciBsb2FkRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoXCJvbkFnb3JhTG9hZFwiKTtcclxuZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChsb2FkRXZlbnQpO1xyXG5kb2N1bWVudC5pc0Fnb3JhTG9hZGVkID0gdHJ1ZTtcclxubG9hZEV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdvbkNzc0xvYWQnKTtcclxuZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChsb2FkRXZlbnQpO1xyXG5kb2N1bWVudC5pc0Nzc0xvYWRlZCA9IHRydWU7XHJcblxyXG5FbmFibGVEZW1hbmRJbXBvcnQoKTtcclxuRW5hYmxlU2VhcmNoRm9ybSgpOyIsIu+7v1xyXG4vLyBJbnRlciBwb2xhdGlvblxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHZhciBzeXN0ZW1GdW5jdGlvbnMgPSB7fTtcclxuXHJcbiAgICBmdW5jdGlvbiBJbnRlcnBvbGF0aW9uKGh0bWwsIGRvbSwgY29udGV4dCwgZnVuY3Rpb25BcmdzTGl0ZXJhbHMgPSBbXSwgZnVuY3Rpb25BcmdzVmFsdWVzID0gW10sIHBhcmVudFJlbmRlckZ1bmN0aW9uID0gKCkgPT4geyB9KSB7XHJcbiAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKCdcXFxce1xcXFx7W15cXFxcfV0rXFxcXH1cXFxcfScsICdnaScpO1xyXG4gICAgICAgIGxldCByZW5kZXJGdW5jdGlvbnMgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBwYXJlbnRSZW5kZXJGdW5jdGlvbigpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IHRlbXBsYXRlU3RyaW5nID0gJyc7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBvZiBkb20uZ2V0QXR0cmlidXRlTmFtZXMoKSkge1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBkb20uZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBidWlsZFJlbmRlckZ1bmN0aW9uKHZhbHVlLCAoY29udGVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCBjb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhblByZUludGVycG9sYXRpb24oZG9tKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkb20uY2hpbGROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XHJcbiAgICAgICAgICAgICAgICBJbnRlcnBvbGF0aW9uKGh0bWwsIG5vZGUsIGNvbnRleHQsIGZ1bmN0aW9uQXJnc0xpdGVyYWxzLCBmdW5jdGlvbkFyZ3NWYWx1ZXMsICgpID0+IHsgfSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGREb20gPSBub2RlO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlIG9mIGNoaWxkRG9tLmdldEF0dHJpYnV0ZU5hbWVzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBjaGlsZERvbS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZFJlbmRlckZ1bmN0aW9uKHZhbHVlLCAoY29udGVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREb20uc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblByZUludGVycG9sYXRpb24oY2hpbGREb20pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IE5vZGUuVEVYVF9OT0RFICYmIG5vZGUudGV4dENvbnRlbnQgIT0gbnVsbCAmJiBub2RlLnRleHRDb250ZW50LnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS50ZXh0Q29udGVudC5pbmRleE9mKCd7eycpID09IDAgJiYgbm9kZS50ZXh0Q29udGVudCA9PSBub2RlLnBhcmVudEVsZW1lbnQuaW5uZXJUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRSZW5kZXJGdW5jdGlvbihub2RlLnRleHRDb250ZW50LCAoY29udGVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhblByZUludGVycG9sYXRpb24obm9kZS5wYXJlbnRFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnRFbGVtZW50LmlubmVySFRNTCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkUmVuZGVyRnVuY3Rpb24obm9kZS50ZXh0Q29udGVudCwgKGNvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5QcmVJbnRlcnBvbGF0aW9uKG5vZGUucGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBjb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNsZWFuUHJlSW50ZXJwb2xhdGlvbihub2RlKSB7XHJcbiAgICAgICAgICAgIGlmIChub2RlICE9IG51bGwgJiYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdhZ2EtZmFrZS1jb250YWlucycpIHx8IG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdhZy1mYWtlLWlubGluZS1jb250YWlucycpKSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1mYWtlLWNvbnRhaW5zJyk7XHJcbiAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWZha2UtaW5saW5lLWNvbnRhaW5zJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZE5vZGVzWzBdLm5vZGVUeXBlID09IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZE5vZGVzWzBdLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBidWlsZFJlbmRlckZ1bmN0aW9uKGlucHV0VGV4dCwgcmVuZGVyKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gaW5wdXRUZXh0Lm1hdGNoKGV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICBsZXQgcmVuZGVyQmxvY2sgPSAoKSA9PiB7IHJldHVybiAnJzsgfTtcclxuICAgICAgICAgICAgbGV0IHJlbmRlclRlbXBsYXRlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyKHJlbmRlckJsb2NrKCkpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVTdHJpbmcgPSBpbnB1dFRleHQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFyaWFibGVzID0gW107XHJcbiAgICAgICAgICAgICAgICBsZXQgaXNTeXN0ZW1GdW5jdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgbWF0Y2hlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkZW50aWZpZXIgPSBpdGVtLnN1YnN0cmluZygyLCBpdGVtLmxlbmd0aCAtIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU3RyaW5nID0gdGVtcGxhdGVTdHJpbmcucmVwbGFjZShpdGVtLCBgXFwke3R5cGVvZigke2lkZW50aWZpZXJ9KSE9J3VuZGVmaW5lZCcmJiR7aWRlbnRpZmllcn0hPW51bGw/JHtpZGVudGlmaWVyfTonJ31gKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbG9jYWxWYXJpYWJsZXMgPSBFeHRyYWN0VmFyaWFibGVzVG9wTGV2ZWxJZGVudGlmaWVycyhpZGVudGlmaWVyKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMucHVzaCguLi5sb2NhbFZhcmlhYmxlcy5maWx0ZXIoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlcy5pbmRleE9mKHgpIDwgMDtcclxuICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIgIT0gdmFyaWFibGVzW3ZhcmlhYmxlcy5sZW5ndGggLSAxXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgV2F0Y2goZG9tLCBjb250ZXh0LCB2YXJpYWJsZXNbdmFyaWFibGVzLmxlbmd0aCAtIDFdLCAoZGF0YSwgaXNDaGFuZ2UsIGlkZW50aWZpZXIpID0+IHsgcmVuZGVyVGVtcGxhdGUoKTsgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChJc0Z1bmN0aW9uKHN5c3RlbUZ1bmN0aW9ucywgaWRlbnRpZmllcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTeXN0ZW1GdW5jdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhY3RBcmd1bWVudFZhcmlhYmxlc0ZvckZ1bmN0aW9uRnJvbVN0cmluZyhpZGVudGlmaWVyKS5mb3JFYWNoKGFyZ3VtZW50SXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXRjaChkb20sIGNvbnRleHQsIGFyZ3VtZW50SXRlbSwgKGRhdGEsIGlzQ2hhbmdlLCBpZGVudGlmaWVyKSA9PiB7IHJlbmRlclRlbXBsYXRlKCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgV2F0Y2goZG9tLCBjb250ZXh0LCBpZGVudGlmaWVyLCAoZGF0YSwgaXNDaGFuZ2UsIGlkZW50aWZpZXIpID0+IHsgcmVuZGVyVGVtcGxhdGUoKTsgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHJlbmRlckZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKGB0cnl7Y29uc3QgeyR7dmFyaWFibGVzLmpvaW4oJywnKX19ID0gdGhpczsgcmV0dXJuIFxcYCR7dGVtcGxhdGVTdHJpbmd9XFxgOyB9Y2F0Y2goZSl7IGNvbnNvbGUuZXJyb3IoZSk7IH1yZXR1cm4gJyc7YCkuYmluZChpc1N5c3RlbUZ1bmN0aW9uID8gaW50ZXJwb2xhdGVPYmplY3QoY29udGV4dCkgOiBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJlbmRlckJsb2NrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJGdW5jdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudFJlbmRlckZ1bmN0aW9ucyA9IHJlbmRlckZ1bmN0aW9ucztcclxuICAgICAgICAgICAgICAgIHJlbmRlckZ1bmN0aW9ucyA9IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGVtcGxhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVuZGVyRnVuY3Rpb25zKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyRnVuY3Rpb25zKGNvbnRleHQpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbnRlcnBvbGF0ZU9iamVjdChjb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oY29udGV4dCwgc3lzdGVtRnVuY3Rpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBQcmVJbnRlcnBvbGF0aW9uKGRvbSwgcm9vdERvbSkge1xyXG4gICAgICAgIGlmIChyb290RG9tID09IG51bGwpXHJcbiAgICAgICAgICAgIHJvb3REb20gPSBkb207XHJcbiAgICAgICAgbGV0IGlzTWFza2VkID0gcm9vdERvbS5oYXNBdHRyaWJ1dGUoJ2FnLWZha2UnKTtcclxuXHJcbiAgICAgICAgaWYgKGlzTWFza2VkKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBvZiBkb20uZ2V0QXR0cmlidXRlTmFtZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZG9tLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUuaW5kZXhPZigne3snKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlLnJlcGxhY2UoLyhcXHtcXHspfChcXH1cXH0pL2dpLCBcIlwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkb20uY2xhc3NMaXN0LmFkZCgnYWctZmFrZS1pbmxpbmUtY29udGFpbnMnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZG9tLmNoaWxkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlLm5vZGVOYW1lICE9ICdPUFRJT04nKSB7XHJcbiAgICAgICAgICAgICAgICBQcmVJbnRlcnBvbGF0aW9uKG5vZGUsIHJvb3REb20pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTWFza2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlIG9mIG5vZGUuZ2V0QXR0cmlidXRlTmFtZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5pbmRleE9mKCd7eycpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUucmVwbGFjZSgvKFxce1xceyl8KFxcfVxcfSkvZ2ksIFwiXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09IE5vZGUuVEVYVF9OT0RFICYmIG5vZGUudGV4dENvbnRlbnQgIT0gbnVsbCAmJiBub2RlLnRleHRDb250ZW50LmluZGV4T2YoJ3t7JykgPiAtMSAmJiBub2RlLnRleHRDb250ZW50LnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmFrZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJyk7XHJcbiAgICAgICAgICAgICAgICBmYWtlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdhZy1mYWtlJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gbm9kZS5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBudWxsICYmICFwYXJlbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhZy1mYWtlLWNvbnRhaW5zJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGZha2VFbGVtZW50LCBwYXJlbnQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LmNsYXNzTGlzdC5hZGQoJ2FnLWZha2UtY29udGFpbnMnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXNrZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoLyhcXHtcXHspfChcXH1cXH0pL2dpLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBXYXRjaCgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gR2V0VmFsdWUoaXRlbSwgcHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPCAwICYmIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgPiAtMSkge1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudFByb3BlcnR5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCBwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpKTtcclxuICAgICAgICAgICAgbGV0IHN1YlByb3BlcnR5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyhwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpICsgMSwgcHJvcGVydHlOYW1lLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiBHZXRWYWx1ZShpdGVtW2N1cnJlbnRQcm9wZXJ0eV0sIHN1YlByb3BlcnR5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgaXNGdW5jdGlvbiA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPiAtMTtcclxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24pXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFsdWVGcm9tRnVuY3Rpb24oaXRlbSwgcHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0gIT0gdW5kZWZpbmVkID8gaXRlbVtwcm9wZXJ0eU5hbWVdIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBJc0Z1bmN0aW9uKGl0ZW0sIHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgIHJldHVybiBwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpID4gLTEgJiYgdHlwZW9mIChpdGVtW2dldEZ1bmN0aW9uTmFtZShwcm9wZXJ0eU5hbWUpXSkgPT0gJ2Z1bmN0aW9uJztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBHZXRQcm94eU9iamVjdChpdGVtKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgKGl0ZW0pID09ICd1bmRlZmluZWQnIHx8IGl0ZW0gPT0gbnVsbCkgcmV0dXJuIGl0ZW07XHJcblxyXG4gICAgICAgIGxldCBwcm94eU9iamVjdCA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpdGVtUHJvcGVydHkgaW4gaXRlbSlcclxuICAgICAgICAgICAgU2V0UHJvcGVydHlUb1Byb3h5T2JqZWN0KGl0ZW0sIHByb3h5T2JqZWN0LCBpdGVtUHJvcGVydHkpO1xyXG5cclxuICAgICAgICAvL0xpbmtJdGVtKGl0ZW0scHJveHlPYmplY3QpO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJveHlPYmplY3Q7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gU2V0UHJvcGVydHlUb1Byb3h5T2JqZWN0KGl0ZW0sIHByb3h5T2JqZWN0LCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIChpdGVtW3Byb3BlcnR5TmFtZV0pID09ICdmdW5jdGlvbicpXHJcbiAgICAgICAgICAgIHByb3h5T2JqZWN0W3Byb3BlcnR5TmFtZV0gPSBpdGVtW3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHlPYmplY3QsIHByb3BlcnR5TmFtZSwgeyBnZXQoKSB7IHJldHVybiBpdGVtW3Byb3BlcnR5TmFtZV07IH0sIHNldCh2YWx1ZSkgeyBpdGVtW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTsgTm90aWZ5KG51bGwsIGl0ZW0sIHByb3BlcnR5TmFtZSwgdHJ1ZSk7IH0sIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBTZXRQcm9wZXJ0eURlc2NyaXB0b3JUb1Byb3h5T2JqZWN0KHByb3h5T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHByb3BlcnR5RGVzY3JpcHRvcikge1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eU9iamVjdCwgcHJvcGVydHlOYW1lLCBwcm9wZXJ0eURlc2NyaXB0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIENvbnZlck9iamVjdFRvQXJndW1lbnRBcnJheShpdGVtKSB7XHJcblxyXG4gICAgICAgIGxldCBjb252ZXJ0ZWRWYWx1ZXMgPSB7IGFyZ3VtZW50czogW10sIHZhbHVlczogW10gfTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGl0ZW0pIHtcclxuICAgICAgICAgICAgY29udmVydGVkVmFsdWVzLmFyZ3VtZW50cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIGNvbnZlcnRlZFZhbHVlcy52YWx1ZXMucHVzaChpdGVtW2tleV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbnNlcnRBZnRlcihlbCwgcmVmZXJlbmNlTm9kZSkge1xyXG4gICAgICAgIGlmIChyZWZlcmVuY2VOb2RlLnBhcmVudE5vZGUgIT0gbnVsbClcclxuICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbCwgcmVmZXJlbmNlTm9kZS5uZXh0U2libGluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKGVsLCByZWZlcmVuY2VOb2RlKSB7XHJcbiAgICAgICAgcmVmZXJlbmNlTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbCwgcmVmZXJlbmNlTm9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlc0Zyb21TdHJpbmdFeHByZXNzaW9uID0gbmV3IFJlZ0V4cCgnKCg/PHN0cmluZz4oW1xcXCJcXCdcXGBdLio/W1xcXCJcXCdcXGBdKSl8KD88Ym9vbGVhbj4odHJ1ZXxmYWxzZSkpfCgoPzxmdW5jdGlvbj5bQS16X11bQS16MC05XFwuXFwkXSspW1xcKF0pfCg/PGlkZW50aWZpZXI+W0Etel9dW0EtejAtOVxcLlxcJF0rKSknLCAnZ2knKTtcclxuICAgIGxldCB2YXJpYWJsZVRvcExldmVsSWRlbnRpZmllcnNFeHByZXNzaW9uID0gbmV3IFJlZ0V4cCgnKD88dmFyaWFibGU+W0EtejAtOV9cXFxcJF0rKSgoKFxcXFwuW15cXFxcc1xcXFw9XFxcXCZcXFxcfF0qKXxcXFxcKCkpPycsICdnaScpO1xyXG5cclxuICAgIGZ1bmN0aW9uIEV4dHJhY3RWYXJpYWJsZXNUb3BMZXZlbElkZW50aWZpZXJzKHZhbHVhdGlvblN0cmluZykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoID0gbnVsbDtcclxuICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IHZhcmlhYmxlVG9wTGV2ZWxJZGVudGlmaWVyc0V4cHJlc3Npb24uZXhlYyh2YWx1YXRpb25TdHJpbmcpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2guZ3JvdXBzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLmdyb3Vwcy52YXJpYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChtYXRjaC5ncm91cHMudmFyaWFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gRXh0cmFjdFZhcmlhYmxlc0Zyb21TdHJpbmcodmFsdWF0aW9uU3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgZnVuY3Rpb25zOiBbXSwgaWRlbnRpZmllcnM6IFtdIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaCA9IG51bGw7XHJcbiAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSB2YXJpYWJsZXNGcm9tU3RyaW5nRXhwcmVzc2lvbi5leGVjKHZhbHVhdGlvblN0cmluZykpICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2guZ3JvdXBzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLmdyb3Vwcy5pZGVudGlmaWVyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaWRlbnRpZmllcnMucHVzaChtYXRjaC5ncm91cHMuaWRlbnRpZmllcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLmdyb3Vwcy5mdW5jdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZ1bmN0aW9ucy5wdXNoKG1hdGNoLmdyb3Vwcy5mdW5jdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIEV4dHJhY3RBcmd1bWVudFZhcmlhYmxlc0ZvckZ1bmN0aW9uRnJvbVN0cmluZyh2YWx1YXRpb25TdHJpbmcpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcbiAgICAgICAgbGV0IGZ1bmN0aW9uQXJndW1lbnRzID0gW107XHJcbiAgICAgICAgbGV0IGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQgPSB2YWx1YXRpb25TdHJpbmcuaW5kZXhPZignKCcpO1xyXG4gICAgICAgIGxldCBmdW5jdGlvbkFyZ3VtZW50c0VuZCA9IHZhbHVhdGlvblN0cmluZy5pbmRleE9mKCcpJyk7XHJcbiAgICAgICAgbGV0IGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQgPiAtMSA/IHZhbHVhdGlvblN0cmluZy5zdWJzdHJpbmcoMCwgZnVuY3Rpb25Bcmd1bWVudHNTdGFydCkgOiB2YWx1YXRpb25TdHJpbmc7XHJcbiAgICAgICAgbGV0IGFyZ3VtZW50c1N0cmluZyA9IHZhbHVhdGlvblN0cmluZy5zdWJzdHJpbmcoZnVuY3Rpb25Bcmd1bWVudHNTdGFydCArIDEsIGZ1bmN0aW9uQXJndW1lbnRzRW5kKTtcclxuICAgICAgICBsZXQgbWF0Y2hlcyA9IGFyZ3VtZW50c1N0cmluZy5tYXRjaChuZXcgUmVnRXhwKCdbXixdKycsICdnaScpKTtcclxuICAgICAgICBpZiAobWF0Y2hlcyAhPSBudWxsKVxyXG4gICAgICAgICAgICBtYXRjaGVzLmZvckVhY2goKGFyZ3VtZW50SXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKC9eKF98W0Etel0pKF98W0Etel18WzAtOV18XFwkKSskLy50ZXN0KGFyZ3VtZW50SXRlbS50cmltKCkpKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFyZ3VtZW50SXRlbS50cmltKCkpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgIGxldCBvcGVuSW5kZXggPSAtMTtcclxuICAgICAgICBpZiAoKG9wZW5JbmRleCA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykpID4gLTEpIHJldHVybiBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIG9wZW5JbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5TmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRWYWx1ZUZyb21GdW5jdGlvbihpdGVtLCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHMgPSBbXTtcclxuICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHNTdGFydCA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJyk7XHJcbiAgICAgICAgbGV0IGZ1bmN0aW9uQXJndW1lbnRzRW5kID0gcHJvcGVydHlOYW1lLmluZGV4T2YoJyknKTtcclxuICAgICAgICBsZXQgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25Bcmd1bWVudHNTdGFydCA+IC0xID8gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0KSA6IHByb3BlcnR5TmFtZTtcclxuICAgICAgICBsZXQgYXJndW1lbnRzU3RyaW5nID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyhmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ICsgMSwgZnVuY3Rpb25Bcmd1bWVudHNFbmQpO1xyXG4gICAgICAgIGxldCBtYXRjaGVzID0gYXJndW1lbnRzU3RyaW5nLm1hdGNoKG5ldyBSZWdFeHAoJ1teLF0rJywgJ2dpJykpO1xyXG4gICAgICAgIGlmIChtYXRjaGVzICE9IG51bGwpXHJcbiAgICAgICAgICAgIG1hdGNoZXMuZm9yRWFjaCgoYXJndW1lbnRJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbkFyZ3VtZW50cy5wdXNoKEdldFZhbHVlKGl0ZW0sIGFyZ3VtZW50SXRlbSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIChpdGVtW2Z1bmN0aW9uTmFtZV0pID09ICdmdW5jdGlvbicgPyBpdGVtW2Z1bmN0aW9uTmFtZV0uYXBwbHkoaXRlbSwgZnVuY3Rpb25Bcmd1bWVudHMpIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBJZihodG1sLCBkb20sIGNvbnRleHQpIHtcclxuICAgICAgICBsZXQgaHRtbERvY3VtZW50ID0gaHRtbDtcclxuICAgICAgICBsZXQgaWZzID0gZG9tLnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1pZl0nLCBkb20pO1xyXG4gICAgICAgIGlmcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBub2Rlc0FuZENvbmRpdGlvbiA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgbmV4dE5vZGUgPSBpdGVtO1xyXG4gICAgICAgICAgICBsZXQgaXRlbVBhcmVudCA9IGl0ZW0ucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgbGV0IGFjdGl2ZU5vZGVBbmRDb25kaXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgaWRlbnRpZmllcnNVc2VkID0gW107XHJcbiAgICAgICAgICAgIGxldCBBdHRyaWJ1dGVzID0ge1xyXG4gICAgICAgICAgICAgICAgSWY6IFwiYWctaWZcIixcclxuICAgICAgICAgICAgICAgIEVsc2VJZjogXCJhZy1lbHNlLWlmXCIsXHJcbiAgICAgICAgICAgICAgICBFbHNlOiBcImFnLWVsc2VcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlIChuZXh0Tm9kZSAhPSBudWxsICYmICgoaXRlbSA9PSBuZXh0Tm9kZSAmJiBuZXh0Tm9kZS5oYXNBdHRyaWJ1dGUoQXR0cmlidXRlcy5JZikpIHx8IG5leHROb2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLkVsc2VJZikgfHwgbmV4dE5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuRWxzZSkpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IG5leHROb2RlO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1mYWtlLW1hc2snKTtcclxuICAgICAgICAgICAgICAgIG5leHROb2RlID0gKG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgIGxldCBhdHRyaWJ1dGVUb1JlYWQgPSBub2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLklmKSA/IEF0dHJpYnV0ZXMuSWYgOiBub2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLkVsc2VJZikgPyBBdHRyaWJ1dGVzLkVsc2VJZiA6IEF0dHJpYnV0ZXMuRWxzZTtcclxuICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlVG9SZWFkKTtcclxuICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZVRvUmVhZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbiAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIEV4dHJhY3RWYXJpYWJsZXNGcm9tU3RyaW5nKGV4cHJlc3Npb24pLmlkZW50aWZpZXJzLmZvckVhY2goaWRlbnRpZmllciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyc1VzZWQuaW5kZXhPZihpZGVudGlmaWVyKSA8IDApIGlkZW50aWZpZXJzVXNlZC5wdXNoKGlkZW50aWZpZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbm9kZXNBbmRDb25kaXRpb24ucHVzaCh7IG5vZGU6IChub2RlLmNsb25lTm9kZSh0cnVlKSksIGV4cHJlc3Npb246IGV4cHJlc3Npb24sIHBvc2l0aW9uOiBub2RlLm5leHRTaWJsaW5nLCBpc0RlZmF1bHQ6IGF0dHJpYnV0ZVRvUmVhZCA9PSBBdHRyaWJ1dGVzLkVsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCB2YWx1YXRpb25GdW5jdGlvbkFyZ3VtZW50cyA9IENvbnZlck9iamVjdFRvQXJndW1lbnRBcnJheShjb250ZXh0KTtcclxuICAgICAgICAgICAgbGV0IHJlbmRlciA9IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1YXRpb25GdW5jdGlvbkFyZ3VtZW50cyA9IENvbnZlck9iamVjdFRvQXJndW1lbnRBcnJheShkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVOb2RlQW5kQ29uZGl0aW9uICE9IG51bGwpIChhY3RpdmVOb2RlQW5kQ29uZGl0aW9uLmFjdGl2ZSkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBub2RlQW5kQ29uZGl0aW9uIG9mIG5vZGVzQW5kQ29uZGl0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZUFuZENvbmRpdGlvbi5pc0RlZmF1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVhdGlvbkZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKC4uLnZhbHVhdGlvbkZ1bmN0aW9uQXJndW1lbnRzLmFyZ3VtZW50cywgYHJldHVybiAke25vZGVBbmRDb25kaXRpb24uZXhwcmVzc2lvbn07YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVhdGlvbkZ1bmN0aW9uKC4uLnZhbHVhdGlvbkZ1bmN0aW9uQXJndW1lbnRzLnZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9kZUFuZENvbmRpdGlvbi5pc0RlZmF1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVOb2RlQW5kQ29uZGl0aW9uID0gbm9kZUFuZENvbmRpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnNlcnRQb3N0aW9uID0gZmluZERvbVBvc2l0aW9uKG5vZGVBbmRDb25kaXRpb24ucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1QYXJlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25kaXRpb25hbE5vZGUgPSBub2RlQW5kQ29uZGl0aW9uLm5vZGUuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVBbmRDb25kaXRpb24uYWN0aXZlID0gY29uZGl0aW9uYWxOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1QYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbmRpdGlvbmFsTm9kZSwgaW5zZXJ0UG9zdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtSW50ZXJuYWwoaHRtbCwgY29uZGl0aW9uYWxOb2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyBjb25zb2xlLmxvZyhlKTsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmREb21Qb3NpdGlvbihkb20pIHtcclxuICAgICAgICAgICAgICAgIGlmIChkb20gIT0gbnVsbCAmJiAhZG9jdW1lbnQuY29udGFpbnMoZG9tKSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluZERvbVBvc2l0aW9uKGRvbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkb207XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGlkZW50aWZpZXIgb2YgaWRlbnRpZmllcnNVc2VkKSB7XHJcbiAgICAgICAgICAgICAgICBXYXRjaChpdGVtLCBjb250ZXh0LCBpZGVudGlmaWVyLCAoZGF0YSwgaXNDaGFuZ2UsIGlzVXNlckNoYW5nZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NoYW5nZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVuZGVyKGNvbnRleHQpO1xyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gUHJlSWYoZG9tKSB7XHJcbiAgICAgICAgbGV0IGlmcyA9IGRvbS5xdWVyeVNlbGVjdG9yQWxsKCdbYWctaWZdJywgZG9tKTtcclxuICAgICAgICBsZXQgaXNGYWtlID0gZG9tLmhhc0F0dHJpYnV0ZSgnYWctZmFrZScpO1xyXG4gICAgICAgIGlmcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBuZXh0Tm9kZSA9IGl0ZW07XHJcbiAgICAgICAgICAgIGxldCBpZGVudGlmaWVyc1VzZWQgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGZha2VGb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgQXR0cmlidXRlcyA9IHtcclxuICAgICAgICAgICAgICAgIElmOiBcImFnLWlmXCIsXHJcbiAgICAgICAgICAgICAgICBFbHNlSWY6IFwiYWctZWxzZS1pZlwiLFxyXG4gICAgICAgICAgICAgICAgRWxzZTogXCJhZy1lbHNlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aGlsZSAobmV4dE5vZGUgIT0gbnVsbCAmJiAoKGl0ZW0gPT0gbmV4dE5vZGUgJiYgbmV4dE5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuSWYpKSB8fCBuZXh0Tm9kZS5oYXNBdHRyaWJ1dGUoQXR0cmlidXRlcy5FbHNlSWYpIHx8IG5leHROb2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLkVsc2UpKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5vZGUgPSBuZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgIGlmICghZmFrZUZvdW5kICYmIG5vZGUuaGFzQXR0cmlidXRlKCdhZy1mYWtlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmYWtlRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmYWtlRm91bmQgfHwgKCFmYWtlRm91bmQgJiYgIW5leHROb2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLkVsc2UpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZCgnYWctZmFrZS1tYXNrJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZha2VGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGYWtlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoQXR0cmlidXRlcy5JZik7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoQXR0cmlidXRlcy5FbHNlSWYpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKEF0dHJpYnV0ZXMuRWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IChub2RlLm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFmYWtlRm91bmQpXHJcbiAgICAgICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWZha2UtbWFzaycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy9Gb3JcclxuXHJcbiAgICBmdW5jdGlvbiBGb3IoaHRtbCwgZG9tLCBjb250ZXh0KSB7XHJcbiAgICAgICAgbGV0IGh0bWxEb2N1bWVudCA9IGh0bWw7XHJcbiAgICAgICAgbGV0IGxvb3BzID0gZG9tLnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1mb3JdJywgZG9tKTtcclxuICAgICAgICBsb29wcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmYWtlSXRlbSA9IGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgICAgICBsZXQgZmFrZUl0ZW1Db3VudCA9IDA7XHJcbiAgICAgICAgICAgIGxldCBpc2Zha2VJdGVtQ291bnRSZWFkZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKCdcXFxccyooW0EtejAtOV0rKVxcXFxzKyhpbilcXFxccysoW0EtejAtOVxcXFwuXSspXFxcXHMqJywgJ2dpJyk7XHJcbiAgICAgICAgICAgIGxldCBsb29wQ29uc3RyYWludCA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1mb3InKTtcclxuICAgICAgICAgICAgaWYgKGxvb3BDb25zdHJhaW50ID09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgICAgbGV0IGl0cmF0b3JGaW5pc2hlZCA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1mb3ItY29tcGxldGUnKTtcclxuICAgICAgICAgICAgbGV0IGZpZWxkc0FuZFZhbHVlID0gZXhwcmVzc2lvbi5leGVjKGxvb3BDb25zdHJhaW50KTtcclxuICAgICAgICAgICAgbGV0IGl0cmF0b3IgPSBmaWVsZHNBbmRWYWx1ZSAhPSBudWxsID8gZmllbGRzQW5kVmFsdWVbMV0gOiBcIlwiO1xyXG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGZpZWxkc0FuZFZhbHVlICE9IG51bGwgPyBmaWVsZHNBbmRWYWx1ZVszXSA6IFwiXCI7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCBodG1sVG9DbG9uZSA9IGl0ZW0uY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICBsZXQgaHRtbFRvQ2xvbmVQYXJlbnQgPSBpdGVtLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGxldCBodG1sVG9DbG9uZUxvY2F0aW9uID0gaXRlbS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgKGh0bWxUb0Nsb25lKS5yZW1vdmVBdHRyaWJ1dGUoJ2FnLWZvcicpO1xyXG4gICAgICAgICAgICBpdGVtLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICBsZXQgaXRlbUVsZW1lbnRzID0gW107XHJcbiAgICAgICAgICAgIGxldCBpc0RpcnR5RmFrZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbkNvbnRleHQgPSBnZXRDb2xsZWN0aW9uT2JqZWN0KGNvbnRleHQsIGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbkNvbnRleHRGaWVsZCA9IGdldENvbGxlY3Rpb25OYW1lKGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgU2V0UHJvcGVydHlEZXNjcmlwdG9yVG9Qcm94eU9iamVjdChjb2xsZWN0aW9uQ29udGV4dCwgYCR7Y29sbGVjdGlvbkNvbnRleHRGaWVsZH0kZm9yYCwgeyB2YWx1ZTogMCwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICBsZXQgcmVuZGVyID0gKGRhdGEpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtRWxlbWVudCBvZiBpdGVtRWxlbWVudHMpXHJcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW1FbGVtZW50KS5yZW1vdmUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbXNDb2xsZWN0aW9uID0gR2V0VmFsdWUoZGF0YSwgY29sbGVjdGlvbilcclxuICAgICAgICAgICAgICAgIGxldCBpdGVtSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgbGV0IGlzRmlyc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zQ29sbGVjdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICBpc0RpcnR5RmFrZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbFRvQ2xvbmVMb2NhdGlvbiA9IHJlbW92ZVByZUZvcihmYWtlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbUZyb21Db2xsZWN0aW9uIG9mIGl0ZW1zQ29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGV4dE9iamVjdCA9IEdldFByb3h5T2JqZWN0KGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBTZXRQcm9wZXJ0eURlc2NyaXB0b3JUb1Byb3h5T2JqZWN0KGNvbnRleHRPYmplY3QsIGl0cmF0b3IsIHsgZ2V0KCkgeyByZXR1cm4gaXRlbUZyb21Db2xsZWN0aW9uOyB9LCBzZXQodmFsdWUpIHsgaXRlbUZyb21Db2xsZWN0aW9uID0gdmFsdWU7IH0sIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNldFByb3BlcnR5RGVzY3JpcHRvclRvUHJveHlPYmplY3QoY29udGV4dE9iamVjdCwgYHJvdyRJbmRleGAsIHsgdmFsdWU6IGl0ZW1JbmRleCArIDEsIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBTZXRQcm9wZXJ0eURlc2NyaXB0b3JUb1Byb3h5T2JqZWN0KGNvbnRleHRPYmplY3QsIGAke2l0cmF0b3J9JEluZGV4YCwgeyB2YWx1ZTogaXRlbUluZGV4ICsgMSwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0l0cmF0b3I6JywgY29udGV4dE9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbG9uZWRFbGVtZW50ID0gaHRtbFRvQ2xvbmUuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRmlyc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxUb0Nsb25lUGFyZW50Py5pbnNlcnRCZWZvcmUoY2xvbmVkRWxlbWVudCwgaHRtbFRvQ2xvbmVMb2NhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRBZnRlcihjbG9uZWRFbGVtZW50LCBpdGVtRWxlbWVudHNbaXRlbUVsZW1lbnRzLmxlbmd0aCAtIDFdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtSW50ZXJuYWwoaHRtbERvY3VtZW50LCBjbG9uZWRFbGVtZW50LCBjb250ZXh0T2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUVsZW1lbnRzLnB1c2goY2xvbmVkRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBTZXRQcm9wZXJ0eURlc2NyaXB0b3JUb1Byb3h5T2JqZWN0KGNvbGxlY3Rpb25Db250ZXh0LCBgJHtjb2xsZWN0aW9uQ29udGV4dEZpZWxkfSRmb3JgLCB7IHZhbHVlOiBEYXRlLm5vdygpLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy1mb3ItY29tcGxldGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxUb0Nsb25lUGFyZW50Py5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIChpdGVtc0NvbGxlY3Rpb24pID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZha2VJdGVtICE9IG51bGwgJiYgZmFrZUl0ZW0uaGFzQXR0cmlidXRlKCdhZy1mb3ItZmFrZScpICYmIGlzRGlydHlGYWtlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZha2VJdGVtID0gUHJlRm9yUGFydGlhbChmYWtlSXRlbSwgaHRtbFRvQ2xvbmVQYXJlbnQsIGh0bWxUb0Nsb25lTG9jYXRpb24sIGZha2VJdGVtQ291bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGl0cmF0b3JGaW5pc2hlZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZ1bmN0aW9uTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gaXRyYXRvckZpbmlzaGVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ2V0UGFyYW1ldGVyTmFtZSA9IChuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICd0aGlzJykgcmV0dXJuICdzZW5kZXInO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5pbmRleE9mKCcuJykgPiAtMSkgcmV0dXJuIG5hbWUucmVwbGFjZShcIi5cIiwgJ18nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ2V0VmFsdWUgPSAoaXRlbSwgcHJvcGVydHlOYW1lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpIDwgMCAmJiBwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN1YlByb3BlcnR5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyhwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpICsgMSwgcHJvcGVydHlOYW1lLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFsdWUoaXRlbVtjdXJyZW50UHJvcGVydHldLCBzdWJQcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNGdW5jdGlvbiA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPiAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZUZyb21GdW5jdGlvbihpdGVtLCBwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnZXRGdW5jdGlvbkZyb21Db2xsZWN0aW9uID0gKGNvbnRleHQsIG5hbWUsIGFyZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0Ll9fcHJvdG9fX1tuYW1lXSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX19wcm90b19fW25hbWVdKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY29udGV4dCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGNvbnRleHRbaXRlbV0pID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRGdW5jdGlvbkZyb21Db2xsZWN0aW9uKGNvbnRleHRbaXRlbV0sIG5hbWUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIChjb250ZXh0W2l0ZW1dKSA9PSAnZnVuY3Rpb24nICYmIGl0ZW0gPT0gbmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRbaXRlbV0oLi4uYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdldFZhbHVlRnJvbUZ1bmN0aW9uID0gKGl0ZW0sIHByb3BlcnR5TmFtZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQgPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHNFbmQgPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZignKScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25Bcmd1bWVudHNTdGFydCA+IC0xID8gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0KSA6IHByb3BlcnR5TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyZ3VtZW50c1N0cmluZyA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoZnVuY3Rpb25Bcmd1bWVudHNTdGFydCArIDEsIGZ1bmN0aW9uQXJndW1lbnRzRW5kKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBhcmd1bWVudHNTdHJpbmcubWF0Y2gobmV3IFJlZ0V4cCgnW14sXSsnLCAnZ2knKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmZvckVhY2goKGFyZ3VtZW50SXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQXJndW1lbnRzLnB1c2goZ2V0VmFsdWUoaXRlbSwgYXJndW1lbnRJdGVtKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZnVuY3Rpb25OYW1lXS5hcHBseShpdGVtLCBmdW5jdGlvbkFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgdmFsdWUuaW5kZXhPZignKCcpID4gLTEgPyB2YWx1ZS5pbmRleE9mKCcoJykgOiB2YWx1ZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gbmV3IFJlZ0V4cCgnKFxcXFwoKD88cGFyYW1zPi4qPylcXFxcKSknKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXNTdHJpbmcgPSB2YWx1ZS5tYXRjaChleHByZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtc1N0cmluZyAhPSB1bmRlZmluZWQgJiYgcGFyYW1zU3RyaW5nICE9IG51bGwgJiYgcGFyYW1zU3RyaW5nLmdyb3VwcyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSBwYXJhbXNTdHJpbmcuZ3JvdXBzLnBhcmFtcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtc0l0ZW0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHBhcmFtIGluIHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXNbcGFyYW1dID09ICd0aGlzJykgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzUGFyYW1WYWx1ZSA9IChuZXcgUmVnRXhwKCdeKFxcXFxcXCd8WzAtOV0pJykudGVzdChwYXJhbXNbcGFyYW1dKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtTmFtZSA9ICFpc1BhcmFtVmFsdWUgPyBnZXRQYXJhbWV0ZXJOYW1lKHBhcmFtc1twYXJhbV0pIDogJ2l0ZW1fJyArIHBhcmFtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc0l0ZW1bcGFyYW1OYW1lXSA9IGlzUGFyYW1WYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXRjaChpdGVtLCBjb2xsZWN0aW9uQ29udGV4dCwgYCR7Y29sbGVjdGlvbkNvbnRleHRGaWVsZH0kZm9yYCwgKGRhdGEsIGlzQ2hhbmdlLCBpc1VzZXJDaGFuZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJncyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtc1trZXldID09ICd0aGlzJyB8fCBwYXJhbXNba2V5XSA9PSAnc2VuZGVyJykgYXJncy5wdXNoKGh0bWxUb0Nsb25lUGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1zW2tleV0gPT0gJ2RhdGEnKSBhcmdzLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtVmFsdWUgPSAhcGFyYW1zSXRlbVtnZXRQYXJhbWV0ZXJOYW1lKHBhcmFtc1trZXldKV0gPyBnZXRWYWx1ZShkYXRhLCBwYXJhbXNba2V5XSkgOiBldmFsKHBhcmFtc1trZXldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChwYXJhbVZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtmdW5jdGlvbk5hbWVdICE9IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbZnVuY3Rpb25OYW1lXS5hcHBseShkYXRhLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudEZ1bmN0aW9uID0gZ2V0RnVuY3Rpb25Gcm9tQ29sbGVjdGlvbihkYXRhLCBmdW5jdGlvbk5hbWUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGdW5jdGlvbiAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uKGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlbmRlcihjb250ZXh0KTtcclxuICAgICAgICAgICAgV2F0Y2goaXRlbSwgY29udGV4dCwgY29sbGVjdGlvbiwgKGRhdGEsIGlzQ2hhbmdlLCBpc1VzZXJDaGFuZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0NoYW5nZSlcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXIoZGF0YSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q29sbGVjdGlvbk9iamVjdChpdGVtLCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpIDwgMCAmJiBwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudFByb3BlcnR5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCBwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3ViUHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgKyAxLCBwcm9wZXJ0eU5hbWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29sbGVjdGlvbk9iamVjdChpdGVtW2N1cnJlbnRQcm9wZXJ0eV0sIHN1YlByb3BlcnR5KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzRnVuY3Rpb24gPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpID4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldENvbGxlY3Rpb25OYW1lKHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPCAwICYmIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzdWJQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcocHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSArIDEsIHByb3BlcnR5TmFtZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRDb2xsZWN0aW9uTmFtZShzdWJQcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlbW92ZVByZUZvcihmYWtlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZha2VJdGVtICE9IG51bGwgJiYgZmFrZUl0ZW0uaGFzQXR0cmlidXRlKCdhZy1mb3ItZmFrZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbFRvQ2xvbmUuY2xhc3NMaXN0LnJlbW92ZSgnYWctZmFrZS1tYXNrJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRJdGVtID0gZmFrZUl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5leHRJdGVtICE9IG51bGwgJiYgbmV4dEl0ZW0uaGFzQXR0cmlidXRlKCdhZy1mb3ItZmFrZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNmYWtlSXRlbUNvdW50UmVhZGVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFrZUl0ZW1Db3VudCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2xkTmV4dCA9IG5leHRJdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0SXRlbSA9IG5leHRJdGVtLm5leHRFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkTmV4dC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaXNmYWtlSXRlbUNvdW50UmVhZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dEl0ZW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFrZUl0ZW07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGh0bWxEb2N1bWVudC5pbm5lckhUTUw7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gUHJlRm9yUGFydGlhbChpdGVtLCBwYXJlbnQsIGxvY2F0aW9uLCBjb3VudCkge1xyXG4gICAgICAgIGxldCBsYXN0SXRlbSA9IG51bGwsIGZpcnN0SXRlbSA9IG51bGw7XHJcbiAgICAgICAgbGV0IGlzRmlyc3QgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGZha2VJdGVtID0gaXRlbS5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmICghaXNGaXJzdCkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Py5pbnNlcnRCZWZvcmUoZmFrZUl0ZW0sIGxvY2F0aW9uKTtcclxuICAgICAgICAgICAgICAgIGlzRmlyc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RJdGVtID0gZmFrZUl0ZW07XHJcbiAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgaW5zZXJ0QWZ0ZXIoZmFrZUl0ZW0sIGxhc3RJdGVtKTtcclxuICAgICAgICAgICAgbGFzdEl0ZW0gPSBmYWtlSXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpcnN0SXRlbTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBQcmVGb3IoZG9tKSB7XHJcbiAgICAgICAgbGV0IGxvb3BzID0gZG9tLnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1mb3JdW2FnLWZvci1mYWtlXTpub3QoLmFnLWZha2UtbWFzayknLCBkb20pO1xyXG4gICAgICAgIGxvb3BzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0udGFnTmFtZSA9PSBcIk9QVElPTlwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGxldCBjbG9uZUl0ZW0gPSBpdGVtLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgY2xvbmVJdGVtLnNldEF0dHJpYnV0ZSgnYWctZmFrZScsICcnKTtcclxuICAgICAgICAgICAgbGV0IGNsb25lSXRlbUNvdW50ID0gMTtcclxuICAgICAgICAgICAgbGV0IGNsb25lSXRlbUNvdW50U3RyaW5nID0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWZvci1mYWtlJyk7XHJcbiAgICAgICAgICAgIGlmIChjbG9uZUl0ZW1Db3VudFN0cmluZyAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgY2xvbmVJdGVtQ291bnQgPSBwYXJzZUludChjbG9uZUl0ZW1Db3VudFN0cmluZyk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGNsb25lSXRlbS5zZXRBdHRyaWJ1dGUoJ2FnLWZvci1mYWtlJywgJycpO1xyXG4gICAgICAgICAgICBjbG9uZUl0ZW0ucmVtb3ZlQXR0cmlidXRlKCdhZy1mb3InKTtcclxuICAgICAgICAgICAgaXRlbS5yZW1vdmVBdHRyaWJ1dGUoJ2FnLWZvci1mYWtlJyk7XHJcbiAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnYWctZmFrZS1tYXNrJyk7XHJcbiAgICAgICAgICAgIFByZVRyYW5zZm9ybUludGVybmFsKGNsb25lSXRlbSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xvbmVJdGVtQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5wYXJlbnRFbGVtZW50Py5hcHBlbmRDaGlsZChjbG9uZUl0ZW0uY2xvbmVOb2RlKHRydWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIFRyYW5zZm9ybUludGVybmFsKGh0bWwsIGRvbSwgY29udGV4dCkge1xyXG5cclxuICAgICAgICBGb3IoZG9tLCBkb20sIGNvbnRleHQpO1xyXG4gICAgICAgIElmKGRvbSwgZG9tLCBjb250ZXh0KTtcclxuICAgICAgICBJbnRlcnBvbGF0aW9uKGRvbSwgZG9tLCBjb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBQcmVUcmFuc2Zvcm1JbnRlcm5hbChkb20pIHtcclxuXHJcbiAgICAgICAgUHJlRm9yKGRvbSk7XHJcbiAgICAgICAgUHJlSWYoZG9tKTtcclxuICAgICAgICBQcmVJbnRlcnBvbGF0aW9uKGRvbSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZmluZFJlbmRlcnMoKSB7XHJcbiAgICAgICAgdmFyIHJlbmRlcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYWctcmVuZGVyXTpub3QoLmFnLXJlbmRlciknKTtcclxuICAgICAgICByZW5kZXJzLmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XHJcblxyXG4gICAgICAgICAgICBhdHRhY2hBY3Rpb24oaXRlbSk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGF0dGFjaEFjdGlvbihpdGVtKSB7XHJcblxyXG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnYWctcmVuZGVyJyk7XHJcblxyXG4gICAgICAgIHZhciByZXN1bHRGdW5jdGlvbiA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1yZW5kZXInKTtcclxuXHJcbiAgICAgICAgUHJlVHJhbnNmb3JtSW50ZXJuYWwoaXRlbSk7XHJcblxyXG4gICAgICAgIHZhciBldmVudE5hbWUgPSAnYWcucmVuZGVyLmh5ZHJhdGUuJyArIHJlc3VsdEZ1bmN0aW9uO1xyXG5cclxuICAgICAgICB2YXIgaXRlbUh0bWwgPSBpdGVtLmlubmVySFRNTDtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgYXN5bmMgZnVuY3Rpb24gKCkgeyAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEdldFZhbHVlKHdpbmRvdywgcmVzdWx0RnVuY3Rpb24pO1xyXG5cclxuICAgICAgICAgICAgaXRlbS5pbm5lckhUTUwgPSBpdGVtSHRtbDtcclxuXHJcbiAgICAgICAgICAgIFRyYW5zZm9ybUludGVybmFsKGl0ZW0sIGl0ZW0sIHJlc3VsdCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZXF1ZXN0RGF0YShzZXJ2aWNlVXJsLCBkYXRhLCBwcm9jZXNzUmVxdWVzdERhdGEpIHtcclxuICAgICAgICBpZiAocHJvY2Vzc1JlcXVlc3REYXRhKVxyXG4gICAgICAgICAgICBkYXRhID0gcHJvY2Vzc1JlcXVlc3REYXRhKGRhdGEpO1xyXG5cclxuICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSAnJztcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nICsoKHF1ZXJ5U3RyaW5nICE9ICcnID8gJyYnIDogJycpICsga2V5ICsgJz0nICsgZGF0YVtrZXldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VydmljZVVybCArPSBzZXJ2aWNlVXJsLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nICsgcXVlcnlTdHJpbmc7XHJcbiAgICAgICAgdmFyIHJlcXVlc3QgPSBhd2FpdCBmZXRjaChzZXJ2aWNlVXJsLCB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgbW9kZTogXCJjb3JzXCIsXHJcbiAgICAgICAgICAgIGNhY2hlOiBcIm5vLWNhY2hlXCIsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXF1ZXN0Lmpzb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBpbml0UGFnZShyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKSB7XHJcbiAgICAgICAgaWYgKCFkYXRhKSBkYXRhID0ge307XHJcbiAgICAgICAgaWYgKCFkYXRhLlBhZ2VTaXplKSBkYXRhLlBhZ2VTaXplID0gMTI7XHJcbiAgICAgICAgaWYgKCFkYXRhLlBhZ2VOdW1iZXIpIGRhdGEuUGFnZU51bWJlciA9IDE7XHJcbiAgICAgICAgdmFyIHBhZ2VkRGF0YSA9IGF3YWl0IHJlcXVlc3REYXRhKHNlcnZpY2VVcmwsIGRhdGEsIHByb2Nlc3NSZXF1ZXN0RGF0YSk7XHJcbiAgICAgICAgd2luZG93W3JlbmRlck5hbWVdID0gcGFnZWREYXRhOyAgICAgICAgXHJcbiAgICAgICAgd2luZG93LmFnUmVuZGVyLmh5ZHJhdGUocmVuZGVyTmFtZSk7XHJcbiAgICAgICAgaWYgKHJlbmRlckNvbXBsZXRlKVxyXG4gICAgICAgICAgICByZW5kZXJDb21wbGV0ZShwYWdlZERhdGEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBuZXh0UGFnZShyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKSB7XHJcbiAgICAgICAgZGF0YS5QYWdlTnVtYmVyICs9IDE7XHJcbiAgICAgICAgdmFyIHBhZ2VkRGF0YSA9IGF3YWl0IHJlcXVlc3REYXRhKHNlcnZpY2VVcmwsIGRhdGEsIHByb2Nlc3NSZXF1ZXN0RGF0YSk7XHJcbiAgICAgICAgd2luZG93W3JlbmRlck5hbWVdID0gcGFnZWREYXRhOyAgICAgICAgXHJcbiAgICAgICAgd2luZG93LmFnUmVuZGVyLmh5ZHJhdGUocmVuZGVyTmFtZSk7XHJcbiAgICAgICAgaWYgKHJlbmRlckNvbXBsZXRlKVxyXG4gICAgICAgICAgICByZW5kZXJDb21wbGV0ZShwYWdlZERhdGEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBwcmV2aW91c1BhZ2UocmVuZGVyTmFtZSwgc2VydmljZVVybCwgZGF0YSwgcmVuZGVyQ29tcGxldGUsIHByb2Nlc3NSZXF1ZXN0RGF0YSkge1xyXG4gICAgICAgIGlmIChkYXRhLlBhZ2VOdW1iZXIgPiAxKSB7XHJcbiAgICAgICAgICAgIGRhdGEuUGFnZU51bWJlciAtPSAxO1xyXG4gICAgICAgICAgICB2YXIgcGFnZWREYXRhID0gYXdhaXQgcmVxdWVzdERhdGEoc2VydmljZVVybCwgZGF0YSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICAgICAgd2luZG93W3JlbmRlck5hbWVdID0gcGFnZWREYXRhO1xyXG4gICAgICAgICAgICB3aW5kb3cuYWdSZW5kZXIuaHlkcmF0ZShyZW5kZXJOYW1lKTtcclxuICAgICAgICAgICAgaWYgKHJlbmRlckNvbXBsZXRlKVxyXG4gICAgICAgICAgICAgICAgcmVuZGVyQ29tcGxldGUocGFnZWREYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIG1vcmVQYWdlKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpIHtcclxuICAgICAgICBkYXRhLlBhZ2VOdW1iZXIgKz0gMTtcclxuICAgICAgICB2YXIgcGFnZWREYXRhID0gYXdhaXQgcmVxdWVzdERhdGEoc2VydmljZVVybCwgZGF0YSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICB3aW5kb3dbcmVuZGVyTmFtZV0uSXRlbXMucHVzaCguLi5wYWdlZERhdGEuSXRlbXMpO1xyXG4gICAgICAgIHdpbmRvdy5hZ1JlbmRlci5oeWRyYXRlKHJlbmRlck5hbWUpO1xyXG4gICAgICAgIGlmIChyZW5kZXJDb21wbGV0ZSlcclxuICAgICAgICAgICAgcmVuZGVyQ29tcGxldGUocGFnZWREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBpbml0KCkge1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnJlbmRlci5yZWZyZXNoJywgZmluZFJlbmRlcnMpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnJlZnJlc2gnLCBmaW5kUmVuZGVycyk7XHJcblxyXG4gICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcucmVuZGVyLnJlZnJlc2gnKTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgd2luZG93LmFnUmVuZGVyID0ge1xyXG5cclxuICAgICAgICAgICAgaHlkcmF0ZTogZnVuY3Rpb24gKHJlbmRlck5hbWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnROYW1lID0gJ2FnLnJlbmRlci5oeWRyYXRlLicgKyByZW5kZXJOYW1lO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudChldmVudE5hbWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7ICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0ludm9rZTonICsgZXZlbnROYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhenkucmVmcmVzaCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgd2luZG93LmFnTGFuZ3VhZ2UucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHJlbmRlck5hbWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLnJlbmRlci4nICsgcmVuZGVyTmFtZSArICcucGFnZS5uZXh0Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBwcmV2aW91czogZnVuY3Rpb24gKHJlbmRlck5hbWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLnJlbmRlci4nICsgcmVuZGVyTmFtZSArICcucGFnZS5wcmV2aW91cycpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgbW9yZTogZnVuY3Rpb24gKHJlbmRlck5hbWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLnJlbmRlci4nICsgcmVuZGVyTmFtZSArICcucGFnZS5tb3JlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBwYWdlZFJlc3VsdDogZnVuY3Rpb24gKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcucmVuZGVyLicgKyByZW5kZXJOYW1lICsgJy5wYWdlLm5leHQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFBhZ2UocmVuZGVyTmFtZSwgc2VydmljZVVybCwgZGF0YSwgcmVuZGVyQ29tcGxldGUsIHByb2Nlc3NSZXF1ZXN0RGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcucmVuZGVyLicgKyByZW5kZXJOYW1lICsgJy5wYWdlLnByZXZpb3VzJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUGFnZShyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5yZW5kZXIuJyArIHJlbmRlck5hbWUgKyAnLnBhZ2UubW9yZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBtb3JlUGFnZShyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGluaXRQYWdlKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpO1xyXG5cclxufSkoKTtcclxuXHJcblxyXG5cclxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJhIiwiaSIsInNlbGYiLCJhZ29yYSIsIiQiLCJkb2N1bWVudCIsInJlYWR5IiwibG9jYXRpb24iLCJoYXNoIiwiT3BlblBvcHVwIiwiYiIsIndpbmRvdyIsInRoaXMiLCJjIiwibGVuZ3RoIiwiXyIsInR5cGUiLCJpc1dpbmRvdyIsIm5vZGVUeXBlIiwiZCIsImlzRnVuY3Rpb24iLCJncmVwIiwiY2FsbCIsImhiIiwidGVzdCIsImZpbHRlciIsIlUiLCJlIiwiZyIsIloiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY2FjaGUiLCJnZXQiLCJleHBhbmRvIiwiTWF0aCIsInJhbmRvbSIsInJlcGxhY2UiLCJ1YiIsInRvTG93ZXJDYXNlIiwiZ2V0QXR0cmlidXRlIiwidGIiLCJwYXJzZUpTT04iLCJzYiIsInNldCIsImoiLCJrIiwibCIsImFjdGl2ZUVsZW1lbnQiLCJtIiwibm9kZU5hbWUiLCJmaXJzdENoaWxkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJhcHBlbmRDaGlsZCIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwibiIsIm8iLCJLYiIsImV4ZWMiLCJyZW1vdmVBdHRyaWJ1dGUiLCJwIiwicmIiLCJxIiwiZiIsImhhc0RhdGEiLCJhY2Nlc3MiLCJldmVudHMiLCJoYW5kbGUiLCJldmVudCIsImFkZCIsImV4dGVuZCIsInIiLCJxdWVyeVNlbGVjdG9yQWxsIiwibWVyZ2UiLCJzIiwieWIiLCJjaGVja2VkIiwiZGVmYXVsdFZhbHVlIiwidCIsImFwcGVuZFRvIiwiYm9keSIsImdldERlZmF1bHRDb21wdXRlZFN0eWxlIiwiZGlzcGxheSIsImNzcyIsImRldGFjaCIsInUiLCJPYiIsIk5iIiwiZG9jdW1lbnRFbGVtZW50IiwiY29udGVudERvY3VtZW50Iiwid3JpdGUiLCJjbG9zZSIsInYiLCJzdHlsZSIsIlJiIiwiZ2V0UHJvcGVydHlWYWx1ZSIsImNvbnRhaW5zIiwiUWIiLCJQYiIsIndpZHRoIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsInciLCJhcHBseSIsImFyZ3VtZW50cyIsIngiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiWGIiLCJ5IiwiVGIiLCJtYXgiLCJ6Iiwid2IiLCJBIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJZIiwiYm94U2l6aW5nUmVsaWFibGUiLCJwYXJzZUZsb2F0IiwiQiIsInhiIiwiQyIsInByb3RvdHlwZSIsImluaXQiLCJEIiwic2V0VGltZW91dCIsIlliIiwibm93IiwiRSIsImhlaWdodCIsIm9wYWNpdHkiLCJGIiwiY2MiLCJjb25jYXQiLCJJIiwiYmMiLCJEZWZlcnJlZCIsImFsd2F5cyIsImVsZW0iLCJzdGFydFRpbWUiLCJkdXJhdGlvbiIsInR3ZWVucyIsInJ1biIsIm5vdGlmeVdpdGgiLCJyZXNvbHZlV2l0aCIsInByb21pc2UiLCJwcm9wcyIsIm9wdHMiLCJzcGVjaWFsRWFzaW5nIiwib3JpZ2luYWxQcm9wZXJ0aWVzIiwib3JpZ2luYWxPcHRpb25zIiwiY3JlYXRlVHdlZW4iLCJUd2VlbiIsImVhc2luZyIsInB1c2giLCJzdG9wIiwicmVqZWN0V2l0aCIsImNhbWVsQ2FzZSIsImlzQXJyYXkiLCJjc3NIb29rcyIsImV4cGFuZCIsIkgiLCJtYXAiLCJzdGFydCIsImZ4IiwidGltZXIiLCJhbmltIiwicXVldWUiLCJwcm9ncmVzcyIsImRvbmUiLCJjb21wbGV0ZSIsImZhaWwiLCJKIiwibWF0Y2giLCJuYiIsInVuc2hpZnQiLCJLIiwiZWFjaCIsImRhdGFUeXBlcyIsInZjIiwiTCIsImFqYXhTZXR0aW5ncyIsImZsYXRPcHRpb25zIiwiTyIsInpjIiwiUCIsImRlZmF1bHRWaWV3IiwiUSIsIlIiLCJTIiwiVCIsImluZGV4T2YiLCJWIiwiVyIsInRvU3RyaW5nIiwiWCIsImhhc093blByb3BlcnR5IiwiZm4iLCJhYiIsImJiIiwiY2IiLCJkYiIsImpxdWVyeSIsImNvbnN0cnVjdG9yIiwic2VsZWN0b3IiLCJ0b0FycmF5IiwicHVzaFN0YWNrIiwicHJldk9iamVjdCIsImNvbnRleHQiLCJmaXJzdCIsImVxIiwibGFzdCIsImVuZCIsInNvcnQiLCJzcGxpY2UiLCJpc1BsYWluT2JqZWN0IiwiaXNSZWFkeSIsImVycm9yIiwiRXJyb3IiLCJub29wIiwiQXJyYXkiLCJpc051bWVyaWMiLCJpc0VtcHR5T2JqZWN0IiwiZ2xvYmFsRXZhbCIsImV2YWwiLCJ0cmltIiwidGV4dCIsImhlYWQiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJtYWtlQXJyYXkiLCJpbkFycmF5IiwiZ3VpZCIsInByb3h5IiwiRGF0ZSIsInN1cHBvcnQiLCJzcGxpdCIsImViIiwiRyIsImdldEVsZW1lbnRCeUlkIiwiaWQiLCJNIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInFzYSIsIk4iLCJzZXRBdHRyaWJ1dGUiLCJqb2luIiwiaWIiLCJjYWNoZUxlbmd0aCIsInNoaWZ0IiwiYXR0ckhhbmRsZSIsInNvdXJjZUluZGV4IiwibmV4dFNpYmxpbmciLCJ2YWx1ZSIsImRpciIsInJlbGF0aXZlIiwibWF0Y2hlcyIsImZpbmQiLCJUQUciLCJ1bmlxdWVTb3J0IiwicG9wIiwiZmIiLCJnYiIsIlJlZ0V4cCIsImpiIiwia2IiLCJsYiIsIm1iIiwib2IiLCJJRCIsIkNMQVNTIiwiQVRUUiIsIlBTRVVETyIsIkNISUxEIiwiYm9vbCIsIm5lZWRzQ29udGV4dCIsInBiIiwicWIiLCJ2YiIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImNoaWxkTm9kZXMiLCJpc1hNTCIsInNldERvY3VtZW50IiwidG9wIiwiYWRkRXZlbnRMaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiYXR0cmlidXRlcyIsImNsYXNzTmFtZSIsImNyZWF0ZUNvbW1lbnQiLCJpbm5lckhUTUwiLCJnZXRCeUlkIiwiZ2V0RWxlbWVudHNCeU5hbWUiLCJnZXRBdHRyaWJ1dGVOb2RlIiwibWF0Y2hlc1NlbGVjdG9yIiwid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwibW96TWF0Y2hlc1NlbGVjdG9yIiwib01hdGNoZXNTZWxlY3RvciIsIm1zTWF0Y2hlc1NlbGVjdG9yIiwiZGlzY29ubmVjdGVkTWF0Y2giLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsInNvcnREZXRhY2hlZCIsImF0dHIiLCJzcGVjaWZpZWQiLCJkZXRlY3REdXBsaWNhdGVzIiwic29ydFN0YWJsZSIsImdldFRleHQiLCJ0ZXh0Q29udGVudCIsIm5vZGVWYWx1ZSIsInNlbGVjdG9ycyIsImNyZWF0ZVBzZXVkbyIsInByZUZpbHRlciIsImxhc3RDaGlsZCIsInBzZXVkb3MiLCJzZXRGaWx0ZXJzIiwibm90IiwiaGFzIiwiaW5uZXJUZXh0IiwibGFuZyIsInRhcmdldCIsImZvY3VzIiwiaGFzRm9jdXMiLCJocmVmIiwidGFiSW5kZXgiLCJlbmFibGVkIiwiZGlzYWJsZWQiLCJzZWxlY3RlZCIsInNlbGVjdGVkSW5kZXgiLCJlbXB0eSIsInBhcmVudCIsImhlYWRlciIsImlucHV0IiwiYnV0dG9uIiwiZXZlbiIsIm9kZCIsImx0IiwiZ3QiLCJudGgiLCJyYWRpbyIsImNoZWNrYm94IiwiZmlsZSIsInBhc3N3b3JkIiwiaW1hZ2UiLCJzdWJtaXQiLCJyZXNldCIsImZpbHRlcnMiLCJ0b2tlbml6ZSIsImNvbXBpbGUiLCJzZWxlY3QiLCJleHByIiwidW5pcXVlIiwiaXNYTUxEb2MiLCJpcyIsInBhcnNlSFRNTCIsImNoaWxkcmVuIiwiY29udGVudHMiLCJuZXh0IiwicHJldiIsInNpYmxpbmciLCJjbG9zZXN0IiwiaW5kZXgiLCJwcmV2QWxsIiwiYWRkQmFjayIsInBhcmVudHMiLCJwYXJlbnRzVW50aWwiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldlVudGlsIiwic2libGluZ3MiLCJyZXZlcnNlIiwiQ2FsbGJhY2tzIiwib25jZSIsIm1lbW9yeSIsInN0b3BPbkZhbHNlIiwiZGlzYWJsZSIsInJlbW92ZSIsImxvY2siLCJsb2NrZWQiLCJmaXJlV2l0aCIsImZpcmUiLCJmaXJlZCIsInN0YXRlIiwidGhlbiIsInJlc29sdmUiLCJyZWplY3QiLCJub3RpZnkiLCJwaXBlIiwid2hlbiIsInJlYWR5V2FpdCIsImhvbGRSZWFkeSIsInRyaWdnZXJIYW5kbGVyIiwib2ZmIiwicmVhZHlTdGF0ZSIsImFjY2VwdERhdGEiLCJ1aWQiLCJhY2NlcHRzIiwia2V5IiwiZGVmaW5lUHJvcGVydGllcyIsImRpc2NhcmQiLCJkYXRhIiwicmVtb3ZlRGF0YSIsIl9kYXRhIiwiX3JlbW92ZURhdGEiLCJuYW1lIiwiZGVxdWV1ZSIsIl9xdWV1ZUhvb2tzIiwiY2xlYXJRdWV1ZSIsInNvdXJjZSIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJjaGVja0Nsb25lIiwiY2xvbmVOb2RlIiwibm9DbG9uZUNoZWNrZWQiLCJ6YiIsImZvY3VzaW5CdWJibGVzIiwiQWIiLCJCYiIsIkNiIiwiRGIiLCJnbG9iYWwiLCJoYW5kbGVyIiwidHJpZ2dlcmVkIiwiZGlzcGF0Y2giLCJzcGVjaWFsIiwiZGVsZWdhdGVUeXBlIiwiYmluZFR5cGUiLCJvcmlnVHlwZSIsIm5hbWVzcGFjZSIsImRlbGVnYXRlQ291bnQiLCJzZXR1cCIsImNhcHR1cmUiLCJwYXNzaXZlIiwidGVhcmRvd24iLCJyZW1vdmVFdmVudCIsInRyaWdnZXIiLCJFdmVudCIsImlzVHJpZ2dlciIsIm5hbWVzcGFjZV9yZSIsInJlc3VsdCIsIm5vQnViYmxlIiwicGFyZW50V2luZG93IiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJwcmV2ZW50RGVmYXVsdCIsImlzRGVmYXVsdFByZXZlbnRlZCIsIl9kZWZhdWx0IiwiZml4IiwiZGVsZWdhdGVUYXJnZXQiLCJwcmVEaXNwYXRjaCIsImhhbmRsZXJzIiwiY3VycmVudFRhcmdldCIsImlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIiwiaGFuZGxlT2JqIiwic3RvcFByb3BhZ2F0aW9uIiwicG9zdERpc3BhdGNoIiwiZml4SG9va3MiLCJrZXlIb29rcyIsIndoaWNoIiwiY2hhckNvZGUiLCJrZXlDb2RlIiwibW91c2VIb29rcyIsInBhZ2VYIiwiY2xpZW50WCIsInNjcm9sbExlZnQiLCJjbGllbnRMZWZ0IiwicGFnZVkiLCJjbGllbnRZIiwic2Nyb2xsVG9wIiwiY2xpZW50VG9wIiwibG9hZCIsImJsdXIiLCJjbGljayIsImJlZm9yZXVubG9hZCIsIm9yaWdpbmFsRXZlbnQiLCJyZXR1cm5WYWx1ZSIsInNpbXVsYXRlIiwiaXNTaW11bGF0ZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGltZVN0YW1wIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJyZWxhdGVkVGFyZ2V0Iiwib24iLCJvbmUiLCJFYiIsIkZiIiwiR2IiLCJIYiIsIkliIiwiSmIiLCJMYiIsIk1iIiwib3B0aW9uIiwidGhlYWQiLCJjb2wiLCJ0ciIsInRkIiwib3B0Z3JvdXAiLCJ0Ym9keSIsInRmb290IiwiY29sZ3JvdXAiLCJjYXB0aW9uIiwidGgiLCJjbG9uZSIsImJ1aWxkRnJhZ21lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImNsZWFuRGF0YSIsImFwcGVuZCIsImRvbU1hbmlwIiwicHJlcGVuZCIsImluc2VydEJlZm9yZSIsImJlZm9yZSIsImFmdGVyIiwiaHRtbCIsInJlcGxhY2VXaXRoIiwicmVwbGFjZUNoaWxkIiwic3JjIiwiX2V2YWxVcmwiLCJwcmVwZW5kVG8iLCJpbnNlcnRBZnRlciIsInJlcGxhY2VBbGwiLCJnZXRDb21wdXRlZFN0eWxlIiwiY3NzVGV4dCIsImJhY2tncm91bmRDbGlwIiwiY2xlYXJDbG9uZVN0eWxlIiwicGl4ZWxQb3NpdGlvbiIsInJlbGlhYmxlTWFyZ2luUmlnaHQiLCJtYXJnaW5SaWdodCIsInN3YXAiLCJTYiIsIlViIiwiVmIiLCJwb3NpdGlvbiIsInZpc2liaWxpdHkiLCJXYiIsImxldHRlclNwYWNpbmciLCJmb250V2VpZ2h0IiwiY3NzTnVtYmVyIiwiY29sdW1uQ291bnQiLCJmaWxsT3BhY2l0eSIsImZsZXhHcm93IiwiZmxleFNocmluayIsImxpbmVIZWlnaHQiLCJvcmRlciIsIm9ycGhhbnMiLCJ3aWRvd3MiLCJ6SW5kZXgiLCJ6b29tIiwiY3NzUHJvcHMiLCJtYXJnaW4iLCJwYWRkaW5nIiwiYm9yZGVyIiwic2hvdyIsImhpZGUiLCJ0b2dnbGUiLCJwcm9wIiwib3B0aW9ucyIsImN1ciIsInVuaXQiLCJwcm9wSG9va3MiLCJwb3MiLCJzdGVwIiwibGluZWFyIiwic3dpbmciLCJjb3MiLCJQSSIsIlpiIiwiJGIiLCJfYiIsImFjIiwidW5xdWV1ZWQiLCJvdmVyZmxvdyIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImhpZGRlbiIsIkFuaW1hdGlvbiIsInR3ZWVuZXIiLCJwcmVmaWx0ZXIiLCJzcGVlZCIsInNwZWVkcyIsIm9sZCIsImZhZGVUbyIsImFuaW1hdGUiLCJmaW5pc2giLCJ0aW1lcnMiLCJzbGlkZURvd24iLCJzbGlkZVVwIiwic2xpZGVUb2dnbGUiLCJmYWRlSW4iLCJmYWRlT3V0IiwiZmFkZVRvZ2dsZSIsInRpY2siLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInNsb3ciLCJmYXN0IiwiZGVsYXkiLCJjbGVhclRpbWVvdXQiLCJjaGVja09uIiwib3B0U2VsZWN0ZWQiLCJvcHREaXNhYmxlZCIsInJhZGlvVmFsdWUiLCJlYyIsImZjIiwicmVtb3ZlQXR0ciIsImF0dHJIb29rcyIsImRjIiwicHJvcEZpeCIsImdjIiwicmVtb3ZlUHJvcCIsImhhc0F0dHJpYnV0ZSIsImhjIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInRvZ2dsZUNsYXNzIiwiaGFzQ2xhc3MiLCJpYyIsInZhbCIsInZhbEhvb2tzIiwiaG92ZXIiLCJiaW5kIiwidW5iaW5kIiwiZGVsZWdhdGUiLCJ1bmRlbGVnYXRlIiwiamMiLCJrYyIsIkpTT04iLCJwYXJzZSIsInBhcnNlWE1MIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwibGMiLCJtYyIsIm5jIiwib2MiLCJwYyIsInJjIiwic2MiLCJ0YyIsInVjIiwid2MiLCJ4YyIsImFjdGl2ZSIsImxhc3RNb2RpZmllZCIsImV0YWciLCJ1cmwiLCJpc0xvY2FsIiwicHJvY2Vzc0RhdGEiLCJhc3luYyIsImNvbnRlbnRUeXBlIiwieG1sIiwianNvbiIsInJlc3BvbnNlRmllbGRzIiwiY29udmVydGVycyIsImFqYXhTZXR1cCIsImFqYXhQcmVmaWx0ZXIiLCJhamF4VHJhbnNwb3J0IiwiYWpheCIsIm1pbWVUeXBlIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJkYXRhRmlsdGVyIiwiZGF0YVR5cGUiLCJpZk1vZGlmaWVkIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInN0YXR1c0NvZGUiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwib3ZlcnJpZGVNaW1lVHlwZSIsImFib3J0Iiwic3VjY2VzcyIsIm1ldGhvZCIsImNyb3NzRG9tYWluIiwicGFyYW0iLCJ0cmFkaXRpb25hbCIsImhhc0NvbnRlbnQiLCJoZWFkZXJzIiwiYmVmb3JlU2VuZCIsInRpbWVvdXQiLCJzZW5kIiwiZ2V0SlNPTiIsImdldFNjcmlwdCIsIndyYXBBbGwiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIndyYXBJbm5lciIsIndyYXAiLCJ1bndyYXAiLCJ2aXNpYmxlIiwieWMiLCJBYyIsIkJjIiwiQ2MiLCJlbmNvZGVVUklDb21wb25lbnQiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVBcnJheSIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwiRGMiLCJFYyIsIkZjIiwiR2MiLCJBY3RpdmVYT2JqZWN0IiwiY29ycyIsIm9wZW4iLCJ1c2VybmFtZSIsInhockZpZWxkcyIsIm9ubG9hZCIsIm9uZXJyb3IiLCJyZXNwb25zZVRleHQiLCJzY3JpcHQiLCJjaGFyc2V0Iiwic2NyaXB0Q2hhcnNldCIsIkhjIiwiSWMiLCJqc29ucCIsImpzb25wQ2FsbGJhY2siLCJKYyIsImFuaW1hdGVkIiwiS2MiLCJvZmZzZXQiLCJzZXRPZmZzZXQiLCJsZWZ0IiwidXNpbmciLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJwYWdlWU9mZnNldCIsInBhZ2VYT2Zmc2V0Iiwib2Zmc2V0UGFyZW50Iiwic2Nyb2xsVG8iLCJIZWlnaHQiLCJXaWR0aCIsImNvbnRlbnQiLCJzaXplIiwiYW5kU2VsZiIsIkxjIiwialF1ZXJ5IiwiTWMiLCJub0NvbmZsaWN0IiwiaXNOdWxsT3JFbXB0eSIsInVuZGVmaW5lZCIsIkJhY2tUb1RvcCIsInNlbmRlciIsIl9uYXZpZ2F0b3JQb3NpdGlvbiIsIlRvcFRvQm90dG9tIiwiX3Njcm9sbEZvclBhZ2VTY3JvbGwiLCIkdGhpcyIsIiRyZWZlcmVuY2VkSXRlbSIsIl9pdGVtUG9zaXRpb24iLCJfb2Zmc2V0IiwiX3ZhbHVlIiwicGFyc2VJbnQiLCJGb3JjZU51bWVyaWNPbmx5Iiwia2V5ZG93biIsInNoaWZ0S2V5IiwiQ2xvc2VQb3B1cCIsInRyaWdnZXJFbGVtZW50IiwiQWdvcmFEaWFsb2dNb2RhbCIsIkFmdGVyTG9hZCIsIkNsb3NlTW9kYWwiLCJDbGVhckZvcm12YWwiLCJhZ29yYURpYWxvZyIsIl9kZWZhdWx0cyIsIlNlcnZpY2VVcmwiLCJNb2RhbElkIiwiUGFyYW1zIiwiSHRtbCIsIlBhcmVudENzcyIsIkVuYWJsZUNsb3NlQnV0dG9uIiwiRW5hYmxlTG9hZGVyIiwiRW5hYmxlQWpheEh0bWxMb2FkIiwiSGlkZUNsb3NlQnV0dG9uIiwiQ2xvc2VXaGVuVXNlclByZXNzRXNjYXBlIiwiVHJhbnNpdGlvbiIsIkJlZm9yZUxvYWQiLCJfb3B0aW9ucyIsIkxvYWRPcHRpb25zIiwiSXNOb3ROdWxsIiwiR2V0SHRtbCIsInJlc3BvbnNlIiwiQmluZEh0bWwiLCJTaG93QWxlcnQiLCJTaG93TG9hZGluZyIsImNvbXBvbmVudEhhbmRsZXIiLCJ1cGdyYWRlRG9tIiwiVmFsdWUiLCJhZ1JlcXVlc3QiLCJHRVQiLCJzZXJ2aWNlVXJsIiwicXVlcnlTdHJpbmciLCJmZXRjaCIsIlBPU1QiLCJmb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsImZpbmRMYXp5IiwiZm9yRWFjaCIsIml0ZW0iLCJjbGFzc0xpc3QiLCJhY3Rpb24iLCJibGFua0ltYWdlIiwiZWxlbWVudCIsImN1cnJlbnQiLCJkb2NFbCIsImVsZW1lbnRUb3AiLCJlbGVtZW50Qm90dG9tIiwiYm90dG9tIiwidmlld3BvcnRUb3AiLCJ2aWV3cG9ydEJvdHRvbSIsImlubmVySGVpZ2h0IiwiY2hlY2tpc0luVmlld3BvcnQiLCJzcmNVcmwiLCJpc0F1dG8iLCJnZXRCZXN0Rml0Q29udGFpbmVyIiwiYWRkaXRpb25hbFVybCIsImdldEZvcm1hdHRlZEltYWdlVXJsIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJjb25zb2xlIiwibG9nIiwicm9vdE1hcmdpbiIsInRocmVzaG9sZCIsImF0dGFjaEFjdGlvbiIsImRlZmF1bHRSYXRpb1dpZHRoIiwiZGVmYXVsdFJhdGlvSGVpZ2h0IiwicmF0aW8iLCJyYXRpb01hdGNoIiwiZ3JvdXBzIiwiZmxvb3IiLCJwYXJlbnRFbGVtZW50IiwiSGVhZGVyQnVyZ2VyQ2hhbmdlIiwicXVlcnlTZWxlY3RvciIsIkJ1cmdlckFjdGl2ZSIsIml0ZW11Y25vZGUiLCJpbm5lcldpZHRoIiwiQnVyZ2VyRGVhY3RpdmUiLCJzY3JvbGxXaWR0aCIsImN1c3RvbUV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiYWdMYXp5IiwicmVmcmVzaCIsInZhbGlkYXRlIiwiYWNjaXRlbSIsImFjY29yZGlvbkl0ZW1Cb2R5IiwibWF4SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0IiwiQWNjb3JkaW9uRm4iLCJzaWRlQmFyIiwidGFic0NvbnRhaW5lciIsInRhYiIsIlRhYkZuIiwibWVudWl0ZW0iLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwiZHJvcHMiLCJFbmFibGVTZWFyY2hiZWxvd1RhYiIsImNhbmNlbGJ0biIsImRyb3AiLCJpZHgiLCJkcm9wRGl2IiwiY2xvc2VidG4iLCJQcm9wZXJ0eVNlYXJjaENvbnRyb2xXb3JraW5nIiwic2Nyb2xsWSIsInJpcHBsZWJ1dHRvbnMiLCJlbCIsIm9mZnNldFgiLCJvZmZzZXRZIiwicmlwcGxlIiwiUmlwcGxlRm4iLCJ2aWRlb0VsZW1lbnRzIiwidmlkZW8iLCJWaWRlb1BsYXlGbiIsIl9mb3IiLCJpc1N5bmNlZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJ1c2VyIiwicmVtb3ZlSXRlbSIsIkd1aWQiLCJsb2NhbFVzZXIiLCJOYW1lIiwiRmlyc3ROYW1lIiwiTGFzdE5hbWUiLCJFbWFpbCIsIlBob25lIiwiTW9iaWxlUGhvbmUiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwidXBkYXRlIiwicmVuZGVyIiwidXBkYXRlUHJvcGVydHlDb2xsZWN0aW9uIiwiaW5pdFByb3BlcnR5Q29sbGVjdGlvbiIsImxvZ2dpbmVkTm9kZSIsImNvbnRhY3QiLCJ3cmFwcGVyIiwidXNlckNvbnRhaW5lciIsImNsIiwibm9kZSIsImdldExvZ2luZWRJdGVtIiwicmVuZGVyU3RhdGVzIiwiaXNGb3JjZWQiLCJpdGVtcyIsImNvbGxlY3Rpb25UeXBlIiwiUHJvbWlzZSIsInByb3BlcnR5Q29sbGVjdGlvbiIsInByb3BlcnR5Q29sbGVjdGlvblN0cmluZyIsImdldFByb3BlcnR5Q29sbGVjdGlvbiIsIkl0ZW1zIiwicmVkdWNlIiwiaXRlbURvbSIsIlBLIiwiUlQiLCJkb20iLCJyZW5kZXJQcm9wZXJ0eUNvbGxlY3Rpb25JdGVtIiwiZGV0YWlsIiwiYWdVc2VyIiwiY29sbGVjdGlvbiIsImN1cnJlbnRWYWx1ZXNTdHJpbmciLCJDb250YWN0R3VpZCIsImNvbnRhY3RndWlkIiwiZXZlbnRUeXBlIiwiY2hlY2tGb3JTeW5jIiwiY3VycmVudFZhbHVlIiwidXBkYXRlZE9uIiwiY3VycmVudERhdGVUaW1lIiwic2V0TWludXRlcyIsImdldE1pbnV0ZXMiLCJkYXRhVG9SZXZpZXciLCJyZWFkRnJvbVNlcnZlciIsImFzc2lnbiIsInJlbG9hZCIsImxvYWRFdmVudCIsImlzQWdvcmFMb2FkZWQiLCJpc0Nzc0xvYWRlZCIsIkdldFByb3BlcnRpZXMiLCJkZW1hbmRLZXkiLCJsYXlvdXQiLCIkc29ydCIsIiRwYXJlbnQiLCJyZWNvcmRUeXBlIiwiR2V0RGVmYXVsdFNvcnRGb3JSZWNvcmRUeXBlIiwiX2dldENNTkNNTlNvcnRCeSIsIlVybFF1ZXJ5IiwiVHlwZU9mU2VhcmNoIiwiSXNDb250ZW50UGFnZSIsIkRlbWFuZEtleSIsIiRodG1sIiwiJGl0ZW1Db250ZXh0IiwiJHNsaWRlQ29udGV4dCIsIm1sc051bWJlciIsIm1sc0JvYXJkIiwicHJvamVjdENvZGUiLCJpbWFnZVRlbXBsYXRlIiwibmF0aXZlVGFiIiwiY291bnQiLCIkaXRlbVdpdGhJRENvbnRleHQiLCJ1SUQiLCJ0ZW1wbGF0ZSIsInByZWZpeCIsIiRuYXZpZ2F0aW9ucyIsIiRuZXh0IiwiJHByZXYiLCJfbG9hZE1vcmUiLCIkbm9kZSIsIiRzZW5kZXIiLCJtbHNib2FyZCIsIm1sc25vIiwiY29udGFpbmVyIiwiYnVpbGRGaXJzdFRlbXBsYXRlIiwiZ2V0TWlsbGlzZWNvbmRzIiwiR2V0UHJvcGVydHlJbWFnZUdhbGxlcnkiLCJzZWxlY3RvckVsZW1lbnQiLCJjdXJyZW50U2V0dGluZ3MiLCJsYW5ndWFnZVNvdXJjZXMiLCJsYW5ndWFnZXMiLCJjb2RlIiwibGFiZWwiLCJsb2NhbExhYmVsIiwiY3VycmVuY2llcyIsImJhc2UiLCJmb3JtYXQiLCJ1bml0cyIsInByZXNldHMiLCJjdXJyZW5jeSIsImxhbmd1YWdlIiwibWVzc3VyZW1lbnQiLCJ1bml0Q29udmVydGlvbnMiLCJ0cmFnZXRVbml0IiwiY29uc3RhbnQiLCJub3RhdGlvbiIsInRhcmdldE5vdGF0aW9uIiwicmVjZW50U3RhdGUiLCJ1cGRhdGVMYW5ndWFnZSIsImxhYmVscyIsImN1cnJlbnRMYWJlbHMiLCJjdXJyZW50TGFiZWxzU3RyaW5nIiwiZ2V0TGFuZ3VhZ2VMYWJlbHNGcm9tU3RvcmUiLCJleHBpcnkiLCJzZXRIb3VycyIsImdldEhvdXJzIiwiTG9jYWxlIiwic2V0TGFuZ3VhZ2VUb1N0b3JlIiwiZ2V0TGFuZ3VhZ2VMYWJlbHMiLCJ1cGRhdGVUb1NlcnZlciIsImxhYmVsc1RvQ2hhbmdlIiwiZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlIiwibGFzdEluZGV4IiwiTGFiZWxJRCIsImxibCIsImR1bW15Tm9kZSIsIm1hdGNoSHRtbFdpdGhMYWJlbCIsImF0dHJpYnV0ZSIsImV4cHJlc3Npb25Gb3JBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVJZGVudGlmaWVyIiwiQXR0cmlidXRlIiwiYXR0cmlidXRlVmFsdWUiLCJ1cGRhdGVMYW5ndWFnZUxhYmVsIiwiTGFiZWxzIiwidXBkYXRlUHJpY2UiLCJpc0luaXQiLCJmb3JtYXRTdHJpbmciLCJjb252ZXJ0aW9uUmF0ZXNTdG9yZWQiLCJjb252ZXJ0aW9uUmF0ZXMiLCJzZXREYXRlIiwiZ2V0RGF0ZSIsInRvSVNPU3RyaW5nIiwiZ2V0Q29udmVydGlvblJhdGVzIiwiUmF0ZXMiLCJFeGNoYW5nZVJhdGVzIiwiQ29kZSIsImN1cnJlbmN5TWV0YSIsImZvcm1hdHRlciIsIm51bWJlciIsInRvTG9jYWxlU3RyaW5nIiwiY3VycmVudEN1cnJlbmN5IiwicHJpY2VUb0NoYW5nZSIsImN1cnJlbnRPZmZzZXQiLCJwYXJlbnRDb2xsZWN0aW9uIiwicGFyZW50T2Zmc2V0IiwicGFyZW50UG9pbnRzIiwicmlnaHQiLCJpdGVtUG9pbnRzIiwiY2xhc3NBeGlzIiwidXBkYXRlSXRlbU9mZnNldENsYXNzIiwiaXNEZWZhdWx0Q3VycmVuY3lDaGFuZ2UiLCJleHByZXNzaW9uRm9yUHJpY2UiLCJwcmljZUNvbnZlcnRlZCIsInJvdW5kIiwiQ29uc3RhbnQiLCJ1cGRhdGVQcmljZUZvckl0ZW0iLCJ1cGRhdGVNZXNzdXJlbWVudCIsImlzQXBwbGllZCIsIm1lc3N1cmVtZW50c1RvQ2hhbmdlIiwidXBkYXRlSXRlbU1lc3N1cmVtZW50Iiwicm9vdEVsZW1lbnQiLCJpc1VuaXRGb3VuZCIsInVuaXRDb252ZXJ0aW9uU2NoZW1hIiwiaGF2ZVZhbGlkQXR0cmlidXRlIiwiZ2V0TGFiZWxGb3JBdHRyaWJ1dGUiLCJub3RhdGlvbkV4cHJlc3Npb24iLCJmaW5kTWVzc3VyZW1lbnRGcm9tQXR0cmlidXRlIiwiY3VycmVudExhYmVsIiwibGFiZWxSZXBsYWNlUmVzdWx0IiwicmVwbGFjZU1lc3N1cmVtZW50Iiwic2V0TGFiZWxGb3JBdHRyaWJ1dGUiLCJnZXRWYWx1ZUZvckF0dHJpYnV0ZSIsInZhbHVlUmVwbGFjZVJlc3VsdCIsInJlcGxhY2VNZXNzdXJlbWVudFdpdGhVbml0Iiwic2V0VmFsdWVGb3JBdHRyaWJ1dGUiLCJjaGlsZE5vZGUiLCJleHByZXNzaW9uIiwiZmluZE1lc3N1cmVtZW50RnJvbU5vZGUiLCJjdXJyZW50VGV4dCIsInJlcGxhY2VSZXN1bHQiLCJtb2RlIiwicmVwbGFjZVN1Y2Nlc3MiLCJyZXBsYWNlVW5pdFJlc3VsdCIsIm5vdGF0aW9uRXhwcmVzc2lvbnMiLCJub3RhdGlvbk9ubHlFeHByZXNzaW9ucyIsIm1hdGNoU3VjY2VzcyIsImdldFJlcGxhY2VNZXNzdXJlbWVudEV4cHJlc3Npb25NYXRjaCIsImdldFZhbHVlIiwic3RhcnRJbmRleCIsImVuZEluZGV4IiwibWF0Y2hWYWx1ZSIsImZvcm1hdFZhbHVlIiwic3Vic3RyaW5nIiwidmFsdWVFeHByZXNzaW9uIiwiZW5hYmxlTGFuZ3VhZ2VTZWxlY3RvciIsImdldEZsYWdDc3NDbGFzcyIsImxvY2F0aW9uRmxhZyIsImxhbmd1YWdlRWxlbWVudCIsImxvY2F0aW9uRWxlbWVudCIsInJlbmRlckxhbmd1YWdlRWxlbWVudCIsInJlbmRlckNob2ljZUxpc3QiLCJpdGVtRWxlbWVudCIsInNvdXJjZUl0ZW0iLCJpc0V2ZW50IiwicmVuZGVyTGFuZ3VhZ2VTZWxlY3RvciIsImFjdGl2ZUl0ZW0iLCJlbmdhZ2VMYW5ndWFnZVNlbGVjdG9yIiwiZGlzZW5nYWdlQWN0aW9uTGlzdGVuZXIiLCJkaXNlbmdhZ2VMYW5ndWFnZVNlbGVjdG9yIiwidXBkYXRlVG9zZXJ2ZXJDYWxsIiwidXBkYXRlU3VjY2VzIiwiZmllbGQiLCJvbGRVcGRhdGVTdWNjZXNzIiwicmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9ucyIsInRpdGxlIiwicmVuZGVySXRlbSIsInNlbGVjdGVkSXRlbSIsImZpZWxkS2V5IiwicmVuZGVyRXhpc3QiLCJpdGVtTGlzdCIsIml0ZW1MaXN0VmFsdWUiLCJpdGVtT3B0aW9ucyIsImNob2ljZUl0ZW0iLCJzZWxlY3RlZFZhbHVlIiwic2VsZWN0ZWRJdGVtRnJvbVNvdXJjZSIsImFnTGFuZ3VhZ2UiLCJhdHRhY2hBY3Rpb25zIiwiZXhwcmVzc2lvblN0cmluZyIsIm5vdGF0aW9uRXhwcmVzc2lvblN0cmluZyIsIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIsInN1YkV4cHJlc3Npb25TdHJpbmciLCJzdWJOb3RhdGlvbkV4cHJlc3Npb25TdHJpbmciLCJub3RhdGlvbkl0ZW0iLCJidWlsZFVuaXRDb252ZXJ0aW9uU2NoZW1hIiwiRW5hYmxlRGVtYW5kSW1wb3J0Iiwic2VhcmNoQWN0b24iLCIkZm9ybSIsIl91cmxRdWVyeSIsImNvbXBvc2VVcmxRdWVyeSIsIl9ydCIsIl9kZWZhdWx0U29ydCIsIl9zb3J0VmFsdWUiLCJxdWVyeSIsIiRwcmVmaXgiLCJfcHJlZml4IiwiR2V0U2VhcmNoUHJlZml4Rm9yUmVjb3JkVHlwZSIsIkVuYWJsZVNlYXJjaEZvcm0iLCJzeXN0ZW1GdW5jdGlvbnMiLCJJbnRlcnBvbGF0aW9uIiwiZnVuY3Rpb25BcmdzTGl0ZXJhbHMiLCJmdW5jdGlvbkFyZ3NWYWx1ZXMiLCJwYXJlbnRSZW5kZXJGdW5jdGlvbiIsInJlbmRlckZ1bmN0aW9ucyIsInRlbXBsYXRlU3RyaW5nIiwiZ2V0QXR0cmlidXRlTmFtZXMiLCJidWlsZFJlbmRlckZ1bmN0aW9uIiwiY2xlYW5QcmVJbnRlcnBvbGF0aW9uIiwiaW5wdXRUZXh0IiwicmVuZGVyQmxvY2siLCJyZW5kZXJUZW1wbGF0ZSIsInZhcmlhYmxlcyIsImlzU3lzdGVtRnVuY3Rpb24iLCJpZGVudGlmaWVyIiwibG9jYWxWYXJpYWJsZXMiLCJFeHRyYWN0VmFyaWFibGVzVG9wTGV2ZWxJZGVudGlmaWVycyIsIldhdGNoIiwiaXNDaGFuZ2UiLCJJc0Z1bmN0aW9uIiwiRXh0cmFjdEFyZ3VtZW50VmFyaWFibGVzRm9yRnVuY3Rpb25Gcm9tU3RyaW5nIiwiYXJndW1lbnRJdGVtIiwicmVuZGVyRnVuY3Rpb24iLCJGdW5jdGlvbiIsImludGVycG9sYXRlT2JqZWN0IiwiY3VycmVudFJlbmRlckZ1bmN0aW9ucyIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJjaGlsZERvbSIsIlRFWFRfTk9ERSIsIlByZUludGVycG9sYXRpb24iLCJyb290RG9tIiwiaXNNYXNrZWQiLCJmYWtlRWxlbWVudCIsIkdldFZhbHVlIiwicHJvcGVydHlOYW1lIiwiY3VycmVudFByb3BlcnR5Iiwic3ViUHJvcGVydHkiLCJnZXRWYWx1ZUZyb21GdW5jdGlvbiIsImdldEZ1bmN0aW9uTmFtZSIsIkdldFByb3h5T2JqZWN0IiwicHJveHlPYmplY3QiLCJpdGVtUHJvcGVydHkiLCJTZXRQcm9wZXJ0eVRvUHJveHlPYmplY3QiLCJOb3RpZnkiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwiU2V0UHJvcGVydHlEZXNjcmlwdG9yVG9Qcm94eU9iamVjdCIsInByb3BlcnR5RGVzY3JpcHRvciIsIkNvbnZlck9iamVjdFRvQXJndW1lbnRBcnJheSIsImNvbnZlcnRlZFZhbHVlcyIsInZhbHVlcyIsInJlZmVyZW5jZU5vZGUiLCJ2YXJpYWJsZXNGcm9tU3RyaW5nRXhwcmVzc2lvbiIsInZhcmlhYmxlVG9wTGV2ZWxJZGVudGlmaWVyc0V4cHJlc3Npb24iLCJ2YWx1YXRpb25TdHJpbmciLCJ2YXJpYWJsZSIsIkV4dHJhY3RWYXJpYWJsZXNGcm9tU3RyaW5nIiwiZnVuY3Rpb25zIiwiaWRlbnRpZmllcnMiLCJmdW5jdGlvbiIsImZ1bmN0aW9uQXJndW1lbnRzU3RhcnQiLCJmdW5jdGlvbkFyZ3VtZW50c0VuZCIsIm9wZW5JbmRleCIsImZ1bmN0aW9uQXJndW1lbnRzIiwiZnVuY3Rpb25OYW1lIiwiSWYiLCJub2Rlc0FuZENvbmRpdGlvbiIsIm5leHROb2RlIiwiaXRlbVBhcmVudCIsImFjdGl2ZU5vZGVBbmRDb25kaXRpb24iLCJpZGVudGlmaWVyc1VzZWQiLCJBdHRyaWJ1dGVzIiwiYXR0cmlidXRlVG9SZWFkIiwiaXNEZWZhdWx0IiwidmFsdWF0aW9uRnVuY3Rpb25Bcmd1bWVudHMiLCJub2RlQW5kQ29uZGl0aW9uIiwidmFsdWF0aW9uRnVuY3Rpb24iLCJpbnNlcnRQb3N0aW9uIiwiZmluZERvbVBvc2l0aW9uIiwiY29uZGl0aW9uYWxOb2RlIiwiVHJhbnNmb3JtSW50ZXJuYWwiLCJpc1VzZXJDaGFuZ2UiLCJQcmVJZiIsImlmcyIsImlzRmFrZSIsImZha2VGb3VuZCIsIkZvciIsImh0bWxEb2N1bWVudCIsImxvb3BzIiwiZmFrZUl0ZW0iLCJuZXh0RWxlbWVudFNpYmxpbmciLCJmYWtlSXRlbUNvdW50IiwiaXNmYWtlSXRlbUNvdW50UmVhZGVkIiwibG9vcENvbnN0cmFpbnQiLCJpdHJhdG9yRmluaXNoZWQiLCJmaWVsZHNBbmRWYWx1ZSIsIml0cmF0b3IiLCJodG1sVG9DbG9uZSIsImh0bWxUb0Nsb25lUGFyZW50IiwiaHRtbFRvQ2xvbmVMb2NhdGlvbiIsIml0ZW1FbGVtZW50cyIsImlzRGlydHlGYWtlIiwiY29sbGVjdGlvbkNvbnRleHQiLCJnZXRDb2xsZWN0aW9uT2JqZWN0IiwiY29sbGVjdGlvbkNvbnRleHRGaWVsZCIsImdldENvbGxlY3Rpb25OYW1lIiwid3JpdGFibGUiLCJpdGVtc0NvbGxlY3Rpb24iLCJpdGVtSW5kZXgiLCJpc0ZpcnN0IiwicmVtb3ZlUHJlRm9yIiwiaXRlbUZyb21Db2xsZWN0aW9uIiwiY29udGV4dE9iamVjdCIsImNsb25lZEVsZW1lbnQiLCJQcmVGb3JQYXJ0aWFsIiwiZ2V0UGFyYW1ldGVyTmFtZSIsImdldEZ1bmN0aW9uRnJvbUNvbGxlY3Rpb24iLCJhcmdzIiwiX19wcm90b19fIiwia2V5cyIsInBhcmFtc1N0cmluZyIsInBhcmFtcyIsInBhcmFtc0l0ZW0iLCJpc1BhcmFtVmFsdWUiLCJwYXJhbU5hbWUiLCJwYXJhbVZhbHVlIiwiY3VycmVudEZ1bmN0aW9uIiwibmV4dEl0ZW0iLCJvbGROZXh0IiwibGFzdEl0ZW0iLCJmaXJzdEl0ZW0iLCJQcmVGb3IiLCJ0YWdOYW1lIiwiY2xvbmVJdGVtIiwiY2xvbmVJdGVtQ291bnQiLCJjbG9uZUl0ZW1Db3VudFN0cmluZyIsIlByZVRyYW5zZm9ybUludGVybmFsIiwiZmluZFJlbmRlcnMiLCJyZXN1bHRGdW5jdGlvbiIsImV2ZW50TmFtZSIsIml0ZW1IdG1sIiwicmVxdWVzdERhdGEiLCJwcm9jZXNzUmVxdWVzdERhdGEiLCJpbml0UGFnZSIsInJlbmRlck5hbWUiLCJyZW5kZXJDb21wbGV0ZSIsIlBhZ2VTaXplIiwiUGFnZU51bWJlciIsInBhZ2VkRGF0YSIsImFnUmVuZGVyIiwiaHlkcmF0ZSIsIm5leHRQYWdlIiwicHJldmlvdXNQYWdlIiwibW9yZVBhZ2UiLCJwcmV2aW91cyIsIm1vcmUiLCJwYWdlZFJlc3VsdCIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiZGVmaW5pdGlvbiIsIm9iaiIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
1
|
+
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(self,(()=>(()=>{var __webpack_modules__={468:()=>{agora((function(){$(document).ready((function(){"#SignUp"==location.hash&&OpenPopup()}))}))},440:function(e,t){var n,r,o;r="undefined"!=typeof window?window:this,o=function(r,o){function i(e){var t=e.length,n=Q.type(e);return"function"!==n&&!Q.isWindow(e)&&(!(1!==e.nodeType||!t)||"array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function a(e,t,n){if(Q.isFunction(t))return Q.grep(e,(function(e,r){return!!t.call(e,r,e)!==n}));if(t.nodeType)return Q.grep(e,(function(e){return e===t!==n}));if("string"==typeof t){if(ie.test(t))return Q.filter(t,e,n);t=Q.filter(t,e)}return Q.grep(e,(function(e){return U.call(t,e)>=0!==n}))}function s(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function l(){Y.removeEventListener("DOMContentLoaded",l,!1),r.removeEventListener("load",l,!1),Q.ready()}function c(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=Q.expando+Math.random()}function u(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ye,"-$1").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:ve.test(n)?Q.parseJSON(n):n)}catch(e){}ge.set(e,t,n)}else n=void 0;return n}function d(){return!0}function f(){return!1}function p(){try{return Y.activeElement}catch(e){}}function h(e,t){return Q.nodeName(e,"table")&&Q.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function m(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function g(e){var t=Pe.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function v(e,t){for(var n=0,r=e.length;r>n;n++)me.set(e[n],"globalEval",!t||me.get(t[n],"globalEval"))}function y(e,t){var n,r,o,i,a,s,l,c;if(1===t.nodeType){if(me.hasData(e)&&(i=me.access(e),a=me.set(t,i),c=i.events))for(o in delete a.handle,a.events={},c)for(n=0,r=c[o].length;r>n;n++)Q.event.add(t,o,c[o][n]);ge.hasData(e)&&(s=ge.access(e),l=Q.extend({},s),ge.set(t,l))}}function b(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&Q.nodeName(e,t)?Q.merge([e],n):n}function x(e,t){var n=t.nodeName.toLowerCase();"input"===n&&Ee.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}function w(e,t){var n,o=Q(t.createElement(e)).appendTo(t.body),i=r.getDefaultComputedStyle&&(n=r.getDefaultComputedStyle(o[0]))?n.display:Q.css(o[0],"display");return o.detach(),i}function E(e){var t=Y,n=Fe[e];return n||("none"!==(n=w(e,t))&&n||((t=(Ie=(Ie||Q("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement))[0].contentDocument).write(),t.close(),n=w(e,t),Ie.detach()),Fe[e]=n),n}function C(e,t,n){var r,o,i,a,s=e.style;return(n=n||He(e))&&(a=n.getPropertyValue(t)||n[t]),n&&(""!==a||Q.contains(e.ownerDocument,e)||(a=Q.style(e,t)),Re.test(a)&&Me.test(t)&&(r=s.width,o=s.minWidth,i=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=o,s.maxWidth=i)),void 0!==a?a+"":a}function L(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function A(e,t){if(t in e)return t;for(var n=t[0].toUpperCase()+t.slice(1),r=t,o=Ge.length;o--;)if((t=Ge[o]+n)in e)return t;return r}function S(e,t,n){var r=We.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function T(e,t,n,r,o){for(var i=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>i;i+=2)"margin"===n&&(a+=Q.css(e,n+xe[i],!0,o)),r?("content"===n&&(a-=Q.css(e,"padding"+xe[i],!0,o)),"margin"!==n&&(a-=Q.css(e,"border"+xe[i]+"Width",!0,o))):(a+=Q.css(e,"padding"+xe[i],!0,o),"padding"!==n&&(a+=Q.css(e,"border"+xe[i]+"Width",!0,o)));return a}function k(e,t,n){var r=!0,o="width"===t?e.offsetWidth:e.offsetHeight,i=He(e),a="border-box"===Q.css(e,"boxSizing",!1,i);if(0>=o||null==o){if((0>(o=C(e,t,i))||null==o)&&(o=e.style[t]),Re.test(o))return o;r=a&&(X.boxSizingReliable()||o===e.style[t]),o=parseFloat(o)||0}return o+T(e,t,n||(a?"border":"content"),r,i)+"px"}function N(e,t){for(var n,r,o,i=[],a=0,s=e.length;s>a;a++)(r=e[a]).style&&(i[a]=me.get(r,"olddisplay"),n=r.style.display,t?(i[a]||"none"!==n||(r.style.display=""),""===r.style.display&&we(r)&&(i[a]=me.access(r,"olddisplay",E(r.nodeName)))):(o=we(r),"none"===n&&o||me.set(r,"olddisplay",o?n:Q.css(r,"display"))));for(a=0;s>a;a++)(r=e[a]).style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?i[a]||"":"none"));return e}function O(e,t,n,r,o){return new O.prototype.init(e,t,n,r,o)}function D(){return setTimeout((function(){Xe=void 0})),Xe=Q.now()}function _(e,t){var n,r=0,o={height:e};for(t=t?1:0;4>r;r+=2-t)o["margin"+(n=xe[r])]=o["padding"+n]=e;return t&&(o.opacity=o.width=e),o}function q(e,t,n){for(var r,o=(et[t]||[]).concat(et["*"]),i=0,a=o.length;a>i;i++)if(r=o[i].call(n,t,e))return r}function P(e,t,n){var r,o,i=0,a=Ze.length,s=Q.Deferred().always((function(){delete l.elem})),l=function(){if(o)return!1;for(var t=Xe||D(),n=Math.max(0,c.startTime+c.duration-t),r=1-(n/c.duration||0),i=0,a=c.tweens.length;a>i;i++)c.tweens[i].run(r);return s.notifyWith(e,[c,r,n]),1>r&&a?n:(s.resolveWith(e,[c]),!1)},c=s.promise({elem:e,props:Q.extend({},t),opts:Q.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xe||D(),duration:n.duration,tweens:[],createTween:function(t,n){var r=Q.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(r),r},stop:function(t){var n=0,r=t?c.tweens.length:0;if(o)return this;for(o=!0;r>n;n++)c.tweens[n].run(1);return t?s.resolveWith(e,[c,t]):s.rejectWith(e,[c,t]),this}}),u=c.props;for(function(e,t){var n,r,o,i,a;for(n in e)if(o=t[r=Q.camelCase(n)],i=e[n],Q.isArray(i)&&(o=i[1],i=e[n]=i[0]),n!==r&&(e[r]=i,delete e[n]),(a=Q.cssHooks[r])&&"expand"in a)for(n in i=a.expand(i),delete e[r],i)n in e||(e[n]=i[n],t[n]=o);else t[r]=o}(u,c.opts.specialEasing);a>i;i++)if(r=Ze[i].call(c,e,u,c.opts))return r;return Q.map(u,q,c),Q.isFunction(c.opts.start)&&c.opts.start.call(e,c),Q.fx.timer(Q.extend(l,{elem:e,anim:c,queue:c.opts.queue})),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always)}function j(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,o=0,i=t.toLowerCase().match(fe)||[];if(Q.isFunction(n))for(;r=i[o++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function $(e,t,n,r){function o(s){var l;return i[s]=!0,Q.each(e[s]||[],(function(e,s){var c=s(t,n,r);return"string"!=typeof c||a||i[c]?a?!(l=c):void 0:(t.dataTypes.unshift(c),o(c),!1)})),l}var i={},a=e===vt;return o(t.dataTypes[0])||!i["*"]&&o("*")}function I(e,t){var n,r,o=Q.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((o[n]?e:r||(r={}))[n]=t[n]);return r&&Q.extend(!0,e,r),e}function F(e,t,n,r){var o;if(Q.isArray(t))Q.each(t,(function(t,o){n||xt.test(e)?r(e,o):F(e+"["+("object"==typeof o?t:"")+"]",o,n,r)}));else if(n||"object"!==Q.type(t))r(e,t);else for(o in t)F(e+"["+o+"]",t[o],n,r)}function M(e){return Q.isWindow(e)?e:9===e.nodeType&&e.defaultView}var R=[],H=R.slice,B=R.concat,W=R.push,U=R.indexOf,z={},V=z.toString,G=z.hasOwnProperty,X={},Y=r.document,J="2.1.1",Q=function(e,t){return new Q.fn.init(e,t)},K=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,Z=/^-ms-/,ee=/-([\da-z])/gi,te=function(e,t){return t.toUpperCase()};Q.fn=Q.prototype={jquery:J,constructor:Q,selector:"",length:0,toArray:function(){return H.call(this)},get:function(e){return null!=e?0>e?this[e+this.length]:this[e]:H.call(this)},pushStack:function(e){var t=Q.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return Q.each(this,e,t)},map:function(e){return this.pushStack(Q.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(H.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:W,sort:R.sort,splice:R.splice},Q.extend=Q.fn.extend=function(){var e,t,n,r,o,i,a=arguments[0]||{},s=1,l=arguments.length,c=!1;for("boolean"==typeof a&&(c=a,a=arguments[s]||{},s++),"object"==typeof a||Q.isFunction(a)||(a={}),s===l&&(a=this,s--);l>s;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(c&&r&&(Q.isPlainObject(r)||(o=Q.isArray(r)))?(o?(o=!1,i=n&&Q.isArray(n)?n:[]):i=n&&Q.isPlainObject(n)?n:{},a[t]=Q.extend(c,i,r)):void 0!==r&&(a[t]=r));return a},Q.extend({expando:"jQuery"+(J+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===Q.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!Q.isArray(e)&&e-parseFloat(e)>=0},isPlainObject:function(e){return!("object"!==Q.type(e)||e.nodeType||Q.isWindow(e)||e.constructor&&!G.call(e.constructor.prototype,"isPrototypeOf"))},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?z[V.call(e)]||"object":typeof e},globalEval:function(e){var t,n=eval;(e=Q.trim(e))&&(1===e.indexOf("use strict")?((t=Y.createElement("script")).text=e,Y.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(Z,"ms-").replace(ee,te)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r=0,o=e.length,a=i(e);if(n){if(a)for(;o>r&&!1!==t.apply(e[r],n);r++);else for(r in e)if(!1===t.apply(e[r],n))break}else if(a)for(;o>r&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(K,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(i(Object(e))?Q.merge(n,"string"==typeof e?[e]:e):W.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:U.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,o=e.length;n>r;r++)e[o++]=t[r];return e.length=o,e},grep:function(e,t,n){for(var r=[],o=0,i=e.length,a=!n;i>o;o++)!t(e[o],o)!==a&&r.push(e[o]);return r},map:function(e,t,n){var r,o=0,a=e.length,s=[];if(i(e))for(;a>o;o++)null!=(r=t(e[o],o,n))&&s.push(r);else for(o in e)null!=(r=t(e[o],o,n))&&s.push(r);return B.apply([],s)},guid:1,proxy:function(e,t){var n,r,o;return"string"==typeof t&&(n=e[t],t=e,e=n),Q.isFunction(e)?(r=H.call(arguments,2),o=function(){return e.apply(t||this,r.concat(H.call(arguments)))},o.guid=e.guid=e.guid||Q.guid++,o):void 0},now:Date.now,support:X}),Q.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(function(e,t){z["[object "+t+"]"]=t.toLowerCase()}));var ne=function(e){function t(e,t,n,r){var o,i,a,s,l,c,d,p,h,m;if((t?t.ownerDocument||t:R)!==_&&D(t),n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=(t=t||_).nodeType)&&9!==s)return[];if(P&&!r){if(o=ye.exec(e))if(a=o[1]){if(9===s){if(!(i=t.getElementById(a))||!i.parentNode)return n;if(i.id===a)return n.push(i),n}else if(t.ownerDocument&&(i=t.ownerDocument.getElementById(a))&&F(t,i)&&i.id===a)return n.push(i),n}else{if(o[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((a=o[3])&&w.getElementsByClassName&&t.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(a)),n}if(w.qsa&&(!j||!j.test(e))){if(p=d=M,h=t,m=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=A(e),(d=t.getAttribute("id"))?p=d.replace(xe,"\\$&"):t.setAttribute("id",p),p="[id='"+p+"'] ",l=c.length;l--;)c[l]=p+f(c[l]);h=be.test(e)&&u(t.parentNode)||t,m=c.join(",")}if(m)try{return Z.apply(n,h.querySelectorAll(m)),n}catch(e){}finally{d||t.removeAttribute("id")}}}return T(e.replace(le,"$1"),t,n,r)}function n(){var e=[];return function t(n,r){return e.push(n+" ")>E.cacheLength&&delete t[e.shift()],t[n+" "]=r}}function r(e){return e[M]=!0,e}function o(e){var t=_.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function i(e,t){for(var n=e.split("|"),r=e.length;r--;)E.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||X)-(~e.sourceIndex||X);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return r((function(t){return t=+t,r((function(n,r){for(var o,i=e([],n.length,t),a=i.length;a--;)n[o=i[a]]&&(n[o]=!(r[o]=n[o]))}))}))}function u(e){return e&&typeof e.getElementsByTagName!==G&&e}function d(){}function f(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function p(e,t,n){var r=t.dir,o=n&&"parentNode"===r,i=B++;return t.first?function(t,n,i){for(;t=t[r];)if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,a){var s,l,c=[H,i];if(a){for(;t=t[r];)if((1===t.nodeType||o)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||o){if((s=(l=t[M]||(t[M]={}))[r])&&s[0]===H&&s[1]===i)return c[2]=s[2];if(l[r]=c,c[2]=e(t,n,a))return!0}}}function h(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)if(!e[o](t,n,r))return!1;return!0}:e[0]}function m(e,n,r){for(var o=0,i=n.length;i>o;o++)t(e,n[o],r);return r}function g(e,t,n,r,o){for(var i,a=[],s=0,l=e.length,c=null!=t;l>s;s++)(i=e[s])&&(!n||n(i,r,o))&&(a.push(i),c&&t.push(s));return a}function v(e,t,n,o,i,a){return o&&!o[M]&&(o=v(o)),i&&!i[M]&&(i=v(i,a)),r((function(r,a,s,l){var c,u,d,f=[],p=[],h=a.length,v=r||m(t||"*",s.nodeType?[s]:s,[]),y=!e||!r&&t?v:g(v,f,e,s,l),b=n?i||(r?e:h||o)?[]:a:y;if(n&&n(y,b,s,l),o)for(c=g(b,p),o(c,[],s,l),u=c.length;u--;)(d=c[u])&&(b[p[u]]=!(y[p[u]]=d));if(r){if(i||e){if(i){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(y[u]=d);i(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=i?te.call(r,d):f[u])>-1&&(r[c]=!(a[c]=d))}}else b=g(b===a?b.splice(h,b.length):b),i?i(null,a,b,l):Z.apply(a,b)}))}function y(e){for(var t,n,r,o=e.length,i=E.relative[e[0].type],a=i||E.relative[" "],s=i?1:0,l=p((function(e){return e===t}),a,!0),c=p((function(e){return te.call(t,e)>-1}),a,!0),u=[function(e,n,r){return!i&&(r||n!==k)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];o>s;s++)if(n=E.relative[e[s].type])u=[p(h(u),n)];else{if((n=E.filter[e[s].type].apply(null,e[s].matches))[M]){for(r=++s;o>r&&!E.relative[e[r].type];r++);return v(s>1&&h(u),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(le,"$1"),n,r>s&&y(e.slice(s,r)),o>r&&y(e=e.slice(r)),o>r&&f(e))}u.push(n)}return h(u)}function b(e,n){var o=n.length>0,i=e.length>0,a=function(r,a,s,l,c){var u,d,f,p=0,h="0",m=r&&[],v=[],y=k,b=r||i&&E.find.TAG("*",c),x=H+=null==y?1:Math.random()||.1,w=b.length;for(c&&(k=a!==_&&a);h!==w&&null!=(u=b[h]);h++){if(i&&u){for(d=0;f=e[d++];)if(f(u,a,s)){l.push(u);break}c&&(H=x)}o&&((u=!f&&u)&&p--,r&&m.push(u))}if(p+=h,o&&h!==p){for(d=0;f=n[d++];)f(m,v,a,s);if(r){if(p>0)for(;h--;)m[h]||v[h]||(v[h]=Q.call(l));v=g(v)}Z.apply(l,v),c&&!r&&v.length>0&&p+n.length>1&&t.uniqueSort(l)}return c&&(H=x,k=y),m};return o?r(a):a}var x,w,E,C,L,A,S,T,k,N,O,D,_,q,P,j,$,I,F,M="sizzle"+-new Date,R=e.document,H=0,B=0,W=n(),U=n(),z=n(),V=function(e,t){return e===t&&(O=!0),0},G="undefined",X=1<<31,Y={}.hasOwnProperty,J=[],Q=J.pop,K=J.push,Z=J.push,ee=J.slice,te=J.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},ne="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",re="[\\x20\\t\\r\\n\\f]",oe="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ie=oe.replace("w","w#"),ae="\\["+re+"*("+oe+")(?:"+re+"*([*^$|!~]?=)"+re+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ie+"))|)"+re+"*\\]",se=":("+oe+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ae+")*)|.*)\\)|)",le=new RegExp("^"+re+"+|((?:^|[^\\\\])(?:\\\\.)*)"+re+"+$","g"),ce=new RegExp("^"+re+"*,"+re+"*"),ue=new RegExp("^"+re+"*([>+~]|"+re+")"+re+"*"),de=new RegExp("="+re+"*([^\\]'\"]*?)"+re+"*\\]","g"),fe=new RegExp(se),pe=new RegExp("^"+ie+"$"),he={ID:new RegExp("^#("+oe+")"),CLASS:new RegExp("^\\.("+oe+")"),TAG:new RegExp("^("+oe.replace("w","w*")+")"),ATTR:new RegExp("^"+ae),PSEUDO:new RegExp("^"+se),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+re+"*(even|odd|(([+-]|)(\\d*)n|)"+re+"*(?:([+-]|)"+re+"*(\\d+)|))"+re+"*\\)|)","i"),bool:new RegExp("^(?:"+ne+")$","i"),needsContext:new RegExp("^"+re+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+re+"*((?:-\\d)?\\d*)"+re+"*\\)|)(?=[^-]|$)","i")},me=/^(?:input|select|textarea|button)$/i,ge=/^h\d$/i,ve=/^[^{]+\{\s*\[native \w/,ye=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,be=/[+~]/,xe=/'|\\/g,we=new RegExp("\\\\([\\da-f]{1,6}"+re+"?|("+re+")|.)","ig"),Ee=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)};try{Z.apply(J=ee.call(R.childNodes),R.childNodes),J[R.childNodes.length].nodeType}catch(e){Z={apply:J.length?function(e,t){K.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}for(x in w=t.support={},L=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},D=t.setDocument=function(e){var t,n=e?e.ownerDocument||e:R,r=n.defaultView;return n!==_&&9===n.nodeType&&n.documentElement?(_=n,q=n.documentElement,P=!L(n),r&&r!==r.top&&(r.addEventListener?r.addEventListener("unload",(function(){D()}),!1):r.attachEvent&&r.attachEvent("onunload",(function(){D()}))),w.attributes=o((function(e){return e.className="i",!e.getAttribute("className")})),w.getElementsByTagName=o((function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length})),w.getElementsByClassName=ve.test(n.getElementsByClassName)&&o((function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length})),w.getById=o((function(e){return q.appendChild(e).id=M,!n.getElementsByName||!n.getElementsByName(M).length})),w.getById?(E.find.ID=function(e,t){if(typeof t.getElementById!==G&&P){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},E.filter.ID=function(e){var t=e.replace(we,Ee);return function(e){return e.getAttribute("id")===t}}):(delete E.find.ID,E.filter.ID=function(e){var t=e.replace(we,Ee);return function(e){var n=typeof e.getAttributeNode!==G&&e.getAttributeNode("id");return n&&n.value===t}}),E.find.TAG=w.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==G?t.getElementsByTagName(e):void 0}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if("*"===e){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},E.find.CLASS=w.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==G&&P?t.getElementsByClassName(e):void 0},$=[],j=[],(w.qsa=ve.test(n.querySelectorAll))&&(o((function(e){e.innerHTML="<select msallowclip=''><option selected=''></option></select>",e.querySelectorAll("[msallowclip^='']").length&&j.push("[*^$]="+re+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||j.push("\\["+re+"*(?:value|"+ne+")"),e.querySelectorAll(":checked").length||j.push(":checked")})),o((function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&j.push("name"+re+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||j.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),j.push(",.*:")}))),(w.matchesSelector=ve.test(I=q.matches||q.webkitMatchesSelector||q.mozMatchesSelector||q.oMatchesSelector||q.msMatchesSelector))&&o((function(e){w.disconnectedMatch=I.call(e,"div"),I.call(e,"[s!='']:x"),$.push("!=",se)})),j=j.length&&new RegExp(j.join("|")),$=$.length&&new RegExp($.join("|")),t=ve.test(q.compareDocumentPosition),F=t||ve.test(q.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},V=t?function(e,t){if(e===t)return O=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!w.sortDetached&&t.compareDocumentPosition(e)===r?e===n||e.ownerDocument===R&&F(R,e)?-1:t===n||t.ownerDocument===R&&F(R,t)?1:N?te.call(N,e)-te.call(N,t):0:4&r?-1:1)}:function(e,t){if(e===t)return O=!0,0;var r,o=0,i=e.parentNode,s=t.parentNode,l=[e],c=[t];if(!i||!s)return e===n?-1:t===n?1:i?-1:s?1:N?te.call(N,e)-te.call(N,t):0;if(i===s)return a(e,t);for(r=e;r=r.parentNode;)l.unshift(r);for(r=t;r=r.parentNode;)c.unshift(r);for(;l[o]===c[o];)o++;return o?a(l[o],c[o]):l[o]===R?-1:c[o]===R?1:0},n):_},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==_&&D(e),n=n.replace(de,"='$1']"),!(!w.matchesSelector||!P||$&&$.test(n)||j&&j.test(n)))try{var r=I.call(e,n);if(r||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,_,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==_&&D(e),F(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==_&&D(e);var n=E.attrHandle[t.toLowerCase()],r=n&&Y.call(E.attrHandle,t.toLowerCase())?n(e,t,!P):void 0;return void 0!==r?r:w.attributes||!P?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,o=0;if(O=!w.detectDuplicates,N=!w.sortStable&&e.slice(0),e.sort(V),O){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)e.splice(n[r],1)}return N=null,e},C=t.getText=function(e){var t,n="",r=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+=C(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=C(t);return n},E=t.selectors={cacheLength:50,createPseudo:r,match:he,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(we,Ee),e[3]=(e[3]||e[4]||e[5]||"").replace(we,Ee),"~="===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]||t.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]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.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(we,Ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=W[e+" "];return t||(t=new RegExp("(^|"+re+")"+e+"("+re+"|$)"))&&W(e,(function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==G&&e.getAttribute("class")||"")}))},ATTR:function(e,n,r){return function(o){var i=t.attr(o,e);return null==i?"!="===n:!n||(i+="","="===n?i===r:"!="===n?i!==r:"^="===n?r&&0===i.indexOf(r):"*="===n?r&&i.indexOf(r)>-1:"$="===n?r&&i.slice(-r.length)===r:"~="===n?(" "+i+" ").indexOf(r)>-1:"|="===n&&(i===r||i.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,o){var i="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===o?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,h,m=i!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(g){if(i){for(;m;){for(d=t;d=d[m];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;h=m="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?g.firstChild:g.lastChild],a&&y){for(p=(c=(u=g[M]||(g[M]={}))[e]||[])[0]===H&&c[1],f=c[0]===H&&c[2],d=p&&g.childNodes[p];d=++p&&d&&d[m]||(f=p=0)||h.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[H,p,f];break}}else if(y&&(c=(t[M]||(t[M]={}))[e])&&c[0]===H)f=c[1];else for(;(d=++p&&d&&d[m]||(f=p=0)||h.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[M]||(d[M]={}))[e]=[H,f]),d!==t)););return(f-=o)===r||f%r==0&&f/r>=0}}},PSEUDO:function(e,n){var o,i=E.pseudos[e]||E.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return i[M]?i(n):i.length>1?(o=[e,e,"",n],E.setFilters.hasOwnProperty(e.toLowerCase())?r((function(e,t){for(var r,o=i(e,n),a=o.length;a--;)e[r=te.call(e,o[a])]=!(t[r]=o[a])})):function(e){return i(e,0,o)}):i}},pseudos:{not:r((function(e){var t=[],n=[],o=S(e.replace(le,"$1"));return o[M]?r((function(e,t,n,r){for(var i,a=o(e,null,r,[]),s=e.length;s--;)(i=a[s])&&(e[s]=!(t[s]=i))})):function(e,r,i){return t[0]=e,o(t,null,i,n),!n.pop()}})),has:r((function(e){return function(n){return t(e,n).length>0}})),contains:r((function(e){return function(t){return(t.textContent||t.innerText||C(t)).indexOf(e)>-1}})),lang:r((function(e){return pe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(we,Ee).toLowerCase(),function(t){var n;do{if(n=P?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===q},focus:function(e){return e===_.activeElement&&(!_.hasFocus||_.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return!1===e.disabled},disabled:function(e){return!0===e.disabled},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!E.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return me.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:c((function(){return[0]})),last:c((function(e,t){return[t-1]})),eq:c((function(e,t,n){return[0>n?n+t:n]})),even:c((function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e})),odd:c((function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e})),lt:c((function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e})),gt:c((function(e,t,n){for(var r=0>n?n+t:n;++r<t;)e.push(r);return e}))}},E.pseudos.nth=E.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})E.pseudos[x]=s(x);for(x in{submit:!0,reset:!0})E.pseudos[x]=l(x);return d.prototype=E.filters=E.pseudos,E.setFilters=new d,A=t.tokenize=function(e,n){var r,o,i,a,s,l,c,u=U[e+" "];if(u)return n?0:u.slice(0);for(s=e,l=[],c=E.preFilter;s;){for(a in(!r||(o=ce.exec(s)))&&(o&&(s=s.slice(o[0].length)||s),l.push(i=[])),r=!1,(o=ue.exec(s))&&(r=o.shift(),i.push({value:r,type:o[0].replace(le," ")}),s=s.slice(r.length)),E.filter)!(o=he[a].exec(s))||c[a]&&!(o=c[a](o))||(r=o.shift(),i.push({value:r,type:a,matches:o}),s=s.slice(r.length));if(!r)break}return n?s.length:s?t.error(e):U(e,l).slice(0)},S=t.compile=function(e,t){var n,r=[],o=[],i=z[e+" "];if(!i){for(t||(t=A(e)),n=t.length;n--;)(i=y(t[n]))[M]?r.push(i):o.push(i);(i=z(e,b(o,r))).selector=e}return i},T=t.select=function(e,t,n,r){var o,i,a,s,l,c="function"==typeof e&&e,d=!r&&A(e=c.selector||e);if(n=n||[],1===d.length){if((i=d[0]=d[0].slice(0)).length>2&&"ID"===(a=i[0]).type&&w.getById&&9===t.nodeType&&P&&E.relative[i[1].type]){if(!(t=(E.find.ID(a.matches[0].replace(we,Ee),t)||[])[0]))return n;c&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(o=he.needsContext.test(e)?0:i.length;o--&&(a=i[o],!E.relative[s=a.type]);)if((l=E.find[s])&&(r=l(a.matches[0].replace(we,Ee),be.test(i[0].type)&&u(t.parentNode)||t))){if(i.splice(o,1),!(e=r.length&&f(i)))return Z.apply(n,r),n;break}}return(c||S(e,d))(r,t,!P,n,be.test(e)&&u(t.parentNode)||t),n},w.sortStable=M.split("").sort(V).join("")===M,w.detectDuplicates=!!O,D(),w.sortDetached=o((function(e){return 1&e.compareDocumentPosition(_.createElement("div"))})),o((function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")}))||i("type|href|height|width",(function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),w.attributes&&o((function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||i("value",(function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue})),o((function(e){return null==e.getAttribute("disabled")}))||i(ne,(function(e,t,n){var r;return n?void 0:!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null})),t}(r);Q.find=ne,Q.expr=ne.selectors,Q.expr[":"]=Q.expr.pseudos,Q.unique=ne.uniqueSort,Q.text=ne.getText,Q.isXMLDoc=ne.isXML,Q.contains=ne.contains;var re=Q.expr.match.needsContext,oe=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ie=/^.[^:#\[\.,]*$/;Q.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?Q.find.matchesSelector(r,e)?[r]:[]:Q.find.matches(e,Q.grep(t,(function(e){return 1===e.nodeType})))},Q.fn.extend({find:function(e){var t,n=this.length,r=[],o=this;if("string"!=typeof e)return this.pushStack(Q(e).filter((function(){for(t=0;n>t;t++)if(Q.contains(o[t],this))return!0})));for(t=0;n>t;t++)Q.find(e,o[t],r);return(r=this.pushStack(n>1?Q.unique(r):r)).selector=this.selector?this.selector+" "+e:e,r},filter:function(e){return this.pushStack(a(this,e||[],!1))},not:function(e){return this.pushStack(a(this,e||[],!0))},is:function(e){return!!a(this,"string"==typeof e&&re.test(e)?Q(e):e||[],!1).length}});var ae,se=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,le=Q.fn.init=function(e,t){var n,r;if(!e)return this;if("string"==typeof e){if(!(n="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:se.exec(e))||!n[1]&&t)return!t||t.jquery?(t||ae).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof Q?t[0]:t,Q.merge(this,Q.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:Y,!0)),oe.test(n[1])&&Q.isPlainObject(t))for(n in t)Q.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}return(r=Y.getElementById(n[2]))&&r.parentNode&&(this.length=1,this[0]=r),this.context=Y,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):Q.isFunction(e)?void 0!==ae.ready?ae.ready(e):e(Q):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),Q.makeArray(e,this))};le.prototype=Q.fn,ae=Q(Y);var ce=/^(?:parents|prev(?:Until|All))/,ue={children:!0,contents:!0,next:!0,prev:!0};Q.extend({dir:function(e,t,n){for(var r=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&Q(e).is(n))break;r.push(e)}return r},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}}),Q.fn.extend({has:function(e){var t=Q(e,this),n=t.length;return this.filter((function(){for(var e=0;n>e;e++)if(Q.contains(this,t[e]))return!0}))},closest:function(e,t){for(var n,r=0,o=this.length,i=[],a=re.test(e)||"string"!=typeof e?Q(e,t||this.context):0;o>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&Q.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(i.length>1?Q.unique(i):i)},index:function(e){return e?"string"==typeof e?U.call(Q(e),this[0]):U.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(Q.unique(Q.merge(this.get(),Q(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),Q.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return Q.dir(e,"parentNode")},parentsUntil:function(e,t,n){return Q.dir(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return Q.dir(e,"nextSibling")},prevAll:function(e){return Q.dir(e,"previousSibling")},nextUntil:function(e,t,n){return Q.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return Q.dir(e,"previousSibling",n)},siblings:function(e){return Q.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return Q.sibling(e.firstChild)},contents:function(e){return e.contentDocument||Q.merge([],e.childNodes)}},(function(e,t){Q.fn[e]=function(n,r){var o=Q.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(o=Q.filter(r,o)),this.length>1&&(ue[e]||Q.unique(o),ce.test(e)&&o.reverse()),this.pushStack(o)}}));var de,fe=/\S+/g,pe={};Q.Callbacks=function(e){e="string"==typeof e?pe[e]||function(e){var t=pe[e]={};return Q.each(e.match(fe)||[],(function(e,n){t[n]=!0})),t}(e):Q.extend({},e);var t,n,r,o,i,a,s=[],l=!e.once&&[],c=function(d){for(t=e.memory&&d,n=!0,a=o||0,o=0,i=s.length,r=!0;s&&i>a;a++)if(!1===s[a].apply(d[0],d[1])&&e.stopOnFalse){t=!1;break}r=!1,s&&(l?l.length&&c(l.shift()):t?s=[]:u.disable())},u={add:function(){if(s){var n=s.length;!function t(n){Q.each(n,(function(n,r){var o=Q.type(r);"function"===o?e.unique&&u.has(r)||s.push(r):r&&r.length&&"string"!==o&&t(r)}))}(arguments),r?i=s.length:t&&(o=n,c(t))}return this},remove:function(){return s&&Q.each(arguments,(function(e,t){for(var n;(n=Q.inArray(t,s,n))>-1;)s.splice(n,1),r&&(i>=n&&i--,a>=n&&a--)})),this},has:function(e){return e?Q.inArray(e,s)>-1:!(!s||!s.length)},empty:function(){return s=[],i=0,this},disable:function(){return s=l=t=void 0,this},disabled:function(){return!s},lock:function(){return l=void 0,t||u.disable(),this},locked:function(){return!l},fireWith:function(e,t){return!s||n&&!l||(t=[e,(t=t||[]).slice?t.slice():t],r?l.push(t):c(t)),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!n}};return u},Q.extend({Deferred:function(e){var t=[["resolve","done",Q.Callbacks("once memory"),"resolved"],["reject","fail",Q.Callbacks("once memory"),"rejected"],["notify","progress",Q.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var e=arguments;return Q.Deferred((function(n){Q.each(t,(function(t,i){var a=Q.isFunction(e[t])&&e[t];o[i[1]]((function(){var e=a&&a.apply(this,arguments);e&&Q.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[i[0]+"With"](this===r?n.promise():this,a?[e]:arguments)}))})),e=null})).promise()},promise:function(e){return null!=e?Q.extend(e,r):r}},o={};return r.pipe=r.then,Q.each(t,(function(e,i){var a=i[2],s=i[3];r[i[1]]=a.add,s&&a.add((function(){n=s}),t[1^e][2].disable,t[2][2].lock),o[i[0]]=function(){return o[i[0]+"With"](this===o?r:this,arguments),this},o[i[0]+"With"]=a.fireWith})),r.promise(o),e&&e.call(o,o),o},when:function(e){var t,n,r,o=0,i=H.call(arguments),a=i.length,s=1!==a||e&&Q.isFunction(e.promise)?a:0,l=1===s?e:Q.Deferred(),c=function(e,n,r){return function(o){n[e]=this,r[e]=arguments.length>1?H.call(arguments):o,r===t?l.notifyWith(n,r):--s||l.resolveWith(n,r)}};if(a>1)for(t=new Array(a),n=new Array(a),r=new Array(a);a>o;o++)i[o]&&Q.isFunction(i[o].promise)?i[o].promise().done(c(o,r,i)).fail(l.reject).progress(c(o,n,t)):--s;return s||l.resolveWith(r,i),l.promise()}}),Q.fn.ready=function(e){return Q.ready.promise().done(e),this},Q.extend({isReady:!1,readyWait:1,holdReady:function(e){e?Q.readyWait++:Q.ready(!0)},ready:function(e){(!0===e?--Q.readyWait:Q.isReady)||(Q.isReady=!0,!0!==e&&--Q.readyWait>0||(de.resolveWith(Y,[Q]),Q.fn.triggerHandler&&(Q(Y).triggerHandler("ready"),Q(Y).off("ready"))))}}),Q.ready.promise=function(e){return de||(de=Q.Deferred(),"complete"===Y.readyState?setTimeout(Q.ready):(Y.addEventListener("DOMContentLoaded",l,!1),r.addEventListener("load",l,!1))),de.promise(e)},Q.ready.promise();var he=Q.access=function(e,t,n,r,o,i,a){var s=0,l=e.length,c=null==n;if("object"===Q.type(n))for(s in o=!0,n)Q.access(e,t,s,n[s],!0,i,a);else if(void 0!==r&&(o=!0,Q.isFunction(r)||(a=!0),c&&(a?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(Q(e),n)})),t))for(;l>s;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return o?e:c?t.call(e):l?t(e[0],n):i};Q.acceptData=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType},c.uid=1,c.accepts=Q.acceptData,c.prototype={key:function(e){if(!c.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=c.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,Q.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,o=this.key(e),i=this.cache[o];if("string"==typeof t)i[t]=n;else if(Q.isEmptyObject(i))Q.extend(this.cache[o],t);else for(r in t)i[r]=t[r];return i},get:function(e,t){var n=this.cache[this.key(e)];return void 0===t?n:n[t]},access:function(e,t,n){var r;return void 0===t||t&&"string"==typeof t&&void 0===n?void 0!==(r=this.get(e,t))?r:this.get(e,Q.camelCase(t)):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r,o,i=this.key(e),a=this.cache[i];if(void 0===t)this.cache[i]={};else{Q.isArray(t)?r=t.concat(t.map(Q.camelCase)):(o=Q.camelCase(t),r=t in a?[t,o]:(r=o)in a?[r]:r.match(fe)||[]),n=r.length;for(;n--;)delete a[r[n]]}},hasData:function(e){return!Q.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}};var me=new c,ge=new c,ve=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ye=/([A-Z])/g;Q.extend({hasData:function(e){return ge.hasData(e)||me.hasData(e)},data:function(e,t,n){return ge.access(e,t,n)},removeData:function(e,t){ge.remove(e,t)},_data:function(e,t,n){return me.access(e,t,n)},_removeData:function(e,t){me.remove(e,t)}}),Q.fn.extend({data:function(e,t){var n,r,o,i=this[0],a=i&&i.attributes;if(void 0===e){if(this.length&&(o=ge.get(i),1===i.nodeType&&!me.get(i,"hasDataAttrs"))){for(n=a.length;n--;)a[n]&&0===(r=a[n].name).indexOf("data-")&&(r=Q.camelCase(r.slice(5)),u(i,r,o[r]));me.set(i,"hasDataAttrs",!0)}return o}return"object"==typeof e?this.each((function(){ge.set(this,e)})):he(this,(function(t){var n,r=Q.camelCase(e);if(i&&void 0===t){if(void 0!==(n=ge.get(i,e)))return n;if(void 0!==(n=ge.get(i,r)))return n;if(void 0!==(n=u(i,r,void 0)))return n}else this.each((function(){var n=ge.get(this,r);ge.set(this,r,t),-1!==e.indexOf("-")&&void 0!==n&&ge.set(this,e,t)}))}),null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each((function(){ge.remove(this,e)}))}}),Q.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=me.get(e,t),n&&(!r||Q.isArray(n)?r=me.access(e,t,Q.makeArray(n)):r.push(n)),r||[]):void 0},dequeue:function(e,t){t=t||"fx";var n=Q.queue(e,t),r=n.length,o=n.shift(),i=Q._queueHooks(e,t);"inprogress"===o&&(o=n.shift(),r--),o&&("fx"===t&&n.unshift("inprogress"),delete i.stop,o.call(e,(function(){Q.dequeue(e,t)}),i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return me.get(e,n)||me.access(e,n,{empty:Q.Callbacks("once memory").add((function(){me.remove(e,[t+"queue",n])}))})}}),Q.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?Q.queue(this[0],e):void 0===t?this:this.each((function(){var n=Q.queue(this,e,t);Q._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&Q.dequeue(this,e)}))},dequeue:function(e){return this.each((function(){Q.dequeue(this,e)}))},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,o=Q.Deferred(),i=this,a=this.length,s=function(){--r||o.resolveWith(i,[i])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";a--;)(n=me.get(i[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),o.promise(t)}});var be=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,xe=["Top","Right","Bottom","Left"],we=function(e,t){return e=t||e,"none"===Q.css(e,"display")||!Q.contains(e.ownerDocument,e)},Ee=/^(?:checkbox|radio)$/i;!function(){var e=Y.createDocumentFragment().appendChild(Y.createElement("div")),t=Y.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),X.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",X.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var Ce="undefined";X.focusinBubbles="onfocusin"in r;var Le=/^key/,Ae=/^(?:mouse|pointer|contextmenu)|click/,Se=/^(?:focusinfocus|focusoutblur)$/,Te=/^([^.]*)(?:\.(.+)|)$/;Q.event={global:{},add:function(e,t,n,r,o){var i,a,s,l,c,u,d,f,p,h,m,g=me.get(e);if(g)for(n.handler&&(n=(i=n).handler,o=i.selector),n.guid||(n.guid=Q.guid++),(l=g.events)||(l=g.events={}),(a=g.handle)||(a=g.handle=function(t){return typeof Q!==Ce&&Q.event.triggered!==t.type?Q.event.dispatch.apply(e,arguments):void 0}),c=(t=(t||"").match(fe)||[""]).length;c--;)p=m=(s=Te.exec(t[c])||[])[1],h=(s[2]||"").split(".").sort(),p&&(d=Q.event.special[p]||{},p=(o?d.delegateType:d.bindType)||p,d=Q.event.special[p]||{},u=Q.extend({type:p,origType:m,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&Q.expr.match.needsContext.test(o),namespace:h.join(".")},i),(f=l[p])||((f=l[p]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(p,a,{capture:!1,passive:p.indexOf("touch")>-1&&p.indexOf("scroll")>-1})),d.add&&(d.add.call(e,u),u.handler.guid||(u.handler.guid=n.guid)),o?f.splice(f.delegateCount++,0,u):f.push(u),Q.event.global[p]=!0)},remove:function(e,t,n,r,o){var i,a,s,l,c,u,d,f,p,h,m,g=me.hasData(e)&&me.get(e);if(g&&(l=g.events)){for(c=(t=(t||"").match(fe)||[""]).length;c--;)if(p=m=(s=Te.exec(t[c])||[])[1],h=(s[2]||"").split(".").sort(),p){for(d=Q.event.special[p]||{},f=l[p=(r?d.delegateType:d.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=i=f.length;i--;)u=f[i],!o&&m!==u.origType||n&&n.guid!==u.guid||s&&!s.test(u.namespace)||r&&r!==u.selector&&("**"!==r||!u.selector)||(f.splice(i,1),u.selector&&f.delegateCount--,d.remove&&d.remove.call(e,u));a&&!f.length&&(d.teardown&&!1!==d.teardown.call(e,h,g.handle)||Q.removeEvent(e,p,g.handle),delete l[p])}else for(p in l)Q.event.remove(e,p+t[c],n,r,!0);Q.isEmptyObject(l)&&(delete g.handle,me.remove(e,"events"))}},trigger:function(e,t,n,o){var i,a,s,l,c,u,d,f=[n||Y],p=G.call(e,"type")?e.type:e,h=G.call(e,"namespace")?e.namespace.split("."):[];if(a=s=n=n||Y,3!==n.nodeType&&8!==n.nodeType&&!Se.test(p+Q.event.triggered)&&(p.indexOf(".")>=0&&(h=p.split("."),p=h.shift(),h.sort()),c=p.indexOf(":")<0&&"on"+p,(e=e[Q.expando]?e:new Q.Event(p,"object"==typeof e&&e)).isTrigger=o?2:3,e.namespace=h.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:Q.makeArray(t,[e]),d=Q.event.special[p]||{},o||!d.trigger||!1!==d.trigger.apply(n,t))){if(!o&&!d.noBubble&&!Q.isWindow(n)){for(l=d.delegateType||p,Se.test(l+p)||(a=a.parentNode);a;a=a.parentNode)f.push(a),s=a;s===(n.ownerDocument||Y)&&f.push(s.defaultView||s.parentWindow||r)}for(i=0;(a=f[i++])&&!e.isPropagationStopped();)e.type=i>1?l:d.bindType||p,(u=(me.get(a,"events")||{})[e.type]&&me.get(a,"handle"))&&u.apply(a,t),(u=c&&a[c])&&u.apply&&Q.acceptData(a)&&(e.result=u.apply(a,t),!1===e.result&&e.preventDefault());return e.type=p,o||e.isDefaultPrevented()||d._default&&!1!==d._default.apply(f.pop(),t)||!Q.acceptData(n)||c&&Q.isFunction(n[p])&&!Q.isWindow(n)&&((s=n[c])&&(n[c]=null),Q.event.triggered=p,n[p](),Q.event.triggered=void 0,s&&(n[c]=s)),e.result}},dispatch:function(e){e=Q.event.fix(e);var t,n,r,o,i,a=[],s=H.call(arguments),l=(me.get(this,"events")||{})[e.type]||[],c=Q.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,e)){for(a=Q.event.handlers.call(this,e,l),t=0;(o=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,n=0;(i=o.handlers[n++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,void 0!==(r=((Q.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,s))&&!1===(e.result=r)&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,o,i,a=[],s=t.delegateCount,l=e.target;if(s&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!==this;l=l.parentNode||this)if(!0!==l.disabled||"click"!==e.type){for(r=[],n=0;s>n;n++)void 0===r[o=(i=t[n]).selector+" "]&&(r[o]=i.needsContext?Q(o,this).index(l)>=0:Q.find(o,this,null,[l]).length),r[o]&&r.push(i);r.length&&a.push({elem:l,handlers:r})}return s<t.length&&a.push({elem:this,handlers:t.slice(s)}),a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,o,i=t.button;return null==e.pageX&&null!=t.clientX&&(r=(n=e.target.ownerDocument||Y).documentElement,o=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||o&&o.scrollLeft||0)-(r&&r.clientLeft||o&&o.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||o&&o.scrollTop||0)-(r&&r.clientTop||o&&o.clientTop||0)),e.which||void 0===i||(e.which=1&i?1:2&i?3:4&i?2:0),e}},fix:function(e){if(e[Q.expando])return e;var t,n,r,o=e.type,i=e,a=this.fixHooks[o];for(a||(this.fixHooks[o]=a=Ae.test(o)?this.mouseHooks:Le.test(o)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new Q.Event(i),t=r.length;t--;)e[n=r[t]]=i[n];return e.target||(e.target=Y),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,i):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==p()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===p()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&Q.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(e){return Q.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var o=Q.extend(new Q.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?Q.event.trigger(o,null,t):Q.event.dispatch.call(t,o),o.isDefaultPrevented()&&n.preventDefault()}},Q.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},Q.Event=function(e,t){return this instanceof Q.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?d:f):this.type=e,t&&Q.extend(this,t),this.timeStamp=e&&e.timeStamp||Q.now(),void(this[Q.expando]=!0)):new Q.Event(e,t)},Q.Event.prototype={isDefaultPrevented:f,isPropagationStopped:f,isImmediatePropagationStopped:f,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=d,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=d,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=d,e&&e.stopImmediatePropagation&&e.stopImmediatePropagation(),this.stopPropagation()}},Q.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},(function(e,t){Q.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=e.relatedTarget,o=e.handleObj;return(!r||r!==this&&!Q.contains(this,r))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}})),X.focusinBubbles||Q.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){Q.event.simulate(t,e.target,Q.event.fix(e),!0)};Q.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=me.access(r,t);o||r.addEventListener(e,n,!0),me.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=me.access(r,t)-1;o?me.access(r,t,o):(r.removeEventListener(e,n,!0),me.remove(r,t))}}})),Q.fn.extend({on:function(e,t,n,r,o){var i,a;if("object"==typeof e){for(a in"string"!=typeof t&&(n=n||t,t=void 0),e)this.on(a,t,n,e[a],o);return this}if(null==n&&null==r?(r=t,n=t=void 0):null==r&&("string"==typeof t?(r=n,n=void 0):(r=n,n=t,t=void 0)),!1===r)r=f;else if(!r)return this;return 1===o&&(i=r,r=function(e){return Q().off(e),i.apply(this,arguments)},r.guid=i.guid||(i.guid=Q.guid++)),this.each((function(){Q.event.add(this,e,r,n,t)}))},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,o;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,Q(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(o in e)this.off(o,t,e[o]);return this}return(!1===t||"function"==typeof t)&&(n=t,t=void 0),!1===n&&(n=f),this.each((function(){Q.event.remove(this,e,n,t)}))},trigger:function(e,t){return this.each((function(){Q.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];return n?Q.event.trigger(e,t,n,!0):void 0}});var ke=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Ne=/<([\w:]+)/,Oe=/<|&#?\w+;/,De=/<(?:script|style|link)/i,_e=/checked\s*(?:[^=]|=\s*.checked.)/i,qe=/^$|\/(?:java|ecma)script/i,Pe=/^true\/(.*)/,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,$e={option:[1,"<select multiple='multiple'>","</select>"],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,"",""]};$e.optgroup=$e.option,$e.tbody=$e.tfoot=$e.colgroup=$e.caption=$e.thead,$e.th=$e.td,Q.extend({clone:function(e,t,n){var r,o,i,a,s=e.cloneNode(!0),l=Q.contains(e.ownerDocument,e);if(!(X.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||Q.isXMLDoc(e)))for(a=b(s),r=0,o=(i=b(e)).length;o>r;r++)x(i[r],a[r]);if(t)if(n)for(i=i||b(e),a=a||b(s),r=0,o=i.length;o>r;r++)y(i[r],a[r]);else y(e,s);return(a=b(s,"script")).length>0&&v(a,!l&&b(e,"script")),s},buildFragment:function(e,t,n,r){for(var o,i,a,s,l,c,u=t.createDocumentFragment(),d=[],f=0,p=e.length;p>f;f++)if((o=e[f])||0===o)if("object"===Q.type(o))Q.merge(d,o.nodeType?[o]:o);else if(Oe.test(o)){for(i=i||u.appendChild(t.createElement("div")),a=(Ne.exec(o)||["",""])[1].toLowerCase(),s=$e[a]||$e._default,i.innerHTML=s[1]+o.replace(ke,"<$1></$2>")+s[2],c=s[0];c--;)i=i.lastChild;Q.merge(d,i.childNodes),(i=u.firstChild).textContent=""}else d.push(t.createTextNode(o));for(u.textContent="",f=0;o=d[f++];)if((!r||-1===Q.inArray(o,r))&&(l=Q.contains(o.ownerDocument,o),i=b(u.appendChild(o),"script"),l&&v(i),n))for(c=0;o=i[c++];)qe.test(o.type||"")&&n.push(o);return u},cleanData:function(e){for(var t,n,r,o,i=Q.event.special,a=0;void 0!==(n=e[a]);a++){if(Q.acceptData(n)&&(o=n[me.expando])&&(t=me.cache[o])){if(t.events)for(r in t.events)i[r]?Q.event.remove(n,r):Q.removeEvent(n,r,t.handle);me.cache[o]&&delete me.cache[o]}delete ge.cache[n[ge.expando]]}}}),Q.fn.extend({text:function(e){return he(this,(function(e){return void 0===e?Q.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 this.domManip(arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||h(this,e).appendChild(e)}))},prepend:function(){return this.domManip(arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=h(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return this.domManip(arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return this.domManip(arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},remove:function(e,t){for(var n,r=e?Q.filter(e,this):this,o=0;null!=(n=r[o]);o++)t||1!==n.nodeType||Q.cleanData(b(n)),n.parentNode&&(t&&Q.contains(n.ownerDocument,n)&&v(b(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(Q.cleanData(b(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return Q.clone(this,e,t)}))},html:function(e){return he(this,(function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!De.test(e)&&!$e[(Ne.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(ke,"<$1></$2>");try{for(;r>n;n++)1===(t=this[n]||{}).nodeType&&(Q.cleanData(b(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)}),null,e,arguments.length)},replaceWith:function(){var e=arguments[0];return this.domManip(arguments,(function(t){e=this.parentNode,Q.cleanData(b(this)),e&&e.replaceChild(t,this)})),e&&(e.length||e.nodeType)?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t){e=B.apply([],e);var n,r,o,i,a,s,l=0,c=this.length,u=this,d=c-1,f=e[0],p=Q.isFunction(f);if(p||c>1&&"string"==typeof f&&!X.checkClone&&_e.test(f))return this.each((function(n){var r=u.eq(n);p&&(e[0]=f.call(this,n,r.html())),r.domManip(e,t)}));if(c&&(r=(n=Q.buildFragment(e,this[0].ownerDocument,!1,this)).firstChild,1===n.childNodes.length&&(n=r),r)){for(i=(o=Q.map(b(n,"script"),m)).length;c>l;l++)a=n,l!==d&&(a=Q.clone(a,!0,!0),i&&Q.merge(o,b(a,"script"))),t.call(this[l],a,l);if(i)for(s=o[o.length-1].ownerDocument,Q.map(o,g),l=0;i>l;l++)a=o[l],qe.test(a.type||"")&&!me.access(a,"globalEval")&&Q.contains(s,a)&&(a.src?Q._evalUrl&&Q._evalUrl(a.src):Q.globalEval(a.textContent.replace(je,"")))}return this}}),Q.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},(function(e,t){Q.fn[e]=function(e){for(var n,r=[],o=Q(e),i=o.length-1,a=0;i>=a;a++)n=a===i?this:this.clone(!0),Q(o[a])[t](n),W.apply(r,n.get());return this.pushStack(r)}}));var Ie,Fe={},Me=/^margin/,Re=new RegExp("^("+be+")(?!px)[a-z%]+$","i"),He=function(e){return e.ownerDocument.defaultView.getComputedStyle(e,null)};!function(){function e(){a.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",a.innerHTML="",o.appendChild(i);var e=r.getComputedStyle(a,null);t="1%"!==e.top,n="4px"===e.width,o.removeChild(i)}var t,n,o=Y.documentElement,i=Y.createElement("div"),a=Y.createElement("div");a.style&&(a.style.backgroundClip="content-box",a.cloneNode(!0).style.backgroundClip="",X.clearCloneStyle="content-box"===a.style.backgroundClip,i.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",i.appendChild(a),r.getComputedStyle&&Q.extend(X,{pixelPosition:function(){return e(),t},boxSizingReliable:function(){return null==n&&e(),n},reliableMarginRight:function(){var e,t=a.appendChild(Y.createElement("div"));return t.style.cssText=a.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",t.style.marginRight=t.style.width="0",a.style.width="1px",o.appendChild(i),e=!parseFloat(r.getComputedStyle(t,null).marginRight),o.removeChild(i),e}}))}(),Q.swap=function(e,t,n,r){var o,i,a={};for(i in t)a[i]=e.style[i],e.style[i]=t[i];for(i in o=n.apply(e,r||[]),t)e.style[i]=a[i];return o};var Be=/^(none|table(?!-c[ea]).+)/,We=new RegExp("^("+be+")(.*)$","i"),Ue=new RegExp("^([+-])=("+be+")","i"),ze={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","O","Moz","ms"];Q.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=C(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,i,a,s=Q.camelCase(t),l=e.style;return t=Q.cssProps[s]||(Q.cssProps[s]=A(l,s)),a=Q.cssHooks[t]||Q.cssHooks[s],void 0===n?a&&"get"in a&&void 0!==(o=a.get(e,!1,r))?o:l[t]:("string"==(i=typeof n)&&(o=Ue.exec(n))&&(n=(o[1]+1)*o[2]+parseFloat(Q.css(e,t)),i="number"),void(null!=n&&n==n&&("number"!==i||Q.cssNumber[s]||(n+="px"),X.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(l[t]=n))))}},css:function(e,t,n,r){var o,i,a,s=Q.camelCase(t);return t=Q.cssProps[s]||(Q.cssProps[s]=A(e.style,s)),(a=Q.cssHooks[t]||Q.cssHooks[s])&&"get"in a&&(o=a.get(e,!0,n)),void 0===o&&(o=C(e,t,r)),"normal"===o&&t in Ve&&(o=Ve[t]),""===n||n?(i=parseFloat(o),!0===n||Q.isNumeric(i)?i||0:o):o}}),Q.each(["height","width"],(function(e,t){Q.cssHooks[t]={get:function(e,n,r){return n?Be.test(Q.css(e,"display"))&&0===e.offsetWidth?Q.swap(e,ze,(function(){return k(e,t,r)})):k(e,t,r):void 0},set:function(e,n,r){var o=r&&He(e);return S(0,n,r?T(e,t,r,"border-box"===Q.css(e,"boxSizing",!1,o),o):0)}}})),Q.cssHooks.marginRight=L(X.reliableMarginRight,(function(e,t){return t?Q.swap(e,{display:"inline-block"},C,[e,"marginRight"]):void 0})),Q.each({margin:"",padding:"",border:"Width"},(function(e,t){Q.cssHooks[e+t]={expand:function(n){for(var r=0,o={},i="string"==typeof n?n.split(" "):[n];4>r;r++)o[e+xe[r]+t]=i[r]||i[r-2]||i[0];return o}},Me.test(e)||(Q.cssHooks[e+t].set=S)})),Q.fn.extend({css:function(e,t){return he(this,(function(e,t,n){var r,o,i={},a=0;if(Q.isArray(t)){for(r=He(e),o=t.length;o>a;a++)i[t[a]]=Q.css(e,t[a],!1,r);return i}return void 0!==n?Q.style(e,t,n):Q.css(e,t)}),e,t,arguments.length>1)},show:function(){return N(this,!0)},hide:function(){return N(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each((function(){we(this)?Q(this).show():Q(this).hide()}))}}),Q.Tween=O,O.prototype={constructor:O,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(Q.cssNumber[n]?"":"px")},cur:function(){var e=O.propHooks[this.prop];return e&&e.get?e.get(this):O.propHooks._default.get(this)},run:function(e){var t,n=O.propHooks[this.prop];return this.pos=t=this.options.duration?Q.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):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):O.propHooks._default.set(this),this}},O.prototype.init.prototype=O.prototype,O.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=Q.css(e.elem,e.prop,""))&&"auto"!==t?t:0:e.elem[e.prop]},set:function(e){Q.fx.step[e.prop]?Q.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[Q.cssProps[e.prop]]||Q.cssHooks[e.prop])?Q.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},O.propHooks.scrollTop=O.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},Q.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},Q.fx=O.prototype.init,Q.fx.step={};var Xe,Ye,Je=/^(?:toggle|show|hide)$/,Qe=new RegExp("^(?:([+-])=|)("+be+")([a-z%]*)$","i"),Ke=/queueHooks$/,Ze=[function(e,t,n){var r,o,i,a,s,l,c,u=this,d={},f=e.style,p=e.nodeType&&we(e),h=me.get(e,"fxshow");for(r in n.queue||(null==(s=Q._queueHooks(e,"fx")).unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always((function(){u.always((function(){s.unqueued--,Q.queue(e,"fx").length||s.empty.fire()}))}))),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[f.overflow,f.overflowX,f.overflowY],"inline"===("none"===(c=Q.css(e,"display"))?me.get(e,"olddisplay")||E(e.nodeName):c)&&"none"===Q.css(e,"float")&&(f.display="inline-block")),n.overflow&&(f.overflow="hidden",u.always((function(){f.overflow=n.overflow[0],f.overflowX=n.overflow[1],f.overflowY=n.overflow[2]}))),t)if(o=t[r],Je.exec(o)){if(delete t[r],i=i||"toggle"===o,o===(p?"hide":"show")){if("show"!==o||!h||void 0===h[r])continue;p=!0}d[r]=h&&h[r]||Q.style(e,r)}else c=void 0;if(Q.isEmptyObject(d))"inline"===("none"===c?E(e.nodeName):c)&&(f.display=c);else for(r in h?"hidden"in h&&(p=h.hidden):h=me.access(e,"fxshow",{}),i&&(h.hidden=!p),p?Q(e).show():u.done((function(){Q(e).hide()})),u.done((function(){var t;for(t in me.remove(e,"fxshow"),d)Q.style(e,t,d[t])})),d)a=q(p?h[r]:0,r,u),r in h||(h[r]=a.start,p&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}],et={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),o=Qe.exec(t),i=o&&o[3]||(Q.cssNumber[e]?"":"px"),a=(Q.cssNumber[e]||"px"!==i&&+r)&&Qe.exec(Q.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==i){i=i||a[3],o=o||[],a=+r||1;do{a/=s=s||".5",Q.style(n.elem,e,a+i)}while(s!==(s=n.cur()/r)&&1!==s&&--l)}return o&&(a=n.start=+a||+r||0,n.unit=i,n.end=o[1]?a+(o[1]+1)*o[2]:+o[2]),n}]};Q.Animation=Q.extend(P,{tweener:function(e,t){Q.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,r=0,o=e.length;o>r;r++)n=e[r],et[n]=et[n]||[],et[n].unshift(t)},prefilter:function(e,t){t?Ze.unshift(e):Ze.push(e)}}),Q.speed=function(e,t,n){var r=e&&"object"==typeof e?Q.extend({},e):{complete:n||!n&&t||Q.isFunction(e)&&e,duration:e,easing:n&&t||t&&!Q.isFunction(t)&&t};return r.duration=Q.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in Q.fx.speeds?Q.fx.speeds[r.duration]:Q.fx.speeds._default,(null==r.queue||!0===r.queue)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){Q.isFunction(r.old)&&r.old.call(this),r.queue&&Q.dequeue(this,r.queue)},r},Q.fn.extend({fadeTo:function(e,t,n,r){return this.filter(we).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var o=Q.isEmptyObject(e),i=Q.speed(t,n,r),a=function(){var t=P(this,Q.extend({},e),i);(o||me.get(this,"finish"))&&t.stop(!0)};return a.finish=a,o||!1===i.queue?this.each(a):this.queue(i.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each((function(){var t=!0,o=null!=e&&e+"queueHooks",i=Q.timers,a=me.get(this);if(o)a[o]&&a[o].stop&&r(a[o]);else for(o in a)a[o]&&a[o].stop&&Ke.test(o)&&r(a[o]);for(o=i.length;o--;)i[o].elem!==this||null!=e&&i[o].queue!==e||(i[o].anim.stop(n),t=!1,i.splice(o,1));(t||!n)&&Q.dequeue(this,e)}))},finish:function(e){return!1!==e&&(e=e||"fx"),this.each((function(){var t,n=me.get(this),r=n[e+"queue"],o=n[e+"queueHooks"],i=Q.timers,a=r?r.length:0;for(n.finish=!0,Q.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=i.length;t--;)i[t].elem===this&&i[t].queue===e&&(i[t].anim.stop(!0),i.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish}))}}),Q.each(["toggle","show","hide"],(function(e,t){var n=Q.fn[t];Q.fn[t]=function(e,r,o){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(_(t,!0),e,r,o)}})),Q.each({slideDown:_("show"),slideUp:_("hide"),slideToggle:_("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},(function(e,t){Q.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}})),Q.timers=[],Q.fx.tick=function(){var e,t=0,n=Q.timers;for(Xe=Q.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||Q.fx.stop(),Xe=void 0},Q.fx.timer=function(e){Q.timers.push(e),e()?Q.fx.start():Q.timers.pop()},Q.fx.interval=13,Q.fx.start=function(){Ye||(Ye=setInterval(Q.fx.tick,Q.fx.interval))},Q.fx.stop=function(){clearInterval(Ye),Ye=null},Q.fx.speeds={slow:600,fast:200,_default:400},Q.fn.delay=function(e,t){return e=Q.fx&&Q.fx.speeds[e]||e,t=t||"fx",this.queue(t,(function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}}))},function(){var e=Y.createElement("input"),t=Y.createElement("select"),n=t.appendChild(Y.createElement("option"));e.type="checkbox",X.checkOn=""!==e.value,X.optSelected=n.selected,t.disabled=!0,X.optDisabled=!n.disabled,(e=Y.createElement("input")).value="t",e.type="radio",X.radioValue="t"===e.value}();var tt,nt=Q.expr.attrHandle;Q.fn.extend({attr:function(e,t){return he(this,Q.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each((function(){Q.removeAttr(this,e)}))}}),Q.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(e&&3!==i&&8!==i&&2!==i)return typeof e.getAttribute===Ce?Q.prop(e,t,n):(1===i&&Q.isXMLDoc(e)||(t=t.toLowerCase(),r=Q.attrHooks[t]||(Q.expr.match.bool.test(t)?tt:void 0)),void 0===n?r&&"get"in r&&null!==(o=r.get(e,t))?o:null==(o=Q.find.attr(e,t))?void 0:o:null!==n?r&&"set"in r&&void 0!==(o=r.set(e,n,t))?o:(e.setAttribute(t,n+""),n):void Q.removeAttr(e,t))},removeAttr:function(e,t){var n,r,o=0,i=t&&t.match(fe);if(i&&1===e.nodeType)for(;n=i[o++];)r=Q.propFix[n]||n,Q.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!X.radioValue&&"radio"===t&&Q.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}}}),tt={set:function(e,t,n){return!1===t?Q.removeAttr(e,n):e.setAttribute(n,n),n}},Q.each(Q.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=nt[t]||Q.find.attr;nt[t]=function(e,t,r){var o,i;return r||(i=nt[t],nt[t]=o,o=null!=n(e,t,r)?t.toLowerCase():null,nt[t]=i),o}}));var rt=/^(?:input|select|textarea|button)$/i;Q.fn.extend({prop:function(e,t){return he(this,Q.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[Q.propFix[e]||e]}))}}),Q.extend({propFix:{for:"htmlFor",class:"className"},prop:function(e,t,n){var r,o,i=e.nodeType;if(e&&3!==i&&8!==i&&2!==i)return(1!==i||!Q.isXMLDoc(e))&&(t=Q.propFix[t]||t,o=Q.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||rt.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),X.optSelected||(Q.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),Q.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){Q.propFix[this.toLowerCase()]=this}));var ot=/[\t\r\n\f]/g;Q.fn.extend({addClass:function(e){var t,n,r,o,i,a,s="string"==typeof e&&e,l=0,c=this.length;if(Q.isFunction(e))return this.each((function(t){Q(this).addClass(e.call(this,t,this.className))}));if(s)for(t=(e||"").match(fe)||[];c>l;l++)if(r=1===(n=this[l]).nodeType&&(n.className?(" "+n.className+" ").replace(ot," "):" ")){for(i=0;o=t[i++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");a=Q.trim(r),n.className!==a&&(n.className=a)}return this},removeClass:function(e){var t,n,r,o,i,a,s=0===arguments.length||"string"==typeof e&&e,l=0,c=this.length;if(Q.isFunction(e))return this.each((function(t){Q(this).removeClass(e.call(this,t,this.className))}));if(s)for(t=(e||"").match(fe)||[];c>l;l++)if(r=1===(n=this[l]).nodeType&&(n.className?(" "+n.className+" ").replace(ot," "):"")){for(i=0;o=t[i++];)for(;r.indexOf(" "+o+" ")>=0;)r=r.replace(" "+o+" "," ");a=e?Q.trim(r):"",n.className!==a&&(n.className=a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):this.each(Q.isFunction(e)?function(n){Q(this).toggleClass(e.call(this,n,this.className,t),t)}:function(){if("string"===n)for(var t,r=0,o=Q(this),i=e.match(fe)||[];t=i[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else(n===Ce||"boolean"===n)&&(this.className&&me.set(this,"__className__",this.className),this.className=this.className||!1===e?"":me.get(this,"__className__")||"")})},hasClass:function(e){for(var t=" "+e+" ",n=0,r=this.length;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(ot," ").indexOf(t)>=0)return!0;return!1}});var it=/\r/g;Q.fn.extend({val:function(e){var t,n,r,o=this[0];return arguments.length?(r=Q.isFunction(e),this.each((function(n){var o;1===this.nodeType&&(null==(o=r?e.call(this,n,Q(this).val()):e)?o="":"number"==typeof o?o+="":Q.isArray(o)&&(o=Q.map(o,(function(e){return null==e?"":e+""}))),(t=Q.valHooks[this.type]||Q.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))}))):o?(t=Q.valHooks[o.type]||Q.valHooks[o.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:"string"==typeof(n=o.value)?n.replace(it,""):null==n?"":n:void 0}}),Q.extend({valHooks:{option:{get:function(e){var t=Q.find.attr(e,"value");return null!=t?t:Q.trim(Q.text(e))}},select:{get:function(e){for(var t,n,r=e.options,o=e.selectedIndex,i="select-one"===e.type||0>o,a=i?null:[],s=i?o+1:r.length,l=0>o?s:i?o:0;s>l;l++)if(!(!(n=r[l]).selected&&l!==o||(X.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&Q.nodeName(n.parentNode,"optgroup"))){if(t=Q(n).val(),i)return t;a.push(t)}return a},set:function(e,t){for(var n,r,o=e.options,i=Q.makeArray(t),a=o.length;a--;)((r=o[a]).selected=Q.inArray(r.value,i)>=0)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),Q.each(["radio","checkbox"],(function(){Q.valHooks[this]={set:function(e,t){return Q.isArray(t)?e.checked=Q.inArray(Q(e).val(),t)>=0:void 0}},X.checkOn||(Q.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),Q.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),(function(e,t){Q.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}})),Q.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},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,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var at=Q.now(),st=/\?/;Q.parseJSON=function(e){return JSON.parse(e+"")},Q.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return(!t||t.getElementsByTagName("parsererror").length)&&Q.error("Invalid XML: "+e),t};var lt,ct,ut=/#.*$/,dt=/([?&])_=[^&]*/,ft=/^(.*?):[ \t]*([^\r\n]*)$/gm,pt=/^(?:GET|HEAD)$/,ht=/^\/\//,mt=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,gt={},vt={},yt="*/".concat("*");try{ct=location.href}catch(e){(ct=Y.createElement("a")).href="",ct=ct.href}lt=mt.exec(ct.toLowerCase())||[],Q.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ct,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(lt[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":yt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":Q.parseJSON,"text xml":Q.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?I(I(e,Q.ajaxSettings),t):I(Q.ajaxSettings,e)},ajaxPrefilter:j(gt),ajaxTransport:j(vt),ajax:function(e,t){function n(e,t,n,a){var l,u,v,y,x,E=t;2!==b&&(b=2,s&&clearTimeout(s),r=void 0,i=a||"",w.readyState=e>0?4:0,l=e>=200&&300>e||304===e,n&&(y=function(e,t,n){for(var r,o,i,a,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(o in s)if(s[o]&&s[o].test(r)){l.unshift(o);break}if(l[0]in n)i=l[0];else{for(o in n){if(!l[0]||e.converters[o+" "+l[0]]){i=o;break}a||(a=o)}i=i||a}return i?(i!==l[0]&&l.unshift(i),n[i]):void 0}(d,w,n)),y=function(e,t,n,r){var o,i,a,s,l,c={},u=e.dataTypes.slice();if(u[1])for(a in e.converters)c[a.toLowerCase()]=e.converters[a];for(i=u.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=i,i=u.shift())if("*"===i)i=l;else if("*"!==l&&l!==i){if(!(a=c[l+" "+i]||c["* "+i]))for(o in c)if((s=o.split(" "))[1]===i&&(a=c[l+" "+s[0]]||c["* "+s[0]])){!0===a?a=c[o]:!0!==c[o]&&(i=s[0],u.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 "+i}}}return{state:"success",data:t}}(d,y,w,l),l?(d.ifModified&&((x=w.getResponseHeader("Last-Modified"))&&(Q.lastModified[o]=x),(x=w.getResponseHeader("etag"))&&(Q.etag[o]=x)),204===e||"HEAD"===d.type?E="nocontent":304===e?E="notmodified":(E=y.state,u=y.data,l=!(v=y.error))):(v=E,(e||!E)&&(E="error",0>e&&(e=0))),w.status=e,w.statusText=(t||E)+"",l?h.resolveWith(f,[u,E,w]):h.rejectWith(f,[w,E,v]),w.statusCode(g),g=void 0,c&&p.trigger(l?"ajaxSuccess":"ajaxError",[w,d,l?u:v]),m.fireWith(f,[w,E]),c&&(p.trigger("ajaxComplete",[w,d]),--Q.active||Q.event.trigger("ajaxStop")))}"object"==typeof e&&(t=e,e=void 0),t=t||{};var r,o,i,a,s,l,c,u,d=Q.ajaxSetup({},t),f=d.context||d,p=d.context&&(f.nodeType||f.jquery)?Q(f):Q.event,h=Q.Deferred(),m=Q.Callbacks("once memory"),g=d.statusCode||{},v={},y={},b=0,x="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!a)for(a={};t=ft.exec(i);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?i:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=y[n]=y[n]||e,v[e]=t),this},overrideMimeType:function(e){return b||(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)g[t]=[g[t],e[t]];else w.always(e[w.status]);return this},abort:function(e){var t=e||x;return r&&r.abort(t),n(0,t),this}};if(h.promise(w).complete=m.add,w.success=w.done,w.error=w.fail,d.url=((e||d.url||ct)+"").replace(ut,"").replace(ht,lt[1]+"//"),d.type=t.method||t.type||d.method||d.type,d.dataTypes=Q.trim(d.dataType||"*").toLowerCase().match(fe)||[""],null==d.crossDomain&&(l=mt.exec(d.url.toLowerCase()),d.crossDomain=!(!l||l[1]===lt[1]&&l[2]===lt[2]&&(l[3]||("http:"===l[1]?"80":"443"))===(lt[3]||("http:"===lt[1]?"80":"443")))),d.data&&d.processData&&"string"!=typeof d.data&&(d.data=Q.param(d.data,d.traditional)),$(gt,d,t,w),2===b)return w;for(u in(c=d.global)&&0==Q.active++&&Q.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!pt.test(d.type),o=d.url,d.hasContent||(d.data&&(o=d.url+=(st.test(o)?"&":"?")+d.data,delete d.data),!1===d.cache&&(d.url=dt.test(o)?o.replace(dt,"$1_="+at++):o+(st.test(o)?"&":"?")+"_="+at++)),d.ifModified&&(Q.lastModified[o]&&w.setRequestHeader("If-Modified-Since",Q.lastModified[o]),Q.etag[o]&&w.setRequestHeader("If-None-Match",Q.etag[o])),(d.data&&d.hasContent&&!1!==d.contentType||t.contentType)&&w.setRequestHeader("Content-Type",d.contentType),w.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+yt+"; q=0.01":""):d.accepts["*"]),d.headers)w.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(!1===d.beforeSend.call(f,w,d)||2===b))return w.abort();for(u in x="abort",{success:1,error:1,complete:1})w[u](d[u]);if(r=$(vt,d,t,w)){w.readyState=1,c&&p.trigger("ajaxSend",[w,d]),d.async&&d.timeout>0&&(s=setTimeout((function(){w.abort("timeout")}),d.timeout));try{b=1,r.send(v,n)}catch(e){if(!(2>b))throw e;n(-1,e)}}else n(-1,"No Transport");return w},getJSON:function(e,t,n){return Q.get(e,t,n,"json")},getScript:function(e,t){return Q.get(e,void 0,t,"script")}}),Q.each(["get","post"],(function(e,t){Q[t]=function(e,n,r,o){return Q.isFunction(n)&&(o=o||r,r=n,n=void 0),Q.ajax({url:e,type:t,dataType:o,data:n,success:r})}})),Q.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],(function(e,t){Q.fn[t]=function(e){return this.on(t,e)}})),Q._evalUrl=function(e){return Q.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},Q.fn.extend({wrapAll:function(e){var t;return Q.isFunction(e)?this.each((function(t){Q(this).wrapAll(e.call(this,t))})):(this[0]&&(t=Q(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 this.each(Q.isFunction(e)?function(t){Q(this).wrapInner(e.call(this,t))}:function(){var t=Q(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=Q.isFunction(e);return this.each((function(n){Q(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(){return this.parent().each((function(){Q.nodeName(this,"body")||Q(this).replaceWith(this.childNodes)})).end()}}),Q.expr.filters.hidden=function(e){return e.offsetWidth<=0&&e.offsetHeight<=0},Q.expr.filters.visible=function(e){return!Q.expr.filters.hidden(e)};var bt=/%20/g,xt=/\[\]$/,wt=/\r?\n/g,Et=/^(?:submit|button|image|reset|file)$/i,Ct=/^(?:input|select|textarea|keygen)/i;Q.param=function(e,t){var n,r=[],o=function(e,t){t=Q.isFunction(t)?t():null==t?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=Q.ajaxSettings&&Q.ajaxSettings.traditional),Q.isArray(e)||e.jquery&&!Q.isPlainObject(e))Q.each(e,(function(){o(this.name,this.value)}));else for(n in e)F(n,e[n],t,o);return r.join("&").replace(bt,"+")},Q.fn.extend({serialize:function(){return Q.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=Q.prop(this,"elements");return e?Q.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!Q(this).is(":disabled")&&Ct.test(this.nodeName)&&!Et.test(e)&&(this.checked||!Ee.test(e))})).map((function(e,t){var n=Q(this).val();return null==n?null:Q.isArray(n)?Q.map(n,(function(e){return{name:t.name,value:e.replace(wt,"\r\n")}})):{name:t.name,value:n.replace(wt,"\r\n")}})).get()}}),Q.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(e){}};var Lt=0,At={},St={0:200,1223:204},Tt=Q.ajaxSettings.xhr();r.ActiveXObject&&Q(r).on("unload",(function(){for(var e in At)At[e]()})),X.cors=!!Tt&&"withCredentials"in Tt,X.ajax=Tt=!!Tt,Q.ajaxTransport((function(e){var t;return X.cors||Tt&&!e.crossDomain?{send:function(n,r){var o,i=e.xhr(),a=++Lt;if(i.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(o in e.xhrFields)i[o]=e.xhrFields[o];for(o in e.mimeType&&i.overrideMimeType&&i.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest"),n)i.setRequestHeader(o,n[o]);t=function(e){return function(){t&&(delete At[a],t=i.onload=i.onerror=null,"abort"===e?i.abort():"error"===e?r(i.status,i.statusText):r(St[i.status]||i.status,i.statusText,"string"==typeof i.responseText?{text:i.responseText}:void 0,i.getAllResponseHeaders()))}},i.onload=t(),i.onerror=t("error"),t=At[a]=t("abort");try{i.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}:void 0})),Q.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return Q.globalEval(e),e}}}),Q.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),Q.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain)return{send:function(r,o){t=Q("<script>").prop({async:!0,charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),Y.head.appendChild(t[0])},abort:function(){n&&n()}}}));var kt=[],Nt=/(=)\?(?=&|$)|\?\?/;Q.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=kt.pop()||Q.expando+"_"+at++;return this[e]=!0,e}}),Q.ajaxPrefilter("json jsonp",(function(e,t,n){var o,i,a,s=!1!==e.jsonp&&(Nt.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Nt.test(e.data)&&"data");return s||"jsonp"===e.dataTypes[0]?(o=e.jsonpCallback=Q.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(Nt,"$1"+o):!1!==e.jsonp&&(e.url+=(st.test(e.url)?"&":"?")+e.jsonp+"="+o),e.converters["script json"]=function(){return a||Q.error(o+" was not called"),a[0]},e.dataTypes[0]="json",i=r[o],r[o]=function(){a=arguments},n.always((function(){r[o]=i,e[o]&&(e.jsonpCallback=t.jsonpCallback,kt.push(o)),a&&Q.isFunction(i)&&i(a[0]),a=i=void 0})),"script"):void 0})),Q.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||Y;var r=oe.exec(e),o=!n&&[];return r?[t.createElement(r[1])]:(r=Q.buildFragment([e],t,o),o&&o.length&&Q(o).remove(),Q.merge([],r.childNodes))};var Ot=Q.fn.load;Q.fn.load=function(e,t,n){if("string"!=typeof e&&Ot)return Ot.apply(this,arguments);var r,o,i,a=this,s=e.indexOf(" ");return s>=0&&(r=Q.trim(e.slice(s)),e=e.slice(0,s)),Q.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(o="POST"),a.length>0&&Q.ajax({url:e,type:o,dataType:"html",data:t}).done((function(e){i=arguments,a.html(r?Q("<div>").append(Q.parseHTML(e)).find(r):e)})).complete(n&&function(e,t){a.each(n,i||[e.responseText,t,e])}),this},Q.expr.filters.animated=function(e){return Q.grep(Q.timers,(function(t){return e===t.elem})).length};var Dt=r.document.documentElement;Q.offset={setOffset:function(e,t,n){var r,o,i,a,s,l,c=Q.css(e,"position"),u=Q(e),d={};"static"===c&&(e.style.position="relative"),s=u.offset(),i=Q.css(e,"top"),l=Q.css(e,"left"),("absolute"===c||"fixed"===c)&&(i+l).indexOf("auto")>-1?(a=(r=u.position()).top,o=r.left):(a=parseFloat(i)||0,o=parseFloat(l)||0),Q.isFunction(t)&&(t=t.call(e,n,s)),null!=t.top&&(d.top=t.top-s.top+a),null!=t.left&&(d.left=t.left-s.left+o),"using"in t?t.using.call(e,d):u.css(d)}},Q.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){Q.offset.setOffset(this,e,t)}));var t,n,r=this[0],o={top:0,left:0},i=r&&r.ownerDocument;return i?(t=i.documentElement,Q.contains(t,r)?(typeof r.getBoundingClientRect!==Ce&&(o=r.getBoundingClientRect()),n=M(i),{top:o.top+n.pageYOffset-t.clientTop,left:o.left+n.pageXOffset-t.clientLeft}):o):void 0},position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return"fixed"===Q.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),Q.nodeName(e[0],"html")||(r=e.offset()),r.top+=Q.css(e[0],"borderTopWidth",!0),r.left+=Q.css(e[0],"borderLeftWidth",!0)),{top:t.top-r.top-Q.css(n,"marginTop",!0),left:t.left-r.left-Q.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent||Dt;e&&!Q.nodeName(e,"html")&&"static"===Q.css(e,"position");)e=e.offsetParent;return e||Dt}))}}),Q.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},(function(e,t){var n="pageYOffset"===t;Q.fn[e]=function(o){return he(this,(function(e,o,i){var a=M(e);return void 0===i?a?a[t]:e[o]:void(a?a.scrollTo(n?r.pageXOffset:i,n?i:r.pageYOffset):e[o]=i)}),e,o,arguments.length,null)}})),Q.each(["top","left"],(function(e,t){Q.cssHooks[t]=L(X.pixelPosition,(function(e,n){return n?(n=C(e,t),Re.test(n)?Q(e).position()[t]+"px":n):void 0}))})),Q.each({Height:"height",Width:"width"},(function(e,t){Q.each({padding:"inner"+e,content:t,"":"outer"+e},(function(n,r){Q.fn[r]=function(r,o){var i=arguments.length&&(n||"boolean"!=typeof r),a=n||(!0===r||!0===o?"margin":"border");return he(this,(function(t,n,r){var o;return Q.isWindow(t)?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?Q.css(t,n,a):Q.style(t,n,r,a)}),t,i?r:void 0,i,null)}}))})),Q.fn.size=function(){return this.length},Q.fn.andSelf=Q.fn.addBack,void 0===(n=function(){return Q}.apply(t,[]))||(e.exports=n);var _t=r.jQuery,qt=r.$;return Q.noConflict=function(e){return r.$===Q&&(r.$=qt),e&&r.jQuery===Q&&(r.jQuery=_t),Q},typeof o===Ce&&(r.jQuery=r.$=Q),Q},"object"==typeof e.exports?e.exports=r.document?o(r,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return o(e)}:o(r)},816:()=>{function e(e){return null==e||null==e||""==e||"string"==typeof e&&""==e.trim()}function t(e){var t=$(e).closest("[data-back-to-top-container]").offset();null!=t?$("html,body").animate({scrollTop:t.top},700):$("html,body").animate({scrollTop:0},700)}function n(e){$("html,body").animate({scrollTop:$(window).height()-$("#agora-layout-header").height()},700)}agora((function(){function r(){var e=$(this),t=$("#"+e.data("page-scroll")),n=null!=t&&null!=t&&t.length>0?t.offset().top:0,r=0;try{var o=e.data("page-scroll-offset");r=void 0!==o&&""!=o?parseInt(o):$("#agora-layout-header").height()}catch(e){}$("html, body").animate({scrollTop:n-r},1500);try{$("#"+e.data("page-scroll-tab-id")).trigger("click")}catch(e){}}jQuery.fn.ForceNumericOnly=function(){return this.each((function(){$(this).keydown((function(e){var t=e.charCode||e.keyCode||0;return e.shiftKey&&(t=0),8==t||9==t||13==t||46==t||110==t||190==t||t>=35&&t<=40||t>=48&&t<=57||t>=96&&t<=105}))}))},$("[data-numeric-only]").ForceNumericOnly(),$(document).ready((function(){$("[data-numeric-only]").ForceNumericOnly()})),$(document).on("click","[data-page-scroll]",r),$(document).on("tap","[data-page-scroll]",r),$(document).on("click","[data-back-to-top]",(function(){t(this)})),$(document).on("tap","[data-back-to-top]",(function(){t(this)})),$(document).on("click","[data-back-to-down]",(function(){n()})),$(document).on("tap","[data-back-to-down]",(function(){n()})),$(document).on("click","[data-href]",(function(t){$(t.target).closest("[data-non-click-content]").length>0||e($(this).data("href"))||(e($(this).data("target"))?location.href=$(this).data("href"):window.open($(this).data("href"),$(this).data("target")))}))}))},264:()=>{function ClosePopup(){$("[data-modaldialog-close]").trigger("click")}agora((function(){$(document).on("click","[data-modaldialog]",(function(){var e=$(this);e.prop("disabled")||(e.prop("disabled",!0),setTimeout((function(){e.prop("disabled",!1)}),2e3),$(this).AgoraDialogModal({AfterLoad:$(this).attr("data-modaldialog-afterLoad")}))})),$(document).on("click","[data-modaldialog-close]",(function(){$(this).AgoraDialogModal({CloseModal:!0}),"clear"==$(this).data("modaldialog-close")&&ClearFormval("[data-request]")})),$(document).on("click","[data-modaldialog-close-form]",(function(){$(this).AgoraDialogModal({CloseModal:!0,AfterLoad:$(this).attr("data-modaldialog-afterLoad")})}))})),function($){function agoraDialog(sender,options){var _defaults={ServiceUrl:"",ModalId:"IBPmodalcontainer",Params:null,Html:null,ParentCss:null,EnableCloseButton:!0,EnableLoader:!0,EnableAjaxHtmlLoad:!1,HideCloseButton:!1,CloseModal:!1,CloseWhenUserPressEscape:!0,Transition:"FadeIn",BeforeLoad:null,AfterLoad:null},_options=$.extend(_defaults,options);if(_options.CloseModal)return $(sender).closest(".agora-mdl-data-dialog-container").trigger("dispose"),$(sender).closest(".agora-mdl-data-dialog-container").removeClass("popup-open"),$(sender).closest(".agora-mdl-data-dialog-container").remove(),void $("body").removeClass("popup-active");function LoadOptions(){IsNotNull(sender.attr("data-modaldialog-src"))&&(_options.ServiceUrl=sender.attr("data-modaldialog-src")),IsNotNull(sender.attr("data-modaldialog-ajax"))&&(_options.EnableAjaxHtmlLoad=sender.attr("data-modaldialog-ajax")),IsNotNull(sender.attr("data-modaldialog-ParentCss"))&&(_options.ParentCss=sender.attr("data-modaldialog-ParentCss")),IsNotNull(sender.attr("data-modaldialog-CloseWhenUserPressEscape"))&&(_options.CloseWhenUserPressEscape="true"==sender.attr("data-modaldialog-CloseWhenUserPressEscape")),IsNotNull(sender.attr("data-modaldialog-HideCloseButton"))&&(_options.HideCloseButton="true"==sender.attr("data-modaldialog-HideCloseButton")),IsNotNull(sender.attr("data-modaldialog-id"))&&(_options.ModalId=sender.attr("data-modaldialog-id")),GetHtml()}function GetHtml(){_options.EnableAjaxHtmlLoad?($("#"+_options.ModalId).remove(),$.ajax({url:_options.ServiceUrl,type:"post",dataType:"html",data:_options.Params,cache:!1,success:function(e){_options.Html=e,BindHtml()},error:function(e){ShowAlert("Unknown Error. Please try later!",3e3,"alert_box",null),_options.EnableLoader&&ShowLoading()},statusCode:{404:function(){ShowAlert("Service not found!",3e3,"alert_box",null),_options.EnableLoader&&ShowLoading()}}})):(_options.AfterLoad&&_options.AfterLoad(),_options.Html=$("#"+sender.attr("data-modaldialog-id")).clone().wrap("#"+sender.attr("data-modaldialog-id")).html()),BindHtml()}function BindHtml(){null!=_options.Html&&($('<div id="'+_options.ModalId+'" class="agora-mdl-data-dialog-container '+_options.ParentCss+'"><div class="agora-mdl-data-dialog-container-body">'+(_options.HideCloseButton?"":'<div data-modaldialog-close="" class="mdl-close"></div>')+_options.Html+'</div><div id="popup" class="mdl-js-snackbar mdl-snackbar"><div class="mdl-snackbar__text"></div><button aria-label="button" class="mdl-snackbar__action" type="button"></button></div> </div>').appendTo("body"),$("#"+_options.ModalId).addClass("popup-open"),$("body").addClass("popup-active"),_options.EnableLoader&&ShowLoading(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom(),$("#"+_options.ModalId).find(".mdl-textfield--floating-label input.mdl-textfield__input:not([placeholder])").attr("placeholder"," "))}_options.AfterLoad&&(_options.AfterLoad=eval("(function() { "+_options.AfterLoad+"("+sender.attr("data-modaldialog-id")+"); })")),_options.EnableLoader&&ShowLoading(),LoadOptions(),$(document).keydown((function(e){"27"==e.keyCode&&_options.CloseWhenUserPressEscape&&($("#"+_options.ModalId).removeClass("popup-open"),$("#"+_options.ModalId).remove(),$("body").removeClass("popup-active"))}))}$.fn.AgoraDialogModal=function(e){return new agoraDialog(this,e)}}(jQuery)},136:()=>{function e(e){return null!=e&&null!=e&&e.length>0&&"0"!=e&&0!=e}window.agRequest={GET:async function(e,t){var n="";for(var r in t)n=n+(""!=n?"&":"")+r+"="+t[r];return e+=e.indexOf("?")>-1?"&":"?"+n,(await fetch(e,{method:"GET",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()},POST:async function(e,t){var n=new URLSearchParams;for(var r in t)n.append(r,t[r]);return(await fetch(e,{method:"POST",cache:"no-cache",body:n})).json()}},async function(){async function e(){document.querySelectorAll('[data-src]:not(.ag-lazy):not(.no-ag):not([data-src*="{{"])').forEach((function(e,n){e.classList.add("ag-lazy");var r=function(){!async function(e,n){var r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";if(await async function(e){var t=e.getBoundingClientRect(),n=document.body,r=document.documentElement,o=window.pageYOffset||r.scrollTop||n.scrollTop,i=(window.pageXOffset||r.scrollLeft||n.scrollLeft,r.clientTop||n.clientTop||0),a=(r.clientLeft||n.clientLeft,t.top+o-i),s=t.bottom+o-i;let l=o,c=l+window.innerHeight;return s>l&&a<c}(e)){if(null==e)return;var o=await async function(e,n){if(null==n)return null;var r=n.hasAttribute("data-ratio-auto");if(r)return{url:e};var o=await t(n,16,9);if(null==o)return null;var i=/.*\?(.*?(mh|mw)\=(\d+))*/gi.exec(e),a="";null!=n.getAttribute("data-crop")&&(a+="&mode=crop");e.indexOf("/"),0;return null!=i?{url:e,size:o}:{url:`${e}?`+(o.width>0?`mw=${o.width}`+(o.height>0?"&":""):"")+(o.height>0?`mh=${o.height}`:"")+`${a}`,size:o}}(e.getAttribute("data-src"),e);"VIDEO"==e.nodeName?setTimeout((function(){e.setAttribute("src",o.url)}),1e4):"OBJECT"==e.nodeName||"AUDIO"==e.nodeName?e.setAttribute("src",o.url):"IMG"==e.nodeName?(e.addEventListener("load",(function(){e.getAttribute("src")!=r&&e.classList.add("ag-lazy-s")})),e.setAttribute("src",r),null!=o&&(o.size&&(o.size.width>0&&e.setAttribute("width",o.size.width),o.size.height>0&&e.setAttribute("height",o.size.height)),e.setAttribute("src",o.url))):e.style["background-image"]=`url('${o.url}')`,n()}new IntersectionObserver((function(){console.log(e,"View")}),{root:null,rootMargin:"0px",threshold:.1})}(e,(function(){document.body.removeEventListener("ag.lazy",r)}))};document.body.addEventListener("ag.lazy",r),r()}))}async function t(e,n,r){if(null==e)return null;var o=e.getBoundingClientRect(),i=e.getAttribute("data-ratio"),a=null;i&&null!=i&&null!=(a=/^(?<width>[0-9\.]{1,4}):(?<height>[0-9\.]{1,4})$/gi.exec(i))&&(0==(n=parseFloat(a.groups.width))&&(n=-1),0==(r=parseFloat(a.groups.height))&&(r=-1));var s=o.width,l=o.height;return e.classList.contains("ag-lazy")&&(s=e.getAttribute("width"),l=e.getAttribute("height"),null!=s&&null!=s&&""!=s||(s=e.style.width),s=null==s||null==s||""==s?0:parseInt(s.replace(/[^\d]+/gi,"")),l=null==l||null==l||""==l?0:parseInt(l.replace(/[^\d]+/gi,""))),s!=l&&(null==s||null==l||l<s/n*r||s<l/r*n)&&(s>0?l=s/n*r:s=l/r*n),(s>0||n<0)&&(l>0||r<0)?(s=Math.floor(s),l=Math.floor(l),{width:n<0?0:s+(10-s%10),height:r<0?0:l+(10-l%10)}):await t(e.parentElement,n,r)}async function n(){if(null!=document.querySelector(".burger-c")){async function e(){document.querySelector(".burger-c").classList.contains("item-n-2")&&(document.querySelector(".burger-c").classList.remove("item-n-2"),document.querySelector(".burger-c").classList.add("item-n-1"));const e=document.querySelector(".item-uc");document.querySelector(".item-h").querySelector("nav").insertBefore(e,document.querySelector(".item-h").querySelector("nav").firstChild)}window.innerWidth<=1024&&e(),window.innerWidth>1024&&async function(){document.querySelector(".burger-c").classList.contains("item-n-1")&&(document.querySelector(".burger-c").classList.remove("item-n-1"),document.querySelector(".burger-c").classList.add("item-n-2"));const e=document.querySelector(".item-uc");document.querySelector(".item-h").appendChild(e)}(),document.querySelector(".burger-c ~ nav").offsetWidth<document.querySelector(".burger-c ~ nav").scrollWidth&&e()}}document.addEventListener("DOMContentLoaded",(async function(){document.body.addEventListener("ag.lazy.refresh",e),document.body.addEventListener("ag.refresh",e);var t=new CustomEvent("ag.lazy.refresh");document.body.dispatchEvent(t),document.addEventListener("scroll",(function(e){var t=new CustomEvent("ag.lazy");document.body.dispatchEvent(t)})),t=new CustomEvent("ag.lazy"),document.body.dispatchEvent(t),window.agLazy={refresh:function(){var e=new CustomEvent("ag.lazy.refresh");document.body.dispatchEvent(e)},validate:function(){var e=new CustomEvent("ag.lazy");document.body.dispatchEvent(e)}}})),async function(){null!=document.querySelector(".item-acc-i")&&document.querySelectorAll(".item-acc-i").forEach((e=>{const t=e.closest(".item-acc-c");e.classList.contains("open")&&(t.style.maxHeight=t.scrollHeight+"px"),e.addEventListener("click",(()=>{e.classList.toggle("open"),e.classList.contains("open")?t.style.maxHeight=t.scrollHeight+"px":e.classList.contains("open")||(t.style.maxHeight=document.querySelector(".item-acc-i").offsetHeight+"px")}))}))}(),async function(){null!=document.querySelector(".item-tab-b")&&document.querySelectorAll(".item-tab-b").forEach(((e,t)=>{e.addEventListener("click",(()=>{const n=document.querySelectorAll(".item-tab-c"),r=e.parentElement,o=r.parentElement;r.querySelectorAll(".item-tab-b").forEach((e=>{e.classList.remove("active")})),o.querySelectorAll(".item-tab-c").forEach((e=>{e.classList.remove("active"),n[t].classList.add("active")})),e.classList.add("active")}))}))}(),async function(){if(null!=document.querySelector(".item-sea")){document.querySelectorAll(".con-menu a").forEach((function(e){e.addEventListener("click",(function(){document.querySelector(".label-con").setAttribute("data-country",e.innerHTML),e.closest(".item-dr-c").previousElementSibling.classList.contains("active")&&e.closest(".item-dr-c").previousElementSibling.classList.remove("active")}))}));const t=document.querySelectorAll(".item-dr > .item-dr-la");async function e(){window.innerWidth<=1024&&(document.querySelector(".item-onstxt").addEventListener("click",(function(){document.body.classList.add("srch-opnd")})),document.querySelectorAll(".cancel-btn").forEach((function(e){e.addEventListener("click",(function(){document.body.classList.remove("srch-opnd")}))})))}t.forEach(((e,n)=>{e.addEventListener("click",(()=>{var r;r=n,e.classList.toggle("active"),t.forEach(((e,t)=>{t!==r&&e.classList.remove("active")}))}))})),window.addEventListener("mouseup",(function(e){t.forEach((t=>{e.target.closest(".item-dr-la")||e.target.closest(".item-dr-c")||t.classList.remove("active")}))})),document.querySelectorAll(".item-cl").forEach((function(e){e.addEventListener("click",(function(){e.closest(".item-dr-c").previousElementSibling.classList.contains("active")&&e.closest(".item-dr-c").previousElementSibling.classList.remove("active")}))})),e(),window.addEventListener("resize",e)}}(),window.addEventListener("scroll",(async function(){window.scrollY>10?document.body.classList.add("scroll"):document.body.classList.remove("scroll")})),n(),window.addEventListener("resize",n),async function(){var e=document.querySelectorAll(".a-b-1, .a-b-2, .a-b-3, .a-b-4, .a-b-5");null!=e&&e.forEach((e=>{e.addEventListener("click",(function(e){var t=e.offsetX,n=e.offsetY;if(document.getElementsByClassName("ripple").length<10){var r=document.createElement("span");r.classList.add("ripple"),r.style.left=t+"px",r.style.top=n+"px",this.appendChild(r),setTimeout((function(){r.remove()}),1e3)}}))}))}(),async function(){var e=document.querySelectorAll(".video-play");null!=e&&e.forEach((e=>{e.addEventListener("playing",(function(){e.closest("figure").classList.add("no-btn")})),e.addEventListener("pause",(function(){e.closest("figure").classList.remove("no-btn")}))}))}()}(),window.agSlider=function(e,t,n){var r={autoPlay:!1,autoPlayDelay:3e3,loop:!1,showControls:!0,btnLeft:".left-btn",btnRight:".right-btn",showBullets:!1,showBulletsAsThumb:!1,bulletContainer:".bullets",itemWrapper:".agy-caro-in",wrapperMask:0,itemContainer:".agy-caro-it"};null!=e&&null!=e&&(r=function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}(r,e)),null!=t&&null!=t||(t=".agy-caro");for(var o=document.querySelectorAll(t),i=0;null!=o&&null!=o&&o.length>i;i++)a(o[i]);function a(e){var t=e.querySelector(r.itemWrapper),o=t.querySelectorAll(r.itemContainer).length,i=t.querySelector(r.itemContainer).offsetWidth,a=Math.round(t.offsetWidth/i),s=0,l=o,c=null!=r.btnLeft&&null!=r.btnLeft?e.querySelector(r.btnLeft):null,u=null!=r.btnRight&&null!=r.btnRight?e.querySelector(r.btnRight):null,d=!1,f=t.offsetWidth==i,p=!1,h=0;!isNaN(r.wrapperMask)&&r.wrapperMask>0&&(r.wrapperMask=r.wrapperMask>100?100:r.wrapperMask,t.style.scrollPadding=r.wrapperMask+"%",o>2&&(p=!0));for(var m=t.querySelectorAll(r.itemContainer),g=0;g<m.length;g++)m[g].classList.add("idx-"+g),p&&g==m.length-1&&(t.prepend(m[g]),h=t.scrollLeft);if(null!=c&&(r.showControls||(c.style.display="none"),c.addEventListener("click",(()=>{(0!=s||r.loop)&&(0==s?(t.scrollLeft=i*(o-1),A(i*(o-a))):(t.scrollLeft=t.scrollLeft+-i,A(f?(s-1)*i:t.scrollLeft+-i)))}))),null!=u&&(r.showControls||(u.style.display="none"),u.addEventListener("click",(()=>{(l!=o-1||r.loop)&&(l==o-1?(t.scrollLeft=0,A(h)):(t.scrollLeft=t.scrollLeft+ +i,A(f?(s+1)*i:t.scrollLeft+ +i)))}))),r.showBullets){if(null==e.querySelector(r.bulletContainer)||null==e.querySelector(r.bulletContainer))return void(r.showBullets=!1);for(g=0;g<Math.round(o/a);g++){var v=r.showBulletsAsThumb||f?document.createElement("div"):document.createElement("button");if(v.classList.add("dot"),v.classList.add("idx-"+g),v.setAttribute("idx",g),r.showBulletsAsThumb&&f){var y=document.createElement("img"),b=null!=t.querySelector(r.itemContainer+".idx-"+g+" img")?t.querySelector(r.itemContainer+".idx-"+g+" img"):t.querySelector(r.itemContainer+".idx-"+g+" video");y.setAttribute("src","IMG"==b.nodeName?b.getAttribute("data-src"):b.getAttribute("data-thumb")),v.appendChild(y)}0==g&&v.classList.add("active"),v.addEventListener("click",(e=>{L(parseInt(e.currentTarget.getAttribute("idx")))})),e.querySelector(r.bulletContainer).appendChild(v)}}if(r.showBulletsAsThumb){var x=e.querySelector(r.bulletContainer).querySelector(".dot").offsetWidth;null!=c&&c.addEventListener("click",(()=>{e.querySelector(r.bulletContainer).scrollLeft-=x})),null!=u&&u.addEventListener("click",(()=>{e.querySelector(r.bulletContainer).scrollLeft+=x}));var w,E,C=!1;e.querySelector(r.bulletContainer).addEventListener("mousedown",(t=>{C=!0,e.querySelector(r.bulletContainer).classList.add("dragging"),w=t.pageX,E=e.querySelector(r.bulletContainer).scrollLeft})),e.querySelector(r.bulletContainer).addEventListener("mousemove",(t=>{C&&(e.querySelector(r.bulletContainer).scrollLeft=E-(t.pageX-w))})),document.addEventListener("mouseup",(()=>{C=!1,e.querySelector(r.bulletContainer).classList.remove("dragging")}))}function L(e){e,r.autoPlay=!1,d=!0,t.scrollLeft=e*a*i,A(e*a*i)}function A(n){s=Math.round((n-h)/i),l=Math.round(s+a-1);for(var f=0;f<o;f++){if(t.querySelector(r.itemContainer+".idx-"+f).classList.remove("active"),f>=s&&f<=l){if(f<=l-(p?1:0)&&(t.querySelector(r.itemContainer+".idx-"+f).classList.add("active"),null!=t.querySelector(r.itemContainer+".idx-"+f+" video"))){var m=t.querySelector(r.itemContainer+".idx-"+f+" video");m.setAttribute("src",m.getAttribute("data-src")),m.pause(),m.currentTime=0,m.play(),d=!0,m.addEventListener("ended",(function(e){d=!1}),!1)}t.querySelectorAll(r.itemContainer+".idx-"+f+" img").forEach((e=>{e.setAttribute("src",e.getAttribute("data-src"))}))}p&&0==f&&t.querySelectorAll(r.itemContainer+".idx-"+(o-1)+" img").forEach((e=>{e.setAttribute("src",e.getAttribute("data-src"))}))}if(0!=s||r.loop?c.classList.remove("disabled"):c.classList.add("disabled"),l!=o-1||r.loop?u.classList.remove("disabled"):u.classList.add("disabled"),r.showBullets)for(f=0;f<Math.round(o/a);f++)f!=Math.round((s+a)/a)-1?e.querySelector(r.bulletContainer+" .dot.idx-"+f).classList.remove("active"):e.querySelector(r.bulletContainer+" .dot.idx-"+f).classList.add("active")}r.autoPlay&&(!function e(){setTimeout((function(){d||u.click(),e()}),r.autoPlayDelay)}(),t.addEventListener("mouseenter",(function(){t.offsetWidth!=i&&(d=!0)})),t.addEventListener("mouseleave",(function(){t.offsetWidth!=i&&(d=!1)}))),A(t.scrollLeft),null!=n&&null!=n&&n(e)}},agora((function(){$(document).on("click","[data-for]",(function(e){try{var t=$(this).data("for");$('[for="'+t+'"]').trigger("click")}catch(e){}}))})),async function(){var e=!1;async function t(){var e=null;return null!=window.localStorage.getItem("AGUSER")&&(e=JSON.parse(window.localStorage.getItem("AGUSER"))),e}async function n(e){if(null==e)window.localStorage.removeItem("AGUSER"),document.body.dispatchEvent(new CustomEvent("ag.user.clear"));else if(e.Guid){var t={};t.Guid=e.Guid,t.Name=e.Name,t.FirstName=e.FirstName,t.LastName=e.LastName,t.Email=e.Email,t.Phone=e.Phone,t.MobilePhone=e.MobilePhone,window.localStorage.setItem("AGUSER",JSON.stringify(t)),async function(){}()}}async function r(){document.querySelectorAll("[ag-user]").forEach((function(n){!async function(n){n.classList.add("is-applied");n.cloneNode(!0);var r=await t();if(null!=r){!async function(){e?o():document.body.addEventListener("ag.sync.verified.contact",(function(){o()}));document.body.addEventListener("ag.lazy.refresh",(function(){o()})),document.body.addEventListener("ag.user.refresh.collection",(function(){o(!0)})),document.body.addEventListener("ag.user.clear.collection",(function(){window.localStorage.removeItem("AGUSERCOLLECTION3")})),document.body.addEventListener("ag.user.clear",(function(){document.body.dispatchEvent(new CustomEvent("ag.user.clear.collection"))}))}();var a=await async function(e){var t=new i("p");t.a("ag-user","");var n=t.n("button");n.a("class","user-logged-in a-b-1 f-s-2 u-logined s-c-p m-l-16 xa-b-w-l r-b"),n.h(e.Name),n.cl((function(e){return e.preventDefault(),n.node.classList.contains("active")?n.node.classList.remove("active"):n.node.classList.add("active"),!1}));var r=t.n("span");return r.n("span").h("Hi, "+e.Name),r.n("input").a("type","hidden").a("id","CONTACT_GUID").a("value",e.Guid),r.n("a").a("href","/dashboard/default.aspx").h("Dashboard"),r.n("span").a("data-modaldialog-src","/dashboard/EditProfile.aspx").a("data-modaldialog-ajax","true").a("data-modaldialog","").h("Edit Profile"),r.n("a").a("href","/dashboard/SignOut.aspx").a("data-agora-icon","").h("Log out").cl((function(){document.body.dispatchEvent(new CustomEvent("ag.user.out"))})),t.node}(r);n.parentElement.insertBefore(a,n),n.remove()}}(n)}))}async function o(e){var t=await async function(e,t){return new Promise((async function(n,r){var o=null,i=t?null:window.localStorage.getItem("AGUSERCOLLECTION"+e);null==i?(o=await window.agRequest.GET("/services/agoraClient.ashx",{type:"USERCOLLECTION",collectionType:e}),window.localStorage.setItem("AGUSERCOLLECTION"+e,JSON.stringify(o)),n(o)):n(o=JSON.parse(i))}))}(3,e);t.Items.reduce((function(e,t){return e?[...e,...t.Items]:[...t.Items]}),[]).forEach((async function(e){!async function(e,t){var n=document.querySelectorAll('[data-perform-action-url*="pk='+e.PK+'"][data-perform-action-url*="rt='+e.RT+'"]');n.forEach((async function(e){e.setAttribute("ag-user-collection",t)}))}(e,3)}))}function i(e){return this.node=document.createElement(e),this}document.body.addEventListener("ag.user.in",(function(e){n(e.detail)})),document.body.addEventListener("ag.user.out",(function(e){n(null)})),i.prototype.a=function(e,t){return this.node.setAttribute(e,t),this},i.prototype.n=function(e){var t=new i(e);return this.node.appendChild(t.node),t},i.prototype.h=function(e){return this.node.innerHTML=e,this},i.prototype.cl=function(e){return this.node.removeEventListener("click",e),this.node.addEventListener("click",e),this},window.agUser={collection:{refresh:function(){document.body.dispatchEvent(new CustomEvent("ag.user.refresh.collection"))}}},r(),document.body.addEventListener("ag.sync.check",(async function(){var n=await t(),r=window.localStorage.getItem("AGSYNC");null==r||null==n||JSON.parse(r).ContactGuid==n.Guid?(document.body.dispatchEvent(new CustomEvent("ag.sync.verified.contact")),e=!0):document.body.dispatchEvent(new CustomEvent("ag.sync.set",{detail:{contactguid:n.Guid,eventType:"contact"}}))})),document.body.addEventListener("ag.sync.verified",(async function(){document.body.dispatchEvent(new CustomEvent("ag.sync.verified.contact")),e=!0}))}(),async function(){async function e(){var e=window.localStorage.getItem("AGSYNC");if(null!=e){var t=JSON.parse(e),n=new Date(t.updatedOn),r=new Date;if(r.setMinutes(r.getMinutes()-1),n>r)return void document.body.dispatchEvent(new CustomEvent("ag.sync.verified"))}!async function(){var e=await window.agRequest.GET("/services/agoraClient.ashx",{type:"SYNC"});e.updatedOn=new Date,window.localStorage.setItem("AGSYNC",JSON.stringify(e)),document.body.dispatchEvent(new CustomEvent("ag.sync.check"))}()}!async function(){document.body.addEventListener("ag.sync.set",(async function(e){await window.agRequest.POST("/services/agoraClient.ashx",Object.assign({type:"SET"},e.detail)),e.detail?.eventType&&document.body.dispatchEvent(new CustomEvent("ag.sync.verified."+e.detail.eventType))})),document.body.addEventListener("ag.sync.invalid",(async function(e){document.body.dispatchEvent(new CustomEvent("ag.sync.reset")),window.location.reload()})),e()}()}();var t=new CustomEvent("onAgoraLoad");document.dispatchEvent(t),document.isAgoraLoaded=!0,t=new CustomEvent("onCssLoad"),document.dispatchEvent(t),document.isCssLoaded=!0,function(){function t(t,n,r,o){if(!t.closest("div[contenteditable]").attr("contenteditable")&&void 0!==n||void 0!==r)switch((o=void 0!==o?o:"gallery").toLowerCase()){case"gallery":var i=t.find('[data-sort-object="CMNCMN"]');("undefined"!=i&&null!=i&&i.length>0||!n.match(/(^|\/)(d)?sort\-[a-z]+/g))&&(n=(function(t){var n=t.find('[data-sort-object="CMNCMN"]');if("undefined"!=n&&null!=n&&n.length>0&&e(n.val()))return n.val();return function(e){switch(e){case"PROPERTY":case"PROPERTYRENT":return"/dsort-p";case"AGENT":case"AGENTTEAM":case"OFFICE":return"/sort-n"}return""}("PROPERTY")}(t)+"/"+n.replace("http://","").replace(/(^|\/)(d)?sort\-[a-z]+/g,"")).replace("//","/")),$.ajax({type:"POST",url:"/services/MAX/agoraGetGalleryView.aspx",data:{UrlQuery:n,TypeOfSearch:"SALE",IsContentPage:"true",DemandKey:r},dataType:"html",success:function(i){if(!t.closest("div[contenteditable]").attr("contenteditable")){var a='<section class="result-page" data-ck-propertylist="" data-ck-demand-key="'+r+'" data-ck-property-url="'+n+'" data-ck-demand-layout="'+o+'">'+i+"</section>";t.after(a),t.remove(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom(),$('[data-ck-demand-key="'+r+'"] #propertyGrid').each((function(){$(this).find(".property:not(.init)").each((function(){!function(t){var n=t,r=n.find(".slides");r.attr("data-css-slider","0");var o=n.find("[data-mk]").data("mk"),i=n.find("[data-mlsboard]").data("mlsboard"),a=n.find("[data-detail-url]").data("detail-url"),s=$("[data-pcode]").data("pcode"),l=n.find("[data-mls-photo]").data("mls-photo"),c=n.find("[data-native-tab]").data("native-tab");e(l)||(l="/images/company/"+s+"/NoPhotoImage/image-not-found.jpg");var u=parseInt(r.data("value"),10),d=n.closest("[id]"),f=0==n.length?"un":d.attr("id").replace(/\$/gi,"");(function(e,t,n,r,o,i,a,s){var l=0,c=n+r+o+"_";$('<input type="radio" aria-label="'+c+'slider" name="'+c+'slider" id="'+(c+l)+'" checked />').appendTo(i);var u=$('<div class="nav"></div>'),d=$('<label aria-label="next" aria-controls="myCarousel-items" data-css-slider-nav="propphoto" for="'+(c+(l+1))+'" class="next"><span aria-label="next" class="visuallyhidden">next</span></label>'),f=$('<label aria-label="prev" aria-controls="myCarousel-items" data-css-slider-nav="propphoto" for="'+(c+(parseInt(t,10)-1))+'" class="prev"><span aria-label="prev" class="visuallyhidden">prev</span></label>');if(f.on("click",m),d.on("click",m),f.appendTo(u),d.appendTo(u),"PSB"==$("[data-pcode]").data("pcode"))var p="";else p='target = "_blank"';"undefined"!=s&&""!=s&&1==s&&(p="");var h=$('<li class="slide-container" aria-roledescription="carousel" role="contentinfo"><div class="slide"><div class="Prop_img" role="img" aria-label="bannerImage" style="background-image:url(\''+e+'\');"><a aria-label="'+c+'slider"'+p+'href="'+a+'"></a></div></div></li>');function m(){var e=$(this);f.off("click"),d.off("click"),$.ajax({url:"/services/agoraPropertyPhotos.aspx",data:{mlsboard:r,mlsno:o,container:c},success:function(t){i.append(t),e.trigger("click")}})}h.append(u),h.appendTo(i)})(l,u,f+(new Date).getMilliseconds(),i,o,r,a,c),n.addClass("init")}($(this))}))})),window.agLazy.refresh()}},error:function(){ShowLoading()}});break;case"carousel":$.ajax({type:"POST",url:"/services/agoraGetCarouselItem.aspx",data:{UrlQuery:n,TypeOfSearch:"SALE",IsContentPage:"true",DemandKey:r},dataType:"html",success:function(e){if(!t.closest("div[contenteditable]").attr("contenteditable")){var i='<section class="result-page" data-ck-propertylist="" data-ck-demand-key="'+r+'" data-ck-property-url="'+n+'" data-ck-demand-layout="'+o+'">'+e+"</section>";t.after(i),$('[data-query-list]:not(.init)[data-service-url][data-rt^="CMN"]').each((function(){$(this).trigger("init"),$(this).addClass("init")})),t.remove(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom()}},error:function(){ShowLoading()}})}}$("img[data-demand-key]").each((function(){t($(this),$(this).data("demand-url"),$(this).data("demand-key"),$(this).data("layout"))})),$(document).on("click","[data-ck-href]",null,(function(){t($(this).parents("[data-ck-propertylist]:first"),$(this).data("ck-href"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-key"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-layout"))})),async function(){var e,t,n={languages:[{code:"en",label:"English"},{code:"es",label:"Spanish",localLabel:"Español"},{code:"nl",label:"Dutch",localLabel:"Nederlands"},{code:"pr",label:"Portugese",localLabel:"Português"},{code:"fr",label:"French",localLabel:"Français"}],currencies:[{code:"USD",base:"USD",label:"Dollar",format:"$###,###,###.##"},{code:"AED",base:"USD",label:"United Arab Emirates Dirham",format:"AED###,###,###.##"},{code:"BSD",base:"USD",label:"Bahamian Dollar",format:"B$###,###,###.##"},{code:"CAD",base:"USD",label:"Canadian Dollar",format:"$###,###,###.##"},{code:"DOP",base:"USD",label:"Dominican Peso",format:"RD$###,###,###.##"},{code:"EUR",base:"USD",label:"Euro",format:"€###,###,###.##"},{code:"JMD",base:"USD",label:"Jamaican Dollar",format:"J$###,###,###.##"},{code:"KYD",base:"USD",label:"Cayman Islands Dollar",format:"CI$###,###,###.##"},{code:"MXN",base:"USD",label:"Mexican Peso",format:"$###,###,###.##"},{code:"PAB",base:"USD",label:"Panamanian Balboa",format:"B/.###,###,###.##"}],units:[{code:"imperial",label:"Imperial"},{code:"metric",label:"Metric"}],presets:[{code:"BS",label:"Bahamas",currency:"BSD",language:"en",messurement:"metric"},{code:"CA",label:"Canada",currency:"CAD",language:["en","fr"],messurement:"metric"},{code:"JM",label:"Jamaica",currency:"JMD",language:"en",messurement:"metric"},{code:"KY",label:"Cayman Islands",currency:"KYD",language:"en",messurement:"metric"},{code:"TC",label:"Turks & Caicos Islands",localLabel:"",currency:"USD",language:"en",messurement:"metric"},{code:"US",label:"United States",localLabel:"",currency:"USD",language:"en",messurement:"imperial"},{code:"DY",label:"Dominican Republic",localLabel:"República Dominicana",currency:"USD",language:"en",messurement:"metric"},{code:"ES",label:"Spain",localLabel:"España",currency:"USD",language:"en",messurement:"metric"},{code:"MX",label:"Mexico",localLabel:"México",currency:"MXN",language:"en",messurement:"metric"},{code:"PA",label:"Panama",localLabel:"Panamá",currency:"PAB",language:"en",messurement:"metric"},{code:"NL",label:"Nederlands",localLabel:"Nederland",currency:"EUR",language:"en",messurement:"metric"},{code:"PT",label:"Portugal",currency:"EUR",language:"en",messurement:"metric"}],unitConvertions:[{unit:"SQFT",tragetUnit:"Sq.M",constant:.092903,notation:["Sqft","Sq.Ft","Sq.Ft.","Sq. Ft.","SF"]},{unit:"MI",tragetUnit:"KM",constant:1.60934,notation:["mi","miles","mile"]},{unit:"AC",tragetUnit:"SQM",constant:4046.86,notation:["acre","acres"]},{unit:"LOTSIZE",tragetUnit:"Lot Size",targetNotation:"㎡",constant:4046.86,notation:["Lot Size"]}]},r=null;async function o(){var e=b();if(null==r&&(r=Object.assign({},e)),e?.language==r?.language){r=Object.assign({},e);var t=await async function(){return new Promise((async function(e,t){var n=await async function(){var e=window.localStorage.getItem("LOCALLABELS"),t=null;null!=e&&(t=JSON.parse(e));return t}(),r=b();if(null!=n){var o=new Date;if(o.setHours(o.getHours()-1),new Date(n.updatedOn)>o&&n.Locale.indexOf(r.language)>-1)return void e(n)}(n=await T("/services/agoraClient.ashx",{type:"LABELS"})).updatedOn=new Date,i(n),e(n)}))}();e?.language&&-1==t.Locale.indexOf(e.language)&&(await C("language"),window.location.reload());var n=document.querySelectorAll("[ag-l-k]");n&&n.forEach((function(e){!async function(e,t){var n=e.getAttribute("ag-l-k"),r=null;if(t[n]||s.test(n))if(e.childNodes&&1==e.childNodes.length)if(s.lastIndex=0,s.test(n)){s.lastIndex=0;for(var o=n;null!=(r=s.exec(o));)o=o.replace(r[0],t[r.groups.LabelID]?t[r.groups.LabelID].lbl:"");e.childNodes[0].textContent=o}else e.childNodes[0].textContent=t[n]?t[n].lbl:"";else if(t[n]){var i=document.createElement("span");i.innerHTML=t[n].lbl,l(e,i)}for(var c=0;c<e.attributes.length;c++){var u=e.attributes[c];if(a.lastIndex=0,null!=(r=a.exec(u.name))){for(var d=r.groups.Attribute,f=u.value;null!=(r=s.exec(f));)f=f.replace(r[0],t[r.groups.LabelID]?t[r.groups.LabelID].lbl:"");e.setAttribute(d,f)}}}(e,t.Labels)}))}else window.location.reload()}async function i(e){window.localStorage.setItem("LOCALLABELS",JSON.stringify(e))}var a=/ag\-l\-k\-(?<Attribute>[^\=]+)/gm,s=/\[(?<LabelID>[^\]]+)\]/gm;async function l(e,t){for(var n=0;n<t.childNodes.length;n++)if(t.childNodes[n]?.textContent&&e.childNodes[n]?.textContent)e.childNodes[n].textContent=t.childNodes[n]?.textContent;else{if(!(n<t.childNodes.length&&n<e.childNodes.length))return;l(e.childNodes[n],t.childNodes[n])}}async function c(e){var t,r,o=await async function(){return new Promise((async function(e,t){var n=localStorage.getItem("CONVERTIONRATES"),r=null;if(n&&null!=n){r=JSON.parse(n);var o=new Date;if(o.setDate(o.getDate()-1),new Date(r.updatedOn)>o)return void e(r)}(r=await T("/services/agoraClient.ashx",{type:"CONVERTIONRATES"})).updatedOn=(new Date).toISOString(),localStorage.setItem("CONVERTIONRATES",JSON.stringify(r)),e(r)}))}(),i=b();if(i.currency){var a=o.Rates?.ExchangeRates?.filter((function(e){return e.Code==i.currency}))[0],s=n.currencies.filter((function(e){return e.code==i.currency}))[0];s&&(a.formatter=(t=s.format,r=t.replace(/[#\,\.]+/gi,""),function(e){return r+e.toLocaleString("en-US")}));var l=a.Code,c=e?document.querySelectorAll("[ag-l-p]:not(.is-applied)"):document.querySelectorAll("[ag-l-p]");c&&c.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||(async function(e){if(!e.classList.contains("is-applied")){var t=e.getBoundingClientRect(),n=null,r=null!=(n=e.closest("article"))&&n.length>0?n[0].getBoundingClientRect():e.parentElement?.getBoundingClientRect(),o={y:(r.top+r.bottom)/2,x:(r.left+r.right)/2},i={y:(t.top+t.bottom)/2,x:(t.left+t.right)/2},a="ag-l-p-p";a+="-"+(o.x>i.x?"l":"r"),a+="-"+(o.y>i.y?"b":"t"),e.classList.add(a)}}(e),e.classList.add("is-applied"),async function(e,t,n){var r=null!=e.getAttribute("ag-l-p-c")&&null==e.getAttribute("ag-l-p-o");if(e.getAttribute("ag-l-p-c")==n&&r)return;for(var o=0;o<e.childNodes.length;o++){var i=e.childNodes[o],a=null;if(u.lastIndex=0,i.textContent&&null!=(a=u.exec(i.textContent))){r&&e.setAttribute("ag-l-p-o",a[0]),u.lastIndex=0;var s=Math.round(parseFloat(e.getAttribute("ag-l-p"))*t.Constant);return void(i.textContent=i.textContent.replace(a[0],t.formatter?t.formatter(s):s.toString()))}}}(e,a,l))}))}}var u=/(([^A-z0-9]|[A-Z]|[A-Z]{3})*\s?[0-9\,\.]+)/gm;async function d(e){var t="metric"==b().messurement,n=t?document.querySelectorAll("[ag-l-m]:not(.is-applied)"):document.querySelectorAll("[ag-l-m]");t?setTimeout((function(){n&&n.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||(f(e,e),e.classList.add("is-applied"))}))}),e?500:0):n&&n.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||(e.dispatchEvent(new CustomEvent("ag.language.messurement.revert")),e.classList.remove("is-applied"))}))}async function f(e,t,r,o,i){if(!o||!i){if(function(e){var t=n.unitConvertionSchema.haveValidAttribute(e)?n.unitConvertionSchema.getLabelForAttribute(e).match(n.unitConvertionSchema.notationExpression):null;return null!=t}(e)){var a=n.unitConvertionSchema.getLabelForAttribute(e),s=await p(a,1);n.unitConvertionSchema.setLabelForAttribute(e,s.content);var l=n.unitConvertionSchema.getValueForAttribute(e),c=await h(l,2,s.units[0]);n.unitConvertionSchema.setValueForAttribute(e,c.content),t.addEventListener("ag.language.messurement.revert",(function(){n.unitConvertionSchema.setLabelForAttribute(e,a),n.unitConvertionSchema.setValueForAttribute(e,l)}))}else e?.childNodes?.length>0&&e.childNodes.forEach((async function(e){if(e?.textContent&&function(e){return n.unitConvertionSchema.expression.test(e.textContent)||n.unitConvertionSchema.notationExpression.test(e.textContent)}(e)){var r=e.textContent,o=await p(r);o.success?e.textContent=o.content:(o=await p(e.textContent,1),e.textContent=o.content,f(e.parentElement,t,!1,!0,o.units[0])),t.addEventListener("ag.language.messurement.revert",(function(){e.textContent=r}))}else f(e,t)}));return!1}e?.childNodes?.length>0&&e.childNodes.forEach((async function(e){if(e?.textContent){var n=e.textContent,r=await h(e.textContent,2,i);r.success&&(e.textContent=r.content,t.addEventListener("ag.language.messurement.revert",(function(){e.textContent=n})))}}))}async function p(e,t){var r=[],o=!1;for(var i of(t||(t=0),n.unitConvertions)){var a=await h(e,t,i);e=a.content,o|=a.success,a.success&&r.push(i),n.unitConvertionSchema.notationExpressions[i.unit].lastIndex=-1,n.unitConvertionSchema.notationOnlyExpressions[i.unit].lastIndex=-1}return{content:e,success:o,units:r}}async function h(e,t,r){for(var o=null,i=!1;null!=(o=m(e,r,t));){i=!0;var a=1==t?0:parseFloat(n.unitConvertionSchema.getValue(o.groups.V)),s=o.groups.N,l=o.index,c=l+o[0].length,u=(1!=t?o[0].replaceAll(o.groups.V,n.unitConvertionSchema.formatValue(a*r.constant)):o[0]).replaceAll(s,r.tragetUnit);if(2==t&&r.targetNotation&&(u+=" "+r.targetNotation),e=e.substring(0,l)+u+e.substring(c),2==t)return{content:e,success:i}}return{content:e,success:i}}function m(e,t,r){return 0==r?n.unitConvertionSchema.notationExpressions[t.unit].exec(e):1==r?n.unitConvertionSchema.notationOnlyExpressions[t.unit].exec(e):2==r?(n.unitConvertionSchema.valueExpression.lastIndex=-1,n.unitConvertionSchema.valueExpression.exec(e)):null}async function g(t){y("US").split(" ").map((function(e){t.classList.add(e)})),document.body.addEventListener("ag.language.update",(function(e){t.className=t.className.replace(/fflag\-[A-Z]{1,2}/gi,""),y(e.detail.code).split(" ").map((function(e){t.classList.add(e)}));b()})),t.addEventListener("click",(async function(r){e||(e=await async function(){var e,t,r=new S("span"),o=r.n("span");function i(e){A(t,"Language","language",e,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e?e.localLabel?e.localLabel:e.label:""}))}A(o,"Location","code",n.presets,(function(e,t){e.n("i").a("class",y(t.code)),e.n("b").h(t.localLabel?t.localLabel:t.label)}),(function(t,r){return e.a("class",y(t.code)),i(n.languages.filter((function(e){return Array.isArray(t.language)?t.language.indexOf(e.code)>-1:e.code==t.language}))),r||document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:t})),t.localLabel?t.localLabel:t.label})),e=o.n("i"),t=r.n("span"),i(n.languages),A(r.n("span"),"Currency","currency",n.currencies,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),A(r.n("span"),"Property Messurement","messurement",n.units,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),A(r.n("span"),"Distance Messurement","messurement",n.units,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),r.node.setAttribute("ag-language-select",""),document.body.appendChild(r.node);var a=b();a?.code&&document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:a}));return r}()),r.stopPropagation(),async function(t){var n=t.getBoundingClientRect();e.node.style.top=Math.floor(n.top-8)+"px",e.node.style.right="calc(100% - "+Math.floor(n.right+8)+"px)",e.node.querySelectorAll(".active")?.forEach((function(e){e.classList.remove("active")})),e.node.classList.add("active")}(t),document.body.addEventListener("click",v)}))}function v(t){t.stopPropagation(),null==t.target.closest("[ag-language-select],[ag-language]")&&(document.body.removeEventListener("click",v),async function(t){e.node.classList.remove("active")}(t.target))}function y(e){return"fflag ff-lg fflag-"+e}function b(){var e=window.localStorage.AGLANGUAGE,t={};return e&&""!=e&&(t=JSON.parse(e)),t}var x=null,w=null;function E(e,t){var n=b();if(null==n&&(n={}),!n[e]||n[e]!=t){n[e]=t,window.localStorage.setItem("AGLANGUAGE",JSON.stringify(n)),null!=x&&clearTimeout(C),x=setTimeout((async function(){x=null,await C(e),null!=w&&(w(),w=null)}),100);var r=w;w=function(){null!=r&&r(),document.body.dispatchEvent(new CustomEvent("ag.language.change."+e))}}}async function C(e){var n=b();JSON.stringify(t)!=JSON.stringify(n)&&(t=n,n&&n.code&&await window.agRequest.POST("/services/agoraClient.ashx",Object.assign({type:"SET"},n)))}var L={};function A(t,n,r,o,i,a){var s=n.toLowerCase().replace(/[^A-z0-9]/gi,""),l=!!L["itemList"+s];l||t.h(n);var c=l?L["itemList"+s]:L["itemList"+s]=t.n("span"),u=l?L["itemListValue"+s]:L["itemListValue"+s]=c.n("label");if(u.h("Selected Value"),!l){u.cl((function(t){t.stopPropagation(),e.node.querySelectorAll(".active")?.forEach((function(e){e!=u.node&&e.classList.remove("active")})),u.node.classList.contains("active")?u.node.classList.remove("active"):u.node.classList.add("active")}))}var d=l?L["itemOptions"+s]:L["itemOptions"+s]=c.n("span");d.h(""),o.map((function(e){var t=d.n("label");t.cl((function(){u.node.classList.remove("active"),E(r,e.code),u.h(a(e))})),i(t,e)})),r&&""!=r&&(L["General"+s]||(L["General"+s]=function(e){document.body.dispatchEvent(new CustomEvent("ag.language.update."+s,{detail:e.detail}))},document.body.addEventListener("ag.language.update",L["General"+s])),L["Field"+s]||(L["Field"+s]=function(e){var t=e.detail[r],n=Array.isArray(t)?t[0]:t,i=o.find((function(e,t){return e.code==n}));a&&(E(r,n),u.h(a(i,!0)))},document.body.addEventListener("ag.language.update."+s,L["Field"+s])))}function S(e){return this.node=document.createElement(e),this}async function T(e,t){var n="";for(var r in t)n=n+(""!=n?"&":"")+r+"="+t[r];return e+=e.indexOf("?")>-1?"&":"?"+n,(await fetch(e,{method:"GET",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()}S.prototype.a=function(e,t){return this.node.setAttribute(e,t),this},S.prototype.n=function(e){var t=new S(e);return this.node.appendChild(t.node),t},S.prototype.h=function(e){return this.node.innerHTML=e,this},S.prototype.cl=function(e){return this.node.removeEventListener("click",e),this.node.addEventListener("click",e),this},window.agLanguage={refresh:function(){document.body.dispatchEvent(new CustomEvent("ag.language.refresh.currency"))}},async function(){document.querySelectorAll("[ag-language]").forEach(g);var e=b();if(e?.code)document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:e}));else{for(var t in e=n.presets.filter((function(e){return"US"==e.code}))[0])E(t,Array.isArray(e[t])?e[t][0]:e[t]);document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:e}))}c(!0),e.language&&-1==e.language.indexOf("en")?o():(r=Object.assign({},e),i({Locale:"en_US"})),async function(){document.body.addEventListener("ag.language.change.language",(function(){o()})),document.body.addEventListener("ag.language.change.currency",(function(){c()})),document.body.addEventListener("ag.language.change.messurement",(function(){d()})),document.body.addEventListener("ag.lazy.refresh",(function(){d()})),document.body.addEventListener("ag.language.refresh.currency",(function(){c()}))}(),n.unitConvertionSchema=await async function(){var e="",t="",r={notationExpressions:{},notationOnlyExpressions:{},getValue:function(e){return parseFloat(e.replaceAll(/[^0-9\\.]/gi,""))},formatValue:function(e){return e.toLocaleString("en-US",{maximumFractionDigits:2})},haveValidAttribute:function(e){return!!e.hasAttribute&&e.hasAttribute("data-th")},getLabelForAttribute:function(e){return e.getAttribute?e.getAttribute("data-th"):""},setLabelForAttribute:function(e,t){e.setAttribute&&e.setAttribute("data-th",t)},getValueForAttribute:function(e){return e.innerText},setValueForAttribute:function(e,t){e.innerText=t}};return n.unitConvertions.forEach((function(n){var o="",i="";n.notation.forEach((function(e){i+=(""!=i?"|":"")+"((?<N>"+e.replaceAll(/\s/gi,"\\s").replaceAll(/([^0-9A-z])/gi,"\\$1")+")(\\s|[^A-z]|$))",o+=(""!=o?"|":"")+"((?<V>[0-9\\,\\.]+)(\\n|\\s)*(?<N>"+e.replaceAll(/\s/gi,"\\s").replaceAll(/([^0-9A-z])/gi,"\\$1")+")(\\s|[^A-z]|$))"})),r.notationExpressions[n.unit]=new RegExp(o,"gmi"),r.notationOnlyExpressions[n.unit]=new RegExp(i,"gmi"),e+=(""!=e?"|":"")+"("+o+")",t+=(""!=t?"|":"")+"("+i+")"})),r.expression=new RegExp(e,"gmi"),r.notationExpression=new RegExp(t,"gmi"),r.valueExpression=new RegExp("((?<V>[0-9\\,]+(\\.[0-9]+)?)(\\n|\\s)*)","gmi"),r}(),d(!0)}()}(),$(document).on("change",'[data-ck-propertylist] [data-sort-object="CMNCMN"]',{},(function(){t($(this).parents("[data-ck-propertylist]:first"),$(this).parents("[data-ck-property-url]:first").data("ck-property-url"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-key"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-layout"))}))}(),function(){function t(e){setTimeout((function(){var t=$(e).closest("[data-search-form]"),n=composeUrlQuery({select:t}),r=t.data("search-form"),o=$('[data-sort-object="'+r+'"]'),i=t.data("default-search"),a=t.data("default-sort");if(void 0!==i&&""!=i&&-1==n.indexOf("/address-")&&-1==n.indexOf("/mls-")&&(n+=i),o.length>0){var s=o.val();n+=null!=s&&""!=s?s:""}else void 0!==a&&null!=a&&""!=a&&(n+=a);t.triggerHandler("search",[{query:n}])}),200)}$(document).on("click","[data-search-form] [data-search-button]",{},(function(){t(this)})),$(document).on("keydown","[data-search-form] [data-search-action]",{},(function(e){13==e.keyCode&&t(this)})),$("[data-search-form]").on("search",(function(t,n){var r=$(this),o=r.data("search-prefix"),i=e(o)&&"undefined"!=o?o:function(e){switch(e){case"PROPERTY":return"/properties";case"PROPERTYRENT":return"/property-search-map-on-rent";case"PROPERTYSOLD":return"/property-search-map/sold";case"AGENT":case"AGENTTEAM":return"/real-estate-agents";case"OFFICE":return"/real-estate-offices";case"BLOG":return"/blog/search"}return"/"}(r.data("search-form"));/^\/\//.test((null!=i&&""!=i&&"undefined"!=i?i:"")+n.query)||(window.location=(null!=i&&""!=i&&"undefined"!=i?i:"")+n.query)}))}()},368:()=>{(async function(){var systemFunctions={};function Interpolation(e,t,n,r=[],o=[],i=(()=>{})){let a=new RegExp("\\{\\{[^\\}]+\\}\\}","gi"),s=e=>{i()},l="";for(let e of t.getAttributeNames()){let n=t.getAttribute(e);null!=n&&u(n,(n=>{t.setAttribute(e,n),c(t)}))}function c(e){null!=e&&(e.classList.contains("aga-fake-contains")||e.classList.contains("ag-fake-inline-contains"))&&(e.classList.remove("ag-fake-contains"),e.classList.remove("ag-fake-inline-contains"),1==e.childNodes[0].nodeType&&e.childNodes[0].remove())}function u(e,r){let o=e.match(a),i=()=>"",c=()=>{r(i())};if(null!=o){l=e;let r=[],a=!1;o.forEach((e=>{let o=e.substring(2,e.length-2);l=l.replace(e,`\${typeof(${o})!='undefined'&&${o}!=null?${o}:''}`);let i=ExtractVariablesTopLevelIdentifiers(o);r.push(...i.filter((e=>r.indexOf(e)<0))),o!=r[r.length-1]&&Watch(t,n,r[r.length-1],((e,t,n)=>{c()})),IsFunction(systemFunctions,o)?(a=!0,ExtractArgumentVariablesForFunctionFromString(o).forEach((e=>{Watch(t,n,e,((e,t,n)=>{c()}))}))):Watch(t,n,o,((e,t,n)=>{c()}))}));let u=new Function(`try{const {${r.join(",")}} = this; return \`${l}\`; }catch(e){ console.error(e); }return '';`).bind(a?interpolateObject(n):n);i=()=>u();let d=s;s=e=>{c(),d(e)}}}t.childNodes.forEach((t=>{if(t.nodeType==Node.ELEMENT_NODE){Interpolation(e,t,n,r,o,(()=>{}));let i=t;for(let e of i.getAttributeNames()){let t=i.getAttribute(e);null!=t&&u(t,(t=>{i.setAttribute(e,t),c(i)}))}}t.nodeType==Node.TEXT_NODE&&null!=t.textContent&&t.textContent.trim().length>0&&(0==t.textContent.indexOf("{{")&&t.textContent==t.parentElement.innerText?u(t.textContent,(e=>{c(t.parentElement),t.parentElement.innerHTML=e})):u(t.textContent,(e=>{c(t.parentElement),t.textContent=e})))})),s(n)}function interpolateObject(e){return Object.assign(e,systemFunctions)}function PreInterpolation(e,t){null==t&&(t=e);let n=t.hasAttribute("ag-fake");if(n)for(let t of e.getAttributeNames()){let n=e.getAttribute(t);null!=n&&n.indexOf("{{")>-1&&e.setAttribute(t,n.replace(/(\{\{)|(\}\})/gi,"")),e.classList.add("ag-fake-inline-contains")}e.childNodes.forEach((e=>{if(e.nodeType==Node.ELEMENT_NODE&&"OPTION"!=e.nodeName){if(PreInterpolation(e,t),n)for(let t of e.getAttributeNames()){let n=e.getAttribute(t);null!=n&&n.indexOf("{{")>-1&&e.setAttribute(t,n.replace(/(\{\{)|(\}\})/gi,""))}}else if(e.nodeType==Node.TEXT_NODE&&null!=e.textContent&&e.textContent.indexOf("{{")>-1&&e.textContent.trim().length>0){let t=document.createElement("i");t.classList.add("ag-fake");let r=e.parentElement;null==r||r.classList.contains("ag-fake-contains")||(r.insertBefore(t,r.firstChild),r.classList.add("ag-fake-contains"),n&&(e.textContent=e.textContent.replace(/(\{\{)|(\}\})/gi,"")))}}))}function Watch(){}function GetValue(e,t){if(t.indexOf("(")<0&&t.indexOf(".")>-1){let n=t.substring(0,t.indexOf(".")),r=t.substring(t.indexOf(".")+1,t.length);return GetValue(e[n],r)}return t.indexOf("(")>-1?getValueFromFunction(e,t):null!=e?e[t]:void 0}function IsFunction(e,t){return t.indexOf("(")>-1&&"function"==typeof e[getFunctionName(t)]}function GetProxyObject(e){if(void 0===e||null==e)return e;let t={};for(let n in e)SetPropertyToProxyObject(e,t,n);return t}function SetPropertyToProxyObject(e,t,n){"function"==typeof e[n]?t[n]=e[n]:Object.defineProperty(t,n,{get:()=>e[n],set(t){e[n]=t,Notify(null,e,n,!0)},enumerable:!0,configurable:!0})}function SetPropertyDescriptorToProxyObject(e,t,n){Object.defineProperty(e,t,n)}function ConverObjectToArgumentArray(e){let t={arguments:[],values:[]};for(let n in e)t.arguments.push(n),t.values.push(e[n]);return t}function insertAfter(e,t){null!=t.parentNode&&t.parentNode.insertBefore(e,t.nextSibling)}function insertBefore(e,t){t.parentNode.insertBefore(e,t)}let variablesFromStringExpression=new RegExp("((?<string>([\"'`].*?[\"'`]))|(?<boolean>(true|false))|((?<function>[A-z_][A-z0-9.$]+)[(])|(?<identifier>[A-z_][A-z0-9.$]+))","gi"),variableTopLevelIdentifiersExpression=new RegExp("(?<variable>[A-z0-9_\\$]+)(((\\.[^\\s\\=\\&\\|]*)|\\())?","gi");function ExtractVariablesTopLevelIdentifiers(e){let t=[];try{let n=null;for(;null!=(n=variableTopLevelIdentifiersExpression.exec(e));)n.groups&&n.groups.variable&&t.push(n.groups.variable)}catch(e){}return t}function ExtractVariablesFromString(e){let t={functions:[],identifiers:[]};try{let n=null;for(;null!=(n=variablesFromStringExpression.exec(e));)n.groups&&(n.groups.identifier&&t.identifiers.push(n.groups.identifier),n.groups.function&&t.functions.push(n.groups.function))}catch(e){}return t}function ExtractArgumentVariablesForFunctionFromString(e){let t=[],n=e.indexOf("("),r=e.indexOf(")"),o=(n>-1&&e.substring(0,n),e.substring(n+1,r).match(new RegExp("[^,]+","gi")));return null!=o&&o.forEach((e=>{/^(_|[A-z])(_|[A-z]|[0-9]|\$)+$/.test(e.trim())&&t.push(e.trim())})),t}function getFunctionName(e){let t=-1;return(t=e.indexOf("("))>-1?e.substring(0,t):e}function getValueFromFunction(e,t){let n=[],r=t.indexOf("("),o=t.indexOf(")"),i=r>-1?t.substring(0,r):t,a=t.substring(r+1,o).match(new RegExp("[^,]+","gi"));return null!=a&&a.forEach((t=>{n.push(GetValue(e,t))})),"function"==typeof e[i]?e[i].apply(e,n):void 0}function If(e,t,n){t.querySelectorAll("[ag-if]",t).forEach((t=>{let r=[],o=t,i=t.parentElement,a=null,s=[],l="ag-if",c="ag-else-if",u="ag-else";for(;null!=o&&(t==o&&o.hasAttribute(l)||o.hasAttribute(c)||o.hasAttribute(u));){let e=o;e.classList.remove("ag-fake-mask"),o=e.nextElementSibling;let t=e.hasAttribute(l)?l:e.hasAttribute(c)?c:u,n=e.getAttribute(t);e.removeAttribute(t),null!=n&&ExtractVariablesFromString(n).identifiers.forEach((e=>{s.indexOf(e)<0&&s.push(e)})),r.push({node:e.cloneNode(!0),expression:n,position:e.nextSibling,isDefault:t==u}),e.remove()}let d=ConverObjectToArgumentArray(n),f=t=>{d=ConverObjectToArgumentArray(t),null!=a&&a.active.remove();for(let t of r){let r=!1;if(t.isDefault)r=t.isDefault;else{r=new Function(...d.arguments,`return ${t.expression};`)(...d.values)}if(r){a=t;try{let r=p(t.position);if(null!=i){let o=t.node.cloneNode(!0);t.active=o,i.insertBefore(o,r),TransformInternal(e,o,n)}}catch(e){console.log(e)}break}}};function p(e){return null==e||document.contains(e)?e:p(e.previousElementSibling)}for(let e of s)Watch(t,n,e,((e,t,n)=>{t&&f(e)}));f(n)}))}function PreIf(e){let t=e.querySelectorAll("[ag-if]",e),n=e.hasAttribute("ag-fake");t.forEach((e=>{let t=e,r=!1,o="ag-if",i="ag-else-if",a="ag-else";for(;null!=t&&(e==t&&t.hasAttribute(o)||t.hasAttribute(i)||t.hasAttribute(a));){let e=t;!r&&e.hasAttribute("ag-fake")?r=!0:r||!r&&!t.hasAttribute(a)?e.classList.add("ag-fake-mask"):r=!0,n&&(e.removeAttribute(o),e.removeAttribute(i),e.removeAttribute(a)),t=e.nextElementSibling}r||e.classList.remove("ag-fake-mask")}))}function For(html,dom,context){let htmlDocument=html,loops=dom.querySelectorAll("[ag-for]",dom);return loops.forEach((item=>{let fakeItem=item.nextElementSibling,fakeItemCount=0,isfakeItemCountReaded=!1,expression=new RegExp("\\s*([A-z0-9]+)\\s+(in)\\s+([A-z0-9\\.]+)\\s*","gi"),loopConstraint=item.getAttribute("ag-for");if(null==loopConstraint)return;let itratorFinished=item.getAttribute("ag-for-complete"),fieldsAndValue=expression.exec(loopConstraint),itrator=null!=fieldsAndValue?fieldsAndValue[1]:"",collection=null!=fieldsAndValue?fieldsAndValue[3]:"",htmlToClone=item.cloneNode(!0),htmlToCloneParent=item.parentElement,htmlToCloneLocation=item.nextSibling;htmlToClone.removeAttribute("ag-for"),item.remove();let itemElements=[],isDirtyFake=!1,collectionContext=getCollectionObject(context,collection),collectionContextField=getCollectionName(collection);try{SetPropertyDescriptorToProxyObject(collectionContext,`${collectionContextField}$for`,{value:0,writable:!0,enumerable:!0})}catch(e){}let render=e=>{for(let e of itemElements)e.remove();let t=GetValue(e,collection),n=0,r=!1;if(Array.isArray(t)){isDirtyFake=!0,htmlToCloneLocation=removePreFor(fakeItem);for(let e of t){let t=GetProxyObject(context);SetPropertyDescriptorToProxyObject(t,itrator,{get:()=>e,set(t){e=t},enumerable:!0}),SetPropertyDescriptorToProxyObject(t,"row$Index",{value:n+1,writable:!0,enumerable:!0}),SetPropertyDescriptorToProxyObject(t,`${itrator}$Index`,{value:n+1,writable:!0,enumerable:!0});let o=htmlToClone.cloneNode(!0);r?insertAfter(o,itemElements[itemElements.length-1]):(htmlToCloneParent?.insertBefore(o,htmlToCloneLocation),r=!0),TransformInternal(htmlDocument,o,t),itemElements.push(o),n++}try{SetPropertyDescriptorToProxyObject(collectionContext,`${collectionContextField}$for`,{value:Date.now(),writable:!0,enumerable:!0});let e=new CustomEvent("ag-for-completed");htmlToCloneParent?.dispatchEvent(e)}catch(e){}}else void 0===t&&null!=fakeItem&&fakeItem.hasAttribute("ag-for-fake")&&isDirtyFake&&(fakeItem=PreForPartial(fakeItem,htmlToCloneParent,htmlToCloneLocation,fakeItemCount))};if(itratorFinished){let functionName="",value=itratorFinished;if(null!=value&&""!=value){let getParameterName=e=>"this"==e?"sender":e.indexOf(".")>-1?e.replace(".","_"):e,getValue=(e,t)=>{if(t.indexOf("(")<0&&t.indexOf(".")>-1){let n=t.substring(0,t.indexOf(".")),r=t.substring(t.indexOf(".")+1,t.length);return getValue(e[n],r)}return t.indexOf("(")>-1?getValueFromFunction(e,t):e[t]},getFunctionFromCollection=(e,t,n)=>()=>{if(null!=e.__proto__[t])return e.__proto__[t](...n);Object.keys(e).forEach((r=>"object"==typeof e[r]?getFunctionFromCollection(e[r],t,n):"function"==typeof e[r]&&r==t?e[r](...n):void 0))},getValueFromFunction=(e,t)=>{let n=[],r=t.indexOf("("),o=t.indexOf(")"),i=r>-1?t.substring(0,r):t,a=t.substring(r+1,o).match(new RegExp("[^,]+","gi"));return null!=a&&a.forEach((t=>{n.push(getValue(e,t))})),e[i].apply(e,n)};functionName=value.substring(0,value.indexOf("(")>-1?value.indexOf("("):value.length);let expression=new RegExp("(\\((?<params>.*?)\\))");if(expression.test(value)){let paramsString=value.match(expression);if(null!=paramsString&&null!=paramsString&&null!=paramsString.groups){let params=paramsString.groups.params.split(","),paramsItem={};for(let e in params){if("this"==params[e])continue;let t=new RegExp("^(\\'|[0-9])").test(params[e]),n=t?"item_"+e:getParameterName(params[e]);paramsItem[n]=t}Watch(item,collectionContext,`${collectionContextField}$for`,((data,isChange,isUserChange)=>{let args=[];for(var key in params)if("this"==params[key]||"sender"==params[key])args.push(htmlToCloneParent);else if("data"==params[key])args.push(data);else{let paramValue=paramsItem[getParameterName(params[key])]?eval(params[key]):getValue(data,params[key]);args.push(paramValue)}try{if(null!=data[functionName])data[functionName].apply(data,args);else{let e=getFunctionFromCollection(data,functionName,args);null!=e&&e(args)}}catch(e){}}))}}}}function getCollectionObject(e,t){if(t.indexOf("(")<0&&t.indexOf(".")>-1){let n=t.substring(0,t.indexOf(".")),r=t.substring(t.indexOf(".")+1,t.length);return getCollectionObject(e[n],r)}t.indexOf("(");return e}function getCollectionName(e){if(e.indexOf("(")<0&&e.indexOf(".")>-1){e.substring(0,e.indexOf("."));return getCollectionName(e.substring(e.indexOf(".")+1,e.length))}return e}function removePreFor(e){if(null!=e&&e.hasAttribute("ag-for-fake")){htmlToClone.classList.remove("ag-fake-mask");let t=e;for(;null!=t&&t.hasAttribute("ag-for-fake");){isfakeItemCountReaded||fakeItemCount++;let e=t;t=t.nextElementSibling,e.remove()}return isfakeItemCountReaded=!0,t}return e}render(context),Watch(item,context,collection,((e,t,n)=>{t&&render(e)}))})),htmlDocument.innerHTML}function PreForPartial(e,t,n,r){let o=null,i=null,a=!1;for(let s=0;s<r;s++){let r=e.cloneNode(!0);a?insertAfter(r,o):(t?.insertBefore(r,n),a=!0,i=r),o=r}return i}function PreFor(e){e.querySelectorAll("[ag-for][ag-for-fake]:not(.ag-fake-mask)",e).forEach((e=>{if("OPTION"==e.tagName)return;let t=e.cloneNode(!0);t.setAttribute("ag-fake","");let n=1,r=e.getAttribute("ag-for-fake");null!=r?n=parseInt(r):t.setAttribute("ag-for-fake",""),t.removeAttribute("ag-for"),e.removeAttribute("ag-for-fake"),e.classList.add("ag-fake-mask"),PreTransformInternal(t);for(let r=0;r<n;r++)e.parentElement?.appendChild(t.cloneNode(!0))}))}function TransformInternal(e,t,n){For(t,t,n),If(t,t,n),Interpolation(t,t,n)}function PreTransformInternal(e){PreFor(e),PreIf(e),PreInterpolation(e)}async function findRenders(){document.querySelectorAll("[ag-render]:not(.ag-render)").forEach((async function(e,t){attachAction(e)}))}async function attachAction(e){e.classList.add("ag-render");var t=e.getAttribute("ag-render");PreTransformInternal(e);var n="ag.render.hydrate."+t,r=e.innerHTML;document.body.addEventListener(n,(async function(){var n=GetValue(window,t);e.innerHTML=r,TransformInternal(e,e,n)}))}async function requestData(e,t,n){n&&(t=n(t));var r="";for(var o in t)r=r+(""!=r?"&":"")+o+"="+t[o];return e+=e.indexOf("?")>-1?"&":"?"+r,(await fetch(e,{method:"GET",mode:"cors",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()}async function initPage(e,t,n,r,o){n||(n={}),n.PageSize||(n.PageSize=12),n.PageNumber||(n.PageNumber=1);var i=await requestData(t,n,o);window[e]=i,window.agRender.hydrate(e),r&&r(i)}async function nextPage(e,t,n,r,o){n.PageNumber+=1;var i=await requestData(t,n,o);window[e]=i,window.agRender.hydrate(e),r&&r(i)}async function previousPage(e,t,n,r,o){if(n.PageNumber>1){n.PageNumber-=1;var i=await requestData(t,n,o);window[e]=i,window.agRender.hydrate(e),r&&r(i)}}async function morePage(e,t,n,r,o){n.PageNumber+=1;var i=await requestData(t,n,o);window[e].Items.push(...i.Items),window.agRender.hydrate(e),r&&r(i)}async function init(){document.body.addEventListener("ag.render.refresh",findRenders),document.body.addEventListener("ag.refresh",findRenders);var e=new CustomEvent("ag.render.refresh");document.body.dispatchEvent(e),window.agRender={hydrate:function(e){var t=new CustomEvent("ag.render.hydrate."+e);document.body.dispatchEvent(t);t=new CustomEvent("ag.lazy.refresh");document.body.dispatchEvent(t),window.agLanguage.refresh()},next:function(e){var t=new CustomEvent("ag.render."+e+".page.next");document.body.dispatchEvent(t)},previous:function(e){var t=new CustomEvent("ag.render."+e+".page.previous");document.body.dispatchEvent(t)},more:function(e){var t=new CustomEvent("ag.render."+e+".page.more");document.body.dispatchEvent(t)},pagedResult:function(e,t,n,r,o){document.body.addEventListener("ag.render."+e+".page.next",(function(){nextPage(e,t,n,r,o)})),document.body.addEventListener("ag.render."+e+".page.previous",(function(){previousPage(e,t,n,r,o)})),document.body.addEventListener("ag.render."+e+".page.more",(function(){morePage(e,t,n,r,o)})),initPage(e,t,n,r,o)}}}init()})()}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(n.exports,n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};return(()=>{"use strict";__webpack_require__.r(__webpack_exports__);__webpack_require__(440),__webpack_require__(468),__webpack_require__(816),__webpack_require__(136),__webpack_require__(368),__webpack_require__(264)})(),__webpack_exports__})()));
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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VUEsRUFBT20xQyxXQUM3QixJQUFPbjFDLEVBQWlCLFFBQ3hCLElBQU0sRUFFUCxPQURBODBDLG9CQUFvQnh6QyxFQUFFNHpDLEVBQVEsQ0FBRS8wQyxFQUFHKzBDLElBQzVCQSxDQUFNLEVDTGRKLG9CQUFvQnh6QyxFQUFJLENBQUN2QixFQUFTcTFDLEtBQ2pDLElBQUksSUFBSWo4QixLQUFPaThCLEVBQ1hOLG9CQUFvQmh4QyxFQUFFc3hDLEVBQVlqOEIsS0FBUzI3QixvQkFBb0JoeEMsRUFBRS9ELEVBQVNvWixJQUM1RWhYLE9BQU9DLGVBQWVyQyxFQUFTb1osRUFBSyxDQUFFeTBCLFlBQVksRUFBTXRyQyxJQUFLOHlDLEVBQVdqOEIsSUFFMUUsRUNORDI3QixvQkFBb0JoeEMsRUFBSSxDQUFDdXhDLEVBQUtseUIsSUFBVWhoQixPQUFPOEYsVUFBVTBFLGVBQWVsTCxLQUFLNHpDLEVBQUtseUIsR0NDbEYyeEIsb0JBQW9CandDLEVBQUs5RSxJQUNILG9CQUFYdTFDLFFBQTBCQSxPQUFPQyxhQUMxQ3B6QyxPQUFPQyxlQUFlckMsRUFBU3UxQyxPQUFPQyxZQUFhLENBQUVubEMsTUFBTyxXQUU3RGpPLE9BQU9DLGVBQWVyQyxFQUFTLGFBQWMsQ0FBRXFRLE9BQU8sR0FBTyxFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi4vLi4vQWdvcmEgNC4wL0lkY0dsb2JhbC5BZ29yYS5KYXZhU2NyaXB0LlBsdWdJbi9NYXhDb250YWN0MS4xLmpzIiwid2VicGFjazovLy8uLi8uLi9BZ29yYSA0LjAvSWRjR2xvYmFsLkFnb3JhLkphdmFTY3JpcHQuUGx1Z0luL01heEpxdWVyeTIuMS4xLmpzIiwid2VicGFjazovLy8uLi8uLi9BZ29yYSA0LjAvSWRjR2xvYmFsLkFnb3JhLkphdmFTY3JpcHQuUGx1Z0luL01heFV0aWxpdHkuanMiLCJ3ZWJwYWNrOi8vLy4uL0lkY0dsb2JhbC5JQlAuV2ViL2pzL21heC9EaWFsb2dNb2RhbC5qcyIsIndlYnBhY2s6Ly8vLi4vSWRjR2xvYmFsLklCUC5XZWIvanMvbWF4L2NvbW1vbi5qcyIsIndlYnBhY2s6Ly8vLi4vSWRjR2xvYmFsLklCUC5XZWIvanMvbWF4L2RhdGFiaW5kZXIuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Il0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSB7XG5cdFx0dmFyIGEgPSBmYWN0b3J5KCk7XG5cdFx0Zm9yKHZhciBpIGluIGEpICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuXHR9XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gIiwi77u/YWdvcmEoZnVuY3Rpb24gKCkge1xyXG4gICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChsb2NhdGlvbi5oYXNoID09IFwiI1NpZ25VcFwiKSB7XHJcbiAgICAgICAgICAgIE9wZW5Qb3B1cCgpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59KTtcclxuXHJcbmZ1bmN0aW9uIFNpZ25VcChjb250YWluZXJJZCwgYWNjZXNzVXJsLCBhY2Nlc3NVcmxWaWV3TW9kZSwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUFjY2Vzcy5hc2h4P2FjdGlvbj1TaWduVXAnLFxyXG4gICAgICAgIGRhdGE6ICh7IGNvbnRhY3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgIT0gbnVsbCkgaWYob25TdWNjZXNzKHJlc3BvbnNlLkNvbnRhY3QpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KGFjY2Vzc1VybCkgJiYgaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmxWaWV3TW9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24ucmVwbGFjZShhY2Nlc3NVcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvY2F0aW9uLnJlbG9hZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc051bGxPckVtcHR5KGFjY2Vzc1VybCkgJiYgIWlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsVmlld01vZGUpICYmIGFjY2Vzc1VybFZpZXdNb2RlID09ICdwb3B1cCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlVXNlckFyZWEocmVzcG9uc2UuVXNlckFyZWFIdG1sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1BFUkZPUk1fQUNUSU9OX1RSSUdHRVInKS5hdHRyKCdocmVmJywgYWNjZXNzVXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBPcGVuUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsKSAmJiAhaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmxWaWV3TW9kZSkgJiYgYWNjZXNzVXJsVmlld01vZGUgPT0gJ3N0YXknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZVVzZXJBcmVhKHJlc3BvbnNlLlVzZXJBcmVhSHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UoKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9kYXNoYm9hcmQvZGVmYXVsdC5hc3B4P21vZGU9c2lnblVwJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygncmVzdHJpY3RlZC1saXN0aW5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgRGF0YS4gUGxlYXNlIHJldHJ5IScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgRGF0YS4gUGxlYXNlIHJldHJ5IScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMTogLy8gRHVwbGljYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1RoZSBlbWFpbCBhZGRyZXNzIHlvdSBlbnRlcmVkIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC4gUGxlYXNlIHNpZ24gaW4gdG8geW91ciBleGlzdGluZyBhY2NvdW50IG9yIGNsaWNrIFwiRm9yZ290IFBhc3N3b3JkXCIgZm9yIGhlbHAuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCAnVGhlIGVtYWlsIGFkZHJlc3MgeW91IGVudGVyZWQgaXMgYWxyZWFkeSByZWdpc3RlcmVkLiBQbGVhc2Ugc2lnbiBpbiB0byB5b3VyIGV4aXN0aW5nIGFjY291bnQgb3IgY2xpY2sgXCJGb3Jnb3QgUGFzc3dvcmRcIiBmb3IgaGVscC4nKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYUFjY2Vzcykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNpZ25Jbihjb250YWluZXJJZCwgYWNjZXNzVXJsLCBhY2Nlc3NVcmxWaWV3TW9kZSwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUFjY2Vzcy5hc2h4P2FjdGlvbj1TaWduSW4nLFxyXG4gICAgICAgIGRhdGE6ICh7IGNvbnRhY3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgIT0gbnVsbCkgb25TdWNjZXNzKHJlc3BvbnNlLkNvbnRhY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmwpICYmIGlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsVmlld01vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLnJlcGxhY2UoYWNjZXNzVXJsKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc051bGxPckVtcHR5KGFjY2Vzc1VybCkgJiYgIWlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsVmlld01vZGUpICYmIGFjY2Vzc1VybFZpZXdNb2RlID09ICdwb3B1cCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlVXNlckFyZWEocmVzcG9uc2UuVXNlckFyZWFIdG1sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1BFUkZPUk1fQUNUSU9OX1RSSUdHRVInKS5hdHRyKCdocmVmJywgYWNjZXNzVXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBPcGVuUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsKSAmJiAhaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmxWaWV3TW9kZSkgJiYgYWNjZXNzVXJsVmlld01vZGUgPT0gJ3N0YXknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZVVzZXJBcmVhKHJlc3BvbnNlLlVzZXJBcmVhSHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UoKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9kYXNoYm9hcmQvZGVmYXVsdC5hc3B4P21vZGU9c2lnbkluJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygncmVzdHJpY3RlZC1saXN0aW5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQwMTpcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBlbWFpbCBhZGRyZXNzIG9yIHBhc3N3b3JkLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcig0MDEsICdJbnZhbGlkIGVtYWlsIGFkZHJlc3Mgb3IgcGFzc3dvcmQuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMwMjpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkocmVzcG9uc2UuVXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gcmVzcG9uc2UuVXJsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBlbWFpbCBhZGRyZXNzIG9yIHBhc3N3b3JkLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgZW1haWwgYWRkcmVzcyBvciBwYXNzd29yZC4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYUFjY2Vzcykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNhdmVTZWFyY2goY29udGFpbmVySWQsIGFjY2Vzc1VybCwgYWNjZXNzVXJsVmlld01vZGUsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFBY2Nlc3MuYXNoeD9hY3Rpb249U2F2ZVNlYXJjaCcsXHJcbiAgICAgICAgZGF0YTogKHsgZGVtYW5kOiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdZb3UgaGF2ZSBzdWNjZXNzZnVsbHkgc2F2ZWQgdGhlIHNlYXJjaCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1lvdSBoYXZlIHN1Y2Nlc3NmdWxseSBzYXZlZCB0aGUgc2VhcmNoJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGVtYWlsIGFkZHJlc3Mgb3IgcGFzc3dvcmQuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBlbWFpbCBhZGRyZXNzIG9yIHBhc3N3b3JkLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhQWNjZXNzKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gUmVxdWVzdEluZm8oY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFSZXF1ZXN0SW5mby5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhUmVxdWVzdEluZm8pIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBOZWlnaGJvcmhvb2RSZXBvcnQoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFOZWlnaGJvcmhvb2RSZXBvcnQuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnWW91ciBOZWlnaGJvcmhvb2QgUmVwb3J0IHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkLiBBIHJlcG9ydCB3aWxsIGJlIGVtYWlsZWQgdG8geW91IHdpdGhpbiB0aGUgbmV4dCAyNCBidXNpbmVzcyBob3Vycy4nKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdZb3VyIE5laWdoYm9yaG9vZCBSZXBvcnQgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQuIEEgcmVwb3J0IHdpbGwgYmUgZW1haWxlZCB0byB5b3Ugd2l0aGluIHRoZSBuZXh0IDI0IGJ1c2luZXNzIGhvdXJzLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYU5laWdoYm9yaG9vZFJlcG9ydCkgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbnRhY3RNb3J0Z2FnZVNwZWNpYWxpc3QoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFDb250YWN0TW9ydGdhZ2VTcGVjaWFsaXN0LmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1RoYW5rIHlvdSBmb3IgeW91ciByZXF1ZXN0LiBBIE1vcnRnYWdlIENvbnN1bHRhbnQgd2lsbCBjb250YWN0IHlvdSBzaG9ydGx5LicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1RoYW5rIHlvdSBmb3IgeW91ciByZXF1ZXN0LiBBIE1vcnRnYWdlIENvbnN1bHRhbnQgd2lsbCBjb250YWN0IHlvdSBzaG9ydGx5LicpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChDb250YWN0TW9ydGdhZ2VTcGVjaWFsaXN0KSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIFJlcXVlc3RTaG93aW5nKGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhUmVxdWVzdFNob3dpbmcuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYVJlcXVlc3RTaG93aW5nKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gVGV4dExpc3RpbmcoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFUZXh0TGlzdGluZy5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhVGV4dExpc3RpbmcpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBFbWFpbExpc3RpbmcoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFFbWFpbExpc3RpbmcuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnVGhlIHByb3BlcnR5IGRldGFpbHMgaGFzIGJlZW4gc2VudCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdUaGUgcHJvcGVydHkgZGV0YWlscyBoYXMgYmVlbiBzZW50IHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYUVtYWlsTGlzdGluZykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbnRhY3RVcyhjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yLCBjb250YWN0VHlwZSkge1xyXG4gICAgdmFyICRmb3JtID0gJCgnIycgKyBjb250YWluZXJJZCk7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCRmb3JtKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUNvbnRhY3RVcy5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCwgQ29udGFjdFR5cGU6IGNvbnRhY3RUeXBlIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDAxOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICRmb3JtLmZpbmQoJ1tkYXRhLWNhcHRjaGEtcmVsb2FkXScpLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFDb250YWN0VXMpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gU2VsbEFIb21lKGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhU2VsbEFIb21lLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFDb250YWN0VXMpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBNYWludGVuYW5jZVNlcnZpY2UoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvTWFpbnRlbmFuY2VTZXJ2aWNlLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFDb250YWN0VXMpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBPcmRlclJlbG9jKGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhT3JkZXJSZWxvYy5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhT3JkZXJSZWxvYykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcblxyXG5cclxuZnVuY3Rpb24gRm9yZ290UGFzc3dvcmQoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFGb3Jnb3RQYXNzd29yZC5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBDb250YWN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdQbGVhc2UgY2hlY2sgeW91ciBlbWFpbCBzaG9ydGx5IGZvciBpbnN0cnVjdGlvbnMgb24gcmVzZXR0aW5nIHlvdXIgcGFzc3dvcmQuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnUGxlYXNlIGNoZWNrIHlvdXIgZW1haWwgc2hvcnRseSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIHJlc2V0dGluZyB5b3VyIHBhc3N3b3JkLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnQW4gYWNjb3VudCB3aXRoIHRoYXQgZW1haWwgYWRkcmVzcyBjYW5ub3QgYmUgZm91bmQuIFBsZWFzZSB0cnkgYWdhaW4uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnQW4gYWNjb3VudCB3aXRoIHRoYXQgZW1haWwgYWRkcmVzcyBjYW5ub3QgYmUgZm91bmQuIFBsZWFzZSB0cnkgYWdhaW4uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoRm9yZ290UGFzc3dvcmQpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gQ29tcGFueU5ld3NMZXR0ZXIoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhQ29tcGFueU5ld3NMZXR0ZXIuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnWW91IGhhdmUgcmVnaXN0ZXJlZCBmb3IgbmV3c2xldHRlciBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdZb3UgaGF2ZSByZWdpc3RlcmVkIGZvciBuZXdzbGV0dGVyIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYUVtYWlsTGlzdGluZykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBFbWFpbEZyaWVuZChjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUVtYWlsRnJpZW5kLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1RoZSBkZXRhaWxzIGhhcyBiZWVuIHNlbnQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnVGhlIGRldGFpbHMgaGFzIGJlZW4gc2VudCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFFbWFpbExpc3RpbmcpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBVcGRhdGVVc2VyQXJlYShodG1sKSB7XHJcbiAgICAkKCcjRElWX1VTRVJfQVJFQScpLmh0bWwoaHRtbCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFBlcmZvcm1BY3Rpb24oYWN0aW9uLCBxdWVyeVN0cmluZykge1xyXG4gICAgdmFyIF9hY2Nlc3NVcmwgPSAnJztcclxuICAgIHZhciBfYWNjZXNzRmlyZVdhbGwgPSAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL2Rhc2hib2FyZC9BY2Nlc3MuYXNweCc7XHJcblxyXG4gICAgaWYgKGFjdGlvbiAhPSAnU2lnblVwJyAmJiBhY3Rpb24gIT0gJ1NpZ25JbicgJiYgYWN0aW9uICE9ICdNYXJrZXRUcmVuZHMnKSB7XHJcbiAgICAgICAgaWYgKCFJc1NpZ25lZEluKCkpIHtcclxuICAgICAgICAgICAgX2FjY2Vzc1VybCA9IF9hY2Nlc3NGaXJlV2FsbCArICc/dmlldz1wb3B1cCZhY2Nlc3NVcmw9JyArIGVzY2FwZSgnL2Rhc2hib2FyZC8nICsgYWN0aW9uICsgJy5hc3B4Jyk7XHJcbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JFbXB0eShxdWVyeVN0cmluZykpIF9hY2Nlc3NVcmwgKz0gJz8nICsgZXNjYXBlKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBfYWNjZXNzVXJsID0gKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9kYXNoYm9hcmQvJyArIGFjdGlvbiArICcuYXNweCc7XHJcbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JFbXB0eShxdWVyeVN0cmluZykpIF9hY2Nlc3NVcmwgKz0gJz8nICsgcXVlcnlTdHJpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gJ01hcmtldFRyZW5kcycpIHtcclxuICAgICAgICBfYWNjZXNzVXJsID0gJy9kYXNoYm9hcmQvTWFya2V0VHJlbmRzLmFzcHg/JyArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBfYWNjZXNzVXJsID0gX2FjY2Vzc0ZpcmVXYWxsO1xyXG4gICAgICAgIGlmICghaXNOdWxsT3JFbXB0eShxdWVyeVN0cmluZykpIF9hY2Nlc3NVcmwgKz0gJz8nICsgcXVlcnlTdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgJCgnI1BFUkZPUk1fQUNUSU9OX1RSSUdHRVInKS5hdHRyKCdocmVmJywgX2FjY2Vzc1VybCk7XHJcbiAgICAkKCcjUEVSRk9STV9BQ1RJT05fVFJJR0dFUicpLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIElzU2lnbmVkSW4oKSB7XHJcbiAgICBpZiAoaXNOdWxsT3JFbXB0eSgkKCcjQ09OVEFDVF9HVUlEJykpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoaXNOdWxsT3JFbXB0eSgkKCcjQ09OVEFDVF9HVUlEJykudmFsKCkpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoJCgnI0NPTlRBQ1RfR1VJRCcpLnZhbCgpLmxlbmd0aCAhPSAzNikgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbnRhY3RPZmZpY2UoZW1haWwpIHtcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUNvbnRhY3RPZmZpY2UuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHtcclxuICAgICAgICAgICAgTmFtZTogJChcIiN0ZXh0bmFtZVwiKS52YWwoKSxcclxuICAgICAgICAgICAgRW1haWw6ICQoXCIjdHh0RW1haWxcIikudmFsKCksXHJcbiAgICAgICAgICAgIFRvRW1haWw6IGVtYWlsLFxyXG4gICAgICAgICAgICBTdWJqZWN0OiAkKFwiI3RleHRzdWJqZWN0XCIpLnZhbCgpLFxyXG4gICAgICAgICAgICBjb21tZW50OiAkKFwiI3RleHRtc2dcIikudmFsKClcclxuICAgICAgICB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ3RleHQnLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgPT0gXCIxMDBcIikge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFDb250YWN0VXMpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59IiwiLypcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjIuMS4xXG4gKiBodHRwOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBJbmNsdWRlcyBTaXp6bGUuanNcbiAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IDIwMDUsIDIwMTQgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxNC0wNS0wMVQxNzoxMVpcbiAqL1xuIWZ1bmN0aW9uKGEsYil7XCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlvbihhKXtpZighYS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIpO3JldHVybiBiKGEpfTpiKGEpfShcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXt2YXIgYj1hLmxlbmd0aCxjPV8udHlwZShhKTtyZXR1cm5cImZ1bmN0aW9uXCI9PT1jfHxfLmlzV2luZG93KGEpPyExOjE9PT1hLm5vZGVUeXBlJiZiPyEwOlwiYXJyYXlcIj09PWN8fDA9PT1ifHxcIm51bWJlclwiPT10eXBlb2YgYiYmYj4wJiZiLTEgaW4gYX1mdW5jdGlvbiBkKGEsYixjKXtpZihfLmlzRnVuY3Rpb24oYikpcmV0dXJuIF8uZ3JlcChhLGZ1bmN0aW9uKGEsZCl7cmV0dXJuISFiLmNhbGwoYSxkLGEpIT09Y30pO2lmKGIubm9kZVR5cGUpcmV0dXJuIF8uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09YiE9PWN9KTtpZihcInN0cmluZ1wiPT10eXBlb2YgYil7aWYoaGIudGVzdChiKSlyZXR1cm4gXy5maWx0ZXIoYixhLGMpO2I9Xy5maWx0ZXIoYixhKX1yZXR1cm4gXy5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIFUuY2FsbChiLGEpPj0wIT09Y30pfWZ1bmN0aW9uIGUoYSxiKXtmb3IoOyhhPWFbYl0pJiYxIT09YS5ub2RlVHlwZTspO3JldHVybiBhfWZ1bmN0aW9uIGYoYSl7dmFyIGI9b2JbYV09e307cmV0dXJuIF8uZWFjaChhLm1hdGNoKG5iKXx8W10sZnVuY3Rpb24oYSxjKXtiW2NdPSEwfSksYn1mdW5jdGlvbiBnKCl7Wi5yZW1vdmVFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLGcsITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIixnLCExKSxfLnJlYWR5KCl9ZnVuY3Rpb24gaCgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmNhY2hlPXt9LDAse2dldDpmdW5jdGlvbigpe3JldHVybnt9fX0pLHRoaXMuZXhwYW5kbz1fLmV4cGFuZG8rTWF0aC5yYW5kb20oKX1mdW5jdGlvbiBpKGEsYixjKXt2YXIgZDtpZih2b2lkIDA9PT1jJiYxPT09YS5ub2RlVHlwZSlpZihkPVwiZGF0YS1cIitiLnJlcGxhY2UodWIsXCItJDFcIikudG9Mb3dlckNhc2UoKSxjPWEuZ2V0QXR0cmlidXRlKGQpLFwic3RyaW5nXCI9PXR5cGVvZiBjKXt0cnl7Yz1cInRydWVcIj09PWM/ITA6XCJmYWxzZVwiPT09Yz8hMTpcIm51bGxcIj09PWM/bnVsbDorYytcIlwiPT09Yz8rYzp0Yi50ZXN0KGMpP18ucGFyc2VKU09OKGMpOmN9Y2F0Y2goZSl7fXNiLnNldChhLGIsYyl9ZWxzZSBjPXZvaWQgMDtyZXR1cm4gY31mdW5jdGlvbiBqKCl7cmV0dXJuITB9ZnVuY3Rpb24gaygpe3JldHVybiExfWZ1bmN0aW9uIGwoKXt0cnl7cmV0dXJuIFouYWN0aXZlRWxlbWVudH1jYXRjaChhKXt9fWZ1bmN0aW9uIG0oYSxiKXtyZXR1cm4gXy5ub2RlTmFtZShhLFwidGFibGVcIikmJl8ubm9kZU5hbWUoMTEhPT1iLm5vZGVUeXBlP2I6Yi5maXJzdENoaWxkLFwidHJcIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRib2R5XCIpWzBdfHxhLmFwcGVuZENoaWxkKGEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGJvZHlcIikpOmF9ZnVuY3Rpb24gbihhKXtyZXR1cm4gYS50eXBlPShudWxsIT09YS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpKStcIi9cIithLnR5cGUsYX1mdW5jdGlvbiBvKGEpe3ZhciBiPUtiLmV4ZWMoYS50eXBlKTtyZXR1cm4gYj9hLnR5cGU9YlsxXTphLnJlbW92ZUF0dHJpYnV0ZShcInR5cGVcIiksYX1mdW5jdGlvbiBwKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKXJiLnNldChhW2NdLFwiZ2xvYmFsRXZhbFwiLCFifHxyYi5nZXQoYltjXSxcImdsb2JhbEV2YWxcIikpfWZ1bmN0aW9uIHEoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2lmKDE9PT1iLm5vZGVUeXBlKXtpZihyYi5oYXNEYXRhKGEpJiYoZj1yYi5hY2Nlc3MoYSksZz1yYi5zZXQoYixmKSxqPWYuZXZlbnRzKSl7ZGVsZXRlIGcuaGFuZGxlLGcuZXZlbnRzPXt9O2ZvcihlIGluIGopZm9yKGM9MCxkPWpbZV0ubGVuZ3RoO2Q+YztjKyspXy5ldmVudC5hZGQoYixlLGpbZV1bY10pfXNiLmhhc0RhdGEoYSkmJihoPXNiLmFjY2VzcyhhKSxpPV8uZXh0ZW5kKHt9LGgpLHNiLnNldChiLGkpKX19ZnVuY3Rpb24gcihhLGIpe3ZhciBjPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWU/YS5nZXRFbGVtZW50c0J5VGFnTmFtZShifHxcIipcIik6YS5xdWVyeVNlbGVjdG9yQWxsP2EucXVlcnlTZWxlY3RvckFsbChifHxcIipcIik6W107cmV0dXJuIHZvaWQgMD09PWJ8fGImJl8ubm9kZU5hbWUoYSxiKT9fLm1lcmdlKFthXSxjKTpjfWZ1bmN0aW9uIHMoYSxiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XCJpbnB1dFwiPT09YyYmeWIudGVzdChhLnR5cGUpP2IuY2hlY2tlZD1hLmNoZWNrZWQ6KFwiaW5wdXRcIj09PWN8fFwidGV4dGFyZWFcIj09PWMpJiYoYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIHQoYixjKXt2YXIgZCxlPV8oYy5jcmVhdGVFbGVtZW50KGIpKS5hcHBlbmRUbyhjLmJvZHkpLGY9YS5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZSYmKGQ9YS5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZShlWzBdKSk/ZC5kaXNwbGF5Ol8uY3NzKGVbMF0sXCJkaXNwbGF5XCIpO3JldHVybiBlLmRldGFjaCgpLGZ9ZnVuY3Rpb24gdShhKXt2YXIgYj1aLGM9T2JbYV07cmV0dXJuIGN8fChjPXQoYSxiKSxcIm5vbmVcIiE9PWMmJmN8fChOYj0oTmJ8fF8oXCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+XCIpKS5hcHBlbmRUbyhiLmRvY3VtZW50RWxlbWVudCksYj1OYlswXS5jb250ZW50RG9jdW1lbnQsYi53cml0ZSgpLGIuY2xvc2UoKSxjPXQoYSxiKSxOYi5kZXRhY2goKSksT2JbYV09YyksY31mdW5jdGlvbiB2KGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuc3R5bGU7cmV0dXJuIGM9Y3x8UmIoYSksYyYmKGc9Yy5nZXRQcm9wZXJ0eVZhbHVlKGIpfHxjW2JdKSxjJiYoXCJcIiE9PWd8fF8uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfHwoZz1fLnN0eWxlKGEsYikpLFFiLnRlc3QoZykmJlBiLnRlc3QoYikmJihkPWgud2lkdGgsZT1oLm1pbldpZHRoLGY9aC5tYXhXaWR0aCxoLm1pbldpZHRoPWgubWF4V2lkdGg9aC53aWR0aD1nLGc9Yy53aWR0aCxoLndpZHRoPWQsaC5taW5XaWR0aD1lLGgubWF4V2lkdGg9ZikpLHZvaWQgMCE9PWc/ZytcIlwiOmd9ZnVuY3Rpb24gdyhhLGIpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYSgpP3ZvaWQgZGVsZXRlIHRoaXMuZ2V0Oih0aGlzLmdldD1iKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1mdW5jdGlvbiB4KGEsYil7aWYoYiBpbiBhKXJldHVybiBiO2Zvcih2YXIgYz1iWzBdLnRvVXBwZXJDYXNlKCkrYi5zbGljZSgxKSxkPWIsZT1YYi5sZW5ndGg7ZS0tOylpZihiPVhiW2VdK2MsYiBpbiBhKXJldHVybiBiO3JldHVybiBkfWZ1bmN0aW9uIHkoYSxiLGMpe3ZhciBkPVRiLmV4ZWMoYik7cmV0dXJuIGQ/TWF0aC5tYXgoMCxkWzFdLShjfHwwKSkrKGRbMl18fFwicHhcIik6Yn1mdW5jdGlvbiB6KGEsYixjLGQsZSl7Zm9yKHZhciBmPWM9PT0oZD9cImJvcmRlclwiOlwiY29udGVudFwiKT80Olwid2lkdGhcIj09PWI/MTowLGc9MDs0PmY7Zis9MilcIm1hcmdpblwiPT09YyYmKGcrPV8uY3NzKGEsYyt3YltmXSwhMCxlKSksZD8oXCJjb250ZW50XCI9PT1jJiYoZy09Xy5jc3MoYSxcInBhZGRpbmdcIit3YltmXSwhMCxlKSksXCJtYXJnaW5cIiE9PWMmJihnLT1fLmNzcyhhLFwiYm9yZGVyXCIrd2JbZl0rXCJXaWR0aFwiLCEwLGUpKSk6KGcrPV8uY3NzKGEsXCJwYWRkaW5nXCIrd2JbZl0sITAsZSksXCJwYWRkaW5nXCIhPT1jJiYoZys9Xy5jc3MoYSxcImJvcmRlclwiK3diW2ZdK1wiV2lkdGhcIiwhMCxlKSkpO3JldHVybiBnfWZ1bmN0aW9uIEEoYSxiLGMpe3ZhciBkPSEwLGU9XCJ3aWR0aFwiPT09Yj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0LGY9UmIoYSksZz1cImJvcmRlci1ib3hcIj09PV8uY3NzKGEsXCJib3hTaXppbmdcIiwhMSxmKTtpZigwPj1lfHxudWxsPT1lKXtpZihlPXYoYSxiLGYpLCgwPmV8fG51bGw9PWUpJiYoZT1hLnN0eWxlW2JdKSxRYi50ZXN0KGUpKXJldHVybiBlO2Q9ZyYmKFkuYm94U2l6aW5nUmVsaWFibGUoKXx8ZT09PWEuc3R5bGVbYl0pLGU9cGFyc2VGbG9hdChlKXx8MH1yZXR1cm4gZSt6KGEsYixjfHwoZz9cImJvcmRlclwiOlwiY29udGVudFwiKSxkLGYpK1wicHhcIn1mdW5jdGlvbiBCKGEsYil7Zm9yKHZhciBjLGQsZSxmPVtdLGc9MCxoPWEubGVuZ3RoO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihmW2ddPXJiLmdldChkLFwib2xkZGlzcGxheVwiKSxjPWQuc3R5bGUuZGlzcGxheSxiPyhmW2ddfHxcIm5vbmVcIiE9PWN8fChkLnN0eWxlLmRpc3BsYXk9XCJcIiksXCJcIj09PWQuc3R5bGUuZGlzcGxheSYmeGIoZCkmJihmW2ddPXJiLmFjY2VzcyhkLFwib2xkZGlzcGxheVwiLHUoZC5ub2RlTmFtZSkpKSk6KGU9eGIoZCksXCJub25lXCI9PT1jJiZlfHxyYi5zZXQoZCxcIm9sZGRpc3BsYXlcIixlP2M6Xy5jc3MoZCxcImRpc3BsYXlcIikpKSk7Zm9yKGc9MDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoYiYmXCJub25lXCIhPT1kLnN0eWxlLmRpc3BsYXkmJlwiXCIhPT1kLnN0eWxlLmRpc3BsYXl8fChkLnN0eWxlLmRpc3BsYXk9Yj9mW2ddfHxcIlwiOlwibm9uZVwiKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQyhhLGIsYyxkLGUpe3JldHVybiBuZXcgQy5wcm90b3R5cGUuaW5pdChhLGIsYyxkLGUpfWZ1bmN0aW9uIEQoKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1liPXZvaWQgMH0pLFliPV8ubm93KCl9ZnVuY3Rpb24gRShhLGIpe3ZhciBjLGQ9MCxlPXtoZWlnaHQ6YX07Zm9yKGI9Yj8xOjA7ND5kO2QrPTItYiljPXdiW2RdLGVbXCJtYXJnaW5cIitjXT1lW1wicGFkZGluZ1wiK2NdPWE7cmV0dXJuIGImJihlLm9wYWNpdHk9ZS53aWR0aD1hKSxlfWZ1bmN0aW9uIEYoYSxiLGMpe2Zvcih2YXIgZCxlPShjY1tiXXx8W10pLmNvbmNhdChjY1tcIipcIl0pLGY9MCxnPWUubGVuZ3RoO2c+ZjtmKyspaWYoZD1lW2ZdLmNhbGwoYyxiLGEpKXJldHVybiBkfWZ1bmN0aW9uIEcoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbD10aGlzLG09e30sbj1hLnN0eWxlLG89YS5ub2RlVHlwZSYmeGIoYSkscD1yYi5nZXQoYSxcImZ4c2hvd1wiKTtjLnF1ZXVlfHwoaD1fLl9xdWV1ZUhvb2tzKGEsXCJmeFwiKSxudWxsPT1oLnVucXVldWVkJiYoaC51bnF1ZXVlZD0wLGk9aC5lbXB0eS5maXJlLGguZW1wdHkuZmlyZT1mdW5jdGlvbigpe2gudW5xdWV1ZWR8fGkoKX0pLGgudW5xdWV1ZWQrKyxsLmFsd2F5cyhmdW5jdGlvbigpe2wuYWx3YXlzKGZ1bmN0aW9uKCl7aC51bnF1ZXVlZC0tLF8ucXVldWUoYSxcImZ4XCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2RlVHlwZSYmKFwiaGVpZ2h0XCJpbiBifHxcIndpZHRoXCJpbiBiKSYmKGMub3ZlcmZsb3c9W24ub3ZlcmZsb3csbi5vdmVyZmxvd1gsbi5vdmVyZmxvd1ldLGo9Xy5jc3MoYSxcImRpc3BsYXlcIiksaz1cIm5vbmVcIj09PWo/cmIuZ2V0KGEsXCJvbGRkaXNwbGF5XCIpfHx1KGEubm9kZU5hbWUpOmosXCJpbmxpbmVcIj09PWsmJlwibm9uZVwiPT09Xy5jc3MoYSxcImZsb2F0XCIpJiYobi5kaXNwbGF5PVwiaW5saW5lLWJsb2NrXCIpKSxjLm92ZXJmbG93JiYobi5vdmVyZmxvdz1cImhpZGRlblwiLGwuYWx3YXlzKGZ1bmN0aW9uKCl7bi5vdmVyZmxvdz1jLm92ZXJmbG93WzBdLG4ub3ZlcmZsb3dYPWMub3ZlcmZsb3dbMV0sbi5vdmVyZmxvd1k9Yy5vdmVyZmxvd1syXX0pKTtmb3IoZCBpbiBiKWlmKGU9YltkXSwkYi5leGVjKGUpKXtpZihkZWxldGUgYltkXSxmPWZ8fFwidG9nZ2xlXCI9PT1lLGU9PT0obz9cImhpZGVcIjpcInNob3dcIikpe2lmKFwic2hvd1wiIT09ZXx8IXB8fHZvaWQgMD09PXBbZF0pY29udGludWU7bz0hMH1tW2RdPXAmJnBbZF18fF8uc3R5bGUoYSxkKX1lbHNlIGo9dm9pZCAwO2lmKF8uaXNFbXB0eU9iamVjdChtKSlcImlubGluZVwiPT09KFwibm9uZVwiPT09aj91KGEubm9kZU5hbWUpOmopJiYobi5kaXNwbGF5PWopO2Vsc2V7cD9cImhpZGRlblwiaW4gcCYmKG89cC5oaWRkZW4pOnA9cmIuYWNjZXNzKGEsXCJmeHNob3dcIix7fSksZiYmKHAuaGlkZGVuPSFvKSxvP18oYSkuc2hvdygpOmwuZG9uZShmdW5jdGlvbigpe18oYSkuaGlkZSgpfSksbC5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7cmIucmVtb3ZlKGEsXCJmeHNob3dcIik7Zm9yKGIgaW4gbSlfLnN0eWxlKGEsYixtW2JdKX0pO2ZvcihkIGluIG0pZz1GKG8/cFtkXTowLGQsbCksZCBpbiBwfHwocFtkXT1nLnN0YXJ0LG8mJihnLmVuZD1nLnN0YXJ0LGcuc3RhcnQ9XCJ3aWR0aFwiPT09ZHx8XCJoZWlnaHRcIj09PWQ/MTowKSl9fWZ1bmN0aW9uIEgoYSxiKXt2YXIgYyxkLGUsZixnO2ZvcihjIGluIGEpaWYoZD1fLmNhbWVsQ2FzZShjKSxlPWJbZF0sZj1hW2NdLF8uaXNBcnJheShmKSYmKGU9ZlsxXSxmPWFbY109ZlswXSksYyE9PWQmJihhW2RdPWYsZGVsZXRlIGFbY10pLGc9Xy5jc3NIb29rc1tkXSxnJiZcImV4cGFuZFwiaW4gZyl7Zj1nLmV4cGFuZChmKSxkZWxldGUgYVtkXTtmb3IoYyBpbiBmKWMgaW4gYXx8KGFbY109ZltjXSxiW2NdPWUpfWVsc2UgYltkXT1lfWZ1bmN0aW9uIEkoYSxiLGMpe3ZhciBkLGUsZj0wLGc9YmMubGVuZ3RoLGg9Xy5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3IodmFyIGI9WWJ8fEQoKSxjPU1hdGgubWF4KDAsai5zdGFydFRpbWUrai5kdXJhdGlvbi1iKSxkPWMvai5kdXJhdGlvbnx8MCxmPTEtZCxnPTAsaT1qLnR3ZWVucy5sZW5ndGg7aT5nO2crKylqLnR3ZWVuc1tnXS5ydW4oZik7cmV0dXJuIGgubm90aWZ5V2l0aChhLFtqLGYsY10pLDE+ZiYmaT9jOihoLnJlc29sdmVXaXRoKGEsW2pdKSwhMSl9LGo9aC5wcm9taXNlKHtlbGVtOmEscHJvcHM6Xy5leHRlbmQoe30sYiksb3B0czpfLmV4dGVuZCghMCx7c3BlY2lhbEVhc2luZzp7fX0sYyksb3JpZ2luYWxQcm9wZXJ0aWVzOmIsb3JpZ2luYWxPcHRpb25zOmMsc3RhcnRUaW1lOllifHxEKCksZHVyYXRpb246Yy5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oYixjKXt2YXIgZD1fLlR3ZWVuKGEsai5vcHRzLGIsYyxqLm9wdHMuc3BlY2lhbEVhc2luZ1tiXXx8ai5vcHRzLmVhc2luZyk7cmV0dXJuIGoudHdlZW5zLnB1c2goZCksZH0sc3RvcDpmdW5jdGlvbihiKXt2YXIgYz0wLGQ9Yj9qLnR3ZWVucy5sZW5ndGg6MDtpZihlKXJldHVybiB0aGlzO2ZvcihlPSEwO2Q+YztjKyspai50d2VlbnNbY10ucnVuKDEpO3JldHVybiBiP2gucmVzb2x2ZVdpdGgoYSxbaixiXSk6aC5yZWplY3RXaXRoKGEsW2osYl0pLHRoaXN9fSksaz1qLnByb3BzO2ZvcihIKGssai5vcHRzLnNwZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1iY1tmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIGQ7cmV0dXJuIF8ubWFwKGssRixqKSxfLmlzRnVuY3Rpb24oai5vcHRzLnN0YXJ0KSYmai5vcHRzLnN0YXJ0LmNhbGwoYSxqKSxfLmZ4LnRpbWVyKF8uZXh0ZW5kKGkse2VsZW06YSxhbmltOmoscXVldWU6ai5vcHRzLnF1ZXVlfSkpLGoucHJvZ3Jlc3Moai5vcHRzLnByb2dyZXNzKS5kb25lKGoub3B0cy5kb25lLGoub3B0cy5jb21wbGV0ZSkuZmFpbChqLm9wdHMuZmFpbCkuYWx3YXlzKGoub3B0cy5hbHdheXMpfWZ1bmN0aW9uIEooYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7XCJzdHJpbmdcIiE9dHlwZW9mIGImJihjPWIsYj1cIipcIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKG5iKXx8W107aWYoXy5pc0Z1bmN0aW9uKGMpKWZvcig7ZD1mW2UrK107KVwiK1wiPT09ZFswXT8oZD1kLnNsaWNlKDEpfHxcIipcIiwoYVtkXT1hW2RdfHxbXSkudW5zaGlmdChjKSk6KGFbZF09YVtkXXx8W10pLnB1c2goYyl9fWZ1bmN0aW9uIEsoYSxiLGMsZCl7ZnVuY3Rpb24gZShoKXt2YXIgaTtyZXR1cm4gZltoXT0hMCxfLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2Yganx8Z3x8ZltqXT9nPyEoaT1qKTp2b2lkIDA6KGIuZGF0YVR5cGVzLnVuc2hpZnQoaiksZShqKSwhMSl9KSxpfXZhciBmPXt9LGc9YT09PXZjO3JldHVybiBlKGIuZGF0YVR5cGVzWzBdKXx8IWZbXCIqXCJdJiZlKFwiKlwiKX1mdW5jdGlvbiBMKGEsYil7dmFyIGMsZCxlPV8uYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoYyBpbiBiKXZvaWQgMCE9PWJbY10mJigoZVtjXT9hOmR8fChkPXt9KSlbY109YltjXSk7cmV0dXJuIGQmJl8uZXh0ZW5kKCEwLGEsZCksYX1mdW5jdGlvbiBNKGEsYixjKXtmb3IodmFyIGQsZSxmLGcsaD1hLmNvbnRlbnRzLGk9YS5kYXRhVHlwZXM7XCIqXCI9PT1pWzBdOylpLnNoaWZ0KCksdm9pZCAwPT09ZCYmKGQ9YS5taW1lVHlwZXx8Yi5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKSk7aWYoZClmb3IoZSBpbiBoKWlmKGhbZV0mJmhbZV0udGVzdChkKSl7aS51bnNoaWZ0KGUpO2JyZWFrfWlmKGlbMF1pbiBjKWY9aVswXTtlbHNle2ZvcihlIGluIGMpe2lmKCFpWzBdfHxhLmNvbnZlcnRlcnNbZStcIiBcIitpWzBdXSl7Zj1lO2JyZWFrfWd8fChnPWUpfWY9Znx8Z31yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gTihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGo9e30saz1hLmRhdGFUeXBlcy5zbGljZSgpO2lmKGtbMV0pZm9yKGcgaW4gYS5jb252ZXJ0ZXJzKWpbZy50b0xvd2VyQ2FzZSgpXT1hLmNvbnZlcnRlcnNbZ107Zm9yKGY9ay5zaGlmdCgpO2Y7KWlmKGEucmVzcG9uc2VGaWVsZHNbZl0mJihjW2EucmVzcG9uc2VGaWVsZHNbZl1dPWIpLCFpJiZkJiZhLmRhdGFGaWx0ZXImJihiPWEuZGF0YUZpbHRlcihiLGEuZGF0YVR5cGUpKSxpPWYsZj1rLnNoaWZ0KCkpaWYoXCIqXCI9PT1mKWY9aTtlbHNlIGlmKFwiKlwiIT09aSYmaSE9PWYpe2lmKGc9altpK1wiIFwiK2ZdfHxqW1wiKiBcIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdChcIiBcIiksaFsxXT09PWYmJihnPWpbaStcIiBcIitoWzBdXXx8altcIiogXCIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhW1widGhyb3dzXCJdKWI9ZyhiKTtlbHNlIHRyeXtiPWcoYil9Y2F0Y2gobCl7cmV0dXJue3N0YXRlOlwicGFyc2VyZXJyb3JcIixlcnJvcjpnP2w6XCJObyBjb252ZXJzaW9uIGZyb20gXCIraStcIiB0byBcIitmfX19cmV0dXJue3N0YXRlOlwic3VjY2Vzc1wiLGRhdGE6Yn19ZnVuY3Rpb24gTyhhLGIsYyxkKXt2YXIgZTtpZihfLmlzQXJyYXkoYikpXy5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHx6Yy50ZXN0KGEpP2QoYSxlKTpPKGErXCJbXCIrKFwib2JqZWN0XCI9PXR5cGVvZiBlP2I6XCJcIikrXCJdXCIsZSxjLGQpfSk7ZWxzZSBpZihjfHxcIm9iamVjdFwiIT09Xy50eXBlKGIpKWQoYSxiKTtlbHNlIGZvcihlIGluIGIpTyhhK1wiW1wiK2UrXCJdXCIsYltlXSxjLGQpfWZ1bmN0aW9uIFAoYSl7cmV0dXJuIF8uaXNXaW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZSYmYS5kZWZhdWx0Vmlld312YXIgUT1bXSxSPVEuc2xpY2UsUz1RLmNvbmNhdCxUPVEucHVzaCxVPVEuaW5kZXhPZixWPXt9LFc9Vi50b1N0cmluZyxYPVYuaGFzT3duUHJvcGVydHksWT17fSxaPWEuZG9jdW1lbnQsJD1cIjIuMS4xXCIsXz1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgXy5mbi5pbml0KGEsYil9LGFiPS9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZyxiYj0vXi1tcy0vLGNiPS8tKFtcXGRhLXpdKS9naSxkYj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O18uZm49Xy5wcm90b3R5cGU9e2pxdWVyeTokLGNvbnN0cnVjdG9yOl8sc2VsZWN0b3I6XCJcIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIFIuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hPzA+YT90aGlzW2ErdGhpcy5sZW5ndGhdOnRoaXNbYV06Ui5jYWxsKHRoaXMpfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSl7dmFyIGI9Xy5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksYSk7cmV0dXJuIGIucHJldk9iamVjdD10aGlzLGIuY29udGV4dD10aGlzLmNvbnRleHQsYn0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBfLmVhY2godGhpcyxhLGIpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKF8ubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSthKygwPmE/YjowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYj5jP1t0aGlzW2NdXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6VCxzb3J0OlEuc29ydCxzcGxpY2U6US5zcGxpY2V9LF8uZXh0ZW5kPV8uZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc9YXJndW1lbnRzWzBdfHx7fSxoPTEsaT1hcmd1bWVudHMubGVuZ3RoLGo9ITE7Zm9yKFwiYm9vbGVhblwiPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSxcIm9iamVjdFwiPT10eXBlb2YgZ3x8Xy5pc0Z1bmN0aW9uKGcpfHwoZz17fSksaD09PWkmJihnPXRoaXMsaC0tKTtpPmg7aCsrKWlmKG51bGwhPShhPWFyZ3VtZW50c1toXSkpZm9yKGIgaW4gYSljPWdbYl0sZD1hW2JdLGchPT1kJiYoaiYmZCYmKF8uaXNQbGFpbk9iamVjdChkKXx8KGU9Xy5pc0FycmF5KGQpKSk/KGU/KGU9ITEsZj1jJiZfLmlzQXJyYXkoYyk/YzpbXSk6Zj1jJiZfLmlzUGxhaW5PYmplY3QoYyk/Yzp7fSxnW2JdPV8uZXh0ZW5kKGosZixkKSk6dm9pZCAwIT09ZCYmKGdbYl09ZCkpO3JldHVybiBnfSxfLmV4dGVuZCh7ZXhwYW5kbzpcImpRdWVyeVwiKygkK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xcRC9nLFwiXCIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29wOmZ1bmN0aW9uKCl7fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVyblwiZnVuY3Rpb25cIj09PV8udHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5LGlzV2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hJiZhPT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4hXy5pc0FycmF5KGEpJiZhLXBhcnNlRmxvYXQoYSk+PTB9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIiE9PV8udHlwZShhKXx8YS5ub2RlVHlwZXx8Xy5pc1dpbmRvdyhhKT8hMTphLmNvbnN0cnVjdG9yJiYhWC5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLFwiaXNQcm90b3R5cGVPZlwiKT8hMTohMH0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP2ErXCJcIjpcIm9iamVjdFwiPT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT10eXBlb2YgYT9WW1cuY2FsbChhKV18fFwib2JqZWN0XCI6dHlwZW9mIGF9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYSl7dmFyIGIsYz1ldmFsO2E9Xy50cmltKGEpLGEmJigxPT09YS5pbmRleE9mKFwidXNlIHN0cmljdFwiKT8oYj1aLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksYi50ZXh0PWEsWi5oZWFkLmFwcGVuZENoaWxkKGIpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYikpOmMoYSkpfSxjYW1lbENhc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShiYixcIm1zLVwiKS5yZXBsYWNlKGNiLGRiKX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYixkKXt2YXIgZSxmPTAsZz1hLmxlbmd0aCxoPWMoYSk7aWYoZCl7aWYoaClmb3IoO2c+ZiYmKGU9Yi5hcHBseShhW2ZdLGQpLGUhPT0hMSk7ZisrKTtlbHNlIGZvcihmIGluIGEpaWYoZT1iLmFwcGx5KGFbZl0sZCksZT09PSExKWJyZWFrfWVsc2UgaWYoaClmb3IoO2c+ZiYmKGU9Yi5jYWxsKGFbZl0sZixhW2ZdKSxlIT09ITEpO2YrKyk7ZWxzZSBmb3IoZiBpbiBhKWlmKGU9Yi5jYWxsKGFbZl0sZixhW2ZdKSxlPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/XCJcIjooYStcIlwiKS5yZXBsYWNlKGFiLFwiXCIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oYSxiKXt2YXIgZD1ifHxbXTtyZXR1cm4gbnVsbCE9YSYmKGMoT2JqZWN0KGEpKT9fLm1lcmdlKGQsXCJzdHJpbmdcIj09dHlwZW9mIGE/W2FdOmEpOlQuY2FsbChkLGEpKSxkfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbD09Yj8tMTpVLmNhbGwoYixhLGMpfSxtZXJnZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7Yz5kO2QrKylhW2UrK109YltkXTtyZXR1cm4gYS5sZW5ndGg9ZSxhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQsZT1bXSxmPTAsZz1hLmxlbmd0aCxoPSFjO2c+ZjtmKyspZD0hYihhW2ZdLGYpLGQhPT1oJiZlLnB1c2goYVtmXSk7cmV0dXJuIGV9LG1hcDpmdW5jdGlvbihhLGIsZCl7dmFyIGUsZj0wLGc9YS5sZW5ndGgsaD1jKGEpLGk9W107aWYoaClmb3IoO2c+ZjtmKyspZT1iKGFbZl0sZixkKSxudWxsIT1lJiZpLnB1c2goZSk7ZWxzZSBmb3IoZiBpbiBhKWU9YihhW2ZdLGYsZCksbnVsbCE9ZSYmaS5wdXNoKGUpO3JldHVybiBTLmFwcGx5KFtdLGkpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGImJihjPWFbYl0sYj1hLGE9YyksXy5pc0Z1bmN0aW9uKGEpPyhkPVIuY2FsbChhcmd1bWVudHMsMiksZT1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGJ8fHRoaXMsZC5jb25jYXQoUi5jYWxsKGFyZ3VtZW50cykpKX0sZS5ndWlkPWEuZ3VpZD1hLmd1aWR8fF8uZ3VpZCsrLGUpOnZvaWQgMH0sbm93OkRhdGUubm93LHN1cHBvcnQ6WX0pLF8uZWFjaChcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3JcIi5zcGxpdChcIiBcIiksZnVuY3Rpb24oYSxiKXtWW1wiW29iamVjdCBcIitiK1wiXVwiXT1iLnRvTG93ZXJDYXNlKCl9KTt2YXIgZWI9LypcbiAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYxLjEwLjE5XG4gKiBodHRwOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCAyMDEzIGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMTQtMDQtMThcbiAqL1xuICAgIGZ1bmN0aW9uIChhKSB7IGZ1bmN0aW9uIGIoYSwgYiwgYywgZCkgeyB2YXIgZSwgZiwgZywgaCwgaSwgaiwgbCwgbiwgbywgcDsgaWYgKChiID8gYi5vd25lckRvY3VtZW50IHx8IGIgOiBPKSAhPT0gRyAmJiBGKGIpLCBiID0gYiB8fCBHLCBjID0gYyB8fCBbXSwgIWEgfHwgXCJzdHJpbmdcIiAhPSB0eXBlb2YgYSkgcmV0dXJuIGM7IGlmICgxICE9PSAoaCA9IGIubm9kZVR5cGUpICYmIDkgIT09IGgpIHJldHVybiBbXTsgaWYgKEkgJiYgIWQpIHsgaWYgKGUgPSBzYi5leGVjKGEpKSBpZiAoZyA9IGVbMV0pIHsgaWYgKDkgPT09IGgpIHsgaWYgKGYgPSBiLmdldEVsZW1lbnRCeUlkKGcpLCAhZiB8fCAhZi5wYXJlbnROb2RlKSByZXR1cm4gYzsgaWYgKGYuaWQgPT09IGcpIHJldHVybiBjLnB1c2goZiksIGMgfSBlbHNlIGlmIChiLm93bmVyRG9jdW1lbnQgJiYgKGYgPSBiLm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZykpICYmIE0oYiwgZikgJiYgZi5pZCA9PT0gZykgcmV0dXJuIGMucHVzaChmKSwgYyB9IGVsc2UgeyBpZiAoZVsyXSkgcmV0dXJuIF8uYXBwbHkoYywgYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksIGM7IGlmICgoZyA9IGVbM10pICYmIHYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpIHJldHVybiBfLmFwcGx5KGMsIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShnKSksIGMgfSBpZiAodi5xc2EgJiYgKCFKIHx8ICFKLnRlc3QoYSkpKSB7IGlmIChuID0gbCA9IE4sIG8gPSBiLCBwID0gOSA9PT0gaCAmJiBhLCAxID09PSBoICYmIFwib2JqZWN0XCIgIT09IGIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgeyBmb3IgKGogPSB6KGEpLCAobCA9IGIuZ2V0QXR0cmlidXRlKFwiaWRcIikpID8gbiA9IGwucmVwbGFjZSh1YiwgXCJcXFxcJCZcIikgOiBiLnNldEF0dHJpYnV0ZShcImlkXCIsIG4pLCBuID0gXCJbaWQ9J1wiICsgbiArIFwiJ10gXCIsIGkgPSBqLmxlbmd0aDsgaS0tOylqW2ldID0gbiArIG0oaltpXSk7IG8gPSB0Yi50ZXN0KGEpICYmIGsoYi5wYXJlbnROb2RlKSB8fCBiLCBwID0gai5qb2luKFwiLFwiKSB9IGlmIChwKSB0cnkgeyByZXR1cm4gXy5hcHBseShjLCBvLnF1ZXJ5U2VsZWN0b3JBbGwocCkpLCBjIH0gY2F0Y2ggKHEpIHsgfSBmaW5hbGx5IHsgbCB8fCBiLnJlbW92ZUF0dHJpYnV0ZShcImlkXCIpIH0gfSB9IHJldHVybiBCKGEucmVwbGFjZShpYiwgXCIkMVwiKSwgYiwgYywgZCkgfSBmdW5jdGlvbiBjKCkgeyBmdW5jdGlvbiBhKGMsIGQpIHsgcmV0dXJuIGIucHVzaChjICsgXCIgXCIpID4gdy5jYWNoZUxlbmd0aCAmJiBkZWxldGUgYVtiLnNoaWZ0KCldLCBhW2MgKyBcIiBcIl0gPSBkIH0gdmFyIGIgPSBbXTsgcmV0dXJuIGEgfSBmdW5jdGlvbiBkKGEpIHsgcmV0dXJuIGFbTl0gPSAhMCwgYSB9IGZ1bmN0aW9uIGUoYSkgeyB2YXIgYiA9IEcuY3JlYXRlRWxlbWVudChcImRpdlwiKTsgdHJ5IHsgcmV0dXJuICEhYShiKSB9IGNhdGNoIChjKSB7IHJldHVybiAhMSB9IGZpbmFsbHkgeyBiLnBhcmVudE5vZGUgJiYgYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLCBiID0gbnVsbCB9IH0gZnVuY3Rpb24gZihhLCBiKSB7IGZvciAodmFyIGMgPSBhLnNwbGl0KFwifFwiKSwgZCA9IGEubGVuZ3RoOyBkLS07KXcuYXR0ckhhbmRsZVtjW2RdXSA9IGIgfSBmdW5jdGlvbiBnKGEsIGIpIHsgdmFyIGMgPSBiICYmIGEsIGQgPSBjICYmIDEgPT09IGEubm9kZVR5cGUgJiYgMSA9PT0gYi5ub2RlVHlwZSAmJiAofmIuc291cmNlSW5kZXggfHwgVykgLSAofmEuc291cmNlSW5kZXggfHwgVyk7IGlmIChkKSByZXR1cm4gZDsgaWYgKGMpIGZvciAoOyBjID0gYy5uZXh0U2libGluZzspaWYgKGMgPT09IGIpIHJldHVybiAtMTsgcmV0dXJuIGEgPyAxIDogLTEgfSBmdW5jdGlvbiBoKGEpIHsgcmV0dXJuIGZ1bmN0aW9uIChiKSB7IHZhciBjID0gYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gXCJpbnB1dFwiID09PSBjICYmIGIudHlwZSA9PT0gYSB9IH0gZnVuY3Rpb24gaShhKSB7IHJldHVybiBmdW5jdGlvbiAoYikgeyB2YXIgYyA9IGIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsgcmV0dXJuIChcImlucHV0XCIgPT09IGMgfHwgXCJidXR0b25cIiA9PT0gYykgJiYgYi50eXBlID09PSBhIH0gfSBmdW5jdGlvbiBqKGEpIHsgcmV0dXJuIGQoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIgPSArYiwgZChmdW5jdGlvbiAoYywgZCkgeyBmb3IgKHZhciBlLCBmID0gYShbXSwgYy5sZW5ndGgsIGIpLCBnID0gZi5sZW5ndGg7IGctLTspY1tlID0gZltnXV0gJiYgKGNbZV0gPSAhKGRbZV0gPSBjW2VdKSkgfSkgfSkgfSBmdW5jdGlvbiBrKGEpIHsgcmV0dXJuIGEgJiYgdHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFYgJiYgYSB9IGZ1bmN0aW9uIGwoKSB7IH0gZnVuY3Rpb24gbShhKSB7IGZvciAodmFyIGIgPSAwLCBjID0gYS5sZW5ndGgsIGQgPSBcIlwiOyBjID4gYjsgYisrKWQgKz0gYVtiXS52YWx1ZTsgcmV0dXJuIGQgfSBmdW5jdGlvbiBuKGEsIGIsIGMpIHsgdmFyIGQgPSBiLmRpciwgZSA9IGMgJiYgXCJwYXJlbnROb2RlXCIgPT09IGQsIGYgPSBRKys7IHJldHVybiBiLmZpcnN0ID8gZnVuY3Rpb24gKGIsIGMsIGYpIHsgZm9yICg7IGIgPSBiW2RdOylpZiAoMSA9PT0gYi5ub2RlVHlwZSB8fCBlKSByZXR1cm4gYShiLCBjLCBmKSB9IDogZnVuY3Rpb24gKGIsIGMsIGcpIHsgdmFyIGgsIGksIGogPSBbUCwgZl07IGlmIChnKSB7IGZvciAoOyBiID0gYltkXTspaWYgKCgxID09PSBiLm5vZGVUeXBlIHx8IGUpICYmIGEoYiwgYywgZykpIHJldHVybiAhMCB9IGVsc2UgZm9yICg7IGIgPSBiW2RdOylpZiAoMSA9PT0gYi5ub2RlVHlwZSB8fCBlKSB7IGlmIChpID0gYltOXSB8fCAoYltOXSA9IHt9KSwgKGggPSBpW2RdKSAmJiBoWzBdID09PSBQICYmIGhbMV0gPT09IGYpIHJldHVybiBqWzJdID0gaFsyXTsgaWYgKGlbZF0gPSBqLCBqWzJdID0gYShiLCBjLCBnKSkgcmV0dXJuICEwIH0gfSB9IGZ1bmN0aW9uIG8oYSkgeyByZXR1cm4gYS5sZW5ndGggPiAxID8gZnVuY3Rpb24gKGIsIGMsIGQpIHsgZm9yICh2YXIgZSA9IGEubGVuZ3RoOyBlLS07KWlmICghYVtlXShiLCBjLCBkKSkgcmV0dXJuICExOyByZXR1cm4gITAgfSA6IGFbMF0gfSBmdW5jdGlvbiBwKGEsIGMsIGQpIHsgZm9yICh2YXIgZSA9IDAsIGYgPSBjLmxlbmd0aDsgZiA+IGU7IGUrKyliKGEsIGNbZV0sIGQpOyByZXR1cm4gZCB9IGZ1bmN0aW9uIHEoYSwgYiwgYywgZCwgZSkgeyBmb3IgKHZhciBmLCBnID0gW10sIGggPSAwLCBpID0gYS5sZW5ndGgsIGogPSBudWxsICE9IGI7IGkgPiBoOyBoKyspKGYgPSBhW2hdKSAmJiAoIWMgfHwgYyhmLCBkLCBlKSkgJiYgKGcucHVzaChmKSwgaiAmJiBiLnB1c2goaCkpOyByZXR1cm4gZyB9IGZ1bmN0aW9uIHIoYSwgYiwgYywgZSwgZiwgZykgeyByZXR1cm4gZSAmJiAhZVtOXSAmJiAoZSA9IHIoZSkpLCBmICYmICFmW05dICYmIChmID0gcihmLCBnKSksIGQoZnVuY3Rpb24gKGQsIGcsIGgsIGkpIHsgdmFyIGosIGssIGwsIG0gPSBbXSwgbiA9IFtdLCBvID0gZy5sZW5ndGgsIHIgPSBkIHx8IHAoYiB8fCBcIipcIiwgaC5ub2RlVHlwZSA/IFtoXSA6IGgsIFtdKSwgcyA9ICFhIHx8ICFkICYmIGIgPyByIDogcShyLCBtLCBhLCBoLCBpKSwgdCA9IGMgPyBmIHx8IChkID8gYSA6IG8gfHwgZSkgPyBbXSA6IGcgOiBzOyBpZiAoYyAmJiBjKHMsIHQsIGgsIGkpLCBlKSBmb3IgKGogPSBxKHQsIG4pLCBlKGosIFtdLCBoLCBpKSwgayA9IGoubGVuZ3RoOyBrLS07KShsID0galtrXSkgJiYgKHRbbltrXV0gPSAhKHNbbltrXV0gPSBsKSk7IGlmIChkKSB7IGlmIChmIHx8IGEpIHsgaWYgKGYpIHsgZm9yIChqID0gW10sIGsgPSB0Lmxlbmd0aDsgay0tOykobCA9IHRba10pICYmIGoucHVzaChzW2tdID0gbCk7IGYobnVsbCwgdCA9IFtdLCBqLCBpKSB9IGZvciAoayA9IHQubGVuZ3RoOyBrLS07KShsID0gdFtrXSkgJiYgKGogPSBmID8gYmIuY2FsbChkLCBsKSA6IG1ba10pID4gLTEgJiYgKGRbal0gPSAhKGdbal0gPSBsKSkgfSB9IGVsc2UgdCA9IHEodCA9PT0gZyA/IHQuc3BsaWNlKG8sIHQubGVuZ3RoKSA6IHQpLCBmID8gZihudWxsLCBnLCB0LCBpKSA6IF8uYXBwbHkoZywgdCkgfSkgfSBmdW5jdGlvbiBzKGEpIHsgZm9yICh2YXIgYiwgYywgZCwgZSA9IGEubGVuZ3RoLCBmID0gdy5yZWxhdGl2ZVthWzBdLnR5cGVdLCBnID0gZiB8fCB3LnJlbGF0aXZlW1wiIFwiXSwgaCA9IGYgPyAxIDogMCwgaSA9IG4oZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgPT09IGIgfSwgZywgITApLCBqID0gbihmdW5jdGlvbiAoYSkgeyByZXR1cm4gYmIuY2FsbChiLCBhKSA+IC0xIH0sIGcsICEwKSwgayA9IFtmdW5jdGlvbiAoYSwgYywgZCkgeyByZXR1cm4gIWYgJiYgKGQgfHwgYyAhPT0gQykgfHwgKChiID0gYykubm9kZVR5cGUgPyBpKGEsIGMsIGQpIDogaihhLCBjLCBkKSkgfV07IGUgPiBoOyBoKyspaWYgKGMgPSB3LnJlbGF0aXZlW2FbaF0udHlwZV0pIGsgPSBbbihvKGspLCBjKV07IGVsc2UgeyBpZiAoYyA9IHcuZmlsdGVyW2FbaF0udHlwZV0uYXBwbHkobnVsbCwgYVtoXS5tYXRjaGVzKSwgY1tOXSkgeyBmb3IgKGQgPSArK2g7IGUgPiBkICYmICF3LnJlbGF0aXZlW2FbZF0udHlwZV07IGQrKyk7IHJldHVybiByKGggPiAxICYmIG8oayksIGggPiAxICYmIG0oYS5zbGljZSgwLCBoIC0gMSkuY29uY2F0KHsgdmFsdWU6IFwiIFwiID09PSBhW2ggLSAyXS50eXBlID8gXCIqXCIgOiBcIlwiIH0pKS5yZXBsYWNlKGliLCBcIiQxXCIpLCBjLCBkID4gaCAmJiBzKGEuc2xpY2UoaCwgZCkpLCBlID4gZCAmJiBzKGEgPSBhLnNsaWNlKGQpKSwgZSA+IGQgJiYgbShhKSkgfSBrLnB1c2goYykgfSByZXR1cm4gbyhrKSB9IGZ1bmN0aW9uIHQoYSwgYykgeyB2YXIgZSA9IGMubGVuZ3RoID4gMCwgZiA9IGEubGVuZ3RoID4gMCwgZyA9IGZ1bmN0aW9uIChkLCBnLCBoLCBpLCBqKSB7IHZhciBrLCBsLCBtLCBuID0gMCwgbyA9IFwiMFwiLCBwID0gZCAmJiBbXSwgciA9IFtdLCBzID0gQywgdCA9IGQgfHwgZiAmJiB3LmZpbmQuVEFHKFwiKlwiLCBqKSwgdSA9IFAgKz0gbnVsbCA9PSBzID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgLjEsIHYgPSB0Lmxlbmd0aDsgZm9yIChqICYmIChDID0gZyAhPT0gRyAmJiBnKTsgbyAhPT0gdiAmJiBudWxsICE9IChrID0gdFtvXSk7IG8rKykgeyBpZiAoZiAmJiBrKSB7IGZvciAobCA9IDA7IG0gPSBhW2wrK107KWlmIChtKGssIGcsIGgpKSB7IGkucHVzaChrKTsgYnJlYWsgfSBqICYmIChQID0gdSkgfSBlICYmICgoayA9ICFtICYmIGspICYmIG4tLSwgZCAmJiBwLnB1c2goaykpIH0gaWYgKG4gKz0gbywgZSAmJiBvICE9PSBuKSB7IGZvciAobCA9IDA7IG0gPSBjW2wrK107KW0ocCwgciwgZywgaCk7IGlmIChkKSB7IGlmIChuID4gMCkgZm9yICg7IG8tLTspcFtvXSB8fCByW29dIHx8IChyW29dID0gWi5jYWxsKGkpKTsgciA9IHEocikgfSBfLmFwcGx5KGksIHIpLCBqICYmICFkICYmIHIubGVuZ3RoID4gMCAmJiBuICsgYy5sZW5ndGggPiAxICYmIGIudW5pcXVlU29ydChpKSB9IHJldHVybiBqICYmIChQID0gdSwgQyA9IHMpLCBwIH07IHJldHVybiBlID8gZChnKSA6IGcgfSB2YXIgdSwgdiwgdywgeCwgeSwgeiwgQSwgQiwgQywgRCwgRSwgRiwgRywgSCwgSSwgSiwgSywgTCwgTSwgTiA9IFwic2l6emxlXCIgKyAtbmV3IERhdGUsIE8gPSBhLmRvY3VtZW50LCBQID0gMCwgUSA9IDAsIFIgPSBjKCksIFMgPSBjKCksIFQgPSBjKCksIFUgPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSA9PT0gYiAmJiAoRSA9ICEwKSwgMCB9LCBWID0gXCJ1bmRlZmluZWRcIiwgVyA9IDEgPDwgMzEsIFggPSB7fS5oYXNPd25Qcm9wZXJ0eSwgWSA9IFtdLCBaID0gWS5wb3AsICQgPSBZLnB1c2gsIF8gPSBZLnB1c2gsIGFiID0gWS5zbGljZSwgYmIgPSBZLmluZGV4T2YgfHwgZnVuY3Rpb24gKGEpIHsgZm9yICh2YXIgYiA9IDAsIGMgPSB0aGlzLmxlbmd0aDsgYyA+IGI7IGIrKylpZiAodGhpc1tiXSA9PT0gYSkgcmV0dXJuIGI7IHJldHVybiAtMSB9LCBjYiA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIiwgZGIgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsIGViID0gXCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXFxceDAwLVxcXFx4YTBdKStcIiwgZmIgPSBlYi5yZXBsYWNlKFwid1wiLCBcIncjXCIpLCBnYiA9IFwiXFxcXFtcIiArIGRiICsgXCIqKFwiICsgZWIgKyBcIikoPzpcIiArIGRiICsgXCIqKFsqXiR8IX5dPz0pXCIgKyBkYiArIFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBmYiArIFwiKSl8KVwiICsgZGIgKyBcIipcXFxcXVwiLCBoYiA9IFwiOihcIiArIGViICsgXCIpKD86XFxcXCgoKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8KCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgZ2IgKyBcIikqKXwuKilcXFxcKXwpXCIsIGliID0gbmV3IFJlZ0V4cChcIl5cIiArIGRiICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICsgZGIgKyBcIiskXCIsIFwiZ1wiKSwgamIgPSBuZXcgUmVnRXhwKFwiXlwiICsgZGIgKyBcIiosXCIgKyBkYiArIFwiKlwiKSwga2IgPSBuZXcgUmVnRXhwKFwiXlwiICsgZGIgKyBcIiooWz4rfl18XCIgKyBkYiArIFwiKVwiICsgZGIgKyBcIipcIiksIGxiID0gbmV3IFJlZ0V4cChcIj1cIiArIGRiICsgXCIqKFteXFxcXF0nXFxcIl0qPylcIiArIGRiICsgXCIqXFxcXF1cIiwgXCJnXCIpLCBtYiA9IG5ldyBSZWdFeHAoaGIpLCBuYiA9IG5ldyBSZWdFeHAoXCJeXCIgKyBmYiArIFwiJFwiKSwgb2IgPSB7IElEOiBuZXcgUmVnRXhwKFwiXiMoXCIgKyBlYiArIFwiKVwiKSwgQ0xBU1M6IG5ldyBSZWdFeHAoXCJeXFxcXC4oXCIgKyBlYiArIFwiKVwiKSwgVEFHOiBuZXcgUmVnRXhwKFwiXihcIiArIGViLnJlcGxhY2UoXCJ3XCIsIFwidypcIikgKyBcIilcIiksIEFUVFI6IG5ldyBSZWdFeHAoXCJeXCIgKyBnYiksIFBTRVVETzogbmV3IFJlZ0V4cChcIl5cIiArIGhiKSwgQ0hJTEQ6IG5ldyBSZWdFeHAoXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICsgZGIgKyBcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgZGIgKyBcIiooPzooWystXXwpXCIgKyBkYiArIFwiKihcXFxcZCspfCkpXCIgKyBkYiArIFwiKlxcXFwpfClcIiwgXCJpXCIpLCBib29sOiBuZXcgUmVnRXhwKFwiXig/OlwiICsgY2IgKyBcIikkXCIsIFwiaVwiKSwgbmVlZHNDb250ZXh0OiBuZXcgUmVnRXhwKFwiXlwiICsgZGIgKyBcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgKyBkYiArIFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIGRiICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIpIH0sIHBiID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSwgcWIgPSAvXmhcXGQkL2ksIHJiID0gL15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3Lywgc2IgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLywgdGIgPSAvWyt+XS8sIHViID0gLyd8XFxcXC9nLCB2YiA9IG5ldyBSZWdFeHAoXCJcXFxcXFxcXChbXFxcXGRhLWZdezEsNn1cIiArIGRiICsgXCI/fChcIiArIGRiICsgXCIpfC4pXCIsIFwiaWdcIiksIHdiID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQgPSBcIjB4XCIgKyBiIC0gNjU1MzY7IHJldHVybiBkICE9PSBkIHx8IGMgPyBiIDogMCA+IGQgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGQgKyA2NTUzNikgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGQgPj4gMTAgfCA1NTI5NiwgMTAyMyAmIGQgfCA1NjMyMCkgfTsgdHJ5IHsgXy5hcHBseShZID0gYWIuY2FsbChPLmNoaWxkTm9kZXMpLCBPLmNoaWxkTm9kZXMpLCBZW08uY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlIH0gY2F0Y2ggKHhiKSB7IF8gPSB7IGFwcGx5OiBZLmxlbmd0aCA/IGZ1bmN0aW9uIChhLCBiKSB7ICQuYXBwbHkoYSwgYWIuY2FsbChiKSkgfSA6IGZ1bmN0aW9uIChhLCBiKSB7IGZvciAodmFyIGMgPSBhLmxlbmd0aCwgZCA9IDA7IGFbYysrXSA9IGJbZCsrXTspOyBhLmxlbmd0aCA9IGMgLSAxIH0gfSB9IHYgPSBiLnN1cHBvcnQgPSB7fSwgeSA9IGIuaXNYTUwgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEgJiYgKGEub3duZXJEb2N1bWVudCB8fCBhKS5kb2N1bWVudEVsZW1lbnQ7IHJldHVybiBiID8gXCJIVE1MXCIgIT09IGIubm9kZU5hbWUgOiAhMSB9LCBGID0gYi5zZXREb2N1bWVudCA9IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBjID0gYSA/IGEub3duZXJEb2N1bWVudCB8fCBhIDogTywgZCA9IGMuZGVmYXVsdFZpZXc7IHJldHVybiBjICE9PSBHICYmIDkgPT09IGMubm9kZVR5cGUgJiYgYy5kb2N1bWVudEVsZW1lbnQgPyAoRyA9IGMsIEggPSBjLmRvY3VtZW50RWxlbWVudCwgSSA9ICF5KGMpLCBkICYmIGQgIT09IGQudG9wICYmIChkLmFkZEV2ZW50TGlzdGVuZXIgPyBkLmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmxvYWRcIiwgZnVuY3Rpb24gKCkgeyBGKCkgfSwgITEpIDogZC5hdHRhY2hFdmVudCAmJiBkLmF0dGFjaEV2ZW50KFwib251bmxvYWRcIiwgZnVuY3Rpb24gKCkgeyBGKCkgfSkpLCB2LmF0dHJpYnV0ZXMgPSBlKGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmNsYXNzTmFtZSA9IFwiaVwiLCAhYS5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIikgfSksIHYuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBlKGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmFwcGVuZENoaWxkKGMuY3JlYXRlQ29tbWVudChcIlwiKSksICFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKS5sZW5ndGggfSksIHYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJiLnRlc3QoYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSAmJiBlKGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmlubmVySFRNTCA9IFwiPGRpdiBjbGFzcz0nYSc+PC9kaXY+PGRpdiBjbGFzcz0nYSBpJz48L2Rpdj5cIiwgYS5maXJzdENoaWxkLmNsYXNzTmFtZSA9IFwiaVwiLCAyID09PSBhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJpXCIpLmxlbmd0aCB9KSwgdi5nZXRCeUlkID0gZShmdW5jdGlvbiAoYSkgeyByZXR1cm4gSC5hcHBlbmRDaGlsZChhKS5pZCA9IE4sICFjLmdldEVsZW1lbnRzQnlOYW1lIHx8ICFjLmdldEVsZW1lbnRzQnlOYW1lKE4pLmxlbmd0aCB9KSwgdi5nZXRCeUlkID8gKHcuZmluZC5JRCA9IGZ1bmN0aW9uIChhLCBiKSB7IGlmICh0eXBlb2YgYi5nZXRFbGVtZW50QnlJZCAhPT0gViAmJiBJKSB7IHZhciBjID0gYi5nZXRFbGVtZW50QnlJZChhKTsgcmV0dXJuIGMgJiYgYy5wYXJlbnROb2RlID8gW2NdIDogW10gfSB9LCB3LmZpbHRlci5JRCA9IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS5yZXBsYWNlKHZiLCB3Yik7IHJldHVybiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSA9PT0gYiB9IH0pIDogKGRlbGV0ZSB3LmZpbmQuSUQsIHcuZmlsdGVyLklEID0gZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLnJlcGxhY2UodmIsIHdiKTsgcmV0dXJuIGZ1bmN0aW9uIChhKSB7IHZhciBjID0gdHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSAhPT0gViAmJiBhLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTsgcmV0dXJuIGMgJiYgYy52YWx1ZSA9PT0gYiB9IH0pLCB3LmZpbmQuVEFHID0gdi5nZXRFbGVtZW50c0J5VGFnTmFtZSA/IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB0eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gViA/IGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSkgOiB2b2lkIDAgfSA6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkID0gW10sIGUgPSAwLCBmID0gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKTsgaWYgKFwiKlwiID09PSBhKSB7IGZvciAoOyBjID0gZltlKytdOykxID09PSBjLm5vZGVUeXBlICYmIGQucHVzaChjKTsgcmV0dXJuIGQgfSByZXR1cm4gZiB9LCB3LmZpbmQuQ0xBU1MgPSB2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFYgJiYgSSA/IGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhKSA6IHZvaWQgMCB9LCBLID0gW10sIEogPSBbXSwgKHYucXNhID0gcmIudGVzdChjLnF1ZXJ5U2VsZWN0b3JBbGwpKSAmJiAoZShmdW5jdGlvbiAoYSkgeyBhLmlubmVySFRNTCA9IFwiPHNlbGVjdCBtc2FsbG93Y2xpcD0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiLCBhLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbXNhbGxvd2NsaXBePScnXVwiKS5sZW5ndGggJiYgSi5wdXNoKFwiWypeJF09XCIgKyBkYiArIFwiKig/OicnfFxcXCJcXFwiKVwiKSwgYS5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGggfHwgSi5wdXNoKFwiXFxcXFtcIiArIGRiICsgXCIqKD86dmFsdWV8XCIgKyBjYiArIFwiKVwiKSwgYS5xdWVyeVNlbGVjdG9yQWxsKFwiOmNoZWNrZWRcIikubGVuZ3RoIHx8IEoucHVzaChcIjpjaGVja2VkXCIpIH0pLCBlKGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYy5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7IGIuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcImhpZGRlblwiKSwgYS5hcHBlbmRDaGlsZChiKS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwiRFwiKSwgYS5xdWVyeVNlbGVjdG9yQWxsKFwiW25hbWU9ZF1cIikubGVuZ3RoICYmIEoucHVzaChcIm5hbWVcIiArIGRiICsgXCIqWypeJHwhfl0/PVwiKSwgYS5xdWVyeVNlbGVjdG9yQWxsKFwiOmVuYWJsZWRcIikubGVuZ3RoIHx8IEoucHVzaChcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIpLCBhLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqLDp4XCIpLCBKLnB1c2goXCIsLio6XCIpIH0pKSwgKHYubWF0Y2hlc1NlbGVjdG9yID0gcmIudGVzdChMID0gSC5tYXRjaGVzIHx8IEgud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8IEgubW96TWF0Y2hlc1NlbGVjdG9yIHx8IEgub01hdGNoZXNTZWxlY3RvciB8fCBILm1zTWF0Y2hlc1NlbGVjdG9yKSkgJiYgZShmdW5jdGlvbiAoYSkgeyB2LmRpc2Nvbm5lY3RlZE1hdGNoID0gTC5jYWxsKGEsIFwiZGl2XCIpLCBMLmNhbGwoYSwgXCJbcyE9JyddOnhcIiksIEsucHVzaChcIiE9XCIsIGhiKSB9KSwgSiA9IEoubGVuZ3RoICYmIG5ldyBSZWdFeHAoSi5qb2luKFwifFwiKSksIEsgPSBLLmxlbmd0aCAmJiBuZXcgUmVnRXhwKEsuam9pbihcInxcIikpLCBiID0gcmIudGVzdChILmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSwgTSA9IGIgfHwgcmIudGVzdChILmNvbnRhaW5zKSA/IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gOSA9PT0gYS5ub2RlVHlwZSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSwgZCA9IGIgJiYgYi5wYXJlbnROb2RlOyByZXR1cm4gYSA9PT0gZCB8fCAhKCFkIHx8IDEgIT09IGQubm9kZVR5cGUgfHwgIShjLmNvbnRhaW5zID8gYy5jb250YWlucyhkKSA6IGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgMTYgJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQpKSkgfSA6IGZ1bmN0aW9uIChhLCBiKSB7IGlmIChiKSBmb3IgKDsgYiA9IGIucGFyZW50Tm9kZTspaWYgKGIgPT09IGEpIHJldHVybiAhMDsgcmV0dXJuICExIH0sIFUgPSBiID8gZnVuY3Rpb24gKGEsIGIpIHsgaWYgKGEgPT09IGIpIHJldHVybiBFID0gITAsIDA7IHZhciBkID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjsgcmV0dXJuIGQgPyBkIDogKGQgPSAoYS5vd25lckRvY3VtZW50IHx8IGEpID09PSAoYi5vd25lckRvY3VtZW50IHx8IGIpID8gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSA6IDEsIDEgJiBkIHx8ICF2LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpID09PSBkID8gYSA9PT0gYyB8fCBhLm93bmVyRG9jdW1lbnQgPT09IE8gJiYgTShPLCBhKSA/IC0xIDogYiA9PT0gYyB8fCBiLm93bmVyRG9jdW1lbnQgPT09IE8gJiYgTShPLCBiKSA/IDEgOiBEID8gYmIuY2FsbChELCBhKSAtIGJiLmNhbGwoRCwgYikgOiAwIDogNCAmIGQgPyAtMSA6IDEpIH0gOiBmdW5jdGlvbiAoYSwgYikgeyBpZiAoYSA9PT0gYikgcmV0dXJuIEUgPSAhMCwgMDsgdmFyIGQsIGUgPSAwLCBmID0gYS5wYXJlbnROb2RlLCBoID0gYi5wYXJlbnROb2RlLCBpID0gW2FdLCBqID0gW2JdOyBpZiAoIWYgfHwgIWgpIHJldHVybiBhID09PSBjID8gLTEgOiBiID09PSBjID8gMSA6IGYgPyAtMSA6IGggPyAxIDogRCA/IGJiLmNhbGwoRCwgYSkgLSBiYi5jYWxsKEQsIGIpIDogMDsgaWYgKGYgPT09IGgpIHJldHVybiBnKGEsIGIpOyBmb3IgKGQgPSBhOyBkID0gZC5wYXJlbnROb2RlOylpLnVuc2hpZnQoZCk7IGZvciAoZCA9IGI7IGQgPSBkLnBhcmVudE5vZGU7KWoudW5zaGlmdChkKTsgZm9yICg7IGlbZV0gPT09IGpbZV07KWUrKzsgcmV0dXJuIGUgPyBnKGlbZV0sIGpbZV0pIDogaVtlXSA9PT0gTyA/IC0xIDogaltlXSA9PT0gTyA/IDEgOiAwIH0sIGMpIDogRyB9LCBiLm1hdGNoZXMgPSBmdW5jdGlvbiAoYSwgYykgeyByZXR1cm4gYihhLCBudWxsLCBudWxsLCBjKSB9LCBiLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uIChhLCBjKSB7IGlmICgoYS5vd25lckRvY3VtZW50IHx8IGEpICE9PSBHICYmIEYoYSksIGMgPSBjLnJlcGxhY2UobGIsIFwiPSckMSddXCIpLCAhKCF2Lm1hdGNoZXNTZWxlY3RvciB8fCAhSSB8fCBLICYmIEsudGVzdChjKSB8fCBKICYmIEoudGVzdChjKSkpIHRyeSB7IHZhciBkID0gTC5jYWxsKGEsIGMpOyBpZiAoZCB8fCB2LmRpc2Nvbm5lY3RlZE1hdGNoIHx8IGEuZG9jdW1lbnQgJiYgMTEgIT09IGEuZG9jdW1lbnQubm9kZVR5cGUpIHJldHVybiBkIH0gY2F0Y2ggKGUpIHsgfSByZXR1cm4gYihjLCBHLCBudWxsLCBbYV0pLmxlbmd0aCA+IDAgfSwgYi5jb250YWlucyA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiAoYS5vd25lckRvY3VtZW50IHx8IGEpICE9PSBHICYmIEYoYSksIE0oYSwgYikgfSwgYi5hdHRyID0gZnVuY3Rpb24gKGEsIGIpIHsgKGEub3duZXJEb2N1bWVudCB8fCBhKSAhPT0gRyAmJiBGKGEpOyB2YXIgYyA9IHcuYXR0ckhhbmRsZVtiLnRvTG93ZXJDYXNlKCldLCBkID0gYyAmJiBYLmNhbGwody5hdHRySGFuZGxlLCBiLnRvTG93ZXJDYXNlKCkpID8gYyhhLCBiLCAhSSkgOiB2b2lkIDA7IHJldHVybiB2b2lkIDAgIT09IGQgPyBkIDogdi5hdHRyaWJ1dGVzIHx8ICFJID8gYS5nZXRBdHRyaWJ1dGUoYikgOiAoZCA9IGEuZ2V0QXR0cmlidXRlTm9kZShiKSkgJiYgZC5zcGVjaWZpZWQgPyBkLnZhbHVlIDogbnVsbCB9LCBiLmVycm9yID0gZnVuY3Rpb24gKGEpIHsgdGhyb3cgbmV3IEVycm9yKFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBhKSB9LCBiLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYyA9IFtdLCBkID0gMCwgZSA9IDA7IGlmIChFID0gIXYuZGV0ZWN0RHVwbGljYXRlcywgRCA9ICF2LnNvcnRTdGFibGUgJiYgYS5zbGljZSgwKSwgYS5zb3J0KFUpLCBFKSB7IGZvciAoOyBiID0gYVtlKytdOyliID09PSBhW2VdICYmIChkID0gYy5wdXNoKGUpKTsgZm9yICg7IGQtLTspYS5zcGxpY2UoY1tkXSwgMSkgfSByZXR1cm4gRCA9IG51bGwsIGEgfSwgeCA9IGIuZ2V0VGV4dCA9IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBjID0gXCJcIiwgZCA9IDAsIGUgPSBhLm5vZGVUeXBlOyBpZiAoZSkgeyBpZiAoMSA9PT0gZSB8fCA5ID09PSBlIHx8IDExID09PSBlKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBhLnRleHRDb250ZW50KSByZXR1cm4gYS50ZXh0Q29udGVudDsgZm9yIChhID0gYS5maXJzdENoaWxkOyBhOyBhID0gYS5uZXh0U2libGluZyljICs9IHgoYSkgfSBlbHNlIGlmICgzID09PSBlIHx8IDQgPT09IGUpIHJldHVybiBhLm5vZGVWYWx1ZSB9IGVsc2UgZm9yICg7IGIgPSBhW2QrK107KWMgKz0geChiKTsgcmV0dXJuIGMgfSwgdyA9IGIuc2VsZWN0b3JzID0geyBjYWNoZUxlbmd0aDogNTAsIGNyZWF0ZVBzZXVkbzogZCwgbWF0Y2g6IG9iLCBhdHRySGFuZGxlOiB7fSwgZmluZDoge30sIHJlbGF0aXZlOiB7IFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiAhMCB9LCBcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sIFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6ICEwIH0sIFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9IH0sIHByZUZpbHRlcjogeyBBVFRSOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYVsxXSA9IGFbMV0ucmVwbGFjZSh2Yiwgd2IpLCBhWzNdID0gKGFbM10gfHwgYVs0XSB8fCBhWzVdIHx8IFwiXCIpLnJlcGxhY2UodmIsIHdiKSwgXCJ+PVwiID09PSBhWzJdICYmIChhWzNdID0gXCIgXCIgKyBhWzNdICsgXCIgXCIpLCBhLnNsaWNlKDAsIDQpIH0sIENISUxEOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYVsxXSA9IGFbMV0udG9Mb3dlckNhc2UoKSwgXCJudGhcIiA9PT0gYVsxXS5zbGljZSgwLCAzKSA/IChhWzNdIHx8IGIuZXJyb3IoYVswXSksIGFbNF0gPSArKGFbNF0gPyBhWzVdICsgKGFbNl0gfHwgMSkgOiAyICogKFwiZXZlblwiID09PSBhWzNdIHx8IFwib2RkXCIgPT09IGFbM10pKSwgYVs1XSA9ICsoYVs3XSArIGFbOF0gfHwgXCJvZGRcIiA9PT0gYVszXSkpIDogYVszXSAmJiBiLmVycm9yKGFbMF0pLCBhIH0sIFBTRVVETzogZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGMgPSAhYVs2XSAmJiBhWzJdOyByZXR1cm4gb2IuQ0hJTEQudGVzdChhWzBdKSA/IG51bGwgOiAoYVszXSA/IGFbMl0gPSBhWzRdIHx8IGFbNV0gfHwgXCJcIiA6IGMgJiYgbWIudGVzdChjKSAmJiAoYiA9IHooYywgITApKSAmJiAoYiA9IGMuaW5kZXhPZihcIilcIiwgYy5sZW5ndGggLSBiKSAtIGMubGVuZ3RoKSAmJiAoYVswXSA9IGFbMF0uc2xpY2UoMCwgYiksIGFbMl0gPSBjLnNsaWNlKDAsIGIpKSwgYS5zbGljZSgwLCAzKSkgfSB9LCBmaWx0ZXI6IHsgVEFHOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEucmVwbGFjZSh2Yiwgd2IpLnRvTG93ZXJDYXNlKCk7IHJldHVybiBcIipcIiA9PT0gYSA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuICEwIH0gOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5ub2RlTmFtZSAmJiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IGIgfSB9LCBDTEFTUzogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBSW2EgKyBcIiBcIl07IHJldHVybiBiIHx8IChiID0gbmV3IFJlZ0V4cChcIihefFwiICsgZGIgKyBcIilcIiArIGEgKyBcIihcIiArIGRiICsgXCJ8JClcIikpICYmIFIoYSwgZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGIudGVzdChcInN0cmluZ1wiID09IHR5cGVvZiBhLmNsYXNzTmFtZSAmJiBhLmNsYXNzTmFtZSB8fCB0eXBlb2YgYS5nZXRBdHRyaWJ1dGUgIT09IFYgJiYgYS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiKSB9KSB9LCBBVFRSOiBmdW5jdGlvbiAoYSwgYywgZCkgeyByZXR1cm4gZnVuY3Rpb24gKGUpIHsgdmFyIGYgPSBiLmF0dHIoZSwgYSk7IHJldHVybiBudWxsID09IGYgPyBcIiE9XCIgPT09IGMgOiBjID8gKGYgKz0gXCJcIiwgXCI9XCIgPT09IGMgPyBmID09PSBkIDogXCIhPVwiID09PSBjID8gZiAhPT0gZCA6IFwiXj1cIiA9PT0gYyA/IGQgJiYgMCA9PT0gZi5pbmRleE9mKGQpIDogXCIqPVwiID09PSBjID8gZCAmJiBmLmluZGV4T2YoZCkgPiAtMSA6IFwiJD1cIiA9PT0gYyA/IGQgJiYgZi5zbGljZSgtZC5sZW5ndGgpID09PSBkIDogXCJ+PVwiID09PSBjID8gKFwiIFwiICsgZiArIFwiIFwiKS5pbmRleE9mKGQpID4gLTEgOiBcInw9XCIgPT09IGMgPyBmID09PSBkIHx8IGYuc2xpY2UoMCwgZC5sZW5ndGggKyAxKSA9PT0gZCArIFwiLVwiIDogITEpIDogITAgfSB9LCBDSElMRDogZnVuY3Rpb24gKGEsIGIsIGMsIGQsIGUpIHsgdmFyIGYgPSBcIm50aFwiICE9PSBhLnNsaWNlKDAsIDMpLCBnID0gXCJsYXN0XCIgIT09IGEuc2xpY2UoLTQpLCBoID0gXCJvZi10eXBlXCIgPT09IGI7IHJldHVybiAxID09PSBkICYmIDAgPT09IGUgPyBmdW5jdGlvbiAoYSkgeyByZXR1cm4gISFhLnBhcmVudE5vZGUgfSA6IGZ1bmN0aW9uIChiLCBjLCBpKSB7IHZhciBqLCBrLCBsLCBtLCBuLCBvLCBwID0gZiAhPT0gZyA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsIHEgPSBiLnBhcmVudE5vZGUsIHIgPSBoICYmIGIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgcyA9ICFpICYmICFoOyBpZiAocSkgeyBpZiAoZikgeyBmb3IgKDsgcDspIHsgZm9yIChsID0gYjsgbCA9IGxbcF07KWlmIChoID8gbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSByIDogMSA9PT0gbC5ub2RlVHlwZSkgcmV0dXJuICExOyBvID0gcCA9IFwib25seVwiID09PSBhICYmICFvICYmIFwibmV4dFNpYmxpbmdcIiB9IHJldHVybiAhMCB9IGlmIChvID0gW2cgPyBxLmZpcnN0Q2hpbGQgOiBxLmxhc3RDaGlsZF0sIGcgJiYgcykgeyBmb3IgKGsgPSBxW05dIHx8IChxW05dID0ge30pLCBqID0ga1thXSB8fCBbXSwgbiA9IGpbMF0gPT09IFAgJiYgalsxXSwgbSA9IGpbMF0gPT09IFAgJiYgalsyXSwgbCA9IG4gJiYgcS5jaGlsZE5vZGVzW25dOyBsID0gKytuICYmIGwgJiYgbFtwXSB8fCAobSA9IG4gPSAwKSB8fCBvLnBvcCgpOylpZiAoMSA9PT0gbC5ub2RlVHlwZSAmJiArK20gJiYgbCA9PT0gYikgeyBrW2FdID0gW1AsIG4sIG1dOyBicmVhayB9IH0gZWxzZSBpZiAocyAmJiAoaiA9IChiW05dIHx8IChiW05dID0ge30pKVthXSkgJiYgalswXSA9PT0gUCkgbSA9IGpbMV07IGVsc2UgZm9yICg7IChsID0gKytuICYmIGwgJiYgbFtwXSB8fCAobSA9IG4gPSAwKSB8fCBvLnBvcCgpKSAmJiAoKGggPyBsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IHIgOiAxICE9PSBsLm5vZGVUeXBlKSB8fCAhKyttIHx8IChzICYmICgobFtOXSB8fCAobFtOXSA9IHt9KSlbYV0gPSBbUCwgbV0pLCBsICE9PSBiKSk7KTsgcmV0dXJuIG0gLT0gZSwgbSA9PT0gZCB8fCBtICUgZCA9PT0gMCAmJiBtIC8gZCA+PSAwIH0gfSB9LCBQU0VVRE86IGZ1bmN0aW9uIChhLCBjKSB7IHZhciBlLCBmID0gdy5wc2V1ZG9zW2FdIHx8IHcuc2V0RmlsdGVyc1thLnRvTG93ZXJDYXNlKCldIHx8IGIuZXJyb3IoXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgYSk7IHJldHVybiBmW05dID8gZihjKSA6IGYubGVuZ3RoID4gMSA/IChlID0gW2EsIGEsIFwiXCIsIGNdLCB3LnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKSA/IGQoZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgZCwgZSA9IGYoYSwgYyksIGcgPSBlLmxlbmd0aDsgZy0tOylkID0gYmIuY2FsbChhLCBlW2ddKSwgYVtkXSA9ICEoYltkXSA9IGVbZ10pIH0pIDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGYoYSwgMCwgZSkgfSkgOiBmIH0gfSwgcHNldWRvczogeyBub3Q6IGQoZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBbXSwgYyA9IFtdLCBlID0gQShhLnJlcGxhY2UoaWIsIFwiJDFcIikpOyByZXR1cm4gZVtOXSA/IGQoZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgZm9yICh2YXIgZiwgZyA9IGUoYSwgbnVsbCwgZCwgW10pLCBoID0gYS5sZW5ndGg7IGgtLTspKGYgPSBnW2hdKSAmJiAoYVtoXSA9ICEoYltoXSA9IGYpKSB9KSA6IGZ1bmN0aW9uIChhLCBkLCBmKSB7IHJldHVybiBiWzBdID0gYSwgZShiLCBudWxsLCBmLCBjKSwgIWMucG9wKCkgfSB9KSwgaGFzOiBkKGZ1bmN0aW9uIChhKSB7IHJldHVybiBmdW5jdGlvbiAoYykgeyByZXR1cm4gYihhLCBjKS5sZW5ndGggPiAwIH0gfSksIGNvbnRhaW5zOiBkKGZ1bmN0aW9uIChhKSB7IHJldHVybiBmdW5jdGlvbiAoYikgeyByZXR1cm4gKGIudGV4dENvbnRlbnQgfHwgYi5pbm5lclRleHQgfHwgeChiKSkuaW5kZXhPZihhKSA+IC0xIH0gfSksIGxhbmc6IGQoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG5iLnRlc3QoYSB8fCBcIlwiKSB8fCBiLmVycm9yKFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBhKSwgYSA9IGEucmVwbGFjZSh2Yiwgd2IpLnRvTG93ZXJDYXNlKCksIGZ1bmN0aW9uIChiKSB7IHZhciBjOyBkbyBpZiAoYyA9IEkgPyBiLmxhbmcgOiBiLmdldEF0dHJpYnV0ZShcInhtbDpsYW5nXCIpIHx8IGIuZ2V0QXR0cmlidXRlKFwibGFuZ1wiKSkgcmV0dXJuIGMgPSBjLnRvTG93ZXJDYXNlKCksIGMgPT09IGEgfHwgMCA9PT0gYy5pbmRleE9mKGEgKyBcIi1cIik7IHdoaWxlICgoYiA9IGIucGFyZW50Tm9kZSkgJiYgMSA9PT0gYi5ub2RlVHlwZSk7IHJldHVybiAhMSB9IH0pLCB0YXJnZXQ6IGZ1bmN0aW9uIChiKSB7IHZhciBjID0gYS5sb2NhdGlvbiAmJiBhLmxvY2F0aW9uLmhhc2g7IHJldHVybiBjICYmIGMuc2xpY2UoMSkgPT09IGIuaWQgfSwgcm9vdDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgPT09IEggfSwgZm9jdXM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhID09PSBHLmFjdGl2ZUVsZW1lbnQgJiYgKCFHLmhhc0ZvY3VzIHx8IEcuaGFzRm9jdXMoKSkgJiYgISEoYS50eXBlIHx8IGEuaHJlZiB8fCB+YS50YWJJbmRleCkgfSwgZW5hYmxlZDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuZGlzYWJsZWQgPT09ICExIH0sIGRpc2FibGVkOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5kaXNhYmxlZCA9PT0gITAgfSwgY2hlY2tlZDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7IHJldHVybiBcImlucHV0XCIgPT09IGIgJiYgISFhLmNoZWNrZWQgfHwgXCJvcHRpb25cIiA9PT0gYiAmJiAhIWEuc2VsZWN0ZWQgfSwgc2VsZWN0ZWQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLnBhcmVudE5vZGUgJiYgYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsIGEuc2VsZWN0ZWQgPT09ICEwIH0sIGVtcHR5OiBmdW5jdGlvbiAoYSkgeyBmb3IgKGEgPSBhLmZpcnN0Q2hpbGQ7IGE7IGEgPSBhLm5leHRTaWJsaW5nKWlmIChhLm5vZGVUeXBlIDwgNikgcmV0dXJuICExOyByZXR1cm4gITAgfSwgcGFyZW50OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gIXcucHNldWRvcy5lbXB0eShhKSB9LCBoZWFkZXI6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBxYi50ZXN0KGEubm9kZU5hbWUpIH0sIGlucHV0OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gcGIudGVzdChhLm5vZGVOYW1lKSB9LCBidXR0b246IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gXCJpbnB1dFwiID09PSBiICYmIFwiYnV0dG9uXCIgPT09IGEudHlwZSB8fCBcImJ1dHRvblwiID09PSBiIH0sIHRleHQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiOyByZXR1cm4gXCJpbnB1dFwiID09PSBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgJiYgXCJ0ZXh0XCIgPT09IGEudHlwZSAmJiAobnVsbCA9PSAoYiA9IGEuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkgfHwgXCJ0ZXh0XCIgPT09IGIudG9Mb3dlckNhc2UoKSkgfSwgZmlyc3Q6IGooZnVuY3Rpb24gKCkgeyByZXR1cm4gWzBdIH0pLCBsYXN0OiBqKGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBbYiAtIDFdIH0pLCBlcTogaihmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gWzAgPiBjID8gYyArIGIgOiBjXSB9KSwgZXZlbjogaihmdW5jdGlvbiAoYSwgYikgeyBmb3IgKHZhciBjID0gMDsgYiA+IGM7IGMgKz0gMilhLnB1c2goYyk7IHJldHVybiBhIH0pLCBvZGQ6IGooZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgYyA9IDE7IGIgPiBjOyBjICs9IDIpYS5wdXNoKGMpOyByZXR1cm4gYSB9KSwgbHQ6IGooZnVuY3Rpb24gKGEsIGIsIGMpIHsgZm9yICh2YXIgZCA9IDAgPiBjID8gYyArIGIgOiBjOyAtLWQgPj0gMDspYS5wdXNoKGQpOyByZXR1cm4gYSB9KSwgZ3Q6IGooZnVuY3Rpb24gKGEsIGIsIGMpIHsgZm9yICh2YXIgZCA9IDAgPiBjID8gYyArIGIgOiBjOyArK2QgPCBiOylhLnB1c2goZCk7IHJldHVybiBhIH0pIH0gfSwgdy5wc2V1ZG9zLm50aCA9IHcucHNldWRvcy5lcTsgZm9yICh1IGluIHsgcmFkaW86ICEwLCBjaGVja2JveDogITAsIGZpbGU6ICEwLCBwYXNzd29yZDogITAsIGltYWdlOiAhMCB9KSB3LnBzZXVkb3NbdV0gPSBoKHUpOyBmb3IgKHUgaW4geyBzdWJtaXQ6ICEwLCByZXNldDogITAgfSkgdy5wc2V1ZG9zW3VdID0gaSh1KTsgcmV0dXJuIGwucHJvdG90eXBlID0gdy5maWx0ZXJzID0gdy5wc2V1ZG9zLCB3LnNldEZpbHRlcnMgPSBuZXcgbCwgeiA9IGIudG9rZW5pemUgPSBmdW5jdGlvbiAoYSwgYykgeyB2YXIgZCwgZSwgZiwgZywgaCwgaSwgaiwgayA9IFNbYSArIFwiIFwiXTsgaWYgKGspIHJldHVybiBjID8gMCA6IGsuc2xpY2UoMCk7IGZvciAoaCA9IGEsIGkgPSBbXSwgaiA9IHcucHJlRmlsdGVyOyBoOykgeyAoIWQgfHwgKGUgPSBqYi5leGVjKGgpKSkgJiYgKGUgJiYgKGggPSBoLnNsaWNlKGVbMF0ubGVuZ3RoKSB8fCBoKSwgaS5wdXNoKGYgPSBbXSkpLCBkID0gITEsIChlID0ga2IuZXhlYyhoKSkgJiYgKGQgPSBlLnNoaWZ0KCksIGYucHVzaCh7IHZhbHVlOiBkLCB0eXBlOiBlWzBdLnJlcGxhY2UoaWIsIFwiIFwiKSB9KSwgaCA9IGguc2xpY2UoZC5sZW5ndGgpKTsgZm9yIChnIGluIHcuZmlsdGVyKSAhKGUgPSBvYltnXS5leGVjKGgpKSB8fCBqW2ddICYmICEoZSA9IGpbZ10oZSkpIHx8IChkID0gZS5zaGlmdCgpLCBmLnB1c2goeyB2YWx1ZTogZCwgdHlwZTogZywgbWF0Y2hlczogZSB9KSwgaCA9IGguc2xpY2UoZC5sZW5ndGgpKTsgaWYgKCFkKSBicmVhayB9IHJldHVybiBjID8gaC5sZW5ndGggOiBoID8gYi5lcnJvcihhKSA6IFMoYSwgaSkuc2xpY2UoMCkgfSwgQSA9IGIuY29tcGlsZSA9IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkID0gW10sIGUgPSBbXSwgZiA9IFRbYSArIFwiIFwiXTsgaWYgKCFmKSB7IGZvciAoYiB8fCAoYiA9IHooYSkpLCBjID0gYi5sZW5ndGg7IGMtLTspZiA9IHMoYltjXSksIGZbTl0gPyBkLnB1c2goZikgOiBlLnB1c2goZik7IGYgPSBUKGEsIHQoZSwgZCkpLCBmLnNlbGVjdG9yID0gYSB9IHJldHVybiBmIH0sIEIgPSBiLnNlbGVjdCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHZhciBlLCBmLCBnLCBoLCBpLCBqID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBhICYmIGEsIGwgPSAhZCAmJiB6KGEgPSBqLnNlbGVjdG9yIHx8IGEpOyBpZiAoYyA9IGMgfHwgW10sIDEgPT09IGwubGVuZ3RoKSB7IGlmIChmID0gbFswXSA9IGxbMF0uc2xpY2UoMCksIGYubGVuZ3RoID4gMiAmJiBcIklEXCIgPT09IChnID0gZlswXSkudHlwZSAmJiB2LmdldEJ5SWQgJiYgOSA9PT0gYi5ub2RlVHlwZSAmJiBJICYmIHcucmVsYXRpdmVbZlsxXS50eXBlXSkgeyBpZiAoYiA9ICh3LmZpbmQuSUQoZy5tYXRjaGVzWzBdLnJlcGxhY2UodmIsIHdiKSwgYikgfHwgW10pWzBdLCAhYikgcmV0dXJuIGM7IGogJiYgKGIgPSBiLnBhcmVudE5vZGUpLCBhID0gYS5zbGljZShmLnNoaWZ0KCkudmFsdWUubGVuZ3RoKSB9IGZvciAoZSA9IG9iLm5lZWRzQ29udGV4dC50ZXN0KGEpID8gMCA6IGYubGVuZ3RoOyBlLS0gJiYgKGcgPSBmW2VdLCAhdy5yZWxhdGl2ZVtoID0gZy50eXBlXSk7KWlmICgoaSA9IHcuZmluZFtoXSkgJiYgKGQgPSBpKGcubWF0Y2hlc1swXS5yZXBsYWNlKHZiLCB3YiksIHRiLnRlc3QoZlswXS50eXBlKSAmJiBrKGIucGFyZW50Tm9kZSkgfHwgYikpKSB7IGlmIChmLnNwbGljZShlLCAxKSwgYSA9IGQubGVuZ3RoICYmIG0oZiksICFhKSByZXR1cm4gXy5hcHBseShjLCBkKSwgYzsgYnJlYWsgfSB9IHJldHVybiAoaiB8fCBBKGEsIGwpKShkLCBiLCAhSSwgYywgdGIudGVzdChhKSAmJiBrKGIucGFyZW50Tm9kZSkgfHwgYiksIGMgfSwgdi5zb3J0U3RhYmxlID0gTi5zcGxpdChcIlwiKS5zb3J0KFUpLmpvaW4oXCJcIikgPT09IE4sIHYuZGV0ZWN0RHVwbGljYXRlcyA9ICEhRSwgRigpLCB2LnNvcnREZXRhY2hlZCA9IGUoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIDEgJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKEcuY3JlYXRlRWxlbWVudChcImRpdlwiKSkgfSksIGUoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCIsIFwiI1wiID09PSBhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSB9KSB8fCBmKFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLCBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gYyA/IHZvaWQgMCA6IGEuZ2V0QXR0cmlidXRlKGIsIFwidHlwZVwiID09PSBiLnRvTG93ZXJDYXNlKCkgPyAxIDogMikgfSksIHYuYXR0cmlidXRlcyAmJiBlKGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmlubmVySFRNTCA9IFwiPGlucHV0Lz5cIiwgYS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsIFwiXCIpLCBcIlwiID09PSBhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwidmFsdWVcIikgfSkgfHwgZihcInZhbHVlXCIsIGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBjIHx8IFwiaW5wdXRcIiAhPT0gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID8gdm9pZCAwIDogYS5kZWZhdWx0VmFsdWUgfSksIGUoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG51bGwgPT0gYS5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSB9KSB8fCBmKGNiLCBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZDsgcmV0dXJuIGMgPyB2b2lkIDAgOiBhW2JdID09PSAhMCA/IGIudG9Mb3dlckNhc2UoKSA6IChkID0gYS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSAmJiBkLnNwZWNpZmllZCA/IGQudmFsdWUgOiBudWxsIH0pLCBiIH0oYSk7IF8uZmluZCA9IGViLCBfLmV4cHIgPSBlYi5zZWxlY3RvcnMsIF8uZXhwcltcIjpcIl0gPSBfLmV4cHIucHNldWRvcywgXy51bmlxdWUgPSBlYi51bmlxdWVTb3J0LCBfLnRleHQgPSBlYi5nZXRUZXh0LCBfLmlzWE1MRG9jID0gZWIuaXNYTUwsIF8uY29udGFpbnMgPSBlYi5jb250YWluczsgdmFyIGZiID0gXy5leHByLm1hdGNoLm5lZWRzQ29udGV4dCwgZ2IgPSAvXjwoXFx3KylcXHMqXFwvPz4oPzo8XFwvXFwxPnwpJC8sIGhiID0gL14uW146I1xcW1xcLixdKiQvOyBfLmZpbHRlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkID0gYlswXTsgcmV0dXJuIGMgJiYgKGEgPSBcIjpub3QoXCIgKyBhICsgXCIpXCIpLCAxID09PSBiLmxlbmd0aCAmJiAxID09PSBkLm5vZGVUeXBlID8gXy5maW5kLm1hdGNoZXNTZWxlY3RvcihkLCBhKSA/IFtkXSA6IFtdIDogXy5maW5kLm1hdGNoZXMoYSwgXy5ncmVwKGIsIGZ1bmN0aW9uIChhKSB7IHJldHVybiAxID09PSBhLm5vZGVUeXBlIH0pKSB9LCBfLmZuLmV4dGVuZCh7IGZpbmQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBjID0gdGhpcy5sZW5ndGgsIGQgPSBbXSwgZSA9IHRoaXM7IGlmIChcInN0cmluZ1wiICE9IHR5cGVvZiBhKSByZXR1cm4gdGhpcy5wdXNoU3RhY2soXyhhKS5maWx0ZXIoZnVuY3Rpb24gKCkgeyBmb3IgKGIgPSAwOyBjID4gYjsgYisrKWlmIChfLmNvbnRhaW5zKGVbYl0sIHRoaXMpKSByZXR1cm4gITAgfSkpOyBmb3IgKGIgPSAwOyBjID4gYjsgYisrKV8uZmluZChhLCBlW2JdLCBkKTsgcmV0dXJuIGQgPSB0aGlzLnB1c2hTdGFjayhjID4gMSA/IF8udW5pcXVlKGQpIDogZCksIGQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yID8gdGhpcy5zZWxlY3RvciArIFwiIFwiICsgYSA6IGEsIGQgfSwgZmlsdGVyOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5wdXNoU3RhY2soZCh0aGlzLCBhIHx8IFtdLCAhMSkpIH0sIG5vdDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKGQodGhpcywgYSB8fCBbXSwgITApKSB9LCBpczogZnVuY3Rpb24gKGEpIHsgcmV0dXJuICEhZCh0aGlzLCBcInN0cmluZ1wiID09IHR5cGVvZiBhICYmIGZiLnRlc3QoYSkgPyBfKGEpIDogYSB8fCBbXSwgITEpLmxlbmd0aCB9IH0pOyB2YXIgaWIsIGpiID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKikpJC8sIGtiID0gXy5mbi5pbml0ID0gZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQ7IGlmICghYSkgcmV0dXJuIHRoaXM7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBhKSB7IGlmIChjID0gXCI8XCIgPT09IGFbMF0gJiYgXCI+XCIgPT09IGFbYS5sZW5ndGggLSAxXSAmJiBhLmxlbmd0aCA+PSAzID8gW251bGwsIGEsIG51bGxdIDogamIuZXhlYyhhKSwgIWMgfHwgIWNbMV0gJiYgYikgcmV0dXJuICFiIHx8IGIuanF1ZXJ5ID8gKGIgfHwgaWIpLmZpbmQoYSkgOiB0aGlzLmNvbnN0cnVjdG9yKGIpLmZpbmQoYSk7IGlmIChjWzFdKSB7IGlmIChiID0gYiBpbnN0YW5jZW9mIF8gPyBiWzBdIDogYiwgXy5tZXJnZSh0aGlzLCBfLnBhcnNlSFRNTChjWzFdLCBiICYmIGIubm9kZVR5cGUgPyBiLm93bmVyRG9jdW1lbnQgfHwgYiA6IFosICEwKSksIGdiLnRlc3QoY1sxXSkgJiYgXy5pc1BsYWluT2JqZWN0KGIpKSBmb3IgKGMgaW4gYikgXy5pc0Z1bmN0aW9uKHRoaXNbY10pID8gdGhpc1tjXShiW2NdKSA6IHRoaXMuYXR0cihjLCBiW2NdKTsgcmV0dXJuIHRoaXMgfSByZXR1cm4gZCA9IFouZ2V0RWxlbWVudEJ5SWQoY1syXSksIGQgJiYgZC5wYXJlbnROb2RlICYmICh0aGlzLmxlbmd0aCA9IDEsIHRoaXNbMF0gPSBkKSwgdGhpcy5jb250ZXh0ID0gWiwgdGhpcy5zZWxlY3RvciA9IGEsIHRoaXMgfSByZXR1cm4gYS5ub2RlVHlwZSA/ICh0aGlzLmNvbnRleHQgPSB0aGlzWzBdID0gYSwgdGhpcy5sZW5ndGggPSAxLCB0aGlzKSA6IF8uaXNGdW5jdGlvbihhKSA/IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIGliLnJlYWR5ID8gaWIucmVhZHkoYSkgOiBhKF8pIDogKHZvaWQgMCAhPT0gYS5zZWxlY3RvciAmJiAodGhpcy5zZWxlY3RvciA9IGEuc2VsZWN0b3IsIHRoaXMuY29udGV4dCA9IGEuY29udGV4dCksIF8ubWFrZUFycmF5KGEsIHRoaXMpKSB9OyBrYi5wcm90b3R5cGUgPSBfLmZuLCBpYiA9IF8oWik7IHZhciBsYiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLCBtYiA9IHsgY2hpbGRyZW46ICEwLCBjb250ZW50czogITAsIG5leHQ6ICEwLCBwcmV2OiAhMCB9OyBfLmV4dGVuZCh7IGRpcjogZnVuY3Rpb24gKGEsIGIsIGMpIHsgZm9yICh2YXIgZCA9IFtdLCBlID0gdm9pZCAwICE9PSBjOyAoYSA9IGFbYl0pICYmIDkgIT09IGEubm9kZVR5cGU7KWlmICgxID09PSBhLm5vZGVUeXBlKSB7IGlmIChlICYmIF8oYSkuaXMoYykpIGJyZWFrOyBkLnB1c2goYSkgfSByZXR1cm4gZCB9LCBzaWJsaW5nOiBmdW5jdGlvbiAoYSwgYikgeyBmb3IgKHZhciBjID0gW107IGE7IGEgPSBhLm5leHRTaWJsaW5nKTEgPT09IGEubm9kZVR5cGUgJiYgYSAhPT0gYiAmJiBjLnB1c2goYSk7IHJldHVybiBjIH0gfSksIF8uZm4uZXh0ZW5kKHsgaGFzOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IF8oYSwgdGhpcyksIGMgPSBiLmxlbmd0aDsgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uICgpIHsgZm9yICh2YXIgYSA9IDA7IGMgPiBhOyBhKyspaWYgKF8uY29udGFpbnModGhpcywgYlthXSkpIHJldHVybiAhMCB9KSB9LCBjbG9zZXN0OiBmdW5jdGlvbiAoYSwgYikgeyBmb3IgKHZhciBjLCBkID0gMCwgZSA9IHRoaXMubGVuZ3RoLCBmID0gW10sIGcgPSBmYi50ZXN0KGEpIHx8IFwic3RyaW5nXCIgIT0gdHlwZW9mIGEgPyBfKGEsIGIgfHwgdGhpcy5jb250ZXh0KSA6IDA7IGUgPiBkOyBkKyspZm9yIChjID0gdGhpc1tkXTsgYyAmJiBjICE9PSBiOyBjID0gYy5wYXJlbnROb2RlKWlmIChjLm5vZGVUeXBlIDwgMTEgJiYgKGcgPyBnLmluZGV4KGMpID4gLTEgOiAxID09PSBjLm5vZGVUeXBlICYmIF8uZmluZC5tYXRjaGVzU2VsZWN0b3IoYywgYSkpKSB7IGYucHVzaChjKTsgYnJlYWsgfSByZXR1cm4gdGhpcy5wdXNoU3RhY2soZi5sZW5ndGggPiAxID8gXy51bmlxdWUoZikgOiBmKSB9LCBpbmRleDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgPyBcInN0cmluZ1wiID09IHR5cGVvZiBhID8gVS5jYWxsKF8oYSksIHRoaXNbMF0pIDogVS5jYWxsKHRoaXMsIGEuanF1ZXJ5ID8gYVswXSA6IGEpIDogdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xIH0sIGFkZDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKF8udW5pcXVlKF8ubWVyZ2UodGhpcy5nZXQoKSwgXyhhLCBiKSkpKSB9LCBhZGRCYWNrOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5hZGQobnVsbCA9PSBhID8gdGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlcihhKSkgfSB9KSwgXy5lYWNoKHsgcGFyZW50OiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEucGFyZW50Tm9kZTsgcmV0dXJuIGIgJiYgMTEgIT09IGIubm9kZVR5cGUgPyBiIDogbnVsbCB9LCBwYXJlbnRzOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gXy5kaXIoYSwgXCJwYXJlbnROb2RlXCIpIH0sIHBhcmVudHNVbnRpbDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIF8uZGlyKGEsIFwicGFyZW50Tm9kZVwiLCBjKSB9LCBuZXh0OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gZShhLCBcIm5leHRTaWJsaW5nXCIpIH0sIHByZXY6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBlKGEsIFwicHJldmlvdXNTaWJsaW5nXCIpIH0sIG5leHRBbGw6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfLmRpcihhLCBcIm5leHRTaWJsaW5nXCIpIH0sIHByZXZBbGw6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfLmRpcihhLCBcInByZXZpb3VzU2libGluZ1wiKSB9LCBuZXh0VW50aWw6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBfLmRpcihhLCBcIm5leHRTaWJsaW5nXCIsIGMpIH0sIHByZXZVbnRpbDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIF8uZGlyKGEsIFwicHJldmlvdXNTaWJsaW5nXCIsIGMpIH0sIHNpYmxpbmdzOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gXy5zaWJsaW5nKChhLnBhcmVudE5vZGUgfHwge30pLmZpcnN0Q2hpbGQsIGEpIH0sIGNoaWxkcmVuOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gXy5zaWJsaW5nKGEuZmlyc3RDaGlsZCkgfSwgY29udGVudHM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmNvbnRlbnREb2N1bWVudCB8fCBfLm1lcmdlKFtdLCBhLmNoaWxkTm9kZXMpIH0gfSwgZnVuY3Rpb24gKGEsIGIpIHsgXy5mblthXSA9IGZ1bmN0aW9uIChjLCBkKSB7IHZhciBlID0gXy5tYXAodGhpcywgYiwgYyk7IHJldHVybiBcIlVudGlsXCIgIT09IGEuc2xpY2UoLTUpICYmIChkID0gYyksIGQgJiYgXCJzdHJpbmdcIiA9PSB0eXBlb2YgZCAmJiAoZSA9IF8uZmlsdGVyKGQsIGUpKSwgdGhpcy5sZW5ndGggPiAxICYmIChtYlthXSB8fCBfLnVuaXF1ZShlKSwgbGIudGVzdChhKSAmJiBlLnJldmVyc2UoKSksIHRoaXMucHVzaFN0YWNrKGUpIH0gfSk7IHZhciBuYiA9IC9cXFMrL2csIG9iID0ge307IF8uQ2FsbGJhY2tzID0gZnVuY3Rpb24gKGEpIHsgYSA9IFwic3RyaW5nXCIgPT0gdHlwZW9mIGEgPyBvYlthXSB8fCBmKGEpIDogXy5leHRlbmQoe30sIGEpOyB2YXIgYiwgYywgZCwgZSwgZywgaCwgaSA9IFtdLCBqID0gIWEub25jZSAmJiBbXSwgayA9IGZ1bmN0aW9uIChmKSB7IGZvciAoYiA9IGEubWVtb3J5ICYmIGYsIGMgPSAhMCwgaCA9IGUgfHwgMCwgZSA9IDAsIGcgPSBpLmxlbmd0aCwgZCA9ICEwOyBpICYmIGcgPiBoOyBoKyspaWYgKGlbaF0uYXBwbHkoZlswXSwgZlsxXSkgPT09ICExICYmIGEuc3RvcE9uRmFsc2UpIHsgYiA9ICExOyBicmVhayB9IGQgPSAhMSwgaSAmJiAoaiA/IGoubGVuZ3RoICYmIGsoai5zaGlmdCgpKSA6IGIgPyBpID0gW10gOiBsLmRpc2FibGUoKSkgfSwgbCA9IHsgYWRkOiBmdW5jdGlvbiAoKSB7IGlmIChpKSB7IHZhciBjID0gaS5sZW5ndGg7ICFmdW5jdGlvbiBmKGIpIHsgXy5lYWNoKGIsIGZ1bmN0aW9uIChiLCBjKSB7IHZhciBkID0gXy50eXBlKGMpOyBcImZ1bmN0aW9uXCIgPT09IGQgPyBhLnVuaXF1ZSAmJiBsLmhhcyhjKSB8fCBpLnB1c2goYykgOiBjICYmIGMubGVuZ3RoICYmIFwic3RyaW5nXCIgIT09IGQgJiYgZihjKSB9KSB9KGFyZ3VtZW50cyksIGQgPyBnID0gaS5sZW5ndGggOiBiICYmIChlID0gYywgayhiKSkgfSByZXR1cm4gdGhpcyB9LCByZW1vdmU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgJiYgXy5lYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgYzsgKGMgPSBfLmluQXJyYXkoYiwgaSwgYykpID4gLTE7KWkuc3BsaWNlKGMsIDEpLCBkICYmIChnID49IGMgJiYgZy0tLCBoID49IGMgJiYgaC0tKSB9KSwgdGhpcyB9LCBoYXM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhID8gXy5pbkFycmF5KGEsIGkpID4gLTEgOiAhKCFpIHx8ICFpLmxlbmd0aCkgfSwgZW1wdHk6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgPSBbXSwgZyA9IDAsIHRoaXMgfSwgZGlzYWJsZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gaSA9IGogPSBiID0gdm9pZCAwLCB0aGlzIH0sIGRpc2FibGVkOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhaSB9LCBsb2NrOiBmdW5jdGlvbiAoKSB7IHJldHVybiBqID0gdm9pZCAwLCBiIHx8IGwuZGlzYWJsZSgpLCB0aGlzIH0sIGxvY2tlZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gIWogfSwgZmlyZVdpdGg6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiAhaSB8fCBjICYmICFqIHx8IChiID0gYiB8fCBbXSwgYiA9IFthLCBiLnNsaWNlID8gYi5zbGljZSgpIDogYl0sIGQgPyBqLnB1c2goYikgOiBrKGIpKSwgdGhpcyB9LCBmaXJlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBsLmZpcmVXaXRoKHRoaXMsIGFyZ3VtZW50cyksIHRoaXMgfSwgZmlyZWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICEhYyB9IH07IHJldHVybiBsIH0sIF8uZXh0ZW5kKHsgRGVmZXJyZWQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gW1tcInJlc29sdmVcIiwgXCJkb25lXCIsIF8uQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksIFwicmVzb2x2ZWRcIl0sIFtcInJlamVjdFwiLCBcImZhaWxcIiwgXy5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSwgXCJyZWplY3RlZFwiXSwgW1wibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgXy5DYWxsYmFja3MoXCJtZW1vcnlcIildXSwgYyA9IFwicGVuZGluZ1wiLCBkID0geyBzdGF0ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gYyB9LCBhbHdheXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSwgdGhpcyB9LCB0aGVuOiBmdW5jdGlvbiAoKSB7IHZhciBhID0gYXJndW1lbnRzOyByZXR1cm4gXy5EZWZlcnJlZChmdW5jdGlvbiAoYykgeyBfLmVhY2goYiwgZnVuY3Rpb24gKGIsIGYpIHsgdmFyIGcgPSBfLmlzRnVuY3Rpb24oYVtiXSkgJiYgYVtiXTsgZVtmWzFdXShmdW5jdGlvbiAoKSB7IHZhciBhID0gZyAmJiBnLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IGEgJiYgXy5pc0Z1bmN0aW9uKGEucHJvbWlzZSkgPyBhLnByb21pc2UoKS5kb25lKGMucmVzb2x2ZSkuZmFpbChjLnJlamVjdCkucHJvZ3Jlc3MoYy5ub3RpZnkpIDogY1tmWzBdICsgXCJXaXRoXCJdKHRoaXMgPT09IGQgPyBjLnByb21pc2UoKSA6IHRoaXMsIGcgPyBbYV0gOiBhcmd1bWVudHMpIH0pIH0pLCBhID0gbnVsbCB9KS5wcm9taXNlKCkgfSwgcHJvbWlzZTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG51bGwgIT0gYSA/IF8uZXh0ZW5kKGEsIGQpIDogZCB9IH0sIGUgPSB7fTsgcmV0dXJuIGQucGlwZSA9IGQudGhlbiwgXy5lYWNoKGIsIGZ1bmN0aW9uIChhLCBmKSB7IHZhciBnID0gZlsyXSwgaCA9IGZbM107IGRbZlsxXV0gPSBnLmFkZCwgaCAmJiBnLmFkZChmdW5jdGlvbiAoKSB7IGMgPSBoIH0sIGJbMSBeIGFdWzJdLmRpc2FibGUsIGJbMl1bMl0ubG9jayksIGVbZlswXV0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBlW2ZbMF0gKyBcIldpdGhcIl0odGhpcyA9PT0gZSA/IGQgOiB0aGlzLCBhcmd1bWVudHMpLCB0aGlzIH0sIGVbZlswXSArIFwiV2l0aFwiXSA9IGcuZmlyZVdpdGggfSksIGQucHJvbWlzZShlKSwgYSAmJiBhLmNhbGwoZSwgZSksIGUgfSwgd2hlbjogZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGMsIGQsIGUgPSAwLCBmID0gUi5jYWxsKGFyZ3VtZW50cyksIGcgPSBmLmxlbmd0aCwgaCA9IDEgIT09IGcgfHwgYSAmJiBfLmlzRnVuY3Rpb24oYS5wcm9taXNlKSA/IGcgOiAwLCBpID0gMSA9PT0gaCA/IGEgOiBfLkRlZmVycmVkKCksIGogPSBmdW5jdGlvbiAoYSwgYywgZCkgeyByZXR1cm4gZnVuY3Rpb24gKGUpIHsgY1thXSA9IHRoaXMsIGRbYV0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IFIuY2FsbChhcmd1bWVudHMpIDogZSwgZCA9PT0gYiA/IGkubm90aWZ5V2l0aChjLCBkKSA6IC0taCB8fCBpLnJlc29sdmVXaXRoKGMsIGQpIH0gfTsgaWYgKGcgPiAxKSBmb3IgKGIgPSBuZXcgQXJyYXkoZyksIGMgPSBuZXcgQXJyYXkoZyksIGQgPSBuZXcgQXJyYXkoZyk7IGcgPiBlOyBlKyspZltlXSAmJiBfLmlzRnVuY3Rpb24oZltlXS5wcm9taXNlKSA/IGZbZV0ucHJvbWlzZSgpLmRvbmUoaihlLCBkLCBmKSkuZmFpbChpLnJlamVjdCkucHJvZ3Jlc3MoaihlLCBjLCBiKSkgOiAtLWg7IHJldHVybiBoIHx8IGkucmVzb2x2ZVdpdGgoZCwgZiksIGkucHJvbWlzZSgpIH0gfSk7IHZhciBwYjsgXy5mbi5yZWFkeSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfLnJlYWR5LnByb21pc2UoKS5kb25lKGEpLCB0aGlzIH0sIF8uZXh0ZW5kKHsgaXNSZWFkeTogITEsIHJlYWR5V2FpdDogMSwgaG9sZFJlYWR5OiBmdW5jdGlvbiAoYSkgeyBhID8gXy5yZWFkeVdhaXQrKyA6IF8ucmVhZHkoITApIH0sIHJlYWR5OiBmdW5jdGlvbiAoYSkgeyAoYSA9PT0gITAgPyAtLV8ucmVhZHlXYWl0IDogXy5pc1JlYWR5KSB8fCAoXy5pc1JlYWR5ID0gITAsIGEgIT09ICEwICYmIC0tXy5yZWFkeVdhaXQgPiAwIHx8IChwYi5yZXNvbHZlV2l0aChaLCBbX10pLCBfLmZuLnRyaWdnZXJIYW5kbGVyICYmIChfKFopLnRyaWdnZXJIYW5kbGVyKFwicmVhZHlcIiksIF8oWikub2ZmKFwicmVhZHlcIikpKSkgfSB9KSwgXy5yZWFkeS5wcm9taXNlID0gZnVuY3Rpb24gKGIpIHsgcmV0dXJuIHBiIHx8IChwYiA9IF8uRGVmZXJyZWQoKSwgXCJjb21wbGV0ZVwiID09PSBaLnJlYWR5U3RhdGUgPyBzZXRUaW1lb3V0KF8ucmVhZHkpIDogKFouYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZywgITEpLCBhLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGcsICExKSkpLCBwYi5wcm9taXNlKGIpIH0sIF8ucmVhZHkucHJvbWlzZSgpOyB2YXIgcWIgPSBfLmFjY2VzcyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlLCBmLCBnKSB7IHZhciBoID0gMCwgaSA9IGEubGVuZ3RoLCBqID0gbnVsbCA9PSBjOyBpZiAoXCJvYmplY3RcIiA9PT0gXy50eXBlKGMpKSB7IGUgPSAhMDsgZm9yIChoIGluIGMpIF8uYWNjZXNzKGEsIGIsIGgsIGNbaF0sICEwLCBmLCBnKSB9IGVsc2UgaWYgKHZvaWQgMCAhPT0gZCAmJiAoZSA9ICEwLCBfLmlzRnVuY3Rpb24oZCkgfHwgKGcgPSAhMCksIGogJiYgKGcgPyAoYi5jYWxsKGEsIGQpLCBiID0gbnVsbCkgOiAoaiA9IGIsIGIgPSBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gai5jYWxsKF8oYSksIGMpIH0pKSwgYikpIGZvciAoOyBpID4gaDsgaCsrKWIoYVtoXSwgYywgZyA/IGQgOiBkLmNhbGwoYVtoXSwgaCwgYihhW2hdLCBjKSkpOyByZXR1cm4gZSA/IGEgOiBqID8gYi5jYWxsKGEpIDogaSA/IGIoYVswXSwgYykgOiBmIH07IF8uYWNjZXB0RGF0YSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiAxID09PSBhLm5vZGVUeXBlIHx8IDkgPT09IGEubm9kZVR5cGUgfHwgISthLm5vZGVUeXBlIH0sIGgudWlkID0gMSwgaC5hY2NlcHRzID0gXy5hY2NlcHREYXRhLCBoLnByb3RvdHlwZSA9IHsga2V5OiBmdW5jdGlvbiAoYSkgeyBpZiAoIWguYWNjZXB0cyhhKSkgcmV0dXJuIDA7IHZhciBiID0ge30sIGMgPSBhW3RoaXMuZXhwYW5kb107IGlmICghYykgeyBjID0gaC51aWQrKzsgdHJ5IHsgYlt0aGlzLmV4cGFuZG9dID0geyB2YWx1ZTogYyB9LCBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhLCBiKSB9IGNhdGNoIChkKSB7IGJbdGhpcy5leHBhbmRvXSA9IGMsIF8uZXh0ZW5kKGEsIGIpIH0gfSByZXR1cm4gdGhpcy5jYWNoZVtjXSB8fCAodGhpcy5jYWNoZVtjXSA9IHt9KSwgYyB9LCBzZXQ6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkLCBlID0gdGhpcy5rZXkoYSksIGYgPSB0aGlzLmNhY2hlW2VdOyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgYikgZltiXSA9IGM7IGVsc2UgaWYgKF8uaXNFbXB0eU9iamVjdChmKSkgXy5leHRlbmQodGhpcy5jYWNoZVtlXSwgYik7IGVsc2UgZm9yIChkIGluIGIpIGZbZF0gPSBiW2RdOyByZXR1cm4gZiB9LCBnZXQ6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gdGhpcy5jYWNoZVt0aGlzLmtleShhKV07IHJldHVybiB2b2lkIDAgPT09IGIgPyBjIDogY1tiXSB9LCBhY2Nlc3M6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkOyByZXR1cm4gdm9pZCAwID09PSBiIHx8IGIgJiYgXCJzdHJpbmdcIiA9PSB0eXBlb2YgYiAmJiB2b2lkIDAgPT09IGMgPyAoZCA9IHRoaXMuZ2V0KGEsIGIpLCB2b2lkIDAgIT09IGQgPyBkIDogdGhpcy5nZXQoYSwgXy5jYW1lbENhc2UoYikpKSA6ICh0aGlzLnNldChhLCBiLCBjKSwgdm9pZCAwICE9PSBjID8gYyA6IGIpIH0sIHJlbW92ZTogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQsIGUsIGYgPSB0aGlzLmtleShhKSwgZyA9IHRoaXMuY2FjaGVbZl07IGlmICh2b2lkIDAgPT09IGIpIHRoaXMuY2FjaGVbZl0gPSB7fTsgZWxzZSB7IF8uaXNBcnJheShiKSA/IGQgPSBiLmNvbmNhdChiLm1hcChfLmNhbWVsQ2FzZSkpIDogKGUgPSBfLmNhbWVsQ2FzZShiKSwgYiBpbiBnID8gZCA9IFtiLCBlXSA6IChkID0gZSwgZCA9IGQgaW4gZyA/IFtkXSA6IGQubWF0Y2gobmIpIHx8IFtdKSksIGMgPSBkLmxlbmd0aDsgZm9yICg7IGMtLTspZGVsZXRlIGdbZFtjXV0gfSB9LCBoYXNEYXRhOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gIV8uaXNFbXB0eU9iamVjdCh0aGlzLmNhY2hlW2FbdGhpcy5leHBhbmRvXV0gfHwge30pIH0sIGRpc2NhcmQ6IGZ1bmN0aW9uIChhKSB7IGFbdGhpcy5leHBhbmRvXSAmJiBkZWxldGUgdGhpcy5jYWNoZVthW3RoaXMuZXhwYW5kb11dIH0gfTsgdmFyIHJiID0gbmV3IGgsIHNiID0gbmV3IGgsIHRiID0gL14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLCB1YiA9IC8oW0EtWl0pL2c7IF8uZXh0ZW5kKHsgaGFzRGF0YTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHNiLmhhc0RhdGEoYSkgfHwgcmIuaGFzRGF0YShhKSB9LCBkYXRhOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gc2IuYWNjZXNzKGEsIGIsIGMpIH0sIHJlbW92ZURhdGE6IGZ1bmN0aW9uIChhLCBiKSB7IHNiLnJlbW92ZShhLCBiKSB9LCBfZGF0YTogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIHJiLmFjY2VzcyhhLCBiLCBjKSB9LCBfcmVtb3ZlRGF0YTogZnVuY3Rpb24gKGEsIGIpIHsgcmIucmVtb3ZlKGEsIGIpIH0gfSksIF8uZm4uZXh0ZW5kKHsgZGF0YTogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQsIGUsIGYgPSB0aGlzWzBdLCBnID0gZiAmJiBmLmF0dHJpYnV0ZXM7IGlmICh2b2lkIDAgPT09IGEpIHsgaWYgKHRoaXMubGVuZ3RoICYmIChlID0gc2IuZ2V0KGYpLCAxID09PSBmLm5vZGVUeXBlICYmICFyYi5nZXQoZiwgXCJoYXNEYXRhQXR0cnNcIikpKSB7IGZvciAoYyA9IGcubGVuZ3RoOyBjLS07KWdbY10gJiYgKGQgPSBnW2NdLm5hbWUsIDAgPT09IGQuaW5kZXhPZihcImRhdGEtXCIpICYmIChkID0gXy5jYW1lbENhc2UoZC5zbGljZSg1KSksIGkoZiwgZCwgZVtkXSkpKTsgcmIuc2V0KGYsIFwiaGFzRGF0YUF0dHJzXCIsICEwKSB9IHJldHVybiBlIH0gcmV0dXJuIFwib2JqZWN0XCIgPT0gdHlwZW9mIGEgPyB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBzYi5zZXQodGhpcywgYSkgfSkgOiBxYih0aGlzLCBmdW5jdGlvbiAoYikgeyB2YXIgYywgZCA9IF8uY2FtZWxDYXNlKGEpOyBpZiAoZiAmJiB2b2lkIDAgPT09IGIpIHsgaWYgKGMgPSBzYi5nZXQoZiwgYSksIHZvaWQgMCAhPT0gYykgcmV0dXJuIGM7IGlmIChjID0gc2IuZ2V0KGYsIGQpLCB2b2lkIDAgIT09IGMpIHJldHVybiBjOyBpZiAoYyA9IGkoZiwgZCwgdm9pZCAwKSwgdm9pZCAwICE9PSBjKSByZXR1cm4gYyB9IGVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGMgPSBzYi5nZXQodGhpcywgZCk7IHNiLnNldCh0aGlzLCBkLCBiKSwgLTEgIT09IGEuaW5kZXhPZihcIi1cIikgJiYgdm9pZCAwICE9PSBjICYmIHNiLnNldCh0aGlzLCBhLCBiKSB9KSB9LCBudWxsLCBiLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgITApIH0sIHJlbW92ZURhdGE6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBzYi5yZW1vdmUodGhpcywgYSkgfSkgfSB9KSwgXy5leHRlbmQoeyBxdWV1ZTogZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQ7IHJldHVybiBhID8gKGIgPSAoYiB8fCBcImZ4XCIpICsgXCJxdWV1ZVwiLCBkID0gcmIuZ2V0KGEsIGIpLCBjICYmICghZCB8fCBfLmlzQXJyYXkoYykgPyBkID0gcmIuYWNjZXNzKGEsIGIsIF8ubWFrZUFycmF5KGMpKSA6IGQucHVzaChjKSksIGQgfHwgW10pIDogdm9pZCAwIH0sIGRlcXVldWU6IGZ1bmN0aW9uIChhLCBiKSB7IGIgPSBiIHx8IFwiZnhcIjsgdmFyIGMgPSBfLnF1ZXVlKGEsIGIpLCBkID0gYy5sZW5ndGgsIGUgPSBjLnNoaWZ0KCksIGYgPSBfLl9xdWV1ZUhvb2tzKGEsIGIpLCBnID0gZnVuY3Rpb24gKCkgeyBfLmRlcXVldWUoYSwgYikgfTsgXCJpbnByb2dyZXNzXCIgPT09IGUgJiYgKGUgPSBjLnNoaWZ0KCksIGQtLSksIGUgJiYgKFwiZnhcIiA9PT0gYiAmJiBjLnVuc2hpZnQoXCJpbnByb2dyZXNzXCIpLCBkZWxldGUgZi5zdG9wLCBlLmNhbGwoYSwgZywgZikpLCAhZCAmJiBmICYmIGYuZW1wdHkuZmlyZSgpIH0sIF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IGIgKyBcInF1ZXVlSG9va3NcIjsgcmV0dXJuIHJiLmdldChhLCBjKSB8fCByYi5hY2Nlc3MoYSwgYywgeyBlbXB0eTogXy5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKS5hZGQoZnVuY3Rpb24gKCkgeyByYi5yZW1vdmUoYSwgW2IgKyBcInF1ZXVlXCIsIGNdKSB9KSB9KSB9IH0pLCBfLmZuLmV4dGVuZCh7IHF1ZXVlOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IDI7IHJldHVybiBcInN0cmluZ1wiICE9IHR5cGVvZiBhICYmIChiID0gYSwgYSA9IFwiZnhcIiwgYy0tKSwgYXJndW1lbnRzLmxlbmd0aCA8IGMgPyBfLnF1ZXVlKHRoaXNbMF0sIGEpIDogdm9pZCAwID09PSBiID8gdGhpcyA6IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBjID0gXy5xdWV1ZSh0aGlzLCBhLCBiKTsgXy5fcXVldWVIb29rcyh0aGlzLCBhKSwgXCJmeFwiID09PSBhICYmIFwiaW5wcm9ncmVzc1wiICE9PSBjWzBdICYmIF8uZGVxdWV1ZSh0aGlzLCBhKSB9KSB9LCBkZXF1ZXVlOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgXy5kZXF1ZXVlKHRoaXMsIGEpIH0pIH0sIGNsZWFyUXVldWU6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLnF1ZXVlKGEgfHwgXCJmeFwiLCBbXSkgfSwgcHJvbWlzZTogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQgPSAxLCBlID0gXy5EZWZlcnJlZCgpLCBmID0gdGhpcywgZyA9IHRoaXMubGVuZ3RoLCBoID0gZnVuY3Rpb24gKCkgeyAtLWQgfHwgZS5yZXNvbHZlV2l0aChmLCBbZl0pIH07IGZvciAoXCJzdHJpbmdcIiAhPSB0eXBlb2YgYSAmJiAoYiA9IGEsIGEgPSB2b2lkIDApLCBhID0gYSB8fCBcImZ4XCI7IGctLTspYyA9IHJiLmdldChmW2ddLCBhICsgXCJxdWV1ZUhvb2tzXCIpLCBjICYmIGMuZW1wdHkgJiYgKGQrKywgYy5lbXB0eS5hZGQoaCkpOyByZXR1cm4gaCgpLCBlLnByb21pc2UoYikgfSB9KTsgdmFyIHZiID0gL1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8uc291cmNlLCB3YiA9IFtcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiXSwgeGIgPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSA9IGIgfHwgYSwgXCJub25lXCIgPT09IF8uY3NzKGEsIFwiZGlzcGxheVwiKSB8fCAhXy5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsIGEpIH0sIHliID0gL14oPzpjaGVja2JveHxyYWRpbykkL2k7ICFmdW5jdGlvbiAoKSB7IHZhciBhID0gWi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGIgPSBhLmFwcGVuZENoaWxkKFouY3JlYXRlRWxlbWVudChcImRpdlwiKSksIGMgPSBaLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTsgYy5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwicmFkaW9cIiksIGMuc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiksIGMuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcInRcIiksIGIuYXBwZW5kQ2hpbGQoYyksIFkuY2hlY2tDbG9uZSA9IGIuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLCBiLmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiLCBZLm5vQ2xvbmVDaGVja2VkID0gISFiLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZSB9KCk7IHZhciB6YiA9IFwidW5kZWZpbmVkXCI7IFkuZm9jdXNpbkJ1YmJsZXMgPSBcIm9uZm9jdXNpblwiIGluIGE7IHZhciBBYiA9IC9ea2V5LywgQmIgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnUpfGNsaWNrLywgQ2IgPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sIERiID0gL14oW14uXSopKD86XFwuKC4rKXwpJC87IF8uZXZlbnQgPSB7XHJcbiAgICAgICAgZ2xvYmFsOiB7fSwgYWRkOiBmdW5jdGlvbiAoYSwgYiwgYywgZCwgZSkgeyB2YXIgZiwgZywgaCwgaSwgaiwgaywgbCwgbSwgbiwgbywgcCwgcSA9IHJiLmdldChhKTsgaWYgKHEpIGZvciAoYy5oYW5kbGVyICYmIChmID0gYywgYyA9IGYuaGFuZGxlciwgZSA9IGYuc2VsZWN0b3IpLCBjLmd1aWQgfHwgKGMuZ3VpZCA9IF8uZ3VpZCsrKSwgKGkgPSBxLmV2ZW50cykgfHwgKGkgPSBxLmV2ZW50cyA9IHt9KSwgKGcgPSBxLmhhbmRsZSkgfHwgKGcgPSBxLmhhbmRsZSA9IGZ1bmN0aW9uIChiKSB7IHJldHVybiB0eXBlb2YgXyAhPT0gemIgJiYgXy5ldmVudC50cmlnZ2VyZWQgIT09IGIudHlwZSA/IF8uZXZlbnQuZGlzcGF0Y2guYXBwbHkoYSwgYXJndW1lbnRzKSA6IHZvaWQgMCB9KSwgYiA9IChiIHx8IFwiXCIpLm1hdGNoKG5iKSB8fCBbXCJcIl0sIGogPSBiLmxlbmd0aDsgai0tOyloID0gRGIuZXhlYyhiW2pdKSB8fCBbXSwgbiA9IHAgPSBoWzFdLCBvID0gKGhbMl0gfHwgXCJcIikuc3BsaXQoXCIuXCIpLnNvcnQoKSwgbiAmJiAobCA9IF8uZXZlbnQuc3BlY2lhbFtuXSB8fCB7fSwgbiA9IChlID8gbC5kZWxlZ2F0ZVR5cGUgOiBsLmJpbmRUeXBlKSB8fCBuLCBsID0gXy5ldmVudC5zcGVjaWFsW25dIHx8IHt9LCBrID0gXy5leHRlbmQoeyB0eXBlOiBuLCBvcmlnVHlwZTogcCwgZGF0YTogZCwgaGFuZGxlcjogYywgZ3VpZDogYy5ndWlkLCBzZWxlY3RvcjogZSwgbmVlZHNDb250ZXh0OiBlICYmIF8uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSwgbmFtZXNwYWNlOiBvLmpvaW4oXCIuXCIpIH0sIGYpLCAobSA9IGlbbl0pIHx8IChtID0gaVtuXSA9IFtdLCBtLmRlbGVnYXRlQ291bnQgPSAwLCBsLnNldHVwICYmIGwuc2V0dXAuY2FsbChhLCBkLCBvLCBnKSAhPT0gITEgfHwgYS5hZGRFdmVudExpc3RlbmVyICYmIGEuYWRkRXZlbnRMaXN0ZW5lcihuLCBnLCB7IGNhcHR1cmU6IGZhbHNlLCBwYXNzaXZlOiBuLmluZGV4T2YoJ3RvdWNoJykgPiAtMSAmJiBuLmluZGV4T2YoJ3Njcm9sbCcpPi0xfSkpLGwuYWRkJiYobC5hZGQuY2FsbChhLGspLGsuaGFuZGxlci5ndWlkfHwoay5oYW5kbGVyLmd1aWQ9Yy5ndWlkKSksZT9tLnNwbGljZShtLmRlbGVnYXRlQ291bnQrKywwLGspOm0ucHVzaChrKSxfLmV2ZW50Lmdsb2JhbFtuXT0hMCl9LHJlbW92ZTpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbixvLHAscT1yYi5oYXNEYXRhKGEpJiZyYi5nZXQoYSk7aWYocSYmKGk9cS5ldmVudHMpKXtmb3IoYj0oYnx8XCJcIikubWF0Y2gobmIpfHxbXCJcIl0saj1iLmxlbmd0aDtqLS07KWlmKGg9RGIuZXhlYyhiW2pdKXx8W10sbj1wPWhbMV0sbz0oaFsyXXx8XCJcIikuc3BsaXQoXCIuXCIpLnNvcnQoKSxuKXtmb3IobD1fLmV2ZW50LnNwZWNpYWxbbl18fHt9LG49KGQ/bC5kZWxlZ2F0ZVR5cGU6bC5iaW5kVHlwZSl8fG4sbT1pW25dfHxbXSxoPWhbMl0mJm5ldyBSZWdFeHAoXCIoXnxcXFxcLilcIitvLmpvaW4oXCJcXFxcLig/Oi4qXFxcXC58KVwiKStcIihcXFxcLnwkKVwiKSxnPWY9bS5sZW5ndGg7Zi0tOylrPW1bZl0sIWUmJnAhPT1rLm9yaWdUeXBlfHxjJiZjLmd1aWQhPT1rLmd1aWR8fGgmJiFoLnRlc3Qoay5uYW1lc3BhY2UpfHxkJiZkIT09ay5zZWxlY3RvciYmKFwiKipcIiE9PWR8fCFrLnNlbGVjdG9yKXx8KG0uc3BsaWNlKGYsMSksay5zZWxlY3RvciYmbS5kZWxlZ2F0ZUNvdW50LS0sbC5yZW1vdmUmJmwucmVtb3ZlLmNhbGwoYSxrKSk7ZyYmIW0ubGVuZ3RoJiYobC50ZWFyZG93biYmbC50ZWFyZG93bi5jYWxsKGEsbyxxLmhhbmRsZSkhPT0hMXx8Xy5yZW1vdmVFdmVudChhLG4scS5oYW5kbGUpLGRlbGV0ZSBpW25dKX1lbHNlIGZvcihuIGluIGkpXy5ldmVudC5yZW1vdmUoYSxuK2Jbal0sYyxkLCEwKTtfLmlzRW1wdHlPYmplY3QoaSkmJihkZWxldGUgcS5oYW5kbGUscmIucmVtb3ZlKGEsXCJldmVudHNcIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtPVtkfHxaXSxuPVguY2FsbChiLFwidHlwZVwiKT9iLnR5cGU6YixvPVguY2FsbChiLFwibmFtZXNwYWNlXCIpP2IubmFtZXNwYWNlLnNwbGl0KFwiLlwiKTpbXTtpZihnPWg9ZD1kfHxaLDMhPT1kLm5vZGVUeXBlJiY4IT09ZC5ub2RlVHlwZSYmIUNiLnRlc3QobitfLmV2ZW50LnRyaWdnZXJlZCkmJihuLmluZGV4T2YoXCIuXCIpPj0wJiYobz1uLnNwbGl0KFwiLlwiKSxuPW8uc2hpZnQoKSxvLnNvcnQoKSksaj1uLmluZGV4T2YoXCI6XCIpPDAmJlwib25cIituLGI9YltfLmV4cGFuZG9dP2I6bmV3IF8uRXZlbnQobixcIm9iamVjdFwiPT10eXBlb2YgYiYmYiksYi5pc1RyaWdnZXI9ZT8yOjMsYi5uYW1lc3BhY2U9by5qb2luKFwiLlwiKSxiLm5hbWVzcGFjZV9yZT1iLm5hbWVzcGFjZT9uZXcgUmVnRXhwKFwiKF58XFxcXC4pXCIrby5qb2luKFwiXFxcXC4oPzouKlxcXFwufClcIikrXCIoXFxcXC58JClcIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChiLnRhcmdldD1kKSxjPW51bGw9PWM/W2JdOl8ubWFrZUFycmF5KGMsW2JdKSxsPV8uZXZlbnQuc3BlY2lhbFtuXXx8e30sZXx8IWwudHJpZ2dlcnx8bC50cmlnZ2VyLmFwcGx5KGQsYykhPT0hMSkpe2lmKCFlJiYhbC5ub0J1YmJsZSYmIV8uaXNXaW5kb3coZCkpe2ZvcihpPWwuZGVsZWdhdGVUeXBlfHxuLENiLnRlc3QoaStuKXx8KGc9Zy5wYXJlbnROb2RlKTtnO2c9Zy5wYXJlbnROb2RlKW0ucHVzaChnKSxoPWc7XG5oPT09KGQub3duZXJEb2N1bWVudHx8WikmJm0ucHVzaChoLmRlZmF1bHRWaWV3fHxoLnBhcmVudFdpbmRvd3x8YSl9Zm9yKGY9MDsoZz1tW2YrK10pJiYhYi5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpOyliLnR5cGU9Zj4xP2k6bC5iaW5kVHlwZXx8bixrPShyYi5nZXQoZyxcImV2ZW50c1wiKXx8e30pW2IudHlwZV0mJnJiLmdldChnLFwiaGFuZGxlXCIpLGsmJmsuYXBwbHkoZyxjKSxrPWomJmdbal0sayYmay5hcHBseSYmXy5hY2NlcHREYXRhKGcpJiYoYi5yZXN1bHQ9ay5hcHBseShnLGMpLGIucmVzdWx0PT09ITEmJmIucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGIudHlwZT1uLGV8fGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fGwuX2RlZmF1bHQmJmwuX2RlZmF1bHQuYXBwbHkobS5wb3AoKSxjKSE9PSExfHwhXy5hY2NlcHREYXRhKGQpfHxqJiZfLmlzRnVuY3Rpb24oZFtuXSkmJiFfLmlzV2luZG93KGQpJiYoaD1kW2pdLGgmJihkW2pdPW51bGwpLF8uZXZlbnQudHJpZ2dlcmVkPW4sZFtuXSgpLF8uZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCxoJiYoZFtqXT1oKSksYi5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihhKXthPV8uZXZlbnQuZml4KGEpO3ZhciBiLGMsZCxlLGYsZz1bXSxoPVIuY2FsbChhcmd1bWVudHMpLGk9KHJiLmdldCh0aGlzLFwiZXZlbnRzXCIpfHx7fSlbYS50eXBlXXx8W10saj1fLmV2ZW50LnNwZWNpYWxbYS50eXBlXXx8e307aWYoaFswXT1hLGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhai5wcmVEaXNwYXRjaHx8ai5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsYSkhPT0hMSl7Zm9yKGc9Xy5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsYSxpKSxiPTA7KGU9Z1tiKytdKSYmIWEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspZm9yKGEuY3VycmVudFRhcmdldD1lLmVsZW0sYz0wOyhmPWUuaGFuZGxlcnNbYysrXSkmJiFhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7KSghYS5uYW1lc3BhY2VfcmV8fGEubmFtZXNwYWNlX3JlLnRlc3QoZi5uYW1lc3BhY2UpKSYmKGEuaGFuZGxlT2JqPWYsYS5kYXRhPWYuZGF0YSxkPSgoXy5ldmVudC5zcGVjaWFsW2Yub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxmLmhhbmRsZXIpLmFwcGx5KGUuZWxlbSxoKSx2b2lkIDAhPT1kJiYoYS5yZXN1bHQ9ZCk9PT0hMSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpKSk7cmV0dXJuIGoucG9zdERpc3BhdGNoJiZqLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9W10saD1iLmRlbGVnYXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBlJiYoIWEuYnV0dG9ufHxcImNsaWNrXCIhPT1hLnR5cGUpKWZvcig7aSE9PXRoaXM7aT1pLnBhcmVudE5vZGV8fHRoaXMpaWYoaS5kaXNhYmxlZCE9PSEwfHxcImNsaWNrXCIhPT1hLnR5cGUpe2ZvcihkPVtdLGM9MDtoPmM7YysrKWY9YltjXSxlPWYuc2VsZWN0b3IrXCIgXCIsdm9pZCAwPT09ZFtlXSYmKGRbZV09Zi5uZWVkc0NvbnRleHQ/XyhlLHRoaXMpLmluZGV4KGkpPj0wOl8uZmluZChlLHRoaXMsbnVsbCxbaV0pLmxlbmd0aCksZFtlXSYmZC5wdXNoKGYpO2QubGVuZ3RoJiZnLnB1c2goe2VsZW06aSxoYW5kbGVyczpkfSl9cmV0dXJuIGg8Yi5sZW5ndGgmJmcucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOmIuc2xpY2UoaCl9KSxnfSxwcm9wczpcImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaFwiLnNwbGl0KFwiIFwiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6XCJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlXCIuc3BsaXQoXCIgXCIpLGZpbHRlcjpmdW5jdGlvbihhLGIpe3JldHVybiBudWxsPT1hLndoaWNoJiYoYS53aGljaD1udWxsIT1iLmNoYXJDb2RlP2IuY2hhckNvZGU6Yi5rZXlDb2RlKSxhfX0sbW91c2VIb29rczp7cHJvcHM6XCJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnRcIi5zcGxpdChcIiBcIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9Yi5idXR0b247cmV0dXJuIG51bGw9PWEucGFnZVgmJm51bGwhPWIuY2xpZW50WCYmKGM9YS50YXJnZXQub3duZXJEb2N1bWVudHx8WixkPWMuZG9jdW1lbnRFbGVtZW50LGU9Yy5ib2R5LGEucGFnZVg9Yi5jbGllbnRYKyhkJiZkLnNjcm9sbExlZnR8fGUmJmUuc2Nyb2xsTGVmdHx8MCktKGQmJmQuY2xpZW50TGVmdHx8ZSYmZS5jbGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWIuY2xpZW50WSsoZCYmZC5zY3JvbGxUb3B8fGUmJmUuc2Nyb2xsVG9wfHwwKS0oZCYmZC5jbGllbnRUb3B8fGUmJmUuY2xpZW50VG9wfHwwKSksYS53aGljaHx8dm9pZCAwPT09Znx8KGEud2hpY2g9MSZmPzE6MiZmPzM6NCZmPzI6MCksYX19LGZpeDpmdW5jdGlvbihhKXtpZihhW18uZXhwYW5kb10pcmV0dXJuIGE7dmFyIGIsYyxkLGU9YS50eXBlLGY9YSxnPXRoaXMuZml4SG9va3NbZV07Zm9yKGd8fCh0aGlzLmZpeEhvb2tzW2VdPWc9QmIudGVzdChlKT90aGlzLm1vdXNlSG9va3M6QWIudGVzdChlKT90aGlzLmtleUhvb2tzOnt9KSxkPWcucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoZy5wcm9wcyk6dGhpcy5wcm9wcyxhPW5ldyBfLkV2ZW50KGYpLGI9ZC5sZW5ndGg7Yi0tOyljPWRbYl0sYVtjXT1mW2NdO3JldHVybiBhLnRhcmdldHx8KGEudGFyZ2V0PVopLDM9PT1hLnRhcmdldC5ub2RlVHlwZSYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGcuZmlsdGVyP2cuZmlsdGVyKGEsZik6YX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMhPT1sKCkmJnRoaXMuZm9jdXM/KHRoaXMuZm9jdXMoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6XCJmb2N1c2luXCJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PWwoKSYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6XCJmb2N1c291dFwifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVyblwiY2hlY2tib3hcIj09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmXy5ub2RlTmFtZSh0aGlzLFwiaW5wdXRcIik/KHRoaXMuY2xpY2soKSwhMSk6dm9pZCAwfSxfZGVmYXVsdDpmdW5jdGlvbihhKXtyZXR1cm4gXy5ub2RlTmFtZShhLnRhcmdldCxcImFcIil9fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihhKXt2b2lkIDAhPT1hLnJlc3VsdCYmYS5vcmlnaW5hbEV2ZW50JiYoYS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWEucmVzdWx0KX19fSxzaW11bGF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1fLmV4dGVuZChuZXcgXy5FdmVudCxjLHt0eXBlOmEsaXNTaW11bGF0ZWQ6ITAsb3JpZ2luYWxFdmVudDp7fX0pO2Q/Xy5ldmVudC50cmlnZ2VyKGUsbnVsbCxiKTpfLmV2ZW50LmRpc3BhdGNoLmNhbGwoYixlKSxlLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZjLnByZXZlbnREZWZhdWx0KCl9fSxfLnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGEsYixjKXthLnJlbW92ZUV2ZW50TGlzdGVuZXImJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpfSxfLkV2ZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfLkV2ZW50PyhhJiZhLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1hLHRoaXMudHlwZT1hLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9YS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1hLmRlZmF1bHRQcmV2ZW50ZWQmJmEucmV0dXJuVmFsdWU9PT0hMT9qOmspOnRoaXMudHlwZT1hLGImJl8uZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fF8ubm93KCksdm9pZCh0aGlzW18uZXhwYW5kb109ITApKTpuZXcgXy5FdmVudChhLGIpfSxfLkV2ZW50LnByb3RvdHlwZT17aXNEZWZhdWx0UHJldmVudGVkOmssaXNQcm9wYWdhdGlvblN0b3BwZWQ6ayxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDprLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPWosYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1qLGEmJmEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1qLGEmJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJiZhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSxfLmVhY2goe21vdXNlZW50ZXI6XCJtb3VzZW92ZXJcIixtb3VzZWxlYXZlOlwibW91c2VvdXRcIixwb2ludGVyZW50ZXI6XCJwb2ludGVyb3ZlclwiLHBvaW50ZXJsZWF2ZTpcInBvaW50ZXJvdXRcIn0sZnVuY3Rpb24oYSxiKXtfLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybighZXx8ZSE9PWQmJiFfLmNvbnRhaW5zKGQsZSkpJiYoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxZLmZvY3VzaW5CdWJibGVzfHxfLmVhY2goe2ZvY3VzOlwiZm9jdXNpblwiLGJsdXI6XCJmb2N1c291dFwifSxmdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGEpe18uZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxfLmV2ZW50LmZpeChhKSwhMCl9O18uZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1yYi5hY2Nlc3MoZCxiKTtlfHxkLmFkZEV2ZW50TGlzdGVuZXIoYSxjLCEwKSxyYi5hY2Nlc3MoZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1yYi5hY2Nlc3MoZCxiKS0xO2U/cmIuYWNjZXNzKGQsYixlKTooZC5yZW1vdmVFdmVudExpc3RlbmVyKGEsYywhMCkscmIucmVtb3ZlKGQsYikpfX19KSxfLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBhKXtcInN0cmluZ1wiIT10eXBlb2YgYiYmKGM9Y3x8YixiPXZvaWQgMCk7Zm9yKGcgaW4gYSl0aGlzLm9uKGcsYixjLGFbZ10sZSk7cmV0dXJuIHRoaXN9aWYobnVsbD09YyYmbnVsbD09ZD8oZD1iLGM9Yj12b2lkIDApOm51bGw9PWQmJihcInN0cmluZ1wiPT10eXBlb2YgYj8oZD1jLGM9dm9pZCAwKTooZD1jLGM9YixiPXZvaWQgMCkpLGQ9PT0hMSlkPWs7ZWxzZSBpZighZClyZXR1cm4gdGhpcztyZXR1cm4gMT09PWUmJihmPWQsZD1mdW5jdGlvbihhKXtyZXR1cm4gXygpLm9mZihhKSxmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5ndWlkPWYuZ3VpZHx8KGYuZ3VpZD1fLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe18uZXZlbnQuYWRkKHRoaXMsYSxkLGMsYil9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRsZU9iaixfKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlK1wiLlwiK2QubmFtZXNwYWNlOmQub3JpZ1R5cGUsZC5zZWxlY3RvcixkLmhhbmRsZXIpLHRoaXM7aWYoXCJvYmplY3RcIj09dHlwZW9mIGEpe2ZvcihlIGluIGEpdGhpcy5vZmYoZSxiLGFbZV0pO3JldHVybiB0aGlzfXJldHVybihiPT09ITF8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGIpJiYoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPWspLHRoaXMuZWFjaChmdW5jdGlvbigpe18uZXZlbnQucmVtb3ZlKHRoaXMsYSxjLGIpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Xy5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/Xy5ldmVudC50cmlnZ2VyKGEsYixjLCEwKTp2b2lkIDB9fSk7dmFyIEViPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcXHc6XSspW14+XSopXFwvPi9naSxGYj0vPChbXFx3Ol0rKS8sR2I9Lzx8JiM/XFx3KzsvLEhiPS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksSWI9L2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxKYj0vXiR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pLEtiPS9edHJ1ZVxcLyguKikvLExiPS9eXFxzKjwhKD86XFxbQ0RBVEFcXFt8LS0pfCg/OlxcXVxcXXwtLSk+XFxzKiQvZyxNYj17b3B0aW9uOlsxLFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLFwiPC9zZWxlY3Q+XCJdLHRoZWFkOlsxLFwiPHRhYmxlPlwiLFwiPC90YWJsZT5cIl0sY29sOlsyLFwiPHRhYmxlPjxjb2xncm91cD5cIixcIjwvY29sZ3JvdXA+PC90YWJsZT5cIl0sdHI6WzIsXCI8dGFibGU+PHRib2R5PlwiLFwiPC90Ym9keT48L3RhYmxlPlwiXSx0ZDpbMyxcIjx0YWJsZT48dGJvZHk+PHRyPlwiLFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCJdLF9kZWZhdWx0OlswLFwiXCIsXCJcIl19O01iLm9wdGdyb3VwPU1iLm9wdGlvbixNYi50Ym9keT1NYi50Zm9vdD1NYi5jb2xncm91cD1NYi5jYXB0aW9uPU1iLnRoZWFkLE1iLnRoPU1iLnRkLF8uZXh0ZW5kKHtjbG9uZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLmNsb25lTm9kZSghMCksaT1fLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKTtpZighKFkubm9DbG9uZUNoZWNrZWR8fDEhPT1hLm5vZGVUeXBlJiYxMSE9PWEubm9kZVR5cGV8fF8uaXNYTUxEb2MoYSkpKWZvcihnPXIoaCksZj1yKGEpLGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKyspcyhmW2RdLGdbZF0pO2lmKGIpaWYoYylmb3IoZj1mfHxyKGEpLGc9Z3x8cihoKSxkPTAsZT1mLmxlbmd0aDtlPmQ7ZCsrKXEoZltkXSxnW2RdKTtlbHNlIHEoYSxoKTtyZXR1cm4gZz1yKGgsXCJzY3JpcHRcIiksZy5sZW5ndGg+MCYmcChnLCFpJiZyKGEsXCJzY3JpcHRcIikpLGh9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlLGYsZyxoLGksaixrPWIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGw9W10sbT0wLG49YS5sZW5ndGg7bj5tO20rKylpZihlPWFbbV0sZXx8MD09PWUpaWYoXCJvYmplY3RcIj09PV8udHlwZShlKSlfLm1lcmdlKGwsZS5ub2RlVHlwZT9bZV06ZSk7ZWxzZSBpZihHYi50ZXN0KGUpKXtmb3IoZj1mfHxrLmFwcGVuZENoaWxkKGIuY3JlYXRlRWxlbWVudChcImRpdlwiKSksZz0oRmIuZXhlYyhlKXx8W1wiXCIsXCJcIl0pWzFdLnRvTG93ZXJDYXNlKCksaD1NYltnXXx8TWIuX2RlZmF1bHQsZi5pbm5lckhUTUw9aFsxXStlLnJlcGxhY2UoRWIsXCI8JDE+PC8kMj5cIikraFsyXSxqPWhbMF07ai0tOylmPWYubGFzdENoaWxkO18ubWVyZ2UobCxmLmNoaWxkTm9kZXMpLGY9ay5maXJzdENoaWxkLGYudGV4dENvbnRlbnQ9XCJcIn1lbHNlIGwucHVzaChiLmNyZWF0ZVRleHROb2RlKGUpKTtmb3Ioay50ZXh0Q29udGVudD1cIlwiLG09MDtlPWxbbSsrXTspaWYoKCFkfHwtMT09PV8uaW5BcnJheShlLGQpKSYmKGk9Xy5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSksZj1yKGsuYXBwZW5kQ2hpbGQoZSksXCJzY3JpcHRcIiksaSYmcChmKSxjKSlmb3Ioaj0wO2U9ZltqKytdOylKYi50ZXN0KGUudHlwZXx8XCJcIikmJmMucHVzaChlKTtyZXR1cm4ga30sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQsZSxmPV8uZXZlbnQuc3BlY2lhbCxnPTA7dm9pZCAwIT09KGM9YVtnXSk7ZysrKXtpZihfLmFjY2VwdERhdGEoYykmJihlPWNbcmIuZXhwYW5kb10sZSYmKGI9cmIuY2FjaGVbZV0pKSl7aWYoYi5ldmVudHMpZm9yKGQgaW4gYi5ldmVudHMpZltkXT9fLmV2ZW50LnJlbW92ZShjLGQpOl8ucmVtb3ZlRXZlbnQoYyxkLGIuaGFuZGxlKTtyYi5jYWNoZVtlXSYmZGVsZXRlIHJiLmNhY2hlW2VdfWRlbGV0ZSBzYi5jYWNoZVtjW3NiLmV4cGFuZG9dXX19fSksXy5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHFiKHRoaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/Xy50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7KDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKSYmKHRoaXMudGV4dENvbnRlbnQ9YSl9KX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPW0odGhpcyxhKTtiLmFwcGVuZENoaWxkKGEpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj1tKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjLGQ9YT9fLmZpbHRlcihhLHRoaXMpOnRoaXMsZT0wO251bGwhPShjPWRbZV0pO2UrKylifHwxIT09Yy5ub2RlVHlwZXx8Xy5jbGVhbkRhdGEocihjKSksYy5wYXJlbnROb2RlJiYoYiYmXy5jb250YWlucyhjLm93bmVyRG9jdW1lbnQsYykmJnAocihjLFwic2NyaXB0XCIpKSxjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYykpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgYSxiPTA7bnVsbCE9KGE9dGhpc1tiXSk7YisrKTE9PT1hLm5vZGVUeXBlJiYoXy5jbGVhbkRhdGEocihhLCExKSksYS50ZXh0Q29udGVudD1cIlwiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1udWxsPT1hPyExOmEsYj1udWxsPT1iP2E6Yix0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBfLmNsb25lKHRoaXMsYSxiKX0pfSxodG1sOmZ1bmN0aW9uKGEpe3JldHVybiBxYih0aGlzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEmJjE9PT1iLm5vZGVUeXBlKXJldHVybiBiLmlubmVySFRNTDtpZihcInN0cmluZ1wiPT10eXBlb2YgYSYmIUhiLnRlc3QoYSkmJiFNYlsoRmIuZXhlYyhhKXx8W1wiXCIsXCJcIl0pWzFdLnRvTG93ZXJDYXNlKCldKXthPWEucmVwbGFjZShFYixcIjwkMT48LyQyPlwiKTt0cnl7Zm9yKDtkPmM7YysrKWI9dGhpc1tjXXx8e30sMT09PWIubm9kZVR5cGUmJihfLmNsZWFuRGF0YShyKGIsITEpKSxiLmlubmVySFRNTD1hKTtiPTB9Y2F0Y2goZSl7fX1iJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGEpfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihiKXthPXRoaXMucGFyZW50Tm9kZSxfLmNsZWFuRGF0YShyKHRoaXMpKSxhJiZhLnJlcGxhY2VDaGlsZChiLHRoaXMpfSksYSYmKGEubGVuZ3RofHxhLm5vZGVUeXBlKT90aGlzOnRoaXMucmVtb3ZlKCl9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGEsYil7YT1TLmFwcGx5KFtdLGEpO3ZhciBjLGQsZSxmLGcsaCxpPTAsaj10aGlzLmxlbmd0aCxrPXRoaXMsbD1qLTEsbT1hWzBdLHA9Xy5pc0Z1bmN0aW9uKG0pO2lmKHB8fGo+MSYmXCJzdHJpbmdcIj09dHlwZW9mIG0mJiFZLmNoZWNrQ2xvbmUmJkliLnRlc3QobSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZD1rLmVxKGMpO3AmJihhWzBdPW0uY2FsbCh0aGlzLGMsZC5odG1sKCkpKSxkLmRvbU1hbmlwKGEsYil9KTtpZihqJiYoYz1fLmJ1aWxkRnJhZ21lbnQoYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQsITEsdGhpcyksZD1jLmZpcnN0Q2hpbGQsMT09PWMuY2hpbGROb2Rlcy5sZW5ndGgmJihjPWQpLGQpKXtmb3IoZT1fLm1hcChyKGMsXCJzY3JpcHRcIiksbiksZj1lLmxlbmd0aDtqPmk7aSsrKWc9YyxpIT09bCYmKGc9Xy5jbG9uZShnLCEwLCEwKSxmJiZfLm1lcmdlKGUscihnLFwic2NyaXB0XCIpKSksYi5jYWxsKHRoaXNbaV0sZyxpKTtpZihmKWZvcihoPWVbZS5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxfLm1hcChlLG8pLGk9MDtmPmk7aSsrKWc9ZVtpXSxKYi50ZXN0KGcudHlwZXx8XCJcIikmJiFyYi5hY2Nlc3MoZyxcImdsb2JhbEV2YWxcIikmJl8uY29udGFpbnMoaCxnKSYmKGcuc3JjP18uX2V2YWxVcmwmJl8uX2V2YWxVcmwoZy5zcmMpOl8uZ2xvYmFsRXZhbChnLnRleHRDb250ZW50LnJlcGxhY2UoTGIsXCJcIikpKX1yZXR1cm4gdGhpc319KSxfLmVhY2goe2FwcGVuZFRvOlwiYXBwZW5kXCIscHJlcGVuZFRvOlwicHJlcGVuZFwiLGluc2VydEJlZm9yZTpcImJlZm9yZVwiLGluc2VydEFmdGVyOlwiYWZ0ZXJcIixyZXBsYWNlQWxsOlwicmVwbGFjZVdpdGhcIn0sZnVuY3Rpb24oYSxiKXtfLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPVtdLGU9XyhhKSxmPWUubGVuZ3RoLTEsZz0wO2Y+PWc7ZysrKWM9Zz09PWY/dGhpczp0aGlzLmNsb25lKCEwKSxfKGVbZ10pW2JdKGMpLFQuYXBwbHkoZCxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZCl9fSk7dmFyIE5iLE9iPXt9LFBiPS9ebWFyZ2luLyxRYj1uZXcgUmVnRXhwKFwiXihcIit2YitcIikoPyFweClbYS16JV0rJFwiLFwiaVwiKSxSYj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSxudWxsKX07IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYigpe2cuc3R5bGUuY3NzVGV4dD1cIi13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MSU7dG9wOjElO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NHB4O3Bvc2l0aW9uOmFic29sdXRlXCIsZy5pbm5lckhUTUw9XCJcIixlLmFwcGVuZENoaWxkKGYpO3ZhciBiPWEuZ2V0Q29tcHV0ZWRTdHlsZShnLG51bGwpO2M9XCIxJVwiIT09Yi50b3AsZD1cIjRweFwiPT09Yi53aWR0aCxlLnJlbW92ZUNoaWxkKGYpfXZhciBjLGQsZT1aLmRvY3VtZW50RWxlbWVudCxmPVouY3JlYXRlRWxlbWVudChcImRpdlwiKSxnPVouY3JlYXRlRWxlbWVudChcImRpdlwiKTtnLnN0eWxlJiYoZy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD1cImNvbnRlbnQtYm94XCIsZy5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPVwiXCIsWS5jbGVhckNsb25lU3R5bGU9XCJjb250ZW50LWJveFwiPT09Zy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxmLnN0eWxlLmNzc1RleHQ9XCJib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweDttYXJnaW4tdG9wOjFweDtwb3NpdGlvbjphYnNvbHV0ZVwiLGYuYXBwZW5kQ2hpbGQoZyksYS5nZXRDb21wdXRlZFN0eWxlJiZfLmV4dGVuZChZLHtwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGIoKSxjfSxib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT1kJiZiKCksZH0scmVsaWFibGVNYXJnaW5SaWdodDpmdW5jdGlvbigpe3ZhciBiLGM9Zy5hcHBlbmRDaGlsZChaLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO3JldHVybiBjLnN0eWxlLmNzc1RleHQ9Zy5zdHlsZS5jc3NUZXh0PVwiLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowXCIsYy5zdHlsZS5tYXJnaW5SaWdodD1jLnN0eWxlLndpZHRoPVwiMFwiLGcuc3R5bGUud2lkdGg9XCIxcHhcIixlLmFwcGVuZENoaWxkKGYpLGI9IXBhcnNlRmxvYXQoYS5nZXRDb21wdXRlZFN0eWxlKGMsbnVsbCkubWFyZ2luUmlnaHQpLGUucmVtb3ZlQ2hpbGQoZiksYn19KSl9KCksXy5zd2FwPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZz17fTtmb3IoZiBpbiBiKWdbZl09YS5zdHlsZVtmXSxhLnN0eWxlW2ZdPWJbZl07ZT1jLmFwcGx5KGEsZHx8W10pO2ZvcihmIGluIGIpYS5zdHlsZVtmXT1nW2ZdO3JldHVybiBlfTt2YXIgU2I9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFRiPW5ldyBSZWdFeHAoXCJeKFwiK3ZiK1wiKSguKikkXCIsXCJpXCIpLFViPW5ldyBSZWdFeHAoXCJeKFsrLV0pPShcIit2YitcIilcIixcImlcIiksVmI9e3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix2aXNpYmlsaXR5OlwiaGlkZGVuXCIsZGlzcGxheTpcImJsb2NrXCJ9LFdiPXtsZXR0ZXJTcGFjaW5nOlwiMFwiLGZvbnRXZWlnaHQ6XCI0MDBcIn0sWGI9W1wiV2Via2l0XCIsXCJPXCIsXCJNb3pcIixcIm1zXCJdO18uZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9dihhLFwib3BhY2l0eVwiKTtyZXR1cm5cIlwiPT09Yz9cIjFcIjpjfX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZsZXhHcm93OiEwLGZsZXhTaHJpbms6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOntcImZsb2F0XCI6XCJjc3NGbG9hdFwifSxzdHlsZTpmdW5jdGlvbihhLGIsYyxkKXtpZihhJiYzIT09YS5ub2RlVHlwZSYmOCE9PWEubm9kZVR5cGUmJmEuc3R5bGUpe3ZhciBlLGYsZyxoPV8uY2FtZWxDYXNlKGIpLGk9YS5zdHlsZTtyZXR1cm4gYj1fLmNzc1Byb3BzW2hdfHwoXy5jc3NQcm9wc1toXT14KGksaCkpLGc9Xy5jc3NIb29rc1tiXXx8Xy5jc3NIb29rc1toXSx2b2lkIDA9PT1jP2cmJlwiZ2V0XCJpbiBnJiZ2b2lkIDAhPT0oZT1nLmdldChhLCExLGQpKT9lOmlbYl06KGY9dHlwZW9mIGMsXCJzdHJpbmdcIj09PWYmJihlPVViLmV4ZWMoYykpJiYoYz0oZVsxXSsxKSplWzJdK3BhcnNlRmxvYXQoXy5jc3MoYSxiKSksZj1cIm51bWJlclwiKSxudWxsIT1jJiZjPT09YyYmKFwibnVtYmVyXCIhPT1mfHxfLmNzc051bWJlcltoXXx8KGMrPVwicHhcIiksWS5jbGVhckNsb25lU3R5bGV8fFwiXCIhPT1jfHwwIT09Yi5pbmRleE9mKFwiYmFja2dyb3VuZFwiKXx8KGlbYl09XCJpbmhlcml0XCIpLGcmJlwic2V0XCJpbiBnJiZ2b2lkIDA9PT0oYz1nLnNldChhLGMsZCkpfHwoaVtiXT1jKSksdm9pZCAwKX19LGNzczpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaD1fLmNhbWVsQ2FzZShiKTtyZXR1cm4gYj1fLmNzc1Byb3BzW2hdfHwoXy5jc3NQcm9wc1toXT14KGEuc3R5bGUsaCkpLGc9Xy5jc3NIb29rc1tiXXx8Xy5jc3NIb29rc1toXSxnJiZcImdldFwiaW4gZyYmKGU9Zy5nZXQoYSwhMCxjKSksdm9pZCAwPT09ZSYmKGU9dihhLGIsZCkpLFwibm9ybWFsXCI9PT1lJiZiIGluIFdiJiYoZT1XYltiXSksXCJcIj09PWN8fGM/KGY9cGFyc2VGbG9hdChlKSxjPT09ITB8fF8uaXNOdW1lcmljKGYpP2Z8fDA6ZSk6ZX19KSxfLmVhY2goW1wiaGVpZ2h0XCIsXCJ3aWR0aFwiXSxmdW5jdGlvbihhLGIpe18uY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGM/U2IudGVzdChfLmNzcyhhLFwiZGlzcGxheVwiKSkmJjA9PT1hLm9mZnNldFdpZHRoP18uc3dhcChhLFZiLGZ1bmN0aW9uKCl7cmV0dXJuIEEoYSxiLGQpfSk6QShhLGIsZCk6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQmJlJiKGEpO3JldHVybiB5KGEsYyxkP3ooYSxiLGQsXCJib3JkZXItYm94XCI9PT1fLmNzcyhhLFwiYm94U2l6aW5nXCIsITEsZSksZSk6MCl9fX0pLF8uY3NzSG9va3MubWFyZ2luUmlnaHQ9dyhZLnJlbGlhYmxlTWFyZ2luUmlnaHQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9fLnN3YXAoYSx7ZGlzcGxheTpcImlubGluZS1ibG9ja1wifSx2LFthLFwibWFyZ2luUmlnaHRcIl0pOnZvaWQgMH0pLF8uZWFjaCh7bWFyZ2luOlwiXCIscGFkZGluZzpcIlwiLGJvcmRlcjpcIldpZHRoXCJ9LGZ1bmN0aW9uKGEsYil7Xy5jc3NIb29rc1thK2JdPXtleHBhbmQ6ZnVuY3Rpb24oYyl7Zm9yKHZhciBkPTAsZT17fSxmPVwic3RyaW5nXCI9PXR5cGVvZiBjP2Muc3BsaXQoXCIgXCIpOltjXTs0PmQ7ZCsrKWVbYSt3YltkXStiXT1mW2RdfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSxQYi50ZXN0KGEpfHwoXy5jc3NIb29rc1thK2JdLnNldD15KX0pLF8uZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcWIodGhpcyxmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtpZihfLmlzQXJyYXkoYikpe2ZvcihkPVJiKGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylmW2JbZ11dPV8uY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAwIT09Yz9fLnN0eWxlKGEsYixjKTpfLmNzcyhhLGIpfSxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBCKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIEIodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihhKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGE/YT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt4Yih0aGlzKT9fKHRoaXMpLnNob3coKTpfKHRoaXMpLmhpZGUoKX0pfX0pLF8uVHdlZW49QyxDLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Qyxpbml0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmVsZW09YSx0aGlzLnByb3A9Yyx0aGlzLmVhc2luZz1lfHxcInN3aW5nXCIsdGhpcy5vcHRpb25zPWIsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPWQsdGhpcy51bml0PWZ8fChfLmNzc051bWJlcltjXT9cIlwiOlwicHhcIil9LGN1cjpmdW5jdGlvbigpe3ZhciBhPUMucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGEmJmEuZ2V0P2EuZ2V0KHRoaXMpOkMucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGEpe3ZhciBiLGM9Qy5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5wb3M9Yj10aGlzLm9wdGlvbnMuZHVyYXRpb24/Xy5lYXNpbmdbdGhpcy5lYXNpbmddKGEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6YSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqYit0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxjJiZjLnNldD9jLnNldCh0aGlzKTpDLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LEMucHJvdG90eXBlLmluaXQucHJvdG90eXBlPUMucHJvdG90eXBlLEMucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBudWxsPT1hLmVsZW1bYS5wcm9wXXx8YS5lbGVtLnN0eWxlJiZudWxsIT1hLmVsZW0uc3R5bGVbYS5wcm9wXT8oYj1fLmNzcyhhLmVsZW0sYS5wcm9wLFwiXCIpLGImJlwiYXV0b1wiIT09Yj9iOjApOmEuZWxlbVthLnByb3BdfSxzZXQ6ZnVuY3Rpb24oYSl7Xy5meC5zdGVwW2EucHJvcF0/Xy5meC5zdGVwW2EucHJvcF0oYSk6YS5lbGVtLnN0eWxlJiYobnVsbCE9YS5lbGVtLnN0eWxlW18uY3NzUHJvcHNbYS5wcm9wXV18fF8uY3NzSG9va3NbYS5wcm9wXSk/Xy5zdHlsZShhLmVsZW0sYS5wcm9wLGEubm93K2EudW5pdCk6YS5lbGVtW2EucHJvcF09YS5ub3d9fX0sQy5wcm9wSG9va3Muc2Nyb2xsVG9wPUMucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihhKXthLmVsZW0ubm9kZVR5cGUmJmEuZWxlbS5wYXJlbnROb2RlJiYoYS5lbGVtW2EucHJvcF09YS5ub3cpfX0sXy5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sc3dpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuLjUtTWF0aC5jb3MoYSpNYXRoLlBJKS8yfX0sXy5meD1DLnByb3RvdHlwZS5pbml0LF8uZnguc3RlcD17fTt2YXIgWWIsWmIsJGI9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLF9iPW5ldyBSZWdFeHAoXCJeKD86KFsrLV0pPXwpKFwiK3ZiK1wiKShbYS16JV0qKSRcIixcImlcIiksYWM9L3F1ZXVlSG9va3MkLyxiYz1bR10sY2M9e1wiKlwiOltmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY3JlYXRlVHdlZW4oYSxiKSxkPWMuY3VyKCksZT1fYi5leGVjKGIpLGY9ZSYmZVszXXx8KF8uY3NzTnVtYmVyW2FdP1wiXCI6XCJweFwiKSxnPShfLmNzc051bWJlclthXXx8XCJweFwiIT09ZiYmK2QpJiZfYi5leGVjKF8uY3NzKGMuZWxlbSxhKSksaD0xLGk9MjA7aWYoZyYmZ1szXSE9PWYpe2Y9Znx8Z1szXSxlPWV8fFtdLGc9K2R8fDE7ZG8gaD1ofHxcIi41XCIsZy89aCxfLnN0eWxlKGMuZWxlbSxhLGcrZik7d2hpbGUoaCE9PShoPWMuY3VyKCkvZCkmJjEhPT1oJiYtLWkpfXJldHVybiBlJiYoZz1jLnN0YXJ0PStnfHwrZHx8MCxjLnVuaXQ9ZixjLmVuZD1lWzFdP2crKGVbMV0rMSkqZVsyXTorZVsyXSksY31dfTtfLkFuaW1hdGlvbj1fLmV4dGVuZChJLHt0d2VlbmVyOmZ1bmN0aW9uKGEsYil7Xy5pc0Z1bmN0aW9uKGEpPyhiPWEsYT1bXCIqXCJdKTphPWEuc3BsaXQoXCIgXCIpO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxjY1tjXT1jY1tjXXx8W10sY2NbY10udW5zaGlmdChiKX0scHJlZmlsdGVyOmZ1bmN0aW9uKGEsYil7Yj9iYy51bnNoaWZ0KGEpOmJjLnB1c2goYSl9fSksXy5zcGVlZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmXCJvYmplY3RcIj09dHlwZW9mIGE/Xy5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxfLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIV8uaXNGdW5jdGlvbihiKSYmYn07cmV0dXJuIGQuZHVyYXRpb249Xy5meC5vZmY/MDpcIm51bWJlclwiPT10eXBlb2YgZC5kdXJhdGlvbj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gXy5meC5zcGVlZHM/Xy5meC5zcGVlZHNbZC5kdXJhdGlvbl06Xy5meC5zcGVlZHMuX2RlZmF1bHQsKG51bGw9PWQucXVldWV8fGQucXVldWU9PT0hMCkmJihkLnF1ZXVlPVwiZnhcIiksZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7Xy5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZfLmRlcXVldWUodGhpcyxkLnF1ZXVlKX0sZH0sXy5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoeGIpLmNzcyhcIm9wYWNpdHlcIiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9Xy5pc0VtcHR5T2JqZWN0KGEpLGY9Xy5zcGVlZChiLGMsZCksZz1mdW5jdGlvbigpe3ZhciBiPUkodGhpcyxfLmV4dGVuZCh7fSxhKSxmKTsoZXx8cmIuZ2V0KHRoaXMsXCJmaW5pc2hcIikpJiZiLnN0b3AoITApfTtyZXR1cm4gZy5maW5pc2g9ZyxlfHxmLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZi5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5zdG9wO2RlbGV0ZSBhLnN0b3AsYihjKX07cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihjPWIsYj1hLGE9dm9pZCAwKSxiJiZhIT09ITEmJnRoaXMucXVldWUoYXx8XCJmeFwiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj0hMCxlPW51bGwhPWEmJmErXCJxdWV1ZUhvb2tzXCIsZj1fLnRpbWVycyxnPXJiLmdldCh0aGlzKTtpZihlKWdbZV0mJmdbZV0uc3RvcCYmZChnW2VdKTtlbHNlIGZvcihlIGluIGcpZ1tlXSYmZ1tlXS5zdG9wJiZhYy50ZXN0KGUpJiZkKGdbZV0pO2ZvcihlPWYubGVuZ3RoO2UtLTspZltlXS5lbGVtIT09dGhpc3x8bnVsbCE9YSYmZltlXS5xdWV1ZSE9PWF8fChmW2VdLmFuaW0uc3RvcChjKSxiPSExLGYuc3BsaWNlKGUsMSkpOyhifHwhYykmJl8uZGVxdWV1ZSh0aGlzLGEpfSl9LGZpbmlzaDpmdW5jdGlvbihhKXtyZXR1cm4gYSE9PSExJiYoYT1hfHxcImZ4XCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiLGM9cmIuZ2V0KHRoaXMpLGQ9Y1thK1wicXVldWVcIl0sZT1jW2ErXCJxdWV1ZUhvb2tzXCJdLGY9Xy50aW1lcnMsZz1kP2QubGVuZ3RoOjA7Zm9yKGMuZmluaXNoPSEwLF8ucXVldWUodGhpcyxhLFtdKSxlJiZlLnN0b3AmJmUuc3RvcC5jYWxsKHRoaXMsITApLGI9Zi5sZW5ndGg7Yi0tOylmW2JdLmVsZW09PT10aGlzJiZmW2JdLnF1ZXVlPT09YSYmKGZbYl0uYW5pbS5zdG9wKCEwKSxmLnNwbGljZShiLDEpKTtmb3IoYj0wO2c+YjtiKyspZFtiXSYmZFtiXS5maW5pc2gmJmRbYl0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIGMuZmluaXNofSl9fSksXy5lYWNoKFtcInRvZ2dsZVwiLFwic2hvd1wiLFwiaGlkZVwiXSxmdW5jdGlvbihhLGIpe3ZhciBjPV8uZm5bYl07Xy5mbltiXT1mdW5jdGlvbihhLGQsZSl7cmV0dXJuIG51bGw9PWF8fFwiYm9vbGVhblwiPT10eXBlb2YgYT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoRShiLCEwKSxhLGQsZSl9fSksXy5lYWNoKHtzbGlkZURvd246RShcInNob3dcIiksc2xpZGVVcDpFKFwiaGlkZVwiKSxzbGlkZVRvZ2dsZTpFKFwidG9nZ2xlXCIpLGZhZGVJbjp7b3BhY2l0eTpcInNob3dcIn0sZmFkZU91dDp7b3BhY2l0eTpcImhpZGVcIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eTpcInRvZ2dsZVwifX0sZnVuY3Rpb24oYSxiKXtfLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0pLF8udGltZXJzPVtdLF8uZngudGljaz1mdW5jdGlvbigpe3ZhciBhLGI9MCxjPV8udGltZXJzO2ZvcihZYj1fLm5vdygpO2I8Yy5sZW5ndGg7YisrKWE9Y1tiXSxhKCl8fGNbYl0hPT1hfHxjLnNwbGljZShiLS0sMSk7Yy5sZW5ndGh8fF8uZnguc3RvcCgpLFliPXZvaWQgMH0sXy5meC50aW1lcj1mdW5jdGlvbihhKXtfLnRpbWVycy5wdXNoKGEpLGEoKT9fLmZ4LnN0YXJ0KCk6Xy50aW1lcnMucG9wKCl9LF8uZnguaW50ZXJ2YWw9MTMsXy5meC5zdGFydD1mdW5jdGlvbigpe1pifHwoWmI9c2V0SW50ZXJ2YWwoXy5meC50aWNrLF8uZnguaW50ZXJ2YWwpKX0sXy5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChaYiksWmI9bnVsbH0sXy5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sXy5mbi5kZWxheT1mdW5jdGlvbihhLGIpe3JldHVybiBhPV8uZng/Xy5meC5zcGVlZHNbYV18fGE6YSxiPWJ8fFwiZnhcIix0aGlzLnF1ZXVlKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1zZXRUaW1lb3V0KGIsYSk7Yy5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGQpfX0pfSxmdW5jdGlvbigpe3ZhciBhPVouY3JlYXRlRWxlbWVudChcImlucHV0XCIpLGI9Wi5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpLGM9Yi5hcHBlbmRDaGlsZChaLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIikpO2EudHlwZT1cImNoZWNrYm94XCIsWS5jaGVja09uPVwiXCIhPT1hLnZhbHVlLFkub3B0U2VsZWN0ZWQ9Yy5zZWxlY3RlZCxiLmRpc2FibGVkPSEwLFkub3B0RGlzYWJsZWQ9IWMuZGlzYWJsZWQsYT1aLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKSxhLnZhbHVlPVwidFwiLGEudHlwZT1cInJhZGlvXCIsWS5yYWRpb1ZhbHVlPVwidFwiPT09YS52YWx1ZX0oKTt2YXIgZGMsZWMsZmM9Xy5leHByLmF0dHJIYW5kbGU7Xy5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcWIodGhpcyxfLmF0dHIsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe18ucmVtb3ZlQXR0cih0aGlzLGEpfSl9fSksXy5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj1hLm5vZGVUeXBlO2lmKGEmJjMhPT1mJiY4IT09ZiYmMiE9PWYpcmV0dXJuIHR5cGVvZiBhLmdldEF0dHJpYnV0ZT09PXpiP18ucHJvcChhLGIsYyk6KDE9PT1mJiZfLmlzWE1MRG9jKGEpfHwoYj1iLnRvTG93ZXJDYXNlKCksZD1fLmF0dHJIb29rc1tiXXx8KF8uZXhwci5tYXRjaC5ib29sLnRlc3QoYik/ZWM6ZGMpKSx2b2lkIDA9PT1jP2QmJlwiZ2V0XCJpbiBkJiZudWxsIT09KGU9ZC5nZXQoYSxiKSk/ZTooZT1fLmZpbmQuYXR0cihhLGIpLG51bGw9PWU/dm9pZCAwOmUpOm51bGwhPT1jP2QmJlwic2V0XCJpbiBkJiZ2b2lkIDAhPT0oZT1kLnNldChhLGMsYikpP2U6KGEuc2V0QXR0cmlidXRlKGIsYytcIlwiKSxjKTp2b2lkIF8ucmVtb3ZlQXR0cihhLGIpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT0wLGY9YiYmYi5tYXRjaChuYik7aWYoZiYmMT09PWEubm9kZVR5cGUpZm9yKDtjPWZbZSsrXTspZD1fLnByb3BGaXhbY118fGMsXy5leHByLm1hdGNoLmJvb2wudGVzdChjKSYmKGFbZF09ITEpLGEucmVtb3ZlQXR0cmlidXRlKGMpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lmKCFZLnJhZGlvVmFsdWUmJlwicmFkaW9cIj09PWImJl8ubm9kZU5hbWUoYSxcImlucHV0XCIpKXt2YXIgYz1hLnZhbHVlO3JldHVybiBhLnNldEF0dHJpYnV0ZShcInR5cGVcIixiKSxjJiYoYS52YWx1ZT1jKSxifX19fX0pLGVjPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/Xy5yZW1vdmVBdHRyKGEsYyk6YS5zZXRBdHRyaWJ1dGUoYyxjKSxjfX0sXy5lYWNoKF8uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXFx3Ky9nKSxmdW5jdGlvbihhLGIpe3ZhciBjPWZjW2JdfHxfLmZpbmQuYXR0cjtmY1tiXT1mdW5jdGlvbihhLGIsZCl7dmFyIGUsZjtyZXR1cm4gZHx8KGY9ZmNbYl0sZmNbYl09ZSxlPW51bGwhPWMoYSxiLGQpP2IudG9Mb3dlckNhc2UoKTpudWxsLGZjW2JdPWYpLGV9fSk7dmFyIGdjPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2k7Xy5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcWIodGhpcyxfLnByb3AsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW18ucHJvcEZpeFthXXx8YV19KX19KSxfLmV4dGVuZCh7cHJvcEZpeDp7XCJmb3JcIjpcImh0bWxGb3JcIixcImNsYXNzXCI6XCJjbGFzc05hbWVcIn0scHJvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGc9YS5ub2RlVHlwZTtpZihhJiYzIT09ZyYmOCE9PWcmJjIhPT1nKXJldHVybiBmPTEhPT1nfHwhXy5pc1hNTERvYyhhKSxmJiYoYj1fLnByb3BGaXhbYl18fGIsZT1fLnByb3BIb29rc1tiXSksdm9pZCAwIT09Yz9lJiZcInNldFwiaW4gZSYmdm9pZCAwIT09KGQ9ZS5zZXQoYSxjLGIpKT9kOmFbYl09YzplJiZcImdldFwiaW4gZSYmbnVsbCE9PShkPWUuZ2V0KGEsYikpP2Q6YVtiXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmhhc0F0dHJpYnV0ZShcInRhYmluZGV4XCIpfHxnYy50ZXN0KGEubm9kZU5hbWUpfHxhLmhyZWY/YS50YWJJbmRleDotMX19fX0pLFkub3B0U2VsZWN0ZWR8fChfLnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxudWxsfX0pLF8uZWFjaChbXCJ0YWJJbmRleFwiLFwicmVhZE9ubHlcIixcIm1heExlbmd0aFwiLFwiY2VsbFNwYWNpbmdcIixcImNlbGxQYWRkaW5nXCIsXCJyb3dTcGFuXCIsXCJjb2xTcGFuXCIsXCJ1c2VNYXBcIixcImZyYW1lQm9yZGVyXCIsXCJjb250ZW50RWRpdGFibGVcIl0sZnVuY3Rpb24oKXtfLnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSk7dmFyIGhjPS9bXFx0XFxyXFxuXFxmXS9nO18uZm4uZXh0ZW5kKHthZGRDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaD1cInN0cmluZ1wiPT10eXBlb2YgYSYmYSxpPTAsaj10aGlzLmxlbmd0aDtpZihfLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtfKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGgpZm9yKGI9KGF8fFwiXCIpLm1hdGNoKG5iKXx8W107aj5pO2krKylpZihjPXRoaXNbaV0sZD0xPT09Yy5ub2RlVHlwZSYmKGMuY2xhc3NOYW1lPyhcIiBcIitjLmNsYXNzTmFtZStcIiBcIikucmVwbGFjZShoYyxcIiBcIik6XCIgXCIpKXtmb3IoZj0wO2U9YltmKytdOylkLmluZGV4T2YoXCIgXCIrZStcIiBcIik8MCYmKGQrPWUrXCIgXCIpO2c9Xy50cmltKGQpLGMuY2xhc3NOYW1lIT09ZyYmKGMuY2xhc3NOYW1lPWcpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaD0wPT09YXJndW1lbnRzLmxlbmd0aHx8XCJzdHJpbmdcIj09dHlwZW9mIGEmJmEsaT0wLGo9dGhpcy5sZW5ndGg7aWYoXy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Xyh0aGlzKS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihoKWZvcihiPShhfHxcIlwiKS5tYXRjaChuYil8fFtdO2o+aTtpKyspaWYoYz10aGlzW2ldLGQ9MT09PWMubm9kZVR5cGUmJihjLmNsYXNzTmFtZT8oXCIgXCIrYy5jbGFzc05hbWUrXCIgXCIpLnJlcGxhY2UoaGMsXCIgXCIpOlwiXCIpKXtmb3IoZj0wO2U9YltmKytdOylmb3IoO2QuaW5kZXhPZihcIiBcIitlK1wiIFwiKT49MDspZD1kLnJlcGxhY2UoXCIgXCIrZStcIiBcIixcIiBcIik7Zz1hP18udHJpbShkKTpcIlwiLGMuY2xhc3NOYW1lIT09ZyYmKGMuY2xhc3NOYW1lPWcpfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhO3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgYiYmXCJzdHJpbmdcIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6dGhpcy5lYWNoKF8uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihjKXtfKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsdGhpcy5jbGFzc05hbWUsYiksYil9OmZ1bmN0aW9uKCl7aWYoXCJzdHJpbmdcIj09PWMpZm9yKHZhciBiLGQ9MCxlPV8odGhpcyksZj1hLm1hdGNoKG5iKXx8W107Yj1mW2QrK107KWUuaGFzQ2xhc3MoYik/ZS5yZW1vdmVDbGFzcyhiKTplLmFkZENsYXNzKGIpO2Vsc2UoYz09PXpifHxcImJvb2xlYW5cIj09PWMpJiYodGhpcy5jbGFzc05hbWUmJnJiLnNldCh0aGlzLFwiX19jbGFzc05hbWVfX1wiLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8YT09PSExP1wiXCI6cmIuZ2V0KHRoaXMsXCJfX2NsYXNzTmFtZV9fXCIpfHxcIlwiKX0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXtmb3IodmFyIGI9XCIgXCIrYStcIiBcIixjPTAsZD10aGlzLmxlbmd0aDtkPmM7YysrKWlmKDE9PT10aGlzW2NdLm5vZGVUeXBlJiYoXCIgXCIrdGhpc1tjXS5jbGFzc05hbWUrXCIgXCIpLnJlcGxhY2UoaGMsXCIgXCIpLmluZGV4T2YoYik+PTApcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIGljPS9cXHIvZztfLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQ9Xy5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLF8odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPVwiXCI6XCJudW1iZXJcIj09dHlwZW9mIGU/ZSs9XCJcIjpfLmlzQXJyYXkoZSkmJihlPV8ubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/XCJcIjphK1wiXCJ9KSksYj1fLnZhbEhvb2tzW3RoaXMudHlwZV18fF8udmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiZcInNldFwiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLFwidmFsdWVcIil8fCh0aGlzLnZhbHVlPWUpKX0pO2lmKGUpcmV0dXJuIGI9Xy52YWxIb29rc1tlLnR5cGVdfHxfLnZhbEhvb2tzW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmXCJnZXRcImluIGImJnZvaWQgMCE9PShjPWIuZ2V0KGUsXCJ2YWx1ZVwiKSk/YzooYz1lLnZhbHVlLFwic3RyaW5nXCI9PXR5cGVvZiBjP2MucmVwbGFjZShpYyxcIlwiKTpudWxsPT1jP1wiXCI6Yyl9fX0pLF8uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9Xy5maW5kLmF0dHIoYSxcInZhbHVlXCIpO3JldHVybiBudWxsIT1iP2I6Xy50cmltKF8udGV4dChhKSl9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkPWEub3B0aW9ucyxlPWEuc2VsZWN0ZWRJbmRleCxmPVwic2VsZWN0LW9uZVwiPT09YS50eXBlfHwwPmUsZz1mP251bGw6W10saD1mP2UrMTpkLmxlbmd0aCxpPTA+ZT9oOmY/ZTowO2g+aTtpKyspaWYoYz1kW2ldLCEoIWMuc2VsZWN0ZWQmJmkhPT1lfHwoWS5vcHREaXNhYmxlZD9jLmRpc2FibGVkOm51bGwhPT1jLmdldEF0dHJpYnV0ZShcImRpc2FibGVkXCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZfLm5vZGVOYW1lKGMucGFyZW50Tm9kZSxcIm9wdGdyb3VwXCIpKSl7aWYoYj1fKGMpLnZhbCgpLGYpcmV0dXJuIGI7Zy5wdXNoKGIpfXJldHVybiBnfSxzZXQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZCxlPWEub3B0aW9ucyxmPV8ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7Zy0tOylkPWVbZ10sKGQuc2VsZWN0ZWQ9Xy5pbkFycmF5KGQudmFsdWUsZik+PTApJiYoYz0hMCk7cmV0dXJuIGN8fChhLnNlbGVjdGVkSW5kZXg9LTEpLGZ9fX19KSxfLmVhY2goW1wicmFkaW9cIixcImNoZWNrYm94XCJdLGZ1bmN0aW9uKCl7Xy52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIF8uaXNBcnJheShiKT9hLmNoZWNrZWQ9Xy5pbkFycmF5KF8oYSkudmFsKCksYik+PTA6dm9pZCAwfX0sWS5jaGVja09ufHwoXy52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpP1wib25cIjphLnZhbHVlfSl9KSxfLmVhY2goXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51XCIuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKGEsYil7Xy5mbltiXT1mdW5jdGlvbihhLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbihiLG51bGwsYSxjKTp0aGlzLnRyaWdnZXIoYil9fSksXy5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfSxiaW5kOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vbihhLG51bGwsYixjKX0sdW5iaW5kOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub2ZmKGEsbnVsbCxiKX0sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYixhLGMsZCl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihhLFwiKipcIik6dGhpcy5vZmYoYixhfHxcIioqXCIsYyl9fSk7dmFyIGpjPV8ubm93KCksa2M9L1xcPy87Xy5wYXJzZUpTT049ZnVuY3Rpb24oYSl7cmV0dXJuIEpTT04ucGFyc2UoYStcIlwiKX0sXy5wYXJzZVhNTD1mdW5jdGlvbihhKXt2YXIgYixjO2lmKCFhfHxcInN0cmluZ1wiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0cnl7Yz1uZXcgRE9NUGFyc2VyLGI9Yy5wYXJzZUZyb21TdHJpbmcoYSxcInRleHQveG1sXCIpfWNhdGNoKGQpe2I9dm9pZCAwfXJldHVybighYnx8Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShcInBhcnNlcmVycm9yXCIpLmxlbmd0aCkmJl8uZXJyb3IoXCJJbnZhbGlkIFhNTDogXCIrYSksYn07dmFyIGxjLG1jLG5jPS8jLiokLyxvYz0vKFs/Jl0pXz1bXiZdKi8scGM9L14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9nbSxxYz0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxyYz0vXig/OkdFVHxIRUFEKSQvLHNjPS9eXFwvXFwvLyx0Yz0vXihbXFx3ListXSs6KSg/OlxcL1xcLyg/OlteXFwvPyNdKkB8KShbXlxcLz8jOl0qKSg/OjooXFxkKyl8KXwpLyx1Yz17fSx2Yz17fSx3Yz1cIiovXCIuY29uY2F0KFwiKlwiKTt0cnl7bWM9bG9jYXRpb24uaHJlZn1jYXRjaCh4Yyl7bWM9Wi5jcmVhdGVFbGVtZW50KFwiYVwiKSxtYy5ocmVmPVwiXCIsbWM9bWMuaHJlZn1sYz10Yy5leGVjKG1jLnRvTG93ZXJDYXNlKCkpfHxbXSxfLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6bWMsdHlwZTpcIkdFVFwiLGlzTG9jYWw6cWMudGVzdChsY1sxXSksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOlwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsYWNjZXB0czp7XCIqXCI6d2MsdGV4dDpcInRleHQvcGxhaW5cIixodG1sOlwidGV4dC9odG1sXCIseG1sOlwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLGpzb246XCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIn0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDpcInJlc3BvbnNlWE1MXCIsdGV4dDpcInJlc3BvbnNlVGV4dFwiLGpzb246XCJyZXNwb25zZUpTT05cIn0sY29udmVydGVyczp7XCIqIHRleHRcIjpTdHJpbmcsXCJ0ZXh0IGh0bWxcIjohMCxcInRleHQganNvblwiOl8ucGFyc2VKU09OLFwidGV4dCB4bWxcIjpfLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9MKEwoYSxfLmFqYXhTZXR0aW5ncyksYik6TChfLmFqYXhTZXR0aW5ncyxhKX0sYWpheFByZWZpbHRlcjpKKHVjKSxhamF4VHJhbnNwb3J0OkoodmMpLGFqYXg6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixjLGcpe3ZhciBpLGsscixzLHUsdz1iOzIhPT10JiYodD0yLGgmJmNsZWFyVGltZW91dChoKSxkPXZvaWQgMCxmPWd8fFwiXCIsdi5yZWFkeVN0YXRlPWE+MD80OjAsaT1hPj0yMDAmJjMwMD5hfHwzMDQ9PT1hLGMmJihzPU0obCx2LGMpKSxzPU4obCxzLHYsaSksaT8obC5pZk1vZGlmaWVkJiYodT12LmdldFJlc3BvbnNlSGVhZGVyKFwiTGFzdC1Nb2RpZmllZFwiKSx1JiYoXy5sYXN0TW9kaWZpZWRbZV09dSksdT12LmdldFJlc3BvbnNlSGVhZGVyKFwiZXRhZ1wiKSx1JiYoXy5ldGFnW2VdPXUpKSwyMDQ9PT1hfHxcIkhFQURcIj09PWwudHlwZT93PVwibm9jb250ZW50XCI6MzA0PT09YT93PVwibm90bW9kaWZpZWRcIjoodz1zLnN0YXRlLGs9cy5kYXRhLHI9cy5lcnJvcixpPSFyKSk6KHI9dywoYXx8IXcpJiYodz1cImVycm9yXCIsMD5hJiYoYT0wKSkpLHYuc3RhdHVzPWEsdi5zdGF0dXNUZXh0PShifHx3KStcIlwiLGk/by5yZXNvbHZlV2l0aChtLFtrLHcsdl0pOm8ucmVqZWN0V2l0aChtLFt2LHcscl0pLHYuc3RhdHVzQ29kZShxKSxxPXZvaWQgMCxqJiZuLnRyaWdnZXIoaT9cImFqYXhTdWNjZXNzXCI6XCJhamF4RXJyb3JcIixbdixsLGk/azpyXSkscC5maXJlV2l0aChtLFt2LHddKSxqJiYobi50cmlnZ2VyKFwiYWpheENvbXBsZXRlXCIsW3YsbF0pLC0tXy5hY3RpdmV8fF8uZXZlbnQudHJpZ2dlcihcImFqYXhTdG9wXCIpKSl9XCJvYmplY3RcIj09dHlwZW9mIGEmJihiPWEsYT12b2lkIDApLGI9Ynx8e307dmFyIGQsZSxmLGcsaCxpLGosayxsPV8uYWpheFNldHVwKHt9LGIpLG09bC5jb250ZXh0fHxsLG49bC5jb250ZXh0JiYobS5ub2RlVHlwZXx8bS5qcXVlcnkpP18obSk6Xy5ldmVudCxvPV8uRGVmZXJyZWQoKSxwPV8uQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIikscT1sLnN0YXR1c0NvZGV8fHt9LHI9e30scz17fSx0PTAsdT1cImNhbmNlbGVkXCIsdj17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKDI9PT10KXtpZighZylmb3IoZz17fTtiPXBjLmV4ZWMoZik7KWdbYlsxXS50b0xvd2VyQ2FzZSgpXT1iWzJdO2I9Z1thLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT1iP251bGw6Yn0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT10P2Y6bnVsbH0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTtyZXR1cm4gdHx8KGE9c1tjXT1zW2NdfHxhLHJbYV09YiksdGhpc30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdHx8KGwubWltZVR5cGU9YSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihhKXt2YXIgYjtpZihhKWlmKDI+dClmb3IoYiBpbiBhKXFbYl09W3FbYl0sYVtiXV07ZWxzZSB2LmFsd2F5cyhhW3Yuc3RhdHVzXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe3ZhciBiPWF8fHU7cmV0dXJuIGQmJmQuYWJvcnQoYiksYygwLGIpLHRoaXN9fTtpZihvLnByb21pc2UodikuY29tcGxldGU9cC5hZGQsdi5zdWNjZXNzPXYuZG9uZSx2LmVycm9yPXYuZmFpbCxsLnVybD0oKGF8fGwudXJsfHxtYykrXCJcIikucmVwbGFjZShuYyxcIlwiKS5yZXBsYWNlKHNjLGxjWzFdK1wiLy9cIiksbC50eXBlPWIubWV0aG9kfHxiLnR5cGV8fGwubWV0aG9kfHxsLnR5cGUsbC5kYXRhVHlwZXM9Xy50cmltKGwuZGF0YVR5cGV8fFwiKlwiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKG5iKXx8W1wiXCJdLG51bGw9PWwuY3Jvc3NEb21haW4mJihpPXRjLmV4ZWMobC51cmwudG9Mb3dlckNhc2UoKSksbC5jcm9zc0RvbWFpbj0hKCFpfHxpWzFdPT09bGNbMV0mJmlbMl09PT1sY1syXSYmKGlbM118fChcImh0dHA6XCI9PT1pWzFdP1wiODBcIjpcIjQ0M1wiKSk9PT0obGNbM118fChcImh0dHA6XCI9PT1sY1sxXT9cIjgwXCI6XCI0NDNcIikpKSksbC5kYXRhJiZsLnByb2Nlc3NEYXRhJiZcInN0cmluZ1wiIT10eXBlb2YgbC5kYXRhJiYobC5kYXRhPV8ucGFyYW0obC5kYXRhLGwudHJhZGl0aW9uYWwpKSxLKHVjLGwsYix2KSwyPT09dClyZXR1cm4gdjtqPWwuZ2xvYmFsLGomJjA9PT1fLmFjdGl2ZSsrJiZfLmV2ZW50LnRyaWdnZXIoXCJhamF4U3RhcnRcIiksbC50eXBlPWwudHlwZS50b1VwcGVyQ2FzZSgpLGwuaGFzQ29udGVudD0hcmMudGVzdChsLnR5cGUpLGU9bC51cmwsbC5oYXNDb250ZW50fHwobC5kYXRhJiYoZT1sLnVybCs9KGtjLnRlc3QoZSk/XCImXCI6XCI/XCIpK2wuZGF0YSxkZWxldGUgbC5kYXRhKSxsLmNhY2hlPT09ITEmJihsLnVybD1vYy50ZXN0KGUpP2UucmVwbGFjZShvYyxcIiQxXz1cIitqYysrKTplKyhrYy50ZXN0KGUpP1wiJlwiOlwiP1wiKStcIl89XCIramMrKykpLGwuaWZNb2RpZmllZCYmKF8ubGFzdE1vZGlmaWVkW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoXCJJZi1Nb2RpZmllZC1TaW5jZVwiLF8ubGFzdE1vZGlmaWVkW2VdKSxfLmV0YWdbZV0mJnYuc2V0UmVxdWVzdEhlYWRlcihcIklmLU5vbmUtTWF0Y2hcIixfLmV0YWdbZV0pKSwobC5kYXRhJiZsLmhhc0NvbnRlbnQmJmwuY29udGVudFR5cGUhPT0hMXx8Yi5jb250ZW50VHlwZSkmJnYuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLGwuY29udGVudFR5cGUpLHYuc2V0UmVxdWVzdEhlYWRlcihcIkFjY2VwdFwiLGwuZGF0YVR5cGVzWzBdJiZsLmFjY2VwdHNbbC5kYXRhVHlwZXNbMF1dP2wuYWNjZXB0c1tsLmRhdGFUeXBlc1swXV0rKFwiKlwiIT09bC5kYXRhVHlwZXNbMF0/XCIsIFwiK3djK1wiOyBxPTAuMDFcIjpcIlwiKTpsLmFjY2VwdHNbXCIqXCJdKTtmb3IoayBpbiBsLmhlYWRlcnMpdi5zZXRSZXF1ZXN0SGVhZGVyKGssbC5oZWFkZXJzW2tdKTtpZihsLmJlZm9yZVNlbmQmJihsLmJlZm9yZVNlbmQuY2FsbChtLHYsbCk9PT0hMXx8Mj09PXQpKXJldHVybiB2LmFib3J0KCk7dT1cImFib3J0XCI7Zm9yKGsgaW57c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0pdltrXShsW2tdKTtpZihkPUsodmMsbCxiLHYpKXt2LnJlYWR5U3RhdGU9MSxqJiZuLnRyaWdnZXIoXCJhamF4U2VuZFwiLFt2LGxdKSxsLmFzeW5jJiZsLnRpbWVvdXQ+MCYmKGg9c2V0VGltZW91dChmdW5jdGlvbigpe3YuYWJvcnQoXCJ0aW1lb3V0XCIpfSxsLnRpbWVvdXQpKTt0cnl7dD0xLGQuc2VuZChyLGMpfWNhdGNoKHcpe2lmKCEoMj50KSl0aHJvdyB3O2MoLTEsdyl9fWVsc2UgYygtMSxcIk5vIFRyYW5zcG9ydFwiKTtyZXR1cm4gdn0sZ2V0SlNPTjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIF8uZ2V0KGEsYixjLFwianNvblwiKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIF8uZ2V0KGEsdm9pZCAwLGIsXCJzY3JpcHRcIil9fSksXy5lYWNoKFtcImdldFwiLFwicG9zdFwiXSxmdW5jdGlvbihhLGIpe19bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIF8uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLF8uYWpheCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0pfX0pLF8uZWFjaChbXCJhamF4U3RhcnRcIixcImFqYXhTdG9wXCIsXCJhamF4Q29tcGxldGVcIixcImFqYXhFcnJvclwiLFwiYWpheFN1Y2Nlc3NcIixcImFqYXhTZW5kXCJdLGZ1bmN0aW9uKGEsYil7Xy5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vbihiLGEpfX0pLF8uX2V2YWxVcmw9ZnVuY3Rpb24oYSl7cmV0dXJuIF8uYWpheCh7dXJsOmEsdHlwZTpcIkdFVFwiLGRhdGFUeXBlOlwic2NyaXB0XCIsYXN5bmM6ITEsZ2xvYmFsOiExLFwidGhyb3dzXCI6ITB9KX0sXy5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIF8uaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYil7Xyh0aGlzKS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pOih0aGlzWzBdJiYoYj1fKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzO2EuZmlyc3RFbGVtZW50Q2hpbGQ7KWE9YS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKSksdGhpcyl9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKF8uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihiKXtfKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9OmZ1bmN0aW9uKCl7dmFyIGI9Xyh0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1fLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXtfKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7Xy5ub2RlTmFtZSh0aGlzLFwiYm9keVwiKXx8Xyh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9fSksXy5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiBhLm9mZnNldFdpZHRoPD0wJiZhLm9mZnNldEhlaWdodDw9MH0sXy5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4hXy5leHByLmZpbHRlcnMuaGlkZGVuKGEpfTt2YXIgeWM9LyUyMC9nLHpjPS9cXFtcXF0kLyxBYz0vXFxyP1xcbi9nLEJjPS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxDYz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7Xy5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9Xy5pc0Z1bmN0aW9uKGIpP2IoKTpudWxsPT1iP1wiXCI6YixkW2QubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoYSkrXCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtpZih2b2lkIDA9PT1iJiYoYj1fLmFqYXhTZXR0aW5ncyYmXy5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLF8uaXNBcnJheShhKXx8YS5qcXVlcnkmJiFfLmlzUGxhaW5PYmplY3QoYSkpXy5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKVxufSk7ZWxzZSBmb3IoYyBpbiBhKU8oYyxhW2NdLGIsZSk7cmV0dXJuIGQuam9pbihcIiZcIikucmVwbGFjZSh5YyxcIitcIil9LF8uZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gXy5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPV8ucHJvcCh0aGlzLFwiZWxlbWVudHNcIik7cmV0dXJuIGE/Xy5tYWtlQXJyYXkoYSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBhPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhXyh0aGlzKS5pcyhcIjpkaXNhYmxlZFwiKSYmQ2MudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUJjLnRlc3QoYSkmJih0aGlzLmNoZWNrZWR8fCF5Yi50ZXN0KGEpKX0pLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPV8odGhpcykudmFsKCk7cmV0dXJuIG51bGw9PWM/bnVsbDpfLmlzQXJyYXkoYyk/Xy5tYXAoYyxmdW5jdGlvbihhKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKEFjLFwiXFxyXFxuXCIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoQWMsXCJcXHJcXG5cIil9fSkuZ2V0KCl9fSksXy5hamF4U2V0dGluZ3MueGhyPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYSl7fX07dmFyIERjPTAsRWM9e30sRmM9ezA6MjAwLDEyMjM6MjA0fSxHYz1fLmFqYXhTZXR0aW5ncy54aHIoKTthLkFjdGl2ZVhPYmplY3QmJl8oYSkub24oXCJ1bmxvYWRcIixmdW5jdGlvbigpe2Zvcih2YXIgYSBpbiBFYylFY1thXSgpfSksWS5jb3JzPSEhR2MmJlwid2l0aENyZWRlbnRpYWxzXCJpbiBHYyxZLmFqYXg9R2M9ISFHYyxfLmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIFkuY29yc3x8R2MmJiFhLmNyb3NzRG9tYWluP3tzZW5kOmZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hLnhocigpLGc9KytEYztpZihmLm9wZW4oYS50eXBlLGEudXJsLGEuYXN5bmMsYS51c2VybmFtZSxhLnBhc3N3b3JkKSxhLnhockZpZWxkcylmb3IoZSBpbiBhLnhockZpZWxkcylmW2VdPWEueGhyRmllbGRzW2VdO2EubWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlKGEubWltZVR5cGUpLGEuY3Jvc3NEb21haW58fGNbXCJYLVJlcXVlc3RlZC1XaXRoXCJdfHwoY1tcIlgtUmVxdWVzdGVkLVdpdGhcIl09XCJYTUxIdHRwUmVxdWVzdFwiKTtmb3IoZSBpbiBjKWYuc2V0UmVxdWVzdEhlYWRlcihlLGNbZV0pO2I9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7YiYmKGRlbGV0ZSBFY1tnXSxiPWYub25sb2FkPWYub25lcnJvcj1udWxsLFwiYWJvcnRcIj09PWE/Zi5hYm9ydCgpOlwiZXJyb3JcIj09PWE/ZChmLnN0YXR1cyxmLnN0YXR1c1RleHQpOmQoRmNbZi5zdGF0dXNdfHxmLnN0YXR1cyxmLnN0YXR1c1RleHQsXCJzdHJpbmdcIj09dHlwZW9mIGYucmVzcG9uc2VUZXh0P3t0ZXh0OmYucmVzcG9uc2VUZXh0fTp2b2lkIDAsZi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sZi5vbmxvYWQ9YigpLGYub25lcnJvcj1iKFwiZXJyb3JcIiksYj1FY1tnXT1iKFwiYWJvcnRcIik7dHJ5e2Yuc2VuZChhLmhhc0NvbnRlbnQmJmEuZGF0YXx8bnVsbCl9Y2F0Y2goaCl7aWYoYil0aHJvdyBofX0sYWJvcnQ6ZnVuY3Rpb24oKXtiJiZiKCl9fTp2b2lkIDB9KSxfLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OlwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIn0sY29udGVudHM6e3NjcmlwdDovKD86amF2YXxlY21hKXNjcmlwdC99LGNvbnZlcnRlcnM6e1widGV4dCBzY3JpcHRcIjpmdW5jdGlvbihhKXtyZXR1cm4gXy5nbG9iYWxFdmFsKGEpLGF9fX0pLF8uYWpheFByZWZpbHRlcihcInNjcmlwdFwiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPVwiR0VUXCIpfSksXy5hamF4VHJhbnNwb3J0KFwic2NyaXB0XCIsZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGIsYztyZXR1cm57c2VuZDpmdW5jdGlvbihkLGUpe2I9XyhcIjxzY3JpcHQ+XCIpLnByb3Aoe2FzeW5jOiEwLGNoYXJzZXQ6YS5zY3JpcHRDaGFyc2V0LHNyYzphLnVybH0pLm9uKFwibG9hZCBlcnJvclwiLGM9ZnVuY3Rpb24oYSl7Yi5yZW1vdmUoKSxjPW51bGwsYSYmZShcImVycm9yXCI9PT1hLnR5cGU/NDA0OjIwMCxhLnR5cGUpfSksWi5oZWFkLmFwcGVuZENoaWxkKGJbMF0pfSxhYm9ydDpmdW5jdGlvbigpe2MmJmMoKX19fX0pO3ZhciBIYz1bXSxJYz0vKD0pXFw/KD89JnwkKXxcXD9cXD8vO18uYWpheFNldHVwKHtqc29ucDpcImNhbGxiYWNrXCIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBhPUhjLnBvcCgpfHxfLmV4cGFuZG8rXCJfXCIramMrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLF8uYWpheFByZWZpbHRlcihcImpzb24ganNvbnBcIixmdW5jdGlvbihiLGMsZCl7dmFyIGUsZixnLGg9Yi5qc29ucCE9PSExJiYoSWMudGVzdChiLnVybCk/XCJ1cmxcIjpcInN0cmluZ1wiPT10eXBlb2YgYi5kYXRhJiYhKGIuY29udGVudFR5cGV8fFwiXCIpLmluZGV4T2YoXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIikmJkljLnRlc3QoYi5kYXRhKSYmXCJkYXRhXCIpO3JldHVybiBofHxcImpzb25wXCI9PT1iLmRhdGFUeXBlc1swXT8oZT1iLmpzb25wQ2FsbGJhY2s9Xy5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGg/YltoXT1iW2hdLnJlcGxhY2UoSWMsXCIkMVwiK2UpOmIuanNvbnAhPT0hMSYmKGIudXJsKz0oa2MudGVzdChiLnVybCk/XCImXCI6XCI/XCIpK2IuanNvbnArXCI9XCIrZSksYi5jb252ZXJ0ZXJzW1wic2NyaXB0IGpzb25cIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8Xy5lcnJvcihlK1wiIHdhcyBub3QgY2FsbGVkXCIpLGdbMF19LGIuZGF0YVR5cGVzWzBdPVwianNvblwiLGY9YVtlXSxhW2VdPWZ1bmN0aW9uKCl7Zz1hcmd1bWVudHN9LGQuYWx3YXlzKGZ1bmN0aW9uKCl7YVtlXT1mLGJbZV0mJihiLmpzb25wQ2FsbGJhY2s9Yy5qc29ucENhbGxiYWNrLEhjLnB1c2goZSkpLGcmJl8uaXNGdW5jdGlvbihmKSYmZihnWzBdKSxnPWY9dm9pZCAwfSksXCJzY3JpcHRcIik6dm9pZCAwfSksXy5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHxcInN0cmluZ1wiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDtcImJvb2xlYW5cIj09dHlwZW9mIGImJihjPWIsYj0hMSksYj1ifHxaO3ZhciBkPWdiLmV4ZWMoYSksZT0hYyYmW107cmV0dXJuIGQ/W2IuY3JlYXRlRWxlbWVudChkWzFdKV06KGQ9Xy5idWlsZEZyYWdtZW50KFthXSxiLGUpLGUmJmUubGVuZ3RoJiZfKGUpLnJlbW92ZSgpLF8ubWVyZ2UoW10sZC5jaGlsZE5vZGVzKSl9O3ZhciBKYz1fLmZuLmxvYWQ7Xy5mbi5sb2FkPWZ1bmN0aW9uKGEsYixjKXtpZihcInN0cmluZ1wiIT10eXBlb2YgYSYmSmMpcmV0dXJuIEpjLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgZCxlLGYsZz10aGlzLGg9YS5pbmRleE9mKFwiIFwiKTtyZXR1cm4gaD49MCYmKGQ9Xy50cmltKGEuc2xpY2UoaCkpLGE9YS5zbGljZSgwLGgpKSxfLmlzRnVuY3Rpb24oYik/KGM9YixiPXZvaWQgMCk6YiYmXCJvYmplY3RcIj09dHlwZW9mIGImJihlPVwiUE9TVFwiKSxnLmxlbmd0aD4wJiZfLmFqYXgoe3VybDphLHR5cGU6ZSxkYXRhVHlwZTpcImh0bWxcIixkYXRhOmJ9KS5kb25lKGZ1bmN0aW9uKGEpe2Y9YXJndW1lbnRzLGcuaHRtbChkP18oXCI8ZGl2PlwiKS5hcHBlbmQoXy5wYXJzZUhUTUwoYSkpLmZpbmQoZCk6YSl9KS5jb21wbGV0ZShjJiZmdW5jdGlvbihhLGIpe2cuZWFjaChjLGZ8fFthLnJlc3BvbnNlVGV4dCxiLGFdKX0pLHRoaXN9LF8uZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGEpe3JldHVybiBfLmdyZXAoXy50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19KS5sZW5ndGh9O3ZhciBLYz1hLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtfLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPV8uY3NzKGEsXCJwb3NpdGlvblwiKSxsPV8oYSksbT17fTtcInN0YXRpY1wiPT09ayYmKGEuc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiKSxoPWwub2Zmc2V0KCksZj1fLmNzcyhhLFwidG9wXCIpLGk9Xy5jc3MoYSxcImxlZnRcIiksaj0oXCJhYnNvbHV0ZVwiPT09a3x8XCJmaXhlZFwiPT09aykmJihmK2kpLmluZGV4T2YoXCJhdXRvXCIpPi0xLGo/KGQ9bC5wb3NpdGlvbigpLGc9ZC50b3AsZT1kLmxlZnQpOihnPXBhcnNlRmxvYXQoZil8fDAsZT1wYXJzZUZsb2F0KGkpfHwwKSxfLmlzRnVuY3Rpb24oYikmJihiPWIuY2FsbChhLGMsaCkpLG51bGwhPWIudG9wJiYobS50b3A9Yi50b3AtaC50b3ArZyksbnVsbCE9Yi5sZWZ0JiYobS5sZWZ0PWIubGVmdC1oLmxlZnQrZSksXCJ1c2luZ1wiaW4gYj9iLnVzaW5nLmNhbGwoYSxtKTpsLmNzcyhtKX19LF8uZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24oYSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09YT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihiKXtfLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7dmFyIGIsYyxkPXRoaXNbMF0sZT17dG9wOjAsbGVmdDowfSxmPWQmJmQub3duZXJEb2N1bWVudDtpZihmKXJldHVybiBiPWYuZG9jdW1lbnRFbGVtZW50LF8uY29udGFpbnMoYixkKT8odHlwZW9mIGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0IT09emImJihlPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLGM9UChmKSx7dG9wOmUudG9wK2MucGFnZVlPZmZzZXQtYi5jbGllbnRUb3AsbGVmdDplLmxlZnQrYy5wYWdlWE9mZnNldC1iLmNsaWVudExlZnR9KTplfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBhLGIsYz10aGlzWzBdLGQ9e3RvcDowLGxlZnQ6MH07cmV0dXJuXCJmaXhlZFwiPT09Xy5jc3MoYyxcInBvc2l0aW9uXCIpP2I9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooYT10aGlzLm9mZnNldFBhcmVudCgpLGI9dGhpcy5vZmZzZXQoKSxfLm5vZGVOYW1lKGFbMF0sXCJodG1sXCIpfHwoZD1hLm9mZnNldCgpKSxkLnRvcCs9Xy5jc3MoYVswXSxcImJvcmRlclRvcFdpZHRoXCIsITApLGQubGVmdCs9Xy5jc3MoYVswXSxcImJvcmRlckxlZnRXaWR0aFwiLCEwKSkse3RvcDpiLnRvcC1kLnRvcC1fLmNzcyhjLFwibWFyZ2luVG9wXCIsITApLGxlZnQ6Yi5sZWZ0LWQubGVmdC1fLmNzcyhjLFwibWFyZ2luTGVmdFwiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fEtjO2EmJiFfLm5vZGVOYW1lKGEsXCJodG1sXCIpJiZcInN0YXRpY1wiPT09Xy5jc3MoYSxcInBvc2l0aW9uXCIpOylhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxLY30pfX0pLF8uZWFjaCh7c2Nyb2xsTGVmdDpcInBhZ2VYT2Zmc2V0XCIsc2Nyb2xsVG9wOlwicGFnZVlPZmZzZXRcIn0sZnVuY3Rpb24oYixjKXt2YXIgZD1cInBhZ2VZT2Zmc2V0XCI9PT1jO18uZm5bYl09ZnVuY3Rpb24oZSl7cmV0dXJuIHFiKHRoaXMsZnVuY3Rpb24oYixlLGYpe3ZhciBnPVAoYik7cmV0dXJuIHZvaWQgMD09PWY/Zz9nW2NdOmJbZV06dm9pZChnP2cuc2Nyb2xsVG8oZD9hLnBhZ2VYT2Zmc2V0OmYsZD9mOmEucGFnZVlPZmZzZXQpOmJbZV09Zil9LGIsZSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pLF8uZWFjaChbXCJ0b3BcIixcImxlZnRcIl0sZnVuY3Rpb24oYSxiKXtfLmNzc0hvb2tzW2JdPXcoWS5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGM/KGM9dihhLGIpLFFiLnRlc3QoYyk/XyhhKS5wb3NpdGlvbigpW2JdK1wicHhcIjpjKTp2b2lkIDB9KX0pLF8uZWFjaCh7SGVpZ2h0OlwiaGVpZ2h0XCIsV2lkdGg6XCJ3aWR0aFwifSxmdW5jdGlvbihhLGIpe18uZWFjaCh7cGFkZGluZzpcImlubmVyXCIrYSxjb250ZW50OmIsXCJcIjpcIm91dGVyXCIrYX0sZnVuY3Rpb24oYyxkKXtfLmZuW2RdPWZ1bmN0aW9uKGQsZSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aCYmKGN8fFwiYm9vbGVhblwiIT10eXBlb2YgZCksZz1jfHwoZD09PSEwfHxlPT09ITA/XCJtYXJnaW5cIjpcImJvcmRlclwiKTtyZXR1cm4gcWIodGhpcyxmdW5jdGlvbihiLGMsZCl7dmFyIGU7cmV0dXJuIF8uaXNXaW5kb3coYik/Yi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbXCJjbGllbnRcIithXTo5PT09Yi5ub2RlVHlwZT8oZT1iLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChiLmJvZHlbXCJzY3JvbGxcIithXSxlW1wic2Nyb2xsXCIrYV0sYi5ib2R5W1wib2Zmc2V0XCIrYV0sZVtcIm9mZnNldFwiK2FdLGVbXCJjbGllbnRcIithXSkpOnZvaWQgMD09PWQ/Xy5jc3MoYixjLGcpOl8uc3R5bGUoYixjLGQsZyl9LGIsZj9kOnZvaWQgMCxmLG51bGwpfX0pfSksXy5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxfLmZuLmFuZFNlbGY9Xy5mbi5hZGRCYWNrLFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKFwianF1ZXJ5XCIsW10sZnVuY3Rpb24oKXtyZXR1cm4gX30pO3ZhciBMYz1hLmpRdWVyeSxNYz1hLiQ7cmV0dXJuIF8ubm9Db25mbGljdD1mdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09XyYmKGEuJD1NYyksYiYmYS5qUXVlcnk9PT1fJiYoYS5qUXVlcnk9TGMpLF99LHR5cGVvZiBiPT09emImJihhLmpRdWVyeT1hLiQ9XyksX30pO1xuIiwi77u/ZnVuY3Rpb24gR2V0Rm9ybVhtbChjb250YWluZXIpIHtcclxuICAgIC8vIFRoaXMgaXMgYW4gYXV0byBnZW5lcmF0ZWQgZmllbGQgdG8gYmxvY2sgc2NyaXB0L3Byb2dyYW1zIHRvIHN1Ym1pdCBmb3JtIGF1dG9tYXRpY2FsbHkuIFxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkVsZW1lbnQgTGVuZ3RoOlwiICsgJChjb250YWluZXIpLmZpbmQoJCgnaW5wdXRbaWRePVwidHh0RmF4SW5mb1wiXScpKS5sZW5ndGgpO1xyXG4gICAgaWYgKCQoY29udGFpbmVyKS5maW5kKCQoJ2lucHV0W2lkXj1cInR4dEZheEluZm9cIl0nKSkubGVuZ3RoID4gMCAmJiAkKGNvbnRhaW5lcikuZmluZCgkKCdpbnB1dFtpZF49XCJ0eHRGYXhJbmZvXCJdJykpLnZhbCgpICE9ICcnKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICB2YXIgX2VudGl0eVhtbCA9IFtdO1xyXG4gICAgdmFyIF90ZW1wWG1sID0gJyc7XHJcbiAgICB2YXIgX3RlbXBWYWx1ZSA9ICcnO1xyXG4gICAgdmFyIF90ZW1wTGFiZWwgPSAnJztcclxuICAgIHZhciBfaXNWYWxpZGF0ZWQgPSB0cnVlO1xyXG5cclxuICAgICQoY29udGFpbmVyKS5maW5kKCcqW0Zvcm1Ob2RlPVwidHJ1ZVwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIF90ZW1wVmFsdWUgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKCQodGhpcykuYXR0cigndHlwZScpID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgICAgdmFyIF9kZWxpbWl0ZXIgPSAnJztcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICgkKGNvbnRhaW5lcikuZmluZCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW25hbWU9XCInICsgJCh0aGlzKS5hdHRyKCduYW1lJykgKyAnXCJdOmNoZWNrZWQnKS5sZW5ndGggPiAxKSBfZGVsaW1pdGVyID0gJzsnO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsgfVxyXG4gICAgICAgICAgICAkKGNvbnRhaW5lcikuZmluZCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW25hbWU9XCInICsgJCh0aGlzKS5hdHRyKCduYW1lJykgKyAnXCJdOmNoZWNrZWQnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIF90ZW1wVmFsdWUgPSBfdGVtcFZhbHVlICsgJCh0aGlzKS52YWwoKSArIF9kZWxpbWl0ZXI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoJCh0aGlzKS5hdHRyKCd0eXBlJykgPT0gJ3JhZGlvJykge1xyXG4gICAgICAgICAgICBpZiAoJCh0aGlzKS5pcygnOmNoZWNrZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgX3RlbXBWYWx1ZSA9ICQodGhpcykudmFsKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKCQodGhpcykuYXR0cignY2FwdGNoYScpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2NhcHRjaGEgPSAnJztcclxuICAgICAgICAgICAgICAgIHZhciAkY2FwdGNoYSA9ICQodGhpcykuY2xvc2VzdCgnLmNhcHRjaGEnKS5maW5kKCdbY2FwdGNoYS12YWx1ZV0nKTtcclxuICAgICAgICAgICAgICAgIF9jYXB0Y2hhID0gJzxDYXB0Y2hhVmFsaWRhdG9yIElEPVwiJyArICRjYXB0Y2hhLmF0dHIoJ2NhcHRjaGEtaWQnKSArICdcIj4nICsgJCh0aGlzKS52YWwoKSArICc8L0NhcHRjaGFWYWxpZGF0b3I+JztcclxuICAgICAgICAgICAgICAgIGlmIChNRDUoJCh0aGlzKS52YWwoKSkudG9Mb3dlckNhc2UoKSAhPSAkY2FwdGNoYS5hdHRyKCdjYXB0Y2hhLXZhbHVlJykudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pc1ZhbGlkYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQodGhpcykuYXR0cignRm9ybU1lc3NhZ2UnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgX2VudGl0eVhtbFtcIkNhcHRjaGFcIl0gPSBfY2FwdGNoYTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyBfaXNWYWxpZGF0ZWQgPSBmYWxzZTsgYWxlcnQoZSk7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIF90ZW1wVmFsdWUgPSAkKHRoaXMpLnZhbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzTnVsbE9yRW1wdHkoX3RlbXBWYWx1ZSkpIHtcclxuICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cignUmVxdWlyZWQnKSA9PSAndHJ1ZScgfHwgJCh0aGlzKS5hdHRyKCdSZXF1aXJlZCcpID09ICdyZXF1aXJlZCcpIHtcclxuICAgICAgICAgICAgICAgIF9pc1ZhbGlkYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJCh0aGlzKS5hdHRyKCdGb3JtTWVzc2FnZScpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ0Zvcm1UeXBlJykgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ0Zvcm1UeXBlJykgPT0gJ0VtYWlsJyAmJiAhaXNWYWxpZEVtYWlsKF90ZW1wVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2lzVmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCh0aGlzKS5hdHRyKCdGb3JtTWVzc2FnZScpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JFbXB0eSgkKHRoaXMpLmF0dHIoJ01pbkxlbmd0aCcpKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KCQodGhpcykuYXR0cignTWluTGVuZ3RoJykpID4gX3RlbXBWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBfaXNWYWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydCgkKHRoaXMpLmF0dHIoJ0Zvcm1NZXNzYWdlJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzTnVsbE9yRW1wdHkoJCh0aGlzKS5hdHRyKCdFbnRpdHknKSkpIHJldHVybjtcclxuICAgICAgICBpZiAoaXNOdWxsT3JFbXB0eSgkKHRoaXMpLmF0dHIoJ05vZGUnKSkpIHJldHVybjtcclxuICAgICAgICBfdGVtcFhtbCA9IF9lbnRpdHlYbWxbJCh0aGlzKS5hdHRyKCdFbnRpdHknKV07XHJcbiAgICAgICAgaWYgKGlzTnVsbE9yRW1wdHkoX3RlbXBYbWwpKSBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkoX3RlbXBWYWx1ZSkpIHtcclxuICAgICAgICAgICAgX3RlbXBWYWx1ZSA9IF90ZW1wVmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkoJCh0aGlzKS5hdHRyKCdsYWJlbCcpKSkgX3RlbXBMYWJlbCA9ICcgbGFiZWw9XCInICsgJCh0aGlzKS5hdHRyKCdsYWJlbCcpICsgJ1wiICc7IGVsc2UgX3RlbXBMYWJlbCA9ICcnO1xyXG4gICAgICAgICAgICBfdGVtcFhtbCA9ICc8JyArICQodGhpcykuYXR0cignTm9kZScpICsgX3RlbXBMYWJlbCArICc+JyArICgkKHRoaXMpLmF0dHIoJ2RhdGEtYWdvcmEtdHlwZScpICE9ICd4bWwnID8gJzwhW0NEQVRBWycgKyBfdGVtcFZhbHVlICsgJ11dPicgOiBfdGVtcFZhbHVlKSArICc8LycgKyAkKHRoaXMpLmF0dHIoJ05vZGUnKSArICc+JztcclxuICAgICAgICAgICAgX2VudGl0eVhtbFskKHRoaXMpLmF0dHIoJ0VudGl0eScpXSArPSBfdGVtcFhtbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCQodGhpcykuYXR0cignRW50aXR5JykgPT09ICdMZWFkJykge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gbmV3IFVSTChjdXJyZW50VXJsKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHVybC5zZWFyY2gpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5oYXMoXCJ1dG1fdGVybVwiKSkge1xyXG4gICAgICAgICAgICAgICAgX3RlbXBWYWx1ZSA9IHBhcmFtcy5nZXQoXCJ1dG1fdGVybVwiKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBfdGVtcExhYmVsID0gJyBsYWJlbD1cIlVUTSBUZXJtXCIgJztcclxuICAgICAgICAgICAgICAgIF90ZW1wWG1sID0gJzxVVE1UZXJtJyArIF90ZW1wTGFiZWwgKyAnPicgKyAoJCh0aGlzKS5hdHRyKCdkYXRhLWFnb3JhLXR5cGUnKSAhPSAneG1sJyA/ICc8IVtDREFUQVsnICsgX3RlbXBWYWx1ZSArICddXT4nIDogX3RlbXBWYWx1ZSkgKyAnPC9VVE1UZXJtPic7XHJcbiAgICAgICAgICAgICAgICBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldICs9IF90ZW1wWG1sO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMuaGFzKFwidG1fY29ycF9wYXJ0bmVyXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFZhbHVlID0gcGFyYW1zLmdldChcInRtX2NvcnBfcGFydG5lclwiKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBfdGVtcExhYmVsID0gJyBsYWJlbD1cIkNvcnBvcmF0ZSBQYXJ0bmVyXCIgJztcclxuICAgICAgICAgICAgICAgIF90ZW1wWG1sID0gJzxDb3Jwb3JhdGVQYXJ0bmVyJyArIF90ZW1wTGFiZWwgKyAnPicgKyAoJCh0aGlzKS5hdHRyKCdkYXRhLWFnb3JhLXR5cGUnKSAhPSAneG1sJyA/ICc8IVtDREFUQVsnICsgX3RlbXBWYWx1ZSArICddXT4nIDogX3RlbXBWYWx1ZSkgKyAnPC9Db3Jwb3JhdGVQYXJ0bmVyPic7XHJcbiAgICAgICAgICAgICAgICBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldICs9IF90ZW1wWG1sO1xyXG4gICAgICAgICAgICB9IGlmIChwYXJhbXMuaGFzKFwidXRtX2NhbXBhaWduXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFZhbHVlID0gcGFyYW1zLmdldChcInV0bV9jYW1wYWlnblwiKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBfdGVtcExhYmVsID0gJyBsYWJlbD1cIlVUTSBDYW1wYWlnblwiICc7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFhtbCA9ICc8VVRNQ2FtcGFpZ24nICsgX3RlbXBMYWJlbCArICc+JyArICgkKHRoaXMpLmF0dHIoJ2RhdGEtYWdvcmEtdHlwZScpICE9ICd4bWwnID8gJzwhW0NEQVRBWycgKyBfdGVtcFZhbHVlICsgJ11dPicgOiBfdGVtcFZhbHVlKSArICc8L1VUTUNhbXBhaWduPic7XHJcbiAgICAgICAgICAgICAgICBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldICs9IF90ZW1wWG1sO1xyXG4gICAgICAgICAgICB9IGlmIChwYXJhbXMuaGFzKFwidXRtX2NvbnRlbnRcIikpIHtcclxuICAgICAgICAgICAgICAgIF90ZW1wVmFsdWUgPSBwYXJhbXMuZ2V0KFwidXRtX2NvbnRlbnRcIikudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgX3RlbXBMYWJlbCA9ICcgbGFiZWw9XCJVVE0gQ29udGVudFwiICc7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFhtbCA9ICc8VVRNQ29udGVudCcgKyBfdGVtcExhYmVsICsgJz4nICsgKCQodGhpcykuYXR0cignZGF0YS1hZ29yYS10eXBlJykgIT0gJ3htbCcgPyAnPCFbQ0RBVEFbJyArIF90ZW1wVmFsdWUgKyAnXV0+JyA6IF90ZW1wVmFsdWUpICsgJzwvVVRNQ29udGVudD4nO1xyXG4gICAgICAgICAgICAgICAgX2VudGl0eVhtbFskKHRoaXMpLmF0dHIoJ0VudGl0eScpXSArPSBfdGVtcFhtbDtcclxuICAgICAgICAgICAgfSBpZiAocGFyYW1zLmhhcyhcInV0bV9tZWRpdW1cIikpIHtcclxuICAgICAgICAgICAgICAgIF90ZW1wVmFsdWUgPSBwYXJhbXMuZ2V0KFwidXRtX21lZGl1bVwiKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBfdGVtcExhYmVsID0gJyBsYWJlbD1cIlVUTSBNZWRpdW1cIiAnO1xyXG4gICAgICAgICAgICAgICAgX3RlbXBYbWwgPSAnPFVUTU1lZGl1bScgKyBfdGVtcExhYmVsICsgJz4nICsgKCQodGhpcykuYXR0cignZGF0YS1hZ29yYS10eXBlJykgIT0gJ3htbCcgPyAnPCFbQ0RBVEFbJyArIF90ZW1wVmFsdWUgKyAnXV0+JyA6IF90ZW1wVmFsdWUpICsgJzwvVVRNTWVkaXVtPic7XHJcbiAgICAgICAgICAgICAgICBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldICs9IF90ZW1wWG1sO1xyXG4gICAgICAgICAgICB9IGlmIChwYXJhbXMuaGFzKFwidXRtX3NvdXJjZVwiKSkge1xyXG4gICAgICAgICAgICAgICAgX3RlbXBWYWx1ZSA9IHBhcmFtcy5nZXQoXCJ1dG1fc291cmNlXCIpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIF90ZW1wTGFiZWwgPSAnIGxhYmVsPVwiVVRNIFNvdXJjZVwiICc7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFhtbCA9ICc8VVRNU291cmNlJyArIF90ZW1wTGFiZWwgKyAnPicgKyAoJCh0aGlzKS5hdHRyKCdkYXRhLWFnb3JhLXR5cGUnKSAhPSAneG1sJyA/ICc8IVtDREFUQVsnICsgX3RlbXBWYWx1ZSArICddXT4nIDogX3RlbXBWYWx1ZSkgKyAnPC9VVE1Tb3VyY2U+JztcclxuICAgICAgICAgICAgICAgIF9lbnRpdHlYbWxbJCh0aGlzKS5hdHRyKCdFbnRpdHknKV0gKz0gX3RlbXBYbWw7XHJcbiAgICAgICAgICAgIH0gaWYgKHBhcmFtcy5oYXMoXCJ1dG1fdGVybVwiKSkge1xyXG4gICAgICAgICAgICAgICAgX3RlbXBWYWx1ZSA9IHBhcmFtcy5nZXQoXCJ1dG1fdGVybVwiKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBfdGVtcExhYmVsID0gJyBsYWJlbD1cIlVUTSBUZXJtXCIgJztcclxuICAgICAgICAgICAgICAgIF90ZW1wWG1sID0gJzxVVE1UZXJtJyArIF90ZW1wTGFiZWwgKyAnPicgKyAoJCh0aGlzKS5hdHRyKCdkYXRhLWFnb3JhLXR5cGUnKSAhPSAneG1sJyA/ICc8IVtDREFUQVsnICsgX3RlbXBWYWx1ZSArICddXT4nIDogX3RlbXBWYWx1ZSkgKyAnPC9VVE1UZXJtPic7XHJcbiAgICAgICAgICAgICAgICBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldICs9IF90ZW1wWG1sO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFfaXNWYWxpZGF0ZWQpIHJldHVybiBudWxsO1xyXG5cclxuICAgIHZhciBfZm9ybVhtbCA9ICc8ZD4nO1xyXG4gICAgZm9yIChwID0gMDsgcCA8IE9iamVjdC5rZXlzKF9lbnRpdHlYbWwpLmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgX2Zvcm1YbWwgKz0gJzwnICsgT2JqZWN0LmtleXMoX2VudGl0eVhtbClbcF0gKyAnPicgKyBfZW50aXR5WG1sW09iamVjdC5rZXlzKF9lbnRpdHlYbWwpW3BdXSArICc8LycgKyBPYmplY3Qua2V5cyhfZW50aXR5WG1sKVtwXSArICc+JztcclxuICAgIH1cclxuICAgIF9mb3JtWG1sICs9ICc8L2Q+JztcclxuXHJcbiAgICByZXR1cm4gZXNjYXBlKF9mb3JtWG1sKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29tcG9zZVVybFF1ZXJ5KG9wdGlvbnMpIHtcclxuICAgIC8vY29uc29sZS5sb2coJ1N0YXJ0ZWQgLi4uJyk7XHJcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsKVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIHZhciB1cmxRdWVyeSA9ICcnO1xyXG4gICAgdmFyIF91cmxRdWVyeVRyYXZlcnNlID0gbmV3IE9iamVjdCgpO1xyXG5cclxuICAgIHZhciAkY29udHJvbHMgPSAkKG9wdGlvbnMuc2VsZWN0KS5hZGQoJChvcHRpb25zLnNlbGVjdCkuZmluZCgnW3VybGlkZW50aWZpZXJdJykpO1xyXG4gICAgaWYgKG9wdGlvbnMubm9uc2VsZWN0ICE9IHVuZGVmaW5lZCAmJiBvcHRpb25zLm5vbnNlbGVjdCAhPSBudWxsKVxyXG4gICAgICAgICRjb250cm9scyA9ICQoJGNvbnRyb2xzKS5ub3Qob3B0aW9ucy5ub25zZWxlY3QpO1xyXG5cclxuICAgIHZhciAkdHJhdmVyc2VkQ29udHJvbHMgPSAkKCk7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdDb250cm9scyBmZXRjaCBzdGFydGVkIC4uLicpO1xyXG4gICAgJCgkY29udHJvbHMpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfcXVlcnlEYXRhID0gX2dldFF1ZXJ5RGF0YUZvckZpZWxkKHRoaXMsICRjb250cm9scywgJHRyYXZlcnNlZENvbnRyb2xzKTtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdRRDonICsgSlNPTi5zdHJpbmdpZnkoX3F1ZXJ5RGF0YSkpO1xyXG4gICAgICAgIF9hZGRUb1F1ZXJ5T2JqZWN0KF9xdWVyeURhdGEsIF91cmxRdWVyeVRyYXZlcnNlKTtcclxuICAgIH0pO1xyXG4gICAgLy9jb25zb2xlLmxvZygnQ29udHJvbHMgZmV0Y2ggY29tcGxldGVkIC4uLicpO1xyXG4gICAgdXJsUXVlcnkgPSBfZ2V0VXJsUXVlcnlGcm9tUXVlcnlPYmplY3QoX3VybFF1ZXJ5VHJhdmVyc2UpO1xyXG5cclxuICAgIGlmIChvcHRpb25zLmFkZGl0aW9uYWwgIT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuYWRkaXRpb25hbCAhPSBudWxsKVxyXG4gICAgICAgIHJldHVybiBvcHRpb25zLmFkZGl0aW9uYWwodXJsUXVlcnkpO1xyXG5cclxuICAgIHJldHVybiB1cmxRdWVyeTtcclxuXHJcbiAgICBmdW5jdGlvbiBfYWRkVG9RdWVyeU9iamVjdChxdWVyeURhdGEsIHVybFF1ZXJ5VHJhdmVyc2UpIHtcclxuICAgICAgICBpZiAocXVlcnlEYXRhID09IG51bGwpIHJldHVybjtcclxuICAgICAgICBpZiAocXVlcnlEYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHF1ZXJ5RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgX2FkZFF1ZXJ5RGF0YVRvUXVlcnlPYmplY3QocXVlcnlEYXRhW2tleV0sIHVybFF1ZXJ5VHJhdmVyc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgX2FkZFF1ZXJ5RGF0YVRvUXVlcnlPYmplY3QocXVlcnlEYXRhLCB1cmxRdWVyeVRyYXZlcnNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gX2FkZFF1ZXJ5RGF0YVRvUXVlcnlPYmplY3QocXVlcnlEYXRhLCB1cmxRdWVyeVRyYXZlcnNlKSB7XHJcbiAgICAgICAgaWYgKHF1ZXJ5RGF0YSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHVybFF1ZXJ5VHJhdmVyc2VbcXVlcnlEYXRhLlVybElkZW50aWZpZXJdID09IG51bGwpIHtcclxuICAgICAgICAgICAgdXJsUXVlcnlUcmF2ZXJzZVtxdWVyeURhdGEuVXJsSWRlbnRpZmllcl0gPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdXJsUXVlcnlUcmF2ZXJzZVtxdWVyeURhdGEuVXJsSWRlbnRpZmllcl0ucHVzaChxdWVyeURhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIF9nZXRVcmxRdWVyeUZyb21RdWVyeU9iamVjdCh1cmxRdWVyeVRyYXZlcnNlKSB7XHJcbiAgICAgICAgdmFyIF91cmxxdWVyeSA9ICcnO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB1cmxRdWVyeVRyYXZlcnNlKSB7XHJcbiAgICAgICAgICAgIHZhciBfaXNWYWx1ZU9ubHkgPSAoa2V5LnRvTG93ZXJDYXNlKCkgPT0gJ3skdmFsdWV9Jyk7XHJcbiAgICAgICAgICAgIHZhciBfdmFsdWVTZXBlcmF0b3IgPSBfaXNWYWx1ZU9ubHkgPyAnLycgOiAnOyc7XHJcbiAgICAgICAgICAgIHZhciBfdmFsdWVTdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgdmFyIE1pbk1heE9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN1YktleSBpbiB1cmxRdWVyeVRyYXZlcnNlW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAnbWluJyB8fCB1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAnbWF4Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChNaW5NYXhPYmplY3QgPT0gbnVsbCkgTWluTWF4T2JqZWN0ID0geyBNaW46IDAsIE1heDogMCB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAnbWluJykgTWluTWF4T2JqZWN0Lk1pbiA9IHVybFF1ZXJ5VHJhdmVyc2Vba2V5XVtzdWJLZXldLlZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAnbWF4JykgTWluTWF4T2JqZWN0Lk1heCA9IHVybFF1ZXJ5VHJhdmVyc2Vba2V5XVtzdWJLZXldLlZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAndGhlcycpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdmFsdWVTdHJpbmcgPSB1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5WYWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1teMC05QS16XFxcXC5dL2csICc7Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8ucmVwbGFjZSgvOysvZywgJzsnKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfdmFsdWVTdHJpbmcgKz0gdXJsUXVlcnlUcmF2ZXJzZVtrZXldW3N1YktleV0uVmFsdWUudG9TdHJpbmcoKSArICh1cmxRdWVyeVRyYXZlcnNlW2tleV0ubGVuZ3RoID4gMSAmJiB1cmxRdWVyeVRyYXZlcnNlW2tleV0ubGVuZ3RoIC0gMSA+IHN1YktleSA/IF92YWx1ZVNlcGVyYXRvciA6ICcnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoTWluTWF4T2JqZWN0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfaXNWYWx1ZU9ubHkpXHJcbiAgICAgICAgICAgICAgICAgICAgX3VybHF1ZXJ5ID0gJy8nICsgTWluTWF4T2JqZWN0Lk1pbiArIChNaW5NYXhPYmplY3QuTWF4ICE9IDAgPyAoJy0nICsgTWluTWF4T2JqZWN0Lk1heCkgOiAnJykgKyBfdXJscXVlcnk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgX3VybHF1ZXJ5ICs9ICcvJyArIGtleSArICctJyArIE1pbk1heE9iamVjdC5NaW4gKyAoTWluTWF4T2JqZWN0Lk1heCAhPSAwID8gKCctJyArIE1pbk1heE9iamVjdC5NYXgpIDogJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9pc1ZhbHVlT25seSlcclxuICAgICAgICAgICAgICAgICAgICBfdXJscXVlcnkgPSAnLycgKyBfdmFsdWVTdHJpbmcgKyBfdXJscXVlcnk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgX3VybHF1ZXJ5ICs9ICcvJyArIGtleSArICctJyArIF92YWx1ZVN0cmluZztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF91cmxxdWVyeTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfZ2V0UXVlcnlEYXRhRm9yT25lU2VhcmNoKHNlbmRlciwgY29udHJvbHMsIHRyYXZlcnNlZENvbnRyb2xzKSB7XHJcblxyXG4gICAgICAgIHZhciBfcXVlcnlEYXRhRm9yT25lU2VhcmNoID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgJChzZW5kZXIpLnBhcmVudCgpLmZpbmQoJ1tvbmVzZWFyY2hpZGVudGlmaWVyXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgX3F1ZXJ5RGF0YSA9IF9nZXRRdWVyeURhdGFWYWx1ZUZvckZpZWxkKHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAoX3F1ZXJ5RGF0YSAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgX3F1ZXJ5RGF0YUZvck9uZVNlYXJjaC5wdXNoKF9xdWVyeURhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChfcXVlcnlEYXRhRm9yT25lU2VhcmNoLmxlbmd0aCA9PSAwIHx8IF9jaGVja09uZVNlYXJjaElzTXVsdGlTZWxlY3Qoc2VuZGVyKSlcclxuICAgICAgICAgICAgaWYgKF9pc05vdE51bGxPckVtcHR5KHNlbmRlcikpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfb25lU2VhcmNoVGV4dFNlYXJjaCA9IF9nZXRRdWVyeURhdGFWYWx1ZUZvckZpZWxkKHNlbmRlcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX29uZVNlYXJjaFRleHRTZWFyY2g7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3F1ZXJ5RGF0YUZvck9uZVNlYXJjaDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfY2hlY2tPbmVTZWFyY2hJc011bHRpU2VsZWN0KHNlbmRlcikge1xyXG4gICAgICAgIHJldHVybiBzZW5kZXIgIT0gbnVsbCAmJiAkKHNlbmRlcikuYXR0cignbXVsdGlzZWxlY3Rib3hpZCcpICE9IHVuZGVmaW5lZCAmJiAkKHNlbmRlcikuYXR0cignbXVsdGlzZWxlY3Rib3hpZCcpICE9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gX2dldFF1ZXJ5RGF0YUZvckZpZWxkKHNlbmRlciwgY29udHJvbHMsIHRyYXZlcnNlZENvbnRyb2xzKSB7XHJcbiAgICAgICAgaWYgKCQoc2VuZGVyKS5hdHRyKFwib25lc2VhcmNobmFtZVwiKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfZ2V0UXVlcnlEYXRhRm9yT25lU2VhcmNoKHNlbmRlciwgY29udHJvbHMsIHRyYXZlcnNlZENvbnRyb2xzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCQodHJhdmVyc2VkQ29udHJvbHMpLmZpbmQoc2VuZGVyKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgdHJhdmVyc2VkQ29udHJvbHMgPSB0cmF2ZXJzZWRDb250cm9scy5hZGQoc2VuZGVyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0UXVlcnlEYXRhVmFsdWVGb3JGaWVsZChzZW5kZXIpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IGNvbnNvbGUubG9nKCdFcnJvciBGb3IgRmllbGQnKTsgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfZ2V0UXVlcnlEYXRhVmFsdWVGb3JGaWVsZChzZW5kZXIpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoIV9pc05vdE51bGxPckVtcHR5KHNlbmRlcikpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBGb3IgRmllbGQgVmFsdWUgQ2hlY2s6JyArICQoc2VuZGVyKS5hdHRyKFwidHlwZVwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IFVybElkZW50aWZpZXI6ICgkKHNlbmRlcikuYXR0cigndXJsaWRlbnRpZmllcicpICE9IG51bGwgPyAkKHNlbmRlcikuYXR0cigndXJsaWRlbnRpZmllcicpIDogJChzZW5kZXIpLmF0dHIoJ29uZXNlYXJjaGlkZW50aWZpZXInKSksIFZhbHVlOiBfZ2V0VmFsdWUoc2VuZGVyKSwgT3BlcmF0aW9uOiAoJChzZW5kZXIpLmF0dHIoJ29wZXJhdGlvbicpICE9IG51bGwgPyAkKHNlbmRlcikuYXR0cignb3BlcmF0aW9uJykgOiAnJykgfTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBGb3IgRmllbGQgVmFsdWU6JyArICQoc2VuZGVyKS5wcm9wKFwidGFnTmFtZVwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIF9nZXRWYWx1ZShzZW5kZXIpIHtcclxuICAgICAgICB2YXIgX3ZhbHVlID0gJChzZW5kZXIpLnZhbCgpO1xyXG4gICAgICAgIHZhciBfaXNPbmVTZWFyY2ggPSB0eXBlb2YgKCQoc2VuZGVyKS5hdHRyKCdvbmVzZWFyY2hpZGVudGlmaWVyJykpICE9ICd1bmRlZmluZWQnO1xyXG4gICAgICAgIGlmICh0eXBlb2YgKF92YWx1ZSkgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdmFyIF92YWx1ZXMgPSAnJztcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIF92YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF92YWx1ZVtrZXldICE9ICcnKVxyXG4gICAgICAgICAgICAgICAgICAgIF92YWx1ZXMgKz0gKF92YWx1ZXMgPT0gJycgPyAnJyA6ICc7JykgKyBfdmFsdWVba2V5XS5yZXBsYWNlKC9cXC0vZywgJ18nKS5yZXBsYWNlKC9cXC8vZywgJyEnKS5yZXBsYWNlKC9cXCwvZywgJ0AnKS5yZXBsYWNlKC9cXCYvLCAnJCcpLnJlcGxhY2UoL1xcIy9nLCAnJTIzJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF92YWx1ZXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCQoc2VuZGVyKS5hdHRyKCd1cmxpZGVudGlmaWVyJykgIT0gbnVsbCAmJiAkKHNlbmRlcikuYXR0cihcInVybGlkZW50aWZpZXJcIikgPT0gJ3ByaWNlJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF92YWx1ZS5yZXBsYWNlKC9cXCwvZywgJycpLnJlcGxhY2UoL1xcLS9nLCAnXycpLnJlcGxhY2UoL1xcLy9nLCAnIScpLnJlcGxhY2UoL1xcJi8sICckJykucmVwbGFjZSgvXFxAL2csICcnKS5yZXBsYWNlKC9cXCMvZywgJyUyMycpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9pc09uZVNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdmFsdWUucmVwbGFjZSgvXFwsL2csICdAJykucmVwbGFjZSgvXFwtL2csICdfJykucmVwbGFjZSgvXFwvL2csICchJykucmVwbGFjZSgvXFwmLywgJyQnKS5yZXBsYWNlKC9cXCMvZywgJyUyMycpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZhbHVlLnJlcGxhY2UoL1xcLS9nLCAnXycpLnJlcGxhY2UoL1xcLy9nLCAnIScpLnJlcGxhY2UoL1xcJi8sICckJykucmVwbGFjZSgvXFwjL2csICclMjMnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfcmVwbGFjZVdoaXRlU3BhY2UodmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXFxzL2csICctJyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIF9pc05vdE51bGxPckVtcHR5KHNlbmRlcikge1xyXG4gICAgICAgIGlmICgkKHNlbmRlcikuYXR0cigndHlwZScpICE9IG51bGwgJiYgKCQoc2VuZGVyKS5hdHRyKCd0eXBlJykgPT0gJ3JhZGlvJyB8fCAkKHNlbmRlcikuYXR0cigndHlwZScpID09ICdjaGVja2JveCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZW5kZXIgIT0gbnVsbCAmJiBzZW5kZXIgIT0gdW5kZWZpbmVkICYmICQoc2VuZGVyKS52YWwoKS50cmltKCkgIT0gJycgJiYgJChzZW5kZXIpWzBdLmNoZWNrZWQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZW5kZXIgIT0gbnVsbCAmJiBzZW5kZXIgIT0gdW5kZWZpbmVkICYmICQoc2VuZGVyKS5pcygnc2VsZWN0JykpIHtcclxuICAgICAgICAgICAgdmFyIF92YWx1ZSA9ICQoc2VuZGVyKS52YWwoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiAoX3ZhbHVlKSA9PSAnb2JqZWN0JyA/IF92YWx1ZSAhPSBudWxsICYmIF92YWx1ZSAhPSAnJyA6IF92YWx1ZS50cmltKCkgIT0gJyc7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBzZW5kZXIgIT0gbnVsbCAmJiBzZW5kZXIgIT0gdW5kZWZpbmVkICYmICQoc2VuZGVyKS52YWwoKS50cmltKCkgIT0gJyc7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVmFsaWRFbWFpbCh2YWx1ZSkge1xyXG4gICAgdmFyIGVtYWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4dEVtYWlsJyk7XHJcbiAgICB2YXIgZmlsdGVyID0gL14oW2EtekEtWjAtOV9cXC5cXC1cXCtdKStcXEAoKFthLXpBLVowLTlcXC1dKStcXC4pKyhbYS16QS1aMC05XXsyLDR9KSskLztcclxuXHJcbiAgICBpZiAoIWZpbHRlci50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc051bGxPckVtcHR5KHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gJycpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKHR5cGVvZiAodmFsdWUpID09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSA9PSAnJykgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTm90TnVsbE9yWmVybyhWYWx1ZSkge1xyXG4gICAgcmV0dXJuIFZhbHVlICE9IG51bGwgJiYgVmFsdWUgIT0gdW5kZWZpbmVkICYmIFZhbHVlLmxlbmd0aCA+IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTnVsbE9yRW1wdHlDb250cm9sKGN0cmwpIHtcclxuICAgIGlmIChjdHJsID09IG51bGwgfHwgY3RybCA9PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICgkKGN0cmwpLnZhbCgpID09IG51bGwgfHwgJChjdHJsKS52YWwoKSA9PSB1bmRlZmluZWQgfHwgJChjdHJsKS52YWwoKSA9PSAnJykgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wZW5JV0JQb3B1cCh1cmwsIHF1ZXJ5U3RyaW5nLCB3aXRoaW4pIHtcclxuICAgIGlmICghaXNOdWxsT3JFbXB0eShxdWVyeVN0cmluZykpIHVybCArPSAnPycgKyBxdWVyeVN0cmluZztcclxuICAgICQoJyNQRVJGT1JNX0lXQl9BQ1RJT05fVFJJR0dFUicpLmF0dHIoJ2hyZWYnLCB1cmwpO1xyXG4gICAgJCgnI1BFUkZPUk1fSVdCX0FDVElPTl9UUklHR0VSJykudHJpZ2dlcignY2xpY2snKTtcclxuXHJcbiAgICBpZiAoaXNOdWxsT3JFbXB0eSh3aXRoaW4pKSB3aXRoaW4gPSAxMDAwO1xyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJCgnI1BFUkZPUk1fSVdCX0FDVElPTl9UUklHR0VSJykudHJpZ2dlcignY2xpY2snKTtcclxuICAgIH0sIHdpdGhpbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENsb3NlSVdCUG9wdXAoKSB7XHJcbiAgICAkKCcjTU9EQUxfQUNDRVNTJykuZm91bmRhdGlvbigncmV2ZWFsJywgJ2Nsb3NlJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wZW5Qb3B1cCh3aXRoaW4pIHtcclxuICAgIGlmIChpc051bGxPckVtcHR5KHdpdGhpbikpIHdpdGhpbiA9IDEwMDA7XHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKCcjUEVSRk9STV9BQ1RJT05fVFJJR0dFUicpLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbiAgICB9LCB3aXRoaW4pO1xyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gQ2xvc2VQb3B1cCgpIHtcclxuICAgICQoJyNNT0RBTF9BQ0NFU1MnKS5mb3VuZGF0aW9uKCdyZXZlYWwnLCAnY2xvc2UnKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0Rm9ybWF0dGVkUHJpY2UocHJpY2UpIHtcclxuICAgIHZhciBsYWJlbCA9IFwiXCI7XHJcbiAgICBpZiAocHJpY2UudG9TdHJpbmcoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKHByaWNlLnRvU3RyaW5nKCkubGVuZ3RoIDw9IDYgJiYgcHJpY2UudG9TdHJpbmcoKS5sZW5ndGggPiAzKSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gcHJpY2UudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgcHJpY2UudG9TdHJpbmcoKS5sZW5ndGggLSAzKSArIFwiS1wiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJpY2UudG9TdHJpbmcoKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gcHJpY2UudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgcHJpY2UudG9TdHJpbmcoKS5sZW5ndGggLSA2KSArIFwiLlwiICsgcHJpY2UudG9TdHJpbmcoKS5zdWJzdHJpbmcocHJpY2UudG9TdHJpbmcoKS5sZW5ndGggLSA2LCBwcmljZS50b1N0cmluZygpLmxlbmd0aCAtIDUpICsgXCJNXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGFiZWwgPSBwcmljZS50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGFiZWwgPSBcIk4vQVwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwiJFwiICsgbGFiZWw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTXVsdGlMaW5ndWFsKCkge1xyXG4gICAgaWYgKCQoXCIjTVVMVElMSU5HVUFMXCIpICE9IG51bGwgJiYgJChcIiNNVUxUSUxJTkdVQUxcIikgIT0gdW5kZWZpbmVkICYmICFpc051bGxPckVtcHR5KCQoXCIjTVVMVElMSU5HVUFMXCIpLnZhbCgpKSAmJiAkKFwiI01VTFRJTElOR1VBTFwiKS52YWwoKSA9PSBcIjFcIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldExvY2FsZSgpIHtcclxuICAgIGlmIChpc011bHRpTGluZ3VhbCgpKSByZXR1cm4gJCgnI0xPQ0FMRScpLnZhbCgpOyBlbHNlIHJldHVybiBcIlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBJbml0RGF0YVNvdXJjZVJlbGF0aW9uKHNjdHJsLCBwY3RybCwgYWZ0ZXJMb2FkKSB7XHJcbiAgICB2YXIgX3NvdXJjZSA9ICQoJyMnICsgc2N0cmwpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGN0cmwuc3BsaXQoJywnKS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBfcGFyZW50ID0gJCgnIycgKyBwY3RybC5zcGxpdCgnLCcpW2ldKTtcclxuXHJcbiAgICAgICAgJChfcGFyZW50KS5jaGFuZ2UoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgX3Bvc3REYXRhID0gJyc7XHJcbiAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnU291cmNlPScgKyAkKF9zb3VyY2UpLmF0dHIoJ1NvdXJjZScpO1xyXG4gICAgICAgICAgICBfcG9zdERhdGEgKz0gJyZBdXRvU29ydD0nICsgJChfc291cmNlKS5hdHRyKCdBdXRvU29ydCcpO1xyXG4gICAgICAgICAgICBfcG9zdERhdGEgKz0gJyZEZWZhdWx0SXRlbT0nICsgJChfc291cmNlKS5hdHRyKCdEZWZhdWx0SXRlbScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCQoX3NvdXJjZSkuYXR0cignU291cmNlJykgPT0gXCJYbWxcIikge1xyXG4gICAgICAgICAgICAgICAgX3Bvc3REYXRhICs9ICcmWG1sRmlsZUNvZGU9JyArICQoX3NvdXJjZSkuYXR0cignWG1sRmlsZUNvZGUnKTtcclxuICAgICAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnJlhtbERhdGFMaXN0S2V5PScgKyAkKF9zb3VyY2UpLmF0dHIoJ1htbERhdGFMaXN0S2V5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoJChfc291cmNlKS5hdHRyKCdTb3VyY2UnKSA9PSBcIkRhdGFiYXNlXCIpIHtcclxuICAgICAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnJkRhdGFPYmplY3ROYW1lPScgKyAkKF9zb3VyY2UpLmF0dHIoJ0RhdGFPYmplY3ROYW1lJyk7XHJcbiAgICAgICAgICAgICAgICBfcG9zdERhdGEgKz0gJyZVcmxJZGVudGlmaWVyPScgKyAkKF9zb3VyY2UpLmF0dHIoJ1VybElkZW50aWZpZXInKTtcclxuICAgICAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnJkFkZGl0aW9uYWxXaGVyZT0nICsgJChfc291cmNlKS5hdHRyKCdBZGRpdGlvbmFsV2hlcmUnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIF9wYXJlbnRWYWx1ZSA9ICcnO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwY3RybC5zcGxpdCgnLCcpLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3BhcmVudElubmVyID0gJyMnICsgcGN0cmwuc3BsaXQoJywnKVtqXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaiA+IDApIF9wYXJlbnRWYWx1ZSArPSAnLCc7XHJcbiAgICAgICAgICAgICAgICBpZiAoJChfcGFyZW50SW5uZXIpLnZhbCgpID09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudFZhbHVlICs9ICQoX3BhcmVudElubmVyICsgJyBpbnB1dDpjaGVja2VkJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfcGFyZW50VmFsdWUgKz0gJChfcGFyZW50SW5uZXIpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF9wYXJlbnRWYWx1ZSA9IF9wYXJlbnRWYWx1ZS5yZXBsYWNlKCd1bmRlZmluZWQnLCAnJyk7XHJcbiAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnJlBhcmVudFZhbHVlPScgKyBfcGFyZW50VmFsdWU7XHJcblxyXG4gICAgICAgICAgICAkKF9zb3VyY2UpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvc2VydmljZXMvYWdvcmFSZWxhdGlvbmFsRGF0YVNvdXJjZS5hc2h4JyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IF9wb3N0RGF0YSxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0TGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoX3NvdXJjZSkuZ2V0KDApLm9wdGlvbnMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJC5lYWNoKHJlc3VsdExpc3QsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9zb3VyY2UpLmdldCgwKS5vcHRpb25zWyQoX3NvdXJjZSkuZ2V0KDApLm9wdGlvbnMubGVuZ3RoXSA9IG5ldyBPcHRpb24oaXRlbS5WYWx1ZSwgaXRlbS5LZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkKF9zb3VyY2UpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhZnRlckxvYWQgIT0gbnVsbCkgYWZ0ZXJMb2FkKCQoX3NvdXJjZSkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhUGFyZW50RGF0YVNvdXJjZSkgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBlbnRlckZ1bGxTY3JlZW4oKSB7XHJcbiAgICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xyXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xyXG4gICAgfSBlbHNlIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oRWxlbWVudC5BTExPV19LRVlCT0FSRF9JTlBVVCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4aXRGdWxsU2NyZWVuKCkge1xyXG4gICAgaWYgKGRvY3VtZW50LmNhbmNlbEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICBkb2N1bWVudC5jYW5jZWxGdWxsU2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICBkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICBkb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNob3dMb2FkaW5nKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBpZiAoJChcImJvZHlcIikuaGFzQ2xhc3MoJ2lzLWJ1c3knKSlcclxuICAgICAgICAgICAgJChcImJvZHlcIikucmVtb3ZlQ2xhc3MoJ2lzLWJ1c3knKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICQoXCJib2R5XCIpLmFkZENsYXNzKCdpcy1idXN5Jyk7XHJcbiAgICB9IGNhdGNoIChlKSB7IH1cclxufVxyXG5cclxudmFyIF9hZ29yYU1zZ0RlbGF5ID0gbnVsbDtcclxuZnVuY3Rpb24gU2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSkge1xyXG4gICAgX3Nob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIHRydWUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBTaG93QWxlcnQobWVzc2FnZSwgZGVsYXksIGNzc0NsYXNzLCB0eXBlLCBlbmFibGVBdXRvQ2xvc2UpIHtcclxuICAgIF9zaG93QWxlcnQobWVzc2FnZSwgZGVsYXksIGNzc0NsYXNzLCB0eXBlLCBlbmFibGVBdXRvQ2xvc2UpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBTaG93QWxlcnQobWVzc2FnZSwgZGVsYXksIGNzc0NsYXNzLCB0eXBlLCBlbmFibGVBdXRvQ2xvc2UsIGVuYWJsZU9LQnV0dG9uKSB7XHJcbiAgICBfc2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSwgZW5hYmxlQXV0b0Nsb3NlLCBlbmFibGVPS0J1dHRvbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIGVuYWJsZUF1dG9DbG9zZSwgZW5hYmxlT0tCdXR0b24sIEFjdGlvblVybCkge1xyXG4gICAgX3Nob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIGVuYWJsZUF1dG9DbG9zZSwgZW5hYmxlT0tCdXR0b24sIEFjdGlvblVybCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIGVuYWJsZUF1dG9DbG9zZSwgZW5hYmxlT0tCdXR0b24sIEFjdGlvblVybCwgRGlzYWJsZUNsb3NlQnV0dG9uKSB7XHJcbiAgICBfc2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSwgZW5hYmxlQXV0b0Nsb3NlLCBlbmFibGVPS0J1dHRvbiwgQWN0aW9uVXJsLCBEaXNhYmxlQ2xvc2VCdXR0b24pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfc2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSwgZW5hYmxlQXV0b0Nsb3NlLCBlbmFibGVPS0J1dHRvbiwgQWN0aW9uVXJsLCBEaXNhYmxlQ2xvc2VCdXR0b24pIHtcclxuICAgICQoJ2JvZHknKS5hZGRDbGFzcygnYWxlcnRfYm94X2xvYWRlZCcpO1xyXG4gICAgdmFyIF9tc2dCb3ggPSAkKCdkaXYjYWdvcmFBbGVydE1lc3NhZ2VCb3gnKTtcclxuICAgIGlmIChfbXNnQm94ID09IG51bGwgfHwgX21zZ0JveC5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgX21zZ0JveCA9ICQoJzxkaXY+JylcclxuICAgICAgICAgICAgICAgICAgICAuYXR0cignaWQnLCAnYWdvcmFBbGVydE1lc3NhZ2VCb3gnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhjc3NDbGFzcylcclxuICAgICAgICAgICAgICAgICAgICAuaHRtbCgnPGRpdiBjbGFzcz1cIm1lc3NhZ2UtYm9keVwiPjxzcGFuIGlkPVwibXNnXCIgY2xhc3M9XCJtc2dcIj48L3NwYW4+PGRpdiBpZD1cImJ0bl9va1wiPjwvZGl2PjxkaXYgaWQ9XCJidG5fY2xvc2VcIj48L2Rpdj48L2Rpdj4nKTtcclxuICAgICAgICAkKF9tc2dCb3gpLnByZXBlbmRUbygnYm9keScpO1xyXG4gICAgfVxyXG4gICAgJChfbXNnQm94KS5hdHRyKCdjbGFzcycsICcnKTtcclxuICAgICQoX21zZ0JveCkuYWRkQ2xhc3MoY3NzQ2xhc3MpO1xyXG4gICAgJChfbXNnQm94KS5zaG93KCk7XHJcbiAgICAkKF9tc2dCb3gpLmZpbmQoJ3NwYW4jbXNnJykuaHRtbChtZXNzYWdlKTtcclxuICAgIGlmICghRGlzYWJsZUNsb3NlQnV0dG9uKSB7ICQoX21zZ0JveCkuZmluZCgnZGl2I2J0bl9jbG9zZScpLmh0bWwoJzxhIGNsYXNzPVwiY2xvc2VCdG4gcmlnaHRcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIG9uY2xpY2s9XCJqYXZhc2NyaXB0OkNsb3NlQWxlcnQoKTtcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjwvaT48L2E+Jyk7IH1cclxuICAgIGlmIChlbmFibGVPS0J1dHRvbikge1xyXG4gICAgICAgICQoX21zZ0JveCkuZmluZCgnZGl2I2J0bl9vaycpLmh0bWwoJzxhICcgKyAoaXNOb3ROdWxsT3JaZXJvKEFjdGlvblVybCkgPyAnaHJlZj1cIicgKyBBY3Rpb25VcmwgKyAnXCInIDogJ2hyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgb25jbGljaz1cImphdmFzY3JpcHQ6Q2xvc2VBbGVydCgpO1wiJykgKyAnICB0aXRsZT1cIkNsb3NlXCIgY2xhc3M9XCJtZGwtYnV0dG9uIG1kbC1idXR0b24tLXByaW1hcnkgbWRsLWJ1dHRvbi0tcmFpc2VkIG1kbC1qcy1idXR0b24gbWRsLWpzLXJpcHBsZS1lZmZlY3RcIiBzdHlsZT1cImFsaWduLWNvbnRlbnQ6IHJpZ2h0O1wiPk9rPC9hPicpO1xyXG4gICAgfVxyXG4gICAgY2xlYXJUaW1lb3V0KF9hZ29yYU1zZ0RlbGF5KTtcclxuICAgIGlmIChlbmFibGVBdXRvQ2xvc2UpIHtcclxuICAgICAgICBpZiAoZGVsYXkgPT0gbnVsbCkgZGVsYXkgPSA0MDAwO1xyXG4gICAgICAgIF9hZ29yYU1zZ0RlbGF5ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIENsb3NlQWxlcnQoKTtcclxuICAgICAgICB9LCBkZWxheSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENsb3NlQWxlcnQoKSB7XHJcbiAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ2FsZXJ0X2JveF9sb2FkZWQnKTtcclxuICAgICQoJ2RpdiNhZ29yYUFsZXJ0TWVzc2FnZUJveCcpLmhpZGUoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gUmVjYWxsQ2tlSUZyYW1lKCkge1xyXG4gICAgJCgnaW1nLmNrZV9pZnJhbWUnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKHRoaXMpLnJlcGxhY2VXaXRoKHVuZXNjYXBlKCQodGhpcykuYXR0cignZGF0YS1ja2UtcmVhbGVsZW1lbnQnKSkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEVuYWJsZU5lYXJCeVNlYXJjaChjdHJsLCB1cmxQcmVmaXgsIHVybFN1Zml4LCByYWRpdXMsIGVycmxhbmRpbmdVcmwpIHtcclxuICAgICQoY3RybCkuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJCh0aGlzKS5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGJyb3dzZXIgaGF2ZSBnZW9sb2NhdGlvbiBzdXBwb3J0XHJcbiAgICAgICAgICAgIGlmIChuYXZpZ2F0b3IuZ2VvbG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oc3VjY2Vzc0hhbmRsZXIsIGVycm9ySGFuZGxlciwgeyB0aW1lb3V0OiAyMDAwMCB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KFwiR2VvbG9jYXRpb24gZnVuY3Rpb25hbGl0eSBub3QgYXZhaWxhYmxlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHN1Y2Nlc3NIYW5kbGVyKHBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2xhdGl0dWRlID0gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlLnRvU3RyaW5nKCkucmVwbGFjZSgnLScsICdfJyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2xvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUudG9TdHJpbmcoKS5yZXBsYWNlKCctJywgJ18nKTtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB1cmxQcmVmaXggKyBcIi9ybGF0LVwiICsgX2xhdGl0dWRlICsgXCIvcmxvbi1cIiArIF9sb25naXR1ZGUgKyBcIi9yYWQtXCIgKyByYWRpdXMgKyB1cmxTdWZpeDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiBlcnJvckhhbmRsZXIoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5kZXhPZihcIk9ubHkgc2VjdXJlIG9yaWdpbnMgYXJlIGFsbG93ZWRcIikgPT0gMCkgeyBhbGVydChcIllvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZVwiKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyLmNvZGUgPT0gMSAvKiBQRVJNSVNTSU9OX0RFTklFRCAqLykgeyBhbGVydChcIlBlcm1pc3Npb24gZGVuaWVkIHRvIGFjY2VzcyBnZW9sb2NhdGlvblwiKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyLmNvZGUgPT0gMiAvKiBQT1NJVElPTl9VTkFWQUlMQUJMRSAqLykgeyBhbGVydChcIllvdXIgZ2VvbG9jYXRpb24gaXMgbm90IGF2YWlsYWJsZVwiKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyLmNvZGUgPT0gMyAvKiBUSU1FT1VUICovKSB7IGFsZXJ0KFwiWW91ciBnZW9sb2NhdGlvbiBpcyBub3QgYXZhaWxhYmxlXCIpOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgYWxlcnQoXCJZb3VyIGdlb2xvY2F0aW9uIGlzIG5vdCBhdmFpbGFibGVcIik7IH1cclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBlcnJsYW5kaW5nVXJsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gQmFja1RvVG9wKHNlbmRlcikge1xyXG4gICAgdmFyIF9uYXZpZ2F0b3JQb3NpdGlvbiA9ICQoc2VuZGVyKS5jbG9zZXN0KCdbZGF0YS1iYWNrLXRvLXRvcC1jb250YWluZXJdJykub2Zmc2V0KCk7XHJcbiAgICBpZiAoX25hdmlnYXRvclBvc2l0aW9uICE9IG51bGwpIHtcclxuICAgICAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiBfbmF2aWdhdG9yUG9zaXRpb24udG9wIH0sIDcwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgICQoJ2h0bWwsYm9keScpLmFuaW1hdGUoeyBzY3JvbGxUb3A6IDAgfSwgNzAwKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gVG9wVG9Cb3R0b20oc2VuZGVyKSB7XHJcbiAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiAkKHdpbmRvdykuaGVpZ2h0KCkgLSAkKCcjYWdvcmEtbGF5b3V0LWhlYWRlcicpLmhlaWdodCgpIH0sIDcwMCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEVuYWJsZUdvb2dsZUV2ZW50VHJhY2tpbmcoKSB7XHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtZ2EtdHJhY2tdJywgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBfdHJhY2sgPSAkKHRoaXMpLmRhdGEoJ2dhLXRyYWNrJyk7XHJcbiAgICAgICAgICAgIEdvb2dsZUFuYWx5dGljTG9nRXZlbnQoX3RyYWNrKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBHb29nbGVBbmFseXRpY0xvZ0V2ZW50KHRyYWNrKSB7XHJcbiAgICBpZiAoZ2EgPT0gbnVsbCB8fCB0eXBlb2YgKGdhKSA9PSAndW5kZWZpbmVkJykgcmV0dXJuO1xyXG4gICAgdmFyIF9wYXJhbSA9IHRyYWNrLnNwbGl0KCcsJyk7XHJcbiAgICBzd2l0Y2ggKF9wYXJhbS5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgX3BhcmFtWzBdLCBfcGFyYW1bMV0sIF9wYXJhbVsyXSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCBfcGFyYW1bMF0sIF9wYXJhbVsxXSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBFbmFibGVTdGlja3lIZWFkZXIoc3RhcnRQb2ludCkge1xyXG4gICAgaWYgKHN0YXJ0UG9pbnQgPT0gbnVsbCkgc3RhcnRQb2ludCA9IDA7XHJcblxyXG4gICAgKGZ1bmN0aW9uIChzZW5kZXIpIHtcclxuICAgICAgICB2YXIgX29sZFZhbHVlID0gMDtcclxuICAgICAgICB2YXIgJGNvbnRleHQgPSAkKHNlbmRlcik7XHJcbiAgICAgICAgJCh3aW5kb3cpLm9uKCdzY3JvbGwnLCBfY2hlY2tTdGF0ZSk7XHJcbiAgICAgICAgZnVuY3Rpb24gX2NoZWNrU3RhdGUoKSB7XHJcbiAgICAgICAgICAgIHZhciBfbmV3VmFsdWUgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCk7XHJcbiAgICAgICAgICAgIGlmIChfbmV3VmFsdWUgPiBzdGFydFBvaW50KSAkY29udGV4dC5hZGRDbGFzcygnc2Nyb2xsJyk7IGVsc2UgJGNvbnRleHQucmVtb3ZlQ2xhc3MoJ3Njcm9sbCcpLnJlbW92ZUNsYXNzKCdzY3JvbGwtZG93bicpLnJlbW92ZUNsYXNzKCdzY3JvbGwtdXAnKTtcclxuICAgICAgICAgICAgaWYgKF9vbGRWYWx1ZSA+IF9uZXdWYWx1ZSkgJGNvbnRleHQuYWRkQ2xhc3MoJ3Njcm9sbC11cCcpLnJlbW92ZUNsYXNzKCdzY3JvbGwtZG93bicpO1xyXG4gICAgICAgICAgICBpZiAoX29sZFZhbHVlIDwgX25ld1ZhbHVlKSAkY29udGV4dC5hZGRDbGFzcygnc2Nyb2xsLWRvd24nKS5yZW1vdmVDbGFzcygnc2Nyb2xsLXVwJyk7XHJcbiAgICAgICAgICAgIF9vbGRWYWx1ZSA9IF9uZXdWYWx1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIF9jaGVja1N0YXRlKCk7XHJcbiAgICB9KSgkKCdib2R5JykpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBDbG9zZUFnb3JhRHJvcERvd25PbkJvZHlDbGljaygpIHtcclxuICAgICQoZG9jdW1lbnQpLm9uKCdyZXNldCcsICcuYWdvcmEtZHJvcGRvd24nLCBudWxsLCBmdW5jdGlvbiAoKSB7IHRyeSB7IHZhciBzdGF0ZSA9ICQodGhpcykuY2hpbGRyZW4oJ2lucHV0JykuZ2V0KDApOyBpZiAoc3RhdGUuY2hlY2tlZCkgc3RhdGUuY2hlY2tlZCA9IGZhbHNlOyB9IGNhdGNoIChlKSB7IH0gfSk7XHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgJHRhcmdldCA9ICQoZS50YXJnZXQpO1xyXG4gICAgICAgICAgICBpZiAoJHRhcmdldC5pcygnaW5wdXQnKSB8fCAkKGRvY3VtZW50KS5maW5kKCR0YXJnZXQpLmxlbmd0aD09MCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB2YXIgJGRyb3BEb3duY29udGFpbmVyID0gJHRhcmdldC5jbG9zZXN0KCcuYWdvcmEtZHJvcGRvd24nKTtcclxuICAgICAgICAgICAgaWYgKCRkcm9wRG93bmNvbnRhaW5lci5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgJCgnLmFnb3JhLWRyb3Bkb3duJykudHJpZ2dlcigncmVzZXQnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICgkZHJvcERvd25jb250YWluZXIuaGFzQ2xhc3MoJ2FjdGlvbnMnKSAmJiAhJHRhcmdldC5oYXNDbGFzcygnYWdvcmEtZHJvcGRvd24taGFuZGxlJykgJiYgJGRyb3BEb3duY29udGFpbmVyLmNoaWxkcmVuKCdpbnB1dDpjaGVja2VkJykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICRkcm9wRG93bmNvbnRhaW5lci50cmlnZ2VyKCdyZXNldCcpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCcuYWdvcmEtZHJvcGRvd24nKS5ub3QoJGRyb3BEb3duY29udGFpbmVyKS50cmlnZ2VyKCdyZXNldCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXgpIHsgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBNZGxSZWxvYWRDb250cm9sU3RhdGUoaXRlbSwgcGFyZW50LCBub0FjdGlvbikge1xyXG4gICAgaWYgKG5vQWN0aW9uID09IG51bGwgfHwgbm9BY3Rpb24gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgbm9BY3Rpb24gPSBmYWxzZTtcclxuICAgIH1cclxuICAgICR0aGlzID0gaXRlbTtcclxuICAgICRwYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICB2YXIgJHBhcnRuZXIgPSAkKFwiI1wiICsgJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSk7XHJcbiAgICB2YXIgJHZhbHVlQmluZCA9ICQoJyMnICsgJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdmFsdWUtYmluZFwiKSk7XHJcbiAgICB2YXIgJHNlYXJjaFZpZXcgPSAkKCcjJyArICRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXZpZXdcIikpO1xyXG4gICAgc3dpdGNoICgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaFwiKSkge1xyXG4gICAgICAgIGNhc2UgXCJTZWxlY3RCb3hcIjpcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICRwYXJlbnQucGFyZW50KCkuZmluZCgnW2RhdGEtc2VhcmNoLWVuYWJsZS1mb3JdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnbWRsLWNlbGwtLWhpZGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJ2lucHV0OmNoZWNrYm94JykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9BY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQXR0cignY2hlY2tlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuY2xvc2VzdCgnLm1kbC1qcy1jaGVja2JveCcpLmxlbmd0aCA+IDApICQodGhpcykuY2xvc2VzdCgnLm1kbC1qcy1jaGVja2JveCcpWzBdLk1hdGVyaWFsQ2hlY2tib3gudW5jaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCdzZWxlY3Qgb3B0aW9uJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQXR0cignc2VsZWN0ZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcubWRsLWpzLXNlbGVjdGZpZWxkJylbMF0uTWF0ZXJpYWxTZWxlY3RmaWVsZC5tZGxEb3duZ3JhZGVfKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7IGNvbnNvbGUubG9nKGVyci5tZXNzYWdlKTsgfVxyXG4gICAgICAgICAgICAkKCdbZGF0YS1zZWFyY2gtZW5hYmxlLWZvcj1cIicgKyAkcGFyZW50LnZhbCgpICsgJ1wiXScpLnJlbW92ZUNsYXNzKCdtZGwtY2VsbC0taGlkZScpO1xyXG4gICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIikgKyAnICgnICsgJHBhcmVudC5wYXJlbnQoKS5maW5kKCdbZGF0YS1zZWFyY2gtZW5hYmxlLWZvcj1cIicgKyAkcGFyZW50LnZhbCgpICsgJ1wiXScpLmZpbmQoXCJpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkXCIpLmxlbmd0aCArICcpJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJncm91cFwiOlxyXG4gICAgICAgICAgICB2YXIgJGdyb3VwUGFyZW50ID0gJHRoaXMuY2xvc2VzdCgnW2RhdGEtc2VhcmNoLWdyb3VwXScpO1xyXG4gICAgICAgICAgICAkc2VhcmNoVmlldyA9ICQoJyMnICsgJGdyb3VwUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12aWV3XCIpKTtcclxuICAgICAgICAgICAgdmFyIF9jb3VudCA9ICRncm91cFBhcmVudC5maW5kKCdbZGF0YS1zZWFyY2g9XCJncm91cFwiXSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkJykubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgX3JlYWRMaXN0ID0ge307XHJcblxyXG4gICAgICAgICAgICAkZ3JvdXBQYXJlbnQuZmluZCgnW2RhdGEtc2VhcmNoPVwiZ3JvdXBcIl0gW2RhdGEtdHlwZT1cImRyb3Bkb3duXCJdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgJF90ZW1wID0gJCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIGlmKCRfdGVtcC52YWwoKSE9XCJcIiAmJiB0eXBlb2YoJF90ZW1wLmRhdGEoJ2RlZmF1bHQtaXRlbScpIT0ndW5kZWZpbmVkJykgJiYgJF90ZW1wLnZhbCgpIT0kX3RlbXAuZGF0YSgnZGVmYXVsdC1pdGVtJykpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NvdW50Kys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJGdyb3VwUGFyZW50LmZpbmQoJ1tkYXRhLXNlYXJjaD1cImdyb3VwXCJdIGlucHV0W3R5cGU9dGV4dF0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciAkX3RlbXAgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9rZXkgPSAkX3RlbXAuYXR0cigndXJsaWRlbnRpZmllcicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTm90TnVsbE9yWmVybygkX3RlbXAudmFsKCkpICYmIHR5cGVvZiAoX3JlYWRMaXN0W19rZXldKSA9PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgICAgICAgICAgICBfcmVhZExpc3RbX2tleV0gPSBfY291bnQrKztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoJGdyb3VwUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJyAoJyArIF9jb3VudCArICcpJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJjaGVja0xpc3RcIjpcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICgkcGFyZW50LmF0dHIoJ2RhdGEtc2VhcmNoLWNoaWxkJykgIT0gbnVsbCAmJiAkcGFyZW50LmF0dHIoJ2RhdGEtc2VhcmNoLWNoaWxkJykgPT0gXCJ0cnVlXCIgJiYgJHBhcmVudC5wYXJlbnRzKCkuZmluZCgnW2RhdGEtc2VhcmNoLXBhcmVudD1cInRydWVcIl0nKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJyAoJyArICRwYXJlbnQucGFyZW50KCkuZmluZChcImlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWRcIikubGVuZ3RoICsgJyknKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJyAoJyArICRwYXJlbnQuZmluZChcImlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWRcIikubGVuZ3RoICsgJyknKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIikgKyAnICgnICsgJHBhcmVudC5maW5kKFwiaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZFwiKS5sZW5ndGggKyAnKScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzaW5nbGVJdGVtXCI6XHJcbiAgICAgICAgICAgIGlmICgkdGhpcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAkcGFyZW50LmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoXCJzZWxlY3RcIik7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfbGFiZWxQb3NpdGlvbiA9ICRwYXJlbnQuYXR0cignZGF0YS1zZWFyY2gtbmFtZS1sYWJlbC1wb3NpdGlvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfc2VsZWN0T3B0aW9uID0gdHlwZW9mICgkcGFyZW50LmF0dHIoJ2RhdGEtc2VsZWN0JykpICE9IHVuZGVmaW5lZCAmJiAkcGFyZW50LmF0dHIoJ2RhdGEtc2VsZWN0JykgIT0gbnVsbCAmJiAkcGFyZW50LmF0dHIoJ2RhdGEtc2VsZWN0JykgIT0gJycgPyAkcGFyZW50LmF0dHIoJ2RhdGEtc2VsZWN0JykgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF9sYWJlbFBvc2l0aW9uICE9PSB0eXBlb2YgdW5kZWZpbmVkICYmIF9sYWJlbFBvc2l0aW9uICE9PSBmYWxzZSAmJiBfbGFiZWxQb3NpdGlvbiA9PSAnbGVmdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9zZWxlY3RPcHRpb24gPT0gJ2xhYmVsJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJHRoaXMuYXR0cihcImxhYmVsXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hWaWV3LmF0dHIoJ2RhdGEtc2VsZWN0ZWQtdmFsdWUnLCAkdGhpcy5hdHRyKFwidmFsdWVcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKSArICR0aGlzLmF0dHIoXCJ2YWx1ZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3NlbGVjdE9wdGlvbiA9PSAnbGFiZWwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCR0aGlzLmF0dHIoXCJsYWJlbFwiKSArICRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuYXR0cignZGF0YS1zZWxlY3RlZC12YWx1ZScsICR0aGlzLmF0dHIoXCJ2YWx1ZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkdGhpcy5hdHRyKFwidmFsdWVcIikgKyAkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfc2hvd0NvdW50T25seSA9ICRwYXJlbnQuYXR0cignZGF0YS1zZWFyY2gtbmFtZS1sYWJlbC1zaG93Q291bnRPbmx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKF9zaG93Q291bnRPbmx5KSAhPSAndW5kZWZpbmVkJyAmJiBfc2hvd0NvdW50T25seSAhPSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJyAoJyArICR0aGlzLmxlbmd0aCArICcpJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsgY29uc29sZS5sb2coZXJyLm1lc3NhZ2UpOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfc2tpcExhYmVsQXBwZW5kTGlzdCA9ICRwYXJlbnQuYXR0cignZGF0YS1zZWFyY2gtbmFtZS1sYWJlbC1za2lwLWZvcicpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBfc2tpcExhYmVsQXBwZW5kTGlzdC5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfc2tpcExhYmVsQXBwZW5kTGlzdFtpXSAhPSB1bmRlZmluZWQgJiYgX3NraXBMYWJlbEFwcGVuZExpc3RbaV0gIT0gbnVsbCAmJiBfc2tpcExhYmVsQXBwZW5kTGlzdFtpXSA9PSAkdGhpcy5hdHRyKFwidmFsdWVcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCR0aGlzLmF0dHIoXCJ2YWx1ZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsgY29uc29sZS5sb2coZXJyLm1lc3NhZ2UpOyB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkdGhpcy5hdHRyKFwidmFsdWVcIikgKyAkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICR0aGlzLmFkZENsYXNzKFwic2VsZWN0XCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKElzTm90TnVsbCgkdGhpcy5hdHRyKFwidmFsdWVcIikpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHZhbHVlQmluZC5hdHRyKFwidmFsdWVcIiwgJHRoaXMuYXR0cihcInZhbHVlXCIpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHZhbHVlQmluZC5hdHRyKFwidmFsdWVcIiwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm9uZVNlYXJjaFwiOlxyXG4gICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCR0aGlzLmF0dHIoJ2RhdGEtc2VhcmNoLW5hbWUtbGFiZWwnKSArICcgKCcgKyAoJCgnLm11bHRpc2VsZWN0LWNvbnRleHQgLmFnb3JhLW9uZXNlYXJjaC1tdWx0aS1zZWwtaXRlbS1jb250JykubGVuZ3RoKSArICcpJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJyYW5nZVwiOlxyXG4gICAgICAgICAgICAkcGFydG5lci5yZW1vdmVDbGFzcyhcInMtZC1uXCIpO1xyXG4gICAgICAgICAgICAkcGFyZW50LmFkZENsYXNzKFwicy1kLW5cIik7XHJcbiAgICAgICAgICAgIGlmICgkdGhpcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoSXNOb3ROdWxsKCR0aGlzLmF0dHIoXCJ2YWx1ZVwiKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAkdmFsdWVCaW5kLnZhbCgkdGhpcy5hdHRyKFwidmFsdWVcIikpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAkdmFsdWVCaW5kLnZhbChcIlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoJHZhbHVlQmluZC5jbG9zZXN0KCcubWRsLWpzLXRleHRmaWVsZCcpLmxlbmd0aCA+IDAgJiYgJHZhbHVlQmluZC5jbG9zZXN0KCcubWRsLWpzLXRleHRmaWVsZCcpLmdldCgwKS5NYXRlcmlhbFRleHRmaWVsZCkgJHZhbHVlQmluZC5jbG9zZXN0KCcubWRsLWpzLXRleHRmaWVsZCcpLmdldCgwKS5NYXRlcmlhbFRleHRmaWVsZC5jaGVja0RpcnR5KCk7XHJcbiAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoQmluZFJhbmdlVmlldygkcGFyZW50KSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuLy9TZWFyY2ggQ29udHJvbGVcclxuZnVuY3Rpb24gQmluZFJhbmdlVmlldyhQYXJlbnQpIHtcclxuICAgIHZhciBfbWluTWF4ID0gbmV3IGdldE1pbk1heChQYXJlbnQpO1xyXG4gICAgaWYgKElzTm90TnVsbChfbWluTWF4Lk1pbikgJiYgSXNOb3ROdWxsKF9taW5NYXguTWF4KSAmJiBwYXJzZUludChfbWluTWF4Lk1pbikgPiBwYXJzZUludChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICBhbGVydChcIk1pbmltdW0gdmFsdWUgc2hvdWxkIG5vdCBleGNlZWQgdGhlIG1heGltdW0gdmFsdWVcIik7XHJcbiAgICAgICAgJCgnIycgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXZhbHVlLWJpbmRcIikpLmF0dHIoXCJ2YWx1ZVwiLCBcIlwiKTtcclxuICAgICAgICAkKFwiI1wiICsgJCgnIycgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXBhcnRuZXJcIikpLmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS5hdHRyKFwidmFsdWVcIiwgXCJcIik7XHJcbiAgICAgICAgcmV0dXJuIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3dpdGNoICgkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS5hdHRyKFwib3BlcmF0aW9uXCIpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtaW5cIjpcclxuICAgICAgICAgICAgICAgIHZhciBfbWluVmFsdWUgPSBfbWluTWF4Lk1pbjtcclxuICAgICAgICAgICAgICAgIHZhciAkcGFydG5lciA9ICQoXCIjXCIgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXBhcnRuZXJcIikpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKCRwYXJ0bmVyLmRhdGEoJ2lzLWluaXQnKSkgPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5kYXRhKCdpbml0LXZhbHVlJywgJHBhcnRuZXIuaHRtbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5kYXRhKCdpcy1pbml0JywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKElzTm90TnVsbChfbWluVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2lzU2VsZWN0ID0gJChcIiNcIiArIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSkuaXMoJ3NlbGVjdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWdOYW1lID0gX2lzU2VsZWN0ID8gJ29wdGlvbicgOiAnbGknO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNTZWxlY3QpICRwYXJ0bmVyLmFwcGVuZCgnPG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC10eXBlXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicHJpY2VcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JhbmdlVG9JbmNyZW1lbnQgPSBfZ2V0SW5jcmVtZW50VmFsdWUoX21pblZhbHVlLCBQYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9taW5WYWx1ZSA9IF9nZXRSb3VuZE9mVmFsdWUoX21pblZhbHVlLCBfcmFuZ2VUb0luY3JlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21pblZhbHVlID0gKHBhcnNlSW50KF9taW5WYWx1ZSkgKyBfcmFuZ2VUb0luY3JlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuYXBwZW5kKCc8JyArIHRhZ05hbWUgKyAnIHZhbHVlPVwiJyArIF9taW5WYWx1ZSArICdcIiB0YWJpbmRleD1cIjIyXCI+PHNwYW4+JCcgKyBfbWluVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC8oXFxkKSg/PShcXGRcXGRcXGQpKyg/IVxcZCkpL2csIFwiJDEsXCIpICsgJzwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ5ZWFyXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21pblZhbHVlID0gKHBhcnNlSW50KF9taW5WYWx1ZSkgKyA1KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5hcHBlbmQoJzwnICsgdGFnTmFtZSArICcgdmFsdWU9XCInICsgX21pblZhbHVlICsgJ1wiIHRhYmluZGV4PVwiMjJcIj48c3Bhbj4nICsgX21pblZhbHVlICsgJzwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm90TnVsbE9yWmVybyhQYXJlbnQuYXR0cignZGF0YS1kZWZhdWx0LWluY3JlbWVudCcpKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9taW5WYWx1ZSA9IChwYXJzZUludChfbWluVmFsdWUpICsgcGFyc2VJbnQoUGFyZW50LmF0dHIoJ2RhdGEtZGVmYXVsdC1pbmNyZW1lbnQnKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5hcHBlbmQoJzwnICsgdGFnTmFtZSArICcgdmFsdWU9XCInICsgX21pblZhbHVlICsgJ1wiIHRhYmluZGV4PVwiMjJcIj48c3Bhbj4nICsgX21pblZhbHVlICsgJzwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuYXBwZW5kKCc8JyArIHRhZ05hbWUgKyAnIHZhbHVlPVwiMFwiIHRhYmluZGV4PVwiMjJcIj48c3Bhbj5Bbnk8L3NwYW4+PC8nICsgdGFnTmFtZSArICc+Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICgkcGFydG5lci5kYXRhKCdpcy1pbml0JykpICE9ICd1bmRlZmluZWQnICYmICRwYXJ0bmVyLmRhdGEoJ2lzLWluaXQnKSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLmh0bWwoJHBhcnRuZXIuZGF0YSgnaW5pdC12YWx1ZScpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1heFwiOlxyXG4gICAgICAgICAgICAgICAgdmFyIF9tYXhWYWx1ZSA9IF9taW5NYXguTWF4O1xyXG4gICAgICAgICAgICAgICAgdmFyICRwYXJ0bmVyID0gJChcIiNcIiArIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mICgkcGFydG5lci5kYXRhKCdpcy1pbml0JykpID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuZGF0YSgnaW5pdC12YWx1ZScsICRwYXJ0bmVyLmh0bWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuZGF0YSgnaXMtaW5pdCcsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKElzTm90TnVsbChfbWF4VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2lzU2VsZWN0ID0gJChcIiNcIiArIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSkuaXMoJ3NlbGVjdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWdOYW1lID0gX2lzU2VsZWN0ID8gJ29wdGlvbicgOiAnbGknO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNTZWxlY3QpICRwYXJ0bmVyLmFwcGVuZCgnPG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmFuZ2VUb0RlY3JlbWVudCA9IF9nZXREZWNyZW1lbnRWYWx1ZShfbWF4VmFsdWUsIFBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgX21heFZhbHVlID0gX2dldFJvdW5kT2ZWYWx1ZShfbWF4VmFsdWUsIF9yYW5nZVRvRGVjcmVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDU7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdHlwZVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInByaWNlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21heFZhbHVlID0gKHBhcnNlSW50KF9tYXhWYWx1ZSkgLSBfcmFuZ2VUb0RlY3JlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXhWYWx1ZSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIucHJlcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWF4VmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPiQnICsgX21heFZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvKFxcZCkoPz0oXFxkXFxkXFxkKSsoPyFcXGQpKS9nLCBcIiQxLFwiKSArICc8L3NwYW4+PC8nICsgdGFnTmFtZSArICc+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInllYXJcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWF4VmFsdWUgPSAocGFyc2VJbnQoX21heFZhbHVlKSAtIDUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbWF4VmFsdWUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLmFwcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWF4VmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPicgKyBfbWF4VmFsdWUgKyAnPC9zcGFuPjwvJyArIHRhZ05hbWUgKyAnPicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm90TnVsbE9yWmVybyhQYXJlbnQuYXR0cignZGF0YS1kZWZhdWx0LWRlY3JlbWVudCcpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNTZXRNYXhWYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc051bGxPckVtcHR5KGlzU2V0TWF4VmFsKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21heFZhbHVlID0gX21pbk1heC5NYXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldE1heFZhbCA9ICdZZXMnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tYXhWYWx1ZSA9IChwYXJzZUludChfbWF4VmFsdWUpIC0gcGFyc2VJbnQoUGFyZW50LmF0dHIoJ2RhdGEtZGVmYXVsdC1kZWNyZW1lbnQnKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX21heFZhbHVlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIucHJlcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWF4VmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPicgKyBfbWF4VmFsdWUgKyAnPC9zcGFuPjwvJyArIHRhZ05hbWUgKyAnPicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLnByZXBlbmQoJzwnICsgdGFnTmFtZSArICcgdmFsdWU9XCIwXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPkFueTwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKCRwYXJ0bmVyLmRhdGEoJ2lzLWluaXQnKSkgIT0gJ3VuZGVmaW5lZCcgJiYgJHBhcnRuZXIuZGF0YSgnaXMtaW5pdCcpID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuaHRtbCgkcGFydG5lci5kYXRhKCdpbml0LXZhbHVlJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzd2l0Y2ggKFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdHlwZVwiKSkge1xyXG4gICAgICAgICAgICBjYXNlIFwicHJpY2VcIjpcclxuICAgICAgICAgICAgICAgIGlmIChJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Zvcm1hdHRvUHJpY2UoX21pbk1heC5NaW4pICsgXCItXCIgKyBfZm9ybWF0dG9QcmljZShfbWluTWF4Lk1heCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKElzTm90TnVsbChfbWluTWF4Lk1pbikgJiYgIUlzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Zvcm1hdHRvUHJpY2UoX21pbk1heC5NaW4pICsgXCIrXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCI8XCIgKyBfZm9ybWF0dG9QcmljZShfbWluTWF4Lk1heCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGlmIChJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX21pbk1heC5NaW4gKyBcIi1cIiArIF9taW5NYXguTWF4O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChJc05vdE51bGwoX21pbk1heC5NaW4pICYmICFJc05vdE51bGwoX21pbk1heC5NYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9taW5NYXguTWluICsgXCIrXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCI8XCIgKyBfbWluTWF4Lk1heDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX2Zvcm1hdHRvUHJpY2UobnVtKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGb3JtYXR0IDogJyArIG51bSk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2xhYmVsID0gbnVtO1xyXG4gICAgICAgICAgICAgICAgaWYgKG51bSA9PSBudWxsIHx8IG51bSA9PSB1bmRlZmluZWQgfHwgbnVtID09ICcnKSBfbGFiZWwgPSAnMCc7XHJcbiAgICAgICAgICAgICAgICBpZiAobnVtID49IDEwMDAwMDApIHtcclxuICAgICAgICAgICAgICAgICAgICBfbGFiZWwgPSAnJCcgKyAoX2xhYmVsIC8gMTAwMDAwMCkudG9GaXhlZCgyKS5yZXBsYWNlKC9cXC4/MCskLywgXCJcIikgKyAnTSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChudW0gPj0gMTAwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9sYWJlbCA9ICckJyArIChfbGFiZWwgLyAxMDAwKS50b0ZpeGVkKDIpLnJlcGxhY2UoL1xcLj8wKyQvLCBcIlwiKSArICdLJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF9sYWJlbCA9ICckJyArIF9sYWJlbC5yZXBsYWNlKC9cXC4wKyQvLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBfbGFiZWw7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX2dldEluY3JlbWVudFZhbHVlKHZhbHVlLCBwYXJlbnQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciBfc3RhZ2UgPSAkKHBhcmVudCkuZGF0YSgnc3RhZ2UnKTtcclxuICAgICAgICAgICAgICAgIHZhciBfbWluVmFsdWVUZXh0ID0gJChwYXJlbnQpLmRhdGEoJ21pbi12YWx1ZScpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9taW5WYWx1ZSA9IDEwMDAwMDA7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3N0YWdlVmFsdWUgPSAxMDAwMDA7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNOdWxsT3JFbXB0eShfc3RhZ2UpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfc3RhZ2VWYWx1ZSA9IHBhcnNlSW50KF9zdGFnZSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKF9taW5WYWx1ZSkgIT0gJ3VuZGVmaW5lZCcgJiYgX21pblZhbHVlICE9IG51bGwgJiYgX21pblZhbHVlICE9ICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbWluVmFsdWUgPSBwYXJzZUludChfbWluVmFsdWVUZXh0LCAxMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpIDwgX21pblZhbHVlID8gMjUwMDAgOiAocGFyc2VJbnQodmFsdWUpIDwgX21pblZhbHVlICogMTAgPyA1MDAwMCA6IF9zdGFnZVZhbHVlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIHJldHVybiAxMDAwMDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBfZ2V0RGVjcmVtZW50VmFsdWUodmFsdWUsIHBhcmVudCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9zdGFnZSA9ICQocGFyZW50KS5kYXRhKCdzdGFnZScpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9zdGFnZVZhbHVlID0gMTAwMDAwO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkoX3N0YWdlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3N0YWdlVmFsdWUgPSBwYXJzZUludChfc3RhZ2UsIDEwKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKSA8IDEwMDAwMCA/IDEwMDAwIDogKHBhcnNlSW50KHZhbHVlKSA8IDEwMDAwMDAgPyA1MDAwMCA6IF9zdGFnZVZhbHVlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIHJldHVybiAxMDAwMDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBfZ2V0Um91bmRPZlZhbHVlKHZhbHVlLCBpbmNyZW1lbnRhbFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKHBhcnNlSW50KHZhbHVlKSAtIChwYXJzZUludCh2YWx1ZSkgJSBpbmNyZW1lbnRhbFZhbHVlKSkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE1pbk1heChQYXJlbnQpIHtcclxuICAgIHZhciBfbWluVmFsdWUgPSAwLCBfbWF4VmFsdWUgPSAwO1xyXG4gICAgc3dpdGNoICgkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS5hdHRyKFwib3BlcmF0aW9uXCIpKSB7XHJcbiAgICAgICAgY2FzZSBcIm1pblwiOlxyXG4gICAgICAgICAgICBfbWluVmFsdWUgPSAkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS52YWwoKTtcclxuICAgICAgICAgICAgX21heFZhbHVlID0gJChcIiNcIiArICQoXCIjXCIgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXBhcnRuZXJcIikpLmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS52YWwoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm1heFwiOlxyXG4gICAgICAgICAgICBfbWluVmFsdWUgPSAkKFwiI1wiICsgJChcIiNcIiArIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSkuYXR0cihcImRhdGEtc2VhcmNoLXZhbHVlLWJpbmRcIikpLnZhbCgpO1xyXG4gICAgICAgICAgICBfbWF4VmFsdWUgPSAkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS52YWwoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBNaW46IF9taW5WYWx1ZSwgTWF4OiBfbWF4VmFsdWUgfTtcclxufVxyXG5cclxuYWdvcmEoZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gTnVtZXJpYyBvbmx5IGNvbnRyb2wgaGFuZGxlclxyXG4gICAgalF1ZXJ5LmZuLkZvcmNlTnVtZXJpY09ubHkgPVxyXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmtleWRvd24oZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gZS5jaGFyQ29kZSB8fCBlLmtleUNvZGUgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5zaGlmdEtleSkga2V5ID0gMFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFsbG93IGJhY2tzcGFjZSwgdGFiLCBkZWxldGUsIGVudGVyLCBhcnJvd3MsIG51bWJlcnMgYW5kIGtleXBhZCBudW1iZXJzIE9OTFlcclxuICAgICAgICAgICAgICAgICAgICAvLyBob21lLCBlbmQsIHBlcmlvZCwgYW5kIG51bXBhZCBkZWNpbWFsXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09IDggfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09IDkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09IDEzIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9PSA0NiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPT0gMTEwIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9PSAxOTAgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleSA+PSAzNSAmJiBrZXkgPD0gNDApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXkgPj0gNDggJiYga2V5IDw9IDU3KSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ID49IDk2ICYmIGtleSA8PSAxMDUpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuXHJcbiAgICAkKFwiW2RhdGEtbnVtZXJpYy1vbmx5XVwiKS5Gb3JjZU51bWVyaWNPbmx5KCk7XHJcblxyXG4gICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQoXCJbZGF0YS1udW1lcmljLW9ubHldXCIpLkZvcmNlTnVtZXJpY09ubHkoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFsbG93IGJvb2ttYXJrIGNvbnNpZGVyaW5nIHRoZSBwYWdlIGhlYWRlciB3aXRoIGFuaW1hdGUgc2Nyb2xsXHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtcGFnZS1zY3JvbGxdJywgX3Njcm9sbEZvclBhZ2VTY3JvbGwpO1xyXG4gICAgJChkb2N1bWVudCkub24oJ3RhcCcsICdbZGF0YS1wYWdlLXNjcm9sbF0nLCBfc2Nyb2xsRm9yUGFnZVNjcm9sbCk7XHJcbiAgICBmdW5jdGlvbiBfc2Nyb2xsRm9yUGFnZVNjcm9sbCgpIHtcclxuICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgICAgIHZhciAkcmVmZXJlbmNlZEl0ZW0gPSAkKCcjJyArICR0aGlzLmRhdGEoJ3BhZ2Utc2Nyb2xsJykpO1xyXG4gICAgICAgIHZhciBfaXRlbVBvc2l0aW9uID0gJHJlZmVyZW5jZWRJdGVtICE9IHVuZGVmaW5lZCAmJiAkcmVmZXJlbmNlZEl0ZW0gIT0gbnVsbCAmJiAkcmVmZXJlbmNlZEl0ZW0ubGVuZ3RoID4gMCA/ICRyZWZlcmVuY2VkSXRlbS5vZmZzZXQoKS50b3AgOiAwO1xyXG4gICAgICAgIHZhciBfb2Zmc2V0ID0gMDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgX3ZhbHVlID0gJHRoaXMuZGF0YSgncGFnZS1zY3JvbGwtb2Zmc2V0Jyk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKF92YWx1ZSkgIT0gJ3VuZGVmaW5lZCcgJiYgX3ZhbHVlICE9ICcnKSBfb2Zmc2V0ID0gcGFyc2VJbnQoX3ZhbHVlKTtcclxuICAgICAgICAgICAgZWxzZSBfb2Zmc2V0ID0gJCgnI2Fnb3JhLWxheW91dC1oZWFkZXInKS5oZWlnaHQoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAkKFwiaHRtbCwgYm9keVwiKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiAoX2l0ZW1Qb3NpdGlvbiAtIF9vZmZzZXQpIH0sIDE1MDApO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciAkcmVmZXJlbmNlZFRhYkl0ZW0gPSAkKCcjJyArICR0aGlzLmRhdGEoJ3BhZ2Utc2Nyb2xsLXRhYi1pZCcpKTtcclxuICAgICAgICAgICAgJHJlZmVyZW5jZWRUYWJJdGVtLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBCdXR0b24gdG8gbW92ZSB0b3Agb2YgdGhlIHBhZ2VcclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1iYWNrLXRvLXRvcF0nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgQmFja1RvVG9wKHRoaXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJChkb2N1bWVudCkub24oJ3RhcCcsICdbZGF0YS1iYWNrLXRvLXRvcF0nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgQmFja1RvVG9wKHRoaXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQnV0dG9uIHRvIG1vdmUgYm90dG9tIG9mIHRoZSBwYWdlXHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtYmFjay10by1kb3duXScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBUb3BUb0JvdHRvbSh0aGlzKTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKCd0YXAnLCAnW2RhdGEtYmFjay10by1kb3duXScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBUb3BUb0JvdHRvbSh0aGlzKTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvKiBUaGlzIGNvZGUgd2lsbCBhbGxvdyB0byBnaXZlIGEgcmVkaXJlY3QgdXJsIHRvIGEgY29udGFpbmVyXHJcbiAgICAgICAgZGF0YS1ocmVmPVwiPHVybD5cIlxyXG4gICAgICAgIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAqL1xyXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJ1tkYXRhLWhyZWZdJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoJChlLnRhcmdldCkuY2xvc2VzdCgnW2RhdGEtbm9uLWNsaWNrLWNvbnRlbnRdJykubGVuZ3RoID4gMCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghaXNOdWxsT3JFbXB0eSgkKHRoaXMpLmRhdGEoJ2hyZWYnKSkpIHtcclxuICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KCQodGhpcykuZGF0YSgndGFyZ2V0JykpKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cub3BlbigkKHRoaXMpLmRhdGEoJ2hyZWYnKSwgJCh0aGlzKS5kYXRhKCd0YXJnZXQnKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gJCh0aGlzKS5kYXRhKCdocmVmJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG4vKnJlY3Vyc3Rpb24gZm9yIGZpcmUgZXZlbnQgd2hlbiBjbGFzcyBuYW1lIGlzIGNoYW5nZWQqL1xyXG5mdW5jdGlvbiBPbkNsYXNzQmVoYXZpb3JDaGFuZ2UoY3RybCwgaGFuZGxlcikge1xyXG4gICAgaWYgKCFJc051bGxvckVtcHR5KCQoY3RybCkuYXR0cignb2xkQ2xhc3NOYW1lJykpICYmICQoY3RybCkuYXR0cignb2xkQ2xhc3NOYW1lJykgIT0gJChjdHJsKS5hdHRyKCdjbGFzcycpKSBoYW5kbGVyKCk7XHJcbiAgICAkKGN0cmwpLmF0dHIoJ29sZENsYXNzTmFtZScsICQoY3RybCkuYXR0cignY2xhc3MnKSk7XHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgT25DbGFzc0JlaGF2aW9yQ2hhbmdlKGN0cmwsIGhhbmRsZXIpOyB9LCAxMDApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBBbmltYXRlUGxhY2Vob2xkZXJUZXh0KGN0cmwsIHBodCwgaWR4KSB7XHJcbiAgICB2YXIgX3BodCA9IHBodDtcclxuICAgIGlmIChpZHggPT0gMCkge1xyXG4gICAgICAgIF9waHQgPSBjdHJsLmF0dHIoJ3BsYWNlaG9sZGVyJyk7XHJcbiAgICAgICAgY3RybC5hdHRyKCdwbGFjZWhvbGRlcicsICcnKTtcclxuICAgIH1cclxuICAgIGlmIChpZHggPT0gX3BodC5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjdHJsLmF0dHIoJ3BsYWNlaG9sZGVyJywgX3BodC5zdWJzdHIoMCwgKytpZHgpKTsgXHJcbiAgICAgICAgQW5pbWF0ZVBsYWNlaG9sZGVyVGV4dChjdHJsLCBfcGh0LCBpZHgpO1xyXG4gICAgfSwgMTUwKTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIEFkZFJlYWRNb3JlKG1pbkxpbWl0LCBsYmxNb3JlLCBsYmxMZXNzKSB7XHJcbiAgICAvL1RoaXMgbGltaXQgeW91IGNhbiBzZXQgYWZ0ZXIgaG93IG11Y2ggY2hhcmFjdGVycyB5b3Ugd2FudCB0byBzaG93IFJlYWQgTW9yZS5cclxuICAgIHZhciBjYXJMbXQgPSBtaW5MaW1pdDtcclxuICAgIC8vIFRleHQgdG8gc2hvdyB3aGVuIHRleHQgaXMgY29sbGFwc2VkXHJcbiAgICB2YXIgcmVhZE1vcmVUeHQgPSBsYmxNb3JlO1xyXG4gICAgLy8gVGV4dCB0byBzaG93IHdoZW4gdGV4dCBpcyBleHBhbmRlZFxyXG4gICAgdmFyIHJlYWRMZXNzVHh0ID0gbGJsTGVzcztcclxuXHJcblxyXG4gICAgLy9UcmF2ZXJzZSBhbGwgc2VsZWN0b3JzIHdpdGggdGhpcyBjbGFzcyBhbmQgbWFudXB1bGF0ZSBIVE1MIHBhcnQgdG8gc2hvdyBSZWFkIE1vcmVcclxuICAgICQoXCIuYWRkUmVhZE1vcmVcIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCQodGhpcykuZmluZChcIi5maXJzdFNlY1wiKS5sZW5ndGgpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIGFsbHN0ciA9ICQodGhpcykudGV4dCgpO1xyXG4gICAgICAgIGlmIChhbGxzdHIubGVuZ3RoID4gY2FyTG10KSB7XHJcbiAgICAgICAgICAgIHZhciBmaXJzdFNldCA9IGFsbHN0ci5zdWJzdHJpbmcoMCwgY2FyTG10KTtcclxuICAgICAgICAgICAgdmFyIHNlY2RIYWxmID0gYWxsc3RyLnN1YnN0cmluZyhjYXJMbXQsIGFsbHN0ci5sZW5ndGgpO1xyXG4gICAgICAgICAgICB2YXIgc3RydG9hZGQgPSBmaXJzdFNldCArIFwiPHNwYW4gY2xhc3M9J1NlY1NlYyc+XCIgKyBzZWNkSGFsZiArIFwiPC9zcGFuPjxzcGFuIGNsYXNzPSdyZWFkTW9yZScgIHRpdGxlPSdDbGljayB0byBTaG93IE1vcmUnPlwiICsgcmVhZE1vcmVUeHQgKyBcIjwvc3Bhbj48c3BhbiBjbGFzcz0ncmVhZExlc3MnIHRpdGxlPSdDbGljayB0byBTaG93IExlc3MnPlwiICsgcmVhZExlc3NUeHQgKyBcIjwvc3Bhbj5cIjtcclxuICAgICAgICAgICAgJCh0aGlzKS5odG1sKHN0cnRvYWRkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgICAvL1JlYWQgTW9yZSBhbmQgUmVhZCBMZXNzIENsaWNrIEV2ZW50IGJpbmRpbmdcclxuICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCIucmVhZE1vcmUsLnJlYWRMZXNzXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoXCIuYWRkUmVhZE1vcmVcIikudG9nZ2xlQ2xhc3MoXCJzaG93bGVzc2NvbnRlbnQgc2hvd21vcmVjb250ZW50XCIpO1xyXG4gICAgfSk7XHJcbn1cclxuIiwi77u/YWdvcmEoZnVuY3Rpb24gKCkge1xyXG4gICAgJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIltkYXRhLW1vZGFsZGlhbG9nXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHRyaWdnZXJFbGVtZW50ID0gJCh0aGlzKTtcclxuICAgICAgICBpZiAodHJpZ2dlckVsZW1lbnQucHJvcCgnZGlzYWJsZWQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm47IFxyXG4gICAgICAgIH1cclxuICAgICAgICB0cmlnZ2VyRWxlbWVudC5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyRWxlbWVudC5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcclxuICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAkKHRoaXMpLkFnb3JhRGlhbG9nTW9kYWwoeyBBZnRlckxvYWQ6ICQodGhpcykuYXR0cignZGF0YS1tb2RhbGRpYWxvZy1hZnRlckxvYWQnKSB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1tb2RhbGRpYWxvZy1jbG9zZV1cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQodGhpcykuQWdvcmFEaWFsb2dNb2RhbCh7IENsb3NlTW9kYWw6IHRydWUgfSk7XHJcbiAgICAgICAgdmFyIHNlbmRlciA9ICQodGhpcyk7XHJcbiAgICAgICAgaWYgKHNlbmRlci5kYXRhKCdtb2RhbGRpYWxvZy1jbG9zZScpID09ICdjbGVhcicpXHJcbiAgICAgICAgQ2xlYXJGb3JtdmFsKCdbZGF0YS1yZXF1ZXN0XScpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIltkYXRhLW1vZGFsZGlhbG9nLWNsb3NlLWZvcm1dXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKHRoaXMpLkFnb3JhRGlhbG9nTW9kYWwoeyBDbG9zZU1vZGFsOiB0cnVlLCBBZnRlckxvYWQ6ICQodGhpcykuYXR0cignZGF0YS1tb2RhbGRpYWxvZy1hZnRlckxvYWQnKSB9KTtcclxuICAgIH0pO1xyXG59KTtcclxuXHJcbihmdW5jdGlvbiAoJCkge1xyXG4gICAgLy9Gb3JtYXQgOiBkYXRhLW1vZGFsZGlhbG9nPVwiXCIgZGF0YS1tb2RhbGRpYWxvZy1pZD1cIlwiIGRhdGEtbW9kYWxkaWFsb2ctYWpheD1cInRydWVcIiBkYXRhLW1vZGFsZGlhbG9nLXNyYz1cIlwiXHJcbiAgICAkLmZuLkFnb3JhRGlhbG9nTW9kYWwgPSBmdW5jdGlvbiAob3B0aW9ucykgeyByZXR1cm4gbmV3IGFnb3JhRGlhbG9nKHRoaXMsIG9wdGlvbnMpOyB9O1xyXG4gICAgZnVuY3Rpb24gYWdvcmFEaWFsb2coc2VuZGVyLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIF9kZWZhdWx0cyA9IHtcclxuICAgICAgICAgICAgU2VydmljZVVybDogJycsXHJcbiAgICAgICAgICAgIE1vZGFsSWQ6ICdJQlBtb2RhbGNvbnRhaW5lcicsXHJcbiAgICAgICAgICAgIFBhcmFtczogbnVsbCxcclxuICAgICAgICAgICAgSHRtbDogbnVsbCxcclxuICAgICAgICAgICAgUGFyZW50Q3NzOiBudWxsLFxyXG4gICAgICAgICAgICBFbmFibGVDbG9zZUJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgICAgRW5hYmxlTG9hZGVyOiB0cnVlLFxyXG4gICAgICAgICAgICBFbmFibGVBamF4SHRtbExvYWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBIaWRlQ2xvc2VCdXR0b246IGZhbHNlLFxyXG4gICAgICAgICAgICBDbG9zZU1vZGFsOiBmYWxzZSxcclxuICAgICAgICAgICAgQ2xvc2VXaGVuVXNlclByZXNzRXNjYXBlOiB0cnVlLFxyXG4gICAgICAgICAgICBUcmFuc2l0aW9uOiAnRmFkZUluJywgLyogRmFkZUluLCBBcHBlbmQgKi9cclxuICAgICAgICAgICAgQmVmb3JlTG9hZDogbnVsbCxcclxuICAgICAgICAgICAgQWZ0ZXJMb2FkOiBudWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgX29wdGlvbnMgPSAkLmV4dGVuZChfZGVmYXVsdHMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuQ2xvc2VNb2RhbCkge1xyXG4gICAgICAgICAgICAkKHNlbmRlcikuY2xvc2VzdCgnLmFnb3JhLW1kbC1kYXRhLWRpYWxvZy1jb250YWluZXInKS50cmlnZ2VyKCdkaXNwb3NlJyk7XHJcbiAgICAgICAgICAgICQoc2VuZGVyKS5jbG9zZXN0KCcuYWdvcmEtbWRsLWRhdGEtZGlhbG9nLWNvbnRhaW5lcicpLnJlbW92ZUNsYXNzKCdwb3B1cC1vcGVuJyk7XHJcbiAgICAgICAgICAgICQoc2VuZGVyKS5jbG9zZXN0KCcuYWdvcmEtbWRsLWRhdGEtZGlhbG9nLWNvbnRhaW5lcicpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAvLyQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkudHJpZ2dlcignZGlzcG9zZScpO1xyXG4gICAgICAgICAgICAvLyQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkucmVtb3ZlQ2xhc3MoJ3BvcHVwLW9wZW4nKTtcclxuICAgICAgICAgICAgLy8kKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ3BvcHVwLWFjdGl2ZScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuQWZ0ZXJMb2FkKSB7XHJcbiAgICAgICAgICAgIF9vcHRpb25zLkFmdGVyTG9hZCA9IGV2YWwoXCIoZnVuY3Rpb24oKSB7IFwiICsgX29wdGlvbnMuQWZ0ZXJMb2FkICsgXCIoXCIgKyBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctaWRcIikgK1wiKTsgfSlcIik7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUxvYWRlcikgU2hvd0xvYWRpbmcoKTtcclxuXHJcbiAgICAgICAgTG9hZE9wdGlvbnMoKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gTG9hZE9wdGlvbnMoKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1zcmNcIikpKSBfb3B0aW9ucy5TZXJ2aWNlVXJsID0gc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLXNyY1wiKTtcclxuICAgICAgICAgICAgaWYgKElzTm90TnVsbChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctYWpheFwiKSkpIF9vcHRpb25zLkVuYWJsZUFqYXhIdG1sTG9hZCA9IHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1hamF4XCIpO1xyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1QYXJlbnRDc3NcIikpKSBfb3B0aW9ucy5QYXJlbnRDc3MgPSBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctUGFyZW50Q3NzXCIpO1xyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1DbG9zZVdoZW5Vc2VyUHJlc3NFc2NhcGVcIikpKSBfb3B0aW9ucy5DbG9zZVdoZW5Vc2VyUHJlc3NFc2NhcGUgPSAoc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLUNsb3NlV2hlblVzZXJQcmVzc0VzY2FwZVwiKSA9PSAndHJ1ZScpO1xyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1IaWRlQ2xvc2VCdXR0b25cIikpKSBfb3B0aW9ucy5IaWRlQ2xvc2VCdXR0b24gPSAoc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLUhpZGVDbG9zZUJ1dHRvblwiKSA9PSAndHJ1ZScpO1xyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1pZFwiKSkpIF9vcHRpb25zLk1vZGFsSWQgPSBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctaWRcIik7XHJcbiAgICAgICAgICAgIEdldEh0bWwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIEdldEh0bWwoKSB7XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUFqYXhIdG1sTG9hZCkge1xyXG4gICAgICAgICAgICAgICAgLy9SZW1vdmUgaWYgdGhlIGNvbnRhaW5lciBpcyBhbHJlYWR5IG9wZW4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAvL0dldCBIdG1sIEZyb20gVGhlIFNlcnZpY2UgVXJsXHJcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogX29wdGlvbnMuU2VydmljZVVybCxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAncG9zdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdodG1sJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBfb3B0aW9ucy5QYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW9ucy5IdG1sID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJpbmRIdG1sKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNob3dBbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnLCAzMDAwLCAnYWxlcnRfYm94JywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVMb2FkZXIpIFNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd0FsZXJ0KCdTZXJ2aWNlIG5vdCBmb3VuZCEnLCAzMDAwLCAnYWxlcnRfYm94JywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlTG9hZGVyKSBTaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQWZ0ZXJMb2FkKSBfb3B0aW9ucy5BZnRlckxvYWQoKTtcclxuICAgICAgICAgICAgICAgIF9vcHRpb25zLkh0bWwgPSAkKCcjJyArIHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1pZFwiKSkuY2xvbmUoKS53cmFwKCcjJyArIHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1pZFwiKSkuaHRtbCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBCaW5kSHRtbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gQmluZEh0bWwoKSB7XHJcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5IdG1sICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIC8vQ3JlYXRlIHBvcHVwIGNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgJCgnPGRpdiBpZD1cIicgKyBfb3B0aW9ucy5Nb2RhbElkICsgJ1wiIGNsYXNzPVwiYWdvcmEtbWRsLWRhdGEtZGlhbG9nLWNvbnRhaW5lciAnICsgX29wdGlvbnMuUGFyZW50Q3NzICsgJ1wiPjxkaXYgY2xhc3M9XCJhZ29yYS1tZGwtZGF0YS1kaWFsb2ctY29udGFpbmVyLWJvZHlcIj4nICsoIV9vcHRpb25zLkhpZGVDbG9zZUJ1dHRvbiA/ICc8ZGl2IGRhdGEtbW9kYWxkaWFsb2ctY2xvc2U9XCJcIiBjbGFzcz1cIm1kbC1jbG9zZVwiPjwvZGl2PicgOiAnJykgKyBfb3B0aW9ucy5IdG1sICsgJzwvZGl2PjxkaXYgaWQ9XCJwb3B1cFwiIGNsYXNzPVwibWRsLWpzLXNuYWNrYmFyIG1kbC1zbmFja2JhclwiPjxkaXYgY2xhc3M9XCJtZGwtc25hY2tiYXJfX3RleHRcIj48L2Rpdj48YnV0dG9uIGFyaWEtbGFiZWw9XCJidXR0b25cIiBjbGFzcz1cIm1kbC1zbmFja2Jhcl9fYWN0aW9uXCIgdHlwZT1cImJ1dHRvblwiPjwvYnV0dG9uPjwvZGl2PiA8L2Rpdj4nKS5hcHBlbmRUbyhcImJvZHlcIik7XHJcbiAgICAgICAgICAgICAgICAvLyQoJy5hZ29yYS1tZGwtZGF0YS1kaWFsb2ctY29udGFpbmVyJykuY3NzKCd0b3AnLCAoJCh3aW5kb3cpLnNjcm9sbFRvcCgpKSArICdweCcpO1xyXG4gICAgICAgICAgICAgICAgJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5hZGRDbGFzcygncG9wdXAtb3BlbicpO1xyXG4gICAgICAgICAgICAgICAgJCgnYm9keScpLmFkZENsYXNzKCdwb3B1cC1hY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIC8vQmluZCBIdG1sXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlTG9hZGVyKSBTaG93TG9hZGluZygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghKHR5cGVvZiAoY29tcG9uZW50SGFuZGxlcikgPT0gJ3VuZGVmaW5lZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SGFuZGxlci51cGdyYWRlRG9tKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5maW5kKCcubWRsLXRleHRmaWVsZC0tZmxvYXRpbmctbGFiZWwgaW5wdXQubWRsLXRleHRmaWVsZF9faW5wdXQ6bm90KFtwbGFjZWhvbGRlcl0pJykuYXR0cihcInBsYWNlaG9sZGVyXCIsIFwiICBcIik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vaWYgKHJlQ2FwdGNoYUFnb3JhKSB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAkKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLmZpbmQoJ1tkYXRhLXJlY2FwdGNoYS1hZ29yYV0nKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIC8vICAgIHJlQ2FwdGNoYUFnb3JhLmluaXQocmVDYXB0Y2hhQWdvcmEucmVDYXB0Y2hhQXBwSUQsIHJlQ2FwdGNoYUFnb3JhLnRva2VuLCBmYWxzZSwgMSk7XHJcbiAgICAgICAgICAgICAgICAvL31cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJChkb2N1bWVudCkua2V5ZG93bihmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IFwiMjdcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkNsb3NlV2hlblVzZXJQcmVzc0VzY2FwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkucmVtb3ZlQ2xhc3MoJ3BvcHVwLW9wZW4nKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygncG9wdXAtYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSkoalF1ZXJ5KTtcclxuXHJcbmZ1bmN0aW9uIENsb3NlUG9wdXAoKSB7XHJcbiAgICAkKCdbZGF0YS1tb2RhbGRpYWxvZy1jbG9zZV0nKS50cmlnZ2VyKFwiY2xpY2tcIik7XHJcbn0iLCLvu79cclxuXHJcblxyXG4gICAgd2luZG93LmFnUmVxdWVzdCA9IHtcclxuICAgICAgICBHRVQ6IGFzeW5jIGZ1bmN0aW9uIChzZXJ2aWNlVXJsLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZyArICgocXVlcnlTdHJpbmcgIT0gJycgPyAnJicgOiAnJykgKyBrZXkgKyAnPScgKyBkYXRhW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlcnZpY2VVcmwgKz0gc2VydmljZVVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JyArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IGF3YWl0IGZldGNoKHNlcnZpY2VVcmwsIHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgICAgIGNhY2hlOiBcIm5vLWNhY2hlXCIsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QuanNvbigpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgUE9TVDogYXN5bmMgZnVuY3Rpb24gKHNlcnZpY2VVcmwsIGRhdGEpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1EYXRhID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YVtrZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IGF3YWl0IGZldGNoKHNlcnZpY2VVcmwsIHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICBjYWNoZTogXCJuby1jYWNoZVwiLFxyXG4gICAgICAgICAgICAgICAgYm9keTogZm9ybURhdGFcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5qc29uKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG5cclxuLy9MYXp5IGxvYWRlclxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgYXN5bmMgZnVuY3Rpb24gZmluZExhenkoKSB7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc3JjXTpub3QoLmFnLWxhenkpOm5vdCgubm8tYWcpOm5vdChbZGF0YS1zcmMqPVwie3tcIl0pJyk7XHJcblxyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XHJcbiAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnYWctbGF6eScpO1xyXG4gICAgICAgICAgICB2YXIgYWN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYXR0YWNoQWN0aW9uKGl0ZW0sIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FnLmxhenknLCBhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhenknLCBhY3Rpb24pO1xyXG5cclxuICAgICAgICAgICAgYWN0aW9uKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXQoKSB7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGF6eS5yZWZyZXNoJywgZmluZExhenkpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnJlZnJlc2gnLCBmaW5kTGF6eSk7XHJcblxyXG4gICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcubGF6eS5yZWZyZXNoJyk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uIChlKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhenknKTtcclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhenknKTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgd2luZG93LmFnTGF6eSA9IHtcclxuICAgICAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5sYXp5LnJlZnJlc2gnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2YWxpZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5sYXp5Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGF0dGFjaEFjdGlvbihpdGVtLCBzdWNjZXNzKSB7ICAgICAgICAgXHJcbiAgICAgICAgdmFyIGJsYW5rSW1hZ2UgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FRQUFBQzFIQXdDQUFBQUMwbEVRVlI0Mm1Oa1lBQUFBQVlBQWpDQjBDOEFBQUFBU1VWT1JLNUNZSUk9JztcclxuICAgICAgICBpZiAoYXdhaXQgY2hlY2tpc0luVmlld3BvcnQoaXRlbSkpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB2YXIgc3JjVXJsID0gYXdhaXQgZ2V0Rm9ybWF0dGVkSW1hZ2VVcmwoaXRlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJyksIGl0ZW0pO1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnVklERU8nKSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgaXRlbS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHNyY1VybC51cmwpIH0sIDEwMDAwKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnT0JKRUNUJyB8fCBpdGVtLm5vZGVOYW1lID09ICdBVURJTycpXHJcbiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnc3JjJywgc3JjVXJsLnVybClcclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnSU1HJykgeyAgIFxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnc3JjJykgIT0gYmxhbmtJbWFnZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdhZy1sYXp5LXMnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdzcmMnLCBibGFua0ltYWdlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc3JjVXJsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3JjVXJsLnNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY1VybC5zaXplLndpZHRoPjApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBzcmNVcmwuc2l6ZS53aWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNVcmwuc2l6ZS5oZWlnaHQgPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHNyY1VybC5zaXplLmhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdzcmMnLCBzcmNVcmwudXJsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZVsnYmFja2dyb3VuZC1pbWFnZSddID0gYHVybCgnJHtzcmNVcmwudXJsfScpYDtcclxuICAgICAgICAgICAgc3VjY2VzcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHJvb3Q6IG51bGwsXHJcbiAgICAgICAgICAgIHJvb3RNYXJnaW46IFwiMHB4XCIsXHJcbiAgICAgICAgICAgIHRocmVzaG9sZDogMC4xLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhpdGVtLCdWaWV3Jyk7XHJcblxyXG4gICAgICAgIH0sIG9wdGlvbnMpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRGb3JtYXR0ZWRJbWFnZVVybCh1cmwsIGl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgaXNBdXRvID0gaXRlbS5oYXNBdHRyaWJ1dGUoJ2RhdGEtcmF0aW8tYXV0bycpOyAgICAgICAgXHJcbiAgICAgICAgaWYgKGlzQXV0bykgcmV0dXJuIHsgdXJsOiB1cmwgfTsgICAgICAgIFxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gYXdhaXQgZ2V0QmVzdEZpdENvbnRhaW5lcihpdGVtLCAxNiwgOSk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gLy4qXFw/KC4qPyhtaHxtdylcXD0oXFxkKykpKi9naS5leGVjKHVybCk7XHJcbiAgICAgICAgdmFyIGFkZGl0aW9uYWxVcmwgPSAnJzsgICAgICAgIFxyXG4gICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1jcm9wJykgIT0gbnVsbCkgYWRkaXRpb25hbFVybCArPSAnJm1vZGU9Y3JvcCc7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvJykgPT0gMCAmJiBmYWxzZSkge1xyXG4gICAgICAgICAgICB2YXIgcHJvamVjdENvZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1wY29kZScpO1xyXG4gICAgICAgICAgICB1cmwgPSBgaHR0cHM6Ly9jZG4uZGF0YWZsb2F0LmNvbS8ke3Byb2plY3RDb2RlfV9DV1Mke3VybH1gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh1cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0Y2ggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyB1cmw6IHVybCwgc2l6ZTogY3VycmVudCB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHVybDogYCR7dXJsfT9gICsgKGN1cnJlbnQud2lkdGggPiAwID8gYG13PSR7Y3VycmVudC53aWR0aH1gICsgKGN1cnJlbnQuaGVpZ2h0PjA/JyYnOicnKSA6ICcnKSArIChjdXJyZW50LmhlaWdodCA+IDAgPyBgbWg9JHtjdXJyZW50LmhlaWdodH1gIDogJycpICsgYCR7YWRkaXRpb25hbFVybH1gLCBzaXplOiBjdXJyZW50IH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldEJlc3RGaXRDb250YWluZXIoaXRlbSwgZGVmYXVsdFJhdGlvV2lkdGgsIGRlZmF1bHRSYXRpb0hlaWdodCkge1xyXG4gICAgICAgIGlmIChpdGVtID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICB2YXIgcmF0aW8gPSBpdGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1yYXRpbycpO1xyXG4gICAgICAgIHZhciByYXRpb01hdGNoID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHJhdGlvICYmIHJhdGlvICE9IG51bGwgJiYgKHJhdGlvTWF0Y2ggPSAvXig/PHdpZHRoPlswLTlcXC5dezEsNH0pOig/PGhlaWdodD5bMC05XFwuXXsxLDR9KSQvZ2kuZXhlYyhyYXRpbykpICE9IG51bGwpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgZGVmYXVsdFJhdGlvV2lkdGggPSBwYXJzZUZsb2F0KHJhdGlvTWF0Y2guZ3JvdXBzLndpZHRoKTtcclxuICAgICAgICAgICAgZGVmYXVsdFJhdGlvSGVpZ2h0ID0gcGFyc2VGbG9hdChyYXRpb01hdGNoLmdyb3Vwcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFJhdGlvV2lkdGggPT0gMCkgZGVmYXVsdFJhdGlvV2lkdGggPSAtMTtcclxuICAgICAgICAgICAgaWYgKGRlZmF1bHRSYXRpb0hlaWdodCA9PSAwKSBkZWZhdWx0UmF0aW9IZWlnaHQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3aWR0aCA9IGN1cnJlbnQud2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IGN1cnJlbnQuaGVpZ2h0O1xyXG4gICAgICAgIGlmIChpdGVtLmNsYXNzTGlzdC5jb250YWlucygnYWctbGF6eScpKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gaXRlbS5nZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiKTtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gaXRlbS5nZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIik7XHJcbiAgICAgICAgICAgIGlmICh3aWR0aCA9PSB1bmRlZmluZWQgfHwgd2lkdGggPT0gbnVsbCB8fCB3aWR0aCA9PSAnJylcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gaXRlbS5zdHlsZS53aWR0aDtcclxuXHJcbiAgICAgICAgICAgIGlmICh3aWR0aCA9PSB1bmRlZmluZWQgfHwgd2lkdGggPT0gbnVsbCB8fCB3aWR0aCA9PSAnJykgd2lkdGggPSAwO1xyXG4gICAgICAgICAgICBlbHNlIHdpZHRoID0gcGFyc2VJbnQod2lkdGgucmVwbGFjZSgvW15cXGRdKy9naSwgJycpKTtcclxuICAgICAgICAgICAgaWYgKGhlaWdodCA9PSB1bmRlZmluZWQgfHwgaGVpZ2h0ID09IG51bGwgfHwgaGVpZ2h0ID09ICcnKSBoZWlnaHQgPSAwO1xyXG4gICAgICAgICAgICBlbHNlIGhlaWdodCA9IHBhcnNlSW50KGhlaWdodC5yZXBsYWNlKC9bXlxcZF0rL2dpLCAnJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmICh3aWR0aCAhPSBoZWlnaHQgJiYgKCh3aWR0aCA9PSB1bmRlZmluZWQgfHwgaGVpZ2h0ID09IHVuZGVmaW5lZCkgfHwgKGhlaWdodCA8IHdpZHRoIC8gZGVmYXVsdFJhdGlvV2lkdGggKiBkZWZhdWx0UmF0aW9IZWlnaHQpIHx8IHdpZHRoIDwgaGVpZ2h0IC8gZGVmYXVsdFJhdGlvSGVpZ2h0ICogZGVmYXVsdFJhdGlvV2lkdGgpKSB7XHJcbiAgICAgICAgICAgIGlmICh3aWR0aCA+IDApXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSB3aWR0aCAvIGRlZmF1bHRSYXRpb1dpZHRoICogZGVmYXVsdFJhdGlvSGVpZ2h0O1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCAvIGRlZmF1bHRSYXRpb0hlaWdodCAqIGRlZmF1bHRSYXRpb1dpZHRoO1xyXG4gICAgICAgIH0gICAgXHJcblxyXG5cclxuICAgICAgICBpZiAoKHdpZHRoID4gMCB8fCBkZWZhdWx0UmF0aW9XaWR0aDwwICkgJiYgKGhlaWdodCA+IDAgfHwgZGVmYXVsdFJhdGlvSGVpZ2h0PDApICkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGguZmxvb3Iod2lkdGgpO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHdpZHRoOiBkZWZhdWx0UmF0aW9XaWR0aCA8IDAgPyAwIDogd2lkdGggKyAoMTAgLSAod2lkdGggJSAxMCkpLCBoZWlnaHQ6IGRlZmF1bHRSYXRpb0hlaWdodCA8IDAgPyAwIDogaGVpZ2h0ICsgKDEwIC0gKGhlaWdodCAlIDEwKSkgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdldEJlc3RGaXRDb250YWluZXIoaXRlbS5wYXJlbnRFbGVtZW50LCBkZWZhdWx0UmF0aW9XaWR0aCwgZGVmYXVsdFJhdGlvSGVpZ2h0KTsgICAgICAgIFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBtYXBUb0F1dG9TaXplKHdpZHRoLCBoZWlnaHQpIHsgICAgICAgIFxyXG4gICAgICAgIHJldHVybiB7IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGNoZWNraXNJblZpZXdwb3J0KGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgY3VycmVudCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcclxuICAgICAgICB2YXIgZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZhciBzY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jRWwuc2Nyb2xsVG9wIHx8IGJvZHkuc2Nyb2xsVG9wO1xyXG4gICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY0VsLnNjcm9sbExlZnQgfHwgYm9keS5zY3JvbGxMZWZ0O1xyXG5cclxuICAgICAgICB2YXIgY2xpZW50VG9wID0gZG9jRWwuY2xpZW50VG9wIHx8IGJvZHkuY2xpZW50VG9wIHx8IDA7XHJcbiAgICAgICAgdmFyIGNsaWVudExlZnQgPSBkb2NFbC5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8fCAwO1xyXG5cclxuICAgICAgICB2YXIgZWxlbWVudFRvcCA9IGN1cnJlbnQudG9wICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wO1xyXG4gICAgICAgIHZhciBlbGVtZW50Qm90dG9tID0gY3VycmVudC5ib3R0b20gKyBzY3JvbGxUb3AgLSBjbGllbnRUb3A7XHJcblxyXG4gICAgICAgIGxldCB2aWV3cG9ydFRvcCA9IHNjcm9sbFRvcDtcclxuICAgICAgICBsZXQgdmlld3BvcnRCb3R0b20gPSB2aWV3cG9ydFRvcCArIHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gZWxlbWVudEJvdHRvbSA+IHZpZXdwb3J0VG9wICYmIGVsZW1lbnRUb3AgPCB2aWV3cG9ydEJvdHRvbTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBpbml0KTtcclxuXHJcbiAgICAgXHJcblxyXG4gICAgLypBY2NvcmRpb24gSlMqL1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIEFjY29yZGlvbkZuKCkge1xyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWFjYy1pXCIpICE9IG51bGwpIHtcclxuXHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tYWNjLWlcIikuZm9yRWFjaCgoYWNjaXRlbSkgPT4ge1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY2NvcmRpb25JdGVtQm9keSA9IGFjY2l0ZW0uY2xvc2VzdChcIi5pdGVtLWFjYy1jXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhY2NpdGVtLmNsYXNzTGlzdC5jb250YWlucyhcIm9wZW5cIikpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW9uSXRlbUJvZHkuc3R5bGUubWF4SGVpZ2h0ID0gYWNjb3JkaW9uSXRlbUJvZHkuc2Nyb2xsSGVpZ2h0ICsgXCJweFwiO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgYWNjaXRlbS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaXRlbS5jbGFzc0xpc3QudG9nZ2xlKFwib3BlblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2l0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW9uSXRlbUJvZHkuc3R5bGUubWF4SGVpZ2h0ID0gYWNjb3JkaW9uSXRlbUJvZHkuc2Nyb2xsSGVpZ2h0ICsgXCJweFwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhY2NpdGVtLmNsYXNzTGlzdC5jb250YWlucyhcIm9wZW5cIikpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY29yZGlvbkl0ZW1Cb2R5LnN0eWxlLm1heEhlaWdodCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS1hY2MtaVwiKS5vZmZzZXRIZWlnaHQgKyBcInB4XCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICBcclxuICAgIEFjY29yZGlvbkZuKCk7XHJcblxyXG5cclxuICAgIC8qVGFiIEpTKi9cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBUYWJGbigpIHtcclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS10YWItYlwiKSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGFiLWJcIikuZm9yRWFjaCgoYnV0dG9uLCBpbmRleCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGFiLWNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lkZUJhciA9IGJ1dHRvbi5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYnNDb250YWluZXIgPSBzaWRlQmFyLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkZUJhci5xdWVyeVNlbGVjdG9yQWxsKCcuaXRlbS10YWItYicpLmZvckVhY2goYnV0dG9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGFic0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuaXRlbS10YWItYycpLmZvckVhY2godGFiID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1tpbmRleF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgIH1cclxuICAgXHJcbiAgICBUYWJGbigpO1xyXG5cclxuXHJcbiAgICAgXHJcbiAgICAvKlByb3BlcnR5U2VhcmNoQ29udHJvbFdvcmtpbmcgSlMqL1xyXG4gICAgYXN5bmMgZnVuY3Rpb24gUHJvcGVydHlTZWFyY2hDb250cm9sV29ya2luZygpIHtcclxuXHJcblxyXG4gICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLml0ZW0tc2VhXCIpICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jb24tbWVudSBhJykuZm9yRWFjaChmdW5jdGlvbiAobWVudWl0ZW0pIHtcclxuXHJcbiAgICAgICAgICAgICAgICBtZW51aXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxhYmVsLWNvbicpLnNldEF0dHJpYnV0ZSgnZGF0YS1jb3VudHJ5JywgbWVudWl0ZW0uaW5uZXJIVE1MKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lbnVpdGVtLmNsb3Nlc3QoXCIuaXRlbS1kci1jXCIpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0uY2xvc2VzdChcIi5pdGVtLWRyLWNcIikucHJldmlvdXNFbGVtZW50U2libGluZy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRyb3BzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLml0ZW0tZHIgPiAuaXRlbS1kci1sYScpO1xyXG5cclxuICAgICAgICAgICAgZHJvcHMuZm9yRWFjaCgoZHJvcCwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkcm9wLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIFRvZ2dsZUFjdGl2ZShkcm9wLCBpZHgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gVG9nZ2xlQWN0aXZlKGVsLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICBkcm9wcy5mb3JFYWNoKChkcm9wLCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWR4ICE9PSBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkcm9wLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZHJvcHMuZm9yRWFjaCgoZHJvcERpdikgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIShldmVudC50YXJnZXQuY2xvc2VzdChcIi5pdGVtLWRyLWxhXCIpKSAmJiAhKGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiLml0ZW0tZHItY1wiKSkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BEaXYuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pdGVtLWNsJykuZm9yRWFjaChmdW5jdGlvbiAoY2xvc2VidG4pIHtcclxuXHJcbiAgICAgICAgICAgICAgICBjbG9zZWJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbG9zZWJ0bi5jbG9zZXN0KFwiLml0ZW0tZHItY1wiKS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlYnRuLmNsb3Nlc3QoXCIuaXRlbS1kci1jXCIpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBFbmFibGVTZWFyY2hiZWxvd1RhYigpIHtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDEwMjQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLml0ZW0tb25zdHh0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3NyY2gtb3BuZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNhbmNlbC1idG4nKS5mb3JFYWNoKGZ1bmN0aW9uIChjYW5jZWxidG4pIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3NyY2gtb3BuZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICBFbmFibGVTZWFyY2hiZWxvd1RhYigpO1xyXG5cclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIEVuYWJsZVNlYXJjaGJlbG93VGFiKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBQcm9wZXJ0eVNlYXJjaENvbnRyb2xXb3JraW5nKCk7XHJcblxyXG5cclxuXHJcbiAgICAvLyBzY3JvbGwgY2xhc3MgYWRkZWQgaW4gYm9keSB3aGVuIHNjcm9sbGluZ1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIFNjcm9sbGJvZHljbGFzcygpIHtcclxuICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB3aW5kb3cuc2Nyb2xsWTtcclxuICAgICAgICAgICAgaWYgKHNjcm9sbFRvcCA+IDEwKSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3Njcm9sbCcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdzY3JvbGwnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBTY3JvbGxib2R5Y2xhc3MpO1xyXG5cclxuXHJcbiAgICAvLyBCdXJnZXIgbWVudVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBIZWFkZXJCdXJnZXJDaGFuZ2UoKSB7XHJcblxyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBCdXJnZXJBY3RpdmUoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVyZ2VyLWNcIikuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaXRlbS1uLTJcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5yZW1vdmUoXCJpdGVtLW4tMlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5hZGQoXCJpdGVtLW4tMVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtdWNub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLXVjXCIpO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWhcIikucXVlcnlTZWxlY3RvcihcIm5hdlwiKS5pbnNlcnRCZWZvcmUoaXRlbXVjbm9kZSwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWhcIikucXVlcnlTZWxlY3RvcihcIm5hdlwiKS5maXJzdENoaWxkKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIEJ1cmdlckRlYWN0aXZlKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5jb250YWlucyhcIml0ZW0tbi0xXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKS5jbGFzc0xpc3QucmVtb3ZlKFwiaXRlbS1uLTFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKS5jbGFzc0xpc3QuYWRkKFwiaXRlbS1uLTJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXVjbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS11Y1wiKTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS1oXCIpLmFwcGVuZENoaWxkKGl0ZW11Y25vZGUpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSAxMDI0KSB7IEJ1cmdlckFjdGl2ZSgpOyB9XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID4gMTAyNCkgeyBCdXJnZXJEZWFjdGl2ZSgpOyB9XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVyZ2VyLWMgfiBuYXZcIikub2Zmc2V0V2lkdGggPCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jIH4gbmF2XCIpLnNjcm9sbFdpZHRoKSB7IEJ1cmdlckFjdGl2ZSgpOyB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIEhlYWRlckJ1cmdlckNoYW5nZSgpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIEhlYWRlckJ1cmdlckNoYW5nZSk7XHJcblxyXG5cclxuXHJcbiAgICAvLyBSaXBwbGUgZWZmZWN0XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gUmlwcGxlRm4oKSB7XHJcblxyXG4gICAgICAgIHZhciByaXBwbGVidXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5hLWItMSwgLmEtYi0yLCAuYS1iLTMsIC5hLWItNCwgLmEtYi01XCIpO1xyXG5cclxuICAgICAgICBpZiAocmlwcGxlYnV0dG9ucyAhPSBudWxsKSB7XHJcblxyXG5cclxuICAgICAgICAgICAgcmlwcGxlYnV0dG9ucy5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IGUub2Zmc2V0WDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IGUub2Zmc2V0WTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJpcHBsZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyaXBwbGUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJpcHBsZXMubGVuZ3RoIDwgMTApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJpcHBsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlwcGxlLmNsYXNzTGlzdC5hZGQoJ3JpcHBsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByaXBwbGUuc3R5bGUubGVmdCA9IHggKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByaXBwbGUuc3R5bGUudG9wID0geSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQocmlwcGxlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlwcGxlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIFJpcHBsZUZuKCk7XHJcblxyXG5cclxuICAgIC8qSG9tZSBwYWdlIHZpZGVvIHBsYXllciBzY3JpcHQgdG8gaGlkZSBidXR0b24qL1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIFZpZGVvUGxheUZuKCkge1xyXG5cclxuICAgICAgICB2YXIgdmlkZW9FbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIudmlkZW8tcGxheVwiKTtcclxuXHJcblxyXG4gICAgICAgIGlmICh2aWRlb0VsZW1lbnRzICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHZpZGVvRWxlbWVudHMuZm9yRWFjaCh2aWRlbyA9PiB7XHJcbiAgICAgICAgICAgICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvLmNsb3Nlc3QoXCJmaWd1cmVcIikuY2xhc3NMaXN0LmFkZChcIm5vLWJ0blwiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlkZW8uY2xvc2VzdChcImZpZ3VyZVwiKS5jbGFzc0xpc3QucmVtb3ZlKFwibm8tYnRuXCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgVmlkZW9QbGF5Rm4oKTtcclxuXHJcbn0pKCk7XHJcblxyXG5mdW5jdGlvbiBzaG93UHJvcGVydHlHYWxsZXJ5KGNsaWVudENvZGUsIHByb3BlcnR5UlQsIG1sc051bWJlciwgcGhvdG9Db3VudCwgcm9vdENsYXNzKSB7XHJcbiAgICB2YXIgX3NUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQ7XHJcbiAgICB2YXIgX2dDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucHJvcGVydHktZ2FsbGVyeS1jb250YWluZXInKTtcclxuICAgIHZhciBfZ0NvbnRhaW5lckNsb3NlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICBfZ0NvbnRhaW5lckNsb3NlLmNsYXNzTGlzdC5hZGQoJ3Byb3BlcnR5LWdhbGxlcnktY29udGFpbmVyLWNsb3NlJyk7XHJcbiAgICBfZ0NvbnRhaW5lckNsb3NlLnNldEF0dHJpYnV0ZSgndGl0bGUnLCAnQ2xvc2UgUHJvcGVydHkgR2FsbGVyeScpO1xyXG4gICAgX2dDb250YWluZXJDbG9zZS5pbm5lclRleHQgPSAnWCc7XHJcbiAgICBfZ0NvbnRhaW5lckNsb3NlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByb3BlcnR5LWdhbGxlcnktY29udGFpbmVyJykgIT0gbnVsbCkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByb3BlcnR5LWdhbGxlcnktY29udGFpbmVyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIF9zVG9wKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ3Zpc2libGUnO1xyXG4gICAgfSwgdHJ1ZSk7XHJcbiAgICBpZiAoX2dDb250YWluZXIgPT0gbnVsbCkge1xyXG4gICAgICAgIF9nQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgX2dDb250YWluZXIuY2xhc3NMaXN0LmFkZCgncHJvcGVydHktZ2FsbGVyeS1jb250YWluZXInKTtcclxuICAgICAgICBpZiAocm9vdENsYXNzICE9IG1sc051bWJlcikgX2dDb250YWluZXIuY2xhc3NMaXN0LmFkZChyb290Q2xhc3MpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoX2dDb250YWluZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIF9nQ29udGFpbmVyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwicy13LTEwMCBzLXAtciBoZXJvLXNsaWRlclwiPjxpIGNsYXNzPVwibGVmdC1idG5cIj4mbHQ7PC9pPjxkaXYgY2xhc3M9XCJpdGVtLXMgc2hvdy1uYXZcIj48L2Rpdj48aSBjbGFzcz1cInJpZ2h0LWJ0blwiPiZndDs8L2k+PGRpdiBjbGFzcz1cImRvdHMtd3JhcHBlclwiPjwvZGl2PjxkaXYgc3R5bGU9XCJjbGVhcjogYm90aDtcIj48L2Rpdj48L2Rpdj4nO1xyXG4gICAgX2dDb250YWluZXIuYXBwZW5kQ2hpbGQoX2dDb250YWluZXJDbG9zZSk7XHJcblxyXG4gICAgdmFyIF9pdGVtQ29udGFpbmVyID0gX2dDb250YWluZXIucXVlcnlTZWxlY3RvcignLml0ZW0tcycpO1xyXG4gICAgdmFyIF9pdGVtSHRtbCA9IG51bGw7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBob3RvQ291bnQ7IGkrKykge1xyXG4gICAgICAgIF9pdGVtSHRtbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIF9pdGVtSHRtbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIml0ZW1cIj48aW1nIGNsYXNzPVwibGF6eSBzLXctMTAwIHMtaC0xMDAgcy1vZi1jdlwiIGFsdD1cInByb3BlcnR5IHBob3RvICcgKyAoaSArIDEpICsgJ1wiIGRhdGEtc3JjPVwiaHR0cHM6Ly9jZG4uZGF0YWZsb2F0LmNvbS8nICsgY2xpZW50Q29kZSArICdfUFVCTElDL01MU1Bob3Rvcy8nICsgcHJvcGVydHlSVC50b1VwcGVyQ2FzZSgpICsgJy8nICsgbWxzTnVtYmVyICsgJ18nICsgKGkgKyAxKSArICcuanBnXCIgLz48L2Rpdj4nXHJcbiAgICAgICAgX2l0ZW1Db250YWluZXIuYXBwZW5kKF9pdGVtSHRtbC5maXJzdEVsZW1lbnRDaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWdTbGlkZXIoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhdXRvUGxheTogdHJ1ZSxcclxuICAgICAgICAgICAgYXV0b1BsYXlEZWxheTogNTAwMCxcclxuICAgICAgICAgICAgbG9vcDogdHJ1ZSxcclxuICAgICAgICAgICAgc2hvd0J1bGxldHM6IHRydWUsXHJcbiAgICAgICAgICAgIHNob3dDb250cm9sczogdHJ1ZSxcclxuICAgICAgICAgICAgYnVsbGV0Q29udGFpbmVyOiAnLmRvdHMtd3JhcHBlcicsXHJcbiAgICAgICAgICAgIHNob3dCdWxsZXRzQXNUaHVtYjogdHJ1ZSxcclxuICAgICAgICAgICAgaXRlbVdyYXBwZXI6ICcuaXRlbS1zJyxcclxuICAgICAgICAgICAgaXRlbUNvbnRhaW5lcjogJy5pdGVtJyxcclxuICAgICAgICB9LCAnLnByb3BlcnR5LWdhbGxlcnktY29udGFpbmVyJywgZnVuY3Rpb24gKHNsaWRlcikge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcclxuICAgICAgICB9KTtcclxuXHJcbn1cclxuXHJcbndpbmRvdy5hZ1NsaWRlciA9IGZ1bmN0aW9uIChzZXR0aW5ncywgY29udGFpbmVyLCBvbkluaXRDb21wbGV0ZSkge1xyXG4gICAgdmFyIF9zZXR0aW5ncyA9IHtcclxuICAgICAgICBhdXRvUGxheTogZmFsc2UsXHJcbiAgICAgICAgYXV0b1BsYXlEZWxheTogMzAwMCxcclxuICAgICAgICBsb29wOiBmYWxzZSxcclxuICAgICAgICBzaG93Q29udHJvbHM6IHRydWUsXHJcbiAgICAgICAgYnRuTGVmdDogJy5sZWZ0LWJ0bicsXHJcbiAgICAgICAgYnRuUmlnaHQ6ICcucmlnaHQtYnRuJyxcclxuICAgICAgICBzaG93QnVsbGV0czogZmFsc2UsXHJcbiAgICAgICAgc2hvd0J1bGxldHNBc1RodW1iOiBmYWxzZSwgXHJcbiAgICAgICAgYnVsbGV0Q29udGFpbmVyOiAnLmJ1bGxldHMnLFxyXG4gICAgICAgIGl0ZW1XcmFwcGVyOiAnLmFneS1jYXJvLWluJyxcclxuICAgICAgICB3cmFwcGVyTWFzazogMCwgLyogSXQgc2hvdWxkIGJlIGluIHBlcmNlbnRhZ2UgMC0xMDAgKi9cclxuICAgICAgICBpdGVtQ29udGFpbmVyOiAnLmFneS1jYXJvLWl0J1xyXG4gICAgfVxyXG4gICAgaWYgKHNldHRpbmdzICE9IG51bGwgJiYgc2V0dGluZ3MgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgX3NldHRpbmdzID0gZXh0ZW5kSnNvbihfc2V0dGluZ3MsIHNldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udGFpbmVyID09IHVuZGVmaW5lZCB8fCBjb250YWluZXIgPT0gbnVsbCkgY29udGFpbmVyID0gJy5hZ3ktY2Fybyc7XHJcbiAgICB2YXIgX3NsaWRlcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGNvbnRhaW5lcik7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IF9zbGlkZXJzICE9IG51bGwgJiYgX3NsaWRlcnMgIT0gdW5kZWZpbmVkICYmIF9zbGlkZXJzLmxlbmd0aCA+IGk7IGkrKykge1xyXG4gICAgICAgIGluaXRTbGlkZXIoX3NsaWRlcnNbaV0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluaXRTbGlkZXIoc2xpZGVyKSB7XHJcbiAgICAgICAgdmFyIF9pdGVtcyA9IHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtV3JhcHBlcik7XHJcbiAgICAgICAgdmFyIF9pdGVtc0NvdW50ID0gX2l0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGwoX3NldHRpbmdzLml0ZW1Db250YWluZXIpLmxlbmd0aDtcclxuICAgICAgICB2YXIgX2l0ZW1XaWR0aCA9IF9pdGVtcy5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyKS5vZmZzZXRXaWR0aDtcclxuICAgICAgICB2YXIgX2l0ZW1zSW5WaWV3UG9ydCA9IE1hdGgucm91bmQoX2l0ZW1zLm9mZnNldFdpZHRoIC8gX2l0ZW1XaWR0aCk7XHJcbiAgICAgICAgdmFyIF9hY3RpdmVTSXRlbUlkeCA9IDAsIF9hY3RpdmVFSXRlbUlkeCA9IF9pdGVtc0NvdW50LCBfYWN0aXZlUGFnZUlkeCA9IDA7XHJcbiAgICAgICAgdmFyIF9idG5MZWZ0ID0gKF9zZXR0aW5ncy5idG5MZWZ0ICE9IG51bGwgJiYgX3NldHRpbmdzLmJ0bkxlZnQgIT0gdW5kZWZpbmVkKSA/IHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idG5MZWZ0KSA6IG51bGw7XHJcbiAgICAgICAgdmFyIF9idG5SaWdodCA9IChfc2V0dGluZ3MuYnRuUmlnaHQgIT0gbnVsbCAmJiBfc2V0dGluZ3MuYnRuUmlnaHQgIT0gdW5kZWZpbmVkKSA/IHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idG5SaWdodCkgOiBudWxsO1xyXG4gICAgICAgIHZhciBfcGF1c2VQbGF5ID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIF9pc0hlcm9TbGlkZXIgPSAoX2l0ZW1zLm9mZnNldFdpZHRoID09IF9pdGVtV2lkdGgpO1xyXG4gICAgICAgIHZhciBfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIF93cmFwcGVyTWFzdFNjcm9sbExlZnQgPSAwO1xyXG5cclxuICAgICAgICBpZiAoIWlzTmFOKF9zZXR0aW5ncy53cmFwcGVyTWFzaykgJiYgX3NldHRpbmdzLndyYXBwZXJNYXNrID4gMCkge1xyXG4gICAgICAgICAgICBfc2V0dGluZ3Mud3JhcHBlck1hc2sgPSBfc2V0dGluZ3Mud3JhcHBlck1hc2sgPiAxMDAgPyAxMDAgOiBfc2V0dGluZ3Mud3JhcHBlck1hc2s7XHJcbiAgICAgICAgICAgIF9pdGVtcy5zdHlsZS5zY3JvbGxQYWRkaW5nID0gX3NldHRpbmdzLndyYXBwZXJNYXNrICsgJyUnO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9pdGVtc0NvdW50ID4gMikge1xyXG4gICAgICAgICAgICAgICAgX21vdmVMYXN0SXRlbVRvRmlyc3RGb3JXcmFwcGVyTWFzayA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfaXRlbUFycmF5ID0gX2l0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGwoX3NldHRpbmdzLml0ZW1Db250YWluZXIpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2l0ZW1BcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBfaXRlbUFycmF5W2ldLmNsYXNzTGlzdC5hZGQoJ2lkeC0nICsgaSk7XHJcbiAgICAgICAgICAgIGlmIChfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrICYmIGkgPT0gX2l0ZW1BcnJheS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICBfaXRlbXMucHJlcGVuZChfaXRlbUFycmF5W2ldKTtcclxuICAgICAgICAgICAgICAgIF93cmFwcGVyTWFzdFNjcm9sbExlZnQgPSBfaXRlbXMuc2Nyb2xsTGVmdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF9idG5MZWZ0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKCFfc2V0dGluZ3Muc2hvd0NvbnRyb2xzKSBfYnRuTGVmdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBfYnRuTGVmdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChfYWN0aXZlU0l0ZW1JZHggPT0gMCAmJiAhX3NldHRpbmdzLmxvb3ApIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGlmIChfYWN0aXZlU0l0ZW1JZHggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5zY3JvbGxMZWZ0ID0gX2l0ZW1XaWR0aCAqIChfaXRlbXNDb3VudCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZUl0ZW1zKF9pdGVtV2lkdGggKiAoX2l0ZW1zQ291bnQgLSBfaXRlbXNJblZpZXdQb3J0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfaXRlbXMuc2Nyb2xsTGVmdCA9IF9pdGVtcy5zY3JvbGxMZWZ0ICsgKC1faXRlbVdpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVJdGVtcygoIV9pc0hlcm9TbGlkZXIpID8gKF9pdGVtcy5zY3JvbGxMZWZ0ICsgKC1faXRlbVdpZHRoKSkgOiAoKF9hY3RpdmVTSXRlbUlkeCAtIDEpICogX2l0ZW1XaWR0aCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfYnRuUmlnaHQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoIV9zZXR0aW5ncy5zaG93Q29udHJvbHMpIF9idG5SaWdodC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBfYnRuUmlnaHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX2FjdGl2ZUVJdGVtSWR4ID09IChfaXRlbXNDb3VudCAtIDEpICYmICFfc2V0dGluZ3MubG9vcCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgaWYgKF9hY3RpdmVFSXRlbUlkeCA9PSAoX2l0ZW1zQ291bnQgLSAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5zY3JvbGxMZWZ0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVJdGVtcyhfd3JhcHBlck1hc3RTY3JvbGxMZWZ0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5zY3JvbGxMZWZ0ID0gX2l0ZW1zLnNjcm9sbExlZnQgKyAoK19pdGVtV2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZUl0ZW1zKCghX2lzSGVyb1NsaWRlcikgPyAoX2l0ZW1zLnNjcm9sbExlZnQgKyAoK19pdGVtV2lkdGgpKSA6ICgoX2FjdGl2ZVNJdGVtSWR4ICsgMSkgKiBfaXRlbVdpZHRoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBpZiAoX3NldHRpbmdzLnNob3dCdWxsZXRzKSB7XHJcblxyXG4gICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIGlmIChzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKSA9PSBudWxsIHx8IHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgX3NldHRpbmdzLnNob3dCdWxsZXRzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAoTWF0aC5yb3VuZChfaXRlbXNDb3VudCAvIF9pdGVtc0luVmlld1BvcnQpKTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2J1bGxldCA9ICghX3NldHRpbmdzLnNob3dCdWxsZXRzQXNUaHVtYiAmJiAhX2lzSGVyb1NsaWRlcikgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgICAgICAgX2J1bGxldC5jbGFzc0xpc3QuYWRkKCdkb3QnKTtcclxuICAgICAgICAgICAgICAgIF9idWxsZXQuY2xhc3NMaXN0LmFkZCgnaWR4LScgKyBpKTtcclxuICAgICAgICAgICAgICAgIF9idWxsZXQuc2V0QXR0cmlidXRlKCdpZHgnLCBpKTtcclxuICAgICAgICAgICAgICAgIGlmIChfc2V0dGluZ3Muc2hvd0J1bGxldHNBc1RodW1iICYmIF9pc0hlcm9TbGlkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX3RodW1iSW1hZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX3RodW1iSW1hZ2VTID0gX2l0ZW1zLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1Db250YWluZXIgKyAnLmlkeC0nICsgaSArICcgaW1nJykgIT0gbnVsbCA/IF9pdGVtcy5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIGkgKyAnIGltZycpIDogX2l0ZW1zLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1Db250YWluZXIgKyAnLmlkeC0nICsgaSArICcgdmlkZW8nKTtcclxuICAgICAgICAgICAgICAgICAgICBfdGh1bWJJbWFnZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIChfdGh1bWJJbWFnZVMubm9kZU5hbWUgPT0gJ0lNRycpID8gX3RodW1iSW1hZ2VTLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSA6IF90aHVtYkltYWdlUy5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGh1bWInKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2J1bGxldC5hcHBlbmRDaGlsZChfdGh1bWJJbWFnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKSBfYnVsbGV0LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgX2J1bGxldC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZFBhZ2UocGFyc2VJbnQoaS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgnaWR4JykpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikuYXBwZW5kQ2hpbGQoX2J1bGxldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYgKF9zZXR0aW5ncy5zaG93QnVsbGV0c0FzVGh1bWIpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBUaHVtYldpZHRoID0gc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikucXVlcnlTZWxlY3RvcignLmRvdCcpLm9mZnNldFdpZHRoO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGlmIChfYnRuTGVmdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBfYnRuTGVmdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5zY3JvbGxMZWZ0IC09IFRodW1iV2lkdGg7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIGlmIChfYnRuUmlnaHQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgX2J0blJpZ2h0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLnNjcm9sbExlZnQgKz0gVGh1bWJXaWR0aDsgXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIHZhciBpc0RyYWdnaW5nID0gZmFsc2UsIHN0YXJ0WCwgc3RhcnRTY3JvbGxMZWZ0O1xyXG5cclxuXHJcbiAgICAgICAgICAgIHZhciBkcmFnU3RhcnQgPSAoZSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlOyBcclxuICAgICAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLmNsYXNzTGlzdC5hZGQoXCJkcmFnZ2luZ1wiKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0WCA9IGUucGFnZVg7XHJcbiAgICAgICAgICAgICAgICBzdGFydFNjcm9sbExlZnQgPSBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5zY3JvbGxMZWZ0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGRyYWdnaW5nID0gKGUpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzRHJhZ2dpbmcpIHJldHVybjsgXHJcbiAgICAgICAgICAgICAgICBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5zY3JvbGxMZWZ0ID0gc3RhcnRTY3JvbGxMZWZ0IC0gKGUucGFnZVggLSBzdGFydFgpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGRyYWdTdG9wID0gKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTsgXHJcbiAgICAgICAgICAgICAgICBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5jbGFzc0xpc3QucmVtb3ZlKFwiZHJhZ2dpbmdcIik7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIGRyYWdTdGFydCk7XHJcbiAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgZHJhZ2dpbmcpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBkcmFnU3RvcCk7XHJcblxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAoX3NldHRpbmdzLmF1dG9QbGF5KSB7XHJcbiAgICAgICAgICAgIGF1dG9QbGF5KCk7XHJcbiAgICAgICAgICAgIF9pdGVtcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCBmdW5jdGlvbiAoKSB7IGlmIChfaXRlbXMub2Zmc2V0V2lkdGggPT0gX2l0ZW1XaWR0aCkgcmV0dXJuOyBfcGF1c2VQbGF5ID0gdHJ1ZTsgfSk7XHJcbiAgICAgICAgICAgIF9pdGVtcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCBmdW5jdGlvbiAoKSB7IGlmIChfaXRlbXMub2Zmc2V0V2lkdGggPT0gX2l0ZW1XaWR0aCkgcmV0dXJuOyBfcGF1c2VQbGF5ID0gZmFsc2U7IH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYXV0b1BsYXkoKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFfcGF1c2VQbGF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2J0blJpZ2h0LmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhdXRvUGxheSgpO1xyXG4gICAgICAgICAgICB9LCBfc2V0dGluZ3MuYXV0b1BsYXlEZWxheSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBsb2FkUGFnZShpZHgpIHtcclxuICAgICAgICAgICAgX2FjdGl2ZVBhZ2VJZHggPSBpZHg7XHJcbiAgICAgICAgICAgIF9zZXR0aW5ncy5hdXRvUGxheSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBfcGF1c2VQbGF5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgX2l0ZW1zLnNjcm9sbExlZnQgPSAoaWR4ICogX2l0ZW1zSW5WaWV3UG9ydCkgKiBfaXRlbVdpZHRoO1xyXG4gICAgICAgICAgICBzZXRBY3RpdmVJdGVtcygoaWR4ICogX2l0ZW1zSW5WaWV3UG9ydCkgKiBfaXRlbVdpZHRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldEFjdGl2ZUl0ZW1zKF9pdGVtcy5zY3JvbGxMZWZ0KTtcclxuICAgICAgICBmdW5jdGlvbiBzZXRBY3RpdmVJdGVtcyhzTGVmdCkge1xyXG4gICAgICAgICAgICBfYWN0aXZlU0l0ZW1JZHggPSBNYXRoLnJvdW5kKChzTGVmdCAtIF93cmFwcGVyTWFzdFNjcm9sbExlZnQpIC8gX2l0ZW1XaWR0aCk7XHJcbiAgICAgICAgICAgIF9hY3RpdmVFSXRlbUlkeCA9IE1hdGgucm91bmQoX2FjdGl2ZVNJdGVtSWR4ICsgX2l0ZW1zSW5WaWV3UG9ydCAtIDEpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfaXRlbXNDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIGlmIChpID49IF9hY3RpdmVTSXRlbUlkeCAmJiBpIDw9IF9hY3RpdmVFSXRlbUlkeCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDw9IF9hY3RpdmVFSXRlbUlkeCAtICgoX21vdmVMYXN0SXRlbVRvRmlyc3RGb3JXcmFwcGVyTWFzaykgPyAxIDogMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1zLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1Db250YWluZXIgKyAnLmlkeC0nICsgaSkuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyB2aWRlbycpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdmlkZW8gPSBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyB2aWRlbycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZpZGVvLnNldEF0dHJpYnV0ZSgnc3JjJywgX3ZpZGVvLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmlkZW8ucGF1c2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92aWRlby5jdXJyZW50VGltZSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmlkZW8ucGxheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3BhdXNlUGxheSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBmdW5jdGlvbiAoZSkgeyBfcGF1c2VQbGF5ID0gZmFsc2U7IH0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfaXRlbXMucXVlcnlTZWxlY3RvckFsbChfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyBpbWcnKS5mb3JFYWNoKGltZyA9PiB7IGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykpOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrICYmIGkgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5xdWVyeVNlbGVjdG9yQWxsKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIChfaXRlbXNDb3VudCAtIDEpICsgJyBpbWcnKS5mb3JFYWNoKGltZyA9PiB7IGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykpOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoX2FjdGl2ZVNJdGVtSWR4ID09IDAgJiYgIV9zZXR0aW5ncy5sb29wKSBfYnRuTGVmdC5jbGFzc0xpc3QuYWRkKCdkaXNhYmxlZCcpOyBlbHNlIF9idG5MZWZ0LmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIGlmIChfYWN0aXZlRUl0ZW1JZHggPT0gKF9pdGVtc0NvdW50IC0gMSkgJiYgIV9zZXR0aW5ncy5sb29wKSBfYnRuUmlnaHQuY2xhc3NMaXN0LmFkZCgnZGlzYWJsZWQnKTsgZWxzZSBfYnRuUmlnaHQuY2xhc3NMaXN0LnJlbW92ZSgnZGlzYWJsZWQnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChfc2V0dGluZ3Muc2hvd0J1bGxldHMpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKE1hdGgucm91bmQoX2l0ZW1zQ291bnQgLyBfaXRlbXNJblZpZXdQb3J0KSk7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IChNYXRoLnJvdW5kKChfYWN0aXZlU0l0ZW1JZHggKyBfaXRlbXNJblZpZXdQb3J0KSAvIF9pdGVtc0luVmlld1BvcnQpIC0gMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lciArICcgLmRvdC5pZHgtJyArIGkpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lciArICcgLmRvdC5pZHgtJyArIGkpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvbkluaXRDb21wbGV0ZSAhPSBudWxsICYmIG9uSW5pdENvbXBsZXRlICE9IHVuZGVmaW5lZCkgb25Jbml0Q29tcGxldGUoc2xpZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBleHRlbmRKc29uKHNEZWZhdWx0LCBjdXN0b20pIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gY3VzdG9tKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXN0b20uaGFzT3duUHJvcGVydHkoa2V5KSkgc0RlZmF1bHRba2V5XSA9IGN1c3RvbVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc0RlZmF1bHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBJc05vdE51bGwoVmFsdWUpIHtcclxuICAgIHJldHVybiBWYWx1ZSAhPSBudWxsICYmIFZhbHVlICE9IHVuZGVmaW5lZCAmJiBWYWx1ZS5sZW5ndGggPiAwICYmIFZhbHVlICE9IFwiMFwiICYmIFZhbHVlICE9IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIElzTm90TnVsbE9ySXNaZXJvKFZhbHVlKSB7XHJcbiAgICByZXR1cm4gVmFsdWUgIT0gbnVsbCAmJiBWYWx1ZSAhPSB1bmRlZmluZWQgJiYgVmFsdWUubGVuZ3RoID4gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gRW5hYmxlU2VhcmNoRm9ybSgpIHtcclxuICAgIGZ1bmN0aW9uIHNlYXJjaEFjdG9uKHNlbmRlcikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgJHNlbmRlciA9ICQoc2VuZGVyKTtcclxuICAgICAgICAgICAgdmFyICRmb3JtID0gJHNlbmRlci5jbG9zZXN0KCdbZGF0YS1zZWFyY2gtZm9ybV0nKTtcclxuICAgICAgICAgICAgdmFyIF91cmxRdWVyeSA9IGNvbXBvc2VVcmxRdWVyeSh7IHNlbGVjdDogJGZvcm0gfSk7XHJcbiAgICAgICAgICAgIHZhciBfcnQgPSAkZm9ybS5kYXRhKCdzZWFyY2gtZm9ybScpO1xyXG4gICAgICAgICAgICB2YXIgJHNvcnQgPSAkKCdbZGF0YS1zb3J0LW9iamVjdD1cIicgKyBfcnQgKyAnXCJdJyk7XHJcbiAgICAgICAgICAgIHZhciBfZGVmYXVsdCA9ICRmb3JtLmRhdGEoJ2RlZmF1bHQtc2VhcmNoJyk7XHJcbiAgICAgICAgICAgIHZhciBfZGVmYXVsdFNvcnQgPSAkZm9ybS5kYXRhKCdkZWZhdWx0LXNvcnQnKTtcclxuICAgICAgICAgICAgaWYgKCh0eXBlb2YgKF9kZWZhdWx0KSAhPSAndW5kZWZpbmVkJyAmJiBfZGVmYXVsdCAhPSAnJyAmJiBfdXJsUXVlcnkuaW5kZXhPZignL2FkZHJlc3MtJykgPT0gLTEgJiYgX3VybFF1ZXJ5LmluZGV4T2YoJy9tbHMtJykgPT0gLTEpKSBfdXJsUXVlcnkgKz0gX2RlZmF1bHQ7XHJcbiAgICAgICAgICAgIGlmICgkc29ydC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3NvcnRWYWx1ZSA9ICRzb3J0LnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgX3VybFF1ZXJ5ICs9IF9zb3J0VmFsdWUgIT0gbnVsbCAmJiBfc29ydFZhbHVlICE9ICcnID8gX3NvcnRWYWx1ZSA6ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiAoX2RlZmF1bHRTb3J0KSAhPSAndW5kZWZpbmVkJyAmJiBfZGVmYXVsdFNvcnQgIT0gbnVsbCAmJiBfZGVmYXVsdFNvcnQgIT0gJycpIF91cmxRdWVyeSArPSBfZGVmYXVsdFNvcnQ7XHJcbiAgICAgICAgICAgICRmb3JtLnRyaWdnZXJIYW5kbGVyKCdzZWFyY2gnLCBbeyBxdWVyeTogX3VybFF1ZXJ5IH1dKTtcclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1zZWFyY2gtZm9ybV0gW2RhdGEtc2VhcmNoLWJ1dHRvbl0nLCB7fSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNlYXJjaEFjdG9uKHRoaXMpO1xyXG4gICAgfSk7XHJcbiAgICAkKGRvY3VtZW50KS5vbigna2V5ZG93bicsICdbZGF0YS1zZWFyY2gtZm9ybV0gW2RhdGEtc2VhcmNoLWFjdGlvbl0nLCB7fSwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzKVxyXG4gICAgICAgICAgICBzZWFyY2hBY3Rvbih0aGlzKTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoJ1tkYXRhLXNlYXJjaC1mb3JtXScpLm9uKCdzZWFyY2gnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgIHZhciAkc2VuZGVyID0gJCh0aGlzKTtcclxuICAgICAgICB2YXIgJHByZWZpeCA9ICRzZW5kZXIuZGF0YSgnc2VhcmNoLXByZWZpeCcpO1xyXG4gICAgICAgIHZhciBfcHJlZml4ID0gKElzTm90TnVsbCgkcHJlZml4KSAmJiAkcHJlZml4ICE9ICd1bmRlZmluZWQnKSA/ICRwcmVmaXggOiBHZXRTZWFyY2hQcmVmaXhGb3JSZWNvcmRUeXBlKCRzZW5kZXIuZGF0YSgnc2VhcmNoLWZvcm0nKSk7XHJcbiAgICAgICAgdmFyIHBhdHRlcm4gPSAvXlxcL1xcLy87XHJcbiAgICAgICAgaWYgKCFwYXR0ZXJuLnRlc3QoKF9wcmVmaXggIT0gbnVsbCAmJiBfcHJlZml4ICE9ICcnICYmIF9wcmVmaXggIT0gJ3VuZGVmaW5lZCcgPyBfcHJlZml4IDogJycpICsgZGF0YS5xdWVyeSkpXHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IChfcHJlZml4ICE9IG51bGwgJiYgX3ByZWZpeCAhPSAnJyAmJiBfcHJlZml4ICE9ICd1bmRlZmluZWQnID8gX3ByZWZpeCA6ICcnKSArIGRhdGEucXVlcnk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gR2V0U2VhcmNoUHJlZml4Rm9yUmVjb3JkVHlwZShyZWNvcmRUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHJlY29yZFR5cGUpIHtcclxuICAgICAgICBjYXNlICdQUk9QRVJUWSc6IHJldHVybiAnL3Byb3BlcnRpZXMnO1xyXG4gICAgICAgIGNhc2UgJ1BST1BFUlRZUkVOVCc6IHJldHVybiAnL3Byb3BlcnR5LXNlYXJjaC1tYXAtb24tcmVudCc7XHJcbiAgICAgICAgY2FzZSAnUFJPUEVSVFlTT0xEJzogcmV0dXJuICcvcHJvcGVydHktc2VhcmNoLW1hcC9zb2xkJztcclxuICAgICAgICBjYXNlICdBR0VOVCc6IHJldHVybiAnL3JlYWwtZXN0YXRlLWFnZW50cyc7XHJcbiAgICAgICAgY2FzZSAnT0ZGSUNFJzogcmV0dXJuICcvcmVhbC1lc3RhdGUtb2ZmaWNlcyc7XHJcbiAgICAgICAgY2FzZSAnQkxPRyc6IHJldHVybiAnL2Jsb2cvc2VhcmNoJztcclxuICAgICAgICBjYXNlICdBR0VOVFRFQU0nOiByZXR1cm4gJy9yZWFsLWVzdGF0ZS1hZ2VudHMnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcvJztcclxufVxyXG5mdW5jdGlvbiBHZXREZWZhdWx0U29ydEZvclJlY29yZFR5cGUocmVjb3JkVHlwZSkge1xyXG4gICAgc3dpdGNoIChyZWNvcmRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSAnUFJPUEVSVFknOiByZXR1cm4gJy9kc29ydC1wJztcclxuICAgICAgICBjYXNlICdQUk9QRVJUWVJFTlQnOiByZXR1cm4gJy9kc29ydC1wJztcclxuICAgICAgICBjYXNlICdBR0VOVCc6IHJldHVybiAnL3NvcnQtbic7XHJcbiAgICAgICAgY2FzZSAnQUdFTlRURUFNJzogcmV0dXJuICcvc29ydC1uJztcclxuICAgICAgICBjYXNlICdPRkZJQ0UnOiByZXR1cm4gJy9zb3J0LW4nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gaW5pdE1hcERlZmF1bHQoKSB7XHJcbiAgICBpZiAod2luZG93Lm9uTWFwTG9hZGVkKSB3aW5kb3cub25NYXBMb2FkZWQoKTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIEVuYWJsZURlbWFuZEltcG9ydCgpIHtcclxuICAgIF9pbml0KCk7XHJcbiAgICBmdW5jdGlvbiBfaW5pdCgpIHtcclxuICAgICAgICAkKFwiaW1nW2RhdGEtZGVtYW5kLWtleV1cIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIEdldFByb3BlcnRpZXMoJCh0aGlzKSwgJCh0aGlzKS5kYXRhKCdkZW1hbmQtdXJsJyksICQodGhpcykuZGF0YSgnZGVtYW5kLWtleScpLCAkKHRoaXMpLmRhdGEoJ2xheW91dCcpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1jay1ocmVmXScsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBHZXRQcm9wZXJ0aWVzKCQodGhpcykucGFyZW50cygnW2RhdGEtY2stcHJvcGVydHlsaXN0XTpmaXJzdCcpLCAkKHRoaXMpLmRhdGEoJ2NrLWhyZWYnKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eWxpc3RdOmZpcnN0JykuZGF0YSgnY2stZGVtYW5kLWtleScpLCAkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWNrLXByb3BlcnR5bGlzdF06Zmlyc3QnKS5kYXRhKCdjay1kZW1hbmQtbGF5b3V0JykpO1xyXG4gICAgfSk7XHJcblxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHNlbGVjdG9yRWxlbWVudDtcclxuICAgIHZhciBjdXJyZW50U2V0dGluZ3M7XHJcbiAgICB2YXIgbGFuZ3VhZ2VTb3VyY2VzID0ge1xyXG4gICAgICAgIGxhbmd1YWdlczogW1xyXG4gICAgICAgICAgICB7IGNvZGU6ICdlbicsIGxhYmVsOiAnRW5nbGlzaCcgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnZXMnLCBsYWJlbDogJ1NwYW5pc2gnLCBsb2NhbExhYmVsOiAnRXNwYcOxb2wnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ25sJywgbGFiZWw6ICdEdXRjaCcsIGxvY2FsTGFiZWw6ICdOZWRlcmxhbmRzJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdwcicsIGxhYmVsOiAnUG9ydHVnZXNlJywgbG9jYWxMYWJlbDogJ1BvcnR1Z3XDqnMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ2ZyJywgbGFiZWw6ICdGcmVuY2gnLCBsb2NhbExhYmVsOidGcmFuw6dhaXMnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjdXJyZW5jaWVzOiBbXHJcbiAgICAgICAgICAgIHsgY29kZTogJ1VTRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0RvbGxhcicsIGZvcm1hdDogJyQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnQUVEJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnVW5pdGVkIEFyYWIgRW1pcmF0ZXMgRGlyaGFtJywgZm9ybWF0OiAnQUVEIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0JTRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0JhaGFtaWFuIERvbGxhcicsIGZvcm1hdDogJ0IkIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0NBRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0NhbmFkaWFuIERvbGxhcicsIGZvcm1hdDogJyQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnRE9QJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnRG9taW5pY2FuIFBlc28nLCBmb3JtYXQ6ICdSRCQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnRVVSJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnRXVybycsIGZvcm1hdDogJ+KCrCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdKTUQnLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdKYW1haWNhbiBEb2xsYXInLCBmb3JtYXQ6ICdKJCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdLWUQnLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdDYXltYW4gSXNsYW5kcyBEb2xsYXInLCBmb3JtYXQ6ICdDSSQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnTVhOJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnTWV4aWNhbiBQZXNvJywgZm9ybWF0OiAnJCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdQQUInLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdQYW5hbWFuaWFuIEJhbGJvYScsIGZvcm1hdDogJ0IvLiMjIywjIyMsIyMjLiMjJyB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bml0czogW1xyXG4gICAgICAgICAgICB7IGNvZGU6ICdpbXBlcmlhbCcsIGxhYmVsOiAnSW1wZXJpYWwnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ21ldHJpYycsIGxhYmVsOiAnTWV0cmljJyB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICBwcmVzZXRzOiBbXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0JTJywgbGFiZWw6ICdCYWhhbWFzJywgY3VycmVuY3k6ICdCU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0NBJywgbGFiZWw6ICdDYW5hZGEnLCBjdXJyZW5jeTogJ0NBRCcsIGxhbmd1YWdlOiBbJ2VuJywgJ2ZyJ10sIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdKTScsIGxhYmVsOiAnSmFtYWljYScsIGN1cnJlbmN5OiAnSk1EJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdLWScsIGxhYmVsOiAnQ2F5bWFuIElzbGFuZHMnLCBjdXJyZW5jeTogJ0tZRCcsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnVEMnLCBsYWJlbDogJ1R1cmtzICYgQ2FpY29zIElzbGFuZHMnLCBsb2NhbExhYmVsOiAnJywgY3VycmVuY3k6ICdVU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ1VTJywgbGFiZWw6ICdVbml0ZWQgU3RhdGVzJywgbG9jYWxMYWJlbDogJycsIGN1cnJlbmN5OiAnVVNEJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnaW1wZXJpYWwnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0RZJywgbGFiZWw6ICdEb21pbmljYW4gUmVwdWJsaWMnLCBsb2NhbExhYmVsOiAnUmVww7pibGljYSBEb21pbmljYW5hJywgY3VycmVuY3k6ICdVU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0VTJywgbGFiZWw6ICdTcGFpbicsIGxvY2FsTGFiZWw6ICdFc3Bhw7FhJywgY3VycmVuY3k6ICdVU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ01YJywgbGFiZWw6ICdNZXhpY28nLCBsb2NhbExhYmVsOiAnTcOpeGljbycsIGN1cnJlbmN5OiAnTVhOJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdQQScsIGxhYmVsOiAnUGFuYW1hJywgbG9jYWxMYWJlbDogJ1BhbmFtw6EnLCBjdXJyZW5jeTogJ1BBQicsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnTkwnLCBsYWJlbDogJ05lZGVybGFuZHMnLCBsb2NhbExhYmVsOiAnTmVkZXJsYW5kJywgY3VycmVuY3k6ICdFVVInLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ1BUJywgbGFiZWw6ICdQb3J0dWdhbCcsIGN1cnJlbmN5OiAnRVVSJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG5cclxuICAgICAgICBdLFxyXG4gICAgICAgIHVuaXRDb252ZXJ0aW9uczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB1bml0OiAnU1FGVCcsXHJcbiAgICAgICAgICAgICAgICB0cmFnZXRVbml0OiAnU3EuTScsICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3RhbnQ6IDAuMDkyOTAzLFxyXG4gICAgICAgICAgICAgICAgbm90YXRpb246IFsnU3FmdCcsICdTcS5GdCcsICdTcS5GdC4nLCAnU3EuIEZ0LicsICdTRiddXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHVuaXQ6ICdNSScsXHJcbiAgICAgICAgICAgICAgICB0cmFnZXRVbml0OiAnS00nLFxyXG4gICAgICAgICAgICAgICAgY29uc3RhbnQ6IDEuNjA5MzQsXHJcbiAgICAgICAgICAgICAgICBub3RhdGlvbjpbJ21pJywnbWlsZXMnLCdtaWxlJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdDogJ0FDJyxcclxuICAgICAgICAgICAgICAgIHRyYWdldFVuaXQ6ICdTUU0nLFxyXG4gICAgICAgICAgICAgICAgY29uc3RhbnQ6IDQwNDYuODYsXHJcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogWydhY3JlJywgJ2FjcmVzJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdDogJ0xPVFNJWkUnLFxyXG4gICAgICAgICAgICAgICAgdHJhZ2V0VW5pdDogJ0xvdCBTaXplJyxcclxuICAgICAgICAgICAgICAgIHRhcmdldE5vdGF0aW9uOiAn446hJyxcclxuICAgICAgICAgICAgICAgIGNvbnN0YW50OiA0MDQ2Ljg2LFxyXG4gICAgICAgICAgICAgICAgbm90YXRpb246IFsnTG90IFNpemUnXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG5cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciByZWNlbnRTdGF0ZSA9IG51bGw7XHJcbiAgICB2YXIgdW5pdENvbnZlcnRpb25TY2hlbWEgPSBudWxsOyAgICBcclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBpbml0KCkge1xyXG4gICAgICAgIHZhciBjaGFuZ2VMYW5ndWFnZU5vZGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWxhbmd1YWdlXScpO1xyXG4gICAgICAgIGNoYW5nZUxhbmd1YWdlTm9kZXMuZm9yRWFjaChlbmFibGVMYW5ndWFnZVNlbGVjdG9yKTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuICAgICAgICBpZiAoY3VycmVudD8uY29kZSlcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UudXBkYXRlJywgeyBkZXRhaWw6IGN1cnJlbnQgfSkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50ID0gbGFuZ3VhZ2VTb3VyY2VzLnByZXNldHMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLmNvZGUgPT0gJ1VTJzsgfSlbMF07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgc2V0KGtleSwgQXJyYXkuaXNBcnJheShjdXJyZW50W2tleV0pID8gY3VycmVudFtrZXldWzBdIDogY3VycmVudFtrZXldKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UudXBkYXRlJywgeyBkZXRhaWw6IGN1cnJlbnQgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB1cGRhdGVQcmljZSh0cnVlKTsgICAgICAgICAgXHJcbiAgICAgICAgaWYgKGN1cnJlbnQubGFuZ3VhZ2UgJiYgY3VycmVudC5sYW5ndWFnZS5pbmRleE9mKCdlbicpID09IC0xKVxyXG4gICAgICAgICAgICB1cGRhdGVMYW5ndWFnZSgpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZWNlbnRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnQpO1xyXG4gICAgICAgICAgICBzZXRMYW5ndWFnZVRvU3RvcmUoeyBMb2NhbGU6ICdlbl9VUycgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaEFjdGlvbnMoKTtcclxuICAgICAgICBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEgPSBhd2FpdCBidWlsZFVuaXRDb252ZXJ0aW9uU2NoZW1hKCk7XHJcbiAgICAgICAgdXBkYXRlTWVzc3VyZW1lbnQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gYnVpbGRVbml0Q29udmVydGlvblNjaGVtYSgpIHtcclxuICAgICAgICB2YXIgZXhwcmVzc2lvblN0cmluZyA9ICcnO1xyXG4gICAgICAgIHZhciBub3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgPSAnJztcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICBub3RhdGlvbkV4cHJlc3Npb25zOiB7fSxcclxuICAgICAgICAgICAgbm90YXRpb25Pbmx5RXhwcmVzc2lvbnM6IHt9LFxyXG4gICAgICAgICAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZUFsbCgvW14wLTlcXFxcLl0vZ2ksICcnKSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZm9ybWF0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycseyBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDIgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGhhdmVWYWxpZEF0dHJpYnV0ZTogZnVuY3Rpb24gKGl0ZW0pIHsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5oYXNBdHRyaWJ1dGUgPyBpdGVtLmhhc0F0dHJpYnV0ZSgnZGF0YS10aCcpIDogZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldExhYmVsRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0QXR0cmlidXRlP2l0ZW0uZ2V0QXR0cmlidXRlKCdkYXRhLXRoJyk6Jyc7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldExhYmVsRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAoaXRlbSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnNldEF0dHJpYnV0ZSlcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnZGF0YS10aCcsIHZhbHVlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0VmFsdWVGb3JBdHRyaWJ1dGU6IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pbm5lclRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldFZhbHVlRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAoaXRlbSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uaW5uZXJUZXh0ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICB2YXIgc3ViRXhwcmVzc2lvblN0cmluZyA9ICcnLCBzdWJOb3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgaXRlbS5ub3RhdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChub3RhdGlvbkl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHN1Yk5vdGF0aW9uRXhwcmVzc2lvblN0cmluZyArPSAoc3ViTm90YXRpb25FeHByZXNzaW9uU3RyaW5nICE9ICcnID8gJ3wnIDogJycpICsgJygoPzxOPicgKyBub3RhdGlvbkl0ZW0ucmVwbGFjZUFsbCgvXFxzL2dpLCAnXFxcXHMnKS5yZXBsYWNlQWxsKC8oW14wLTlBLXpdKS9naSwgJ1xcXFwkMScpICsgJykoXFxcXHN8W15BLXpdfCQpKSc7XHJcbiAgICAgICAgICAgICAgICBzdWJFeHByZXNzaW9uU3RyaW5nICs9IChzdWJFeHByZXNzaW9uU3RyaW5nICE9ICcnID8gJ3wnIDogJycpICsgJygoPzxWPlswLTlcXFxcLFxcXFwuXSspKFxcXFxufFxcXFxzKSooPzxOPicgKyBub3RhdGlvbkl0ZW0ucmVwbGFjZUFsbCgvXFxzL2dpLCAnXFxcXHMnKS5yZXBsYWNlQWxsKC8oW14wLTlBLXpdKS9naSwnXFxcXCQxJykgKyAnKShcXFxcc3xbXkEtel18JCkpJztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5ub3RhdGlvbkV4cHJlc3Npb25zW2l0ZW0udW5pdF0gPSBuZXcgUmVnRXhwKHN1YkV4cHJlc3Npb25TdHJpbmcsICdnbWknKTtcclxuICAgICAgICAgICAgcmVzdWx0Lm5vdGF0aW9uT25seUV4cHJlc3Npb25zW2l0ZW0udW5pdF0gPSBuZXcgUmVnRXhwKHN1Yk5vdGF0aW9uRXhwcmVzc2lvblN0cmluZywgJ2dtaScpO1xyXG4gICAgICAgICAgICBleHByZXNzaW9uU3RyaW5nICs9IChleHByZXNzaW9uU3RyaW5nICE9ICcnID8gJ3wnIDogJycpICsgJygnICsgc3ViRXhwcmVzc2lvblN0cmluZyArICcpJzsgICAgICAgICAgICBcclxuICAgICAgICAgICAgbm90YXRpb25FeHByZXNzaW9uU3RyaW5nICs9IChub3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgIT0gJycgPyAnfCcgOiAnJykgKyAnKCcgKyBzdWJOb3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgKyAnKSc7IFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlc3VsdC5leHByZXNzaW9uID0gbmV3IFJlZ0V4cChleHByZXNzaW9uU3RyaW5nLCAnZ21pJyk7XHJcbiAgICAgICAgcmVzdWx0Lm5vdGF0aW9uRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAobm90YXRpb25FeHByZXNzaW9uU3RyaW5nLCAnZ21pJyk7XHJcbiAgICAgICAgcmVzdWx0LnZhbHVlRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoJygoPzxWPlswLTlcXFxcLF0rKFxcXFwuWzAtOV0rKT8pKFxcXFxufFxcXFxzKSopJywgJ2dtaScpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gYXR0YWNoQWN0aW9ucygpIHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLmNoYW5nZS5sYW5ndWFnZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlTGFuZ3VhZ2UoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLmNoYW5nZS5jdXJyZW5jeScsIGZ1bmN0aW9uICgpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdXBkYXRlUHJpY2UoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLmNoYW5nZS5tZXNzdXJlbWVudCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlTWVzc3VyZW1lbnQoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhenkucmVmcmVzaCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlTWVzc3VyZW1lbnQoKTtcclxuICAgICAgICB9KTsgICAgICAgIFxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UucmVmcmVzaC5jdXJyZW5jeScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlUHJpY2UoKTsgICAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgIH0gICAgXHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTGFuZ3VhZ2UoKSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuICAgICAgICBpZiAocmVjZW50U3RhdGUgPT0gbnVsbCkgcmVjZW50U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50KTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY3VycmVudD8ubGFuZ3VhZ2UgIT0gcmVjZW50U3RhdGU/Lmxhbmd1YWdlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVjZW50U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50KTtcclxuXHJcbiAgICAgICAgdmFyIGxhYmVscyA9IGF3YWl0IGdldExhbmd1YWdlTGFiZWxzKCk7ICAgICAgICAgICBcclxuICAgICAgICBpZiAoY3VycmVudD8ubGFuZ3VhZ2UgJiYgbGFiZWxzLkxvY2FsZS5pbmRleE9mKGN1cnJlbnQubGFuZ3VhZ2UpID09IC0xKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHVwZGF0ZVRvU2VydmVyKCdsYW5ndWFnZScpOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsYWJlbHNUb0NoYW5nZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1sLWtdJyk7XHJcbiAgICAgICAgaWYgKGxhYmVsc1RvQ2hhbmdlKVxyXG4gICAgICAgICAgICBsYWJlbHNUb0NoYW5nZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7IHVwZGF0ZUxhbmd1YWdlTGFiZWwoaXRlbSwgbGFiZWxzLkxhYmVscyk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldExhbmd1YWdlTGFiZWxzRnJvbVN0b3JlKCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50TGFiZWxzU3RyaW5nID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdMT0NBTExBQkVMUycpO1xyXG4gICAgICAgIHZhciBjdXJyZW50TGFiZWxzID0gbnVsbDtcclxuICAgICAgICBpZiAoY3VycmVudExhYmVsc1N0cmluZyAhPSBudWxsKVxyXG4gICAgICAgICAgICBjdXJyZW50TGFiZWxzID0gSlNPTi5wYXJzZShjdXJyZW50TGFiZWxzU3RyaW5nKTtcclxuICAgICAgICByZXR1cm4gY3VycmVudExhYmVscztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBzZXRMYW5ndWFnZVRvU3RvcmUoY3VycmVudExhYmVscykge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTE9DQUxMQUJFTFMnLCBKU09OLnN0cmluZ2lmeShjdXJyZW50TGFiZWxzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VMYWJlbHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRMYWJlbHMgPSBhd2FpdCBnZXRMYW5ndWFnZUxhYmVsc0Zyb21TdG9yZSgpO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudExhYmVscyAhPSBudWxsKSB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdmFyIGV4cGlyeSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBleHBpcnkuc2V0SG91cnMoZXhwaXJ5LmdldEhvdXJzKCkgLSAxKTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXcgRGF0ZShjdXJyZW50TGFiZWxzLnVwZGF0ZWRPbikgPiBleHBpcnkgJiYgY3VycmVudExhYmVscy5Mb2NhbGUuaW5kZXhPZihjdXJyZW50Lmxhbmd1YWdlKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjdXJyZW50TGFiZWxzKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudExhYmVscyA9IGF3YWl0IEdFVCgnL3NlcnZpY2VzL2Fnb3JhQ2xpZW50LmFzaHgnLCB7IHR5cGU6ICdMQUJFTFMnIH0pO1xyXG4gICAgICAgICAgICBjdXJyZW50TGFiZWxzLnVwZGF0ZWRPbiA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIHNldExhbmd1YWdlVG9TdG9yZShjdXJyZW50TGFiZWxzKTtcclxuICAgICAgICAgICAgcmVzb2x2ZShjdXJyZW50TGFiZWxzKTtcclxuICAgICAgICB9KTsgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHZhciBleHByZXNzaW9uRm9yQXR0cmlidXRlID0gL2FnXFwtbFxcLWtcXC0oPzxBdHRyaWJ1dGU+W15cXD1dKykvZ207XHJcbiAgICB2YXIgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlID0gL1xcWyg/PExhYmVsSUQ+W15cXF1dKylcXF0vZ207XHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVMYW5ndWFnZUxhYmVsKGl0ZW0sIGxhYmVscykge1xyXG4gICAgICAgIHZhciBrZXkgPSBpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1rJyk7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gbnVsbDtcclxuICAgICAgICBpZiAobGFiZWxzW2tleV0gfHwgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZE5vZGVzICYmIGl0ZW0uY2hpbGROb2Rlcy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLmxhc3RJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25Gb3JBdHRyaWJ1dGVWYWx1ZS5sYXN0SW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Q29udGVudCA9IGtleTsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBleHByZXNzaW9uRm9yQXR0cmlidXRlVmFsdWUuZXhlYyh0ZXh0Q29udGVudCkpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudC5yZXBsYWNlKG1hdGNoWzBdLCBsYWJlbHNbbWF0Y2guZ3JvdXBzLkxhYmVsSURdID8gbGFiZWxzW21hdGNoLmdyb3Vwcy5MYWJlbElEXS5sYmwgOiAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jaGlsZE5vZGVzWzBdLnRleHRDb250ZW50ID0gdGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGROb2Rlc1swXS50ZXh0Q29udGVudCA9IGxhYmVsc1trZXldID8gbGFiZWxzW2tleV0ubGJsIDogJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobGFiZWxzW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZHVtbXlOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGR1bW15Tm9kZS5pbm5lckhUTUwgPSBsYWJlbHNba2V5XS5sYmw7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hIdG1sV2l0aExhYmVsKGl0ZW0sIGR1bW15Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW0uYXR0cmlidXRlcy5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSBpdGVtLmF0dHJpYnV0ZXNbaV07ICAgICAgICAgIFxyXG4gICAgICAgICAgICBleHByZXNzaW9uRm9yQXR0cmlidXRlLmxhc3RJbmRleCA9IDA7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICgobWF0Y2ggPSBleHByZXNzaW9uRm9yQXR0cmlidXRlLmV4ZWMoYXR0cmlidXRlLm5hbWUpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlSWRlbnRpZmllciA9IG1hdGNoLmdyb3Vwcy5BdHRyaWJ1dGU7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGUudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLmV4ZWMoYXR0cmlidXRlVmFsdWUpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS5yZXBsYWNlKG1hdGNoWzBdLCBsYWJlbHNbbWF0Y2guZ3JvdXBzLkxhYmVsSURdP2xhYmVsc1ttYXRjaC5ncm91cHMuTGFiZWxJRF0ubGJsOicnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKGF0dHJpYnV0ZUlkZW50aWZpZXIsIGF0dHJpYnV0ZVZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBtYXRjaEh0bWxXaXRoTGFiZWwoaXRlbSwgZG9tKSB7ICAgICAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChkb20uY2hpbGROb2Rlc1tpXT8udGV4dENvbnRlbnQgJiYgaXRlbS5jaGlsZE5vZGVzW2ldPy50ZXh0Q29udGVudClcclxuICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGROb2Rlc1tpXS50ZXh0Q29udGVudCA9IGRvbS5jaGlsZE5vZGVzW2ldPy50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaSA8IGRvbS5jaGlsZE5vZGVzLmxlbmd0aCAmJiBpIDwgaXRlbS5jaGlsZE5vZGVzLmxlbmd0aClcclxuICAgICAgICAgICAgICAgIG1hdGNoSHRtbFdpdGhMYWJlbChpdGVtLmNoaWxkTm9kZXNbaV0sIGRvbS5jaGlsZE5vZGVzW2ldKTtcclxuICAgICAgICAgICAgZWxzZSByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByaWNlKGlzSW5pdCkge1xyXG4gICAgICAgIHZhciBjdXJyZW5jaWVzID0gYXdhaXQgZ2V0Q29udmVydGlvblJhdGVzKCk7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuICAgICAgICBpZiAoY3VycmVudC5jdXJyZW5jeSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVuY3kgPSBjdXJyZW5jaWVzLlJhdGVzPy5FeGNoYW5nZVJhdGVzPy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGl0ZW0uQ29kZSA9PSBjdXJyZW50LmN1cnJlbmN5OyB9KVswXTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbmN5TWV0YSA9IGxhbmd1YWdlU291cmNlcy5jdXJyZW5jaWVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5jb2RlID09IGN1cnJlbnQuY3VycmVuY3k7IH0pWzBdO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVuY3lNZXRhKVxyXG4gICAgICAgICAgICAgICAgY3VycmVuY3kuZm9ybWF0dGVyID0gY29udmVydEZvcm1hdFRvRXhwcmVzc2lvbihjdXJyZW5jeU1ldGEuZm9ybWF0KTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRDdXJyZW5jeSA9IGN1cnJlbmN5LkNvZGU7XHJcbiAgICAgICAgICAgIHZhciBwcmljZVRvQ2hhbmdlID0gaXNJbml0ID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtcF06bm90KC5pcy1hcHBsaWVkKScpIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtcF0nKTtcclxuICAgICAgICAgICAgaWYgKHByaWNlVG9DaGFuZ2UpXHJcbiAgICAgICAgICAgICAgICBwcmljZVRvQ2hhbmdlLmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGl0ZW0pIHsgaWYgKGl0ZW0uaW5uZXJIVE1MLmluZGV4T2YoJ3t7JykgPiAtMSkgcmV0dXJuOyB1cGRhdGVJdGVtT2Zmc2V0Q2xhc3MoaXRlbSk7IGl0ZW0uY2xhc3NMaXN0LmFkZCgnaXMtYXBwbGllZCcpOyB1cGRhdGVQcmljZUZvckl0ZW0oaXRlbSwgY3VycmVuY3ksIGN1cnJlbnRDdXJyZW5jeSk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVJdGVtT2Zmc2V0Q2xhc3MoaXRlbSkge1xyXG4gICAgICAgIGlmICghaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLWFwcGxpZWQnKSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudE9mZnNldCA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRDb2xsZWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIHBhcmVudE9mZnNldCA9IChwYXJlbnRDb2xsZWN0aW9uID0gaXRlbS5jbG9zZXN0KCdhcnRpY2xlJykpICE9IG51bGwgJiYgcGFyZW50Q29sbGVjdGlvbi5sZW5ndGggPiAwID8gcGFyZW50Q29sbGVjdGlvblswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IGl0ZW0ucGFyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRQb2ludHMgPSB7IHk6IChwYXJlbnRPZmZzZXQudG9wICsgcGFyZW50T2Zmc2V0LmJvdHRvbSkgLyAyLCB4OiAocGFyZW50T2Zmc2V0LmxlZnQgKyBwYXJlbnRPZmZzZXQucmlnaHQpIC8gMiB9O1xyXG4gICAgICAgICAgICB2YXIgaXRlbVBvaW50cyA9IHsgeTogKGN1cnJlbnRPZmZzZXQudG9wICsgY3VycmVudE9mZnNldC5ib3R0b20pIC8gMiwgeDogKGN1cnJlbnRPZmZzZXQubGVmdCArIGN1cnJlbnRPZmZzZXQucmlnaHQpIC8gMiB9O1xyXG4gICAgICAgICAgICB2YXIgY2xhc3NBeGlzID0gJ2FnLWwtcC1wJztcclxuICAgICAgICAgICAgY2xhc3NBeGlzICs9ICctJyArIChwYXJlbnRQb2ludHMueCA+IGl0ZW1Qb2ludHMueCA/ICdsJyA6ICdyJyk7XHJcbiAgICAgICAgICAgIGNsYXNzQXhpcyArPSAnLScgKyAocGFyZW50UG9pbnRzLnkgPiBpdGVtUG9pbnRzLnkgPyAnYicgOiAndCcpO1xyXG4gICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NBeGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0Q29udmVydGlvblJhdGVzKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHZhciBjb252ZXJ0aW9uUmF0ZXNTdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQ09OVkVSVElPTlJBVEVTJyk7XHJcbiAgICAgICAgICAgIHZhciBjb252ZXJ0aW9uUmF0ZXMgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoY29udmVydGlvblJhdGVzU3RvcmVkICYmIGNvbnZlcnRpb25SYXRlc1N0b3JlZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29udmVydGlvblJhdGVzID0gSlNPTi5wYXJzZShjb252ZXJ0aW9uUmF0ZXNTdG9yZWQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGV4cGlyeSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBleHBpcnkuc2V0RGF0ZShleHBpcnkuZ2V0RGF0ZSgpIC0gMSk7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKG5ldyBEYXRlKGNvbnZlcnRpb25SYXRlcy51cGRhdGVkT24pID4gZXhwaXJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjb252ZXJ0aW9uUmF0ZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb252ZXJ0aW9uUmF0ZXMgPSBhd2FpdCBHRVQoJy9zZXJ2aWNlcy9hZ29yYUNsaWVudC5hc2h4JywgeyB0eXBlOiAnQ09OVkVSVElPTlJBVEVTJyB9KTtcclxuICAgICAgICAgICAgY29udmVydGlvblJhdGVzLnVwZGF0ZWRPbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0NPTlZFUlRJT05SQVRFUycsIEpTT04uc3RyaW5naWZ5KGNvbnZlcnRpb25SYXRlcykpO1xyXG4gICAgICAgICAgICByZXNvbHZlKGNvbnZlcnRpb25SYXRlcyk7XHJcbiAgICAgICAgfSk7ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZXhwcmVzc2lvbkZvclByaWNlID0gLygoW15BLXowLTldfFtBLVpdfFtBLVpdezN9KSpcXHM/WzAtOVxcLFxcLl0rKS9nbTtcclxuXHJcbiAgICBmdW5jdGlvbiBjb252ZXJ0Rm9ybWF0VG9FeHByZXNzaW9uKGZvcm1hdCkge1xyXG4gICAgICAgIHZhciBmb3JtYXRTdHJpbmcgPSBmb3JtYXQucmVwbGFjZSgvWyNcXCxcXC5dKy9naSwnJyk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFN0cmluZyArIG51bWJlci50b0xvY2FsZVN0cmluZygnZW4tVVMnKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByaWNlRm9ySXRlbShpdGVtLCBjdXJyZW5jeSwgY3VycmVudEN1cnJlbmN5KSB7ICAgICAgICBcclxuICAgICAgICB2YXIgaXNEZWZhdWx0Q3VycmVuY3lDaGFuZ2UgPSBpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wLWMnKSAhPSBudWxsICYmIGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAtbycpID09IG51bGw7IFxyXG4gICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wLWMnKSA9PSBjdXJyZW50Q3VycmVuY3kgJiYgaXNEZWZhdWx0Q3VycmVuY3lDaGFuZ2UpIHJldHVybjsgICAgICAgIFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gaXRlbS5jaGlsZE5vZGVzW2ldLCBtYXRjaCA9IG51bGw7XHJcbiAgICAgICAgICAgIGV4cHJlc3Npb25Gb3JQcmljZS5sYXN0SW5kZXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAobm9kZS50ZXh0Q29udGVudCAmJiAobWF0Y2ggPSBleHByZXNzaW9uRm9yUHJpY2UuZXhlYyhub2RlLnRleHRDb250ZW50KSkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmYXVsdEN1cnJlbmN5Q2hhbmdlKSBpdGVtLnNldEF0dHJpYnV0ZSgnYWctbC1wLW8nLCBtYXRjaFswXSk7XHJcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uRm9yUHJpY2UubGFzdEluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIHZhciBwcmljZUNvbnZlcnRlZCA9IE1hdGgucm91bmQocGFyc2VGbG9hdChpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wJykpICogY3VycmVuY3kuQ29uc3RhbnQpOyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50LnJlcGxhY2UobWF0Y2hbMF0sIGN1cnJlbmN5LmZvcm1hdHRlciA/IGN1cnJlbmN5LmZvcm1hdHRlcihwcmljZUNvbnZlcnRlZCkgOiBwcmljZUNvbnZlcnRlZC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZU1lc3N1cmVtZW50KGlzSW5pdCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7XHJcbiAgICAgICAgdmFyIGlzQXBwbGllZCA9IGN1cnJlbnQubWVzc3VyZW1lbnQgPT0gJ21ldHJpYyc7XHJcbiAgICAgICAgdmFyIG1lc3N1cmVtZW50c1RvQ2hhbmdlID0gaXNBcHBsaWVkID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtbV06bm90KC5pcy1hcHBsaWVkKScpIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtbV0nKTtcclxuICAgICAgICBpZiAoaXNBcHBsaWVkKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1lc3N1cmVtZW50c1RvQ2hhbmdlKSBtZXNzdXJlbWVudHNUb0NoYW5nZS5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChpdGVtKSB7IGlmIChpdGVtLmlubmVySFRNTC5pbmRleE9mKCd7eycpID4gLTEpIHJldHVybjsgdXBkYXRlSXRlbU1lc3N1cmVtZW50KGl0ZW0sIGl0ZW0pOyBpdGVtLmNsYXNzTGlzdC5hZGQoJ2lzLWFwcGxpZWQnKTsgfSk7XHJcbiAgICAgICAgICAgIH0sIGlzSW5pdD81MDA6MCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG1lc3N1cmVtZW50c1RvQ2hhbmdlKSBtZXNzdXJlbWVudHNUb0NoYW5nZS5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChpdGVtKSB7IGlmIChpdGVtLmlubmVySFRNTC5pbmRleE9mKCd7eycpID4gLTEpIHJldHVybjsgaXRlbS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UubWVzc3VyZW1lbnQucmV2ZXJ0JykpOyBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFwcGxpZWQnKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUl0ZW1NZXNzdXJlbWVudChpdGVtLHJvb3RFbGVtZW50LCBpc0luaXQsIGlzVW5pdEZvdW5kLCB1bml0KSB7XHJcblxyXG4gICAgICAgIGlmIChpc1VuaXRGb3VuZCAmJiB1bml0KSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZE5vZGVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmNoaWxkTm9kZXMuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoY2hpbGROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZT8udGV4dENvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUZXh0ID0gY2hpbGROb2RlLnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZVJlc3VsdCA9IGF3YWl0IHJlcGxhY2VNZXNzdXJlbWVudFdpdGhVbml0KGNoaWxkTm9kZS50ZXh0Q29udGVudCwgMiwgdW5pdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS50ZXh0Q29udGVudCA9IHJlcGxhY2VSZXN1bHQuY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLm1lc3N1cmVtZW50LnJldmVydCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUudGV4dENvbnRlbnQgPSBjdXJyZW50VGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmluZE1lc3N1cmVtZW50RnJvbUF0dHJpYnV0ZShpdGVtKSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudExhYmVsID0gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmdldExhYmVsRm9yQXR0cmlidXRlKGl0ZW0pO1xyXG4gICAgICAgICAgICB2YXIgbGFiZWxSZXBsYWNlUmVzdWx0ID0gYXdhaXQgcmVwbGFjZU1lc3N1cmVtZW50KGN1cnJlbnRMYWJlbCwgMSk7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5zZXRMYWJlbEZvckF0dHJpYnV0ZShpdGVtLCBsYWJlbFJlcGxhY2VSZXN1bHQuY29udGVudCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEuZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoaXRlbSk7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZVJlcGxhY2VSZXN1bHQgPSBhd2FpdCByZXBsYWNlTWVzc3VyZW1lbnRXaXRoVW5pdChjdXJyZW50VmFsdWUsIDIsIGxhYmVsUmVwbGFjZVJlc3VsdC51bml0c1swXSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5zZXRWYWx1ZUZvckF0dHJpYnV0ZShpdGVtLCB2YWx1ZVJlcGxhY2VSZXN1bHQuY29udGVudCk7XHJcbiAgICAgICAgICAgIHJvb3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLm1lc3N1cmVtZW50LnJldmVydCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5zZXRMYWJlbEZvckF0dHJpYnV0ZShpdGVtLCBjdXJyZW50TGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLnNldFZhbHVlRm9yQXR0cmlidXRlKGl0ZW0sIGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZE5vZGVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmNoaWxkTm9kZXMuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoY2hpbGROb2RlKSB7ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlPy50ZXh0Q29udGVudCAmJiBmaW5kTWVzc3VyZW1lbnRGcm9tTm9kZShjaGlsZE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VGV4dCA9IGNoaWxkTm9kZS50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcGxhY2VSZXN1bHQgPSBhd2FpdCByZXBsYWNlTWVzc3VyZW1lbnQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwbGFjZVJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUudGV4dENvbnRlbnQgPSByZXBsYWNlUmVzdWx0LmNvbnRlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVJlc3VsdCA9IGF3YWl0IHJlcGxhY2VNZXNzdXJlbWVudChjaGlsZE5vZGUudGV4dENvbnRlbnQsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLnRleHRDb250ZW50ID0gcmVwbGFjZVJlc3VsdC5jb250ZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW1NZXNzdXJlbWVudChjaGlsZE5vZGUucGFyZW50RWxlbWVudCwgcm9vdEVsZW1lbnQsIGZhbHNlLCB0cnVlLCByZXBsYWNlUmVzdWx0LnVuaXRzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdhZy5sYW5ndWFnZS5tZXNzdXJlbWVudC5yZXZlcnQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUudGV4dENvbnRlbnQgPSBjdXJyZW50VGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbU1lc3N1cmVtZW50KGNoaWxkTm9kZSwgcm9vdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmaW5kTWVzc3VyZW1lbnRGcm9tTm9kZShpdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5leHByZXNzaW9uLnRlc3QoaXRlbS50ZXh0Q29udGVudCkgfHwgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLm5vdGF0aW9uRXhwcmVzc2lvbi50ZXN0KGl0ZW0udGV4dENvbnRlbnQpOyAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZmluZE1lc3N1cmVtZW50RnJvbUF0dHJpYnV0ZShpdGVtKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgdmFyIG1hdGNoID0gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmhhdmVWYWxpZEF0dHJpYnV0ZShpdGVtKSA/IGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5nZXRMYWJlbEZvckF0dHJpYnV0ZShpdGVtKS5tYXRjaChsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEubm90YXRpb25FeHByZXNzaW9uKSA6IG51bGw7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIHJldHVybiBtYXRjaCAhPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VNZXNzdXJlbWVudChjb250ZW50LCBtb2RlKSB7XHJcbiAgICAgICAgdmFyIHVuaXRzID0gW107XHJcbiAgICAgICAgdmFyIHJlcGxhY2VTdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFtb2RlKSBtb2RlID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpdGVtIG9mIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvbnMpIHtcclxuICAgICAgICAgICAgdmFyIHJlcGxhY2VVbml0UmVzdWx0ID0gYXdhaXQgcmVwbGFjZU1lc3N1cmVtZW50V2l0aFVuaXQoY29udGVudCwgbW9kZSwgaXRlbSk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSByZXBsYWNlVW5pdFJlc3VsdC5jb250ZW50O1xyXG4gICAgICAgICAgICByZXBsYWNlU3VjY2VzcyB8PSByZXBsYWNlVW5pdFJlc3VsdC5zdWNjZXNzO1xyXG4gICAgICAgICAgICBpZiAocmVwbGFjZVVuaXRSZXN1bHQuc3VjY2VzcylcclxuICAgICAgICAgICAgICAgIHVuaXRzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5ub3RhdGlvbkV4cHJlc3Npb25zW2l0ZW0udW5pdF0ubGFzdEluZGV4ID0gLTE7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5ub3RhdGlvbk9ubHlFeHByZXNzaW9uc1tpdGVtLnVuaXRdLmxhc3RJbmRleCA9IC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBjb250ZW50OiBjb250ZW50LCBzdWNjZXNzOiByZXBsYWNlU3VjY2VzcywgdW5pdHM6IHVuaXRzIH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZU1lc3N1cmVtZW50V2l0aFVuaXQoY29udGVudCwgbW9kZSwgaXRlbSkge1xyXG4gICAgICAgIHZhciBtYXRjaCA9IG51bGw7XHJcbiAgICAgICAgdmFyIG1hdGNoU3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgIHdoaWxlICgobWF0Y2ggPSBnZXRSZXBsYWNlTWVzc3VyZW1lbnRFeHByZXNzaW9uTWF0Y2goY29udGVudCwgaXRlbSwgbW9kZSkpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0Y2hTdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gbW9kZSA9PSAxID8gMCA6IHBhcnNlRmxvYXQobGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmdldFZhbHVlKG1hdGNoLmdyb3Vwcy5WKSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciB1bml0ID0gbWF0Y2guZ3JvdXBzLk47XHJcbiAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gbWF0Y2guaW5kZXg7XHJcbiAgICAgICAgICAgIHZhciBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciBtYXRjaFZhbHVlID0gKG1vZGUgIT0gMSA/IG1hdGNoWzBdLnJlcGxhY2VBbGwobWF0Y2guZ3JvdXBzLlYsIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5mb3JtYXRWYWx1ZSgodmFsdWUgKiBpdGVtLmNvbnN0YW50KSkpIDogbWF0Y2hbMF0pLnJlcGxhY2VBbGwodW5pdCwgaXRlbS50cmFnZXRVbml0KTtcclxuICAgICAgICAgICAgaWYgKG1vZGUgPT0gMiAmJiBpdGVtLnRhcmdldE5vdGF0aW9uKSBtYXRjaFZhbHVlICs9ICcgJyArIGl0ZW0udGFyZ2V0Tm90YXRpb247XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZygwLCBzdGFydEluZGV4KSArIG1hdGNoVmFsdWUgKyBjb250ZW50LnN1YnN0cmluZyhlbmRJbmRleCk7XHJcbiAgICAgICAgICAgIGlmIChtb2RlID09IDIpIHJldHVybiB7IGNvbnRlbnQ6IGNvbnRlbnQsIHN1Y2Nlc3M6IG1hdGNoU3VjY2VzcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBjb250ZW50OiBjb250ZW50LCBzdWNjZXNzOiBtYXRjaFN1Y2Nlc3MgfTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRSZXBsYWNlTWVzc3VyZW1lbnRFeHByZXNzaW9uTWF0Y2godmFsdWUsIGl0ZW0sIG1vZGUpIHtcclxuICAgICAgICBpZiAobW9kZSA9PSAwKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEubm90YXRpb25FeHByZXNzaW9uc1tpdGVtLnVuaXRdLmV4ZWModmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSAxKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEubm90YXRpb25Pbmx5RXhwcmVzc2lvbnNbaXRlbS51bml0XS5leGVjKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gMikge1xyXG4gICAgICAgICAgICBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEudmFsdWVFeHByZXNzaW9uLmxhc3RJbmRleCA9IC0xO1xyXG4gICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLnZhbHVlRXhwcmVzc2lvbi5leGVjKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGVuYWJsZUxhbmd1YWdlU2VsZWN0b3IoaXRlbSkge1xyXG4gICAgICAgIGdldEZsYWdDc3NDbGFzcygnVVMnKS5zcGxpdCgnICcpLm1hcChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7IGl0ZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOyB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLnVwZGF0ZScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGl0ZW0uY2xhc3NOYW1lID0gaXRlbS5jbGFzc05hbWUucmVwbGFjZSgvZmZsYWdcXC1bQS1aXXsxLDJ9L2dpLCAnJyk7XHJcbiAgICAgICAgICAgIGdldEZsYWdDc3NDbGFzcyhlLmRldGFpbC5jb2RlKS5zcGxpdCgnICcpLm1hcChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7IGl0ZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOyB9KTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmICghc2VsZWN0b3JFbGVtZW50KSBzZWxlY3RvckVsZW1lbnQgPSBhd2FpdCByZW5kZXJMYW5ndWFnZVNlbGVjdG9yKCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGVuZ2FnZUxhbmd1YWdlU2VsZWN0b3IoaXRlbSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBkaXNlbmdhZ2VBY3Rpb25MaXN0ZW5lcik7XHJcbiAgICAgICAgfSk7ICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZGlzZW5nYWdlQWN0aW9uTGlzdGVuZXIoZSkgeyAgICAgICAgXHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBpZiAoZS50YXJnZXQuY2xvc2VzdCgnW2FnLWxhbmd1YWdlLXNlbGVjdF0sW2FnLWxhbmd1YWdlXScpID09IG51bGwpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGRpc2VuZ2FnZUFjdGlvbkxpc3RlbmVyKTtcclxuICAgICAgICAgICAgZGlzZW5nYWdlTGFuZ3VhZ2VTZWxlY3RvcihlLnRhcmdldCk7XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZW5nYWdlTGFuZ3VhZ2VTZWxlY3RvcihpdGVtKSB7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUuc3R5bGUudG9wID0gTWF0aC5mbG9vcihwb3NpdGlvbi50b3AgLSA4KSArICdweCc7XHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUuc3R5bGUucmlnaHQgPSAnY2FsYygxMDAlIC0gJyArIE1hdGguZmxvb3IocG9zaXRpb24ucmlnaHQgKyA4KSArICdweCknO1xyXG4gICAgICAgIHNlbGVjdG9yRWxlbWVudC5ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5hY3RpdmUnKT8uZm9yRWFjaChmdW5jdGlvbiAoYWN0aXZlSXRlbSkgeyBhY3RpdmVJdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOyB9KVxyXG4gICAgICAgIHNlbGVjdG9yRWxlbWVudC5ub2RlLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGRpc2VuZ2FnZUxhbmd1YWdlU2VsZWN0b3IoaXRlbSkgeyAgICAgICAgXHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0RmxhZ0Nzc0NsYXNzKGNvZGUpIHtcclxuICAgICAgICByZXR1cm4gJ2ZmbGFnIGZmLWxnIGZmbGFnLScgKyBjb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldCgpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSB3aW5kb3cubG9jYWxTdG9yYWdlWydBR0xBTkdVQUdFJ107XHJcbiAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHt9O1xyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPSAnJykgY3VycmVudFZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdXBkYXRlVG9zZXJ2ZXJDYWxsID0gbnVsbDtcclxuICAgIHZhciB1cGRhdGVTdWNjZXMgPSBudWxsO1xyXG5cclxuICAgIGZ1bmN0aW9uIHNldChmaWVsZCwgdmFsdWUpIHsgICAgICAgIFxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7ICAgICAgICBcclxuICAgICAgICBpZiAoY3VycmVudCA9PSB1bmRlZmluZWQpIGN1cnJlbnQgPSB7fTtcclxuICAgICAgICBpZiAoY3VycmVudFtmaWVsZF0gJiYgY3VycmVudFtmaWVsZF0gPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICBjdXJyZW50W2ZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQUdMQU5HVUFHRScsIEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpKTtcclxuXHJcbiAgICAgICAgLy9UaHJvdHRsaW5nXHJcbiAgICAgICAgaWYgKHVwZGF0ZVRvc2VydmVyQ2FsbCAhPSBudWxsKSBjbGVhclRpbWVvdXQodXBkYXRlVG9TZXJ2ZXIpO1xyXG4gICAgICAgIHVwZGF0ZVRvc2VydmVyQ2FsbCA9IHNldFRpbWVvdXQoYXN5bmMgZnVuY3Rpb24gKCkgeyB1cGRhdGVUb3NlcnZlckNhbGwgPSBudWxsOyBhd2FpdCB1cGRhdGVUb1NlcnZlcihmaWVsZCk7IGlmICh1cGRhdGVTdWNjZXMgIT0gbnVsbCkgeyB1cGRhdGVTdWNjZXMoKTsgdXBkYXRlU3VjY2VzID0gbnVsbDsgfSB9LCAxMDApO1xyXG4gICAgICAgIHZhciBvbGRVcGRhdGVTdWNjZXNzID0gdXBkYXRlU3VjY2VzO1xyXG4gICAgICAgIHVwZGF0ZVN1Y2NlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG9sZFVwZGF0ZVN1Y2Nlc3MgIT0gbnVsbCkgb2xkVXBkYXRlU3VjY2VzcygpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS5jaGFuZ2UuJyArIGZpZWxkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVRvU2VydmVyKGZpZWxkKSB7ICAgICAgICBcclxuICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShjdXJyZW50U2V0dGluZ3MpICE9IEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTZXR0aW5ncyA9IGN1cnJlbnQ7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgd2luZG93LmFnUmVxdWVzdC5QT1NUKCcvc2VydmljZXMvYWdvcmFDbGllbnQuYXNoeCcsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiAnU0VUJyB9LCBjdXJyZW50KSk7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlbmRlckxhbmd1YWdlU2VsZWN0b3IoKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBuZXcgYygnc3BhbicpO1xyXG4gICAgICAgIHZhciBsb2NhdGlvbkVsZW1lbnQgPSBlbGVtZW50Lm4oJ3NwYW4nKTsgICAgICAgIFxyXG4gICAgICAgIHZhciBsb2NhdGlvbkZsYWc7XHJcbiAgICAgICAgdmFyIGxhbmd1YWdlRWxlbWVudDtcclxuICAgICAgICBmdW5jdGlvbiByZW5kZXJMYW5ndWFnZUVsZW1lbnQobGFuZ3VhZ2VzKSB7ICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlbmRlckNob2ljZUxpc3QobGFuZ3VhZ2VFbGVtZW50LCAnTGFuZ3VhZ2UnLCAnbGFuZ3VhZ2UnLCBsYW5ndWFnZXMsIGZ1bmN0aW9uIChpdGVtRWxlbWVudCwgc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbUVsZW1lbnQuaChzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsKTtcclxuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2VJdGVtPyhzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsKTonJztcclxuICAgICAgICAgICAgfSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlckNob2ljZUxpc3QobG9jYXRpb25FbGVtZW50LCAnTG9jYXRpb24nLCdjb2RlJywgbGFuZ3VhZ2VTb3VyY2VzLnByZXNldHMsIGZ1bmN0aW9uIChpdGVtRWxlbWVudCwgc291cmNlSXRlbSkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpdGVtRWxlbWVudC5uKCdpJykuYSgnY2xhc3MnLCBnZXRGbGFnQ3NzQ2xhc3Moc291cmNlSXRlbS5jb2RlKSk7XHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50Lm4oJ2InKS5oKHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWwpO1xyXG5cclxuICAgICAgICB9LCBmdW5jdGlvbiAoc291cmNlSXRlbSxpc0V2ZW50KSB7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uRmxhZy5hKCdjbGFzcycsIGdldEZsYWdDc3NDbGFzcyhzb3VyY2VJdGVtLmNvZGUpKTtcclxuICAgICAgICAgICAgcmVuZGVyTGFuZ3VhZ2VFbGVtZW50KGxhbmd1YWdlU291cmNlcy5sYW5ndWFnZXMuZmlsdGVyKGZ1bmN0aW9uIChsYW5ndWFnZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc291cmNlSXRlbS5sYW5ndWFnZSkgPyBzb3VyY2VJdGVtLmxhbmd1YWdlLmluZGV4T2YobGFuZ3VhZ2UuY29kZSkgPiAtMSA6IGxhbmd1YWdlLmNvZGUgPT0gc291cmNlSXRlbS5sYW5ndWFnZTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICBpZiAoIWlzRXZlbnQpXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUnLCB7IGRldGFpbDogc291cmNlSXRlbSB9KSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvY2F0aW9uRmxhZyA9IGxvY2F0aW9uRWxlbWVudC5uKCdpJyk7XHJcblxyXG4gICAgICAgIGxhbmd1YWdlRWxlbWVudCA9IGVsZW1lbnQubignc3BhbicpOyAgICAgXHJcblxyXG4gICAgICAgIHJlbmRlckxhbmd1YWdlRWxlbWVudChsYW5ndWFnZVNvdXJjZXMubGFuZ3VhZ2VzKTtcclxuXHJcbiAgICAgICAgdmFyIGN1cnJlbmN5RWxlbWVudCA9IGVsZW1lbnQubignc3BhbicpO1xyXG4gICAgICAgIHJlbmRlckNob2ljZUxpc3QoY3VycmVuY3lFbGVtZW50LCAnQ3VycmVuY3knLCAnY3VycmVuY3knLCBsYW5ndWFnZVNvdXJjZXMuY3VycmVuY2llcywgZnVuY3Rpb24gKGl0ZW1FbGVtZW50LCBzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50Lmgoc291cmNlSXRlbS5sb2NhbExhYmVsID8gc291cmNlSXRlbS5sb2NhbExhYmVsIDogc291cmNlSXRlbS5sYWJlbCk7XHJcbiAgICAgICAgfSwgZnVuY3Rpb24gKHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWw7XHJcbiAgICAgICAgfSk7ICBcclxuXHJcbiAgICAgICAgdmFyIHByb3BlcnR5TWVzc3VyZW1lbnRFbGVtZW50ID0gZWxlbWVudC5uKCdzcGFuJyk7XHJcbiAgICAgICAgcmVuZGVyQ2hvaWNlTGlzdChwcm9wZXJ0eU1lc3N1cmVtZW50RWxlbWVudCwgJ1Byb3BlcnR5IE1lc3N1cmVtZW50JywgJ21lc3N1cmVtZW50JywgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRzLCBmdW5jdGlvbiAoaXRlbUVsZW1lbnQsIHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgaXRlbUVsZW1lbnQuaChzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsKTtcclxuICAgICAgICB9LCBmdW5jdGlvbiAoc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc291cmNlSXRlbS5sb2NhbExhYmVsID8gc291cmNlSXRlbS5sb2NhbExhYmVsIDogc291cmNlSXRlbS5sYWJlbDtcclxuICAgICAgICB9KTsgIFxyXG5cclxuICAgICAgICB2YXIgZGlzdGFuY2VNZXNzdXJlbWVudEVsZW1lbnQgPSBlbGVtZW50Lm4oJ3NwYW4nKTtcclxuICAgICAgICByZW5kZXJDaG9pY2VMaXN0KGRpc3RhbmNlTWVzc3VyZW1lbnRFbGVtZW50LCAnRGlzdGFuY2UgTWVzc3VyZW1lbnQnLCAnbWVzc3VyZW1lbnQnLCBsYW5ndWFnZVNvdXJjZXMudW5pdHMsIGZ1bmN0aW9uIChpdGVtRWxlbWVudCwgc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICBpdGVtRWxlbWVudC5oKHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWwpO1xyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsO1xyXG4gICAgICAgIH0pOyAgICAgICAgICBcclxuXHJcbiAgICAgICAgZWxlbWVudC5ub2RlLnNldEF0dHJpYnV0ZSgnYWctbGFuZ3VhZ2Utc2VsZWN0JywnJyk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50Lm5vZGUpO1xyXG5cclxuICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50Py5jb2RlKVxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUnLCB7IGRldGFpbDogY3VycmVudCB9KSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnMgPSB7fTtcclxuXHJcbiAgICBmdW5jdGlvbiByZW5kZXJDaG9pY2VMaXN0KGl0ZW0sIHRpdGxlLCBmaWVsZCwgc291cmNlLCByZW5kZXJJdGVtLCBzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICB2YXIgZmllbGRLZXkgPSB0aXRsZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teQS16MC05XS9naSwgJycpO1xyXG4gICAgICAgIHZhciByZW5kZXJFeGlzdCA9IHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ2l0ZW1MaXN0JyArIGZpZWxkS2V5XSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICBpZiAoIXJlbmRlckV4aXN0KVxyXG4gICAgICAgICAgICBpdGVtLmgodGl0bGUpO1xyXG4gICAgICAgIHZhciBpdGVtTGlzdCA9IHJlbmRlckV4aXN0ID8gcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3QnICsgZmllbGRLZXldIDogKHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ2l0ZW1MaXN0JyArIGZpZWxkS2V5XSA9IGl0ZW0ubignc3BhbicpKTtcclxuICAgICAgICB2YXIgaXRlbUxpc3RWYWx1ZSA9IHJlbmRlckV4aXN0ID8gcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3RWYWx1ZScgKyBmaWVsZEtleV0gOiAocmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3RWYWx1ZScgKyBmaWVsZEtleV0gPSBpdGVtTGlzdC5uKCdsYWJlbCcpKTtcclxuICAgICAgICBpdGVtTGlzdFZhbHVlLmgoJ1NlbGVjdGVkIFZhbHVlJyk7XHJcbiAgICAgICAgaWYgKCFyZW5kZXJFeGlzdCkge1xyXG4gICAgICAgICAgICB2YXIgaXRlbUNsaWNrRnVuY3Rpb24gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHNlbGVjdG9yRWxlbWVudC5ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5hY3RpdmUnKT8uZm9yRWFjaChmdW5jdGlvbiAoYWN0aXZlSXRlbSkgeyBpZiAoYWN0aXZlSXRlbSAhPSBpdGVtTGlzdFZhbHVlLm5vZGUpIGFjdGl2ZUl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1MaXN0VmFsdWUubm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSBpdGVtTGlzdFZhbHVlLm5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGl0ZW1MaXN0VmFsdWUubm9kZS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaXRlbUxpc3RWYWx1ZS5jbChpdGVtQ2xpY2tGdW5jdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpdGVtT3B0aW9ucyA9IHJlbmRlckV4aXN0ID8gcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbU9wdGlvbnMnICsgZmllbGRLZXldIDogKHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ2l0ZW1PcHRpb25zJyArIGZpZWxkS2V5XSA9IGl0ZW1MaXN0Lm4oJ3NwYW4nKSk7XHJcbiAgICAgICAgaXRlbU9wdGlvbnMuaCgnJyk7XHJcbiAgICAgICAgc291cmNlLm1hcChmdW5jdGlvbiAoc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICB2YXIgY2hvaWNlSXRlbSA9IGl0ZW1PcHRpb25zLm4oJ2xhYmVsJyk7XHJcbiAgICAgICAgICAgIGNob2ljZUl0ZW0uY2woZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaXRlbUxpc3RWYWx1ZS5ub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgc2V0KGZpZWxkLCBzb3VyY2VJdGVtLmNvZGUpO1xyXG4gICAgICAgICAgICAgICAgaXRlbUxpc3RWYWx1ZS5oKHNlbGVjdGVkSXRlbShzb3VyY2VJdGVtKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZW5kZXJJdGVtKGNob2ljZUl0ZW0sIHNvdXJjZUl0ZW0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQgIT0gJycpIHsgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIGlmICghcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snR2VuZXJhbCcgKyBmaWVsZEtleV0pIHtcclxuICAgICAgICAgICAgICAgIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ0dlbmVyYWwnICsgZmllbGRLZXldID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUuJyArIGZpZWxkS2V5LCB7IGRldGFpbDogZS5kZXRhaWwgfSkpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLnVwZGF0ZScsIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ0dlbmVyYWwnICsgZmllbGRLZXldKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFyZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydGaWVsZCcgKyBmaWVsZEtleV0pIHtcclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydGaWVsZCcgKyBmaWVsZEtleV0gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50SXRlbSA9IGUuZGV0YWlsO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBjdXJyZW50SXRlbVtmaWVsZF07ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSA/IGN1cnJlbnRWYWx1ZVswXSA6IGN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRJdGVtRnJvbVNvdXJjZSA9IHNvdXJjZS5maW5kKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmNvZGUgPT0gc2VsZWN0ZWRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldChmaWVsZCwgc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0VmFsdWUuaChzZWxlY3RlZEl0ZW0oc2VsZWN0ZWRJdGVtRnJvbVNvdXJjZSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYW5ndWFnZS51cGRhdGUuJyArIGZpZWxkS2V5LCByZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydGaWVsZCcgKyBmaWVsZEtleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjKG5hbWUpIHtcclxuICAgICAgICB0aGlzLm5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLmEgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLm5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLm4gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBpdGVtID0gbmV3IGMobmFtZSk7XHJcbiAgICAgICAgdGhpcy5ub2RlLmFwcGVuZENoaWxkKGl0ZW0ubm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9ICAgIFxyXG5cclxuICAgIGMucHJvdG90eXBlLmggPSBmdW5jdGlvbiAodGV4dCkgeyAgICAgICAgXHJcbiAgICAgICAgdGhpcy5ub2RlLmlubmVySFRNTCA9IHRleHQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUuY2wgPSBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYWN0aW9uKTtcclxuICAgICAgICB0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhY3Rpb24pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIEdFVChzZXJ2aWNlVXJsLCBkYXRhKSB7XHJcbiAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gJyc7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZyArICgocXVlcnlTdHJpbmcgIT0gJycgPyAnJicgOiAnJykgKyBrZXkgKyAnPScgKyBkYXRhW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXJ2aWNlVXJsICs9IHNlcnZpY2VVcmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycgKyBxdWVyeVN0cmluZztcclxuICAgICAgICB2YXIgcmVxdWVzdCA9IGF3YWl0IGZldGNoKHNlcnZpY2VVcmwsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBjYWNoZTogXCJuby1jYWNoZVwiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVxdWVzdC5qc29uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgd2luZG93LmFnTGFuZ3VhZ2UgPSB7XHJcbiAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS5yZWZyZXNoLmN1cnJlbmN5JykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgaW5pdCgpO1xyXG5cclxufSkoKTtcclxuXHJcblxyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnW2RhdGEtY2stcHJvcGVydHlsaXN0XSBbZGF0YS1zb3J0LW9iamVjdD1cIkNNTkNNTlwiXScsIHt9LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgR2V0UHJvcGVydGllcygkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWNrLXByb3BlcnR5bGlzdF06Zmlyc3QnKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eS11cmxdOmZpcnN0JykuZGF0YSgnY2stcHJvcGVydHktdXJsJyksICQodGhpcykucGFyZW50cygnW2RhdGEtY2stcHJvcGVydHlsaXN0XTpmaXJzdCcpLmRhdGEoJ2NrLWRlbWFuZC1rZXknKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eWxpc3RdOmZpcnN0JykuZGF0YSgnY2stZGVtYW5kLWxheW91dCcpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIEdldFByb3BlcnRpZXMoJHRoaXMsIHVybCwgZGVtYW5kS2V5LCBsYXlvdXQpIHtcclxuICAgICAgICB2YXIgaXNFZGl0TW9kZSA9ICR0aGlzLmNsb3Nlc3QoJ2Rpdltjb250ZW50ZWRpdGFibGVdJykuYXR0cignY29udGVudGVkaXRhYmxlJyk7XHJcbiAgICAgICAgaWYgKCFpc0VkaXRNb2RlICYmIHR5cGVvZiAodXJsKSAhPSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgKGRlbWFuZEtleSkgIT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgLy9TaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICBsYXlvdXQgPSAodHlwZW9mIChsYXlvdXQpICE9ICd1bmRlZmluZWQnID8gbGF5b3V0IDogXCJnYWxsZXJ5XCIpO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGxheW91dC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZ2FsbGVyeVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciAkc29ydCA9ICR0aGlzLmZpbmQoJ1tkYXRhLXNvcnQtb2JqZWN0PVwiQ01OQ01OXCJdJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgkc29ydCAhPSAndW5kZWZpbmVkJyAmJiAkc29ydCAhPSBudWxsICYmICRzb3J0Lmxlbmd0aCA+IDApIHx8ICF1cmwubWF0Y2goLyhefFxcLykoZCk/c29ydFxcLVthLXpdKy9nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gKF9nZXRDTU5DTU5Tb3J0QnkoJHRoaXMpICsgJy8nICsgKHVybC5yZXBsYWNlKCdodHRwOi8vJywgJycpLnJlcGxhY2UoLyhefFxcLykoZCk/c29ydFxcLVthLXpdKy9nLCAnJykpKS5yZXBsYWNlKCcvLycsICcvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvc2VydmljZXMvTUFYL2Fnb3JhR2V0R2FsbGVyeVZpZXcuYXNweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgVXJsUXVlcnk6IHVybCwgVHlwZU9mU2VhcmNoOiAnU0FMRScsIElzQ29udGVudFBhZ2U6IFwidHJ1ZVwiLCBEZW1hbmRLZXk6IGRlbWFuZEtleSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2h0bWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0VkaXRNb2RlID0gJHRoaXMuY2xvc2VzdCgnZGl2W2NvbnRlbnRlZGl0YWJsZV0nKS5hdHRyKCdjb250ZW50ZWRpdGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFZGl0TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkaHRtbCA9ICc8c2VjdGlvbiBjbGFzcz1cInJlc3VsdC1wYWdlXCIgZGF0YS1jay1wcm9wZXJ0eWxpc3Q9XCJcIiBkYXRhLWNrLWRlbWFuZC1rZXk9XCInICsgZGVtYW5kS2V5ICsgJ1wiIGRhdGEtY2stcHJvcGVydHktdXJsPVwiJyArIHVybCArICdcIiBkYXRhLWNrLWRlbWFuZC1sYXlvdXQ9XCInICsgbGF5b3V0ICsgJ1wiPicgKyByZXNwb25zZSArICc8L3NlY3Rpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5hZnRlcigkaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodHlwZW9mIChjb21wb25lbnRIYW5kbGVyKSA9PSAndW5kZWZpbmVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SGFuZGxlci51cGdyYWRlRG9tKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ1tkYXRhLWNrLWRlbWFuZC1rZXk9XCInICsgZGVtYW5kS2V5ICsgJ1wiXSAjcHJvcGVydHlHcmlkJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnByb3BlcnR5Om5vdCguaW5pdCknKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFByb3BlcnR5SW1hZ2VHYWxsZXJ5KCQodGhpcykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWdMYXp5LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJjYXJvdXNlbFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnL3NlcnZpY2VzL2Fnb3JhR2V0Q2Fyb3VzZWxJdGVtLmFzcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IFVybFF1ZXJ5OiB1cmwsIFR5cGVPZlNlYXJjaDogJ1NBTEUnLCBJc0NvbnRlbnRQYWdlOiBcInRydWVcIiwgRGVtYW5kS2V5OiBkZW1hbmRLZXkgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdodG1sJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNFZGl0TW9kZSA9ICR0aGlzLmNsb3Nlc3QoJ2Rpdltjb250ZW50ZWRpdGFibGVdJykuYXR0cignY29udGVudGVkaXRhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGh0bWwgPSAnPHNlY3Rpb24gY2xhc3M9XCJyZXN1bHQtcGFnZVwiIGRhdGEtY2stcHJvcGVydHlsaXN0PVwiXCIgZGF0YS1jay1kZW1hbmQta2V5PVwiJyArIGRlbWFuZEtleSArICdcIiBkYXRhLWNrLXByb3BlcnR5LXVybD1cIicgKyB1cmwgKyAnXCIgZGF0YS1jay1kZW1hbmQtbGF5b3V0PVwiJyArIGxheW91dCArICdcIj4nICsgcmVzcG9uc2UgKyAnPC9zZWN0aW9uPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuYWZ0ZXIoJGh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ1tkYXRhLXF1ZXJ5LWxpc3RdOm5vdCguaW5pdClbZGF0YS1zZXJ2aWNlLXVybF1bZGF0YS1ydF49XCJDTU5cIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS50cmlnZ2VyKCdpbml0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2luaXQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0eXBlb2YgKGNvbXBvbmVudEhhbmRsZXIpID09ICd1bmRlZmluZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRIYW5kbGVyLnVwZ3JhZGVEb20oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gX2dldENNTkNNTlNvcnRCeSgkcGFyZW50KSB7XHJcbiAgICAgICAgdmFyICRzb3J0ID0gJHBhcmVudC5maW5kKCdbZGF0YS1zb3J0LW9iamVjdD1cIkNNTkNNTlwiXScpO1xyXG4gICAgICAgIGlmICgkc29ydCAhPSAndW5kZWZpbmVkJyAmJiAkc29ydCAhPSBudWxsICYmICRzb3J0Lmxlbmd0aCA+IDAgJiYgSXNOb3ROdWxsKCRzb3J0LnZhbCgpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJHNvcnQudmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBHZXREZWZhdWx0U29ydEZvclJlY29yZFR5cGUoJ1BST1BFUlRZJyk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gR2V0UHJvcGVydHlJbWFnZUdhbGxlcnkoJHRoaXMpIHtcclxuICAgIHZhciAkaXRlbUNvbnRleHQgPSAkdGhpcztcclxuICAgIHZhciAkc2xpZGVDb250ZXh0ID0gJGl0ZW1Db250ZXh0LmZpbmQoJy5zbGlkZXMnKTtcclxuICAgICRzbGlkZUNvbnRleHQuYXR0cignZGF0YS1jc3Mtc2xpZGVyJywgJzAnKTtcclxuICAgIHZhciBtbHNOdW1iZXIgPSAkaXRlbUNvbnRleHQuZmluZCgnW2RhdGEtbWtdJykuZGF0YSgnbWsnKTtcclxuICAgIHZhciBtbHNCb2FyZCA9ICRpdGVtQ29udGV4dC5maW5kKCdbZGF0YS1tbHNib2FyZF0nKS5kYXRhKCdtbHNib2FyZCcpO1xyXG4gICAgdmFyIHVybCA9ICRpdGVtQ29udGV4dC5maW5kKCdbZGF0YS1kZXRhaWwtdXJsXScpLmRhdGEoJ2RldGFpbC11cmwnKTtcclxuICAgIHZhciBwcm9qZWN0Q29kZSA9ICQoJ1tkYXRhLXBjb2RlXScpLmRhdGEoJ3Bjb2RlJyk7XHJcbiAgICB2YXIgaW1hZ2VUZW1wbGF0ZSA9ICRpdGVtQ29udGV4dC5maW5kKCdbZGF0YS1tbHMtcGhvdG9dJykuZGF0YSgnbWxzLXBob3RvJyk7XHJcbiAgICB2YXIgbmF0aXZlVGFiID0gJGl0ZW1Db250ZXh0LmZpbmQoJ1tkYXRhLW5hdGl2ZS10YWJdJykuZGF0YSgnbmF0aXZlLXRhYicpO1xyXG4gICAgaWYgKCFJc05vdE51bGwoaW1hZ2VUZW1wbGF0ZSkpIGltYWdlVGVtcGxhdGUgPSAnL2ltYWdlcy9jb21wYW55LycgKyBwcm9qZWN0Q29kZSArICcvTm9QaG90b0ltYWdlL2ltYWdlLW5vdC1mb3VuZC5qcGcnO1xyXG4gICAgdmFyIGNvdW50ID0gcGFyc2VJbnQoJHNsaWRlQ29udGV4dC5kYXRhKCd2YWx1ZScpLCAxMCk7XHJcbiAgICB2YXIgJGl0ZW1XaXRoSURDb250ZXh0ID0gJGl0ZW1Db250ZXh0LmNsb3Nlc3QoJ1tpZF0nKTtcclxuICAgIHZhciB1SUQgPSAkaXRlbUNvbnRleHQubGVuZ3RoID09IDAgPyBcInVuXCIgOiAkaXRlbVdpdGhJRENvbnRleHQuYXR0cignaWQnKS5yZXBsYWNlKC9cXCQvZ2ksICcnKTtcclxuICAgIGJ1aWxkRmlyc3RUZW1wbGF0ZShpbWFnZVRlbXBsYXRlLCBjb3VudCwgdUlEICsgbmV3IERhdGUoKS5nZXRNaWxsaXNlY29uZHMoKSwgbWxzQm9hcmQsIG1sc051bWJlciwgJHNsaWRlQ29udGV4dCwgdXJsLCBuYXRpdmVUYWIpO1xyXG4gICAgJGl0ZW1Db250ZXh0LmFkZENsYXNzKCdpbml0Jyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJ1aWxkRmlyc3RUZW1wbGF0ZSh0ZW1wbGF0ZSwgY291bnQsIHVJRCwgbWxzQm9hcmQsIG1sc051bWJlciwgJHNsaWRlQ29udGV4dCwgdXJsLCBuYXRpdmVUYWIpIHtcclxuICAgIHZhciBpID0gMCwgcHJlZml4ID0gKHVJRCArIG1sc0JvYXJkICsgbWxzTnVtYmVyICsgJ18nKTtcclxuICAgICQoJzxpbnB1dCB0eXBlPVwicmFkaW9cIiBhcmlhLWxhYmVsPVwiJyArIChwcmVmaXggKyAnc2xpZGVyJykgKyAnXCIgIG5hbWU9XCInICsgKHByZWZpeCArICdzbGlkZXInKSArICdcIiBpZD1cIicgKyAocHJlZml4ICsgaSkgKyAnXCIgY2hlY2tlZCAvPicpLmFwcGVuZFRvKCRzbGlkZUNvbnRleHQpO1xyXG4gICAgdmFyICRuYXZpZ2F0aW9ucyA9ICQoJzxkaXYgY2xhc3M9XCJuYXZcIj48L2Rpdj4nKTtcclxuICAgIC8vdmFyICRuZXh0ID0gJCgnPGxhYmVsIGRhdGEtY3NzLXNsaWRlci1uYXY9XCJwcm9wcGhvdG9cIiBmb3I9XCInICsgKHByZWZpeCArIChpICsgMSkpICsgJ1wiIGNsYXNzPVwibmV4dFwiPjwvbGFiZWw+Jyk7XHJcbiAgICAvL3ZhciAkcHJldiA9ICQoJzxsYWJlbCBkYXRhLWNzcy1zbGlkZXItbmF2PVwicHJvcHBob3RvXCIgZm9yPVwiJyArIChwcmVmaXggKyAocGFyc2VJbnQoY291bnQsIDEwKSAtIDEpKSArICdcIiBjbGFzcz1cInByZXZcIj48L2xhYmVsPicpO1xyXG4gICAgdmFyICRuZXh0ID0gJCgnPGxhYmVsIGFyaWEtbGFiZWw9XCJuZXh0XCIgYXJpYS1jb250cm9scz1cIm15Q2Fyb3VzZWwtaXRlbXNcIiBkYXRhLWNzcy1zbGlkZXItbmF2PVwicHJvcHBob3RvXCIgZm9yPVwiJyArIChwcmVmaXggKyAoaSArIDEpKSArICdcIiAgY2xhc3M9XCJuZXh0XCI+PHNwYW4gYXJpYS1sYWJlbD1cIm5leHRcIiBjbGFzcz1cInZpc3VhbGx5aGlkZGVuXCI+bmV4dDwvc3Bhbj48L2xhYmVsPicpO1xyXG4gICAgdmFyICRwcmV2ID0gJCgnPGxhYmVsIGFyaWEtbGFiZWw9XCJwcmV2XCIgYXJpYS1jb250cm9scz1cIm15Q2Fyb3VzZWwtaXRlbXNcIiBkYXRhLWNzcy1zbGlkZXItbmF2PVwicHJvcHBob3RvXCIgZm9yPVwiJyArIChwcmVmaXggKyAocGFyc2VJbnQoY291bnQsIDEwKSAtIDEpKSArICdcIiBjbGFzcz1cInByZXZcIj48c3BhbiBhcmlhLWxhYmVsPVwicHJldlwiIGNsYXNzPVwidmlzdWFsbHloaWRkZW5cIj5wcmV2PC9zcGFuPjwvbGFiZWw+Jyk7XHJcbiAgICAkcHJldi5vbignY2xpY2snLCBfbG9hZE1vcmUpO1xyXG4gICAgJG5leHQub24oJ2NsaWNrJywgX2xvYWRNb3JlKTtcclxuICAgICRwcmV2LmFwcGVuZFRvKCRuYXZpZ2F0aW9ucyk7XHJcbiAgICAkbmV4dC5hcHBlbmRUbygkbmF2aWdhdGlvbnMpO1xyXG4gICAgaWYgKCQoJ1tkYXRhLXBjb2RlXScpLmRhdGEoJ3Bjb2RlJykgPT0gJ1BTQicpIHsgdmFyIHRhcmdldCA9ICcnOyB9IGVsc2UgeyB2YXIgdGFyZ2V0ID0gJ3RhcmdldCA9IFwiX2JsYW5rXCInOyB9XHJcbiAgICBpZiAobmF0aXZlVGFiICE9ICd1bmRlZmluZWQnICYmIG5hdGl2ZVRhYiAhPSAnJyAmJiBuYXRpdmVUYWIgPT0gMSlcclxuICAgICAgICB0YXJnZXQgPSAnJztcclxuICAgIHZhciAkbm9kZSA9ICQoJzxsaSBjbGFzcz1cInNsaWRlLWNvbnRhaW5lclwiIGFyaWEtcm9sZWRlc2NyaXB0aW9uPVwiY2Fyb3VzZWxcIiByb2xlPVwiY29udGVudGluZm9cIj48ZGl2IGNsYXNzPVwic2xpZGVcIj48ZGl2IGNsYXNzPVwiUHJvcF9pbWdcIiByb2xlPVwiaW1nXCIgYXJpYS1sYWJlbD1cImJhbm5lckltYWdlXCIgIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTp1cmwoXFwnJyArIHRlbXBsYXRlICsgJ1xcJyk7XCI+PGEgYXJpYS1sYWJlbD1cIicgKyAocHJlZml4ICsgJ3NsaWRlcicpICsgJ1wiJyArIHRhcmdldCArICdocmVmPVwiJyArIHVybCArICdcIj48L2E+PC9kaXY+PC9kaXY+PC9saT4nKTtcclxuICAgICRub2RlLmFwcGVuZCgkbmF2aWdhdGlvbnMpO1xyXG4gICAgJG5vZGUuYXBwZW5kVG8oJHNsaWRlQ29udGV4dCk7XHJcbiAgICBmdW5jdGlvbiBfbG9hZE1vcmUoKSB7XHJcbiAgICAgICAgdmFyICRzZW5kZXIgPSAkKHRoaXMpO1xyXG4gICAgICAgICRwcmV2Lm9mZignY2xpY2snKTtcclxuICAgICAgICAkbmV4dC5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJC5hamF4KHsgdXJsOiAnL3NlcnZpY2VzL2Fnb3JhUHJvcGVydHlQaG90b3MuYXNweCcsIGRhdGE6IHsgbWxzYm9hcmQ6IG1sc0JvYXJkLCBtbHNubzogbWxzTnVtYmVyLCBjb250YWluZXI6IHByZWZpeCB9LCBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHsgJHNsaWRlQ29udGV4dC5hcHBlbmQocmVzcG9uc2UpOyAkc2VuZGVyLnRyaWdnZXIoJ2NsaWNrJyk7IH0gfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmFnb3JhKGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIEFEQSBDb21wbGFpbmNlcyAvLyBjYW5jZWwgYnV0dG9uIHdvcmtpbmdcclxuICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1mb3JdXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIF9mb3IgPSAkKHRoaXMpLmRhdGEoJ2ZvcicpO1xyXG4gICAgICAgICAgICAkKCdbZm9yPVwiJyArIF9mb3IgKyAnXCJdJykudHJpZ2dlcihcImNsaWNrXCIpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgfSk7XHJcbiAgICAvLyBFTkRcclxufSk7XHJcblxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHZhciBpc1N5bmNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcudXNlci5pbicsIGZ1bmN0aW9uIChlKSB7XHJcblxyXG4gICAgICAgIHNldChlLmRldGFpbCk7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy51c2VyLm91dCcsIGZ1bmN0aW9uIChlKSB7XHJcblxyXG4gICAgICAgIHNldChudWxsKTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXQoKSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgIGlmICh3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0FHVVNFUicpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgY3VycmVudCA9IEpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdBR1VTRVInKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gc2V0KHVzZXIpIHtcclxuICAgICAgICBpZiAodXNlciA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnQUdVU0VSJyk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnVzZXIuY2xlYXInKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodXNlci5HdWlkKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG9jYWxVc2VyID0ge307XHJcbiAgICAgICAgICAgICAgICBsb2NhbFVzZXIuR3VpZCA9IHVzZXIuR3VpZDtcclxuICAgICAgICAgICAgICAgIGxvY2FsVXNlci5OYW1lID0gdXNlci5OYW1lO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxVc2VyLkZpcnN0TmFtZSA9IHVzZXIuRmlyc3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxVc2VyLkxhc3ROYW1lID0gdXNlci5MYXN0TmFtZTtcclxuICAgICAgICAgICAgICAgIGxvY2FsVXNlci5FbWFpbCA9IHVzZXIuRW1haWw7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFVzZXIuUGhvbmUgPSB1c2VyLlBob25lO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxVc2VyLk1vYmlsZVBob25lID0gdXNlci5Nb2JpbGVQaG9uZTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQUdVU0VSJywgSlNPTi5zdHJpbmdpZnkobG9jYWxVc2VyKSk7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGUoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlbmRlcigpIHsgICAgICAgIFxyXG4gICAgICAgIHZhciB1c2VyU3RhdGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLXVzZXJdJyk7XHJcbiAgICAgICAgdXNlclN0YXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7IHJlbmRlclN0YXRlcyhpdGVtKTsgfSk7IFxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlbmRlclN0YXRlcyhpdGVtKSB7XHJcblxyXG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnaXMtYXBwbGllZCcpOyAgICAgICAgXHJcbiAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IGl0ZW0uY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gYXdhaXQgZ2V0KCk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpbml0UHJvcGVydHlDb2xsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHZhciBsb2dnaW5lZE5vZGUgPSBhd2FpdCBnZXRMb2dpbmVkSXRlbShjdXJyZW50KTtcclxuICAgICAgICAgICAgaXRlbS5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShsb2dnaW5lZE5vZGUsIGl0ZW0pO1xyXG4gICAgICAgICAgICBpdGVtLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBpbml0UHJvcGVydHlDb2xsZWN0aW9uKCkgeyAgICAgICAgXHJcbiAgICAgICAgaWYgKGlzU3luY2VkKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVByb3BlcnR5Q29sbGVjdGlvbigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcuc3luYy52ZXJpZmllZC5jb250YWN0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlUHJvcGVydHlDb2xsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhenkucmVmcmVzaCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlUHJvcGVydHlDb2xsZWN0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy51c2VyLnJlZnJlc2guY29sbGVjdGlvbicsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlUHJvcGVydHlDb2xsZWN0aW9uKHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcudXNlci5jbGVhci5jb2xsZWN0aW9uJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ0FHVVNFUkNPTExFQ1RJT04zJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy51c2VyLmNsZWFyJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy51c2VyLmNsZWFyLmNvbGxlY3Rpb24nKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHJvcGVydHlDb2xsZWN0aW9uKGlzRm9yY2VkKSB7XHJcbiAgICAgICAgdmFyIGNvbGxlY3Rpb25UeXBlID0gMztcclxuICAgICAgICB2YXIgaXRlbXMgPSBhd2FpdCBnZXRQcm9wZXJ0eUNvbGxlY3Rpb24oY29sbGVjdGlvblR5cGUsIGlzRm9yY2VkKTtcclxuICAgICAgICB2YXIgaXRlbXNFeHRyYWN0ZWQgPSBpdGVtcy5JdGVtcy5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwgY3VycmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8gWy4uLnJlc3VsdCwgLi4uY3VycmVudC5JdGVtc10gOiBbLi4uY3VycmVudC5JdGVtc107XHJcbiAgICAgICAgfSwgW10pO1xyXG4gICAgICAgIGl0ZW1zRXh0cmFjdGVkLmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmVuZGVyUHJvcGVydHlDb2xsZWN0aW9uSXRlbShpdGVtLCBjb2xsZWN0aW9uVHlwZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVuZGVyUHJvcGVydHlDb2xsZWN0aW9uSXRlbShpdGVtLHR5cGUpIHtcclxuICAgICAgICB2YXIgaXRlbURvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXBlcmZvcm0tYWN0aW9uLXVybCo9XCJwaz0nICsgaXRlbS5QSyArICdcIl1bZGF0YS1wZXJmb3JtLWFjdGlvbi11cmwqPVwicnQ9JyArIGl0ZW0uUlQgKyAnXCJdJyk7ICAgICAgICBcclxuICAgICAgICBpdGVtRG9tLmZvckVhY2goYXN5bmMgZnVuY3Rpb24oZG9tKSB7XHJcbiAgICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoJ2FnLXVzZXItY29sbGVjdGlvbicsIHR5cGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldFByb3BlcnR5Q29sbGVjdGlvbihjb2xsZWN0aW9uVHlwZSwgaXNGb3JjZWQpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICB2YXIgcHJvcGVydHlDb2xsZWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5Q29sbGVjdGlvblN0cmluZyA9IGlzRm9yY2VkID8gbnVsbCA6IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQUdVU0VSQ09MTEVDVElPTicgKyBjb2xsZWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eUNvbGxlY3Rpb25TdHJpbmcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlDb2xsZWN0aW9uID0gSlNPTi5wYXJzZShwcm9wZXJ0eUNvbGxlY3Rpb25TdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShwcm9wZXJ0eUNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByb3BlcnR5Q29sbGVjdGlvbiA9IGF3YWl0IHdpbmRvdy5hZ1JlcXVlc3QuR0VUKCcvc2VydmljZXMvYWdvcmFDbGllbnQuYXNoeCcsIHsgdHlwZTogJ1VTRVJDT0xMRUNUSU9OJywgY29sbGVjdGlvblR5cGU6IGNvbGxlY3Rpb25UeXBlIH0pO1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0FHVVNFUkNPTExFQ1RJT04nICsgY29sbGVjdGlvblR5cGUsIEpTT04uc3RyaW5naWZ5KHByb3BlcnR5Q29sbGVjdGlvbikpO1xyXG4gICAgICAgICAgICByZXNvbHZlKHByb3BlcnR5Q29sbGVjdGlvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldExvZ2luZWRJdGVtKGNvbnRhY3QpIHtcclxuICAgICAgICB2YXIgd3JhcHBlciA9IG5ldyBjKCdwJyk7XHJcbiAgICAgICAgd3JhcHBlci5hKCdhZy11c2VyJywnJyk7XHJcbiAgICAgICAgdmFyIHVzZXJDb250YWluZXIgPSB3cmFwcGVyLm4oJ2J1dHRvbicpO1xyXG4gICAgICAgIHVzZXJDb250YWluZXIuYSgnY2xhc3MnLCAndXNlci1sb2dnZWQtaW4gYS1iLTEgZi1zLTIgdS1sb2dpbmVkIHMtYy1wIG0tbC0xNiB4YS1iLXctbCByLWInKTtcclxuICAgICAgICB1c2VyQ29udGFpbmVyLmgoY29udGFjdC5OYW1lKTtcclxuICAgICAgICB1c2VyQ29udGFpbmVyLmNsKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaWYgKHVzZXJDb250YWluZXIubm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyQ29udGFpbmVyLm5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyQ29udGFpbmVyLm5vZGUuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHZhciBvcHRpb25zID0gd3JhcHBlci5uKCdzcGFuJyk7XHJcbiAgICAgICAgb3B0aW9ucy5uKCdzcGFuJykuaCgnSGksICcgKyBjb250YWN0Lk5hbWUpO1xyXG4gICAgICAgIG9wdGlvbnMubignaW5wdXQnKS5hKCd0eXBlJywgJ2hpZGRlbicpLmEoJ2lkJywgJ0NPTlRBQ1RfR1VJRCcpLmEoJ3ZhbHVlJywgY29udGFjdC5HdWlkKTtcclxuICAgICAgICBvcHRpb25zLm4oJ2EnKS5hKCdocmVmJywgJy9kYXNoYm9hcmQvZGVmYXVsdC5hc3B4JykuaCgnRGFzaGJvYXJkJyk7XHJcbiAgICAgICAgb3B0aW9ucy5uKCdzcGFuJykuYSgnZGF0YS1tb2RhbGRpYWxvZy1zcmMnLCAnL2Rhc2hib2FyZC9FZGl0UHJvZmlsZS5hc3B4JykuYSgnZGF0YS1tb2RhbGRpYWxvZy1hamF4JywgJ3RydWUnKS5hKCdkYXRhLW1vZGFsZGlhbG9nJywnJykuaCgnRWRpdCBQcm9maWxlJyk7XHJcbiAgICAgICAgb3B0aW9ucy5uKCdhJykuYSgnaHJlZicsICcvZGFzaGJvYXJkL1NpZ25PdXQuYXNweCcpLmEoJ2RhdGEtYWdvcmEtaWNvbicsICfupLEnKS5oKCdMb2cgb3V0JykuY2woZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy51c2VyLm91dCcpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gd3JhcHBlci5ub2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGMobmFtZSkge1xyXG4gICAgICAgIHRoaXMubm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUuYSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUubiA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSBuZXcgYyhuYW1lKTtcclxuICAgICAgICB0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoaXRlbS5ub2RlKTtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH1cclxuXHJcbiAgICBjLnByb3RvdHlwZS5oID0gZnVuY3Rpb24gKHRleHQpIHtcclxuICAgICAgICB0aGlzLm5vZGUuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBjLnByb3RvdHlwZS5jbCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB0aGlzLm5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhY3Rpb24pO1xyXG4gICAgICAgIHRoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFjdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcclxuICAgICAgICByZW5kZXIoKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnN5bmMuY2hlY2snLCBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gYXdhaXQgZ2V0KCk7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWVzU3RyaW5nID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdBR1NZTkMnKTtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZXNTdHJpbmcgIT0gbnVsbCAmJiBjdXJyZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBKU09OLnBhcnNlKGN1cnJlbnRWYWx1ZXNTdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5Db250YWN0R3VpZCAhPSBjdXJyZW50Lkd1aWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5zeW5jLnNldCcsIHsgZGV0YWlsOiB7IGNvbnRhY3RndWlkOiBjdXJyZW50Lkd1aWQsIGV2ZW50VHlwZTogJ2NvbnRhY3QnIH0gfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5zeW5jLnZlcmlmaWVkLmNvbnRhY3QnKSk7XHJcbiAgICAgICAgICAgIGlzU3luY2VkID0gdHJ1ZTsgICAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5zeW5jLnZlcmlmaWVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5zeW5jLnZlcmlmaWVkLmNvbnRhY3QnKSk7XHJcbiAgICAgICAgICAgIGlzU3luY2VkID0gdHJ1ZTsgICAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cuYWdVc2VyID0ge1xyXG4gICAgICAgIGNvbGxlY3Rpb246IHtcclxuICAgICAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcudXNlci5yZWZyZXNoLmNvbGxlY3Rpb24nKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGluaXQoKTtcclxuXHJcbn0pKCk7XHJcblxyXG4oYXN5bmMgZnVuY3Rpb24gKCkgeyAgICBcclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBjaGVja0ZvclN5bmMoKSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZXNTdHJpbmcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0FHU1lOQycpO1xyXG4gICAgICAgIGlmIChjdXJyZW50VmFsdWVzU3RyaW5nICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IEpTT04ucGFyc2UoY3VycmVudFZhbHVlc1N0cmluZyk7XHJcbiAgICAgICAgICAgIHZhciB1cGRhdGVkT24gPSBuZXcgRGF0ZShjdXJyZW50VmFsdWUudXBkYXRlZE9uKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnREYXRlVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIGN1cnJlbnREYXRlVGltZS5zZXRNaW51dGVzKGN1cnJlbnREYXRlVGltZS5nZXRNaW51dGVzKCkgLSAxKTtcclxuICAgICAgICAgICAgaWYgKHVwZGF0ZWRPbiA+IGN1cnJlbnREYXRlVGltZSkge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy52ZXJpZmllZCcpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICAgIHJlYWRGcm9tU2VydmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVhZEZyb21TZXJ2ZXIoKSB7XHJcbiAgICAgICAgdmFyIGRhdGFUb1JldmlldyA9IGF3YWl0IHdpbmRvdy5hZ1JlcXVlc3QuR0VUKCcvc2VydmljZXMvYWdvcmFDbGllbnQuYXNoeCcsIHsgdHlwZTogJ1NZTkMnIH0pO1xyXG4gICAgICAgIGRhdGFUb1Jldmlldy51cGRhdGVkT24gPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQUdTWU5DJywgSlNPTi5zdHJpbmdpZnkoZGF0YVRvUmV2aWV3KSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy5jaGVjaycpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBpbml0KCkge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcuc3luYy5zZXQnLCBhc3luYyBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBhd2FpdCB3aW5kb3cuYWdSZXF1ZXN0LlBPU1QoJy9zZXJ2aWNlcy9hZ29yYUNsaWVudC5hc2h4JywgT2JqZWN0LmFzc2lnbih7IHR5cGU6ICdTRVQnIH0sIGUuZGV0YWlsKSk7XHJcbiAgICAgICAgICAgIGlmIChlLmRldGFpbD8uZXZlbnRUeXBlKVxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy52ZXJpZmllZC4nICsgZS5kZXRhaWwuZXZlbnRUeXBlKSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcuc3luYy5pbnZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKGUpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy5yZXNldCcpKTtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjaGVja0ZvclN5bmMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCk7XHJcbn0pKCk7XHJcblxyXG5cclxuXHJcblxyXG52YXIgbG9hZEV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KFwib25BZ29yYUxvYWRcIik7XHJcbmRvY3VtZW50LmRpc3BhdGNoRXZlbnQobG9hZEV2ZW50KTtcclxuZG9jdW1lbnQuaXNBZ29yYUxvYWRlZCA9IHRydWU7XHJcbmxvYWRFdmVudCA9IG5ldyBDdXN0b21FdmVudCgnb25Dc3NMb2FkJyk7XHJcbmRvY3VtZW50LmRpc3BhdGNoRXZlbnQobG9hZEV2ZW50KTtcclxuZG9jdW1lbnQuaXNDc3NMb2FkZWQgPSB0cnVlO1xyXG5cclxuRW5hYmxlRGVtYW5kSW1wb3J0KCk7XHJcbkVuYWJsZVNlYXJjaEZvcm0oKTsiLCLvu79cclxuLy8gSW50ZXIgcG9sYXRpb25cclxuKGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgc3lzdGVtRnVuY3Rpb25zID0ge307XHJcblxyXG4gICAgZnVuY3Rpb24gSW50ZXJwb2xhdGlvbihodG1sLCBkb20sIGNvbnRleHQsIGZ1bmN0aW9uQXJnc0xpdGVyYWxzID0gW10sIGZ1bmN0aW9uQXJnc1ZhbHVlcyA9IFtdLCBwYXJlbnRSZW5kZXJGdW5jdGlvbiA9ICgpID0+IHsgfSkge1xyXG4gICAgICAgIGxldCBleHByZXNzaW9uID0gbmV3IFJlZ0V4cCgnXFxcXHtcXFxce1teXFxcXH1dK1xcXFx9XFxcXH0nLCAnZ2knKTtcclxuICAgICAgICBsZXQgcmVuZGVyRnVuY3Rpb25zID0gKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgcGFyZW50UmVuZGVyRnVuY3Rpb24oKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZVN0cmluZyA9ICcnO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgb2YgZG9tLmdldEF0dHJpYnV0ZU5hbWVzKCkpIHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gZG9tLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgYnVpbGRSZW5kZXJGdW5jdGlvbih2YWx1ZSwgKGNvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBkb20uc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5QcmVJbnRlcnBvbGF0aW9uKGRvbSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZG9tLmNoaWxkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xyXG4gICAgICAgICAgICAgICAgSW50ZXJwb2xhdGlvbihodG1sLCBub2RlLCBjb250ZXh0LCBmdW5jdGlvbkFyZ3NMaXRlcmFscywgZnVuY3Rpb25BcmdzVmFsdWVzLCAoKSA9PiB7IH0pO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkRG9tID0gbm9kZTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBvZiBjaGlsZERvbS5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gY2hpbGREb20uZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRSZW5kZXJGdW5jdGlvbih2YWx1ZSwgKGNvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRG9tLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5QcmVJbnRlcnBvbGF0aW9uKGNoaWxkRG9tKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERSAmJiBub2RlLnRleHRDb250ZW50ICE9IG51bGwgJiYgbm9kZS50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUudGV4dENvbnRlbnQuaW5kZXhPZigne3snKSA9PSAwICYmIG5vZGUudGV4dENvbnRlbnQgPT0gbm9kZS5wYXJlbnRFbGVtZW50LmlubmVyVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkUmVuZGVyRnVuY3Rpb24obm9kZS50ZXh0Q29udGVudCwgKGNvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5QcmVJbnRlcnBvbGF0aW9uKG5vZGUucGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50RWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBidWlsZFJlbmRlckZ1bmN0aW9uKG5vZGUudGV4dENvbnRlbnQsIChjb250ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUHJlSW50ZXJwb2xhdGlvbihub2RlLnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRleHRDb250ZW50ID0gY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBjbGVhblByZUludGVycG9sYXRpb24obm9kZSkge1xyXG4gICAgICAgICAgICBpZiAobm9kZSAhPSBudWxsICYmIChub2RlLmNsYXNzTGlzdC5jb250YWlucygnYWdhLWZha2UtY29udGFpbnMnKSB8fCBub2RlLmNsYXNzTGlzdC5jb250YWlucygnYWctZmFrZS1pbmxpbmUtY29udGFpbnMnKSkpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWctZmFrZS1jb250YWlucycpO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1mYWtlLWlubGluZS1jb250YWlucycpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGROb2Rlc1swXS5ub2RlVHlwZSA9PSAxKVxyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGROb2Rlc1swXS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYnVpbGRSZW5kZXJGdW5jdGlvbihpbnB1dFRleHQsIHJlbmRlcikge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGlucHV0VGV4dC5tYXRjaChleHByZXNzaW9uKTtcclxuICAgICAgICAgICAgbGV0IHJlbmRlckJsb2NrID0gKCkgPT4geyByZXR1cm4gJyc7IH07XHJcbiAgICAgICAgICAgIGxldCByZW5kZXJUZW1wbGF0ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlbmRlcihyZW5kZXJCbG9jaygpKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlU3RyaW5nID0gaW5wdXRUZXh0O1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhcmlhYmxlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgbGV0IGlzU3lzdGVtRnVuY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIG1hdGNoZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZGVudGlmaWVyID0gaXRlbS5zdWJzdHJpbmcoMiwgaXRlbS5sZW5ndGggLSAyKTtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVN0cmluZyA9IHRlbXBsYXRlU3RyaW5nLnJlcGxhY2UoaXRlbSwgYFxcJHt0eXBlb2YoJHtpZGVudGlmaWVyfSkhPSd1bmRlZmluZWQnJiYke2lkZW50aWZpZXJ9IT1udWxsPyR7aWRlbnRpZmllcn06Jyd9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxvY2FsVmFyaWFibGVzID0gRXh0cmFjdFZhcmlhYmxlc1RvcExldmVsSWRlbnRpZmllcnMoaWRlbnRpZmllcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLnB1c2goLi4ubG9jYWxWYXJpYWJsZXMuZmlsdGVyKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZXMuaW5kZXhPZih4KSA8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyICE9IHZhcmlhYmxlc1t2YXJpYWJsZXMubGVuZ3RoIC0gMV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFdhdGNoKGRvbSwgY29udGV4dCwgdmFyaWFibGVzW3ZhcmlhYmxlcy5sZW5ndGggLSAxXSwgKGRhdGEsIGlzQ2hhbmdlLCBpZGVudGlmaWVyKSA9PiB7IHJlbmRlclRlbXBsYXRlKCk7IH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoSXNGdW5jdGlvbihzeXN0ZW1GdW5jdGlvbnMsIGlkZW50aWZpZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU3lzdGVtRnVuY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHRyYWN0QXJndW1lbnRWYXJpYWJsZXNGb3JGdW5jdGlvbkZyb21TdHJpbmcoaWRlbnRpZmllcikuZm9yRWFjaChhcmd1bWVudEl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2F0Y2goZG9tLCBjb250ZXh0LCBhcmd1bWVudEl0ZW0sIChkYXRhLCBpc0NoYW5nZSwgaWRlbnRpZmllcikgPT4geyByZW5kZXJUZW1wbGF0ZSgpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFdhdGNoKGRvbSwgY29udGV4dCwgaWRlbnRpZmllciwgKGRhdGEsIGlzQ2hhbmdlLCBpZGVudGlmaWVyKSA9PiB7IHJlbmRlclRlbXBsYXRlKCk7IH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCByZW5kZXJGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbihgdHJ5e2NvbnN0IHske3ZhcmlhYmxlcy5qb2luKCcsJyl9fSA9IHRoaXM7IHJldHVybiBcXGAke3RlbXBsYXRlU3RyaW5nfVxcYDsgfWNhdGNoKGUpeyBjb25zb2xlLmVycm9yKGUpOyB9cmV0dXJuICcnO2ApLmJpbmQoaXNTeXN0ZW1GdW5jdGlvbiA/IGludGVycG9sYXRlT2JqZWN0KGNvbnRleHQpIDogY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJCbG9jayA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyRnVuY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRSZW5kZXJGdW5jdGlvbnMgPSByZW5kZXJGdW5jdGlvbnM7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJGdW5jdGlvbnMgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclRlbXBsYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlbmRlckZ1bmN0aW9ucyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbmRlckZ1bmN0aW9ucyhjb250ZXh0KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaW50ZXJwb2xhdGVPYmplY3QoY29udGV4dCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNvbnRleHQsIHN5c3RlbUZ1bmN0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gUHJlSW50ZXJwb2xhdGlvbihkb20sIHJvb3REb20pIHtcclxuICAgICAgICBpZiAocm9vdERvbSA9PSBudWxsKVxyXG4gICAgICAgICAgICByb290RG9tID0gZG9tO1xyXG4gICAgICAgIGxldCBpc01hc2tlZCA9IHJvb3REb20uaGFzQXR0cmlidXRlKCdhZy1mYWtlJyk7XHJcblxyXG4gICAgICAgIGlmIChpc01hc2tlZCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgb2YgZG9tLmdldEF0dHJpYnV0ZU5hbWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGRvbS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmluZGV4T2YoJ3t7JykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZS5yZXBsYWNlKC8oXFx7XFx7KXwoXFx9XFx9KS9naSwgXCJcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZG9tLmNsYXNzTGlzdC5hZGQoJ2FnLWZha2UtaW5saW5lLWNvbnRhaW5zJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRvbS5jaGlsZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZS5ub2RlTmFtZSAhPSAnT1BUSU9OJykge1xyXG4gICAgICAgICAgICAgICAgUHJlSW50ZXJwb2xhdGlvbihub2RlLCByb290RG9tKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc01hc2tlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBvZiBub2RlLmdldEF0dHJpYnV0ZU5hbWVzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUuaW5kZXhPZigne3snKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlLnJlcGxhY2UoLyhcXHtcXHspfChcXH1cXH0pL2dpLCBcIlwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERSAmJiBub2RlLnRleHRDb250ZW50ICE9IG51bGwgJiYgbm9kZS50ZXh0Q29udGVudC5pbmRleE9mKCd7eycpID4gLTEgJiYgbm9kZS50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZha2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaScpO1xyXG4gICAgICAgICAgICAgICAgZmFrZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYWctZmFrZScpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhcmVudCA9IG5vZGUucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCAmJiAhcGFyZW50LmNsYXNzTGlzdC5jb250YWlucygnYWctZmFrZS1jb250YWlucycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShmYWtlRWxlbWVudCwgcGFyZW50LmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5jbGFzc0xpc3QuYWRkKCdhZy1mYWtlLWNvbnRhaW5zJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWFza2VkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRleHRDb250ZW50ID0gbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKC8oXFx7XFx7KXwoXFx9XFx9KS9naSwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gV2F0Y2goKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIEdldFZhbHVlKGl0ZW0sIHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpIDwgMCAmJiBwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpID4gLTEpIHtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgcHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSk7XHJcbiAgICAgICAgICAgIGxldCBzdWJQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcocHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSArIDEsIHByb3BlcnR5TmFtZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gR2V0VmFsdWUoaXRlbVtjdXJyZW50UHJvcGVydHldLCBzdWJQcm9wZXJ0eSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGlzRnVuY3Rpb24gPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpID4gLTE7XHJcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlRnJvbUZ1bmN0aW9uKGl0ZW0sIHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtICE9IHVuZGVmaW5lZCA/IGl0ZW1bcHJvcGVydHlOYW1lXSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gSXNGdW5jdGlvbihpdGVtLCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICByZXR1cm4gcHJvcGVydHlOYW1lLmluZGV4T2YoJygnKSA+IC0xICYmIHR5cGVvZiAoaXRlbVtnZXRGdW5jdGlvbk5hbWUocHJvcGVydHlOYW1lKV0pID09ICdmdW5jdGlvbic7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gR2V0UHJveHlPYmplY3QoaXRlbSkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIChpdGVtKSA9PSAndW5kZWZpbmVkJyB8fCBpdGVtID09IG51bGwpIHJldHVybiBpdGVtO1xyXG5cclxuICAgICAgICBsZXQgcHJveHlPYmplY3QgPSB7fTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaXRlbVByb3BlcnR5IGluIGl0ZW0pXHJcbiAgICAgICAgICAgIFNldFByb3BlcnR5VG9Qcm94eU9iamVjdChpdGVtLCBwcm94eU9iamVjdCwgaXRlbVByb3BlcnR5KTtcclxuXHJcbiAgICAgICAgLy9MaW5rSXRlbShpdGVtLHByb3h5T2JqZWN0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHByb3h5T2JqZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIFNldFByb3BlcnR5VG9Qcm94eU9iamVjdChpdGVtLCBwcm94eU9iamVjdCwgcHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiAoaXRlbVtwcm9wZXJ0eU5hbWVdKSA9PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgICAgICBwcm94eU9iamVjdFtwcm9wZXJ0eU5hbWVdID0gaXRlbVtwcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHsgZ2V0KCkgeyByZXR1cm4gaXRlbVtwcm9wZXJ0eU5hbWVdOyB9LCBzZXQodmFsdWUpIHsgaXRlbVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7IE5vdGlmeShudWxsLCBpdGVtLCBwcm9wZXJ0eU5hbWUsIHRydWUpOyB9LCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gU2V0UHJvcGVydHlEZXNjcmlwdG9yVG9Qcm94eU9iamVjdChwcm94eU9iamVjdCwgcHJvcGVydHlOYW1lLCBwcm9wZXJ0eURlc2NyaXB0b3IpIHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHlPYmplY3QsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlEZXNjcmlwdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBDb252ZXJPYmplY3RUb0FyZ3VtZW50QXJyYXkoaXRlbSkge1xyXG5cclxuICAgICAgICBsZXQgY29udmVydGVkVmFsdWVzID0geyBhcmd1bWVudHM6IFtdLCB2YWx1ZXM6IFtdIH07XHJcblxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBpdGVtKSB7XHJcbiAgICAgICAgICAgIGNvbnZlcnRlZFZhbHVlcy5hcmd1bWVudHMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZXMudmFsdWVzLnB1c2goaXRlbVtrZXldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjb252ZXJ0ZWRWYWx1ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0QWZ0ZXIoZWwsIHJlZmVyZW5jZU5vZGUpIHtcclxuICAgICAgICBpZiAocmVmZXJlbmNlTm9kZS5wYXJlbnROb2RlICE9IG51bGwpXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWwsIHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluc2VydEJlZm9yZShlbCwgcmVmZXJlbmNlTm9kZSkge1xyXG4gICAgICAgIHJlZmVyZW5jZU5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWwsIHJlZmVyZW5jZU5vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB2YXJpYWJsZXNGcm9tU3RyaW5nRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoJygoPzxzdHJpbmc+KFtcXFwiXFwnXFxgXS4qP1tcXFwiXFwnXFxgXSkpfCg/PGJvb2xlYW4+KHRydWV8ZmFsc2UpKXwoKD88ZnVuY3Rpb24+W0Etel9dW0EtejAtOVxcLlxcJF0rKVtcXChdKXwoPzxpZGVudGlmaWVyPltBLXpfXVtBLXowLTlcXC5cXCRdKykpJywgJ2dpJyk7XHJcbiAgICBsZXQgdmFyaWFibGVUb3BMZXZlbElkZW50aWZpZXJzRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoJyg/PHZhcmlhYmxlPltBLXowLTlfXFxcXCRdKykoKChcXFxcLlteXFxcXHNcXFxcPVxcXFwmXFxcXHxdKil8XFxcXCgpKT8nLCAnZ2knKTtcclxuXHJcbiAgICBmdW5jdGlvbiBFeHRyYWN0VmFyaWFibGVzVG9wTGV2ZWxJZGVudGlmaWVycyh2YWx1YXRpb25TdHJpbmcpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaCA9IG51bGw7XHJcbiAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSB2YXJpYWJsZVRvcExldmVsSWRlbnRpZmllcnNFeHByZXNzaW9uLmV4ZWModmFsdWF0aW9uU3RyaW5nKSkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoLmdyb3Vwcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaC5ncm91cHMudmFyaWFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobWF0Y2guZ3JvdXBzLnZhcmlhYmxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIEV4dHJhY3RWYXJpYWJsZXNGcm9tU3RyaW5nKHZhbHVhdGlvblN0cmluZykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB7IGZ1bmN0aW9uczogW10sIGlkZW50aWZpZXJzOiBbXSB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2ggPSBudWxsO1xyXG4gICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gdmFyaWFibGVzRnJvbVN0cmluZ0V4cHJlc3Npb24uZXhlYyh2YWx1YXRpb25TdHJpbmcpKSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoLmdyb3Vwcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaC5ncm91cHMuaWRlbnRpZmllcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmlkZW50aWZpZXJzLnB1c2gobWF0Y2guZ3JvdXBzLmlkZW50aWZpZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaC5ncm91cHMuZnVuY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5mdW5jdGlvbnMucHVzaChtYXRjaC5ncm91cHMuZnVuY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBFeHRyYWN0QXJndW1lbnRWYXJpYWJsZXNGb3JGdW5jdGlvbkZyb21TdHJpbmcodmFsdWF0aW9uU3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGxldCBmdW5jdGlvbkFyZ3VtZW50cyA9IFtdO1xyXG4gICAgICAgIGxldCBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ID0gdmFsdWF0aW9uU3RyaW5nLmluZGV4T2YoJygnKTtcclxuICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHNFbmQgPSB2YWx1YXRpb25TdHJpbmcuaW5kZXhPZignKScpO1xyXG4gICAgICAgIGxldCBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ID4gLTEgPyB2YWx1YXRpb25TdHJpbmcuc3Vic3RyaW5nKDAsIGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQpIDogdmFsdWF0aW9uU3RyaW5nO1xyXG4gICAgICAgIGxldCBhcmd1bWVudHNTdHJpbmcgPSB2YWx1YXRpb25TdHJpbmcuc3Vic3RyaW5nKGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQgKyAxLCBmdW5jdGlvbkFyZ3VtZW50c0VuZCk7XHJcbiAgICAgICAgbGV0IG1hdGNoZXMgPSBhcmd1bWVudHNTdHJpbmcubWF0Y2gobmV3IFJlZ0V4cCgnW14sXSsnLCAnZ2knKSk7XHJcbiAgICAgICAgaWYgKG1hdGNoZXMgIT0gbnVsbClcclxuICAgICAgICAgICAgbWF0Y2hlcy5mb3JFYWNoKChhcmd1bWVudEl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICgvXihffFtBLXpdKShffFtBLXpdfFswLTldfFxcJCkrJC8udGVzdChhcmd1bWVudEl0ZW0udHJpbSgpKSlcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChhcmd1bWVudEl0ZW0udHJpbSgpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIGdldEZ1bmN0aW9uTmFtZShwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICBsZXQgb3BlbkluZGV4ID0gLTE7XHJcbiAgICAgICAgaWYgKChvcGVuSW5kZXggPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpKSA+IC0xKSByZXR1cm4gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCBvcGVuSW5kZXgpO1xyXG4gICAgICAgIHJldHVybiBwcm9wZXJ0eU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0VmFsdWVGcm9tRnVuY3Rpb24oaXRlbSwgcHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgbGV0IGZ1bmN0aW9uQXJndW1lbnRzID0gW107XHJcbiAgICAgICAgbGV0IGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQgPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpO1xyXG4gICAgICAgIGxldCBmdW5jdGlvbkFyZ3VtZW50c0VuZCA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcpJyk7XHJcbiAgICAgICAgbGV0IGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQgPiAtMSA/IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgZnVuY3Rpb25Bcmd1bWVudHNTdGFydCkgOiBwcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgbGV0IGFyZ3VtZW50c1N0cmluZyA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoZnVuY3Rpb25Bcmd1bWVudHNTdGFydCArIDEsIGZ1bmN0aW9uQXJndW1lbnRzRW5kKTtcclxuICAgICAgICBsZXQgbWF0Y2hlcyA9IGFyZ3VtZW50c1N0cmluZy5tYXRjaChuZXcgUmVnRXhwKCdbXixdKycsICdnaScpKTtcclxuICAgICAgICBpZiAobWF0Y2hlcyAhPSBudWxsKVxyXG4gICAgICAgICAgICBtYXRjaGVzLmZvckVhY2goKGFyZ3VtZW50SXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25Bcmd1bWVudHMucHVzaChHZXRWYWx1ZShpdGVtLCBhcmd1bWVudEl0ZW0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiAoaXRlbVtmdW5jdGlvbk5hbWVdKSA9PSAnZnVuY3Rpb24nID8gaXRlbVtmdW5jdGlvbk5hbWVdLmFwcGx5KGl0ZW0sIGZ1bmN0aW9uQXJndW1lbnRzKSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gSWYoaHRtbCwgZG9tLCBjb250ZXh0KSB7XHJcbiAgICAgICAgbGV0IGh0bWxEb2N1bWVudCA9IGh0bWw7XHJcbiAgICAgICAgbGV0IGlmcyA9IGRvbS5xdWVyeVNlbGVjdG9yQWxsKCdbYWctaWZdJywgZG9tKTtcclxuICAgICAgICBpZnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbm9kZXNBbmRDb25kaXRpb24gPSBbXTtcclxuICAgICAgICAgICAgbGV0IG5leHROb2RlID0gaXRlbTtcclxuICAgICAgICAgICAgbGV0IGl0ZW1QYXJlbnQgPSBpdGVtLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGxldCBhY3RpdmVOb2RlQW5kQ29uZGl0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGlkZW50aWZpZXJzVXNlZCA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgQXR0cmlidXRlcyA9IHtcclxuICAgICAgICAgICAgICAgIElmOiBcImFnLWlmXCIsXHJcbiAgICAgICAgICAgICAgICBFbHNlSWY6IFwiYWctZWxzZS1pZlwiLFxyXG4gICAgICAgICAgICAgICAgRWxzZTogXCJhZy1lbHNlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aGlsZSAobmV4dE5vZGUgIT0gbnVsbCAmJiAoKGl0ZW0gPT0gbmV4dE5vZGUgJiYgbmV4dE5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuSWYpKSB8fCBuZXh0Tm9kZS5oYXNBdHRyaWJ1dGUoQXR0cmlidXRlcy5FbHNlSWYpIHx8IG5leHROb2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLkVsc2UpKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5vZGUgPSBuZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWctZmFrZS1tYXNrJyk7XHJcbiAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IChub2RlLm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXR0cmlidXRlVG9SZWFkID0gbm9kZS5oYXNBdHRyaWJ1dGUoQXR0cmlidXRlcy5JZikgPyBBdHRyaWJ1dGVzLklmIDogbm9kZS5oYXNBdHRyaWJ1dGUoQXR0cmlidXRlcy5FbHNlSWYpID8gQXR0cmlidXRlcy5FbHNlSWYgOiBBdHRyaWJ1dGVzLkVsc2U7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZVRvUmVhZCk7XHJcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGVUb1JlYWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24gIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICBFeHRyYWN0VmFyaWFibGVzRnJvbVN0cmluZyhleHByZXNzaW9uKS5pZGVudGlmaWVycy5mb3JFYWNoKGlkZW50aWZpZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllcnNVc2VkLmluZGV4T2YoaWRlbnRpZmllcikgPCAwKSBpZGVudGlmaWVyc1VzZWQucHVzaChpZGVudGlmaWVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIG5vZGVzQW5kQ29uZGl0aW9uLnB1c2goeyBub2RlOiAobm9kZS5jbG9uZU5vZGUodHJ1ZSkpLCBleHByZXNzaW9uOiBleHByZXNzaW9uLCBwb3NpdGlvbjogbm9kZS5uZXh0U2libGluZywgaXNEZWZhdWx0OiBhdHRyaWJ1dGVUb1JlYWQgPT0gQXR0cmlidXRlcy5FbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgdmFsdWF0aW9uRnVuY3Rpb25Bcmd1bWVudHMgPSBDb252ZXJPYmplY3RUb0FyZ3VtZW50QXJyYXkoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGxldCByZW5kZXIgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWF0aW9uRnVuY3Rpb25Bcmd1bWVudHMgPSBDb252ZXJPYmplY3RUb0FyZ3VtZW50QXJyYXkoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlTm9kZUFuZENvbmRpdGlvbiAhPSBudWxsKSAoYWN0aXZlTm9kZUFuZENvbmRpdGlvbi5hY3RpdmUpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbm9kZUFuZENvbmRpdGlvbiBvZiBub2Rlc0FuZENvbmRpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGVBbmRDb25kaXRpb24uaXNEZWZhdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1YXRpb25GdW5jdGlvbiA9IG5ldyBGdW5jdGlvbiguLi52YWx1YXRpb25GdW5jdGlvbkFyZ3VtZW50cy5hcmd1bWVudHMsIGByZXR1cm4gJHtub2RlQW5kQ29uZGl0aW9uLmV4cHJlc3Npb259O2ApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1YXRpb25GdW5jdGlvbiguLi52YWx1YXRpb25GdW5jdGlvbkFyZ3VtZW50cy52YWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5vZGVBbmRDb25kaXRpb24uaXNEZWZhdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlTm9kZUFuZENvbmRpdGlvbiA9IG5vZGVBbmRDb25kaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zZXJ0UG9zdGlvbiA9IGZpbmREb21Qb3NpdGlvbihub2RlQW5kQ29uZGl0aW9uLnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtUGFyZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29uZGl0aW9uYWxOb2RlID0gbm9kZUFuZENvbmRpdGlvbi5ub2RlLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlQW5kQ29uZGl0aW9uLmFjdGl2ZSA9IGNvbmRpdGlvbmFsTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtUGFyZW50Lmluc2VydEJlZm9yZShjb25kaXRpb25hbE5vZGUsIGluc2VydFBvc3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybUludGVybmFsKGh0bWwsIGNvbmRpdGlvbmFsTm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgY29uc29sZS5sb2coZSk7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBmaW5kRG9tUG9zaXRpb24oZG9tKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9tICE9IG51bGwgJiYgIWRvY3VtZW50LmNvbnRhaW5zKGRvbSkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmREb21Qb3NpdGlvbihkb20ucHJldmlvdXNFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9tO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpZGVudGlmaWVyIG9mIGlkZW50aWZpZXJzVXNlZCkge1xyXG4gICAgICAgICAgICAgICAgV2F0Y2goaXRlbSwgY29udGV4dCwgaWRlbnRpZmllciwgKGRhdGEsIGlzQ2hhbmdlLCBpc1VzZXJDaGFuZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDaGFuZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcihkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlbmRlcihjb250ZXh0KTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIFByZUlmKGRvbSkge1xyXG4gICAgICAgIGxldCBpZnMgPSBkb20ucXVlcnlTZWxlY3RvckFsbCgnW2FnLWlmXScsIGRvbSk7XHJcbiAgICAgICAgbGV0IGlzRmFrZSA9IGRvbS5oYXNBdHRyaWJ1dGUoJ2FnLWZha2UnKTtcclxuICAgICAgICBpZnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbmV4dE5vZGUgPSBpdGVtO1xyXG4gICAgICAgICAgICBsZXQgaWRlbnRpZmllcnNVc2VkID0gW107XHJcbiAgICAgICAgICAgIGxldCBmYWtlRm91bmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IEF0dHJpYnV0ZXMgPSB7XHJcbiAgICAgICAgICAgICAgICBJZjogXCJhZy1pZlwiLFxyXG4gICAgICAgICAgICAgICAgRWxzZUlmOiBcImFnLWVsc2UtaWZcIixcclxuICAgICAgICAgICAgICAgIEVsc2U6IFwiYWctZWxzZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hpbGUgKG5leHROb2RlICE9IG51bGwgJiYgKChpdGVtID09IG5leHROb2RlICYmIG5leHROb2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLklmKSkgfHwgbmV4dE5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuRWxzZUlmKSB8fCBuZXh0Tm9kZS5oYXNBdHRyaWJ1dGUoQXR0cmlidXRlcy5FbHNlKSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBub2RlID0gbmV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZha2VGb3VuZCAmJiBub2RlLmhhc0F0dHJpYnV0ZSgnYWctZmFrZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFrZUZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmFrZUZvdW5kIHx8ICghZmFrZUZvdW5kICYmICFuZXh0Tm9kZS5oYXNBdHRyaWJ1dGUoQXR0cmlidXRlcy5FbHNlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoJ2FnLWZha2UtbWFzaycpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmYWtlRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRmFrZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKEF0dHJpYnV0ZXMuSWYpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKEF0dHJpYnV0ZXMuRWxzZUlmKTtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShBdHRyaWJ1dGVzLkVsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbmV4dE5vZGUgPSAobm9kZS5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZmFrZUZvdW5kKVxyXG4gICAgICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1mYWtlLW1hc2snKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vRm9yXHJcblxyXG4gICAgZnVuY3Rpb24gRm9yKGh0bWwsIGRvbSwgY29udGV4dCkge1xyXG4gICAgICAgIGxldCBodG1sRG9jdW1lbnQgPSBodG1sO1xyXG4gICAgICAgIGxldCBsb29wcyA9IGRvbS5xdWVyeVNlbGVjdG9yQWxsKCdbYWctZm9yXScsIGRvbSk7XHJcbiAgICAgICAgbG9vcHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZmFrZUl0ZW0gPSBpdGVtLm5leHRFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgbGV0IGZha2VJdGVtQ291bnQgPSAwO1xyXG4gICAgICAgICAgICBsZXQgaXNmYWtlSXRlbUNvdW50UmVhZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gbmV3IFJlZ0V4cCgnXFxcXHMqKFtBLXowLTldKylcXFxccysoaW4pXFxcXHMrKFtBLXowLTlcXFxcLl0rKVxcXFxzKicsICdnaScpO1xyXG4gICAgICAgICAgICBsZXQgbG9vcENvbnN0cmFpbnQgPSBpdGVtLmdldEF0dHJpYnV0ZSgnYWctZm9yJyk7XHJcbiAgICAgICAgICAgIGlmIChsb29wQ29uc3RyYWludCA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgICAgIGxldCBpdHJhdG9yRmluaXNoZWQgPSBpdGVtLmdldEF0dHJpYnV0ZSgnYWctZm9yLWNvbXBsZXRlJyk7XHJcbiAgICAgICAgICAgIGxldCBmaWVsZHNBbmRWYWx1ZSA9IGV4cHJlc3Npb24uZXhlYyhsb29wQ29uc3RyYWludCk7XHJcbiAgICAgICAgICAgIGxldCBpdHJhdG9yID0gZmllbGRzQW5kVmFsdWUgIT0gbnVsbCA/IGZpZWxkc0FuZFZhbHVlWzFdIDogXCJcIjtcclxuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBmaWVsZHNBbmRWYWx1ZSAhPSBudWxsID8gZmllbGRzQW5kVmFsdWVbM10gOiBcIlwiOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgaHRtbFRvQ2xvbmUgPSBpdGVtLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgbGV0IGh0bWxUb0Nsb25lUGFyZW50ID0gaXRlbS5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICBsZXQgaHRtbFRvQ2xvbmVMb2NhdGlvbiA9IGl0ZW0ubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgIChodG1sVG9DbG9uZSkucmVtb3ZlQXR0cmlidXRlKCdhZy1mb3InKTtcclxuICAgICAgICAgICAgaXRlbS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgbGV0IGl0ZW1FbGVtZW50cyA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgaXNEaXJ0eUZha2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb25Db250ZXh0ID0gZ2V0Q29sbGVjdGlvbk9iamVjdChjb250ZXh0LCBjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb25Db250ZXh0RmllbGQgPSBnZXRDb2xsZWN0aW9uTmFtZShjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIFNldFByb3BlcnR5RGVzY3JpcHRvclRvUHJveHlPYmplY3QoY29sbGVjdGlvbkNvbnRleHQsIGAke2NvbGxlY3Rpb25Db250ZXh0RmllbGR9JGZvcmAsIHsgdmFsdWU6IDAsIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAgICAgbGV0IHJlbmRlciA9IChkYXRhKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbUVsZW1lbnQgb2YgaXRlbUVsZW1lbnRzKVxyXG4gICAgICAgICAgICAgICAgICAgIChpdGVtRWxlbWVudCkucmVtb3ZlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW1zQ29sbGVjdGlvbiA9IEdldFZhbHVlKGRhdGEsIGNvbGxlY3Rpb24pXHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbUluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIGxldCBpc0ZpcnN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtc0NvbGxlY3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNEaXJ0eUZha2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWxUb0Nsb25lTG9jYXRpb24gPSByZW1vdmVQcmVGb3IoZmFrZUl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW1Gcm9tQ29sbGVjdGlvbiBvZiBpdGVtc0NvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRleHRPYmplY3QgPSBHZXRQcm94eU9iamVjdChjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgU2V0UHJvcGVydHlEZXNjcmlwdG9yVG9Qcm94eU9iamVjdChjb250ZXh0T2JqZWN0LCBpdHJhdG9yLCB7IGdldCgpIHsgcmV0dXJuIGl0ZW1Gcm9tQ29sbGVjdGlvbjsgfSwgc2V0KHZhbHVlKSB7IGl0ZW1Gcm9tQ29sbGVjdGlvbiA9IHZhbHVlOyB9LCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBTZXRQcm9wZXJ0eURlc2NyaXB0b3JUb1Byb3h5T2JqZWN0KGNvbnRleHRPYmplY3QsIGByb3ckSW5kZXhgLCB7IHZhbHVlOiBpdGVtSW5kZXggKyAxLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgU2V0UHJvcGVydHlEZXNjcmlwdG9yVG9Qcm94eU9iamVjdChjb250ZXh0T2JqZWN0LCBgJHtpdHJhdG9yfSRJbmRleGAsIHsgdmFsdWU6IGl0ZW1JbmRleCArIDEsIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdJdHJhdG9yOicsIGNvbnRleHRPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2xvbmVkRWxlbWVudCA9IGh0bWxUb0Nsb25lLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0ZpcnN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sVG9DbG9uZVBhcmVudD8uaW5zZXJ0QmVmb3JlKGNsb25lZEVsZW1lbnQsIGh0bWxUb0Nsb25lTG9jYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGaXJzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QWZ0ZXIoY2xvbmVkRWxlbWVudCwgaXRlbUVsZW1lbnRzW2l0ZW1FbGVtZW50cy5sZW5ndGggLSAxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybUludGVybmFsKGh0bWxEb2N1bWVudCwgY2xvbmVkRWxlbWVudCwgY29udGV4dE9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1FbGVtZW50cy5wdXNoKGNsb25lZEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtSW5kZXgrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgU2V0UHJvcGVydHlEZXNjcmlwdG9yVG9Qcm94eU9iamVjdChjb2xsZWN0aW9uQ29udGV4dCwgYCR7Y29sbGVjdGlvbkNvbnRleHRGaWVsZH0kZm9yYCwgeyB2YWx1ZTogRGF0ZS5ub3coKSwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWctZm9yLWNvbXBsZXRlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sVG9DbG9uZVBhcmVudD8uZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAoaXRlbXNDb2xsZWN0aW9uKSA9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmYWtlSXRlbSAhPSBudWxsICYmIGZha2VJdGVtLmhhc0F0dHJpYnV0ZSgnYWctZm9yLWZha2UnKSAmJiBpc0RpcnR5RmFrZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWtlSXRlbSA9IFByZUZvclBhcnRpYWwoZmFrZUl0ZW0sIGh0bWxUb0Nsb25lUGFyZW50LCBodG1sVG9DbG9uZUxvY2F0aW9uLCBmYWtlSXRlbUNvdW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpdHJhdG9yRmluaXNoZWQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBmdW5jdGlvbk5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGl0cmF0b3JGaW5pc2hlZDtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdldFBhcmFtZXRlck5hbWUgPSAobmFtZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAndGhpcycpIHJldHVybiAnc2VuZGVyJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuaW5kZXhPZignLicpID4gLTEpIHJldHVybiBuYW1lLnJlcGxhY2UoXCIuXCIsICdfJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdldFZhbHVlID0gKGl0ZW0sIHByb3BlcnR5TmFtZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lLmluZGV4T2YoJygnKSA8IDAgJiYgcHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudFByb3BlcnR5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCBwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdWJQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcocHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSArIDEsIHByb3BlcnR5TmFtZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlKGl0ZW1bY3VycmVudFByb3BlcnR5XSwgc3ViUHJvcGVydHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzRnVuY3Rpb24gPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpID4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFsdWVGcm9tRnVuY3Rpb24oaXRlbSwgcHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtwcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ2V0RnVuY3Rpb25Gcm9tQ29sbGVjdGlvbiA9IChjb250ZXh0LCBuYW1lLCBhcmdzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5fX3Byb3RvX19bbmFtZV0gIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9fcHJvdG9fX1tuYW1lXSguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbnRleHQpLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChjb250ZXh0W2l0ZW1dKSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RnVuY3Rpb25Gcm9tQ29sbGVjdGlvbihjb250ZXh0W2l0ZW1dLCBuYW1lLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAoY29udGV4dFtpdGVtXSkgPT0gJ2Z1bmN0aW9uJyAmJiBpdGVtID09IG5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W2l0ZW1dKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnZXRWYWx1ZUZyb21GdW5jdGlvbiA9IChpdGVtLCBwcm9wZXJ0eU5hbWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmN0aW9uQXJndW1lbnRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ID0gcHJvcGVydHlOYW1lLmluZGV4T2YoJygnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmN0aW9uQXJndW1lbnRzRW5kID0gcHJvcGVydHlOYW1lLmluZGV4T2YoJyknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQgPiAtMSA/IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgZnVuY3Rpb25Bcmd1bWVudHNTdGFydCkgOiBwcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcmd1bWVudHNTdHJpbmcgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQgKyAxLCBmdW5jdGlvbkFyZ3VtZW50c0VuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXRjaGVzID0gYXJndW1lbnRzU3RyaW5nLm1hdGNoKG5ldyBSZWdFeHAoJ1teLF0rJywgJ2dpJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5mb3JFYWNoKChhcmd1bWVudEl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkFyZ3VtZW50cy5wdXNoKGdldFZhbHVlKGl0ZW0sIGFyZ3VtZW50SXRlbSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2Z1bmN0aW9uTmFtZV0uYXBwbHkoaXRlbSwgZnVuY3Rpb25Bcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lID0gdmFsdWUuc3Vic3RyaW5nKDAsIHZhbHVlLmluZGV4T2YoJygnKSA+IC0xID8gdmFsdWUuaW5kZXhPZignKCcpIDogdmFsdWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoJyhcXFxcKCg/PHBhcmFtcz4uKj8pXFxcXCkpJylcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zU3RyaW5nID0gdmFsdWUubWF0Y2goZXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXNTdHJpbmcgIT0gdW5kZWZpbmVkICYmIHBhcmFtc1N0cmluZyAhPSBudWxsICYmIHBhcmFtc1N0cmluZy5ncm91cHMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0gcGFyYW1zU3RyaW5nLmdyb3Vwcy5wYXJhbXMuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXNJdGVtID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBwYXJhbSBpbiBwYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zW3BhcmFtXSA9PSAndGhpcycpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc1BhcmFtVmFsdWUgPSAobmV3IFJlZ0V4cCgnXihcXFxcXFwnfFswLTldKScpLnRlc3QocGFyYW1zW3BhcmFtXSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbU5hbWUgPSAhaXNQYXJhbVZhbHVlID8gZ2V0UGFyYW1ldGVyTmFtZShwYXJhbXNbcGFyYW1dKSA6ICdpdGVtXycgKyBwYXJhbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNJdGVtW3BhcmFtTmFtZV0gPSBpc1BhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2F0Y2goaXRlbSwgY29sbGVjdGlvbkNvbnRleHQsIGAke2NvbGxlY3Rpb25Db250ZXh0RmllbGR9JGZvcmAsIChkYXRhLCBpc0NoYW5nZSwgaXNVc2VyQ2hhbmdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyZ3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXNba2V5XSA9PSAndGhpcycgfHwgcGFyYW1zW2tleV0gPT0gJ3NlbmRlcicpIGFyZ3MucHVzaChodG1sVG9DbG9uZVBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtc1trZXldID09ICdkYXRhJykgYXJncy5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbVZhbHVlID0gIXBhcmFtc0l0ZW1bZ2V0UGFyYW1ldGVyTmFtZShwYXJhbXNba2V5XSldID8gZ2V0VmFsdWUoZGF0YSwgcGFyYW1zW2tleV0pIDogZXZhbChwYXJhbXNba2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2gocGFyYW1WYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbZnVuY3Rpb25OYW1lXSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2Z1bmN0aW9uTmFtZV0uYXBwbHkoZGF0YSwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRGdW5jdGlvbiA9IGdldEZ1bmN0aW9uRnJvbUNvbGxlY3Rpb24oZGF0YSwgZnVuY3Rpb25OYW1lLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RnVuY3Rpb24gIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvbihhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZW5kZXIoY29udGV4dCk7XHJcbiAgICAgICAgICAgIFdhdGNoKGl0ZW0sIGNvbnRleHQsIGNvbGxlY3Rpb24sIChkYXRhLCBpc0NoYW5nZSwgaXNVc2VyQ2hhbmdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNDaGFuZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyKGRhdGEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldENvbGxlY3Rpb25PYmplY3QoaXRlbSwgcHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lLmluZGV4T2YoJygnKSA8IDAgJiYgcHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgcHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1YlByb3BlcnR5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyhwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpICsgMSwgcHJvcGVydHlOYW1lLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldENvbGxlY3Rpb25PYmplY3QoaXRlbVtjdXJyZW50UHJvcGVydHldLCBzdWJQcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpc0Z1bmN0aW9uID0gcHJvcGVydHlOYW1lLmluZGV4T2YoJygnKSA+IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRDb2xsZWN0aW9uTmFtZShwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpIDwgMCAmJiBwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudFByb3BlcnR5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCBwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3ViUHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgKyAxLCBwcm9wZXJ0eU5hbWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29sbGVjdGlvbk5hbWUoc3ViUHJvcGVydHkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHlOYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiByZW1vdmVQcmVGb3IoZmFrZUl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChmYWtlSXRlbSAhPSBudWxsICYmIGZha2VJdGVtLmhhc0F0dHJpYnV0ZSgnYWctZm9yLWZha2UnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWxUb0Nsb25lLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWZha2UtbWFzaycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXh0SXRlbSA9IGZha2VJdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0SXRlbSAhPSBudWxsICYmIG5leHRJdGVtLmhhc0F0dHJpYnV0ZSgnYWctZm9yLWZha2UnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzZmFrZUl0ZW1Db3VudFJlYWRlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZha2VJdGVtQ291bnQrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9sZE5leHQgPSBuZXh0SXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEl0ZW0gPSBuZXh0SXRlbS5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9sZE5leHQucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlzZmFrZUl0ZW1Db3VudFJlYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRJdGVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZha2VJdGVtO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBodG1sRG9jdW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIFByZUZvclBhcnRpYWwoaXRlbSwgcGFyZW50LCBsb2NhdGlvbiwgY291bnQpIHtcclxuICAgICAgICBsZXQgbGFzdEl0ZW0gPSBudWxsLCBmaXJzdEl0ZW0gPSBudWxsO1xyXG4gICAgICAgIGxldCBpc0ZpcnN0ID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBmYWtlSXRlbSA9IGl0ZW0uY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICBpZiAoIWlzRmlyc3QpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudD8uaW5zZXJ0QmVmb3JlKGZha2VJdGVtLCBsb2NhdGlvbik7XHJcbiAgICAgICAgICAgICAgICBpc0ZpcnN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGZpcnN0SXRlbSA9IGZha2VJdGVtO1xyXG4gICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgIGluc2VydEFmdGVyKGZha2VJdGVtLCBsYXN0SXRlbSk7XHJcbiAgICAgICAgICAgIGxhc3RJdGVtID0gZmFrZUl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaXJzdEl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gUHJlRm9yKGRvbSkge1xyXG4gICAgICAgIGxldCBsb29wcyA9IGRvbS5xdWVyeVNlbGVjdG9yQWxsKCdbYWctZm9yXVthZy1mb3ItZmFrZV06bm90KC5hZy1mYWtlLW1hc2spJywgZG9tKTtcclxuICAgICAgICBsb29wcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLnRhZ05hbWUgPT0gXCJPUFRJT05cIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBsZXQgY2xvbmVJdGVtID0gaXRlbS5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgIGNsb25lSXRlbS5zZXRBdHRyaWJ1dGUoJ2FnLWZha2UnLCAnJyk7XHJcbiAgICAgICAgICAgIGxldCBjbG9uZUl0ZW1Db3VudCA9IDE7XHJcbiAgICAgICAgICAgIGxldCBjbG9uZUl0ZW1Db3VudFN0cmluZyA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1mb3ItZmFrZScpO1xyXG4gICAgICAgICAgICBpZiAoY2xvbmVJdGVtQ291bnRTdHJpbmcgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgIGNsb25lSXRlbUNvdW50ID0gcGFyc2VJbnQoY2xvbmVJdGVtQ291bnRTdHJpbmcpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBjbG9uZUl0ZW0uc2V0QXR0cmlidXRlKCdhZy1mb3ItZmFrZScsICcnKTtcclxuICAgICAgICAgICAgY2xvbmVJdGVtLnJlbW92ZUF0dHJpYnV0ZSgnYWctZm9yJyk7XHJcbiAgICAgICAgICAgIGl0ZW0ucmVtb3ZlQXR0cmlidXRlKCdhZy1mb3ItZmFrZScpO1xyXG4gICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoJ2FnLWZha2UtbWFzaycpO1xyXG4gICAgICAgICAgICBQcmVUcmFuc2Zvcm1JbnRlcm5hbChjbG9uZUl0ZW0pO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsb25lSXRlbUNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0ucGFyZW50RWxlbWVudD8uYXBwZW5kQ2hpbGQoY2xvbmVJdGVtLmNsb25lTm9kZSh0cnVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBUcmFuc2Zvcm1JbnRlcm5hbChodG1sLCBkb20sIGNvbnRleHQpIHtcclxuXHJcbiAgICAgICAgRm9yKGRvbSwgZG9tLCBjb250ZXh0KTtcclxuICAgICAgICBJZihkb20sIGRvbSwgY29udGV4dCk7XHJcbiAgICAgICAgSW50ZXJwb2xhdGlvbihkb20sIGRvbSwgY29udGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gUHJlVHJhbnNmb3JtSW50ZXJuYWwoZG9tKSB7XHJcblxyXG4gICAgICAgIFByZUZvcihkb20pO1xyXG4gICAgICAgIFByZUlmKGRvbSk7XHJcbiAgICAgICAgUHJlSW50ZXJwb2xhdGlvbihkb20pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGZpbmRSZW5kZXJzKCkge1xyXG4gICAgICAgIHZhciByZW5kZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLXJlbmRlcl06bm90KC5hZy1yZW5kZXIpJyk7XHJcbiAgICAgICAgcmVuZGVycy5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG5cclxuICAgICAgICAgICAgYXR0YWNoQWN0aW9uKGl0ZW0pO1xyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBhdHRhY2hBY3Rpb24oaXRlbSkge1xyXG5cclxuICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoJ2FnLXJlbmRlcicpO1xyXG5cclxuICAgICAgICB2YXIgcmVzdWx0RnVuY3Rpb24gPSBpdGVtLmdldEF0dHJpYnV0ZSgnYWctcmVuZGVyJyk7XHJcblxyXG4gICAgICAgIFByZVRyYW5zZm9ybUludGVybmFsKGl0ZW0pO1xyXG5cclxuICAgICAgICB2YXIgZXZlbnROYW1lID0gJ2FnLnJlbmRlci5oeWRyYXRlLicgKyByZXN1bHRGdW5jdGlvbjtcclxuXHJcbiAgICAgICAgdmFyIGl0ZW1IdG1sID0gaXRlbS5pbm5lckhUTUw7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGFzeW5jIGZ1bmN0aW9uICgpIHsgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBHZXRWYWx1ZSh3aW5kb3csIHJlc3VsdEZ1bmN0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIGl0ZW0uaW5uZXJIVE1MID0gaXRlbUh0bWw7XHJcblxyXG4gICAgICAgICAgICBUcmFuc2Zvcm1JbnRlcm5hbChpdGVtLCBpdGVtLCByZXN1bHQpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdERhdGEoc2VydmljZVVybCwgZGF0YSwgcHJvY2Vzc1JlcXVlc3REYXRhKSB7XHJcbiAgICAgICAgaWYgKHByb2Nlc3NSZXF1ZXN0RGF0YSlcclxuICAgICAgICAgICAgZGF0YSA9IHByb2Nlc3NSZXF1ZXN0RGF0YShkYXRhKTtcclxuXHJcbiAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gJyc7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZyArKChxdWVyeVN0cmluZyAhPSAnJyA/ICcmJyA6ICcnKSArIGtleSArICc9JyArIGRhdGFba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlcnZpY2VVcmwgKz0gc2VydmljZVVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JyArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgICAgIHZhciByZXF1ZXN0ID0gYXdhaXQgZmV0Y2goc2VydmljZVVybCwge1xyXG4gICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgIG1vZGU6IFwiY29yc1wiLFxyXG4gICAgICAgICAgICBjYWNoZTogXCJuby1jYWNoZVwiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVxdWVzdC5qc29uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gaW5pdFBhZ2UocmVuZGVyTmFtZSwgc2VydmljZVVybCwgZGF0YSwgcmVuZGVyQ29tcGxldGUsIHByb2Nlc3NSZXF1ZXN0RGF0YSkge1xyXG4gICAgICAgIGlmICghZGF0YSkgZGF0YSA9IHt9O1xyXG4gICAgICAgIGlmICghZGF0YS5QYWdlU2l6ZSkgZGF0YS5QYWdlU2l6ZSA9IDEyO1xyXG4gICAgICAgIGlmICghZGF0YS5QYWdlTnVtYmVyKSBkYXRhLlBhZ2VOdW1iZXIgPSAxO1xyXG4gICAgICAgIHZhciBwYWdlZERhdGEgPSBhd2FpdCByZXF1ZXN0RGF0YShzZXJ2aWNlVXJsLCBkYXRhLCBwcm9jZXNzUmVxdWVzdERhdGEpO1xyXG4gICAgICAgIHdpbmRvd1tyZW5kZXJOYW1lXSA9IHBhZ2VkRGF0YTsgICAgICAgIFxyXG4gICAgICAgIHdpbmRvdy5hZ1JlbmRlci5oeWRyYXRlKHJlbmRlck5hbWUpO1xyXG4gICAgICAgIGlmIChyZW5kZXJDb21wbGV0ZSlcclxuICAgICAgICAgICAgcmVuZGVyQ29tcGxldGUocGFnZWREYXRhKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gbmV4dFBhZ2UocmVuZGVyTmFtZSwgc2VydmljZVVybCwgZGF0YSwgcmVuZGVyQ29tcGxldGUsIHByb2Nlc3NSZXF1ZXN0RGF0YSkge1xyXG4gICAgICAgIGRhdGEuUGFnZU51bWJlciArPSAxO1xyXG4gICAgICAgIHZhciBwYWdlZERhdGEgPSBhd2FpdCByZXF1ZXN0RGF0YShzZXJ2aWNlVXJsLCBkYXRhLCBwcm9jZXNzUmVxdWVzdERhdGEpO1xyXG4gICAgICAgIHdpbmRvd1tyZW5kZXJOYW1lXSA9IHBhZ2VkRGF0YTsgICAgICAgIFxyXG4gICAgICAgIHdpbmRvdy5hZ1JlbmRlci5oeWRyYXRlKHJlbmRlck5hbWUpO1xyXG4gICAgICAgIGlmIChyZW5kZXJDb21wbGV0ZSlcclxuICAgICAgICAgICAgcmVuZGVyQ29tcGxldGUocGFnZWREYXRhKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcHJldmlvdXNQYWdlKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpIHtcclxuICAgICAgICBpZiAoZGF0YS5QYWdlTnVtYmVyID4gMSkge1xyXG4gICAgICAgICAgICBkYXRhLlBhZ2VOdW1iZXIgLT0gMTtcclxuICAgICAgICAgICAgdmFyIHBhZ2VkRGF0YSA9IGF3YWl0IHJlcXVlc3REYXRhKHNlcnZpY2VVcmwsIGRhdGEsIHByb2Nlc3NSZXF1ZXN0RGF0YSk7XHJcbiAgICAgICAgICAgIHdpbmRvd1tyZW5kZXJOYW1lXSA9IHBhZ2VkRGF0YTtcclxuICAgICAgICAgICAgd2luZG93LmFnUmVuZGVyLmh5ZHJhdGUocmVuZGVyTmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJDb21wbGV0ZSlcclxuICAgICAgICAgICAgICAgIHJlbmRlckNvbXBsZXRlKHBhZ2VkRGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBtb3JlUGFnZShyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKSB7XHJcbiAgICAgICAgZGF0YS5QYWdlTnVtYmVyICs9IDE7XHJcbiAgICAgICAgdmFyIHBhZ2VkRGF0YSA9IGF3YWl0IHJlcXVlc3REYXRhKHNlcnZpY2VVcmwsIGRhdGEsIHByb2Nlc3NSZXF1ZXN0RGF0YSk7XHJcbiAgICAgICAgd2luZG93W3JlbmRlck5hbWVdLkl0ZW1zLnB1c2goLi4ucGFnZWREYXRhLkl0ZW1zKTtcclxuICAgICAgICB3aW5kb3cuYWdSZW5kZXIuaHlkcmF0ZShyZW5kZXJOYW1lKTtcclxuICAgICAgICBpZiAocmVuZGVyQ29tcGxldGUpXHJcbiAgICAgICAgICAgIHJlbmRlckNvbXBsZXRlKHBhZ2VkRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gaW5pdCgpIHtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5yZW5kZXIucmVmcmVzaCcsIGZpbmRSZW5kZXJzKTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5yZWZyZXNoJywgZmluZFJlbmRlcnMpO1xyXG5cclxuICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLnJlbmRlci5yZWZyZXNoJyk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgIHdpbmRvdy5hZ1JlbmRlciA9IHtcclxuXHJcbiAgICAgICAgICAgIGh5ZHJhdGU6IGZ1bmN0aW9uIChyZW5kZXJOYW1lKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50TmFtZSA9ICdhZy5yZW5kZXIuaHlkcmF0ZS4nICsgcmVuZGVyTmFtZTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoZXZlbnROYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpOyAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnZva2U6JyArIGV2ZW50TmFtZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5sYXp5LnJlZnJlc2gnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHdpbmRvdy5hZ0xhbmd1YWdlLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uIChyZW5kZXJOYW1lKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5yZW5kZXIuJyArIHJlbmRlck5hbWUgKyAnLnBhZ2UubmV4dCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgcHJldmlvdXM6IGZ1bmN0aW9uIChyZW5kZXJOYW1lKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5yZW5kZXIuJyArIHJlbmRlck5hbWUgKyAnLnBhZ2UucHJldmlvdXMnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG5cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIG1vcmU6IGZ1bmN0aW9uIChyZW5kZXJOYW1lKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5yZW5kZXIuJyArIHJlbmRlck5hbWUgKyAnLnBhZ2UubW9yZScpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgcGFnZWRSZXN1bHQ6IGZ1bmN0aW9uIChyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnJlbmRlci4nICsgcmVuZGVyTmFtZSArICcucGFnZS5uZXh0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRQYWdlKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnJlbmRlci4nICsgcmVuZGVyTmFtZSArICcucGFnZS5wcmV2aW91cycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1BhZ2UocmVuZGVyTmFtZSwgc2VydmljZVVybCwgZGF0YSwgcmVuZGVyQ29tcGxldGUsIHByb2Nlc3NSZXF1ZXN0RGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcucmVuZGVyLicgKyByZW5kZXJOYW1lICsgJy5wYWdlLm1vcmUnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9yZVBhZ2UocmVuZGVyTmFtZSwgc2VydmljZVVybCwgZGF0YSwgcmVuZGVyQ29tcGxldGUsIHByb2Nlc3NSZXF1ZXN0RGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpbml0UGFnZShyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoKTtcclxuXHJcbn0pKCk7XHJcblxyXG5cclxuXHJcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwiYSIsImkiLCJzZWxmIiwiYWdvcmEiLCIkIiwiZG9jdW1lbnQiLCJyZWFkeSIsImxvY2F0aW9uIiwiaGFzaCIsIk9wZW5Qb3B1cCIsImIiLCJ3aW5kb3ciLCJ0aGlzIiwiYyIsImxlbmd0aCIsIl8iLCJ0eXBlIiwiaXNXaW5kb3ciLCJub2RlVHlwZSIsImQiLCJpc0Z1bmN0aW9uIiwiZ3JlcCIsImNhbGwiLCJoYiIsInRlc3QiLCJmaWx0ZXIiLCJVIiwiZSIsImciLCJaIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImgiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImNhY2hlIiwiZ2V0IiwiZXhwYW5kbyIsIk1hdGgiLCJyYW5kb20iLCJyZXBsYWNlIiwidWIiLCJ0b0xvd2VyQ2FzZSIsImdldEF0dHJpYnV0ZSIsInRiIiwicGFyc2VKU09OIiwic2IiLCJzZXQiLCJqIiwiayIsImwiLCJhY3RpdmVFbGVtZW50IiwibSIsIm5vZGVOYW1lIiwiZmlyc3RDaGlsZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiYXBwZW5kQ2hpbGQiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIm4iLCJvIiwiS2IiLCJleGVjIiwicmVtb3ZlQXR0cmlidXRlIiwicCIsInJiIiwicSIsImYiLCJoYXNEYXRhIiwiYWNjZXNzIiwiZXZlbnRzIiwiaGFuZGxlIiwiZXZlbnQiLCJhZGQiLCJleHRlbmQiLCJyIiwicXVlcnlTZWxlY3RvckFsbCIsIm1lcmdlIiwicyIsInliIiwiY2hlY2tlZCIsImRlZmF1bHRWYWx1ZSIsInQiLCJhcHBlbmRUbyIsImJvZHkiLCJnZXREZWZhdWx0Q29tcHV0ZWRTdHlsZSIsImRpc3BsYXkiLCJjc3MiLCJkZXRhY2giLCJ1IiwiT2IiLCJOYiIsImRvY3VtZW50RWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsIndyaXRlIiwiY2xvc2UiLCJ2Iiwic3R5bGUiLCJSYiIsImdldFByb3BlcnR5VmFsdWUiLCJjb250YWlucyIsIlFiIiwiUGIiLCJ3aWR0aCIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJ3IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJ4IiwidG9VcHBlckNhc2UiLCJzbGljZSIsIlhiIiwieSIsIlRiIiwibWF4IiwieiIsIndiIiwiQSIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiWSIsImJveFNpemluZ1JlbGlhYmxlIiwicGFyc2VGbG9hdCIsIkIiLCJ4YiIsIkMiLCJwcm90b3R5cGUiLCJpbml0IiwiRCIsInNldFRpbWVvdXQiLCJZYiIsIm5vdyIsIkUiLCJoZWlnaHQiLCJvcGFjaXR5IiwiRiIsImNjIiwiY29uY2F0IiwiSSIsImJjIiwiRGVmZXJyZWQiLCJhbHdheXMiLCJlbGVtIiwic3RhcnRUaW1lIiwiZHVyYXRpb24iLCJ0d2VlbnMiLCJydW4iLCJub3RpZnlXaXRoIiwicmVzb2x2ZVdpdGgiLCJwcm9taXNlIiwicHJvcHMiLCJvcHRzIiwic3BlY2lhbEVhc2luZyIsIm9yaWdpbmFsUHJvcGVydGllcyIsIm9yaWdpbmFsT3B0aW9ucyIsImNyZWF0ZVR3ZWVuIiwiVHdlZW4iLCJlYXNpbmciLCJwdXNoIiwic3RvcCIsInJlamVjdFdpdGgiLCJjYW1lbENhc2UiLCJpc0FycmF5IiwiY3NzSG9va3MiLCJleHBhbmQiLCJIIiwibWFwIiwic3RhcnQiLCJmeCIsInRpbWVyIiwiYW5pbSIsInF1ZXVlIiwicHJvZ3Jlc3MiLCJkb25lIiwiY29tcGxldGUiLCJmYWlsIiwiSiIsIm1hdGNoIiwibmIiLCJ1bnNoaWZ0IiwiSyIsImVhY2giLCJkYXRhVHlwZXMiLCJ2YyIsIkwiLCJhamF4U2V0dGluZ3MiLCJmbGF0T3B0aW9ucyIsIk8iLCJ6YyIsIlAiLCJkZWZhdWx0VmlldyIsIlEiLCJSIiwiUyIsIlQiLCJpbmRleE9mIiwiViIsIlciLCJ0b1N0cmluZyIsIlgiLCJoYXNPd25Qcm9wZXJ0eSIsImZuIiwiYWIiLCJiYiIsImNiIiwiZGIiLCJqcXVlcnkiLCJjb25zdHJ1Y3RvciIsInNlbGVjdG9yIiwidG9BcnJheSIsInB1c2hTdGFjayIsInByZXZPYmplY3QiLCJjb250ZXh0IiwiZmlyc3QiLCJlcSIsImxhc3QiLCJlbmQiLCJzb3J0Iiwic3BsaWNlIiwiaXNQbGFpbk9iamVjdCIsImlzUmVhZHkiLCJlcnJvciIsIkVycm9yIiwibm9vcCIsIkFycmF5IiwiaXNOdW1lcmljIiwiaXNFbXB0eU9iamVjdCIsImdsb2JhbEV2YWwiLCJldmFsIiwidHJpbSIsInRleHQiLCJoZWFkIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwibWFrZUFycmF5IiwiaW5BcnJheSIsImd1aWQiLCJwcm94eSIsIkRhdGUiLCJzdXBwb3J0Iiwic3BsaXQiLCJlYiIsIkciLCJnZXRFbGVtZW50QnlJZCIsImlkIiwiTSIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJxc2EiLCJOIiwic2V0QXR0cmlidXRlIiwiam9pbiIsImliIiwiY2FjaGVMZW5ndGgiLCJzaGlmdCIsImF0dHJIYW5kbGUiLCJzb3VyY2VJbmRleCIsIm5leHRTaWJsaW5nIiwidmFsdWUiLCJkaXIiLCJyZWxhdGl2ZSIsIm1hdGNoZXMiLCJmaW5kIiwiVEFHIiwidW5pcXVlU29ydCIsInBvcCIsImZiIiwiZ2IiLCJSZWdFeHAiLCJqYiIsImtiIiwibGIiLCJtYiIsIm9iIiwiSUQiLCJDTEFTUyIsIkFUVFIiLCJQU0VVRE8iLCJDSElMRCIsImJvb2wiLCJuZWVkc0NvbnRleHQiLCJwYiIsInFiIiwidmIiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaGlsZE5vZGVzIiwiaXNYTUwiLCJzZXREb2N1bWVudCIsInRvcCIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImF0dHJpYnV0ZXMiLCJjbGFzc05hbWUiLCJjcmVhdGVDb21tZW50IiwiaW5uZXJIVE1MIiwiZ2V0QnlJZCIsImdldEVsZW1lbnRzQnlOYW1lIiwiZ2V0QXR0cmlidXRlTm9kZSIsIm1hdGNoZXNTZWxlY3RvciIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1vek1hdGNoZXNTZWxlY3RvciIsIm9NYXRjaGVzU2VsZWN0b3IiLCJtc01hdGNoZXNTZWxlY3RvciIsImRpc2Nvbm5lY3RlZE1hdGNoIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJzb3J0RGV0YWNoZWQiLCJhdHRyIiwic3BlY2lmaWVkIiwiZGV0ZWN0RHVwbGljYXRlcyIsInNvcnRTdGFibGUiLCJnZXRUZXh0IiwidGV4dENvbnRlbnQiLCJub2RlVmFsdWUiLCJzZWxlY3RvcnMiLCJjcmVhdGVQc2V1ZG8iLCJwcmVGaWx0ZXIiLCJsYXN0Q2hpbGQiLCJwc2V1ZG9zIiwic2V0RmlsdGVycyIsIm5vdCIsImhhcyIsImlubmVyVGV4dCIsImxhbmciLCJ0YXJnZXQiLCJmb2N1cyIsImhhc0ZvY3VzIiwiaHJlZiIsInRhYkluZGV4IiwiZW5hYmxlZCIsImRpc2FibGVkIiwic2VsZWN0ZWQiLCJzZWxlY3RlZEluZGV4IiwiZW1wdHkiLCJwYXJlbnQiLCJoZWFkZXIiLCJpbnB1dCIsImJ1dHRvbiIsImV2ZW4iLCJvZGQiLCJsdCIsImd0IiwibnRoIiwicmFkaW8iLCJjaGVja2JveCIsImZpbGUiLCJwYXNzd29yZCIsImltYWdlIiwic3VibWl0IiwicmVzZXQiLCJmaWx0ZXJzIiwidG9rZW5pemUiLCJjb21waWxlIiwic2VsZWN0IiwiZXhwciIsInVuaXF1ZSIsImlzWE1MRG9jIiwiaXMiLCJwYXJzZUhUTUwiLCJjaGlsZHJlbiIsImNvbnRlbnRzIiwibmV4dCIsInByZXYiLCJzaWJsaW5nIiwiY2xvc2VzdCIsImluZGV4IiwicHJldkFsbCIsImFkZEJhY2siLCJwYXJlbnRzIiwicGFyZW50c1VudGlsIiwibmV4dEFsbCIsIm5leHRVbnRpbCIsInByZXZVbnRpbCIsInNpYmxpbmdzIiwicmV2ZXJzZSIsIkNhbGxiYWNrcyIsIm9uY2UiLCJtZW1vcnkiLCJzdG9wT25GYWxzZSIsImRpc2FibGUiLCJyZW1vdmUiLCJsb2NrIiwibG9ja2VkIiwiZmlyZVdpdGgiLCJmaXJlIiwiZmlyZWQiLCJzdGF0ZSIsInRoZW4iLCJyZXNvbHZlIiwicmVqZWN0Iiwibm90aWZ5IiwicGlwZSIsIndoZW4iLCJyZWFkeVdhaXQiLCJob2xkUmVhZHkiLCJ0cmlnZ2VySGFuZGxlciIsIm9mZiIsInJlYWR5U3RhdGUiLCJhY2NlcHREYXRhIiwidWlkIiwiYWNjZXB0cyIsImtleSIsImRlZmluZVByb3BlcnRpZXMiLCJkaXNjYXJkIiwiZGF0YSIsInJlbW92ZURhdGEiLCJfZGF0YSIsIl9yZW1vdmVEYXRhIiwibmFtZSIsImRlcXVldWUiLCJfcXVldWVIb29rcyIsImNsZWFyUXVldWUiLCJzb3VyY2UiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiY2hlY2tDbG9uZSIsImNsb25lTm9kZSIsIm5vQ2xvbmVDaGVja2VkIiwiemIiLCJmb2N1c2luQnViYmxlcyIsIkFiIiwiQmIiLCJDYiIsIkRiIiwiZ2xvYmFsIiwiaGFuZGxlciIsInRyaWdnZXJlZCIsImRpc3BhdGNoIiwic3BlY2lhbCIsImRlbGVnYXRlVHlwZSIsImJpbmRUeXBlIiwib3JpZ1R5cGUiLCJuYW1lc3BhY2UiLCJkZWxlZ2F0ZUNvdW50Iiwic2V0dXAiLCJjYXB0dXJlIiwicGFzc2l2ZSIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnQiLCJ0cmlnZ2VyIiwiRXZlbnQiLCJpc1RyaWdnZXIiLCJuYW1lc3BhY2VfcmUiLCJyZXN1bHQiLCJub0J1YmJsZSIsInBhcmVudFdpbmRvdyIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwicHJldmVudERlZmF1bHQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJfZGVmYXVsdCIsImZpeCIsImRlbGVnYXRlVGFyZ2V0IiwicHJlRGlzcGF0Y2giLCJoYW5kbGVycyIsImN1cnJlbnRUYXJnZXQiLCJpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCIsImhhbmRsZU9iaiIsInN0b3BQcm9wYWdhdGlvbiIsInBvc3REaXNwYXRjaCIsImZpeEhvb2tzIiwia2V5SG9va3MiLCJ3aGljaCIsImNoYXJDb2RlIiwia2V5Q29kZSIsIm1vdXNlSG9va3MiLCJwYWdlWCIsImNsaWVudFgiLCJzY3JvbGxMZWZ0IiwiY2xpZW50TGVmdCIsInBhZ2VZIiwiY2xpZW50WSIsInNjcm9sbFRvcCIsImNsaWVudFRvcCIsImxvYWQiLCJibHVyIiwiY2xpY2siLCJiZWZvcmV1bmxvYWQiLCJvcmlnaW5hbEV2ZW50IiwicmV0dXJuVmFsdWUiLCJzaW11bGF0ZSIsImlzU2ltdWxhdGVkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRpbWVTdGFtcCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwicG9pbnRlcmVudGVyIiwicG9pbnRlcmxlYXZlIiwicmVsYXRlZFRhcmdldCIsIm9uIiwib25lIiwiRWIiLCJGYiIsIkdiIiwiSGIiLCJJYiIsIkpiIiwiTGIiLCJNYiIsIm9wdGlvbiIsInRoZWFkIiwiY29sIiwidHIiLCJ0ZCIsIm9wdGdyb3VwIiwidGJvZHkiLCJ0Zm9vdCIsImNvbGdyb3VwIiwiY2FwdGlvbiIsInRoIiwiY2xvbmUiLCJidWlsZEZyYWdtZW50IiwiY3JlYXRlVGV4dE5vZGUiLCJjbGVhbkRhdGEiLCJhcHBlbmQiLCJkb21NYW5pcCIsInByZXBlbmQiLCJpbnNlcnRCZWZvcmUiLCJiZWZvcmUiLCJhZnRlciIsImh0bWwiLCJyZXBsYWNlV2l0aCIsInJlcGxhY2VDaGlsZCIsInNyYyIsIl9ldmFsVXJsIiwicHJlcGVuZFRvIiwiaW5zZXJ0QWZ0ZXIiLCJyZXBsYWNlQWxsIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImNzc1RleHQiLCJiYWNrZ3JvdW5kQ2xpcCIsImNsZWFyQ2xvbmVTdHlsZSIsInBpeGVsUG9zaXRpb24iLCJyZWxpYWJsZU1hcmdpblJpZ2h0IiwibWFyZ2luUmlnaHQiLCJzd2FwIiwiU2IiLCJVYiIsIlZiIiwicG9zaXRpb24iLCJ2aXNpYmlsaXR5IiwiV2IiLCJsZXR0ZXJTcGFjaW5nIiwiZm9udFdlaWdodCIsImNzc051bWJlciIsImNvbHVtbkNvdW50IiwiZmlsbE9wYWNpdHkiLCJmbGV4R3JvdyIsImZsZXhTaHJpbmsiLCJsaW5lSGVpZ2h0Iiwib3JkZXIiLCJvcnBoYW5zIiwid2lkb3dzIiwiekluZGV4Iiwiem9vbSIsImNzc1Byb3BzIiwibWFyZ2luIiwicGFkZGluZyIsImJvcmRlciIsInNob3ciLCJoaWRlIiwidG9nZ2xlIiwicHJvcCIsIm9wdGlvbnMiLCJjdXIiLCJ1bml0IiwicHJvcEhvb2tzIiwicG9zIiwic3RlcCIsImxpbmVhciIsInN3aW5nIiwiY29zIiwiUEkiLCJaYiIsIiRiIiwiX2IiLCJhYyIsInVucXVldWVkIiwib3ZlcmZsb3ciLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJoaWRkZW4iLCJBbmltYXRpb24iLCJ0d2VlbmVyIiwicHJlZmlsdGVyIiwic3BlZWQiLCJzcGVlZHMiLCJvbGQiLCJmYWRlVG8iLCJhbmltYXRlIiwiZmluaXNoIiwidGltZXJzIiwic2xpZGVEb3duIiwic2xpZGVVcCIsInNsaWRlVG9nZ2xlIiwiZmFkZUluIiwiZmFkZU91dCIsImZhZGVUb2dnbGUiLCJ0aWNrIiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJzbG93IiwiZmFzdCIsImRlbGF5IiwiY2xlYXJUaW1lb3V0IiwiY2hlY2tPbiIsIm9wdFNlbGVjdGVkIiwib3B0RGlzYWJsZWQiLCJyYWRpb1ZhbHVlIiwiZWMiLCJmYyIsInJlbW92ZUF0dHIiLCJhdHRySG9va3MiLCJkYyIsInByb3BGaXgiLCJnYyIsInJlbW92ZVByb3AiLCJoYXNBdHRyaWJ1dGUiLCJoYyIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsImhhc0NsYXNzIiwiaWMiLCJ2YWwiLCJ2YWxIb29rcyIsImhvdmVyIiwiYmluZCIsInVuYmluZCIsImRlbGVnYXRlIiwidW5kZWxlZ2F0ZSIsImpjIiwia2MiLCJKU09OIiwicGFyc2UiLCJwYXJzZVhNTCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImxjIiwibWMiLCJuYyIsIm9jIiwicGMiLCJyYyIsInNjIiwidGMiLCJ1YyIsIndjIiwieGMiLCJhY3RpdmUiLCJsYXN0TW9kaWZpZWQiLCJldGFnIiwidXJsIiwiaXNMb2NhbCIsInByb2Nlc3NEYXRhIiwiYXN5bmMiLCJjb250ZW50VHlwZSIsInhtbCIsImpzb24iLCJyZXNwb25zZUZpZWxkcyIsImNvbnZlcnRlcnMiLCJhamF4U2V0dXAiLCJhamF4UHJlZmlsdGVyIiwiYWpheFRyYW5zcG9ydCIsImFqYXgiLCJtaW1lVHlwZSIsImdldFJlc3BvbnNlSGVhZGVyIiwiZGF0YUZpbHRlciIsImRhdGFUeXBlIiwiaWZNb2RpZmllZCIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJzdGF0dXNDb2RlIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwic2V0UmVxdWVzdEhlYWRlciIsIm92ZXJyaWRlTWltZVR5cGUiLCJhYm9ydCIsInN1Y2Nlc3MiLCJtZXRob2QiLCJjcm9zc0RvbWFpbiIsInBhcmFtIiwidHJhZGl0aW9uYWwiLCJoYXNDb250ZW50IiwiaGVhZGVycyIsImJlZm9yZVNlbmQiLCJ0aW1lb3V0Iiwic2VuZCIsImdldEpTT04iLCJnZXRTY3JpcHQiLCJ3cmFwQWxsIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJ3cmFwSW5uZXIiLCJ3cmFwIiwidW53cmFwIiwidmlzaWJsZSIsInljIiwiQWMiLCJCYyIsIkNjIiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwic2VyaWFsaXplIiwic2VyaWFsaXplQXJyYXkiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIkRjIiwiRWMiLCJGYyIsIkdjIiwiQWN0aXZlWE9iamVjdCIsImNvcnMiLCJvcGVuIiwidXNlcm5hbWUiLCJ4aHJGaWVsZHMiLCJvbmxvYWQiLCJvbmVycm9yIiwicmVzcG9uc2VUZXh0Iiwic2NyaXB0IiwiY2hhcnNldCIsInNjcmlwdENoYXJzZXQiLCJIYyIsIkljIiwianNvbnAiLCJqc29ucENhbGxiYWNrIiwiSmMiLCJhbmltYXRlZCIsIktjIiwib2Zmc2V0Iiwic2V0T2Zmc2V0IiwibGVmdCIsInVzaW5nIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicGFnZVlPZmZzZXQiLCJwYWdlWE9mZnNldCIsIm9mZnNldFBhcmVudCIsInNjcm9sbFRvIiwiSGVpZ2h0IiwiV2lkdGgiLCJjb250ZW50Iiwic2l6ZSIsImFuZFNlbGYiLCJMYyIsImpRdWVyeSIsIk1jIiwibm9Db25mbGljdCIsImlzTnVsbE9yRW1wdHkiLCJ1bmRlZmluZWQiLCJCYWNrVG9Ub3AiLCJzZW5kZXIiLCJfbmF2aWdhdG9yUG9zaXRpb24iLCJUb3BUb0JvdHRvbSIsIl9zY3JvbGxGb3JQYWdlU2Nyb2xsIiwiJHRoaXMiLCIkcmVmZXJlbmNlZEl0ZW0iLCJfaXRlbVBvc2l0aW9uIiwiX29mZnNldCIsIl92YWx1ZSIsInBhcnNlSW50IiwiRm9yY2VOdW1lcmljT25seSIsImtleWRvd24iLCJzaGlmdEtleSIsIkNsb3NlUG9wdXAiLCJ0cmlnZ2VyRWxlbWVudCIsIkFnb3JhRGlhbG9nTW9kYWwiLCJBZnRlckxvYWQiLCJDbG9zZU1vZGFsIiwiQ2xlYXJGb3JtdmFsIiwiYWdvcmFEaWFsb2ciLCJfZGVmYXVsdHMiLCJTZXJ2aWNlVXJsIiwiTW9kYWxJZCIsIlBhcmFtcyIsIkh0bWwiLCJQYXJlbnRDc3MiLCJFbmFibGVDbG9zZUJ1dHRvbiIsIkVuYWJsZUxvYWRlciIsIkVuYWJsZUFqYXhIdG1sTG9hZCIsIkhpZGVDbG9zZUJ1dHRvbiIsIkNsb3NlV2hlblVzZXJQcmVzc0VzY2FwZSIsIlRyYW5zaXRpb24iLCJCZWZvcmVMb2FkIiwiX29wdGlvbnMiLCJMb2FkT3B0aW9ucyIsIklzTm90TnVsbCIsIkdldEh0bWwiLCJyZXNwb25zZSIsIkJpbmRIdG1sIiwiU2hvd0FsZXJ0IiwiU2hvd0xvYWRpbmciLCJjb21wb25lbnRIYW5kbGVyIiwidXBncmFkZURvbSIsIlZhbHVlIiwiYWdSZXF1ZXN0IiwiR0VUIiwic2VydmljZVVybCIsInF1ZXJ5U3RyaW5nIiwiZmV0Y2giLCJQT1NUIiwiZm9ybURhdGEiLCJVUkxTZWFyY2hQYXJhbXMiLCJmaW5kTGF6eSIsImZvckVhY2giLCJpdGVtIiwiY2xhc3NMaXN0IiwiYWN0aW9uIiwiYmxhbmtJbWFnZSIsImVsZW1lbnQiLCJjdXJyZW50IiwiZG9jRWwiLCJlbGVtZW50VG9wIiwiZWxlbWVudEJvdHRvbSIsImJvdHRvbSIsInZpZXdwb3J0VG9wIiwidmlld3BvcnRCb3R0b20iLCJpbm5lckhlaWdodCIsImNoZWNraXNJblZpZXdwb3J0Iiwic3JjVXJsIiwiaXNBdXRvIiwiZ2V0QmVzdEZpdENvbnRhaW5lciIsImFkZGl0aW9uYWxVcmwiLCJnZXRGb3JtYXR0ZWRJbWFnZVVybCIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiY29uc29sZSIsImxvZyIsInJvb3RNYXJnaW4iLCJ0aHJlc2hvbGQiLCJhdHRhY2hBY3Rpb24iLCJkZWZhdWx0UmF0aW9XaWR0aCIsImRlZmF1bHRSYXRpb0hlaWdodCIsInJhdGlvIiwicmF0aW9NYXRjaCIsImdyb3VwcyIsImZsb29yIiwicGFyZW50RWxlbWVudCIsIkhlYWRlckJ1cmdlckNoYW5nZSIsInF1ZXJ5U2VsZWN0b3IiLCJCdXJnZXJBY3RpdmUiLCJpdGVtdWNub2RlIiwiaW5uZXJXaWR0aCIsIkJ1cmdlckRlYWN0aXZlIiwic2Nyb2xsV2lkdGgiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsImFnTGF6eSIsInJlZnJlc2giLCJ2YWxpZGF0ZSIsImFjY2l0ZW0iLCJhY2NvcmRpb25JdGVtQm9keSIsIm1heEhlaWdodCIsInNjcm9sbEhlaWdodCIsIkFjY29yZGlvbkZuIiwic2lkZUJhciIsInRhYnNDb250YWluZXIiLCJ0YWIiLCJUYWJGbiIsIm1lbnVpdGVtIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImRyb3BzIiwiRW5hYmxlU2VhcmNoYmVsb3dUYWIiLCJjYW5jZWxidG4iLCJkcm9wIiwiaWR4IiwiZHJvcERpdiIsImNsb3NlYnRuIiwiUHJvcGVydHlTZWFyY2hDb250cm9sV29ya2luZyIsInNjcm9sbFkiLCJyaXBwbGVidXR0b25zIiwiZWwiLCJvZmZzZXRYIiwib2Zmc2V0WSIsInJpcHBsZSIsIlJpcHBsZUZuIiwidmlkZW9FbGVtZW50cyIsInZpZGVvIiwiVmlkZW9QbGF5Rm4iLCJhZ1NsaWRlciIsInNldHRpbmdzIiwiY29udGFpbmVyIiwib25Jbml0Q29tcGxldGUiLCJfc2V0dGluZ3MiLCJhdXRvUGxheSIsImF1dG9QbGF5RGVsYXkiLCJsb29wIiwic2hvd0NvbnRyb2xzIiwiYnRuTGVmdCIsImJ0blJpZ2h0Iiwic2hvd0J1bGxldHMiLCJzaG93QnVsbGV0c0FzVGh1bWIiLCJidWxsZXRDb250YWluZXIiLCJpdGVtV3JhcHBlciIsIndyYXBwZXJNYXNrIiwiaXRlbUNvbnRhaW5lciIsInNEZWZhdWx0IiwiY3VzdG9tIiwiZXh0ZW5kSnNvbiIsIl9zbGlkZXJzIiwiaW5pdFNsaWRlciIsInNsaWRlciIsIl9pdGVtcyIsIl9pdGVtc0NvdW50IiwiX2l0ZW1XaWR0aCIsIl9pdGVtc0luVmlld1BvcnQiLCJyb3VuZCIsIl9hY3RpdmVTSXRlbUlkeCIsIl9hY3RpdmVFSXRlbUlkeCIsIl9idG5MZWZ0IiwiX2J0blJpZ2h0IiwiX3BhdXNlUGxheSIsIl9pc0hlcm9TbGlkZXIiLCJfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrIiwiX3dyYXBwZXJNYXN0U2Nyb2xsTGVmdCIsImlzTmFOIiwic2Nyb2xsUGFkZGluZyIsIl9pdGVtQXJyYXkiLCJzZXRBY3RpdmVJdGVtcyIsIl9idWxsZXQiLCJfdGh1bWJJbWFnZSIsIl90aHVtYkltYWdlUyIsImxvYWRQYWdlIiwiVGh1bWJXaWR0aCIsInN0YXJ0WCIsInN0YXJ0U2Nyb2xsTGVmdCIsImlzRHJhZ2dpbmciLCJzTGVmdCIsIl92aWRlbyIsInBhdXNlIiwiY3VycmVudFRpbWUiLCJwbGF5IiwiaW1nIiwiX2ZvciIsImlzU3luY2VkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInVzZXIiLCJyZW1vdmVJdGVtIiwiR3VpZCIsImxvY2FsVXNlciIsIk5hbWUiLCJGaXJzdE5hbWUiLCJMYXN0TmFtZSIsIkVtYWlsIiwiUGhvbmUiLCJNb2JpbGVQaG9uZSIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJ1cGRhdGUiLCJyZW5kZXIiLCJ1cGRhdGVQcm9wZXJ0eUNvbGxlY3Rpb24iLCJpbml0UHJvcGVydHlDb2xsZWN0aW9uIiwibG9nZ2luZWROb2RlIiwiY29udGFjdCIsIndyYXBwZXIiLCJ1c2VyQ29udGFpbmVyIiwiY2wiLCJub2RlIiwiZ2V0TG9naW5lZEl0ZW0iLCJyZW5kZXJTdGF0ZXMiLCJpc0ZvcmNlZCIsIml0ZW1zIiwiY29sbGVjdGlvblR5cGUiLCJQcm9taXNlIiwicHJvcGVydHlDb2xsZWN0aW9uIiwicHJvcGVydHlDb2xsZWN0aW9uU3RyaW5nIiwiZ2V0UHJvcGVydHlDb2xsZWN0aW9uIiwiSXRlbXMiLCJyZWR1Y2UiLCJpdGVtRG9tIiwiUEsiLCJSVCIsImRvbSIsInJlbmRlclByb3BlcnR5Q29sbGVjdGlvbkl0ZW0iLCJkZXRhaWwiLCJhZ1VzZXIiLCJjb2xsZWN0aW9uIiwiY3VycmVudFZhbHVlc1N0cmluZyIsIkNvbnRhY3RHdWlkIiwiY29udGFjdGd1aWQiLCJldmVudFR5cGUiLCJjaGVja0ZvclN5bmMiLCJjdXJyZW50VmFsdWUiLCJ1cGRhdGVkT24iLCJjdXJyZW50RGF0ZVRpbWUiLCJzZXRNaW51dGVzIiwiZ2V0TWludXRlcyIsImRhdGFUb1JldmlldyIsInJlYWRGcm9tU2VydmVyIiwiYXNzaWduIiwicmVsb2FkIiwibG9hZEV2ZW50IiwiaXNBZ29yYUxvYWRlZCIsImlzQ3NzTG9hZGVkIiwiR2V0UHJvcGVydGllcyIsImRlbWFuZEtleSIsImxheW91dCIsIiRzb3J0IiwiJHBhcmVudCIsInJlY29yZFR5cGUiLCJHZXREZWZhdWx0U29ydEZvclJlY29yZFR5cGUiLCJfZ2V0Q01OQ01OU29ydEJ5IiwiVXJsUXVlcnkiLCJUeXBlT2ZTZWFyY2giLCJJc0NvbnRlbnRQYWdlIiwiRGVtYW5kS2V5IiwiJGh0bWwiLCIkaXRlbUNvbnRleHQiLCIkc2xpZGVDb250ZXh0IiwibWxzTnVtYmVyIiwibWxzQm9hcmQiLCJwcm9qZWN0Q29kZSIsImltYWdlVGVtcGxhdGUiLCJuYXRpdmVUYWIiLCJjb3VudCIsIiRpdGVtV2l0aElEQ29udGV4dCIsInVJRCIsInRlbXBsYXRlIiwicHJlZml4IiwiJG5hdmlnYXRpb25zIiwiJG5leHQiLCIkcHJldiIsIl9sb2FkTW9yZSIsIiRub2RlIiwiJHNlbmRlciIsIm1sc2JvYXJkIiwibWxzbm8iLCJidWlsZEZpcnN0VGVtcGxhdGUiLCJnZXRNaWxsaXNlY29uZHMiLCJHZXRQcm9wZXJ0eUltYWdlR2FsbGVyeSIsInNlbGVjdG9yRWxlbWVudCIsImN1cnJlbnRTZXR0aW5ncyIsImxhbmd1YWdlU291cmNlcyIsImxhbmd1YWdlcyIsImNvZGUiLCJsYWJlbCIsImxvY2FsTGFiZWwiLCJjdXJyZW5jaWVzIiwiYmFzZSIsImZvcm1hdCIsInVuaXRzIiwicHJlc2V0cyIsImN1cnJlbmN5IiwibGFuZ3VhZ2UiLCJtZXNzdXJlbWVudCIsInVuaXRDb252ZXJ0aW9ucyIsInRyYWdldFVuaXQiLCJjb25zdGFudCIsIm5vdGF0aW9uIiwidGFyZ2V0Tm90YXRpb24iLCJyZWNlbnRTdGF0ZSIsInVwZGF0ZUxhbmd1YWdlIiwibGFiZWxzIiwiY3VycmVudExhYmVscyIsImN1cnJlbnRMYWJlbHNTdHJpbmciLCJnZXRMYW5ndWFnZUxhYmVsc0Zyb21TdG9yZSIsImV4cGlyeSIsInNldEhvdXJzIiwiZ2V0SG91cnMiLCJMb2NhbGUiLCJzZXRMYW5ndWFnZVRvU3RvcmUiLCJnZXRMYW5ndWFnZUxhYmVscyIsInVwZGF0ZVRvU2VydmVyIiwibGFiZWxzVG9DaGFuZ2UiLCJleHByZXNzaW9uRm9yQXR0cmlidXRlVmFsdWUiLCJsYXN0SW5kZXgiLCJMYWJlbElEIiwibGJsIiwiZHVtbXlOb2RlIiwibWF0Y2hIdG1sV2l0aExhYmVsIiwiYXR0cmlidXRlIiwiZXhwcmVzc2lvbkZvckF0dHJpYnV0ZSIsImF0dHJpYnV0ZUlkZW50aWZpZXIiLCJBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVWYWx1ZSIsInVwZGF0ZUxhbmd1YWdlTGFiZWwiLCJMYWJlbHMiLCJ1cGRhdGVQcmljZSIsImlzSW5pdCIsImZvcm1hdFN0cmluZyIsImNvbnZlcnRpb25SYXRlc1N0b3JlZCIsImNvbnZlcnRpb25SYXRlcyIsInNldERhdGUiLCJnZXREYXRlIiwidG9JU09TdHJpbmciLCJnZXRDb252ZXJ0aW9uUmF0ZXMiLCJSYXRlcyIsIkV4Y2hhbmdlUmF0ZXMiLCJDb2RlIiwiY3VycmVuY3lNZXRhIiwiZm9ybWF0dGVyIiwibnVtYmVyIiwidG9Mb2NhbGVTdHJpbmciLCJjdXJyZW50Q3VycmVuY3kiLCJwcmljZVRvQ2hhbmdlIiwiY3VycmVudE9mZnNldCIsInBhcmVudENvbGxlY3Rpb24iLCJwYXJlbnRPZmZzZXQiLCJwYXJlbnRQb2ludHMiLCJyaWdodCIsIml0ZW1Qb2ludHMiLCJjbGFzc0F4aXMiLCJ1cGRhdGVJdGVtT2Zmc2V0Q2xhc3MiLCJpc0RlZmF1bHRDdXJyZW5jeUNoYW5nZSIsImV4cHJlc3Npb25Gb3JQcmljZSIsInByaWNlQ29udmVydGVkIiwiQ29uc3RhbnQiLCJ1cGRhdGVQcmljZUZvckl0ZW0iLCJ1cGRhdGVNZXNzdXJlbWVudCIsImlzQXBwbGllZCIsIm1lc3N1cmVtZW50c1RvQ2hhbmdlIiwidXBkYXRlSXRlbU1lc3N1cmVtZW50Iiwicm9vdEVsZW1lbnQiLCJpc1VuaXRGb3VuZCIsInVuaXRDb252ZXJ0aW9uU2NoZW1hIiwiaGF2ZVZhbGlkQXR0cmlidXRlIiwiZ2V0TGFiZWxGb3JBdHRyaWJ1dGUiLCJub3RhdGlvbkV4cHJlc3Npb24iLCJmaW5kTWVzc3VyZW1lbnRGcm9tQXR0cmlidXRlIiwiY3VycmVudExhYmVsIiwibGFiZWxSZXBsYWNlUmVzdWx0IiwicmVwbGFjZU1lc3N1cmVtZW50Iiwic2V0TGFiZWxGb3JBdHRyaWJ1dGUiLCJnZXRWYWx1ZUZvckF0dHJpYnV0ZSIsInZhbHVlUmVwbGFjZVJlc3VsdCIsInJlcGxhY2VNZXNzdXJlbWVudFdpdGhVbml0Iiwic2V0VmFsdWVGb3JBdHRyaWJ1dGUiLCJjaGlsZE5vZGUiLCJleHByZXNzaW9uIiwiZmluZE1lc3N1cmVtZW50RnJvbU5vZGUiLCJjdXJyZW50VGV4dCIsInJlcGxhY2VSZXN1bHQiLCJtb2RlIiwicmVwbGFjZVN1Y2Nlc3MiLCJyZXBsYWNlVW5pdFJlc3VsdCIsIm5vdGF0aW9uRXhwcmVzc2lvbnMiLCJub3RhdGlvbk9ubHlFeHByZXNzaW9ucyIsIm1hdGNoU3VjY2VzcyIsImdldFJlcGxhY2VNZXNzdXJlbWVudEV4cHJlc3Npb25NYXRjaCIsImdldFZhbHVlIiwic3RhcnRJbmRleCIsImVuZEluZGV4IiwibWF0Y2hWYWx1ZSIsImZvcm1hdFZhbHVlIiwic3Vic3RyaW5nIiwidmFsdWVFeHByZXNzaW9uIiwiZW5hYmxlTGFuZ3VhZ2VTZWxlY3RvciIsImdldEZsYWdDc3NDbGFzcyIsImxvY2F0aW9uRmxhZyIsImxhbmd1YWdlRWxlbWVudCIsImxvY2F0aW9uRWxlbWVudCIsInJlbmRlckxhbmd1YWdlRWxlbWVudCIsInJlbmRlckNob2ljZUxpc3QiLCJpdGVtRWxlbWVudCIsInNvdXJjZUl0ZW0iLCJpc0V2ZW50IiwicmVuZGVyTGFuZ3VhZ2VTZWxlY3RvciIsImFjdGl2ZUl0ZW0iLCJlbmdhZ2VMYW5ndWFnZVNlbGVjdG9yIiwiZGlzZW5nYWdlQWN0aW9uTGlzdGVuZXIiLCJkaXNlbmdhZ2VMYW5ndWFnZVNlbGVjdG9yIiwidXBkYXRlVG9zZXJ2ZXJDYWxsIiwidXBkYXRlU3VjY2VzIiwiZmllbGQiLCJvbGRVcGRhdGVTdWNjZXNzIiwicmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9ucyIsInRpdGxlIiwicmVuZGVySXRlbSIsInNlbGVjdGVkSXRlbSIsImZpZWxkS2V5IiwicmVuZGVyRXhpc3QiLCJpdGVtTGlzdCIsIml0ZW1MaXN0VmFsdWUiLCJpdGVtT3B0aW9ucyIsImNob2ljZUl0ZW0iLCJzZWxlY3RlZFZhbHVlIiwic2VsZWN0ZWRJdGVtRnJvbVNvdXJjZSIsImFnTGFuZ3VhZ2UiLCJhdHRhY2hBY3Rpb25zIiwiZXhwcmVzc2lvblN0cmluZyIsIm5vdGF0aW9uRXhwcmVzc2lvblN0cmluZyIsIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIsInN1YkV4cHJlc3Npb25TdHJpbmciLCJzdWJOb3RhdGlvbkV4cHJlc3Npb25TdHJpbmciLCJub3RhdGlvbkl0ZW0iLCJidWlsZFVuaXRDb252ZXJ0aW9uU2NoZW1hIiwiRW5hYmxlRGVtYW5kSW1wb3J0Iiwic2VhcmNoQWN0b24iLCIkZm9ybSIsIl91cmxRdWVyeSIsImNvbXBvc2VVcmxRdWVyeSIsIl9ydCIsIl9kZWZhdWx0U29ydCIsIl9zb3J0VmFsdWUiLCJxdWVyeSIsIiRwcmVmaXgiLCJfcHJlZml4IiwiR2V0U2VhcmNoUHJlZml4Rm9yUmVjb3JkVHlwZSIsIkVuYWJsZVNlYXJjaEZvcm0iLCJzeXN0ZW1GdW5jdGlvbnMiLCJJbnRlcnBvbGF0aW9uIiwiZnVuY3Rpb25BcmdzTGl0ZXJhbHMiLCJmdW5jdGlvbkFyZ3NWYWx1ZXMiLCJwYXJlbnRSZW5kZXJGdW5jdGlvbiIsInJlbmRlckZ1bmN0aW9ucyIsInRlbXBsYXRlU3RyaW5nIiwiZ2V0QXR0cmlidXRlTmFtZXMiLCJidWlsZFJlbmRlckZ1bmN0aW9uIiwiY2xlYW5QcmVJbnRlcnBvbGF0aW9uIiwiaW5wdXRUZXh0IiwicmVuZGVyQmxvY2siLCJyZW5kZXJUZW1wbGF0ZSIsInZhcmlhYmxlcyIsImlzU3lzdGVtRnVuY3Rpb24iLCJpZGVudGlmaWVyIiwibG9jYWxWYXJpYWJsZXMiLCJFeHRyYWN0VmFyaWFibGVzVG9wTGV2ZWxJZGVudGlmaWVycyIsIldhdGNoIiwiaXNDaGFuZ2UiLCJJc0Z1bmN0aW9uIiwiRXh0cmFjdEFyZ3VtZW50VmFyaWFibGVzRm9yRnVuY3Rpb25Gcm9tU3RyaW5nIiwiYXJndW1lbnRJdGVtIiwicmVuZGVyRnVuY3Rpb24iLCJGdW5jdGlvbiIsImludGVycG9sYXRlT2JqZWN0IiwiY3VycmVudFJlbmRlckZ1bmN0aW9ucyIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJjaGlsZERvbSIsIlRFWFRfTk9ERSIsIlByZUludGVycG9sYXRpb24iLCJyb290RG9tIiwiaXNNYXNrZWQiLCJmYWtlRWxlbWVudCIsIkdldFZhbHVlIiwicHJvcGVydHlOYW1lIiwiY3VycmVudFByb3BlcnR5Iiwic3ViUHJvcGVydHkiLCJnZXRWYWx1ZUZyb21GdW5jdGlvbiIsImdldEZ1bmN0aW9uTmFtZSIsIkdldFByb3h5T2JqZWN0IiwicHJveHlPYmplY3QiLCJpdGVtUHJvcGVydHkiLCJTZXRQcm9wZXJ0eVRvUHJveHlPYmplY3QiLCJOb3RpZnkiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwiU2V0UHJvcGVydHlEZXNjcmlwdG9yVG9Qcm94eU9iamVjdCIsInByb3BlcnR5RGVzY3JpcHRvciIsIkNvbnZlck9iamVjdFRvQXJndW1lbnRBcnJheSIsImNvbnZlcnRlZFZhbHVlcyIsInZhbHVlcyIsInJlZmVyZW5jZU5vZGUiLCJ2YXJpYWJsZXNGcm9tU3RyaW5nRXhwcmVzc2lvbiIsInZhcmlhYmxlVG9wTGV2ZWxJZGVudGlmaWVyc0V4cHJlc3Npb24iLCJ2YWx1YXRpb25TdHJpbmciLCJ2YXJpYWJsZSIsIkV4dHJhY3RWYXJpYWJsZXNGcm9tU3RyaW5nIiwiZnVuY3Rpb25zIiwiaWRlbnRpZmllcnMiLCJmdW5jdGlvbiIsImZ1bmN0aW9uQXJndW1lbnRzU3RhcnQiLCJmdW5jdGlvbkFyZ3VtZW50c0VuZCIsIm9wZW5JbmRleCIsImZ1bmN0aW9uQXJndW1lbnRzIiwiZnVuY3Rpb25OYW1lIiwiSWYiLCJub2Rlc0FuZENvbmRpdGlvbiIsIm5leHROb2RlIiwiaXRlbVBhcmVudCIsImFjdGl2ZU5vZGVBbmRDb25kaXRpb24iLCJpZGVudGlmaWVyc1VzZWQiLCJBdHRyaWJ1dGVzIiwiYXR0cmlidXRlVG9SZWFkIiwiaXNEZWZhdWx0IiwidmFsdWF0aW9uRnVuY3Rpb25Bcmd1bWVudHMiLCJub2RlQW5kQ29uZGl0aW9uIiwidmFsdWF0aW9uRnVuY3Rpb24iLCJpbnNlcnRQb3N0aW9uIiwiZmluZERvbVBvc2l0aW9uIiwiY29uZGl0aW9uYWxOb2RlIiwiVHJhbnNmb3JtSW50ZXJuYWwiLCJpc1VzZXJDaGFuZ2UiLCJQcmVJZiIsImlmcyIsImlzRmFrZSIsImZha2VGb3VuZCIsIkZvciIsImh0bWxEb2N1bWVudCIsImxvb3BzIiwiZmFrZUl0ZW0iLCJuZXh0RWxlbWVudFNpYmxpbmciLCJmYWtlSXRlbUNvdW50IiwiaXNmYWtlSXRlbUNvdW50UmVhZGVkIiwibG9vcENvbnN0cmFpbnQiLCJpdHJhdG9yRmluaXNoZWQiLCJmaWVsZHNBbmRWYWx1ZSIsIml0cmF0b3IiLCJodG1sVG9DbG9uZSIsImh0bWxUb0Nsb25lUGFyZW50IiwiaHRtbFRvQ2xvbmVMb2NhdGlvbiIsIml0ZW1FbGVtZW50cyIsImlzRGlydHlGYWtlIiwiY29sbGVjdGlvbkNvbnRleHQiLCJnZXRDb2xsZWN0aW9uT2JqZWN0IiwiY29sbGVjdGlvbkNvbnRleHRGaWVsZCIsImdldENvbGxlY3Rpb25OYW1lIiwid3JpdGFibGUiLCJpdGVtc0NvbGxlY3Rpb24iLCJpdGVtSW5kZXgiLCJpc0ZpcnN0IiwicmVtb3ZlUHJlRm9yIiwiaXRlbUZyb21Db2xsZWN0aW9uIiwiY29udGV4dE9iamVjdCIsImNsb25lZEVsZW1lbnQiLCJQcmVGb3JQYXJ0aWFsIiwiZ2V0UGFyYW1ldGVyTmFtZSIsImdldEZ1bmN0aW9uRnJvbUNvbGxlY3Rpb24iLCJhcmdzIiwiX19wcm90b19fIiwia2V5cyIsInBhcmFtc1N0cmluZyIsInBhcmFtcyIsInBhcmFtc0l0ZW0iLCJpc1BhcmFtVmFsdWUiLCJwYXJhbU5hbWUiLCJwYXJhbVZhbHVlIiwiY3VycmVudEZ1bmN0aW9uIiwibmV4dEl0ZW0iLCJvbGROZXh0IiwibGFzdEl0ZW0iLCJmaXJzdEl0ZW0iLCJQcmVGb3IiLCJ0YWdOYW1lIiwiY2xvbmVJdGVtIiwiY2xvbmVJdGVtQ291bnQiLCJjbG9uZUl0ZW1Db3VudFN0cmluZyIsIlByZVRyYW5zZm9ybUludGVybmFsIiwiZmluZFJlbmRlcnMiLCJyZXN1bHRGdW5jdGlvbiIsImV2ZW50TmFtZSIsIml0ZW1IdG1sIiwicmVxdWVzdERhdGEiLCJwcm9jZXNzUmVxdWVzdERhdGEiLCJpbml0UGFnZSIsInJlbmRlck5hbWUiLCJyZW5kZXJDb21wbGV0ZSIsIlBhZ2VTaXplIiwiUGFnZU51bWJlciIsInBhZ2VkRGF0YSIsImFnUmVuZGVyIiwiaHlkcmF0ZSIsIm5leHRQYWdlIiwicHJldmlvdXNQYWdlIiwibW9yZVBhZ2UiLCJwcmV2aW91cyIsIm1vcmUiLCJwYWdlZFJlc3VsdCIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiZGVmaW5pdGlvbiIsIm9iaiIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIl0sInNvdXJjZVJvb3QiOiIifQ==
|