You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3 lines
1.4 MiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"use strict";var t=require("obsidian");function e(t,e,n,r){return new(n||(n=Promise))((function(i,a){function l(t){try{u(r.next(t))}catch(t){a(t)}}function o(t){try{u(r.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(l,o)}u((r=r.apply(t,e||[])).next())}))}function n(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function r(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function i(t){let e,i,l;function o(t,n,r=0,a=t.length){if(r<a){if(0!==e(n,n))return a;do{const e=r+a>>>1;i(t[e],n)<0?r=e+1:a=e}while(r<a)}return r}return 2!==t.length?(e=n,i=(e,r)=>n(t(e),r),l=(e,n)=>t(e)-n):(e=t===n||t===r?t:a,i=t,l=t),{left:o,center:function(t,e,n=0,r=t.length){const i=o(t,e,n,r-1);return i>n&&l(t[i-1],e)>-l(t[i],e)?i-1:i},right:function(t,n,r=0,a=t.length){if(r<a){if(0!==e(n,n))return a;do{const e=r+a>>>1;i(t[e],n)<=0?r=e+1:a=e}while(r<a)}return r}}}function a(){return 0}"function"==typeof SuppressedError&&SuppressedError;const l=i(n).right;i((function(t){return null===t?NaN:+t})).center;var o=l;class u extends Map{constructor(t,e=f){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[e,n]of t)this.set(e,n)}get(t){return super.get(s(this,t))}has(t){return super.has(s(this,t))}set(t,e){return super.set(function({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}(this,t),e)}delete(t){return super.delete(function({_intern:t,_key:e},n){const r=e(n);t.has(r)&&(n=t.get(r),t.delete(r));return n}(this,t))}}function s({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function f(t){return null!==t&&"object"==typeof t?t.valueOf():t}function c(t,e){return(null==t||!(t>=t))-(null==e||!(e>=e))||(t<e?-1:t>e?1:0)}const h=Math.sqrt(50),d=Math.sqrt(10),g=Math.sqrt(2);function p(t,e,n){const r=(e-t)/Math.max(0,n),i=Math.floor(Math.log10(r)),a=r/Math.pow(10,i),l=a>=h?10:a>=d?5:a>=g?2:1;let o,u,s;return i<0?(s=Math.pow(10,-i)/l,o=Math.round(t*s),u=Math.round(e*s),o/s<t&&++o,u/s>e&&--u,s=-s):(s=Math.pow(10,i)*l,o=Math.round(t/s),u=Math.round(e/s),o*s<t&&++o,u*s>e&&--u),u<o&&.5<=n&&n<2?p(t,e,2*n):[o,u,s]}function y(t,e,n){return p(t=+t,e=+e,n=+n)[2]}function m(t,e,n){n=+n;const r=(e=+e)<(t=+t),i=r?y(e,t,n):y(t,e,n);return(r?-1:1)*(i<0?1/-i:i)}function v(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n<e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n<i||void 0===n&&i>=i)&&(n=i)}return n}function x(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function A(t,e,r=0,i=1/0,a){if(e=Math.floor(e),r=Math.floor(Math.max(0,r)),i=Math.floor(Math.min(t.length-1,i)),!(r<=e&&e<=i))return t;for(a=void 0===a?c:function(t=n){if(t===n)return c;if("function"!=typeof t)throw new TypeError("compare is not a function");return(e,n)=>{const r=t(e,n);return r||0===r?r:(0===t(n,n))-(0===t(e,e))}}(a);i>r;){if(i-r>600){const n=i-r+1,l=e-r+1,o=Math.log(n),u=.5*Math.exp(2*o/3),s=.5*Math.sqrt(o*u*(n-u)/n)*(l-n/2<0?-1:1);A(t,e,Math.max(r,Math.floor(e-l*u/n+s)),Math.min(i,Math.floor(e+(n-l)*u/n+s)),a)}const n=t[e];let l=r,o=i;for(w(t,r,e),a(t[i],n)>0&&w(t,r,i);l<o;){for(w(t,l,o),++l,--o;a(t[l],n)<0;)++l;for(;a(t[o],n)>0;)--o}0===a(t[r],n)?w(t,r,o):(++o,w(t,o,i)),o<=e&&(r=o+1),e<=o&&(i=o-1)}return t}function w(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function b(t,e){return function(t,e,n){if(t=Float64Array.from(function*(t,e){if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)null!=(r=e(r,++n,t))&&(r=+r)>=r&&(yield r)}}(t,n)),(r=t.length)&&!isNaN(e=+e)){if(e<=0||r<2)return x(t);if(e>=1)return v(t);var r,i=(r-1)*e,a=Math.floor(i),l=v(A(t,a).subarray(0,a+1));return l+(x(t.subarray(a+1))-l)*(i-a)}}(t,.5,e)}function D(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),a=new Array(i);++r<i;)a[r]=t+r*n;return a}function k(t,e){let n=0;if(void 0===e)for(let e of t)(e=+e)&&(n+=e);else{let r=-1;for(let i of t)(i=+e(i,++r,t))&&(n+=i)}return n}function C(t){return t}var M=1,T=2,_=3,E=4,F=1e-6;function S(t){return"translate("+t+",0)"}function B(t){return"translate(0,"+t+")"}function N(t){return e=>+t(e)}function I(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function L(){return!this.__axis}function V(t,e){var n=[],r=null,i=null,a=6,l=6,o=3,u="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,s=t===M||t===E?-1:1,f=t===E||t===T?"x":"y",c=t===M||t===_?S:B;function h(h){var d=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,g=null==i?e.tickFormat?e.tickFormat.apply(e,n):C:i,p=Math.max(a,0)+o,y=e.range(),m=+y[0]+u,v=+y[y.length-1]+u,x=(e.bandwidth?I:N)(e.copy(),u),A=h.selection?h.selection():h,w=A.selectAll(".domain").data([null]),b=A.selectAll(".tick").data(d,e).order(),D=b.exit(),k=b.enter().append("g").attr("class","tick"),S=b.select("line"),B=b.select("text");w=w.merge(w.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),b=b.merge(k),S=S.merge(k.append("line").attr("stroke","currentColor").attr(f+"2",s*a)),B=B.merge(k.append("text").attr("fill","currentColor").attr(f,s*p).attr("dy",t===M?"0em":t===_?"0.71em":"0.32em")),h!==A&&(w=w.transition(h),b=b.transition(h),S=S.transition(h),B=B.transition(h),D=D.transition(h).attr("opacity",F).attr("transform",(function(t){return isFinite(t=x(t))?c(t+u):this.getAttribute("transform")})),k.attr("opacity",F).attr("transform",(function(t){var e=this.parentNode.__axis;return c((e&&isFinite(e=e(t))?e:x(t))+u)}))),D.remove(),w.attr("d",t===E||t===T?l?"M"+s*l+","+m+"H"+u+"V"+v+"H"+s*l:"M"+u+","+m+"V"+v:l?"M"+m+","+s*l+"V"+u+"H"+v+"V"+s*l:"M"+m+","+u+"H"+v),b.attr("opacity",1).attr("transform",(function(t){return c(x(t)+u)})),S.attr(f+"2",s*a),B.attr(f,s*p).text(g),A.filter(L).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===T?"start":t===E?"end":"middle"),A.each((function(){this.__axis=x}))}return h.scale=function(t){return arguments.length?(e=t,h):e},h.ticks=function(){return n=Array.from(arguments),h},h.tickArguments=function(t){return arguments.length?(n=null==t?[]:Array.from(t),h):n.slice()},h.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),h):r&&r.slice()},h.tickFormat=function(t){return arguments.length?(i=t,h):i},h.tickSize=function(t){return arguments.length?(a=l=+t,h):a},h.tickSizeInner=function(t){return arguments.length?(a=+t,h):a},h.tickSizeOuter=function(t){return arguments.length?(l=+t,h):l},h.tickPadding=function(t){return arguments.length?(o=+t,h):o},h.offset=function(t){return arguments.length?(u=+t,h):u},h}function O(t){return V(_,t)}function P(t){return V(E,t)}var $={value:()=>{}};function Y(){for(var t,e=0,n=arguments.length,r={};e<n;++e){if(!(t=arguments[e]+"")||t in r||/[\s.]/.test(t))throw new Error("illegal type: "+t);r[t]=[]}return new z(r)}function z(t){this._=t}function R(t,e){for(var n,r=0,i=t.length;r<i;++r)if((n=t[r]).name===e)return n.value}function U(t,e,n){for(var r=0,i=t.length;r<i;++r)if(t[r].name===e){t[r]=$,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=n&&t.push({name:e,value:n}),t}z.prototype=Y.prototype={constructor:z,on:function(t,e){var n,r,i=this._,a=(r=i,(t+"").trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");if(n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),l=-1,o=a.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++l<o;)if(n=(t=a[l]).type)i[n]=U(i[n],t.name,e);else if(null==e)for(n in i)i[n]=U(i[n],t.name,null);return this}for(;++l<o;)if((n=(t=a[l]).type)&&(n=R(i[n],t.name)))return n},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new z(t)},call:function(t,e){if((n=arguments.length-2)>0)for(var n,r,i=new Array(n),a=0;a<n;++a)i[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=0,n=(r=this._[t]).length;a<n;++a)r[a].value.apply(e,i)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],i=0,a=r.length;i<a;++i)r[i].value.apply(e,n)}};var H="http://www.w3.org/1999/xhtml",X={svg:"http://www.w3.org/2000/svg",xhtml:H,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function W(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),X.hasOwnProperty(e)?{space:X[e],local:t}:t}function j(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===H&&e.documentElement.namespaceURI===H?e.createElement(t):e.createElementNS(n,t)}}function q(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function G(t){var e=W(t);return(e.local?q:j)(e)}function Q(){}function Z(t){return null==t?Q:function(){return this.querySelector(t)}}function K(){return[]}function J(t){return null==t?K:function(){return this.querySelectorAll(t)}}function tt(t){return function(){return function(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}(t.apply(this,arguments))}}function et(t){return function(){return this.matches(t)}}function nt(t){return function(e){return e.matches(t)}}var rt=Array.prototype.find;function it(){return this.firstElementChild}var at=Array.prototype.filter;function lt(){return Array.from(this.children)}function ot(t){return new Array(t.length)}function ut(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function st(t,e,n,r,i,a){for(var l,o=0,u=e.length,s=a.length;o<s;++o)(l=e[o])?(l.__data__=a[o],r[o]=l):n[o]=new ut(t,a[o]);for(;o<u;++o)(l=e[o])&&(i[o]=l)}function ft(t,e,n,r,i,a,l){var o,u,s,f=new Map,c=e.length,h=a.length,d=new Array(c);for(o=0;o<c;++o)(u=e[o])&&(d[o]=s=l.call(u,u.__data__,o,e)+"",f.has(s)?i[o]=u:f.set(s,u));for(o=0;o<h;++o)s=l.call(t,a[o],o,a)+"",(u=f.get(s))?(r[o]=u,u.__data__=a[o],f.delete(s)):n[o]=new ut(t,a[o]);for(o=0;o<c;++o)(u=e[o])&&f.get(d[o])===u&&(i[o]=u)}function ct(t){return t.__data__}function ht(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function dt(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function gt(t){return function(){this.removeAttribute(t)}}function pt(t){return function(){this.removeAttributeNS(t.space,t.local)}}function yt(t,e){return function(){this.setAttribute(t,e)}}function mt(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function vt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function xt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function At(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function wt(t){return function(){this.style.removeProperty(t)}}function bt(t,e,n){return function(){this.style.setProperty(t,e,n)}}function Dt(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function kt(t,e){return t.style.getPropertyValue(e)||At(t).getComputedStyle(t,null).getPropertyValue(e)}function Ct(t){return function(){delete this[t]}}function Mt(t,e){return function(){this[t]=e}}function Tt(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function _t(t){return t.trim().split(/^|\s+/)}function Et(t){return t.classList||new Ft(t)}function Ft(t){this._node=t,this._names=_t(t.getAttribute("class")||"")}function St(t,e){for(var n=Et(t),r=-1,i=e.length;++r<i;)n.add(e[r])}function Bt(t,e){for(var n=Et(t),r=-1,i=e.length;++r<i;)n.remove(e[r])}function Nt(t){return function(){St(this,t)}}function It(t){return function(){Bt(this,t)}}function Lt(t,e){return function(){(e.apply(this,arguments)?St:Bt)(this,t)}}function Vt(){this.textContent=""}function Ot(t){return function(){this.textContent=t}}function Pt(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function $t(){this.innerHTML=""}function Yt(t){return function(){this.innerHTML=t}}function zt(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function Rt(){this.nextSibling&&this.parentNode.appendChild(this)}function Ut(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function Ht(){return null}function Xt(){var t=this.parentNode;t&&t.removeChild(this)}function Wt(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function jt(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function qt(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r<a;++r)n=e[r],t.type&&n.type!==t.type||n.name!==t.name?e[++i]=n:this.removeEventListener(n.type,n.listener,n.options);++i?e.length=i:delete this.__on}}}function Gt(t,e,n){return function(){var r,i=this.__on,a=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(i)for(var l=0,o=i.length;l<o;++l)if((r=i[l]).type===t.type&&r.name===t.name)return this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=a,r.options=n),void(r.value=e);this.addEventListener(t.type,a,n),r={type:t.type,name:t.name,value:e,listener:a,options:n},i?i.push(r):this.__on=[r]}}function Qt(t,e,n){var r=At(t),i=r.CustomEvent;"function"==typeof i?i=new i(e,n):(i=r.document.createEvent("Event"),n?(i.initEvent(e,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function Zt(t,e){return function(){return Qt(this,t,e)}}function Kt(t,e){return function(){return Qt(this,t,e.apply(this,arguments))}}ut.prototype={constructor:ut,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}},Ft.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Jt=[null];function te(t,e){this._groups=t,this._parents=e}function ee(){return new te([[document.documentElement]],Jt)}function ne(t){return"string"==typeof t?new te([[document.querySelector(t)]],[document.documentElement]):new te([[t]],Jt)}function re(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function ie(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function ae(){}te.prototype=ee.prototype={constructor:te,select:function(t){"function"!=typeof t&&(t=Z(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,l,o=e[i],u=o.length,s=r[i]=new Array(u),f=0;f<u;++f)(a=o[f])&&(l=t.call(a,a.__data__,f,o))&&("__data__"in a&&(l.__data__=a.__data__),s[f]=l);return new te(r,this._parents)},selectAll:function(t){t="function"==typeof t?tt(t):J(t);for(var e=this._groups,n=e.length,r=[],i=[],a=0;a<n;++a)for(var l,o=e[a],u=o.length,s=0;s<u;++s)(l=o[s])&&(r.push(t.call(l,l.__data__,s,o)),i.push(l));return new te(r,i)},selectChild:function(t){return this.select(null==t?it:function(t){return function(){return rt.call(this.children,t)}}("function"==typeof t?t:nt(t)))},selectChildren:function(t){return this.selectAll(null==t?lt:function(t){return function(){return at.call(this.children,t)}}("function"==typeof t?t:nt(t)))},filter:function(t){"function"!=typeof t&&(t=et(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,l=e[i],o=l.length,u=r[i]=[],s=0;s<o;++s)(a=l[s])&&t.call(a,a.__data__,s,l)&&u.push(a);return new te(r,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,ct);var n=e?ft:st,r=this._parents,i=this._groups;"function"!=typeof t&&(t=function(t){return function(){return t}}(t));for(var a=i.length,l=new Array(a),o=new Array(a),u=new Array(a),s=0;s<a;++s){var f=r[s],c=i[s],h=c.length,d=ht(t.call(f,f&&f.__data__,s,r)),g=d.length,p=o[s]=new Array(g),y=l[s]=new Array(g);n(f,c,p,y,u[s]=new Array(h),d,e);for(var m,v,x=0,A=0;x<g;++x)if(m=p[x]){for(x>=A&&(A=x+1);!(v=y[A])&&++A<g;);m._next=v||null}}return(l=new te(l,r))._enter=o,l._exit=u,l},enter:function(){return new te(this._enter||this._groups.map(ot),this._parents)},exit:function(){return new te(this._exit||this._groups.map(ot),this._parents)},join:function(t,e,n){var r=this.enter(),i=this,a=this.exit();return"function"==typeof t?(r=t(r))&&(r=r.selection()):r=r.append(t+""),null!=e&&(i=e(i))&&(i=i.selection()),null==n?a.remove():n(a),r&&i?r.merge(i).order():i},merge:function(t){for(var e=t.selection?t.selection():t,n=this._groups,r=e._groups,i=n.length,a=r.length,l=Math.min(i,a),o=new Array(i),u=0;u<l;++u)for(var s,f=n[u],c=r[u],h=f.length,d=o[u]=new Array(h),g=0;g<h;++g)(s=f[g]||c[g])&&(d[g]=s);for(;u<i;++u)o[u]=n[u];return new te(o,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var r,i=t[e],a=i.length-1,l=i[a];--a>=0;)(r=i[a])&&(l&&4^r.compareDocumentPosition(l)&&l.parentNode.insertBefore(r,l),l=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=dt);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a<r;++a){for(var l,o=n[a],u=o.length,s=i[a]=new Array(u),f=0;f<u;++f)(l=o[f])&&(s[f]=l);s.sort(e)}return new te(i,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r=t[e],i=0,a=r.length;i<a;++i){var l=r[i];if(l)return l}return null},size:function(){let t=0;for(const e of this)++t;return t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,n=0,r=e.length;n<r;++n)for(var i,a=e[n],l=0,o=a.length;l<o;++l)(i=a[l])&&t.call(i,i.__data__,l,a);return this},attr:function(t,e){var n=W(t);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((null==e?n.local?pt:gt:"function"==typeof e?n.local?xt:vt:n.local?mt:yt)(n,e))},style:function(t,e,n){return arguments.length>1?this.each((null==e?wt:"function"==typeof e?Dt:bt)(t,e,null==n?"":n)):kt(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Ct:"function"==typeof e?Tt:Mt)(t,e)):this.node()[t]},classed:function(t,e){var n=_t(t+"");if(arguments.length<2){for(var r=Et(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each(("function"==typeof e?Lt:e?Nt:It)(n,e))},text:function(t){return arguments.length?this.each(null==t?Vt:("function"==typeof t?Pt:Ot)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?$t:("function"==typeof t?zt:Yt)(t)):this.node().innerHTML},raise:function(){return this.each(Rt)},lower:function(){return this.each(Ut)},append:function(t){var e="function"==typeof t?t:G(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var n="function"==typeof t?t:G(t),r=null==e?Ht:"function"==typeof e?e:Z(e);return this.select((function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(Xt)},clone:function(t){return this.select(t?jt:Wt)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,n){var r,i,a=function(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}(t+""),l=a.length;if(!(arguments.length<2)){for(o=e?Gt:qt,r=0;r<l;++r)this.each(o(a[r],e,n));return this}var o=this.node().__on;if(o)for(var u,s=0,f=o.length;s<f;++s)for(r=0,u=o[s];r<l;++r)if((i=a[r]).type===u.type&&i.name===u.name)return u.value},dispatch:function(t,e){return this.each(("function"==typeof e?Kt:Zt)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r,i=t[e],a=0,l=i.length;a<l;++a)(r=i[a])&&(yield r)}};var le=.7,oe=1/le,ue="\\s*([+-]?\\d+)\\s*",se="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",fe="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",ce=/^#([0-9a-f]{3,8})$/,he=new RegExp(`^rgb\\(${ue},${ue},${ue}\\)$`),de=new RegExp(`^rgb\\(${fe},${fe},${fe}\\)$`),ge=new RegExp(`^rgba\\(${ue},${ue},${ue},${se}\\)$`),pe=new RegExp(`^rgba\\(${fe},${fe},${fe},${se}\\)$`),ye=new RegExp(`^hsl\\(${se},${fe},${fe}\\)$`),me=new RegExp(`^hsla\\(${se},${fe},${fe},${se}\\)$`),ve={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function xe(){return this.rgb().formatHex()}function Ae(){return this.rgb().formatRgb()}function we(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=ce.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?be(e):3===n?new Me(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?De(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?De(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=he.exec(t))?new Me(e[1],e[2],e[3],1):(e=de.exec(t))?new Me(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=ge.exec(t))?De(e[1],e[2],e[3],e[4]):(e=pe.exec(t))?De(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=ye.exec(t))?Be(e[1],e[2]/100,e[3]/100,1):(e=me.exec(t))?Be(e[1],e[2]/100,e[3]/100,e[4]):ve.hasOwnProperty(t)?be(ve[t]):"transparent"===t?new Me(NaN,NaN,NaN,0):null}function be(t){return new Me(t>>16&255,t>>8&255,255&t,1)}function De(t,e,n,r){return r<=0&&(t=e=n=NaN),new Me(t,e,n,r)}function ke(t){return t instanceof ae||(t=we(t)),t?new Me((t=t.rgb()).r,t.g,t.b,t.opacity):new Me}function Ce(t,e,n,r){return 1===arguments.length?ke(t):new Me(t,e,n,null==r?1:r)}function Me(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Te(){return`#${Se(this.r)}${Se(this.g)}${Se(this.b)}`}function _e(){const t=Ee(this.opacity);return`${1===t?"rgb(":"rgba("}${Fe(this.r)}, ${Fe(this.g)}, ${Fe(this.b)}${1===t?")":`, ${t})`}`}function Ee(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function Fe(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function Se(t){return((t=Fe(t))<16?"0":"")+t.toString(16)}function Be(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Ie(t,e,n,r)}function Ne(t){if(t instanceof Ie)return new Ie(t.h,t.s,t.l,t.opacity);if(t instanceof ae||(t=we(t)),!t)return new Ie;if(t instanceof Ie)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),l=NaN,o=a-i,u=(a+i)/2;return o?(l=e===a?(n-r)/o+6*(n<r):n===a?(r-e)/o+2:(e-n)/o+4,o/=u<.5?a+i:2-a-i,l*=60):o=u>0&&u<1?0:l,new Ie(l,o,u,t.opacity)}function Ie(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Le(t){return(t=(t||0)%360)<0?t+360:t}function Ve(t){return Math.max(0,Math.min(1,t||0))}function Oe(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}re(ae,we,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:xe,formatHex:xe,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return Ne(this).formatHsl()},formatRgb:Ae,toString:Ae}),re(Me,Ce,ie(ae,{brighter(t){return t=null==t?oe:Math.pow(oe,t),new Me(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?le:Math.pow(le,t),new Me(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Me(Fe(this.r),Fe(this.g),Fe(this.b),Ee(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Te,formatHex:Te,formatHex8:function(){return`#${Se(this.r)}${Se(this.g)}${Se(this.b)}${Se(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:_e,toString:_e})),re(Ie,(function(t,e,n,r){return 1===arguments.length?Ne(t):new Ie(t,e,n,null==r?1:r)}),ie(ae,{brighter(t){return t=null==t?oe:Math.pow(oe,t),new Ie(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?le:Math.pow(le,t),new Ie(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Me(Oe(t>=240?t-240:t+120,i,r),Oe(t,i,r),Oe(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new Ie(Le(this.h),Ve(this.s),Ve(this.l),Ee(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Ee(this.opacity);return`${1===t?"hsl(":"hsla("}${Le(this.h)}, ${100*Ve(this.s)}%, ${100*Ve(this.l)}%${1===t?")":`, ${t})`}`}}));const Pe=Math.PI/180,$e=180/Math.PI,Ye=.96422,ze=1,Re=.82521,Ue=4/29,He=6/29,Xe=3*He*He,We=He*He*He;function je(t){if(t instanceof Ge)return new Ge(t.l,t.a,t.b,t.opacity);if(t instanceof tn)return en(t);t instanceof Me||(t=ke(t));var e,n,r=Je(t.r),i=Je(t.g),a=Je(t.b),l=Qe((.2225045*r+.7168786*i+.0606169*a)/ze);return r===i&&i===a?e=n=l:(e=Qe((.4360747*r+.3850649*i+.1430804*a)/Ye),n=Qe((.0139322*r+.0971045*i+.7141733*a)/Re)),new Ge(116*l-16,500*(e-l),200*(l-n),t.opacity)}function qe(t,e,n,r){return 1===arguments.length?je(t):new Ge(t,e,n,null==r?1:r)}function Ge(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function Qe(t){return t>We?Math.pow(t,1/3):t/Xe+Ue}function Ze(t){return t>He?t*t*t:Xe*(t-Ue)}function Ke(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Je(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function tn(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function en(t){if(isNaN(t.h))return new Ge(t.l,0,0,t.opacity);var e=t.h*Pe;return new Ge(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}re(Ge,qe,ie(ae,{brighter(t){return new Ge(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker(t){return new Ge(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return new Me(Ke(3.1338561*(e=Ye*Ze(e))-1.6168667*(t=ze*Ze(t))-.4906146*(n=Re*Ze(n))),Ke(-.9787684*e+1.9161415*t+.033454*n),Ke(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),re(tn,(function(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof tn)return new tn(t.h,t.c,t.l,t.opacity);if(t instanceof Ge||(t=je(t)),0===t.a&&0===t.b)return new tn(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*$e;return new tn(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}(t):new tn(t,e,n,null==r?1:r)}),ie(ae,{brighter(t){return new tn(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker(t){return new tn(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb(){return en(this).rgb()}}));var nn=t=>()=>t;function rn(t){return 1==(t=+t)?an:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):nn(isNaN(e)?n:e)}}function an(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):nn(isNaN(t)?e:t)}var ln=function t(e){var n=rn(e);function r(t,e){var r=n((t=Ce(t)).r,(e=Ce(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),l=an(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=l(e),t+""}}return r.gamma=t,r}(1);var on,un=(on=function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],l=r>0?t[r-1]:2*i-a,o=r<e-1?t[r+2]:2*a-i;return function(t,e,n,r,i){var a=t*t,l=a*t;return((1-3*t+3*a-l)*e+(4-6*a+3*l)*n+(1+3*t+3*a-3*l)*r+l*i)/6}((n-r/e)*e,l,i,a,o)}},function(t){var e,n,r=t.length,i=new Array(r),a=new Array(r),l=new Array(r);for(e=0;e<r;++e)n=Ce(t[e]),i[e]=n.r||0,a[e]=n.g||0,l[e]=n.b||0;return i=on(i),a=on(a),l=on(l),n.opacity=1,function(t){return n.r=i(t),n.g=a(t),n.b=l(t),n+""}});function sn(t,e){e||(e=[]);var n,r=t?Math.min(e.length,t.length):0,i=e.slice();return function(a){for(n=0;n<r;++n)i[n]=t[n]*(1-a)+e[n]*a;return i}}function fn(t,e){var n,r=e?e.length:0,i=t?Math.min(r,t.length):0,a=new Array(i),l=new Array(r);for(n=0;n<i;++n)a[n]=mn(t[n],e[n]);for(;n<r;++n)l[n]=e[n];return function(t){for(n=0;n<i;++n)l[n]=a[n](t);return l}}function cn(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}}function hn(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function dn(t,e){var n,r={},i={};for(n in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)n in t?r[n]=mn(t[n],e[n]):i[n]=e[n];return function(t){for(n in r)i[n]=r[n](t);return i}}var gn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pn=new RegExp(gn.source,"g");function yn(t,e){var n,r,i,a=gn.lastIndex=pn.lastIndex=0,l=-1,o=[],u=[];for(t+="",e+="";(n=gn.exec(t))&&(r=pn.exec(e));)(i=r.index)>a&&(i=e.slice(a,i),o[l]?o[l]+=i:o[++l]=i),(n=n[0])===(r=r[0])?o[l]?o[l]+=r:o[++l]=r:(o[++l]=null,u.push({i:l,x:hn(n,r)})),a=pn.lastIndex;return a<e.length&&(i=e.slice(a),o[l]?o[l]+=i:o[++l]=i),o.length<2?u[0]?function(t){return function(e){return t(e)+""}}(u[0].x):function(t){return function(){return t}}(e):(e=u.length,function(t){for(var n,r=0;r<e;++r)o[(n=u[r]).i]=n.x(t);return o.join("")})}function mn(t,e){var n,r=typeof e;return null==e||"boolean"===r?nn(e):("number"===r?hn:"string"===r?(n=we(e))?(e=n,ln):yn:e instanceof we?ln:e instanceof Date?cn:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}(e)?sn:Array.isArray(e)?fn:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?dn:hn)(t,e)}function vn(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}var xn,An=180/Math.PI,wn={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function bn(t,e,n,r,i,a){var l,o,u;return(l=Math.sqrt(t*t+e*e))&&(t/=l,e/=l),(u=t*n+e*r)&&(n-=t*u,r-=e*u),(o=Math.sqrt(n*n+r*r))&&(n/=o,r/=o,u/=o),t*r<e*n&&(t=-t,e=-e,u=-u,l=-l),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*An,skewX:Math.atan(u)*An,scaleX:l,scaleY:o}}function Dn(t,e,n,r){function i(t){return t.length?t.pop()+" ":""}return function(a,l){var o=[],u=[];return a=t(a),l=t(l),function(t,r,i,a,l,o){if(t!==i||r!==a){var u=l.push("translate(",null,e,null,n);o.push({i:u-4,x:hn(t,i)},{i:u-2,x:hn(r,a)})}else(i||a)&&l.push("translate("+i+e+a+n)}(a.translateX,a.translateY,l.translateX,l.translateY,o,u),function(t,e,n,a){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:hn(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,l.rotate,o,u),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:hn(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,l.skewX,o,u),function(t,e,n,r,a,l){if(t!==n||e!==r){var o=a.push(i(a)+"scale(",null,",",null,")");l.push({i:o-4,x:hn(t,n)},{i:o-2,x:hn(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,l.scaleX,l.scaleY,o,u),a=l=null,function(t){for(var e,n=-1,r=u.length;++n<r;)o[(e=u[n]).i]=e.x(t);return o.join("")}}}var kn=Dn((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?wn:bn(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),Cn=Dn((function(t){return null==t?wn:(xn||(xn=document.createElementNS("http://www.w3.org/2000/svg","g")),xn.setAttribute("transform",t),(t=xn.transform.baseVal.consolidate())?bn((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):wn)}),", ",")",")");function Mn(t,e){var n=an((t=qe(t)).l,(e=qe(e)).l),r=an(t.a,e.a),i=an(t.b,e.b),a=an(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=r(e),t.b=i(e),t.opacity=a(e),t+""}}var Tn,_n,En=0,Fn=0,Sn=0,Bn=1e3,Nn=0,In=0,Ln=0,Vn="object"==typeof performance&&performance.now?performance:Date,On="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Pn(){return In||(On($n),In=Vn.now()+Ln)}function $n(){In=0}function Yn(){this._call=this._time=this._next=null}function zn(t,e,n){var r=new Yn;return r.restart(t,e,n),r}function Rn(){In=(Nn=Vn.now())+Ln,En=Fn=0;try{!function(){Pn(),++En;for(var t,e=Tn;e;)(t=In-e._time)>=0&&e._call.call(void 0,t),e=e._next;--En}()}finally{En=0,function(){var t,e,n=Tn,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Tn=e);_n=t,Hn(r)}(),In=0}}function Un(){var t=Vn.now(),e=t-Nn;e>Bn&&(Ln-=e,Nn=t)}function Hn(t){En||(Fn&&(Fn=clearTimeout(Fn)),t-In>24?(t<1/0&&(Fn=setTimeout(Rn,t-Vn.now()-Ln)),Sn&&(Sn=clearInterval(Sn))):(Sn||(Nn=Vn.now(),Sn=setInterval(Un,Bn)),En=1,On(Rn)))}function Xn(t,e,n){var r=new Yn;return e=null==e?0:+e,r.restart((n=>{r.stop(),t(n+e)}),e,n),r}Yn.prototype=zn.prototype={constructor:Yn,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Pn():+n)+(null==e?0:+e),this._next||_n===this||(_n?_n._next=this:Tn=this,_n=this),this._call=t,this._time=n,Hn()},stop:function(){this._call&&(this._call=null,this._time=1/0,Hn())}};var Wn=Y("start","end","cancel","interrupt"),jn=[],qn=0,Gn=1,Qn=2,Zn=3,Kn=4,Jn=5,tr=6;function er(t,e,n,r,i,a){var l=t.__transition;if(l){if(n in l)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(t){n.state=Gn,n.timer.restart(l,n.delay,n.time),n.delay<=t&&l(t-n.delay)}function l(a){var s,f,c,h;if(n.state!==Gn)return u();for(s in i)if((h=i[s]).name===n.name){if(h.state===Zn)return Xn(l);h.state===Kn?(h.state=tr,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete i[s]):+s<e&&(h.state=tr,h.timer.stop(),h.on.call("cancel",t,t.__data__,h.index,h.group),delete i[s])}if(Xn((function(){n.state===Zn&&(n.state=Kn,n.timer.restart(o,n.delay,n.time),o(a))})),n.state=Qn,n.on.call("start",t,t.__data__,n.index,n.group),n.state===Qn){for(n.state=Zn,r=new Array(c=n.tween.length),s=0,f=-1;s<c;++s)(h=n.tween[s].value.call(t,t.__data__,n.index,n.group))&&(r[++f]=h);r.length=f+1}}function o(e){for(var i=e<n.duration?n.ease.call(null,e/n.duration):(n.timer.restart(u),n.state=Jn,1),a=-1,l=r.length;++a<l;)r[a].call(t,i);n.state===Jn&&(n.on.call("end",t,t.__data__,n.index,n.group),u())}function u(){for(var r in n.state=tr,n.timer.stop(),delete i[e],i)return;delete t.__transition}i[e]=n,n.timer=zn(a,0,n.time)}(t,n,{name:e,index:r,group:i,on:Wn,tween:jn,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:qn})}function nr(t,e){var n=ir(t,e);if(n.state>qn)throw new Error("too late; already scheduled");return n}function rr(t,e){var n=ir(t,e);if(n.state>Zn)throw new Error("too late; already running");return n}function ir(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function ar(t,e){var n,r;return function(){var i=rr(this,t),a=i.tween;if(a!==n)for(var l=0,o=(r=n=a).length;l<o;++l)if(r[l].name===e){(r=r.slice()).splice(l,1);break}i.tween=r}}function lr(t,e,n){var r,i;if("function"!=typeof n)throw new Error;return function(){var a=rr(this,t),l=a.tween;if(l!==r){i=(r=l).slice();for(var o={name:e,value:n},u=0,s=i.length;u<s;++u)if(i[u].name===e){i[u]=o;break}u===s&&i.push(o)}a.tween=i}}function or(t,e,n){var r=t._id;return t.each((function(){var t=rr(this,r);(t.value||(t.value={}))[e]=n.apply(this,arguments)})),function(t){return ir(t,r).value[e]}}function ur(t,e){var n;return("number"==typeof e?hn:e instanceof we?ln:(n=we(e))?(e=n,ln):yn)(t,e)}function sr(t){return function(){this.removeAttribute(t)}}function fr(t){return function(){this.removeAttributeNS(t.space,t.local)}}function cr(t,e,n){var r,i,a=n+"";return function(){var l=this.getAttribute(t);return l===a?null:l===r?i:i=e(r=l,n)}}function hr(t,e,n){var r,i,a=n+"";return function(){var l=this.getAttributeNS(t.space,t.local);return l===a?null:l===r?i:i=e(r=l,n)}}function dr(t,e,n){var r,i,a;return function(){var l,o,u=n(this);if(null!=u)return(l=this.getAttribute(t))===(o=u+"")?null:l===r&&o===i?a:(i=o,a=e(r=l,u));this.removeAttribute(t)}}function gr(t,e,n){var r,i,a;return function(){var l,o,u=n(this);if(null!=u)return(l=this.getAttributeNS(t.space,t.local))===(o=u+"")?null:l===r&&o===i?a:(i=o,a=e(r=l,u));this.removeAttributeNS(t.space,t.local)}}function pr(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&function(t,e){return function(n){this.setAttributeNS(t.space,t.local,e.call(this,n))}}(t,i)),n}return i._value=e,i}function yr(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&function(t,e){return function(n){this.setAttribute(t,e.call(this,n))}}(t,i)),n}return i._value=e,i}function mr(t,e){return function(){nr(this,t).delay=+e.apply(this,arguments)}}function vr(t,e){return e=+e,function(){nr(this,t).delay=e}}function xr(t,e){return function(){rr(this,t).duration=+e.apply(this,arguments)}}function Ar(t,e){return e=+e,function(){rr(this,t).duration=e}}var wr=ee.prototype.constructor;function br(t){return function(){this.style.removeProperty(t)}}var Dr=0;function kr(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function Cr(){return++Dr}var Mr=ee.prototype;kr.prototype={constructor:kr,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=Z(t));for(var r=this._groups,i=r.length,a=new Array(i),l=0;l<i;++l)for(var o,u,s=r[l],f=s.length,c=a[l]=new Array(f),h=0;h<f;++h)(o=s[h])&&(u=t.call(o,o.__data__,h,s))&&("__data__"in o&&(u.__data__=o.__data__),c[h]=u,er(c[h],e,n,h,c,ir(o,n)));return new kr(a,this._parents,e,n)},selectAll:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=J(t));for(var r=this._groups,i=r.length,a=[],l=[],o=0;o<i;++o)for(var u,s=r[o],f=s.length,c=0;c<f;++c)if(u=s[c]){for(var h,d=t.call(u,u.__data__,c,s),g=ir(u,n),p=0,y=d.length;p<y;++p)(h=d[p])&&er(h,e,n,p,d,g);a.push(d),l.push(u)}return new kr(a,l,e,n)},selectChild:Mr.selectChild,selectChildren:Mr.selectChildren,filter:function(t){"function"!=typeof t&&(t=et(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,l=e[i],o=l.length,u=r[i]=[],s=0;s<o;++s)(a=l[s])&&t.call(a,a.__data__,s,l)&&u.push(a);return new kr(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,n=t._groups,r=e.length,i=n.length,a=Math.min(r,i),l=new Array(r),o=0;o<a;++o)for(var u,s=e[o],f=n[o],c=s.length,h=l[o]=new Array(c),d=0;d<c;++d)(u=s[d]||f[d])&&(h[d]=u);for(;o<r;++o)l[o]=e[o];return new kr(l,this._parents,this._name,this._id)},selection:function(){return new wr(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,n=Cr(),r=this._groups,i=r.length,a=0;a<i;++a)for(var l,o=r[a],u=o.length,s=0;s<u;++s)if(l=o[s]){var f=ir(l,e);er(l,t,n,s,o,{time:f.time+f.delay+f.duration,delay:0,duration:f.duration,ease:f.ease})}return new kr(r,this._parents,t,n)},call:Mr.call,nodes:Mr.nodes,node:Mr.node,size:Mr.size,empty:Mr.empty,each:Mr.each,on:function(t,e){var n=this._id;return arguments.length<2?ir(this.node(),n).on.on(t):this.each(function(t,e,n){var r,i,a=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?nr:rr;return function(){var l=a(this,t),o=l.on;o!==r&&(i=(r=o).copy()).on(e,n),l.on=i}}(n,t,e))},attr:function(t,e){var n=W(t),r="transform"===n?Cn:ur;return this.attrTween(t,"function"==typeof e?(n.local?gr:dr)(n,r,or(this,"attr."+t,e)):null==e?(n.local?fr:sr)(n):(n.local?hr:cr)(n,r,e))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var r=W(t);return this.tween(n,(r.local?pr:yr)(r,e))},style:function(t,e,n){var r="transform"==(t+="")?kn:ur;return null==e?this.styleTween(t,function(t,e){var n,r,i;return function(){var a=kt(this,t),l=(this.style.removeProperty(t),kt(this,t));return a===l?null:a===n&&l===r?i:i=e(n=a,r=l)}}(t,r)).on("end.style."+t,br(t)):"function"==typeof e?this.styleTween(t,function(t,e,n){var r,i,a;return function(){var l=kt(this,t),o=n(this),u=o+"";return null==o&&(this.style.removeProperty(t),u=o=kt(this,t)),l===u?null:l===r&&u===i?a:(i=u,a=e(r=l,o))}}(t,r,or(this,"style."+t,e))).each(function(t,e){var n,r,i,a,l="style."+e,o="end."+l;return function(){var u=rr(this,t),s=u.on,f=null==u.value[l]?a||(a=br(e)):void 0;s===n&&i===f||(r=(n=s).copy()).on(o,i=f),u.on=r}}(this._id,t)):this.styleTween(t,function(t,e,n){var r,i,a=n+"";return function(){var l=kt(this,t);return l===a?null:l===r?i:i=e(r=l,n)}}(t,r,e),n).on("end.style."+t,null)},styleTween:function(t,e,n){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,function(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&function(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}(t,a,n)),r}return a._value=e,a}(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(or(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,function(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&function(t){return function(e){this.textContent=t.call(this,e)}}(r)),e}return r._value=t,r}(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var r,i=ir(this.node(),n).tween,a=0,l=i.length;a<l;++a)if((r=i[a]).name===t)return r.value;return null}return this.each((null==e?ar:lr)(n,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?mr:vr)(e,t)):ir(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?xr:Ar)(e,t)):ir(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(function(t,e){if("function"!=typeof e)throw new Error;return function(){rr(this,t).ease=e}}(e,t)):ir(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var n=e.apply(this,arguments);if("function"!=typeof n)throw new Error;rr(this,t).ease=n}}(this._id,t))},end:function(){var t,e,n=this,r=n._id,i=n.size();return new Promise((function(a,l){var o={value:l},u={value:function(){0==--i&&a()}};n.each((function(){var n=rr(this,r),i=n.on;i!==t&&((e=(t=i).copy())._.cancel.push(o),e._.interrupt.push(o),e._.end.push(u)),n.on=e})),0===i&&a()}))},[Symbol.iterator]:Mr[Symbol.iterator]};var Tr={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function _r(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return n}ee.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var n,r,i,a=t.__transition,l=!0;if(a){for(i in e=null==e?null:e+"",a)(n=a[i]).name===e?(r=n.state>Qn&&n.state<Jn,n.state=tr,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):l=!1;l&&delete t.__transition}}(this,t)}))},ee.prototype.transition=function(t){var e,n;t instanceof kr?(e=t._id,t=t._name):(e=Cr(),(n=Tr).time=Pn(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,a=0;a<i;++a)for(var l,o=r[a],u=o.length,s=0;s<u;++s)(l=o[s])&&er(l,t,e,s,o,n||_r(l,e));return new kr(r,this._parents,t,e)};const Er=Math.PI,Fr=2*Er,Sr=1e-6,Br=Fr-Sr;function Nr(t){this._+=t[0];for(let e=1,n=t.length;e<n;++e)this._+=arguments[e]+t[e]}class Ir{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?Nr:function(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return Nr;const n=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=Math.round(arguments[e]*n)/n+t[e]}}(t)}moveTo(t,e){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,e){this._append`L${this._x1=+t},${this._y1=+e}`}quadraticCurveTo(t,e,n,r){this._append`Q${+t},${+e},${this._x1=+n},${this._y1=+r}`}bezierCurveTo(t,e,n,r,i,a){this._append`C${+t},${+e},${+n},${+r},${this._x1=+i},${this._y1=+a}`}arcTo(t,e,n,r,i){if(t=+t,e=+e,n=+n,r=+r,(i=+i)<0)throw new Error(`negative radius: ${i}`);let a=this._x1,l=this._y1,o=n-t,u=r-e,s=a-t,f=l-e,c=s*s+f*f;if(null===this._x1)this._append`M${this._x1=t},${this._y1=e}`;else if(c>Sr)if(Math.abs(f*o-u*s)>Sr&&i){let h=n-a,d=r-l,g=o*o+u*u,p=h*h+d*d,y=Math.sqrt(g),m=Math.sqrt(c),v=i*Math.tan((Er-Math.acos((g+c-p)/(2*y*m)))/2),x=v/m,A=v/y;Math.abs(x-1)>Sr&&this._append`L${t+x*s},${e+x*f}`,this._append`A${i},${i},0,0,${+(f*h>s*d)},${this._x1=t+A*o},${this._y1=e+A*u}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,n,r,i,a){if(t=+t,e=+e,a=!!a,(n=+n)<0)throw new Error(`negative radius: ${n}`);let l=n*Math.cos(r),o=n*Math.sin(r),u=t+l,s=e+o,f=1^a,c=a?r-i:i-r;null===this._x1?this._append`M${u},${s}`:(Math.abs(this._x1-u)>Sr||Math.abs(this._y1-s)>Sr)&&this._append`L${u},${s}`,n&&(c<0&&(c=c%Fr+Fr),c>Br?this._append`A${n},${n},0,1,${f},${t-l},${e-o}A${n},${n},0,1,${f},${this._x1=u},${this._y1=s}`:c>Sr&&this._append`A${n},${n},0,${+(c>=Er)},${f},${this._x1=t+n*Math.cos(i)},${this._y1=e+n*Math.sin(i)}`)}rect(t,e,n,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${n=+n}v${+r}h${-n}Z`}toString(){return this._}}function Lr(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function Vr(t){return(t=Lr(Math.abs(t)))?t[1]:NaN}var Or,Pr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function $r(t){if(!(e=Pr.exec(t)))throw new Error("invalid format: "+t);var e;return new Yr({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Yr(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function zr(t,e){var n=Lr(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}$r.prototype=Yr.prototype,Yr.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Rr={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>zr(100*t,e),r:zr,s:function(t,e){var n=Lr(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Or=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,l=r.length;return a===l?r:a>l?r+new Array(a-l+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Lr(t,Math.max(0,e+a-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Ur(t){return t}var Hr,Xr,Wr,jr=Array.prototype.map,qr=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Gr(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Ur:(e=jr.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],l=0,o=e[0],u=0;i>0&&o>0&&(u+o+1>r&&(o=Math.max(1,r-u)),a.push(t.substring(i-=o,i+o)),!((u+=o+1)>r));)o=e[l=(l+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",l=void 0===t.decimal?".":t.decimal+"",o=void 0===t.numerals?Ur:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(jr.call(t.numerals,String)),u=void 0===t.percent?"%":t.percent+"",s=void 0===t.minus?"":t.minus+"",f=void 0===t.nan?"NaN":t.nan+"";function c(t){var e=(t=$r(t)).fill,n=t.align,c=t.sign,h=t.symbol,d=t.zero,g=t.width,p=t.comma,y=t.precision,m=t.trim,v=t.type;"n"===v?(p=!0,v="g"):Rr[v]||(void 0===y&&(y=12),m=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var x="$"===h?i:"#"===h&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",A="$"===h?a:/[%p]/.test(v)?u:"",w=Rr[v],b=/[defgprs%]/.test(v);function D(t){var i,a,u,h=x,D=A;if("c"===v)D=w(t)+D,t="";else{var k=(t=+t)<0||1/t<0;if(t=isNaN(t)?f:w(Math.abs(t),y),m&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r<n;++r)switch(t[r]){case".":i=e=r;break;case"0":0===i&&(i=r),e=r;break;default:if(!+t[r])break t;i>0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),k&&0==+t&&"+"!==c&&(k=!1),h=(k?"("===c?c:s:"-"===c||"("===c?"":c)+h,D=("s"===v?qr[8+Or/3]:"")+D+(k&&"("===c?")":""),b)for(i=-1,a=t.length;++i<a;)if(48>(u=t.charCodeAt(i))||u>57){D=(46===u?l+t.slice(i+1):t.slice(i))+D,t=t.slice(0,i);break}}p&&!d&&(t=r(t,1/0));var C=h.length+t.length+D.length,M=C<g?new Array(g-C+1).join(e):"";switch(p&&d&&(t=r(M+t,M.length?g-D.length:1/0),M=""),n){case"<":t=h+t+D+M;break;case"=":t=h+M+t+D;break;case"^":t=M.slice(0,C=M.length>>1)+h+t+D+M.slice(C);break;default:t=M+h+t+D}return o(t)}return y=void 0===y?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y)),D.toString=function(){return t+""},D}return{format:c,formatPrefix:function(t,e){var n=c(((t=$r(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Vr(e)/3))),i=Math.pow(10,-r),a=qr[8+r/3];return function(t){return n(i*t)+a}}}}function Qr(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}Hr=Gr({thousands:",",grouping:[3],currency:["$",""]}),Xr=Hr.format,Wr=Hr.formatPrefix;const Zr=Symbol("implicit");function Kr(){var t=new u,e=[],n=[],r=Zr;function i(i){let a=t.get(i);if(void 0===a){if(r!==Zr)return r;t.set(i,a=e.push(i)-1)}return n[a%n.length]}return i.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new u;for(const r of n)t.has(r)||t.set(r,e.push(r)-1);return i},i.range=function(t){return arguments.length?(n=Array.from(t),i):n.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return Kr(e,n).unknown(r)},Qr.apply(i,arguments),i}function Jr(t){return+t}var ti=[0,1];function ei(t){return t}function ni(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:function(t){return function(){return t}}(isNaN(e)?NaN:.5)}function ri(t,e,n){var r=t[0],i=t[1],a=e[0],l=e[1];return i<r?(r=ni(i,r),a=n(l,a)):(r=ni(r,i),a=n(a,l)),function(t){return a(r(t))}}function ii(t,e,n){var r=Math.min(t.length,e.length)-1,i=new Array(r),a=new Array(r),l=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++l<r;)i[l]=ni(t[l],t[l+1]),a[l]=n(e[l],e[l+1]);return function(e){var n=o(t,e,1,r)-1;return a[n](i[n](e))}}function ai(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function li(){var t,e,n,r,i,a,l=ti,o=ti,u=mn,s=ei;function f(){var t,e,n,u=Math.min(l.length,o.length);return s!==ei&&(t=l[0],e=l[u-1],t>e&&(n=t,t=e,e=n),s=function(n){return Math.max(t,Math.min(e,n))}),r=u>2?ii:ri,i=a=null,c}function c(e){return null==e||isNaN(e=+e)?n:(i||(i=r(l.map(t),o,u)))(t(s(e)))}return c.invert=function(n){return s(e((a||(a=r(o,l.map(t),hn)))(n)))},c.domain=function(t){return arguments.length?(l=Array.from(t,Jr),f()):l.slice()},c.range=function(t){return arguments.length?(o=Array.from(t),f()):o.slice()},c.rangeRound=function(t){return o=Array.from(t),u=vn,f()},c.clamp=function(t){return arguments.length?(s=!!t||ei,f()):s!==ei},c.interpolate=function(t){return arguments.length?(u=t,f()):u},c.unknown=function(t){return arguments.length?(n=t,c):n},function(n,r){return t=n,e=r,f()}}function oi(){return li()(ei,ei)}function ui(t,e,n,r){var i,a=m(t,e,n);switch((r=$r(null==r?",f":r)).type){case"s":var l=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Vr(e)/3)))-Vr(Math.abs(t)))}(a,l))||(r.precision=i),Wr(r,l);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Vr(e)-Vr(t))+1}(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=function(t){return Math.max(0,-Vr(Math.abs(t)))}(a))||(r.precision=i-2*("%"===r.type))}return Xr(r)}function si(t){var e=t.domain;return t.ticks=function(t){var n=e();return function(t,e,n){if(!((n=+n)>0))return[];if((t=+t)==(e=+e))return[t];const r=e<t,[i,a,l]=r?p(e,t,n):p(t,e,n);if(!(a>=i))return[];const o=a-i+1,u=new Array(o);if(r)if(l<0)for(let t=0;t<o;++t)u[t]=(a-t)/-l;else for(let t=0;t<o;++t)u[t]=(a-t)*l;else if(l<0)for(let t=0;t<o;++t)u[t]=(i+t)/-l;else for(let t=0;t<o;++t)u[t]=(i+t)*l;return u}(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return ui(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i,a=e(),l=0,o=a.length-1,u=a[l],s=a[o],f=10;for(s<u&&(i=u,u=s,s=i,i=l,l=o,o=i);f-- >0;){if((i=y(u,s,n))===r)return a[l]=u,a[o]=s,e(a);if(i>0)u=Math.floor(u/i)*i,s=Math.ceil(s/i)*i;else{if(!(i<0))break;u=Math.ceil(u*i)/i,s=Math.floor(s*i)/i}r=i}return t},t}function fi(){var t=oi();return t.copy=function(){return ai(t,fi())},Qr.apply(t,arguments),si(t)}const ci=new Date,hi=new Date;function di(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=e=>(t(e=new Date(+e)),e),i.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),i.round=t=>{const e=i(t),n=i.ceil(t);return t-e<n-t?e:n},i.offset=(t,n)=>(e(t=new Date(+t),null==n?1:Math.floor(n)),t),i.range=(n,r,a)=>{const l=[];if(n=i.ceil(n),a=null==a?1:Math.floor(a),!(n<r&&a>0))return l;let o;do{l.push(o=new Date(+n)),e(n,a),t(n)}while(o<n&&n<r);return l},i.filter=n=>di((e=>{if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););})),n&&(i.count=(e,r)=>(ci.setTime(+e),hi.setTime(+r),t(ci),t(hi),Math.floor(n(ci,hi))),i.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?e=>r(e)%t==0:e=>i.count(0,e)%t==0):i:null)),i}const gi=di((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));gi.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?di((e=>{e.setTime(Math.floor(e/t)*t)}),((e,n)=>{e.setTime(+e+n*t)}),((e,n)=>(n-e)/t)):gi:null),gi.range;const pi=1e3,yi=6e4,mi=36e5,vi=864e5,xi=6048e5,Ai=2592e6,wi=31536e6,bi=di((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*pi)}),((t,e)=>(e-t)/pi),(t=>t.getUTCSeconds()));bi.range;const Di=di((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*pi)}),((t,e)=>{t.setTime(+t+e*yi)}),((t,e)=>(e-t)/yi),(t=>t.getMinutes()));Di.range;const ki=di((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*yi)}),((t,e)=>(e-t)/yi),(t=>t.getUTCMinutes()));ki.range;const Ci=di((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*pi-t.getMinutes()*yi)}),((t,e)=>{t.setTime(+t+e*mi)}),((t,e)=>(e-t)/mi),(t=>t.getHours()));Ci.range;const Mi=di((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*mi)}),((t,e)=>(e-t)/mi),(t=>t.getUTCHours()));Mi.range;const Ti=di((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*yi)/vi),(t=>t.getDate()-1));Ti.range;const _i=di((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/vi),(t=>t.getUTCDate()-1));_i.range;const Ei=di((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/vi),(t=>Math.floor(t/vi)));function Fi(t){return di((e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),((t,e)=>{t.setDate(t.getDate()+7*e)}),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*yi)/xi))}Ei.range;const Si=Fi(0),Bi=Fi(1),Ni=Fi(2),Ii=Fi(3),Li=Fi(4),Vi=Fi(5),Oi=Fi(6);function Pi(t){return di((e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)}),((t,e)=>(e-t)/xi))}Si.range,Bi.range,Ni.range,Ii.range,Li.range,Vi.range,Oi.range;const $i=Pi(0),Yi=Pi(1),zi=Pi(2),Ri=Pi(3),Ui=Pi(4),Hi=Pi(5),Xi=Pi(6);$i.range,Yi.range,zi.range,Ri.range,Ui.range,Hi.range,Xi.range;const Wi=di((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,e)=>{t.setMonth(t.getMonth()+e)}),((t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())),(t=>t.getMonth()));Wi.range;const ji=di((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)}),((t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth()));ji.range;const qi=di((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,e)=>{t.setFullYear(t.getFullYear()+e)}),((t,e)=>e.getFullYear()-t.getFullYear()),(t=>t.getFullYear()));qi.every=t=>isFinite(t=Math.floor(t))&&t>0?di((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,n)=>{e.setFullYear(e.getFullYear()+n*t)})):null,qi.range;const Gi=di((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)}),((t,e)=>e.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));Gi.every=t=>isFinite(t=Math.floor(t))&&t>0?di((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null,Gi.range;const[Qi,Zi]=function(t,e,n,r,a,l){const o=[[bi,1,pi],[bi,5,5e3],[bi,15,15e3],[bi,30,3e4],[l,1,yi],[l,5,3e5],[l,15,9e5],[l,30,18e5],[a,1,mi],[a,3,108e5],[a,6,216e5],[a,12,432e5],[r,1,vi],[r,2,1728e5],[n,1,xi],[e,1,Ai],[e,3,7776e6],[t,1,wi]];function u(e,n,r){const a=Math.abs(n-e)/r,l=i((([,,t])=>t)).right(o,a);if(l===o.length)return t.every(m(e/wi,n/wi,r));if(0===l)return gi.every(Math.max(m(e,n,r),1));const[u,s]=o[a/o[l-1][2]<o[l][2]/a?l-1:l];return u.every(s)}return[function(t,e,n){const r=e<t;r&&([t,e]=[e,t]);const i=n&&"function"==typeof n.range?n:u(t,e,n),a=i?i.range(t,+e+1):[];return r?a.reverse():a},u]}(qi,Wi,Si,Ti,Ci,Di);function Ki(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Ji(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function ta(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}var ea,na,ra={"-":"",_:" ",0:"0"},ia=/^\s*\d+/,aa=/^%/,la=/[\\^$*+?|[\]().{}]/g;function oa(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a<n?new Array(n-a+1).join(e)+i:i)}function ua(t){return t.replace(la,"\\$&")}function sa(t){return new RegExp("^(?:"+t.map(ua).join("|")+")","i")}function fa(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function ca(t,e,n){var r=ia.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function ha(t,e,n){var r=ia.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function da(t,e,n){var r=ia.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function ga(t,e,n){var r=ia.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function pa(t,e,n){var r=ia.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function ya(t,e,n){var r=ia.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function ma(t,e,n){var r=ia.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function va(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function xa(t,e,n){var r=ia.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function Aa(t,e,n){var r=ia.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function wa(t,e,n){var r=ia.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function ba(t,e,n){var r=ia.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Da(t,e,n){var r=ia.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function ka(t,e,n){var r=ia.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Ca(t,e,n){var r=ia.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Ma(t,e,n){var r=ia.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Ta(t,e,n){var r=ia.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function _a(t,e,n){var r=aa.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Ea(t,e,n){var r=ia.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Fa(t,e,n){var r=ia.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Sa(t,e){return oa(t.getDate(),e,2)}function Ba(t,e){return oa(t.getHours(),e,2)}function Na(t,e){return oa(t.getHours()%12||12,e,2)}function Ia(t,e){return oa(1+Ti.count(qi(t),t),e,3)}function La(t,e){return oa(t.getMilliseconds(),e,3)}function Va(t,e){return La(t,e)+"000"}function Oa(t,e){return oa(t.getMonth()+1,e,2)}function Pa(t,e){return oa(t.getMinutes(),e,2)}function $a(t,e){return oa(t.getSeconds(),e,2)}function Ya(t){var e=t.getDay();return 0===e?7:e}function za(t,e){return oa(Si.count(qi(t)-1,t),e,2)}function Ra(t){var e=t.getDay();return e>=4||0===e?Li(t):Li.ceil(t)}function Ua(t,e){return t=Ra(t),oa(Li.count(qi(t),t)+(4===qi(t).getDay()),e,2)}function Ha(t){return t.getDay()}function Xa(t,e){return oa(Bi.count(qi(t)-1,t),e,2)}function Wa(t,e){return oa(t.getFullYear()%100,e,2)}function ja(t,e){return oa((t=Ra(t)).getFullYear()%100,e,2)}function qa(t,e){return oa(t.getFullYear()%1e4,e,4)}function Ga(t,e){var n=t.getDay();return oa((t=n>=4||0===n?Li(t):Li.ceil(t)).getFullYear()%1e4,e,4)}function Qa(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+oa(e/60|0,"0",2)+oa(e%60,"0",2)}function Za(t,e){return oa(t.getUTCDate(),e,2)}function Ka(t,e){return oa(t.getUTCHours(),e,2)}function Ja(t,e){return oa(t.getUTCHours()%12||12,e,2)}function tl(t,e){return oa(1+_i.count(Gi(t),t),e,3)}function el(t,e){return oa(t.getUTCMilliseconds(),e,3)}function nl(t,e){return el(t,e)+"000"}function rl(t,e){return oa(t.getUTCMonth()+1,e,2)}function il(t,e){return oa(t.getUTCMinutes(),e,2)}function al(t,e){return oa(t.getUTCSeconds(),e,2)}function ll(t){var e=t.getUTCDay();return 0===e?7:e}function ol(t,e){return oa($i.count(Gi(t)-1,t),e,2)}function ul(t){var e=t.getUTCDay();return e>=4||0===e?Ui(t):Ui.ceil(t)}function sl(t,e){return t=ul(t),oa(Ui.count(Gi(t),t)+(4===Gi(t).getUTCDay()),e,2)}function fl(t){return t.getUTCDay()}function cl(t,e){return oa(Yi.count(Gi(t)-1,t),e,2)}function hl(t,e){return oa(t.getUTCFullYear()%100,e,2)}function dl(t,e){return oa((t=ul(t)).getUTCFullYear()%100,e,2)}function gl(t,e){return oa(t.getUTCFullYear()%1e4,e,4)}function pl(t,e){var n=t.getUTCDay();return oa((t=n>=4||0===n?Ui(t):Ui.ceil(t)).getUTCFullYear()%1e4,e,4)}function yl(){return"+0000"}function ml(){return"%"}function vl(t){return+t}function xl(t){return Math.floor(+t/1e3)}function Al(t){return new Date(t)}function wl(t){return t instanceof Date?+t:+new Date(+t)}function bl(t,e,n,r,i,a,l,o,u,s){var f=oi(),c=f.invert,h=f.domain,d=s(".%L"),g=s(":%S"),p=s("%I:%M"),y=s("%I %p"),m=s("%a %d"),v=s("%b %d"),x=s("%B"),A=s("%Y");function w(t){return(u(t)<t?d:o(t)<t?g:l(t)<t?p:a(t)<t?y:r(t)<t?i(t)<t?m:v:n(t)<t?x:A)(t)}return f.invert=function(t){return new Date(c(t))},f.domain=function(t){return arguments.length?h(Array.from(t,wl)):h().map(Al)},f.ticks=function(e){var n=h();return t(n[0],n[n.length-1],null==e?10:e)},f.tickFormat=function(t,e){return null==e?w:s(e)},f.nice=function(t){var n=h();return t&&"function"==typeof t.range||(t=e(n[0],n[n.length-1],null==t?10:t)),t?h(function(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],l=t[i];return l<a&&(n=r,r=i,i=n,n=a,a=l,l=n),t[r]=e.floor(a),t[i]=e.ceil(l),t}(n,t)):f},f.copy=function(){return ai(f,bl(t,e,n,r,i,a,l,o,u,s))},f}function Dl(){return Qr.apply(bl(Qi,Zi,qi,Wi,Si,Ti,Ci,Di,bi,na).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}!function(t){ea=function(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,l=t.shortDays,o=t.months,u=t.shortMonths,s=sa(i),f=fa(i),c=sa(a),h=fa(a),d=sa(l),g=fa(l),p=sa(o),y=fa(o),m=sa(u),v=fa(u),x={a:function(t){return l[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return u[t.getMonth()]},B:function(t){return o[t.getMonth()]},c:null,d:Sa,e:Sa,f:Va,g:ja,G:Ga,H:Ba,I:Na,j:Ia,L:La,m:Oa,M:Pa,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:vl,s:xl,S:$a,u:Ya,U:za,V:Ua,w:Ha,W:Xa,x:null,X:null,y:Wa,Y:qa,Z:Qa,"%":ml},A={a:function(t){return l[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return u[t.getUTCMonth()]},B:function(t){return o[t.getUTCMonth()]},c:null,d:Za,e:Za,f:nl,g:dl,G:pl,H:Ka,I:Ja,j:tl,L:el,m:rl,M:il,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:vl,s:xl,S:al,u:ll,U:ol,V:sl,w:fl,W:cl,x:null,X:null,y:hl,Y:gl,Z:yl,"%":ml},w={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=g.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=c.exec(e.slice(n));return r?(t.w=h.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=p.exec(e.slice(n));return r?(t.m=y.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return k(t,e,n,r)},d:wa,e:wa,f:Ta,g:ma,G:ya,H:Da,I:Da,j:ba,L:Ma,m:Aa,M:ka,p:function(t,e,n){var r=s.exec(e.slice(n));return r?(t.p=f.get(r[0].toLowerCase()),n+r[0].length):-1},q:xa,Q:Ea,s:Fa,S:Ca,u:ha,U:da,V:ga,w:ca,W:pa,x:function(t,e,r){return k(t,n,e,r)},X:function(t,e,n){return k(t,r,e,n)},y:ma,Y:ya,Z:va,"%":_a};function b(t,e){return function(n){var r,i,a,l=[],o=-1,u=0,s=t.length;for(n instanceof Date||(n=new Date(+n));++o<s;)37===t.charCodeAt(o)&&(l.push(t.slice(u,o)),null!=(i=ra[r=t.charAt(++o)])?r=t.charAt(++o):i="e"===r?" ":"0",(a=e[r])&&(r=a(n,i)),l.push(r),u=o+1);return l.push(t.slice(u,o)),l.join("")}}function D(t,e){return function(n){var r,i,a=ta(1900,void 0,1);if(k(a,t,n+="",0)!=n.length)return null;if("Q"in a)return new Date(a.Q);if("s"in a)return new Date(1e3*a.s+("L"in a?a.L:0));if(e&&!("Z"in a)&&(a.Z=0),"p"in a&&(a.H=a.H%12+12*a.p),void 0===a.m&&(a.m="q"in a?a.q:0),"V"in a){if(a.V<1||a.V>53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=Ji(ta(a.y,0,1))).getUTCDay(),r=i>4||0===i?Yi.ceil(r):Yi(r),r=_i.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=Ki(ta(a.y,0,1))).getDay(),r=i>4||0===i?Bi.ceil(r):Bi(r),r=Ti.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?Ji(ta(a.y,0,1)).getUTCDay():Ki(ta(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,Ji(a)):Ki(a)}}function k(t,e,n,r){for(var i,a,l=0,o=e.length,u=n.length;l<o;){if(r>=u)return-1;if(37===(i=e.charCodeAt(l++))){if(i=e.charAt(l++),!(a=w[i in ra?e.charAt(l++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return x.x=b(n,x),x.X=b(r,x),x.c=b(e,x),A.x=b(n,A),A.X=b(r,A),A.c=b(e,A),{format:function(t){var e=b(t+="",x);return e.toString=function(){return t},e},parse:function(t){var e=D(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=b(t+="",A);return e.toString=function(){return t},e},utcParse:function(t){var e=D(t+="",!0);return e.toString=function(){return t},e}}}(t),na=ea.format,ea.parse,ea.utcFormat,ea.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var kl=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map((function(t){for(var e=t.length/6|0,n=new Array(e),r=0;r<e;)n[r]="#"+t.slice(6*r,6*++r);return n}));function Cl(t){return function(){return t}}(t=>{un(t[t.length-1])})(kl);const Ml=Math.abs,Tl=Math.atan2,_l=Math.cos,El=Math.max,Fl=Math.min,Sl=Math.sin,Bl=Math.sqrt,Nl=1e-12,Il=Math.PI,Ll=Il/2,Vl=2*Il;function Ol(t){return t>=1?Ll:t<=-1?-Ll:Math.asin(t)}function Pl(t){let e=3;return t.digits=function(n){if(!arguments.length)return e;if(null==n)e=null;else{const t=Math.floor(n);if(!(t>=0))throw new RangeError(`invalid digits: ${n}`);e=t}return t},()=>new Ir(e)}function $l(t){return t.innerRadius}function Yl(t){return t.outerRadius}function zl(t){return t.startAngle}function Rl(t){return t.endAngle}function Ul(t){return t&&t.padAngle}function Hl(t,e,n,r,i,a,l){var o=t-n,u=e-r,s=(l?a:-a)/Bl(o*o+u*u),f=s*u,c=-s*o,h=t+f,d=e+c,g=n+f,p=r+c,y=(h+g)/2,m=(d+p)/2,v=g-h,x=p-d,A=v*v+x*x,w=i-a,b=h*p-g*d,D=(x<0?-1:1)*Bl(El(0,w*w*A-b*b)),k=(b*x-v*D)/A,C=(-b*v-x*D)/A,M=(b*x+v*D)/A,T=(-b*v+x*D)/A,_=k-y,E=C-m,F=M-y,S=T-m;return _*_+E*E>F*F+S*S&&(k=M,C=T),{cx:k,cy:C,x01:-f,y01:-c,x11:k*(i/w-1),y11:C*(i/w-1)}}function Xl(){var t=$l,e=Yl,n=Cl(0),r=null,i=zl,a=Rl,l=Ul,o=null,u=Pl(s);function s(){var s,f,c=+t.apply(this,arguments),h=+e.apply(this,arguments),d=i.apply(this,arguments)-Ll,g=a.apply(this,arguments)-Ll,p=Ml(g-d),y=g>d;if(o||(o=s=u()),h<c&&(f=h,h=c,c=f),h>Nl)if(p>Vl-Nl)o.moveTo(h*_l(d),h*Sl(d)),o.arc(0,0,h,d,g,!y),c>Nl&&(o.moveTo(c*_l(g),c*Sl(g)),o.arc(0,0,c,g,d,y));else{var m,v,x=d,A=g,w=d,b=g,D=p,k=p,C=l.apply(this,arguments)/2,M=C>Nl&&(r?+r.apply(this,arguments):Bl(c*c+h*h)),T=Fl(Ml(h-c)/2,+n.apply(this,arguments)),_=T,E=T;if(M>Nl){var F=Ol(M/c*Sl(C)),S=Ol(M/h*Sl(C));(D-=2*F)>Nl?(w+=F*=y?1:-1,b-=F):(D=0,w=b=(d+g)/2),(k-=2*S)>Nl?(x+=S*=y?1:-1,A-=S):(k=0,x=A=(d+g)/2)}var B=h*_l(x),N=h*Sl(x),I=c*_l(b),L=c*Sl(b);if(T>Nl){var V,O=h*_l(A),P=h*Sl(A),$=c*_l(w),Y=c*Sl(w);if(p<Il)if(V=function(t,e,n,r,i,a,l,o){var u=n-t,s=r-e,f=l-i,c=o-a,h=c*u-f*s;if(!(h*h<Nl))return[t+(h=(f*(e-a)-c*(t-i))/h)*u,e+h*s]}(B,N,$,Y,O,P,I,L)){var z=B-V[0],R=N-V[1],U=O-V[0],H=P-V[1],X=1/Sl(function(t){return t>1?0:t<-1?Il:Math.acos(t)}((z*U+R*H)/(Bl(z*z+R*R)*Bl(U*U+H*H)))/2),W=Bl(V[0]*V[0]+V[1]*V[1]);_=Fl(T,(c-W)/(X-1)),E=Fl(T,(h-W)/(X+1))}else _=E=0}k>Nl?E>Nl?(m=Hl($,Y,B,N,h,E,y),v=Hl(O,P,I,L,h,E,y),o.moveTo(m.cx+m.x01,m.cy+m.y01),E<T?o.arc(m.cx,m.cy,E,Tl(m.y01,m.x01),Tl(v.y01,v.x01),!y):(o.arc(m.cx,m.cy,E,Tl(m.y01,m.x01),Tl(m.y11,m.x11),!y),o.arc(0,0,h,Tl(m.cy+m.y11,m.cx+m.x11),Tl(v.cy+v.y11,v.cx+v.x11),!y),o.arc(v.cx,v.cy,E,Tl(v.y11,v.x11),Tl(v.y01,v.x01),!y))):(o.moveTo(B,N),o.arc(0,0,h,x,A,!y)):o.moveTo(B,N),c>Nl&&D>Nl?_>Nl?(m=Hl(I,L,O,P,c,-_,y),v=Hl(B,N,$,Y,c,-_,y),o.lineTo(m.cx+m.x01,m.cy+m.y01),_<T?o.arc(m.cx,m.cy,_,Tl(m.y01,m.x01),Tl(v.y01,v.x01),!y):(o.arc(m.cx,m.cy,_,Tl(m.y01,m.x01),Tl(m.y11,m.x11),!y),o.arc(0,0,c,Tl(m.cy+m.y11,m.cx+m.x11),Tl(v.cy+v.y11,v.cx+v.x11),y),o.arc(v.cx,v.cy,_,Tl(v.y11,v.x11),Tl(v.y01,v.x01),!y))):o.arc(0,0,c,b,w,y):o.lineTo(I,L)}else o.moveTo(0,0);if(o.closePath(),s)return o=null,s+""||null}return s.centroid=function(){var n=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-Il/2;return[_l(r)*n,Sl(r)*n]},s.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:Cl(+e),s):t},s.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:Cl(+t),s):e},s.cornerRadius=function(t){return arguments.length?(n="function"==typeof t?t:Cl(+t),s):n},s.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Cl(+t),s):r},s.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:Cl(+t),s):i},s.endAngle=function(t){return arguments.length?(a="function"==typeof t?t:Cl(+t),s):a},s.padAngle=function(t){return arguments.length?(l="function"==typeof t?t:Cl(+t),s):l},s.context=function(t){return arguments.length?(o=null==t?null:t,s):o},s}function Wl(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function jl(t){this._context=t}function ql(t){return new jl(t)}function Gl(t){return t[0]}function Ql(t){return t[1]}function Zl(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function Kl(t){return t}function Jl(t,e,n){this.k=t,this.x=e,this.y=n}var to,eo,no;jl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},Jl.prototype={constructor:Jl,scale:function(t){return 1===t?this:new Jl(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new Jl(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}},Jl.prototype,function(t){t[t.Tag=0]="Tag",t[t.Frontmatter=1]="Frontmatter",t[t.Wiki=2]="Wiki",t[t.WikiLink=3]="WikiLink",t[t.WikiDisplay=4]="WikiDisplay",t[t.Text=5]="Text",t[t.dvField=6]="dvField",t[t.Table=7]="Table",t[t.FileMeta=8]="FileMeta",t[t.Task=9]="Task",t[t.TaskDone=10]="TaskDone",t[t.TaskNotDone=11]="TaskNotDone"}(to||(to={})),function(t){t[t.Line=0]="Line",t[t.Bar=1]="Bar",t[t.Pie=2]="Pie",t[t.Radar=3]="Radar",t[t.Summary=4]="Summary",t[t.Table=5]="Table",t[t.Month=6]="Month",t[t.Heatmap=7]="Heatmap",t[t.Bullet=8]="Bullet",t[t.Unknown=9]="Unknown"}(eo||(eo={})),function(t){t[t.Number=0]="Number",t[t.Int=1]="Int",t[t.Date=2]="Date",t[t.Time=3]="Time",t[t.DateTime=4]="DateTime",t[t.String=5]="String"}(no||(no={}));class ro{constructor(t,e){this.date=t,this.value=e}}class io{constructor(t,e,n){if(this.type=e,this.target=n,this.separator="",this.id=t,this.accessor=-1,this.accessor1=-1,this.accessor2=-1,this.valueType=no.Number,this.usedAsXDataset=!1,this.numTargets=0,e===to.Table){let t,e=new RegExp("\\[(?<accessor>[0-9]+)\\]\\[(?<accessor1>[0-9]+)\\](\\[(?<accessor2>[0-9]+)\\])?","gm");for(;t=e.exec(n);)if(void 0!==t.groups.accessor){let r=parseFloat(t.groups.accessor);if(Number.isNumber(r)&&void 0!==t.groups.accessor1){let i=parseFloat(t.groups.accessor1);if(Number.isNumber(i)){let a;void 0!==t.groups.accessor2&&(a=parseFloat(t.groups.accessor2)),this.accessor=r,this.accessor1=i,Number.isNumber(a)&&(this.accessor2=a),this.parentTarget=n.replace(e,"")}break}}}else{let t,e=new RegExp("\\[(?<accessor>[0-9]+)\\]","gm");for(;t=e.exec(n);)if(void 0!==t.groups.accessor){let r=parseFloat(t.groups.accessor);Number.isNumber(r)&&(this.accessor=r,this.parentTarget=n.replace(e,""));break}}}equalTo(t){return this.type===t.type&&this.target===t.target}getType(){return this.type}getTarget(){return this.target}getParentTarget(){return this.parentTarget}getId(){return this.id}getAccessor(t=0){switch(t){case 0:return this.accessor;case 1:return this.accessor1;case 2:return this.accessor2}return null}setSeparator(t){this.separator=t}getSeparator(t=!1){return""===this.separator?t?",":"/":this.separator}addNumTargets(t=1){this.numTargets=this.numTargets+t}getNumTargets(){return this.numTargets}}class ao{constructor(t,e){this.currentIndex=0,this.name="untitled",this.query=e,this.values=[],this.parent=t,this.id=-1,this.yMin=null,this.yMax=null,this.startDate=null,this.endDate=null,this.numTargets=0,this.lineInfo=null,this.barInfo=null,this.isTmpDataset=!1,this.valueType=null==e?void 0:e.valueType;for(let e=0;e<t.getDates().length;e++)this.values.push(null)}cloneToTmpDataset(){if(!this.isTmpDataset){let t=new ao(this.parent,null);return t.name="tmp",t.values=[...this.values],t.yMin=this.yMin,t.yMax=this.yMax,t.startDate=this.startDate.clone(),t.endDate=this.endDate.clone(),t.numTargets=this.numTargets,t.isTmpDataset=!0,t.valueType=this.valueType,t}return this}getName(){return this.name}setName(t){this.name=t}getId(){return this.id}setId(t){this.id=t}addNumTargets(t){this.numTargets=this.numTargets+t}getNumTargets(){return this.numTargets}getValue(t,e=0){let n=this.parent.getIndexOfDate(t)+Math.floor(e);return n>=0&&n<this.values.length?this.values[n]:null}setValue(t,e){let n=this.parent.getIndexOfDate(t);n>=0&&n<this.values.length&&(this.values[n]=e,(null===this.yMin||e<this.yMin)&&(this.yMin=e),(null===this.yMax||e>this.yMax)&&(this.yMax=e),(null===this.startDate||t<this.startDate)&&(this.startDate=t.clone()),(null===this.endDate||t>this.endDate)&&(this.endDate=t.clone()))}recalculateMinMax(){this.yMin=Math.min(...this.values),this.yMax=Math.max(...this.values)}getYMin(){return this.yMin}getYMax(){return this.yMax}getStartDate(){return this.startDate}getEndDate(){return this.endDate}shift(t,e){let n=!1;for(let r=0;r<this.values.length;r++)null!==this.values[r]&&(null===e||this.values[r]>=e)&&(this.values[r]=this.values[r]+t,n=!0);n&&(this.yMin=this.yMin+t,this.yMax=this.yMax+t)}setPenalty(t){for(let e=0;e<this.values.length;e++)null===this.values[e]&&(this.values[e]=t,t<this.yMin&&(this.yMin=t),t>this.yMax&&(this.yMax=t))}getQuery(){return this.query}accumulateValues(){let t=0;for(let e=0;e<this.values.length;e++)null!==this.values[e]&&(t+=this.values[e]),this.values[e]=t,t<this.yMin&&(this.yMin=t),t>this.yMax&&(this.yMax=t)}getValues(){return this.values}getLength(){return this.values.length}getLengthNotNull(){let t=0;for(let e=0;e<this.values.length;e++)null!==this.values[e]&&t++;return t}next(){if(this.currentIndex<this.values.length){let t=this.currentIndex++;return{done:!1,value:new ro(this.parent.getDates()[t],this.values[t])}}return this.currentIndex=0,{done:!0,value:null}}[Symbol.iterator](){return this}}class lo{constructor(t,e){this.currentIndex=0,this.dates=[],this.datasets=[];const n=t.creationData().format.toString();for(let r=t.clone();r<=e;r.add(1,"days")){let t=window.moment(r.format(n),n,!0);this.dates.push(t)}}createDataset(t,e){let n=new ao(this,t);return n.setId(t.getId()),e&&n.setName(e.datasetName[t.getId()]),this.datasets.push(n),n}getIndexOfDate(t){const e=t.creationData().format.toString();for(let n=0;n<this.dates.length;n++)if(this.dates[n].format(e)===t.format(e))return n;return-1}getDatasetByQuery(t){for(let e of this.datasets)if(e.getQuery().equalTo(t))return e;return null}getDatasetById(t){for(let e of this.datasets)if(e.getId()===t)return e;return null}getXDatasetIds(){let t=[];for(let e of this.datasets)if(e.getQuery().usedAsXDataset){let n=e.getQuery().getId();t.includes(n)||-1===n||t.push(n)}return t}getDates(){return this.dates}getNames(){let t=[];for(let e of this.datasets)t.push(e.getName());return t}next(){return this.currentIndex<this.datasets.length?{done:!1,value:this.datasets[this.currentIndex++]}:(this.currentIndex=0,{done:!0,value:null})}[Symbol.iterator](){return this}}class oo{constructor(t){this.queries=t,this.xDataset=[],this.folder="/",this.file=[],this.specifiedFilesOnly=!1,this.fileContainsLinkedFiles=[],this.fileMultiplierAfterLink="",this.dateFormat="YYYY-MM-DD",this.dateFormatPrefix="",this.dateFormatSuffix="",this.startDate=null,this.endDate=null,this.datasetName=[],this.constValue=[1],this.ignoreAttachedValue=[],this.ignoreZeroValue=[],this.accum=[],this.penalty=[],this.valueShift=[],this.shiftOnlyValueLargerThan=[],this.valueType=[],this.textValueMap={},this.dataAreaSize=new vo(300,300),this.aspectRatio=new xo(1,1),this.margin=new Ao(10,10,10,10),this.fixedScale=1,this.fitPanelWidth=!1,this.output=[],this.line=[],this.bar=[],this.pie=[],this.summary=[],this.month=[],this.heatmap=[],this.bullet=[],this.customDataset=[],this.datasets=null}getQueryById(t){for(let e of this.queries)if(e.getId()===t)return e}}class uo{constructor(){this.id=-1,this.name="",this.xData=[],this.yData=[]}}class so{constructor(){this.title="",this.xAxisLabel="Date",this.xAxisColor="",this.xAxisLabelColor="",this.yAxisLabel=[],this.yAxisColor=[],this.yAxisLabelColor=[],this.yAxisUnit=[],this.xAxisTickInterval=null,this.yAxisTickInterval=[],this.xAxisTickLabelFormat=null,this.yAxisTickLabelFormat=[],this.yMin=[],this.yMax=[],this.reverseYAxis=[],this.allowInspectData=!0,this.showLegend=!1,this.legendPosition="",this.legendOrientation="",this.legendBgColor="",this.legendBorderColor=""}GetGraphType(){return eo.Unknown}}class fo extends so{constructor(){super(),this.lineColor=[],this.lineWidth=[],this.showLine=[],this.showPoint=[],this.pointColor=[],this.pointBorderColor=[],this.pointBorderWidth=[],this.pointSize=[],this.fillGap=[],this.yAxisLocation=[]}GetGraphType(){return eo.Line}}class co extends so{constructor(){super(),this.barColor=[],this.yAxisLocation=[]}GetGraphType(){return eo.Bar}}class ho{constructor(){this.title="",this.data=[],this.dataColor=[],this.dataName=[],this.label=[],this.hideLabelLessThan=.03,this.extLabel=[],this.showExtLabelOnlyIfNoLabel=!1,this.ratioInnerRadius=0,this.showLegend=!1,this.legendPosition="",this.legendOrientation="",this.legendBgColor="",this.legendBorderColor=""}GetGraphType(){return eo.Pie}}class go{constructor(){this.template="",this.style=""}GetGraphType(){return eo.Summary}}class po{constructor(){this.mode="circle",this.dataset=[],this.startWeekOn="Sun",this.threshold=[],this.yMin=[],this.yMax=[],this.color=null,this.dimNotInMonth=!0,this.initMonth="",this.showSelectedValue=!0,this.headerYearColor=null,this.headerMonthColor=null,this.dividingLineColor=null,this.showCircle=!0,this.showStreak=!0,this.showTodayRing=!0,this.showSelectedRing=!0,this.circleColor=null,this.circleColorByValue=!1,this.todayRingColor="",this.selectedRingColor="firebrick",this.showAnnotation=!0,this.annotation=[],this.showAnnotationOfAllTargets=!0,this.selectedDate="",this.selectedDataset=null}GetGraphType(){return eo.Month}}class yo{constructor(){this.dataset="0",this.startWeekOn="Sun",this.orientation="vertical",this.yMin=null,this.yMax=null,this.color=null}GetGraphType(){return eo.Heatmap}}class mo{constructor(){this.title="",this.dataset="0",this.orientation="horizontal",this.value="",this.valueUnit="",this.valueColor="#69b3a2",this.range=[],this.rangeColor=[],this.showMarker=!1,this.markerValue=0,this.markerColor=""}GetGraphType(){return eo.Bullet}}class vo{constructor(t,e){this.width=t,this.height=e}}class xo{constructor(t,e){this.x=t,this.y=e}recalculateSize(t){let e=this.x/this.y,n=parseFloat((t.width*e).toFixed(2));return new vo(n,t.height)}}class Ao{constructor(t,e,n,r){this.top=t,this.right=e,this.bottom=n,this.left=r}}class wo{constructor(t){if(this.translateX=0,this.translateY=0,"string"==typeof t){let e=t.match(/translate\(\s*(?<x>[\d\.\/-]+)\s*,\s*(?<y>[\d\.\/-]+)\s*\)/).groups;e&&(this.translateX=parseFloat(e.x),this.translateY=parseFloat(e.y))}}}class bo{constructor(t,e){this.filePath=t,this.tableIndex=e,this.xDataset=null,this.yDatasets=[]}}class Do{constructor(){this.fileTotal=0,this.fileAvailable=0,this.fileOutOfDateRange=0,this.fileNotInFormat=0,this.errorMessage="",this.minDate=window.moment(""),this.maxDate=window.moment(""),this.gotAnyValidXValue=!1,this.gotAnyValidYValue=!1}}const ko=function(){const t=["HH","H","hh","h"],e=["mm","m"],n=["ss","s",""];let r=[];for(let i of t)for(let t of e)for(let e of n){let n=`${i}:${t}`;""!==e&&(n+=`:${e}`),i.contains("h")&&(n+=" a"),r.push(n)}return r}();function Co(t,e,n){if(!e&&!n)return t;let r=t;if(r.startsWith("^")&&(r=r.slice(1)),e){let t=new RegExp("^("+e+")","gm");t.test(r)&&(r=r.replace(t,""))}if(n){let t=new RegExp("("+n+")$","gm");t.test(r)&&(r=r.replace(t,""))}return r}function Mo(t,e){let n=e;t.length>4&&t.startsWith("[[")&&t.endsWith("]]")&&(t=t.substring(2,t.length-2)),"iso-8601"===e.toLowerCase()&&(n=window.moment.ISO_8601);let r=window.moment(t,n,!0);return r=r.startOf("day"),r}function To(t,e,n=!0){if(!t||!e||0===e.length)return[null,t];let r=null;const i="^(?<value>[0-9]+)("+e.join("|")+")$",a=new RegExp(i,"gm");let l=a.exec(t);return l&&void 0!==l.groups&&void 0!==l.groups.value&&(r=parseFloat(l.groups.value),Number.isNumber(r)&&!Number.isNaN(r))?(n&&(t=t.replace(a,"")),[r,t]):[null,t]}function _o(t){if(!t)return null;let e=window.moment.duration(0),n=!1,r=!1;t.startsWith("+")&&(r=!1,t=t.substring(1)),t.startsWith("-")&&(r=!0,t=t.substring(1));let i=null;[i,t]=To(t,["year","years","Y","y"]),null!==i&&(r&&(i*=-1),e.add(i,"years"),n=!0);let a=null;[a,t]=To(t,["month","months","M"]),null!==a&&(r&&(a*=-1),e.add(a,"months"),n=!0);let l=null;[l,t]=To(t,["week","weeks","W","w"]),null!==l&&(r&&(l*=-1),e.add(l,"weeks"),n=!0);let o=null;[o,t]=To(t,["day","days","D","d"]),null!==o&&(r&&(o*=-1),e.add(o,"days"),n=!0);let u=null;[u,t]=To(t,["hour","hours","H","h"]),null!==u&&(r&&(u*=-1),e.add(u,"hours"),n=!0);let s=null;[s,t]=To(t,["minute","minutes","m"]),null!==s&&(r&&(s*=-1),e.add(s,"minutes"),n=!0);let f=null;return[f,t]=To(t,["second","seconds","S","s"]),null!==f&&(r&&(f*=-1),e.add(f,"seconds"),n=!0),n?e:null}function Eo(t,e){let n=null,r=_o(t);return r&&window.moment.isDuration(r)&&(n=Bo(e),n=n.add(r),n&&n.isValid()),n}function Fo(t,e){return null==t?null:"iso-8601"===e.toLowerCase()?t.format():t.format(e)}function So(t,e){return Mo(Fo(window.moment(t),e),e)}function Bo(t){return Mo(Fo(window.moment(),t),t)}function No(t,e){for(var n=(e=e.replace(/^\./,"")).split("."),r=0,i=n.length;r<i;++r){var a=n[r];if(!(a in t))return null;t=t[a]}return"string"==typeof t||Array.isArray(t)?t:"number"==typeof t||"boolean"==typeof t?t.toString():null}function Io(t,e){const n=Array.from(t),r=n.findIndex((t=>t!==e)),i=n.reverse().findIndex((t=>t!==e));return-1===r&&-1===i?t:t.substring(r,t.length-i)}function Lo(t){if(null===t)return null;let e=new RegExp('<img[^>]*?alt\\s*=\\s*[""\']?(?<emoji>[^\'"" >]+?)[ \'""][^>]*?>',"g");return t.replace(e,((...t)=>{let e=t[t.length-1];return e&&e.emoji?e.emoji.trim():""}))}function Vo(t,e=null){let n=null,r=no.Number;if("string"==typeof t)if(t.includes(":")){let e=!1;t.startsWith("-")&&(e=!0,t=t.substring(1));let i=window.moment(t,ko,!0);i.isValid()&&(n=i.diff(window.moment("00:00","HH:mm",!0),"seconds"),e&&(n*=-1),r=no.Time)}else if(e){const r=Object.keys(e);for(let n of r)if("string"==typeof n){let r=new RegExp(n,"gm");if(r.test(t)&&Number.isNumber(e[n])){let i=e[n].toString();t=t.replace(r,i);break}}n=parseFloat(t),Number.isNaN(n)&&(n=null)}else n=parseFloat(t),Number.isNaN(n)&&(n=null);else"number"==typeof t&&(n=t);return{type:r,value:n}}function Oo(t,e="",n=""){var r=ne("body").append("svg");let i=r.append("text").text(t).attr("x",-99999).attr("y",-99999);e&&i.attr("class",e),n&&i.attr("transform","rotate("+n+")");var a=r.node().getBBox();return r.remove(),{width:a.width,height:a.height}}function Po(t,e,n){let r=(0|parseFloat(t.attr("width")))+e,i=(0|parseFloat(t.attr("height")))+n;t.attr("width",r),t.attr("height",i)}function $o(t,e,n){let r=new wo(t.attr("transform"));t.attr("transform","translate("+(r.translateX+e)+","+(r.translateY+n)+")")}function Yo(t){return t=(t=(t=t.replace(/(^\\s\*)|(\\s\*$)/gi,"")).replace(/\[ \]{2,}/gi," ")).replace(/\\n /,"\\n")}class zo{static get version(){return"1.3.8"}static toString(){return"JavaScript Expression Parser (JSEP) v"+zo.version}static addUnaryOp(t){return zo.max_unop_len=Math.max(t.length,zo.max_unop_len),zo.unary_ops[t]=1,zo}static addBinaryOp(t,e,n){return zo.max_binop_len=Math.max(t.length,zo.max_binop_len),zo.binary_ops[t]=e,n?zo.right_associative.add(t):zo.right_associative.delete(t),zo}static addIdentifierChar(t){return zo.additional_identifier_chars.add(t),zo}static addLiteral(t,e){return zo.literals[t]=e,zo}static removeUnaryOp(t){return delete zo.unary_ops[t],t.length===zo.max_unop_len&&(zo.max_unop_len=zo.getMaxKeyLen(zo.unary_ops)),zo}static removeAllUnaryOps(){return zo.unary_ops={},zo.max_unop_len=0,zo}static removeIdentifierChar(t){return zo.additional_identifier_chars.delete(t),zo}static removeBinaryOp(t){return delete zo.binary_ops[t],t.length===zo.max_binop_len&&(zo.max_binop_len=zo.getMaxKeyLen(zo.binary_ops)),zo.right_associative.delete(t),zo}static removeAllBinaryOps(){return zo.binary_ops={},zo.max_binop_len=0,zo}static removeLiteral(t){return delete zo.literals[t],zo}static removeAllLiterals(){return zo.literals={},zo}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(t){this.expr=t,this.index=0}static parse(t){return new zo(t).parse()}static getMaxKeyLen(t){return Math.max(0,...Object.keys(t).map((t=>t.length)))}static isDecimalDigit(t){return t>=48&&t<=57}static binaryPrecedence(t){return zo.binary_ops[t]||0}static isIdentifierStart(t){return t>=65&&t<=90||t>=97&&t<=122||t>=128&&!zo.binary_ops[String.fromCharCode(t)]||zo.additional_identifier_chars.has(String.fromCharCode(t))}static isIdentifierPart(t){return zo.isIdentifierStart(t)||zo.isDecimalDigit(t)}throwError(t){const e=new Error(t+" at character "+this.index);throw e.index=this.index,e.description=t,e}runHook(t,e){if(zo.hooks[t]){const n={context:this,node:e};return zo.hooks.run(t,n),n.node}return e}searchHook(t){if(zo.hooks[t]){const e={context:this};return zo.hooks[t].find((function(t){return t.call(e.context,e),e.node})),e.node}}gobbleSpaces(){let t=this.code;for(;t===zo.SPACE_CODE||t===zo.TAB_CODE||t===zo.LF_CODE||t===zo.CR_CODE;)t=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");const t=this.gobbleExpressions(),e=1===t.length?t[0]:{type:zo.COMPOUND,body:t};return this.runHook("after-all",e)}gobbleExpressions(t){let e,n,r=[];for(;this.index<this.expr.length;)if(e=this.code,e===zo.SEMCOL_CODE||e===zo.COMMA_CODE)this.index++;else if(n=this.gobbleExpression())r.push(n);else if(this.index<this.expr.length){if(e===t)break;this.throwError('Unexpected "'+this.char+'"')}return r}gobbleExpression(){const t=this.searchHook("gobble-expression")||this.gobbleBinaryExpression();return this.gobbleSpaces(),this.runHook("after-expression",t)}gobbleBinaryOp(){this.gobbleSpaces();let t=this.expr.substr(this.index,zo.max_binop_len),e=t.length;for(;e>0;){if(zo.binary_ops.hasOwnProperty(t)&&(!zo.isIdentifierStart(this.code)||this.index+t.length<this.expr.length&&!zo.isIdentifierPart(this.expr.charCodeAt(this.index+t.length))))return this.index+=e,t;t=t.substr(0,--e)}return!1}gobbleBinaryExpression(){let t,e,n,r,i,a,l,o,u;if(a=this.gobbleToken(),!a)return a;if(e=this.gobbleBinaryOp(),!e)return a;for(i={value:e,prec:zo.binaryPrecedence(e),right_a:zo.right_associative.has(e)},l=this.gobbleToken(),l||this.throwError("Expected expression after "+e),r=[a,i,l];e=this.gobbleBinaryOp();){if(n=zo.binaryPrecedence(e),0===n){this.index-=e.length;break}i={value:e,prec:n,right_a:zo.right_associative.has(e)},u=e;const o=t=>i.right_a&&t.right_a?n>t.prec:n<=t.prec;for(;r.length>2&&o(r[r.length-2]);)l=r.pop(),e=r.pop().value,a=r.pop(),t={type:zo.BINARY_EXP,operator:e,left:a,right:l},r.push(t);t=this.gobbleToken(),t||this.throwError("Expected expression after "+u),r.push(i,t)}for(o=r.length-1,t=r[o];o>1;)t={type:zo.BINARY_EXP,operator:r[o-1].value,left:r[o-2],right:t},o-=2;return t}gobbleToken(){let t,e,n,r;if(this.gobbleSpaces(),r=this.searchHook("gobble-token"),r)return this.runHook("after-token",r);if(t=this.code,zo.isDecimalDigit(t)||t===zo.PERIOD_CODE)return this.gobbleNumericLiteral();if(t===zo.SQUOTE_CODE||t===zo.DQUOTE_CODE)r=this.gobbleStringLiteral();else if(t===zo.OBRACK_CODE)r=this.gobbleArray();else{for(e=this.expr.substr(this.index,zo.max_unop_len),n=e.length;n>0;){if(zo.unary_ops.hasOwnProperty(e)&&(!zo.isIdentifierStart(this.code)||this.index+e.length<this.expr.length&&!zo.isIdentifierPart(this.expr.charCodeAt(this.index+e.length)))){this.index+=n;const t=this.gobbleToken();return t||this.throwError("missing unaryOp argument"),this.runHook("after-token",{type:zo.UNARY_EXP,operator:e,argument:t,prefix:!0})}e=e.substr(0,--n)}zo.isIdentifierStart(t)?(r=this.gobbleIdentifier(),zo.literals.hasOwnProperty(r.name)?r={type:zo.LITERAL,value:zo.literals[r.name],raw:r.name}:r.name===zo.this_str&&(r={type:zo.THIS_EXP})):t===zo.OPAREN_CODE&&(r=this.gobbleGroup())}return r?(r=this.gobbleTokenProperty(r),this.runHook("after-token",r)):this.runHook("after-token",!1)}gobbleTokenProperty(t){this.gobbleSpaces();let e=this.code;for(;e===zo.PERIOD_CODE||e===zo.OBRACK_CODE||e===zo.OPAREN_CODE||e===zo.QUMARK_CODE;){let n;if(e===zo.QUMARK_CODE){if(this.expr.charCodeAt(this.index+1)!==zo.PERIOD_CODE)break;n=!0,this.index+=2,this.gobbleSpaces(),e=this.code}this.index++,e===zo.OBRACK_CODE?(t={type:zo.MEMBER_EXP,computed:!0,object:t,property:this.gobbleExpression()},this.gobbleSpaces(),e=this.code,e!==zo.CBRACK_CODE&&this.throwError("Unclosed ["),this.index++):e===zo.OPAREN_CODE?t={type:zo.CALL_EXP,arguments:this.gobbleArguments(zo.CPAREN_CODE),callee:t}:(e===zo.PERIOD_CODE||n)&&(n&&this.index--,this.gobbleSpaces(),t={type:zo.MEMBER_EXP,computed:!1,object:t,property:this.gobbleIdentifier()}),n&&(t.optional=!0),this.gobbleSpaces(),e=this.code}return t}gobbleNumericLiteral(){let t,e,n="";for(;zo.isDecimalDigit(this.code);)n+=this.expr.charAt(this.index++);if(this.code===zo.PERIOD_CODE)for(n+=this.expr.charAt(this.index++);zo.isDecimalDigit(this.code);)n+=this.expr.charAt(this.index++);if(t=this.char,"e"===t||"E"===t){for(n+=this.expr.charAt(this.index++),t=this.char,"+"!==t&&"-"!==t||(n+=this.expr.charAt(this.index++));zo.isDecimalDigit(this.code);)n+=this.expr.charAt(this.index++);zo.isDecimalDigit(this.expr.charCodeAt(this.index-1))||this.throwError("Expected exponent ("+n+this.char+")")}return e=this.code,zo.isIdentifierStart(e)?this.throwError("Variable names cannot start with a number ("+n+this.char+")"):(e===zo.PERIOD_CODE||1===n.length&&n.charCodeAt(0)===zo.PERIOD_CODE)&&this.throwError("Unexpected period"),{type:zo.LITERAL,value:parseFloat(n),raw:n}}gobbleStringLiteral(){let t="";const e=this.index,n=this.expr.charAt(this.index++);let r=!1;for(;this.index<this.expr.length;){let e=this.expr.charAt(this.index++);if(e===n){r=!0;break}if("\\"===e)switch(e=this.expr.charAt(this.index++),e){case"n":t+="\n";break;case"r":t+="\r";break;case"t":t+="\t";break;case"b":t+="\b";break;case"f":t+="\f";break;case"v":t+="\v";break;default:t+=e}else t+=e}return r||this.throwError('Unclosed quote after "'+t+'"'),{type:zo.LITERAL,value:t,raw:this.expr.substring(e,this.index)}}gobbleIdentifier(){let t=this.code,e=this.index;for(zo.isIdentifierStart(t)?this.index++:this.throwError("Unexpected "+this.char);this.index<this.expr.length&&(t=this.code,zo.isIdentifierPart(t));)this.index++;return{type:zo.IDENTIFIER,name:this.expr.slice(e,this.index)}}gobbleArguments(t){const e=[];let n=!1,r=0;for(;this.index<this.expr.length;){this.gobbleSpaces();let i=this.code;if(i===t){n=!0,this.index++,t===zo.CPAREN_CODE&&r&&r>=e.length&&this.throwError("Unexpected token "+String.fromCharCode(t));break}if(i===zo.COMMA_CODE){if(this.index++,r++,r!==e.length)if(t===zo.CPAREN_CODE)this.throwError("Unexpected token ,");else if(t===zo.CBRACK_CODE)for(let t=e.length;t<r;t++)e.push(null)}else if(e.length!==r&&0!==r)this.throwError("Expected comma");else{const t=this.gobbleExpression();t&&t.type!==zo.COMPOUND||this.throwError("Expected comma"),e.push(t)}}return n||this.throwError("Expected "+String.fromCharCode(t)),e}gobbleGroup(){this.index++;let t=this.gobbleExpressions(zo.CPAREN_CODE);if(this.code===zo.CPAREN_CODE)return this.index++,1===t.length?t[0]:!!t.length&&{type:zo.SEQUENCE_EXP,expressions:t};this.throwError("Unclosed (")}gobbleArray(){return this.index++,{type:zo.ARRAY_EXP,elements:this.gobbleArguments(zo.CBRACK_CODE)}}}const Ro=new class{add(t,e,n){if("string"!=typeof arguments[0])for(let t in arguments[0])this.add(t,arguments[0][t],arguments[1]);else(Array.isArray(t)?t:[t]).forEach((function(t){this[t]=this[t]||[],e&&this[t][n?"unshift":"push"](e)}),this)}run(t,e){this[t]=this[t]||[],this[t].forEach((function(t){t.call(e&&e.context?e.context:e,e)}))}};Object.assign(zo,{hooks:Ro,plugins:new class{constructor(t){this.jsep=t,this.registered={}}register(...t){t.forEach((t=>{if("object"!=typeof t||!t.name||!t.init)throw new Error("Invalid JSEP plugin format");this.registered[t.name]||(t.init(this.jsep),this.registered[t.name]=t)}))}}(zo),COMPOUND:"Compound",SEQUENCE_EXP:"SequenceExpression",IDENTIFIER:"Identifier",MEMBER_EXP:"MemberExpression",LITERAL:"Literal",THIS_EXP:"ThisExpression",CALL_EXP:"CallExpression",UNARY_EXP:"UnaryExpression",BINARY_EXP:"BinaryExpression",ARRAY_EXP:"ArrayExpression",TAB_CODE:9,LF_CODE:10,CR_CODE:13,SPACE_CODE:32,PERIOD_CODE:46,COMMA_CODE:44,SQUOTE_CODE:39,DQUOTE_CODE:34,OPAREN_CODE:40,CPAREN_CODE:41,OBRACK_CODE:91,CBRACK_CODE:93,QUMARK_CODE:63,SEMCOL_CODE:59,COLON_CODE:58,unary_ops:{"-":1,"!":1,"~":1,"+":1},binary_ops:{"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},right_associative:new Set,additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"}),zo.max_unop_len=zo.getMaxKeyLen(zo.unary_ops),zo.max_binop_len=zo.getMaxKeyLen(zo.binary_ops);const Uo=t=>new zo(t).parse();Object.getOwnPropertyNames(zo).forEach((t=>{void 0===Uo[t]&&"prototype"!==t&&(Uo[t]=zo[t])})),Uo.Jsep=zo;var Ho={name:"ternary",init(t){t.hooks.add("after-expression",(function(e){if(e.node&&this.code===t.QUMARK_CODE){this.index++;const n=e.node,r=this.gobbleExpression();if(r||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===t.COLON_CODE){this.index++;const i=this.gobbleExpression();if(i||this.throwError("Expected expression"),e.node={type:"ConditionalExpression",test:n,consequent:r,alternate:i},n.operator&&t.binary_ops[n.operator]<=.9){let r=n;for(;r.right.operator&&t.binary_ops[r.right.operator]<=.9;)r=r.right;e.node.test=r.right,r.right=e.node,e.node=n}}else this.throwError("Expected :")}}))}};Uo.plugins.register(Ho);var Xo,Wo={};function jo(t){if("number"==typeof t){if(0===t)return!1}else if(t instanceof ao&&t.getValues().some((function(t){return 0===t})))return!1;return!0}Xo=Wo,function(){var t={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function e(n){return function(n,r){var i,a,l,o,u,s,f,c,h,d=1,g=n.length,p="";for(a=0;a<g;a++)if("string"==typeof n[a])p+=n[a];else if("object"==typeof n[a]){if((o=n[a]).keys)for(i=r[d],l=0;l<o.keys.length;l++){if(null==i)throw new Error(e('[sprintf] Cannot access property "%s" of undefined value "%s"',o.keys[l],o.keys[l-1]));i=i[o.keys[l]]}else i=o.param_no?r[o.param_no]:r[d++];if(t.not_type.test(o.type)&&t.not_primitive.test(o.type)&&i instanceof Function&&(i=i()),t.numeric_arg.test(o.type)&&"number"!=typeof i&&isNaN(i))throw new TypeError(e("[sprintf] expecting number but found %T",i));switch(t.number.test(o.type)&&(c=i>=0),o.type){case"b":i=parseInt(i,10).toString(2);break;case"c":i=String.fromCharCode(parseInt(i,10));break;case"d":case"i":i=parseInt(i,10);break;case"j":i=JSON.stringify(i,null,o.width?parseInt(o.width):0);break;case"e":i=o.precision?parseFloat(i).toExponential(o.precision):parseFloat(i).toExponential();break;case"f":i=o.precision?parseFloat(i).toFixed(o.precision):parseFloat(i);break;case"g":i=o.precision?String(Number(i.toPrecision(o.precision))):parseFloat(i);break;case"o":i=(parseInt(i,10)>>>0).toString(8);break;case"s":i=String(i),i=o.precision?i.substring(0,o.precision):i;break;case"t":i=String(!!i),i=o.precision?i.substring(0,o.precision):i;break;case"T":i=Object.prototype.toString.call(i).slice(8,-1).toLowerCase(),i=o.precision?i.substring(0,o.precision):i;break;case"u":i=parseInt(i,10)>>>0;break;case"v":i=i.valueOf(),i=o.precision?i.substring(0,o.precision):i;break;case"x":i=(parseInt(i,10)>>>0).toString(16);break;case"X":i=(parseInt(i,10)>>>0).toString(16).toUpperCase()}t.json.test(o.type)?p+=i:(!t.number.test(o.type)||c&&!o.sign?h="":(h=c?"+":"-",i=i.toString().replace(t.sign,"")),s=o.pad_char?"0"===o.pad_char?"0":o.pad_char.charAt(1):" ",f=o.width-(h+i).length,u=o.width&&f>0?s.repeat(f):"",p+=o.align?h+i+u:"0"===s?h+u+i:u+h+i)}return p}(function(e){if(r[e])return r[e];for(var n,i=e,a=[],l=0;i;){if(null!==(n=t.text.exec(i)))a.push(n[0]);else if(null!==(n=t.modulo.exec(i)))a.push("%");else{if(null===(n=t.placeholder.exec(i)))throw new SyntaxError("[sprintf] unexpected placeholder");if(n[2]){l|=1;var o=[],u=n[2],s=[];if(null===(s=t.key.exec(u)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(o.push(s[1]);""!==(u=u.substring(s[0].length));)if(null!==(s=t.key_access.exec(u)))o.push(s[1]);else{if(null===(s=t.index_access.exec(u)))throw new SyntaxError("[sprintf] failed to parse named argument key");o.push(s[1])}n[2]=o}else l|=2;if(3===l)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");a.push({placeholder:n[0],param_no:n[1],keys:n[2],sign:n[3],pad_char:n[4],align:n[5],width:n[6],precision:n[7],type:n[8]})}i=i.substring(n[0].length)}return r[e]=a}(n),arguments)}function n(t,n){return e.apply(null,[t].concat(n||[]))}var r=Object.create(null);Xo.sprintf=e,Xo.vsprintf=n,"undefined"!=typeof window&&(window.sprintf=e,window.vsprintf=n)}();const qo={min:function(t,e){return x(t.getValues())},minDate:function(t,e){let n=x(t.getValues());if(Number.isNumber(n)){let e=Array.from(t);for(let t of e.reverse())if(null!==t.value&&t.value===n)return t.date}return"Error: min not found"},max:function(t,e){return v(t.getValues())},maxDate:function(t,e){let n=v(t.getValues());if(Number.isNumber(n)){let e=Array.from(t);for(let t of e.reverse())if(null!==t.value&&t.value===n)return t.date}return"Error: max not found"},startDate:function(t,e){if(t){let e=t.getStartDate();if(e&&e.isValid())return e}return e.startDate},endDate:function(t,e){if(t){let e=t.getEndDate();if(e&&e.isValid())return e}return e.endDate},sum:function(t,e){return k(t.getValues())},count:function(t,e){return"Error: deprecated function 'count'"},numTargets:function(t,e){return t.getNumTargets()},days:function(t,e){return"Error: deprecated function 'days'"},numDays:function(t,e){return t.getLength()},numDaysHavingData:function(t,e){return t.getLengthNotNull()},maxStreak:function(t,e){let n=0,r=0;for(let e of t)null!==e.value?n++:n=0,n>=r&&(r=n);return r},maxStreakStart:function(t,e){let n=0,r=0,i=null,a=null;if(t)for(let e of t)null!==e.value?(0===n&&(i=e.date),n++):n=0,n>=r&&(r=n,a=i);return a},maxStreakEnd:function(t,e){let n=0,r=0,i=null,a=null;if(t){let e=Array.from(t);for(let t=0;t<e.length;t++){let l=e[t],o=null;t<e.length-1&&(o=e[t+1]),null!==l.value?(n++,null===(null==o?void 0:o.value)&&(i=l.date)):n=0,n>=r&&(r=n,a=i)}}return a},maxBreaks:function(t,e){let n=0,r=0;for(let e of t)null===e.value?n++:n=0,n>r&&(r=n);return r},maxBreaksStart:function(t,e){let n=0,r=0,i=null,a=null;if(t)for(let e of t)null===e.value?(0===n&&(i=e.date),n++):n=0,n>=r&&(r=n,a=i);return a},maxBreaksEnd:function(t,e){let n=0,r=0,i=null,a=null;if(t){let e=Array.from(t);for(let t=0;t<e.length;t++){let l=e[t],o=null;t<e.length-1&&(o=e[t+1]),null===l.value?(n++,null!==(null==o?void 0:o.value)&&(i=l.date)):n=0,n>=r&&(r=n,a=i)}}return a},lastStreak:function(t,e){return"Error: deprecated function 'lastStreak'"},currentStreak:function(t,e){let n=0;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){if(null===e[t].value)break;n++}}return n},currentStreakStart:function(t,e){let n=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let r=e[t];if(t<e.length-1&&(n=e[t+1].date),null===r.value)break}}return null===n?"Error: absense":n},currentStreakEnd:function(t,e){let n=0,r=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let i=e[t];if(null===i.value)break;0===n&&(r=i.date),n++}}return null===r?"Error: absense":r},currentBreaks:function(t,e){let n=0;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){if(null!==e[t].value)break;n++}}return n},currentBreaksStart:function(t,e){let n=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let r=e[t];if(t<e.length-1&&(n=e[t+1].date),null!==r.value)break}}return null===n?"Error: absense":n},currentBreaksEnd:function(t,e){let n=0,r=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let i=e[t];if(null!==i.value)break;0===n&&(r=i.date),n++}}return null===r?"Error: absense":r},average:function(t,e){let n=t.getLengthNotNull();return jo(n)?k(t.getValues())/n:"Error: divide by zero in expression"},median:function(t,e){return b(t.getValues())},variance:function(t,e){return function(t,e){let n,r=0,i=0,a=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(n=e-i,i+=n/++r,a+=n*(e-i));else{let l=-1;for(let o of t)null!=(o=e(o,++l,t))&&(o=+o)>=o&&(n=o-i,i+=n/++r,a+=n*(o-i))}if(r>1)return a/(r-1)}(t.getValues())}},Go={"-":function(t){if("number"==typeof t)return-1*t;if(t instanceof ao){let e=t.cloneToTmpDataset();return e.getValues().forEach((function(t,e,n){null!==n[e]&&(n[e]=-1*t)})),e.recalculateMinMax(),e}return"Error: unknown operation for '-'"},"+":function(t){if("number"==typeof t)return t;if(t instanceof ao){return t.cloneToTmpDataset()}return"Error: unknown operation for '+'"}},Qo={"+":function(t,e){if("number"==typeof t&&"number"==typeof e)return t+e;if("number"==typeof t&&e instanceof ao){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t+e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof ao&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t+e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof ao&&e instanceof ao){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t+e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '+'"},"-":function(t,e){if("number"==typeof t&&"number"==typeof e)return t-e;if("number"==typeof t&&e instanceof ao){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t-e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof ao&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t-e:r[n]=null})),n}if(t instanceof ao&&e instanceof ao){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t-e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '-'"},"*":function(t,e){if("number"==typeof t&&"number"==typeof e)return t*e;if("number"==typeof t&&e instanceof ao){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t*e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof ao&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t*e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof ao&&e instanceof ao){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t*e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '*'"},"/":function(t,e){if(!jo(e))return"Error: divide by zero in expression";if("number"==typeof t&&"number"==typeof e)return t/e;if("number"==typeof t&&e instanceof ao){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t/e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof ao&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t/e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof ao&&e instanceof ao){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t/e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '/'"},"%":function(t,e){if(!jo(e))return"Error: divide by zero in expression";if("number"==typeof t&&"number"==typeof e)return t%e;if("number"==typeof t&&e instanceof ao){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t%e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof ao&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t%e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof ao&&e instanceof ao){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t%e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '%'"}},Zo={normalize:function(t,e,n){let r=t.getYMin(),i=t.getYMax();if(null!==r&&null!==i&&i>r){let e=t.cloneToTmpDataset();return e.getValues().forEach((function(t,e,n){n[e]=(t-r)/(i-r)})),e.recalculateMinMax(),e}return"Error: invalid data range for function 'normalize'"},setMissingValues:function(t,e,n){if(e&&e.length>0){let n=e[0],r=t.cloneToTmpDataset();return Number.isNumber(n)&&!Number.isNaN(n)?(r.getValues().forEach((function(t,e,r){null===t&&(r[e]=n)})),r.recalculateMinMax(),r):"Error: invalid arguments for function 'setMissingValues'"}return"Error: invalid arguments for function 'setMissingValues"}};function Ko(t,e){switch(t.type){case"Literal":return t.value;case"Identifier":let n=t.name;return n in qo||n in Zo?`Error: deprecated template variable '${n}', use '${n}()' instead`:`Error: unknown function name '${n}'`;case"UnaryExpression":let r=t,i=Ko(r.argument,e);return"string"==typeof i?i:Go[r.operator](i);case"BinaryExpression":let a=t,l=Ko(a.left,e),o=Ko(a.right,e),u=function(t,e){return"string"==typeof t?t:"string"==typeof e?e:"number"==typeof t||window.moment.isMoment(t)||t instanceof ao?"number"==typeof e||window.moment.isMoment(e)||e instanceof ao?"":"Error: invalide operant type":"Error: invalid operant type"}(l,o);return"string"==typeof u&&u.startsWith("Error:")?u:Qo[a.operator](l,o);case"CallExpression":let s=t,f=s.callee.name,c=function(t,e){return t.map((function(t){return Ko(t,e)}))}(s.arguments,e);if("string"==typeof c)return c;if("dataset"===f){if(1===c.length){let t=c[0];if("string"==typeof t)return t;if("number"!=typeof t)return"Error: function 'dataset' only accepts id in number";let n=function(t,e){return e.datasets.getDatasetById(t)}(t,e);return n||`Error: no dataset found for id '${t}'`}}else{if(f in qo){if(0===c.length){let t=null;for(let n of e.datasets)t||n.getQuery().usedAsXDataset||(t=n);return t?qo[f](t,e):`No available dataset found for function ${f}`}if(1===c.length){let t=c[0];return"string"==typeof t?t:t instanceof ao?qo[f](t,e):`Error: function '${f}' only accepts Dataset`}return`Error: Too many arguments for function ${f}`}if(f in Zo){if(1===c.length){if("string"==typeof c[0])return c[0];if(c[0]instanceof ao){let t=c[0];return Zo[f](t,null,e)}return`Error: function ${f} only accept Dataset`}if(c.length>1){if("string"==typeof c[0])return c[0];if(c[0]instanceof ao){let t=c[0];return Zo[f](t,c.filter((function(t,e,n){return e>0})),e)}return`Error: function ${f} only accept Dataset`}return`Error: Too many arguments for function ${f}`}}return`Error: unknown function name '${f}'`}return"Error: unknown expression"}function Jo(t,e){let n,r=[],i=new RegExp("{{(?<expr>[\\w+\\-*\\/0-9\\s()\\[\\]%.,]+)(::(?<format>[\\w+\\-*\\/0-9\\s()\\[\\]%.:]+))?}}","gm");for(;n=i.exec(t);){let t=n[0];if(!r.some((e=>e.source===t))&&(void 0!==n.groups&&void 0!==n.groups.expr)){let i=n.groups.expr,a=null;try{a=Uo(i)}catch(t){return"Error:"+t.message}if(!a)return"Error: failed to parse expression";const l=Ko(a,e);if("string"==typeof l)return l;if("number"==typeof l||window.moment.isMoment(l)){let e=null;void 0!==n.groups.format&&(e=n.groups.format),r.push({source:t,value:l,format:e})}}}return r}function tu(t,e){let n=Jo(t,e);if("string"==typeof n)return n;let r=n;for(let n of r){let r=n.source,i=n.value,a=n.format,l="";"number"==typeof i?l=a?Wo.sprintf("%"+a,i):i.toFixed(1):window.moment.isMoment(i)&&(l=Fo(i,a||e.dateFormat)),l&&(t=t.split(r).join(l))}return t}function eu(t,e){if(t=t.trim(),/^([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)$/.test(t))return parseFloat(t);let n=Jo(t,e);if("string"==typeof n)return n;let r=n;return r.length>0?r[0].value:"Error: failed to resolve values"}function nu(t,e,n,r){let i="",a=.5*n.dataAreaSize.width,l=.7*a,o=l*r.ratioInnerRadius,u=[];for(let t of r.data){let e=eu(t,n);if("string"==typeof e){i=e;break}"number"==typeof e&&u.push(e)}if(""!==i)return i;let s=[];for(let t of r.label){let e=tu(t,n);if(e.startsWith("Error")){i=e;break}s.push(e)}if(""!==i)return i;let f=r.hideLabelLessThan,c=s.map((function(t){return Oo(t,"tracker-tick-label")})),h=[];for(let t of r.extLabel){let e=tu(t,n);if(e.startsWith("Error")){i=e;break}h.push(e)}if(""!==i)return i;let d=h.map((function(t){return Oo(t,"tracker-pie-label")})),g=r.showExtLabelOnlyIfNoLabel,p=Kr().range(r.dataColor),y=e.dataArea.append("g");y.attr("transform",(function(){return"translate("+.5*n.dataAreaSize.width+","+.5*n.dataAreaSize.height+")"}));let m=function(){var t=Kl,e=Zl,n=null,r=Cl(0),i=Cl(Vl),a=Cl(0);function l(l){var o,u,s,f,c,h=(l=Wl(l)).length,d=0,g=new Array(h),p=new Array(h),y=+r.apply(this,arguments),m=Math.min(Vl,Math.max(-Vl,i.apply(this,arguments)-y)),v=Math.min(Math.abs(m)/h,a.apply(this,arguments)),x=v*(m<0?-1:1);for(o=0;o<h;++o)(c=p[g[o]=o]=+t(l[o],o,l))>0&&(d+=c);for(null!=e?g.sort((function(t,n){return e(p[t],p[n])})):null!=n&&g.sort((function(t,e){return n(l[t],l[e])})),o=0,s=d?(m-h*x)/d:0;o<h;++o,y=f)u=g[o],f=y+((c=p[u])>0?c*s:0)+x,p[u]={data:l[u],index:o,value:c,startAngle:y,endAngle:f,padAngle:v};return p}return l.value=function(e){return arguments.length?(t="function"==typeof e?e:Cl(+e),l):t},l.sortValues=function(t){return arguments.length?(e=t,n=null,l):e},l.sort=function(t){return arguments.length?(n=t,e=null,l):n},l.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Cl(+t),l):r},l.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Cl(+t),l):i},l.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:Cl(+t),l):a},l}(),v=m(u),x=y.selectAll("sector").data(v).enter().append("g").attr("class","sector"),A=Xl().innerRadius(o).outerRadius(l);var w=Xl().innerRadius(.9*a).outerRadius(.9*a);function b(t){return(t.endAngle-t.startAngle)/(2*Math.PI)<f}function D(t){return t.startAngle+(t.endAngle-t.startAngle)/2}function k(t,e){let n=c[e].width,r=d[e].width;b(t);let i=D(t),l=A.centroid(t),o=w.centroid(t),u=w.centroid(t),f=Math.sqrt(Math.pow(o[0]-l[0],2)+Math.pow(o[1]-l[1],2));return""!==s[e]&&(l[0]=l[0]+(o[0]-l[0])*n/f,l[1]=l[1]+(o[1]-l[1])*n/f,u[0]=(.99*a-r-3)*(i<Math.PI?1:-1)),f=Math.sqrt(Math.pow(o[0]-l[0],2)+Math.pow(o[1]-l[1],2)),f>Math.sqrt(Math.pow(u[0]-l[0],2)+Math.pow(u[1]-l[1],2))?[l,u]:[l,o,u]}x.append("path").attr("fill",(function(t,e){return p(e.toString())})).attr("d",A),y.selectAll("label").data(m(u)).enter().append("text").text((function(t,e){return b(t)?"":s[e]})).attr("transform",(function(t){return"translate("+A.centroid(t)[0]+","+A.centroid(t)[1]+")"})).style("text-anchor","middle").attr("class","tracker-pie-label"),y.selectAll("extLabel").data(v).enter().append("text").text((function(t,e){return g?""===s[e]||b(t)?h[e]:"":h[e]})).attr("transform",(function(t,e){let n=w.centroid(t),r=D(t);return n[0]=(.99*a-d[e].width)*(r<Math.PI?1:-1),"translate("+n[0]+","+n[1]+")"})).style("text-anchor",(function(t){return D(t)<Math.PI?"start":"end"})).attr("class","tracker-pie-label"),y.selectAll("line").data(v).enter().append("polyline").attr("stroke","black").style("fill","none").attr("stroke-width",1).attr("points",(function(t,e){if(g){if((""===s[e]||b(t))&&""!==h[e])return k(t,e)}else if(""!==h[e])return k(t,e)})).attr("class","tracker-axis")}function ru(t,e,n){if(!e||!n)return;let r={};r=function(t,e,n,r){ne(e).select("#svg").remove();for(var i=Object.getOwnPropertyNames(t),a=0;a<i.length;a++)delete t[i[a]];let l=ne(e).append("svg").attr("id","svg").attr("width",n.dataAreaSize.width+n.margin.left+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.top+n.margin.bottom);t.svg=l;let o=l.append("g").attr("id","graphArea").attr("transform","translate("+n.margin.left+","+n.margin.top+")").attr("width",n.dataAreaSize.width+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.bottom);t.graphArea=o;let u=o.append("g").attr("id","dataArea").attr("width",n.dataAreaSize.width).attr("height",n.dataAreaSize.height);return t.dataArea=u,t}(r,t,e);let i=kl[n.dataColor.length];for(let t=0;t<n.dataColor.length;t++)null===n.dataColor[t]&&(n.dataColor[t]=i[t]);!function(t,e,n,r){if(!n||!r)return;if(!r.title)return;let i=Oo(r.title,"tracker-title"),a=e.graphArea.append("text").text(r.title).attr("id","title").attr("transform","translate("+n.dataAreaSize.width/2+","+i.height/2+")").attr("height",i.height).attr("class","tracker-title");e.title=a,Po(e.svg,0,i.height),Po(e.graphArea,0,i.height),$o(e.dataArea,0,i.height)}(0,r,e,n),nu(0,r,e,n),n.showLegend&&function(t,e,n,r){let i=e.svg;e.graphArea;let a=e.dataArea,l=e.title,o=0;l&&(o=parseFloat(l.attr("height")));let u=r.dataName,s=u.map((function(t){return Oo(t,"tracker-legend-label")})),f=0,c=0;for(let t=0;t<u.length;t++)s[t].width>c&&(c=s[t].width,f=t);let h=c/u[f].length,d=s[f].height,g=u.length,p=2*h,y=d,m=2*h,v=0,x=0;"vertical"===r.legendOrientation?(v=3*p+m+c,x=(g+1)*y):"horizontal"===r.legendOrientation&&(v=(2*p+m)*g+p+k(s,(function(t,e){return t.width})),x=y+d);let A=0,w=0;if("top"===r.legendPosition)A=n.dataAreaSize.width/2-v/2,w=o,Po(i,0,x+y),$o(a,0,x+y);else if("bottom"===r.legendPosition)A=n.dataAreaSize.width/2-v/2,w=o+n.dataAreaSize.height+y,Po(i,0,x+y);else if("left"===r.legendPosition)A=0,w=o+n.dataAreaSize.height/2-x/2,Po(i,v+p,0),$o(a,v+p,0);else{if("right"!==r.legendPosition)return;A=n.dataAreaSize.width+p,w=o+n.dataAreaSize.height/2-x/2,Po(i,v+p,0)}let b=e.graphArea.append("g").attr("id","legend").attr("transform","translate("+A+","+w+")"),D=b.append("rect").attr("class","tracker-legend").attr("width",v).attr("height",x);r.legendBgColor&&D.style("fill",r.legendBgColor),r.legendBorderColor&&D.style("stroke",r.legendBorderColor);let C=p,M=d,T=C+p+m,_=M;if("vertical"===r.legendOrientation)b.selectAll("markers").data(u).enter().append("circle").attr("cx",C+m/2).attr("cy",(function(t,e){return M+e*y})).attr("r",(function(t,e){return 5})).style("fill",(function(t,e){return r.dataColor[e]})),b.selectAll("labels").data(u).enter().append("text").attr("x",T).attr("y",(function(t,e){return _+e*y})).text((function(t,e){return t})).style("alignment-baseline","middle").attr("class","tracker-legend-label").style("fill",(function(t,e){return r.dataColor[e]}));else if("horizontal"===r.legendOrientation){let t=0;t=0,b.selectAll("markers").data(u).enter().append("circle").attr("cx",(function(e,n){return 0===n?t=C+m/2:t+=s[n].width+p+m+p,t})).attr("cy",M).attr("r",(function(t,e){return 5})).style("fill",(function(t,e){return r.dataColor[e]})),t=0,b.selectAll("labels").data(u).enter().append("text").attr("x",(function(e,n){return 0===n?t=T:t+=s[n].width+p+m+p,t})).attr("y",_).text((function(t,e){return t})).style("alignment-baseline","middle").attr("class","tracker-legend-label").style("fill",(function(t,e){return r.dataColor[e]}))}}(0,r,e,n),function(t,e,n){let r=ne(t),i=e.svg,a=parseFloat(i.attr("width")),l=parseFloat(i.attr("height"));i.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${a} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(a*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}(t,r,e)}function iu(t,e,n){if(!e||!n)return;let r="";n.template,r=n.template;let i=tu(r,e);if(i.startsWith("Error:"))return i;if(r=i,""!==r){let e=ne(t).append("div");if(r.includes("\n")||r.includes("\\n")){let t=r.split(/(\n|\\n)/);for(let n of t)"\n"!==n&&"\\n"!==n&&e.append("div").text(n)}else e.text(r);""!==n.style&&e.attr("style",n.style)}}let au=!1,lu=2.8,ou=1.8;function uu(t,e){let n=e.dataset;if(0===n.length)return!1;let r=null;if(null===e.selectedDataset){for(let e of n)if(r=t.datasets.getDatasetById(e),r&&!r.getQuery().usedAsXDataset)break;if(r)return e.selectedDataset=r.getId(),!0}else{let i=e.selectedDataset,a=n.findIndex((t=>t===i));if(a>=0){if(a===e.dataset.length-1){for(let e of n)if(r=t.datasets.getDatasetById(e),r&&!r.getQuery().usedAsXDataset)break;return!!r&&(e.selectedDataset=r.getId(),!0)}{a++;let i=n[a];if(r=t.datasets.getDatasetById(i),e.selectedDataset=i,r&&!r.getQuery().usedAsXDataset)return!0;uu(t,e)}}}return!1}function su(t,e,n,r){ne(e).select("#svg").remove();for(var i=Object.getOwnPropertyNames(t),a=0;a<i.length;a++)delete t[i[a]];let l=ne(e).append("svg").attr("id","svg").attr("width",n.dataAreaSize.width+n.margin.left+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.top+n.margin.bottom);t.svg=l;let o=l.append("g").attr("id","graphArea").attr("transform","translate("+n.margin.left+","+n.margin.top+")").attr("width",n.dataAreaSize.width+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.bottom);t.graphArea=o;let u=o.append("g").attr("id","dataArea").attr("width",n.dataAreaSize.width).attr("height",n.dataAreaSize.height);return t.dataArea=u,t}function fu(t,e){let n=t.svg.selectAll("circle");for(let t of n){let e=ne(t).attr("id");e&&e.startsWith("tracker-selected-circle-")&&ne(t).style("stroke","none")}e.selectedDate="",t.monitor.text("")}function cu(t,e,n,r,i){if(!n||!r)return;let a=r.selectedDataset;if(null===a)return;let l=n.datasets.getDatasetById(a);if(!l)return;let o=l.getName();i.month(),i.daysInMonth(),i.year();let u=Oo("30","tracker-month-label"),s=Math.max(u.width,u.height)*lu,f=i.format("YYYY"),c=i.format("MMM"),h=Oo(f,"tracker-month-header-year"),d=Oo(c,"tracker-month-header-month"),g=0,p=e.graphArea.append("g"),y=null;r.headerMonthColor?y=r.headerMonthColor:r.color&&(y=r.color);let m=p.append("text").text(c).attr("id","titleMonth").attr("transform","translate("+s/4+","+d.height+")").attr("class","tracker-month-header-month").style("cursor","default").on("click",(function(t){fu(e,r)}));y&&m.style("fill",y),g+=d.height;let v=null;r.headerYearColor?v=r.headerYearColor:r.color&&(v=r.color);let x=p.append("text").text(f).attr("id","titleYear").attr("transform","translate("+s/4+","+(g+h.height)+")").attr("class","tracker-month-header-year").style("cursor","default").attr("font-weight","bold").on("click",(function(t){fu(e,r)}));v&&x.style("fill",v),g+=h.height;let A=Oo(o,"tracker-month-title-rotator");if("circle"===r.mode||"annotation"===r.mode&&!r.showAnnotationOfAllTargets){let a=p.append("text").text(o).attr("transform","translate("+3.5*s+","+A.height+")").attr("class","tracker-month-title-rotator").style("cursor","pointer").on("click",(function(a){uu(n,r)&&(fu(e,r),du(t,e,n,r,i))}));e.rotator=a}let w=Oo("0.0000","tracker-month-title-monitor"),b=p.append("text").text("").attr("id","monitor").attr("class","tracker-month-title-monitor").attr("transform","translate("+3.5*s+","+(A.height+w.height)+")").style("cursor","pointer").style("fill",r.selectedRingColor);e.monitor=b;let D=Oo("<","tracker-month-title-arrow");p.append("text").text("<").attr("id","arrowLeft").attr("transform","translate("+5.5*s+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(a){fu(e,r),r.selectedDate="";let l=i.clone().add(-1,"month");du(t,e,n,r,l)})).style("cursor","pointer"),p.append("text").text(">").attr("id","arrowLeft").attr("transform","translate("+6.5*s+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(a){fu(e,r);let l=i.clone().add(1,"month");du(t,e,n,r,l)})).style("cursor","pointer"),p.append("text").text("◦").attr("id","arrowToday").attr("transform","translate("+6*s+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(i){fu(e,r);let a=Bo(n.dateFormat);du(t,e,n,r,a)})).style("cursor","pointer"),g+=8;let k=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];"mon"===r.startWeekOn.toLowerCase()&&k.push(k.shift());let C=Oo(k[0],"tracker-month-weekday");e.graphArea.selectAll("weekDays").data(k).enter().append("text").text((function(t){return t})).attr("transform",(function(t,e){return"translate("+(e+.5)*s+","+(g+C.height)+")"})).attr("class","tracker-month-weekday").attr("text-anchor","middle").style("cursor","default").on("click",(function(t){fu(e,r)})),g+=C.height+8;let M=null;r.dividingLineColor?M=r.dividingLineColor:r.color&&(M=r.color);let T=e.graphArea.append("rect").attr("x",0).attr("y",g).attr("width",6.5*s+C.width).attr("height",1).attr("class","tracker-month-dividing-line");M&&T.style("fill",M),g+=1,p.attr("height",g),e.header=p,$o(e.dataArea,0,g)}function hu(t,e,n,r,i){if(!n||!r)return;let a=r.mode;if("circle"!==a&&"annotation"!==a)return"Unknown month view mode";let l=r.selectedDataset;if(null===l)return;let o=n.datasets.getDatasetById(l);if(!o)return;let u=r.dataset.findIndex((t=>t===l));l<0&&(u=0);let s=r.threshold[u];i.month(),i.daysInMonth();let f=Oo("30","tracker-month-label"),c=Math.max(f.width,f.height)*lu,h=c/lu*ou/2,d=(c-2*h)/2,g=x(o.getValues());null!==r.yMin[u]&&(g=r.yMin[u]);let p=v(o.getValues());null!==r.yMax[u]&&(p=r.yMax[u]);let y=!0;(null===p||null===g||p<=g)&&(y=!1);const m=i.clone().startOf("month");let A=m.clone().subtract(m.day(),"days");"mon"===r.startWeekOn.toLowerCase()&&(A=A.add(1,"days"));const w=i.clone().endOf("month");let b=w.clone().add(7-w.day()-1,"days");"mon"===r.startWeekOn.toLowerCase()&&(b=b.add(1,"days"));const D=o.getStartDate(),k=o.getEndDate();let C=r.showAnnotation,M=r.annotation,T=M[u],_=r.showAnnotationOfAllTargets,E=[],F=0,S=0,B=0;for(let t=A.clone();t<=b;t.add(1,"days")){t=Mo(Fo(t,n.dateFormat),n.dateFormat),"2021-09-13"===t.format("YYYY-MM-DD")&&(au=!1),"mon"===r.startWeekOn.toLowerCase()?(F=t.day()-1,F<0&&(F=6),S=Math.floor(B/7)):(F=t.day(),S=Math.floor(B/7));let e=!0;(t.diff(m)<0||t.diff(w)>0)&&(e=!1);let i=!0;D&&k&&t.diff(D)>=0&&t.diff(k)<=0&&(i=!1);const a=o.getValue(t);au&&(console.log(o),console.log(Fo(t,n.dateFormat)),console.log(a));let l=!1;r.circleColorByValue?(y||null!==a&&a>s)&&(l=!0):null!==a&&a>s&&(l=!0);let u=null;r.circleColorByValue&&y&&null!==a&&(u=(a-g)/(p-g)),au&&(console.log(g),console.log(p),console.log(u));let f=o.getValue(t,1),c=o.getValue(t,-1),h=!1;null!==a&&a>s&&null!==c&&c>s&&(h=!0);let d=!1;null!==a&&a>s&&null!==f&&f>s&&(d=!0),au&&(console.log(`preValue: ${c}, curValue: ${a}, nextValue: ${f}`),console.log(r.threshold),console.log(`streakIn: ${h}, streakOut: ${d}`));let v="";if(C)if(_)for(let e of r.dataset){let i=r.dataset.findIndex((t=>t===e));if(i>=0){let a=n.datasets.getDatasetById(e).getValue(t),l=r.threshold[i];null!==a&&a>l&&(v+=M[i])}}else a>s&&(v=T);E.push({date:Fo(t,n.dateFormat),value:a,scaledValue:u,dayInMonth:t.date(),isInThisMonth:e,isOutOfDataRange:i,row:S,col:F,showCircle:l,streakIn:h,streakOut:d,annotation:v}),B++,au&&(au=!1)}let N=(F+1)*c,I=fi().domain([-.5,6.5]).range([0,N]);if("circle"===a&&r.showCircle&&r.showStreak){let t="#69b3a2";r.circleColor?t=r.circleColor:r.color&&(t=r.color),e.dataArea.selectAll("streakIn").data(E.filter((function(t){return t.streakIn}))).enter().append("rect").attr("x",(function(t){return I(t.col)-h-d})).attr("y",(function(t){return I(t.row)-1.5})).attr("width",d).attr("height",3).style("fill",(function(e){return e.showCircle?r.circleColorByValue?null!==e.scaledValue?Mn("white",t)(.8*e.scaledValue+.2):"none":t:"none"})).style("opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1})),e.dataArea.selectAll("streakOut").data(E.filter((function(t){return t.streakOut}))).enter().append("rect").attr("x",(function(t){return I(t.col)+h})).attr("y",(function(t){return I(t.row)-1.5})).attr("width",d).attr("height",3).style("fill",(function(e){return e.showCircle?r.circleColorByValue?null!==e.scaledValue?Mn("white",t)(.8*e.scaledValue+.2):"none":t:"none"})).style("opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1}))}let L="#69b3a2";r.circleColor?L=r.circleColor:r.color&&(L=r.color),"circle"===a&&r.showCircle&&e.dataArea.selectAll("dot").data(E).enter().append("circle").attr("r",h).attr("cx",(function(t){return I(t.col)})).attr("cy",(function(t){return I(t.row)})).style("fill",(function(t){if(t.showCircle){if(!r.circleColorByValue)return L;if(null!==t.scaledValue){return Mn("white",L)(.8*t.scaledValue+.2)}return"none"}return"none"})).style("opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1})).style("cursor","default");let V=Fo(window.moment(),n.dateFormat);if("circle"===a&&r.showTodayRing){let t=e.dataArea.selectAll("todayRing").data(E.filter((function(t){return t.date===V}))).enter().append("circle").attr("r",.9*h).attr("cx",(function(t){return I(t.col)})).attr("cy",(function(t){return I(t.row)})).attr("class","tracker-month-today-circle").style("cursor","default");""!==r.todayRingColor?t.style("stroke",r.todayRingColor):t.style("stroke","white")}"circle"===a&&r.showSelectedRing&&e.dataArea.selectAll("selectedRing").data(E).enter().append("circle").attr("r",h).attr("cx",(function(t){return I(t.col)})).attr("cy",(function(t){return I(t.row)})).attr("id",(function(t){return"tracker-selected-circle-"+t.date})).attr("class","tracker-month-selected-circle").style("cursor","default").style("stroke","none"),e.dataArea.selectAll("dayLabel").data(E).enter().append("text").text((function(t){return t.dayInMonth.toString()})).attr("transform",(function(t){return"translate("+I(t.col)+","+(I(t.row)+f.height/4)+")"})).style("fill-opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1})).attr("date",(function(t){return t.date})).attr("value",(function(t){return t.value})).attr("valueType",(function(t){return no[o.valueType]})).attr("class","tracker-month-label").on("click",(function(t){fu(e,r);let n=ne(this).attr("date");if(r.selectedDate=n,r.showSelectedRing&&e.dataArea.select("#tracker-selected-circle-"+n).style("stroke",r.selectedRingColor),r.showSelectedValue){let t=ne(this).attr("value"),n="";if("Time"===ne(this).attr("valueType")){n=window.moment("00:00","HH:mm",!0).add(parseFloat(t),"seconds").format("HH:mm")}else n=t;e.monitor.text(n)}})).style("cursor","pointer"),"annotation"===a&&C&&e.dataArea.selectAll("dayAnnotation").data(E).enter().append("text").text((function(t){return t.annotation})).attr("transform",(function(t){let e=I(t.col),n=I(t.row)+f.height/4;return t.annotation&&(n+=h),"translate("+e+","+n+")"})).attr("class","tracker-month-annotation");let O=parseFloat(e.svg.attr("width")),P=parseFloat(e.svg.attr("height")),$=parseFloat(e.graphArea.attr("width")),Y=parseFloat(e.graphArea.attr("height")),z=7*c+parseFloat(e.header.attr("height")),R=7*c;z>P&&Po(e.svg,0,z-P),R>O&&Po(e.svg,R-O,0),z>Y&&Po(e.graphArea,0,z-Y),R>$&&Po(e.svg,R-$,0)}function du(t,e,n,r,i){n&&gu&&(cu(t,e=su(e,t,n),n,r,i),hu(0,e,n,r,i))}function gu(t,e,n){if(!e||!gu)return;n.dataset;let r=0;for(let t of e.datasets)t.getQuery().usedAsXDataset||r++;if(0===r)return"No available dataset found";if(uu(e,n),null===n.selectedDataset)return"No available dataset found";let i={};i=su(i,t,e);let a=null;if(n.initMonth){if(a=Eo(n.initMonth,e.dateFormat),!a){let t=window.moment(n.initMonth,"YYYY-MM",!0);if(!t.isValid())return"Invalid initMonth";a=t}}else a=e.datasets.getDates().last();a&&(cu(t,i,e,n,a),hu(0,i,e,n,a),function(t,e,n){let r=ne(t),i=e.svg,a=parseFloat(i.attr("width")),l=parseFloat(i.attr("height"));i.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${a} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(a*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}(t,i,e))}function pu(t,e,n){if(e&&pu)return"Under construction"}function yu(t,e,n){if(!e||!n)return;let r=parseFloat(n.dataset);e.datasets.getDatasetById(r),"horizontal"===n.orientation?e.dataAreaSize={width:250,height:24}:"vertical"===n.orientation&&(e.dataAreaSize={width:24,height:250});let i=function(t,e,n){let r={};if(!e||!n)return;let i=ne(t).append("svg").attr("id","svg").attr("width",e.dataAreaSize.width+e.margin.left+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.top+e.margin.bottom);r.svg=i;let a=i.append("g").attr("id","graphArea").attr("transform","translate("+e.margin.left+","+e.margin.top+")").attr("width",e.dataAreaSize.width+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.bottom);r.graphArea=a;let l=a.append("g").attr("id","dataArea").attr("width",e.dataAreaSize.width).attr("height",e.dataAreaSize.height);return r.dataArea=l,r}(t,e,n),a=function(t,e,n,r){if(!e||!n)return;let i=n.range,a=i[i.length-1],l=[0,a],o=n.valueUnit,u=function(t){return o&&o.endsWith("%")?ui(0,a,7)(t)+" %":ui(0,a,7)(t)},s=Oo(u(a),"tracker-tick-label");if("horizontal"===n.orientation){let n=fi();n.domain(l).range([0,e.dataAreaSize.width]),t.scale=n;let r=O(n);r.tickFormat(u);let i=t.dataArea.append("g").attr("id","axis").attr("transform","translate(0,"+e.dataAreaSize.height+")").call(r).attr("class","tracker-axis");t.axis=i,i.selectAll("path").style("stroke","none"),i.selectAll("line"),i.selectAll("text").attr("class","tracker-tick-label"),i.attr("width",e.dataAreaSize.width+s.width),i.attr("height",6+s.height),Po(t.svg,+s.width,6+s.height),Po(t.graphArea,+s.width,6+s.height)}else if("vertical"===n.orientation){let n=fi();n.domain(l).range([e.dataAreaSize.height,0]),t.scale=n;let r=P(n);r.tickFormat(u);let i=t.dataArea.append("g").attr("id","axis").attr("x",0).attr("y",0).call(r).attr("class","tracker-axis");t.axis=i,i.selectAll("path").style("stroke","none"),i.selectAll("line"),i.selectAll("text").attr("class","tracker-tick-label"),i.attr("width",6+s.width),i.attr("height",e.dataAreaSize.width),Po(t.svg,6+s.width,0),Po(t.graphArea,6+s.width,0),$o(t.dataArea,6+s.width,0)}}(i,e,n);if("string"==typeof a)return a;!function(t,e,n){if(!e||!n)return;if(n.title){let r=Oo(n.title,"tracker-title-small");if("horizontal"===n.orientation){let i=t.graphArea.append("text").text(n.title).attr("id","title").attr("x",r.width/2).attr("y",e.dataAreaSize.height/2).attr("height",r.height).attr("class","tracker-title-small");t.title=i,Po(t.svg,r.width+6,0),Po(t.graphArea,r.width+6,0),$o(t.dataArea,r.width+6,0)}else if("vertical"===n.orientation){let i=e.dataAreaSize.width/2;r.width>e.dataAreaSize.width&&(Po(t.svg,r.width-e.dataAreaSize.width,0),Po(t.graphArea,r.width-e.dataAreaSize.width,0),$o(t.dataArea,r.width/2-e.dataAreaSize.width/2,0),i=r.width/2);let a=parseFloat(t.axis.attr("width")),l=t.graphArea.append("text").text(n.title).attr("id","title").attr("x",i+a).attr("y",r.height/2).attr("height",r.height).attr("class","tracker-title-small");t.title=l,Po(t.svg,0,r.height+6),Po(t.graphArea,0,r.height+6),$o(t.dataArea,0,r.height+6)}}if(n.valueUnit){let r=Oo(n.valueUnit,"tracker-tick-label");if("horizontal"===n.orientation){let i=t.dataArea.append("text").text(n.valueUnit).attr("id","unit").attr("x",-1*(r.width+6)).attr("y",e.dataAreaSize.height+6).attr("height",r.height).attr("class","tracker-tick-label");t.unit=i}else if("vertical"===n.orientation){let i=t.dataArea.append("text").text(n.valueUnit).attr("id","unit").attr("x",e.dataAreaSize.width/2-r.width/2).attr("y",-(r.height/2+6)).attr("height",r.height).attr("class","tracker-tick-label");t.unit=i,Po(t.svg,0,r.height+6),Po(t.graphArea,0,r.height+6),$o(t.dataArea,0,r.height+6)}}}(i,e,n),function(t,e,n,r){if(!e||!n)return;let i=t.scale,a=n.range,l=n.rangeColor,o=[],u=0;for(let t=0;t<a.length;t++)o.push({start:u,end:a[t],color:l[t]}),u=a[t];"horizontal"===n.orientation?t.dataArea.selectAll("backPanel").data(o).enter().append("rect").attr("x",(function(t,e){return Math.floor(i(t.start))})).attr("y",(function(t){return 0})).attr("width",(function(t,e){return Math.ceil(i(t.end-t.start))})).attr("height",e.dataAreaSize.height).style("fill",(function(t){return t.color})):"vertical"===n.orientation&&t.dataArea.selectAll("backPanel").data(o).enter().append("rect").attr("x",(function(t,e){return 0})).attr("y",(function(t){return Math.floor(i(t.end))})).attr("width",e.dataAreaSize.width).attr("height",(function(t){return e.dataAreaSize.height-Math.floor(i(t.end-t.start))})).style("fill",(function(t){return t.color}))}(i,e,n);let l=function(t,e,n,r){let i="";if(!e||!n)return;let a=eu(n.value,e);if("string"==typeof a)return a;let l=a;if(Number.isNaN(l))return i="Invalid input value: "+a,i;let o=n.valueColor,u=t.scale;if("horizontal"===n.orientation){let n=e.dataAreaSize.height/3;t.dataArea.append("rect").attr("x",u(0)).attr("y",n).attr("width",Math.floor(u(l))).attr("height",n).style("fill",o)}else if("vertical"===n.orientation){let n=e.dataAreaSize.width/3;t.dataArea.append("rect").attr("x",n).attr("y",Math.floor(u(l))).attr("width",n).attr("height",e.dataAreaSize.height-Math.floor(u(l))).style("fill",o)}}(i,e,n);if("string"==typeof l)return l;!function(t,e,n,r){if(!e||!n)return;if(!n.showMarker)return;let i=n.markerValue,a=n.markerColor,l=t.scale;if("horizontal"===n.orientation){let n=2*e.dataAreaSize.height/3;t.dataArea.append("rect").attr("x",l(i)-1.5).attr("y",n/4).attr("width",3).attr("height",n).style("fill",a)}else if("vertical"===n.orientation){let n=2*e.dataAreaSize.width/3;t.dataArea.append("rect").attr("x",n/4).attr("y",l(i)-1.5).attr("width",n).attr("height",3).style("fill",a)}}(i,e,n),function(t,e,n){let r=ne(t),i=e.svg,a=parseFloat(i.attr("width")),l=parseFloat(i.attr("height"));i.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${a} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(a*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}(t,i,e)}function mu(t,e,n){if(!e||!n)return;let r=e.datasets,i=function(t,e){let n,r;if(void 0===e)for(const e of t)null!=e&&(void 0===n?e>=e&&(n=r=e):(n>e&&(n=e),r<e&&(r=e)));else{let i=-1;for(let a of t)null!=(a=e(a,++i,t))&&(void 0===n?a>=a&&(n=r=a):(n>a&&(n=a),r<a&&(r=a)))}return[n,r]}(r.getDates()),a=Dl().domain(i).range([0,e.dataAreaSize.width]);t.xScale=a;let l=_o(n.xAxisTickInterval),[o,u]=function(t,e){let n=[],r=null;if(e){let r=t[0],i=t[t.length-1];n=Ti.range(r.toDate(),i.toDate(),e.asDays())}else{let e=t.length;r=e<=15?Ti:e<=60?Ti.every(4):e<=105?Si:e<=450?Wi:e<=900?Wi.every(2):qi}return[n,r]}(r.getDates(),l),s=function(t,e){if(e){function n(t){return Fo(window.moment(t),e)}return n}{let r=null,i=t.length;return r=na(i<=15||i<=60||i<=105?"%y-%m-%d":i<=450||i<=900?"%y %b":"%Y"),r}}(r.getDates(),n.xAxisTickLabelFormat),f=O(a);o&&0!==o.length?f.tickValues(o):u&&f.ticks(u),s&&f.tickFormat(s);let c=t.dataArea.append("g").attr("id","xAxis").attr("transform","translate(0,"+e.dataAreaSize.height+")").call(f).attr("class","tracker-axis");n.xAxisColor&&c.style("stroke",n.xAxisColor),t.xAxis=c;let h=Oo("99-99-99"),d=c.selectAll("text").attr("x",-1*h.height*Math.cos(65/180*Math.PI)).attr("y",0).attr("transform","rotate(-65)").style("text-anchor","end").attr("class","tracker-tick-label");n.xAxisColor&&d.style("fill",n.xAxisColor);let g=h.width*Math.sin(65/180*Math.PI),p=c.append("text").text(n.xAxisLabel).attr("transform","translate("+e.dataAreaSize.width/2+","+(6+g)+")").attr("class","tracker-axis-label");n.xAxisLabelColor&&p.style("fill",n.xAxisLabelColor),c.attr("height",6+g),Po(t.svg,0,6+g),Po(t.graphArea,0,6+g)}function vu(t,e,n,r,i){if(!e||!n)return;let a=e.datasets;if(0===i.length)return;if("left"!==r&&"right"!==r)return;let l=null,o=null,u=null,s=!1;for(let t of i){let e=a.getDatasetById(t);if(!e.getQuery().usedAsXDataset)if((null===l||e.getYMin()<l)&&(l=e.getYMin()),(null===o||e.getYMax()>o)&&(o=e.getYMax()),s=e.valueType===no.Time,null===u)u=s;else if(s!==u)return"Not all values in time format"}let f=null;"left"===r?f=n.yMin[0]:"right"===r&&(f=n.yMin[1]);let c=!1;"number"!=typeof f?f=l:c=!0;let h=null;"left"===r?h=n.yMax[0]:"right"===r&&(h=n.yMax[1]);let d=!1;if("number"!=typeof h?h=o:d=!0,h<f){let t=f;f=h,h=t;let e=c;c=d,d=e}let g,p,y=h-f,m=fi();g=c?f:f-.2*y,p=d?h:h+.2*y,n.GetGraphType()===eo.Bar&&(p<0&&(p=0),g>0&&(g=0));let v=[g,p];("left"===r&&n.reverseYAxis[0]||"right"===r&&n.reverseYAxis[1])&&(v=[p,g]),m.domain(v).range([e.dataAreaSize.height,0]),"left"===r?t.leftYScale=m:"right"===r&&(t.rightYScale=m);let x="";"left"===r?x=n.yAxisColor[0]:"right"===r&&(x=n.yAxisColor[1]);let A="";"left"===r?A=n.yAxisLabelColor[0]:"right"===r&&(A=n.yAxisLabelColor[1]);let w="";"left"===r?w=n.yAxisLabel[0]:"right"===r&&(w=n.yAxisLabel[1]);let b="",k=null,C=null;"left"===r?(b=n.yAxisUnit[0],k=n.yAxisTickInterval[0],C=n.yAxisTickLabelFormat[0]):"right"===r&&(b=n.yAxisUnit[1],k=n.yAxisTickInterval[1],C=n.yAxisTickLabelFormat[1]);let M,_=null;if(s?_=_o(k):(_=parseFloat(k),Number.isNumber(_)&&!Number.isNaN(_)||(_=null)),"left"===r?M=P(m):"right"===r&&(M=V(T,m)),M){let t=function(t,e,n,r=!1){if(r){if(n){function i(t){return window.moment("00:00","HH:mm",!0).add(t,"seconds").format(n)}return i}{function a(n){const r=Math.abs(e-t);let i=window.moment("00:00","HH:mm",!0).add(n,"seconds").format("HH:mm");return r>43200&&(n<t||n>e||(n-t)/3600%2<1)&&(i=""),i}return a}}if(n){function l(t){return Wo.sprintf("%"+n,t)}return l}return ui(t,e,10)}(g,p,C,s);t&&M.tickFormat(t);let e=function(t,e,n,r=!1){const i=Math.abs(e-t);let a=[];r?a=n&&window.moment.isDuration(n)?D(t,e,Math.abs(n.asSeconds())):i>18e3?D(t=3600*Math.floor(t/3600),e=3600*Math.ceil(e/3600),3600):D(t=1800*Math.floor(t/1800),e=1800*Math.ceil(e/1800),1800):n&&"number"==typeof n&&(a=D(t,e,n));return 0===a.length?null:a}(g,p,_,s);e&&M.tickValues(e)}let E=t.dataArea.append("g").attr("id","yAxis").call(M).attr("class","tracker-axis");"right"==r&&E.attr("transform","translate("+e.dataAreaSize.width+" ,0)"),"left"===r?t.leftYAxis=E:"right"===r&&(t.rightYAxis=E);let F=E.selectAll("path");x&&F.style("stroke",x);let S=E.selectAll("line");x&&S.style("stroke",x);let B=E.selectAll("text").attr("class","tracker-tick-label");x&&B.style("fill",x);let N=0;for(let t of B)if(t.textContent){let e=Oo(t.textContent,"tracker-axis-label");e.width>N&&(N=e.width)}""!==b&&(w+=" ("+b+")");let I=Oo(w),L=E.append("text").text(w).attr("transform","rotate(-90)").attr("x",-1*e.dataAreaSize.height/2).attr("class","tracker-axis-label");"left"===r?L.attr("y",-6-N-I.height/2):L.attr("y",6+N+I.height),A&&L.style("fill",A);let O=I.height+N+6;E.attr("width",O),Po(t.svg,O,0),Po(t.graphArea,O,0),"left"===r&&($o(t.dataArea,O,0),t.title&&$o(t.title,O,0))}function xu(t,e,n,r,i){if(!e||!n)return;let a=null;if("left"===i?a=t.leftYScale:"right"===i&&(a=t.rightYScale),n.showLine[r.getId()]){let e=function(t,e){var n=Cl(!0),r=null,i=ql,a=null,l=Pl(o);function o(o){var u,s,f,c=(o=Wl(o)).length,h=!1;for(null==r&&(a=i(f=l())),u=0;u<=c;++u)!(u<c&&n(s=o[u],u,o))===h&&((h=!h)?a.lineStart():a.lineEnd()),h&&a.point(+t(s,u,o),+e(s,u,o));if(f)return a=null,f+""||null}return t="function"==typeof t?t:void 0===t?Gl:Cl(t),e="function"==typeof e?e:void 0===e?Ql:Cl(e),o.x=function(e){return arguments.length?(t="function"==typeof e?e:Cl(+e),o):t},o.y=function(t){return arguments.length?(e="function"==typeof t?t:Cl(+t),o):e},o.defined=function(t){return arguments.length?(n="function"==typeof t?t:Cl(!!t),o):n},o.curve=function(t){return arguments.length?(i=t,null!=r&&(a=i(r)),o):i},o.context=function(t){return arguments.length?(null==t?r=a=null:a=i(r=t),o):r},o}().defined((function(t){return null!==t.value})).x((function(e){return t.xScale(e.date)})).y((function(t){return a(t.value)})),i=t.dataArea.append("path").attr("class","tracker-line").style("stroke-width",n.lineWidth[r.getId()]);n.fillGap[r.getId()]?i.datum(Array.from(r).filter((function(t){return null!==t.value}))).attr("d",e):i.datum(r).attr("d",e),n.lineColor[r.getId()]&&i.style("stroke",n.lineColor[r.getId()])}}function Au(t,e,n,r,i){if(!e||!n)return;let a=null;if("left"===i?a=t.leftYScale:"right"===i&&(a=t.rightYScale),n.showPoint[r.getId()]){let i=t.dataArea.selectAll("dot").data(Array.from(r).filter((function(t){return null!==t.value}))).enter().append("circle").attr("r",n.pointSize[r.getId()]).attr("cx",(function(e){return t.xScale(e.date)})).attr("cy",(function(t){return a(t.value)})).attr("date",(function(t){return na("%y-%m-%d")(t.date)})).attr("value",(function(t){if(null!==t.value)return Number.isInteger(t.value)?t.value.toFixed(0):t.value.toFixed(2)})).attr("valueType",no[r.valueType]).attr("class","tracker-dot");n.pointColor[r.getId()]&&(i.style("fill",n.pointColor[r.getId()]),n.pointBorderColor[r.getId()]&&n.pointBorderWidth[r.getId()]>0&&(i.style("stroke",n.pointBorderColor[r.getId()]),i.style("stroke-width",n.pointBorderWidth[r.getId()]))),n.allowInspectData&&function(t,e,n){let r=e.dataArea.append("svg").style("opacity",0),i=r.append("rect").attr("x",0).attr("y",0),a=r.append("text"),l=a.append("tspan").attr("class","tracker-tooltip-label"),o=a.append("tspan").attr("class","tracker-tooltip-label"),u=3,s=3;t.on("mouseenter",(function(t){const[e,f]=function(t,e){if(t=function(t){let e;for(;e=t.sourceEvent;)t=e;return t}(t),void 0===e&&(e=t.currentTarget),e){var n=e.ownerSVGElement||e;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=t.clientX,r.y=t.clientY,[(r=r.matrixTransform(e.getScreenCTM().inverse())).x,r.y]}if(e.getBoundingClientRect){var i=e.getBoundingClientRect();return[t.clientX-i.left-e.clientLeft,t.clientY-i.top-e.clientTop]}}return[t.pageX,t.pageY]}(t);let c=0,h=0,d="date: "+ne(this).attr("date"),g=Oo(d,"tracker-tooltip-label");l.text(d),g.width>c&&(c=g.width),h+=g.height,l.attr("x",u).attr("y",h);let p="value: ",y=ne(this).attr("valueType"),m=ne(this).attr("value");if("Time"===y){p+=window.moment("00:00","HH:mm",!0).add(parseFloat(m),"seconds").format("HH:mm"),o.text(p)}else p+=m,o.text(p);let v=Oo(p,"tracker-tooltip-label");v.width>c&&(c=v.width),h+=s+v.height,o.attr("x",u).attr("y",h),c+=2*u,h+=2*s,a.attr("width",c).attr("height",h),i.attr("width",c).attr("height",h).attr("class","tracker-tooltip");let x=e,A=f,w=12,b=12;x=e+w+c>n.dataAreaSize.width?e-c-w:e+w,A=f-b-h<0?f+b:f-b-h,r.attr("x",x).attr("y",A),r.transition().duration(200).style("opacity",1)})).on("mouseleave",(function(){r.transition().duration(500).style("opacity",0)}))}(i,t,e)}}function wu(t,e,n,r,i,a,l){if(!e||!n)return;let o=e.dataAreaSize.width/r.getLength(),u=o;o-1>0&&(u=o-1),u/=l;let s=null;"left"===i?s=t.leftYScale:"right"===i&&(s=t.rightYScale);let f=t.dataArea.selectAll("bar").data(Array.from(r).filter((function(t){return null!==t.value}))).enter().append("rect").attr("x",(function(e,n){if(0===n){let n=a+1-l/2;if(n<1)return t.xScale(e.date)-o/2+a*u+n*u}return t.xScale(e.date)-o/2+a*u})).attr("y",(function(t){return s(Math.max(t.value,0))})).attr("width",(function(t,e){if(0===e){let t=a+1-l/2;return t<0?0:t<1?u*t:u}if(e===r.getLength()-1){let t=1-(a+1-l/2);return t<0?0:t<1?u*t:u}return u})).attr("height",(function(t){if(null!==t.value)return Math.abs(s(t.value)-s(0))})).attr("class","tracker-bar");n.barColor[r.getId()]&&f.style("fill",n.barColor[r.getId()])}function bu(t,e,n){let r=t.svg;t.graphArea;let i=t.dataArea,a=t.title,l=t.xAxis,o=t.leftYAxis,u=t.rightYAxis,s=0;a&&(s=parseFloat(a.attr("height")));let f=parseFloat(l.attr("height")),c=0;o&&(c=parseFloat(o.attr("width")));let h=0;u&&(h=parseFloat(u.attr("width")));let d=e.datasets,g=d.getXDatasetIds(),p=d.getNames(),y=p.map((function(t){return Oo(t,"tracker-legend-label")})),m=0,v=0;for(let t=0;t<p.length;t++)g.includes(t)||y[t].width>v&&(v=y[t].width,m=t);let x=v/p[m].length,A=y[m].height,w=p.length-g.length,b=2*x,D=A,C=2*x,M=0,T=0;"vertical"===n.legendOrientation?(M=3*b+C+v,T=(w+1)*D):"horizontal"===n.legendOrientation&&(M=(2*b+C)*w+b+k(y,(function(t,e){return g.includes(e)?0:t.width})),T=D+A);let _=0,E=0;if("top"===n.legendPosition)_=c+e.dataAreaSize.width/2-M/2,E=s,Po(r,0,T+D),$o(i,0,T+D);else if("bottom"===n.legendPosition)_=c+e.dataAreaSize.width/2-M/2,E=s+e.dataAreaSize.height+f+D,Po(r,0,T+D);else if("left"===n.legendPosition)_=0,E=s+e.dataAreaSize.height/2-T/2,Po(r,M+b,0),$o(i,M+b,0);else{if("right"!==n.legendPosition)return;_=e.dataAreaSize.width+c+h+b,E=s+e.dataAreaSize.height/2-T/2,Po(r,M+b,0)}let F=t.graphArea.append("g").attr("id","legend").attr("transform","translate("+_+","+E+")"),S=F.append("rect").attr("class","tracker-legend").attr("width",M).attr("height",T);n.legendBgColor&&S.style("fill",n.legendBgColor),n.legendBorderColor&&S.style("stroke",n.legendBorderColor);let B=b,N=A,I=B+b+C,L=N;if("vertical"===n.legendOrientation){n.GetGraphType()===eo.Line?(F.selectAll("markers").data(p).enter().append("line").attr("x1",B).attr("x2",B+C).attr("y1",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*D})).attr("y2",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*D})).style("stroke",(function(t,e){if(!g.includes(e))return n.lineColor[e]})),F.selectAll("markers").data(p).enter().append("circle").attr("cx",B+C/2).attr("cy",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*D})).attr("r",(function(t,e){if(!g.includes(e))return n.showPoint[e]?n.pointSize[e]:0})).style("fill",(function(t,e){if(!g.includes(e))return n.pointColor[e]}))):n.GetGraphType()===eo.Bar&&F.selectAll("markers").data(p).enter().append("rect").attr("x",B).attr("y",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*D-A/2})).attr("width",C).attr("height",A).style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}));let t=F.selectAll("labels").data(p).enter().append("text").attr("x",I).attr("y",(function(t,e){let n=g.filter((t=>t<e)).length;return L+(e-=n)*D})).text((function(t,e){return g.includes(e)?"":t})).style("alignment-baseline","middle").attr("class","tracker-legend-label");n.GetGraphType()===eo.Line?t.style("fill",(function(t,e){if(!g.includes(e))return n.lineColor[e]})):n.GetGraphType()===eo.Bar&&t.style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}))}else if("horizontal"===n.legendOrientation){n.GetGraphType()===eo.Line?(F.selectAll("markers").data(p).enter().append("line").attr("x1",(function(t,e){let n=b;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=C+b+r.width+b}return n})).attr("x2",(function(t,e){let n=b+C;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=b+r.width+b+C}return n})).attr("y1",N).attr("y2",N).style("stroke",(function(t,e){if(!g.includes(e))return n.lineColor[e]})),F.selectAll("markers").data(p).enter().append("circle").attr("cx",(function(t,e){let n=b+C/2;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=C/2+b+r.width+b+C/2}return n})).attr("cy",N).attr("r",(function(t,e){if(!g.includes(e))return n.showPoint[e]?n.pointSize[e]:0})).style("fill",(function(t,e){if(!g.includes(e))return n.pointColor[e]}))):n.GetGraphType()===eo.Bar&&F.selectAll("markers").data(p.filter(((t,e)=>!g.includes(e)))).enter().append("rect").attr("x",(function(t,e){let n=b;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=C+b+r.width+b}return n})).attr("y",N-A/2).attr("width",C).attr("height",A).style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}));let t=F.selectAll("labels").data(p).enter().append("text").attr("x",(function(t,e){let n=b+C+b;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=r.width+b+C+b}return n})).attr("y",L).text((function(t,e){return g.includes(e)?"":t})).style("alignment-baseline","middle").attr("class","tracker-legend-label");n.GetGraphType()===eo.Line?t.style("fill",(function(t,e){if(!g.includes(e))return n.lineColor[e]})):n.GetGraphType()===eo.Bar&&t.style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}))}}function Du(t,e,n){if(!e||!n)return;if(!n.title)return;let r=Oo(n.title,"tracker-title"),i=t.graphArea.append("text").text(n.title).attr("id","title").attr("transform","translate("+e.dataAreaSize.width/2+","+r.height/2+")").attr("height",r.height).attr("class","tracker-title");t.title=i,Po(t.svg,0,r.height),Po(t.graphArea,0,r.height),$o(t.dataArea,0,r.height)}function ku(t,e,n){let r=ne(t),i=e.svg,a=parseFloat(i.attr("width")),l=parseFloat(i.attr("height"));i.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${a} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(a*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}function Cu(t,e){let n={},r=ne(t).append("svg").attr("id","svg").attr("width",e.dataAreaSize.width+e.margin.left+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.top+e.margin.bottom);n.svg=r;let i=r.append("g").attr("id","graphArea").attr("transform","translate("+e.margin.left+","+e.margin.top+")").attr("width",e.dataAreaSize.width+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.bottom);n.graphArea=i;let a=i.append("g").attr("id","dataArea").attr("width",e.dataAreaSize.width).attr("height",e.dataAreaSize.height);return n.dataArea=a,n}function Mu(t,e,n){if(!e||!n)return;let r=Cu(t,e);Du(r,e,n),mu(r,e,n);let i=[],a=[],l=e.datasets.getXDatasetIds();for(let t=0;t<n.yAxisLocation.length;t++){if(l.includes(t))continue;let e=n.yAxisLocation[t];"left"===e.toLowerCase()?i.push(t):"right"===e.toLocaleLowerCase()&&a.push(t)}let o=vu(r,e,n,"left",i);if("string"==typeof o)return o;if(r.leftYAxis&&r.leftYScale)for(let t of i){let i=e.datasets.getDatasetById(t);i.getQuery().usedAsXDataset||(xu(r,e,n,i,"left"),Au(r,e,n,i,"left"))}let u=vu(r,e,n,"right",a);if("string"==typeof u)return u;if(r.rightYAxis&&r.rightYScale)for(let t of a){let i=e.datasets.getDatasetById(t);i.getQuery().usedAsXDataset||(xu(r,e,n,i,"right"),Au(r,e,n,i,"right"))}n.showLegend&&bu(r,e,n),ku(t,r,e)}function Tu(t,e,n){if(!e||!n)return;let r=Cu(t,e);Du(r,e,n),mu(r,e,n);let i=[],a=[],l=e.datasets.getXDatasetIds();for(let t=0;t<n.yAxisLocation.length;t++){if(l.includes(t))continue;let e=n.yAxisLocation[t];"left"===e.toLowerCase()?i.push(t):"right"===e.toLocaleLowerCase()&&a.push(t)}let o=vu(r,e,n,"left",i);if("string"==typeof o)return o;let u=i.length+a.length,s=0;if(r.leftYAxis&&r.leftYScale)for(let t of i){let i=e.datasets.getDatasetById(t);i.getQuery().usedAsXDataset||(wu(r,e,n,i,"left",s,u),s++)}let f=vu(r,e,n,"right",a);if("string"==typeof f)return f;if(r.rightYAxis&&r.rightYScale)for(let t of a){let i=e.datasets.getDatasetById(t);i.getQuery().usedAsXDataset||(wu(r,e,n,i,"right",s,u),s++)}n.showLegend&&bu(r,e,n),ku(t,r,e)}function _u(t){switch(t=t.trim().toLowerCase()){case"true":case"1":case"on":case"yes":return!0;case"false":case"0":case"off":case"no":return!1}return null}function Eu(t){return"tag"===t.toLowerCase()||"text"===t.toLowerCase()||"frontmatter"===t.toLowerCase()||"wiki"===t.toLowerCase()||"wiki.link"===t.toLowerCase()||"wiki.display"===t.toLowerCase()||"dvfield"===t.toLowerCase()||"table"===t.toLowerCase()||"filemeta"===t.toLowerCase()||"task"===t.toLowerCase()||"task.all"===t.toLowerCase()||"task.done"===t.toLowerCase()||"task.notdone"===t.toLowerCase()}function Fu(t){return"left"===t||"right"===t||"none"===t}function Su(t){return!0}function Bu(t){const e="::::::tracker::::::";let n=t.split("\\,").join(e).split(",");for(let t=0;t<n.length;t++)n[t]=n[t].split(e).join(",");return n}function Nu(t,e,n,r,i){let a=[],l="",o=0;for(;n>a.length;)a.push(r);if(null==e);else if("object"==typeof e&&null!==e){if(Array.isArray(e)){if(e.length>n)return l="Too many inputs for parameter '"+t+"'",l;if(0===e.length)return l="Empty array not allowd for "+t,l;for(let n=0;n<a.length;n++)if(n<e.length){let i=e[n],u=null;if(n>0&&(u=e[n-1].trim()),"string"==typeof i){if(i=i.trim(),""!==i){l="Invalid inputs for "+t;break}a[n]=null!==u?u:r}else{if("boolean"!=typeof i){l="Invalid inputs for "+t;break}a[n]=i,o++}}else{let t=e[e.length-1];a[n]=o>0?t:r}}}else if("string"==typeof e){let i=Bu(e);if(i.length>1){if(i.length>n)return l="Too many inputs for parameter '"+t+"'",l;for(let e=0;e<a.length;e++)if(e<i.length){let n=i[e].trim(),u=null;if(e>0&&(u=_u(i[e-1].trim())),""===n)a[e]=null!==u?u:r;else{let r=_u(n);if(null===r){l="Invalid inputs for "+t;break}a[e]=r,o++}}else{let t=_u(i[i.length-1].trim());a[e]=o>0&&null!==t?t:r}}else if(""===e);else{let n=_u(e);if(null!==n){a[0]=n,o++;for(let t=1;t<a.length;t++)a[t]=n}else l="Invalid inputs for "+t}}else if("boolean"==typeof e){a[0]=e,o++;for(let t=1;t<a.length;t++)a[t]=e}else l="Invalid inputs for "+t;return i||0!==o||(l="No valid input for "+t),""!==l?l:a}function Iu(t,e,n,r,i){let a=[],l="",o=0;for(;n>a.length;)a.push(r);if(null==e);else if("object"==typeof e&&null!==e){if(Array.isArray(e)){if(e.length>n)return l="Too many inputs for parameter '"+t+"'",l;if(0===e.length)return l="Empty array not allowd for "+t,l;for(let n=0;n<a.length;n++)if(n<e.length){let i=e[n],u=null;if(n>0&&(u=e[n-1].trim()),"string"==typeof i){if(i=i.trim(),""!==i){l="Invalid inputs for "+t;break}a[n]=null!==u?u:r}else{if("number"!=typeof i){l="Invalid inputs for "+t;break}a[n]=i,o++}}else{let t=e[e.length-1];a[n]=o>0?t:r}}}else if("string"==typeof e){let i=Bu(e);if(i.length>1){if(i.length>n)return l="Too many inputs for parameter '"+t+"'",l;for(let n=0;n<a.length;n++)if(n<i.length){let e=i[n].trim(),u=null;if(n>0&&(u=Vo(i[n-1].trim()).value),""===e)null!==u&&Number.isNumber(u)?a[n]=u:a[n]=r;else{let r=Vo(e).value;if(null===r){l="Invalid inputs for "+t;break}a[n]=r,o++}}else{let t=Vo(i[e.length-1].trim()).value;a[n]=o>0&&null!==t?t:r}}else if(""===e);else{let n=Vo(e).value;if(null!==n){a[0]=n,o++;for(let t=1;t<a.length;t++)a[t]=n}else l="Invalid inputs for "+t}}else if("number"==typeof e)if(Number.isNumber(e)){a[0]=e,o++;for(let t=1;t<a.length;t++)a[t]=e}else l="Invalid inputs for "+t;else l="Invalid inputs for "+t;return i||0!==o||(l="No valid input for "+t),""!==l?l:a}function Lu(t,e){return"string"==typeof t?Lo(t):"number"==typeof t?t.toString():e}function Vu(t,e,n,r,i,a){let l=[],o="",u=0;for(;n>l.length;)l.push(r);if(null==e);else if("object"==typeof e&&null!==e){if(Array.isArray(e)){if(e.length>n)return o="Too many inputs for parameter '"+t+"'",o;if(0===e.length)return o="Empty array not allowd for "+t,o;for(let n=0;n<l.length;n++)if(n<e.length){let a=e[n],s=null;if(n>0&&(s=e[n-1].trim()),"string"!=typeof a){o="Invalid inputs for "+t;break}if(a=a.trim(),""===a)l[n]=null!==s?s:r;else if(i){if(!i(a)){o="Invalid inputs for "+t;break}l[n]=a,u++}else l[n]=a,u++}else{let t=e[e.length-1].trim();l[n]=u>0?t:r}}}else if("string"==typeof e){let a=Bu(e);if(a.length>1){if(a.length>n)return o="Too many inputs for parameter '"+t+"'",o;for(let e=0;e<l.length;e++)if(e<a.length){let n=a[e].trim(),s=null;if(e>0&&(s=a[e-1].trim()),""===n)l[e]=null!==s?s:r;else if(i){if(!i(n)){o="Invalid inputs for "+t;break}l[e]=n,u++}else l[e]=n,u++}else{let t=a[a.length-1].trim();l[e]=u>0?t:r}}else if(""===e);else if(i)if(i(e)){l[0]=e,u++;for(let t=1;t<l.length;t++)l[t]=e}else o="Invalid inputs for "+t;else{l[0]=e,u++;for(let t=1;t<l.length;t++)l[t]=e}}else if("number"==typeof e){let n=e.toString();if(i)if(i(n)){l[0]=n,u++;for(let t=1;t<l.length;t++)l[t]=n}else o="Invalid inputs for "+t;else{l[0]=n,u++;for(let t=1;t<l.length;t++)l[t]=n}}else o="Invalid inputs for "+t;if(a||0!==u||(o="No valid input for "+t),""!==o)return o;for(let t=0;t<l.length;t++)l[t]=Lo(l[t]);return l}function Ou(t,e){let n=[];if(null==e)return n;if("object"==typeof e){if(Array.isArray(e))for(let r of e)if("string"==typeof r){let e=parseFloat(r);if(!Number.isNumber(e)){return`Parameter '${t}' accepts only numbers`}n.push(e)}}else if("string"==typeof e){let r=Bu(e);if(r.length>1)for(let e of r){let r=parseFloat(e.trim());if(Number.isNaN(r)){return`Parameter '${t}' accepts only numbers`}n.push(r)}else{if(""===e){return`Empty ${t} is not allowed.`}{let r=parseFloat(e);if(!Number.isNumber(r)){return`Parameter '${t}' accepts only numbers`}n.push(r)}}}else{if("number"!=typeof e){return`Invalid ${t}`}n.push(e)}return n}function Pu(t,e){let n=[];if(null==e)return n;if("object"==typeof e){if(Array.isArray(e))for(let t of e)"string"==typeof t&&n.push(t.trim())}else{if("string"!=typeof e){return`Invalid ${t}`}{let r=Bu(e);if(r.length>1)for(let t of r)n.push(t.trim());else{if(""===e){return`Empty ${t} is not allowed.`}n.push(e)}}}for(let t=0;t<n.length;t++)n[t]=Lo(n[t]);return n}function $u(t,e){t&&(e.title=Lu(null==t?void 0:t.title,e.title),e.xAxisLabel=Lu(null==t?void 0:t.xAxisLabel,e.xAxisLabel),e.xAxisColor=Lu(null==t?void 0:t.xAxisColor,e.xAxisColor),e.xAxisLabelColor=Lu(null==t?void 0:t.xAxisLabelColor,e.xAxisLabelColor),"boolean"==typeof t.allowInspectData&&(e.allowInspectData=t.allowInspectData),"boolean"==typeof t.showLegend&&(e.showLegend=t.showLegend),"string"==typeof t.legendPosition?e.legendPosition=t.legendPosition:e.legendPosition="bottom","string"==typeof t.legendOrientation?e.legendOrientation=t.legendOrientation:"top"===e.legendPosition||"bottom"===e.legendPosition?e.legendOrientation="horizontal":"left"===e.legendPosition||"right"===e.legendPosition?e.legendOrientation="vertical":e.legendOrientation="horizontal",e.legendBgColor=Lu(null==t?void 0:t.legendBgColor,e.legendBgColor),e.legendBorderColor=Lu(null==t?void 0:t.legendBorderColor,e.legendBorderColor));let n=Vu("yAxisLabel",null==t?void 0:t.yAxisLabel,2,"Value",null,!0);if("string"==typeof n)return n;if(n.length>2)return"yAxisLabel accepts not more than two values for left and right y-axes";e.yAxisLabel=n;let r=Vu("yAxisColor",null==t?void 0:t.yAxisColor,2,"",Su,!0);if("string"==typeof r)return r;if(r.length>2)return"yAxisColor accepts not more than two values for left and right y-axes";e.yAxisColor=r;let i=Vu("yAxisLabelColor",null==t?void 0:t.yAxisLabelColor,2,"",Su,!0);if("string"==typeof i)return i;if(i.length>2)return"yAxisLabelColor accepts not more than two values for left and right y-axes";e.yAxisLabelColor=i;let a=Vu("yAxisUnit",null==t?void 0:t.yAxisUnit,2,"",null,!0);if("string"==typeof a)return a;if(a.length>2)return"yAxisUnit accepts not more than two values for left and right y-axes";e.yAxisUnit=a,e.xAxisTickInterval=Lu(null==t?void 0:t.xAxisTickInterval,e.xAxisTickInterval);let l=Vu("yAxisTickInterval",null==t?void 0:t.yAxisTickInterval,2,null,null,!0);if("string"==typeof l)return l;if(l.length>2)return"yAxisTickInterval accepts not more than two values for left and right y-axes";e.yAxisTickInterval=l,e.xAxisTickLabelFormat=Lu(null==t?void 0:t.xAxisTickLabelFormat,e.xAxisTickLabelFormat);let o=Vu("yAxisTickLabelFormat",null==t?void 0:t.yAxisTickLabelFormat,2,null,null,!0);if("string"==typeof o)return o;if(o.length>2)return"yAxisTickLabelFormat accepts not more than two values for left and right y-axes";e.yAxisTickLabelFormat=o;let u=Iu("yMin",null==t?void 0:t.yMin,2,null,!0);if("string"==typeof u)return u;if(u.length>2)return"yMin accepts not more than two values for left and right y-axes";e.yMin=u;let s=Iu("yMax",null==t?void 0:t.yMax,2,null,!0);if("string"==typeof s)return s;if(s.length>2)return"yMax accepts not more than two values for left and right y-axes";e.yMax=s;let f=Nu("reverseYAxis",null==t?void 0:t.reverseYAxis,2,!1,!0);return"string"==typeof f?f:f.length>2?"reverseYAxis accepts not more than two values for left and right y-axes":void(e.reverseYAxis=f)}function Yu(t){let e=[];if(null!==t){const n=Object.keys(t);for(let t of n)e.push(t.toString())}return e}function zu(t,e){return Mo(Co(t.basename,e.dateFormatPrefix,e.dateFormatSuffix),e.dateFormat)}function Ru(t,e,n){let r=window.moment(""),i=t.frontmatter;if(i&&No(i,e.getTarget())){let t=No(i,e.getTarget());"string"==typeof t&&(t=Co(t,n.dateFormatPrefix,n.dateFormatSuffix),r=Mo(t,n.dateFormat))}return r}function Uu(t,e,n){let r,i=window.moment(""),a=new RegExp(e,"gm");for(;r=a.exec(t);)if(void 0!==r.groups&&void 0!==r.groups.value){let t=r.groups.value.trim();if(t=Co(t,n.dateFormatPrefix,n.dateFormatSuffix),i=Mo(t,n.dateFormat),i.isValid())return i}return i}function Hu(t,e,n){window.moment("");let r=e.getTarget();return e.getParentTarget()&&(r=e.getParentTarget()),Uu(t,"(^|\\s)#"+r+"(\\/[\\w-]+)*(:(?<value>[\\d\\.\\/-]*)[a-zA-Z]*)?([\\.!,\\?;~-]*)?(\\s|$)",n)}function Xu(t,e,n){return window.moment(""),Uu(t,e.getTarget(),n)}function Wu(t,e,n){window.moment("");let r=e.getTarget();return e.getParentTarget()&&(r=e.getParentTarget()),r=r.replace("-","[\\s\\-]"),Uu(t,"(^| |\\t)\\*{0,2}"+r+"\\*{0,2}(::[ |\\t]*(?<value>[\\d\\.\\/\\-\\w,@; \\t:]*))(\\r\\?\\n|\\r|$)",n)}function ju(e,n,r){let i=window.moment("");if(e&&e instanceof t.TFile){let t=n.getTarget();if("cDate"===t){i=So(e.stat.ctime,r.dateFormat)}else if("mDate"===t){i=So(e.stat.mtime,r.dateFormat)}else"name"===t&&(i=zu(e,r))}return i}function qu(t,e,n){window.moment("");let r=e.getType(),i=e.getTarget();return i=r===to.Task?"\\[[\\sx]\\]\\s"+i:r===to.TaskDone?"\\[x\\]\\s"+i:r===to.TaskNotDone?"\\[\\s\\]\\s"+i:"\\[[\\sx]\\]\\s"+i,Uu(t,i,n)}function Gu(t,e,n,r){if(t.has(e)){t.get(e).push({query:n,value:r})}else{let i=new Array;i.push({query:n,value:r}),t.set(e,i)}}function Qu(t,e,n,r,i,a){let l,o=new RegExp(e,"gmu"),u=0,s=!1;for(;l=o.exec(t);)if(a.ignoreAttachedValue[n.getId()])u+=a.constValue[n.getId()],s=!0,n.addNumTargets();else if(void 0!==l.groups&&void 0!==l.groups.value){let t=l.groups.value.trim().split(n.getSeparator());if(!t)continue;if(1===t.length){let e=Vo(t[0].trim(),a.textValueMap);null!==e.value&&(e.type===no.Time?(u=e.value,s=!0,n.valueType=no.Time,n.addNumTargets()):a.ignoreZeroValue[n.getId()]&&0===e.value||(u+=e.value,s=!0,n.addNumTargets()))}else if(t.length>n.getAccessor()&&n.getAccessor()>=0){let e=Vo(t[n.getAccessor()].trim(),a.textValueMap);null!==e.value&&(e.type===no.Time?(u=e.value,s=!0,n.valueType=no.Time,n.addNumTargets()):(u+=e.value,s=!0,n.addNumTargets()))}}else u+=a.constValue[n.getId()],s=!0,n.addNumTargets();if(s){return Gu(r,i.get(a.xDataset[n.getId()]),n,u),!0}return!1}function Zu(e,n,r,i,a,l){if(e&&e instanceof t.TFile){let t=r.getTarget(),o=l.get(i.xDataset[r.getId()]);if("cDate"===t){let t=e.stat.ctime;return r.valueType=no.Date,r.addNumTargets(),Gu(a,o,r,t),!0}if("mDate"===t){let t=e.stat.mtime;return r.valueType=no.Date,r.addNumTargets(),Gu(a,o,r,t),!0}if("size"===t){let t=e.stat.size;return r.addNumTargets(),Gu(a,o,r,t),!0}if("numWords"===t){return Gu(a,o,r,function(t){t=Yo(t);var e=new RegExp(["(?:[0-9]+(?:(?:,|\\.)[0-9]+)*|[\\-"+/A-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source+"])+",/[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u4E00-\u9FD5]{1}/.source].join("|"),"g");return(t.match(e)||[]).length}(n)),!0}if("numChars"===t){let t=n.length;return r.addNumTargets(),Gu(a,o,r,t),!0}if("numSentences"===t){let t=function(t){return(((t=Yo(t))||"").match(/[^.。!?\s][^.。!?]*(?:[.!?](?!['"“”「」『』]?\s|$)[^.。!?]*)*[.。!?]?['"”」』]?(?=\s||$)/gm)||[]).length}(n);return r.addNumTargets(),Gu(a,o,r,t),!0}if("name"===t){let t=0,n=!1,l=Vo(e.basename,i.textValueMap);null!==l.value&&(l.type===no.Time?(t=l.value,n=!0,r.valueType=no.Time,r.addNumTargets()):i.ignoreZeroValue[r.getId()]&&0===l.value||(t+=l.value,n=!0,r.addNumTargets()));let u=null;if(n&&(u=t),null!==u)return Gu(a,o,r,u),!0}}return!1}const Ku={folder:"/",dateFormat:"YYYY-MM-DD"};class Ju extends t.PluginSettingTab{constructor(t,e){super(t,e),this.plugin=e}display(){let{containerEl:n}=this;n.empty(),new t.Setting(n).setName("Default folder location").setDesc("Files in this folder will be parsed and used as input data of the tracker plugin.\nYou can also override it using 'folder' argument in the tracker codeblock.").addText((t=>t.setPlaceholder("Folder Path").setValue(this.plugin.settings.folder).onChange((t=>e(this,void 0,void 0,(function*(){this.plugin.settings.folder=t,yield this.plugin.saveSettings()})))))),new t.Setting(n).setName("Default date format").setDesc("This format is used to parse the date in your diary title.\nYou can also override it using 'dateFormat' argument in the tracker codeblock.").addText((t=>t.setPlaceholder("YYYY-MM-DD").setValue(this.plugin.settings.dateFormat).onChange((t=>e(this,void 0,void 0,(function*(){this.plugin.settings.dateFormat=t,yield this.plugin.saveSettings()}))))))}}class ts extends t.Plugin{onload(){return e(this,void 0,void 0,(function*(){console.log("loading obsidian-tracker plugin"),yield this.loadSettings(),this.addSettingTab(new Ju(this.app,this)),this.registerMarkdownCodeBlockProcessor("tracker",this.postprocessor.bind(this)),this.addCommand({id:"add-line-chart-tracker",name:"Add Line Chart Tracker",callback:()=>this.addCodeBlock(eo.Line)}),this.addCommand({id:"add-bar-chart-tracker",name:"Add Bar Chart Tracker",callback:()=>this.addCodeBlock(eo.Bar)}),this.addCommand({id:"add-summary-tracker",name:"Add Summary Tracker",callback:()=>this.addCodeBlock(eo.Summary)})}))}loadSettings(){return e(this,void 0,void 0,(function*(){this.settings=Object.assign({},Ku,yield this.loadData())}))}saveSettings(){return e(this,void 0,void 0,(function*(){yield this.saveData(this.settings)}))}renderErrorMessage(t,e,n){!function(t,e){ne(t).select("#svg").remove(),ne(t).append("div").text(e).style("background-color","white").style("margin-bottom","20px").style("padding","10px").style("color","red")}(e,t),n.appendChild(e)}onunload(){console.log("unloading obsidian-tracker plugin")}getFilesInFolder(e,n=!0){let r=[];for(let i of e.children)i instanceof t.TFile?"md"===i.extension&&r.push(i):i instanceof t.TFolder&&n&&(r=r.concat(this.getFilesInFolder(i)));return r}getFiles(n,r,i=!0){return e(this,void 0,void 0,(function*(){if(!n)return;let e=r.folder,i=r.specifiedFilesOnly,a=r.file,l=r.fileContainsLinkedFiles,o=r.fileMultiplierAfterLink;if(!i){let r=this.app.vault.getAbstractFileByPath(t.normalizePath(e));if(r&&r instanceof t.TFolder){let t=this.getFilesInFolder(r);for(let e of t)n.push(e)}}for(let e of a){let r=e;r.endsWith(".md")||(r+=".md"),r=t.normalizePath(r);let i=this.app.vault.getAbstractFileByPath(r);i&&i instanceof t.TFile&&n.push(i)}let u=1,s=!0;""===o?s=!1:/^[0-9]+$/.test(o)?(u=parseFloat(o),s=!1):/\?<value>/.test(o)||(s=!1);for(let e of l){e.endsWith(".md")||(e+=".md");let i=this.app.vault.getAbstractFileByPath(t.normalizePath(e));if(i&&i instanceof t.TFile){let a=this.app.metadataCache.getFileCache(i),l=(yield this.app.vault.adapter.read(i.path)).split(/\r\n|[\n\v\f\r\x85\u2028\u2029]/);if(!(null==a?void 0:a.links))continue;for(let i of a.links){if(!i)continue;let a=this.app.metadataCache.getFirstLinkpathDest(i.link,e);if(a&&a instanceof t.TFile){if(s){let t=i.position.end.line;if(t>=0&&t<l.length){let e=l[t].split(i.original);if(2===e.length){let t,n=e[1].trim(),i=new RegExp(o,"gm");for(;t=i.exec(n);)if(void 0!==t.groups&&void 0!==t.groups.value){let e=Vo(t.groups.value.trim(),r.textValueMap);if(null!==e.value){u=e.value;break}}}}}for(let t=0;t<u;t++)n.push(a)}}}}}))}postprocessor(n,r,i){return e(this,void 0,void 0,(function*(){const i=document.createElement("div");let a=n.trim(),l=this.app.vault.getConfig("tabSize"),o=Array(l).fill(" ").join("");a=a.replace(/\t/gm,o);let u=function(e,n){let r;try{r=t.parseYaml(e)}catch(t){let e="Error parsing YAML";return console.log(t),e}if(!r)return"Error parsing YAML";let i=Yu(r),a="";if(!i.includes("searchTarget"))return"Parameter 'searchTarget' not found in YAML";let l=[];if("object"==typeof r.searchTarget&&null!==r.searchTarget){if(Array.isArray(r.searchTarget))for(let t of r.searchTarget)if("string"==typeof t){if(""===t){a="Empty search target is not allowed.";break}l.push(t)}}else if("string"==typeof r.searchTarget){let t=Bu(r.searchTarget);if(t.length>1)for(let e of t){if(e=e.trim(),""===e){a="Empty search target is not allowed.";break}l.push(e)}else""===r.searchTarget?a="Empty search target is not allowed.":l.push(r.searchTarget)}else a="Invalid search target (searchTarget)";for(let t=0;t<l.length;t++)l[t]=Lo(l[t]);if(""!==a)return a;let o=l.length;if(!i.includes("searchType"))return"Parameter 'searchType' not found in YAML";let u=[],s=Vu("searchType",r.searchType,o,"",Eu,!1);if("string"==typeof s)return s;for(let t of s)switch(t.toLowerCase()){case"tag":u.push(to.Tag);break;case"frontmatter":u.push(to.Frontmatter);break;case"wiki":u.push(to.Wiki);break;case"wiki.link":u.push(to.WikiLink);break;case"wiki.display":u.push(to.WikiDisplay);break;case"text":u.push(to.Text);break;case"dvfield":u.push(to.dvField);break;case"table":u.push(to.Table);break;case"filemeta":u.push(to.FileMeta);break;case"task":case"task.all":u.push(to.Task);break;case"task.done":u.push(to.TaskDone);break;case"task.notdone":u.push(to.TaskNotDone)}if(u.includes(to.Table)&&u.filter((t=>t!==to.Table)).length>0)return"searchType 'table' doestn't work with other types for now";let f=[],c=Vu("separator",r.separator,o,"",null,!0);if("string"==typeof c)return c;f=c.map((t=>"comma"===t||"\\,"===t?",":t));let h=Iu("xDataset",r.xDataset,o,-1,!0);if("string"==typeof h)return h;let d=h.map((t=>t<0||t>=o?-1:t)),g=[];for(let t=0;t<l.length;t++){let e=new io(g.length,u[t],l[t]);e.setSeparator(f[t]),d.includes(t)&&(e.usedAsXDataset=!0),g.push(e)}let p=new oo(g),y=Yu(p),m=["searchType","searchTarget","separator"],v=[],x=[],A=[],w=[],b=[],D=[],k=[];for(let t of i)/^line[0-9]*$/.test(t)&&(v.push(t),m.push(t)),/^bar[0-9]*$/.test(t)&&(x.push(t),m.push(t)),/^pie[0-9]*$/.test(t)&&(A.push(t),m.push(t)),/^summary[0-9]*$/.test(t)&&(w.push(t),m.push(t)),/^bullet[0-9]*$/.test(t)&&(k.push(t),m.push(t)),/^month[0-9]*$/.test(t)&&(b.push(t),m.push(t)),/^heatmap[0-9]*$/.test(t)&&(D.push(t),m.push(t));let C=[];for(let t of i)if(/^dataset[0-9]*$/.test(t)){let e=-1,n=t.replace("dataset","");if(e=""===n?0:parseFloat(n),g.some((t=>t.getId()===e)))return a="Duplicated dataset id for key '"+t+"'",a;C.push(t),m.push(t)}for(let t of i)if(!y.includes(t)&&!m.includes(t))return a="'"+t+"' is not an available key",a;if(0===v.length+x.length+A.length+w.length+k.length+b.length+D.length)return"No output parameter provided, please place line, bar, pie, month, bullet, or summary.";p.folder=Lu(null==r?void 0:r.folder,n.settings.folder),""===p.folder.trim()&&(p.folder=n.settings.folder);let M=n.app.vault.getAbstractFileByPath(t.normalizePath(p.folder));if(!(M&&M instanceof t.TFolder))return"Folder '"+p.folder+"' doesn't exist";if("string"==typeof r.file){let t=Pu("file",r.file);if("string"==typeof t)return t;p.file=t}if("boolean"==typeof r.specifiedFilesOnly&&(p.specifiedFilesOnly=r.specifiedFilesOnly),"string"==typeof r.fileContainsLinkedFiles){let t=Pu("fileContainsLinkedFiles",r.fileContainsLinkedFiles);if("string"==typeof t)return t;p.fileContainsLinkedFiles=t}p.fileMultiplierAfterLink=Lu(null==r?void 0:r.fileMultiplierAfterLink,p.fileMultiplierAfterLink);const T=r.dateFormat;if("string"==typeof r.dateFormat?""===r.dateFormat?p.dateFormat=n.settings.dateFormat:p.dateFormat=T:p.dateFormat=n.settings.dateFormat,p.dateFormatPrefix=Lu(null==r?void 0:r.dateFormatPrefix,p.dateFormatPrefix),p.dateFormatSuffix=Lu(null==r?void 0:r.dateFormatSuffix,p.dateFormatSuffix),"string"==typeof r.startDate){if(/^([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)m$/.test(r.startDate))return"'m' for 'minute' is too small for parameter startDate, please use 'd' for 'day' or 'M' for month";let t=Co(r.startDate,p.dateFormatPrefix,p.dateFormatSuffix),e=null,n=!1;if(e=Eo(t,p.dateFormat),e?n=!0:(e=Mo(t,p.dateFormat),e.isValid()&&(n=!0)),!n||null===e)return"Invalid startDate, the format of startDate may not match your dateFormat "+p.dateFormat;p.startDate=e}if("string"==typeof r.endDate){if(/^([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)m$/.test(r.endDate))return"'m' for 'minute' is too small for parameter endDate, please use 'd' for 'day' or 'M' for month";let t=Co(r.endDate,p.dateFormatPrefix,p.dateFormatSuffix),e=null,n=!1;if(e=Eo(t,p.dateFormat),e?n=!0:(e=Mo(t,p.dateFormat),e.isValid()&&(n=!0)),!n||null===e)return"Invalid endDate, the format of endDate may not match your dateFormat "+p.dateFormat;p.endDate=e}if(null!==p.startDate&&p.startDate.isValid()&&null!==p.endDate&&p.endDate.isValid()&&p.endDate<p.startDate)return"Invalid date range (startDate larger than endDate)";p.xDataset=d;let _=Vu("datasetName",r.datasetName,o,"untitled",null,!0);if("string"==typeof _)return _;let E=0;for(let t=0;t<_.length;t++)p.xDataset.includes(t)||"untitled"===_[t]&&(_[t]="untitled"+E.toString(),E++);if(new Set(_).size!==_.length)return"Not enough dataset names or duplicated names";p.datasetName=_;let F=Iu("constValue",r.constValue,o,1,!0);if("string"==typeof F)return F;p.constValue=F;let S=Nu("ignoreAttachedValue",r.ignoreAttachedValue,o,!1,!0);if("string"==typeof S)return S;p.ignoreAttachedValue=S;let B=Nu("ignoreZeroValue",r.ignoreZeroValue,o,!1,!0);if("string"==typeof B)return B;p.ignoreZeroValue=B;let N=Nu("accum",r.accum,o,!1,!0);if("string"==typeof N)return N;p.accum=N;let I=Iu("penalty",r.penalty,o,null,!0);if("string"==typeof I)return I;p.penalty=I;let L=Iu("valueShift",r.valueShift,o,0,!0);if("string"==typeof L)return L;p.valueShift=L;let V=Iu("shiftOnlyValueLargerThan",r.shiftOnlyValueLargerThan,o,null,!0);if("string"==typeof V)return V;if(p.shiftOnlyValueLargerThan=V,void 0!==r.textValueMap){let t=Yu(r.textValueMap);for(let e of t){let t=e.trim();p.textValueMap[t]=r.textValueMap[t]}}if("number"==typeof r.fixedScale&&(p.fixedScale=r.fixedScale),"boolean"==typeof r.fitPanelWidth&&(p.fitPanelWidth=r.fitPanelWidth),"string"==typeof r.aspectRatio){let t=/([0-9]*):([0-9]*)/,e=r.aspectRatio.match(t);e.shift(),e=e.map((t=>parseInt(t,10))),2==e.length&&(p.aspectRatio=new xo(e[0],e[1]),p.dataAreaSize=p.aspectRatio.recalculateSize(p.dataAreaSize))}let O=Iu("margin",r.margin,4,10,!0);if("string"==typeof O)return O;if(O.length>4)return"margin accepts not more than four values for top, right, bottom, and left margins.";p.margin=new Ao(O[0],O[1],O[2],O[3]);for(let t of C){let e=new uo,n=r[t],i=Yu(e),l=Yu(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;let o=-1,u=t.replace("dataset","");o=""===u?0:parseFloat(u),e.id=o,e.name=Lu(null==n?void 0:n.name,e.name);let s=Pu("xData",null==n?void 0:n.xData);if("string"==typeof s)return s;e.xData=s;let f=e.xData.length,c=Pu("yData",null==n?void 0:n.yData);if("string"==typeof c)return c;if(e.yData=c,e.yData.length!==f)return"Number of elements in xData and yData not matched";p.customDataset.push(e)}for(let t of v){let e=new fo,n=r[t],i=Yu(e),l=Yu(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;let u=$u(n,e);if("string"==typeof u)return u;let s=Vu("lineColor",null==n?void 0:n.lineColor,o,"",Su,!0);if("string"==typeof s)return s;e.lineColor=s;let f=Iu("lineWidth",null==n?void 0:n.lineWidth,o,1.5,!0);if("string"==typeof f)return f;e.lineWidth=f;let c=Nu("showLine",null==n?void 0:n.showLine,o,!0,!0);if("string"==typeof c)return c;e.showLine=c;let h=Nu("showPoint",null==n?void 0:n.showPoint,o,!0,!0);if("string"==typeof h)return h;e.showPoint=h;let d=Vu("pointColor",null==n?void 0:n.pointColor,o,"#69b3a2",Su,!0);if("string"==typeof d)return d;e.pointColor=d;let g=Vu("pointBorderColor",null==n?void 0:n.pointBorderColor,o,"#69b3a2",Su,!0);if("string"==typeof g)return g;e.pointBorderColor=g;let y=Iu("pointBorderWidth",null==n?void 0:n.pointBorderWidth,o,0,!0);if("string"==typeof y)return y;e.pointBorderWidth=y;let m=Iu("pointSize",null==n?void 0:n.pointSize,o,3,!0);if("string"==typeof m)return m;e.pointSize=m;let v=Nu("fillGap",null==n?void 0:n.fillGap,o,!1,!0);if("string"==typeof v)return v;e.fillGap=v;let x=Vu("yAxisLocation",null==n?void 0:n.yAxisLocation,o,"left",Fu,!0);if("string"==typeof x)return x;e.yAxisLocation=x,p.line.push(e)}for(let t of x){let e=new co,n=r[t],i=Yu(e),l=Yu(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;let u=$u(n,e);if("string"==typeof u)return u;let s=Vu("barColor",null==n?void 0:n.barColor,o,"",Su,!0);if("string"==typeof s)return s;e.barColor=s;let f=Vu("yAxisLocation",null==n?void 0:n.yAxisLocation,o,"left",Fu,!0);if("string"==typeof f)return f;e.yAxisLocation=f,p.bar.push(e)}for(let t of A){let e=new ho,n=r[t],i=Yu(e),l=Yu(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;e.title=Lu(null==n?void 0:n.title,e.title);let o=Pu("data",null==n?void 0:n.data);if("string"==typeof o)return o;e.data=o;let u=e.data.length,s=Vu("dataColor",null==n?void 0:n.dataColor,u,null,Su,!0);if("string"==typeof s)return s;e.dataColor=s;let f=Vu("dataName",null==n?void 0:n.dataName,u,"",null,!0);if("string"==typeof f)return f;e.dataName=f;let c=Vu("label",null==n?void 0:n.label,u,"",null,!0);if("string"==typeof c)return c;e.label=c,"number"==typeof(null==n?void 0:n.hideLabelLessThan)&&(e.hideLabelLessThan=n.hideLabelLessThan);let h=Vu("extLabel",null==n?void 0:n.extLabel,u,"",null,!0);if("string"==typeof h)return h;e.extLabel=h,"boolean"==typeof(null==n?void 0:n.showExtLabelOnlyIfNoLabel)&&(e.showExtLabelOnlyIfNoLabel=n.showExtLabelOnlyIfNoLabel),"number"==typeof(null==n?void 0:n.ratioInnerRadius)&&(e.ratioInnerRadius=n.ratioInnerRadius),"boolean"==typeof(null==n?void 0:n.showLegend)&&(e.showLegend=n.showLegend),e.legendPosition=Lu(null==n?void 0:n.legendPosition,"right");let d="horizontal";d="top"===e.legendPosition||"bottom"===e.legendPosition?"horizontal":"left"===e.legendPosition||"right"===e.legendPosition?"vertical":"horizontal",e.legendOrientation=Lu(null==n?void 0:n.legendOrientation,d),e.legendBgColor=Lu(null==n?void 0:n.legendBgColor,e.legendBgColor),e.legendBorderColor=Lu(null==n?void 0:n.legendBorderColor,e.legendBorderColor),p.pie.push(e)}for(let t of w){let e=new go,n=r[t],i=Yu(e),l=Yu(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;e.template=Lu(null==n?void 0:n.template,e.template),e.style=Lu(null==n?void 0:n.style,e.style),p.summary.push(e)}for(let t of b){let e=new po,n=r[t],i=Yu(e),l=Yu(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;e.mode=Lu(null==n?void 0:n.mode,e.mode);let o=Ou("dataset",null==n?void 0:n.dataset);if("string"==typeof o)return o;if(0===o.length)for(let t of g)o.push(t.getId());e.dataset=o;let u=e.dataset.length;e.startWeekOn=Lu(null==n?void 0:n.startWeekOn,e.startWeekOn),"boolean"==typeof(null==n?void 0:n.showCircle)&&(e.showCircle=n.showCircle);let s=Ou("threshold",null==n?void 0:n.threshold);if("string"==typeof s)return s;if(e.threshold=s,0===e.threshold.length)for(let t=0;t<u;t++)e.threshold.push(0);if(e.threshold.length!==e.dataset.length)return"The number of inputs of threshold and dataset not matched";let f=Ou("yMin",null==n?void 0:n.yMin);if("string"==typeof f)return f;if(e.yMin=f,0===e.yMin.length)for(let t=0;t<u;t++)e.yMin.push(null);if(e.yMin.length!==e.dataset.length)return"The number of inputs of yMin and dataset not matched";let c=Ou("yMax",null==n?void 0:n.yMax);if("string"==typeof c)return c;if(e.yMax=c,0===e.yMax.length)for(let t=0;t<u;t++)e.yMax.push(null);if(e.yMax.length!==e.dataset.length)return"The number of inputs of yMin and dataset not matched";e.color=Lu(null==n?void 0:n.color,e.color),"boolean"==typeof(null==n?void 0:n.dimNotInMonth)&&(e.dimNotInMonth=n.dimNotInMonth),"boolean"==typeof(null==n?void 0:n.showStreak)&&(e.showStreak=n.showStreak),"boolean"==typeof(null==n?void 0:n.showTodayRing)&&(e.showTodayRing=n.showTodayRing),"boolean"==typeof(null==n?void 0:n.showSelectedValue)&&(e.showSelectedValue=n.showSelectedValue),"boolean"==typeof(null==n?void 0:n.showSelectedRing)&&(e.showSelectedRing=n.showSelectedRing),e.circleColor=Lu(null==n?void 0:n.circleColor,e.circleColor),"boolean"==typeof(null==n?void 0:n.circleColorByValue)&&(e.circleColorByValue=n.circleColorByValue),e.headerYearColor=Lu(null==n?void 0:n.headerYearColor,e.headerYearColor),e.headerMonthColor=Lu(null==n?void 0:n.headerMonthColor,e.headerMonthColor),e.dividingLineColor=Lu(null==n?void 0:n.dividingLineColor,e.dividingLineColor),e.todayRingColor=Lu(null==n?void 0:n.todayRingColor,e.todayRingColor),e.selectedRingColor=Lu(null==n?void 0:n.selectedRingColor,e.selectedRingColor),e.initMonth=Lu(null==n?void 0:n.initMonth,e.initMonth),"boolean"==typeof(null==n?void 0:n.showAnnotation)&&(e.showAnnotation=n.showAnnotation);let h=Pu("annotation",null==n?void 0:n.annotation);if("string"==typeof h)return h;if(e.annotation=h,0===e.annotation.length)for(let t=0;t<u;t++)e.annotation.push(null);if(e.annotation.length!==e.dataset.length)return"The number of inputs of annotation and dataset not matched";"boolean"==typeof(null==n?void 0:n.showAnnotationOfAllTargets)&&(e.showAnnotationOfAllTargets=n.showAnnotationOfAllTargets),p.month.push(e)}for(let t of D){let e=new yo,n=r[t],i=Yu(e),l=Yu(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;p.heatmap.push(e)}for(let t of k){let e=new mo,n=r[t],i=Yu(e),l=Yu(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;e.title=Lu(null==n?void 0:n.title,e.title),e.dataset=Lu(null==n?void 0:n.dataset,e.dataset),e.orientation=Lu(null==n?void 0:n.orientation,e.orientation);let o=Ou("range",null==n?void 0:n.range);if("string"==typeof o)return o;let u=o;if(1===u.length){if(u[0]<0)return a="Negative range value is not allowed",a}else{if(!(u.length>1))return a="Empty range is not allowed",a;{let t=u[0];if(t<0)return a="Negative range value is not allowed",a;for(let e=1;e<u.length;e++)if(u[e]<=t)return a="Values in parameter 'range' should be monotonically increasing",a}}e.range=u;let s=u.length,f=Vu("rangeColor",null==n?void 0:n.rangeColor,s,"",Su,!0);if("string"==typeof f)return f;e.rangeColor=f,e.value=Lu(null==n?void 0:n.value,e.value),e.valueUnit=Lu(null==n?void 0:n.valueUnit,e.valueUnit),e.valueColor=Lu(null==n?void 0:n.valueColor,e.valueColor),"boolean"==typeof(null==n?void 0:n.showMarker)&&(e.showMarker=n.showMarker),"number"==typeof(null==n?void 0:n.markerValue)&&(e.markerValue=n.markerValue),e.markerColor=Lu(null==n?void 0:n.markerColor,e.markerColor),p.bullet.push(e)}return p}(a,this);if("string"==typeof u)return this.renderErrorMessage(u,i,r);let s=u,f=[];try{yield this.getFiles(f,s)}catch(t){return this.renderErrorMessage(t.message,i,r)}if(0===f.length)return this.renderErrorMessage("No markdown files found in folder",i,r);let c=new Map,h=new Do;h.fileTotal=f.length;const d=f.map((t=>e(this,void 0,void 0,(function*(){let n=null;s.queries.some((t=>{let e=t.getType();return t.getTarget(),e===to.Frontmatter||e===to.Tag||e===to.Wiki||e===to.WikiLink||e===to.WikiDisplay}))&&(n=this.app.metadataCache.getFileCache(t));let r=null;s.queries.some((t=>{let e=t.getType(),n=t.getTarget();return e===to.Tag||e===to.Text||e===to.dvField||e===to.Task||e===to.TaskDone||e===to.TaskNotDone||e===to.FileMeta&&("numWords"===n||"numChars"===n||"numSentences"===n)}))&&(r=yield this.app.vault.adapter.read(t.path));let i=new Map,a=!1;for(let e of s.xDataset)if(!i.has(e)){let l=window.moment("");if(-1===e)l=zu(t,s);else{let i=s.queries[e];switch(i.getType()){case to.Frontmatter:l=Ru(n,i,s);break;case to.Tag:l=Hu(r,i,s);break;case to.Text:l=Xu(r,i,s);break;case to.dvField:l=Wu(r,i,s);break;case to.FileMeta:l=ju(t,i,s);break;case to.Task:case to.TaskDone:case to.TaskNotDone:l=qu(r,i,s)}}l.isValid()?(null!==s.startDate&&l<s.startDate&&(a=!0,h.fileOutOfDateRange++),null!==s.endDate&&l>s.endDate&&(a=!0,h.fileOutOfDateRange++)):(a=!0,h.fileNotInFormat++),a||(h.gotAnyValidXValue||(h.gotAnyValidXValue=!0),i.set(e,Fo(l,s.dateFormat)),h.fileAvailable++,1==h.fileAvailable?(h.minDate=l.clone(),h.maxDate=l.clone()):(l<h.minDate&&(h.minDate=l.clone()),l>h.maxDate&&(h.maxDate=l.clone())))}if(a)return;const l=s.queries.filter((t=>t.getType()!==to.Table&&!t.usedAsXDataset)).map((a=>e(this,void 0,void 0,(function*(){if(n&&a.getType()===to.Tag){let t=function(t,e,n,r,i){let a=t.frontmatter,l=[];if(a&&a.tags){let t=0,o=!1;if(Array.isArray(a.tags))l=l.concat(a.tags);else if("string"==typeof a.tags){let t=a.tags.split(e.getSeparator(!0));for(let e of t){let t=e.trim();""!==t&&l.push(t)}}for(let a of l){if(a===e.getTarget())t+=n.constValue[e.getId()],o=!0,e.addNumTargets();else{if(!a.startsWith(e.getTarget()+"/"))continue;t+=n.constValue[e.getId()],o=!0,e.addNumTargets()}let l=null;return o&&(l=t),Gu(r,i.get(n.xDataset[e.getId()]),e,l),!0}}return!1}(n,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(n&&a.getType()===to.Frontmatter&&"tags"!==a.getTarget()){let t=function(t,e,n,r,i){let a=t.frontmatter;if(a){let t=No(a,e.getTarget());if(t){let a=Vo(t,n.textValueMap);if(null===a.value&&("true"!==t&&"false"!==t||(a.type=no.Number,a.value="true"===t?1:0)),null!==a.value)return a.type===no.Time&&(e.valueType=no.Time),e.addNumTargets(),Gu(r,i.get(n.xDataset[e.getId()]),e,a.value),!0}else if(e.getParentTarget()&&No(a,e.getParentTarget())){let t=No(a,e.getParentTarget()),l=null;if(Array.isArray(t)?l=t.map((t=>t.toString())):"string"==typeof t&&(l=t.split(e.getSeparator())),l&&l.length>e.getAccessor()&&e.getAccessor()>=0){let t=Vo(l[e.getAccessor()].trim(),n.textValueMap);if(null!==t.value)return t.type===no.Time&&(e.valueType=no.Time),e.addNumTargets(),Gu(r,i.get(n.xDataset[e.getId()]),e,t.value),!0}}}return!1}(n,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(n&&(a.getType()===to.Wiki||a.getType()===to.WikiLink||a.getType()===to.WikiDisplay)){let t=function(t,e,n,r,i){let a=t.links;if(!a)return!1;let l=e.getTarget(),o=e.getType(),u="",s=l;for(let t of a){if(!t)continue;let e="";o===to.Wiki?e=t.displayText?t.displayText:t.link:o===to.WikiLink?e=t.link:o===to.WikiDisplay?t.displayText&&(e=t.displayText):e=t.displayText?t.displayText:t.link,e=e.trim(),u+=e+"\n"}return Qu(u,s,e,r,i,n)}(n,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(r&&a.getType()===to.Tag){let t=function(t,e,n,r,i){let a=e.getTarget();return e.getParentTarget()&&(a=e.getParentTarget()),a.length>1&&a.startsWith("#")&&(a=a.substring(1)),Qu(t,"(^|\\s)#"+a+"(\\/[\\w-]+)*(:(?<value>[\\d\\.\\/-]*)[a-zA-Z]*)?([\\.!,\\?;~-]*)?(\\s|$)",e,r,i,n)}(r,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(r&&a.getType()===to.Text){let t=function(t,e,n,r,i){return Qu(t,e.getTarget(),e,r,i,n)}(r,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(a.getType()===to.FileMeta){let e=Zu(t,r,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=e)}if(r&&a.getType()===to.dvField){let t=function(t,e,n,r,i){let a=e.getTarget();return e.getParentTarget()&&(a=e.getParentTarget()),a=a.replace("-","[\\s\\-]"),Qu(t,String.raw`(^| |\t|\|)(\[|\()?\*{0,2}`+a+String.raw`\*{0,2}(::[ |\t]*(?<value>[\p{ExtPict}\d\.\/\-\w,@; \t:`+"\\w$€£¥¢₹₨₱₩฿₫₪α-ωΑ-Ω©®℗™℠一-鿿㐀-䶿 、-〿"+String.raw`]*)(\]|\))?)`,e,r,i,n)}(r,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(r&&(a.getType()===to.Task||a.getType()===to.TaskDone||a.getType()===to.TaskNotDone)){let t=function(t,e,n,r,i){let a=e.getType(),l=e.getTarget();return l=a===to.Task?"\\[[\\sx]\\]\\s"+l:a===to.TaskDone?"\\[x\\]\\s"+l:a===to.TaskNotDone?"\\[\\s\\]\\s"+l:"\\[[\\sx]\\]\\s"+l,Qu(t,l,e,r,i,n)}(r,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}}))));yield Promise.all(l)}))));if(yield Promise.all(d),yield this.collectDataFromTable(c,s,h),h.errorMessage)return this.renderErrorMessage(h.errorMessage,i,r);let g="";if(h.minDate.isValid()&&h.maxDate.isValid()&&0!==h.fileAvailable&&h.gotAnyValidXValue||(g="No valid date as X value found in notes",h.fileOutOfDateRange>0&&(g+=`\n${h.fileOutOfDateRange} files are out of the date range.`),h.fileNotInFormat&&(g+=`\n${h.fileNotInFormat} files are not in the right format.`)),null===s.startDate&&null===s.endDate?(s.startDate=h.minDate.clone(),s.endDate=h.maxDate.clone()):null!==s.startDate&&null===s.endDate?s.startDate<h.maxDate?s.endDate=h.maxDate.clone():g="Invalid date range":null!==s.endDate&&null===s.startDate?s.endDate>h.minDate?s.startDate=h.minDate.clone():g="Invalid date range":(s.startDate<h.minDate&&s.endDate<h.minDate||s.startDate>h.maxDate&&s.endDate>h.maxDate)&&(g="Invalid date range"),g)return this.renderErrorMessage(g,i,r);if(!h.gotAnyValidYValue)return this.renderErrorMessage("No valid Y value found in notes",i,r);let p=new lo(s.startDate,s.endDate);for(let t of s.queries){let e=p.createDataset(t,s);e.addNumTargets(t.getNumTargets());for(let n=s.startDate.clone();n<=s.endDate;n.add(1,"days"))if(c.has(Fo(n,s.dateFormat))){let r=c.get(Fo(n,s.dateFormat)).filter((function(e){return e.query.equalTo(t)}));if(r.length>0){let t=null;for(let e=0;e<r.length;e++){let n=r[e].value;Number.isNumber(n)&&!Number.isNaN(n)&&(null===t?t=n:t+=n)}null!==t&&e.setValue(n,t)}}}s.datasets=p;let y=function(t,e){for(let t of e.datasets){if(t.getQuery().usedAsXDataset)continue;let n=e.valueShift[t.getId()];null!==n&&0!==n&&t.shift(n,e.shiftOnlyValueLargerThan[t.getId()]),null!==e.penalty[t.getId()]&&t.setPenalty(e.penalty[t.getId()]),e.accum[t.getId()]&&t.accumulateValues()}for(let n of e.line){let r=Mu(t,e,n);if("string"==typeof r)return r}for(let n of e.bar){let r=Tu(t,e,n);if("string"==typeof r)return r}for(let n of e.pie){let r=ru(t,e,n);if("string"==typeof r)return r}for(let n of e.summary){let r=iu(t,e,n);if("string"==typeof r)return r}for(let n of e.bullet){let r=yu(t,e,n);if("string"==typeof r)return r}for(let n of e.month){let r=gu(t,e,n);if("string"==typeof r)return r}for(let t of e.heatmap){let t=pu(0,e);if("string"==typeof t)return t}}(i,s);if("string"==typeof y)return this.renderErrorMessage(y,i,r);r.appendChild(i)}))}collectDataFromTable(n,r,i){return e(this,void 0,void 0,(function*(){let e=r.queries.filter((t=>t.getType()===to.Table)),a=[],l=!1;for(let n of e){let e=n.getParentTarget(),r=this.app.vault.getAbstractFileByPath(t.normalizePath(e+".md"));if(!(r&&r instanceof t.TFile)){l=!0;break}let i=n.getAccessor(),o=n.usedAsXDataset,u=a.find((t=>t.filePath===e&&t.tableIndex===i));if(u)o?u.xDataset=n:u.yDatasets.push(n);else{let t=new bo(e,i);o?t.xDataset=n:t.yDatasets.push(n),a.push(t)}}if(l)i.errorMessage="File containing tables not found";else for(let e of a){let a=e.xDataset;if(!a)continue;let l=e.yDatasets,o=a.getParentTarget(),u=a.getAccessor(),s="";o+=".md";let f=this.app.vault.getAbstractFileByPath(t.normalizePath(o));if(!(f&&f instanceof t.TFile))continue;{i.fileAvailable++;let t,e=yield this.app.vault.adapter.read(f.path),n=new RegExp("((\\r?\\n){2}|^)([^\\r\\n]*\\|[^\\r\\n]*(\\r?\\n)?)+(?=(\\r?\\n){2}|$)","gm"),r=0;for(;t=n.exec(e);){if(r===u){s=t[0];break}r++}}let c=s.split(/\r?\n/);c=c.filter((t=>""!==t));let h=0,d=0;if(c.length>=2){let t=c.shift().trim();t=Io(t,"|"),h=t.split("|").length;let e=c.shift().trim();e=Io(e,"|");let n=e.split("|");for(let t of n)if(!t.includes("-"))break;d=c.length}if(0==d)continue;let g=a.getAccessor(1);if(g>=h)continue;let p=[];for(let t of c){let e=Io(t.trim(),"|").split("|");if(g<e.length){let t=Mo(e[g].trim(),r.dateFormat);t.isValid()?(p.push(t),i.minDate.isValid()||i.maxDate.isValid()?(t<i.minDate&&(i.minDate=t.clone()),t>i.maxDate&&(i.maxDate=t.clone())):(i.minDate=t.clone(),i.maxDate=t.clone())):p.push(null)}else p.push(null)}if(p.every((t=>null===t)))return void(i.errorMessage="No valid date as X value found in table");i.gotAnyValidXValue||(i.gotAnyValidXValue=!0);for(let t of l){let e=t.getAccessor(1);if(e>=h)continue;let a=0;for(let l of c){let o=Io(l.trim(),"|").split("|");if(e<o.length){let l=o[e].trim().split(t.getSeparator());if(!l)continue;if(1===l.length){let e=Vo(l[0],r.textValueMap);if(null!==e.value){e.type===no.Time&&(t.valueType=no.Time);let l=e.value;a<p.length&&p[a]&&(i.gotAnyValidYValue||(i.gotAnyValidYValue=!0),Gu(n,Fo(p[a],r.dateFormat),t,l))}}else if(l.length>t.getAccessor(2)&&t.getAccessor(2)>=0){let e=null,o=Vo(l[t.getAccessor(2)].trim(),r.textValueMap);null!==o.value&&(o.type===no.Time&&(t.valueType=no.Time),e=o.value,a<p.length&&p[a]&&(i.gotAnyValidYValue||(i.gotAnyValidYValue=!0),Gu(n,Fo(p[a],r.dateFormat),t,e)))}}a++}}}}))}getEditor(){return this.app.workspace.getActiveViewOfType(t.MarkdownView).editor}addCodeBlock(e){if(!(this.app.workspace.activeLeaf.view instanceof t.MarkdownView))return;let n="";switch(e){case eo.Line:n='``` tracker\nsearchType: tag\nsearchTarget: tagName\nfolder: /\nstartDate:\nendDate:\nline:\n title: "Line Chart"\n xAxisLabel: Date\n yAxisLabel: Value\n```';break;case eo.Bar:n='``` tracker\nsearchType: tag\nsearchTarget: tagName\nfolder: /\nstartDate:\nendDate:\nbar:\n title: "Bar Chart"\n xAxisLabel: Date\n yAxisLabel: Value\n```';break;case eo.Summary:n='``` tracker\nsearchType: tag\nsearchTarget: tagName\nfolder: /\nstartDate:\nendDate:\nsummary:\n template: "Average value of tagName is {{average}}"\n style: "color:white;"\n```'}""!==n&&this.insertToNextLine(n)}insertToNextLine(t){let e=this.getEditor();if(e){let n=e.getCursor(),r=n.line,i=e.getLine(r);return n.ch=i.length,e.setSelection(n),e.replaceSelection("\n"+t),!0}return!1}}module.exports=ts;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9kZXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvaW50ZXJubWFwL3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdGlja3MuanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21heC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWluLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9xdWlja3NlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVkaWFuLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9xdWFudGlsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcmFuZ2UuanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3N1bS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9pZGVudGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9heGlzLmpzIiwibm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9kaXNwYXRjaC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2UuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3IuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RvckFsbC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RBbGwuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9hcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL21hdGNoZXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGQuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGRyZW4uanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VudGVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdGEuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hdHRyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvd2luZG93LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3N0eWxlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3Byb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9odG1sLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2xvd2VyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luc2VydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yZW1vdmUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCJub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2V4aXQuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vam9pbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9tZXJnZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9vcmRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGVzLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lYWNoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2FwcGVuZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kYXR1bS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvbWF0aC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvbGFiLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb25zdGFudC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29sb3IuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JnYi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXMuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL251bWJlckFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvZGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdmFsdWUuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vZGVjb21wb3NlLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vcGFyc2UuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbGFiLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvdGltZW91dC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NjaGVkdWxlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbnRlcnBvbGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHIuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9hdHRyVHdlZW4uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kZWxheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2R1cmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGUuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL21lcmdlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL29uLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90ZXh0VHdlZW4uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9yZW1vdmUuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZWFzZVZhcnlpbmcuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lbmQuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL3RyYW5zaXRpb24uanMiLCJub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvY3ViaWMuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbnRlcnJ1cHQuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW50ZXJydXB0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXREZWNpbWFsLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZXhwb25lbnQuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRTcGVjaWZpZXIuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFR5cGVzLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9sb2NhbGUuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0R3JvdXAuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXROdW1lcmFscy5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFRyaW0uanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL251bWJlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY29udGludW91cy5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY29uc3RhbnQuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpY2tGb3JtYXQuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25QcmVmaXguanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25Sb3VuZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvbkZpeGVkLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9saW5lYXIuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW50ZXJ2YWwuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWlsbGlzZWNvbmQuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZHVyYXRpb24uanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvc2Vjb25kLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbnV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9ob3VyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2RheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy93ZWVrLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21vbnRoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3llYXIuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdGlja3MuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGltZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbmljZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3JhbXAuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvU3BlY3RyYWwuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9tYXRoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wYXRoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmMuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9kZXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9pZGVudGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9kMy16b29tL3NyYy90cmFuc2Zvcm0uanMiLCJzcmMvZGF0YS50cyIsInNyYy9oZWxwZXIudHMiLCJub2RlX21vZHVsZXMvanNlcC9kaXN0L2pzZXAuanMiLCJzcmMvZXhwci50cyIsIm5vZGVfbW9kdWxlcy9zcHJpbnRmLWpzL3NyYy9zcHJpbnRmLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy92YXJpYW5jZS5qcyIsInNyYy9waWUudHMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BpZS5qcyIsInNyYy9zdW1tYXJ5LnRzIiwic3JjL21vbnRoLnRzIiwic3JjL2hlYXRtYXAudHMiLCJzcmMvYnVsbGV0LnRzIiwic3JjL3JlbmRlcmluZy50cyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZXh0ZW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvcG9pbnRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NvdXJjZUV2ZW50LmpzIiwic3JjL3BhcnNpbmcudHMiLCJzcmMvY29sbGVjdGluZy50cyIsInNyYy9zZXR0aW5ncy50cyIsInNyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xyXG4gICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgZG9uZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcclxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XHJcbiAgICAgICAgdmFyIGRpc3Bvc2U7XHJcbiAgICAgICAgaWYgKGFzeW5jKSB7XHJcbiAgICAgICAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xyXG4gICAgICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChhc3luYykge1xyXG4gICAgICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuXHJcbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xyXG4gICAgZnVuY3Rpb24gZmFpbChlKSB7XHJcbiAgICAgICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xyXG4gICAgICAgIGVudi5oYXNFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgICAgIHdoaWxlIChlbnYuc3RhY2subGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciByZWMgPSBlbnYuc3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVjLmRpc3Bvc2UgJiYgcmVjLmRpc3Bvc2UuY2FsbChyZWMudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlYy5hc3luYykgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgZmFpbChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBfX2V4dGVuZHM6IF9fZXh0ZW5kcyxcclxuICAgIF9fYXNzaWduOiBfX2Fzc2lnbixcclxuICAgIF9fcmVzdDogX19yZXN0LFxyXG4gICAgX19kZWNvcmF0ZTogX19kZWNvcmF0ZSxcclxuICAgIF9fcGFyYW06IF9fcGFyYW0sXHJcbiAgICBfX21ldGFkYXRhOiBfX21ldGFkYXRhLFxyXG4gICAgX19hd2FpdGVyOiBfX2F3YWl0ZXIsXHJcbiAgICBfX2dlbmVyYXRvcjogX19nZW5lcmF0b3IsXHJcbiAgICBfX2NyZWF0ZUJpbmRpbmc6IF9fY3JlYXRlQmluZGluZyxcclxuICAgIF9fZXhwb3J0U3RhcjogX19leHBvcnRTdGFyLFxyXG4gICAgX192YWx1ZXM6IF9fdmFsdWVzLFxyXG4gICAgX19yZWFkOiBfX3JlYWQsXHJcbiAgICBfX3NwcmVhZDogX19zcHJlYWQsXHJcbiAgICBfX3NwcmVhZEFycmF5czogX19zcHJlYWRBcnJheXMsXHJcbiAgICBfX3NwcmVhZEFycmF5OiBfX3NwcmVhZEFycmF5LFxyXG4gICAgX19hd2FpdDogX19hd2FpdCxcclxuICAgIF9fYXN5bmNHZW5lcmF0b3I6IF9fYXN5bmNHZW5lcmF0b3IsXHJcbiAgICBfX2FzeW5jRGVsZWdhdG9yOiBfX2FzeW5jRGVsZWdhdG9yLFxyXG4gICAgX19hc3luY1ZhbHVlczogX19hc3luY1ZhbHVlcyxcclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0OiBfX21ha2VUZW1wbGF0ZU9iamVjdCxcclxuICAgIF9faW1wb3J0U3RhcjogX19pbXBvcnRTdGFyLFxyXG4gICAgX19pbXBvcnREZWZhdWx0OiBfX2ltcG9ydERlZmF1bHQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldDogX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRJbjogX19jbGFzc1ByaXZhdGVGaWVsZEluLFxyXG4gICAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2U6IF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxyXG4gICAgX19kaXNwb3NlUmVzb3VyY2VzOiBfX2Rpc3Bvc2VSZXNvdXJjZXMsXHJcbn07XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhID09IG51bGwgfHwgYiA9PSBudWxsID8gTmFOIDogYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXNjZW5kaW5nKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT0gbnVsbCB8fCBiID09IG51bGwgPyBOYU5cbiAgICA6IGIgPCBhID8gLTFcbiAgICA6IGIgPiBhID8gMVxuICAgIDogYiA+PSBhID8gMFxuICAgIDogTmFOO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBkZXNjZW5kaW5nIGZyb20gXCIuL2Rlc2NlbmRpbmcuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmlzZWN0b3IoZikge1xuICBsZXQgY29tcGFyZTEsIGNvbXBhcmUyLCBkZWx0YTtcblxuICAvLyBJZiBhbiBhY2Nlc3NvciBpcyBzcGVjaWZpZWQsIHByb21vdGUgaXQgdG8gYSBjb21wYXJhdG9yLiBJbiB0aGlzIGNhc2Ugd2VcbiAgLy8gY2FuIHRlc3Qgd2hldGhlciB0aGUgc2VhcmNoIHZhbHVlIGlzIChzZWxmLSkgY29tcGFyYWJsZS4gV2UgY2Fu4oCZdCBkbyB0aGlzXG4gIC8vIGZvciBhIGNvbXBhcmF0b3IgKGV4Y2VwdCBmb3Igc3BlY2lmaWMsIGtub3duIGNvbXBhcmF0b3JzKSBiZWNhdXNlIHdlIGNhbuKAmXRcbiAgLy8gdGVsbCBpZiB0aGUgY29tcGFyYXRvciBpcyBzeW1tZXRyaWMsIGFuZCBhbiBhc3ltbWV0cmljIGNvbXBhcmF0b3IgY2Fu4oCZdCBiZVxuICAvLyB1c2VkIHRvIHRlc3Qgd2hldGhlciBhIHNpbmdsZSB2YWx1ZSBpcyBjb21wYXJhYmxlLlxuICBpZiAoZi5sZW5ndGggIT09IDIpIHtcbiAgICBjb21wYXJlMSA9IGFzY2VuZGluZztcbiAgICBjb21wYXJlMiA9IChkLCB4KSA9PiBhc2NlbmRpbmcoZihkKSwgeCk7XG4gICAgZGVsdGEgPSAoZCwgeCkgPT4gZihkKSAtIHg7XG4gIH0gZWxzZSB7XG4gICAgY29tcGFyZTEgPSBmID09PSBhc2NlbmRpbmcgfHwgZiA9PT0gZGVzY2VuZGluZyA/IGYgOiB6ZXJvO1xuICAgIGNvbXBhcmUyID0gZjtcbiAgICBkZWx0YSA9IGY7XG4gIH1cblxuICBmdW5jdGlvbiBsZWZ0KGEsIHgsIGxvID0gMCwgaGkgPSBhLmxlbmd0aCkge1xuICAgIGlmIChsbyA8IGhpKSB7XG4gICAgICBpZiAoY29tcGFyZTEoeCwgeCkgIT09IDApIHJldHVybiBoaTtcbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZTIoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH0gd2hpbGUgKGxvIDwgaGkpO1xuICAgIH1cbiAgICByZXR1cm4gbG87XG4gIH1cblxuICBmdW5jdGlvbiByaWdodChhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBpZiAobG8gPCBoaSkge1xuICAgICAgaWYgKGNvbXBhcmUxKHgsIHgpICE9PSAwKSByZXR1cm4gaGk7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IG1pZCA9IChsbyArIGhpKSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUyKGFbbWlkXSwgeCkgPD0gMCkgbG8gPSBtaWQgKyAxO1xuICAgICAgICBlbHNlIGhpID0gbWlkO1xuICAgICAgfSB3aGlsZSAobG8gPCBoaSk7XG4gICAgfVxuICAgIHJldHVybiBsbztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbnRlcihhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBjb25zdCBpID0gbGVmdChhLCB4LCBsbywgaGkgLSAxKTtcbiAgICByZXR1cm4gaSA+IGxvICYmIGRlbHRhKGFbaSAtIDFdLCB4KSA+IC1kZWx0YShhW2ldLCB4KSA/IGkgLSAxIDogaTtcbiAgfVxuXG4gIHJldHVybiB7bGVmdCwgY2VudGVyLCByaWdodH07XG59XG5cbmZ1bmN0aW9uIHplcm8oKSB7XG4gIHJldHVybiAwO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBiaXNlY3RvciBmcm9tIFwiLi9iaXNlY3Rvci5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxuY29uc3QgYXNjZW5kaW5nQmlzZWN0ID0gYmlzZWN0b3IoYXNjZW5kaW5nKTtcbmV4cG9ydCBjb25zdCBiaXNlY3RSaWdodCA9IGFzY2VuZGluZ0Jpc2VjdC5yaWdodDtcbmV4cG9ydCBjb25zdCBiaXNlY3RMZWZ0ID0gYXNjZW5kaW5nQmlzZWN0LmxlZnQ7XG5leHBvcnQgY29uc3QgYmlzZWN0Q2VudGVyID0gYmlzZWN0b3IobnVtYmVyKS5jZW50ZXI7XG5leHBvcnQgZGVmYXVsdCBiaXNlY3RSaWdodDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gIHJldHVybiB4ID09PSBudWxsID8gTmFOIDogK3g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogbnVtYmVycyh2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgKHZhbHVlID0gK3ZhbHVlKSA+PSB2YWx1ZSkge1xuICAgICAgICB5aWVsZCB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGNsYXNzIEludGVybk1hcCBleHRlbmRzIE1hcCB7XG4gIGNvbnN0cnVjdG9yKGVudHJpZXMsIGtleSA9IGtleW9mKSB7XG4gICAgc3VwZXIoKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7X2ludGVybjoge3ZhbHVlOiBuZXcgTWFwKCl9LCBfa2V5OiB7dmFsdWU6IGtleX19KTtcbiAgICBpZiAoZW50cmllcyAhPSBudWxsKSBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyaWVzKSB0aGlzLnNldChrZXksIHZhbHVlKTtcbiAgfVxuICBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIHN1cGVyLmdldChpbnRlcm5fZ2V0KHRoaXMsIGtleSkpO1xuICB9XG4gIGhhcyhrZXkpIHtcbiAgICByZXR1cm4gc3VwZXIuaGFzKGludGVybl9nZXQodGhpcywga2V5KSk7XG4gIH1cbiAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gc3VwZXIuc2V0KGludGVybl9zZXQodGhpcywga2V5KSwgdmFsdWUpO1xuICB9XG4gIGRlbGV0ZShrZXkpIHtcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlKGludGVybl9kZWxldGUodGhpcywga2V5KSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludGVyblNldCBleHRlbmRzIFNldCB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlcywga2V5ID0ga2V5b2YpIHtcbiAgICBzdXBlcigpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtfaW50ZXJuOiB7dmFsdWU6IG5ldyBNYXAoKX0sIF9rZXk6IHt2YWx1ZToga2V5fX0pO1xuICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHRoaXMuYWRkKHZhbHVlKTtcbiAgfVxuICBoYXModmFsdWUpIHtcbiAgICByZXR1cm4gc3VwZXIuaGFzKGludGVybl9nZXQodGhpcywgdmFsdWUpKTtcbiAgfVxuICBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gc3VwZXIuYWRkKGludGVybl9zZXQodGhpcywgdmFsdWUpKTtcbiAgfVxuICBkZWxldGUodmFsdWUpIHtcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlKGludGVybl9kZWxldGUodGhpcywgdmFsdWUpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnRlcm5fZ2V0KHtfaW50ZXJuLCBfa2V5fSwgdmFsdWUpIHtcbiAgY29uc3Qga2V5ID0gX2tleSh2YWx1ZSk7XG4gIHJldHVybiBfaW50ZXJuLmhhcyhrZXkpID8gX2ludGVybi5nZXQoa2V5KSA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbnRlcm5fc2V0KHtfaW50ZXJuLCBfa2V5fSwgdmFsdWUpIHtcbiAgY29uc3Qga2V5ID0gX2tleSh2YWx1ZSk7XG4gIGlmIChfaW50ZXJuLmhhcyhrZXkpKSByZXR1cm4gX2ludGVybi5nZXQoa2V5KTtcbiAgX2ludGVybi5zZXQoa2V5LCB2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gaW50ZXJuX2RlbGV0ZSh7X2ludGVybiwgX2tleX0sIHZhbHVlKSB7XG4gIGNvbnN0IGtleSA9IF9rZXkodmFsdWUpO1xuICBpZiAoX2ludGVybi5oYXMoa2V5KSkge1xuICAgIHZhbHVlID0gX2ludGVybi5nZXQoa2V5KTtcbiAgICBfaW50ZXJuLmRlbGV0ZShrZXkpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24ga2V5b2YodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBwZXJtdXRlIGZyb20gXCIuL3Blcm11dGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc29ydCh2YWx1ZXMsIC4uLkYpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZXNbU3ltYm9sLml0ZXJhdG9yXSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWVzIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgdmFsdWVzID0gQXJyYXkuZnJvbSh2YWx1ZXMpO1xuICBsZXQgW2ZdID0gRjtcbiAgaWYgKChmICYmIGYubGVuZ3RoICE9PSAyKSB8fCBGLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBpbmRleCA9IFVpbnQzMkFycmF5LmZyb20odmFsdWVzLCAoZCwgaSkgPT4gaSk7XG4gICAgaWYgKEYubGVuZ3RoID4gMSkge1xuICAgICAgRiA9IEYubWFwKGYgPT4gdmFsdWVzLm1hcChmKSk7XG4gICAgICBpbmRleC5zb3J0KChpLCBqKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBGKSB7XG4gICAgICAgICAgY29uc3QgYyA9IGFzY2VuZGluZ0RlZmluZWQoZltpXSwgZltqXSk7XG4gICAgICAgICAgaWYgKGMpIHJldHVybiBjO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZiA9IHZhbHVlcy5tYXAoZik7XG4gICAgICBpbmRleC5zb3J0KChpLCBqKSA9PiBhc2NlbmRpbmdEZWZpbmVkKGZbaV0sIGZbal0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHBlcm11dGUodmFsdWVzLCBpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlcy5zb3J0KGNvbXBhcmVEZWZpbmVkKGYpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVEZWZpbmVkKGNvbXBhcmUgPSBhc2NlbmRpbmcpIHtcbiAgaWYgKGNvbXBhcmUgPT09IGFzY2VuZGluZykgcmV0dXJuIGFzY2VuZGluZ0RlZmluZWQ7XG4gIGlmICh0eXBlb2YgY29tcGFyZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY29tcGFyZSBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgcmV0dXJuIChhLCBiKSA9PiB7XG4gICAgY29uc3QgeCA9IGNvbXBhcmUoYSwgYik7XG4gICAgaWYgKHggfHwgeCA9PT0gMCkgcmV0dXJuIHg7XG4gICAgcmV0dXJuIChjb21wYXJlKGIsIGIpID09PSAwKSAtIChjb21wYXJlKGEsIGEpID09PSAwKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzY2VuZGluZ0RlZmluZWQoYSwgYikge1xuICByZXR1cm4gKGEgPT0gbnVsbCB8fCAhKGEgPj0gYSkpIC0gKGIgPT0gbnVsbCB8fCAhKGIgPj0gYikpIHx8IChhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMCk7XG59XG4iLCJjb25zdCBlMTAgPSBNYXRoLnNxcnQoNTApLFxuICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcbiAgICBlMiA9IE1hdGguc3FydCgyKTtcblxuZnVuY3Rpb24gdGlja1NwZWMoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIGNvbnN0IHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHBvd2VyID0gTWF0aC5mbG9vcihNYXRoLmxvZzEwKHN0ZXApKSxcbiAgICAgIGVycm9yID0gc3RlcCAvIE1hdGgucG93KDEwLCBwb3dlciksXG4gICAgICBmYWN0b3IgPSBlcnJvciA+PSBlMTAgPyAxMCA6IGVycm9yID49IGU1ID8gNSA6IGVycm9yID49IGUyID8gMiA6IDE7XG4gIGxldCBpMSwgaTIsIGluYztcbiAgaWYgKHBvd2VyIDwgMCkge1xuICAgIGluYyA9IE1hdGgucG93KDEwLCAtcG93ZXIpIC8gZmFjdG9yO1xuICAgIGkxID0gTWF0aC5yb3VuZChzdGFydCAqIGluYyk7XG4gICAgaTIgPSBNYXRoLnJvdW5kKHN0b3AgKiBpbmMpO1xuICAgIGlmIChpMSAvIGluYyA8IHN0YXJ0KSArK2kxO1xuICAgIGlmIChpMiAvIGluYyA+IHN0b3ApIC0taTI7XG4gICAgaW5jID0gLWluYztcbiAgfSBlbHNlIHtcbiAgICBpbmMgPSBNYXRoLnBvdygxMCwgcG93ZXIpICogZmFjdG9yO1xuICAgIGkxID0gTWF0aC5yb3VuZChzdGFydCAvIGluYyk7XG4gICAgaTIgPSBNYXRoLnJvdW5kKHN0b3AgLyBpbmMpO1xuICAgIGlmIChpMSAqIGluYyA8IHN0YXJ0KSArK2kxO1xuICAgIGlmIChpMiAqIGluYyA+IHN0b3ApIC0taTI7XG4gIH1cbiAgaWYgKGkyIDwgaTEgJiYgMC41IDw9IGNvdW50ICYmIGNvdW50IDwgMikgcmV0dXJuIHRpY2tTcGVjKHN0YXJ0LCBzdG9wLCBjb3VudCAqIDIpO1xuICByZXR1cm4gW2kxLCBpMiwgaW5jXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGlja3Moc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICBpZiAoIShjb3VudCA+IDApKSByZXR1cm4gW107XG4gIGlmIChzdGFydCA9PT0gc3RvcCkgcmV0dXJuIFtzdGFydF07XG4gIGNvbnN0IHJldmVyc2UgPSBzdG9wIDwgc3RhcnQsIFtpMSwgaTIsIGluY10gPSByZXZlcnNlID8gdGlja1NwZWMoc3RvcCwgc3RhcnQsIGNvdW50KSA6IHRpY2tTcGVjKHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gIGlmICghKGkyID49IGkxKSkgcmV0dXJuIFtdO1xuICBjb25zdCBuID0gaTIgLSBpMSArIDEsIHRpY2tzID0gbmV3IEFycmF5KG4pO1xuICBpZiAocmV2ZXJzZSkge1xuICAgIGlmIChpbmMgPCAwKSBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkgdGlja3NbaV0gPSAoaTIgLSBpKSAvIC1pbmM7XG4gICAgZWxzZSBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkgdGlja3NbaV0gPSAoaTIgLSBpKSAqIGluYztcbiAgfSBlbHNlIHtcbiAgICBpZiAoaW5jIDwgMCkgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkxICsgaSkgLyAtaW5jO1xuICAgIGVsc2UgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkxICsgaSkgKiBpbmM7XG4gIH1cbiAgcmV0dXJuIHRpY2tzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgc3RvcCA9ICtzdG9wLCBzdGFydCA9ICtzdGFydCwgY291bnQgPSArY291bnQ7XG4gIHJldHVybiB0aWNrU3BlYyhzdGFydCwgc3RvcCwgY291bnQpWzJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICBjb25zdCByZXZlcnNlID0gc3RvcCA8IHN0YXJ0LCBpbmMgPSByZXZlcnNlID8gdGlja0luY3JlbWVudChzdG9wLCBzdGFydCwgY291bnQpIDogdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuICByZXR1cm4gKHJldmVyc2UgPyAtMSA6IDEpICogKGluYyA8IDAgPyAxIC8gLWluYyA6IGluYyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXgodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtYXg7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXg7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtaW4odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtaW47XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWluID4gdmFsdWUgfHwgKG1pbiA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWluID4gdmFsdWUgfHwgKG1pbiA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtaW47XG59XG4iLCJpbXBvcnQge2FzY2VuZGluZ0RlZmluZWQsIGNvbXBhcmVEZWZpbmVkfSBmcm9tIFwiLi9zb3J0LmpzXCI7XG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3VybmVyL3F1aWNrc2VsZWN0XG4vLyBJU0MgbGljZW5zZSwgQ29weXJpZ2h0IDIwMTggVmxhZGltaXIgQWdhZm9ua2luLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVpY2tzZWxlY3QoYXJyYXksIGssIGxlZnQgPSAwLCByaWdodCA9IEluZmluaXR5LCBjb21wYXJlKSB7XG4gIGsgPSBNYXRoLmZsb29yKGspO1xuICBsZWZ0ID0gTWF0aC5mbG9vcihNYXRoLm1heCgwLCBsZWZ0KSk7XG4gIHJpZ2h0ID0gTWF0aC5mbG9vcihNYXRoLm1pbihhcnJheS5sZW5ndGggLSAxLCByaWdodCkpO1xuXG4gIGlmICghKGxlZnQgPD0gayAmJiBrIDw9IHJpZ2h0KSkgcmV0dXJuIGFycmF5O1xuXG4gIGNvbXBhcmUgPSBjb21wYXJlID09PSB1bmRlZmluZWQgPyBhc2NlbmRpbmdEZWZpbmVkIDogY29tcGFyZURlZmluZWQoY29tcGFyZSk7XG5cbiAgd2hpbGUgKHJpZ2h0ID4gbGVmdCkge1xuICAgIGlmIChyaWdodCAtIGxlZnQgPiA2MDApIHtcbiAgICAgIGNvbnN0IG4gPSByaWdodCAtIGxlZnQgKyAxO1xuICAgICAgY29uc3QgbSA9IGsgLSBsZWZ0ICsgMTtcbiAgICAgIGNvbnN0IHogPSBNYXRoLmxvZyhuKTtcbiAgICAgIGNvbnN0IHMgPSAwLjUgKiBNYXRoLmV4cCgyICogeiAvIDMpO1xuICAgICAgY29uc3Qgc2QgPSAwLjUgKiBNYXRoLnNxcnQoeiAqIHMgKiAobiAtIHMpIC8gbikgKiAobSAtIG4gLyAyIDwgMCA/IC0xIDogMSk7XG4gICAgICBjb25zdCBuZXdMZWZ0ID0gTWF0aC5tYXgobGVmdCwgTWF0aC5mbG9vcihrIC0gbSAqIHMgLyBuICsgc2QpKTtcbiAgICAgIGNvbnN0IG5ld1JpZ2h0ID0gTWF0aC5taW4ocmlnaHQsIE1hdGguZmxvb3IoayArIChuIC0gbSkgKiBzIC8gbiArIHNkKSk7XG4gICAgICBxdWlja3NlbGVjdChhcnJheSwgaywgbmV3TGVmdCwgbmV3UmlnaHQsIGNvbXBhcmUpO1xuICAgIH1cblxuICAgIGNvbnN0IHQgPSBhcnJheVtrXTtcbiAgICBsZXQgaSA9IGxlZnQ7XG4gICAgbGV0IGogPSByaWdodDtcblxuICAgIHN3YXAoYXJyYXksIGxlZnQsIGspO1xuICAgIGlmIChjb21wYXJlKGFycmF5W3JpZ2h0XSwgdCkgPiAwKSBzd2FwKGFycmF5LCBsZWZ0LCByaWdodCk7XG5cbiAgICB3aGlsZSAoaSA8IGopIHtcbiAgICAgIHN3YXAoYXJyYXksIGksIGopLCArK2ksIC0tajtcbiAgICAgIHdoaWxlIChjb21wYXJlKGFycmF5W2ldLCB0KSA8IDApICsraTtcbiAgICAgIHdoaWxlIChjb21wYXJlKGFycmF5W2pdLCB0KSA+IDApIC0tajtcbiAgICB9XG5cbiAgICBpZiAoY29tcGFyZShhcnJheVtsZWZ0XSwgdCkgPT09IDApIHN3YXAoYXJyYXksIGxlZnQsIGopO1xuICAgIGVsc2UgKytqLCBzd2FwKGFycmF5LCBqLCByaWdodCk7XG5cbiAgICBpZiAoaiA8PSBrKSBsZWZ0ID0gaiArIDE7XG4gICAgaWYgKGsgPD0gaikgcmlnaHQgPSBqIC0gMTtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gc3dhcChhcnJheSwgaSwgaikge1xuICBjb25zdCB0ID0gYXJyYXlbaV07XG4gIGFycmF5W2ldID0gYXJyYXlbal07XG4gIGFycmF5W2pdID0gdDtcbn1cbiIsImltcG9ydCBxdWFudGlsZSwge3F1YW50aWxlSW5kZXh9IGZyb20gXCIuL3F1YW50aWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lZGlhbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgcmV0dXJuIHF1YW50aWxlKHZhbHVlcywgMC41LCB2YWx1ZW9mKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lZGlhbkluZGV4KHZhbHVlcywgdmFsdWVvZikge1xuICByZXR1cm4gcXVhbnRpbGVJbmRleCh2YWx1ZXMsIDAuNSwgdmFsdWVvZik7XG59XG4iLCJpbXBvcnQgbWF4IGZyb20gXCIuL21heC5qc1wiO1xuaW1wb3J0IG1heEluZGV4IGZyb20gXCIuL21heEluZGV4LmpzXCI7XG5pbXBvcnQgbWluIGZyb20gXCIuL21pbi5qc1wiO1xuaW1wb3J0IG1pbkluZGV4IGZyb20gXCIuL21pbkluZGV4LmpzXCI7XG5pbXBvcnQgcXVpY2tzZWxlY3QgZnJvbSBcIi4vcXVpY2tzZWxlY3QuanNcIjtcbmltcG9ydCBudW1iZXIsIHtudW1iZXJzfSBmcm9tIFwiLi9udW1iZXIuanNcIjtcbmltcG9ydCB7YXNjZW5kaW5nRGVmaW5lZH0gZnJvbSBcIi4vc29ydC5qc1wiO1xuaW1wb3J0IGdyZWF0ZXN0IGZyb20gXCIuL2dyZWF0ZXN0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1YW50aWxlKHZhbHVlcywgcCwgdmFsdWVvZikge1xuICB2YWx1ZXMgPSBGbG9hdDY0QXJyYXkuZnJvbShudW1iZXJzKHZhbHVlcywgdmFsdWVvZikpO1xuICBpZiAoIShuID0gdmFsdWVzLmxlbmd0aCkgfHwgaXNOYU4ocCA9ICtwKSkgcmV0dXJuO1xuICBpZiAocCA8PSAwIHx8IG4gPCAyKSByZXR1cm4gbWluKHZhbHVlcyk7XG4gIGlmIChwID49IDEpIHJldHVybiBtYXgodmFsdWVzKTtcbiAgdmFyIG4sXG4gICAgICBpID0gKG4gLSAxKSAqIHAsXG4gICAgICBpMCA9IE1hdGguZmxvb3IoaSksXG4gICAgICB2YWx1ZTAgPSBtYXgocXVpY2tzZWxlY3QodmFsdWVzLCBpMCkuc3ViYXJyYXkoMCwgaTAgKyAxKSksXG4gICAgICB2YWx1ZTEgPSBtaW4odmFsdWVzLnN1YmFycmF5KGkwICsgMSkpO1xuICByZXR1cm4gdmFsdWUwICsgKHZhbHVlMSAtIHZhbHVlMCkgKiAoaSAtIGkwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1YW50aWxlU29ydGVkKHZhbHVlcywgcCwgdmFsdWVvZiA9IG51bWJlcikge1xuICBpZiAoIShuID0gdmFsdWVzLmxlbmd0aCkgfHwgaXNOYU4ocCA9ICtwKSkgcmV0dXJuO1xuICBpZiAocCA8PSAwIHx8IG4gPCAyKSByZXR1cm4gK3ZhbHVlb2YodmFsdWVzWzBdLCAwLCB2YWx1ZXMpO1xuICBpZiAocCA+PSAxKSByZXR1cm4gK3ZhbHVlb2YodmFsdWVzW24gLSAxXSwgbiAtIDEsIHZhbHVlcyk7XG4gIHZhciBuLFxuICAgICAgaSA9IChuIC0gMSkgKiBwLFxuICAgICAgaTAgPSBNYXRoLmZsb29yKGkpLFxuICAgICAgdmFsdWUwID0gK3ZhbHVlb2YodmFsdWVzW2kwXSwgaTAsIHZhbHVlcyksXG4gICAgICB2YWx1ZTEgPSArdmFsdWVvZih2YWx1ZXNbaTAgKyAxXSwgaTAgKyAxLCB2YWx1ZXMpO1xuICByZXR1cm4gdmFsdWUwICsgKHZhbHVlMSAtIHZhbHVlMCkgKiAoaSAtIGkwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1YW50aWxlSW5kZXgodmFsdWVzLCBwLCB2YWx1ZW9mID0gbnVtYmVyKSB7XG4gIGlmIChpc05hTihwID0gK3ApKSByZXR1cm47XG4gIG51bWJlcnMgPSBGbG9hdDY0QXJyYXkuZnJvbSh2YWx1ZXMsIChfLCBpKSA9PiBudW1iZXIodmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpKTtcbiAgaWYgKHAgPD0gMCkgcmV0dXJuIG1pbkluZGV4KG51bWJlcnMpO1xuICBpZiAocCA+PSAxKSByZXR1cm4gbWF4SW5kZXgobnVtYmVycyk7XG4gIHZhciBudW1iZXJzLFxuICAgICAgaW5kZXggPSBVaW50MzJBcnJheS5mcm9tKHZhbHVlcywgKF8sIGkpID0+IGkpLFxuICAgICAgaiA9IG51bWJlcnMubGVuZ3RoIC0gMSxcbiAgICAgIGkgPSBNYXRoLmZsb29yKGogKiBwKTtcbiAgcXVpY2tzZWxlY3QoaW5kZXgsIGksIDAsIGosIChpLCBqKSA9PiBhc2NlbmRpbmdEZWZpbmVkKG51bWJlcnNbaV0sIG51bWJlcnNbal0pKTtcbiAgaSA9IGdyZWF0ZXN0KGluZGV4LnN1YmFycmF5KDAsIGkgKyAxKSwgKGkpID0+IG51bWJlcnNbaV0pO1xuICByZXR1cm4gaSA+PSAwID8gaSA6IC0xO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgc3RhcnQgPSArc3RhcnQsIHN0b3AgPSArc3RvcCwgc3RlcCA9IChuID0gYXJndW1lbnRzLmxlbmd0aCkgPCAyID8gKHN0b3AgPSBzdGFydCwgc3RhcnQgPSAwLCAxKSA6IG4gPCAzID8gMSA6ICtzdGVwO1xuXG4gIHZhciBpID0gLTEsXG4gICAgICBuID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCkpIHwgMCxcbiAgICAgIHJhbmdlID0gbmV3IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgcmFuZ2VbaV0gPSBzdGFydCArIGkgKiBzdGVwO1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3VtKHZhbHVlcywgdmFsdWVvZikge1xuICBsZXQgc3VtID0gMDtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlID0gK3ZhbHVlKSB7XG4gICAgICAgIHN1bSArPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgPSArdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkge1xuICAgICAgICBzdW0gKz0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4O1xufVxuIiwiaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuL2lkZW50aXR5LmpzXCI7XG5cbnZhciB0b3AgPSAxLFxuICAgIHJpZ2h0ID0gMixcbiAgICBib3R0b20gPSAzLFxuICAgIGxlZnQgPSA0LFxuICAgIGVwc2lsb24gPSAxZS02O1xuXG5mdW5jdGlvbiB0cmFuc2xhdGVYKHgpIHtcbiAgcmV0dXJuIFwidHJhbnNsYXRlKFwiICsgeCArIFwiLDApXCI7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVkoeSkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoMCxcIiArIHkgKyBcIilcIjtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHNjYWxlKSB7XG4gIHJldHVybiBkID0+ICtzY2FsZShkKTtcbn1cblxuZnVuY3Rpb24gY2VudGVyKHNjYWxlLCBvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgc2NhbGUuYmFuZHdpZHRoKCkgLSBvZmZzZXQgKiAyKSAvIDI7XG4gIGlmIChzY2FsZS5yb3VuZCgpKSBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG4gIHJldHVybiBkID0+ICtzY2FsZShkKSArIG9mZnNldDtcbn1cblxuZnVuY3Rpb24gZW50ZXJpbmcoKSB7XG4gIHJldHVybiAhdGhpcy5fX2F4aXM7XG59XG5cbmZ1bmN0aW9uIGF4aXMob3JpZW50LCBzY2FsZSkge1xuICB2YXIgdGlja0FyZ3VtZW50cyA9IFtdLFxuICAgICAgdGlja1ZhbHVlcyA9IG51bGwsXG4gICAgICB0aWNrRm9ybWF0ID0gbnVsbCxcbiAgICAgIHRpY2tTaXplSW5uZXIgPSA2LFxuICAgICAgdGlja1NpemVPdXRlciA9IDYsXG4gICAgICB0aWNrUGFkZGluZyA9IDMsXG4gICAgICBvZmZzZXQgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvID4gMSA/IDAgOiAwLjUsXG4gICAgICBrID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBsZWZ0ID8gLTEgOiAxLFxuICAgICAgeCA9IG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT09IHJpZ2h0ID8gXCJ4XCIgOiBcInlcIixcbiAgICAgIHRyYW5zZm9ybSA9IG9yaWVudCA9PT0gdG9wIHx8IG9yaWVudCA9PT0gYm90dG9tID8gdHJhbnNsYXRlWCA6IHRyYW5zbGF0ZVk7XG5cbiAgZnVuY3Rpb24gYXhpcyhjb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlcyA9IHRpY2tWYWx1ZXMgPT0gbnVsbCA/IChzY2FsZS50aWNrcyA/IHNjYWxlLnRpY2tzLmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IHNjYWxlLmRvbWFpbigpKSA6IHRpY2tWYWx1ZXMsXG4gICAgICAgIGZvcm1hdCA9IHRpY2tGb3JtYXQgPT0gbnVsbCA/IChzY2FsZS50aWNrRm9ybWF0ID8gc2NhbGUudGlja0Zvcm1hdC5hcHBseShzY2FsZSwgdGlja0FyZ3VtZW50cykgOiBpZGVudGl0eSkgOiB0aWNrRm9ybWF0LFxuICAgICAgICBzcGFjaW5nID0gTWF0aC5tYXgodGlja1NpemVJbm5lciwgMCkgKyB0aWNrUGFkZGluZyxcbiAgICAgICAgcmFuZ2UgPSBzY2FsZS5yYW5nZSgpLFxuICAgICAgICByYW5nZTAgPSArcmFuZ2VbMF0gKyBvZmZzZXQsXG4gICAgICAgIHJhbmdlMSA9ICtyYW5nZVtyYW5nZS5sZW5ndGggLSAxXSArIG9mZnNldCxcbiAgICAgICAgcG9zaXRpb24gPSAoc2NhbGUuYmFuZHdpZHRoID8gY2VudGVyIDogbnVtYmVyKShzY2FsZS5jb3B5KCksIG9mZnNldCksXG4gICAgICAgIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQsXG4gICAgICAgIHBhdGggPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLmRvbWFpblwiKS5kYXRhKFtudWxsXSksXG4gICAgICAgIHRpY2sgPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLnRpY2tcIikuZGF0YSh2YWx1ZXMsIHNjYWxlKS5vcmRlcigpLFxuICAgICAgICB0aWNrRXhpdCA9IHRpY2suZXhpdCgpLFxuICAgICAgICB0aWNrRW50ZXIgPSB0aWNrLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0aWNrXCIpLFxuICAgICAgICBsaW5lID0gdGljay5zZWxlY3QoXCJsaW5lXCIpLFxuICAgICAgICB0ZXh0ID0gdGljay5zZWxlY3QoXCJ0ZXh0XCIpO1xuXG4gICAgcGF0aCA9IHBhdGgubWVyZ2UocGF0aC5lbnRlcigpLmluc2VydChcInBhdGhcIiwgXCIudGlja1wiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZG9tYWluXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiY3VycmVudENvbG9yXCIpKTtcblxuICAgIHRpY2sgPSB0aWNrLm1lcmdlKHRpY2tFbnRlcik7XG5cbiAgICBsaW5lID0gbGluZS5tZXJnZSh0aWNrRW50ZXIuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImN1cnJlbnRDb2xvclwiKVxuICAgICAgICAuYXR0cih4ICsgXCIyXCIsIGsgKiB0aWNrU2l6ZUlubmVyKSk7XG5cbiAgICB0ZXh0ID0gdGV4dC5tZXJnZSh0aWNrRW50ZXIuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJjdXJyZW50Q29sb3JcIilcbiAgICAgICAgLmF0dHIoeCwgayAqIHNwYWNpbmcpXG4gICAgICAgIC5hdHRyKFwiZHlcIiwgb3JpZW50ID09PSB0b3AgPyBcIjBlbVwiIDogb3JpZW50ID09PSBib3R0b20gPyBcIjAuNzFlbVwiIDogXCIwLjMyZW1cIikpO1xuXG4gICAgaWYgKGNvbnRleHQgIT09IHNlbGVjdGlvbikge1xuICAgICAgcGF0aCA9IHBhdGgudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRpY2sgPSB0aWNrLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICBsaW5lID0gbGluZS50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgdGV4dCA9IHRleHQudHJhbnNpdGlvbihjb250ZXh0KTtcblxuICAgICAgdGlja0V4aXQgPSB0aWNrRXhpdC50cmFuc2l0aW9uKGNvbnRleHQpXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gaXNGaW5pdGUoZCA9IHBvc2l0aW9uKGQpKSA/IHRyYW5zZm9ybShkICsgb2Zmc2V0KSA6IHRoaXMuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpOyB9KTtcblxuICAgICAgdGlja0VudGVyXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyB2YXIgcCA9IHRoaXMucGFyZW50Tm9kZS5fX2F4aXM7IHJldHVybiB0cmFuc2Zvcm0oKHAgJiYgaXNGaW5pdGUocCA9IHAoZCkpID8gcCA6IHBvc2l0aW9uKGQpKSArIG9mZnNldCk7IH0pO1xuICAgIH1cblxuICAgIHRpY2tFeGl0LnJlbW92ZSgpO1xuXG4gICAgcGF0aFxuICAgICAgICAuYXR0cihcImRcIiwgb3JpZW50ID09PSBsZWZ0IHx8IG9yaWVudCA9PT0gcmlnaHRcbiAgICAgICAgICAgID8gKHRpY2tTaXplT3V0ZXIgPyBcIk1cIiArIGsgKiB0aWNrU2l6ZU91dGVyICsgXCIsXCIgKyByYW5nZTAgKyBcIkhcIiArIG9mZnNldCArIFwiVlwiICsgcmFuZ2UxICsgXCJIXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTVwiICsgb2Zmc2V0ICsgXCIsXCIgKyByYW5nZTAgKyBcIlZcIiArIHJhbmdlMSlcbiAgICAgICAgICAgIDogKHRpY2tTaXplT3V0ZXIgPyBcIk1cIiArIHJhbmdlMCArIFwiLFwiICsgayAqIHRpY2tTaXplT3V0ZXIgKyBcIlZcIiArIG9mZnNldCArIFwiSFwiICsgcmFuZ2UxICsgXCJWXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTVwiICsgcmFuZ2UwICsgXCIsXCIgKyBvZmZzZXQgKyBcIkhcIiArIHJhbmdlMSkpO1xuXG4gICAgdGlja1xuICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgMSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gdHJhbnNmb3JtKHBvc2l0aW9uKGQpICsgb2Zmc2V0KTsgfSk7XG5cbiAgICBsaW5lXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpO1xuXG4gICAgdGV4dFxuICAgICAgICAuYXR0cih4LCBrICogc3BhY2luZylcbiAgICAgICAgLnRleHQoZm9ybWF0KTtcblxuICAgIHNlbGVjdGlvbi5maWx0ZXIoZW50ZXJpbmcpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgMTApXG4gICAgICAgIC5hdHRyKFwiZm9udC1mYW1pbHlcIiwgXCJzYW5zLXNlcmlmXCIpXG4gICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgb3JpZW50ID09PSByaWdodCA/IFwic3RhcnRcIiA6IG9yaWVudCA9PT0gbGVmdCA/IFwiZW5kXCIgOiBcIm1pZGRsZVwiKTtcblxuICAgIHNlbGVjdGlvblxuICAgICAgICAuZWFjaChmdW5jdGlvbigpIHsgdGhpcy5fX2F4aXMgPSBwb3NpdGlvbjsgfSk7XG4gIH1cblxuICBheGlzLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlID0gXywgYXhpcykgOiBzY2FsZTtcbiAgfTtcblxuICBheGlzLnRpY2tzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRpY2tBcmd1bWVudHMgPSBBcnJheS5mcm9tKGFyZ3VtZW50cyksIGF4aXM7XG4gIH07XG5cbiAgYXhpcy50aWNrQXJndW1lbnRzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tBcmd1bWVudHMgPSBfID09IG51bGwgPyBbXSA6IEFycmF5LmZyb20oXyksIGF4aXMpIDogdGlja0FyZ3VtZW50cy5zbGljZSgpO1xuICB9O1xuXG4gIGF4aXMudGlja1ZhbHVlcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrVmFsdWVzID0gXyA9PSBudWxsID8gbnVsbCA6IEFycmF5LmZyb20oXyksIGF4aXMpIDogdGlja1ZhbHVlcyAmJiB0aWNrVmFsdWVzLnNsaWNlKCk7XG4gIH07XG5cbiAgYXhpcy50aWNrRm9ybWF0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tGb3JtYXQgPSBfLCBheGlzKSA6IHRpY2tGb3JtYXQ7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZUlubmVyID0gdGlja1NpemVPdXRlciA9ICtfLCBheGlzKSA6IHRpY2tTaXplSW5uZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZUlubmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyO1xuICB9O1xuXG4gIGF4aXMudGlja1NpemVPdXRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZU91dGVyID0gK18sIGF4aXMpIDogdGlja1NpemVPdXRlcjtcbiAgfTtcblxuICBheGlzLnRpY2tQYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tQYWRkaW5nID0gK18sIGF4aXMpIDogdGlja1BhZGRpbmc7XG4gIH07XG5cbiAgYXhpcy5vZmZzZXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAob2Zmc2V0ID0gK18sIGF4aXMpIDogb2Zmc2V0O1xuICB9O1xuXG4gIHJldHVybiBheGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1RvcChzY2FsZSkge1xuICByZXR1cm4gYXhpcyh0b3AsIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNSaWdodChzY2FsZSkge1xuICByZXR1cm4gYXhpcyhyaWdodCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0JvdHRvbShzY2FsZSkge1xuICByZXR1cm4gYXhpcyhib3R0b20sIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNMZWZ0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGxlZnQsIHNjYWxlKTtcbn1cbiIsInZhciBub29wID0ge3ZhbHVlOiAoKSA9PiB7fX07XG5cbmZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF8gPSB7fSwgdDsgaSA8IG47ICsraSkge1xuICAgIGlmICghKHQgPSBhcmd1bWVudHNbaV0gKyBcIlwiKSB8fCAodCBpbiBfKSB8fCAvW1xccy5dLy50ZXN0KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIHR5cGU6IFwiICsgdCk7XG4gICAgX1t0XSA9IFtdO1xuICB9XG4gIHJldHVybiBuZXcgRGlzcGF0Y2goXyk7XG59XG5cbmZ1bmN0aW9uIERpc3BhdGNoKF8pIHtcbiAgdGhpcy5fID0gXztcbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzLCB0eXBlcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgaWYgKHQgJiYgIXR5cGVzLmhhc093blByb3BlcnR5KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdCk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbkRpc3BhdGNoLnByb3RvdHlwZSA9IGRpc3BhdGNoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IERpc3BhdGNoLFxuICBvbjogZnVuY3Rpb24odHlwZW5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIF8gPSB0aGlzLl8sXG4gICAgICAgIFQgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIsIF8pLFxuICAgICAgICB0LFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIG4gPSBULmxlbmd0aDtcblxuICAgIC8vIElmIG5vIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJldHVybiB0aGUgY2FsbGJhY2sgb2YgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgJiYgKHQgPSBnZXQoX1t0XSwgdHlwZW5hbWUubmFtZSkpKSByZXR1cm4gdDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBhIHR5cGUgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgLy8gT3RoZXJ3aXNlLCBpZiBhIG51bGwgY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmVtb3ZlIGNhbGxiYWNrcyBvZiB0aGUgZ2l2ZW4gbmFtZS5cbiAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjYWxsYmFjazogXCIgKyBjYWxsYmFjayk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBjYWxsYmFjayk7XG4gICAgICBlbHNlIGlmIChjYWxsYmFjayA9PSBudWxsKSBmb3IgKHQgaW4gXykgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgY29weTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNvcHkgPSB7fSwgXyA9IHRoaXMuXztcbiAgICBmb3IgKHZhciB0IGluIF8pIGNvcHlbdF0gPSBfW3RdLnNsaWNlKCk7XG4gICAgcmV0dXJuIG5ldyBEaXNwYXRjaChjb3B5KTtcbiAgfSxcbiAgY2FsbDogZnVuY3Rpb24odHlwZSwgdGhhdCkge1xuICAgIGlmICgobiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyKSA+IDApIGZvciAodmFyIGFyZ3MgPSBuZXcgQXJyYXkobiksIGkgPSAwLCBuLCB0OyBpIDwgbjsgKytpKSBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uKHR5cGUsIHRoYXQsIGFyZ3MpIHtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodmFyIHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldCh0eXBlLCBuYW1lKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGgsIGM7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoKGMgPSB0eXBlW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYy52YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0KHR5cGUsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAodHlwZVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICB0eXBlW2ldID0gbm9vcCwgdHlwZSA9IHR5cGUuc2xpY2UoMCwgaSkuY29uY2F0KHR5cGUuc2xpY2UoaSArIDEpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgdHlwZS5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogY2FsbGJhY2t9KTtcbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRpc3BhdGNoO1xuIiwiZXhwb3J0IHZhciB4aHRtbCA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN2ZzogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4aHRtbDogeGh0bWwsXG4gIHhsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgeG1sOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG59O1xuIiwiaW1wb3J0IG5hbWVzcGFjZXMgZnJvbSBcIi4vbmFtZXNwYWNlcy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBwcmVmaXggPSBuYW1lICs9IFwiXCIsIGkgPSBwcmVmaXguaW5kZXhPZihcIjpcIik7XG4gIGlmIChpID49IDAgJiYgKHByZWZpeCA9IG5hbWUuc2xpY2UoMCwgaSkpICE9PSBcInhtbG5zXCIpIG5hbWUgPSBuYW1lLnNsaWNlKGkgKyAxKTtcbiAgcmV0dXJuIG5hbWVzcGFjZXMuaGFzT3duUHJvcGVydHkocHJlZml4KSA/IHtzcGFjZTogbmFtZXNwYWNlc1twcmVmaXhdLCBsb2NhbDogbmFtZX0gOiBuYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xufVxuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi9uYW1lc3BhY2UuanNcIjtcbmltcG9ydCB7eGh0bWx9IGZyb20gXCIuL25hbWVzcGFjZXMuanNcIjtcblxuZnVuY3Rpb24gY3JlYXRvckluaGVyaXQobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LFxuICAgICAgICB1cmkgPSB0aGlzLm5hbWVzcGFjZVVSSTtcbiAgICByZXR1cm4gdXJpID09PSB4aHRtbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJID09PSB4aHRtbFxuICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSlcbiAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModXJpLCBuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRvckZpeGVkKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxuICAgICAgPyBjcmVhdG9yRml4ZWRcbiAgICAgIDogY3JlYXRvckluaGVyaXQpKGZ1bGxuYW1lKTtcbn1cbiIsImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImZ1bmN0aW9uIGVtcHR5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gZW1wdHkgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbC5qc1wiO1xuXG5mdW5jdGlvbiBhcnJheUFsbChzZWxlY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcnJheShzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCA9PT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBhcnJheUFsbChzZWxlY3QpO1xuICBlbHNlIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XG59XG4iLCIvLyBHaXZlbiBzb21ldGhpbmcgYXJyYXkgbGlrZSAob3IgbnVsbCksIHJldHVybnMgc29tZXRoaW5nIHRoYXQgaXMgc3RyaWN0bHkgYW5cbi8vIGFycmF5LiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgYXJyYXktbGlrZSBvYmplY3RzIHBhc3NlZCB0byBkMy5zZWxlY3RBbGxcbi8vIG9yIHNlbGVjdGlvbi5zZWxlY3RBbGwgYXJlIGNvbnZlcnRlZCBpbnRvIHByb3BlciBhcnJheXMgd2hlbiBjcmVhdGluZyBhXG4vLyBzZWxlY3Rpb247IHdlIGRvbuKAmXQgZXZlciB3YW50IHRvIGNyZWF0ZSBhIHNlbGVjdGlvbiBiYWNrZWQgYnkgYSBsaXZlXG4vLyBIVE1MQ29sbGVjdGlvbiBvciBOb2RlTGlzdC4gSG93ZXZlciwgbm90ZSB0aGF0IHNlbGVjdGlvbi5zZWxlY3RBbGwgd2lsbCB1c2UgYVxuLy8gc3RhdGljIE5vZGVMaXN0IGFzIGEgZ3JvdXAsIHNpbmNlIGl0IHNhZmVseSBkZXJpdmVkIGZyb20gcXVlcnlTZWxlY3RvckFsbC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFycmF5KHgpIHtcbiAgcmV0dXJuIHggPT0gbnVsbCA/IFtdIDogQXJyYXkuaXNBcnJheSh4KSA/IHggOiBBcnJheS5mcm9tKHgpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hpbGRNYXRjaGVyKHNlbGVjdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubWF0Y2hlcyhzZWxlY3Rvcik7XG4gIH07XG59XG5cbiIsImltcG9ydCB7Y2hpbGRNYXRjaGVyfSBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG52YXIgZmluZCA9IEFycmF5LnByb3RvdHlwZS5maW5kO1xuXG5mdW5jdGlvbiBjaGlsZEZpbmQobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaW5kLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjaGlsZEZpcnN0KCkge1xuICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KG1hdGNoID09IG51bGwgPyBjaGlsZEZpcnN0XG4gICAgICA6IGNoaWxkRmluZCh0eXBlb2YgbWF0Y2ggPT09IFwiZnVuY3Rpb25cIiA/IG1hdGNoIDogY2hpbGRNYXRjaGVyKG1hdGNoKSkpO1xufVxuIiwiaW1wb3J0IHtjaGlsZE1hdGNoZXJ9IGZyb20gXCIuLi9tYXRjaGVyLmpzXCI7XG5cbnZhciBmaWx0ZXIgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyO1xuXG5mdW5jdGlvbiBjaGlsZHJlbigpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbik7XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuRmlsdGVyKG1hdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3RBbGwobWF0Y2ggPT0gbnVsbCA/IGNoaWxkcmVuXG4gICAgICA6IGNoaWxkcmVuRmlsdGVyKHR5cGVvZiBtYXRjaCA9PT0gXCJmdW5jdGlvblwiID8gbWF0Y2ggOiBjaGlsZE1hdGNoZXIobWF0Y2gpKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih1cGRhdGUpIHtcbiAgcmV0dXJuIG5ldyBBcnJheSh1cGRhdGUubGVuZ3RoKTtcbn1cbiIsImltcG9ydCBzcGFyc2UgZnJvbSBcIi4vc3BhcnNlLmpzXCI7XG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xuICB0aGlzLm93bmVyRG9jdW1lbnQgPSBwYXJlbnQub3duZXJEb2N1bWVudDtcbiAgdGhpcy5uYW1lc3BhY2VVUkkgPSBwYXJlbnQubmFtZXNwYWNlVVJJO1xuICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICB0aGlzLl9fZGF0YV9fID0gZGF0dW07XG59XG5cbkVudGVyTm9kZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBFbnRlck5vZGUsXG4gIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXG4gIGluc2VydEJlZm9yZTogZnVuY3Rpb24oY2hpbGQsIG5leHQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIG5leHQpOyB9LFxuICBxdWVyeVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOyB9LFxuICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XG59O1xuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQge0VudGVyTm9kZX0gZnJvbSBcIi4vZW50ZXIuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gYmluZEluZGV4KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEpIHtcbiAgdmFyIGkgPSAwLFxuICAgICAgbm9kZSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBmaXQgaW50byB1cGRhdGUuXG4gIC8vIFB1dCBhbnkgbnVsbCBub2RlcyBpbnRvIGVudGVyLlxuICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXG4gIGZvciAoOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9u4oCZdCBmaXQgaW50byBleGl0LlxuICBmb3IgKDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZEtleShwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhLCBrZXkpIHtcbiAgdmFyIGksXG4gICAgICBub2RlLFxuICAgICAgbm9kZUJ5S2V5VmFsdWUgPSBuZXcgTWFwLFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICBrZXlWYWx1ZXMgPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpLFxuICAgICAga2V5VmFsdWU7XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIG5vZGUuXG4gIC8vIElmIG11bHRpcGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUga2V5LCB0aGUgZHVwbGljYXRlcyBhcmUgYWRkZWQgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBrZXlWYWx1ZXNbaV0gPSBrZXlWYWx1ZSA9IGtleS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSArIFwiXCI7XG4gICAgICBpZiAobm9kZUJ5S2V5VmFsdWUuaGFzKGtleVZhbHVlKSkge1xuICAgICAgICBleGl0W2ldID0gbm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVCeUtleVZhbHVlLnNldChrZXlWYWx1ZSwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIGRhdHVtLlxuICAvLyBJZiB0aGVyZSBhIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5LCBqb2luIGFuZCBhZGQgaXQgdG8gdXBkYXRlLlxuICAvLyBJZiB0aGVyZSBpcyBub3QgKG9yIHRoZSBrZXkgaXMgYSBkdXBsaWNhdGUpLCBhZGQgaXQgdG8gZW50ZXIuXG4gIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBrZXlWYWx1ZSA9IGtleS5jYWxsKHBhcmVudCwgZGF0YVtpXSwgaSwgZGF0YSkgKyBcIlwiO1xuICAgIGlmIChub2RlID0gbm9kZUJ5S2V5VmFsdWUuZ2V0KGtleVZhbHVlKSkge1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgbm9kZUJ5S2V5VmFsdWUuZGVsZXRlKGtleVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGFueSByZW1haW5pbmcgbm9kZXMgdGhhdCB3ZXJlIG5vdCBib3VuZCB0byBkYXRhIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChub2RlQnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWVzW2ldKSA9PT0gbm9kZSkpIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkYXR1bShub2RlKSB7XG4gIHJldHVybiBub2RlLl9fZGF0YV9fO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIEFycmF5LmZyb20odGhpcywgZGF0dW0pO1xuXG4gIHZhciBiaW5kID0ga2V5ID8gYmluZEtleSA6IGJpbmRJbmRleCxcbiAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxuICAgICAgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdmFsdWUgPSBjb25zdGFudCh2YWx1ZSk7XG5cbiAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgdmFyIHBhcmVudCA9IHBhcmVudHNbal0sXG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2pdLFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YSA9IGFycmF5bGlrZSh2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cykpLFxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGVudGVyR3JvdXAgPSBlbnRlcltqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgdXBkYXRlR3JvdXAgPSB1cGRhdGVbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIGV4aXRHcm91cCA9IGV4aXRbal0gPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpO1xuXG4gICAgYmluZChwYXJlbnQsIGdyb3VwLCBlbnRlckdyb3VwLCB1cGRhdGVHcm91cCwgZXhpdEdyb3VwLCBkYXRhLCBrZXkpO1xuXG4gICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XG4gICAgLy8gYXBwZW5kQ2hpbGQgY2FuIGluc2VydCB0aGUgbWF0ZXJpYWxpemVkIGVudGVyIG5vZGUgYmVmb3JlIHRoaXMgbm9kZSxcbiAgICAvLyByYXRoZXIgdGhhbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJlbnQgbm9kZS5cbiAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xuICAgICAgaWYgKHByZXZpb3VzID0gZW50ZXJHcm91cFtpMF0pIHtcbiAgICAgICAgaWYgKGkwID49IGkxKSBpMSA9IGkwICsgMTtcbiAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xuICAgICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGUgPSBuZXcgU2VsZWN0aW9uKHVwZGF0ZSwgcGFyZW50cyk7XG4gIHVwZGF0ZS5fZW50ZXIgPSBlbnRlcjtcbiAgdXBkYXRlLl9leGl0ID0gZXhpdDtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuLy8gR2l2ZW4gc29tZSBkYXRhLCB0aGlzIHJldHVybnMgYW4gYXJyYXktbGlrZSB2aWV3IG9mIGl0OiBhbiBvYmplY3QgdGhhdFxuLy8gZXhwb3NlcyBhIGxlbmd0aCBwcm9wZXJ0eSBhbmQgYWxsb3dzIG51bWVyaWMgaW5kZXhpbmcuIE5vdGUgdGhhdCB1bmxpa2Vcbi8vIHNlbGVjdEFsbCwgdGhpcyBpc27igJl0IHdvcnJpZWQgYWJvdXQg4oCcbGl2ZeKAnSBjb2xsZWN0aW9ucyBiZWNhdXNlIHRoZSByZXN1bHRpbmdcbi8vIGFycmF5IHdpbGwgb25seSBiZSB1c2VkIGJyaWVmbHkgd2hpbGUgZGF0YSBpcyBiZWluZyBib3VuZC4gKEl0IGlzIHBvc3NpYmxlIHRvXG4vLyBjYXVzZSB0aGUgZGF0YSB0byBjaGFuZ2Ugd2hpbGUgaXRlcmF0aW5nIGJ5IHVzaW5nIGEga2V5IGZ1bmN0aW9uLCBidXQgcGxlYXNlXG4vLyBkb27igJl0OyB3ZeKAmWQgcmF0aGVyIGF2b2lkIGEgZ3JhdHVpdG91cyBjb3B5LilcbmZ1bmN0aW9uIGFycmF5bGlrZShkYXRhKSB7XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImxlbmd0aFwiIGluIGRhdGFcbiAgICA/IGRhdGEgLy8gQXJyYXksIFR5cGVkQXJyYXksIE5vZGVMaXN0LCBhcnJheS1saWtlXG4gICAgOiBBcnJheS5mcm9tKGRhdGEpOyAvLyBNYXAsIFNldCwgaXRlcmFibGUsIHN0cmluZywgb3IgYW55dGhpbmcgZWxzZVxufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVOb2RlKGEsIGIpIHtcbiAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzb3J0Z3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzb3J0Z3JvdXBbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0Z3JvdXAuc29ydChjb21wYXJlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzb3J0Z3JvdXBzLCB0aGlzLl9wYXJlbnRzKS5vcmRlcigpO1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuLi9uYW1lc3BhY2UuanNcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XG4gICAgcmV0dXJuIGZ1bGxuYW1lLmxvY2FsXG4gICAgICAgID8gbm9kZS5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpXG4gICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbilcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKSkoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlKSB7XG4gIHJldHVybiAobm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgLy8gbm9kZSBpcyBhIE5vZGVcbiAgICAgIHx8IChub2RlLmRvY3VtZW50ICYmIG5vZGUpIC8vIG5vZGUgaXMgYSBXaW5kb3dcbiAgICAgIHx8IG5vZGUuZGVmYXVsdFZpZXc7IC8vIG5vZGUgaXMgYSBEb2N1bWVudFxufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2LCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICA/IHN0eWxlUmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gc3R5bGVGdW5jdGlvblxuICAgICAgICAgICAgOiBzdHlsZUNvbnN0YW50KShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpXG4gICAgICA6IHN0eWxlVmFsdWUodGhpcy5ub2RlKCksIG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3R5bGVWYWx1ZShub2RlLCBuYW1lKSB7XG4gIHJldHVybiBub2RlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSlcbiAgICAgIHx8IGRlZmF1bHRWaWV3KG5vZGUpLmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbn1cbiIsImZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGRlbGV0ZSB0aGlzW25hbWVdO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzW25hbWVdID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5RnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICBlbHNlIHRoaXNbbmFtZV0gPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBwcm9wZXJ0eVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBwcm9wZXJ0eUZ1bmN0aW9uXG4gICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpW25hbWVdO1xufVxuIiwiZnVuY3Rpb24gY2xhc3NBcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50cmltKCkuc3BsaXQoL158XFxzKy8pO1xufVxuXG5mdW5jdGlvbiBjbGFzc0xpc3Qobm9kZSkge1xuICByZXR1cm4gbm9kZS5jbGFzc0xpc3QgfHwgbmV3IENsYXNzTGlzdChub2RlKTtcbn1cblxuZnVuY3Rpb24gQ2xhc3NMaXN0KG5vZGUpIHtcbiAgdGhpcy5fbm9kZSA9IG5vZGU7XG4gIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xufVxuXG5DbGFzc0xpc3QucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5fbmFtZXMuc3BsaWNlKGksIDEpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICBjb250YWluczogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNsYXNzZWRBZGQobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QuYWRkKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFJlbW92ZShub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkVHJ1ZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZEFkZCh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGYWxzZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZFJlbW92ZSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICh2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpID8gY2xhc3NlZEFkZCA6IGNsYXNzZWRSZW1vdmUpKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3QodGhpcy5ub2RlKCkpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmICghbGlzdC5jb250YWlucyhuYW1lc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNsYXNzZWRGdW5jdGlvbiA6IHZhbHVlXG4gICAgICA/IGNsYXNzZWRUcnVlXG4gICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XG59XG4iLCJmdW5jdGlvbiB0ZXh0UmVtb3ZlKCkge1xuICB0aGlzLnRleHRDb250ZW50ID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHRleHRSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHRleHRGdW5jdGlvblxuICAgICAgICAgIDogdGV4dENvbnN0YW50KSh2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpLnRleHRDb250ZW50O1xufVxuIiwiZnVuY3Rpb24gaHRtbFJlbW92ZSgpIHtcbiAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBodG1sQ29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGh0bWxGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBodG1sUmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBodG1sRnVuY3Rpb25cbiAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS5pbm5lckhUTUw7XG59XG4iLCJmdW5jdGlvbiByYWlzZSgpIHtcbiAgaWYgKHRoaXMubmV4dFNpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmFpc2UpO1xufVxuIiwiZnVuY3Rpb24gbG93ZXIoKSB7XG4gIGlmICh0aGlzLnByZXZpb3VzU2libGluZykgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLCB0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKGxvd2VyKTtcbn1cbiIsImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yLmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmZ1bmN0aW9uIGNvbnN0YW50TnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIGJlZm9yZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpLFxuICAgICAgc2VsZWN0ID0gYmVmb3JlID09IG51bGwgPyBjb25zdGFudE51bGwgOiB0eXBlb2YgYmVmb3JlID09PSBcImZ1bmN0aW9uXCIgPyBiZWZvcmUgOiBzZWxlY3RvcihiZWZvcmUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmUoKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIGlmIChwYXJlbnQpIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmVtb3ZlKTtcbn1cbiIsImZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZVNoYWxsb3coKSB7XG4gIHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKGZhbHNlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICByZXR1cm4gcGFyZW50ID8gcGFyZW50Lmluc2VydEJlZm9yZShjbG9uZSwgdGhpcy5uZXh0U2libGluZykgOiBjbG9uZTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lRGVlcCgpIHtcbiAgdmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUodHJ1ZSksIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgcmV0dXJuIHBhcmVudCA/IHBhcmVudC5pbnNlcnRCZWZvcmUoY2xvbmUsIHRoaXMubmV4dFNpYmxpbmcpIDogY2xvbmU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRlZXApIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGRlZXAgPyBzZWxlY3Rpb25fY2xvbmVEZWVwIDogc2VsZWN0aW9uX2Nsb25lU2hhbGxvdyk7XG59XG4iLCJmdW5jdGlvbiBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCwgdGhpcy5fX2RhdGFfXyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSBjb250ZXh0TGlzdGVuZXIodmFsdWUpO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyID0gbGlzdGVuZXIsIG8ub3B0aW9ucyA9IG9wdGlvbnMpO1xuICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGVuYW1lLnR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICBvID0ge3R5cGU6IHR5cGVuYW1lLnR5cGUsIG5hbWU6IHR5cGVuYW1lLm5hbWUsIHZhbHVlOiB2YWx1ZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCBvcHRpb25zOiBvcHRpb25zfTtcbiAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgZWxzZSBvbi5wdXNoKG8pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiksIGksIG4gPSB0eXBlbmFtZXMubGVuZ3RoLCB0O1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgZm9yIChpID0gMCwgbyA9IG9uW2pdOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb24gPSB2YWx1ZSA/IG9uQWRkIDogb25SZW1vdmU7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHRoaXMuZWFjaChvbih0eXBlbmFtZXNbaV0sIHZhbHVlLCBvcHRpb25zKSk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChub2RlLCB0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxuICAgICAgZXZlbnQgPSB3aW5kb3cuQ3VzdG9tRXZlbnQ7XG5cbiAgaWYgKHR5cGVvZiBldmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZXZlbnQgPSBuZXcgZXZlbnQodHlwZSwgcGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBldmVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgIGlmIChwYXJhbXMpIGV2ZW50LmluaXRFdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUpLCBldmVudC5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICAgIGVsc2UgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaENvbnN0YW50KHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hGdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBkaXNwYXRjaEZ1bmN0aW9uXG4gICAgICA6IGRpc3BhdGNoQ29uc3RhbnQpKHR5cGUsIHBhcmFtcykpO1xufVxuIiwiaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0Q2hpbGQgZnJvbSBcIi4vc2VsZWN0Q2hpbGQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0Q2hpbGRyZW4gZnJvbSBcIi4vc2VsZWN0Q2hpbGRyZW4uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXRhIGZyb20gXCIuL2RhdGEuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW50ZXIgZnJvbSBcIi4vZW50ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZXhpdCBmcm9tIFwiLi9leGl0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2pvaW4gZnJvbSBcIi4vam9pbi5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9tZXJnZSBmcm9tIFwiLi9tZXJnZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9vcmRlciBmcm9tIFwiLi9vcmRlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zb3J0IGZyb20gXCIuL3NvcnQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2FsbCBmcm9tIFwiLi9jYWxsLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX25vZGVzIGZyb20gXCIuL25vZGVzLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX25vZGUgZnJvbSBcIi4vbm9kZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zaXplIGZyb20gXCIuL3NpemUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW1wdHkgZnJvbSBcIi4vZW1wdHkuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZWFjaCBmcm9tIFwiLi9lYWNoLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2F0dHIgZnJvbSBcIi4vYXR0ci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9wcm9wZXJ0eSBmcm9tIFwiLi9wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9jbGFzc2VkIGZyb20gXCIuL2NsYXNzZWQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fdGV4dCBmcm9tIFwiLi90ZXh0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2h0bWwgZnJvbSBcIi4vaHRtbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9yYWlzZSBmcm9tIFwiLi9yYWlzZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9sb3dlciBmcm9tIFwiLi9sb3dlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9hcHBlbmQgZnJvbSBcIi4vYXBwZW5kLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2luc2VydCBmcm9tIFwiLi9pbnNlcnQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9jbG9uZSBmcm9tIFwiLi9jbG9uZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXR1bSBmcm9tIFwiLi9kYXR1bS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9vbiBmcm9tIFwiLi9vbi5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kaXNwYXRjaCBmcm9tIFwiLi9kaXNwYXRjaC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9pdGVyYXRvciBmcm9tIFwiLi9pdGVyYXRvci5qc1wiO1xuXG5leHBvcnQgdmFyIHJvb3QgPSBbbnVsbF07XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWxlY3Rpb24oZ3JvdXBzLCBwYXJlbnRzKSB7XG4gIHRoaXMuX2dyb3VwcyA9IGdyb3VwcztcbiAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSwgcm9vdCk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbl9zZWxlY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzO1xufVxuXG5TZWxlY3Rpb24ucHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFNlbGVjdGlvbixcbiAgc2VsZWN0OiBzZWxlY3Rpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHNlbGVjdGlvbl9zZWxlY3RBbGwsXG4gIHNlbGVjdENoaWxkOiBzZWxlY3Rpb25fc2VsZWN0Q2hpbGQsXG4gIHNlbGVjdENoaWxkcmVuOiBzZWxlY3Rpb25fc2VsZWN0Q2hpbGRyZW4sXG4gIGZpbHRlcjogc2VsZWN0aW9uX2ZpbHRlcixcbiAgZGF0YTogc2VsZWN0aW9uX2RhdGEsXG4gIGVudGVyOiBzZWxlY3Rpb25fZW50ZXIsXG4gIGV4aXQ6IHNlbGVjdGlvbl9leGl0LFxuICBqb2luOiBzZWxlY3Rpb25fam9pbixcbiAgbWVyZ2U6IHNlbGVjdGlvbl9tZXJnZSxcbiAgc2VsZWN0aW9uOiBzZWxlY3Rpb25fc2VsZWN0aW9uLFxuICBvcmRlcjogc2VsZWN0aW9uX29yZGVyLFxuICBzb3J0OiBzZWxlY3Rpb25fc29ydCxcbiAgY2FsbDogc2VsZWN0aW9uX2NhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fbm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX2VhY2gsXG4gIGF0dHI6IHNlbGVjdGlvbl9hdHRyLFxuICBzdHlsZTogc2VsZWN0aW9uX3N0eWxlLFxuICBwcm9wZXJ0eTogc2VsZWN0aW9uX3Byb3BlcnR5LFxuICBjbGFzc2VkOiBzZWxlY3Rpb25fY2xhc3NlZCxcbiAgdGV4dDogc2VsZWN0aW9uX3RleHQsXG4gIGh0bWw6IHNlbGVjdGlvbl9odG1sLFxuICByYWlzZTogc2VsZWN0aW9uX3JhaXNlLFxuICBsb3dlcjogc2VsZWN0aW9uX2xvd2VyLFxuICBhcHBlbmQ6IHNlbGVjdGlvbl9hcHBlbmQsXG4gIGluc2VydDogc2VsZWN0aW9uX2luc2VydCxcbiAgcmVtb3ZlOiBzZWxlY3Rpb25fcmVtb3ZlLFxuICBjbG9uZTogc2VsZWN0aW9uX2Nsb25lLFxuICBkYXR1bTogc2VsZWN0aW9uX2RhdHVtLFxuICBvbjogc2VsZWN0aW9uX29uLFxuICBkaXNwYXRjaDogc2VsZWN0aW9uX2Rpc3BhdGNoLFxuICBbU3ltYm9sLml0ZXJhdG9yXTogc2VsZWN0aW9uX2l0ZXJhdG9yXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZWxlY3Rpb247XG4iLCJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XG4gIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcbiAgcmV0dXJuIHByb3RvdHlwZTtcbn1cbiIsImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29sb3IoKSB7fVxuXG5leHBvcnQgdmFyIGRhcmtlciA9IDAuNztcbmV4cG9ydCB2YXIgYnJpZ2h0ZXIgPSAxIC8gZGFya2VyO1xuXG52YXIgcmVJID0gXCJcXFxccyooWystXT9cXFxcZCspXFxcXHMqXCIsXG4gICAgcmVOID0gXCJcXFxccyooWystXT8oPzpcXFxcZCpcXFxcLik/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pXFxcXHMqXCIsXG4gICAgcmVQID0gXCJcXFxccyooWystXT8oPzpcXFxcZCpcXFxcLik/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLFxuICAgIHJlSGV4ID0gL14jKFswLTlhLWZdezMsOH0pJC8sXG4gICAgcmVSZ2JJbnRlZ2VyID0gbmV3IFJlZ0V4cChgXnJnYlxcXFwoJHtyZUl9LCR7cmVJfSwke3JlSX1cXFxcKSRgKSxcbiAgICByZVJnYlBlcmNlbnQgPSBuZXcgUmVnRXhwKGBecmdiXFxcXCgke3JlUH0sJHtyZVB9LCR7cmVQfVxcXFwpJGApLFxuICAgIHJlUmdiYUludGVnZXIgPSBuZXcgUmVnRXhwKGBecmdiYVxcXFwoJHtyZUl9LCR7cmVJfSwke3JlSX0sJHtyZU59XFxcXCkkYCksXG4gICAgcmVSZ2JhUGVyY2VudCA9IG5ldyBSZWdFeHAoYF5yZ2JhXFxcXCgke3JlUH0sJHtyZVB9LCR7cmVQfSwke3JlTn1cXFxcKSRgKSxcbiAgICByZUhzbFBlcmNlbnQgPSBuZXcgUmVnRXhwKGBeaHNsXFxcXCgke3JlTn0sJHtyZVB9LCR7cmVQfVxcXFwpJGApLFxuICAgIHJlSHNsYVBlcmNlbnQgPSBuZXcgUmVnRXhwKGBeaHNsYVxcXFwoJHtyZU59LCR7cmVQfSwke3JlUH0sJHtyZU59XFxcXCkkYCk7XG5cbnZhciBuYW1lZCA9IHtcbiAgYWxpY2VibHVlOiAweGYwZjhmZixcbiAgYW50aXF1ZXdoaXRlOiAweGZhZWJkNyxcbiAgYXF1YTogMHgwMGZmZmYsXG4gIGFxdWFtYXJpbmU6IDB4N2ZmZmQ0LFxuICBhenVyZTogMHhmMGZmZmYsXG4gIGJlaWdlOiAweGY1ZjVkYyxcbiAgYmlzcXVlOiAweGZmZTRjNCxcbiAgYmxhY2s6IDB4MDAwMDAwLFxuICBibGFuY2hlZGFsbW9uZDogMHhmZmViY2QsXG4gIGJsdWU6IDB4MDAwMGZmLFxuICBibHVldmlvbGV0OiAweDhhMmJlMixcbiAgYnJvd246IDB4YTUyYTJhLFxuICBidXJseXdvb2Q6IDB4ZGViODg3LFxuICBjYWRldGJsdWU6IDB4NWY5ZWEwLFxuICBjaGFydHJldXNlOiAweDdmZmYwMCxcbiAgY2hvY29sYXRlOiAweGQyNjkxZSxcbiAgY29yYWw6IDB4ZmY3ZjUwLFxuICBjb3JuZmxvd2VyYmx1ZTogMHg2NDk1ZWQsXG4gIGNvcm5zaWxrOiAweGZmZjhkYyxcbiAgY3JpbXNvbjogMHhkYzE0M2MsXG4gIGN5YW46IDB4MDBmZmZmLFxuICBkYXJrYmx1ZTogMHgwMDAwOGIsXG4gIGRhcmtjeWFuOiAweDAwOGI4YixcbiAgZGFya2dvbGRlbnJvZDogMHhiODg2MGIsXG4gIGRhcmtncmF5OiAweGE5YTlhOSxcbiAgZGFya2dyZWVuOiAweDAwNjQwMCxcbiAgZGFya2dyZXk6IDB4YTlhOWE5LFxuICBkYXJra2hha2k6IDB4YmRiNzZiLFxuICBkYXJrbWFnZW50YTogMHg4YjAwOGIsXG4gIGRhcmtvbGl2ZWdyZWVuOiAweDU1NmIyZixcbiAgZGFya29yYW5nZTogMHhmZjhjMDAsXG4gIGRhcmtvcmNoaWQ6IDB4OTkzMmNjLFxuICBkYXJrcmVkOiAweDhiMDAwMCxcbiAgZGFya3NhbG1vbjogMHhlOTk2N2EsXG4gIGRhcmtzZWFncmVlbjogMHg4ZmJjOGYsXG4gIGRhcmtzbGF0ZWJsdWU6IDB4NDgzZDhiLFxuICBkYXJrc2xhdGVncmF5OiAweDJmNGY0ZixcbiAgZGFya3NsYXRlZ3JleTogMHgyZjRmNGYsXG4gIGRhcmt0dXJxdW9pc2U6IDB4MDBjZWQxLFxuICBkYXJrdmlvbGV0OiAweDk0MDBkMyxcbiAgZGVlcHBpbms6IDB4ZmYxNDkzLFxuICBkZWVwc2t5Ymx1ZTogMHgwMGJmZmYsXG4gIGRpbWdyYXk6IDB4Njk2OTY5LFxuICBkaW1ncmV5OiAweDY5Njk2OSxcbiAgZG9kZ2VyYmx1ZTogMHgxZTkwZmYsXG4gIGZpcmVicmljazogMHhiMjIyMjIsXG4gIGZsb3JhbHdoaXRlOiAweGZmZmFmMCxcbiAgZm9yZXN0Z3JlZW46IDB4MjI4YjIyLFxuICBmdWNoc2lhOiAweGZmMDBmZixcbiAgZ2FpbnNib3JvOiAweGRjZGNkYyxcbiAgZ2hvc3R3aGl0ZTogMHhmOGY4ZmYsXG4gIGdvbGQ6IDB4ZmZkNzAwLFxuICBnb2xkZW5yb2Q6IDB4ZGFhNTIwLFxuICBncmF5OiAweDgwODA4MCxcbiAgZ3JlZW46IDB4MDA4MDAwLFxuICBncmVlbnllbGxvdzogMHhhZGZmMmYsXG4gIGdyZXk6IDB4ODA4MDgwLFxuICBob25leWRldzogMHhmMGZmZjAsXG4gIGhvdHBpbms6IDB4ZmY2OWI0LFxuICBpbmRpYW5yZWQ6IDB4Y2Q1YzVjLFxuICBpbmRpZ286IDB4NGIwMDgyLFxuICBpdm9yeTogMHhmZmZmZjAsXG4gIGtoYWtpOiAweGYwZTY4YyxcbiAgbGF2ZW5kZXI6IDB4ZTZlNmZhLFxuICBsYXZlbmRlcmJsdXNoOiAweGZmZjBmNSxcbiAgbGF3bmdyZWVuOiAweDdjZmMwMCxcbiAgbGVtb25jaGlmZm9uOiAweGZmZmFjZCxcbiAgbGlnaHRibHVlOiAweGFkZDhlNixcbiAgbGlnaHRjb3JhbDogMHhmMDgwODAsXG4gIGxpZ2h0Y3lhbjogMHhlMGZmZmYsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiAweGZhZmFkMixcbiAgbGlnaHRncmF5OiAweGQzZDNkMyxcbiAgbGlnaHRncmVlbjogMHg5MGVlOTAsXG4gIGxpZ2h0Z3JleTogMHhkM2QzZDMsXG4gIGxpZ2h0cGluazogMHhmZmI2YzEsXG4gIGxpZ2h0c2FsbW9uOiAweGZmYTA3YSxcbiAgbGlnaHRzZWFncmVlbjogMHgyMGIyYWEsXG4gIGxpZ2h0c2t5Ymx1ZTogMHg4N2NlZmEsXG4gIGxpZ2h0c2xhdGVncmF5OiAweDc3ODg5OSxcbiAgbGlnaHRzbGF0ZWdyZXk6IDB4Nzc4ODk5LFxuICBsaWdodHN0ZWVsYmx1ZTogMHhiMGM0ZGUsXG4gIGxpZ2h0eWVsbG93OiAweGZmZmZlMCxcbiAgbGltZTogMHgwMGZmMDAsXG4gIGxpbWVncmVlbjogMHgzMmNkMzIsXG4gIGxpbmVuOiAweGZhZjBlNixcbiAgbWFnZW50YTogMHhmZjAwZmYsXG4gIG1hcm9vbjogMHg4MDAwMDAsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IDB4NjZjZGFhLFxuICBtZWRpdW1ibHVlOiAweDAwMDBjZCxcbiAgbWVkaXVtb3JjaGlkOiAweGJhNTVkMyxcbiAgbWVkaXVtcHVycGxlOiAweDkzNzBkYixcbiAgbWVkaXVtc2VhZ3JlZW46IDB4M2NiMzcxLFxuICBtZWRpdW1zbGF0ZWJsdWU6IDB4N2I2OGVlLFxuICBtZWRpdW1zcHJpbmdncmVlbjogMHgwMGZhOWEsXG4gIG1lZGl1bXR1cnF1b2lzZTogMHg0OGQxY2MsXG4gIG1lZGl1bXZpb2xldHJlZDogMHhjNzE1ODUsXG4gIG1pZG5pZ2h0Ymx1ZTogMHgxOTE5NzAsXG4gIG1pbnRjcmVhbTogMHhmNWZmZmEsXG4gIG1pc3R5cm9zZTogMHhmZmU0ZTEsXG4gIG1vY2Nhc2luOiAweGZmZTRiNSxcbiAgbmF2YWpvd2hpdGU6IDB4ZmZkZWFkLFxuICBuYXZ5OiAweDAwMDA4MCxcbiAgb2xkbGFjZTogMHhmZGY1ZTYsXG4gIG9saXZlOiAweDgwODAwMCxcbiAgb2xpdmVkcmFiOiAweDZiOGUyMyxcbiAgb3JhbmdlOiAweGZmYTUwMCxcbiAgb3JhbmdlcmVkOiAweGZmNDUwMCxcbiAgb3JjaGlkOiAweGRhNzBkNixcbiAgcGFsZWdvbGRlbnJvZDogMHhlZWU4YWEsXG4gIHBhbGVncmVlbjogMHg5OGZiOTgsXG4gIHBhbGV0dXJxdW9pc2U6IDB4YWZlZWVlLFxuICBwYWxldmlvbGV0cmVkOiAweGRiNzA5MyxcbiAgcGFwYXlhd2hpcDogMHhmZmVmZDUsXG4gIHBlYWNocHVmZjogMHhmZmRhYjksXG4gIHBlcnU6IDB4Y2Q4NTNmLFxuICBwaW5rOiAweGZmYzBjYixcbiAgcGx1bTogMHhkZGEwZGQsXG4gIHBvd2RlcmJsdWU6IDB4YjBlMGU2LFxuICBwdXJwbGU6IDB4ODAwMDgwLFxuICByZWJlY2NhcHVycGxlOiAweDY2MzM5OSxcbiAgcmVkOiAweGZmMDAwMCxcbiAgcm9zeWJyb3duOiAweGJjOGY4ZixcbiAgcm95YWxibHVlOiAweDQxNjllMSxcbiAgc2FkZGxlYnJvd246IDB4OGI0NTEzLFxuICBzYWxtb246IDB4ZmE4MDcyLFxuICBzYW5keWJyb3duOiAweGY0YTQ2MCxcbiAgc2VhZ3JlZW46IDB4MmU4YjU3LFxuICBzZWFzaGVsbDogMHhmZmY1ZWUsXG4gIHNpZW5uYTogMHhhMDUyMmQsXG4gIHNpbHZlcjogMHhjMGMwYzAsXG4gIHNreWJsdWU6IDB4ODdjZWViLFxuICBzbGF0ZWJsdWU6IDB4NmE1YWNkLFxuICBzbGF0ZWdyYXk6IDB4NzA4MDkwLFxuICBzbGF0ZWdyZXk6IDB4NzA4MDkwLFxuICBzbm93OiAweGZmZmFmYSxcbiAgc3ByaW5nZ3JlZW46IDB4MDBmZjdmLFxuICBzdGVlbGJsdWU6IDB4NDY4MmI0LFxuICB0YW46IDB4ZDJiNDhjLFxuICB0ZWFsOiAweDAwODA4MCxcbiAgdGhpc3RsZTogMHhkOGJmZDgsXG4gIHRvbWF0bzogMHhmZjYzNDcsXG4gIHR1cnF1b2lzZTogMHg0MGUwZDAsXG4gIHZpb2xldDogMHhlZTgyZWUsXG4gIHdoZWF0OiAweGY1ZGViMyxcbiAgd2hpdGU6IDB4ZmZmZmZmLFxuICB3aGl0ZXNtb2tlOiAweGY1ZjVmNSxcbiAgeWVsbG93OiAweGZmZmYwMCxcbiAgeWVsbG93Z3JlZW46IDB4OWFjZDMyXG59O1xuXG5kZWZpbmUoQ29sb3IsIGNvbG9yLCB7XG4gIGNvcHkoY2hhbm5lbHMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3RvciwgdGhpcywgY2hhbm5lbHMpO1xuICB9LFxuICBkaXNwbGF5YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGNvbG9yX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiBjb2xvcl9mb3JtYXRIZXgsXG4gIGZvcm1hdEhleDg6IGNvbG9yX2Zvcm1hdEhleDgsXG4gIGZvcm1hdEhzbDogY29sb3JfZm9ybWF0SHNsLFxuICBmb3JtYXRSZ2I6IGNvbG9yX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IGNvbG9yX2Zvcm1hdFJnYlxufSk7XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleDgoKSB7XG4gIHJldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0SHNsKCkge1xuICByZXR1cm4gaHNsQ29udmVydCh0aGlzKS5mb3JtYXRIc2woKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0UmdiKCkge1xuICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3IoZm9ybWF0KSB7XG4gIHZhciBtLCBsO1xuICBmb3JtYXQgPSAoZm9ybWF0ICsgXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAobSA9IHJlSGV4LmV4ZWMoZm9ybWF0KSkgPyAobCA9IG1bMV0ubGVuZ3RoLCBtID0gcGFyc2VJbnQobVsxXSwgMTYpLCBsID09PSA2ID8gcmdibihtKSAvLyAjZmYwMDAwXG4gICAgICA6IGwgPT09IDMgPyBuZXcgUmdiKChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZiksIDEpIC8vICNmMDBcbiAgICAgIDogbCA9PT0gOCA/IHJnYmEobSA+PiAyNCAmIDB4ZmYsIG0gPj4gMTYgJiAweGZmLCBtID4+IDggJiAweGZmLCAobSAmIDB4ZmYpIC8gMHhmZikgLy8gI2ZmMDAwMDAwXG4gICAgICA6IGwgPT09IDQgPyByZ2JhKChtID4+IDEyICYgMHhmKSB8IChtID4+IDggJiAweGYwKSwgKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHhmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKCgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZikpIC8gMHhmZikgLy8gI2YwMDBcbiAgICAgIDogbnVsbCkgLy8gaW52YWxpZCBoZXhcbiAgICAgIDogKG0gPSByZVJnYkludGVnZXIuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSwgbVsyXSwgbVszXSwgMSkgLy8gcmdiKDI1NSwgMCwgMClcbiAgICAgIDogKG0gPSByZVJnYlBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgMSkgLy8gcmdiKDEwMCUsIDAlLCAwJSlcbiAgICAgIDogKG0gPSByZVJnYmFJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0sIG1bMl0sIG1bM10sIG1bNF0pIC8vIHJnYmEoMjU1LCAwLCAwLCAxKVxuICAgICAgOiAobSA9IHJlUmdiYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgbVs0XSkgLy8gcmdiKDEwMCUsIDAlLCAwJSwgMSlcbiAgICAgIDogKG0gPSByZUhzbFBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgMSkgLy8gaHNsKDEyMCwgNTAlLCA1MCUpXG4gICAgICA6IChtID0gcmVIc2xhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCBtWzRdKSAvLyBoc2xhKDEyMCwgNTAlLCA1MCUsIDEpXG4gICAgICA6IG5hbWVkLmhhc093blByb3BlcnR5KGZvcm1hdCkgPyByZ2JuKG5hbWVkW2Zvcm1hdF0pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICA6IGZvcm1hdCA9PT0gXCJ0cmFuc3BhcmVudFwiID8gbmV3IFJnYihOYU4sIE5hTiwgTmFOLCAwKVxuICAgICAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiByZ2JuKG4pIHtcbiAgcmV0dXJuIG5ldyBSZ2IobiA+PiAxNiAmIDB4ZmYsIG4gPj4gOCAmIDB4ZmYsIG4gJiAweGZmLCAxKTtcbn1cblxuZnVuY3Rpb24gcmdiYShyLCBnLCBiLCBhKSB7XG4gIGlmIChhIDw9IDApIHIgPSBnID0gYiA9IE5hTjtcbiAgcmV0dXJuIG5ldyBSZ2IociwgZywgYiwgYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2JDb252ZXJ0KG8pIHtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgUmdiO1xuICBvID0gby5yZ2IoKTtcbiAgcmV0dXJuIG5ldyBSZ2Ioby5yLCBvLmcsIG8uYiwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gcmdiQ29udmVydChyKSA6IG5ldyBSZ2IociwgZywgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgdGhpcy5yID0gK3I7XG4gIHRoaXMuZyA9ICtnO1xuICB0aGlzLmIgPSArYjtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShSZ2IsIHJnYiwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2IoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGNsYW1wKCkge1xuICAgIHJldHVybiBuZXcgUmdiKGNsYW1waSh0aGlzLnIpLCBjbGFtcGkodGhpcy5nKSwgY2xhbXBpKHRoaXMuYiksIGNsYW1wYSh0aGlzLm9wYWNpdHkpKTtcbiAgfSxcbiAgZGlzcGxheWFibGUoKSB7XG4gICAgcmV0dXJuICgtMC41IDw9IHRoaXMuciAmJiB0aGlzLnIgPCAyNTUuNSlcbiAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5nICYmIHRoaXMuZyA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmIgJiYgdGhpcy5iIDwgMjU1LjUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIGhleDogcmdiX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiByZ2JfZm9ybWF0SGV4LFxuICBmb3JtYXRIZXg4OiByZ2JfZm9ybWF0SGV4OCxcbiAgZm9ybWF0UmdiOiByZ2JfZm9ybWF0UmdiLFxuICB0b1N0cmluZzogcmdiX2Zvcm1hdFJnYlxufSkpO1xuXG5mdW5jdGlvbiByZ2JfZm9ybWF0SGV4KCkge1xuICByZXR1cm4gYCMke2hleCh0aGlzLnIpfSR7aGV4KHRoaXMuZyl9JHtoZXgodGhpcy5iKX1gO1xufVxuXG5mdW5jdGlvbiByZ2JfZm9ybWF0SGV4OCgpIHtcbiAgcmV0dXJuIGAjJHtoZXgodGhpcy5yKX0ke2hleCh0aGlzLmcpfSR7aGV4KHRoaXMuYil9JHtoZXgoKGlzTmFOKHRoaXMub3BhY2l0eSkgPyAxIDogdGhpcy5vcGFjaXR5KSAqIDI1NSl9YDtcbn1cblxuZnVuY3Rpb24gcmdiX2Zvcm1hdFJnYigpIHtcbiAgY29uc3QgYSA9IGNsYW1wYSh0aGlzLm9wYWNpdHkpO1xuICByZXR1cm4gYCR7YSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwifSR7Y2xhbXBpKHRoaXMucil9LCAke2NsYW1waSh0aGlzLmcpfSwgJHtjbGFtcGkodGhpcy5iKX0ke2EgPT09IDEgPyBcIilcIiA6IGAsICR7YX0pYH1gO1xufVxuXG5mdW5jdGlvbiBjbGFtcGEob3BhY2l0eSkge1xuICByZXR1cm4gaXNOYU4ob3BhY2l0eSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgb3BhY2l0eSkpO1xufVxuXG5mdW5jdGlvbiBjbGFtcGkodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh2YWx1ZSkgfHwgMCkpO1xufVxuXG5mdW5jdGlvbiBoZXgodmFsdWUpIHtcbiAgdmFsdWUgPSBjbGFtcGkodmFsdWUpO1xuICByZXR1cm4gKHZhbHVlIDwgMTYgPyBcIjBcIiA6IFwiXCIpICsgdmFsdWUudG9TdHJpbmcoMTYpO1xufVxuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgSHNsO1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XG4gIG8gPSBvLnJnYigpO1xuICB2YXIgciA9IG8uciAvIDI1NSxcbiAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICBiID0gby5iIC8gMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGggPSBOYU4sXG4gICAgICBzID0gbWF4IC0gbWluLFxuICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKHMpIHtcbiAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjtcbiAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XG4gICAgZWxzZSBoID0gKHIgLSBnKSAvIHMgKyA0O1xuICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47XG4gICAgaCAqPSA2MDtcbiAgfSBlbHNlIHtcbiAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDtcbiAgfVxuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoc2xDb252ZXJ0KGgpIDogbmV3IEhzbChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIEhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSHNsLCBoc2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXIoaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2IoKSB7XG4gICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsXG4gICAgICAgIHMgPSBpc05hTihoKSB8fCBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyxcbiAgICAgICAgbCA9IHRoaXMubCxcbiAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcyxcbiAgICAgICAgbTEgPSAyICogbCAtIG0yO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoIDwgMTIwID8gaCArIDI0MCA6IGggLSAxMjAsIG0xLCBtMiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9LFxuICBjbGFtcCgpIHtcbiAgICByZXR1cm4gbmV3IEhzbChjbGFtcGgodGhpcy5oKSwgY2xhbXB0KHRoaXMucyksIGNsYW1wdCh0aGlzLmwpLCBjbGFtcGEodGhpcy5vcGFjaXR5KSk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlKCkge1xuICAgIHJldHVybiAoMCA8PSB0aGlzLnMgJiYgdGhpcy5zIDw9IDEgfHwgaXNOYU4odGhpcy5zKSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5sICYmIHRoaXMubCA8PSAxKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBmb3JtYXRIc2woKSB7XG4gICAgY29uc3QgYSA9IGNsYW1wYSh0aGlzLm9wYWNpdHkpO1xuICAgIHJldHVybiBgJHthID09PSAxID8gXCJoc2woXCIgOiBcImhzbGEoXCJ9JHtjbGFtcGgodGhpcy5oKX0sICR7Y2xhbXB0KHRoaXMucykgKiAxMDB9JSwgJHtjbGFtcHQodGhpcy5sKSAqIDEwMH0lJHthID09PSAxID8gXCIpXCIgOiBgLCAke2F9KWB9YDtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiBjbGFtcGgodmFsdWUpIHtcbiAgdmFsdWUgPSAodmFsdWUgfHwgMCkgJSAzNjA7XG4gIHJldHVybiB2YWx1ZSA8IDAgPyB2YWx1ZSArIDM2MCA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjbGFtcHQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHZhbHVlIHx8IDApKTtcbn1cblxuLyogRnJvbSBGdkQgMTMuMzcsIENTUyBDb2xvciBNb2R1bGUgTGV2ZWwgMyAqL1xuZnVuY3Rpb24gaHNsMnJnYihoLCBtMSwgbTIpIHtcbiAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxuICAgICAgOiBoIDwgMTgwID8gbTJcbiAgICAgIDogaCA8IDI0MCA/IG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjBcbiAgICAgIDogbTEpICogMjU1O1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2hlciBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2UuanNcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob25lbnRlciwgb251cGRhdGUsIG9uZXhpdCkge1xuICB2YXIgZW50ZXIgPSB0aGlzLmVudGVyKCksIHVwZGF0ZSA9IHRoaXMsIGV4aXQgPSB0aGlzLmV4aXQoKTtcbiAgaWYgKHR5cGVvZiBvbmVudGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBlbnRlciA9IG9uZW50ZXIoZW50ZXIpO1xuICAgIGlmIChlbnRlcikgZW50ZXIgPSBlbnRlci5zZWxlY3Rpb24oKTtcbiAgfSBlbHNlIHtcbiAgICBlbnRlciA9IGVudGVyLmFwcGVuZChvbmVudGVyICsgXCJcIik7XG4gIH1cbiAgaWYgKG9udXBkYXRlICE9IG51bGwpIHtcbiAgICB1cGRhdGUgPSBvbnVwZGF0ZSh1cGRhdGUpO1xuICAgIGlmICh1cGRhdGUpIHVwZGF0ZSA9IHVwZGF0ZS5zZWxlY3Rpb24oKTtcbiAgfVxuICBpZiAob25leGl0ID09IG51bGwpIGV4aXQucmVtb3ZlKCk7IGVsc2Ugb25leGl0KGV4aXQpO1xuICByZXR1cm4gZW50ZXIgJiYgdXBkYXRlID8gZW50ZXIubWVyZ2UodXBkYXRlKS5vcmRlcigpIDogdXBkYXRlO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQ7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHNlbGVjdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gLTEsIG0gPSBncm91cHMubGVuZ3RoOyArK2ogPCBtOykge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gZ3JvdXAubGVuZ3RoIC0gMSwgbmV4dCA9IGdyb3VwW2ldLCBub2RlOyAtLWkgPj0gMDspIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgaWYgKG5leHQgJiYgbm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuZXh0KSBeIDQpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1swXTtcbiAgYXJndW1lbnRzWzBdID0gdGhpcztcbiAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20odGhpcyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIG5vZGUgPSBncm91cFtpXTtcbiAgICAgIGlmIChub2RlKSByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICBsZXQgc2l6ZSA9IDA7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzKSArK3NpemU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcmV0dXJuIHNpemU7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICF0aGlzLm5vZGUoKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIGNhbGxiYWNrLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgIDogdGhpcy5ub2RlKCkuX19kYXRhX187XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiooKSB7XG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB5aWVsZCBub2RlO1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJhZGlhbnMgPSBNYXRoLlBJIC8gMTgwO1xuZXhwb3J0IGNvbnN0IGRlZ3JlZXMgPSAxODAgLyBNYXRoLlBJO1xuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2J9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5pbXBvcnQge2RlZ3JlZXMsIHJhZGlhbnN9IGZyb20gXCIuL21hdGguanNcIjtcblxuLy8gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BtYm9zdG9jay9sYWItYW5kLXJnYlxuY29uc3QgSyA9IDE4LFxuICAgIFhuID0gMC45NjQyMixcbiAgICBZbiA9IDEsXG4gICAgWm4gPSAwLjgyNTIxLFxuICAgIHQwID0gNCAvIDI5LFxuICAgIHQxID0gNiAvIDI5LFxuICAgIHQyID0gMyAqIHQxICogdDEsXG4gICAgdDMgPSB0MSAqIHQxICogdDE7XG5cbmZ1bmN0aW9uIGxhYkNvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIExhYikgcmV0dXJuIG5ldyBMYWIoby5sLCBvLmEsIG8uYiwgby5vcGFjaXR5KTtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHJldHVybiBoY2wybGFiKG8pO1xuICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XG4gIHZhciByID0gcmdiMmxyZ2Ioby5yKSxcbiAgICAgIGcgPSByZ2IybHJnYihvLmcpLFxuICAgICAgYiA9IHJnYjJscmdiKG8uYiksXG4gICAgICB5ID0geHl6MmxhYigoMC4yMjI1MDQ1ICogciArIDAuNzE2ODc4NiAqIGcgKyAwLjA2MDYxNjkgKiBiKSAvIFluKSwgeCwgejtcbiAgaWYgKHIgPT09IGcgJiYgZyA9PT0gYikgeCA9IHogPSB5OyBlbHNlIHtcbiAgICB4ID0geHl6MmxhYigoMC40MzYwNzQ3ICogciArIDAuMzg1MDY0OSAqIGcgKyAwLjE0MzA4MDQgKiBiKSAvIFhuKTtcbiAgICB6ID0geHl6MmxhYigoMC4wMTM5MzIyICogciArIDAuMDk3MTA0NSAqIGcgKyAwLjcxNDE3MzMgKiBiKSAvIFpuKTtcbiAgfVxuICByZXR1cm4gbmV3IExhYigxMTYgKiB5IC0gMTYsIDUwMCAqICh4IC0geSksIDIwMCAqICh5IC0geiksIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncmF5KGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIG5ldyBMYWIobCwgMCwgMCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGxhYkNvbnZlcnQobCkgOiBuZXcgTGFiKGwsIGEsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIExhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLmEgPSArYTtcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoTGFiLCBsYWIsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcihrKSB7XG4gICAgcmV0dXJuIG5ldyBMYWIodGhpcy5sICsgSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXIoaykge1xuICAgIHJldHVybiBuZXcgTGFiKHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiKCkge1xuICAgIHZhciB5ID0gKHRoaXMubCArIDE2KSAvIDExNixcbiAgICAgICAgeCA9IGlzTmFOKHRoaXMuYSkgPyB5IDogeSArIHRoaXMuYSAvIDUwMCxcbiAgICAgICAgeiA9IGlzTmFOKHRoaXMuYikgPyB5IDogeSAtIHRoaXMuYiAvIDIwMDtcbiAgICB4ID0gWG4gKiBsYWIyeHl6KHgpO1xuICAgIHkgPSBZbiAqIGxhYjJ4eXooeSk7XG4gICAgeiA9IFpuICogbGFiMnh5eih6KTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIGxyZ2IycmdiKCAzLjEzMzg1NjEgKiB4IC0gMS42MTY4NjY3ICogeSAtIDAuNDkwNjE0NiAqIHopLFxuICAgICAgbHJnYjJyZ2IoLTAuOTc4NzY4NCAqIHggKyAxLjkxNjE0MTUgKiB5ICsgMC4wMzM0NTQwICogeiksXG4gICAgICBscmdiMnJnYiggMC4wNzE5NDUzICogeCAtIDAuMjI4OTkxNCAqIHkgKyAxLjQwNTI0MjcgKiB6KSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcblxuZnVuY3Rpb24geHl6MmxhYih0KSB7XG4gIHJldHVybiB0ID4gdDMgPyBNYXRoLnBvdyh0LCAxIC8gMykgOiB0IC8gdDIgKyB0MDtcbn1cblxuZnVuY3Rpb24gbGFiMnh5eih0KSB7XG4gIHJldHVybiB0ID4gdDEgPyB0ICogdCAqIHQgOiB0MiAqICh0IC0gdDApO1xufVxuXG5mdW5jdGlvbiBscmdiMnJnYih4KSB7XG4gIHJldHVybiAyNTUgKiAoeCA8PSAwLjAwMzEzMDggPyAxMi45MiAqIHggOiAxLjA1NSAqIE1hdGgucG93KHgsIDEgLyAyLjQpIC0gMC4wNTUpO1xufVxuXG5mdW5jdGlvbiByZ2IybHJnYih4KSB7XG4gIHJldHVybiAoeCAvPSAyNTUpIDw9IDAuMDQwNDUgPyB4IC8gMTIuOTIgOiBNYXRoLnBvdygoeCArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufVxuXG5mdW5jdGlvbiBoY2xDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHJldHVybiBuZXcgSGNsKG8uaCwgby5jLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBMYWIpKSBvID0gbGFiQ29udmVydChvKTtcbiAgaWYgKG8uYSA9PT0gMCAmJiBvLmIgPT09IDApIHJldHVybiBuZXcgSGNsKE5hTiwgMCA8IG8ubCAmJiBvLmwgPCAxMDAgPyAwIDogTmFOLCBvLmwsIG8ub3BhY2l0eSk7XG4gIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiBkZWdyZWVzO1xuICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGNoKGwsIGMsIGgsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGwpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLmMgPSArYztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5mdW5jdGlvbiBoY2wybGFiKG8pIHtcbiAgaWYgKGlzTmFOKG8uaCkpIHJldHVybiBuZXcgTGFiKG8ubCwgMCwgMCwgby5vcGFjaXR5KTtcbiAgdmFyIGggPSBvLmggKiByYWRpYW5zO1xuICByZXR1cm4gbmV3IExhYihvLmwsIE1hdGguY29zKGgpICogby5jLCBNYXRoLnNpbihoKSAqIG8uYywgby5vcGFjaXR5KTtcbn1cblxuZGVmaW5lKEhjbCwgaGNsLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXIoaykge1xuICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sIC0gSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYigpIHtcbiAgICByZXR1cm4gaGNsMmxhYih0aGlzKS5yZ2IoKTtcbiAgfVxufSkpO1xuIiwiZXhwb3J0IGRlZmF1bHQgeCA9PiAoKSA9PiB4O1xuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5cbmZ1bmN0aW9uIGxpbmVhcihhLCBkKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKyB0ICogZDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXhwb25lbnRpYWwoYSwgYiwgeSkge1xuICByZXR1cm4gYSA9IE1hdGgucG93KGEsIHkpLCBiID0gTWF0aC5wb3coYiwgeSkgLSBhLCB5ID0gMSAvIHksIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coYSArIHQgKiBiLCB5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh1ZShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQgPiAxODAgfHwgZCA8IC0xODAgPyBkIC0gMzYwICogTWF0aC5yb3VuZChkIC8gMzYwKSA6IGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnYW1tYSh5KSB7XG4gIHJldHVybiAoeSA9ICt5KSA9PT0gMSA/IG5vZ2FtbWEgOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIgLSBhID8gZXhwb25lbnRpYWwoYSwgYiwgeSkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9nYW1tYShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG4iLCJpbXBvcnQge3JnYiBhcyBjb2xvclJnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgYmFzaXMgZnJvbSBcIi4vYmFzaXMuanNcIjtcbmltcG9ydCBiYXNpc0Nsb3NlZCBmcm9tIFwiLi9iYXNpc0Nsb3NlZC5qc1wiO1xuaW1wb3J0IG5vZ2FtbWEsIHtnYW1tYX0gZnJvbSBcIi4vY29sb3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHJnYkdhbW1hKHkpIHtcbiAgdmFyIGNvbG9yID0gZ2FtbWEoeSk7XG5cbiAgZnVuY3Rpb24gcmdiKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IGNvbG9yKChzdGFydCA9IGNvbG9yUmdiKHN0YXJ0KSkuciwgKGVuZCA9IGNvbG9yUmdiKGVuZCkpLnIpLFxuICAgICAgICBnID0gY29sb3Ioc3RhcnQuZywgZW5kLmcpLFxuICAgICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LnIgPSByKHQpO1xuICAgICAgc3RhcnQuZyA9IGcodCk7XG4gICAgICBzdGFydC5iID0gYih0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG5cbiAgcmdiLmdhbW1hID0gcmdiR2FtbWE7XG5cbiAgcmV0dXJuIHJnYjtcbn0pKDEpO1xuXG5mdW5jdGlvbiByZ2JTcGxpbmUoc3BsaW5lKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xvcnMpIHtcbiAgICB2YXIgbiA9IGNvbG9ycy5sZW5ndGgsXG4gICAgICAgIHIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGcgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGksIGNvbG9yO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbG9yID0gY29sb3JSZ2IoY29sb3JzW2ldKTtcbiAgICAgIHJbaV0gPSBjb2xvci5yIHx8IDA7XG4gICAgICBnW2ldID0gY29sb3IuZyB8fCAwO1xuICAgICAgYltpXSA9IGNvbG9yLmIgfHwgMDtcbiAgICB9XG4gICAgciA9IHNwbGluZShyKTtcbiAgICBnID0gc3BsaW5lKGcpO1xuICAgIGIgPSBzcGxpbmUoYik7XG4gICAgY29sb3Iub3BhY2l0eSA9IDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGNvbG9yLnIgPSByKHQpO1xuICAgICAgY29sb3IuZyA9IGcodCk7XG4gICAgICBjb2xvci5iID0gYih0KTtcbiAgICAgIHJldHVybiBjb2xvciArIFwiXCI7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciByZ2JCYXNpcyA9IHJnYlNwbGluZShiYXNpcyk7XG5leHBvcnQgdmFyIHJnYkJhc2lzQ2xvc2VkID0gcmdiU3BsaW5lKGJhc2lzQ2xvc2VkKTtcbiIsImV4cG9ydCBmdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQgPD0gMCA/ICh0ID0gMCkgOiB0ID49IDEgPyAodCA9IDEsIG4gLSAxKSA6IE1hdGguZmxvb3IodCAqIG4pLFxuICAgICAgICB2MSA9IHZhbHVlc1tpXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLFxuICAgICAgICB2MCA9IGkgPiAwID8gdmFsdWVzW2kgLSAxXSA6IDIgKiB2MSAtIHYyLFxuICAgICAgICB2MyA9IGkgPCBuIC0gMSA/IHZhbHVlc1tpICsgMl0gOiAyICogdjIgLSB2MTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIGlmICghYikgYiA9IFtdO1xuICB2YXIgbiA9IGEgPyBNYXRoLm1pbihiLmxlbmd0aCwgYS5sZW5ndGgpIDogMCxcbiAgICAgIGMgPSBiLnNsaWNlKCksXG4gICAgICBpO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNbaV0gPSBhW2ldICogKDEgLSB0KSArIGJbaV0gKiB0O1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJBcnJheSh4KSB7XG4gIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoeCkgJiYgISh4IGluc3RhbmNlb2YgRGF0YVZpZXcpO1xufVxuIiwiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5pbXBvcnQgbnVtYmVyQXJyYXksIHtpc051bWJlckFycmF5fSBmcm9tIFwiLi9udW1iZXJBcnJheS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiAoaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5IDogZ2VuZXJpY0FycmF5KShhLCBiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyaWNBcnJheShhLCBiKSB7XG4gIHZhciBuYiA9IGIgPyBiLmxlbmd0aCA6IDAsXG4gICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCxcbiAgICAgIHggPSBuZXcgQXJyYXkobmEpLFxuICAgICAgYyA9IG5ldyBBcnJheShuYiksXG4gICAgICBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSB4W2ldID0gdmFsdWUoYVtpXSwgYltpXSk7XG4gIGZvciAoOyBpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgY1tpXSA9IHhbaV0odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBkID0gbmV3IERhdGU7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBkLnNldFRpbWUoYSAqICgxIC0gdCkgKyBiICogdCksIGQ7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICogKDEgLSB0KSArIGIgKiB0O1xuICB9O1xufVxuIiwiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGkgPSB7fSxcbiAgICAgIGMgPSB7fSxcbiAgICAgIGs7XG5cbiAgaWYgKGEgPT09IG51bGwgfHwgdHlwZW9mIGEgIT09IFwib2JqZWN0XCIpIGEgPSB7fTtcbiAgaWYgKGIgPT09IG51bGwgfHwgdHlwZW9mIGIgIT09IFwib2JqZWN0XCIpIGIgPSB7fTtcblxuICBmb3IgKGsgaW4gYikge1xuICAgIGlmIChrIGluIGEpIHtcbiAgICAgIGlba10gPSB2YWx1ZShhW2tdLCBiW2tdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY1trXSA9IGJba107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGsgaW4gaSkgY1trXSA9IGlba10odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG52YXIgcmVBID0gL1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFxuICAgIHJlQiA9IG5ldyBSZWdFeHAocmVBLnNvdXJjZSwgXCJnXCIpO1xuXG5mdW5jdGlvbiB6ZXJvKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbmUoYikge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBiKHQpICsgXCJcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYmkgPSByZUEubGFzdEluZGV4ID0gcmVCLmxhc3RJbmRleCA9IDAsIC8vIHNjYW4gaW5kZXggZm9yIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGFtLCAvLyBjdXJyZW50IG1hdGNoIGluIGFcbiAgICAgIGJtLCAvLyBjdXJyZW50IG1hdGNoIGluIGJcbiAgICAgIGJzLCAvLyBzdHJpbmcgcHJlY2VkaW5nIGN1cnJlbnQgbnVtYmVyIGluIGIsIGlmIGFueVxuICAgICAgaSA9IC0xLCAvLyBpbmRleCBpbiBzXG4gICAgICBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuXG4gIC8vIENvZXJjZSBpbnB1dHMgdG8gc3RyaW5ncy5cbiAgYSA9IGEgKyBcIlwiLCBiID0gYiArIFwiXCI7XG5cbiAgLy8gSW50ZXJwb2xhdGUgcGFpcnMgb2YgbnVtYmVycyBpbiBhICYgYi5cbiAgd2hpbGUgKChhbSA9IHJlQS5leGVjKGEpKVxuICAgICAgJiYgKGJtID0gcmVCLmV4ZWMoYikpKSB7XG4gICAgaWYgKChicyA9IGJtLmluZGV4KSA+IGJpKSB7IC8vIGEgc3RyaW5nIHByZWNlZGVzIHRoZSBuZXh0IG51bWJlciBpbiBiXG4gICAgICBicyA9IGIuc2xpY2UoYmksIGJzKTtcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBicztcbiAgICB9XG4gICAgaWYgKChhbSA9IGFtWzBdKSA9PT0gKGJtID0gYm1bMF0pKSB7IC8vIG51bWJlcnMgaW4gYSAmIGIgbWF0Y2hcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJtOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBibTtcbiAgICB9IGVsc2UgeyAvLyBpbnRlcnBvbGF0ZSBub24tbWF0Y2hpbmcgbnVtYmVyc1xuICAgICAgc1srK2ldID0gbnVsbDtcbiAgICAgIHEucHVzaCh7aTogaSwgeDogbnVtYmVyKGFtLCBibSl9KTtcbiAgICB9XG4gICAgYmkgPSByZUIubGFzdEluZGV4O1xuICB9XG5cbiAgLy8gQWRkIHJlbWFpbnMgb2YgYi5cbiAgaWYgKGJpIDwgYi5sZW5ndGgpIHtcbiAgICBicyA9IGIuc2xpY2UoYmkpO1xuICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gIH1cblxuICAvLyBTcGVjaWFsIG9wdGltaXphdGlvbiBmb3Igb25seSBhIHNpbmdsZSBtYXRjaC5cbiAgLy8gT3RoZXJ3aXNlLCBpbnRlcnBvbGF0ZSBlYWNoIG9mIHRoZSBudW1iZXJzIGFuZCByZWpvaW4gdGhlIHN0cmluZy5cbiAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/IChxWzBdXG4gICAgICA/IG9uZShxWzBdLngpXG4gICAgICA6IHplcm8oYikpXG4gICAgICA6IChiID0gcS5sZW5ndGgsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbzsgaSA8IGI7ICsraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgICAgIH0pO1xufVxuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgcmdiIGZyb20gXCIuL3JnYi5qc1wiO1xuaW1wb3J0IHtnZW5lcmljQXJyYXl9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgZGF0ZSBmcm9tIFwiLi9kYXRlLmpzXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuaW1wb3J0IG9iamVjdCBmcm9tIFwiLi9vYmplY3QuanNcIjtcbmltcG9ydCBzdHJpbmcgZnJvbSBcIi4vc3RyaW5nLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXJBcnJheSwge2lzTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgYiwgYztcbiAgcmV0dXJuIGIgPT0gbnVsbCB8fCB0ID09PSBcImJvb2xlYW5cIiA/IGNvbnN0YW50KGIpXG4gICAgICA6ICh0ID09PSBcIm51bWJlclwiID8gbnVtYmVyXG4gICAgICA6IHQgPT09IFwic3RyaW5nXCIgPyAoKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIHJnYikgOiBzdHJpbmcpXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IHJnYlxuICAgICAgOiBiIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVcbiAgICAgIDogaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5XG4gICAgICA6IEFycmF5LmlzQXJyYXkoYikgPyBnZW5lcmljQXJyYXlcbiAgICAgIDogdHlwZW9mIGIudmFsdWVPZiAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBiLnRvU3RyaW5nICE9PSBcImZ1bmN0aW9uXCIgfHwgaXNOYU4oYikgPyBvYmplY3RcbiAgICAgIDogbnVtYmVyKShhLCBiKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSAqICgxIC0gdCkgKyBiICogdCk7XG4gIH07XG59XG4iLCJ2YXIgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG5cbmV4cG9ydCB2YXIgaWRlbnRpdHkgPSB7XG4gIHRyYW5zbGF0ZVg6IDAsXG4gIHRyYW5zbGF0ZVk6IDAsXG4gIHJvdGF0ZTogMCxcbiAgc2tld1g6IDAsXG4gIHNjYWxlWDogMSxcbiAgc2NhbGVZOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBzY2FsZVgsIHNjYWxlWSwgc2tld1g7XG4gIGlmIChzY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYikpIGEgLz0gc2NhbGVYLCBiIC89IHNjYWxlWDtcbiAgaWYgKHNrZXdYID0gYSAqIGMgKyBiICogZCkgYyAtPSBhICogc2tld1gsIGQgLT0gYiAqIHNrZXdYO1xuICBpZiAoc2NhbGVZID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpKSBjIC89IHNjYWxlWSwgZCAvPSBzY2FsZVksIHNrZXdYIC89IHNjYWxlWTtcbiAgaWYgKGEgKiBkIDwgYiAqIGMpIGEgPSAtYSwgYiA9IC1iLCBza2V3WCA9IC1za2V3WCwgc2NhbGVYID0gLXNjYWxlWDtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2xhdGVYOiBlLFxuICAgIHRyYW5zbGF0ZVk6IGYsXG4gICAgcm90YXRlOiBNYXRoLmF0YW4yKGIsIGEpICogZGVncmVlcyxcbiAgICBza2V3WDogTWF0aC5hdGFuKHNrZXdYKSAqIGRlZ3JlZXMsXG4gICAgc2NhbGVYOiBzY2FsZVgsXG4gICAgc2NhbGVZOiBzY2FsZVlcbiAgfTtcbn1cbiIsImltcG9ydCBkZWNvbXBvc2UsIHtpZGVudGl0eX0gZnJvbSBcIi4vZGVjb21wb3NlLmpzXCI7XG5cbnZhciBzdmdOb2RlO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ3NzKHZhbHVlKSB7XG4gIGNvbnN0IG0gPSBuZXcgKHR5cGVvZiBET01NYXRyaXggPT09IFwiZnVuY3Rpb25cIiA/IERPTU1hdHJpeCA6IFdlYktpdENTU01hdHJpeCkodmFsdWUgKyBcIlwiKTtcbiAgcmV0dXJuIG0uaXNJZGVudGl0eSA/IGlkZW50aXR5IDogZGVjb21wb3NlKG0uYSwgbS5iLCBtLmMsIG0uZCwgbS5lLCBtLmYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdmcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCFzdmdOb2RlKSBzdmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJnXCIpO1xuICBzdmdOb2RlLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCB2YWx1ZSk7XG4gIGlmICghKHZhbHVlID0gc3ZnTm9kZS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKSkgcmV0dXJuIGlkZW50aXR5O1xuICB2YWx1ZSA9IHZhbHVlLm1hdHJpeDtcbiAgcmV0dXJuIGRlY29tcG9zZSh2YWx1ZS5hLCB2YWx1ZS5iLCB2YWx1ZS5jLCB2YWx1ZS5kLCB2YWx1ZS5lLCB2YWx1ZS5mKTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4uL251bWJlci5qc1wiO1xuaW1wb3J0IHtwYXJzZUNzcywgcGFyc2VTdmd9IGZyb20gXCIuL3BhcnNlLmpzXCI7XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlLCBweENvbW1hLCBweFBhcmVuLCBkZWdQYXJlbikge1xuXG4gIGZ1bmN0aW9uIHBvcChzKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoID8gcy5wb3AoKSArIFwiIFwiIDogXCJcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChcInRyYW5zbGF0ZShcIiwgbnVsbCwgcHhDb21tYSwgbnVsbCwgcHhQYXJlbik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiIHx8IHliKSB7XG4gICAgICBzLnB1c2goXCJ0cmFuc2xhdGUoXCIgKyB4YiArIHB4Q29tbWEgKyB5YiArIHB4UGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJvdGF0ZShhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIGlmIChhIC0gYiA+IDE4MCkgYiArPSAzNjA7IGVsc2UgaWYgKGIgLSBhID4gMTgwKSBhICs9IDM2MDsgLy8gc2hvcnRlc3QgcGF0aFxuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBza2V3WChhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYWxlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIsIG51bGwsIFwiLFwiLCBudWxsLCBcIilcIik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiICE9PSAxIHx8IHliICE9PSAxKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiArIHhiICsgXCIsXCIgKyB5YiArIFwiKVwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG4gICAgYSA9IHBhcnNlKGEpLCBiID0gcGFyc2UoYik7XG4gICAgdHJhbnNsYXRlKGEudHJhbnNsYXRlWCwgYS50cmFuc2xhdGVZLCBiLnRyYW5zbGF0ZVgsIGIudHJhbnNsYXRlWSwgcywgcSk7XG4gICAgcm90YXRlKGEucm90YXRlLCBiLnJvdGF0ZSwgcywgcSk7XG4gICAgc2tld1goYS5za2V3WCwgYi5za2V3WCwgcywgcSk7XG4gICAgc2NhbGUoYS5zY2FsZVgsIGEuc2NhbGVZLCBiLnNjYWxlWCwgYi5zY2FsZVksIHMsIHEpO1xuICAgIGEgPSBiID0gbnVsbDsgLy8gZ2NcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIGkgPSAtMSwgbiA9IHEubGVuZ3RoLCBvO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlQ3NzLCBcInB4LCBcIiwgXCJweClcIiwgXCJkZWcpXCIpO1xuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlU3ZnLCBcIiwgXCIsIFwiKVwiLCBcIilcIik7XG4iLCJpbXBvcnQge2xhYiBhcyBjb2xvckxhYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IgZnJvbSBcIi4vY29sb3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFiKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGwgPSBjb2xvcigoc3RhcnQgPSBjb2xvckxhYihzdGFydCkpLmwsIChlbmQgPSBjb2xvckxhYihlbmQpKS5sKSxcbiAgICAgIGEgPSBjb2xvcihzdGFydC5hLCBlbmQuYSksXG4gICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBzdGFydC5sID0gbCh0KTtcbiAgICBzdGFydC5hID0gYSh0KTtcbiAgICBzdGFydC5iID0gYih0KTtcbiAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICB9O1xufVxuIiwidmFyIGZyYW1lID0gMCwgLy8gaXMgYW4gYW5pbWF0aW9uIGZyYW1lIHBlbmRpbmc/XG4gICAgdGltZW91dCA9IDAsIC8vIGlzIGEgdGltZW91dCBwZW5kaW5nP1xuICAgIGludGVydmFsID0gMCwgLy8gYXJlIGFueSB0aW1lcnMgYWN0aXZlP1xuICAgIHBva2VEZWxheSA9IDEwMDAsIC8vIGhvdyBmcmVxdWVudGx5IHdlIGNoZWNrIGZvciBjbG9jayBza2V3XG4gICAgdGFza0hlYWQsXG4gICAgdGFza1RhaWwsXG4gICAgY2xvY2tMYXN0ID0gMCxcbiAgICBjbG9ja05vdyA9IDAsXG4gICAgY2xvY2tTa2V3ID0gMCxcbiAgICBjbG9jayA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gXCJvYmplY3RcIiAmJiBwZXJmb3JtYW5jZS5ub3cgPyBwZXJmb3JtYW5jZSA6IERhdGUsXG4gICAgc2V0RnJhbWUgPSB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSA6IGZ1bmN0aW9uKGYpIHsgc2V0VGltZW91dChmLCAxNyk7IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBub3coKSB7XG4gIHJldHVybiBjbG9ja05vdyB8fCAoc2V0RnJhbWUoY2xlYXJOb3cpLCBjbG9ja05vdyA9IGNsb2NrLm5vdygpICsgY2xvY2tTa2V3KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJOb3coKSB7XG4gIGNsb2NrTm93ID0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVyKCkge1xuICB0aGlzLl9jYWxsID1cbiAgdGhpcy5fdGltZSA9XG4gIHRoaXMuX25leHQgPSBudWxsO1xufVxuXG5UaW1lci5wcm90b3R5cGUgPSB0aW1lci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUaW1lcixcbiAgcmVzdGFydDogZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb25cIik7XG4gICAgdGltZSA9ICh0aW1lID09IG51bGwgPyBub3coKSA6ICt0aW1lKSArIChkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheSk7XG4gICAgaWYgKCF0aGlzLl9uZXh0ICYmIHRhc2tUYWlsICE9PSB0aGlzKSB7XG4gICAgICBpZiAodGFza1RhaWwpIHRhc2tUYWlsLl9uZXh0ID0gdGhpcztcbiAgICAgIGVsc2UgdGFza0hlYWQgPSB0aGlzO1xuICAgICAgdGFza1RhaWwgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLl9jYWxsID0gY2FsbGJhY2s7XG4gICAgdGhpcy5fdGltZSA9IHRpbWU7XG4gICAgc2xlZXAoKTtcbiAgfSxcbiAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2NhbGwpIHtcbiAgICAgIHRoaXMuX2NhbGwgPSBudWxsO1xuICAgICAgdGhpcy5fdGltZSA9IEluZmluaXR5O1xuICAgICAgc2xlZXAoKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lcihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgdmFyIHQgPSBuZXcgVGltZXI7XG4gIHQucmVzdGFydChjYWxsYmFjaywgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyRmx1c2goKSB7XG4gIG5vdygpOyAvLyBHZXQgdGhlIGN1cnJlbnQgdGltZSwgaWYgbm90IGFscmVhZHkgc2V0LlxuICArK2ZyYW1lOyAvLyBQcmV0ZW5kIHdl4oCZdmUgc2V0IGFuIGFsYXJtLCBpZiB3ZSBoYXZlbuKAmXQgYWxyZWFkeS5cbiAgdmFyIHQgPSB0YXNrSGVhZCwgZTtcbiAgd2hpbGUgKHQpIHtcbiAgICBpZiAoKGUgPSBjbG9ja05vdyAtIHQuX3RpbWUpID49IDApIHQuX2NhbGwuY2FsbCh1bmRlZmluZWQsIGUpO1xuICAgIHQgPSB0Ll9uZXh0O1xuICB9XG4gIC0tZnJhbWU7XG59XG5cbmZ1bmN0aW9uIHdha2UoKSB7XG4gIGNsb2NrTm93ID0gKGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpKSArIGNsb2NrU2tldztcbiAgZnJhbWUgPSB0aW1lb3V0ID0gMDtcbiAgdHJ5IHtcbiAgICB0aW1lckZsdXNoKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWUgPSAwO1xuICAgIG5hcCgpO1xuICAgIGNsb2NrTm93ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2tlKCkge1xuICB2YXIgbm93ID0gY2xvY2subm93KCksIGRlbGF5ID0gbm93IC0gY2xvY2tMYXN0O1xuICBpZiAoZGVsYXkgPiBwb2tlRGVsYXkpIGNsb2NrU2tldyAtPSBkZWxheSwgY2xvY2tMYXN0ID0gbm93O1xufVxuXG5mdW5jdGlvbiBuYXAoKSB7XG4gIHZhciB0MCwgdDEgPSB0YXNrSGVhZCwgdDIsIHRpbWUgPSBJbmZpbml0eTtcbiAgd2hpbGUgKHQxKSB7XG4gICAgaWYgKHQxLl9jYWxsKSB7XG4gICAgICBpZiAodGltZSA+IHQxLl90aW1lKSB0aW1lID0gdDEuX3RpbWU7XG4gICAgICB0MCA9IHQxLCB0MSA9IHQxLl9uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0MiA9IHQxLl9uZXh0LCB0MS5fbmV4dCA9IG51bGw7XG4gICAgICB0MSA9IHQwID8gdDAuX25leHQgPSB0MiA6IHRhc2tIZWFkID0gdDI7XG4gICAgfVxuICB9XG4gIHRhc2tUYWlsID0gdDA7XG4gIHNsZWVwKHRpbWUpO1xufVxuXG5mdW5jdGlvbiBzbGVlcCh0aW1lKSB7XG4gIGlmIChmcmFtZSkgcmV0dXJuOyAvLyBTb29uZXN0IGFsYXJtIGFscmVhZHkgc2V0LCBvciB3aWxsIGJlLlxuICBpZiAodGltZW91dCkgdGltZW91dCA9IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgdmFyIGRlbGF5ID0gdGltZSAtIGNsb2NrTm93OyAvLyBTdHJpY3RseSBsZXNzIHRoYW4gaWYgd2UgcmVjb21wdXRlZCBjbG9ja05vdy5cbiAgaWYgKGRlbGF5ID4gMjQpIHtcbiAgICBpZiAodGltZSA8IEluZmluaXR5KSB0aW1lb3V0ID0gc2V0VGltZW91dCh3YWtlLCB0aW1lIC0gY2xvY2subm93KCkgLSBjbG9ja1NrZXcpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9jay5ub3coKSwgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7VGltZXJ9IGZyb20gXCIuL3RpbWVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgZGVsYXkgPSBkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheTtcbiAgdC5yZXN0YXJ0KGVsYXBzZWQgPT4ge1xuICAgIHQuc3RvcCgpO1xuICAgIGNhbGxiYWNrKGVsYXBzZWQgKyBkZWxheSk7XG4gIH0sIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7dGltZXIsIHRpbWVvdXR9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZW1wdHlPbiA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJlbmRcIiwgXCJjYW5jZWxcIiwgXCJpbnRlcnJ1cHRcIik7XG52YXIgZW1wdHlUd2VlbiA9IFtdO1xuXG5leHBvcnQgdmFyIENSRUFURUQgPSAwO1xuZXhwb3J0IHZhciBTQ0hFRFVMRUQgPSAxO1xuZXhwb3J0IHZhciBTVEFSVElORyA9IDI7XG5leHBvcnQgdmFyIFNUQVJURUQgPSAzO1xuZXhwb3J0IHZhciBSVU5OSU5HID0gNDtcbmV4cG9ydCB2YXIgRU5ESU5HID0gNTtcbmV4cG9ydCB2YXIgRU5ERUQgPSA2O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lLCBpZCwgaW5kZXgsIGdyb3VwLCB0aW1pbmcpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlcykgbm9kZS5fX3RyYW5zaXRpb24gPSB7fTtcbiAgZWxzZSBpZiAoaWQgaW4gc2NoZWR1bGVzKSByZXR1cm47XG4gIGNyZWF0ZShub2RlLCBpZCwge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgaW5kZXg6IGluZGV4LCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgZ3JvdXA6IGdyb3VwLCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgb246IGVtcHR5T24sXG4gICAgdHdlZW46IGVtcHR5VHdlZW4sXG4gICAgdGltZTogdGltaW5nLnRpbWUsXG4gICAgZGVsYXk6IHRpbWluZy5kZWxheSxcbiAgICBkdXJhdGlvbjogdGltaW5nLmR1cmF0aW9uLFxuICAgIGVhc2U6IHRpbWluZy5lYXNlLFxuICAgIHRpbWVyOiBudWxsLFxuICAgIHN0YXRlOiBDUkVBVEVEXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBDUkVBVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBTVEFSVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQobm9kZSwgaWQpIHtcbiAgdmFyIHNjaGVkdWxlID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGUgfHwgIShzY2hlZHVsZSA9IHNjaGVkdWxlW2lkXSkpIHRocm93IG5ldyBFcnJvcihcInRyYW5zaXRpb24gbm90IGZvdW5kXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZShub2RlLCBpZCwgc2VsZikge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb24sXG4gICAgICB0d2VlbjtcblxuICAvLyBJbml0aWFsaXplIHRoZSBzZWxmIHRpbWVyIHdoZW4gdGhlIHRyYW5zaXRpb24gaXMgY3JlYXRlZC5cbiAgLy8gTm90ZSB0aGUgYWN0dWFsIGRlbGF5IGlzIG5vdCBrbm93biB1bnRpbCB0aGUgZmlyc3QgY2FsbGJhY2shXG4gIHNjaGVkdWxlc1tpZF0gPSBzZWxmO1xuICBzZWxmLnRpbWVyID0gdGltZXIoc2NoZWR1bGUsIDAsIHNlbGYudGltZSk7XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUoZWxhcHNlZCkge1xuICAgIHNlbGYuc3RhdGUgPSBTQ0hFRFVMRUQ7XG4gICAgc2VsZi50aW1lci5yZXN0YXJ0KHN0YXJ0LCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuXG4gICAgLy8gSWYgdGhlIGVsYXBzZWQgZGVsYXkgaXMgbGVzcyB0aGFuIG91ciBmaXJzdCBzbGVlcCwgc3RhcnQgaW1tZWRpYXRlbHkuXG4gICAgaWYgKHNlbGYuZGVsYXkgPD0gZWxhcHNlZCkgc3RhcnQoZWxhcHNlZCAtIHNlbGYuZGVsYXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnQoZWxhcHNlZCkge1xuICAgIHZhciBpLCBqLCBuLCBvO1xuXG4gICAgLy8gSWYgdGhlIHN0YXRlIGlzIG5vdCBTQ0hFRFVMRUQsIHRoZW4gd2UgcHJldmlvdXNseSBlcnJvcmVkIG9uIHN0YXJ0LlxuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTQ0hFRFVMRUQpIHJldHVybiBzdG9wKCk7XG5cbiAgICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgICBvID0gc2NoZWR1bGVzW2ldO1xuICAgICAgaWYgKG8ubmFtZSAhPT0gc2VsZi5uYW1lKSBjb250aW51ZTtcblxuICAgICAgLy8gV2hpbGUgdGhpcyBlbGVtZW50IGFscmVhZHkgaGFzIGEgc3RhcnRpbmcgdHJhbnNpdGlvbiBkdXJpbmcgdGhpcyBmcmFtZSxcbiAgICAgIC8vIGRlZmVyIHN0YXJ0aW5nIGFuIGludGVycnVwdGluZyB0cmFuc2l0aW9uIHVudGlsIHRoYXQgdHJhbnNpdGlvbiBoYXMgYVxuICAgICAgLy8gY2hhbmNlIHRvIHRpY2sgKGFuZCBwb3NzaWJseSBlbmQpOyBzZWUgZDMvZDMtdHJhbnNpdGlvbiM1NCFcbiAgICAgIGlmIChvLnN0YXRlID09PSBTVEFSVEVEKSByZXR1cm4gdGltZW91dChzdGFydCk7XG5cbiAgICAgIC8vIEludGVycnVwdCB0aGUgYWN0aXZlIHRyYW5zaXRpb24sIGlmIGFueS5cbiAgICAgIGlmIChvLnN0YXRlID09PSBSVU5OSU5HKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImludGVycnVwdFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FuY2VsIGFueSBwcmUtZW1wdGVkIHRyYW5zaXRpb25zLlxuICAgICAgZWxzZSBpZiAoK2kgPCBpZCkge1xuICAgICAgICBvLnN0YXRlID0gRU5ERUQ7XG4gICAgICAgIG8udGltZXIuc3RvcCgpO1xuICAgICAgICBvLm9uLmNhbGwoXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgby5pbmRleCwgby5ncm91cCk7XG4gICAgICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVmZXIgdGhlIGZpcnN0IHRpY2sgdG8gZW5kIG9mIHRoZSBjdXJyZW50IGZyYW1lOyBzZWUgZDMvZDMjMTU3Ni5cbiAgICAvLyBOb3RlIHRoZSB0cmFuc2l0aW9uIG1heSBiZSBjYW5jZWxlZCBhZnRlciBzdGFydCBhbmQgYmVmb3JlIHRoZSBmaXJzdCB0aWNrIVxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIHNjaGVkdWxlZCBiZWZvcmUgdGhlIHN0YXJ0IGV2ZW50OyBzZWUgZDMvZDMtdHJhbnNpdGlvbiMxNiFcbiAgICAvLyBBc3N1bWluZyB0aGlzIGlzIHN1Y2Nlc3NmdWwsIHN1YnNlcXVlbnQgY2FsbGJhY2tzIGdvIHN0cmFpZ2h0IHRvIHRpY2suXG4gICAgdGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChzZWxmLnN0YXRlID09PSBTVEFSVEVEKSB7XG4gICAgICAgIHNlbGYuc3RhdGUgPSBSVU5OSU5HO1xuICAgICAgICBzZWxmLnRpbWVyLnJlc3RhcnQodGljaywgc2VsZi5kZWxheSwgc2VsZi50aW1lKTtcbiAgICAgICAgdGljayhlbGFwc2VkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIERpc3BhdGNoIHRoZSBzdGFydCBldmVudC5cbiAgICAvLyBOb3RlIHRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgdHdlZW4gYXJlIGluaXRpYWxpemVkLlxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVElORztcbiAgICBzZWxmLm9uLmNhbGwoXCJzdGFydFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKTtcbiAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gU1RBUlRJTkcpIHJldHVybjsgLy8gaW50ZXJydXB0ZWRcbiAgICBzZWxmLnN0YXRlID0gU1RBUlRFRDtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHR3ZWVuLCBkZWxldGluZyBudWxsIHR3ZWVuLlxuICAgIHR3ZWVuID0gbmV3IEFycmF5KG4gPSBzZWxmLnR3ZWVuLmxlbmd0aCk7XG4gICAgZm9yIChpID0gMCwgaiA9IC0xOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobyA9IHNlbGYudHdlZW5baV0udmFsdWUuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKSkge1xuICAgICAgICB0d2VlblsrK2pdID0gbztcbiAgICAgIH1cbiAgICB9XG4gICAgdHdlZW4ubGVuZ3RoID0gaiArIDE7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrKGVsYXBzZWQpIHtcbiAgICB2YXIgdCA9IGVsYXBzZWQgPCBzZWxmLmR1cmF0aW9uID8gc2VsZi5lYXNlLmNhbGwobnVsbCwgZWxhcHNlZCAvIHNlbGYuZHVyYXRpb24pIDogKHNlbGYudGltZXIucmVzdGFydChzdG9wKSwgc2VsZi5zdGF0ZSA9IEVORElORywgMSksXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IHR3ZWVuLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICB0d2VlbltpXS5jYWxsKG5vZGUsIHQpO1xuICAgIH1cblxuICAgIC8vIERpc3BhdGNoIHRoZSBlbmQgZXZlbnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgPT09IEVORElORykge1xuICAgICAgc2VsZi5vbi5jYWxsKFwiZW5kXCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgICAgc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgc2VsZi5zdGF0ZSA9IEVOREVEO1xuICAgIHNlbGYudGltZXIuc3RvcCgpO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaWRdO1xuICAgIGZvciAodmFyIGkgaW4gc2NoZWR1bGVzKSByZXR1cm47IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG4gIH1cbn1cbiIsImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIHR3ZWVuUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSB0d2VlbjAgPSB0d2VlbjtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjEgPSB0d2VlbjEuc2xpY2UoKTtcbiAgICAgICAgICB0d2VlbjEuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHR3ZWVuRnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gKHR3ZWVuMCA9IHR3ZWVuKS5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgdCA9IHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9LCBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xW2ldID0gdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkgPT09IG4pIHR3ZWVuMS5wdXNoKHQpO1xuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICBuYW1lICs9IFwiXCI7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIHR3ZWVuID0gZ2V0KHRoaXMubm9kZSgpLCBpZCkudHdlZW47XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2Vlbi5sZW5ndGgsIHQ7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodCA9IHR3ZWVuW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGwgPyB0d2VlblJlbW92ZSA6IHR3ZWVuRnVuY3Rpb24pKGlkLCBuYW1lLCB2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHdlZW5WYWx1ZSh0cmFuc2l0aW9uLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0cmFuc2l0aW9uLl9pZDtcblxuICB0cmFuc2l0aW9uLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKTtcbiAgICAoc2NoZWR1bGUudmFsdWUgfHwgKHNjaGVkdWxlLnZhbHVlID0ge30pKVtuYW1lXSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldChub2RlLCBpZCkudmFsdWVbbmFtZV07XG4gIH07XG59XG4iLCJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUmdiLCBpbnRlcnBvbGF0ZVN0cmluZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGM7XG4gIHJldHVybiAodHlwZW9mIGIgPT09IFwibnVtYmVyXCIgPyBpbnRlcnBvbGF0ZU51bWJlclxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyBpbnRlcnBvbGF0ZVJnYlxuICAgICAgOiAoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgaW50ZXJwb2xhdGVSZ2IpXG4gICAgICA6IGludGVycG9sYXRlU3RyaW5nKShhLCBiKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpLCBzdHJpbmcxO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSwgc3RyaW5nMTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpLCBpID0gZnVsbG5hbWUgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdGhpcy5hdHRyVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pKGZ1bGxuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwiYXR0ci5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdmFsdWUgPT0gbnVsbCA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpKGZ1bGxuYW1lKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkoZnVsbG5hbWUsIGksIHZhbHVlKSk7XG59XG4iLCJpbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBhdHRySW50ZXJwb2xhdGUobmFtZSwgaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJUd2Vlbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuKG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlKG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJhdHRyLlwiICsgbmFtZTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgKGZ1bGxuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtnZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGRlbGF5RnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWxheUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGRlbGF5RnVuY3Rpb25cbiAgICAgICAgICA6IGRlbGF5Q29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmRlbGF5O1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZHVyYXRpb25GdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Db25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGR1cmF0aW9uRnVuY3Rpb25cbiAgICAgICAgICA6IGR1cmF0aW9uQ29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmR1cmF0aW9uO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxudmFyIFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3I7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9ncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge3N0eWxlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBzdHlsZU51bGwobmFtZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICBzdHJpbmcxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgc3RyaW5nMTAgPSBzdHJpbmcxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSxcbiAgICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCI7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSBzdHJpbmcxID0gdmFsdWUxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IChzdHJpbmcxMCA9IHN0cmluZzEsIGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlTWF5YmVSZW1vdmUoaWQsIG5hbWUpIHtcbiAgdmFyIG9uMCwgb24xLCBsaXN0ZW5lcjAsIGtleSA9IFwic3R5bGUuXCIgKyBuYW1lLCBldmVudCA9IFwiZW5kLlwiICsga2V5LCByZW1vdmU7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uLFxuICAgICAgICBsaXN0ZW5lciA9IHNjaGVkdWxlLnZhbHVlW2tleV0gPT0gbnVsbCA/IHJlbW92ZSB8fCAocmVtb3ZlID0gc3R5bGVSZW1vdmUobmFtZSkpIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wIHx8IGxpc3RlbmVyMCAhPT0gbGlzdGVuZXIpIChvbjEgPSAob24wID0gb24pLmNvcHkoKSkub24oZXZlbnQsIGxpc3RlbmVyMCA9IGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGkgPSAobmFtZSArPSBcIlwiKSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGludGVycG9sYXRlVHJhbnNmb3JtIDogaW50ZXJwb2xhdGU7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVOdWxsKG5hbWUsIGkpKVxuICAgICAgLm9uKFwiZW5kLnN0eWxlLlwiICsgbmFtZSwgc3R5bGVSZW1vdmUobmFtZSkpXG4gICAgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlRnVuY3Rpb24obmFtZSwgaSwgdHdlZW5WYWx1ZSh0aGlzLCBcInN0eWxlLlwiICsgbmFtZSwgdmFsdWUpKSlcbiAgICAgIC5lYWNoKHN0eWxlTWF5YmVSZW1vdmUodGhpcy5faWQsIG5hbWUpKVxuICAgIDogdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVDb25zdGFudChuYW1lLCBpLCB2YWx1ZSksIHByaW9yaXR5KVxuICAgICAgLm9uKFwiZW5kLnN0eWxlLlwiICsgbmFtZSwgbnVsbCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0ciBmcm9tIFwiLi9hdHRyLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9hdHRyVHdlZW4gZnJvbSBcIi4vYXR0clR3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9kZWxheSBmcm9tIFwiLi9kZWxheS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2Vhc2UgZnJvbSBcIi4vZWFzZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZWFzZVZhcnlpbmcgZnJvbSBcIi4vZWFzZVZhcnlpbmcuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9vbiBmcm9tIFwiLi9vbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdC5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbC5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGUuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlVHdlZW4gZnJvbSBcIi4vc3R5bGVUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdGV4dCBmcm9tIFwiLi90ZXh0LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90ZXh0VHdlZW4gZnJvbSBcIi4vdGV4dFR3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3R3ZWVuIGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lbmQgZnJvbSBcIi4vZW5kLmpzXCI7XG5cbnZhciBpZCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBUcmFuc2l0aW9uKGdyb3VwcywgcGFyZW50cywgbmFtZSwgaWQpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbiAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gIHRoaXMuX2lkID0gaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zaXRpb24obmFtZSkge1xuICByZXR1cm4gc2VsZWN0aW9uKCkudHJhbnNpdGlvbihuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld0lkKCkge1xuICByZXR1cm4gKytpZDtcbn1cblxudmFyIHNlbGVjdGlvbl9wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlO1xuXG5UcmFuc2l0aW9uLnByb3RvdHlwZSA9IHRyYW5zaXRpb24ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVHJhbnNpdGlvbixcbiAgc2VsZWN0OiB0cmFuc2l0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiB0cmFuc2l0aW9uX3NlbGVjdEFsbCxcbiAgc2VsZWN0Q2hpbGQ6IHNlbGVjdGlvbl9wcm90b3R5cGUuc2VsZWN0Q2hpbGQsXG4gIHNlbGVjdENoaWxkcmVuOiBzZWxlY3Rpb25fcHJvdG90eXBlLnNlbGVjdENoaWxkcmVuLFxuICBmaWx0ZXI6IHRyYW5zaXRpb25fZmlsdGVyLFxuICBtZXJnZTogdHJhbnNpdGlvbl9tZXJnZSxcbiAgc2VsZWN0aW9uOiB0cmFuc2l0aW9uX3NlbGVjdGlvbixcbiAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbl90cmFuc2l0aW9uLFxuICBjYWxsOiBzZWxlY3Rpb25fcHJvdG90eXBlLmNhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGUsXG4gIHNpemU6IHNlbGVjdGlvbl9wcm90b3R5cGUuc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9wcm90b3R5cGUuZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9wcm90b3R5cGUuZWFjaCxcbiAgb246IHRyYW5zaXRpb25fb24sXG4gIGF0dHI6IHRyYW5zaXRpb25fYXR0cixcbiAgYXR0clR3ZWVuOiB0cmFuc2l0aW9uX2F0dHJUd2VlbixcbiAgc3R5bGU6IHRyYW5zaXRpb25fc3R5bGUsXG4gIHN0eWxlVHdlZW46IHRyYW5zaXRpb25fc3R5bGVUd2VlbixcbiAgdGV4dDogdHJhbnNpdGlvbl90ZXh0LFxuICB0ZXh0VHdlZW46IHRyYW5zaXRpb25fdGV4dFR3ZWVuLFxuICByZW1vdmU6IHRyYW5zaXRpb25fcmVtb3ZlLFxuICB0d2VlbjogdHJhbnNpdGlvbl90d2VlbixcbiAgZGVsYXk6IHRyYW5zaXRpb25fZGVsYXksXG4gIGR1cmF0aW9uOiB0cmFuc2l0aW9uX2R1cmF0aW9uLFxuICBlYXNlOiB0cmFuc2l0aW9uX2Vhc2UsXG4gIGVhc2VWYXJ5aW5nOiB0cmFuc2l0aW9uX2Vhc2VWYXJ5aW5nLFxuICBlbmQ6IHRyYW5zaXRpb25fZW5kLFxuICBbU3ltYm9sLml0ZXJhdG9yXTogc2VsZWN0aW9uX3Byb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdXG59O1xuIiwiaW1wb3J0IHtzZWxlY3Rvcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgICAgc2NoZWR1bGUoc3ViZ3JvdXBbaV0sIG5hbWUsIGlkLCBpLCBzdWJncm91cCwgZ2V0KG5vZGUsIGlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3RvckFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvckFsbChzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGZvciAodmFyIGNoaWxkcmVuID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApLCBjaGlsZCwgaW5oZXJpdCA9IGdldChub2RlLCBpZCksIGsgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBrIDwgbDsgKytrKSB7XG4gICAgICAgICAgaWYgKGNoaWxkID0gY2hpbGRyZW5ba10pIHtcbiAgICAgICAgICAgIHNjaGVkdWxlKGNoaWxkLCBuYW1lLCBpZCwgaywgY2hpbGRyZW4sIGluaGVyaXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdWJncm91cHMucHVzaChjaGlsZHJlbik7XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge21hdGNoZXJ9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCAhPT0gXCJmdW5jdGlvblwiKSBtYXRjaCA9IG1hdGNoZXIobWF0Y2gpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xuICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHJhbnNpdGlvbikge1xuICBpZiAodHJhbnNpdGlvbi5faWQgIT09IHRoaXMuX2lkKSB0aHJvdyBuZXcgRXJyb3I7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHRyYW5zaXRpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKG1lcmdlcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkMCA9IHRoaXMuX2lkLFxuICAgICAgaWQxID0gbmV3SWQoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICB2YXIgaW5oZXJpdCA9IGdldChub2RlLCBpZDApO1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZDEsIGksIGdyb3VwLCB7XG4gICAgICAgICAgdGltZTogaW5oZXJpdC50aW1lICsgaW5oZXJpdC5kZWxheSArIGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgICAgZHVyYXRpb246IGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZWFzZTogaW5oZXJpdC5lYXNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkMSk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iLCJmdW5jdGlvbiBzdHlsZUludGVycG9sYXRlKG5hbWUsIGksIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCBpLmNhbGwodGhpcywgdCksIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIHQsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0ID0gKGkwID0gaSkgJiYgc3R5bGVJbnRlcnBvbGF0ZShuYW1lLCBpLCBwcmlvcml0eSk7XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBrZXkgPSBcInN0eWxlLlwiICsgKG5hbWUgKz0gXCJcIik7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgcmV0dXJuIChrZXkgPSB0aGlzLnR3ZWVuKGtleSkpICYmIGtleS5fdmFsdWU7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcy50d2VlbihrZXksIG51bGwpO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSk7XG59XG4iLCJpbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWUxID09IG51bGwgPyBcIlwiIDogdmFsdWUxO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdGhpcy50d2VlbihcInRleHRcIiwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gdGV4dEZ1bmN0aW9uKHR3ZWVuVmFsdWUodGhpcywgXCJ0ZXh0XCIsIHZhbHVlKSlcbiAgICAgIDogdGV4dENvbnN0YW50KHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiKSk7XG59XG4iLCJmdW5jdGlvbiB0ZXh0SW50ZXJwb2xhdGUoaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSBpLmNhbGwodGhpcywgdCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRUd2Vlbih2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIHRleHRJbnRlcnBvbGF0ZShpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGtleSA9IFwidGV4dFwiO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgdGV4dFR3ZWVuKHZhbHVlKSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5lYXNlID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaChlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZWFzZTtcbn1cbiIsImltcG9ydCB7c2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBlYXNlVmFyeWluZyhpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodHlwZW9mIHYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy5lYWNoKGVhc2VWYXJ5aW5nKHRoaXMuX2lkLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgb24wLCBvbjEsIHRoYXQgPSB0aGlzLCBpZCA9IHRoYXQuX2lkLCBzaXplID0gdGhhdC5zaXplKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgY2FuY2VsID0ge3ZhbHVlOiByZWplY3R9LFxuICAgICAgICBlbmQgPSB7dmFsdWU6IGZ1bmN0aW9uKCkgeyBpZiAoLS1zaXplID09PSAwKSByZXNvbHZlKCk7IH19O1xuXG4gICAgdGhhdC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIGEgZGlzcGF0Y2ggd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgICAgaWYgKG9uICE9PSBvbjApIHtcbiAgICAgICAgb24xID0gKG9uMCA9IG9uKS5jb3B5KCk7XG4gICAgICAgIG9uMS5fLmNhbmNlbC5wdXNoKGNhbmNlbCk7XG4gICAgICAgIG9uMS5fLmludGVycnVwdC5wdXNoKGNhbmNlbCk7XG4gICAgICAgIG9uMS5fLmVuZC5wdXNoKGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHNlbGVjdGlvbiB3YXMgZW1wdHksIHJlc29sdmUgZW5kIGltbWVkaWF0ZWx5XG4gICAgaWYgKHNpemUgPT09IDApIHJlc29sdmUoKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb24sIG5ld0lkfSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlIGZyb20gXCIuLi90cmFuc2l0aW9uL3NjaGVkdWxlLmpzXCI7XG5pbXBvcnQge2Vhc2VDdWJpY0luT3V0fSBmcm9tIFwiZDMtZWFzZVwiO1xuaW1wb3J0IHtub3d9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZGVmYXVsdFRpbWluZyA9IHtcbiAgdGltZTogbnVsbCwgLy8gU2V0IG9uIHVzZS5cbiAgZGVsYXk6IDAsXG4gIGR1cmF0aW9uOiAyNTAsXG4gIGVhc2U6IGVhc2VDdWJpY0luT3V0XG59O1xuXG5mdW5jdGlvbiBpbmhlcml0KG5vZGUsIGlkKSB7XG4gIHZhciB0aW1pbmc7XG4gIHdoaWxlICghKHRpbWluZyA9IG5vZGUuX190cmFuc2l0aW9uKSB8fCAhKHRpbWluZyA9IHRpbWluZ1tpZF0pKSB7XG4gICAgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2lkfSBub3QgZm91bmRgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRpbWluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgaWQsXG4gICAgICB0aW1pbmc7XG5cbiAgaWYgKG5hbWUgaW5zdGFuY2VvZiBUcmFuc2l0aW9uKSB7XG4gICAgaWQgPSBuYW1lLl9pZCwgbmFtZSA9IG5hbWUuX25hbWU7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBuZXdJZCgpLCAodGltaW5nID0gZGVmYXVsdFRpbWluZykudGltZSA9IG5vdygpLCBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQsIGksIGdyb3VwLCB0aW1pbmcgfHwgaW5oZXJpdChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBjdWJpY0luKHQpIHtcbiAgcmV0dXJuIHQgKiB0ICogdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljT3V0KHQpIHtcbiAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyB0ICogdCAqIHQgOiAodCAtPSAyKSAqIHQgKiB0ICsgMikgLyAyO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBzZWxlY3Rpb25faW50ZXJydXB0IGZyb20gXCIuL2ludGVycnVwdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb24uanNcIjtcblxuc2VsZWN0aW9uLnByb3RvdHlwZS5pbnRlcnJ1cHQgPSBzZWxlY3Rpb25faW50ZXJydXB0O1xuc2VsZWN0aW9uLnByb3RvdHlwZS50cmFuc2l0aW9uID0gc2VsZWN0aW9uX3RyYW5zaXRpb247XG4iLCJpbXBvcnQgaW50ZXJydXB0IGZyb20gXCIuLi9pbnRlcnJ1cHQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIGludGVycnVwdCh0aGlzLCBuYW1lKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge1NUQVJUSU5HLCBFTkRJTkcsIEVOREVEfSBmcm9tIFwiLi90cmFuc2l0aW9uL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbXB0eSA9IHRydWUsXG4gICAgICBpO1xuXG4gIGlmICghc2NoZWR1bGVzKSByZXR1cm47XG5cbiAgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcblxuICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgaWYgKChzY2hlZHVsZSA9IHNjaGVkdWxlc1tpXSkubmFtZSAhPT0gbmFtZSkgeyBlbXB0eSA9IGZhbHNlOyBjb250aW51ZTsgfVxuICAgIGFjdGl2ZSA9IHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcgJiYgc2NoZWR1bGUuc3RhdGUgPCBFTkRJTkc7XG4gICAgc2NoZWR1bGUuc3RhdGUgPSBFTkRFRDtcbiAgICBzY2hlZHVsZS50aW1lci5zdG9wKCk7XG4gICAgc2NoZWR1bGUub24uY2FsbChhY3RpdmUgPyBcImludGVycnVwdFwiIDogXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2NoZWR1bGUuaW5kZXgsIHNjaGVkdWxlLmdyb3VwKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICB9XG5cbiAgaWYgKGVtcHR5KSBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG59XG4iLCJjb25zdCBwaSA9IE1hdGguUEksXG4gICAgdGF1ID0gMiAqIHBpLFxuICAgIGVwc2lsb24gPSAxZS02LFxuICAgIHRhdUVwc2lsb24gPSB0YXUgLSBlcHNpbG9uO1xuXG5mdW5jdGlvbiBhcHBlbmQoc3RyaW5ncykge1xuICB0aGlzLl8gKz0gc3RyaW5nc1swXTtcbiAgZm9yIChsZXQgaSA9IDEsIG4gPSBzdHJpbmdzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIHRoaXMuXyArPSBhcmd1bWVudHNbaV0gKyBzdHJpbmdzW2ldO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGVuZFJvdW5kKGRpZ2l0cykge1xuICBsZXQgZCA9IE1hdGguZmxvb3IoZGlnaXRzKTtcbiAgaWYgKCEoZCA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHtkaWdpdHN9YCk7XG4gIGlmIChkID4gMTUpIHJldHVybiBhcHBlbmQ7XG4gIGNvbnN0IGsgPSAxMCAqKiBkO1xuICByZXR1cm4gZnVuY3Rpb24oc3RyaW5ncykge1xuICAgIHRoaXMuXyArPSBzdHJpbmdzWzBdO1xuICAgIGZvciAobGV0IGkgPSAxLCBuID0gc3RyaW5ncy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHRoaXMuXyArPSBNYXRoLnJvdW5kKGFyZ3VtZW50c1tpXSAqIGspIC8gayArIHN0cmluZ3NbaV07XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgUGF0aCB7XG4gIGNvbnN0cnVjdG9yKGRpZ2l0cykge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feTAgPSAvLyBzdGFydCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgICB0aGlzLl94MSA9IHRoaXMuX3kxID0gbnVsbDsgLy8gZW5kIG9mIGN1cnJlbnQgc3VicGF0aFxuICAgIHRoaXMuXyA9IFwiXCI7XG4gICAgdGhpcy5fYXBwZW5kID0gZGlnaXRzID09IG51bGwgPyBhcHBlbmQgOiBhcHBlbmRSb3VuZChkaWdpdHMpO1xuICB9XG4gIG1vdmVUbyh4LCB5KSB7XG4gICAgdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwID0gdGhpcy5feDEgPSAreH0sJHt0aGlzLl95MCA9IHRoaXMuX3kxID0gK3l9YDtcbiAgfVxuICBjbG9zZVBhdGgoKSB7XG4gICAgaWYgKHRoaXMuX3gxICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl94MSA9IHRoaXMuX3gwLCB0aGlzLl95MSA9IHRoaXMuX3kwO1xuICAgICAgdGhpcy5fYXBwZW5kYFpgO1xuICAgIH1cbiAgfVxuICBsaW5lVG8oeCwgeSkge1xuICAgIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MSA9ICt4fSwke3RoaXMuX3kxID0gK3l9YDtcbiAgfVxuICBxdWFkcmF0aWNDdXJ2ZVRvKHgxLCB5MSwgeCwgeSkge1xuICAgIHRoaXMuX2FwcGVuZGBRJHsreDF9LCR7K3kxfSwke3RoaXMuX3gxID0gK3h9LCR7dGhpcy5feTEgPSAreX1gO1xuICB9XG4gIGJlemllckN1cnZlVG8oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHtcbiAgICB0aGlzLl9hcHBlbmRgQyR7K3gxfSwkeyt5MX0sJHsreDJ9LCR7K3kyfSwke3RoaXMuX3gxID0gK3h9LCR7dGhpcy5feTEgPSAreX1gO1xuICB9XG4gIGFyY1RvKHgxLCB5MSwgeDIsIHkyLCByKSB7XG4gICAgeDEgPSAreDEsIHkxID0gK3kxLCB4MiA9ICt4MiwgeTIgPSAreTIsIHIgPSArcjtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7cn1gKTtcblxuICAgIGxldCB4MCA9IHRoaXMuX3gxLFxuICAgICAgICB5MCA9IHRoaXMuX3kxLFxuICAgICAgICB4MjEgPSB4MiAtIHgxLFxuICAgICAgICB5MjEgPSB5MiAtIHkxLFxuICAgICAgICB4MDEgPSB4MCAtIHgxLFxuICAgICAgICB5MDEgPSB5MCAtIHkxLFxuICAgICAgICBsMDFfMiA9IHgwMSAqIHgwMSArIHkwMSAqIHkwMTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDEseTEpLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gxID0geDF9LCR7dGhpcy5feTEgPSB5MX1gO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDAseTApPyBEbyBub3RoaW5nLlxuICAgIGVsc2UgaWYgKCEobDAxXzIgPiBlcHNpbG9uKSk7XG5cbiAgICAvLyBPciwgYXJlICh4MCx5MCksICh4MSx5MSkgYW5kICh4Mix5MikgY29sbGluZWFyP1xuICAgIC8vIEVxdWl2YWxlbnRseSwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgyLHkyKT9cbiAgICAvLyBPciwgaXMgdGhlIHJhZGl1cyB6ZXJvPyBMaW5lIHRvICh4MSx5MSkuXG4gICAgZWxzZSBpZiAoIShNYXRoLmFicyh5MDEgKiB4MjEgLSB5MjEgKiB4MDEpID4gZXBzaWxvbikgfHwgIXIpIHtcbiAgICAgIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MSA9IHgxfSwke3RoaXMuX3kxID0geTF9YDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIGRyYXcgYW4gYXJjIVxuICAgIGVsc2Uge1xuICAgICAgbGV0IHgyMCA9IHgyIC0geDAsXG4gICAgICAgICAgeTIwID0geTIgLSB5MCxcbiAgICAgICAgICBsMjFfMiA9IHgyMSAqIHgyMSArIHkyMSAqIHkyMSxcbiAgICAgICAgICBsMjBfMiA9IHgyMCAqIHgyMCArIHkyMCAqIHkyMCxcbiAgICAgICAgICBsMjEgPSBNYXRoLnNxcnQobDIxXzIpLFxuICAgICAgICAgIGwwMSA9IE1hdGguc3FydChsMDFfMiksXG4gICAgICAgICAgbCA9IHIgKiBNYXRoLnRhbigocGkgLSBNYXRoLmFjb3MoKGwyMV8yICsgbDAxXzIgLSBsMjBfMikgLyAoMiAqIGwyMSAqIGwwMSkpKSAvIDIpLFxuICAgICAgICAgIHQwMSA9IGwgLyBsMDEsXG4gICAgICAgICAgdDIxID0gbCAvIGwyMTtcblxuICAgICAgLy8gSWYgdGhlIHN0YXJ0IHRhbmdlbnQgaXMgbm90IGNvaW5jaWRlbnQgd2l0aCAoeDAseTApLCBsaW5lIHRvLlxuICAgICAgaWYgKE1hdGguYWJzKHQwMSAtIDEpID4gZXBzaWxvbikge1xuICAgICAgICB0aGlzLl9hcHBlbmRgTCR7eDEgKyB0MDEgKiB4MDF9LCR7eTEgKyB0MDEgKiB5MDF9YDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fYXBwZW5kYEEke3J9LCR7cn0sMCwwLCR7Kyh5MDEgKiB4MjAgPiB4MDEgKiB5MjApfSwke3RoaXMuX3gxID0geDEgKyB0MjEgKiB4MjF9LCR7dGhpcy5feTEgPSB5MSArIHQyMSAqIHkyMX1gO1xuICAgIH1cbiAgfVxuICBhcmMoeCwgeSwgciwgYTAsIGExLCBjY3cpIHtcbiAgICB4ID0gK3gsIHkgPSAreSwgciA9ICtyLCBjY3cgPSAhIWNjdztcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7cn1gKTtcblxuICAgIGxldCBkeCA9IHIgKiBNYXRoLmNvcyhhMCksXG4gICAgICAgIGR5ID0gciAqIE1hdGguc2luKGEwKSxcbiAgICAgICAgeDAgPSB4ICsgZHgsXG4gICAgICAgIHkwID0geSArIGR5LFxuICAgICAgICBjdyA9IDEgXiBjY3csXG4gICAgICAgIGRhID0gY2N3ID8gYTAgLSBhMSA6IGExIC0gYTA7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgwLHkwKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2FwcGVuZGBNJHt4MH0sJHt5MH1gO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDAseTApIG5vdCBjb2luY2lkZW50IHdpdGggdGhlIHByZXZpb3VzIHBvaW50PyBMaW5lIHRvICh4MCx5MCkuXG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5feDEgLSB4MCkgPiBlcHNpbG9uIHx8IE1hdGguYWJzKHRoaXMuX3kxIC0geTApID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fYXBwZW5kYEwke3gwfSwke3kwfWA7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgZW1wdHk/IFdl4oCZcmUgZG9uZS5cbiAgICBpZiAoIXIpIHJldHVybjtcblxuICAgIC8vIERvZXMgdGhlIGFuZ2xlIGdvIHRoZSB3cm9uZyB3YXk/IEZsaXAgdGhlIGRpcmVjdGlvbi5cbiAgICBpZiAoZGEgPCAwKSBkYSA9IGRhICUgdGF1ICsgdGF1O1xuXG4gICAgLy8gSXMgdGhpcyBhIGNvbXBsZXRlIGNpcmNsZT8gRHJhdyB0d28gYXJjcyB0byBjb21wbGV0ZSB0aGUgY2lyY2xlLlxuICAgIGlmIChkYSA+IHRhdUVwc2lsb24pIHtcbiAgICAgIHRoaXMuX2FwcGVuZGBBJHtyfSwke3J9LDAsMSwke2N3fSwke3ggLSBkeH0sJHt5IC0gZHl9QSR7cn0sJHtyfSwwLDEsJHtjd30sJHt0aGlzLl94MSA9IHgwfSwke3RoaXMuX3kxID0geTB9YDtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBub24tZW1wdHk/IERyYXcgYW4gYXJjIVxuICAgIGVsc2UgaWYgKGRhID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fYXBwZW5kYEEke3J9LCR7cn0sMCwkeysoZGEgPj0gcGkpfSwke2N3fSwke3RoaXMuX3gxID0geCArIHIgKiBNYXRoLmNvcyhhMSl9LCR7dGhpcy5feTEgPSB5ICsgciAqIE1hdGguc2luKGExKX1gO1xuICAgIH1cbiAgfVxuICByZWN0KHgsIHksIHcsIGgpIHtcbiAgICB0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDAgPSB0aGlzLl94MSA9ICt4fSwke3RoaXMuX3kwID0gdGhpcy5feTEgPSAreX1oJHt3ID0gK3d9diR7K2h9aCR7LXd9WmA7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuXztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIG5ldyBQYXRoO1xufVxuXG4vLyBBbGxvdyBpbnN0YW5jZW9mIGQzLnBhdGhcbnBhdGgucHJvdG90eXBlID0gUGF0aC5wcm90b3R5cGU7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoUm91bmQoZGlnaXRzID0gMykge1xuICByZXR1cm4gbmV3IFBhdGgoK2RpZ2l0cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBNYXRoLmFicyh4ID0gTWF0aC5yb3VuZCh4KSkgPj0gMWUyMVxuICAgICAgPyB4LnRvTG9jYWxlU3RyaW5nKFwiZW5cIikucmVwbGFjZSgvLC9nLCBcIlwiKVxuICAgICAgOiB4LnRvU3RyaW5nKDEwKTtcbn1cblxuLy8gQ29tcHV0ZXMgdGhlIGRlY2ltYWwgY29lZmZpY2llbnQgYW5kIGV4cG9uZW50IG9mIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHggd2l0aFxuLy8gc2lnbmlmaWNhbnQgZGlnaXRzIHAsIHdoZXJlIHggaXMgcG9zaXRpdmUgYW5kIHAgaXMgaW4gWzEsIDIxXSBvciB1bmRlZmluZWQuXG4vLyBGb3IgZXhhbXBsZSwgZm9ybWF0RGVjaW1hbFBhcnRzKDEuMjMpIHJldHVybnMgW1wiMTIzXCIsIDBdLlxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKSB7XG4gIGlmICgoaSA9ICh4ID0gcCA/IHgudG9FeHBvbmVudGlhbChwIC0gMSkgOiB4LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZihcImVcIikpIDwgMCkgcmV0dXJuIG51bGw7IC8vIE5hTiwgwrFJbmZpbml0eVxuICB2YXIgaSwgY29lZmZpY2llbnQgPSB4LnNsaWNlKDAsIGkpO1xuXG4gIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxcZFxcLlxcZCtlWy0rXVxcZCtcbiAgLy8gKGUuZy4sIDEuMmUrMykgb3IgdGhlIGZvcm0gXFxkZVstK11cXGQrIChlLmcuLCAxZSszKS5cbiAgcmV0dXJuIFtcbiAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LFxuICAgICt4LnNsaWNlKGkgKyAxKVxuICBdO1xufVxuIiwiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geCA9IGZvcm1hdERlY2ltYWxQYXJ0cyhNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xufVxuIiwiLy8gW1tmaWxsXWFsaWduXVtzaWduXVtzeW1ib2xdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt+XVt0eXBlXVxudmFyIHJlID0gL14oPzooLik/KFs8Pj1eXSkpPyhbK1xcLSggXSk/KFskI10pPygwKT8oXFxkKyk/KCwpPyhcXC5cXGQrKT8ofik/KFthLXolXSk/JC9pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIGlmICghKG1hdGNoID0gcmUuZXhlYyhzcGVjaWZpZXIpKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBmb3JtYXQ6IFwiICsgc3BlY2lmaWVyKTtcbiAgdmFyIG1hdGNoO1xuICByZXR1cm4gbmV3IEZvcm1hdFNwZWNpZmllcih7XG4gICAgZmlsbDogbWF0Y2hbMV0sXG4gICAgYWxpZ246IG1hdGNoWzJdLFxuICAgIHNpZ246IG1hdGNoWzNdLFxuICAgIHN5bWJvbDogbWF0Y2hbNF0sXG4gICAgemVybzogbWF0Y2hbNV0sXG4gICAgd2lkdGg6IG1hdGNoWzZdLFxuICAgIGNvbW1hOiBtYXRjaFs3XSxcbiAgICBwcmVjaXNpb246IG1hdGNoWzhdICYmIG1hdGNoWzhdLnNsaWNlKDEpLFxuICAgIHRyaW06IG1hdGNoWzldLFxuICAgIHR5cGU6IG1hdGNoWzEwXVxuICB9KTtcbn1cblxuZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2ZcblxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgdGhpcy5maWxsID0gc3BlY2lmaWVyLmZpbGwgPT09IHVuZGVmaW5lZCA/IFwiIFwiIDogc3BlY2lmaWVyLmZpbGwgKyBcIlwiO1xuICB0aGlzLmFsaWduID0gc3BlY2lmaWVyLmFsaWduID09PSB1bmRlZmluZWQgPyBcIj5cIiA6IHNwZWNpZmllci5hbGlnbiArIFwiXCI7XG4gIHRoaXMuc2lnbiA9IHNwZWNpZmllci5zaWduID09PSB1bmRlZmluZWQgPyBcIi1cIiA6IHNwZWNpZmllci5zaWduICsgXCJcIjtcbiAgdGhpcy5zeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnN5bWJvbCArIFwiXCI7XG4gIHRoaXMuemVybyA9ICEhc3BlY2lmaWVyLnplcm87XG4gIHRoaXMud2lkdGggPSBzcGVjaWZpZXIud2lkdGggPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIud2lkdGg7XG4gIHRoaXMuY29tbWEgPSAhIXNwZWNpZmllci5jb21tYTtcbiAgdGhpcy5wcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiArc3BlY2lmaWVyLnByZWNpc2lvbjtcbiAgdGhpcy50cmltID0gISFzcGVjaWZpZXIudHJpbTtcbiAgdGhpcy50eXBlID0gc3BlY2lmaWVyLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBzcGVjaWZpZXIudHlwZSArIFwiXCI7XG59XG5cbkZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZmlsbFxuICAgICAgKyB0aGlzLmFsaWduXG4gICAgICArIHRoaXMuc2lnblxuICAgICAgKyB0aGlzLnN5bWJvbFxuICAgICAgKyAodGhpcy56ZXJvID8gXCIwXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy53aWR0aCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IE1hdGgubWF4KDEsIHRoaXMud2lkdGggfCAwKSlcbiAgICAgICsgKHRoaXMuY29tbWEgPyBcIixcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiLlwiICsgTWF0aC5tYXgoMCwgdGhpcy5wcmVjaXNpb24gfCAwKSlcbiAgICAgICsgKHRoaXMudHJpbSA/IFwiflwiIDogXCJcIilcbiAgICAgICsgdGhpcy50eXBlO1xufTtcbiIsImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCB2YXIgcHJlZml4RXhwb25lbnQ7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgdmFyIGQgPSBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdLFxuICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxuICAgICAgbiA9IGNvZWZmaWNpZW50Lmxlbmd0aDtcbiAgcmV0dXJuIGkgPT09IG4gPyBjb2VmZmljaWVudFxuICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcbiAgICAgIDogaSA+IDAgPyBjb2VmZmljaWVudC5zbGljZSgwLCBpKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoaSlcbiAgICAgIDogXCIwLlwiICsgbmV3IEFycmF5KDEgLSBpKS5qb2luKFwiMFwiKSArIGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBNYXRoLm1heCgwLCBwICsgaSAtIDEpKVswXTsgLy8gbGVzcyB0aGFuIDF5IVxufVxuIiwiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV07XG4gIHJldHVybiBleHBvbmVudCA8IDAgPyBcIjAuXCIgKyBuZXcgQXJyYXkoLWV4cG9uZW50KS5qb2luKFwiMFwiKSArIGNvZWZmaWNpZW50XG4gICAgICA6IGNvZWZmaWNpZW50Lmxlbmd0aCA+IGV4cG9uZW50ICsgMSA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGV4cG9uZW50ICsgMSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGV4cG9uZW50ICsgMSlcbiAgICAgIDogY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoZXhwb25lbnQgLSBjb2VmZmljaWVudC5sZW5ndGggKyAyKS5qb2luKFwiMFwiKTtcbn1cbiIsImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcbmltcG9ydCBmb3JtYXRQcmVmaXhBdXRvIGZyb20gXCIuL2Zvcm1hdFByZWZpeEF1dG8uanNcIjtcbmltcG9ydCBmb3JtYXRSb3VuZGVkIGZyb20gXCIuL2Zvcm1hdFJvdW5kZWQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBcIiVcIjogKHgsIHApID0+ICh4ICogMTAwKS50b0ZpeGVkKHApLFxuICBcImJcIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoMiksXG4gIFwiY1wiOiAoeCkgPT4geCArIFwiXCIsXG4gIFwiZFwiOiBmb3JtYXREZWNpbWFsLFxuICBcImVcIjogKHgsIHApID0+IHgudG9FeHBvbmVudGlhbChwKSxcbiAgXCJmXCI6ICh4LCBwKSA9PiB4LnRvRml4ZWQocCksXG4gIFwiZ1wiOiAoeCwgcCkgPT4geC50b1ByZWNpc2lvbihwKSxcbiAgXCJvXCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDgpLFxuICBcInBcIjogKHgsIHApID0+IGZvcm1hdFJvdW5kZWQoeCAqIDEwMCwgcCksXG4gIFwiclwiOiBmb3JtYXRSb3VuZGVkLFxuICBcInNcIjogZm9ybWF0UHJlZml4QXV0byxcbiAgXCJYXCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLFxuICBcInhcIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuaW1wb3J0IGZvcm1hdEdyb3VwIGZyb20gXCIuL2Zvcm1hdEdyb3VwLmpzXCI7XG5pbXBvcnQgZm9ybWF0TnVtZXJhbHMgZnJvbSBcIi4vZm9ybWF0TnVtZXJhbHMuanNcIjtcbmltcG9ydCBmb3JtYXRTcGVjaWZpZXIgZnJvbSBcIi4vZm9ybWF0U3BlY2lmaWVyLmpzXCI7XG5pbXBvcnQgZm9ybWF0VHJpbSBmcm9tIFwiLi9mb3JtYXRUcmltLmpzXCI7XG5pbXBvcnQgZm9ybWF0VHlwZXMgZnJvbSBcIi4vZm9ybWF0VHlwZXMuanNcIjtcbmltcG9ydCB7cHJlZml4RXhwb25lbnR9IGZyb20gXCIuL2Zvcm1hdFByZWZpeEF1dG8uanNcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi9pZGVudGl0eS5qc1wiO1xuXG52YXIgbWFwID0gQXJyYXkucHJvdG90eXBlLm1hcCxcbiAgICBwcmVmaXhlcyA9IFtcInlcIixcInpcIixcImFcIixcImZcIixcInBcIixcIm5cIixcIsK1XCIsXCJtXCIsXCJcIixcImtcIixcIk1cIixcIkdcIixcIlRcIixcIlBcIixcIkVcIixcIlpcIixcIllcIl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGxvY2FsZSkge1xuICB2YXIgZ3JvdXAgPSBsb2NhbGUuZ3JvdXBpbmcgPT09IHVuZGVmaW5lZCB8fCBsb2NhbGUudGhvdXNhbmRzID09PSB1bmRlZmluZWQgPyBpZGVudGl0eSA6IGZvcm1hdEdyb3VwKG1hcC5jYWxsKGxvY2FsZS5ncm91cGluZywgTnVtYmVyKSwgbG9jYWxlLnRob3VzYW5kcyArIFwiXCIpLFxuICAgICAgY3VycmVuY3lQcmVmaXggPSBsb2NhbGUuY3VycmVuY3kgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBsb2NhbGUuY3VycmVuY3lbMF0gKyBcIlwiLFxuICAgICAgY3VycmVuY3lTdWZmaXggPSBsb2NhbGUuY3VycmVuY3kgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBsb2NhbGUuY3VycmVuY3lbMV0gKyBcIlwiLFxuICAgICAgZGVjaW1hbCA9IGxvY2FsZS5kZWNpbWFsID09PSB1bmRlZmluZWQgPyBcIi5cIiA6IGxvY2FsZS5kZWNpbWFsICsgXCJcIixcbiAgICAgIG51bWVyYWxzID0gbG9jYWxlLm51bWVyYWxzID09PSB1bmRlZmluZWQgPyBpZGVudGl0eSA6IGZvcm1hdE51bWVyYWxzKG1hcC5jYWxsKGxvY2FsZS5udW1lcmFscywgU3RyaW5nKSksXG4gICAgICBwZXJjZW50ID0gbG9jYWxlLnBlcmNlbnQgPT09IHVuZGVmaW5lZCA/IFwiJVwiIDogbG9jYWxlLnBlcmNlbnQgKyBcIlwiLFxuICAgICAgbWludXMgPSBsb2NhbGUubWludXMgPT09IHVuZGVmaW5lZCA/IFwi4oiSXCIgOiBsb2NhbGUubWludXMgKyBcIlwiLFxuICAgICAgbmFuID0gbG9jYWxlLm5hbiA9PT0gdW5kZWZpbmVkID8gXCJOYU5cIiA6IGxvY2FsZS5uYW4gKyBcIlwiO1xuXG4gIGZ1bmN0aW9uIG5ld0Zvcm1hdChzcGVjaWZpZXIpIHtcbiAgICBzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKTtcblxuICAgIHZhciBmaWxsID0gc3BlY2lmaWVyLmZpbGwsXG4gICAgICAgIGFsaWduID0gc3BlY2lmaWVyLmFsaWduLFxuICAgICAgICBzaWduID0gc3BlY2lmaWVyLnNpZ24sXG4gICAgICAgIHN5bWJvbCA9IHNwZWNpZmllci5zeW1ib2wsXG4gICAgICAgIHplcm8gPSBzcGVjaWZpZXIuemVybyxcbiAgICAgICAgd2lkdGggPSBzcGVjaWZpZXIud2lkdGgsXG4gICAgICAgIGNvbW1hID0gc3BlY2lmaWVyLmNvbW1hLFxuICAgICAgICBwcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uLFxuICAgICAgICB0cmltID0gc3BlY2lmaWVyLnRyaW0sXG4gICAgICAgIHR5cGUgPSBzcGVjaWZpZXIudHlwZTtcblxuICAgIC8vIFRoZSBcIm5cIiB0eXBlIGlzIGFuIGFsaWFzIGZvciBcIixnXCIuXG4gICAgaWYgKHR5cGUgPT09IFwiblwiKSBjb21tYSA9IHRydWUsIHR5cGUgPSBcImdcIjtcblxuICAgIC8vIFRoZSBcIlwiIHR5cGUsIGFuZCBhbnkgaW52YWxpZCB0eXBlLCBpcyBhbiBhbGlhcyBmb3IgXCIuMTJ+Z1wiLlxuICAgIGVsc2UgaWYgKCFmb3JtYXRUeXBlc1t0eXBlXSkgcHJlY2lzaW9uID09PSB1bmRlZmluZWQgJiYgKHByZWNpc2lvbiA9IDEyKSwgdHJpbSA9IHRydWUsIHR5cGUgPSBcImdcIjtcblxuICAgIC8vIElmIHplcm8gZmlsbCBpcyBzcGVjaWZpZWQsIHBhZGRpbmcgZ29lcyBhZnRlciBzaWduIGFuZCBiZWZvcmUgZGlnaXRzLlxuICAgIGlmICh6ZXJvIHx8IChmaWxsID09PSBcIjBcIiAmJiBhbGlnbiA9PT0gXCI9XCIpKSB6ZXJvID0gdHJ1ZSwgZmlsbCA9IFwiMFwiLCBhbGlnbiA9IFwiPVwiO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgLy8gRm9yIFNJLXByZWZpeCwgdGhlIHN1ZmZpeCBpcyBsYXppbHkgY29tcHV0ZWQuXG4gICAgdmFyIHByZWZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVByZWZpeCA6IHN5bWJvbCA9PT0gXCIjXCIgJiYgL1tib3hYXS8udGVzdCh0eXBlKSA/IFwiMFwiICsgdHlwZS50b0xvd2VyQ2FzZSgpIDogXCJcIixcbiAgICAgICAgc3VmZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5U3VmZml4IDogL1slcF0vLnRlc3QodHlwZSkgPyBwZXJjZW50IDogXCJcIjtcblxuICAgIC8vIFdoYXQgZm9ybWF0IGZ1bmN0aW9uIHNob3VsZCB3ZSB1c2U/XG4gICAgLy8gSXMgdGhpcyBhbiBpbnRlZ2VyIHR5cGU/XG4gICAgLy8gQ2FuIHRoaXMgdHlwZSBnZW5lcmF0ZSBleHBvbmVudGlhbCBub3RhdGlvbj9cbiAgICB2YXIgZm9ybWF0VHlwZSA9IGZvcm1hdFR5cGVzW3R5cGVdLFxuICAgICAgICBtYXliZVN1ZmZpeCA9IC9bZGVmZ3BycyVdLy50ZXN0KHR5cGUpO1xuXG4gICAgLy8gU2V0IHRoZSBkZWZhdWx0IHByZWNpc2lvbiBpZiBub3Qgc3BlY2lmaWVkLFxuICAgIC8vIG9yIGNsYW1wIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uIHRvIHRoZSBzdXBwb3J0ZWQgcmFuZ2UuXG4gICAgLy8gRm9yIHNpZ25pZmljYW50IHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMSwgMjFdLlxuICAgIC8vIEZvciBmaXhlZCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzAsIDIwXS5cbiAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDZcbiAgICAgICAgOiAvW2dwcnNdLy50ZXN0KHR5cGUpID8gTWF0aC5tYXgoMSwgTWF0aC5taW4oMjEsIHByZWNpc2lvbikpXG4gICAgICAgIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMjAsIHByZWNpc2lvbikpO1xuXG4gICAgZnVuY3Rpb24gZm9ybWF0KHZhbHVlKSB7XG4gICAgICB2YXIgdmFsdWVQcmVmaXggPSBwcmVmaXgsXG4gICAgICAgICAgdmFsdWVTdWZmaXggPSBzdWZmaXgsXG4gICAgICAgICAgaSwgbiwgYztcblxuICAgICAgaWYgKHR5cGUgPT09IFwiY1wiKSB7XG4gICAgICAgIHZhbHVlU3VmZml4ID0gZm9ybWF0VHlwZSh2YWx1ZSkgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSArdmFsdWU7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBzaWduLiAtMCBpcyBub3QgbGVzcyB0aGFuIDAsIGJ1dCAxIC8gLTAgaXMhXG4gICAgICAgIHZhciB2YWx1ZU5lZ2F0aXZlID0gdmFsdWUgPCAwIHx8IDEgLyB2YWx1ZSA8IDA7XG5cbiAgICAgICAgLy8gUGVyZm9ybSB0aGUgaW5pdGlhbCBmb3JtYXR0aW5nLlxuICAgICAgICB2YWx1ZSA9IGlzTmFOKHZhbHVlKSA/IG5hbiA6IGZvcm1hdFR5cGUoTWF0aC5hYnModmFsdWUpLCBwcmVjaXNpb24pO1xuXG4gICAgICAgIC8vIFRyaW0gaW5zaWduaWZpY2FudCB6ZXJvcy5cbiAgICAgICAgaWYgKHRyaW0pIHZhbHVlID0gZm9ybWF0VHJpbSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gSWYgYSBuZWdhdGl2ZSB2YWx1ZSByb3VuZHMgdG8gemVybyBhZnRlciBmb3JtYXR0aW5nLCBhbmQgbm8gZXhwbGljaXQgcG9zaXRpdmUgc2lnbiBpcyByZXF1ZXN0ZWQsIGhpZGUgdGhlIHNpZ24uXG4gICAgICAgIGlmICh2YWx1ZU5lZ2F0aXZlICYmICt2YWx1ZSA9PT0gMCAmJiBzaWduICE9PSBcIitcIikgdmFsdWVOZWdhdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgICAgICB2YWx1ZVByZWZpeCA9ICh2YWx1ZU5lZ2F0aXZlID8gKHNpZ24gPT09IFwiKFwiID8gc2lnbiA6IG1pbnVzKSA6IHNpZ24gPT09IFwiLVwiIHx8IHNpZ24gPT09IFwiKFwiID8gXCJcIiA6IHNpZ24pICsgdmFsdWVQcmVmaXg7XG4gICAgICAgIHZhbHVlU3VmZml4ID0gKHR5cGUgPT09IFwic1wiID8gcHJlZml4ZXNbOCArIHByZWZpeEV4cG9uZW50IC8gM10gOiBcIlwiKSArIHZhbHVlU3VmZml4ICsgKHZhbHVlTmVnYXRpdmUgJiYgc2lnbiA9PT0gXCIoXCIgPyBcIilcIiA6IFwiXCIpO1xuXG4gICAgICAgIC8vIEJyZWFrIHRoZSBmb3JtYXR0ZWQgdmFsdWUgaW50byB0aGUgaW50ZWdlciDigJx2YWx1ZeKAnSBwYXJ0IHRoYXQgY2FuIGJlXG4gICAgICAgIC8vIGdyb3VwZWQsIGFuZCBmcmFjdGlvbmFsIG9yIGV4cG9uZW50aWFsIOKAnHN1ZmZpeOKAnSBwYXJ0IHRoYXQgaXMgbm90LlxuICAgICAgICBpZiAobWF5YmVTdWZmaXgpIHtcbiAgICAgICAgICBpID0gLTEsIG4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgICAgIGlmIChjID0gdmFsdWUuY2hhckNvZGVBdChpKSwgNDggPiBjIHx8IGMgPiA1Nykge1xuICAgICAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IChjID09PSA0NiA/IGRlY2ltYWwgKyB2YWx1ZS5zbGljZShpICsgMSkgOiB2YWx1ZS5zbGljZShpKSkgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmaWxsIGNoYXJhY3RlciBpcyBub3QgXCIwXCIsIGdyb3VwaW5nIGlzIGFwcGxpZWQgYmVmb3JlIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgIXplcm8pIHZhbHVlID0gZ3JvdXAodmFsdWUsIEluZmluaXR5KTtcblxuICAgICAgLy8gQ29tcHV0ZSB0aGUgcGFkZGluZy5cbiAgICAgIHZhciBsZW5ndGggPSB2YWx1ZVByZWZpeC5sZW5ndGggKyB2YWx1ZS5sZW5ndGggKyB2YWx1ZVN1ZmZpeC5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZyA9IGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSA6IFwiXCI7XG5cbiAgICAgIC8vIElmIHRoZSBmaWxsIGNoYXJhY3RlciBpcyBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBhZnRlciBwYWRkaW5nLlxuICAgICAgaWYgKGNvbW1hICYmIHplcm8pIHZhbHVlID0gZ3JvdXAocGFkZGluZyArIHZhbHVlLCBwYWRkaW5nLmxlbmd0aCA/IHdpZHRoIC0gdmFsdWVTdWZmaXgubGVuZ3RoIDogSW5maW5pdHkpLCBwYWRkaW5nID0gXCJcIjtcblxuICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGZpbmFsIG91dHB1dCBiYXNlZCBvbiB0aGUgZGVzaXJlZCBhbGlnbm1lbnQuXG4gICAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICAgIGNhc2UgXCI8XCI6IHZhbHVlID0gdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZzsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCI9XCI6IHZhbHVlID0gdmFsdWVQcmVmaXggKyBwYWRkaW5nICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJeXCI6IHZhbHVlID0gcGFkZGluZy5zbGljZSgwLCBsZW5ndGggPSBwYWRkaW5nLmxlbmd0aCA+PiAxKSArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmcuc2xpY2UobGVuZ3RoKTsgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IHZhbHVlID0gcGFkZGluZyArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDsgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudW1lcmFscyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZm9ybWF0LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc3BlY2lmaWVyICsgXCJcIjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKSB7XG4gICAgdmFyIGYgPSBuZXdGb3JtYXQoKHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpLCBzcGVjaWZpZXIudHlwZSA9IFwiZlwiLCBzcGVjaWZpZXIpKSxcbiAgICAgICAgZSA9IE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzLFxuICAgICAgICBrID0gTWF0aC5wb3coMTAsIC1lKSxcbiAgICAgICAgcHJlZml4ID0gcHJlZml4ZXNbOCArIGUgLyAzXTtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBmKGsgKiB2YWx1ZSkgKyBwcmVmaXg7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBuZXdGb3JtYXQsXG4gICAgZm9ybWF0UHJlZml4OiBmb3JtYXRQcmVmaXhcbiAgfTtcbn1cbiIsImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlLmpzXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIGZvcm1hdDtcbmV4cG9ydCB2YXIgZm9ybWF0UHJlZml4O1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgdGhvdXNhbmRzOiBcIixcIixcbiAgZ3JvdXBpbmc6IFszXSxcbiAgY3VycmVuY3k6IFtcIiRcIiwgXCJcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICBmb3JtYXQgPSBsb2NhbGUuZm9ybWF0O1xuICBmb3JtYXRQcmVmaXggPSBsb2NhbGUuZm9ybWF0UHJlZml4O1xuICByZXR1cm4gbG9jYWxlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZ3JvdXBpbmcsIHRob3VzYW5kcykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGgsXG4gICAgICAgIHQgPSBbXSxcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIGcgPSBncm91cGluZ1swXSxcbiAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgaWYgKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpIGcgPSBNYXRoLm1heCgxLCB3aWR0aCAtIGxlbmd0aCk7XG4gICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcbiAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgIGcgPSBncm91cGluZ1tqID0gKGogKyAxKSAlIGdyb3VwaW5nLmxlbmd0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG51bWVyYWxzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bMC05XS9nLCBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbnVtZXJhbHNbK2ldO1xuICAgIH0pO1xuICB9O1xufVxuIiwiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKCErc1tpXSkgYnJlYWsgb3V0OyBpZiAoaTAgPiAwKSBpMCA9IDA7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTAgPiAwID8gcy5zbGljZSgwLCBpMCkgKyBzLnNsaWNlKGkxICsgMSkgOiBzO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGluaXRSYW5nZShkb21haW4sIHJhbmdlKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogYnJlYWs7XG4gICAgY2FzZSAxOiB0aGlzLnJhbmdlKGRvbWFpbik7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IHRoaXMucmFuZ2UocmFuZ2UpLmRvbWFpbihkb21haW4pOyBicmVhaztcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRJbnRlcnBvbGF0b3IoZG9tYWluLCBpbnRlcnBvbGF0b3IpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHtcbiAgICAgIGlmICh0eXBlb2YgZG9tYWluID09PSBcImZ1bmN0aW9uXCIpIHRoaXMuaW50ZXJwb2xhdG9yKGRvbWFpbik7XG4gICAgICBlbHNlIHRoaXMucmFuZ2UoZG9tYWluKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aGlzLmRvbWFpbihkb21haW4pO1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcnBvbGF0b3IgPT09IFwiZnVuY3Rpb25cIikgdGhpcy5pbnRlcnBvbGF0b3IoaW50ZXJwb2xhdG9yKTtcbiAgICAgIGVsc2UgdGhpcy5yYW5nZShpbnRlcnBvbGF0b3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IHtJbnRlcm5NYXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcblxuZXhwb3J0IGNvbnN0IGltcGxpY2l0ID0gU3ltYm9sKFwiaW1wbGljaXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGluYWwoKSB7XG4gIHZhciBpbmRleCA9IG5ldyBJbnRlcm5NYXAoKSxcbiAgICAgIGRvbWFpbiA9IFtdLFxuICAgICAgcmFuZ2UgPSBbXSxcbiAgICAgIHVua25vd24gPSBpbXBsaWNpdDtcblxuICBmdW5jdGlvbiBzY2FsZShkKSB7XG4gICAgbGV0IGkgPSBpbmRleC5nZXQoZCk7XG4gICAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHVua25vd24gIT09IGltcGxpY2l0KSByZXR1cm4gdW5rbm93bjtcbiAgICAgIGluZGV4LnNldChkLCBpID0gZG9tYWluLnB1c2goZCkgLSAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhbmdlW2kgJSByYW5nZS5sZW5ndGhdO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICAgIGRvbWFpbiA9IFtdLCBpbmRleCA9IG5ldyBJbnRlcm5NYXAoKTtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIF8pIHtcbiAgICAgIGlmIChpbmRleC5oYXModmFsdWUpKSBjb250aW51ZTtcbiAgICAgIGluZGV4LnNldCh2YWx1ZSwgZG9tYWluLnB1c2godmFsdWUpIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IEFycmF5LmZyb20oXyksIHNjYWxlKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9yZGluYWwoZG9tYWluLCByYW5nZSkudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgcmV0dXJuICt4O1xufVxuIiwiaW1wb3J0IHtiaXNlY3R9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZSBhcyBpbnRlcnBvbGF0ZVZhbHVlLCBpbnRlcnBvbGF0ZU51bWJlciwgaW50ZXJwb2xhdGVSb3VuZH0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbnZhciB1bml0ID0gWzAsIDFdO1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplKGEsIGIpIHtcbiAgcmV0dXJuIChiIC09IChhID0gK2EpKVxuICAgICAgPyBmdW5jdGlvbih4KSB7IHJldHVybiAoeCAtIGEpIC8gYjsgfVxuICAgICAgOiBjb25zdGFudChpc05hTihiKSA/IE5hTiA6IDAuNSk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wZXIoYSwgYikge1xuICB2YXIgdDtcbiAgaWYgKGEgPiBiKSB0ID0gYSwgYSA9IGIsIGIgPSB0O1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5tYXgoYSwgTWF0aC5taW4oYiwgeCkpOyB9O1xufVxuXG4vLyBub3JtYWxpemUoYSwgYikoeCkgdGFrZXMgYSBkb21haW4gdmFsdWUgeCBpbiBbYSxiXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdCBpbiBbMCwxXS5cbi8vIGludGVycG9sYXRlKGEsIGIpKHQpIHRha2VzIGEgcGFyYW1ldGVyIHQgaW4gWzAsMV0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmFuZ2UgdmFsdWUgeCBpbiBbYSxiXS5cbmZ1bmN0aW9uIGJpbWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBkMCA9IGRvbWFpblswXSwgZDEgPSBkb21haW5bMV0sIHIwID0gcmFuZ2VbMF0sIHIxID0gcmFuZ2VbMV07XG4gIGlmIChkMSA8IGQwKSBkMCA9IG5vcm1hbGl6ZShkMSwgZDApLCByMCA9IGludGVycG9sYXRlKHIxLCByMCk7XG4gIGVsc2UgZDAgPSBub3JtYWxpemUoZDAsIGQxKSwgcjAgPSBpbnRlcnBvbGF0ZShyMCwgcjEpO1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gcjAoZDAoeCkpOyB9O1xufVxuXG5mdW5jdGlvbiBwb2x5bWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBqID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSAtIDEsXG4gICAgICBkID0gbmV3IEFycmF5KGopLFxuICAgICAgciA9IG5ldyBBcnJheShqKSxcbiAgICAgIGkgPSAtMTtcblxuICAvLyBSZXZlcnNlIGRlc2NlbmRpbmcgZG9tYWlucy5cbiAgaWYgKGRvbWFpbltqXSA8IGRvbWFpblswXSkge1xuICAgIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByYW5nZSA9IHJhbmdlLnNsaWNlKCkucmV2ZXJzZSgpO1xuICB9XG5cbiAgd2hpbGUgKCsraSA8IGopIHtcbiAgICBkW2ldID0gbm9ybWFsaXplKGRvbWFpbltpXSwgZG9tYWluW2kgKyAxXSk7XG4gICAgcltpXSA9IGludGVycG9sYXRlKHJhbmdlW2ldLCByYW5nZVtpICsgMV0pO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICB2YXIgaSA9IGJpc2VjdChkb21haW4sIHgsIDEsIGopIC0gMTtcbiAgICByZXR1cm4gcltpXShkW2ldKHgpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkoc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldFxuICAgICAgLmRvbWFpbihzb3VyY2UuZG9tYWluKCkpXG4gICAgICAucmFuZ2Uoc291cmNlLnJhbmdlKCkpXG4gICAgICAuaW50ZXJwb2xhdGUoc291cmNlLmludGVycG9sYXRlKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXG4gICAgICAudW5rbm93bihzb3VyY2UudW5rbm93bigpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgZG9tYWluID0gdW5pdCxcbiAgICAgIHJhbmdlID0gdW5pdCxcbiAgICAgIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVWYWx1ZSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHVudHJhbnNmb3JtLFxuICAgICAgdW5rbm93bixcbiAgICAgIGNsYW1wID0gaWRlbnRpdHksXG4gICAgICBwaWVjZXdpc2UsXG4gICAgICBvdXRwdXQsXG4gICAgICBpbnB1dDtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBuID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKTtcbiAgICBpZiAoY2xhbXAgIT09IGlkZW50aXR5KSBjbGFtcCA9IGNsYW1wZXIoZG9tYWluWzBdLCBkb21haW5bbiAtIDFdKTtcbiAgICBwaWVjZXdpc2UgPSBuID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICBvdXRwdXQgPSBpbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ID09IG51bGwgfHwgaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiAob3V0cHV0IHx8IChvdXRwdXQgPSBwaWVjZXdpc2UoZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCByYW5nZSwgaW50ZXJwb2xhdGUpKSkodHJhbnNmb3JtKGNsYW1wKHgpKSk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIGNsYW1wKHVudHJhbnNmb3JtKChpbnB1dCB8fCAoaW5wdXQgPSBwaWVjZXdpc2UocmFuZ2UsIGRvbWFpbi5tYXAodHJhbnNmb3JtKSwgaW50ZXJwb2xhdGVOdW1iZXIpKSkoeSkpKTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gQXJyYXkuZnJvbShfLCBudW1iZXIpLCByZXNjYWxlKCkpIDogZG9tYWluLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBBcnJheS5mcm9tKF8pLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiByYW5nZSA9IEFycmF5LmZyb20oXyksIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVSb3VuZCwgcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gXyA/IHRydWUgOiBpZGVudGl0eSwgcmVzY2FsZSgpKSA6IGNsYW1wICE9PSBpZGVudGl0eTtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHJlc2NhbGUoKSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbih0LCB1KSB7XG4gICAgdHJhbnNmb3JtID0gdCwgdW50cmFuc2Zvcm0gPSB1O1xuICAgIHJldHVybiByZXNjYWxlKCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRpbnVvdXMoKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcigpKGlkZW50aXR5LCBpZGVudGl0eSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudHMoeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQge3RpY2tTdGVwfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7Zm9ybWF0LCBmb3JtYXRQcmVmaXgsIGZvcm1hdFNwZWNpZmllciwgcHJlY2lzaW9uRml4ZWQsIHByZWNpc2lvblByZWZpeCwgcHJlY2lzaW9uUm91bmR9IGZyb20gXCJkMy1mb3JtYXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGlja0Zvcm1hdChzdGFydCwgc3RvcCwgY291bnQsIHNwZWNpZmllcikge1xuICB2YXIgc3RlcCA9IHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCksXG4gICAgICBwcmVjaXNpb247XG4gIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIgPT0gbnVsbCA/IFwiLGZcIiA6IHNwZWNpZmllcik7XG4gIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICBjYXNlIFwic1wiOiB7XG4gICAgICB2YXIgdmFsdWUgPSBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKTtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblByZWZpeChzdGVwLCB2YWx1ZSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICAgICAgcmV0dXJuIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKTtcbiAgICB9XG4gICAgY2FzZSBcIlwiOlxuICAgIGNhc2UgXCJlXCI6XG4gICAgY2FzZSBcImdcIjpcbiAgICBjYXNlIFwicFwiOlxuICAgIGNhc2UgXCJyXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblJvdW5kKHN0ZXAsIE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb24gLSAoc3BlY2lmaWVyLnR5cGUgPT09IFwiZVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwiZlwiOlxuICAgIGNhc2UgXCIlXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvbkZpeGVkKHN0ZXApKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCIlXCIpICogMjtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0KHNwZWNpZmllcik7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgdmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzIC0gZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCBtYXgpIHtcbiAgc3RlcCA9IE1hdGguYWJzKHN0ZXApLCBtYXggPSBNYXRoLmFicyhtYXgpIC0gc3RlcDtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGV4cG9uZW50KG1heCkgLSBleHBvbmVudChzdGVwKSkgKyAxO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXApIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiaW1wb3J0IHt0aWNrcywgdGlja0luY3JlbWVudH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQgY29udGludW91cywge2NvcHl9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQgdGlja0Zvcm1hdCBmcm9tIFwiLi90aWNrRm9ybWF0LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXJpc2goc2NhbGUpIHtcbiAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQsIHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG5cbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHZhciBpMCA9IDA7XG4gICAgdmFyIGkxID0gZC5sZW5ndGggLSAxO1xuICAgIHZhciBzdGFydCA9IGRbaTBdO1xuICAgIHZhciBzdG9wID0gZFtpMV07XG4gICAgdmFyIHByZXN0ZXA7XG4gICAgdmFyIHN0ZXA7XG4gICAgdmFyIG1heEl0ZXIgPSAxMDtcblxuICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcbiAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgIH1cbiAgICBcbiAgICB3aGlsZSAobWF4SXRlci0tID4gMCkge1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICAgIGlmIChzdGVwID09PSBwcmVzdGVwKSB7XG4gICAgICAgIGRbaTBdID0gc3RhcnRcbiAgICAgICAgZFtpMV0gPSBzdG9wXG4gICAgICAgIHJldHVybiBkb21haW4oZCk7XG4gICAgICB9IGVsc2UgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJlc3RlcCA9IHN0ZXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZWFyKCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKCk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwiY29uc3QgdDAgPSBuZXcgRGF0ZSwgdDEgPSBuZXcgRGF0ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVJbnRlcnZhbChmbG9vcmksIG9mZnNldGksIGNvdW50LCBmaWVsZCkge1xuXG4gIGZ1bmN0aW9uIGludGVydmFsKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAwID8gbmV3IERhdGUgOiBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9XG5cbiAgaW50ZXJ2YWwuZmxvb3IgPSAoZGF0ZSkgPT4ge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwuY2VpbCA9IChkYXRlKSA9PiB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gbmV3IERhdGUoZGF0ZSAtIDEpKSwgb2Zmc2V0aShkYXRlLCAxKSwgZmxvb3JpKGRhdGUpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLnJvdW5kID0gKGRhdGUpID0+IHtcbiAgICBjb25zdCBkMCA9IGludGVydmFsKGRhdGUpLCBkMSA9IGludGVydmFsLmNlaWwoZGF0ZSk7XG4gICAgcmV0dXJuIGRhdGUgLSBkMCA8IGQxIC0gZGF0ZSA/IGQwIDogZDE7XG4gIH07XG5cbiAgaW50ZXJ2YWwub2Zmc2V0ID0gKGRhdGUsIHN0ZXApID0+IHtcbiAgICByZXR1cm4gb2Zmc2V0aShkYXRlID0gbmV3IERhdGUoK2RhdGUpLCBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucmFuZ2UgPSAoc3RhcnQsIHN0b3AsIHN0ZXApID0+IHtcbiAgICBjb25zdCByYW5nZSA9IFtdO1xuICAgIHN0YXJ0ID0gaW50ZXJ2YWwuY2VpbChzdGFydCk7XG4gICAgc3RlcCA9IHN0ZXAgPT0gbnVsbCA/IDEgOiBNYXRoLmZsb29yKHN0ZXApO1xuICAgIGlmICghKHN0YXJ0IDwgc3RvcCkgfHwgIShzdGVwID4gMCkpIHJldHVybiByYW5nZTsgLy8gYWxzbyBoYW5kbGVzIEludmFsaWQgRGF0ZVxuICAgIGxldCBwcmV2aW91cztcbiAgICBkbyByYW5nZS5wdXNoKHByZXZpb3VzID0gbmV3IERhdGUoK3N0YXJ0KSksIG9mZnNldGkoc3RhcnQsIHN0ZXApLCBmbG9vcmkoc3RhcnQpO1xuICAgIHdoaWxlIChwcmV2aW91cyA8IHN0YXJ0ICYmIHN0YXJ0IDwgc3RvcCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIGludGVydmFsLmZpbHRlciA9ICh0ZXN0KSA9PiB7XG4gICAgcmV0dXJuIHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkgd2hpbGUgKGZsb29yaShkYXRlKSwgIXRlc3QoZGF0ZSkpIGRhdGUuc2V0VGltZShkYXRlIC0gMSk7XG4gICAgfSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHtcbiAgICAgICAgaWYgKHN0ZXAgPCAwKSB3aGlsZSAoKytzdGVwIDw9IDApIHtcbiAgICAgICAgICB3aGlsZSAob2Zmc2V0aShkYXRlLCAtMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgIH0gZWxzZSB3aGlsZSAoLS1zdGVwID49IDApIHtcbiAgICAgICAgICB3aGlsZSAob2Zmc2V0aShkYXRlLCArMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBpZiAoY291bnQpIHtcbiAgICBpbnRlcnZhbC5jb3VudCA9IChzdGFydCwgZW5kKSA9PiB7XG4gICAgICB0MC5zZXRUaW1lKCtzdGFydCksIHQxLnNldFRpbWUoK2VuZCk7XG4gICAgICBmbG9vcmkodDApLCBmbG9vcmkodDEpO1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoY291bnQodDAsIHQxKSk7XG4gICAgfTtcblxuICAgIGludGVydmFsLmV2ZXJ5ID0gKHN0ZXApID0+IHtcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgcmV0dXJuICFpc0Zpbml0ZShzdGVwKSB8fCAhKHN0ZXAgPiAwKSA/IG51bGxcbiAgICAgICAgICA6ICEoc3RlcCA+IDEpID8gaW50ZXJ2YWxcbiAgICAgICAgICA6IGludGVydmFsLmZpbHRlcihmaWVsZFxuICAgICAgICAgICAgICA/IChkKSA9PiBmaWVsZChkKSAlIHN0ZXAgPT09IDBcbiAgICAgICAgICAgICAgOiAoZCkgPT4gaW50ZXJ2YWwuY291bnQoMCwgZCkgJSBzdGVwID09PSAwKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGludGVydmFsO1xufVxuIiwiaW1wb3J0IHt0aW1lSW50ZXJ2YWx9IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZCA9IHRpbWVJbnRlcnZhbCgoKSA9PiB7XG4gIC8vIG5vb3Bcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gKGspID0+IHtcbiAgayA9IE1hdGguZmxvb3Ioayk7XG4gIGlmICghaXNGaW5pdGUoaykgfHwgIShrID4gMCkpIHJldHVybiBudWxsO1xuICBpZiAoIShrID4gMSkpIHJldHVybiBtaWxsaXNlY29uZDtcbiAgcmV0dXJuIHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBrKTtcbiAgfSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGs7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kLnJhbmdlO1xuIiwiZXhwb3J0IGNvbnN0IGR1cmF0aW9uU2Vjb25kID0gMTAwMDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbk1pbnV0ZSA9IGR1cmF0aW9uU2Vjb25kICogNjA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25Ib3VyID0gZHVyYXRpb25NaW51dGUgKiA2MDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbkRheSA9IGR1cmF0aW9uSG91ciAqIDI0O1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uV2VlayA9IGR1cmF0aW9uRGF5ICogNztcbmV4cG9ydCBjb25zdCBkdXJhdGlvbk1vbnRoID0gZHVyYXRpb25EYXkgKiAzMDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvblllYXIgPSBkdXJhdGlvbkRheSAqIDM2NTtcbiIsImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvblNlY29uZH0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZXhwb3J0IGNvbnN0IHNlY29uZCA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25TZWNvbmQ7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENTZWNvbmRzKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHNlY29uZHMgPSBzZWNvbmQucmFuZ2U7XG4iLCJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZU1pbnV0ZSA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB0aW1lTWludXRlcyA9IHRpbWVNaW51dGUucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNNaW51dGUgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENTZWNvbmRzKDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y01pbnV0ZXMgPSB1dGNNaW51dGUucmFuZ2U7XG4iLCJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25Ib3VyLCBkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbmV4cG9ydCBjb25zdCB0aW1lSG91ciA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kIC0gZGF0ZS5nZXRNaW51dGVzKCkgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25Ib3VyKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcbn0pO1xuXG5leHBvcnQgY29uc3QgdGltZUhvdXJzID0gdGltZUhvdXIucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNIb3VyID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VVRDTWludXRlcygwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENIb3VycygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB1dGNIb3VycyA9IHV0Y0hvdXIucmFuZ2U7XG4iLCJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25EYXksIGR1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZURheSA9IHRpbWVJbnRlcnZhbChcbiAgZGF0ZSA9PiBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApLFxuICAoZGF0ZSwgc3RlcCkgPT4gZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCksXG4gIChzdGFydCwgZW5kKSA9PiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uRGF5LFxuICBkYXRlID0+IGRhdGUuZ2V0RGF0ZSgpIC0gMVxuKTtcblxuZXhwb3J0IGNvbnN0IHRpbWVEYXlzID0gdGltZURheS5yYW5nZTtcblxuZXhwb3J0IGNvbnN0IHV0Y0RheSA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgc3RlcCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uRGF5O1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDRGF0ZSgpIC0gMTtcbn0pO1xuXG5leHBvcnQgY29uc3QgdXRjRGF5cyA9IHV0Y0RheS5yYW5nZTtcblxuZXhwb3J0IGNvbnN0IHVuaXhEYXkgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkRheTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBNYXRoLmZsb29yKGRhdGUgLyBkdXJhdGlvbkRheSk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHVuaXhEYXlzID0gdW5peERheS5yYW5nZTtcbiIsImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5mdW5jdGlvbiB0aW1lV2Vla2RheShpKSB7XG4gIHJldHVybiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCAqIDcpO1xuICB9LCAoc3RhcnQsIGVuZCkgPT4ge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB0aW1lU3VuZGF5ID0gdGltZVdlZWtkYXkoMCk7XG5leHBvcnQgY29uc3QgdGltZU1vbmRheSA9IHRpbWVXZWVrZGF5KDEpO1xuZXhwb3J0IGNvbnN0IHRpbWVUdWVzZGF5ID0gdGltZVdlZWtkYXkoMik7XG5leHBvcnQgY29uc3QgdGltZVdlZG5lc2RheSA9IHRpbWVXZWVrZGF5KDMpO1xuZXhwb3J0IGNvbnN0IHRpbWVUaHVyc2RheSA9IHRpbWVXZWVrZGF5KDQpO1xuZXhwb3J0IGNvbnN0IHRpbWVGcmlkYXkgPSB0aW1lV2Vla2RheSg1KTtcbmV4cG9ydCBjb25zdCB0aW1lU2F0dXJkYXkgPSB0aW1lV2Vla2RheSg2KTtcblxuZXhwb3J0IGNvbnN0IHRpbWVTdW5kYXlzID0gdGltZVN1bmRheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB0aW1lTW9uZGF5cyA9IHRpbWVNb25kYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZVR1ZXNkYXlzID0gdGltZVR1ZXNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZVdlZG5lc2RheXMgPSB0aW1lV2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVUaHVyc2RheXMgPSB0aW1lVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZUZyaWRheXMgPSB0aW1lRnJpZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVTYXR1cmRheXMgPSB0aW1lU2F0dXJkYXkucmFuZ2U7XG5cbmZ1bmN0aW9uIHV0Y1dlZWtkYXkoaSkge1xuICByZXR1cm4gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gKGRhdGUuZ2V0VVRDRGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB9LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xuZXhwb3J0IGNvbnN0IHV0Y01vbmRheSA9IHV0Y1dlZWtkYXkoMSk7XG5leHBvcnQgY29uc3QgdXRjVHVlc2RheSA9IHV0Y1dlZWtkYXkoMik7XG5leHBvcnQgY29uc3QgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcbmV4cG9ydCBjb25zdCB1dGNUaHVyc2RheSA9IHV0Y1dlZWtkYXkoNCk7XG5leHBvcnQgY29uc3QgdXRjRnJpZGF5ID0gdXRjV2Vla2RheSg1KTtcbmV4cG9ydCBjb25zdCB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XG5cbmV4cG9ydCBjb25zdCB1dGNTdW5kYXlzID0gdXRjU3VuZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y01vbmRheXMgPSB1dGNNb25kYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjVHVlc2RheXMgPSB1dGNUdWVzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y1dlZG5lc2RheXMgPSB1dGNXZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjVGh1cnNkYXlzID0gdXRjVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjRnJpZGF5cyA9IHV0Y0ZyaWRheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB1dGNTYXR1cmRheXMgPSB1dGNTYXR1cmRheS5yYW5nZTtcbiIsImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZU1vbnRoID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0RGF0ZSgxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgc3RlcCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gZW5kLmdldE1vbnRoKCkgLSBzdGFydC5nZXRNb250aCgpICsgKGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKSkgKiAxMjtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldE1vbnRoKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHRpbWVNb250aHMgPSB0aW1lTW9udGgucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNNb250aCA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFVUQ01vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZC5nZXRVVENNb250aCgpIC0gc3RhcnQuZ2V0VVRDTW9udGgoKSArIChlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCkpICogMTI7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcbiIsImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZVllYXIgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG50aW1lWWVhci5ldmVyeSA9IChrKSA9PiB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldEZ1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdGltZVllYXJzID0gdGltZVllYXIucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNZZWFyID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZC5nZXRVVENGdWxsWWVhcigpIC0gc3RhcnQuZ2V0VVRDRnVsbFllYXIoKTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxudXRjWWVhci5ldmVyeSA9IChrKSA9PiB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXRjWWVhcnMgPSB1dGNZZWFyLnJhbmdlO1xuIiwiaW1wb3J0IHtiaXNlY3RvciwgdGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtkdXJhdGlvbkRheSwgZHVyYXRpb25Ib3VyLCBkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25Nb250aCwgZHVyYXRpb25TZWNvbmQsIGR1cmF0aW9uV2VlaywgZHVyYXRpb25ZZWFyfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHttaWxsaXNlY29uZH0gZnJvbSBcIi4vbWlsbGlzZWNvbmQuanNcIjtcbmltcG9ydCB7c2Vjb25kfSBmcm9tIFwiLi9zZWNvbmQuanNcIjtcbmltcG9ydCB7dGltZU1pbnV0ZSwgdXRjTWludXRlfSBmcm9tIFwiLi9taW51dGUuanNcIjtcbmltcG9ydCB7dGltZUhvdXIsIHV0Y0hvdXJ9IGZyb20gXCIuL2hvdXIuanNcIjtcbmltcG9ydCB7dGltZURheSwgdW5peERheX0gZnJvbSBcIi4vZGF5LmpzXCI7XG5pbXBvcnQge3RpbWVTdW5kYXksIHV0Y1N1bmRheX0gZnJvbSBcIi4vd2Vlay5qc1wiO1xuaW1wb3J0IHt0aW1lTW9udGgsIHV0Y01vbnRofSBmcm9tIFwiLi9tb250aC5qc1wiO1xuaW1wb3J0IHt0aW1lWWVhciwgdXRjWWVhcn0gZnJvbSBcIi4veWVhci5qc1wiO1xuXG5mdW5jdGlvbiB0aWNrZXIoeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlKSB7XG5cbiAgY29uc3QgdGlja0ludGVydmFscyA9IFtcbiAgICBbc2Vjb25kLCAgMSwgICAgICBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgIDUsICA1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsIDE1LCAxNSAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAzMCwgMzAgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW21pbnV0ZSwgIDEsICAgICAgZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsICA1LCAgNSAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAxNSwgMTUgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgMzAsIDMwICogZHVyYXRpb25NaW51dGVdLFxuICAgIFsgIGhvdXIsICAxLCAgICAgIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAgMywgIDMgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgIDYsICA2ICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsIDEyLCAxMiAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICAgZGF5LCAgMSwgICAgICBkdXJhdGlvbkRheSAgIF0sXG4gICAgWyAgIGRheSwgIDIsICAyICogZHVyYXRpb25EYXkgICBdLFxuICAgIFsgIHdlZWssICAxLCAgICAgIGR1cmF0aW9uV2VlayAgXSxcbiAgICBbIG1vbnRoLCAgMSwgICAgICBkdXJhdGlvbk1vbnRoIF0sXG4gICAgWyBtb250aCwgIDMsICAzICogZHVyYXRpb25Nb250aCBdLFxuICAgIFsgIHllYXIsICAxLCAgICAgIGR1cmF0aW9uWWVhciAgXVxuICBdO1xuXG4gIGZ1bmN0aW9uIHRpY2tzKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICAgIGNvbnN0IHJldmVyc2UgPSBzdG9wIDwgc3RhcnQ7XG4gICAgaWYgKHJldmVyc2UpIFtzdGFydCwgc3RvcF0gPSBbc3RvcCwgc3RhcnRdO1xuICAgIGNvbnN0IGludGVydmFsID0gY291bnQgJiYgdHlwZW9mIGNvdW50LnJhbmdlID09PSBcImZ1bmN0aW9uXCIgPyBjb3VudCA6IHRpY2tJbnRlcnZhbChzdGFydCwgc3RvcCwgY291bnQpO1xuICAgIGNvbnN0IHRpY2tzID0gaW50ZXJ2YWwgPyBpbnRlcnZhbC5yYW5nZShzdGFydCwgK3N0b3AgKyAxKSA6IFtdOyAvLyBpbmNsdXNpdmUgc3RvcFxuICAgIHJldHVybiByZXZlcnNlID8gdGlja3MucmV2ZXJzZSgpIDogdGlja3M7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrSW50ZXJ2YWwoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIGNvdW50O1xuICAgIGNvbnN0IGkgPSBiaXNlY3RvcigoWywsIHN0ZXBdKSA9PiBzdGVwKS5yaWdodCh0aWNrSW50ZXJ2YWxzLCB0YXJnZXQpO1xuICAgIGlmIChpID09PSB0aWNrSW50ZXJ2YWxzLmxlbmd0aCkgcmV0dXJuIHllYXIuZXZlcnkodGlja1N0ZXAoc3RhcnQgLyBkdXJhdGlvblllYXIsIHN0b3AgLyBkdXJhdGlvblllYXIsIGNvdW50KSk7XG4gICAgaWYgKGkgPT09IDApIHJldHVybiBtaWxsaXNlY29uZC5ldmVyeShNYXRoLm1heCh0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpLCAxKSk7XG4gICAgY29uc3QgW3QsIHN0ZXBdID0gdGlja0ludGVydmFsc1t0YXJnZXQgLyB0aWNrSW50ZXJ2YWxzW2kgLSAxXVsyXSA8IHRpY2tJbnRlcnZhbHNbaV1bMl0gLyB0YXJnZXQgPyBpIC0gMSA6IGldO1xuICAgIHJldHVybiB0LmV2ZXJ5KHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIFt0aWNrcywgdGlja0ludGVydmFsXTtcbn1cblxuY29uc3QgW3V0Y1RpY2tzLCB1dGNUaWNrSW50ZXJ2YWxdID0gdGlja2VyKHV0Y1llYXIsIHV0Y01vbnRoLCB1dGNTdW5kYXksIHVuaXhEYXksIHV0Y0hvdXIsIHV0Y01pbnV0ZSk7XG5jb25zdCBbdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsXSA9IHRpY2tlcih0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lU3VuZGF5LCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSk7XG5cbmV4cG9ydCB7dXRjVGlja3MsIHV0Y1RpY2tJbnRlcnZhbCwgdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsfTtcbiIsImltcG9ydCB7XG4gIHRpbWVEYXksXG4gIHRpbWVTdW5kYXksXG4gIHRpbWVNb25kYXksXG4gIHRpbWVUaHVyc2RheSxcbiAgdGltZVllYXIsXG4gIHV0Y0RheSxcbiAgdXRjU3VuZGF5LFxuICB1dGNNb25kYXksXG4gIHV0Y1RodXJzZGF5LFxuICB1dGNZZWFyXG59IGZyb20gXCJkMy10aW1lXCI7XG5cbmZ1bmN0aW9uIGxvY2FsRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG59XG5cbmZ1bmN0aW9uIHV0Y0RhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG59XG5cbmZ1bmN0aW9uIG5ld0RhdGUoeSwgbSwgZCkge1xuICByZXR1cm4ge3k6IHksIG06IG0sIGQ6IGQsIEg6IDAsIE06IDAsIFM6IDAsIEw6IDB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRMb2NhbGUobG9jYWxlKSB7XG4gIHZhciBsb2NhbGVfZGF0ZVRpbWUgPSBsb2NhbGUuZGF0ZVRpbWUsXG4gICAgICBsb2NhbGVfZGF0ZSA9IGxvY2FsZS5kYXRlLFxuICAgICAgbG9jYWxlX3RpbWUgPSBsb2NhbGUudGltZSxcbiAgICAgIGxvY2FsZV9wZXJpb2RzID0gbG9jYWxlLnBlcmlvZHMsXG4gICAgICBsb2NhbGVfd2Vla2RheXMgPSBsb2NhbGUuZGF5cyxcbiAgICAgIGxvY2FsZV9zaG9ydFdlZWtkYXlzID0gbG9jYWxlLnNob3J0RGF5cyxcbiAgICAgIGxvY2FsZV9tb250aHMgPSBsb2NhbGUubW9udGhzLFxuICAgICAgbG9jYWxlX3Nob3J0TW9udGhzID0gbG9jYWxlLnNob3J0TW9udGhzO1xuXG4gIHZhciBwZXJpb2RSZSA9IGZvcm1hdFJlKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHBlcmlvZExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfcGVyaW9kcyksXG4gICAgICB3ZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgd2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgbW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9tb250aHMpLFxuICAgICAgbW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX21vbnRocyksXG4gICAgICBzaG9ydE1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRNb250aHMpLFxuICAgICAgc2hvcnRNb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRNb250aHMpO1xuXG4gIHZhciBmb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFdlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFNob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdE1vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRNaWNyb3NlY29uZHMsXG4gICAgXCJnXCI6IGZvcm1hdFllYXJJU08sXG4gICAgXCJHXCI6IGZvcm1hdEZ1bGxZZWFySVNPLFxuICAgIFwiSFwiOiBmb3JtYXRIb3VyMjQsXG4gICAgXCJJXCI6IGZvcm1hdEhvdXIxMixcbiAgICBcImpcIjogZm9ybWF0RGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBmb3JtYXRNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IGZvcm1hdE1vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBmb3JtYXRNaW51dGVzLFxuICAgIFwicFwiOiBmb3JtYXRQZXJpb2QsXG4gICAgXCJxXCI6IGZvcm1hdFF1YXJ0ZXIsXG4gICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBmb3JtYXRTZWNvbmRzLFxuICAgIFwidVwiOiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBmb3JtYXRXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0Wm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgdXRjRm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0VVRDU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRVVENXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRVVENTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRVVENNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImZcIjogZm9ybWF0VVRDTWljcm9zZWNvbmRzLFxuICAgIFwiZ1wiOiBmb3JtYXRVVENZZWFySVNPLFxuICAgIFwiR1wiOiBmb3JtYXRVVENGdWxsWWVhcklTTyxcbiAgICBcIkhcIjogZm9ybWF0VVRDSG91cjI0LFxuICAgIFwiSVwiOiBmb3JtYXRVVENIb3VyMTIsXG4gICAgXCJqXCI6IGZvcm1hdFVUQ0RheU9mWWVhcixcbiAgICBcIkxcIjogZm9ybWF0VVRDTWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBmb3JtYXRVVENNb250aE51bWJlcixcbiAgICBcIk1cIjogZm9ybWF0VVRDTWludXRlcyxcbiAgICBcInBcIjogZm9ybWF0VVRDUGVyaW9kLFxuICAgIFwicVwiOiBmb3JtYXRVVENRdWFydGVyLFxuICAgIFwiUVwiOiBmb3JtYXRVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyxcbiAgICBcIlNcIjogZm9ybWF0VVRDU2Vjb25kcyxcbiAgICBcInVcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSxcbiAgICBcIlZcIjogZm9ybWF0VVRDV2Vla051bWJlcklTTyxcbiAgICBcIndcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogbnVsbCxcbiAgICBcIlhcIjogbnVsbCxcbiAgICBcInlcIjogZm9ybWF0VVRDWWVhcixcbiAgICBcIllcIjogZm9ybWF0VVRDRnVsbFllYXIsXG4gICAgXCJaXCI6IGZvcm1hdFVUQ1pvbmUsXG4gICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgdmFyIHBhcnNlcyA9IHtcbiAgICBcImFcIjogcGFyc2VTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IHBhcnNlV2Vla2RheSxcbiAgICBcImJcIjogcGFyc2VTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBwYXJzZU1vbnRoLFxuICAgIFwiY1wiOiBwYXJzZUxvY2FsZURhdGVUaW1lLFxuICAgIFwiZFwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgXCJlXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcImZcIjogcGFyc2VNaWNyb3NlY29uZHMsXG4gICAgXCJnXCI6IHBhcnNlWWVhcixcbiAgICBcIkdcIjogcGFyc2VGdWxsWWVhcixcbiAgICBcIkhcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJJXCI6IHBhcnNlSG91cjI0LFxuICAgIFwialwiOiBwYXJzZURheU9mWWVhcixcbiAgICBcIkxcIjogcGFyc2VNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IHBhcnNlTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IHBhcnNlTWludXRlcyxcbiAgICBcInBcIjogcGFyc2VQZXJpb2QsXG4gICAgXCJxXCI6IHBhcnNlUXVhcnRlcixcbiAgICBcIlFcIjogcGFyc2VVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBwYXJzZVNlY29uZHMsXG4gICAgXCJ1XCI6IHBhcnNlV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogcGFyc2VXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBwYXJzZVdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IHBhcnNlV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogcGFyc2VXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBwYXJzZUxvY2FsZURhdGUsXG4gICAgXCJYXCI6IHBhcnNlTG9jYWxlVGltZSxcbiAgICBcInlcIjogcGFyc2VZZWFyLFxuICAgIFwiWVwiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiWlwiOiBwYXJzZVpvbmUsXG4gICAgXCIlXCI6IHBhcnNlTGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICAvLyBUaGVzZSByZWN1cnNpdmUgZGlyZWN0aXZlIGRlZmluaXRpb25zIG11c3QgYmUgZGVmZXJyZWQuXG4gIGZvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIGZvcm1hdHMpO1xuICB1dGNGb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCB1dGNGb3JtYXRzKTtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyLCBmb3JtYXRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBbXSxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgICAgYyxcbiAgICAgICAgICBwYWQsXG4gICAgICAgICAgZm9ybWF0O1xuXG4gICAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSk7XG5cbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIuY2hhckNvZGVBdChpKSA9PT0gMzcpIHtcbiAgICAgICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgICAgIGlmICgocGFkID0gcGFkc1tjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpXSkgIT0gbnVsbCkgYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKTtcbiAgICAgICAgICBlbHNlIHBhZCA9IGMgPT09IFwiZVwiID8gXCIgXCIgOiBcIjBcIjtcbiAgICAgICAgICBpZiAoZm9ybWF0ID0gZm9ybWF0c1tjXSkgYyA9IGZvcm1hdChkYXRlLCBwYWQpO1xuICAgICAgICAgIHN0cmluZy5wdXNoKGMpO1xuICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgcmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBuZXdQYXJzZShzcGVjaWZpZXIsIFopIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgZCA9IG5ld0RhdGUoMTkwMCwgdW5kZWZpbmVkLCAxKSxcbiAgICAgICAgICBpID0gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcgKz0gXCJcIiwgMCksXG4gICAgICAgICAgd2VlaywgZGF5O1xuICAgICAgaWYgKGkgIT0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIElmIGEgVU5JWCB0aW1lc3RhbXAgaXMgc3BlY2lmaWVkLCByZXR1cm4gaXQuXG4gICAgICBpZiAoXCJRXCIgaW4gZCkgcmV0dXJuIG5ldyBEYXRlKGQuUSk7XG4gICAgICBpZiAoXCJzXCIgaW4gZCkgcmV0dXJuIG5ldyBEYXRlKGQucyAqIDEwMDAgKyAoXCJMXCIgaW4gZCA/IGQuTCA6IDApKTtcblxuICAgICAgLy8gSWYgdGhpcyBpcyB1dGNQYXJzZSwgbmV2ZXIgdXNlIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAgICAgIGlmIChaICYmICEoXCJaXCIgaW4gZCkpIGQuWiA9IDA7XG5cbiAgICAgIC8vIFRoZSBhbS1wbSBmbGFnIGlzIDAgZm9yIEFNLCBhbmQgMSBmb3IgUE0uXG4gICAgICBpZiAoXCJwXCIgaW4gZCkgZC5IID0gZC5IICUgMTIgKyBkLnAgKiAxMjtcblxuICAgICAgLy8gSWYgdGhlIG1vbnRoIHdhcyBub3Qgc3BlY2lmaWVkLCBpbmhlcml0IGZyb20gdGhlIHF1YXJ0ZXIuXG4gICAgICBpZiAoZC5tID09PSB1bmRlZmluZWQpIGQubSA9IFwicVwiIGluIGQgPyBkLnEgOiAwO1xuXG4gICAgICAvLyBDb252ZXJ0IGRheS1vZi13ZWVrIGFuZCB3ZWVrLW9mLXllYXIgdG8gZGF5LW9mLXllYXIuXG4gICAgICBpZiAoXCJWXCIgaW4gZCkge1xuICAgICAgICBpZiAoZC5WIDwgMSB8fCBkLlYgPiA1MykgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICghKFwid1wiIGluIGQpKSBkLncgPSAxO1xuICAgICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICAgIHdlZWsgPSB1dGNEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSksIGRheSA9IHdlZWsuZ2V0VVRDRGF5KCk7XG4gICAgICAgICAgd2VlayA9IGRheSA+IDQgfHwgZGF5ID09PSAwID8gdXRjTW9uZGF5LmNlaWwod2VlaykgOiB1dGNNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHV0Y0RheS5vZmZzZXQod2VlaywgKGQuViAtIDEpICogNyk7XG4gICAgICAgICAgZC55ID0gd2Vlay5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgICAgIGQubSA9IHdlZWsuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICBkLmQgPSB3ZWVrLmdldFVUQ0RhdGUoKSArIChkLncgKyA2KSAlIDc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2VlayA9IGxvY2FsRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLCBkYXkgPSB3ZWVrLmdldERheSgpO1xuICAgICAgICAgIHdlZWsgPSBkYXkgPiA0IHx8IGRheSA9PT0gMCA/IHRpbWVNb25kYXkuY2VpbCh3ZWVrKSA6IHRpbWVNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHRpbWVEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgIGQueSA9IHdlZWsuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICBkLm0gPSB3ZWVrLmdldE1vbnRoKCk7XG4gICAgICAgICAgZC5kID0gd2Vlay5nZXREYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCkge1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gXCJ1XCIgaW4gZCA/IGQudSAlIDcgOiBcIldcIiBpbiBkID8gMSA6IDA7XG4gICAgICAgIGRheSA9IFwiWlwiIGluIGQgPyB1dGNEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSkuZ2V0VVRDRGF5KCkgOiBsb2NhbERhdGUobmV3RGF0ZShkLnksIDAsIDEpKS5nZXREYXkoKTtcbiAgICAgICAgZC5tID0gMDtcbiAgICAgICAgZC5kID0gXCJXXCIgaW4gZCA/IChkLncgKyA2KSAlIDcgKyBkLlcgKiA3IC0gKGRheSArIDUpICUgNyA6IGQudyArIGQuVSAqIDcgLSAoZGF5ICsgNikgJSA3O1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBhIHRpbWUgem9uZSBpcyBzcGVjaWZpZWQsIGFsbCBmaWVsZHMgYXJlIGludGVycHJldGVkIGFzIFVUQyBhbmQgdGhlblxuICAgICAgLy8gb2Zmc2V0IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHRpbWUgem9uZS5cbiAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgIGQuSCArPSBkLlogLyAxMDAgfCAwO1xuICAgICAgICBkLk0gKz0gZC5aICUgMTAwO1xuICAgICAgICByZXR1cm4gdXRjRGF0ZShkKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3RoZXJ3aXNlLCBhbGwgZmllbGRzIGFyZSBpbiBsb2NhbCB0aW1lLlxuICAgICAgcmV0dXJuIGxvY2FsRGF0ZShkKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcsIGopIHtcbiAgICB2YXIgaSA9IDAsXG4gICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICBtID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgYyxcbiAgICAgICAgcGFyc2U7XG5cbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgIGlmIChqID49IG0pIHJldHVybiAtMTtcbiAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckNvZGVBdChpKyspO1xuICAgICAgaWYgKGMgPT09IDM3KSB7XG4gICAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckF0KGkrKyk7XG4gICAgICAgIHBhcnNlID0gcGFyc2VzW2MgaW4gcGFkcyA/IHNwZWNpZmllci5jaGFyQXQoaSsrKSA6IGNdO1xuICAgICAgICBpZiAoIXBhcnNlIHx8ICgoaiA9IHBhcnNlKGQsIHN0cmluZywgaikpIDwgMCkpIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoYyAhPSBzdHJpbmcuY2hhckNvZGVBdChqKyspKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gajtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlUGVyaW9kKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gcGVyaW9kUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQucCA9IHBlcmlvZExvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydFdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBzaG9ydFdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC53ID0gc2hvcnRXZWVrZGF5TG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSB3ZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHdlZWtkYXlMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHNob3J0TW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5tID0gc2hvcnRNb250aExvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG1vbnRoUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQubSA9IG1vbnRoTG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZVRpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfdGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldEhvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFF1YXJ0ZXIoZCkge1xuICAgIHJldHVybiAxICsgfn4oZC5nZXRNb250aCgpIC8gMyk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRXZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfd2Vla2RheXNbZC5nZXRVVENEYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0VVRDTW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1BlcmlvZChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9wZXJpb2RzWysoZC5nZXRVVENIb3VycygpID49IDEyKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENRdWFydGVyKGQpIHtcbiAgICByZXR1cm4gMSArIH5+KGQuZ2V0VVRDTW9udGgoKSAvIDMpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIGZvcm1hdHMpO1xuICAgICAgZi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIGY7XG4gICAgfSxcbiAgICBwYXJzZTogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciArPSBcIlwiLCBmYWxzZSk7XG4gICAgICBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gcDtcbiAgICB9LFxuICAgIHV0Y0Zvcm1hdDogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgZiA9IG5ld0Zvcm1hdChzcGVjaWZpZXIgKz0gXCJcIiwgdXRjRm9ybWF0cyk7XG4gICAgICBmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gZjtcbiAgICB9LFxuICAgIHV0Y1BhcnNlOiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBwID0gbmV3UGFyc2Uoc3BlY2lmaWVyICs9IFwiXCIsIHRydWUpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9O1xufVxuXG52YXIgcGFkcyA9IHtcIi1cIjogXCJcIiwgXCJfXCI6IFwiIFwiLCBcIjBcIjogXCIwXCJ9LFxuICAgIG51bWJlclJlID0gL15cXHMqXFxkKy8sIC8vIG5vdGU6IGlnbm9yZXMgbmV4dCBkaXJlY3RpdmVcbiAgICBwZXJjZW50UmUgPSAvXiUvLFxuICAgIHJlcXVvdGVSZSA9IC9bXFxcXF4kKis/fFtcXF0oKS57fV0vZztcblxuZnVuY3Rpb24gcGFkKHZhbHVlLCBmaWxsLCB3aWR0aCkge1xuICB2YXIgc2lnbiA9IHZhbHVlIDwgMCA/IFwiLVwiIDogXCJcIixcbiAgICAgIHN0cmluZyA9IChzaWduID8gLXZhbHVlIDogdmFsdWUpICsgXCJcIixcbiAgICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHJldHVybiBzaWduICsgKGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSArIHN0cmluZyA6IHN0cmluZyk7XG59XG5cbmZ1bmN0aW9uIHJlcXVvdGUocykge1xuICByZXR1cm4gcy5yZXBsYWNlKHJlcXVvdGVSZSwgXCJcXFxcJCZcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFJlKG5hbWVzKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiICsgbmFtZXMubWFwKHJlcXVvdGUpLmpvaW4oXCJ8XCIpICsgXCIpXCIsIFwiaVwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TG9va3VwKG5hbWVzKSB7XG4gIHJldHVybiBuZXcgTWFwKG5hbWVzLm1hcCgobmFtZSwgaSkgPT4gW25hbWUudG9Mb3dlckNhc2UoKSwgaV0pKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQudyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLnUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5VID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVySVNPKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuViA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlcgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZ1bGxZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA0KSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSArICgrblswXSA+IDY4ID8gMTkwMCA6IDIwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWm9uZShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSAvXihaKXwoWystXVxcZFxcZCkoPzo6PyhcXGRcXGQpKT8vLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuWiA9IG5bMV0gPyAwIDogLShuWzJdICsgKG5bM10gfHwgXCIwMFwiKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VRdWFydGVyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQucSA9IG5bMF0gKiAzIC0gMywgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1vbnRoTnVtYmVyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQubSA9IG5bMF0gLSAxLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF5T2ZNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLm0gPSAwLCBkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUhvdXIyNChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLkggPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbnV0ZXMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5NID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuUyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWlsbGlzZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAzKSk7XG4gIHJldHVybiBuID8gKGQuTCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWljcm9zZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuTCA9IE1hdGguZmxvb3IoblswXSAvIDEwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGl0ZXJhbFBlcmNlbnQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gcGVyY2VudFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gaSArIG5bMF0ubGVuZ3RoIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVW5peFRpbWVzdGFtcChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gIHJldHVybiBuID8gKGQuUSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLnMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZk1vbnRoKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldERhdGUoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIyNChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG91cjEyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheU9mWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoMSArIHRpbWVEYXkuY291bnQodGltZVllYXIoZCksIGQpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1pbGxpc2Vjb25kcygpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWljcm9zZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSArIFwiMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1vbnRoTnVtYmVyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1vbnRoKCkgKyAxLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWludXRlcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaW51dGVzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFNlY29uZHMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXkoZCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgcmV0dXJuIGRheSA9PT0gMCA/IDcgOiBkYXk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJTdW5kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHRpbWVTdW5kYXkuY291bnQodGltZVllYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGRJU08oZCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgcmV0dXJuIChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdGltZVRodXJzZGF5KGQpIDogdGltZVRodXJzZGF5LmNlaWwoZCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJJU08oZCwgcCkge1xuICBkID0gZElTTyhkKTtcbiAgcmV0dXJuIHBhZCh0aW1lVGh1cnNkYXkuY291bnQodGltZVllYXIoZCksIGQpICsgKHRpbWVZZWFyKGQpLmdldERheSgpID09PSA0KSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkoZCkge1xuICByZXR1cm4gZC5nZXREYXkoKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlck1vbmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodGltZU1vbmRheS5jb3VudCh0aW1lWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcklTTyhkLCBwKSB7XG4gIGQgPSBkSVNPKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZ1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZ1bGxZZWFySVNPKGQsIHApIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIGQgPSAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHRpbWVUaHVyc2RheShkKSA6IHRpbWVUaHVyc2RheS5jZWlsKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Wm9uZShkKSB7XG4gIHZhciB6ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4gKHogPiAwID8gXCItXCIgOiAoeiAqPSAtMSwgXCIrXCIpKVxuICAgICAgKyBwYWQoeiAvIDYwIHwgMCwgXCIwXCIsIDIpXG4gICAgICArIHBhZCh6ICUgNjAsIFwiMFwiLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENEYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB1dGNEYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDU2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkb3cgPSBkLmdldFVUQ0RheSgpO1xuICByZXR1cm4gZG93ID09PSAwID8gNyA6IGRvdztcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodXRjU3VuZGF5LmNvdW50KHV0Y1llYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIFVUQ2RJU08oZCkge1xuICB2YXIgZGF5ID0gZC5nZXRVVENEYXkoKTtcbiAgcmV0dXJuIChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdXRjVGh1cnNkYXkoZCkgOiB1dGNUaHVyc2RheS5jZWlsKGQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVySVNPKGQsIHApIHtcbiAgZCA9IFVUQ2RJU08oZCk7XG4gIHJldHVybiBwYWQodXRjVGh1cnNkYXkuY291bnQodXRjWWVhcihkKSwgZCkgKyAodXRjWWVhcihkKS5nZXRVVENEYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y01vbmRheS5jb3VudCh1dGNZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENZZWFySVNPKGQsIHApIHtcbiAgZCA9IFVUQ2RJU08oZCk7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRnVsbFllYXJJU08oZCwgcCkge1xuICB2YXIgZGF5ID0gZC5nZXRVVENEYXkoKTtcbiAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdXRjVGh1cnNkYXkoZCkgOiB1dGNUaHVyc2RheS5jZWlsKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWm9uZSgpIHtcbiAgcmV0dXJuIFwiKzAwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TGl0ZXJhbFBlcmNlbnQoKSB7XG4gIHJldHVybiBcIiVcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5peFRpbWVzdGFtcChkKSB7XG4gIHJldHVybiArZDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMoZCkge1xuICByZXR1cm4gTWF0aC5mbG9vcigrZCAvIDEwMDApO1xufVxuIiwiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgdGltZUZvcm1hdDtcbmV4cG9ydCB2YXIgdGltZVBhcnNlO1xuZXhwb3J0IHZhciB1dGNGb3JtYXQ7XG5leHBvcnQgdmFyIHV0Y1BhcnNlO1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgZGF0ZVRpbWU6IFwiJXgsICVYXCIsXG4gIGRhdGU6IFwiJS1tLyUtZC8lWVwiLFxuICB0aW1lOiBcIiUtSTolTTolUyAlcFwiLFxuICBwZXJpb2RzOiBbXCJBTVwiLCBcIlBNXCJdLFxuICBkYXlzOiBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXSxcbiAgc2hvcnREYXlzOiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl0sXG4gIG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXG4gIHNob3J0TW9udGhzOiBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICB0aW1lRm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgdGltZVBhcnNlID0gbG9jYWxlLnBhcnNlO1xuICB1dGNGb3JtYXQgPSBsb2NhbGUudXRjRm9ybWF0O1xuICB1dGNQYXJzZSA9IGxvY2FsZS51dGNQYXJzZTtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiIsImltcG9ydCB7dGltZVllYXIsIHRpbWVNb250aCwgdGltZVdlZWssIHRpbWVEYXksIHRpbWVIb3VyLCB0aW1lTWludXRlLCB0aW1lU2Vjb25kLCB0aW1lVGlja3MsIHRpbWVUaWNrSW50ZXJ2YWx9IGZyb20gXCJkMy10aW1lXCI7XG5pbXBvcnQge3RpbWVGb3JtYXR9IGZyb20gXCJkMy10aW1lLWZvcm1hdFwiO1xuaW1wb3J0IGNvbnRpbnVvdXMsIHtjb3B5fSBmcm9tIFwiLi9jb250aW51b3VzLmpzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuaW1wb3J0IG5pY2UgZnJvbSBcIi4vbmljZS5qc1wiO1xuXG5mdW5jdGlvbiBkYXRlKHQpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHQpO1xufVxuXG5mdW5jdGlvbiBudW1iZXIodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgPyArdCA6ICtuZXcgRGF0ZSgrdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhcih0aWNrcywgdGlja0ludGVydmFsLCB5ZWFyLCBtb250aCwgd2VlaywgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZm9ybWF0KSB7XG4gIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoKSxcbiAgICAgIGludmVydCA9IHNjYWxlLmludmVydCxcbiAgICAgIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICB2YXIgZm9ybWF0TWlsbGlzZWNvbmQgPSBmb3JtYXQoXCIuJUxcIiksXG4gICAgICBmb3JtYXRTZWNvbmQgPSBmb3JtYXQoXCI6JVNcIiksXG4gICAgICBmb3JtYXRNaW51dGUgPSBmb3JtYXQoXCIlSTolTVwiKSxcbiAgICAgIGZvcm1hdEhvdXIgPSBmb3JtYXQoXCIlSSAlcFwiKSxcbiAgICAgIGZvcm1hdERheSA9IGZvcm1hdChcIiVhICVkXCIpLFxuICAgICAgZm9ybWF0V2VlayA9IGZvcm1hdChcIiViICVkXCIpLFxuICAgICAgZm9ybWF0TW9udGggPSBmb3JtYXQoXCIlQlwiKSxcbiAgICAgIGZvcm1hdFllYXIgPSBmb3JtYXQoXCIlWVwiKTtcblxuICBmdW5jdGlvbiB0aWNrRm9ybWF0KGRhdGUpIHtcbiAgICByZXR1cm4gKHNlY29uZChkYXRlKSA8IGRhdGUgPyBmb3JtYXRNaWxsaXNlY29uZFxuICAgICAgICA6IG1pbnV0ZShkYXRlKSA8IGRhdGUgPyBmb3JtYXRTZWNvbmRcbiAgICAgICAgOiBob3VyKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1pbnV0ZVxuICAgICAgICA6IGRheShkYXRlKSA8IGRhdGUgPyBmb3JtYXRIb3VyXG4gICAgICAgIDogbW9udGgoZGF0ZSkgPCBkYXRlID8gKHdlZWsoZGF0ZSkgPCBkYXRlID8gZm9ybWF0RGF5IDogZm9ybWF0V2VlaylcbiAgICAgICAgOiB5ZWFyKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1vbnRoXG4gICAgICAgIDogZm9ybWF0WWVhcikoZGF0ZSk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGludmVydCh5KSk7XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gZG9tYWluKEFycmF5LmZyb20oXywgbnVtYmVyKSkgOiBkb21haW4oKS5tYXAoZGF0ZSk7XG4gIH07XG5cbiAgc2NhbGUudGlja3MgPSBmdW5jdGlvbihpbnRlcnZhbCkge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgcmV0dXJuIHRpY2tzKGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgaW50ZXJ2YWwgPT0gbnVsbCA/IDEwIDogaW50ZXJ2YWwpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XG4gICAgcmV0dXJuIHNwZWNpZmllciA9PSBudWxsID8gdGlja0Zvcm1hdCA6IGZvcm1hdChzcGVjaWZpZXIpO1xuICB9O1xuXG4gIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihpbnRlcnZhbCkge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgaWYgKCFpbnRlcnZhbCB8fCB0eXBlb2YgaW50ZXJ2YWwucmFuZ2UgIT09IFwiZnVuY3Rpb25cIikgaW50ZXJ2YWwgPSB0aWNrSW50ZXJ2YWwoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBpbnRlcnZhbCA9PSBudWxsID8gMTAgOiBpbnRlcnZhbCk7XG4gICAgcmV0dXJuIGludGVydmFsID8gZG9tYWluKG5pY2UoZCwgaW50ZXJ2YWwpKSA6IHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgY2FsZW5kYXIodGlja3MsIHRpY2tJbnRlcnZhbCwgeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZvcm1hdCkpO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGltZSgpIHtcbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShjYWxlbmRhcih0aW1lVGlja3MsIHRpbWVUaWNrSW50ZXJ2YWwsIHRpbWVZZWFyLCB0aW1lTW9udGgsIHRpbWVXZWVrLCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSwgdGltZVNlY29uZCwgdGltZUZvcm1hdCkuZG9tYWluKFtuZXcgRGF0ZSgyMDAwLCAwLCAxKSwgbmV3IERhdGUoMjAwMCwgMCwgMildKSwgYXJndW1lbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5pY2UoZG9tYWluLCBpbnRlcnZhbCkge1xuICBkb21haW4gPSBkb21haW4uc2xpY2UoKTtcblxuICB2YXIgaTAgPSAwLFxuICAgICAgaTEgPSBkb21haW4ubGVuZ3RoIC0gMSxcbiAgICAgIHgwID0gZG9tYWluW2kwXSxcbiAgICAgIHgxID0gZG9tYWluW2kxXSxcbiAgICAgIHQ7XG5cbiAgaWYgKHgxIDwgeDApIHtcbiAgICB0ID0gaTAsIGkwID0gaTEsIGkxID0gdDtcbiAgICB0ID0geDAsIHgwID0geDEsIHgxID0gdDtcbiAgfVxuXG4gIGRvbWFpbltpMF0gPSBpbnRlcnZhbC5mbG9vcih4MCk7XG4gIGRvbWFpbltpMV0gPSBpbnRlcnZhbC5jZWlsKHgxKTtcbiAgcmV0dXJuIGRvbWFpbjtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVSZ2JCYXNpc30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHNjaGVtZSA9PiBpbnRlcnBvbGF0ZVJnYkJhc2lzKHNjaGVtZVtzY2hlbWUubGVuZ3RoIC0gMV0pO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmM4ZDU5ZmZmZmJmOTlkNTk0XCIsXG4gIFwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICB2YXIgbiA9IHNwZWNpZmllci5sZW5ndGggLyA2IHwgMCwgY29sb3JzID0gbmV3IEFycmF5KG4pLCBpID0gMDtcbiAgd2hpbGUgKGkgPCBuKSBjb2xvcnNbaV0gPSBcIiNcIiArIHNwZWNpZmllci5zbGljZShpICogNiwgKytpICogNik7XG4gIHJldHVybiBjb2xvcnM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb25zdGFudCgpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImV4cG9ydCBjb25zdCBhYnMgPSBNYXRoLmFicztcbmV4cG9ydCBjb25zdCBhdGFuMiA9IE1hdGguYXRhbjI7XG5leHBvcnQgY29uc3QgY29zID0gTWF0aC5jb3M7XG5leHBvcnQgY29uc3QgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgY29uc3QgbWluID0gTWF0aC5taW47XG5leHBvcnQgY29uc3Qgc2luID0gTWF0aC5zaW47XG5leHBvcnQgY29uc3Qgc3FydCA9IE1hdGguc3FydDtcblxuZXhwb3J0IGNvbnN0IGVwc2lsb24gPSAxZS0xMjtcbmV4cG9ydCBjb25zdCBwaSA9IE1hdGguUEk7XG5leHBvcnQgY29uc3QgaGFsZlBpID0gcGkgLyAyO1xuZXhwb3J0IGNvbnN0IHRhdSA9IDIgKiBwaTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFjb3MoeCkge1xuICByZXR1cm4geCA+IDEgPyAwIDogeCA8IC0xID8gcGkgOiBNYXRoLmFjb3MoeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc2luKHgpIHtcbiAgcmV0dXJuIHggPj0gMSA/IGhhbGZQaSA6IHggPD0gLTEgPyAtaGFsZlBpIDogTWF0aC5hc2luKHgpO1xufVxuIiwiaW1wb3J0IHtQYXRofSBmcm9tIFwiZDMtcGF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFBhdGgoc2hhcGUpIHtcbiAgbGV0IGRpZ2l0cyA9IDM7XG5cbiAgc2hhcGUuZGlnaXRzID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRpZ2l0cztcbiAgICBpZiAoXyA9PSBudWxsKSB7XG4gICAgICBkaWdpdHMgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkID0gTWF0aC5mbG9vcihfKTtcbiAgICAgIGlmICghKGQgPj0gMCkpIHRocm93IG5ldyBSYW5nZUVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHtffWApO1xuICAgICAgZGlnaXRzID0gZDtcbiAgICB9XG4gICAgcmV0dXJuIHNoYXBlO1xuICB9O1xuXG4gIHJldHVybiAoKSA9PiBuZXcgUGF0aChkaWdpdHMpO1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQge2FicywgYWNvcywgYXNpbiwgYXRhbjIsIGNvcywgZXBzaWxvbiwgaGFsZlBpLCBtYXgsIG1pbiwgcGksIHNpbiwgc3FydCwgdGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5pbXBvcnQge3dpdGhQYXRofSBmcm9tIFwiLi9wYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGFyY0lubmVyUmFkaXVzKGQpIHtcbiAgcmV0dXJuIGQuaW5uZXJSYWRpdXM7XG59XG5cbmZ1bmN0aW9uIGFyY091dGVyUmFkaXVzKGQpIHtcbiAgcmV0dXJuIGQub3V0ZXJSYWRpdXM7XG59XG5cbmZ1bmN0aW9uIGFyY1N0YXJ0QW5nbGUoZCkge1xuICByZXR1cm4gZC5zdGFydEFuZ2xlO1xufVxuXG5mdW5jdGlvbiBhcmNFbmRBbmdsZShkKSB7XG4gIHJldHVybiBkLmVuZEFuZ2xlO1xufVxuXG5mdW5jdGlvbiBhcmNQYWRBbmdsZShkKSB7XG4gIHJldHVybiBkICYmIGQucGFkQW5nbGU7IC8vIE5vdGU6IG9wdGlvbmFsIVxufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3QoeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKSB7XG4gIHZhciB4MTAgPSB4MSAtIHgwLCB5MTAgPSB5MSAtIHkwLFxuICAgICAgeDMyID0geDMgLSB4MiwgeTMyID0geTMgLSB5MixcbiAgICAgIHQgPSB5MzIgKiB4MTAgLSB4MzIgKiB5MTA7XG4gIGlmICh0ICogdCA8IGVwc2lsb24pIHJldHVybjtcbiAgdCA9ICh4MzIgKiAoeTAgLSB5MikgLSB5MzIgKiAoeDAgLSB4MikpIC8gdDtcbiAgcmV0dXJuIFt4MCArIHQgKiB4MTAsIHkwICsgdCAqIHkxMF07XG59XG5cbi8vIENvbXB1dGUgcGVycGVuZGljdWxhciBvZmZzZXQgbGluZSBvZiBsZW5ndGggcmMuXG4vLyBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL0NpcmNsZS1MaW5lSW50ZXJzZWN0aW9uLmh0bWxcbmZ1bmN0aW9uIGNvcm5lclRhbmdlbnRzKHgwLCB5MCwgeDEsIHkxLCByMSwgcmMsIGN3KSB7XG4gIHZhciB4MDEgPSB4MCAtIHgxLFxuICAgICAgeTAxID0geTAgLSB5MSxcbiAgICAgIGxvID0gKGN3ID8gcmMgOiAtcmMpIC8gc3FydCh4MDEgKiB4MDEgKyB5MDEgKiB5MDEpLFxuICAgICAgb3ggPSBsbyAqIHkwMSxcbiAgICAgIG95ID0gLWxvICogeDAxLFxuICAgICAgeDExID0geDAgKyBveCxcbiAgICAgIHkxMSA9IHkwICsgb3ksXG4gICAgICB4MTAgPSB4MSArIG94LFxuICAgICAgeTEwID0geTEgKyBveSxcbiAgICAgIHgwMCA9ICh4MTEgKyB4MTApIC8gMixcbiAgICAgIHkwMCA9ICh5MTEgKyB5MTApIC8gMixcbiAgICAgIGR4ID0geDEwIC0geDExLFxuICAgICAgZHkgPSB5MTAgLSB5MTEsXG4gICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5LFxuICAgICAgciA9IHIxIC0gcmMsXG4gICAgICBEID0geDExICogeTEwIC0geDEwICogeTExLFxuICAgICAgZCA9IChkeSA8IDAgPyAtMSA6IDEpICogc3FydChtYXgoMCwgciAqIHIgKiBkMiAtIEQgKiBEKSksXG4gICAgICBjeDAgPSAoRCAqIGR5IC0gZHggKiBkKSAvIGQyLFxuICAgICAgY3kwID0gKC1EICogZHggLSBkeSAqIGQpIC8gZDIsXG4gICAgICBjeDEgPSAoRCAqIGR5ICsgZHggKiBkKSAvIGQyLFxuICAgICAgY3kxID0gKC1EICogZHggKyBkeSAqIGQpIC8gZDIsXG4gICAgICBkeDAgPSBjeDAgLSB4MDAsXG4gICAgICBkeTAgPSBjeTAgLSB5MDAsXG4gICAgICBkeDEgPSBjeDEgLSB4MDAsXG4gICAgICBkeTEgPSBjeTEgLSB5MDA7XG5cbiAgLy8gUGljayB0aGUgY2xvc2VyIG9mIHRoZSB0d28gaW50ZXJzZWN0aW9uIHBvaW50cy5cbiAgLy8gVE9ETyBJcyB0aGVyZSBhIGZhc3RlciB3YXkgdG8gZGV0ZXJtaW5lIHdoaWNoIGludGVyc2VjdGlvbiB0byB1c2U/XG4gIGlmIChkeDAgKiBkeDAgKyBkeTAgKiBkeTAgPiBkeDEgKiBkeDEgKyBkeTEgKiBkeTEpIGN4MCA9IGN4MSwgY3kwID0gY3kxO1xuXG4gIHJldHVybiB7XG4gICAgY3g6IGN4MCxcbiAgICBjeTogY3kwLFxuICAgIHgwMTogLW94LFxuICAgIHkwMTogLW95LFxuICAgIHgxMTogY3gwICogKHIxIC8gciAtIDEpLFxuICAgIHkxMTogY3kwICogKHIxIC8gciAtIDEpXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgaW5uZXJSYWRpdXMgPSBhcmNJbm5lclJhZGl1cyxcbiAgICAgIG91dGVyUmFkaXVzID0gYXJjT3V0ZXJSYWRpdXMsXG4gICAgICBjb3JuZXJSYWRpdXMgPSBjb25zdGFudCgwKSxcbiAgICAgIHBhZFJhZGl1cyA9IG51bGwsXG4gICAgICBzdGFydEFuZ2xlID0gYXJjU3RhcnRBbmdsZSxcbiAgICAgIGVuZEFuZ2xlID0gYXJjRW5kQW5nbGUsXG4gICAgICBwYWRBbmdsZSA9IGFyY1BhZEFuZ2xlLFxuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBwYXRoID0gd2l0aFBhdGgoYXJjKTtcblxuICBmdW5jdGlvbiBhcmMoKSB7XG4gICAgdmFyIGJ1ZmZlcixcbiAgICAgICAgcixcbiAgICAgICAgcjAgPSAraW5uZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgcjEgPSArb3V0ZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgYTAgPSBzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgLSBoYWxmUGksXG4gICAgICAgIGExID0gZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAtIGhhbGZQaSxcbiAgICAgICAgZGEgPSBhYnMoYTEgLSBhMCksXG4gICAgICAgIGN3ID0gYTEgPiBhMDtcblxuICAgIGlmICghY29udGV4dCkgY29udGV4dCA9IGJ1ZmZlciA9IHBhdGgoKTtcblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvdXRlciByYWRpdXMgaXMgYWx3YXlzIGxhcmdlciB0aGFuIHRoZSBpbm5lciByYWRpdXMuXG4gICAgaWYgKHIxIDwgcjApIHIgPSByMSwgcjEgPSByMCwgcjAgPSByO1xuXG4gICAgLy8gSXMgaXQgYSBwb2ludD9cbiAgICBpZiAoIShyMSA+IGVwc2lsb24pKSBjb250ZXh0Lm1vdmVUbygwLCAwKTtcblxuICAgIC8vIE9yIGlzIGl0IGEgY2lyY2xlIG9yIGFubnVsdXM/XG4gICAgZWxzZSBpZiAoZGEgPiB0YXUgLSBlcHNpbG9uKSB7XG4gICAgICBjb250ZXh0Lm1vdmVUbyhyMSAqIGNvcyhhMCksIHIxICogc2luKGEwKSk7XG4gICAgICBjb250ZXh0LmFyYygwLCAwLCByMSwgYTAsIGExLCAhY3cpO1xuICAgICAgaWYgKHIwID4gZXBzaWxvbikge1xuICAgICAgICBjb250ZXh0Lm1vdmVUbyhyMCAqIGNvcyhhMSksIHIwICogc2luKGExKSk7XG4gICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIwLCBhMSwgYTAsIGN3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPciBpcyBpdCBhIGNpcmN1bGFyIG9yIGFubnVsYXIgc2VjdG9yP1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGEwMSA9IGEwLFxuICAgICAgICAgIGExMSA9IGExLFxuICAgICAgICAgIGEwMCA9IGEwLFxuICAgICAgICAgIGExMCA9IGExLFxuICAgICAgICAgIGRhMCA9IGRhLFxuICAgICAgICAgIGRhMSA9IGRhLFxuICAgICAgICAgIGFwID0gcGFkQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAvIDIsXG4gICAgICAgICAgcnAgPSAoYXAgPiBlcHNpbG9uKSAmJiAocGFkUmFkaXVzID8gK3BhZFJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogc3FydChyMCAqIHIwICsgcjEgKiByMSkpLFxuICAgICAgICAgIHJjID0gbWluKGFicyhyMSAtIHIwKSAvIDIsICtjb3JuZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSksXG4gICAgICAgICAgcmMwID0gcmMsXG4gICAgICAgICAgcmMxID0gcmMsXG4gICAgICAgICAgdDAsXG4gICAgICAgICAgdDE7XG5cbiAgICAgIC8vIEFwcGx5IHBhZGRpbmc/IE5vdGUgdGhhdCBzaW5jZSByMSDiiaUgcjAsIGRhMSDiiaUgZGEwLlxuICAgICAgaWYgKHJwID4gZXBzaWxvbikge1xuICAgICAgICB2YXIgcDAgPSBhc2luKHJwIC8gcjAgKiBzaW4oYXApKSxcbiAgICAgICAgICAgIHAxID0gYXNpbihycCAvIHIxICogc2luKGFwKSk7XG4gICAgICAgIGlmICgoZGEwIC09IHAwICogMikgPiBlcHNpbG9uKSBwMCAqPSAoY3cgPyAxIDogLTEpLCBhMDAgKz0gcDAsIGExMCAtPSBwMDtcbiAgICAgICAgZWxzZSBkYTAgPSAwLCBhMDAgPSBhMTAgPSAoYTAgKyBhMSkgLyAyO1xuICAgICAgICBpZiAoKGRhMSAtPSBwMSAqIDIpID4gZXBzaWxvbikgcDEgKj0gKGN3ID8gMSA6IC0xKSwgYTAxICs9IHAxLCBhMTEgLT0gcDE7XG4gICAgICAgIGVsc2UgZGExID0gMCwgYTAxID0gYTExID0gKGEwICsgYTEpIC8gMjtcbiAgICAgIH1cblxuICAgICAgdmFyIHgwMSA9IHIxICogY29zKGEwMSksXG4gICAgICAgICAgeTAxID0gcjEgKiBzaW4oYTAxKSxcbiAgICAgICAgICB4MTAgPSByMCAqIGNvcyhhMTApLFxuICAgICAgICAgIHkxMCA9IHIwICogc2luKGExMCk7XG5cbiAgICAgIC8vIEFwcGx5IHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGlmIChyYyA+IGVwc2lsb24pIHtcbiAgICAgICAgdmFyIHgxMSA9IHIxICogY29zKGExMSksXG4gICAgICAgICAgICB5MTEgPSByMSAqIHNpbihhMTEpLFxuICAgICAgICAgICAgeDAwID0gcjAgKiBjb3MoYTAwKSxcbiAgICAgICAgICAgIHkwMCA9IHIwICogc2luKGEwMCksXG4gICAgICAgICAgICBvYztcblxuICAgICAgICAvLyBSZXN0cmljdCB0aGUgY29ybmVyIHJhZGl1cyBhY2NvcmRpbmcgdG8gdGhlIHNlY3RvciBhbmdsZS4gSWYgdGhpc1xuICAgICAgICAvLyBpbnRlcnNlY3Rpb24gZmFpbHMsIGl04oCZcyBwcm9iYWJseSBiZWNhdXNlIHRoZSBhcmMgaXMgdG9vIHNtYWxsLCBzb1xuICAgICAgICAvLyBkaXNhYmxlIHRoZSBjb3JuZXIgcmFkaXVzIGVudGlyZWx5LlxuICAgICAgICBpZiAoZGEgPCBwaSkge1xuICAgICAgICAgIGlmIChvYyA9IGludGVyc2VjdCh4MDEsIHkwMSwgeDAwLCB5MDAsIHgxMSwgeTExLCB4MTAsIHkxMCkpIHtcbiAgICAgICAgICAgIHZhciBheCA9IHgwMSAtIG9jWzBdLFxuICAgICAgICAgICAgICAgIGF5ID0geTAxIC0gb2NbMV0sXG4gICAgICAgICAgICAgICAgYnggPSB4MTEgLSBvY1swXSxcbiAgICAgICAgICAgICAgICBieSA9IHkxMSAtIG9jWzFdLFxuICAgICAgICAgICAgICAgIGtjID0gMSAvIHNpbihhY29zKChheCAqIGJ4ICsgYXkgKiBieSkgLyAoc3FydChheCAqIGF4ICsgYXkgKiBheSkgKiBzcXJ0KGJ4ICogYnggKyBieSAqIGJ5KSkpIC8gMiksXG4gICAgICAgICAgICAgICAgbGMgPSBzcXJ0KG9jWzBdICogb2NbMF0gKyBvY1sxXSAqIG9jWzFdKTtcbiAgICAgICAgICAgIHJjMCA9IG1pbihyYywgKHIwIC0gbGMpIC8gKGtjIC0gMSkpO1xuICAgICAgICAgICAgcmMxID0gbWluKHJjLCAocjEgLSBsYykgLyAoa2MgKyAxKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJjMCA9IHJjMSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElzIHRoZSBzZWN0b3IgY29sbGFwc2VkIHRvIGEgbGluZT9cbiAgICAgIGlmICghKGRhMSA+IGVwc2lsb24pKSBjb250ZXh0Lm1vdmVUbyh4MDEsIHkwMSk7XG5cbiAgICAgIC8vIERvZXMgdGhlIHNlY3RvcuKAmXMgb3V0ZXIgcmluZyBoYXZlIHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGVsc2UgaWYgKHJjMSA+IGVwc2lsb24pIHtcbiAgICAgICAgdDAgPSBjb3JuZXJUYW5nZW50cyh4MDAsIHkwMCwgeDAxLCB5MDEsIHIxLCByYzEsIGN3KTtcbiAgICAgICAgdDEgPSBjb3JuZXJUYW5nZW50cyh4MTEsIHkxMSwgeDEwLCB5MTAsIHIxLCByYzEsIGN3KTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh0MC5jeCArIHQwLngwMSwgdDAuY3kgKyB0MC55MDEpO1xuXG4gICAgICAgIC8vIEhhdmUgdGhlIGNvcm5lcnMgbWVyZ2VkP1xuICAgICAgICBpZiAocmMxIDwgcmMpIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMxLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcblxuICAgICAgICAvLyBPdGhlcndpc2UsIGRyYXcgdGhlIHR3byBjb3JuZXJzIGFuZCB0aGUgcmluZy5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzEsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDAueTExLCB0MC54MTEpLCAhY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIxLCBhdGFuMih0MC5jeSArIHQwLnkxMSwgdDAuY3ggKyB0MC54MTEpLCBhdGFuMih0MS5jeSArIHQxLnkxMSwgdDEuY3ggKyB0MS54MTEpLCAhY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKHQxLmN4LCB0MS5jeSwgcmMxLCBhdGFuMih0MS55MTEsIHQxLngxMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBPciBpcyB0aGUgb3V0ZXIgcmluZyBqdXN0IGEgY2lyY3VsYXIgYXJjP1xuICAgICAgZWxzZSBjb250ZXh0Lm1vdmVUbyh4MDEsIHkwMSksIGNvbnRleHQuYXJjKDAsIDAsIHIxLCBhMDEsIGExMSwgIWN3KTtcblxuICAgICAgLy8gSXMgdGhlcmUgbm8gaW5uZXIgcmluZywgYW5kIGl04oCZcyBhIGNpcmN1bGFyIHNlY3Rvcj9cbiAgICAgIC8vIE9yIHBlcmhhcHMgaXTigJlzIGFuIGFubnVsYXIgc2VjdG9yIGNvbGxhcHNlZCBkdWUgdG8gcGFkZGluZz9cbiAgICAgIGlmICghKHIwID4gZXBzaWxvbikgfHwgIShkYTAgPiBlcHNpbG9uKSkgY29udGV4dC5saW5lVG8oeDEwLCB5MTApO1xuXG4gICAgICAvLyBEb2VzIHRoZSBzZWN0b3LigJlzIGlubmVyIHJpbmcgKG9yIHBvaW50KSBoYXZlIHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGVsc2UgaWYgKHJjMCA+IGVwc2lsb24pIHtcbiAgICAgICAgdDAgPSBjb3JuZXJUYW5nZW50cyh4MTAsIHkxMCwgeDExLCB5MTEsIHIwLCAtcmMwLCBjdyk7XG4gICAgICAgIHQxID0gY29ybmVyVGFuZ2VudHMoeDAxLCB5MDEsIHgwMCwgeTAwLCByMCwgLXJjMCwgY3cpO1xuXG4gICAgICAgIGNvbnRleHQubGluZVRvKHQwLmN4ICsgdDAueDAxLCB0MC5jeSArIHQwLnkwMSk7XG5cbiAgICAgICAgLy8gSGF2ZSB0aGUgY29ybmVycyBtZXJnZWQ/XG4gICAgICAgIGlmIChyYzAgPCByYykgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzAsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDEueTAxLCB0MS54MDEpLCAhY3cpO1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgZHJhdyB0aGUgdHdvIGNvcm5lcnMgYW5kIHRoZSByaW5nLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MC5jeCwgdDAuY3ksIHJjMCwgYXRhbjIodDAueTAxLCB0MC54MDEpLCBhdGFuMih0MC55MTEsIHQwLngxMSksICFjdyk7XG4gICAgICAgICAgY29udGV4dC5hcmMoMCwgMCwgcjAsIGF0YW4yKHQwLmN5ICsgdDAueTExLCB0MC5jeCArIHQwLngxMSksIGF0YW4yKHQxLmN5ICsgdDEueTExLCB0MS5jeCArIHQxLngxMSksIGN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MS5jeCwgdDEuY3ksIHJjMCwgYXRhbjIodDEueTExLCB0MS54MTEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT3IgaXMgdGhlIGlubmVyIHJpbmcganVzdCBhIGNpcmN1bGFyIGFyYz9cbiAgICAgIGVsc2UgY29udGV4dC5hcmMoMCwgMCwgcjAsIGExMCwgYTAwLCBjdyk7XG4gICAgfVxuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGlmIChidWZmZXIpIHJldHVybiBjb250ZXh0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgYXJjLmNlbnRyb2lkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSAoK2lubmVyUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgKyArb3V0ZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgLyAyLFxuICAgICAgICBhID0gKCtzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgKyArZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgLyAyIC0gcGkgLyAyO1xuICAgIHJldHVybiBbY29zKGEpICogciwgc2luKGEpICogcl07XG4gIH07XG5cbiAgYXJjLmlubmVyUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGlubmVyUmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBpbm5lclJhZGl1cztcbiAgfTtcblxuICBhcmMub3V0ZXJSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAob3V0ZXJSYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IG91dGVyUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5jb3JuZXJSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY29ybmVyUmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBjb3JuZXJSYWRpdXM7XG4gIH07XG5cbiAgYXJjLnBhZFJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRSYWRpdXMgPSBfID09IG51bGwgPyBudWxsIDogdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBwYWRSYWRpdXM7XG4gIH07XG5cbiAgYXJjLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RhcnRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogc3RhcnRBbmdsZTtcbiAgfTtcblxuICBhcmMuZW5kQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZW5kQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IGVuZEFuZ2xlO1xuICB9O1xuXG4gIGFyYy5wYWRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogcGFkQW5nbGU7XG4gIH07XG5cbiAgYXJjLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoKGNvbnRleHQgPSBfID09IG51bGwgPyBudWxsIDogXyksIGFyYykgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBhcmM7XG59XG4iLCJleHBvcnQgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiAmJiBcImxlbmd0aFwiIGluIHhcbiAgICA/IHggLy8gQXJyYXksIFR5cGVkQXJyYXksIE5vZGVMaXN0LCBhcnJheS1saWtlXG4gICAgOiBBcnJheS5mcm9tKHgpOyAvLyBNYXAsIFNldCwgaXRlcmFibGUsIHN0cmluZywgb3IgYW55dGhpbmcgZWxzZVxufVxuIiwiZnVuY3Rpb24gTGluZWFyKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkxpbmVhci5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IExpbmVhcihjb250ZXh0KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiB4KHApIHtcbiAgcmV0dXJuIHBbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KHApIHtcbiAgcmV0dXJuIHBbMV07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBiIDwgYSA/IC0xIDogYiA+IGEgPyAxIDogYiA+PSBhID8gMCA6IE5hTjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGQpIHtcbiAgcmV0dXJuIGQ7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gVHJhbnNmb3JtKGssIHgsIHkpIHtcbiAgdGhpcy5rID0gaztcbiAgdGhpcy54ID0geDtcbiAgdGhpcy55ID0geTtcbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRyYW5zZm9ybSxcbiAgc2NhbGU6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gayA9PT0gMSA/IHRoaXMgOiBuZXcgVHJhbnNmb3JtKHRoaXMuayAqIGssIHRoaXMueCwgdGhpcy55KTtcbiAgfSxcbiAgdHJhbnNsYXRlOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgcmV0dXJuIHggPT09IDAgJiB5ID09PSAwID8gdGhpcyA6IG5ldyBUcmFuc2Zvcm0odGhpcy5rLCB0aGlzLnggKyB0aGlzLmsgKiB4LCB0aGlzLnkgKyB0aGlzLmsgKiB5KTtcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIFtwb2ludFswXSAqIHRoaXMuayArIHRoaXMueCwgcG9pbnRbMV0gKiB0aGlzLmsgKyB0aGlzLnldO1xuICB9LFxuICBhcHBseVg6IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geCAqIHRoaXMuayArIHRoaXMueDtcbiAgfSxcbiAgYXBwbHlZOiBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIHkgKiB0aGlzLmsgKyB0aGlzLnk7XG4gIH0sXG4gIGludmVydDogZnVuY3Rpb24obG9jYXRpb24pIHtcbiAgICByZXR1cm4gWyhsb2NhdGlvblswXSAtIHRoaXMueCkgLyB0aGlzLmssIChsb2NhdGlvblsxXSAtIHRoaXMueSkgLyB0aGlzLmtdO1xuICB9LFxuICBpbnZlcnRYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuICh4IC0gdGhpcy54KSAvIHRoaXMuaztcbiAgfSxcbiAgaW52ZXJ0WTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiAoeSAtIHRoaXMueSkgLyB0aGlzLms7XG4gIH0sXG4gIHJlc2NhbGVYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHguY29weSgpLmRvbWFpbih4LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCwgdGhpcykubWFwKHguaW52ZXJ0LCB4KSk7XG4gIH0sXG4gIHJlc2NhbGVZOiBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIHkuY29weSgpLmRvbWFpbih5LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSwgdGhpcykubWFwKHkuaW52ZXJ0LCB5KSk7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLnggKyBcIixcIiArIHRoaXMueSArIFwiKSBzY2FsZShcIiArIHRoaXMuayArIFwiKVwiO1xuICB9XG59O1xuXG5leHBvcnQgdmFyIGlkZW50aXR5ID0gbmV3IFRyYW5zZm9ybSgxLCAwLCAwKTtcblxudHJhbnNmb3JtLnByb3RvdHlwZSA9IFRyYW5zZm9ybS5wcm90b3R5cGU7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX3pvb20pIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHJldHVybiBub2RlLl9fem9vbTtcbn1cbiIsImltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcblxuZXhwb3J0IGVudW0gU2VhcmNoVHlwZSB7XG4gICAgVGFnLFxuICAgIEZyb250bWF0dGVyLFxuICAgIFdpa2ksXG4gICAgV2lraUxpbmssXG4gICAgV2lraURpc3BsYXksXG4gICAgVGV4dCxcbiAgICBkdkZpZWxkLFxuICAgIFRhYmxlLFxuICAgIEZpbGVNZXRhLFxuICAgIFRhc2ssXG4gICAgVGFza0RvbmUsXG4gICAgVGFza05vdERvbmUsXG59XG5cbmV4cG9ydCBlbnVtIEdyYXBoVHlwZSB7XG4gICAgTGluZSxcbiAgICBCYXIsXG4gICAgUGllLFxuICAgIFJhZGFyLFxuICAgIFN1bW1hcnksXG4gICAgVGFibGUsXG4gICAgTW9udGgsXG4gICAgSGVhdG1hcCxcbiAgICBCdWxsZXQsXG4gICAgVW5rbm93bixcbn1cblxuZXhwb3J0IGVudW0gVmFsdWVUeXBlIHtcbiAgICBOdW1iZXIsXG4gICAgSW50LFxuICAgIERhdGUsXG4gICAgVGltZSxcbiAgICBEYXRlVGltZSxcbiAgICBTdHJpbmcsXG59XG5cbmV4cG9ydCB0eXBlIFRleHRWYWx1ZU1hcCA9IHtcbiAgICBba2V5OiBzdHJpbmddOiBudW1iZXI7XG59O1xuXG5leHBvcnQgY2xhc3MgRGF0YVBvaW50IHtcbiAgICBkYXRlOiBNb21lbnQ7XG4gICAgdmFsdWU6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGU6IE1vbWVudCwgdmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLmRhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXVlcnkge1xuICAgIHByaXZhdGUgdHlwZTogU2VhcmNoVHlwZSB8IG51bGw7XG4gICAgcHJpdmF0ZSB0YXJnZXQ6IHN0cmluZztcbiAgICBwcml2YXRlIHBhcmVudFRhcmdldDogc3RyaW5nIHwgbnVsbDtcbiAgICBwcml2YXRlIHNlcGFyYXRvcjogc3RyaW5nOyAvLyBtdWx0aXBsZSB2YWx1ZSBzZXBhcmF0b3JcbiAgICBwcml2YXRlIGlkOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBhY2Nlc3NvcjogbnVtYmVyO1xuICAgIHByaXZhdGUgYWNjZXNzb3IxOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBhY2Nlc3NvcjI6IG51bWJlcjtcbiAgICBwcml2YXRlIG51bVRhcmdldHM6IG51bWJlcjtcblxuICAgIHZhbHVlVHlwZTogVmFsdWVUeXBlO1xuICAgIHVzZWRBc1hEYXRhc2V0OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoaWQ6IG51bWJlciwgc2VhcmNoVHlwZTogU2VhcmNoVHlwZSwgc2VhcmNoVGFyZ2V0OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy50eXBlID0gc2VhcmNoVHlwZTtcbiAgICAgICAgdGhpcy50YXJnZXQgPSBzZWFyY2hUYXJnZXQ7XG4gICAgICAgIHRoaXMuc2VwYXJhdG9yID0gXCJcIjsgLy8gc2VwYXJhdG9yIHRvIHNlcGFyYXRlIG11bHRpcGxlIHZhbHVlc1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuYWNjZXNzb3IgPSAtMTtcbiAgICAgICAgdGhpcy5hY2Nlc3NvcjEgPSAtMTtcbiAgICAgICAgdGhpcy5hY2Nlc3NvcjIgPSAtMTtcbiAgICAgICAgdGhpcy52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuTnVtYmVyO1xuICAgICAgICB0aGlzLnVzZWRBc1hEYXRhc2V0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubnVtVGFyZ2V0cyA9IDA7XG5cbiAgICAgICAgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFibGUpIHtcbiAgICAgICAgICAgIC8vIHNlYXJjaFRhcmdldCAtLT4ge3tmaWxlUGF0aH19W3t7dGFibGV9fV1be3tjb2x1bW59fV1cbiAgICAgICAgICAgIGxldCBzdHJSZWdleCA9XG4gICAgICAgICAgICAgICAgXCJcXFxcWyg/PGFjY2Vzc29yPlswLTldKylcXFxcXVxcXFxbKD88YWNjZXNzb3IxPlswLTldKylcXFxcXShcXFxcWyg/PGFjY2Vzc29yMj5bMC05XSspXFxcXF0pP1wiO1xuICAgICAgICAgICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcbiAgICAgICAgICAgIGxldCBtYXRjaDtcbiAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHNlYXJjaFRhcmdldCkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXRjaC5ncm91cHMuYWNjZXNzb3IgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFjY2Vzc29yID0gcGFyc2VGbG9hdChtYXRjaC5ncm91cHMuYWNjZXNzb3IpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKGFjY2Vzc29yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXRjaC5ncm91cHMuYWNjZXNzb3IxICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjY2Vzc29yMSA9IHBhcnNlRmxvYXQobWF0Y2guZ3JvdXBzLmFjY2Vzc29yMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihhY2Nlc3NvcjEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY2Nlc3NvcjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBtYXRjaC5ncm91cHMuYWNjZXNzb3IyICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yMiA9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2guZ3JvdXBzLmFjY2Vzc29yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NvcjEgPSBhY2Nlc3NvcjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOdW1iZXIoYWNjZXNzb3IyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NvcjIgPSBhY2Nlc3NvcjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRUYXJnZXQgPSBzZWFyY2hUYXJnZXQucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBzdHJSZWdleCA9IFwiXFxcXFsoPzxhY2Nlc3Nvcj5bMC05XSspXFxcXF1cIjtcbiAgICAgICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoc3RyUmVnZXgsIFwiZ21cIik7XG4gICAgICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhzZWFyY2hUYXJnZXQpKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWF0Y2guZ3JvdXBzLmFjY2Vzc29yICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhY2Nlc3NvciA9IHBhcnNlRmxvYXQobWF0Y2guZ3JvdXBzLmFjY2Vzc29yKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihhY2Nlc3NvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50VGFyZ2V0ID0gc2VhcmNoVGFyZ2V0LnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBlcXVhbFRvKG90aGVyOiBRdWVyeSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSBvdGhlci50eXBlICYmIHRoaXMudGFyZ2V0ID09PSBvdGhlci50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcmVudFRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50VGFyZ2V0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFjY2Vzc29yKGluZGV4ID0gMCkge1xuICAgICAgICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzb3I7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzb3IxO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFjY2Vzc29yMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTZXBhcmF0b3Ioc2VwOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXBhcmF0b3IgPSBzZXA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlcGFyYXRvcihpc0ZvckZyb250bWF0dGVyVGFnczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLnNlcGFyYXRvciA9PT0gXCJcIikge1xuICAgICAgICAgICAgaWYgKGlzRm9yRnJvbnRtYXR0ZXJUYWdzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiLFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiL1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlcGFyYXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkTnVtVGFyZ2V0cyhudW06IG51bWJlciA9IDEpIHtcbiAgICAgICAgdGhpcy5udW1UYXJnZXRzID0gdGhpcy5udW1UYXJnZXRzICsgbnVtO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROdW1UYXJnZXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5udW1UYXJnZXRzO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVZhbHVlUGFpciB7XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICAgIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhc2V0IGltcGxlbWVudHMgSXRlcmFibGVJdGVyYXRvcjxEYXRhUG9pbnQ+IHtcbiAgICAvLyBBcnJheSBvZiBEYXRhUG9pbnRzXG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBxdWVyeTogUXVlcnk7XG4gICAgcHJpdmF0ZSB2YWx1ZXM6IG51bWJlcltdO1xuICAgIHByaXZhdGUgcGFyZW50OiBEYXRhc2V0cztcbiAgICBwcml2YXRlIGlkOiBudW1iZXI7XG4gICAgcHJpdmF0ZSB5TWluOiBudW1iZXI7XG4gICAgcHJpdmF0ZSB5TWF4OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzdGFydERhdGU6IE1vbWVudDtcbiAgICBwcml2YXRlIGVuZERhdGU6IE1vbWVudDtcbiAgICBwcml2YXRlIG51bVRhcmdldHM6IG51bWJlcjtcbiAgICBwcml2YXRlIGxpbmVJbmZvOiBMaW5lSW5mbztcbiAgICBwcml2YXRlIGJhckluZm86IEJhckluZm87XG5cbiAgICBwcml2YXRlIGlzVG1wRGF0YXNldDogYm9vbGVhbjtcblxuICAgIHZhbHVlVHlwZTogVmFsdWVUeXBlO1xuXG4gICAgcHJpdmF0ZSBjdXJyZW50SW5kZXggPSAwOyAvLyBJdGVyYWJsZUl0ZXJhdG9yXG5cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IERhdGFzZXRzLCBxdWVyeTogUXVlcnkpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJ1bnRpdGxlZFwiO1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmlkID0gLTE7XG4gICAgICAgIHRoaXMueU1pbiA9IG51bGw7XG4gICAgICAgIHRoaXMueU1heCA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhcnREYXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbmREYXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5udW1UYXJnZXRzID0gMDtcbiAgICAgICAgdGhpcy5saW5lSW5mbyA9IG51bGw7XG4gICAgICAgIHRoaXMuYmFySW5mbyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5pc1RtcERhdGFzZXQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnZhbHVlVHlwZSA9IHF1ZXJ5Py52YWx1ZVR5cGU7XG5cbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgcGFyZW50LmdldERhdGVzKCkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbG9uZVRvVG1wRGF0YXNldCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVG1wRGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBuZXcgRGF0YXNldCh0aGlzLnBhcmVudCwgbnVsbCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0Lm5hbWUgPSBcInRtcFwiO1xuICAgICAgICAgICAgdG1wRGF0YXNldC52YWx1ZXMgPSBbLi4udGhpcy52YWx1ZXNdO1xuICAgICAgICAgICAgdG1wRGF0YXNldC55TWluID0gdGhpcy55TWluO1xuICAgICAgICAgICAgdG1wRGF0YXNldC55TWF4ID0gdGhpcy55TWF4O1xuICAgICAgICAgICAgdG1wRGF0YXNldC5zdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5lbmREYXRlID0gdGhpcy5lbmREYXRlLmNsb25lKCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0Lm51bVRhcmdldHMgPSB0aGlzLm51bVRhcmdldHM7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmlzVG1wRGF0YXNldCA9IHRydWU7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnZhbHVlVHlwZSA9IHRoaXMudmFsdWVUeXBlO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7IC8vIGFscmVhZHkgdG1wIGRhdGFzZXRcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRJZChpZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkTnVtVGFyZ2V0cyhudW06IG51bWJlcikge1xuICAgICAgICB0aGlzLm51bVRhcmdldHMgPSB0aGlzLm51bVRhcmdldHMgKyBudW07XG4gICAgfVxuXG4gICAgcHVibGljIGdldE51bVRhcmdldHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm51bVRhcmdldHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlKGRhdGU6IE1vbWVudCwgZGF5U2hpZnQ6IG51bWJlciA9IDApIHtcbiAgICAgICAgbGV0IGluZCA9IHRoaXMucGFyZW50LmdldEluZGV4T2ZEYXRlKGRhdGUpICsgTWF0aC5mbG9vcihkYXlTaGlmdCk7XG4gICAgICAgIGlmIChpbmQgPj0gMCAmJiBpbmQgPCB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWYWx1ZShkYXRlOiBNb21lbnQsIHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGluZCA9IHRoaXMucGFyZW50LmdldEluZGV4T2ZEYXRlKGRhdGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhpbmQpO1xuXG4gICAgICAgIGlmIChpbmQgPj0gMCAmJiBpbmQgPCB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIFNldCB2YWx1ZVxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IHZhbHVlO1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgeU1pbiBhbmQgeU1heFxuICAgICAgICAgICAgaWYgKHRoaXMueU1pbiA9PT0gbnVsbCB8fCB2YWx1ZSA8IHRoaXMueU1pbikge1xuICAgICAgICAgICAgICAgIHRoaXMueU1pbiA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMueU1heCA9PT0gbnVsbCB8fCB2YWx1ZSA+IHRoaXMueU1heCkge1xuICAgICAgICAgICAgICAgIHRoaXMueU1heCA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBVcGRhdGUgc3RhcnREYXRlIGFuZCBlbmREYXRlXG4gICAgICAgICAgICBpZiAodGhpcy5zdGFydERhdGUgPT09IG51bGwgfHwgZGF0ZSA8IHRoaXMuc3RhcnREYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSBkYXRlLmNsb25lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lbmREYXRlID09PSBudWxsIHx8IGRhdGUgPiB0aGlzLmVuZERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBkYXRlLmNsb25lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVjYWxjdWxhdGVNaW5NYXgoKSB7XG4gICAgICAgIHRoaXMueU1pbiA9IE1hdGgubWluKC4uLnRoaXMudmFsdWVzKTtcbiAgICAgICAgdGhpcy55TWF4ID0gTWF0aC5tYXgoLi4udGhpcy52YWx1ZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRZTWluKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55TWluO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRZTWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy55TWF4O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTdGFydERhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0RGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RW5kRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kRGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hpZnQoc2hpZnRBbW91bnQ6IG51bWJlciwgZG9MYXJnZXJ0aGFuOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGFueVNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzW2luZF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoZG9MYXJnZXJ0aGFuID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZF0gPSB0aGlzLnZhbHVlc1tpbmRdICsgc2hpZnRBbW91bnQ7XG4gICAgICAgICAgICAgICAgICAgIGFueVNoaWZ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRdID49IGRvTGFyZ2VydGhhbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IHRoaXMudmFsdWVzW2luZF0gKyBzaGlmdEFtb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFueVNoaWZ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhbnlTaGlmdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnlNaW4gPSB0aGlzLnlNaW4gKyBzaGlmdEFtb3VudDtcbiAgICAgICAgICAgIHRoaXMueU1heCA9IHRoaXMueU1heCArIHNoaWZ0QW1vdW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBlbmFsdHkocGVuYWx0eTogbnVtYmVyKSB7XG4gICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRdID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IHBlbmFsdHk7XG4gICAgICAgICAgICAgICAgaWYgKHBlbmFsdHkgPCB0aGlzLnlNaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55TWluID0gcGVuYWx0eTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBlbmFsdHkgPiB0aGlzLnlNYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55TWF4ID0gcGVuYWx0eTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UXVlcnkoKTogUXVlcnkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWNjdW11bGF0ZVZhbHVlcygpIHtcbiAgICAgICAgbGV0IGFjY3VtVmFsdWUgPSAwLjA7XG4gICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYWNjdW1WYWx1ZSArPSB0aGlzLnZhbHVlc1tpbmRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IGFjY3VtVmFsdWU7XG4gICAgICAgICAgICBpZiAoYWNjdW1WYWx1ZSA8IHRoaXMueU1pbikge1xuICAgICAgICAgICAgICAgIHRoaXMueU1pbiA9IGFjY3VtVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWNjdW1WYWx1ZSA+IHRoaXMueU1heCkge1xuICAgICAgICAgICAgICAgIHRoaXMueU1heCA9IGFjY3VtVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGVuZ3RoTm90TnVsbCgpIHtcbiAgICAgICAgbGV0IGNvdW50Tm90TnVsbCA9IDA7XG4gICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY291bnROb3ROdWxsKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvdW50Tm90TnVsbDtcbiAgICB9XG5cbiAgICBuZXh0KCk6IEl0ZXJhdG9yUmVzdWx0PERhdGFQb2ludD4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBpbmQgPSB0aGlzLmN1cnJlbnRJbmRleCsrO1xuICAgICAgICAgICAgbGV0IGRhdGFQb2ludCA9IG5ldyBEYXRhUG9pbnQoXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuZ2V0RGF0ZXMoKVtpbmRdLFxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZF1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhUG9pbnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkb25lOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8RGF0YVBvaW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFzZXRzIGltcGxlbWVudHMgSXRlcmFibGVJdGVyYXRvcjxEYXRhc2V0PiB7XG4gICAgLy8gSXRlcmFibGUgb2YgRGF0YXNldFxuICAgIHByaXZhdGUgZGF0ZXM6IE1vbWVudFtdO1xuICAgIHByaXZhdGUgZGF0YXNldHM6IERhdGFzZXRbXTtcblxuICAgIHByaXZhdGUgY3VycmVudEluZGV4ID0gMDsgLy8gSXRlcmFibGVJdGVyYXRvclxuXG4gICAgY29uc3RydWN0b3Ioc3RhcnREYXRlOiBNb21lbnQsIGVuZERhdGU6IE1vbWVudCkge1xuICAgICAgICB0aGlzLmRhdGVzID0gW107XG4gICAgICAgIHRoaXMuZGF0YXNldHMgPSBbXTtcblxuICAgICAgICBsZXQgY0RhdGEgPSBzdGFydERhdGUuY3JlYXRpb25EYXRhKCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGNEYXRhKTtcbiAgICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9IGNEYXRhLmZvcm1hdC50b1N0cmluZygpO1xuICAgICAgICBmb3IgKFxuICAgICAgICAgICAgbGV0IGN1ckRhdGUgPSBzdGFydERhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgIGN1ckRhdGUgPD0gZW5kRGF0ZTtcbiAgICAgICAgICAgIGN1ckRhdGUuYWRkKDEsIFwiZGF5c1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBuZXdEYXRlID0gd2luZG93Lm1vbWVudChcbiAgICAgICAgICAgICAgICBjdXJEYXRlLmZvcm1hdChkYXRlRm9ybWF0KSxcbiAgICAgICAgICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmRhdGVzLnB1c2gobmV3RGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5kYXRlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURhdGFzZXQocXVlcnk6IFF1ZXJ5LCByZW5kZXJJbmZvOiBSZW5kZXJJbmZvKSB7XG4gICAgICAgIGxldCBkYXRhc2V0ID0gbmV3IERhdGFzZXQodGhpcywgcXVlcnkpO1xuICAgICAgICBkYXRhc2V0LnNldElkKHF1ZXJ5LmdldElkKCkpO1xuICAgICAgICBpZiAocmVuZGVySW5mbykge1xuICAgICAgICAgICAgZGF0YXNldC5zZXROYW1lKHJlbmRlckluZm8uZGF0YXNldE5hbWVbcXVlcnkuZ2V0SWQoKV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhc2V0cy5wdXNoKGRhdGFzZXQpO1xuXG4gICAgICAgIHJldHVybiBkYXRhc2V0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJbmRleE9mRGF0ZShkYXRlOiBNb21lbnQpIHtcbiAgICAgICAgbGV0IGNEYXRhID0gZGF0ZS5jcmVhdGlvbkRhdGEoKTtcbiAgICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9IGNEYXRhLmZvcm1hdC50b1N0cmluZygpO1xuICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCB0aGlzLmRhdGVzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVzW2luZF0uZm9ybWF0KGRhdGVGb3JtYXQpID09PSBkYXRlLmZvcm1hdChkYXRlRm9ybWF0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGFzZXRCeVF1ZXJ5KHF1ZXJ5OiBRdWVyeSkge1xuICAgICAgICBmb3IgKGxldCBkYXRhc2V0IG9mIHRoaXMuZGF0YXNldHMpIHtcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmdldFF1ZXJ5KCkuZXF1YWxUbyhxdWVyeSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YXNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGF0YXNldEJ5SWQoaWQ6IG51bWJlcikge1xuICAgICAgICBmb3IgKGxldCBkYXRhc2V0IG9mIHRoaXMuZGF0YXNldHMpIHtcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmdldElkKCkgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0WERhdGFzZXRJZHMoKSB7XG4gICAgICAgIGxldCBpZHM6IEFycmF5PG51bWJlcj4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldCBvZiB0aGlzLmRhdGFzZXRzKSB7XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gZGF0YXNldC5nZXRRdWVyeSgpLmdldElkKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpZHMuaW5jbHVkZXMoaWQpICYmIGlkICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZHMucHVzaChpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmFtZXMoKSB7XG4gICAgICAgIGxldCBuYW1lcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBkYXRhc2V0IG9mIHRoaXMuZGF0YXNldHMpIHtcbiAgICAgICAgICAgIG5hbWVzLnB1c2goZGF0YXNldC5nZXROYW1lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lcztcbiAgICB9XG5cbiAgICBuZXh0KCk6IEl0ZXJhdG9yUmVzdWx0PERhdGFzZXQ+IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5kYXRhc2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YXNldHNbdGhpcy5jdXJyZW50SW5kZXgrK10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkb25lOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8RGF0YXNldD4ge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZW5kZXJJbmZvIHtcbiAgICAvLyBJbnB1dFxuICAgIHF1ZXJpZXM6IFF1ZXJ5W107XG4gICAgeERhdGFzZXQ6IG51bWJlcltdO1xuICAgIGZvbGRlcjogc3RyaW5nO1xuICAgIGZpbGU6IHN0cmluZ1tdO1xuICAgIHNwZWNpZmllZEZpbGVzT25seTogYm9vbGVhbjtcbiAgICBmaWxlQ29udGFpbnNMaW5rZWRGaWxlczogc3RyaW5nW107XG4gICAgZmlsZU11bHRpcGxpZXJBZnRlckxpbms6IHN0cmluZztcbiAgICBkYXRlRm9ybWF0OiBzdHJpbmc7XG4gICAgZGF0ZUZvcm1hdFByZWZpeDogc3RyaW5nO1xuICAgIGRhdGVGb3JtYXRTdWZmaXg6IHN0cmluZztcbiAgICBzdGFydERhdGU6IE1vbWVudCB8IG51bGw7XG4gICAgZW5kRGF0ZTogTW9tZW50IHwgbnVsbDtcbiAgICBkYXRhc2V0TmFtZTogc3RyaW5nW107XG4gICAgY29uc3RWYWx1ZTogbnVtYmVyW107XG4gICAgaWdub3JlQXR0YWNoZWRWYWx1ZTogYm9vbGVhbltdO1xuICAgIGlnbm9yZVplcm9WYWx1ZTogYm9vbGVhbltdO1xuICAgIGFjY3VtOiBib29sZWFuW107XG4gICAgcGVuYWx0eTogbnVtYmVyW107XG4gICAgdmFsdWVTaGlmdDogbnVtYmVyW107XG4gICAgc2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuOiBudW1iZXJbXTtcbiAgICB2YWx1ZVR5cGU6IHN0cmluZ1tdOyAvLyBudW1iZXIvZmxvYXQsIGludCwgc3RyaW5nLCBib29sZWFuLCBkYXRlLCB0aW1lLCBkYXRldGltZVxuICAgIHRleHRWYWx1ZU1hcDogVGV4dFZhbHVlTWFwO1xuXG4gICAgZGF0YUFyZWFTaXplOiBTaXplO1xuICAgIG1hcmdpbjogTWFyZ2luO1xuXG4gICAgZml4ZWRTY2FsZTogbnVtYmVyO1xuICAgIGZpdFBhbmVsV2lkdGg6IGJvb2xlYW47XG4gICAgYXNwZWN0UmF0aW86IEFzcGVjdFJhdGlvO1xuXG4gICAgb3V0cHV0OiBhbnlbXTtcbiAgICBsaW5lOiBMaW5lSW5mb1tdO1xuICAgIGJhcjogQmFySW5mb1tdO1xuICAgIHBpZTogUGllSW5mb1tdO1xuICAgIHN1bW1hcnk6IFN1bW1hcnlJbmZvW107XG4gICAgbW9udGg6IE1vbnRoSW5mb1tdO1xuICAgIGhlYXRtYXA6IEhlYXRtYXBJbmZvW107XG4gICAgYnVsbGV0OiBCdWxsZXRJbmZvW107XG4gICAgY3VzdG9tRGF0YXNldDogQ3VzdG9tRGF0YXNldEluZm9bXTtcblxuICAgIHB1YmxpYyBkYXRhc2V0czogRGF0YXNldHMgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocXVlcmllczogUXVlcnlbXSkge1xuICAgICAgICB0aGlzLnF1ZXJpZXMgPSBxdWVyaWVzO1xuICAgICAgICB0aGlzLnhEYXRhc2V0ID0gW107IC8vIHVzZSBmaWxlIG5hbWVcbiAgICAgICAgdGhpcy5mb2xkZXIgPSBcIi9cIjtcbiAgICAgICAgdGhpcy5maWxlID0gW107IC8vIGV4dHJhIGZpbGVzIHRvIHVzZVxuICAgICAgICB0aGlzLnNwZWNpZmllZEZpbGVzT25seSA9IGZhbHNlOyAvLyBpZiB0cnVlLCB1c2UgZmlsZXMgc3BlY2lmaWVkIG9ubHlcbiAgICAgICAgdGhpcy5maWxlQ29udGFpbnNMaW5rZWRGaWxlcyA9IFtdO1xuICAgICAgICB0aGlzLmZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rID0gXCJcIjsgLy8gcmVnZXggcGF0dGVybiB0byBleHRyYWN0IG11bHRpcGxpZXIgYWZ0ZXIgbGlua1xuICAgICAgICB0aGlzLmRhdGVGb3JtYXQgPSBcIllZWVktTU0tRERcIjtcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0UHJlZml4ID0gXCJcIjtcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0U3VmZml4ID0gXCJcIjtcbiAgICAgICAgdGhpcy5zdGFydERhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLmVuZERhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLmRhdGFzZXROYW1lID0gW107IC8vIHVudGl0bGVkXG4gICAgICAgIHRoaXMuY29uc3RWYWx1ZSA9IFsxLjBdO1xuICAgICAgICB0aGlzLmlnbm9yZUF0dGFjaGVkVmFsdWUgPSBbXTsgLy8gZmFsc2VcbiAgICAgICAgdGhpcy5pZ25vcmVaZXJvVmFsdWUgPSBbXTsgLy8gZmFsc2VcbiAgICAgICAgdGhpcy5hY2N1bSA9IFtdOyAvLyBmYWxzZSwgYWNjdW0gdmFsdWVzIHN0YXJ0IGZyb20gemVybyBvdmVyIGRheXNcbiAgICAgICAgdGhpcy5wZW5hbHR5ID0gW107IC8vIG51bGwsIHVzZSB0aGlzIHZhbHVlIGluc3RlYWQgb2YgbnVsbCB2YWx1ZVxuICAgICAgICB0aGlzLnZhbHVlU2hpZnQgPSBbXTtcbiAgICAgICAgdGhpcy5zaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW4gPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZVR5cGUgPSBbXTtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWVNYXAgPSB7fTtcblxuICAgICAgICB0aGlzLmRhdGFBcmVhU2l6ZSA9IG5ldyBTaXplKDMwMCwgMzAwKTtcbiAgICAgICAgdGhpcy5hc3BlY3RSYXRpbyA9IG5ldyBBc3BlY3RSYXRpbygxLCAxKTtcbiAgICAgICAgdGhpcy5tYXJnaW4gPSBuZXcgTWFyZ2luKDEwLCAxMCwgMTAsIDEwKTsgLy8gdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XG5cbiAgICAgICAgdGhpcy5maXhlZFNjYWxlID0gMS4wO1xuICAgICAgICB0aGlzLmZpdFBhbmVsV2lkdGggPSBmYWxzZTtcblxuICAgICAgICB0aGlzLm91dHB1dCA9IFtdO1xuICAgICAgICB0aGlzLmxpbmUgPSBbXTtcbiAgICAgICAgdGhpcy5iYXIgPSBbXTtcbiAgICAgICAgdGhpcy5waWUgPSBbXTtcbiAgICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XG4gICAgICAgIHRoaXMubW9udGggPSBbXTtcbiAgICAgICAgdGhpcy5oZWF0bWFwID0gW107XG4gICAgICAgIHRoaXMuYnVsbGV0ID0gW107XG4gICAgICAgIHRoaXMuY3VzdG9tRGF0YXNldCA9IFtdO1xuXG4gICAgICAgIHRoaXMuZGF0YXNldHMgPSBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRRdWVyeUJ5SWQoaWQ6IG51bWJlcikge1xuICAgICAgICBmb3IgKGxldCBxdWVyeSBvZiB0aGlzLnF1ZXJpZXMpIHtcbiAgICAgICAgICAgIGlmIChxdWVyeS5nZXRJZCgpID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGFzZXRJbmZvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB4RGF0YTogc3RyaW5nW107XG4gICAgeURhdGE6IHN0cmluZ1tdO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaWQgPSAtMTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJcIjtcbiAgICAgICAgdGhpcy54RGF0YSA9IFtdO1xuICAgICAgICB0aGlzLnlEYXRhID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmFwaCB7XG4gICAgR2V0R3JhcGhUeXBlKCk6IEdyYXBoVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnZW5kIHtcbiAgICBzaG93TGVnZW5kOiBib29sZWFuO1xuICAgIGxlZ2VuZFBvc2l0aW9uOiBzdHJpbmc7XG4gICAgbGVnZW5kT3JpZW50YXRpb246IHN0cmluZztcbiAgICBsZWdlbmRCZ0NvbG9yOiBzdHJpbmc7XG4gICAgbGVnZW5kQm9yZGVyQ29sb3I6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENvbW1vbkNoYXJ0SW5mbyBpbXBsZW1lbnRzIElHcmFwaCwgSUxlZ2VuZCB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICB4QXhpc0xhYmVsOiBzdHJpbmc7XG4gICAgeEF4aXNDb2xvcjogc3RyaW5nO1xuICAgIHhBeGlzTGFiZWxDb2xvcjogc3RyaW5nO1xuICAgIHlBeGlzTGFiZWw6IHN0cmluZ1tdO1xuICAgIHlBeGlzQ29sb3I6IHN0cmluZ1tdO1xuICAgIHlBeGlzTGFiZWxDb2xvcjogc3RyaW5nW107XG4gICAgeUF4aXNVbml0OiBzdHJpbmdbXTtcbiAgICB4QXhpc1RpY2tJbnRlcnZhbDogc3RyaW5nO1xuICAgIHlBeGlzVGlja0ludGVydmFsOiBzdHJpbmdbXTtcbiAgICB4QXhpc1RpY2tMYWJlbEZvcm1hdDogc3RyaW5nO1xuICAgIHlBeGlzVGlja0xhYmVsRm9ybWF0OiBzdHJpbmdbXTtcbiAgICB5TWluOiBudW1iZXJbXTtcbiAgICB5TWF4OiBudW1iZXJbXTtcbiAgICByZXZlcnNlWUF4aXM6IGJvb2xlYW5bXTtcbiAgICBhbGxvd0luc3BlY3REYXRhOiBib29sZWFuO1xuXG4gICAgLy8gSUxlZ2VuZFxuICAgIHNob3dMZWdlbmQ6IGJvb2xlYW47XG4gICAgbGVnZW5kUG9zaXRpb246IHN0cmluZztcbiAgICBsZWdlbmRPcmllbnRhdGlvbjogc3RyaW5nO1xuICAgIGxlZ2VuZEJnQ29sb3I6IHN0cmluZztcbiAgICBsZWdlbmRCb3JkZXJDb2xvcjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudGl0bGUgPSBcIlwiO1xuICAgICAgICB0aGlzLnhBeGlzTGFiZWwgPSBcIkRhdGVcIjtcbiAgICAgICAgdGhpcy54QXhpc0NvbG9yID0gXCJcIjtcbiAgICAgICAgdGhpcy54QXhpc0xhYmVsQ29sb3IgPSBcIlwiO1xuICAgICAgICB0aGlzLnlBeGlzTGFiZWwgPSBbXTsgLy8gXCJWYWx1ZVwiLCAyIGVsZW1lbnRzXG4gICAgICAgIHRoaXMueUF4aXNDb2xvciA9IFtdOyAvLyBcIlwiLCAyIGVsZW1lbnRzXG4gICAgICAgIHRoaXMueUF4aXNMYWJlbENvbG9yID0gW107IC8vIFwiXCIsIDIgZWxlbWVudHNcbiAgICAgICAgdGhpcy55QXhpc1VuaXQgPSBbXTsgLy8gXCJcIiwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLnhBeGlzVGlja0ludGVydmFsID0gbnVsbDsgLy8gdGhlIHN0cmluZyB3aWxsIGJlIGNvbnZlcnRlZCB0byBEdXJhdGlvbiAoYSBtb250aCBpcyBub3QgbmVzc2Nlc2FyeSB0byAzMCBkYXlzKVxuICAgICAgICB0aGlzLnlBeGlzVGlja0ludGVydmFsID0gW107IC8vIG51bGwsIDIgZWxlbWVudHNcbiAgICAgICAgdGhpcy54QXhpc1RpY2tMYWJlbEZvcm1hdCA9IG51bGw7XG4gICAgICAgIHRoaXMueUF4aXNUaWNrTGFiZWxGb3JtYXQgPSBbXTsgLy8gbnVsbCwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLnlNaW4gPSBbXTsgLy8gbnVsbCwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLnlNYXggPSBbXTsgLy8gbnVsbCwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLnJldmVyc2VZQXhpcyA9IFtdOyAvLyBmYWxzZSwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLmFsbG93SW5zcGVjdERhdGEgPSB0cnVlO1xuXG4gICAgICAgIC8vIElMZWdlbmRcbiAgICAgICAgdGhpcy5zaG93TGVnZW5kID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGVnZW5kUG9zaXRpb24gPSBcIlwiOyAvLyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHRcbiAgICAgICAgdGhpcy5sZWdlbmRPcmllbnRhdGlvbiA9IFwiXCI7IC8vIGhvcml6b250YWwsIHZlcnRpY2FsXG4gICAgICAgIHRoaXMubGVnZW5kQmdDb2xvciA9IFwiXCI7XG4gICAgICAgIHRoaXMubGVnZW5kQm9yZGVyQ29sb3IgPSBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBHZXRHcmFwaFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBHcmFwaFR5cGUuVW5rbm93bjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaW5lSW5mbyBleHRlbmRzIENvbW1vbkNoYXJ0SW5mbyB7XG4gICAgbGluZUNvbG9yOiBzdHJpbmdbXTtcbiAgICBsaW5lV2lkdGg6IG51bWJlcltdO1xuICAgIHNob3dMaW5lOiBib29sZWFuW107XG4gICAgc2hvd1BvaW50OiBib29sZWFuW107XG4gICAgcG9pbnRDb2xvcjogc3RyaW5nW107XG4gICAgcG9pbnRCb3JkZXJDb2xvcjogc3RyaW5nW107XG4gICAgcG9pbnRCb3JkZXJXaWR0aDogbnVtYmVyW107XG4gICAgcG9pbnRTaXplOiBudW1iZXJbXTtcbiAgICBmaWxsR2FwOiBib29sZWFuW107XG4gICAgeUF4aXNMb2NhdGlvbjogc3RyaW5nW107XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5saW5lQ29sb3IgPSBbXTsgLy8gXCJcIlxuICAgICAgICB0aGlzLmxpbmVXaWR0aCA9IFtdOyAvLyAxLjVcbiAgICAgICAgdGhpcy5zaG93TGluZSA9IFtdOyAvLyB0cnVlXG4gICAgICAgIHRoaXMuc2hvd1BvaW50ID0gW107IC8vIHRydWVcbiAgICAgICAgdGhpcy5wb2ludENvbG9yID0gW107IC8vICM2OWIzYTJcbiAgICAgICAgdGhpcy5wb2ludEJvcmRlckNvbG9yID0gW107XG4gICAgICAgIHRoaXMucG9pbnRCb3JkZXJXaWR0aCA9IFtdOyAvLyAwLjBcbiAgICAgICAgdGhpcy5wb2ludFNpemUgPSBbXTsgLy8gMy4wXG4gICAgICAgIHRoaXMuZmlsbEdhcCA9IFtdOyAvLyBmYWxzZVxuICAgICAgICB0aGlzLnlBeGlzTG9jYXRpb24gPSBbXTsgLy8gbGVmdCwgZm9yIGVhY2ggdGFyZ2V0XG4gICAgfVxuXG4gICAgcHVibGljIEdldEdyYXBoVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIEdyYXBoVHlwZS5MaW5lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJhckluZm8gZXh0ZW5kcyBDb21tb25DaGFydEluZm8ge1xuICAgIGJhckNvbG9yOiBzdHJpbmdbXTtcbiAgICB5QXhpc0xvY2F0aW9uOiBzdHJpbmdbXTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmJhckNvbG9yID0gW107IC8vICM2OWIzYTJcbiAgICAgICAgdGhpcy55QXhpc0xvY2F0aW9uID0gW107IC8vIGxlZnQsIGZvciBlYWNoIHRhcmdldFxuICAgIH1cblxuICAgIHB1YmxpYyBHZXRHcmFwaFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBHcmFwaFR5cGUuQmFyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpZUluZm8gaW1wbGVtZW50cyBJR3JhcGgsIElMZWdlbmQge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZGF0YTogc3RyaW5nW107XG4gICAgZGF0YUNvbG9yOiBzdHJpbmdbXTtcbiAgICBkYXRhTmFtZTogc3RyaW5nW107XG4gICAgbGFiZWw6IHN0cmluZ1tdO1xuICAgIGhpZGVMYWJlbExlc3NUaGFuOiBudW1iZXI7XG4gICAgc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbDogYm9vbGVhbjtcbiAgICBleHRMYWJlbDogc3RyaW5nW107XG5cbiAgICByYXRpb0lubmVyUmFkaXVzOiBudW1iZXI7XG5cbiAgICAvLyBJTGVnZW5kXG4gICAgc2hvd0xlZ2VuZDogYm9vbGVhbjtcbiAgICBsZWdlbmRQb3NpdGlvbjogc3RyaW5nO1xuICAgIGxlZ2VuZE9yaWVudGF0aW9uOiBzdHJpbmc7XG4gICAgbGVnZW5kQmdDb2xvcjogc3RyaW5nO1xuICAgIGxlZ2VuZEJvcmRlckNvbG9yOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50aXRsZSA9IFwiXCI7XG4gICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICB0aGlzLmRhdGFDb2xvciA9IFtdO1xuICAgICAgICB0aGlzLmRhdGFOYW1lID0gW107XG4gICAgICAgIHRoaXMubGFiZWwgPSBbXTtcbiAgICAgICAgdGhpcy5oaWRlTGFiZWxMZXNzVGhhbiA9IDAuMDM7XG4gICAgICAgIHRoaXMuZXh0TGFiZWwgPSBbXTtcbiAgICAgICAgdGhpcy5zaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmF0aW9Jbm5lclJhZGl1cyA9IDAuMDtcblxuICAgICAgICAvLyBJTGVnZW5kXG4gICAgICAgIHRoaXMuc2hvd0xlZ2VuZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxlZ2VuZFBvc2l0aW9uID0gXCJcIjsgLy8gdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0XG4gICAgICAgIHRoaXMubGVnZW5kT3JpZW50YXRpb24gPSBcIlwiOyAvLyBob3Jpem9udGFsLCB2ZXJ0aWNhbFxuICAgICAgICB0aGlzLmxlZ2VuZEJnQ29sb3IgPSBcIlwiO1xuICAgICAgICB0aGlzLmxlZ2VuZEJvcmRlckNvbG9yID0gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLlBpZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdW1tYXJ5SW5mbyBpbXBsZW1lbnRzIElHcmFwaCB7XG4gICAgdGVtcGxhdGU6IHN0cmluZztcbiAgICBzdHlsZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSBcIlwiO1xuICAgICAgICB0aGlzLnN0eWxlID0gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLlN1bW1hcnk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW9udGhJbmZvIGltcGxlbWVudHMgSUdyYXBoIHtcbiAgICBtb2RlOiBzdHJpbmc7XG4gICAgZGF0YXNldDogbnVtYmVyW107XG4gICAgc3RhcnRXZWVrT246IHN0cmluZztcbiAgICB0aHJlc2hvbGQ6IG51bWJlcltdO1xuICAgIHlNaW46IG51bWJlcltdO1xuICAgIHlNYXg6IG51bWJlcltdO1xuICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgZGltTm90SW5Nb250aDogYm9vbGVhbjtcbiAgICBpbml0TW9udGg6IHN0cmluZzsgLy8gWVlZWS1NTVxuICAgIHNob3dTZWxlY3RlZFZhbHVlOiBib29sZWFuO1xuXG4gICAgLy8gaGVhZGVyXG4gICAgaGVhZGVyWWVhckNvbG9yOiBzdHJpbmc7XG4gICAgaGVhZGVyTW9udGhDb2xvcjogc3RyaW5nO1xuICAgIGRpdmlkaW5nTGluZUNvbG9yOiBzdHJpbmc7XG5cbiAgICAvLyBjaXJjbGVzIGFuZCByaW5nc1xuICAgIHNob3dDaXJjbGU6IGJvb2xlYW47XG4gICAgc2hvd1N0cmVhazogYm9vbGVhbjtcbiAgICBzaG93VG9kYXlSaW5nOiBib29sZWFuO1xuICAgIHNob3dTZWxlY3RlZFJpbmc6IGJvb2xlYW47XG4gICAgY2lyY2xlQ29sb3I6IHN0cmluZztcbiAgICBjaXJjbGVDb2xvckJ5VmFsdWU6IGJvb2xlYW47XG4gICAgdG9kYXlSaW5nQ29sb3I6IHN0cmluZztcbiAgICBzZWxlY3RlZFJpbmdDb2xvcjogc3RyaW5nO1xuXG4gICAgLy8gYW5ub3RhdGlvbnNcbiAgICBzaG93QW5ub3RhdGlvbjogYm9vbGVhbjtcbiAgICBhbm5vdGF0aW9uOiBzdHJpbmdbXTtcbiAgICBzaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0czogYm9vbGVhbjtcblxuICAgIC8vIGludGVybmFsXG4gICAgc2VsZWN0ZWREYXRlOiBzdHJpbmc7XG4gICAgc2VsZWN0ZWREYXRhc2V0OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tb2RlID0gXCJjaXJjbGVcIjsgLy8gY2lyY2xlLCBhbm5vdGF0aW9uXG4gICAgICAgIHRoaXMuZGF0YXNldCA9IFtdO1xuICAgICAgICB0aGlzLnN0YXJ0V2Vla09uID0gXCJTdW5cIjtcbiAgICAgICAgdGhpcy50aHJlc2hvbGQgPSBbXTsgLy8gaWYgdmFsdWUgPiB0aHJlc2hvbGQsIHdpbGwgc2hvdyBkb3RcbiAgICAgICAgdGhpcy55TWluID0gW107XG4gICAgICAgIHRoaXMueU1heCA9IFtdO1xuICAgICAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICAgICAgdGhpcy5kaW1Ob3RJbk1vbnRoID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbml0TW9udGggPSBcIlwiO1xuICAgICAgICB0aGlzLnNob3dTZWxlY3RlZFZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAvLyBoZWFkZXJcbiAgICAgICAgdGhpcy5oZWFkZXJZZWFyQ29sb3IgPSBudWxsO1xuICAgICAgICB0aGlzLmhlYWRlck1vbnRoQ29sb3IgPSBudWxsO1xuICAgICAgICB0aGlzLmRpdmlkaW5nTGluZUNvbG9yID0gbnVsbDtcblxuICAgICAgICAvLyBjaXJjbGVzIGFuZCByaW5nc1xuICAgICAgICB0aGlzLnNob3dDaXJjbGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dTdHJlYWsgPSB0cnVlOyAvLyBhIHN0cmVhayBjb25uZWN0cyBuZWlnYm9yIGRvdHNcbiAgICAgICAgdGhpcy5zaG93VG9kYXlSaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0ZWRSaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jaXJjbGVDb2xvciA9IG51bGw7XG4gICAgICAgIHRoaXMuY2lyY2xlQ29sb3JCeVZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9kYXlSaW5nQ29sb3IgPSBcIlwiOyAvLyB3aGl0ZVxuICAgICAgICB0aGlzLnNlbGVjdGVkUmluZ0NvbG9yID0gXCJmaXJlYnJpY2tcIjtcblxuICAgICAgICAvLyBhbm5vdGF0aW9uc1xuICAgICAgICB0aGlzLnNob3dBbm5vdGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uID0gW107IC8vIGFubm90YXRpb24gZm9yIGVhY2ggZGF0YXNldCwgYWNjZXB0IGV4cHJlc3Npb24gdGh1cyB2YWx1ZVxuICAgICAgICB0aGlzLnNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzID0gdHJ1ZTtcblxuICAgICAgICAvLyBpbnRlcm5hbFxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IFwiXCI7IC8vIHNlbGVjdGVkIGRhdGVcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFzZXQgPSBudWxsOyAvLyBzZWxlY3RlZCBpbmRleCBvZiBkYXRhc2V0XG4gICAgfVxuXG4gICAgcHVibGljIEdldEdyYXBoVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIEdyYXBoVHlwZS5Nb250aDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIZWF0bWFwSW5mbyBpbXBsZW1lbnRzIElHcmFwaCB7XG4gICAgZGF0YXNldDogc3RyaW5nO1xuICAgIHN0YXJ0V2Vla09uOiBzdHJpbmc7XG4gICAgb3JpZW50YXRpb246IHN0cmluZztcbiAgICB5TWluOiBudW1iZXI7XG4gICAgeU1heDogbnVtYmVyO1xuICAgIGNvbG9yOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5kYXRhc2V0ID0gXCIwXCI7XG4gICAgICAgIHRoaXMuc3RhcnRXZWVrT24gPSBcIlN1blwiO1xuICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gXCJ2ZXJ0aWNhbFwiO1xuICAgICAgICB0aGlzLnlNaW4gPSBudWxsO1xuICAgICAgICB0aGlzLnlNYXggPSBudWxsO1xuICAgICAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLkhlYXRtYXA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQnVsbGV0SW5mbyBpbXBsZW1lbnRzIElHcmFwaCB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBkYXRhc2V0OiBzdHJpbmc7XG4gICAgb3JpZW50YXRpb246IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIHZhbHVlVW5pdDogc3RyaW5nO1xuICAgIHZhbHVlQ29sb3I6IHN0cmluZztcbiAgICByYW5nZTogbnVtYmVyW107XG4gICAgcmFuZ2VDb2xvcjogc3RyaW5nW107XG4gICAgc2hvd01hcmtlcjogYm9vbGVhbjtcbiAgICBtYXJrZXJWYWx1ZTogbnVtYmVyO1xuICAgIG1hcmtlckNvbG9yOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50aXRsZSA9IFwiXCI7XG4gICAgICAgIHRoaXMuZGF0YXNldCA9IFwiMFwiOyAvLyBkYXRhc2V0IGlkIG9yIG5hbWVcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiOyAvLyBvciB2ZXJ0aWNhbFxuICAgICAgICB0aGlzLnZhbHVlID0gXCJcIjsgLy8gQ2FuIHBvc3Nlc3MgdGVtcGxhdGUgdmFyaWFsYmVcbiAgICAgICAgdGhpcy52YWx1ZVVuaXQgPSBcIlwiO1xuICAgICAgICB0aGlzLnZhbHVlQ29sb3IgPSBcIiM2OWIzYTJcIjtcbiAgICAgICAgdGhpcy5yYW5nZSA9IFtdO1xuICAgICAgICB0aGlzLnJhbmdlQ29sb3IgPSBbXTtcbiAgICAgICAgdGhpcy5zaG93TWFya2VyID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWFya2VyVmFsdWUgPSAwO1xuICAgICAgICB0aGlzLm1hcmtlckNvbG9yID0gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLkJ1bGxldDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTaXplIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IodzogbnVtYmVyLCBoOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHc7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBc3BlY3RSYXRpbyAge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgIH1cblxuICAgIHB1YmxpYyByZWNhbGN1bGF0ZVNpemUoc2l6ZTogU2l6ZSk6IFNpemUge1xuICAgICAgICBsZXQgYXNwZWN0UmF0aW8gPSB0aGlzLnggLyB0aGlzLnk7XG4gICAgICAgIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoKHNpemUud2lkdGggKiBhc3BlY3RSYXRpbykudG9GaXhlZCgyKSlcbiAgICAgICAgcmV0dXJuIG5ldyBTaXplKHdpZHRoLCBzaXplLmhlaWdodCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWFyZ2luIHtcbiAgICB0b3A6IG51bWJlcjtcbiAgICByaWdodDogbnVtYmVyO1xuICAgIGJvdHRvbTogbnVtYmVyO1xuICAgIGxlZnQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHRvcDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBib3R0b206IG51bWJlciwgbGVmdDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudG9wID0gdG9wO1xuICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zZm9ybSB7XG4gICAgdHJhbnNsYXRlWDogbnVtYmVyO1xuICAgIHRyYW5zbGF0ZVk6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zZm9ybTogYW55KSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlWCA9IDA7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlWSA9IDA7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBncm91cHMgPSB0cmFuc2Zvcm0ubWF0Y2goXG4gICAgICAgICAgICAgICAgL3RyYW5zbGF0ZVxcKFxccyooPzx4PltcXGRcXC5cXC8tXSspXFxzKixcXHMqKD88eT5bXFxkXFwuXFwvLV0rKVxccypcXCkvXG4gICAgICAgICAgICApLmdyb3VwcztcbiAgICAgICAgICAgIGlmIChncm91cHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVggPSBwYXJzZUZsb2F0KGdyb3Vwcy54KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVkgPSBwYXJzZUZsb2F0KGdyb3Vwcy55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgQ2hhcnRFbGVtZW50cyA9IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59O1xuXG5leHBvcnQgY2xhc3MgVGFibGVEYXRhIHtcbiAgICBmaWxlUGF0aDogc3RyaW5nO1xuICAgIHRhYmxlSW5kZXg6IG51bWJlcjtcbiAgICB4RGF0YXNldDogUXVlcnkgfCBudWxsO1xuICAgIHlEYXRhc2V0czogQXJyYXk8UXVlcnk+O1xuXG4gICAgY29uc3RydWN0b3IoZmlsZVBhdGg6IHN0cmluZywgdGFibGVJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuZmlsZVBhdGggPSBmaWxlUGF0aDtcbiAgICAgICAgdGhpcy50YWJsZUluZGV4ID0gdGFibGVJbmRleDtcbiAgICAgICAgdGhpcy54RGF0YXNldCA9IG51bGw7XG4gICAgICAgIHRoaXMueURhdGFzZXRzID0gW107IC8vIGFycmF5IG9mIHF1ZXJ5XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGluZ1Byb2Nlc3NJbmZvIHtcbiAgICBmaWxlVG90YWw6IG51bWJlcjsgLy8gdG90YWwgbnVtYmVyIG9mIGZpbGVzXG4gICAgZmlsZUF2YWlsYWJsZTogbnVtYmVyOyAvLyB0b3RhbCBhdmFpbGFibGUgY291bnRcbiAgICBmaWxlT3V0T2ZEYXRlUmFuZ2U6IG51bWJlcjtcbiAgICBmaWxlTm90SW5Gb3JtYXQ6IG51bWJlcjtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgICBtaW5EYXRlOiBNb21lbnQ7XG4gICAgbWF4RGF0ZTogTW9tZW50O1xuICAgIGdvdEFueVZhbGlkWFZhbHVlOiBib29sZWFuO1xuICAgIGdvdEFueVZhbGlkWVZhbHVlOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZmlsZVRvdGFsID0gMDtcbiAgICAgICAgdGhpcy5maWxlQXZhaWxhYmxlID0gMDtcbiAgICAgICAgdGhpcy5maWxlT3V0T2ZEYXRlUmFuZ2UgPSAwO1xuICAgICAgICB0aGlzLmZpbGVOb3RJbkZvcm1hdCA9IDA7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gXCJcIjtcbiAgICAgICAgdGhpcy5taW5EYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTsgLy8gaW52YWxpZCBkYXRlXG4gICAgICAgIHRoaXMubWF4RGF0ZSA9IHdpbmRvdy5tb21lbnQoXCJcIik7IC8vIGludmFsaWQgZGF0ZVxuICAgICAgICB0aGlzLmdvdEFueVZhbGlkWFZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZ290QW55VmFsaWRZVmFsdWUgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFhWYWx1ZU1hcCA9IE1hcDxudW1iZXIsIHN0cmluZz47XG5leHBvcnQgdHlwZSBEYXRhTWFwID0gTWFwPHN0cmluZywgQXJyYXk8UXVlcnlWYWx1ZVBhaXI+PjtcbiIsImltcG9ydCB7IFJlbmRlckluZm8sIFNpemUsIFRleHRWYWx1ZU1hcCwgVHJhbnNmb3JtIH0gZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0IHsgVEZpbGUsIFRGb2xkZXIsIG5vcm1hbGl6ZVBhdGggfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IFZhbHVlVHlwZSB9IGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgTW9tZW50LCBEdXJhdGlvbiB9IGZyb20gXCJtb21lbnRcIjtcblxuLy8gZGF0ZSBhbmQgdGltZVxuZnVuY3Rpb24gbWFrZVRpbWVGb3JtYXQoKSB7XG4gICAgLy9ISDogMi1kaWdpdHMgaG91cnMgKDI0IGhvdXIgdGltZSkgZnJvbSAwIHRvIDIzLCBIOiwgMi1kaWdpdHMgaG91cnMgKDI0IGhvdXIgdGltZSkgZnJvbSAwIHRvIDIzIHdpdGhvdXQgbGVhZGluZyAwXG4gICAgLy8gaGg6IDItZGlnaXRzIGhvdXJzICgxMiBob3VyIHRpbWUpLCBoOiAyLWRpZ2l0cyBob3VycyAoMTIgaG91ciB0aW1lKSB3aXRob3V0IGxlYWRpbmcgMFxuICAgIC8vIGEvQTogYW0gb3IgcG1cbiAgICBjb25zdCBmbXRIb3VycyA9IFtcIkhIXCIsIFwiSFwiLCBcImhoXCIsIFwiaFwiXTtcbiAgICAvL21tOiAyLWRpZ2l0cyBtaW51dGVzLCBtOiAyLWRpZ2l0cyBtaW51dGVzIHdpdGhvdXQgbGVhZGluZyB6ZXJvXG4gICAgY29uc3QgZm10TWlucyA9IFtcIm1tXCIsIFwibVwiXTtcbiAgICAvLyBzczogMi1kaWdpdHMgc2Vjb25kcywgczogMi1kaWdpdHMgc2Vjb25kcyB3aXRob3V0IGxlYWRpbmcgemVyb1xuICAgIC8vIGNhbiBiZSBlbXB0eVxuICAgIGNvbnN0IGZtdFNlY3MgPSBbXCJzc1wiLCBcInNcIiwgXCJcIl07XG5cbiAgICBsZXQgdGltZUZvcm1hdCA9IFtdO1xuICAgIGZvciAobGV0IGZtdEhvdXIgb2YgZm10SG91cnMpIHtcbiAgICAgICAgZm9yIChsZXQgZm10TWluIG9mIGZtdE1pbnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGZtdFNlYyBvZiBmbXRTZWNzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZtdCA9IGAke2ZtdEhvdXJ9OiR7Zm10TWlufWA7XG4gICAgICAgICAgICAgICAgaWYgKGZtdFNlYyAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBmbXQgKz0gYDoke2ZtdFNlY31gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZm10SG91ci5jb250YWlucyhcImhcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgZm10ICs9IFwiIGFcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGltZUZvcm1hdC5wdXNoKGZtdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZyh0aW1lRm9ybWF0KTtcbiAgICByZXR1cm4gdGltZUZvcm1hdDtcbn1cbmNvbnN0IHRpbWVGb3JtYXQgPSBtYWtlVGltZUZvcm1hdCgpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVN0cmluZ0Zyb21JbnB1dFN0cmluZyhcbiAgICBpbnB1dFN0cmluZzogc3RyaW5nLFxuICAgIGRhdGVGb3JtYXRQcmVmaXg6IHN0cmluZyxcbiAgICBkYXRlRm9ybWF0U3VmZml4OiBzdHJpbmdcbikge1xuICAgIGlmICghZGF0ZUZvcm1hdFByZWZpeCAmJiAhZGF0ZUZvcm1hdFN1ZmZpeCkgcmV0dXJuIGlucHV0U3RyaW5nO1xuXG4gICAgbGV0IGRhdGVTdHJpbmcgPSBpbnB1dFN0cmluZztcbiAgICBpZiAoZGF0ZVN0cmluZy5zdGFydHNXaXRoKFwiXlwiKSkge1xuICAgICAgICBkYXRlU3RyaW5nID0gZGF0ZVN0cmluZy5zbGljZSgxKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coZGF0ZVN0cmluZyk7XG5cbiAgICBpZiAoZGF0ZUZvcm1hdFByZWZpeCkge1xuICAgICAgICBsZXQgc3RyUmVnZXggPSBcIl4oXCIgKyBkYXRlRm9ybWF0UHJlZml4ICsgXCIpXCI7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcbiAgICAgICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QoZGF0ZVN0cmluZykpIHtcbiAgICAgICAgICAgIGRhdGVTdHJpbmcgPSBkYXRlU3RyaW5nLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGVTdHJpbmcpO1xuXG4gICAgaWYgKGRhdGVGb3JtYXRTdWZmaXgpIHtcbiAgICAgICAgbGV0IHN0clJlZ2V4ID0gXCIoXCIgKyBkYXRlRm9ybWF0U3VmZml4ICsgXCIpJFwiO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XG4gICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoc3RyUmVnZXgsIFwiZ21cIik7XG4gICAgICAgIGlmIChyZWdleC50ZXN0KGRhdGVTdHJpbmcpKSB7XG4gICAgICAgICAgICBkYXRlU3RyaW5nID0gZGF0ZVN0cmluZy5yZXBsYWNlKHJlZ2V4LCBcIlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhkYXRlU3RyaW5nKTtcblxuICAgIHJldHVybiBkYXRlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyVG9EYXRlKHN0ckRhdGU6IHN0cmluZywgZGF0ZUZvcm1hdDogc3RyaW5nKTogTW9tZW50IHtcbiAgICBsZXQgZm9ybWF0OiBhbnkgPSBkYXRlRm9ybWF0O1xuXG4gICAgaWYgKFxuICAgICAgICBzdHJEYXRlLmxlbmd0aCA+IDQgJiZcbiAgICAgICAgc3RyRGF0ZS5zdGFydHNXaXRoKFwiW1tcIikgJiZcbiAgICAgICAgc3RyRGF0ZS5lbmRzV2l0aChcIl1dXCIpXG4gICAgKSB7XG4gICAgICAgIHN0ckRhdGUgPSBzdHJEYXRlLnN1YnN0cmluZygyLCBzdHJEYXRlLmxlbmd0aCAtIDIpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0LnRvTG93ZXJDYXNlKCkgPT09IFwiaXNvLTg2MDFcIikge1xuICAgICAgICBmb3JtYXQgPSB3aW5kb3cubW9tZW50LklTT184NjAxO1xuICAgIH1cblxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChzdHJEYXRlLCBmb3JtYXQsIHRydWUpO1xuXG4gICAgLy8gc3RpcCB0aW1lXG4gICAgZGF0ZSA9IGRhdGUuc3RhcnRPZihcImRheVwiKTtcblxuICAgIHJldHVybiBkYXRlO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoXG4gICAgc3RyRHVyYXRpb246IHN0cmluZyxcbiAgICB1bml0czogQXJyYXk8c3RyaW5nPixcbiAgICByZW1vdmVQYXR0ZXJuOiBib29sZWFuID0gdHJ1ZVxuKTogW251bWJlciwgc3RyaW5nXSB7XG4gICAgaWYgKCFzdHJEdXJhdGlvbiB8fCAhdW5pdHMgfHwgdW5pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbbnVsbCwgc3RyRHVyYXRpb25dO1xuICAgIH1cblxuICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgY29uc3Qgc3RyUmVnZXggPSBcIl4oPzx2YWx1ZT5bMC05XSspKFwiICsgdW5pdHMuam9pbihcInxcIikgKyBcIikkXCI7XG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcbiAgICBsZXQgbWF0Y2ggPSByZWdleC5leGVjKHN0ckR1cmF0aW9uKTtcbiAgICBpZiAoXG4gICAgICAgIG1hdGNoICYmXG4gICAgICAgIHR5cGVvZiBtYXRjaC5ncm91cHMgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIG1hdGNoLmdyb3Vwcy52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXRjaCk7XG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChtYXRjaC5ncm91cHMudmFsdWUpO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKHZhbHVlKSAmJiAhTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZVBhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICBzdHJEdXJhdGlvbiA9IHN0ckR1cmF0aW9uLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3RyRHVyYXRpb24pO1xuICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZSwgc3RyRHVyYXRpb25dO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtudWxsLCBzdHJEdXJhdGlvbl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uU3RyaW5nKHN0ckR1cmF0aW9uOiBzdHJpbmcpIHtcbiAgICAvL2R1cmF0aW9uIHN0cmluZyBmb3JtYXQ6XG4gICAgLy95ZWFyICh5ZWFycywgeSwgWSksXG4gICAgLy9tb250aCAobW9udGhzLCBNKSwgLy8gbSB3aWxsIGNvbmZsaWN0IHdpdGggbWludXRlISEhXG4gICAgLy93ZWVrICh3ZWVrcywgdywgVyksXG4gICAgLy9kYXkgKGRheXMsIGQsIEQpLFxuICAgIC8vaG91ciAoaG91cnMsIGgsIEgpLFxuICAgIC8vbWludXRlIChtaW51dGVzLCBtKSwgLy8gTSB3aWxsIGNvbmZsaWN0IHdpdGggbW9udGghISFcbiAgICAvL3NlY29uZCAoc2Vjb25kcywgcywgUylcbiAgICBpZiAoIXN0ckR1cmF0aW9uKSByZXR1cm4gbnVsbDtcblxuICAgIGxldCBkdXJhdGlvbjogRHVyYXRpb24gPSB3aW5kb3cubW9tZW50LmR1cmF0aW9uKDApO1xuICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xuXG4gICAgbGV0IG5lZ2F0aXZlVmFsdWUgPSBmYWxzZTtcbiAgICBpZiAoc3RyRHVyYXRpb24uc3RhcnRzV2l0aChcIitcIikpIHtcbiAgICAgICAgbmVnYXRpdmVWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBzdHJEdXJhdGlvbiA9IHN0ckR1cmF0aW9uLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgaWYgKHN0ckR1cmF0aW9uLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgIG5lZ2F0aXZlVmFsdWUgPSB0cnVlO1xuICAgICAgICBzdHJEdXJhdGlvbiA9IHN0ckR1cmF0aW9uLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBsZXQgeWVhclZhbHVlID0gbnVsbDtcbiAgICBbeWVhclZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJ5ZWFyXCIsXG4gICAgICAgIFwieWVhcnNcIixcbiAgICAgICAgXCJZXCIsXG4gICAgICAgIFwieVwiLFxuICAgIF0pO1xuICAgIGlmICh5ZWFyVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIHllYXJWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQoeWVhclZhbHVlLCBcInllYXJzXCIpO1xuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IG1vbnRoVmFsdWUgPSBudWxsO1xuICAgIFttb250aFZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJtb250aFwiLFxuICAgICAgICBcIm1vbnRoc1wiLFxuICAgICAgICBcIk1cIixcbiAgICBdKTtcbiAgICBpZiAobW9udGhWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobmVnYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgbW9udGhWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQobW9udGhWYWx1ZSwgXCJtb250aHNcIik7XG4gICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgd2Vla1ZhbHVlID0gbnVsbDtcbiAgICBbd2Vla1ZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJ3ZWVrXCIsXG4gICAgICAgIFwid2Vla3NcIixcbiAgICAgICAgXCJXXCIsXG4gICAgICAgIFwid1wiLFxuICAgIF0pO1xuICAgIGlmICh3ZWVrVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIHdlZWtWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQod2Vla1ZhbHVlLCBcIndlZWtzXCIpO1xuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGRheVZhbHVlID0gbnVsbDtcbiAgICBbZGF5VmFsdWUsIHN0ckR1cmF0aW9uXSA9IGV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyhzdHJEdXJhdGlvbiwgW1xuICAgICAgICBcImRheVwiLFxuICAgICAgICBcImRheXNcIixcbiAgICAgICAgXCJEXCIsXG4gICAgICAgIFwiZFwiLFxuICAgIF0pO1xuICAgIGlmIChkYXlWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobmVnYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgZGF5VmFsdWUgKj0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgZHVyYXRpb24uYWRkKGRheVZhbHVlLCBcImRheXNcIik7XG4gICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgaG91clZhbHVlID0gbnVsbDtcbiAgICBbaG91clZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJob3VyXCIsXG4gICAgICAgIFwiaG91cnNcIixcbiAgICAgICAgXCJIXCIsXG4gICAgICAgIFwiaFwiLFxuICAgIF0pO1xuICAgIGlmIChob3VyVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIGhvdXJWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQoaG91clZhbHVlLCBcImhvdXJzXCIpO1xuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IG1pbnV0ZVZhbHVlID0gbnVsbDtcbiAgICBbbWludXRlVmFsdWUsIHN0ckR1cmF0aW9uXSA9IGV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyhzdHJEdXJhdGlvbiwgW1xuICAgICAgICBcIm1pbnV0ZVwiLFxuICAgICAgICBcIm1pbnV0ZXNcIixcbiAgICAgICAgXCJtXCIsXG4gICAgXSk7XG4gICAgaWYgKG1pbnV0ZVZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChuZWdhdGl2ZVZhbHVlKSB7XG4gICAgICAgICAgICBtaW51dGVWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQobWludXRlVmFsdWUsIFwibWludXRlc1wiKTtcbiAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBzZWNvbmRWYWx1ZSA9IG51bGw7XG4gICAgW3NlY29uZFZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJzZWNvbmRcIixcbiAgICAgICAgXCJzZWNvbmRzXCIsXG4gICAgICAgIFwiU1wiLFxuICAgICAgICBcInNcIixcbiAgICBdKTtcbiAgICBpZiAoc2Vjb25kVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIHNlY29uZFZhbHVlICo9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGR1cmF0aW9uLmFkZChzZWNvbmRWYWx1ZSwgXCJzZWNvbmRzXCIpO1xuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFoYXNWYWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGR1cmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZUJ5RHVyYXRpb25Ub1RvZGF5KFxuICAgIHJlbERhdGVTdHJpbmc6IHN0cmluZyxcbiAgICBkYXRlRm9ybWF0OiBzdHJpbmdcbik6IE1vbWVudCB7XG4gICAgbGV0IGRhdGUgPSBudWxsO1xuICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb25TdHJpbmcocmVsRGF0ZVN0cmluZyk7XG4gICAgaWYgKGR1cmF0aW9uICYmIHdpbmRvdy5tb21lbnQuaXNEdXJhdGlvbihkdXJhdGlvbikpIHtcbiAgICAgICAgZGF0ZSA9IGdldERhdGVUb2RheShkYXRlRm9ybWF0KTtcbiAgICAgICAgZGF0ZSA9IGRhdGUuYWRkKGR1cmF0aW9uKTtcblxuICAgICAgICBpZiAoZGF0ZSAmJiBkYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUb1N0cihkYXRlOiBNb21lbnQsIGRhdGVGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRlID09PSBcInVuZGVmaW5lZFwiIHx8IGRhdGUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKGRhdGVGb3JtYXQudG9Mb3dlckNhc2UoKSA9PT0gXCJpc28tODYwMVwiKSB7XG4gICAgICAgIHJldHVybiBkYXRlLmZvcm1hdCgpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbVVuaXhUaW1lKFxuICAgIHVuaXhUaW1lOiBudW1iZXIsXG4gICAgZGF0ZUZvcm1hdDogc3RyaW5nXG4pOiBNb21lbnQge1xuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudCh1bml4VGltZSk7XG4gICAgbGV0IHN0ckRhdGUgPSBkYXRlVG9TdHIoZGF0ZSwgZGF0ZUZvcm1hdCk7XG4gICAgcmV0dXJuIHN0clRvRGF0ZShzdHJEYXRlLCBkYXRlRm9ybWF0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVUb2RheShkYXRlRm9ybWF0OiBzdHJpbmcpIHtcbiAgICBsZXQgdG9kYXkgPSB3aW5kb3cubW9tZW50KCk7XG4gICAgbGV0IHN0clRvZGF5ID0gZGF0ZVRvU3RyKHRvZGF5LCBkYXRlRm9ybWF0KTtcbiAgICByZXR1cm4gc3RyVG9EYXRlKHN0clRvZGF5LCBkYXRlRm9ybWF0KTtcbn1cblxuLy8gaHR0cDovL2pzZmlkZGxlLm5ldC9hbG5pdGFrL2hFc3lzL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBWYWx1ZShvYmo6IGFueSwgc3RyOiBzdHJpbmcpIHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXlxcLi8sIFwiXCIpO1xuICAgIHZhciBhID0gc3RyLnNwbGl0KFwiLlwiKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IGEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIHZhciBrID0gYVtpXTtcbiAgICAgICAgaWYgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBvYmogPSBvYmpba107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmV0dXJuIG9iai50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuLy8gU3RyaW5nIGhlbHBlcnNcbmV4cG9ydCBmdW5jdGlvbiB0cmltQnlDaGFyKHN0cjogc3RyaW5nLCBjaGFyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhcnIgPSBBcnJheS5mcm9tKHN0cik7XG4gICAgY29uc3QgZmlyc3QgPSBhcnIuZmluZEluZGV4KChjKSA9PiBjICE9PSBjaGFyKTtcbiAgICBjb25zdCBsYXN0ID0gYXJyLnJldmVyc2UoKS5maW5kSW5kZXgoKGMpID0+IGMgIT09IGNoYXIpO1xuICAgIHJldHVybiBmaXJzdCA9PT0gLTEgJiYgbGFzdCA9PT0gLTFcbiAgICAgICAgPyBzdHJcbiAgICAgICAgOiBzdHIuc3Vic3RyaW5nKGZpcnN0LCBzdHIubGVuZ3RoIC0gbGFzdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlSW1nVGFnQnlBbHQoaW5wdXQ6IHN0cmluZykge1xuICAgIGlmIChpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyA8aW1nW14+XSo/YWx0XFxzKj1cXHMqW1wiXCInXT8oPzxlbW9qaT5bXidcIlwiID5dKz8pWyAnXCJcIl1bXj5dKj8+XG4gICAgbGV0IHN0clJlZ2V4ID1cbiAgICAgICAgJzxpbWdbXj5dKj9hbHRcXFxccyo9XFxcXHMqW1wiXCJcXCddPyg/PGVtb2ppPlteXFwnXCJcIiA+XSs/KVsgXFwnXCJcIl1bXj5dKj8+JztcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XG4gICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnXCIpO1xuXG4gICAgbGV0IG91dHB1dCA9IGlucHV0LnJlcGxhY2UocmVnZXgsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGxldCBncm91cHMgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChncm91cHMgJiYgZ3JvdXBzLmVtb2ppKSB7XG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBzLmVtb2ppLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9KTtcblxuICAgIHJldHVybiBvdXRwdXQ7XG59XG4vLyBQYXJzaW5nXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGbG9hdEZyb21BbnkoXG4gICAgdG9QYXJzZTogYW55LFxuICAgIHRleHRWYWx1ZU1hcDogVGV4dFZhbHVlTWFwID0gbnVsbFxuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJwYXJzZUZsb2F0RnJvbUFueVwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0b1BhcnNlKTtcblxuICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgbGV0IHZhbHVlVHlwZSA9IFZhbHVlVHlwZS5OdW1iZXI7XG4gICAgaWYgKHR5cGVvZiB0b1BhcnNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8vIHRpbWUgdmFsdWVcbiAgICAgICAgaWYgKHRvUGFyc2UuaW5jbHVkZXMoXCI6XCIpKSB7XG4gICAgICAgICAgICBsZXQgbmVnYXRpdmVWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRvUGFyc2Uuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICAgICAgICBuZWdhdGl2ZVZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0b1BhcnNlID0gdG9QYXJzZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdGltZVZhbHVlID0gd2luZG93Lm1vbWVudCh0b1BhcnNlLCB0aW1lRm9ybWF0LCB0cnVlKTtcbiAgICAgICAgICAgIGlmICh0aW1lVmFsdWUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aW1lVmFsdWUuZGlmZihcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm1vbWVudChcIjAwOjAwXCIsIFwiSEg6bW1cIiwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIFwic2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IC0xICogdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRleHRWYWx1ZU1hcCkge1xuICAgICAgICAgICAgICAgIGxldCBhbnlNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0ZXh0VmFsdWVNYXApIGFzIEFycmF5PGtleW9mIHN0cmluZz47XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoa2V5LCBcImdtXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codG9QYXJzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXgudGVzdCh0b1BhcnNlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlci5pc051bWJlcih0ZXh0VmFsdWVNYXBba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJSZXBsYWNlZFZhbHVlID0gdGV4dFZhbHVlTWFwW2tleV0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1BhcnNlID0gdG9QYXJzZS5yZXBsYWNlKHJlZ2V4LCBzdHJSZXBsYWNlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0b1BhcnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodG9QYXJzZSk7XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHRvUGFyc2UpO1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0b1BhcnNlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHZhbHVlID0gdG9QYXJzZTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB0eXBlOiB2YWx1ZVR5cGUsIHZhbHVlOiB2YWx1ZSB9O1xufVxuXG4vLyBDaGFydCBoZWxwZXJzXG5leHBvcnQgZnVuY3Rpb24gbWVhc3VyZVRleHRTaXplKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBzdHlsZUNsYXNzOiBzdHJpbmcgPSBcIlwiLFxuICAgIHJvdGF0ZTogc3RyaW5nID0gXCJcIlxuKTogU2l6ZSB7XG4gICAgdmFyIGNvbnRhaW5lciA9IGQzLnNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwic3ZnXCIpO1xuICAgIGxldCB0ZXh0QmxvY2sgPSBjb250YWluZXJcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQodGV4dClcbiAgICAgICAgLmF0dHIoXCJ4XCIsIC05OTk5OSlcbiAgICAgICAgLmF0dHIoXCJ5XCIsIC05OTk5OSk7XG4gICAgaWYgKHN0eWxlQ2xhc3MpIHtcbiAgICAgICAgdGV4dEJsb2NrLmF0dHIoXCJjbGFzc1wiLCBzdHlsZUNsYXNzKTtcbiAgICB9XG4gICAgaWYgKHJvdGF0ZSkge1xuICAgICAgICB0ZXh0QmxvY2suYXR0cihcInRyYW5zZm9ybVwiLCBcInJvdGF0ZShcIiArIHJvdGF0ZSArIFwiKVwiKTtcbiAgICB9XG4gICAgdmFyIHNpemUgPSBjb250YWluZXIubm9kZSgpLmdldEJCb3goKTtcbiAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgcmV0dXJuIHsgd2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHQgfTtcbn1cblxuLy8gZG9tXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kQXJlYShhcmVhOiBhbnksIGFkZFc6IG51bWJlciwgYWRkSDogbnVtYmVyKSB7XG4gICAgbGV0IG9yaVdpZHRoID0gcGFyc2VGbG9hdChhcmVhLmF0dHIoXCJ3aWR0aFwiKSkgfCAwO1xuICAgIGxldCBvcmlIZWlnaHQgPSBwYXJzZUZsb2F0KGFyZWEuYXR0cihcImhlaWdodFwiKSkgfCAwO1xuICAgIGxldCBuZXdXaWR0aCA9IG9yaVdpZHRoICsgYWRkVztcbiAgICBsZXQgbmV3SGVpZ2h0ID0gb3JpSGVpZ2h0ICsgYWRkSDtcbiAgICBhcmVhLmF0dHIoXCJ3aWR0aFwiLCBuZXdXaWR0aCk7XG4gICAgYXJlYS5hdHRyKFwiaGVpZ2h0XCIsIG5ld0hlaWdodCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlQXJlYShhcmVhOiBhbnksIHNoaWZ0WDogbnVtYmVyLCBzaGlmdFk6IG51bWJlcikge1xuICAgIGxldCB0cmFucyA9IG5ldyBUcmFuc2Zvcm0oYXJlYS5hdHRyKFwidHJhbnNmb3JtXCIpKTtcbiAgICBhcmVhLmF0dHIoXG4gICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICh0cmFucy50cmFuc2xhdGVYICsgc2hpZnRYKSArXG4gICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAodHJhbnMudHJhbnNsYXRlWSArIHNoaWZ0WSkgK1xuICAgICAgICAgICAgXCIpXCJcbiAgICApO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY2xlYW5UZXh0KHRleHQ6IHN0cmluZykge1xuICAgIC8vIFRoYW5rcyB0byB0b3JhbnRpbmVcbiAgICAvLyBjb2RlIHNuaXBwZXQgZnJvbSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90b3JhbnRpbmUvYWY2MzljYmEzYzMyNzYyNTc2ZDY0YzM0ZWZmYWY2MTRcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oXlxcXFxzXFwqKXwoXFxcXHNcXCokKS9naSwgXCJcIik7IC8vIHJlbW92ZSB0aGUgc3RhcnQgYW5kIGVuZCBzcGFjZXMgb2YgdGhlIGdpdmVuIHN0cmluZ1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcWyBcXF17Mix9L2dpLCBcIiBcIik7IC8vIHJlZHVjZSBtdWx0aXBsZSBzcGFjZXMgdG8gYSBzaW5nbGUgc3BhY2VcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXFxcbiAvLCBcIlxcXFxuXCIpOyAvLyBleGNsdWRlIGEgbmV3IGxpbmUgd2l0aCBhIHN0YXJ0IHNwYWNpbmdcbiAgICByZXR1cm4gdGV4dDtcbn1cblxuLy8gVGhhbmtzIHRvIGx1a2VsZXBwYW4gZm9yIHBsdWdpbiAnYmV0dGVyLXdvcmQtY291bnQnXG4vLyBDb2RlIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2x1a2VsZXBwYW4vYmV0dGVyLXdvcmQtY291bnQvYmxvYi9tYXN0ZXIvc3JjL3N0YXRzLnRzXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29yZENvdW50KHRleHQ6IHN0cmluZykge1xuICAgIHRleHQgPSBjbGVhblRleHQodGV4dCk7XG5cbiAgICAvLyBUaGFua3MgdG8gbGlhbWNhbmVcbiAgICB2YXIgc3BhY2VEZWxpbWl0ZWRDaGFycyA9XG4gICAgICAgIC9BLVphLXpcXHUwMEFBXFx1MDBCNVxcdTAwQkFcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOEEwLVxcdTA4QjRcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBBRjlcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4LVxcdTBDNUFcXHUwQzYwXFx1MEM2MVxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ1Ri1cXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RjEtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxODNcXHUyMTg0XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0VFXFx1MkNGMlxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDgwLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyRTJGXFx1MzAwNVxcdTMwMDZcXHUzMDMxLVxcdTMwMzVcXHUzMDNCXFx1MzAzQ1xcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjlEXFx1QTZBMC1cXHVBNkU1XFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBN0FEXFx1QTdCMC1cXHVBN0I3XFx1QTdGNy1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE4RkRcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY1XFx1QUI3MC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDL1xuICAgICAgICAgICAgLnNvdXJjZTtcbiAgICB2YXIgbm9uU3BhY2VEZWxpbWl0ZWRXb3JkcyA9XG4gICAgICAgIC9bXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1NEUwMC1cXHU5RkQ1XXsxfS9cbiAgICAgICAgICAgIC5zb3VyY2U7XG4gICAgdmFyIHBhdHRlcm4gPSBuZXcgUmVnRXhwKFxuICAgICAgICBbXG4gICAgICAgICAgICBcIig/OlswLTldKyg/Oig/Oix8XFxcXC4pWzAtOV0rKSp8W1xcXFwtXCIgKyBzcGFjZURlbGltaXRlZENoYXJzICsgXCJdKStcIixcbiAgICAgICAgICAgIG5vblNwYWNlRGVsaW1pdGVkV29yZHMsXG4gICAgICAgIF0uam9pbihcInxcIiksXG4gICAgICAgIFwiZ1wiXG4gICAgKTtcbiAgICByZXR1cm4gKHRleHQubWF0Y2gocGF0dGVybikgfHwgW10pLmxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYXJhY3RlckNvdW50KHRleHQ6IHN0cmluZykge1xuICAgIHJldHVybiB0ZXh0Lmxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbnRlbmNlQ291bnQodGV4dDogc3RyaW5nKSB7XG4gICAgdGV4dCA9IGNsZWFuVGV4dCh0ZXh0KTtcblxuICAgIC8vIFRoYW5rcyB0byBFeHRyYWN0IEhpZ2hsaWdodHMgcGx1Z2luIGFuZCBBbmdlbHVzRG9taW5pXG4gICAgLy8gQWxzbyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NTUzNDEwXG4gICAgdmFyIHNlbnRlbmNlcyA9XG4gICAgICAgICh0ZXh0IHx8IFwiXCIpLm1hdGNoKFxuICAgICAgICAgICAgL1teLuOAgiHvvIE/77yfXFxzXVteLuOAgiHvvIE/77yfXSooPzpbLiE/XSg/IVsn4oCY4oCZXCLigJzigJ3jgIzjgI3jgI7jgI9dP1xcc3wkKVteLuOAgiHvvIE/77yfXSopKlsu44CCIe+8gT/vvJ9dP1sn4oCZXCLigJ3jgI3jgI9dPyg/PVxcc3x8JCkvZ21cbiAgICAgICAgKSB8fCBbXTtcbiAgICB2YXIgc2VudGVuY2VzTGVuZ3RoID0gc2VudGVuY2VzLmxlbmd0aDtcbiAgICByZXR1cm4gc2VudGVuY2VzTGVuZ3RoO1xufVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsIi8qKlxuICogQGltcGxlbWVudHMge0lIb29rc31cbiAqL1xuY2xhc3MgSG9va3Mge1xuXHQvKipcblx0ICogQGNhbGxiYWNrIEhvb2tDYWxsYmFja1xuXHQgKiBAdGhpcyB7KnxKc2VwfSB0aGlzXG5cdCAqIEBwYXJhbSB7SnNlcH0gZW52XG5cdCAqIEByZXR1cm5zOiB2b2lkXG5cdCAqL1xuXHQvKipcblx0ICogQWRkcyB0aGUgZ2l2ZW4gY2FsbGJhY2sgdG8gdGhlIGxpc3Qgb2YgY2FsbGJhY2tzIGZvciB0aGUgZ2l2ZW4gaG9vay5cblx0ICpcblx0ICogVGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCB3aGVuIHRoZSBob29rIGl0IGlzIHJlZ2lzdGVyZWQgZm9yIGlzIHJ1bi5cblx0ICpcblx0ICogT25lIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiBiZSByZWdpc3RlcmVkIHRvIG11bHRpcGxlIGhvb2tzIGFuZCB0aGUgc2FtZSBob29rIG11bHRpcGxlIHRpbWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGhvb2ssIG9yIGFuIG9iamVjdCBvZiBjYWxsYmFja3Mga2V5ZWQgYnkgbmFtZVxuXHQgKiBAcGFyYW0ge0hvb2tDYWxsYmFja3xib29sZWFufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggaXMgZ2l2ZW4gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuXHQgKiBAcGFyYW0gez9ib29sZWFufSBbZmlyc3Q9ZmFsc2VdIFdpbGwgYWRkIHRoZSBob29rIHRvIHRoZSB0b3Agb2YgdGhlIGxpc3QgKGRlZmF1bHRzIHRvIHRoZSBib3R0b20pXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFkZChuYW1lLCBjYWxsYmFjaywgZmlyc3QpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50c1swXSAhPSAnc3RyaW5nJykge1xuXHRcdFx0Ly8gTXVsdGlwbGUgaG9vayBjYWxsYmFja3MsIGtleWVkIGJ5IG5hbWVcblx0XHRcdGZvciAobGV0IG5hbWUgaW4gYXJndW1lbnRzWzBdKSB7XG5cdFx0XHRcdHRoaXMuYWRkKG5hbWUsIGFyZ3VtZW50c1swXVtuYW1lXSwgYXJndW1lbnRzWzFdKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHQoQXJyYXkuaXNBcnJheShuYW1lKSA/IG5hbWUgOiBbbmFtZV0pLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcblx0XHRcdFx0dGhpc1tuYW1lXSA9IHRoaXNbbmFtZV0gfHwgW107XG5cblx0XHRcdFx0aWYgKGNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0dGhpc1tuYW1lXVtmaXJzdCA/ICd1bnNoaWZ0JyA6ICdwdXNoJ10oY2FsbGJhY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUnVucyBhIGhvb2sgaW52b2tpbmcgYWxsIHJlZ2lzdGVyZWQgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGVudmlyb25tZW50IHZhcmlhYmxlcy5cblx0ICpcblx0ICogQ2FsbGJhY2tzIHdpbGwgYmUgaW52b2tlZCBzeW5jaHJvbm91c2x5IGFuZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIHJlZ2lzdGVyZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBob29rLlxuXHQgKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IGVudiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9mIHRoZSBob29rIHBhc3NlZCB0byBhbGwgY2FsbGJhY2tzIHJlZ2lzdGVyZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJ1bihuYW1lLCBlbnYpIHtcblx0XHR0aGlzW25hbWVdID0gdGhpc1tuYW1lXSB8fCBbXTtcblx0XHR0aGlzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdFx0XHRjYWxsYmFjay5jYWxsKGVudiAmJiBlbnYuY29udGV4dCA/IGVudi5jb250ZXh0IDogZW52LCBlbnYpO1xuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogQGltcGxlbWVudHMge0lQbHVnaW5zfVxuICovXG5jbGFzcyBQbHVnaW5zIHtcblx0Y29uc3RydWN0b3IoanNlcCkge1xuXHRcdHRoaXMuanNlcCA9IGpzZXA7XG5cdFx0dGhpcy5yZWdpc3RlcmVkID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQGNhbGxiYWNrIFBsdWdpblNldHVwXG5cdCAqIEB0aGlzIHtKc2VwfSBqc2VwXG5cdCAqIEByZXR1cm5zOiB2b2lkXG5cdCAqL1xuXHQvKipcblx0ICogQWRkcyB0aGUgZ2l2ZW4gcGx1Z2luKHMpIHRvIHRoZSByZWdpc3RyeVxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gcGx1Z2luc1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGx1Z2lucy5uYW1lIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW5cblx0ICogQHBhcmFtIHtQbHVnaW5TZXR1cH0gcGx1Z2lucy5pbml0IFRoZSBpbml0IGZ1bmN0aW9uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJlZ2lzdGVyKC4uLnBsdWdpbnMpIHtcblx0XHRwbHVnaW5zLmZvckVhY2goKHBsdWdpbikgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiBwbHVnaW4gIT09ICdvYmplY3QnIHx8ICFwbHVnaW4ubmFtZSB8fCAhcGx1Z2luLmluaXQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTRVAgcGx1Z2luIGZvcm1hdCcpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucmVnaXN0ZXJlZFtwbHVnaW4ubmFtZV0pIHtcblx0XHRcdFx0Ly8gYWxyZWFkeSByZWdpc3RlcmVkLiBJZ25vcmUuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHBsdWdpbi5pbml0KHRoaXMuanNlcCk7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyZWRbcGx1Z2luLm5hbWVdID0gcGx1Z2luO1xuXHRcdH0pO1xuXHR9XG59XG5cbi8vICAgICBKYXZhU2NyaXB0IEV4cHJlc3Npb24gUGFyc2VyIChKU0VQKSAxLjMuOFxuXG5jbGFzcyBKc2VwIHtcblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IHZlcnNpb24oKSB7XG5cdFx0Ly8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSB0ZW1wbGF0ZVxuXHRcdHJldHVybiAnMS4zLjgnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgdG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuICdKYXZhU2NyaXB0IEV4cHJlc3Npb24gUGFyc2VyIChKU0VQKSB2JyArIEpzZXAudmVyc2lvbjtcblx0fTtcblxuXHQvLyA9PT09PT09PT09PT09PT09PT09PSBDT05GSUcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblx0LyoqXG5cdCAqIEBtZXRob2QgYWRkVW5hcnlPcFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gb3BfbmFtZSBUaGUgbmFtZSBvZiB0aGUgdW5hcnkgb3AgdG8gYWRkXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIGFkZFVuYXJ5T3Aob3BfbmFtZSkge1xuXHRcdEpzZXAubWF4X3Vub3BfbGVuID0gTWF0aC5tYXgob3BfbmFtZS5sZW5ndGgsIEpzZXAubWF4X3Vub3BfbGVuKTtcblx0XHRKc2VwLnVuYXJ5X29wc1tvcF9uYW1lXSA9IDE7XG5cdFx0cmV0dXJuIEpzZXA7XG5cdH1cblxuXHQvKipcblx0ICogQG1ldGhvZCBqc2VwLmFkZEJpbmFyeU9wXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvcF9uYW1lIFRoZSBuYW1lIG9mIHRoZSBiaW5hcnkgb3AgdG8gYWRkXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBwcmVjZWRlbmNlIFRoZSBwcmVjZWRlbmNlIG9mIHRoZSBiaW5hcnkgb3AgKGNhbiBiZSBhIGZsb2F0KS4gSGlnaGVyIG51bWJlciA9IGhpZ2hlciBwcmVjZWRlbmNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzUmlnaHRBc3NvY2lhdGl2ZT1mYWxzZV0gd2hldGhlciBvcGVyYXRvciBpcyByaWdodC1hc3NvY2lhdGl2ZVxuXHQgKiBAcmV0dXJucyB7SnNlcH1cblx0ICovXG5cdHN0YXRpYyBhZGRCaW5hcnlPcChvcF9uYW1lLCBwcmVjZWRlbmNlLCBpc1JpZ2h0QXNzb2NpYXRpdmUpIHtcblx0XHRKc2VwLm1heF9iaW5vcF9sZW4gPSBNYXRoLm1heChvcF9uYW1lLmxlbmd0aCwgSnNlcC5tYXhfYmlub3BfbGVuKTtcblx0XHRKc2VwLmJpbmFyeV9vcHNbb3BfbmFtZV0gPSBwcmVjZWRlbmNlO1xuXHRcdGlmIChpc1JpZ2h0QXNzb2NpYXRpdmUpIHtcblx0XHRcdEpzZXAucmlnaHRfYXNzb2NpYXRpdmUuYWRkKG9wX25hbWUpO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdEpzZXAucmlnaHRfYXNzb2NpYXRpdmUuZGVsZXRlKG9wX25hbWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gSnNlcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIGFkZElkZW50aWZpZXJDaGFyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyIFRoZSBhZGRpdGlvbmFsIGNoYXJhY3RlciB0byB0cmVhdCBhcyBhIHZhbGlkIHBhcnQgb2YgYW4gaWRlbnRpZmllclxuXHQgKiBAcmV0dXJucyB7SnNlcH1cblx0ICovXG5cdHN0YXRpYyBhZGRJZGVudGlmaWVyQ2hhcihjaGFyKSB7XG5cdFx0SnNlcC5hZGRpdGlvbmFsX2lkZW50aWZpZXJfY2hhcnMuYWRkKGNoYXIpO1xuXHRcdHJldHVybiBKc2VwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBtZXRob2QgYWRkTGl0ZXJhbFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGl0ZXJhbF9uYW1lIFRoZSBuYW1lIG9mIHRoZSBsaXRlcmFsIHRvIGFkZFxuXHQgKiBAcGFyYW0geyp9IGxpdGVyYWxfdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBsaXRlcmFsXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIGFkZExpdGVyYWwobGl0ZXJhbF9uYW1lLCBsaXRlcmFsX3ZhbHVlKSB7XG5cdFx0SnNlcC5saXRlcmFsc1tsaXRlcmFsX25hbWVdID0gbGl0ZXJhbF92YWx1ZTtcblx0XHRyZXR1cm4gSnNlcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIHJlbW92ZVVuYXJ5T3Bcblx0ICogQHBhcmFtIHtzdHJpbmd9IG9wX25hbWUgVGhlIG5hbWUgb2YgdGhlIHVuYXJ5IG9wIHRvIHJlbW92ZVxuXHQgKiBAcmV0dXJucyB7SnNlcH1cblx0ICovXG5cdHN0YXRpYyByZW1vdmVVbmFyeU9wKG9wX25hbWUpIHtcblx0XHRkZWxldGUgSnNlcC51bmFyeV9vcHNbb3BfbmFtZV07XG5cdFx0aWYgKG9wX25hbWUubGVuZ3RoID09PSBKc2VwLm1heF91bm9wX2xlbikge1xuXHRcdFx0SnNlcC5tYXhfdW5vcF9sZW4gPSBKc2VwLmdldE1heEtleUxlbihKc2VwLnVuYXJ5X29wcyk7XG5cdFx0fVxuXHRcdHJldHVybiBKc2VwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBtZXRob2QgcmVtb3ZlQWxsVW5hcnlPcHNcblx0ICogQHJldHVybnMge0pzZXB9XG5cdCAqL1xuXHRzdGF0aWMgcmVtb3ZlQWxsVW5hcnlPcHMoKSB7XG5cdFx0SnNlcC51bmFyeV9vcHMgPSB7fTtcblx0XHRKc2VwLm1heF91bm9wX2xlbiA9IDA7XG5cblx0XHRyZXR1cm4gSnNlcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIHJlbW92ZUlkZW50aWZpZXJDaGFyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyIFRoZSBhZGRpdGlvbmFsIGNoYXJhY3RlciB0byBzdG9wIHRyZWF0aW5nIGFzIGEgdmFsaWQgcGFydCBvZiBhbiBpZGVudGlmaWVyXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIHJlbW92ZUlkZW50aWZpZXJDaGFyKGNoYXIpIHtcblx0XHRKc2VwLmFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFycy5kZWxldGUoY2hhcik7XG5cdFx0cmV0dXJuIEpzZXA7XG5cdH1cblxuXHQvKipcblx0ICogQG1ldGhvZCByZW1vdmVCaW5hcnlPcFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gb3BfbmFtZSBUaGUgbmFtZSBvZiB0aGUgYmluYXJ5IG9wIHRvIHJlbW92ZVxuXHQgKiBAcmV0dXJucyB7SnNlcH1cblx0ICovXG5cdHN0YXRpYyByZW1vdmVCaW5hcnlPcChvcF9uYW1lKSB7XG5cdFx0ZGVsZXRlIEpzZXAuYmluYXJ5X29wc1tvcF9uYW1lXTtcblxuXHRcdGlmIChvcF9uYW1lLmxlbmd0aCA9PT0gSnNlcC5tYXhfYmlub3BfbGVuKSB7XG5cdFx0XHRKc2VwLm1heF9iaW5vcF9sZW4gPSBKc2VwLmdldE1heEtleUxlbihKc2VwLmJpbmFyeV9vcHMpO1xuXHRcdH1cblx0XHRKc2VwLnJpZ2h0X2Fzc29jaWF0aXZlLmRlbGV0ZShvcF9uYW1lKTtcblxuXHRcdHJldHVybiBKc2VwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBtZXRob2QgcmVtb3ZlQWxsQmluYXJ5T3BzXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIHJlbW92ZUFsbEJpbmFyeU9wcygpIHtcblx0XHRKc2VwLmJpbmFyeV9vcHMgPSB7fTtcblx0XHRKc2VwLm1heF9iaW5vcF9sZW4gPSAwO1xuXG5cdFx0cmV0dXJuIEpzZXA7XG5cdH1cblxuXHQvKipcblx0ICogQG1ldGhvZCByZW1vdmVMaXRlcmFsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsaXRlcmFsX25hbWUgVGhlIG5hbWUgb2YgdGhlIGxpdGVyYWwgdG8gcmVtb3ZlXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIHJlbW92ZUxpdGVyYWwobGl0ZXJhbF9uYW1lKSB7XG5cdFx0ZGVsZXRlIEpzZXAubGl0ZXJhbHNbbGl0ZXJhbF9uYW1lXTtcblx0XHRyZXR1cm4gSnNlcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIHJlbW92ZUFsbExpdGVyYWxzXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIHJlbW92ZUFsbExpdGVyYWxzKCkge1xuXHRcdEpzZXAubGl0ZXJhbHMgPSB7fTtcblxuXHRcdHJldHVybiBKc2VwO1xuXHR9XG5cdC8vID09PT09PT09PT09PT09PT09PT09IEVORCBDT05GSUcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgY2hhcigpIHtcblx0XHRyZXR1cm4gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfVxuXHQgKi9cblx0Z2V0IGNvZGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhwci5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBleHByIGEgc3RyaW5nIHdpdGggdGhlIHBhc3NlZCBpbiBleHByZXNzXG5cdCAqIEByZXR1cm5zIEpzZXBcblx0ICovXG5cdGNvbnN0cnVjdG9yKGV4cHIpIHtcblx0XHQvLyBgaW5kZXhgIHN0b3JlcyB0aGUgY2hhcmFjdGVyIG51bWJlciB3ZSBhcmUgY3VycmVudGx5IGF0XG5cdFx0Ly8gQWxsIG9mIHRoZSBnb2JibGVzIGJlbG93IHdpbGwgbW9kaWZ5IGBpbmRleGAgYXMgd2UgbW92ZSBhbG9uZ1xuXHRcdHRoaXMuZXhwciA9IGV4cHI7XG5cdFx0dGhpcy5pbmRleCA9IDA7XG5cdH1cblxuXHQvKipcblx0ICogc3RhdGljIHRvcC1sZXZlbCBwYXJzZXJcblx0ICogQHJldHVybnMge2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdHN0YXRpYyBwYXJzZShleHByKSB7XG5cdFx0cmV0dXJuIChuZXcgSnNlcChleHByKSkucGFyc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxvbmdlc3Qga2V5IGxlbmd0aCBvZiBhbnkgb2JqZWN0XG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcblx0ICogQHJldHVybnMge251bWJlcn1cblx0ICovXG5cdHN0YXRpYyBnZXRNYXhLZXlMZW4ob2JqKSB7XG5cdFx0cmV0dXJuIE1hdGgubWF4KDAsIC4uLk9iamVjdC5rZXlzKG9iaikubWFwKGsgPT4gay5sZW5ndGgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBgY2hgIGlzIGEgY2hhcmFjdGVyIGNvZGUgaW4gdGhlIG5leHQgdGhyZWUgZnVuY3Rpb25zXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBjaFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBpc0RlY2ltYWxEaWdpdChjaCkge1xuXHRcdHJldHVybiAoY2ggPj0gNDggJiYgY2ggPD0gNTcpOyAvLyAwLi4uOVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHByZWNlZGVuY2Ugb2YgYSBiaW5hcnkgb3BlcmF0b3Igb3IgYDBgIGlmIGl0IGlzbid0IGEgYmluYXJ5IG9wZXJhdG9yLiBDYW4gYmUgZmxvYXQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvcF92YWxcblx0ICogQHJldHVybnMge251bWJlcn1cblx0ICovXG5cdHN0YXRpYyBiaW5hcnlQcmVjZWRlbmNlKG9wX3ZhbCkge1xuXHRcdHJldHVybiBKc2VwLmJpbmFyeV9vcHNbb3BfdmFsXSB8fCAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIExvb2tzIGZvciBzdGFydCBvZiBpZGVudGlmaWVyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBjaFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBpc0lkZW50aWZpZXJTdGFydChjaCkge1xuXHRcdHJldHVybiAgKGNoID49IDY1ICYmIGNoIDw9IDkwKSB8fCAvLyBBLi4uWlxuXHRcdFx0KGNoID49IDk3ICYmIGNoIDw9IDEyMikgfHwgLy8gYS4uLnpcblx0XHRcdChjaCA+PSAxMjggJiYgIUpzZXAuYmluYXJ5X29wc1tTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKV0pIHx8IC8vIGFueSBub24tQVNDSUkgdGhhdCBpcyBub3QgYW4gb3BlcmF0b3Jcblx0XHRcdChKc2VwLmFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFycy5oYXMoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTsgLy8gYWRkaXRpb25hbCBjaGFyYWN0ZXJzXG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtudW1iZXJ9IGNoXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGlzSWRlbnRpZmllclBhcnQoY2gpIHtcblx0XHRyZXR1cm4gSnNlcC5pc0lkZW50aWZpZXJTdGFydChjaCkgfHwgSnNlcC5pc0RlY2ltYWxEaWdpdChjaCk7XG5cdH1cblxuXHQvKipcblx0ICogdGhyb3cgZXJyb3IgYXQgaW5kZXggb2YgdGhlIGV4cHJlc3Npb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHRocm93c1xuXHQgKi9cblx0dGhyb3dFcnJvcihtZXNzYWdlKSB7XG5cdFx0Y29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSArICcgYXQgY2hhcmFjdGVyICcgKyB0aGlzLmluZGV4KTtcblx0XHRlcnJvci5pbmRleCA9IHRoaXMuaW5kZXg7XG5cdFx0ZXJyb3IuZGVzY3JpcHRpb24gPSBtZXNzYWdlO1xuXHRcdHRocm93IGVycm9yO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJ1biBhIGdpdmVuIGhvb2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtqc2VwLkV4cHJlc3Npb258ZmFsc2V9IFtub2RlXVxuXHQgKiBAcmV0dXJucyB7P2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdHJ1bkhvb2sobmFtZSwgbm9kZSkge1xuXHRcdGlmIChKc2VwLmhvb2tzW25hbWVdKSB7XG5cdFx0XHRjb25zdCBlbnYgPSB7IGNvbnRleHQ6IHRoaXMsIG5vZGUgfTtcblx0XHRcdEpzZXAuaG9va3MucnVuKG5hbWUsIGVudik7XG5cdFx0XHRyZXR1cm4gZW52Lm5vZGU7XG5cdFx0fVxuXHRcdHJldHVybiBub2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJ1bnMgYSBnaXZlbiBob29rIHVudGlsIG9uZSByZXR1cm5zIGEgbm9kZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcmV0dXJucyB7P2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdHNlYXJjaEhvb2sobmFtZSkge1xuXHRcdGlmIChKc2VwLmhvb2tzW25hbWVdKSB7XG5cdFx0XHRjb25zdCBlbnYgPSB7IGNvbnRleHQ6IHRoaXMgfTtcblx0XHRcdEpzZXAuaG9va3NbbmFtZV0uZmluZChmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0XHRcdFx0Y2FsbGJhY2suY2FsbChlbnYuY29udGV4dCwgZW52KTtcblx0XHRcdFx0cmV0dXJuIGVudi5ub2RlO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZW52Lm5vZGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFB1c2ggYGluZGV4YCB1cCB0byB0aGUgbmV4dCBub24tc3BhY2UgY2hhcmFjdGVyXG5cdCAqL1xuXHRnb2JibGVTcGFjZXMoKSB7XG5cdFx0bGV0IGNoID0gdGhpcy5jb2RlO1xuXHRcdC8vIFdoaXRlc3BhY2Vcblx0XHR3aGlsZSAoY2ggPT09IEpzZXAuU1BBQ0VfQ09ERVxuXHRcdHx8IGNoID09PSBKc2VwLlRBQl9DT0RFXG5cdFx0fHwgY2ggPT09IEpzZXAuTEZfQ09ERVxuXHRcdHx8IGNoID09PSBKc2VwLkNSX0NPREUpIHtcblx0XHRcdGNoID0gdGhpcy5leHByLmNoYXJDb2RlQXQoKyt0aGlzLmluZGV4KTtcblx0XHR9XG5cdFx0dGhpcy5ydW5Ib29rKCdnb2JibGUtc3BhY2VzJyk7XG5cdH1cblxuXHQvKipcblx0ICogVG9wLWxldmVsIG1ldGhvZCB0byBwYXJzZSBhbGwgZXhwcmVzc2lvbnMgYW5kIHJldHVybnMgY29tcG91bmQgb3Igc2luZ2xlIG5vZGVcblx0ICogQHJldHVybnMge2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdHBhcnNlKCkge1xuXHRcdHRoaXMucnVuSG9vaygnYmVmb3JlLWFsbCcpO1xuXHRcdGNvbnN0IG5vZGVzID0gdGhpcy5nb2JibGVFeHByZXNzaW9ucygpO1xuXG5cdFx0Ly8gSWYgdGhlcmUncyBvbmx5IG9uZSBleHByZXNzaW9uIGp1c3QgdHJ5IHJldHVybmluZyB0aGUgZXhwcmVzc2lvblxuXHRcdGNvbnN0IG5vZGUgPSBub2Rlcy5sZW5ndGggPT09IDFcblx0XHQgID8gbm9kZXNbMF1cblx0XHRcdDoge1xuXHRcdFx0XHR0eXBlOiBKc2VwLkNPTVBPVU5ELFxuXHRcdFx0XHRib2R5OiBub2Rlc1xuXHRcdFx0fTtcblx0XHRyZXR1cm4gdGhpcy5ydW5Ib29rKCdhZnRlci1hbGwnLCBub2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiB0b3AtbGV2ZWwgcGFyc2VyIChidXQgY2FuIGJlIHJldXNlZCB3aXRoaW4gYXMgd2VsbClcblx0ICogQHBhcmFtIHtudW1iZXJ9IFt1bnRpbElDb2RlXVxuXHQgKiBAcmV0dXJucyB7anNlcC5FeHByZXNzaW9uW119XG5cdCAqL1xuXHRnb2JibGVFeHByZXNzaW9ucyh1bnRpbElDb2RlKSB7XG5cdFx0bGV0IG5vZGVzID0gW10sIGNoX2ksIG5vZGU7XG5cblx0XHR3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMuZXhwci5sZW5ndGgpIHtcblx0XHRcdGNoX2kgPSB0aGlzLmNvZGU7XG5cblx0XHRcdC8vIEV4cHJlc3Npb25zIGNhbiBiZSBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucywgY29tbWFzLCBvciBqdXN0IGluZmVycmVkIHdpdGhvdXQgYW55XG5cdFx0XHQvLyBzZXBhcmF0b3JzXG5cdFx0XHRpZiAoY2hfaSA9PT0gSnNlcC5TRU1DT0xfQ09ERSB8fCBjaF9pID09PSBKc2VwLkNPTU1BX0NPREUpIHtcblx0XHRcdFx0dGhpcy5pbmRleCsrOyAvLyBpZ25vcmUgc2VwYXJhdG9yc1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdC8vIFRyeSB0byBnb2JibGUgZWFjaCBleHByZXNzaW9uIGluZGl2aWR1YWxseVxuXHRcdFx0XHRpZiAobm9kZSA9IHRoaXMuZ29iYmxlRXhwcmVzc2lvbigpKSB7XG5cdFx0XHRcdFx0bm9kZXMucHVzaChub2RlKTtcblx0XHRcdFx0XHQvLyBJZiB3ZSB3ZXJlbid0IGFibGUgdG8gZmluZCBhIGJpbmFyeSBleHByZXNzaW9uIGFuZCBhcmUgb3V0IG9mIHJvb20sIHRoZW5cblx0XHRcdFx0XHQvLyB0aGUgZXhwcmVzc2lvbiBwYXNzZWQgaW4gcHJvYmFibHkgaGFzIHRvbyBtdWNoXG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAodGhpcy5pbmRleCA8IHRoaXMuZXhwci5sZW5ndGgpIHtcblx0XHRcdFx0XHRpZiAoY2hfaSA9PT0gdW50aWxJQ29kZSkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5leHBlY3RlZCBcIicgKyB0aGlzLmNoYXIgKyAnXCInKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBub2Rlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWFpbiBwYXJzaW5nIGZ1bmN0aW9uLlxuXHQgKiBAcmV0dXJucyB7P2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdGdvYmJsZUV4cHJlc3Npb24oKSB7XG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMuc2VhcmNoSG9vaygnZ29iYmxlLWV4cHJlc3Npb24nKSB8fCB0aGlzLmdvYmJsZUJpbmFyeUV4cHJlc3Npb24oKTtcblx0XHR0aGlzLmdvYmJsZVNwYWNlcygpO1xuXG5cdFx0cmV0dXJuIHRoaXMucnVuSG9vaygnYWZ0ZXItZXhwcmVzc2lvbicsIG5vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNlYXJjaCBmb3IgdGhlIG9wZXJhdGlvbiBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgKGUuZy4gYCtgLCBgPT09YClcblx0ICogU3RhcnQgYnkgdGFraW5nIHRoZSBsb25nZXN0IHBvc3NpYmxlIGJpbmFyeSBvcGVyYXRpb25zICgzIGNoYXJhY3RlcnM6IGA9PT1gLCBgIT09YCwgYD4+PmApXG5cdCAqIGFuZCBtb3ZlIGRvd24gZnJvbSAzIHRvIDIgdG8gMSBjaGFyYWN0ZXIgdW50aWwgYSBtYXRjaGluZyBiaW5hcnkgb3BlcmF0aW9uIGlzIGZvdW5kXG5cdCAqIHRoZW4sIHJldHVybiB0aGF0IGJpbmFyeSBvcGVyYXRpb25cblx0ICogQHJldHVybnMge3N0cmluZ3xib29sZWFufVxuXHQgKi9cblx0Z29iYmxlQmluYXJ5T3AoKSB7XG5cdFx0dGhpcy5nb2JibGVTcGFjZXMoKTtcblx0XHRsZXQgdG9fY2hlY2sgPSB0aGlzLmV4cHIuc3Vic3RyKHRoaXMuaW5kZXgsIEpzZXAubWF4X2Jpbm9wX2xlbik7XG5cdFx0bGV0IHRjX2xlbiA9IHRvX2NoZWNrLmxlbmd0aDtcblxuXHRcdHdoaWxlICh0Y19sZW4gPiAwKSB7XG5cdFx0XHQvLyBEb24ndCBhY2NlcHQgYSBiaW5hcnkgb3Agd2hlbiBpdCBpcyBhbiBpZGVudGlmaWVyLlxuXHRcdFx0Ly8gQmluYXJ5IG9wcyB0aGF0IHN0YXJ0IHdpdGggYSBpZGVudGlmaWVyLXZhbGlkIGNoYXJhY3RlciBtdXN0IGJlIGZvbGxvd2VkXG5cdFx0XHQvLyBieSBhIG5vbiBpZGVudGlmaWVyLXBhcnQgdmFsaWQgY2hhcmFjdGVyXG5cdFx0XHRpZiAoSnNlcC5iaW5hcnlfb3BzLmhhc093blByb3BlcnR5KHRvX2NoZWNrKSAmJiAoXG5cdFx0XHRcdCFKc2VwLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuY29kZSkgfHxcblx0XHRcdFx0KHRoaXMuaW5kZXggKyB0b19jaGVjay5sZW5ndGggPCB0aGlzLmV4cHIubGVuZ3RoICYmICFKc2VwLmlzSWRlbnRpZmllclBhcnQodGhpcy5leHByLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIHRvX2NoZWNrLmxlbmd0aCkpKVxuXHRcdFx0KSkge1xuXHRcdFx0XHR0aGlzLmluZGV4ICs9IHRjX2xlbjtcblx0XHRcdFx0cmV0dXJuIHRvX2NoZWNrO1xuXHRcdFx0fVxuXHRcdFx0dG9fY2hlY2sgPSB0b19jaGVjay5zdWJzdHIoMCwgLS10Y19sZW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZ29iYmxpbmcgYW4gaW5kaXZpZHVhbCBleHByZXNzaW9uLFxuXHQgKiBlLmcuIGAxYCwgYDErMmAsIGBhKyhiKjIpLU1hdGguc3FydCgyKWBcblx0ICogQHJldHVybnMgez9qc2VwLkJpbmFyeUV4cHJlc3Npb259XG5cdCAqL1xuXHRnb2JibGVCaW5hcnlFeHByZXNzaW9uKCkge1xuXHRcdGxldCBub2RlLCBiaW9wLCBwcmVjLCBzdGFjaywgYmlvcF9pbmZvLCBsZWZ0LCByaWdodCwgaSwgY3VyX2Jpb3A7XG5cblx0XHQvLyBGaXJzdCwgdHJ5IHRvIGdldCB0aGUgbGVmdG1vc3QgdGhpbmdcblx0XHQvLyBUaGVuLCBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhIGJpbmFyeSBvcGVyYXRvciBvcGVyYXRpbmcgb24gdGhhdCBsZWZ0bW9zdCB0aGluZ1xuXHRcdC8vIERvbid0IGdvYmJsZUJpbmFyeU9wIHdpdGhvdXQgYSBsZWZ0LWhhbmQtc2lkZVxuXHRcdGxlZnQgPSB0aGlzLmdvYmJsZVRva2VuKCk7XG5cdFx0aWYgKCFsZWZ0KSB7XG5cdFx0XHRyZXR1cm4gbGVmdDtcblx0XHR9XG5cdFx0YmlvcCA9IHRoaXMuZ29iYmxlQmluYXJ5T3AoKTtcblxuXHRcdC8vIElmIHRoZXJlIHdhc24ndCBhIGJpbmFyeSBvcGVyYXRvciwganVzdCByZXR1cm4gdGhlIGxlZnRtb3N0IG5vZGVcblx0XHRpZiAoIWJpb3ApIHtcblx0XHRcdHJldHVybiBsZWZ0O1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSwgd2UgbmVlZCB0byBzdGFydCBhIHN0YWNrIHRvIHByb3Blcmx5IHBsYWNlIHRoZSBiaW5hcnkgb3BlcmF0aW9ucyBpbiB0aGVpclxuXHRcdC8vIHByZWNlZGVuY2Ugc3RydWN0dXJlXG5cdFx0YmlvcF9pbmZvID0geyB2YWx1ZTogYmlvcCwgcHJlYzogSnNlcC5iaW5hcnlQcmVjZWRlbmNlKGJpb3ApLCByaWdodF9hOiBKc2VwLnJpZ2h0X2Fzc29jaWF0aXZlLmhhcyhiaW9wKSB9O1xuXG5cdFx0cmlnaHQgPSB0aGlzLmdvYmJsZVRva2VuKCk7XG5cblx0XHRpZiAoIXJpZ2h0KSB7XG5cdFx0XHR0aGlzLnRocm93RXJyb3IoXCJFeHBlY3RlZCBleHByZXNzaW9uIGFmdGVyIFwiICsgYmlvcCk7XG5cdFx0fVxuXG5cdFx0c3RhY2sgPSBbbGVmdCwgYmlvcF9pbmZvLCByaWdodF07XG5cblx0XHQvLyBQcm9wZXJseSBkZWFsIHdpdGggcHJlY2VkZW5jZSB1c2luZyBbcmVjdXJzaXZlIGRlc2NlbnRdKGh0dHA6Ly93d3cuZW5nci5tdW4uY2EvfnRoZW8vTWlzYy9leHBfcGFyc2luZy5odG0pXG5cdFx0d2hpbGUgKChiaW9wID0gdGhpcy5nb2JibGVCaW5hcnlPcCgpKSkge1xuXHRcdFx0cHJlYyA9IEpzZXAuYmluYXJ5UHJlY2VkZW5jZShiaW9wKTtcblxuXHRcdFx0aWYgKHByZWMgPT09IDApIHtcblx0XHRcdFx0dGhpcy5pbmRleCAtPSBiaW9wLmxlbmd0aDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGJpb3BfaW5mbyA9IHsgdmFsdWU6IGJpb3AsIHByZWMsIHJpZ2h0X2E6IEpzZXAucmlnaHRfYXNzb2NpYXRpdmUuaGFzKGJpb3ApIH07XG5cblx0XHRcdGN1cl9iaW9wID0gYmlvcDtcblxuXHRcdFx0Ly8gUmVkdWNlOiBtYWtlIGEgYmluYXJ5IGV4cHJlc3Npb24gZnJvbSB0aGUgdGhyZWUgdG9wbW9zdCBlbnRyaWVzLlxuXHRcdFx0Y29uc3QgY29tcGFyZVByZXYgPSBwcmV2ID0+IGJpb3BfaW5mby5yaWdodF9hICYmIHByZXYucmlnaHRfYVxuXHRcdFx0XHQ/IHByZWMgPiBwcmV2LnByZWNcblx0XHRcdFx0OiBwcmVjIDw9IHByZXYucHJlYztcblx0XHRcdHdoaWxlICgoc3RhY2subGVuZ3RoID4gMikgJiYgY29tcGFyZVByZXYoc3RhY2tbc3RhY2subGVuZ3RoIC0gMl0pKSB7XG5cdFx0XHRcdHJpZ2h0ID0gc3RhY2sucG9wKCk7XG5cdFx0XHRcdGJpb3AgPSBzdGFjay5wb3AoKS52YWx1ZTtcblx0XHRcdFx0bGVmdCA9IHN0YWNrLnBvcCgpO1xuXHRcdFx0XHRub2RlID0ge1xuXHRcdFx0XHRcdHR5cGU6IEpzZXAuQklOQVJZX0VYUCxcblx0XHRcdFx0XHRvcGVyYXRvcjogYmlvcCxcblx0XHRcdFx0XHRsZWZ0LFxuXHRcdFx0XHRcdHJpZ2h0XG5cdFx0XHRcdH07XG5cdFx0XHRcdHN0YWNrLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdG5vZGUgPSB0aGlzLmdvYmJsZVRva2VuKCk7XG5cblx0XHRcdGlmICghbm9kZSkge1xuXHRcdFx0XHR0aGlzLnRocm93RXJyb3IoXCJFeHBlY3RlZCBleHByZXNzaW9uIGFmdGVyIFwiICsgY3VyX2Jpb3ApO1xuXHRcdFx0fVxuXG5cdFx0XHRzdGFjay5wdXNoKGJpb3BfaW5mbywgbm9kZSk7XG5cdFx0fVxuXG5cdFx0aSA9IHN0YWNrLmxlbmd0aCAtIDE7XG5cdFx0bm9kZSA9IHN0YWNrW2ldO1xuXG5cdFx0d2hpbGUgKGkgPiAxKSB7XG5cdFx0XHRub2RlID0ge1xuXHRcdFx0XHR0eXBlOiBKc2VwLkJJTkFSWV9FWFAsXG5cdFx0XHRcdG9wZXJhdG9yOiBzdGFja1tpIC0gMV0udmFsdWUsXG5cdFx0XHRcdGxlZnQ6IHN0YWNrW2kgLSAyXSxcblx0XHRcdFx0cmlnaHQ6IG5vZGVcblx0XHRcdH07XG5cdFx0XHRpIC09IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5vZGU7XG5cdH1cblxuXHQvKipcblx0ICogQW4gaW5kaXZpZHVhbCBwYXJ0IG9mIGEgYmluYXJ5IGV4cHJlc3Npb246XG5cdCAqIGUuZy4gYGZvby5iYXIoYmF6KWAsIGAxYCwgYFwiYWJjXCJgLCBgKGEgJSAyKWAgKGJlY2F1c2UgaXQncyBpbiBwYXJlbnRoZXNpcylcblx0ICogQHJldHVybnMge2Jvb2xlYW58anNlcC5FeHByZXNzaW9ufVxuXHQgKi9cblx0Z29iYmxlVG9rZW4oKSB7XG5cdFx0bGV0IGNoLCB0b19jaGVjaywgdGNfbGVuLCBub2RlO1xuXG5cdFx0dGhpcy5nb2JibGVTcGFjZXMoKTtcblx0XHRub2RlID0gdGhpcy5zZWFyY2hIb29rKCdnb2JibGUtdG9rZW4nKTtcblx0XHRpZiAobm9kZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucnVuSG9vaygnYWZ0ZXItdG9rZW4nLCBub2RlKTtcblx0XHR9XG5cblx0XHRjaCA9IHRoaXMuY29kZTtcblxuXHRcdGlmIChKc2VwLmlzRGVjaW1hbERpZ2l0KGNoKSB8fCBjaCA9PT0gSnNlcC5QRVJJT0RfQ09ERSkge1xuXHRcdFx0Ly8gQ2hhciBjb2RlIDQ2IGlzIGEgZG90IGAuYCB3aGljaCBjYW4gc3RhcnQgb2ZmIGEgbnVtZXJpYyBsaXRlcmFsXG5cdFx0XHRyZXR1cm4gdGhpcy5nb2JibGVOdW1lcmljTGl0ZXJhbCgpO1xuXHRcdH1cblxuXHRcdGlmIChjaCA9PT0gSnNlcC5TUVVPVEVfQ09ERSB8fCBjaCA9PT0gSnNlcC5EUVVPVEVfQ09ERSkge1xuXHRcdFx0Ly8gU2luZ2xlIG9yIGRvdWJsZSBxdW90ZXNcblx0XHRcdG5vZGUgPSB0aGlzLmdvYmJsZVN0cmluZ0xpdGVyYWwoKTtcblx0XHR9XG5cdFx0ZWxzZSBpZiAoY2ggPT09IEpzZXAuT0JSQUNLX0NPREUpIHtcblx0XHRcdG5vZGUgPSB0aGlzLmdvYmJsZUFycmF5KCk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dG9fY2hlY2sgPSB0aGlzLmV4cHIuc3Vic3RyKHRoaXMuaW5kZXgsIEpzZXAubWF4X3Vub3BfbGVuKTtcblx0XHRcdHRjX2xlbiA9IHRvX2NoZWNrLmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKHRjX2xlbiA+IDApIHtcblx0XHRcdFx0Ly8gRG9uJ3QgYWNjZXB0IGFuIHVuYXJ5IG9wIHdoZW4gaXQgaXMgYW4gaWRlbnRpZmllci5cblx0XHRcdFx0Ly8gVW5hcnkgb3BzIHRoYXQgc3RhcnQgd2l0aCBhIGlkZW50aWZpZXItdmFsaWQgY2hhcmFjdGVyIG11c3QgYmUgZm9sbG93ZWRcblx0XHRcdFx0Ly8gYnkgYSBub24gaWRlbnRpZmllci1wYXJ0IHZhbGlkIGNoYXJhY3RlclxuXHRcdFx0XHRpZiAoSnNlcC51bmFyeV9vcHMuaGFzT3duUHJvcGVydHkodG9fY2hlY2spICYmIChcblx0XHRcdFx0XHQhSnNlcC5pc0lkZW50aWZpZXJTdGFydCh0aGlzLmNvZGUpIHx8XG5cdFx0XHRcdFx0KHRoaXMuaW5kZXggKyB0b19jaGVjay5sZW5ndGggPCB0aGlzLmV4cHIubGVuZ3RoICYmICFKc2VwLmlzSWRlbnRpZmllclBhcnQodGhpcy5leHByLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIHRvX2NoZWNrLmxlbmd0aCkpKVxuXHRcdFx0XHQpKSB7XG5cdFx0XHRcdFx0dGhpcy5pbmRleCArPSB0Y19sZW47XG5cdFx0XHRcdFx0Y29uc3QgYXJndW1lbnQgPSB0aGlzLmdvYmJsZVRva2VuKCk7XG5cdFx0XHRcdFx0aWYgKCFhcmd1bWVudCkge1xuXHRcdFx0XHRcdFx0dGhpcy50aHJvd0Vycm9yKCdtaXNzaW5nIHVuYXJ5T3AgYXJndW1lbnQnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucnVuSG9vaygnYWZ0ZXItdG9rZW4nLCB7XG5cdFx0XHRcdFx0XHR0eXBlOiBKc2VwLlVOQVJZX0VYUCxcblx0XHRcdFx0XHRcdG9wZXJhdG9yOiB0b19jaGVjayxcblx0XHRcdFx0XHRcdGFyZ3VtZW50LFxuXHRcdFx0XHRcdFx0cHJlZml4OiB0cnVlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0b19jaGVjayA9IHRvX2NoZWNrLnN1YnN0cigwLCAtLXRjX2xlbik7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChKc2VwLmlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuXHRcdFx0XHRub2RlID0gdGhpcy5nb2JibGVJZGVudGlmaWVyKCk7XG5cdFx0XHRcdGlmIChKc2VwLmxpdGVyYWxzLmhhc093blByb3BlcnR5KG5vZGUubmFtZSkpIHtcblx0XHRcdFx0XHRub2RlID0ge1xuXHRcdFx0XHRcdFx0dHlwZTogSnNlcC5MSVRFUkFMLFxuXHRcdFx0XHRcdFx0dmFsdWU6IEpzZXAubGl0ZXJhbHNbbm9kZS5uYW1lXSxcblx0XHRcdFx0XHRcdHJhdzogbm9kZS5uYW1lLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAobm9kZS5uYW1lID09PSBKc2VwLnRoaXNfc3RyKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHsgdHlwZTogSnNlcC5USElTX0VYUCB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChjaCA9PT0gSnNlcC5PUEFSRU5fQ09ERSkgeyAvLyBvcGVuIHBhcmVudGhlc2lzXG5cdFx0XHRcdG5vZGUgPSB0aGlzLmdvYmJsZUdyb3VwKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFub2RlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5ydW5Ib29rKCdhZnRlci10b2tlbicsIGZhbHNlKTtcblx0XHR9XG5cblx0XHRub2RlID0gdGhpcy5nb2JibGVUb2tlblByb3BlcnR5KG5vZGUpO1xuXHRcdHJldHVybiB0aGlzLnJ1bkhvb2soJ2FmdGVyLXRva2VuJywgbm9kZSk7XG5cdH1cblxuXHQvKipcblx0ICogR29iYmxlIHByb3BlcnRpZXMgb2Ygb2YgaWRlbnRpZmllcnMvc3RyaW5ncy9hcnJheXMvZ3JvdXBzLlxuXHQgKiBlLmcuIGBmb29gLCBgYmFyLmJhemAsIGBmb29bJ2JhciddLmJhemBcblx0ICogSXQgYWxzbyBnb2JibGVzIGZ1bmN0aW9uIGNhbGxzOlxuXHQgKiBlLmcuIGBNYXRoLmFjb3Mob2JqLmFuZ2xlKWBcblx0ICogQHBhcmFtIHtqc2VwLkV4cHJlc3Npb259IG5vZGVcblx0ICogQHJldHVybnMge2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdGdvYmJsZVRva2VuUHJvcGVydHkobm9kZSkge1xuXHRcdHRoaXMuZ29iYmxlU3BhY2VzKCk7XG5cblx0XHRsZXQgY2ggPSB0aGlzLmNvZGU7XG5cdFx0d2hpbGUgKGNoID09PSBKc2VwLlBFUklPRF9DT0RFIHx8IGNoID09PSBKc2VwLk9CUkFDS19DT0RFIHx8IGNoID09PSBKc2VwLk9QQVJFTl9DT0RFIHx8IGNoID09PSBKc2VwLlFVTUFSS19DT0RFKSB7XG5cdFx0XHRsZXQgb3B0aW9uYWw7XG5cdFx0XHRpZiAoY2ggPT09IEpzZXAuUVVNQVJLX0NPREUpIHtcblx0XHRcdFx0aWYgKHRoaXMuZXhwci5jaGFyQ29kZUF0KHRoaXMuaW5kZXggKyAxKSAhPT0gSnNlcC5QRVJJT0RfQ09ERSkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9wdGlvbmFsID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5pbmRleCArPSAyO1xuXHRcdFx0XHR0aGlzLmdvYmJsZVNwYWNlcygpO1xuXHRcdFx0XHRjaCA9IHRoaXMuY29kZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaW5kZXgrKztcblxuXHRcdFx0aWYgKGNoID09PSBKc2VwLk9CUkFDS19DT0RFKSB7XG5cdFx0XHRcdG5vZGUgPSB7XG5cdFx0XHRcdFx0dHlwZTogSnNlcC5NRU1CRVJfRVhQLFxuXHRcdFx0XHRcdGNvbXB1dGVkOiB0cnVlLFxuXHRcdFx0XHRcdG9iamVjdDogbm9kZSxcblx0XHRcdFx0XHRwcm9wZXJ0eTogdGhpcy5nb2JibGVFeHByZXNzaW9uKClcblx0XHRcdFx0fTtcblx0XHRcdFx0dGhpcy5nb2JibGVTcGFjZXMoKTtcblx0XHRcdFx0Y2ggPSB0aGlzLmNvZGU7XG5cdFx0XHRcdGlmIChjaCAhPT0gSnNlcC5DQlJBQ0tfQ09ERSkge1xuXHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5jbG9zZWQgWycpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKGNoID09PSBKc2VwLk9QQVJFTl9DT0RFKSB7XG5cdFx0XHRcdC8vIEEgZnVuY3Rpb24gY2FsbCBpcyBiZWluZyBtYWRlOyBnb2JibGUgYWxsIHRoZSBhcmd1bWVudHNcblx0XHRcdFx0bm9kZSA9IHtcblx0XHRcdFx0XHR0eXBlOiBKc2VwLkNBTExfRVhQLFxuXHRcdFx0XHRcdCdhcmd1bWVudHMnOiB0aGlzLmdvYmJsZUFyZ3VtZW50cyhKc2VwLkNQQVJFTl9DT0RFKSxcblx0XHRcdFx0XHRjYWxsZWU6IG5vZGVcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKGNoID09PSBKc2VwLlBFUklPRF9DT0RFIHx8IG9wdGlvbmFsKSB7XG5cdFx0XHRcdGlmIChvcHRpb25hbCkge1xuXHRcdFx0XHRcdHRoaXMuaW5kZXgtLTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmdvYmJsZVNwYWNlcygpO1xuXHRcdFx0XHRub2RlID0ge1xuXHRcdFx0XHRcdHR5cGU6IEpzZXAuTUVNQkVSX0VYUCxcblx0XHRcdFx0XHRjb21wdXRlZDogZmFsc2UsXG5cdFx0XHRcdFx0b2JqZWN0OiBub2RlLFxuXHRcdFx0XHRcdHByb3BlcnR5OiB0aGlzLmdvYmJsZUlkZW50aWZpZXIoKSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9wdGlvbmFsKSB7XG5cdFx0XHRcdG5vZGUub3B0aW9uYWwgPSB0cnVlO1xuXHRcdFx0fSAvLyBlbHNlIGxlYXZlIHVuZGVmaW5lZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGVzcHJpbWFcblxuXHRcdFx0dGhpcy5nb2JibGVTcGFjZXMoKTtcblx0XHRcdGNoID0gdGhpcy5jb2RlO1xuXHRcdH1cblxuXHRcdHJldHVybiBub2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcnNlIHNpbXBsZSBudW1lcmljIGxpdGVyYWxzOiBgMTJgLCBgMy40YCwgYC41YC4gRG8gdGhpcyBieSB1c2luZyBhIHN0cmluZyB0b1xuXHQgKiBrZWVwIHRyYWNrIG9mIGV2ZXJ5dGhpbmcgaW4gdGhlIG51bWVyaWMgbGl0ZXJhbCBhbmQgdGhlbiBjYWxsaW5nIGBwYXJzZUZsb2F0YCBvbiB0aGF0IHN0cmluZ1xuXHQgKiBAcmV0dXJucyB7anNlcC5MaXRlcmFsfVxuXHQgKi9cblx0Z29iYmxlTnVtZXJpY0xpdGVyYWwoKSB7XG5cdFx0bGV0IG51bWJlciA9ICcnLCBjaCwgY2hDb2RlO1xuXG5cdFx0d2hpbGUgKEpzZXAuaXNEZWNpbWFsRGlnaXQodGhpcy5jb2RlKSkge1xuXHRcdFx0bnVtYmVyICs9IHRoaXMuZXhwci5jaGFyQXQodGhpcy5pbmRleCsrKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5jb2RlID09PSBKc2VwLlBFUklPRF9DT0RFKSB7IC8vIGNhbiBzdGFydCB3aXRoIGEgZGVjaW1hbCBtYXJrZXJcblx0XHRcdG51bWJlciArPSB0aGlzLmV4cHIuY2hhckF0KHRoaXMuaW5kZXgrKyk7XG5cblx0XHRcdHdoaWxlIChKc2VwLmlzRGVjaW1hbERpZ2l0KHRoaXMuY29kZSkpIHtcblx0XHRcdFx0bnVtYmVyICs9IHRoaXMuZXhwci5jaGFyQXQodGhpcy5pbmRleCsrKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjaCA9IHRoaXMuY2hhcjtcblxuXHRcdGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHsgLy8gZXhwb25lbnQgbWFya2VyXG5cdFx0XHRudW1iZXIgKz0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXHRcdFx0Y2ggPSB0aGlzLmNoYXI7XG5cblx0XHRcdGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsgLy8gZXhwb25lbnQgc2lnblxuXHRcdFx0XHRudW1iZXIgKz0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXHRcdFx0fVxuXG5cdFx0XHR3aGlsZSAoSnNlcC5pc0RlY2ltYWxEaWdpdCh0aGlzLmNvZGUpKSB7IC8vIGV4cG9uZW50IGl0c2VsZlxuXHRcdFx0XHRudW1iZXIgKz0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIUpzZXAuaXNEZWNpbWFsRGlnaXQodGhpcy5leHByLmNoYXJDb2RlQXQodGhpcy5pbmRleCAtIDEpKSApIHtcblx0XHRcdFx0dGhpcy50aHJvd0Vycm9yKCdFeHBlY3RlZCBleHBvbmVudCAoJyArIG51bWJlciArIHRoaXMuY2hhciArICcpJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y2hDb2RlID0gdGhpcy5jb2RlO1xuXG5cdFx0Ly8gQ2hlY2sgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgYSB2YXJpYWJsZSBuYW1lIHRoYXQgc3RhcnQgd2l0aCBhIG51bWJlciAoMTIzYWJjKVxuXHRcdGlmIChKc2VwLmlzSWRlbnRpZmllclN0YXJ0KGNoQ29kZSkpIHtcblx0XHRcdHRoaXMudGhyb3dFcnJvcignVmFyaWFibGUgbmFtZXMgY2Fubm90IHN0YXJ0IHdpdGggYSBudW1iZXIgKCcgK1xuXHRcdFx0XHRudW1iZXIgKyB0aGlzLmNoYXIgKyAnKScpO1xuXHRcdH1cblx0XHRlbHNlIGlmIChjaENvZGUgPT09IEpzZXAuUEVSSU9EX0NPREUgfHwgKG51bWJlci5sZW5ndGggPT09IDEgJiYgbnVtYmVyLmNoYXJDb2RlQXQoMCkgPT09IEpzZXAuUEVSSU9EX0NPREUpKSB7XG5cdFx0XHR0aGlzLnRocm93RXJyb3IoJ1VuZXhwZWN0ZWQgcGVyaW9kJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEpzZXAuTElURVJBTCxcblx0XHRcdHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksXG5cdFx0XHRyYXc6IG51bWJlclxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgc3RyaW5nIGxpdGVyYWwsIHN0YXJpbmcgd2l0aCBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyB3aXRoIGJhc2ljIHN1cHBvcnQgZm9yIGVzY2FwZSBjb2Rlc1xuXHQgKiBlLmcuIGBcImhlbGxvIHdvcmxkXCJgLCBgJ3RoaXMgaXNcXG5KU0VQJ2Bcblx0ICogQHJldHVybnMge2pzZXAuTGl0ZXJhbH1cblx0ICovXG5cdGdvYmJsZVN0cmluZ0xpdGVyYWwoKSB7XG5cdFx0bGV0IHN0ciA9ICcnO1xuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLmluZGV4O1xuXHRcdGNvbnN0IHF1b3RlID0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXHRcdGxldCBjbG9zZWQgPSBmYWxzZTtcblxuXHRcdHdoaWxlICh0aGlzLmluZGV4IDwgdGhpcy5leHByLmxlbmd0aCkge1xuXHRcdFx0bGV0IGNoID0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXG5cdFx0XHRpZiAoY2ggPT09IHF1b3RlKSB7XG5cdFx0XHRcdGNsb3NlZCA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoY2ggPT09ICdcXFxcJykge1xuXHRcdFx0XHQvLyBDaGVjayBmb3IgYWxsIG9mIHRoZSBjb21tb24gZXNjYXBlIGNvZGVzXG5cdFx0XHRcdGNoID0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXG5cdFx0XHRcdHN3aXRjaCAoY2gpIHtcblx0XHRcdFx0XHRjYXNlICduJzogc3RyICs9ICdcXG4nOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICdyJzogc3RyICs9ICdcXHInOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICd0Jzogc3RyICs9ICdcXHQnOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICdiJzogc3RyICs9ICdcXGInOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICdmJzogc3RyICs9ICdcXGYnOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICd2Jzogc3RyICs9ICdcXHgwQic7IGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQgOiBzdHIgKz0gY2g7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRzdHIgKz0gY2g7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFjbG9zZWQpIHtcblx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5jbG9zZWQgcXVvdGUgYWZ0ZXIgXCInICsgc3RyICsgJ1wiJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEpzZXAuTElURVJBTCxcblx0XHRcdHZhbHVlOiBzdHIsXG5cdFx0XHRyYXc6IHRoaXMuZXhwci5zdWJzdHJpbmcoc3RhcnRJbmRleCwgdGhpcy5pbmRleCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHb2JibGVzIG9ubHkgaWRlbnRpZmllcnNcblx0ICogZS5nLjogYGZvb2AsIGBfdmFsdWVgLCBgJHgxYFxuXHQgKiBBbHNvLCB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGF0IGlkZW50aWZpZXIgaXMgYSBsaXRlcmFsOlxuXHQgKiAoZS5nLiBgdHJ1ZWAsIGBmYWxzZWAsIGBudWxsYCkgb3IgYHRoaXNgXG5cdCAqIEByZXR1cm5zIHtqc2VwLklkZW50aWZpZXJ9XG5cdCAqL1xuXHRnb2JibGVJZGVudGlmaWVyKCkge1xuXHRcdGxldCBjaCA9IHRoaXMuY29kZSwgc3RhcnQgPSB0aGlzLmluZGV4O1xuXG5cdFx0aWYgKEpzZXAuaXNJZGVudGlmaWVyU3RhcnQoY2gpKSB7XG5cdFx0XHR0aGlzLmluZGV4Kys7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy50aHJvd0Vycm9yKCdVbmV4cGVjdGVkICcgKyB0aGlzLmNoYXIpO1xuXHRcdH1cblxuXHRcdHdoaWxlICh0aGlzLmluZGV4IDwgdGhpcy5leHByLmxlbmd0aCkge1xuXHRcdFx0Y2ggPSB0aGlzLmNvZGU7XG5cblx0XHRcdGlmIChKc2VwLmlzSWRlbnRpZmllclBhcnQoY2gpKSB7XG5cdFx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEpzZXAuSURFTlRJRklFUixcblx0XHRcdG5hbWU6IHRoaXMuZXhwci5zbGljZShzdGFydCwgdGhpcy5pbmRleCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHb2JibGVzIGEgbGlzdCBvZiBhcmd1bWVudHMgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgZnVuY3Rpb24gY2FsbFxuXHQgKiBvciBhcnJheSBsaXRlcmFsLiBUaGlzIGZ1bmN0aW9uIGFsc28gYXNzdW1lcyB0aGF0IHRoZSBvcGVuaW5nIGNoYXJhY3RlclxuXHQgKiBgKGAgb3IgYFtgIGhhcyBhbHJlYWR5IGJlZW4gZ29iYmxlZCwgYW5kIGdvYmJsZXMgZXhwcmVzc2lvbnMgYW5kIGNvbW1hc1xuXHQgKiB1bnRpbCB0aGUgdGVybWluYXRvciBjaGFyYWN0ZXIgYClgIG9yIGBdYCBpcyBlbmNvdW50ZXJlZC5cblx0ICogZS5nLiBgZm9vKGJhciwgYmF6KWAsIGBteV9mdW5jKClgLCBvciBgW2JhciwgYmF6XWBcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRlcm1pbmF0aW9uXG5cdCAqIEByZXR1cm5zIHtqc2VwLkV4cHJlc3Npb25bXX1cblx0ICovXG5cdGdvYmJsZUFyZ3VtZW50cyh0ZXJtaW5hdGlvbikge1xuXHRcdGNvbnN0IGFyZ3MgPSBbXTtcblx0XHRsZXQgY2xvc2VkID0gZmFsc2U7XG5cdFx0bGV0IHNlcGFyYXRvcl9jb3VudCA9IDA7XG5cblx0XHR3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMuZXhwci5sZW5ndGgpIHtcblx0XHRcdHRoaXMuZ29iYmxlU3BhY2VzKCk7XG5cdFx0XHRsZXQgY2hfaSA9IHRoaXMuY29kZTtcblxuXHRcdFx0aWYgKGNoX2kgPT09IHRlcm1pbmF0aW9uKSB7IC8vIGRvbmUgcGFyc2luZ1xuXHRcdFx0XHRjbG9zZWQgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLmluZGV4Kys7XG5cblx0XHRcdFx0aWYgKHRlcm1pbmF0aW9uID09PSBKc2VwLkNQQVJFTl9DT0RFICYmIHNlcGFyYXRvcl9jb3VudCAmJiBzZXBhcmF0b3JfY291bnQgPj0gYXJncy5sZW5ndGgpe1xuXHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5leHBlY3RlZCB0b2tlbiAnICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0ZXJtaW5hdGlvbikpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChjaF9pID09PSBKc2VwLkNPTU1BX0NPREUpIHsgLy8gYmV0d2VlbiBleHByZXNzaW9uc1xuXHRcdFx0XHR0aGlzLmluZGV4Kys7XG5cdFx0XHRcdHNlcGFyYXRvcl9jb3VudCsrO1xuXG5cdFx0XHRcdGlmIChzZXBhcmF0b3JfY291bnQgIT09IGFyZ3MubGVuZ3RoKSB7IC8vIG1pc3NpbmcgYXJndW1lbnRcblx0XHRcdFx0XHRpZiAodGVybWluYXRpb24gPT09IEpzZXAuQ1BBUkVOX0NPREUpIHtcblx0XHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5leHBlY3RlZCB0b2tlbiAsJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2UgaWYgKHRlcm1pbmF0aW9uID09PSBKc2VwLkNCUkFDS19DT0RFKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBhcmcgPSBhcmdzLmxlbmd0aDsgYXJnIDwgc2VwYXJhdG9yX2NvdW50OyBhcmcrKykge1xuXHRcdFx0XHRcdFx0XHRhcmdzLnB1c2gobnVsbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChhcmdzLmxlbmd0aCAhPT0gc2VwYXJhdG9yX2NvdW50ICYmIHNlcGFyYXRvcl9jb3VudCAhPT0gMCkge1xuXHRcdFx0XHQvLyBOT1RFOiBgJiYgc2VwYXJhdG9yX2NvdW50ICE9PSAwYCBhbGxvd3MgZm9yIGVpdGhlciBhbGwgY29tbWFzLCBvciBhbGwgc3BhY2VzIGFzIGFyZ3VtZW50c1xuXHRcdFx0XHR0aGlzLnRocm93RXJyb3IoJ0V4cGVjdGVkIGNvbW1hJyk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y29uc3Qgbm9kZSA9IHRoaXMuZ29iYmxlRXhwcmVzc2lvbigpO1xuXG5cdFx0XHRcdGlmICghbm9kZSB8fCBub2RlLnR5cGUgPT09IEpzZXAuQ09NUE9VTkQpIHtcblx0XHRcdFx0XHR0aGlzLnRocm93RXJyb3IoJ0V4cGVjdGVkIGNvbW1hJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhcmdzLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFjbG9zZWQpIHtcblx0XHRcdHRoaXMudGhyb3dFcnJvcignRXhwZWN0ZWQgJyArIFN0cmluZy5mcm9tQ2hhckNvZGUodGVybWluYXRpb24pKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYXJncztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNwb25zaWJsZSBmb3IgcGFyc2luZyBhIGdyb3VwIG9mIHRoaW5ncyB3aXRoaW4gcGFyZW50aGVzZXMgYCgpYFxuXHQgKiB0aGF0IGhhdmUgbm8gaWRlbnRpZmllciBpbiBmcm9udCAoc28gbm90IGEgZnVuY3Rpb24gY2FsbClcblx0ICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgaXQgbmVlZHMgdG8gZ29iYmxlIHRoZSBvcGVuaW5nIHBhcmVudGhlc2lzXG5cdCAqIGFuZCB0aGVuIHRyaWVzIHRvIGdvYmJsZSBldmVyeXRoaW5nIHdpdGhpbiB0aGF0IHBhcmVudGhlc2lzLCBhc3N1bWluZ1xuXHQgKiB0aGF0IHRoZSBuZXh0IHRoaW5nIGl0IHNob3VsZCBzZWUgaXMgdGhlIGNsb3NlIHBhcmVudGhlc2lzLiBJZiBub3QsXG5cdCAqIHRoZW4gdGhlIGV4cHJlc3Npb24gcHJvYmFibHkgZG9lc24ndCBoYXZlIGEgYClgXG5cdCAqIEByZXR1cm5zIHtib29sZWFufGpzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdGdvYmJsZUdyb3VwKCkge1xuXHRcdHRoaXMuaW5kZXgrKztcblx0XHRsZXQgbm9kZXMgPSB0aGlzLmdvYmJsZUV4cHJlc3Npb25zKEpzZXAuQ1BBUkVOX0NPREUpO1xuXHRcdGlmICh0aGlzLmNvZGUgPT09IEpzZXAuQ1BBUkVOX0NPREUpIHtcblx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdGlmIChub2Rlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGVzWzBdO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoIW5vZGVzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0eXBlOiBKc2VwLlNFUVVFTkNFX0VYUCxcblx0XHRcdFx0XHRleHByZXNzaW9uczogbm9kZXMsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy50aHJvd0Vycm9yKCdVbmNsb3NlZCAoJyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIEFycmF5IGxpdGVyYWxzIGBbMSwgMiwgM11gXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGl0IG5lZWRzIHRvIGdvYmJsZSB0aGUgb3BlbmluZyBicmFja2V0XG5cdCAqIGFuZCB0aGVuIHRyaWVzIHRvIGdvYmJsZSB0aGUgZXhwcmVzc2lvbnMgYXMgYXJndW1lbnRzLlxuXHQgKiBAcmV0dXJucyB7anNlcC5BcnJheUV4cHJlc3Npb259XG5cdCAqL1xuXHRnb2JibGVBcnJheSgpIHtcblx0XHR0aGlzLmluZGV4Kys7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogSnNlcC5BUlJBWV9FWFAsXG5cdFx0XHRlbGVtZW50czogdGhpcy5nb2JibGVBcmd1bWVudHMoSnNlcC5DQlJBQ0tfQ09ERSlcblx0XHR9O1xuXHR9XG59XG5cbi8vIFN0YXRpYyBmaWVsZHM6XG5jb25zdCBob29rcyA9IG5ldyBIb29rcygpO1xuT2JqZWN0LmFzc2lnbihKc2VwLCB7XG5cdGhvb2tzLFxuXHRwbHVnaW5zOiBuZXcgUGx1Z2lucyhKc2VwKSxcblxuXHQvLyBOb2RlIFR5cGVzXG5cdC8vIC0tLS0tLS0tLS1cblx0Ly8gVGhpcyBpcyB0aGUgZnVsbCBzZXQgb2YgdHlwZXMgdGhhdCBhbnkgSlNFUCBub2RlIGNhbiBiZS5cblx0Ly8gU3RvcmUgdGhlbSBoZXJlIHRvIHNhdmUgc3BhY2Ugd2hlbiBtaW5pZmllZFxuXHRDT01QT1VORDogICAgICAgICdDb21wb3VuZCcsXG5cdFNFUVVFTkNFX0VYUDogICAgJ1NlcXVlbmNlRXhwcmVzc2lvbicsXG5cdElERU5USUZJRVI6ICAgICAgJ0lkZW50aWZpZXInLFxuXHRNRU1CRVJfRVhQOiAgICAgICdNZW1iZXJFeHByZXNzaW9uJyxcblx0TElURVJBTDogICAgICAgICAnTGl0ZXJhbCcsXG5cdFRISVNfRVhQOiAgICAgICAgJ1RoaXNFeHByZXNzaW9uJyxcblx0Q0FMTF9FWFA6ICAgICAgICAnQ2FsbEV4cHJlc3Npb24nLFxuXHRVTkFSWV9FWFA6ICAgICAgICdVbmFyeUV4cHJlc3Npb24nLFxuXHRCSU5BUllfRVhQOiAgICAgICdCaW5hcnlFeHByZXNzaW9uJyxcblx0QVJSQVlfRVhQOiAgICAgICAnQXJyYXlFeHByZXNzaW9uJyxcblxuXHRUQUJfQ09ERTogICAgOSxcblx0TEZfQ09ERTogICAgIDEwLFxuXHRDUl9DT0RFOiAgICAgMTMsXG5cdFNQQUNFX0NPREU6ICAzMixcblx0UEVSSU9EX0NPREU6IDQ2LCAvLyAnLidcblx0Q09NTUFfQ09ERTogIDQ0LCAvLyAnLCdcblx0U1FVT1RFX0NPREU6IDM5LCAvLyBzaW5nbGUgcXVvdGVcblx0RFFVT1RFX0NPREU6IDM0LCAvLyBkb3VibGUgcXVvdGVzXG5cdE9QQVJFTl9DT0RFOiA0MCwgLy8gKFxuXHRDUEFSRU5fQ09ERTogNDEsIC8vIClcblx0T0JSQUNLX0NPREU6IDkxLCAvLyBbXG5cdENCUkFDS19DT0RFOiA5MywgLy8gXVxuXHRRVU1BUktfQ09ERTogNjMsIC8vID9cblx0U0VNQ09MX0NPREU6IDU5LCAvLyA7XG5cdENPTE9OX0NPREU6ICA1OCwgLy8gOlxuXG5cblx0Ly8gT3BlcmF0aW9uc1xuXHQvLyAtLS0tLS0tLS0tXG5cdC8vIFVzZSBhIHF1aWNrbHktYWNjZXNzaWJsZSBtYXAgdG8gc3RvcmUgYWxsIG9mIHRoZSB1bmFyeSBvcGVyYXRvcnNcblx0Ly8gVmFsdWVzIGFyZSBzZXQgdG8gYDFgIChpdCByZWFsbHkgZG9lc24ndCBtYXR0ZXIpXG5cdHVuYXJ5X29wczoge1xuXHRcdCctJzogMSxcblx0XHQnISc6IDEsXG5cdFx0J34nOiAxLFxuXHRcdCcrJzogMVxuXHR9LFxuXG5cdC8vIEFsc28gdXNlIGEgbWFwIGZvciB0aGUgYmluYXJ5IG9wZXJhdGlvbnMgYnV0IHNldCB0aGVpciB2YWx1ZXMgdG8gdGhlaXJcblx0Ly8gYmluYXJ5IHByZWNlZGVuY2UgZm9yIHF1aWNrIHJlZmVyZW5jZSAoaGlnaGVyIG51bWJlciA9IGhpZ2hlciBwcmVjZWRlbmNlKVxuXHQvLyBzZWUgW09yZGVyIG9mIG9wZXJhdGlvbnNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy9PcGVyYXRvcl9QcmVjZWRlbmNlKVxuXHRiaW5hcnlfb3BzOiB7XG5cdFx0J3x8JzogMSwgJyYmJzogMiwgJ3wnOiAzLCAnXic6IDQsICcmJzogNSxcblx0XHQnPT0nOiA2LCAnIT0nOiA2LCAnPT09JzogNiwgJyE9PSc6IDYsXG5cdFx0JzwnOiA3LCAnPic6IDcsICc8PSc6IDcsICc+PSc6IDcsXG5cdFx0Jzw8JzogOCwgJz4+JzogOCwgJz4+Pic6IDgsXG5cdFx0JysnOiA5LCAnLSc6IDksXG5cdFx0JyonOiAxMCwgJy8nOiAxMCwgJyUnOiAxMFxuXHR9LFxuXG5cdC8vIHNldHMgc3BlY2lmaWMgYmluYXJ5X29wcyBhcyByaWdodC1hc3NvY2lhdGl2ZVxuXHRyaWdodF9hc3NvY2lhdGl2ZTogbmV3IFNldCgpLFxuXG5cdC8vIEFkZGl0aW9uYWwgdmFsaWQgaWRlbnRpZmllciBjaGFycywgYXBhcnQgZnJvbSBhLXosIEEtWiBhbmQgMC05IChleGNlcHQgb24gdGhlIHN0YXJ0aW5nIGNoYXIpXG5cdGFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFyczogbmV3IFNldChbJyQnLCAnXyddKSxcblxuXHQvLyBMaXRlcmFsc1xuXHQvLyAtLS0tLS0tLS0tXG5cdC8vIFN0b3JlIHRoZSB2YWx1ZXMgdG8gcmV0dXJuIGZvciB0aGUgdmFyaW91cyBsaXRlcmFscyB3ZSBtYXkgZW5jb3VudGVyXG5cdGxpdGVyYWxzOiB7XG5cdFx0J3RydWUnOiB0cnVlLFxuXHRcdCdmYWxzZSc6IGZhbHNlLFxuXHRcdCdudWxsJzogbnVsbFxuXHR9LFxuXG5cdC8vIEV4Y2VwdCBmb3IgYHRoaXNgLCB3aGljaCBpcyBzcGVjaWFsLiBUaGlzIGNvdWxkIGJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIGxpa2UgYCdzZWxmJ2AgYXMgd2VsbFxuXHR0aGlzX3N0cjogJ3RoaXMnLFxufSk7XG5Kc2VwLm1heF91bm9wX2xlbiA9IEpzZXAuZ2V0TWF4S2V5TGVuKEpzZXAudW5hcnlfb3BzKTtcbkpzZXAubWF4X2Jpbm9wX2xlbiA9IEpzZXAuZ2V0TWF4S2V5TGVuKEpzZXAuYmluYXJ5X29wcyk7XG5cbi8vIEJhY2t3YXJkIENvbXBhdGliaWxpdHk6XG5jb25zdCBqc2VwID0gZXhwciA9PiAobmV3IEpzZXAoZXhwcikpLnBhcnNlKCk7XG5jb25zdCBzdGF0aWNNZXRob2RzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoSnNlcCk7XG5zdGF0aWNNZXRob2RzXG5cdC5mb3JFYWNoKChtKSA9PiB7XG5cdFx0aWYgKGpzZXBbbV0gPT09IHVuZGVmaW5lZCAmJiBtICE9PSAncHJvdG90eXBlJykge1xuXHRcdFx0anNlcFttXSA9IEpzZXBbbV07XG5cdFx0fVxuXHR9KTtcbmpzZXAuSnNlcCA9IEpzZXA7IC8vIGFsbG93cyBmb3IgY29uc3QgeyBKc2VwIH0gPSByZXF1aXJlKCdqc2VwJyk7XG5cbmNvbnN0IENPTkRJVElPTkFMX0VYUCA9ICdDb25kaXRpb25hbEV4cHJlc3Npb24nO1xuXG52YXIgdGVybmFyeSA9IHtcblx0bmFtZTogJ3Rlcm5hcnknLFxuXG5cdGluaXQoanNlcCkge1xuXHRcdC8vIFRlcm5hcnkgZXhwcmVzc2lvbjogdGVzdCA/IGNvbnNlcXVlbnQgOiBhbHRlcm5hdGVcblx0XHRqc2VwLmhvb2tzLmFkZCgnYWZ0ZXItZXhwcmVzc2lvbicsIGZ1bmN0aW9uIGdvYmJsZVRlcm5hcnkoZW52KSB7XG5cdFx0XHRpZiAoZW52Lm5vZGUgJiYgdGhpcy5jb2RlID09PSBqc2VwLlFVTUFSS19DT0RFKSB7XG5cdFx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdFx0Y29uc3QgdGVzdCA9IGVudi5ub2RlO1xuXHRcdFx0XHRjb25zdCBjb25zZXF1ZW50ID0gdGhpcy5nb2JibGVFeHByZXNzaW9uKCk7XG5cblx0XHRcdFx0aWYgKCFjb25zZXF1ZW50KSB7XG5cdFx0XHRcdFx0dGhpcy50aHJvd0Vycm9yKCdFeHBlY3RlZCBleHByZXNzaW9uJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmdvYmJsZVNwYWNlcygpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmNvZGUgPT09IGpzZXAuQ09MT05fQ09ERSkge1xuXHRcdFx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdFx0XHRjb25zdCBhbHRlcm5hdGUgPSB0aGlzLmdvYmJsZUV4cHJlc3Npb24oKTtcblxuXHRcdFx0XHRcdGlmICghYWx0ZXJuYXRlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRocm93RXJyb3IoJ0V4cGVjdGVkIGV4cHJlc3Npb24nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZW52Lm5vZGUgPSB7XG5cdFx0XHRcdFx0XHR0eXBlOiBDT05ESVRJT05BTF9FWFAsXG5cdFx0XHRcdFx0XHR0ZXN0LFxuXHRcdFx0XHRcdFx0Y29uc2VxdWVudCxcblx0XHRcdFx0XHRcdGFsdGVybmF0ZSxcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0Ly8gY2hlY2sgZm9yIG9wZXJhdG9ycyBvZiBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0ZXJuYXJ5IChpLmUuIGFzc2lnbm1lbnQpXG5cdFx0XHRcdFx0Ly8ganNlcCBzZXRzIHx8IGF0IDEsIGFuZCBhc3NpZ25tZW50IGF0IDAuOSwgYW5kIGNvbmRpdGlvbmFsIHNob3VsZCBiZSBiZXR3ZWVuIHRoZW1cblx0XHRcdFx0XHRpZiAodGVzdC5vcGVyYXRvciAmJiBqc2VwLmJpbmFyeV9vcHNbdGVzdC5vcGVyYXRvcl0gPD0gMC45KSB7XG5cdFx0XHRcdFx0XHRsZXQgbmV3VGVzdCA9IHRlc3Q7XG5cdFx0XHRcdFx0XHR3aGlsZSAobmV3VGVzdC5yaWdodC5vcGVyYXRvciAmJiBqc2VwLmJpbmFyeV9vcHNbbmV3VGVzdC5yaWdodC5vcGVyYXRvcl0gPD0gMC45KSB7XG5cdFx0XHRcdFx0XHRcdG5ld1Rlc3QgPSBuZXdUZXN0LnJpZ2h0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZW52Lm5vZGUudGVzdCA9IG5ld1Rlc3QucmlnaHQ7XG5cdFx0XHRcdFx0XHRuZXdUZXN0LnJpZ2h0ID0gZW52Lm5vZGU7XG5cdFx0XHRcdFx0XHRlbnYubm9kZSA9IHRlc3Q7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignRXhwZWN0ZWQgOicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG59O1xuXG4vLyBBZGQgZGVmYXVsdCBwbHVnaW5zOlxuXG5qc2VwLnBsdWdpbnMucmVnaXN0ZXIodGVybmFyeSk7XG5cbmV4cG9ydCB7IEpzZXAsIGpzZXAgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgUmVuZGVySW5mbywgRGF0YXNldCB9IGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgaXNNb21lbnQsIE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCBqc2VwIGZyb20gXCJqc2VwXCI7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSBcInNwcmludGYtanNcIjtcblxuLy8gRnVuY3Rpb24gYWNjZXB0IGRhdGFzZXRJZCBhcyBmaXJzdCBhcmd1bWVudFxudHlwZSBGbkRhdGFzZXRUb1ZhbHVlID0gKFxuICAgIGRhdGFzZXQ6IERhdGFzZXQsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKSA9PiBudW1iZXIgfCBNb21lbnQgfCBzdHJpbmc7XG50eXBlIEZuRGF0YXNldFRvRGF0YXNldCA9IChcbiAgICBkYXRhc2V0OiBEYXRhc2V0LFxuICAgIGFyZ3M6IEFycmF5PG51bWJlciB8IERhdGFzZXQ+LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbikgPT4gRGF0YXNldCB8IHN0cmluZztcbnR5cGUgRm5VbmlyeU9wID0gKFxuICAgIHU6IG51bWJlciB8IE1vbWVudCB8IERhdGFzZXRcbikgPT4gbnVtYmVyIHwgTW9tZW50IHwgRGF0YXNldCB8IHN0cmluZztcbnR5cGUgRm5CaW5hcnlPcCA9IChcbiAgICBsOiBudW1iZXIgfCBNb21lbnQgfCBEYXRhc2V0LFxuICAgIHI6IG51bWJlciB8IE1vbWVudCB8IERhdGFzZXRcbikgPT4gbnVtYmVyIHwgTW9tZW50IHwgRGF0YXNldCB8IHN0cmluZztcblxuaW50ZXJmYWNlIEZuTWFwRGF0YXNldFRvVmFsdWUge1xuICAgIFtrZXk6IHN0cmluZ106IEZuRGF0YXNldFRvVmFsdWU7XG59XG5cbmludGVyZmFjZSBGbk1hcERhdGFzZXRUb0RhdGFzZXQge1xuICAgIFtrZXk6IHN0cmluZ106IEZuRGF0YXNldFRvRGF0YXNldDtcbn1cblxuaW50ZXJmYWNlIEZuTWFwQmluYXJ5T3Age1xuICAgIFtrZXk6IHN0cmluZ106IEZuQmluYXJ5T3A7XG59XG5cbmludGVyZmFjZSBGbk1hcFVuaXJ5T3Age1xuICAgIFtrZXk6IHN0cmluZ106IEZuVW5pcnlPcDtcbn1cblxuZnVuY3Rpb24gY2hlY2tEaXZpc29yKGRpdmlzb3I6IGFueSkge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY2hlY2tpbmcgZGl2aW9yXCIpO1xuICAgIGlmICh0eXBlb2YgZGl2aXNvciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAoZGl2aXNvciA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoZGl2aXNvciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGl2aXNvci5nZXRWYWx1ZXMoKS5zb21lKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHYgPT09IDA7XG4gICAgICAgICAgICB9KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCaW5hcnlPcGVyYW50VHlwZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIGxlZnQgPT09IFwic3RyaW5nXCIpIHJldHVybiBsZWZ0O1xuICAgIGlmICh0eXBlb2YgcmlnaHQgPT09IFwic3RyaW5nXCIpIHJldHVybiByaWdodDtcbiAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBsZWZ0ICE9PSBcIm51bWJlclwiICYmXG4gICAgICAgICF3aW5kb3cubW9tZW50LmlzTW9tZW50KGxlZnQpICYmXG4gICAgICAgICEobGVmdCBpbnN0YW5jZW9mIERhdGFzZXQpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBcIkVycm9yOiBpbnZhbGlkIG9wZXJhbnQgdHlwZVwiO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgIHR5cGVvZiByaWdodCAhPT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAhd2luZG93Lm1vbWVudC5pc01vbWVudChyaWdodCkgJiZcbiAgICAgICAgIShyaWdodCBpbnN0YW5jZW9mIERhdGFzZXQpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBcIkVycm9yOiBpbnZhbGlkZSBvcGVyYW50IHR5cGVcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG59XG5cbmNvbnN0IGZuTWFwRGF0YXNldFRvVmFsdWU6IEZuTWFwRGF0YXNldFRvVmFsdWUgPSB7XG4gICAgLy8gbWluIHZhbHVlIG9mIGEgZGF0YXNldFxuICAgIG1pbjogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICByZXR1cm4gZDMubWluKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xuICAgIH0sXG4gICAgLy8gdGhlIGxhdGVzdCBkYXRlIHdpdGggbWluIHZhbHVlXG4gICAgbWluRGF0ZTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxuICAgICAgICBsZXQgbWluID0gZDMubWluKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKG1pbikpIHtcbiAgICAgICAgICAgIGxldCBhcnJheURhdGFzZXQgPSBBcnJheS5mcm9tKGRhdGFzZXQpO1xuICAgICAgICAgICAgZm9yIChsZXQgZGF0YVBvaW50IG9mIGFycmF5RGF0YXNldC5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVBvaW50LnZhbHVlICE9PSBudWxsICYmIGRhdGFQb2ludC52YWx1ZSA9PT0gbWluKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhUG9pbnQuZGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IG1pbiBub3QgZm91bmRcIjtcbiAgICB9LFxuICAgIC8vIG1heCB2YWx1ZSBvZiBhIGRhdGFzZXRcbiAgICBtYXg6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgcmV0dXJuIGQzLm1heChkYXRhc2V0LmdldFZhbHVlcygpKTtcbiAgICB9LFxuICAgIC8vIHRoZSBsYXRlc3QgZGF0ZSB3aXRoIG1heCB2YWx1ZVxuICAgIG1heERhdGU6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcbiAgICAgICAgbGV0IG1heCA9IGQzLm1heChkYXRhc2V0LmdldFZhbHVlcygpKTtcbiAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihtYXgpKSB7XG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGRhdGFQb2ludCBvZiBhcnJheURhdGFzZXQucmV2ZXJzZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFQb2ludC52YWx1ZSAhPT0gbnVsbCAmJiBkYXRhUG9pbnQudmFsdWUgPT09IG1heCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVBvaW50LmRhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIkVycm9yOiBtYXggbm90IGZvdW5kXCI7XG4gICAgfSxcbiAgICAvLyBzdGFydCBkYXRlIG9mIGEgZGF0YXNldFxuICAgIC8vIGlmIGRhdGFzZXRJZCBub3QgZm91bmQsIHJldHVybiBvdmVyYWxsIHN0YXJ0RGF0ZVxuICAgIHN0YXJ0RGF0ZTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9IGRhdGFzZXQuZ2V0U3RhcnREYXRlKCk7XG4gICAgICAgICAgICBpZiAoc3RhcnREYXRlICYmIHN0YXJ0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnREYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXJJbmZvLnN0YXJ0RGF0ZTtcbiAgICB9LFxuICAgIC8vIGVuZCBkYXRlIG9mIGEgZGF0YXNldFxuICAgIC8vIGlmIGRhdGFzZXRJZCBub3QgZm91bmQsIHJldHVybiBvdmVyYWxsIGVuZERhdGVcbiAgICBlbmREYXRlOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gTW9tZW50XG4gICAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgICAgICBsZXQgZW5kRGF0ZSA9IGRhdGFzZXQuZ2V0RW5kRGF0ZSgpO1xuICAgICAgICAgICAgaWYgKGVuZERhdGUgJiYgZW5kRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5kRGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVySW5mby5lbmREYXRlO1xuICAgIH0sXG4gICAgLy8gc3VtIG9mIGFsbCB2YWx1ZXMgaW4gYSBkYXRhc2V0XG4gICAgc3VtOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIHJldHVybiBkMy5zdW0oZGF0YXNldC5nZXRWYWx1ZXMoKSk7XG4gICAgfSxcbiAgICBjb3VudDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGRlcHJlY2F0ZWQgZnVuY3Rpb24gJ2NvdW50J1wiO1xuICAgIH0sXG4gICAgLy8gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIGEgdGFyZ2V0IGluIGEgZGF0YXNldFxuICAgIG51bVRhcmdldHM6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgcmV0dXJuIGRhdGFzZXQuZ2V0TnVtVGFyZ2V0cygpO1xuICAgIH0sXG4gICAgZGF5czogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGRlcHJlY2F0ZWQgZnVuY3Rpb24gJ2RheXMnXCI7XG4gICAgfSxcbiAgICBudW1EYXlzOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIHJldHVybiBkYXRhc2V0LmdldExlbmd0aCgpO1xuICAgIH0sXG4gICAgbnVtRGF5c0hhdmluZ0RhdGE6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgcmV0dXJuIGRhdGFzZXQuZ2V0TGVuZ3RoTm90TnVsbCgpO1xuICAgIH0sXG4gICAgbWF4U3RyZWFrOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIGxldCBzdHJlYWsgPSAwO1xuICAgICAgICBsZXQgbWF4U3RyZWFrID0gMDtcbiAgICAgICAgZm9yIChsZXQgZGF0YVBvaW50IG9mIGRhdGFzZXQpIHtcbiAgICAgICAgICAgIGlmIChkYXRhUG9pbnQudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdHJlYWsrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyZWFrID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJlYWsgPj0gbWF4U3RyZWFrKSB7XG4gICAgICAgICAgICAgICAgbWF4U3RyZWFrID0gc3RyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhTdHJlYWs7XG4gICAgfSxcbiAgICBtYXhTdHJlYWtTdGFydDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxuICAgICAgICBsZXQgc3RyZWFrID0gMDtcbiAgICAgICAgbGV0IG1heFN0cmVhayA9IDA7XG4gICAgICAgIGxldCBzdHJlYWtTdGFydDogTW9tZW50ID0gbnVsbDtcbiAgICAgICAgbGV0IG1heFN0cmVha1N0YXJ0OiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgZm9yIChsZXQgZGF0YVBvaW50IG9mIGRhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVBvaW50LnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYWsgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVha1N0YXJ0ID0gZGF0YVBvaW50LmRhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3RyZWFrKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFrID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0cmVhayA+PSBtYXhTdHJlYWspIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4U3RyZWFrID0gc3RyZWFrO1xuICAgICAgICAgICAgICAgICAgICBtYXhTdHJlYWtTdGFydCA9IHN0cmVha1N0YXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4U3RyZWFrU3RhcnQ7XG4gICAgfSxcbiAgICBtYXhTdHJlYWtFbmQ6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcbiAgICAgICAgbGV0IHN0cmVhayA9IDA7XG4gICAgICAgIGxldCBtYXhTdHJlYWsgPSAwO1xuICAgICAgICBsZXQgc3RyZWFrRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBsZXQgbWF4U3RyZWFrRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xuICAgICAgICAgICAgICAgIGxldCBuZXh0UG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0UG9pbnQgPSBhcnJheURhdGFzZXRbaW5kICsgMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwb2ludC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYWsrKztcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRQb2ludD8udmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVha0VuZCA9IHBvaW50LmRhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYWsgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RyZWFrID49IG1heFN0cmVhaykge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzdHJlYWspO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXhTdHJlYWspO1xuICAgICAgICAgICAgICAgICAgICBtYXhTdHJlYWsgPSBzdHJlYWs7XG4gICAgICAgICAgICAgICAgICAgIG1heFN0cmVha0VuZCA9IHN0cmVha0VuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heFN0cmVha0VuZDtcbiAgICB9LFxuICAgIG1heEJyZWFrczogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICBsZXQgYnJlYWtzID0gMDtcbiAgICAgICAgbGV0IG1heEJyZWFrcyA9IDA7XG4gICAgICAgIGZvciAobGV0IGRhdGFQb2ludCBvZiBkYXRhc2V0KSB7XG4gICAgICAgICAgICBpZiAoZGF0YVBvaW50LnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYnJlYWtzKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrcyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnJlYWtzID4gbWF4QnJlYWtzKSB7XG4gICAgICAgICAgICAgICAgbWF4QnJlYWtzID0gYnJlYWtzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhCcmVha3M7XG4gICAgfSxcbiAgICBtYXhCcmVha3NTdGFydDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxuICAgICAgICBsZXQgYnJlYWtzID0gMDtcbiAgICAgICAgbGV0IG1heEJyZWFrcyA9IDA7XG4gICAgICAgIGxldCBicmVha3NTdGFydDogTW9tZW50ID0gbnVsbDtcbiAgICAgICAgbGV0IG1heEJyZWFrc1N0YXJ0OiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgZm9yIChsZXQgZGF0YVBvaW50IG9mIGRhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVBvaW50LnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChicmVha3MgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrc1N0YXJ0ID0gZGF0YVBvaW50LmRhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWtzKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGJyZWFrcyA+PSBtYXhCcmVha3MpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4QnJlYWtzID0gYnJlYWtzO1xuICAgICAgICAgICAgICAgICAgICBtYXhCcmVha3NTdGFydCA9IGJyZWFrc1N0YXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4QnJlYWtzU3RhcnQ7XG4gICAgfSxcbiAgICBtYXhCcmVha3NFbmQ6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcbiAgICAgICAgbGV0IGJyZWFrcyA9IDA7XG4gICAgICAgIGxldCBtYXhCcmVha3MgPSAwO1xuICAgICAgICBsZXQgYnJlYWtzRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBsZXQgbWF4QnJlYWtzRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xuICAgICAgICAgICAgICAgIGxldCBuZXh0UG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0UG9pbnQgPSBhcnJheURhdGFzZXRbaW5kICsgMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwb2ludC52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBicmVha3MrKztcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRQb2ludD8udmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrc0VuZCA9IHBvaW50LmRhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVha3MgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYnJlYWtzID49IG1heEJyZWFrcykge1xuICAgICAgICAgICAgICAgICAgICBtYXhCcmVha3MgPSBicmVha3M7XG4gICAgICAgICAgICAgICAgICAgIG1heEJyZWFrc0VuZCA9IGJyZWFrc0VuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heEJyZWFrc0VuZDtcbiAgICB9LFxuICAgIGxhc3RTdHJlYWs6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIHJldHVybiBcIkVycm9yOiBkZXByZWNhdGVkIGZ1bmN0aW9uICdsYXN0U3RyZWFrJ1wiO1xuICAgIH0sXG4gICAgY3VycmVudFN0cmVhazogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICBsZXQgY3VycmVudFN0cmVhayA9IDA7XG4gICAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IGFycmF5RGF0YXNldC5sZW5ndGggLSAxOyBpbmQgPj0gMDsgaW5kLS0pIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBhcnJheURhdGFzZXRbaW5kXTtcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0cmVhaysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudFN0cmVhaztcbiAgICB9LFxuICAgIGN1cnJlbnRTdHJlYWtTdGFydDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxuICAgICAgICBsZXQgY3VycmVudFN0cmVhayA9IDA7XG4gICAgICAgIGxldCBjdXJyZW50U3RyZWFrU3RhcnQ6IE1vbWVudCA9IG51bGw7XG4gICAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IGFycmF5RGF0YXNldC5sZW5ndGggLSAxOyBpbmQgPj0gMDsgaW5kLS0pIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBhcnJheURhdGFzZXRbaW5kXTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgYXJyYXlEYXRhc2V0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0cmVha1N0YXJ0ID0gYXJyYXlEYXRhc2V0W2luZCArIDFdLmRhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwb2ludC52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFrKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRTdHJlYWtTdGFydCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGFic2Vuc2VcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudFN0cmVha1N0YXJ0O1xuICAgIH0sXG4gICAgY3VycmVudFN0cmVha0VuZDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxuICAgICAgICBsZXQgY3VycmVudFN0cmVhayA9IDA7XG4gICAgICAgIGxldCBjdXJyZW50U3RyZWFrRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSBhcnJheURhdGFzZXQubGVuZ3RoIC0gMTsgaW5kID49IDA7IGluZC0tKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBvaW50ID0gYXJyYXlEYXRhc2V0W2luZF07XG4gICAgICAgICAgICAgICAgaWYgKHBvaW50LnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3RyZWFrID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFrRW5kID0gcG9pbnQuZGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFrKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRTdHJlYWtFbmQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBhYnNlbnNlXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTdHJlYWtFbmQ7XG4gICAgfSxcbiAgICBjdXJyZW50QnJlYWtzOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIGxldCBjdXJyZW50QnJlYWtzID0gMDtcbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcbiAgICAgICAgICAgIGxldCBhcnJheURhdGFzZXQgPSBBcnJheS5mcm9tKGRhdGFzZXQpO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gYXJyYXlEYXRhc2V0Lmxlbmd0aCAtIDE7IGluZCA+PSAwOyBpbmQtLSkge1xuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xuICAgICAgICAgICAgICAgIGlmIChwb2ludC52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50QnJlYWtzKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50QnJlYWtzO1xuICAgIH0sXG4gICAgY3VycmVudEJyZWFrc1N0YXJ0OiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gTW9tZW50XG4gICAgICAgIGxldCBjdXJyZW50QnJlYWtzID0gMDtcbiAgICAgICAgbGV0IGN1cnJlbnRCcmVha3NTdGFydDogTW9tZW50ID0gbnVsbDtcbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcbiAgICAgICAgICAgIGxldCBhcnJheURhdGFzZXQgPSBBcnJheS5mcm9tKGRhdGFzZXQpO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gYXJyYXlEYXRhc2V0Lmxlbmd0aCAtIDE7IGluZCA+PSAwOyBpbmQtLSkge1xuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50QnJlYWtzU3RhcnQgPSBhcnJheURhdGFzZXRbaW5kICsgMV0uZGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBvaW50LnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcmVha3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudEJyZWFrc1N0YXJ0ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogYWJzZW5zZVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50QnJlYWtzU3RhcnQ7XG4gICAgfSxcbiAgICBjdXJyZW50QnJlYWtzRW5kOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gTW9tZW50XG4gICAgICAgIGxldCBjdXJyZW50QnJlYWtzID0gMDtcbiAgICAgICAgbGV0IGN1cnJlbnRCcmVha3NFbmQ6IE1vbWVudCA9IG51bGw7XG4gICAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IGFycmF5RGF0YXNldC5sZW5ndGggLSAxOyBpbmQgPj0gMDsgaW5kLS0pIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBhcnJheURhdGFzZXRbaW5kXTtcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCcmVha3MgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcmVha3NFbmQgPSBwb2ludC5kYXRlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcmVha3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudEJyZWFrc0VuZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGFic2Vuc2VcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudEJyZWFrc0VuZDtcbiAgICB9LFxuICAgIGF2ZXJhZ2U6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgbGV0IGNvdW50Tm90TnVsbCA9IGRhdGFzZXQuZ2V0TGVuZ3RoTm90TnVsbCgpO1xuICAgICAgICBpZiAoIWNoZWNrRGl2aXNvcihjb3VudE5vdE51bGwpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogZGl2aWRlIGJ5IHplcm8gaW4gZXhwcmVzc2lvblwiO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdW0gPSBkMy5zdW0oZGF0YXNldC5nZXRWYWx1ZXMoKSk7XG4gICAgICAgIHJldHVybiBzdW0gLyBjb3VudE5vdE51bGw7XG4gICAgfSxcbiAgICBtZWRpYW46IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgcmV0dXJuIGQzLm1lZGlhbihkYXRhc2V0LmdldFZhbHVlcygpKTtcbiAgICB9LFxuICAgIHZhcmlhbmNlOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIHJldHVybiBkMy52YXJpYW5jZShkYXRhc2V0LmdldFZhbHVlcygpKTtcbiAgICB9LFxufTtcblxuY29uc3QgZm5NYXBVbmlyeU9wOiBGbk1hcFVuaXJ5T3AgPSB7XG4gICAgXCItXCI6IGZ1bmN0aW9uICh1KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIC0xICogdTtcbiAgICAgICAgfSBlbHNlIGlmICh1IGluc3RhbmNlb2YgRGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSB1LmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IC0xICogdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICctJ1wiO1xuICAgIH0sXG4gICAgXCIrXCI6IGZ1bmN0aW9uICh1KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgIH0gZWxzZSBpZiAodSBpbnN0YW5jZW9mIERhdGFzZXQpIHtcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gdS5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IHVua25vd24gb3BlcmF0aW9uIGZvciAnKydcIjtcbiAgICB9LFxufTtcblxuY29uc3QgZm5NYXBCaW5hcnlPcDogRm5NYXBCaW5hcnlPcCA9IHtcbiAgICBcIitcIjogZnVuY3Rpb24gKGwsIHIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHR5cGVvZiByID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgICAgICByZXR1cm4gbCArIHI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGwgPT09IFwibnVtYmVyXCIgJiYgciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IHIuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbCArIHZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSArIHI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKGwgaW5zdGFuY2VvZiBEYXRhc2V0ICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBsLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlICsgci5nZXRWYWx1ZXMoKVtpbmRleF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIkVycm9yOiB1bmtub3duIG9wZXJhdGlvbiBmb3IgJysnXCI7XG4gICAgfSxcbiAgICBcIi1cIjogZnVuY3Rpb24gKGwsIHIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHR5cGVvZiByID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgICAgICByZXR1cm4gbCAtIHI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGwgPT09IFwibnVtYmVyXCIgJiYgciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IHIuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbCAtIHZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAtIHI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKGwgaW5zdGFuY2VvZiBEYXRhc2V0ICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBsLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlIC0gci5nZXRWYWx1ZXMoKVtpbmRleF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIkVycm9yOiB1bmtub3duIG9wZXJhdGlvbiBmb3IgJy0nXCI7XG4gICAgfSxcbiAgICBcIipcIjogZnVuY3Rpb24gKGwsIHIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHR5cGVvZiByID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgICAgICByZXR1cm4gbCAqIHI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGwgPT09IFwibnVtYmVyXCIgJiYgciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IHIuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbCAqIHZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAqIHI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKGwgaW5zdGFuY2VvZiBEYXRhc2V0ICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBsLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlICogci5nZXRWYWx1ZXMoKVtpbmRleF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIkVycm9yOiB1bmtub3duIG9wZXJhdGlvbiBmb3IgJyonXCI7XG4gICAgfSxcbiAgICBcIi9cIjogZnVuY3Rpb24gKGwsIHIpIHtcbiAgICAgICAgaWYgKCFjaGVja0Rpdmlzb3IocikpIHtcbiAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBkaXZpZGUgYnkgemVybyBpbiBleHByZXNzaW9uXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHR5cGVvZiByID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgICAgICByZXR1cm4gbCAvIHI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGwgPT09IFwibnVtYmVyXCIgJiYgciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IHIuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbCAvIHZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAvIHI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKGwgaW5zdGFuY2VvZiBEYXRhc2V0ICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBsLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlIC8gci5nZXRWYWx1ZXMoKVtpbmRleF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIkVycm9yOiB1bmtub3duIG9wZXJhdGlvbiBmb3IgJy8nXCI7XG4gICAgfSxcbiAgICBcIiVcIjogZnVuY3Rpb24gKGwsIHIpIHtcbiAgICAgICAgaWYgKCFjaGVja0Rpdmlzb3IocikpIHtcbiAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBkaXZpZGUgYnkgemVybyBpbiBleHByZXNzaW9uXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHR5cGVvZiByID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgICAgICByZXR1cm4gbCAlIHI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGwgPT09IFwibnVtYmVyXCIgJiYgciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IHIuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbCAlIHZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAlIHI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKGwgaW5zdGFuY2VvZiBEYXRhc2V0ICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBsLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlICUgci5nZXRWYWx1ZXMoKVtpbmRleF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIkVycm9yOiB1bmtub3duIG9wZXJhdGlvbiBmb3IgJyUnXCI7XG4gICAgfSxcbn07XG5cbmNvbnN0IGZuTWFwRGF0YXNldFRvRGF0YXNldDogRm5NYXBEYXRhc2V0VG9EYXRhc2V0ID0ge1xuICAgIC8vIG1pbiB2YWx1ZSBvZiBhIGRhdGFzZXRcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uIChkYXRhc2V0LCBhcmdzLCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwibm9ybWFsaXplXCIpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcbiAgICAgICAgbGV0IHlNaW4gPSBkYXRhc2V0LmdldFlNaW4oKTtcbiAgICAgICAgbGV0IHlNYXggPSBkYXRhc2V0LmdldFlNYXgoKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHlNaW4veU1heDogJHt5TWlufS8ke3lNYXh9YCk7XG4gICAgICAgIGlmICh5TWluICE9PSBudWxsICYmIHlNYXggIT09IG51bGwgJiYgeU1heCA+IHlNaW4pIHtcbiAgICAgICAgICAgIGxldCBub3JtYWxpemVkID0gZGF0YXNldC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgbm9ybWFsaXplZC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gKHZhbHVlIC0geU1pbikgLyAoeU1heCAtIHlNaW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBub3JtYWxpemVkLnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJFcnJvcjogaW52YWxpZCBkYXRhIHJhbmdlIGZvciBmdW5jdGlvbiAnbm9ybWFsaXplJ1wiO1xuICAgIH0sXG4gICAgc2V0TWlzc2luZ1ZhbHVlczogZnVuY3Rpb24gKGRhdGFzZXQsIGFyZ3MsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJzZXRNaXNzaW5nVmFsdWVzXCIpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYXJncyk7XG4gICAgICAgIGlmIChhcmdzICYmIGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IG1pc3NpbmdWYWx1ZSA9IGFyZ3NbMF07XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhtaXNzaW5nVmFsdWUpO1xuICAgICAgICAgICAgbGV0IG5ld0RhdGFzZXQgPSBkYXRhc2V0LmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKG1pc3NpbmdWYWx1ZSkgJiYgIU51bWJlci5pc05hTihtaXNzaW5nVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbmV3RGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbWlzc2luZ1ZhbHVlIGFzIG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG5ld0RhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3RGF0YXNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBpbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJ3NldE1pc3NpbmdWYWx1ZXMnXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGludmFsaWQgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAnc2V0TWlzc2luZ1ZhbHVlc1wiO1xuICAgIH0sXG59O1xuXG5mdW5jdGlvbiBnZXREYXRhc2V0QnlJZChkYXRhc2V0SWQ6IG51bWJlciwgcmVuZGVySW5mbzogUmVuZGVySW5mbykge1xuICAgIHJldHVybiByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlQXJyYXkoYXJyOiBhbnksIHJlbmRlckluZm86IFJlbmRlckluZm8pIHtcbiAgICByZXR1cm4gYXJyLm1hcChmdW5jdGlvbiAoZXhwcjoganNlcC5FeHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBldmFsdWF0ZShleHByLCByZW5kZXJJbmZvKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZXZhbHVhdGUoZXhwcjoganNlcC5FeHByZXNzaW9uLCByZW5kZXJJbmZvOiBSZW5kZXJJbmZvKTogYW55IHtcbiAgICAvLyBjb25zb2xlLmxvZyhleHByKTtcblxuICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJMaXRlcmFsXCI6XG4gICAgICAgICAgICBsZXQgbGl0ZXJhbEV4cHIgPSBleHByIGFzIGpzZXAuTGl0ZXJhbDtcbiAgICAgICAgICAgIHJldHVybiBsaXRlcmFsRXhwci52YWx1ZTsgLy8gc3RyaW5nLCBudW1iZXIsIGJvb2xlYW5cblxuICAgICAgICBjYXNlIFwiSWRlbnRpZmllclwiOlxuICAgICAgICAgICAgbGV0IGlkZW50aWZpZXJFeHByID0gZXhwciBhcyBqc2VwLklkZW50aWZpZXI7XG4gICAgICAgICAgICBsZXQgaWRlbnRpZmllck5hbWUgPSBpZGVudGlmaWVyRXhwci5uYW1lO1xuICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJOYW1lIGluIGZuTWFwRGF0YXNldFRvVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYEVycm9yOiBkZXByZWNhdGVkIHRlbXBsYXRlIHZhcmlhYmxlICcke2lkZW50aWZpZXJOYW1lfScsIHVzZSAnJHtpZGVudGlmaWVyTmFtZX0oKScgaW5zdGVhZGA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWZpZXJOYW1lIGluIGZuTWFwRGF0YXNldFRvRGF0YXNldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IGRlcHJlY2F0ZWQgdGVtcGxhdGUgdmFyaWFibGUgJyR7aWRlbnRpZmllck5hbWV9JywgdXNlICcke2lkZW50aWZpZXJOYW1lfSgpJyBpbnN0ZWFkYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IHVua25vd24gZnVuY3Rpb24gbmFtZSAnJHtpZGVudGlmaWVyTmFtZX0nYDtcblxuICAgICAgICBjYXNlIFwiVW5hcnlFeHByZXNzaW9uXCI6XG4gICAgICAgICAgICBsZXQgdW5pcnlFeHByID0gZXhwciBhcyBqc2VwLlVuYXJ5RXhwcmVzc2lvbjtcbiAgICAgICAgICAgIGxldCByZXRVbmlyeUFyZyA9IGV2YWx1YXRlKHVuaXJ5RXhwci5hcmd1bWVudCwgcmVuZGVySW5mbyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJldFVuaXJ5QXJnID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldFVuaXJ5QXJnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZuTWFwVW5pcnlPcFt1bmlyeUV4cHIub3BlcmF0b3JdKHJldFVuaXJ5QXJnKTtcblxuICAgICAgICBjYXNlIFwiQmluYXJ5RXhwcmVzc2lvblwiOlxuICAgICAgICAgICAgbGV0IGJpbmFyeUV4cHIgPSBleHByIGFzIGpzZXAuQmluYXJ5RXhwcmVzc2lvbjtcbiAgICAgICAgICAgIGxldCBsZWZ0VmFsdWUgPSBldmFsdWF0ZShiaW5hcnlFeHByLmxlZnQsIHJlbmRlckluZm8pO1xuICAgICAgICAgICAgbGV0IHJpZ2h0VmFsdWUgPSBldmFsdWF0ZShiaW5hcnlFeHByLnJpZ2h0LCByZW5kZXJJbmZvKTtcbiAgICAgICAgICAgIGxldCByZXRDaGVjayA9IGNoZWNrQmluYXJ5T3BlcmFudFR5cGUobGVmdFZhbHVlLCByaWdodFZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmV0Q2hlY2sgPT09IFwic3RyaW5nXCIgJiYgcmV0Q2hlY2suc3RhcnRzV2l0aChcIkVycm9yOlwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXRDaGVjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbk1hcEJpbmFyeU9wW2JpbmFyeUV4cHIub3BlcmF0b3JdKGxlZnRWYWx1ZSwgcmlnaHRWYWx1ZSk7XG5cbiAgICAgICAgY2FzZSBcIkNhbGxFeHByZXNzaW9uXCI6XG4gICAgICAgICAgICBsZXQgY2FsbEV4cHIgPSBleHByIGFzIGpzZXAuQ2FsbEV4cHJlc3Npb247XG5cbiAgICAgICAgICAgIGxldCBjYWxsZWVJZGVudGlmaWVyID0gY2FsbEV4cHIuY2FsbGVlIGFzIGpzZXAuSWRlbnRpZmllcjtcbiAgICAgICAgICAgIGxldCBmbk5hbWUgPSBjYWxsZWVJZGVudGlmaWVyLm5hbWU7XG4gICAgICAgICAgICBsZXQgYXJncyA9IGNhbGxFeHByLmFyZ3VtZW50cztcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGZuTmFtZSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhcmdzKTtcbiAgICAgICAgICAgIGxldCBldmFsdWF0ZWRBcmdzID0gZXZhbHVhdGVBcnJheShhcmdzLCByZW5kZXJJbmZvKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXZhbHVhdGVkQXJncyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGV2YWx1YXRlZEFyZ3M7XG5cbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGRhdGFzZXQgYWNjZXB0IG9ubHkgb25lIGFyZyBpbiBudW1iZXJcbiAgICAgICAgICAgIGlmIChmbk5hbWUgPT09IFwiZGF0YXNldFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlZEFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhcmcgPSBldmFsdWF0ZWRBcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFyZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBmdW5jdGlvbiAnZGF0YXNldCcgb25seSBhY2NlcHRzIGlkIGluIG51bWJlclwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gZ2V0RGF0YXNldEJ5SWQoYXJnLCByZW5kZXJJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEVycm9yOiBubyBkYXRhc2V0IGZvdW5kIGZvciBpZCAnJHthcmd9J2A7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZm5EYXRhc2V0IGFjY2VwdCBvbmx5IG9uZSBhcmcgaW4gbnVtYmVyIG9yIERhdGFzZXRcbiAgICAgICAgICAgIGVsc2UgaWYgKGZuTmFtZSBpbiBmbk1hcERhdGFzZXRUb1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlZEFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSBmaXJzdCBub24tWCBkYXRhc2V0XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgZHMgb2YgcmVuZGVySW5mby5kYXRhc2V0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhc2V0ICYmICFkcy5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldCA9IGRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGJyZWFrcyBoZXJlLCB0aGUgaW5kZXggb2YgRGF0YXNldHMgbm90IHJlc2V0Pz8/XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE5vIGF2YWlsYWJsZSBkYXRhc2V0IGZvdW5kIGZvciBmdW5jdGlvbiAke2ZuTmFtZX1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbk1hcERhdGFzZXRUb1ZhbHVlW2ZuTmFtZV0oZGF0YXNldCwgcmVuZGVySW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRBcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJnID0gZXZhbHVhdGVkQXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHJldHVybiBhcmc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5NYXBEYXRhc2V0VG9WYWx1ZVtmbk5hbWVdKGFyZywgcmVuZGVySW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEVycm9yOiBmdW5jdGlvbiAnJHtmbk5hbWV9JyBvbmx5IGFjY2VwdHMgRGF0YXNldGA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBFcnJvcjogVG9vIG1hbnkgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAke2ZuTmFtZX1gO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmbk5hbWUgaW4gZm5NYXBEYXRhc2V0VG9EYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlZEFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXZhbHVhdGVkQXJnc1swXSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmFsdWF0ZWRBcmdzWzBdOyAvLyBlcnJvciBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRBcmdzWzBdIGluc3RhbmNlb2YgRGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzZXQgPSBldmFsdWF0ZWRBcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuTWFwRGF0YXNldFRvRGF0YXNldFtmbk5hbWVdKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBFcnJvcjogZnVuY3Rpb24gJHtmbk5hbWV9IG9ubHkgYWNjZXB0IERhdGFzZXRgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZWRBcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBldmFsdWF0ZWRBcmdzWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZhbHVhdGVkQXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGVkQXJnc1swXSBpbnN0YW5jZW9mIERhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gZXZhbHVhdGVkQXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbk1hcERhdGFzZXRUb0RhdGFzZXRbZm5OYW1lXShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlZEFyZ3MuZmlsdGVyKGZ1bmN0aW9uIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyOiBhbnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4ID4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBFcnJvcjogZnVuY3Rpb24gJHtmbk5hbWV9IG9ubHkgYWNjZXB0IERhdGFzZXRgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IFRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJHtmbk5hbWV9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IHVua25vd24gZnVuY3Rpb24gbmFtZSAnJHtmbk5hbWV9J2A7XG4gICAgfVxuICAgIHJldHVybiBcIkVycm9yOiB1bmtub3duIGV4cHJlc3Npb25cIjtcbn1cblxuaW50ZXJmYWNlIEV4cHJSZXNvbHZlZCB7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgdmFsdWU6IG51bWJlciB8IE1vbWVudDtcbiAgICBmb3JtYXQ6IHN0cmluZztcbn1cblxuLy8gR2V0IGEgbGlzdCBvZiByZXNvbHZlZCByZXN1bHQgY29udGFpbmluZyBzb3VyY2UsIHZhbHVlLCBhbmQgZm9ybWF0XG5mdW5jdGlvbiByZXNvbHZlKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pOiBBcnJheTxFeHByUmVzb2x2ZWQ+IHwgc3RyaW5nIHtcbiAgICAvLyBjb25zb2xlLmxvZyh0ZXh0KTtcblxuICAgIGxldCBleHByTWFwOiBBcnJheTxFeHByUmVzb2x2ZWQ+ID0gW107XG5cbiAgICAvLyB7eyg/PGV4cHI+W1xcdytcXC0qXFwvMC05XFxzKClcXFtcXF0lLl0rKSg6Oig/PGZvcm1hdD5bXFx3K1xcLSpcXC8wLTlcXHMoKVxcW1xcXSUuOl0rKSk/fX1cbiAgICBsZXQgc3RyRXhwclJlZ2V4ID1cbiAgICAgICAgXCJ7eyg/PGV4cHI+W1xcXFx3K1xcXFwtKlxcXFwvMC05XFxcXHMoKVxcXFxbXFxcXF0lLixdKykoOjooPzxmb3JtYXQ+W1xcXFx3K1xcXFwtKlxcXFwvMC05XFxcXHMoKVxcXFxbXFxcXF0lLjpdKykpP319XCI7XG4gICAgbGV0IGV4cHJSZWdleCA9IG5ldyBSZWdFeHAoc3RyRXhwclJlZ2V4LCBcImdtXCIpO1xuICAgIGxldCBtYXRjaDtcbiAgICB3aGlsZSAoKG1hdGNoID0gZXhwclJlZ2V4LmV4ZWModGV4dCkpKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1hdGNoKTtcbiAgICAgICAgbGV0IGZ1bGxtYXRjaCA9IG1hdGNoWzBdO1xuICAgICAgICBpZiAoZXhwck1hcC5zb21lKChlKSA9PiBlLnNvdXJjZSA9PT0gZnVsbG1hdGNoKSkgY29udGludWU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBtYXRjaC5ncm91cHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWF0Y2guZ3JvdXBzLmV4cHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXhwciA9IG1hdGNoLmdyb3Vwcy5leHByO1xuXG4gICAgICAgICAgICAgICAgbGV0IGFzdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXN0ID0ganNlcChleHByKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiRXJyb3I6XCIgKyBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGZhaWxlZCB0byBwYXJzZSBleHByZXNzaW9uXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGFzdCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGV2YWx1YXRlKGFzdCwgcmVuZGVySW5mbyk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7IC8vIGVycm9yIG1lc3NhZ2VcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubW9tZW50LmlzTW9tZW50KHZhbHVlKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybWF0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXRjaC5ncm91cHMuZm9ybWF0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBtYXRjaC5ncm91cHMuZm9ybWF0O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwck1hcC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogZnVsbG1hdGNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHByTWFwO1xufVxuXG4vLyBSZXNvbHZlIHRoZSB0ZW1wbGF0ZSBleHByZXNzaW9uIGluIHN0cmluZyBhbmQgcmV0dXJuIGEgcmVzb2x2ZWQgc3RyaW5nXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVRlbXBsYXRlKFxuICAgIHRlbXBsYXRlOiBzdHJpbmcsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKTogc3RyaW5nIHtcbiAgICBsZXQgcmV0UmVzb2x2ZSA9IHJlc29sdmUodGVtcGxhdGUsIHJlbmRlckluZm8pO1xuICAgIGlmICh0eXBlb2YgcmV0UmVzb2x2ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0UmVzb2x2ZTsgLy8gZXJyb3IgbWVzc2FnZVxuICAgIH1cbiAgICBsZXQgZXhwck1hcCA9IHJldFJlc29sdmUgYXMgQXJyYXk8RXhwclJlc29sdmVkPjtcblxuICAgIGZvciAobGV0IGV4cHJSZXNvbHZlZCBvZiBleHByTWFwKSB7XG4gICAgICAgIGxldCBzb3VyY2UgPSBleHByUmVzb2x2ZWQuc291cmNlO1xuICAgICAgICBsZXQgdmFsdWUgPSBleHByUmVzb2x2ZWQudmFsdWU7XG4gICAgICAgIGxldCBmb3JtYXQgPSBleHByUmVzb2x2ZWQuZm9ybWF0O1xuICAgICAgICBsZXQgc3RyVmFsdWUgPSBcIlwiO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgc3RyVmFsdWUgPSBzcHJpbnRmKFwiJVwiICsgZm9ybWF0LCB2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0clZhbHVlID0gdmFsdWUudG9GaXhlZCgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cubW9tZW50LmlzTW9tZW50KHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHN0clZhbHVlID0gaGVscGVyLmRhdGVUb1N0cih2YWx1ZSwgZm9ybWF0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyVmFsdWUgPSBoZWxwZXIuZGF0ZVRvU3RyKHZhbHVlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0clZhbHVlKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhleHByUmVzb2x2ZWQpO1xuICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5zcGxpdChzb3VyY2UpLmpvaW4oc3RyVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xufVxuXG4vLyBSZXNvbHZlIHRoZSB0ZW1wbGF0ZSBleHByZXNzaW9uIGluIHN0cmluZyBhbmQgcmV0dXJuIGEgbnVtYmVyIG9yIGRhdGVcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVmFsdWUoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IG51bWJlciB8IE1vbWVudCB8IHN0cmluZyB7XG4gICAgLy8gY29uc29sZS5sb2codGVtcGxhdGUpO1xuICAgIHRleHQgPSB0ZXh0LnRyaW0oKTtcblxuICAgIC8vIGlucHV0IGlzIHB1cmUgbnVtYmVyXG4gICAgaWYgKC9eKFtcXC1dP1swLTldK1tcXC5dWzAtOV0rfFtcXC1dP1swLTldKykkLy50ZXN0KHRleHQpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRleHQpO1xuICAgIH1cblxuICAgIC8vIHRlbXBsYXRlXG4gICAgbGV0IHJldFJlc29sdmUgPSByZXNvbHZlKHRleHQsIHJlbmRlckluZm8pO1xuICAgIGlmICh0eXBlb2YgcmV0UmVzb2x2ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0UmVzb2x2ZTsgLy8gZXJyb3IgbWVzc2FnZVxuICAgIH1cbiAgICBsZXQgZXhwck1hcCA9IHJldFJlc29sdmUgYXMgQXJyYXk8RXhwclJlc29sdmVkPjtcblxuICAgIGlmIChleHByTWFwLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGV4cHJNYXBbMF0udmFsdWU7IC8vIG9ubHkgZmlyc3QgdmFsdWUgd2lsbCBiZSByZXR1cm5cbiAgICB9XG5cbiAgICByZXR1cm4gXCJFcnJvcjogZmFpbGVkIHRvIHJlc29sdmUgdmFsdWVzXCI7XG59XG4iLCIvKiBnbG9iYWwgd2luZG93LCBleHBvcnRzLCBkZWZpbmUgKi9cblxuIWZ1bmN0aW9uKCkge1xuICAgICd1c2Ugc3RyaWN0J1xuXG4gICAgdmFyIHJlID0ge1xuICAgICAgICBub3Rfc3RyaW5nOiAvW15zXS8sXG4gICAgICAgIG5vdF9ib29sOiAvW150XS8sXG4gICAgICAgIG5vdF90eXBlOiAvW15UXS8sXG4gICAgICAgIG5vdF9wcmltaXRpdmU6IC9bXnZdLyxcbiAgICAgICAgbnVtYmVyOiAvW2RpZWZnXS8sXG4gICAgICAgIG51bWVyaWNfYXJnOiAvW2JjZGllZmd1eFhdLyxcbiAgICAgICAganNvbjogL1tqXS8sXG4gICAgICAgIG5vdF9qc29uOiAvW15qXS8sXG4gICAgICAgIHRleHQ6IC9eW15cXHgyNV0rLyxcbiAgICAgICAgbW9kdWxvOiAvXlxceDI1ezJ9LyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IC9eXFx4MjUoPzooWzEtOV1cXGQqKVxcJHxcXCgoW14pXSspXFwpKT8oXFwrKT8oMHwnW14kXSk/KC0pPyhcXGQrKT8oPzpcXC4oXFxkKykpPyhbYi1naWpvc3RUdXZ4WF0pLyxcbiAgICAgICAga2V5OiAvXihbYS16X11bYS16X1xcZF0qKS9pLFxuICAgICAgICBrZXlfYWNjZXNzOiAvXlxcLihbYS16X11bYS16X1xcZF0qKS9pLFxuICAgICAgICBpbmRleF9hY2Nlc3M6IC9eXFxbKFxcZCspXFxdLyxcbiAgICAgICAgc2lnbjogL15bKy1dL1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNwcmludGYoa2V5KSB7XG4gICAgICAgIC8vIGBhcmd1bWVudHNgIGlzIG5vdCBhbiBhcnJheSwgYnV0IHNob3VsZCBiZSBmaW5lIGZvciB0aGlzIGNhbGxcbiAgICAgICAgcmV0dXJuIHNwcmludGZfZm9ybWF0KHNwcmludGZfcGFyc2Uoa2V5KSwgYXJndW1lbnRzKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZzcHJpbnRmKGZtdCwgYXJndikge1xuICAgICAgICByZXR1cm4gc3ByaW50Zi5hcHBseShudWxsLCBbZm10XS5jb25jYXQoYXJndiB8fCBbXSkpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3ByaW50Zl9mb3JtYXQocGFyc2VfdHJlZSwgYXJndikge1xuICAgICAgICB2YXIgY3Vyc29yID0gMSwgdHJlZV9sZW5ndGggPSBwYXJzZV90cmVlLmxlbmd0aCwgYXJnLCBvdXRwdXQgPSAnJywgaSwgaywgcGgsIHBhZCwgcGFkX2NoYXJhY3RlciwgcGFkX2xlbmd0aCwgaXNfcG9zaXRpdmUsIHNpZ25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyZWVfbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyc2VfdHJlZVtpXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gcGFyc2VfdHJlZVtpXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhcnNlX3RyZWVbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgcGggPSBwYXJzZV90cmVlW2ldIC8vIGNvbnZlbmllbmNlIHB1cnBvc2VzIG9ubHlcbiAgICAgICAgICAgICAgICBpZiAocGgua2V5cykgeyAvLyBrZXl3b3JkIGFyZ3VtZW50XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3ZbY3Vyc29yXVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgcGgua2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZyA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignW3NwcmludGZdIENhbm5vdCBhY2Nlc3MgcHJvcGVydHkgXCIlc1wiIG9mIHVuZGVmaW5lZCB2YWx1ZSBcIiVzXCInLCBwaC5rZXlzW2tdLCBwaC5rZXlzW2stMV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnW3BoLmtleXNba11dXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocGgucGFyYW1fbm8pIHsgLy8gcG9zaXRpb25hbCBhcmd1bWVudCAoZXhwbGljaXQpXG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3ZbcGgucGFyYW1fbm9dXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBwb3NpdGlvbmFsIGFyZ3VtZW50IChpbXBsaWNpdClcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndltjdXJzb3IrK11cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmUubm90X3R5cGUudGVzdChwaC50eXBlKSAmJiByZS5ub3RfcHJpbWl0aXZlLnRlc3QocGgudHlwZSkgJiYgYXJnIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnKClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmUubnVtZXJpY19hcmcudGVzdChwaC50eXBlKSAmJiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgJiYgaXNOYU4oYXJnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzcHJpbnRmKCdbc3ByaW50Zl0gZXhwZWN0aW5nIG51bWJlciBidXQgZm91bmQgJVQnLCBhcmcpKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZS5udW1iZXIudGVzdChwaC50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBpc19wb3NpdGl2ZSA9IGFyZyA+PSAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChwaC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGFyc2VJbnQoYXJnLCAxMCkudG9TdHJpbmcoMilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhcmcsIDEwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEpTT04uc3RyaW5naWZ5KGFyZywgbnVsbCwgcGgud2lkdGggPyBwYXJzZUludChwaC53aWR0aCkgOiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwaC5wcmVjaXNpb24gPyBwYXJzZUZsb2F0KGFyZykudG9FeHBvbmVudGlhbChwaC5wcmVjaXNpb24pIDogcGFyc2VGbG9hdChhcmcpLnRvRXhwb25lbnRpYWwoKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwaC5wcmVjaXNpb24gPyBwYXJzZUZsb2F0KGFyZykudG9GaXhlZChwaC5wcmVjaXNpb24pIDogcGFyc2VGbG9hdChhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdnJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBoLnByZWNpc2lvbiA/IFN0cmluZyhOdW1iZXIoYXJnLnRvUHJlY2lzaW9uKHBoLnByZWNpc2lvbikpKSA6IHBhcnNlRmxvYXQoYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGFyc2VJbnQoYXJnLCAxMCkgPj4+IDApLnRvU3RyaW5nKDgpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IFN0cmluZyhhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGgucHJlY2lzaW9uID8gYXJnLnN1YnN0cmluZygwLCBwaC5wcmVjaXNpb24pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBTdHJpbmcoISFhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGgucHJlY2lzaW9uID8gYXJnLnN1YnN0cmluZygwLCBwaC5wcmVjaXNpb24pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBoLnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGFyc2VJbnQoYXJnLCAxMCkgPj4+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3YnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBoLnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBhcnNlSW50KGFyZywgMTApID4+PiAwKS50b1N0cmluZygxNilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBhcnNlSW50KGFyZywgMTApID4+PiAwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlLmpzb24udGVzdChwaC50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYXJnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmUubnVtYmVyLnRlc3QocGgudHlwZSkgJiYgKCFpc19wb3NpdGl2ZSB8fCBwaC5zaWduKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9IGlzX3Bvc2l0aXZlID8gJysnIDogJy0nXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcudG9TdHJpbmcoKS5yZXBsYWNlKHJlLnNpZ24sICcnKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9ICcnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFkX2NoYXJhY3RlciA9IHBoLnBhZF9jaGFyID8gcGgucGFkX2NoYXIgPT09ICcwJyA/ICcwJyA6IHBoLnBhZF9jaGFyLmNoYXJBdCgxKSA6ICcgJ1xuICAgICAgICAgICAgICAgICAgICBwYWRfbGVuZ3RoID0gcGgud2lkdGggLSAoc2lnbiArIGFyZykubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIHBhZCA9IHBoLndpZHRoID8gKHBhZF9sZW5ndGggPiAwID8gcGFkX2NoYXJhY3Rlci5yZXBlYXQocGFkX2xlbmd0aCkgOiAnJykgOiAnJ1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gcGguYWxpZ24gPyBzaWduICsgYXJnICsgcGFkIDogKHBhZF9jaGFyYWN0ZXIgPT09ICcwJyA/IHNpZ24gKyBwYWQgKyBhcmcgOiBwYWQgKyBzaWduICsgYXJnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0XG4gICAgfVxuXG4gICAgdmFyIHNwcmludGZfY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgICBmdW5jdGlvbiBzcHJpbnRmX3BhcnNlKGZtdCkge1xuICAgICAgICBpZiAoc3ByaW50Zl9jYWNoZVtmbXRdKSB7XG4gICAgICAgICAgICByZXR1cm4gc3ByaW50Zl9jYWNoZVtmbXRdXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2ZtdCA9IGZtdCwgbWF0Y2gsIHBhcnNlX3RyZWUgPSBbXSwgYXJnX25hbWVzID0gMFxuICAgICAgICB3aGlsZSAoX2ZtdCkge1xuICAgICAgICAgICAgaWYgKChtYXRjaCA9IHJlLnRleHQuZXhlYyhfZm10KSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXJzZV90cmVlLnB1c2gobWF0Y2hbMF0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgobWF0Y2ggPSByZS5tb2R1bG8uZXhlYyhfZm10KSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXJzZV90cmVlLnB1c2goJyUnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gcmUucGxhY2Vob2xkZXIuZXhlYyhfZm10KSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnX25hbWVzIHw9IDFcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkX2xpc3QgPSBbXSwgcmVwbGFjZW1lbnRfZmllbGQgPSBtYXRjaFsyXSwgZmllbGRfbWF0Y2ggPSBbXVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGZpZWxkX21hdGNoID0gcmUua2V5LmV4ZWMocmVwbGFjZW1lbnRfZmllbGQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdC5wdXNoKGZpZWxkX21hdGNoWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChyZXBsYWNlbWVudF9maWVsZCA9IHJlcGxhY2VtZW50X2ZpZWxkLnN1YnN0cmluZyhmaWVsZF9tYXRjaFswXS5sZW5ndGgpKSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZpZWxkX21hdGNoID0gcmUua2V5X2FjY2Vzcy5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdC5wdXNoKGZpZWxkX21hdGNoWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoZmllbGRfbWF0Y2ggPSByZS5pbmRleF9hY2Nlc3MuZXhlYyhyZXBsYWNlbWVudF9maWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3QucHVzaChmaWVsZF9tYXRjaFsxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXknKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXknKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gZmllbGRfbGlzdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnX25hbWVzIHw9IDJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFyZ19uYW1lcyA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tzcHJpbnRmXSBtaXhpbmcgcG9zaXRpb25hbCBhbmQgbmFtZWQgcGxhY2Vob2xkZXJzIGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWQnKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHBhcnNlX3RyZWUucHVzaChcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IG1hdGNoWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fbm86ICAgIG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5czogICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbjogICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkX2NoYXI6ICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ246ICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAgIG1hdGNoWzddLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogICAgICAgIG1hdGNoWzhdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1tzcHJpbnRmXSB1bmV4cGVjdGVkIHBsYWNlaG9sZGVyJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9mbXQgPSBfZm10LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNwcmludGZfY2FjaGVbZm10XSA9IHBhcnNlX3RyZWVcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBleHBvcnQgdG8gZWl0aGVyIGJyb3dzZXIgb3Igbm9kZS5qc1xuICAgICAqL1xuICAgIC8qIGVzbGludC1kaXNhYmxlIHF1b3RlLXByb3BzICovXG4gICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBleHBvcnRzWydzcHJpbnRmJ10gPSBzcHJpbnRmXG4gICAgICAgIGV4cG9ydHNbJ3ZzcHJpbnRmJ10gPSB2c3ByaW50ZlxuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93WydzcHJpbnRmJ10gPSBzcHJpbnRmXG4gICAgICAgIHdpbmRvd1sndnNwcmludGYnXSA9IHZzcHJpbnRmXG5cbiAgICAgICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSkge1xuICAgICAgICAgICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICdzcHJpbnRmJzogc3ByaW50ZixcbiAgICAgICAgICAgICAgICAgICAgJ3ZzcHJpbnRmJzogdnNwcmludGZcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgcXVvdGUtcHJvcHMgKi9cbn0oKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFyaWFuY2UodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBjb3VudCA9IDA7XG4gIGxldCBkZWx0YTtcbiAgbGV0IG1lYW4gPSAwO1xuICBsZXQgc3VtID0gMDtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgKHZhbHVlID0gK3ZhbHVlKSA+PSB2YWx1ZSkge1xuICAgICAgICBkZWx0YSA9IHZhbHVlIC0gbWVhbjtcbiAgICAgICAgbWVhbiArPSBkZWx0YSAvICsrY291bnQ7XG4gICAgICAgIHN1bSArPSBkZWx0YSAqICh2YWx1ZSAtIG1lYW4pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHtcbiAgICAgICAgZGVsdGEgPSB2YWx1ZSAtIG1lYW47XG4gICAgICAgIG1lYW4gKz0gZGVsdGEgLyArK2NvdW50O1xuICAgICAgICBzdW0gKz0gZGVsdGEgKiAodmFsdWUgLSBtZWFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGNvdW50ID4gMSkgcmV0dXJuIHN1bSAvIChjb3VudCAtIDEpO1xufVxuIiwiaW1wb3J0IHsgTW9tZW50IH0gZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHtcbiAgICBEYXRhc2V0cyxcbiAgICBEYXRhUG9pbnQsXG4gICAgUmVuZGVySW5mbyxcbiAgICBQaWVJbmZvLFxuICAgIE1vbnRoSW5mbyxcbiAgICBEYXRhc2V0LFxuICAgIFNpemUsXG4gICAgVHJhbnNmb3JtLFxuICAgIENoYXJ0RWxlbWVudHMsXG4gICAgR3JhcGhUeXBlLFxuICAgIFZhbHVlVHlwZSxcbn0gZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0ICogYXMgaGVscGVyIGZyb20gXCIuL2hlbHBlclwiO1xuaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQgKiBhcyBleHByIGZyb20gXCIuL2V4cHJcIjtcbmltcG9ydCB7IHBpZSB9IGZyb20gXCJkM1wiO1xuXG5mdW5jdGlvbiBzZXRDaGFydFNjYWxlKFxuICAgIF9jYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKSB7XG4gICAgbGV0IGNhbnZhcyA9IGQzLnNlbGVjdChfY2FudmFzKTtcbiAgICBsZXQgc3ZnID0gY2hhcnRFbGVtZW50cy5zdmc7XG4gICAgbGV0IHN2Z1dpZHRoID0gcGFyc2VGbG9hdChzdmcuYXR0cihcIndpZHRoXCIpKTtcbiAgICBsZXQgc3ZnSGVpZ2h0ID0gcGFyc2VGbG9hdChzdmcuYXR0cihcImhlaWdodFwiKSk7XG4gICAgc3ZnLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCBudWxsKVxuICAgICAgICAuYXR0cihcInZpZXdCb3hcIiwgYDAgMCAke3N2Z1dpZHRofSAke3N2Z0hlaWdodH1gKVxuICAgICAgICAuYXR0cihcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJ4TWlkWU1pZCBtZWV0XCIpO1xuXG4gICAgaWYgKHJlbmRlckluZm8uZml0UGFuZWxXaWR0aCkge1xuICAgICAgICBjYW52YXMuc3R5bGUoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY2FudmFzLnN0eWxlKFxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgICAgKHN2Z1dpZHRoICogcmVuZGVySW5mby5maXhlZFNjYWxlKS50b1N0cmluZygpICsgXCJweFwiXG4gICAgICAgICk7XG4gICAgICAgIGNhbnZhcy5zdHlsZShcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICAoc3ZnSGVpZ2h0ICogcmVuZGVySW5mby5maXhlZFNjYWxlKS50b1N0cmluZygpICsgXCJweFwiXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVBcmVhcyhcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBwaWVJbmZvOiBQaWVJbmZvXG4pOiBDaGFydEVsZW1lbnRzIHtcbiAgICAvLyBjbGVhbiBhcmVhc1xuICAgIGQzLnNlbGVjdChjYW52YXMpLnNlbGVjdChcIiNzdmdcIikucmVtb3ZlKCk7XG4gICAgdmFyIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY2hhcnRFbGVtZW50cyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBkMy5zZWxlY3QoY2hhcnRFbGVtZW50c1twcm9wc1tpXV0pLnJlbW92ZSgpO1xuICAgICAgICBkZWxldGUgY2hhcnRFbGVtZW50c1twcm9wc1tpXV07XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0RWxlbWVudHMpO1xuXG4gICAgLy8gd2hvbGUgYXJlYSBmb3IgcGxvdHRpbmcsIGluY2x1ZGVzIG1hcmdpbnNcbiAgICBsZXQgc3ZnID0gZDNcbiAgICAgICAgLnNlbGVjdChjYW52YXMpXG4gICAgICAgIC5hcHBlbmQoXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInN2Z1wiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5yaWdodFxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cbiAgICAgICAgKTtcbiAgICBjaGFydEVsZW1lbnRzW1wic3ZnXCJdID0gc3ZnO1xuXG4gICAgLy8gZ3JhcGhBcmVhLCBpbmNsdWRlcyBjaGFydEFyZWEsIHRpdGxlLCBsZWdlbmRcbiAgICBsZXQgZ3JhcGhBcmVhID0gc3ZnXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJncmFwaEFyZWFcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xuICAgICAgICAgICAgICAgIFwiKVwiXG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0KVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cbiAgICAgICAgKTtcbiAgICBjaGFydEVsZW1lbnRzW1wiZ3JhcGhBcmVhXCJdID0gZ3JhcGhBcmVhO1xuXG4gICAgLy8gZGF0YUFyZWEsIHVuZGVyIGdyYXBoQXJlYSwgaW5jbHVkZXMgcG9pbnRzLCBsaW5lcywgeEF4aXMsIHlBeGlzXG4gICAgbGV0IGRhdGFBcmVhID0gZ3JhcGhBcmVhXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJkYXRhQXJlYVwiKVxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKVxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQpO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJkYXRhQXJlYVwiXSA9IGRhdGFBcmVhO1xuXG4gICAgcmV0dXJuIGNoYXJ0RWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclRpdGxlKFxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIHBpZUluZm86IFBpZUluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyVGl0bGVcIik7XG4gICAgLy8gdW5kZXIgZ3JhcGhBcmVhXG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIXBpZUluZm8pIHJldHVybjtcblxuICAgIGlmICghcGllSW5mby50aXRsZSkgcmV0dXJuO1xuICAgIGxldCB0aXRsZVNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKHBpZUluZm8udGl0bGUsIFwidHJhY2tlci10aXRsZVwiKTtcblxuICAgIC8vIEFwcGVuZCB0aXRsZVxuICAgIGxldCB0aXRsZSA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC50ZXh0KHBpZUluZm8udGl0bGUpIC8vIHBpdm90IGF0IGNlbnRlclxuICAgICAgICAuYXR0cihcImlkXCIsIFwidGl0bGVcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wICtcbiAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgdGl0bGVTaXplLmhlaWdodCAvIDIuMCArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0aXRsZVNpemUuaGVpZ2h0KSAvLyBmb3IgbGF0ZXIgdXNlXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpdGxlXCIpO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJ0aXRsZVwiXSA9IHRpdGxlO1xuXG4gICAgLy8gRXhwYW5kIHBhcmVudCBhcmVhc1xuICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCAwLCB0aXRsZVNpemUuaGVpZ2h0KTtcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSwgMCwgdGl0bGVTaXplLmhlaWdodCk7XG5cbiAgICAvLyBNb3ZlIHNpYmxpbmcgYXJlYXNcbiAgICBoZWxwZXIubW92ZUFyZWEoY2hhcnRFbGVtZW50cy5kYXRhQXJlYSwgMCwgdGl0bGVTaXplLmhlaWdodCk7XG5cbiAgICByZXR1cm47XG59XG5cbmZ1bmN0aW9uIHJlbmRlckxlZ2VuZChcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBwaWVJbmZvOiBQaWVJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckxlZ2VuZFwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhwaUluZm8ubGVnZW5kUG9zaXRpb24pO1xuICAgIC8vIGNvbnNvbGUubG9nKHBpSW5mby5sZWdlbmRPcmllbnRhdGlvbik7XG5cbiAgICAvLyBHZXQgY2hhcnQgZWxlbWVudHNcbiAgICBsZXQgc3ZnID0gY2hhcnRFbGVtZW50cy5zdmc7XG4gICAgbGV0IGdyYXBoQXJlYSA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhO1xuICAgIGxldCBkYXRhQXJlYSA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWE7XG4gICAgbGV0IHRpdGxlID0gY2hhcnRFbGVtZW50cy50aXRsZTtcblxuICAgIC8vIEdldCBlbGVtZW50IHdpZHRoIGFuZCBoZWlnaHRcbiAgICBsZXQgdGl0bGVIZWlnaHQgPSAwLjA7XG4gICAgaWYgKHRpdGxlKSB7XG4gICAgICAgIHRpdGxlSGVpZ2h0ID0gcGFyc2VGbG9hdCh0aXRsZS5hdHRyKFwiaGVpZ2h0XCIpKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgbmFtZXMgYW5kIHRoZWlyIGRpbWVuc2lvblxuICAgIGxldCBuYW1lcyA9IHBpZUluZm8uZGF0YU5hbWU7XG4gICAgbGV0IG5hbWVTaXplcyA9IG5hbWVzLm1hcChmdW5jdGlvbiAobikge1xuICAgICAgICByZXR1cm4gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShuLCBcInRyYWNrZXItbGVnZW5kLWxhYmVsXCIpO1xuICAgIH0pO1xuICAgIGxldCBpbmRNYXhOYW1lID0gMDtcbiAgICBsZXQgbWF4TmFtZVdpZHRoID0gMC4wO1xuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IG5hbWVzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgaWYgKG5hbWVTaXplc1tpbmRdLndpZHRoID4gbWF4TmFtZVdpZHRoKSB7XG4gICAgICAgICAgICBtYXhOYW1lV2lkdGggPSBuYW1lU2l6ZXNbaW5kXS53aWR0aDtcbiAgICAgICAgICAgIGluZE1heE5hbWUgPSBpbmQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IG1heE5hbWUgPSBuYW1lc1tpbmRNYXhOYW1lXTtcbiAgICBsZXQgY2hhcmFjdGVyV2lkdGggPSBtYXhOYW1lV2lkdGggLyBtYXhOYW1lLmxlbmd0aDtcbiAgICBsZXQgbmFtZUhlaWdodCA9IG5hbWVTaXplc1tpbmRNYXhOYW1lXS5oZWlnaHQ7XG4gICAgbGV0IG51bU5hbWVzID0gbmFtZXMubGVuZ3RoO1xuXG4gICAgbGV0IHhTcGFjaW5nID0gMiAqIGNoYXJhY3RlcldpZHRoO1xuICAgIGxldCB5U3BhY2luZyA9IG5hbWVIZWlnaHQ7XG4gICAgbGV0IG1hcmtlcldpZHRoID0gMiAqIGNoYXJhY3RlcldpZHRoO1xuXG4gICAgLy8gR2V0IGxlZ2VuZCB3aWR0aCBhbmQgaGVpZ2h0XG4gICAgbGV0IGxlZ2VuZFdpZHRoID0gMDtcbiAgICBsZXQgbGVnZW5kSGVpZ2h0ID0gMDtcbiAgICBpZiAocGllSW5mby5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIGxlZ2VuZFdpZHRoID0geFNwYWNpbmcgKiAzICsgbWFya2VyV2lkdGggKyBtYXhOYW1lV2lkdGg7XG4gICAgICAgIGxlZ2VuZEhlaWdodCA9IChudW1OYW1lcyArIDEpICogeVNwYWNpbmc7XG4gICAgfSBlbHNlIGlmIChwaWVJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICBsZWdlbmRXaWR0aCA9XG4gICAgICAgICAgICAoMiAqIHhTcGFjaW5nICsgbWFya2VyV2lkdGgpICogbnVtTmFtZXMgK1xuICAgICAgICAgICAgeFNwYWNpbmcgK1xuICAgICAgICAgICAgZDMuc3VtKG5hbWVTaXplcywgZnVuY3Rpb24gKHMsIGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcy53aWR0aDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBsZWdlbmRIZWlnaHQgPSB5U3BhY2luZyArIG5hbWVIZWlnaHQ7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKFxuICAgIC8vICAgICBgbWF4TmFtZTogJHttYXhOYW1lfSwgY2hhcmFjdGVyV2lkdGg6ICR7Y2hhcmFjdGVyV2lkdGh9LCBtYXhOYW1lV2lkdGg6ICR7bWF4TmFtZVdpZHRofWBcbiAgICAvLyApO1xuICAgIC8vIGNvbnNvbGUubG9nKGB4U3BhY2luZzoke3hTcGFjaW5nfSwgbnVtTmFtZXM6ICR7bnVtTmFtZXN9LCBtYXJrZXJXaWR0aDogJHttYXJrZXJXaWR0aH1gKTtcbiAgICAvLyBjb25zb2xlLmxvZyhgbGVnZW5kV2lkdGg6ICR7bGVnZW5kV2lkdGh9LCBsZWdlbmRIZWlnaHQ6ICR7bGVnZW5kSGVpZ2h0fWApO1xuXG4gICAgLy8gQ2FsY3VhbHRlIGxlbmdlbmRYIGFuZCBsZWdlbmRZXG4gICAgbGV0IGxlZ2VuZFggPSAwLjA7IC8vIHJlbGF0aXZlIHRvIGdyYXBoQXJlYVxuICAgIGxldCBsZWdlbmRZID0gMC4wO1xuICAgIGlmIChwaWVJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcInRvcFwiKSB7XG4gICAgICAgIC8vIGJlbG93IHRpdGxlXG4gICAgICAgIGxlZ2VuZFggPSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIDIuMCAtIGxlZ2VuZFdpZHRoIC8gMi4wO1xuICAgICAgICBsZWdlbmRZID0gdGl0bGVIZWlnaHQ7XG4gICAgICAgIC8vIEV4cGFuZCBzdmdcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoc3ZnLCAwLCBsZWdlbmRIZWlnaHQgKyB5U3BhY2luZyk7XG4gICAgICAgIC8vIE1vdmUgZGF0YUFyZWEgZG93blxuICAgICAgICBoZWxwZXIubW92ZUFyZWEoZGF0YUFyZWEsIDAsIGxlZ2VuZEhlaWdodCArIHlTcGFjaW5nKTtcbiAgICB9IGVsc2UgaWYgKHBpZUluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwiYm90dG9tXCIpIHtcbiAgICAgICAgLy8gYmVsbG93IHgtYXhpcyBsYWJlbFxuICAgICAgICBsZWdlbmRYID0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyLjAgLSBsZWdlbmRXaWR0aCAvIDIuMDtcbiAgICAgICAgbGVnZW5kWSA9IHRpdGxlSGVpZ2h0ICsgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgeVNwYWNpbmc7XG4gICAgICAgIC8vIEV4cGFuZCBzdmdcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoc3ZnLCAwLCBsZWdlbmRIZWlnaHQgKyB5U3BhY2luZyk7XG4gICAgfSBlbHNlIGlmIChwaWVJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICBsZWdlbmRYID0gMDtcbiAgICAgICAgbGVnZW5kWSA9XG4gICAgICAgICAgICB0aXRsZUhlaWdodCArXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLyAyLjAgLVxuICAgICAgICAgICAgbGVnZW5kSGVpZ2h0IC8gMi4wO1xuICAgICAgICAvLyBFeHBhbmQgc3ZnXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgbGVnZW5kV2lkdGggKyB4U3BhY2luZywgMCk7XG4gICAgICAgIC8vIE1vdmUgZGF0YUFyZWEgcmlnaHRcbiAgICAgICAgaGVscGVyLm1vdmVBcmVhKGRhdGFBcmVhLCBsZWdlbmRXaWR0aCArIHhTcGFjaW5nLCAwKTtcbiAgICB9IGVsc2UgaWYgKHBpZUluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICBsZWdlbmRYID0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKyB4U3BhY2luZztcbiAgICAgICAgbGVnZW5kWSA9XG4gICAgICAgICAgICB0aXRsZUhlaWdodCArXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLyAyLjAgLVxuICAgICAgICAgICAgbGVnZW5kSGVpZ2h0IC8gMi4wO1xuICAgICAgICAvLyBFeHBhbmQgc3ZnXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgbGVnZW5kV2lkdGggKyB4U3BhY2luZywgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhgbGVnZW5kWDogJHtsZWdlbmRYfSwgbGVnZW5kWTogJHtsZWdlbmRZfWApO1xuXG4gICAgbGV0IGxlZ2VuZCA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJsZWdlbmRcIilcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBsZWdlbmRYICsgXCIsXCIgKyBsZWdlbmRZICsgXCIpXCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdsZWdlbmRYOiAlZCwgbGVnZW5kWTogJWQnLCBsZWdlbmRYLCBsZWdlbmRZKTtcblxuICAgIGxldCBsZWdlbmRCZyA9IGxlZ2VuZFxuICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1sZWdlbmRcIilcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBsZWdlbmRXaWR0aClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbGVnZW5kSGVpZ2h0KTtcbiAgICBpZiAocGllSW5mby5sZWdlbmRCZ0NvbG9yKSB7XG4gICAgICAgIGxlZ2VuZEJnLnN0eWxlKFwiZmlsbFwiLCBwaWVJbmZvLmxlZ2VuZEJnQ29sb3IpO1xuICAgIH1cbiAgICBpZiAocGllSW5mby5sZWdlbmRCb3JkZXJDb2xvcikge1xuICAgICAgICBsZWdlbmRCZy5zdHlsZShcInN0cm9rZVwiLCBwaWVJbmZvLmxlZ2VuZEJvcmRlckNvbG9yKTtcbiAgICB9XG5cbiAgICBsZXQgbWFya2VyUmFkaXVzID0gNS4wO1xuICAgIGxldCBmaXJzdE1hcmtlclggPSB4U3BhY2luZztcbiAgICBsZXQgZmlyc3RNYXJrZXJZID0gbmFtZUhlaWdodDtcbiAgICBsZXQgZmlyc3RMYWJlbFggPSBmaXJzdE1hcmtlclggKyB4U3BhY2luZyArIG1hcmtlcldpZHRoOyAvLyB4U3BhY2luZyArIDIgKiB4U3BhaW5nXG4gICAgbGV0IGZpcnN0TGFiZWxZID0gZmlyc3RNYXJrZXJZO1xuXG4gICAgaWYgKHBpZUluZm8ubGVnZW5kT3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICAvLyBwb2ludHNcbiAgICAgICAgbGVnZW5kXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwibWFya2Vyc1wiKVxuICAgICAgICAgICAgLmRhdGEobmFtZXMpXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCBmaXJzdE1hcmtlclggKyBtYXJrZXJXaWR0aCAvIDIuMClcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TWFya2VyWSArIGkgKiB5U3BhY2luZztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcInJcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlclJhZGl1cztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwaWVJbmZvLmRhdGFDb2xvcltpXTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIG5hbWVzXG4gICAgICAgIGxldCBuYW1lTGFiZWxzID0gbGVnZW5kXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwibGFiZWxzXCIpXG4gICAgICAgICAgICAuZGF0YShuYW1lcylcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGZpcnN0TGFiZWxYKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdExhYmVsWSArIGkgKiB5U3BhY2luZztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGV4dChmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3R5bGUoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWxlZ2VuZC1sYWJlbFwiKTtcblxuICAgICAgICBuYW1lTGFiZWxzLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBwaWVJbmZvLmRhdGFDb2xvcltpXTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChwaWVJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICBsZXQgY3VyclJlbmRlclBvc1ggPSAwLjA7XG4gICAgICAgIGxldCBjdXJyUmVuZGVyUG9zWDIgPSAwLjA7XG5cbiAgICAgICAgLy8gcG9pbnRzXG4gICAgICAgIGN1cnJSZW5kZXJQb3NYID0gMC4wO1xuICAgICAgICBsZWdlbmRcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJtYXJrZXJzXCIpXG4gICAgICAgICAgICAuZGF0YShuYW1lcylcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJSZW5kZXJQb3NYID0gZmlyc3RNYXJrZXJYICsgbWFya2VyV2lkdGggLyAyLjA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyclJlbmRlclBvc1ggKz1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVTaXplc1tpXS53aWR0aCArIHhTcGFjaW5nICsgbWFya2VyV2lkdGggKyB4U3BhY2luZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJSZW5kZXJQb3NYO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgZmlyc3RNYXJrZXJZKVxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJSYWRpdXM7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGllSW5mby5kYXRhQ29sb3JbaV07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBuYW1lc1xuICAgICAgICBjdXJyUmVuZGVyUG9zWCA9IDAuMDtcbiAgICAgICAgbGV0IG5hbWVMYWJlbHMgPSBsZWdlbmRcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJsYWJlbHNcIilcbiAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyclJlbmRlclBvc1ggPSBmaXJzdExhYmVsWDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyUmVuZGVyUG9zWCArPVxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVNpemVzW2ldLndpZHRoICsgeFNwYWNpbmcgKyBtYXJrZXJXaWR0aCArIHhTcGFjaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY3VyclJlbmRlclBvc1g7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZpcnN0TGFiZWxZKVxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN0eWxlKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1sZWdlbmQtbGFiZWxcIik7XG5cbiAgICAgICAgbmFtZUxhYmVscy5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcGllSW5mby5kYXRhQ29sb3JbaV07XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyUGllKFxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIHBpZUluZm86IFBpZUluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyUGllXCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xuXG4gICAgbGV0IHJhZGl1cyA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICogMC41O1xuICAgIGxldCBvdXR0ZXJSYWRpdXMgPSByYWRpdXMgKiAwLjc7XG4gICAgbGV0IGlubmVyUmFkaXVzID0gb3V0dGVyUmFkaXVzICogcGllSW5mby5yYXRpb0lubmVyUmFkaXVzO1xuXG4gICAgLy8gdmFsdWVzXG4gICAgbGV0IHZhbHVlczogQXJyYXk8bnVtYmVyPiA9IFtdO1xuICAgIGZvciAobGV0IHN0ckV4cHIgb2YgcGllSW5mby5kYXRhKSB7XG4gICAgICAgIGxldCByZXRWYWx1ZSA9IGV4cHIucmVzb2x2ZVZhbHVlKHN0ckV4cHIsIHJlbmRlckluZm8pO1xuICAgICAgICBpZiAodHlwZW9mIHJldFZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSByZXRWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXRWYWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2gocmV0VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChlcnJvck1lc3NhZ2UgIT09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2codmFsdWVzKTtcblxuICAgIC8vIGxhYmVsc1xuICAgIGxldCBsYWJlbHM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBmb3IgKGxldCBzdHJFeHByIG9mIHBpZUluZm8ubGFiZWwpIHtcbiAgICAgICAgbGV0IHJldExhYmVsID0gZXhwci5yZXNvbHZlVGVtcGxhdGUoc3RyRXhwciwgcmVuZGVySW5mbyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJldExhYmVsKTtcbiAgICAgICAgaWYgKHJldExhYmVsLnN0YXJ0c1dpdGgoXCJFcnJvclwiKSkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmV0TGFiZWw7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBsYWJlbHMucHVzaChyZXRMYWJlbCk7XG4gICAgfVxuICAgIGlmIChlcnJvck1lc3NhZ2UgIT09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2cobGFiZWxzKTtcblxuICAgIC8vIGhpZGVMYWJlbExlc3NUaGFuXG4gICAgbGV0IGhpZGVMYWJlbExlc3NUaGFuID0gcGllSW5mby5oaWRlTGFiZWxMZXNzVGhhbjtcblxuICAgIC8vIGxhYmVsIHNpemVzXG4gICAgbGV0IGxhYmVsU2l6ZXMgPSBsYWJlbHMubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHJldHVybiBoZWxwZXIubWVhc3VyZVRleHRTaXplKG4sIFwidHJhY2tlci10aWNrLWxhYmVsXCIpO1xuICAgIH0pO1xuXG4gICAgLy8gZXh0TGFiZWxcbiAgICBsZXQgZXh0TGFiZWxzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgZm9yIChsZXQgc3RyRXhwciBvZiBwaWVJbmZvLmV4dExhYmVsKSB7XG4gICAgICAgIGxldCByZXRFeHRMYWJlbCA9IGV4cHIucmVzb2x2ZVRlbXBsYXRlKHN0ckV4cHIsIHJlbmRlckluZm8pO1xuICAgICAgICBpZiAocmV0RXh0TGFiZWwuc3RhcnRzV2l0aChcIkVycm9yXCIpKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSByZXRFeHRMYWJlbDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGV4dExhYmVscy5wdXNoKHJldEV4dExhYmVsKTtcbiAgICB9XG4gICAgaWYgKGVycm9yTWVzc2FnZSAhPT0gXCJcIikge1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhleHRMYWJlbHMpO1xuXG4gICAgLy8gZXh0TGFiZWwgc2l6ZXNcbiAgICBsZXQgZXh0TGFiZWxTaXplcyA9IGV4dExhYmVscy5tYXAoZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgcmV0dXJuIGhlbHBlci5tZWFzdXJlVGV4dFNpemUobiwgXCJ0cmFja2VyLXBpZS1sYWJlbFwiKTtcbiAgICB9KTtcbiAgICAvLyBjb25zb2xlLmxvZyhleHRMYWJlbFNpemVzKTtcblxuICAgIGxldCBzaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsID0gcGllSW5mby5zaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsO1xuXG4gICAgLy8gc2NhbGVcbiAgICBsZXQgY29sb3JTY2FsZSA9IGQzLnNjYWxlT3JkaW5hbCgpLnJhbmdlKHBpZUluZm8uZGF0YUNvbG9yKTtcblxuICAgIGxldCBzZWN0b3JzR3JvdXAgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhLmFwcGVuZChcImdcIik7XG4gICAgc2VjdG9yc0dyb3VwLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgc3RyVHJhbnNsYXRlID1cbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICogMC41ICtcbiAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCAqIDAuNSArXG4gICAgICAgICAgICBcIilcIjtcblxuICAgICAgICByZXR1cm4gc3RyVHJhbnNsYXRlO1xuICAgIH0pO1xuXG4gICAgbGV0IHBpZSA9IGQzLnBpZSgpO1xuICAgIGxldCBwaWVWYWx1ZXMgPSBwaWUodmFsdWVzKTtcblxuICAgIGxldCBzZWN0b3JzID0gc2VjdG9yc0dyb3VwXG4gICAgICAgIC5zZWxlY3RBbGwoXCJzZWN0b3JcIilcbiAgICAgICAgLmRhdGEocGllVmFsdWVzKVxuICAgICAgICAuZW50ZXIoKVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VjdG9yXCIpO1xuXG4gICAgbGV0IGFyYyA9IGQzLmFyYygpLmlubmVyUmFkaXVzKGlubmVyUmFkaXVzKS5vdXRlclJhZGl1cyhvdXR0ZXJSYWRpdXMpO1xuXG4gICAgdmFyIGhpZGRlbkFyYyA9IGQzXG4gICAgICAgIC5hcmMoKVxuICAgICAgICAuaW5uZXJSYWRpdXMocmFkaXVzICogMC45KVxuICAgICAgICAub3V0ZXJSYWRpdXMocmFkaXVzICogMC45KTtcblxuICAgIGxldCBzZWN0b3JQYXRocyA9IHNlY3RvcnNcbiAgICAgICAgLmFwcGVuZChcInBhdGhcIilcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIGZ1bmN0aW9uIChkOiBhbnksIGk6IG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbG9yU2NhbGUoaS50b1N0cmluZygpKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJkXCIsIGFyYyk7XG5cbiAgICBmdW5jdGlvbiBpc0xhYmVsSGlkZGVuKGFyY09iajogYW55KSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBzdGFydC9lbmQ6ICR7YXJjT2JqLnN0YXJ0QW5nbGV9LyR7YXJjT2JqLmVuZEFuZ2xlfWApO1xuICAgICAgICBsZXQgZnJhY3Rpb24gPSAoYXJjT2JqLmVuZEFuZ2xlIC0gYXJjT2JqLnN0YXJ0QW5nbGUpIC8gKDIuMCAqIE1hdGguUEkpO1xuICAgICAgICBpZiAoZnJhY3Rpb24gPCBoaWRlTGFiZWxMZXNzVGhhbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGxhYmVsIGVsZW1lbnRzXG4gICAgbGV0IGxhYmVsRWxlbWVudHMgPSBzZWN0b3JzR3JvdXBcbiAgICAgICAgLnNlbGVjdEFsbChcImxhYmVsXCIpXG4gICAgICAgIC5kYXRhKHBpZSh2YWx1ZXMpKVxuICAgICAgICAuZW50ZXIoKVxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChmdW5jdGlvbiAoYXJjT2JqOiBhbnksIGk6IG51bWJlcikge1xuICAgICAgICAgICAgaWYgKGlzTGFiZWxIaWRkZW4oYXJjT2JqKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGxhYmVsc1tpXTtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgYXJjLmNlbnRyb2lkKGQpWzBdICtcbiAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgYXJjLmNlbnRyb2lkKGQpWzFdICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItcGllLWxhYmVsXCIpO1xuXG4gICAgZnVuY3Rpb24gZ2V0TWlkQW5nbGUoYXJjT2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGFyY09iai5zdGFydEFuZ2xlICsgKGFyY09iai5lbmRBbmdsZSAtIGFyY09iai5zdGFydEFuZ2xlKSAvIDI7XG4gICAgfVxuXG4gICAgLy8gZXh0ZXJuYWwgbGFiZWwgZWxlbWVudHNcbiAgICBsZXQgZXh0TGFiZWxFbGVtZW50cyA9IHNlY3RvcnNHcm91cFxuICAgICAgICAuc2VsZWN0QWxsKFwiZXh0TGFiZWxcIilcbiAgICAgICAgLmRhdGEocGllVmFsdWVzKVxuICAgICAgICAuZW50ZXIoKVxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChmdW5jdGlvbiAoYXJjT2JqOiBhbnksIGk6IG51bWJlcikge1xuICAgICAgICAgICAgaWYgKHNob3dFeHRMYWJlbE9ubHlJZk5vTGFiZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAobGFiZWxzW2ldID09PSBcIlwiIHx8IGlzTGFiZWxIaWRkZW4oYXJjT2JqKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXh0TGFiZWxzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4dExhYmVsc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24gKGFyY09iajogYW55LCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgIGxldCBwb3NMYWJlbCA9IGhpZGRlbkFyYy5jZW50cm9pZChhcmNPYmopO1xuICAgICAgICAgICAgbGV0IG1pZEFuZ2xlID0gZ2V0TWlkQW5nbGUoYXJjT2JqKTtcblxuICAgICAgICAgICAgcG9zTGFiZWxbMF0gPVxuICAgICAgICAgICAgICAgIChyYWRpdXMgKiAwLjk5IC0gZXh0TGFiZWxTaXplc1tpXS53aWR0aCkgKlxuICAgICAgICAgICAgICAgIChtaWRBbmdsZSA8IE1hdGguUEkgPyAxIDogLTEpO1xuICAgICAgICAgICAgcmV0dXJuIFwidHJhbnNsYXRlKFwiICsgcG9zTGFiZWxbMF0gKyBcIixcIiArIHBvc0xhYmVsWzFdICsgXCIpXCI7XG4gICAgICAgIH0pXG4gICAgICAgIC5zdHlsZShcInRleHQtYW5jaG9yXCIsIGZ1bmN0aW9uIChhcmNPYmo6IGFueSkge1xuICAgICAgICAgICAgbGV0IG1pZEFuZ2xlID0gZ2V0TWlkQW5nbGUoYXJjT2JqKTtcbiAgICAgICAgICAgIHJldHVybiBtaWRBbmdsZSA8IE1hdGguUEkgPyBcInN0YXJ0XCIgOiBcImVuZFwiO1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1waWUtbGFiZWxcIik7XG5cbiAgICBmdW5jdGlvbiBnZXRQb2ludHNGb3JDb25uZWN0aW9uTGluZXMoYXJjT2JqOiBhbnksIGk6IG51bWJlcikge1xuICAgICAgICBsZXQgbGFiZWxXaWR0aCA9IGxhYmVsU2l6ZXNbaV0ud2lkdGg7XG4gICAgICAgIGxldCBleHRMYWJlbFdpZHRoID0gZXh0TGFiZWxTaXplc1tpXS53aWR0aDtcbiAgICAgICAgbGV0IGxhYmVsSGlkZGVuID0gaXNMYWJlbEhpZGRlbihhcmNPYmopO1xuICAgICAgICBsZXQgbWlkQW5nbGUgPSBnZXRNaWRBbmdsZShhcmNPYmopO1xuXG4gICAgICAgIGxldCBwb3NMYWJlbCA9IGFyYy5jZW50cm9pZChhcmNPYmopOyAvLyBsaW5lIGluc2VydGlvbiBpbiB0aGUgc2xpY2VcbiAgICAgICAgbGV0IHBvc01pZGRsZSA9IGhpZGRlbkFyYy5jZW50cm9pZChhcmNPYmopOyAvLyBsaW5lIGJyZWFrOiB3ZSB1c2UgdGhlIG90aGVyIGFyYyBnZW5lcmF0b3IgdGhhdCBoYXMgYmVlbiBidWlsdCBvbmx5IGZvciB0aGF0XG4gICAgICAgIGxldCBwb3NFeHRMYWJlbCA9IGhpZGRlbkFyYy5jZW50cm9pZChhcmNPYmopOyAvLyBMYWJlbCBwb3NpdGlvbiA9IGFsbW9zdCB0aGUgc2FtZSBhcyBwb3NCXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxhYmVsc1tpXSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBsYWJlbC9taWRkbGUvZXh0TGFiZWw6ICR7cG9zTGFiZWx9LyR7cG9zTWlkZGxlfS8ke3Bvc0V4dExhYmVsfWApO1xuXG4gICAgICAgIGxldCBkaXN0TWlkZGxlVG9MYWJlbCA9IE1hdGguc3FydChcbiAgICAgICAgICAgIChwb3NNaWRkbGVbMF0gLSBwb3NMYWJlbFswXSkgKiogMiArXG4gICAgICAgICAgICAgICAgKHBvc01pZGRsZVsxXSAtIHBvc0xhYmVsWzFdKSAqKiAyXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGxhYmVsc1tpXSAhPT0gXCJcIikge1xuICAgICAgICAgICAgLy8gc2hpZnQgcG9zTGFiZWwsIHRvd2FyZCB0aGUgbWlkZGxlIHBvaW50XG4gICAgICAgICAgICBwb3NMYWJlbFswXSA9XG4gICAgICAgICAgICAgICAgcG9zTGFiZWxbMF0gK1xuICAgICAgICAgICAgICAgICgocG9zTWlkZGxlWzBdIC0gcG9zTGFiZWxbMF0pICogbGFiZWxXaWR0aCkgLyBkaXN0TWlkZGxlVG9MYWJlbDtcbiAgICAgICAgICAgIHBvc0xhYmVsWzFdID1cbiAgICAgICAgICAgICAgICBwb3NMYWJlbFsxXSArXG4gICAgICAgICAgICAgICAgKChwb3NNaWRkbGVbMV0gLSBwb3NMYWJlbFsxXSkgKiBsYWJlbFdpZHRoKSAvIGRpc3RNaWRkbGVUb0xhYmVsO1xuXG4gICAgICAgICAgICAvLyBzaGlmdCBwb3NFeHRMYWJlbFxuICAgICAgICAgICAgcG9zRXh0TGFiZWxbMF0gPVxuICAgICAgICAgICAgICAgIChyYWRpdXMgKiAwLjk5IC0gZXh0TGFiZWxXaWR0aCAtIDMpICpcbiAgICAgICAgICAgICAgICAobWlkQW5nbGUgPCBNYXRoLlBJID8gMSA6IC0xKTsgLy8gbXVsdGlwbHkgYnkgMSBvciAtMSB0byBwdXQgaXQgb24gdGhlIHJpZ2h0IG9yIG9uIHRoZSBsZWZ0XG4gICAgICAgIH1cblxuICAgICAgICBkaXN0TWlkZGxlVG9MYWJlbCA9IE1hdGguc3FydChcbiAgICAgICAgICAgIChwb3NNaWRkbGVbMF0gLSBwb3NMYWJlbFswXSkgKiogMiArXG4gICAgICAgICAgICAgICAgKHBvc01pZGRsZVsxXSAtIHBvc0xhYmVsWzFdKSAqKiAyXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IGRpc3RFeHRMYWJlbFRvTGFiZWwgPSBNYXRoLnNxcnQoXG4gICAgICAgICAgICAocG9zRXh0TGFiZWxbMF0gLSBwb3NMYWJlbFswXSkgKiogMiArXG4gICAgICAgICAgICAgICAgKHBvc0V4dExhYmVsWzFdIC0gcG9zTGFiZWxbMV0pICoqIDJcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZGlzdE1pZGRsZVRvTGFiZWwgPiBkaXN0RXh0TGFiZWxUb0xhYmVsKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInR3byBwb2ludHNcIik7XG4gICAgICAgICAgICByZXR1cm4gW3Bvc0xhYmVsLCBwb3NFeHRMYWJlbF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtwb3NMYWJlbCwgcG9zTWlkZGxlLCBwb3NFeHRMYWJlbF07XG4gICAgfVxuXG4gICAgLy8gQWRkIGxpbmVzIGJldHdlZW4gc2VjdG9ycyBhbmQgZXh0ZXJuYWwgbGFiZWxzXG4gICAgbGV0IGxpbmVzID0gc2VjdG9yc0dyb3VwXG4gICAgICAgIC5zZWxlY3RBbGwoXCJsaW5lXCIpXG4gICAgICAgIC5kYXRhKHBpZVZhbHVlcylcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcInBvbHlsaW5lXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiYmxhY2tcIilcbiAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMSlcbiAgICAgICAgLmF0dHIoXCJwb2ludHNcIiwgZnVuY3Rpb24gKGFyY09iajogYW55LCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChzaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxhYmVsc1tpXSA9PT0gXCJcIiB8fCBpc0xhYmVsSGlkZGVuKGFyY09iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4dExhYmVsc1tpXSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFBvaW50c0ZvckNvbm5lY3Rpb25MaW5lcyhhcmNPYmosIGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0TGFiZWxzW2ldICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRQb2ludHNGb3JDb25uZWN0aW9uTGluZXMoYXJjT2JqLCBpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWF4aXNcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJQaWVDaGFydChcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgcGllSW5mbzogUGllSW5mb1xuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJQaWVDaGFydFwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIXBpZUluZm8pIHJldHVybjtcblxuICAgIC8vIHJldHVybiBcIlVuZGVyIGNvbnN0cnVjdGlvblwiO1xuXG4gICAgbGV0IGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMgPSB7fTtcbiAgICBjaGFydEVsZW1lbnRzID0gY3JlYXRlQXJlYXMoY2hhcnRFbGVtZW50cywgY2FudmFzLCByZW5kZXJJbmZvLCBwaWVJbmZvKTtcblxuICAgIC8vIFNldCBkZWZhdWx0IGRhdGFDb2xvciBpZiBubyBkYXRhQ29sb3IgcHJvdmlkZWRcbiAgICBsZXQgZGVmYXVsdERhdGFDb2xvciA9IGQzLnNjaGVtZVNwZWN0cmFsW3BpZUluZm8uZGF0YUNvbG9yLmxlbmd0aF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwaWVJbmZvLmRhdGFDb2xvci5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocGllSW5mby5kYXRhQ29sb3JbaV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHBpZUluZm8uZGF0YUNvbG9yW2ldID0gZGVmYXVsdERhdGFDb2xvcltpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlclRpdGxlKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgcGllSW5mbyk7XG5cbiAgICByZW5kZXJQaWUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBwaWVJbmZvKTtcblxuICAgIGlmIChwaWVJbmZvLnNob3dMZWdlbmQpIHtcbiAgICAgICAgcmVuZGVyTGVnZW5kKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgcGllSW5mbyk7XG4gICAgfVxuXG4gICAgc2V0Q2hhcnRTY2FsZShjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8pO1xufVxuIiwiaW1wb3J0IGFycmF5IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBkZXNjZW5kaW5nIGZyb20gXCIuL2Rlc2NlbmRpbmcuanNcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi9pZGVudGl0eS5qc1wiO1xuaW1wb3J0IHt0YXV9IGZyb20gXCIuL21hdGguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciB2YWx1ZSA9IGlkZW50aXR5LFxuICAgICAgc29ydFZhbHVlcyA9IGRlc2NlbmRpbmcsXG4gICAgICBzb3J0ID0gbnVsbCxcbiAgICAgIHN0YXJ0QW5nbGUgPSBjb25zdGFudCgwKSxcbiAgICAgIGVuZEFuZ2xlID0gY29uc3RhbnQodGF1KSxcbiAgICAgIHBhZEFuZ2xlID0gY29uc3RhbnQoMCk7XG5cbiAgZnVuY3Rpb24gcGllKGRhdGEpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgbiA9IChkYXRhID0gYXJyYXkoZGF0YSkpLmxlbmd0aCxcbiAgICAgICAgaixcbiAgICAgICAgayxcbiAgICAgICAgc3VtID0gMCxcbiAgICAgICAgaW5kZXggPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGFyY3MgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGEwID0gK3N0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgZGEgPSBNYXRoLm1pbih0YXUsIE1hdGgubWF4KC10YXUsIGVuZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgLSBhMCkpLFxuICAgICAgICBhMSxcbiAgICAgICAgcCA9IE1hdGgubWluKE1hdGguYWJzKGRhKSAvIG4sIHBhZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpLFxuICAgICAgICBwYSA9IHAgKiAoZGEgPCAwID8gLTEgOiAxKSxcbiAgICAgICAgdjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodiA9IGFyY3NbaW5kZXhbaV0gPSBpXSA9ICt2YWx1ZShkYXRhW2ldLCBpLCBkYXRhKSkgPiAwKSB7XG4gICAgICAgIHN1bSArPSB2O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9wdGlvbmFsbHkgc29ydCB0aGUgYXJjcyBieSBwcmV2aW91c2x5LWNvbXB1dGVkIHZhbHVlcyBvciBieSBkYXRhLlxuICAgIGlmIChzb3J0VmFsdWVzICE9IG51bGwpIGluZGV4LnNvcnQoZnVuY3Rpb24oaSwgaikgeyByZXR1cm4gc29ydFZhbHVlcyhhcmNzW2ldLCBhcmNzW2pdKTsgfSk7XG4gICAgZWxzZSBpZiAoc29ydCAhPSBudWxsKSBpbmRleC5zb3J0KGZ1bmN0aW9uKGksIGopIHsgcmV0dXJuIHNvcnQoZGF0YVtpXSwgZGF0YVtqXSk7IH0pO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgYXJjcyEgVGhleSBhcmUgc3RvcmVkIGluIHRoZSBvcmlnaW5hbCBkYXRhJ3Mgb3JkZXIuXG4gICAgZm9yIChpID0gMCwgayA9IHN1bSA/IChkYSAtIG4gKiBwYSkgLyBzdW0gOiAwOyBpIDwgbjsgKytpLCBhMCA9IGExKSB7XG4gICAgICBqID0gaW5kZXhbaV0sIHYgPSBhcmNzW2pdLCBhMSA9IGEwICsgKHYgPiAwID8gdiAqIGsgOiAwKSArIHBhLCBhcmNzW2pdID0ge1xuICAgICAgICBkYXRhOiBkYXRhW2pdLFxuICAgICAgICBpbmRleDogaSxcbiAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgIHN0YXJ0QW5nbGU6IGEwLFxuICAgICAgICBlbmRBbmdsZTogYTEsXG4gICAgICAgIHBhZEFuZ2xlOiBwXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBhcmNzO1xuICB9XG5cbiAgcGllLnZhbHVlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHZhbHVlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHBpZSkgOiB2YWx1ZTtcbiAgfTtcblxuICBwaWUuc29ydFZhbHVlcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3J0VmFsdWVzID0gXywgc29ydCA9IG51bGwsIHBpZSkgOiBzb3J0VmFsdWVzO1xuICB9O1xuXG4gIHBpZS5zb3J0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNvcnQgPSBfLCBzb3J0VmFsdWVzID0gbnVsbCwgcGllKSA6IHNvcnQ7XG4gIH07XG5cbiAgcGllLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RhcnRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBwaWUpIDogc3RhcnRBbmdsZTtcbiAgfTtcblxuICBwaWUuZW5kQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZW5kQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IGVuZEFuZ2xlO1xuICB9O1xuXG4gIHBpZS5wYWRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBwaWUpIDogcGFkQW5nbGU7XG4gIH07XG5cbiAgcmV0dXJuIHBpZTtcbn1cbiIsImltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgUmVuZGVySW5mbywgU3VtbWFyeUluZm8gfSBmcm9tIFwiLi9kYXRhXCI7XG5pbXBvcnQgKiBhcyBleHByIGZyb20gXCIuL2V4cHJcIjtcblxuZnVuY3Rpb24gY2hlY2tTdW1tYXJ5VGVtcGxhdGVWYWxpZChzdW1tYXJ5VGVtcGxhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyU3VtbWFyeShcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgc3VtbWFyeUluZm86IFN1bW1hcnlJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclN1bW1hcnlcIik7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFzdW1tYXJ5SW5mbykgcmV0dXJuO1xuXG4gICAgLy8gY29uc29sZS5sb2coc3VtbWFyeUluZm8udGVtcGxhdGUpO1xuICAgIGxldCBvdXRwdXRTdW1tYXJ5ID0gXCJcIjtcbiAgICBpZiAoY2hlY2tTdW1tYXJ5VGVtcGxhdGVWYWxpZChzdW1tYXJ5SW5mby50ZW1wbGF0ZSkpIHtcbiAgICAgICAgb3V0cHV0U3VtbWFyeSA9IHN1bW1hcnlJbmZvLnRlbXBsYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcIkludmFsaWQgc3VtbWFyeSB0ZW1wbGF0ZVwiO1xuICAgIH1cblxuICAgIGxldCByZXRSZXNvbHZlZFRlbXBsYXRlID0gZXhwci5yZXNvbHZlVGVtcGxhdGUob3V0cHV0U3VtbWFyeSwgcmVuZGVySW5mbyk7XG4gICAgLy8gY29uc29sZS5sb2cocmV0UmVzb2x2ZWRUZW1wbGF0ZSk7XG4gICAgaWYgKHJldFJlc29sdmVkVGVtcGxhdGUuc3RhcnRzV2l0aChcIkVycm9yOlwiKSkge1xuICAgICAgICByZXR1cm4gcmV0UmVzb2x2ZWRUZW1wbGF0ZTtcbiAgICB9XG4gICAgb3V0cHV0U3VtbWFyeSA9IHJldFJlc29sdmVkVGVtcGxhdGU7XG5cbiAgICBpZiAob3V0cHV0U3VtbWFyeSAhPT0gXCJcIikge1xuICAgICAgICBsZXQgdGV4dEJsb2NrID0gZDMuc2VsZWN0KGNhbnZhcykuYXBwZW5kKFwiZGl2XCIpO1xuICAgICAgICBpZiAob3V0cHV0U3VtbWFyeS5pbmNsdWRlcyhcIlxcblwiKSB8fCBvdXRwdXRTdW1tYXJ5LmluY2x1ZGVzKFwiXFxcXG5cIikpIHtcbiAgICAgICAgICAgIGxldCBvdXRwdXRMaW5lcyA9IG91dHB1dFN1bW1hcnkuc3BsaXQoLyhcXG58XFxcXG4pLyk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhvdXRwdXRMaW5lcyk7XG4gICAgICAgICAgICBmb3IgKGxldCBvdXRwdXRMaW5lIG9mIG91dHB1dExpbmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG91dHB1dExpbmUgIT09IFwiXFxuXCIgJiYgb3V0cHV0TGluZSAhPT0gXCJcXFxcblwiKVxuICAgICAgICAgICAgICAgIHRleHRCbG9jay5hcHBlbmQoXCJkaXZcIikudGV4dChvdXRwdXRMaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHRCbG9jay50ZXh0KG91dHB1dFN1bW1hcnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1bW1hcnlJbmZvLnN0eWxlICE9PSBcIlwiKSB7XG4gICAgICAgICAgICB0ZXh0QmxvY2suYXR0cihcInN0eWxlXCIsIHN1bW1hcnlJbmZvLnN0eWxlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7XG4gICAgRGF0YXNldHMsXG4gICAgRGF0YVBvaW50LFxuICAgIFJlbmRlckluZm8sXG4gICAgTW9udGhJbmZvLFxuICAgIERhdGFzZXQsXG4gICAgU2l6ZSxcbiAgICBUcmFuc2Zvcm0sXG4gICAgQ2hhcnRFbGVtZW50cyxcbiAgICBHcmFwaFR5cGUsXG4gICAgVmFsdWVUeXBlLFxufSBmcm9tIFwiLi9kYXRhXCI7XG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcblxubGV0IGxvZ1RvQ29uc29sZSA9IGZhbHNlO1xubGV0IHJhdGlvQ2VsbFRvVGV4dCA9IDIuODtcbmxldCByYXRpb0RvdFRvVGV4dCA9IDEuODtcblxuaW50ZXJmYWNlIERheUluZm8ge1xuICAgIGRhdGU6IHN0cmluZztcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIHNjYWxlZFZhbHVlOiBudW1iZXI7XG4gICAgZGF5SW5Nb250aDogbnVtYmVyO1xuICAgIGlzSW5UaGlzTW9udGg6IGJvb2xlYW47XG4gICAgaXNPdXRPZkRhdGFSYW5nZTogYm9vbGVhbjtcbiAgICByb3c6IG51bWJlcjtcbiAgICBjb2w6IG51bWJlcjtcbiAgICBzaG93Q2lyY2xlOiBib29sZWFuO1xuICAgIHN0cmVha0luOiBib29sZWFuO1xuICAgIHN0cmVha091dDogYm9vbGVhbjtcbiAgICBhbm5vdGF0aW9uOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHNldENoYXJ0U2NhbGUoXG4gICAgX2NhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pIHtcbiAgICBsZXQgY2FudmFzID0gZDMuc2VsZWN0KF9jYW52YXMpO1xuICAgIGxldCBzdmcgPSBjaGFydEVsZW1lbnRzLnN2ZztcbiAgICBsZXQgc3ZnV2lkdGggPSBwYXJzZUZsb2F0KHN2Zy5hdHRyKFwid2lkdGhcIikpO1xuICAgIGxldCBzdmdIZWlnaHQgPSBwYXJzZUZsb2F0KHN2Zy5hdHRyKFwiaGVpZ2h0XCIpKTtcbiAgICBzdmcuYXR0cihcIndpZHRoXCIsIG51bGwpXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpXG4gICAgICAgIC5hdHRyKFwidmlld0JveFwiLCBgMCAwICR7c3ZnV2lkdGh9ICR7c3ZnSGVpZ2h0fWApXG4gICAgICAgIC5hdHRyKFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInhNaWRZTWlkIG1lZXRcIik7XG5cbiAgICBpZiAocmVuZGVySW5mby5maXRQYW5lbFdpZHRoKSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjYW52YXMuc3R5bGUoXG4gICAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgICAoc3ZnV2lkdGggKiByZW5kZXJJbmZvLmZpeGVkU2NhbGUpLnRvU3RyaW5nKCkgKyBcInB4XCJcbiAgICAgICAgKTtcbiAgICAgICAgY2FudmFzLnN0eWxlKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIChzdmdIZWlnaHQgKiByZW5kZXJJbmZvLmZpeGVkU2NhbGUpLnRvU3RyaW5nKCkgKyBcInB4XCJcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRvTmV4dERhdGFzZXQocmVuZGVySW5mbzogUmVuZGVySW5mbywgbW9udGhJbmZvOiBNb250aEluZm8pOiBib29sZWFuIHtcbiAgICBsZXQgZGF0YXNldElkcyA9IG1vbnRoSW5mby5kYXRhc2V0O1xuICAgIGlmIChkYXRhc2V0SWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlOyAvLyBmYWxzZSBpZiBzZWxlY3RlZCBkYXRhc2V0IG5vdCBjaGFuZ2VkXG5cbiAgICBsZXQgZGF0YXNldCA9IG51bGw7XG4gICAgaWYgKG1vbnRoSW5mby5zZWxlY3RlZERhdGFzZXQgPT09IG51bGwpIHtcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldElkIG9mIGRhdGFzZXRJZHMpIHtcbiAgICAgICAgICAgIGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XG4gICAgICAgICAgICBpZiAoZGF0YXNldCAmJiAhZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldCA9IGRhdGFzZXQuZ2V0SWQoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyB0cnVlIGlmIHNlbGVjdGVjIGRhdGFzZXQgY2hhbmdlZFxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGN1ckRhdGFzZXRJZCA9IG1vbnRoSW5mby5zZWxlY3RlZERhdGFzZXQ7XG4gICAgICAgIGxldCBjdXJJbmRleCA9IGRhdGFzZXRJZHMuZmluZEluZGV4KChpZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGlkID09PSBjdXJEYXRhc2V0SWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY3VySW5kZXggPj0gMCkge1xuICAgICAgICAgICAgaWYgKGN1ckluZGV4ID09PSBtb250aEluZm8uZGF0YXNldC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gc2VhcmNoIGZyb20gc3RhcnRcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBkYXRhc2V0SWQgb2YgZGF0YXNldElkcykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YXNldCAmJiAhZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldCA9IGRhdGFzZXQuZ2V0SWQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIHRydWUgaWYgc2VsZWN0ZWMgZGF0YXNldCBjaGFuZ2VkXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VySW5kZXgrKztcbiAgICAgICAgICAgICAgICBsZXQgZGF0YXNldElkID0gZGF0YXNldElkc1tjdXJJbmRleF07XG4gICAgICAgICAgICAgICAgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcbiAgICAgICAgICAgICAgICBtb250aEluZm8uc2VsZWN0ZWREYXRhc2V0ID0gZGF0YXNldElkO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhc2V0ICYmICFkYXRhc2V0LmdldFF1ZXJ5KCkudXNlZEFzWERhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9OZXh0RGF0YXNldChyZW5kZXJJbmZvLCBtb250aEluZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXJlYXMoXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgbW9udGhJbmZvOiBNb250aEluZm9cbik6IENoYXJ0RWxlbWVudHMge1xuICAgIC8vIGNsZWFuIGFyZWFzXG4gICAgZDMuc2VsZWN0KGNhbnZhcykuc2VsZWN0KFwiI3N2Z1wiKS5yZW1vdmUoKTtcbiAgICB2YXIgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjaGFydEVsZW1lbnRzKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIGQzLnNlbGVjdChjaGFydEVsZW1lbnRzW3Byb3BzW2ldXSkucmVtb3ZlKCk7XG4gICAgICAgIGRlbGV0ZSBjaGFydEVsZW1lbnRzW3Byb3BzW2ldXTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRFbGVtZW50cyk7XG5cbiAgICAvLyB3aG9sZSBhcmVhIGZvciBwbG90dGluZywgaW5jbHVkZXMgbWFyZ2luc1xuICAgIGxldCBzdmcgPSBkM1xuICAgICAgICAuc2VsZWN0KGNhbnZhcylcbiAgICAgICAgLmFwcGVuZChcInN2Z1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwic3ZnXCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0XG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxuICAgICAgICApO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJzdmdcIl0gPSBzdmc7XG5cbiAgICAvLyBncmFwaEFyZWEsIGluY2x1ZGVzIGNoYXJ0QXJlYSwgdGl0bGUsIGxlZ2VuZFxuICAgIGxldCBncmFwaEFyZWEgPSBzdmdcbiAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImdyYXBoQXJlYVwiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICsgcmVuZGVySW5mby5tYXJnaW4ucmlnaHQpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxuICAgICAgICApO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJncmFwaEFyZWFcIl0gPSBncmFwaEFyZWE7XG5cbiAgICAvLyBkYXRhQXJlYSwgdW5kZXIgZ3JhcGhBcmVhLCBpbmNsdWRlcyBwb2ludHMsIGxpbmVzLCB4QXhpcywgeUF4aXNcbiAgICBsZXQgZGF0YUFyZWEgPSBncmFwaEFyZWFcbiAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImRhdGFBcmVhXCIpXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgpXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCk7XG4gICAgY2hhcnRFbGVtZW50c1tcImRhdGFBcmVhXCJdID0gZGF0YUFyZWE7XG5cbiAgICByZXR1cm4gY2hhcnRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cywgbW9udGhJbmZvOiBNb250aEluZm8pIHtcbiAgICBsZXQgY2lyY2xlcyA9IGNoYXJ0RWxlbWVudHMuc3ZnLnNlbGVjdEFsbChcImNpcmNsZVwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhjaXJjbGVzKTtcbiAgICBmb3IgKGxldCBjaXJjbGUgb2YgY2lyY2xlcykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhjaXJjbGUpO1xuICAgICAgICBsZXQgaWQgPSBkMy5zZWxlY3QoY2lyY2xlKS5hdHRyKFwiaWRcIik7XG4gICAgICAgIGlmIChpZCAmJiBpZC5zdGFydHNXaXRoKFwidHJhY2tlci1zZWxlY3RlZC1jaXJjbGUtXCIpKSB7XG4gICAgICAgICAgICBkMy5zZWxlY3QoY2lyY2xlKS5zdHlsZShcInN0cm9rZVwiLCBcIm5vbmVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb250aEluZm8uc2VsZWN0ZWREYXRlID0gXCJcIjtcblxuICAgIGNoYXJ0RWxlbWVudHMubW9uaXRvci50ZXh0KFwiXCIpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJNb250aEhlYWRlcihcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBtb250aEluZm86IE1vbnRoSW5mbyxcbiAgICBjdXJNb250aERhdGU6IE1vbWVudFxuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJNb250aEhlYWRlclwiKVxuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFtb250aEluZm8pIHJldHVybjtcblxuICAgIGxldCBjdXJEYXRhc2V0SWQgPSBtb250aEluZm8uc2VsZWN0ZWREYXRhc2V0O1xuICAgIGlmIChjdXJEYXRhc2V0SWQgPT09IG51bGwpIHJldHVybjtcbiAgICBsZXQgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoY3VyRGF0YXNldElkKTtcbiAgICBpZiAoIWRhdGFzZXQpIHJldHVybjtcbiAgICBsZXQgZGF0YXNldE5hbWUgPSBkYXRhc2V0LmdldE5hbWUoKTtcblxuICAgIGxldCBjdXJNb250aCA9IGN1ck1vbnRoRGF0ZS5tb250aCgpOyAvLyAwfjExXG4gICAgbGV0IGN1ckRheXNJbk1vbnRoID0gY3VyTW9udGhEYXRlLmRheXNJbk1vbnRoKCk7IC8vIDI4fjMxXG4gICAgbGV0IGN1clllYXIgPSBjdXJNb250aERhdGUueWVhcigpO1xuXG4gICAgbGV0IG1heERheVRleHRTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcIjMwXCIsIFwidHJhY2tlci1tb250aC1sYWJlbFwiKTtcbiAgICBsZXQgY2VsbFNpemUgPVxuICAgICAgICBNYXRoLm1heChtYXhEYXlUZXh0U2l6ZS53aWR0aCwgbWF4RGF5VGV4dFNpemUuaGVpZ2h0KSAqIHJhdGlvQ2VsbFRvVGV4dDtcbiAgICBsZXQgZG90UmFkaXVzID0gKChjZWxsU2l6ZSAvIHJhdGlvQ2VsbFRvVGV4dCkgKiByYXRpb0RvdFRvVGV4dCkgLyAyLjA7XG5cbiAgICBsZXQgaGVhZGVyWWVhclRleHQgPSBjdXJNb250aERhdGUuZm9ybWF0KFwiWVlZWVwiKTtcbiAgICBsZXQgaGVhZGVyTW9udGhUZXh0ID0gY3VyTW9udGhEYXRlLmZvcm1hdChcIk1NTVwiKTtcbiAgICBsZXQgaGVhZGVyWWVhclNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxuICAgICAgICBoZWFkZXJZZWFyVGV4dCxcbiAgICAgICAgXCJ0cmFja2VyLW1vbnRoLWhlYWRlci15ZWFyXCJcbiAgICApO1xuICAgIGxldCBoZWFkZXJNb250aFNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxuICAgICAgICBoZWFkZXJNb250aFRleHQsXG4gICAgICAgIFwidHJhY2tlci1tb250aC1oZWFkZXItbW9udGhcIlxuICAgICk7XG5cbiAgICBsZXQgaGVhZGVySGVpZ2h0ID0gMDtcbiAgICBsZXQgeVNwYWNpbmcgPSA4O1xuXG4gICAgLy8gQXBwZW5kIGhlYWRlciBncm91cFxuICAgIGxldCBoZWFkZXJHcm91cCA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLmFwcGVuZChcImdcIik7XG5cbiAgICAvLyBoYWVkZXIgbW9udGhcbiAgICBsZXQgaGVhZGVyTW9udGhDb2xvciA9IG51bGw7XG4gICAgaWYgKG1vbnRoSW5mby5oZWFkZXJNb250aENvbG9yKSB7XG4gICAgICAgIGhlYWRlck1vbnRoQ29sb3IgPSBtb250aEluZm8uaGVhZGVyTW9udGhDb2xvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobW9udGhJbmZvLmNvbG9yKSB7XG4gICAgICAgICAgICBoZWFkZXJNb250aENvbG9yID0gbW9udGhJbmZvLmNvbG9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBoZWFkZXJNb250aCA9IGhlYWRlckdyb3VwXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC50ZXh0KGhlYWRlck1vbnRoVGV4dCkgLy8gcGl2b3QgYXQgY2VudGVyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ0aXRsZU1vbnRoXCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICsgY2VsbFNpemUgLyA0LjAgKyBcIixcIiArIGhlYWRlck1vbnRoU2l6ZS5oZWlnaHQgKyBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLWhlYWRlci1tb250aFwiKVxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJkZWZhdWx0XCIpXG4gICAgICAgIC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XG4gICAgICAgICAgICBjbGVhclNlbGVjdGlvbihjaGFydEVsZW1lbnRzLCBtb250aEluZm8pO1xuICAgICAgICB9KTtcblxuICAgIGlmIChoZWFkZXJNb250aENvbG9yKSB7XG4gICAgICAgIGhlYWRlck1vbnRoLnN0eWxlKFwiZmlsbFwiLCBoZWFkZXJNb250aENvbG9yKTtcbiAgICB9XG4gICAgaGVhZGVySGVpZ2h0ICs9IGhlYWRlck1vbnRoU2l6ZS5oZWlnaHQ7XG5cbiAgICAvLyBoZWFkZXIgeWVhclxuICAgIGxldCBoZWFkZXJZZWFyQ29sb3IgPSBudWxsO1xuICAgIGlmIChtb250aEluZm8uaGVhZGVyWWVhckNvbG9yKSB7XG4gICAgICAgIGhlYWRlclllYXJDb2xvciA9IG1vbnRoSW5mby5oZWFkZXJZZWFyQ29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1vbnRoSW5mby5jb2xvcikge1xuICAgICAgICAgICAgaGVhZGVyWWVhckNvbG9yID0gbW9udGhJbmZvLmNvbG9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBoZWFkZXJZZWFyID0gaGVhZGVyR3JvdXBcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQoaGVhZGVyWWVhclRleHQpIC8vIHBpdm90IGF0IGNlbnRlclxuICAgICAgICAuYXR0cihcImlkXCIsIFwidGl0bGVZZWFyXCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICBjZWxsU2l6ZSAvIDQuMCArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIChoZWFkZXJIZWlnaHQgKyBoZWFkZXJZZWFyU2l6ZS5oZWlnaHQpICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLWhlYWRlci15ZWFyXCIpXG4gICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIilcbiAgICAgICAgLmF0dHIoXCJmb250LXdlaWdodFwiLCBcImJvbGRcIilcbiAgICAgICAgLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XG4gICAgICAgIH0pO1xuXG4gICAgaWYgKGhlYWRlclllYXJDb2xvcikge1xuICAgICAgICBoZWFkZXJZZWFyLnN0eWxlKFwiZmlsbFwiLCBoZWFkZXJZZWFyQ29sb3IpO1xuICAgIH1cblxuICAgIGhlYWRlckhlaWdodCArPSBoZWFkZXJZZWFyU2l6ZS5oZWlnaHQ7XG5cbiAgICAvLyBkYXRhc2V0IHJvdGF0b3JcbiAgICBsZXQgZGF0YXNldE5hbWVTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcbiAgICAgICAgZGF0YXNldE5hbWUsXG4gICAgICAgIFwidHJhY2tlci1tb250aC10aXRsZS1yb3RhdG9yXCJcbiAgICApO1xuICAgIGlmIChcbiAgICAgICAgbW9udGhJbmZvLm1vZGUgPT09IFwiY2lyY2xlXCIgfHxcbiAgICAgICAgKG1vbnRoSW5mby5tb2RlID09PSBcImFubm90YXRpb25cIiAmJlxuICAgICAgICAgICAgIW1vbnRoSW5mby5zaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cylcbiAgICApIHtcbiAgICAgICAgbGV0IGRhdGFzZXRSb3RhdG9yID0gaGVhZGVyR3JvdXBcbiAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAudGV4dChkYXRhc2V0TmFtZSlcbiAgICAgICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgICAgICAzLjUgKiBjZWxsU2l6ZSArXG4gICAgICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldE5hbWVTaXplLmhlaWdodCArXG4gICAgICAgICAgICAgICAgICAgIFwiKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC10aXRsZS1yb3RhdG9yXCIpXG4gICAgICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpXG4gICAgICAgICAgICAub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xuICAgICAgICAgICAgICAgIC8vIHNob3cgbmV4dCB0YXJnZXRcbiAgICAgICAgICAgICAgICBpZiAodG9OZXh0RGF0YXNldChyZW5kZXJJbmZvLCBtb250aEluZm8pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIGNpcmNsZXNcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcblxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aEluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJNb250aERhdGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcInJvdGF0b3JcIl0gPSBkYXRhc2V0Um90YXRvcjtcbiAgICB9XG5cbiAgICAvLyB2YWx1ZSBtb25pdG9yXG4gICAgbGV0IG1vbml0b3JUZXh0U2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXG4gICAgICAgIFwiMC4wMDAwXCIsXG4gICAgICAgIFwidHJhY2tlci1tb250aC10aXRsZS1tb25pdG9yXCJcbiAgICApO1xuICAgIGxldCBtb25pdG9yID0gaGVhZGVyR3JvdXBcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQoXCJcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcIm1vbml0b3JcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtdGl0bGUtbW9uaXRvclwiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgMy41ICogY2VsbFNpemUgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICAoZGF0YXNldE5hbWVTaXplLmhlaWdodCArIG1vbml0b3JUZXh0U2l6ZS5oZWlnaHQpICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcInBvaW50ZXJcIilcbiAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBtb250aEluZm8uc2VsZWN0ZWRSaW5nQ29sb3IpO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJtb25pdG9yXCJdID0gbW9uaXRvcjtcblxuICAgIC8vIGFycm93IGxlZnRcbiAgICBsZXQgYXJyb3dTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcIjxcIiwgXCJ0cmFja2VyLW1vbnRoLXRpdGxlLWFycm93XCIpO1xuICAgIGxldCBhcnJvd0xlZnQgPSBoZWFkZXJHcm91cFxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChcIjxcIikgLy8gcGl2b3QgYXQgY2VudGVyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJhcnJvd0xlZnRcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIDUuNSAqIGNlbGxTaXplICtcbiAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgKGhlYWRlckhlaWdodCAvIDIgKyBhcnJvd1NpemUuaGVpZ2h0IC8gMikgK1xuICAgICAgICAgICAgICAgIFwiKVwiXG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtdGl0bGUtYXJyb3dcIilcbiAgICAgICAgLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwibGVmdCBhcnJvdyBjbGlja2VkXCIpO1xuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcbiAgICAgICAgICAgIG1vbnRoSW5mby5zZWxlY3RlZERhdGUgPSBcIlwiO1xuICAgICAgICAgICAgbGV0IHByZXZNb250aERhdGUgPSBjdXJNb250aERhdGUuY2xvbmUoKS5hZGQoLTEsIFwibW9udGhcIik7XG4gICAgICAgICAgICByZWZyZXNoKFxuICAgICAgICAgICAgICAgIGNhbnZhcyxcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLFxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgICAgICAgICAgbW9udGhJbmZvLFxuICAgICAgICAgICAgICAgIHByZXZNb250aERhdGVcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcInBvaW50ZXJcIik7XG5cbiAgICAvLyBhcnJvdyByaWdodFxuICAgIGxldCBhcnJvd1JpZ2h0ID0gaGVhZGVyR3JvdXBcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQoXCI+XCIpIC8vIHBpdm90IGF0IGNlbnRlclxuICAgICAgICAuYXR0cihcImlkXCIsIFwiYXJyb3dMZWZ0XCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICA2LjUgKiBjZWxsU2l6ZSArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIChoZWFkZXJIZWlnaHQgLyAyICsgYXJyb3dTaXplLmhlaWdodCAvIDIpICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLXRpdGxlLWFycm93XCIpXG4gICAgICAgIC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJpZ2h0IGFycm93IGNsaWNrZWRcIik7XG4gICAgICAgICAgICBjbGVhclNlbGVjdGlvbihjaGFydEVsZW1lbnRzLCBtb250aEluZm8pO1xuXG4gICAgICAgICAgICBsZXQgbmV4dE1vbnRoRGF0ZSA9IGN1ck1vbnRoRGF0ZS5jbG9uZSgpLmFkZCgxLCBcIm1vbnRoXCIpO1xuICAgICAgICAgICAgcmVmcmVzaChcbiAgICAgICAgICAgICAgICBjYW52YXMsXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cyxcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICAgICAgICAgIG1vbnRoSW5mbyxcbiAgICAgICAgICAgICAgICBuZXh0TW9udGhEYXRlXG4gICAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpO1xuXG4gICAgLy8gYXJyb3cgdG9kYXlcbiAgICBsZXQgYXJyb3dUb2RheSA9IGhlYWRlckdyb3VwXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC50ZXh0KFwi4pemXCIpIC8vIHBpdm90IGF0IGNlbnRlclxuICAgICAgICAuYXR0cihcImlkXCIsIFwiYXJyb3dUb2RheVwiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgNiAqIGNlbGxTaXplICtcbiAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgKGhlYWRlckhlaWdodCAvIDIgKyBhcnJvd1NpemUuaGVpZ2h0IC8gMikgK1xuICAgICAgICAgICAgICAgIFwiKVwiXG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtdGl0bGUtYXJyb3dcIilcbiAgICAgICAgLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwidG9kYXkgYXJyb3cgY2xpY2tlZFwiKTtcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XG5cbiAgICAgICAgICAgIGxldCB0b2RheURhdGUgPSBoZWxwZXIuZ2V0RGF0ZVRvZGF5KHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICByZWZyZXNoKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbW9udGhJbmZvLCB0b2RheURhdGUpO1xuICAgICAgICB9KVxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpO1xuXG4gICAgaGVhZGVySGVpZ2h0ICs9IHlTcGFjaW5nO1xuXG4gICAgLy8gd2VlayBkYXkgbmFtZXNcbiAgICBsZXQgd2Vla2RheU5hbWVzID0gW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdO1xuICAgIGlmIChtb250aEluZm8uc3RhcnRXZWVrT24udG9Mb3dlckNhc2UoKSA9PT0gXCJtb25cIikge1xuICAgICAgICB3ZWVrZGF5TmFtZXMucHVzaCh3ZWVrZGF5TmFtZXMuc2hpZnQoKSk7XG4gICAgfVxuICAgIGxldCB3ZWVrZGF5TmFtZVNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxuICAgICAgICB3ZWVrZGF5TmFtZXNbMF0sXG4gICAgICAgIFwidHJhY2tlci1tb250aC13ZWVrZGF5XCJcbiAgICApO1xuICAgIGxldCB3ZWVrRGF5cyA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhXG4gICAgICAgIC5zZWxlY3RBbGwoXCJ3ZWVrRGF5c1wiKVxuICAgICAgICAuZGF0YSh3ZWVrZGF5TmFtZXMpXG4gICAgICAgIC5lbnRlcigpXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC50ZXh0KGZ1bmN0aW9uIChuOiBzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbiAobjogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgIGxldCBzdHJUcmFuc2xhdGUgPVxuICAgICAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICAoaSArIDAuNSkgKiBjZWxsU2l6ZSArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIChoZWFkZXJIZWlnaHQgKyB3ZWVrZGF5TmFtZVNpemUuaGVpZ2h0KSArXG4gICAgICAgICAgICAgICAgXCIpXCI7XG4gICAgICAgICAgICByZXR1cm4gc3RyVHJhbnNsYXRlO1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC13ZWVrZGF5XCIpXG4gICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIilcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKVxuICAgICAgICAub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcbiAgICAgICAgfSk7XG4gICAgaGVhZGVySGVpZ2h0ICs9IHdlZWtkYXlOYW1lU2l6ZS5oZWlnaHQgKyB5U3BhY2luZztcblxuICAgIC8vIGRpdmlkaW5nIGxpbmVcbiAgICBsZXQgZGl2aWRpbmdMaW5lSGVpZ2h0ID0gMTtcbiAgICBsZXQgZGl2aWRpbmdMaW5lQ29sb3IgPSBudWxsO1xuICAgIGlmIChtb250aEluZm8uZGl2aWRpbmdMaW5lQ29sb3IpIHtcbiAgICAgICAgZGl2aWRpbmdMaW5lQ29sb3IgPSBtb250aEluZm8uZGl2aWRpbmdMaW5lQ29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1vbnRoSW5mby5jb2xvcikge1xuICAgICAgICAgICAgZGl2aWRpbmdMaW5lQ29sb3IgPSBtb250aEluZm8uY29sb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IGRpdmlkaW5nTGluZSA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhXG4gICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwieFwiLCAwKVxuICAgICAgICAuYXR0cihcInlcIiwgaGVhZGVySGVpZ2h0KVxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIDYuNSAqIGNlbGxTaXplICsgd2Vla2RheU5hbWVTaXplLndpZHRoKVxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCBkaXZpZGluZ0xpbmVIZWlnaHQpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLWRpdmlkaW5nLWxpbmVcIik7XG5cbiAgICBpZiAoZGl2aWRpbmdMaW5lQ29sb3IpIHtcbiAgICAgICAgZGl2aWRpbmdMaW5lLnN0eWxlKFwiZmlsbFwiLCBkaXZpZGluZ0xpbmVDb2xvcik7XG4gICAgfVxuICAgIGhlYWRlckhlaWdodCArPSBkaXZpZGluZ0xpbmVIZWlnaHQ7XG5cbiAgICBoZWFkZXJHcm91cC5hdHRyKFwiaGVpZ2h0XCIsIGhlYWRlckhlaWdodCk7XG4gICAgY2hhcnRFbGVtZW50c1tcImhlYWRlclwiXSA9IGhlYWRlckdyb3VwO1xuXG4gICAgLy8gTW92ZSBzaWJsaW5nIGFyZWFzXG4gICAgaGVscGVyLm1vdmVBcmVhKGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEsIDAsIGhlYWRlckhlaWdodCk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlck1vbnRoRGF5cyhcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBtb250aEluZm86IE1vbnRoSW5mbyxcbiAgICBjdXJNb250aERhdGU6IE1vbWVudFxuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJNb250aERheXNcIik7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XG4gICAgLy8gY29uc29sZS5sb2cobW9udGhJbmZvKTtcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIW1vbnRoSW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IG1vZGUgPSBtb250aEluZm8ubW9kZTtcbiAgICBpZiAobW9kZSAhPT0gXCJjaXJjbGVcIiAmJiBtb2RlICE9PSBcImFubm90YXRpb25cIikge1xuICAgICAgICByZXR1cm4gXCJVbmtub3duIG1vbnRoIHZpZXcgbW9kZVwiO1xuICAgIH1cblxuICAgIGxldCBjdXJEYXRhc2V0SWQgPSBtb250aEluZm8uc2VsZWN0ZWREYXRhc2V0O1xuICAgIGlmIChjdXJEYXRhc2V0SWQgPT09IG51bGwpIHJldHVybjtcbiAgICBsZXQgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoY3VyRGF0YXNldElkKTtcbiAgICBpZiAoIWRhdGFzZXQpIHJldHVybjtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcblxuICAgIGxldCBjdXJEYXRhc2V0SW5kZXggPSBtb250aEluZm8uZGF0YXNldC5maW5kSW5kZXgoKGlkKSA9PiB7XG4gICAgICAgIHJldHVybiBpZCA9PT0gY3VyRGF0YXNldElkO1xuICAgIH0pO1xuICAgIGlmIChjdXJEYXRhc2V0SWQgPCAwKSBjdXJEYXRhc2V0SW5kZXggPSAwO1xuICAgIGxldCB0aHJlc2hvbGQgPSBtb250aEluZm8udGhyZXNob2xkW2N1ckRhdGFzZXRJbmRleF07XG5cbiAgICBsZXQgY3VyTW9udGggPSBjdXJNb250aERhdGUubW9udGgoKTsgLy8gMH4xMVxuICAgIGxldCBjdXJEYXlzSW5Nb250aCA9IGN1ck1vbnRoRGF0ZS5kYXlzSW5Nb250aCgpOyAvLyAyOH4zMVxuXG4gICAgbGV0IG1heERheVRleHRTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcIjMwXCIsIFwidHJhY2tlci1tb250aC1sYWJlbFwiKTtcbiAgICBsZXQgY2VsbFNpemUgPVxuICAgICAgICBNYXRoLm1heChtYXhEYXlUZXh0U2l6ZS53aWR0aCwgbWF4RGF5VGV4dFNpemUuaGVpZ2h0KSAqIHJhdGlvQ2VsbFRvVGV4dDtcbiAgICBsZXQgZG90UmFkaXVzID0gKChjZWxsU2l6ZSAvIHJhdGlvQ2VsbFRvVGV4dCkgKiByYXRpb0RvdFRvVGV4dCkgLyAyLjA7XG4gICAgbGV0IHN0cmVha1dpZHRoID0gKGNlbGxTaXplIC0gZG90UmFkaXVzICogMi4wKSAvIDIuMDtcbiAgICBsZXQgc3RyZWFrSGVpZ2h0ID0gMztcblxuICAgIC8vIEdldCBtaW4gYW5kIG1heFxuICAgIGxldCB5TWluID0gZDMubWluKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xuICAgIGlmIChtb250aEluZm8ueU1pbltjdXJEYXRhc2V0SW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgIHlNaW4gPSBtb250aEluZm8ueU1pbltjdXJEYXRhc2V0SW5kZXhdO1xuICAgIH1cbiAgICBsZXQgeU1heCA9IGQzLm1heChkYXRhc2V0LmdldFZhbHVlcygpKTtcbiAgICBpZiAobW9udGhJbmZvLnlNYXhbY3VyRGF0YXNldEluZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICB5TWF4ID0gbW9udGhJbmZvLnlNYXhbY3VyRGF0YXNldEluZGV4XTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coYHlNaW46JHt5TWlufSwgeU1heDoke3lNYXh9YCk7XG4gICAgbGV0IGFsbG93U2NhbGVkVmFsdWUgPSB0cnVlO1xuICAgIGlmICh5TWF4ID09PSBudWxsIHx8IHlNaW4gPT09IG51bGwgfHwgeU1heCA8PSB5TWluKSB7XG4gICAgICAgIC8vIHNjYWxlZFZhbHVlIGNhbiBub3QgYmUgY2FsY3VsYXRlZCwgZG8gbm90IHVzZSBncmFkaWVudCBjb2xvclxuICAgICAgICBhbGxvd1NjYWxlZFZhbHVlID0gZmFsc2U7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2NhbGVkVmFsdWUgbm90IGFsbG93ZWRcIik7XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgYW5kIGVuZFxuICAgIGNvbnN0IG1vbnRoU3RhcnREYXRlID0gY3VyTW9udGhEYXRlLmNsb25lKCkuc3RhcnRPZihcIm1vbnRoXCIpO1xuICAgIGxldCBzdGFydERhdGUgPSBtb250aFN0YXJ0RGF0ZVxuICAgICAgICAuY2xvbmUoKVxuICAgICAgICAuc3VidHJhY3QobW9udGhTdGFydERhdGUuZGF5KCksIFwiZGF5c1wiKTtcbiAgICBpZiAobW9udGhJbmZvLnN0YXJ0V2Vla09uLnRvTG93ZXJDYXNlKCkgPT09IFwibW9uXCIpIHtcbiAgICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlLmFkZCgxLCBcImRheXNcIik7XG4gICAgfVxuICAgIGNvbnN0IG1vbnRoRW5kRGF0ZSA9IGN1ck1vbnRoRGF0ZS5jbG9uZSgpLmVuZE9mKFwibW9udGhcIik7XG4gICAgbGV0IGVuZERhdGUgPSBtb250aEVuZERhdGUuY2xvbmUoKS5hZGQoNyAtIG1vbnRoRW5kRGF0ZS5kYXkoKSAtIDEsIFwiZGF5c1wiKTtcbiAgICBpZiAobW9udGhJbmZvLnN0YXJ0V2Vla09uLnRvTG93ZXJDYXNlKCkgPT09IFwibW9uXCIpIHtcbiAgICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuYWRkKDEsIFwiZGF5c1wiKTtcbiAgICB9XG4gICAgY29uc3QgZGF0YVN0YXJ0RGF0ZSA9IGRhdGFzZXQuZ2V0U3RhcnREYXRlKCk7XG4gICAgY29uc3QgZGF0YUVuZERhdGUgPSBkYXRhc2V0LmdldEVuZERhdGUoKTtcbiAgICAvLyBjb25zb2xlLmxvZyhtb250aFN0YXJ0RGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpKTtcbiAgICAvLyBjb25zb2xlLmxvZyhzdGFydERhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSk7XG5cbiAgICAvLyBhbm5vdGF0aW9uc1xuICAgIGxldCBzaG93QW5ub3RhdGlvbiA9IG1vbnRoSW5mby5zaG93QW5ub3RhdGlvbjtcbiAgICBsZXQgYW5ub3RhdGlvbnMgPSBtb250aEluZm8uYW5ub3RhdGlvbjtcbiAgICBsZXQgY3VyQW5ub3RhdGlvbiA9IGFubm90YXRpb25zW2N1ckRhdGFzZXRJbmRleF07XG4gICAgbGV0IHNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzID0gbW9udGhJbmZvLnNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzO1xuXG4gICAgLy8gUHJlcGFyZSBkYXRhIGZvciBncmFwaFxuICAgIGxldCBkYXlzSW5Nb250aFZpZXc6IEFycmF5PERheUluZm8+ID0gW107XG4gICAgbGV0IGluZENvbCA9IDA7XG4gICAgbGV0IGluZFJvdyA9IDA7XG4gICAgbGV0IGluZCA9IDA7XG4gICAgZm9yIChcbiAgICAgICAgbGV0IGN1ckRhdGUgPSBzdGFydERhdGUuY2xvbmUoKTtcbiAgICAgICAgY3VyRGF0ZSA8PSBlbmREYXRlO1xuICAgICAgICBjdXJEYXRlLmFkZCgxLCBcImRheXNcIilcbiAgICApIHtcbiAgICAgICAgLy8gbm90IHN1cmUgd2h5IHdlIG5lZWQgdG8gZG8gdGhpcyB0byBzdGFibGl6ZSB0aGUgZGF0ZVxuICAgICAgICAvLyBzb21ldGltZXMsIGN1clZhbHVlIGlzIHdyb25nIHdpdGhvdXQgZG9pbmcgdGhpc1xuICAgICAgICBjdXJEYXRlID0gaGVscGVyLnN0clRvRGF0ZShcbiAgICAgICAgICAgIGhlbHBlci5kYXRlVG9TdHIoY3VyRGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KSxcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFxuICAgICAgICApO1xuICAgICAgICBpZiAoY3VyRGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpID09PSBcIjIwMjEtMDktMTNcIikge1xuICAgICAgICAgICAgbG9nVG9Db25zb2xlID0gZmFsc2U7IC8vIENoYW5nZSB0aGlzIHRvIGRvIGR1YnVnZ2luZ1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbnRoSW5mby5zdGFydFdlZWtPbi50b0xvd2VyQ2FzZSgpID09PSBcIm1vblwiKSB7XG4gICAgICAgICAgICBpbmRDb2wgPSBjdXJEYXRlLmRheSgpIC0gMTtcbiAgICAgICAgICAgIGlmIChpbmRDb2wgPCAwKSB7XG4gICAgICAgICAgICAgICAgaW5kQ29sID0gNjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZFJvdyA9IE1hdGguZmxvb3IoaW5kIC8gNyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRDb2wgPSBjdXJEYXRlLmRheSgpOyAvLyAwfjZcbiAgICAgICAgICAgIGluZFJvdyA9IE1hdGguZmxvb3IoaW5kIC8gNyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpcyB0aGlzIGRheSBpbiB0aGlzIG1vbnRoXG4gICAgICAgIGxldCBpc0luVGhpc01vbnRoID0gdHJ1ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY3VyRGF0ZS5kaWZmKG1vbnRoU3RhcnREYXRlKSA8IDAgfHxcbiAgICAgICAgICAgIGN1ckRhdGUuZGlmZihtb250aEVuZERhdGUpID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlzSW5UaGlzTW9udGggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpcyB0aGlzIGRheSBvdXQgb2YgZGF0YSByYW5nZVxuICAgICAgICBsZXQgaXNPdXRPZkRhdGFSYW5nZSA9IHRydWU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGFTdGFydERhdGUgJiZcbiAgICAgICAgICAgIGRhdGFFbmREYXRlICYmXG4gICAgICAgICAgICBjdXJEYXRlLmRpZmYoZGF0YVN0YXJ0RGF0ZSkgPj0gMCAmJlxuICAgICAgICAgICAgY3VyRGF0ZS5kaWZmKGRhdGFFbmREYXRlKSA8PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgaXNPdXRPZkRhdGFSYW5nZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VyVmFsdWUgPSBkYXRhc2V0LmdldFZhbHVlKGN1ckRhdGUpO1xuICAgICAgICBpZiAobG9nVG9Db25zb2xlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhc2V0KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGhlbHBlci5kYXRlVG9TdHIoY3VyRGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjdXJWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzaG93Q2lyY2xlXG4gICAgICAgIGxldCBzaG93Q2lyY2xlID0gZmFsc2U7XG4gICAgICAgIGlmICghbW9udGhJbmZvLmNpcmNsZUNvbG9yQnlWYWx1ZSkge1xuICAgICAgICAgICAgLy8gc2hvd24gb3Igbm90IHNob3duXG4gICAgICAgICAgICBpZiAoY3VyVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VyVmFsdWUgPiB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NpcmNsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFhbGxvd1NjYWxlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1clZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJWYWx1ZSA+IHRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NpcmNsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNob3dDaXJjbGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2NhbGVkVmFsdWVcbiAgICAgICAgbGV0IHNjYWxlZFZhbHVlID0gbnVsbDtcbiAgICAgICAgaWYgKG1vbnRoSW5mby5jaXJjbGVDb2xvckJ5VmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChhbGxvd1NjYWxlZFZhbHVlICYmIGN1clZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2NhbGVkVmFsdWUgPSAoY3VyVmFsdWUgLSB5TWluKSAvICh5TWF4IC0geU1pbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvZ1RvQ29uc29sZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coeU1pbik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh5TWF4KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHNjYWxlZFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHN0cmVha0luIGFuZCBzdHJlYWtPdXRcbiAgICAgICAgbGV0IG5leHRWYWx1ZSA9IGRhdGFzZXQuZ2V0VmFsdWUoY3VyRGF0ZSwgMSk7XG4gICAgICAgIGxldCBwcmV2VmFsdWUgPSBkYXRhc2V0LmdldFZhbHVlKGN1ckRhdGUsIC0xKTtcbiAgICAgICAgbGV0IHN0cmVha0luID0gZmFsc2U7XG4gICAgICAgIGlmIChjdXJWYWx1ZSAhPT0gbnVsbCAmJiBjdXJWYWx1ZSA+IHRocmVzaG9sZCkge1xuICAgICAgICAgICAgaWYgKHByZXZWYWx1ZSAhPT0gbnVsbCAmJiBwcmV2VmFsdWUgPiB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICBzdHJlYWtJbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0cmVha091dCA9IGZhbHNlO1xuICAgICAgICBpZiAoY3VyVmFsdWUgIT09IG51bGwgJiYgY3VyVmFsdWUgPiB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgIGlmIChuZXh0VmFsdWUgIT09IG51bGwgJiYgbmV4dFZhbHVlID4gdGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFrT3V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobG9nVG9Db25zb2xlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBgcHJlVmFsdWU6ICR7cHJldlZhbHVlfSwgY3VyVmFsdWU6ICR7Y3VyVmFsdWV9LCBuZXh0VmFsdWU6ICR7bmV4dFZhbHVlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtb250aEluZm8udGhyZXNob2xkKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBzdHJlYWtJbjogJHtzdHJlYWtJbn0sIHN0cmVha091dDogJHtzdHJlYWtPdXR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGV4dEFubm90YXRpb24gPSBcIlwiO1xuICAgICAgICBpZiAoc2hvd0Fubm90YXRpb24pIHtcbiAgICAgICAgICAgIGlmICghc2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VyVmFsdWUgPiB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFubm90YXRpb24gPSBjdXJBbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZGF0YXNldElkIG9mIG1vbnRoSW5mby5kYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhc2V0SW5kZXggPSBtb250aEluZm8uZGF0YXNldC5maW5kSW5kZXgoKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQgPT09IGRhdGFzZXRJZDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhc2V0SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSByZW5kZXJJbmZvLmRhdGFzZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0VmFsdWUoY3VyRGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdCA9IG1vbnRoSW5mby50aHJlc2hvbGRbZGF0YXNldEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBudWxsICYmIHYgPiB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFubm90YXRpb24gKz0gYW5ub3RhdGlvbnNbZGF0YXNldEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRheXNJbk1vbnRoVmlldy5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IGhlbHBlci5kYXRlVG9TdHIoY3VyRGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KSxcbiAgICAgICAgICAgIHZhbHVlOiBjdXJWYWx1ZSxcbiAgICAgICAgICAgIHNjYWxlZFZhbHVlOiBzY2FsZWRWYWx1ZSxcbiAgICAgICAgICAgIGRheUluTW9udGg6IGN1ckRhdGUuZGF0ZSgpLFxuICAgICAgICAgICAgaXNJblRoaXNNb250aDogaXNJblRoaXNNb250aCxcbiAgICAgICAgICAgIGlzT3V0T2ZEYXRhUmFuZ2U6IGlzT3V0T2ZEYXRhUmFuZ2UsXG4gICAgICAgICAgICByb3c6IGluZFJvdyxcbiAgICAgICAgICAgIGNvbDogaW5kQ29sLFxuICAgICAgICAgICAgc2hvd0NpcmNsZTogc2hvd0NpcmNsZSxcbiAgICAgICAgICAgIHN0cmVha0luOiBzdHJlYWtJbixcbiAgICAgICAgICAgIHN0cmVha091dDogc3RyZWFrT3V0LFxuICAgICAgICAgICAgYW5ub3RhdGlvbjogdGV4dEFubm90YXRpb24sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGluZCsrO1xuXG4gICAgICAgIC8vIERpc2FibGUgbG9nZ2luZyBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGxvb3BcbiAgICAgICAgaWYgKGxvZ1RvQ29uc29sZSkge1xuICAgICAgICAgICAgbG9nVG9Db25zb2xlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coZGF5c0luTW9udGhWaWV3KTtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXlzSW5Nb250aFZpZXcuZmlsdGVyKGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgLy8gICAgIHJldHVybiBkLnN0cmVha0luO1xuICAgIC8vIH0pKTtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXlzSW5Nb250aFZpZXcuZmlsdGVyKGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgLy8gICAgIHJldHVybiBkLnN0cmVha091dDtcbiAgICAvLyB9KSk7XG5cbiAgICAvLyBzY2FsZVxuICAgIGxldCB0b3RhbERheUJsb2NrV2lkdGggPSAoaW5kQ29sICsgMSkgKiBjZWxsU2l6ZTtcbiAgICBsZXQgdG90YWxCbG9ja0hlaWdodCA9IChpbmRSb3cgKyAxKSAqIGNlbGxTaXplO1xuICAgIGxldCBzY2FsZSA9IGQzXG4gICAgICAgIC5zY2FsZUxpbmVhcigpXG4gICAgICAgIC5kb21haW4oWy0wLjUsIDYuNV0pXG4gICAgICAgIC5yYW5nZShbMCwgdG90YWxEYXlCbG9ja1dpZHRoXSk7XG5cbiAgICAvLyBzdHJlYWsgbGluZXNcbiAgICBpZiAobW9kZSA9PT0gXCJjaXJjbGVcIiAmJiBtb250aEluZm8uc2hvd0NpcmNsZSAmJiBtb250aEluZm8uc2hvd1N0cmVhaykge1xuICAgICAgICBsZXQgc3RyZWFrQ29sb3IgPSBcIiM2OWIzYTJcIjtcbiAgICAgICAgaWYgKG1vbnRoSW5mby5jaXJjbGVDb2xvcikge1xuICAgICAgICAgICAgc3RyZWFrQ29sb3IgPSBtb250aEluZm8uY2lyY2xlQ29sb3I7XG4gICAgICAgIH0gZWxzZSBpZiAobW9udGhJbmZvLmNvbG9yKSB7XG4gICAgICAgICAgICBzdHJlYWtDb2xvciA9IG1vbnRoSW5mby5jb2xvcjtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhzdHJlYWtDb2xvcik7XG5cbiAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLnNlbGVjdEFsbChcInN0cmVha0luXCIpXG4gICAgICAgICAgICAuZGF0YShcbiAgICAgICAgICAgICAgICBkYXlzSW5Nb250aFZpZXcuZmlsdGVyKGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkLnN0cmVha0luO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC8vIC5hdHRyKFwiaWRcIiwgZnVuY3Rpb24oZDogRGF5SW5mbykge1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiBcImluXCIgKyBkLmRhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbiAgICAgICAgICAgIC8vIH0pXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICBsZXQgeCA9IHNjYWxlKGQuY29sKSAtIGRvdFJhZGl1cyAtIHN0cmVha1dpZHRoO1xuICAgICAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FsZShkLnJvdykgLSBzdHJlYWtIZWlnaHQgLyAyLjA7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBzdHJlYWtXaWR0aClcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHN0cmVha0hlaWdodClcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICBpZiAoZC5zaG93Q2lyY2xlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbW9udGhJbmZvLmNpcmNsZUNvbG9yQnlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVha0NvbG9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChkLnNjYWxlZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDMuaW50ZXJwb2xhdGVMYWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aGl0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVha0NvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICApKGQuc2NhbGVkVmFsdWUgKiAwLjggKyAwLjIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3R5bGUoXCJvcGFjaXR5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBkLmlzT3V0T2ZEYXRhUmFuZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgKG1vbnRoSW5mby5kaW1Ob3RJbk1vbnRoICYmICFkLmlzSW5UaGlzTW9udGgpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwic3RyZWFrT3V0XCIpXG4gICAgICAgICAgICAuZGF0YShcbiAgICAgICAgICAgICAgICBkYXlzSW5Nb250aFZpZXcuZmlsdGVyKGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkLnN0cmVha091dDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAvLyAuYXR0cihcImlkXCIsIGZ1bmN0aW9uKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gXCJvdXRcIiArIGQuZGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xuICAgICAgICAgICAgLy8gfSlcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIGxldCB4ID0gc2NhbGUoZC5jb2wpICsgZG90UmFkaXVzO1xuICAgICAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FsZShkLnJvdykgLSBzdHJlYWtIZWlnaHQgLyAyLjA7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBzdHJlYWtXaWR0aClcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHN0cmVha0hlaWdodClcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICBpZiAoZC5zaG93Q2lyY2xlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbW9udGhJbmZvLmNpcmNsZUNvbG9yQnlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVha0NvbG9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChkLnNjYWxlZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDMuaW50ZXJwb2xhdGVMYWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aGl0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVha0NvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICApKGQuc2NhbGVkVmFsdWUgKiAwLjggKyAwLjIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3R5bGUoXCJvcGFjaXR5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBkLmlzT3V0T2ZEYXRhUmFuZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgKG1vbnRoSW5mby5kaW1Ob3RJbk1vbnRoICYmICFkLmlzSW5UaGlzTW9udGgpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBjaXJjbGVzXG4gICAgbGV0IGNpcmNsZUNvbG9yID0gXCIjNjliM2EyXCI7XG4gICAgaWYgKG1vbnRoSW5mby5jaXJjbGVDb2xvcikge1xuICAgICAgICBjaXJjbGVDb2xvciA9IG1vbnRoSW5mby5jaXJjbGVDb2xvcjtcbiAgICB9IGVsc2UgaWYgKG1vbnRoSW5mby5jb2xvcikge1xuICAgICAgICBjaXJjbGVDb2xvciA9IG1vbnRoSW5mby5jb2xvcjtcbiAgICB9XG4gICAgaWYgKG1vZGUgPT09IFwiY2lyY2xlXCIgJiYgbW9udGhJbmZvLnNob3dDaXJjbGUpIHtcbiAgICAgICAgbGV0IGRvdHMgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwiZG90XCIpXG4gICAgICAgICAgICAuZGF0YShkYXlzSW5Nb250aFZpZXcpXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIGRvdFJhZGl1cylcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5jb2wpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICBpZiAoZC5zaG93Q2lyY2xlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbW9udGhJbmZvLmNpcmNsZUNvbG9yQnlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNpcmNsZUNvbG9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChkLnNjYWxlZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2NhbGVkQ29sb3IgPSBkMy5pbnRlcnBvbGF0ZUxhYihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIndoaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICkoZC5zY2FsZWRWYWx1ZSAqIDAuOCArIDAuMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhkLnNjYWxlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHNjYWxlZENvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FsZWRDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gXCJub25lXCI7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN0eWxlKFwib3BhY2l0eVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZC5pc091dE9mRGF0YVJhbmdlIHx8XG4gICAgICAgICAgICAgICAgICAgIChtb250aEluZm8uZGltTm90SW5Nb250aCAmJiAhZC5pc0luVGhpc01vbnRoKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC4yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMS4wO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XG4gICAgfVxuXG4gICAgLy8gdG9kYXkgcmluZ3NcbiAgICBsZXQgdG9kYXkgPSBoZWxwZXIuZGF0ZVRvU3RyKHdpbmRvdy5tb21lbnQoKSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcbiAgICBpZiAobW9kZSA9PT0gXCJjaXJjbGVcIiAmJiBtb250aEluZm8uc2hvd1RvZGF5UmluZykge1xuICAgICAgICBsZXQgdG9kYXlSaW5ncyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJ0b2RheVJpbmdcIilcbiAgICAgICAgICAgIC5kYXRhKFxuICAgICAgICAgICAgICAgIGRheXNJbk1vbnRoVmlldy5maWx0ZXIoZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQuZGF0ZSA9PT0gdG9kYXk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXG4gICAgICAgICAgICAuYXR0cihcInJcIiwgZG90UmFkaXVzICogMC45KVxuICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FsZShkLmNvbCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJjeVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FsZShkLnJvdyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtdG9kYXktY2lyY2xlXCIpIC8vIHN0cm9rZSBub3Qgd29ya3M/P1xuICAgICAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKTtcblxuICAgICAgICBpZiAobW9udGhJbmZvLnRvZGF5UmluZ0NvbG9yICE9PSBcIlwiKSB7XG4gICAgICAgICAgICB0b2RheVJpbmdzLnN0eWxlKFwic3Ryb2tlXCIsIG1vbnRoSW5mby50b2RheVJpbmdDb2xvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2RheVJpbmdzLnN0eWxlKFwic3Ryb2tlXCIsIFwid2hpdGVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZWxlY3RlZCByaW5nc1xuICAgIGlmIChtb2RlID09PSBcImNpcmNsZVwiICYmIG1vbnRoSW5mby5zaG93U2VsZWN0ZWRSaW5nKSB7XG4gICAgICAgIGxldCBzZWxlY3RlZFJpbmdzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLnNlbGVjdEFsbChcInNlbGVjdGVkUmluZ1wiKVxuICAgICAgICAgICAgLmRhdGEoZGF5c0luTW9udGhWaWV3KVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiclwiLCBkb3RSYWRpdXMpXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYWxlKGQuY29sKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYWxlKGQucm93KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidHJhY2tlci1zZWxlY3RlZC1jaXJjbGUtXCIgKyBkLmRhdGU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtc2VsZWN0ZWQtY2lyY2xlXCIpIC8vIHN0cm9rZSBub3Qgd29ya3M/P1xuICAgICAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKVxuICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIFwibm9uZVwiKTtcbiAgICB9XG5cbiAgICAvLyBsYWJlbHNcbiAgICBsZXQgZGF5TGFiYWxzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAuc2VsZWN0QWxsKFwiZGF5TGFiZWxcIilcbiAgICAgICAgLmRhdGEoZGF5c0luTW9udGhWaWV3KVxuICAgICAgICAuZW50ZXIoKVxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIGQuZGF5SW5Nb250aC50b1N0cmluZygpO1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgbGV0IHRyYW5zWCA9IHNjYWxlKGQuY29sKTtcbiAgICAgICAgICAgIGxldCB0cmFuc1kgPSBzY2FsZShkLnJvdykgKyBtYXhEYXlUZXh0U2l6ZS5oZWlnaHQgLyA0O1xuICAgICAgICAgICAgbGV0IHN0clRyYW5zbGF0ZSA9IFwidHJhbnNsYXRlKFwiICsgdHJhbnNYICsgXCIsXCIgKyB0cmFuc1kgKyBcIilcIjtcblxuICAgICAgICAgICAgcmV0dXJuIHN0clRyYW5zbGF0ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLnN0eWxlKFwiZmlsbC1vcGFjaXR5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZC5pc091dE9mRGF0YVJhbmdlIHx8XG4gICAgICAgICAgICAgICAgKG1vbnRoSW5mby5kaW1Ob3RJbk1vbnRoICYmICFkLmlzSW5UaGlzTW9udGgpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMC4yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDEuMDtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJkYXRlXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gZC5kYXRlO1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cihcInZhbHVlXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gZC52YWx1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJ2YWx1ZVR5cGVcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBWYWx1ZVR5cGVbZGF0YXNldC52YWx1ZVR5cGVdO1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC1sYWJlbFwiKVxuICAgICAgICAub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xuICAgICAgICAgICAgLy8gY2xlYXIgY2lyY2xlc1xuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcbiAgICAgICAgICAgIC8vIHNob3cgbmV3IHNlbGVjdGVkIGNpcmNsZVxuICAgICAgICAgICAgbGV0IGRhdGUgPSBkMy5zZWxlY3QodGhpcykuYXR0cihcImRhdGVcIik7XG4gICAgICAgICAgICBtb250aEluZm8uc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICAgICAgICAgIGlmIChtb250aEluZm8uc2hvd1NlbGVjdGVkUmluZykge1xuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgICAgICAgICAgLnNlbGVjdChcIiN0cmFja2VyLXNlbGVjdGVkLWNpcmNsZS1cIiArIGRhdGUpXG4gICAgICAgICAgICAgICAgICAgIC5zdHlsZShcInN0cm9rZVwiLCBtb250aEluZm8uc2VsZWN0ZWRSaW5nQ29sb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc2hvdyB2YWx1ZSBvbiBtb25pdG9yXG4gICAgICAgICAgICBpZiAobW9udGhJbmZvLnNob3dTZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0clZhbHVlID0gZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJ2YWx1ZVwiKTtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVUeXBlID0gZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJ2YWx1ZVR5cGVcIik7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlVGV4dCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlVHlwZSA9PT0gXCJUaW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRheVN0YXJ0ID0gd2luZG93Lm1vbWVudChcIjAwOjAwXCIsIFwiSEg6bW1cIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0aWNrVGltZSA9IGRheVN0YXJ0LmFkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoc3RyVmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzZWNvbmRzXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVUZXh0ID0gdGlja1RpbWUuZm9ybWF0KFwiSEg6bW1cIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVUZXh0ID0gc3RyVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMubW9uaXRvci50ZXh0KHZhbHVlVGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcInBvaW50ZXJcIik7XG5cbiAgICAvLyBhbm5vdGF0aW9uXG4gICAgaWYgKG1vZGUgPT09IFwiYW5ub3RhdGlvblwiICYmIHNob3dBbm5vdGF0aW9uKSB7XG4gICAgICAgIGxldCBkYXlBbm5vdGF0aW9uID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImRheUFubm90YXRpb25cIilcbiAgICAgICAgICAgIC5kYXRhKGRheXNJbk1vbnRoVmlldylcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZC5hbm5vdGF0aW9uO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRyYW5zWCA9IHNjYWxlKGQuY29sKTtcbiAgICAgICAgICAgICAgICBsZXQgdHJhbnNZID0gc2NhbGUoZC5yb3cpICsgbWF4RGF5VGV4dFNpemUuaGVpZ2h0IC8gNDtcbiAgICAgICAgICAgICAgICBpZiAoZC5hbm5vdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zWSArPSBkb3RSYWRpdXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBzdHJUcmFuc2xhdGUgPSBcInRyYW5zbGF0ZShcIiArIHRyYW5zWCArIFwiLFwiICsgdHJhbnNZICsgXCIpXCI7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyVHJhbnNsYXRlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLWFubm90YXRpb25cIik7XG4gICAgfVxuXG4gICAgLy8gRXhwYW5kIGFyZWFzXG4gICAgbGV0IHN2Z1dpZHRoID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLnN2Zy5hdHRyKFwid2lkdGhcIikpO1xuICAgIGxldCBzdmdIZWlnaHQgPSBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuc3ZnLmF0dHIoXCJoZWlnaHRcIikpO1xuICAgIGxldCBncmFwaEFyZWFXaWR0aCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEuYXR0cihcIndpZHRoXCIpKTtcbiAgICBsZXQgZ3JhcGhBcmVhSGVpZ2h0ID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLmdyYXBoQXJlYS5hdHRyKFwiaGVpZ2h0XCIpKTtcbiAgICBsZXQgdG90YWxIZWlnaHQgPVxuICAgICAgICA3ICogY2VsbFNpemUgKyBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuaGVhZGVyLmF0dHIoXCJoZWlnaHRcIikpO1xuICAgIGxldCB0b3RhbFdpZHRoID0gNyAqIGNlbGxTaXplO1xuICAgIGlmICh0b3RhbEhlaWdodCA+IHN2Z0hlaWdodCkge1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgMCwgdG90YWxIZWlnaHQgLSBzdmdIZWlnaHQpO1xuICAgIH1cbiAgICBpZiAodG90YWxXaWR0aCA+IHN2Z1dpZHRoKSB7XG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCB0b3RhbFdpZHRoIC0gc3ZnV2lkdGgsIDApO1xuICAgIH1cbiAgICBpZiAodG90YWxIZWlnaHQgPiBncmFwaEFyZWFIZWlnaHQpIHtcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0b3RhbEhlaWdodCAtIGdyYXBoQXJlYUhlaWdodFxuICAgICAgICApO1xuICAgIH1cbiAgICBpZiAodG90YWxXaWR0aCA+IGdyYXBoQXJlYVdpZHRoKSB7XG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCB0b3RhbFdpZHRoIC0gZ3JhcGhBcmVhV2lkdGgsIDApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVmcmVzaChcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBtb250aEluZm86IE1vbnRoSW5mbyxcbiAgICBjdXJNb250aERhdGU6IE1vbWVudFxuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZWZyZXNoXCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xuICAgIGlmICghcmVuZGVySW5mbyB8fCAhcmVuZGVyTW9udGgpIHJldHVybjtcblxuICAgIGNoYXJ0RWxlbWVudHMgPSBjcmVhdGVBcmVhcyhjaGFydEVsZW1lbnRzLCBjYW52YXMsIHJlbmRlckluZm8sIG1vbnRoSW5mbyk7XG5cbiAgICAvLyByZW5kZXJcbiAgICByZW5kZXJNb250aEhlYWRlcihcbiAgICAgICAgY2FudmFzLFxuICAgICAgICBjaGFydEVsZW1lbnRzLFxuICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICBtb250aEluZm8sXG4gICAgICAgIGN1ck1vbnRoRGF0ZVxuICAgICk7XG5cbiAgICByZW5kZXJNb250aERheXMoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBtb250aEluZm8sIGN1ck1vbnRoRGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNb250aChcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgbW9udGhJbmZvOiBNb250aEluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTW9udGhcIik7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XG4gICAgLy8gY29uc29sZS5sb2cobW9udGhJbmZvKTtcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIXJlbmRlck1vbnRoKSByZXR1cm47XG5cbiAgICAvLyBkYXRhc2V0XG4gICAgbGV0IGRhdGFzZXRJZHMgPSBtb250aEluZm8uZGF0YXNldDtcbiAgICBsZXQgbnVtQXZhaWxhYmxlRGF0YXNldCA9IDA7XG4gICAgZm9yIChsZXQgZGF0YXNldCBvZiByZW5kZXJJbmZvLmRhdGFzZXRzKSB7XG4gICAgICAgIGlmICghZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSB7XG4gICAgICAgICAgICBudW1BdmFpbGFibGVEYXRhc2V0Kys7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG51bUF2YWlsYWJsZURhdGFzZXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFwiTm8gYXZhaWxhYmxlIGRhdGFzZXQgZm91bmRcIjtcbiAgICB9XG4gICAgdG9OZXh0RGF0YXNldChyZW5kZXJJbmZvLCBtb250aEluZm8pO1xuICAgIGlmIChtb250aEluZm8uc2VsZWN0ZWREYXRhc2V0ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIk5vIGF2YWlsYWJsZSBkYXRhc2V0IGZvdW5kXCI7XG4gICAgfVxuXG4gICAgbGV0IGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMgPSB7fTtcbiAgICBjaGFydEVsZW1lbnRzID0gY3JlYXRlQXJlYXMoY2hhcnRFbGVtZW50cywgY2FudmFzLCByZW5kZXJJbmZvLCBtb250aEluZm8pO1xuXG4gICAgbGV0IG1vbnRoRGF0ZTogTW9tZW50ID0gbnVsbDtcbiAgICBpZiAobW9udGhJbmZvLmluaXRNb250aCkge1xuICAgICAgICBtb250aERhdGUgPSBoZWxwZXIuZ2V0RGF0ZUJ5RHVyYXRpb25Ub1RvZGF5KFxuICAgICAgICAgICAgbW9udGhJbmZvLmluaXRNb250aCxcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFxuICAgICAgICApO1xuICAgICAgICBpZiAoIW1vbnRoRGF0ZSkge1xuICAgICAgICAgICAgbGV0IGluaXRNb250aCA9IHdpbmRvdy5tb21lbnQobW9udGhJbmZvLmluaXRNb250aCwgXCJZWVlZLU1NXCIsIHRydWUpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaW5pdE1vbnRoKTtcbiAgICAgICAgICAgIGlmIChpbml0TW9udGguaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgbW9udGhEYXRlID0gaW5pdE1vbnRoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJJbnZhbGlkIGluaXRNb250aFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbW9udGhEYXRlID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRlcygpLmxhc3QoKTtcbiAgICB9XG4gICAgaWYgKCFtb250aERhdGUpIHJldHVybjtcblxuICAgIHJlbmRlck1vbnRoSGVhZGVyKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbW9udGhJbmZvLCBtb250aERhdGUpO1xuXG4gICAgcmVuZGVyTW9udGhEYXlzKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbW9udGhJbmZvLCBtb250aERhdGUpO1xuXG4gICAgc2V0Q2hhcnRTY2FsZShjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8pO1xufVxuIiwiaW1wb3J0IHsgTW9tZW50IH0gZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHtcbiAgICBEYXRhc2V0cyxcbiAgICBEYXRhUG9pbnQsXG4gICAgUmVuZGVySW5mbyxcbiAgICBNb250aEluZm8sXG4gICAgSGVhdG1hcEluZm8sXG4gICAgRGF0YXNldCxcbiAgICBTaXplLFxuICAgIFRyYW5zZm9ybSxcbiAgICBDaGFydEVsZW1lbnRzLFxuICAgIEdyYXBoVHlwZSxcbiAgICBWYWx1ZVR5cGUsXG59IGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuXG5pbnRlcmZhY2UgRGF5SW5mbyB7XG4gICAgZGF0ZTogc3RyaW5nO1xuICAgIHZhbHVlOiBudW1iZXI7XG4gICAgc2NhbGVkVmFsdWU6IG51bWJlcjtcbiAgICByb3c6IG51bWJlcjtcbiAgICBjb2w6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXJlYXMoXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgaGVhdG1hcEluZm86IEhlYXRtYXBJbmZvXG4pOiBDaGFydEVsZW1lbnRzIHtcbiAgICAvLyBjbGVhbiBhcmVhc1xuICAgIGQzLnNlbGVjdChjYW52YXMpLnNlbGVjdChcIiNzdmdcIikucmVtb3ZlKCk7XG4gICAgdmFyIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY2hhcnRFbGVtZW50cyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBkMy5zZWxlY3QoY2hhcnRFbGVtZW50c1twcm9wc1tpXV0pLnJlbW92ZSgpO1xuICAgICAgICBkZWxldGUgY2hhcnRFbGVtZW50c1twcm9wc1tpXV07XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0RWxlbWVudHMpO1xuXG4gICAgLy8gd2hvbGUgYXJlYSBmb3IgcGxvdHRpbmcsIGluY2x1ZGVzIG1hcmdpbnNcbiAgICBsZXQgc3ZnID0gZDNcbiAgICAgICAgLnNlbGVjdChjYW52YXMpXG4gICAgICAgIC5hcHBlbmQoXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInN2Z1wiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5yaWdodFxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cbiAgICAgICAgKTtcbiAgICBjaGFydEVsZW1lbnRzW1wic3ZnXCJdID0gc3ZnO1xuXG4gICAgLy8gZ3JhcGhBcmVhLCBpbmNsdWRlcyBjaGFydEFyZWEsIHRpdGxlLCBsZWdlbmRcbiAgICBsZXQgZ3JhcGhBcmVhID0gc3ZnXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJncmFwaEFyZWFcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xuICAgICAgICAgICAgICAgIFwiKVwiXG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0KVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cbiAgICAgICAgKTtcbiAgICBjaGFydEVsZW1lbnRzW1wiZ3JhcGhBcmVhXCJdID0gZ3JhcGhBcmVhO1xuXG4gICAgLy8gZGF0YUFyZWEsIHVuZGVyIGdyYXBoQXJlYSwgaW5jbHVkZXMgcG9pbnRzLCBsaW5lcywgeEF4aXMsIHlBeGlzXG4gICAgbGV0IGRhdGFBcmVhID0gZ3JhcGhBcmVhXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJkYXRhQXJlYVwiKVxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKVxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQpO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJkYXRhQXJlYVwiXSA9IGRhdGFBcmVhO1xuXG4gICAgcmV0dXJuIGNoYXJ0RWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckhlYXRtYXBIZWFkZXIoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgaGVhdG1hcEluZm86IEhlYXRtYXBJbmZvLFxuICAgIGRhdGFzZXQ6IERhdGFzZXRcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTW9udGhIZWFkZXJcIilcblxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhaGVhdG1hcEluZm8pIHJldHVybjtcblxufVxuXG5mdW5jdGlvbiByZW5kZXJIZWF0bWFwRGF5cyhcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBoZWF0bWFwSW5mbzogSGVhdG1hcEluZm8sXG4gICAgZGF0YXNldDogRGF0YXNldCxcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVySGVhdG1hcERheXNcIik7XG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWhlYXRtYXBJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgY2VsbFNpemUgPSAyMDtcbiAgICBsZXQgZG90UmFkaXVzID0gY2VsbFNpemUgLyAyLjAgKiAwLjY7XG5cbiAgICAvLyBHZXQgbWluIGFuZCBtYXgsIG51bGwgdmFsdWVzIHdpbGwgYmUgdHJlYXRlZCBhcyB6ZXJvIGhlcmVcbiAgICBsZXQgeU1pbiA9IGQzLm1pbihkYXRhc2V0LmdldFZhbHVlcygpKTtcbiAgICBpZiAoaGVhdG1hcEluZm8ueU1pbiAhPT0gbnVsbCkge1xuICAgICAgICB5TWluID0gaGVhdG1hcEluZm8ueU1pbjtcbiAgICB9XG4gICAgbGV0IHlNYXggPSBkMy5tYXgoZGF0YXNldC5nZXRWYWx1ZXMoKSk7XG4gICAgaWYgKGhlYXRtYXBJbmZvLnlNYXggIT09IG51bGwpIHtcbiAgICAgICAgeU1heCA9IGhlYXRtYXBJbmZvLnlNYXg7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGB5TWluOiR7eU1pbn0sIHlNYXg6JHt5TWF4fWApO1xuXG4gICAgLy8gUHJlcGFyZSBkYXRhIGZvciBncmFwaFxuICAgIGxldCBkYXlzSW5IZWF0bWFwVmlldzogQXJyYXk8RGF5SW5mbz4gPSBbXTtcbiAgICBjb25zdCBkYXRhU3RhcnREYXRlID0gZGF0YXNldC5nZXRTdGFydERhdGUoKS5jbG9uZSgpO1xuICAgIGxldCBzdGFydERhdGUgPSBkYXRhU3RhcnREYXRlXG4gICAgICAgIC5jbG9uZSgpXG4gICAgICAgIC5zdWJ0cmFjdChkYXRhU3RhcnREYXRlLmRheSgpLCBcImRheXNcIik7XG4gICAgaWYgKGhlYXRtYXBJbmZvLnN0YXJ0V2Vla09uLnRvTG93ZXJDYXNlKCkgPT09IFwibW9uXCIpIHtcbiAgICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlLmFkZCgxLCBcImRheXNcIik7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFFbmREYXRlID0gZGF0YXNldC5nZXRFbmREYXRlKCkuY2xvbmUoKTtcbiAgICBsZXQgZW5kRGF0ZSA9IGRhdGFFbmREYXRlLmNsb25lKCkuYWRkKDcgLSBkYXRhRW5kRGF0ZS5kYXkoKSAtIDEsIFwiZGF5c1wiKTtcbiAgICBpZiAoaGVhdG1hcEluZm8uc3RhcnRXZWVrT24udG9Mb3dlckNhc2UoKSA9PT0gXCJtb25cIikge1xuICAgICAgICBlbmREYXRlID0gZW5kRGF0ZS5hZGQoMSwgXCJkYXlzXCIpO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhzdGFydERhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSk7XG4gICAgLy8gY29uc29sZS5sb2coZW5kRGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpKTtcblxuICAgIGxldCBpbmRDb2wgPSAwO1xuICAgIGxldCBpbmRSb3cgPSAwO1xuICAgIGxldCBpbmQgPSAwO1xuICAgIGZvciAoXG4gICAgICAgIGxldCBjdXJEYXRlID0gc3RhcnREYXRlLmNsb25lKCk7XG4gICAgICAgIGN1ckRhdGUgPD0gZW5kRGF0ZTtcbiAgICAgICAgY3VyRGF0ZS5hZGQoMSwgXCJkYXlzXCIpXG4gICAgKSB7XG4gICAgICAgIGlmIChoZWF0bWFwSW5mby5zdGFydFdlZWtPbi50b0xvd2VyQ2FzZSgpID09PSBcIm1vblwiKSB7XG4gICAgICAgICAgICBpbmRDb2wgPSBjdXJEYXRlLmRheSgpIC0gMTtcbiAgICAgICAgICAgIGlmIChpbmRDb2wgPCAwKSB7XG4gICAgICAgICAgICAgICAgaW5kQ29sID0gNjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZFJvdyA9IE1hdGguZmxvb3IoaW5kIC8gNyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRDb2wgPSBjdXJEYXRlLmRheSgpOyAvLyAwfjZcbiAgICAgICAgICAgIGluZFJvdyA9IE1hdGguZmxvb3IoaW5kIC8gNyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjdXJWYWx1ZSBhbmQgc2NhbGVkVmFsdWVcbiAgICAgICAgbGV0IGN1clZhbHVlID0gZGF0YXNldC5nZXRWYWx1ZShjdXJEYXRlKTtcbiAgICAgICAgbGV0IHNjYWxlZFZhbHVlID0gMDtcbiAgICAgICAgaWYgKE51bWJlci5pc051bWJlcih5TWF4KSAmJiBOdW1iZXIuaXNOdW1iZXIoeU1pbikgJiYgeU1heCAtIHlNaW4gPiAwKSB7XG4gICAgICAgICAgICBzY2FsZWRWYWx1ZSA9IChjdXJWYWx1ZSAtIHlNaW4pIC8gKHlNYXggLSB5TWluKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRheXNJbkhlYXRtYXBWaWV3LnB1c2goe1xuICAgICAgICAgICAgZGF0ZTogaGVscGVyLmRhdGVUb1N0cihjdXJEYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpLFxuICAgICAgICAgICAgdmFsdWU6IGN1clZhbHVlLFxuICAgICAgICAgICAgc2NhbGVkVmFsdWU6IHNjYWxlZFZhbHVlLFxuICAgICAgICAgICAgcm93OiBpbmRSb3csXG4gICAgICAgICAgICBjb2w6IGluZENvbCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW5kKys7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGRheXNJbkhlYXRtYXBWaWV3KTtcblxuICAgIC8vIHNjYWxlXG4gICAgbGV0IHRvdGFsRGF5QmxvY2tXaWR0aCA9IChpbmRDb2wgKyAxKSAqIGNlbGxTaXplO1xuICAgIGxldCB0b3RhbEJsb2NrSGVpZ2h0ID0gKGluZFJvdyArIDEpICogY2VsbFNpemU7XG4gICAgbGV0IHNjYWxlID0gZDNcbiAgICAgICAgLnNjYWxlTGluZWFyKClcbiAgICAgICAgLmRvbWFpbihbLTAuNSwgNi41XSlcbiAgICAgICAgLnJhbmdlKFswLCB0b3RhbERheUJsb2NrV2lkdGhdKTtcblxuICAgIC8vIGNpcmNsZXNcbiAgICBsZXQgaGVhdG1hcENvbG9yID0gXCIjNjliM2EyXCI7XG4gICAgaWYgKGhlYXRtYXBJbmZvLmNvbG9yKSB7XG4gICAgICAgIGhlYXRtYXBDb2xvciA9IGhlYXRtYXBJbmZvLmNvbG9yO1xuICAgIH1cblxuICAgIC8vIGRheXMsIHNob3duIGFzIGRvdHMgb3Igc3F1YXJlc1xuICAgIGxldCBkYXlzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAuc2VsZWN0QWxsKFwiZG90XCIpXG4gICAgICAgIC5kYXRhKGRheXNJbkhlYXRtYXBWaWV3KVxuICAgICAgICAuZW50ZXIoKVxuICAgICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXG4gICAgICAgIC5hdHRyKFwiclwiLCBkb3RSYWRpdXMpXG4gICAgICAgIC5hdHRyKFwiY3hcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FsZShkLmNvbCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwiY3lcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FsZShkLnJvdyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBkMy5pbnRlcnBvbGF0ZUxhYihcbiAgICAgICAgICAgICAgICAgICAgXCJ3aGl0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBoZWF0bWFwQ29sb3JcbiAgICAgICAgICAgICAgICApKGQuc2NhbGVkVmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJkZWZhdWx0XCIpO1xuXG4gICAgLy8gRXhwYW5kIGFyZWFzXG4gICAgbGV0IHN2Z1dpZHRoID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLnN2Zy5hdHRyKFwid2lkdGhcIikpO1xuICAgIGxldCBzdmdIZWlnaHQgPSBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuc3ZnLmF0dHIoXCJoZWlnaHRcIikpO1xuICAgIGxldCBncmFwaEFyZWFXaWR0aCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEuYXR0cihcIndpZHRoXCIpKTtcbiAgICBsZXQgZ3JhcGhBcmVhSGVpZ2h0ID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLmdyYXBoQXJlYS5hdHRyKFwiaGVpZ2h0XCIpKTtcbiAgICBsZXQgdG90YWxIZWlnaHQgPVxuICAgICAgICAoaW5kUm93ICsgMikgKiBjZWxsU2l6ZTsvLyArIHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5oZWFkZXIuYXR0cihcImhlaWdodFwiKSk7XG4gICAgbGV0IHRvdGFsV2lkdGggPSAoaW5kQ29sICsgMSkgKiBjZWxsU2l6ZTtcbiAgICBpZiAodG90YWxIZWlnaHQgPiBzdmdIZWlnaHQpIHtcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIDAsIHRvdGFsSGVpZ2h0IC0gc3ZnSGVpZ2h0KTtcbiAgICB9XG4gICAgaWYgKHRvdGFsV2lkdGggPiBzdmdXaWR0aCkge1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgdG90YWxXaWR0aCAtIHN2Z1dpZHRoLCAwKTtcbiAgICB9XG4gICAgaWYgKHRvdGFsSGVpZ2h0ID4gZ3JhcGhBcmVhSGVpZ2h0KSB7XG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKFxuICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgdG90YWxIZWlnaHQgLSBncmFwaEFyZWFIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRvdGFsV2lkdGggPiBncmFwaEFyZWFXaWR0aCkge1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgdG90YWxXaWR0aCAtIGdyYXBoQXJlYVdpZHRoLCAwKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJIZWF0bWFwKFxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBoZWF0bWFwSW5mbzogSGVhdG1hcEluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVySGVhdG1hcFwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIXJlbmRlckhlYXRtYXApIHJldHVybjtcblxuICAgIHJldHVybiBcIlVuZGVyIGNvbnN0cnVjdGlvblwiO1xuXG4gICAgbGV0IGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMgPSB7fTtcbiAgICBjaGFydEVsZW1lbnRzID0gY3JlYXRlQXJlYXMoY2hhcnRFbGVtZW50cywgY2FudmFzLCByZW5kZXJJbmZvLCBoZWF0bWFwSW5mbyk7XG5cbiAgICBsZXQgdG9kYXkgPSB3aW5kb3cubW9tZW50KCk7XG4gICAgbGV0IGxhc3REYXRhTW9udGhEYXRlID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRlcygpLmxhc3QoKTtcblxuICAgIGxldCBkYXRhc2V0SWQgPSBwYXJzZUZsb2F0KGhlYXRtYXBJbmZvLmRhdGFzZXQpO1xuICAgIGxldCBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xuXG4gICAgcmVuZGVySGVhdG1hcEhlYWRlcihcbiAgICAgICAgY2FudmFzLFxuICAgICAgICBjaGFydEVsZW1lbnRzLFxuICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICBoZWF0bWFwSW5mbyxcbiAgICAgICAgZGF0YXNldFxuICAgICk7XG5cbiAgICByZW5kZXJIZWF0bWFwRGF5cyhcbiAgICAgICAgY2FudmFzLFxuICAgICAgICBjaGFydEVsZW1lbnRzLFxuICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICBoZWF0bWFwSW5mbyxcbiAgICAgICAgZGF0YXNldFxuICAgICk7XG59XG4iLCJpbXBvcnQge1xuICAgIERhdGFzZXRzLFxuICAgIERhdGFQb2ludCxcbiAgICBSZW5kZXJJbmZvLFxuICAgIEJ1bGxldEluZm8sXG4gICAgRGF0YXNldCxcbiAgICBTaXplLFxuICAgIFRyYW5zZm9ybSxcbiAgICBDaGFydEVsZW1lbnRzLFxuICAgIEdyYXBoVHlwZSxcbiAgICBWYWx1ZVR5cGUsXG59IGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0ICogYXMgZXhwciBmcm9tIFwiLi9leHByXCI7XG5cbmZ1bmN0aW9uIGNyZWF0ZUFyZWFzKFxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBidWxsZXRJbmZvOiBCdWxsZXRJbmZvXG4pOiBDaGFydEVsZW1lbnRzIHtcbiAgICBsZXQgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyA9IHt9O1xuICAgIC8vIHdob2xlIGFyZWEgZm9yIHBsb3R0aW5nLCBpbmNsdWRlcyBtYXJnaW5zXG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJ1bGxldEluZm8pIHJldHVybjtcblxuICAgIGxldCBzdmcgPSBkM1xuICAgICAgICAuc2VsZWN0KGNhbnZhcylcbiAgICAgICAgLmFwcGVuZChcInN2Z1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwic3ZnXCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0XG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxuICAgICAgICApO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJzdmdcIl0gPSBzdmc7XG5cbiAgICAvLyBncmFwaEFyZWEsIGluY2x1ZGVzIGNoYXJ0QXJlYSwgdGl0bGUsIGxlZ2VuZFxuICAgIGxldCBncmFwaEFyZWEgPSBzdmdcbiAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImdyYXBoQXJlYVwiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICsgcmVuZGVySW5mby5tYXJnaW4ucmlnaHQpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxuICAgICAgICApO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJncmFwaEFyZWFcIl0gPSBncmFwaEFyZWE7XG5cbiAgICAvLyBkYXRhQXJlYSwgdW5kZXIgZ3JhcGhBcmVhLCBpbmNsdWRlcyBwb2ludHMsIGxpbmVzLCB4QXhpcywgeUF4aXNcbiAgICBsZXQgZGF0YUFyZWEgPSBncmFwaEFyZWFcbiAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImRhdGFBcmVhXCIpXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgpXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCk7XG4gICAgY2hhcnRFbGVtZW50c1tcImRhdGFBcmVhXCJdID0gZGF0YUFyZWE7XG5cbiAgICByZXR1cm4gY2hhcnRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gc2V0Q2hhcnRTY2FsZShcbiAgICBfY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbikge1xuICAgIGxldCBjYW52YXMgPSBkMy5zZWxlY3QoX2NhbnZhcyk7XG4gICAgbGV0IHN2ZyA9IGNoYXJ0RWxlbWVudHMuc3ZnO1xuICAgIGxldCBzdmdXaWR0aCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJ3aWR0aFwiKSk7XG4gICAgbGV0IHN2Z0hlaWdodCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJoZWlnaHRcIikpO1xuICAgIHN2Zy5hdHRyKFwid2lkdGhcIiwgbnVsbClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbClcbiAgICAgICAgLmF0dHIoXCJ2aWV3Qm94XCIsIGAwIDAgJHtzdmdXaWR0aH0gJHtzdmdIZWlnaHR9YClcbiAgICAgICAgLmF0dHIoXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwieE1pZFlNaWQgbWVldFwiKTtcblxuICAgIGlmIChyZW5kZXJJbmZvLmZpdFBhbmVsV2lkdGgpIHtcbiAgICAgICAgY2FudmFzLnN0eWxlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZShcbiAgICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICAgIChzdmdXaWR0aCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxuICAgICAgICApO1xuICAgICAgICBjYW52YXMuc3R5bGUoXG4gICAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgICAgKHN2Z0hlaWdodCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyVGl0bGUoXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGJ1bGxldEluZm86IEJ1bGxldEluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyVGl0bGVcIik7XG4gICAgLy8gdW5kZXIgZ3JhcGhBcmVhXG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJ1bGxldEluZm8pIHJldHVybjtcblxuICAgIGNvbnN0IHNwYWNpbmcgPSA2OyAvLyBzcGFjaW5nIGJldHdlZW4gdGl0bGUgYW5kIGRhdGFBcmVhXG5cbiAgICBpZiAoYnVsbGV0SW5mby50aXRsZSkge1xuICAgICAgICBsZXQgdGl0bGVTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcbiAgICAgICAgICAgIGJ1bGxldEluZm8udGl0bGUsXG4gICAgICAgICAgICBcInRyYWNrZXItdGl0bGUtc21hbGxcIlxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgICAgbGV0IHRpdGxlID0gY2hhcnRFbGVtZW50cy5ncmFwaEFyZWFcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgICAgIC50ZXh0KGJ1bGxldEluZm8udGl0bGUpIC8vIHBpdm90IGF0IGNlbnRlclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ0aXRsZVwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCB0aXRsZVNpemUud2lkdGggLyAyLjApXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCAvIDIuMClcbiAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0aXRsZVNpemUuaGVpZ2h0KSAvLyBmb3IgbGF0ZXIgdXNlXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdGl0bGUtc21hbGxcIik7XG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzW1widGl0bGVcIl0gPSB0aXRsZTtcblxuICAgICAgICAgICAgLy8gRXhwYW5kIHBhcmVudCBhcmVhc1xuICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIHRpdGxlU2l6ZS53aWR0aCArIHNwYWNpbmcsIDApO1xuICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXG4gICAgICAgICAgICAgICAgdGl0bGVTaXplLndpZHRoICsgc3BhY2luZyxcbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBNb3ZlIHNpYmxpbmcgYXJlYXNcbiAgICAgICAgICAgIGhlbHBlci5tb3ZlQXJlYShcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLmRhdGFBcmVhLFxuICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS53aWR0aCArIHNwYWNpbmcsXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgICAgIC8vIGlmIGxhYmVsIHdpZHRoID4gZGF0YUFyZWEgd2lkdGhcbiAgICAgICAgICAgIGxldCB4TWlkZGxlID0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyLjA7XG4gICAgICAgICAgICBpZiAodGl0bGVTaXplLndpZHRoID4gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImV4cGFuZCBhcmVhIGZvciB2ZXJ0aWNhbCB0aXRsZVwiKTtcbiAgICAgICAgICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcbiAgICAgICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5zdmcsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS53aWR0aCAtIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcbiAgICAgICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS53aWR0aCAtIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGhlbHBlci5tb3ZlQXJlYShcbiAgICAgICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVTaXplLndpZHRoIC8gMi4wIC0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyLjAsXG4gICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHhNaWRkbGUgPSB0aXRsZVNpemUud2lkdGggLyAyLjA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBheGlzV2lkdGggPSBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuYXhpcy5hdHRyKFwid2lkdGhcIikpO1xuXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAgICAgLnRleHQoYnVsbGV0SW5mby50aXRsZSkgLy8gcGl2b3QgYXQgY2VudGVyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBcInRpdGxlXCIpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHhNaWRkbGUgKyBheGlzV2lkdGgpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIHRpdGxlU2l6ZS5oZWlnaHQgLyAyLjApXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGl0bGVTaXplLmhlaWdodCkgLy8gZm9yIGxhdGVyIHVzZVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpdGxlLXNtYWxsXCIpO1xuICAgICAgICAgICAgY2hhcnRFbGVtZW50c1tcInRpdGxlXCJdID0gdGl0bGU7XG5cbiAgICAgICAgICAgIC8vIEV4cGFuZCBwYXJlbnQgYXJlYXNcbiAgICAgICAgICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCAwLCB0aXRsZVNpemUuaGVpZ2h0ICsgc3BhY2luZyk7XG4gICAgICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS5oZWlnaHQgKyBzcGFjaW5nXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBNb3ZlIHNpYmxpbmcgYXJlYXNcbiAgICAgICAgICAgIGhlbHBlci5tb3ZlQXJlYShcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLmRhdGFBcmVhLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgdGl0bGVTaXplLmhlaWdodCArIHNwYWNpbmdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYnVsbGV0SW5mby52YWx1ZVVuaXQpIHtcbiAgICAgICAgbGV0IHVuaXRTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcbiAgICAgICAgICAgIGJ1bGxldEluZm8udmFsdWVVbml0LFxuICAgICAgICAgICAgXCJ0cmFja2VyLXRpY2stbGFiZWxcIlxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgICAgbGV0IHVuaXQgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgICAgICAudGV4dChidWxsZXRJbmZvLnZhbHVlVW5pdClcbiAgICAgICAgICAgICAgICAuYXR0cihcImlkXCIsIFwidW5pdFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCAtMSAqICh1bml0U2l6ZS53aWR0aCArIHNwYWNpbmcpKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyBzcGFjaW5nKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHVuaXRTaXplLmhlaWdodCkgLy8gZm9yIGxhdGVyIHVzZVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpY2stbGFiZWxcIik7IC8vIHBpdm90IGF0IGNvcmRlclxuICAgICAgICAgICAgY2hhcnRFbGVtZW50c1tcInVuaXRcIl0gPSB1bml0O1xuICAgICAgICB9IGVsc2UgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICAgICAgbGV0IHVuaXQgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgICAgICAudGV4dChidWxsZXRJbmZvLnZhbHVlVW5pdClcbiAgICAgICAgICAgICAgICAuYXR0cihcImlkXCIsIFwidW5pdFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgICAgICAgICBcInhcIixcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyIC0gdW5pdFNpemUud2lkdGggLyAyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCAtKHVuaXRTaXplLmhlaWdodCAvIDIuMCArIHNwYWNpbmcpKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHVuaXRTaXplLmhlaWdodCkgLy8gZm9yIGxhdGVyIHVzZVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpY2stbGFiZWxcIik7IC8vIHBpdm90IGF0IGNvcmRlclxuICAgICAgICAgICAgY2hhcnRFbGVtZW50c1tcInVuaXRcIl0gPSB1bml0O1xuXG4gICAgICAgICAgICAvLyBFeHBhbmQgcGFyZW50IGFyZWFzXG4gICAgICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgMCwgdW5pdFNpemUuaGVpZ2h0ICsgc3BhY2luZyk7XG4gICAgICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHVuaXRTaXplLmhlaWdodCArIHNwYWNpbmdcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIE1vdmUgZGF0YUFyZWEgZG93blxuICAgICAgICAgICAgaGVscGVyLm1vdmVBcmVhKFxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB1bml0U2l6ZS5oZWlnaHQgKyBzcGFjaW5nXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBSZW5kZXIgdGlja3MsIHRpY2sgbGFiZWxzXG5mdW5jdGlvbiByZW5kZXJBeGlzKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBidWxsZXRJbmZvOiBCdWxsZXRJbmZvLFxuICAgIGRhdGFzZXQ6IERhdGFzZXRcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyQXhpc1wiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhjaGFydEVsZW1lbnRzKTtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcblxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhYnVsbGV0SW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IHJhbmdlID0gYnVsbGV0SW5mby5yYW5nZTtcbiAgICBsZXQgbGFzdFJhbmdlID0gcmFuZ2VbcmFuZ2UubGVuZ3RoIC0gMV07XG4gICAgbGV0IGRvbWFpbiA9IFswLCBsYXN0UmFuZ2VdO1xuXG4gICAgbGV0IHRpY2tMZW5ndGggPSA2O1xuICAgIGxldCB2YWx1ZVVuaXQgPSBidWxsZXRJbmZvLnZhbHVlVW5pdDtcbiAgICBsZXQgdGlja0Zvcm1hdEZuOiBhbnkgPSBmdW5jdGlvbiAodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodmFsdWVVbml0ICYmIHZhbHVlVW5pdC5lbmRzV2l0aChcIiVcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBkMy50aWNrRm9ybWF0KDAsIGxhc3RSYW5nZSwgNykodmFsdWUpICsgXCIgJVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkMy50aWNrRm9ybWF0KDAsIGxhc3RSYW5nZSwgNykodmFsdWUpO1xuICAgIH07XG4gICAgbGV0IG1heFRpY2tMYWJlbCA9IHRpY2tGb3JtYXRGbihsYXN0UmFuZ2UpO1xuICAgIGxldCBtYXhUaWNrTGFiZWxTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcbiAgICAgICAgbWF4VGlja0xhYmVsLFxuICAgICAgICBcInRyYWNrZXItdGljay1sYWJlbFwiXG4gICAgKTtcblxuICAgIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICBsZXQgc2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpO1xuICAgICAgICBzY2FsZS5kb21haW4oZG9tYWluKS5yYW5nZShbMCwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGhdKTtcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcInNjYWxlXCJdID0gc2NhbGU7XG5cbiAgICAgICAgbGV0IGF4aXNHZW4gPSBkMy5heGlzQm90dG9tKHNjYWxlKTtcbiAgICAgICAgYXhpc0dlbi50aWNrRm9ybWF0KHRpY2tGb3JtYXRGbik7XG4gICAgICAgIGxldCBheGlzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJheGlzXCIpXG4gICAgICAgICAgICAuYXR0cihcbiAgICAgICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgICAgIFwidHJhbnNsYXRlKDAsXCIgKyByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyBcIilcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmNhbGwoYXhpc0dlbilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWF4aXNcIik7XG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJheGlzXCJdID0gYXhpcztcblxuICAgICAgICBsZXQgYXhpc0xpbmUgPSBheGlzLnNlbGVjdEFsbChcInBhdGhcIikuc3R5bGUoXCJzdHJva2VcIiwgXCJub25lXCIpO1xuXG4gICAgICAgIGxldCBheGlzVGlja3MgPSBheGlzLnNlbGVjdEFsbChcImxpbmVcIik7XG5cbiAgICAgICAgbGV0IGF4aXNUaWNrTGFiZWxzID0gYXhpc1xuICAgICAgICAgICAgLnNlbGVjdEFsbChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpY2stbGFiZWxcIik7XG5cbiAgICAgICAgYXhpcy5hdHRyKFxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKyBtYXhUaWNrTGFiZWxTaXplLndpZHRoXG4gICAgICAgICk7XG4gICAgICAgIGF4aXMuYXR0cihcImhlaWdodFwiLCB0aWNrTGVuZ3RoICsgbWF4VGlja0xhYmVsU2l6ZS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIEV4cGFuZCBhcmVhc1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuc3ZnLFxuICAgICAgICAgICAgK21heFRpY2tMYWJlbFNpemUud2lkdGgsXG4gICAgICAgICAgICB0aWNrTGVuZ3RoICsgbWF4VGlja0xhYmVsU2l6ZS5oZWlnaHRcbiAgICAgICAgKTtcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSxcbiAgICAgICAgICAgICttYXhUaWNrTGFiZWxTaXplLndpZHRoLFxuICAgICAgICAgICAgdGlja0xlbmd0aCArIG1heFRpY2tMYWJlbFNpemUuaGVpZ2h0XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgbGV0IHNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKTtcbiAgICAgICAgc2NhbGUuZG9tYWluKGRvbWFpbikucmFuZ2UoW3JlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCwgMF0pO1xuICAgICAgICBjaGFydEVsZW1lbnRzW1wic2NhbGVcIl0gPSBzY2FsZTtcblxuICAgICAgICBsZXQgYXhpc0dlbiA9IGQzLmF4aXNMZWZ0KHNjYWxlKTtcbiAgICAgICAgYXhpc0dlbi50aWNrRm9ybWF0KHRpY2tGb3JtYXRGbik7XG4gICAgICAgIGxldCBheGlzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJheGlzXCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAwKVxuICAgICAgICAgICAgLmNhbGwoYXhpc0dlbilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWF4aXNcIik7XG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJheGlzXCJdID0gYXhpcztcblxuICAgICAgICBsZXQgYXhpc0xpbmUgPSBheGlzLnNlbGVjdEFsbChcInBhdGhcIikuc3R5bGUoXCJzdHJva2VcIiwgXCJub25lXCIpO1xuXG4gICAgICAgIGxldCBheGlzVGlja3MgPSBheGlzLnNlbGVjdEFsbChcImxpbmVcIik7XG5cbiAgICAgICAgbGV0IGF4aXNUaWNrTGFiZWxzID0gYXhpc1xuICAgICAgICAgICAgLnNlbGVjdEFsbChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpY2stbGFiZWxcIik7XG5cbiAgICAgICAgYXhpcy5hdHRyKFwid2lkdGhcIiwgdGlja0xlbmd0aCArIG1heFRpY2tMYWJlbFNpemUud2lkdGgpO1xuICAgICAgICBheGlzLmF0dHIoXCJoZWlnaHRcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgpO1xuXG4gICAgICAgIC8vIEV4cGFuZCBhcmVhc1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuc3ZnLFxuICAgICAgICAgICAgdGlja0xlbmd0aCArIG1heFRpY2tMYWJlbFNpemUud2lkdGgsXG4gICAgICAgICAgICAwXG4gICAgICAgICk7XG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKFxuICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXG4gICAgICAgICAgICB0aWNrTGVuZ3RoICsgbWF4VGlja0xhYmVsU2l6ZS53aWR0aCxcbiAgICAgICAgICAgIDBcbiAgICAgICAgKTtcblxuICAgICAgICBoZWxwZXIubW92ZUFyZWEoXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzLmRhdGFBcmVhLFxuICAgICAgICAgICAgdGlja0xlbmd0aCArIG1heFRpY2tMYWJlbFNpemUud2lkdGgsXG4gICAgICAgICAgICAwXG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vLyBSZW5kZXIgcXVhbnRpdGF0aXZlIHJhbmdlLCBwb29yL2F2ZXJhZ2UvZ29vZC8uLi5cbmZ1bmN0aW9uIHJlbmRlckJhY2tQYW5lbChcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgYnVsbGV0SW5mbzogQnVsbGV0SW5mbyxcbiAgICBkYXRhc2V0OiBEYXRhc2V0XG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckJhY2tQYW5lbFwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcblxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhYnVsbGV0SW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IHNjYWxlID0gY2hhcnRFbGVtZW50cy5zY2FsZTtcblxuICAgIC8vIFByZXBhcmUgZGF0YVxuICAgIGxldCByYW5nZSA9IGJ1bGxldEluZm8ucmFuZ2U7XG4gICAgbGV0IHJhbmdlQ29sb3IgPSBidWxsZXRJbmZvLnJhbmdlQ29sb3I7XG4gICAgbGV0IGRhdGEgPSBbXTtcbiAgICBsZXQgbGFzdEJvdW5kID0gMDtcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCByYW5nZS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgICBzdGFydDogbGFzdEJvdW5kLFxuICAgICAgICAgICAgZW5kOiByYW5nZVtpbmRdLFxuICAgICAgICAgICAgY29sb3I6IHJhbmdlQ29sb3JbaW5kXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxhc3RCb3VuZCA9IHJhbmdlW2luZF07XG4gICAgfVxuXG4gICAgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgIGxldCBwYW5lbCA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJiYWNrUGFuZWxcIilcbiAgICAgICAgICAgIC5kYXRhKGRhdGEpXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbiAoZDogYW55LCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihzY2FsZShkLnN0YXJ0KSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIGZ1bmN0aW9uIChkOiBhbnksIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwoc2NhbGUoZC5lbmQgLSBkLnN0YXJ0KSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0KVxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQuY29sb3I7XG4gICAgICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICBsZXQgcGFuZWwgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwiYmFja1BhbmVsXCIpXG4gICAgICAgICAgICAuZGF0YShkYXRhKVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKGQ6IGFueSwgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihzY2FsZShkLmVuZCkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0IC1cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcihzY2FsZShkLmVuZCAtIGQuc3RhcnQpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQuY29sb3I7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIFJlbmRlciBiYXIgZm9yIGFjdHVhbCB2YWx1ZVxuZnVuY3Rpb24gcmVuZGVyQmFyKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBidWxsZXRJbmZvOiBCdWxsZXRJbmZvLFxuICAgIGRhdGFzZXQ6IERhdGFzZXRcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyQmFyXCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKGRhdGFzZXQpO1xuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFidWxsZXRJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgcmV0QWN0dWFsVmFsdWUgPSBleHByLnJlc29sdmVWYWx1ZShidWxsZXRJbmZvLnZhbHVlLCByZW5kZXJJbmZvKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZXRBY3R1YWxWYWx1ZSk7XG4gICAgaWYgKHR5cGVvZiByZXRBY3R1YWxWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0QWN0dWFsVmFsdWU7XG4gICAgfVxuICAgIGxldCBhY3R1YWxWYWx1ZSA9IHJldEFjdHVhbFZhbHVlO1xuICAgIGlmIChOdW1iZXIuaXNOYU4oYWN0dWFsVmFsdWUpKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dCB2YWx1ZTogXCIgKyByZXRBY3R1YWxWYWx1ZTtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG4gICAgbGV0IHZhbHVlQ29sb3IgPSBidWxsZXRJbmZvLnZhbHVlQ29sb3I7XG5cbiAgICBsZXQgc2NhbGUgPSBjaGFydEVsZW1lbnRzLnNjYWxlO1xuXG4gICAgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgIGxldCBiYXJXaWR0aCA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCAvIDM7XG4gICAgICAgIGxldCBiYXIgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHNjYWxlKDApKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGJhcldpZHRoKVxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBNYXRoLmZsb29yKHNjYWxlKGFjdHVhbFZhbHVlKSkpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBiYXJXaWR0aClcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgdmFsdWVDb2xvcik7XG4gICAgfSBlbHNlIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgbGV0IGJhcldpZHRoID0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAzO1xuICAgICAgICBsZXQgYmFyID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBiYXJXaWR0aClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBNYXRoLmZsb29yKHNjYWxlKGFjdHVhbFZhbHVlKSkpXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIGJhcldpZHRoKVxuICAgICAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLSBNYXRoLmZsb29yKHNjYWxlKGFjdHVhbFZhbHVlKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgdmFsdWVDb2xvcik7XG4gICAgfVxufVxuXG4vLyBSZW5kZXIgbWFyayBsaW5lIGZvciB0YXJnZXQgdmFsdWVcbmZ1bmN0aW9uIHJlbmRlck1hcmsoXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGJ1bGxldEluZm86IEJ1bGxldEluZm8sXG4gICAgZGF0YXNldDogRGF0YXNldFxuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJNYXJrXCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKGRhdGFzZXQpO1xuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFidWxsZXRJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgc2hvd01hcmtlciA9IGJ1bGxldEluZm8uc2hvd01hcmtlcjtcbiAgICBpZiAoIXNob3dNYXJrZXIpIHJldHVybjtcblxuICAgIGxldCBtYXJrZXJWYWx1ZSA9IGJ1bGxldEluZm8ubWFya2VyVmFsdWU7XG4gICAgbGV0IG1hcmtlckNvbG9yID0gYnVsbGV0SW5mby5tYXJrZXJDb2xvcjtcblxuICAgIGxldCBzY2FsZSA9IGNoYXJ0RWxlbWVudHMuc2NhbGU7XG5cbiAgICBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgbGV0IG1hcmtlckxlbmd0aCA9IChyZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKiAyKSAvIDM7XG4gICAgICAgIGxldCBtYXJrZXIgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHNjYWxlKG1hcmtlclZhbHVlKSAtIDEuNSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBtYXJrZXJMZW5ndGggLyA0KVxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCAzKVxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbWFya2VyTGVuZ3RoKVxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBtYXJrZXJDb2xvcik7XG4gICAgfSBlbHNlIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgbGV0IG1hcmtlckxlbmd0aCA9IChyZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAqIDIpIC8gMztcbiAgICAgICAgbGV0IG1hcmtlciA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgbWFya2VyTGVuZ3RoIC8gNClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBzY2FsZShtYXJrZXJWYWx1ZSkgLSAxLjUpXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIG1hcmtlckxlbmd0aClcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIDMpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIG1hcmtlckNvbG9yKTtcbiAgICB9XG59XG5cbi8vIEJ1bGxldCBncmFwaCBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CdWxsZXRfZ3JhcGhcbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJCdWxsZXQoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGJ1bGxldEluZm86IEJ1bGxldEluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyQnVsbGV0XCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xuICAgIGlmICghcmVuZGVySW5mbyB8fCAhYnVsbGV0SW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IGRhdGFzZXRJZCA9IHBhcnNlRmxvYXQoYnVsbGV0SW5mby5kYXRhc2V0KTtcbiAgICBsZXQgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcblxuICAgIC8vIFNldCBpbml0aWFsIGRhdGFBcmVhIHNpemVcbiAgICBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUgPSB7IHdpZHRoOiAyNTAsIGhlaWdodDogMjQgfTtcbiAgICB9IGVsc2UgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZSA9IHsgd2lkdGg6IDI0LCBoZWlnaHQ6IDI1MCB9O1xuICAgIH1cblxuICAgIGxldCBjaGFydEVsZW1lbnRzID0gY3JlYXRlQXJlYXMoY2FudmFzLCByZW5kZXJJbmZvLCBidWxsZXRJbmZvKTtcblxuICAgIGxldCByZXRSZW5kZXJBeGlzID0gcmVuZGVyQXhpcyhcbiAgICAgICAgY2hhcnRFbGVtZW50cyxcbiAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgYnVsbGV0SW5mbyxcbiAgICAgICAgZGF0YXNldFxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRSZW5kZXJBeGlzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRSZW5kZXJBeGlzO1xuICAgIH1cblxuICAgIHJlbmRlclRpdGxlKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGJ1bGxldEluZm8pO1xuXG4gICAgcmVuZGVyQmFja1BhbmVsKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGJ1bGxldEluZm8sIGRhdGFzZXQpO1xuXG4gICAgbGV0IHJldFJlbmRlckJhciA9IHJlbmRlckJhcihcbiAgICAgICAgY2hhcnRFbGVtZW50cyxcbiAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgYnVsbGV0SW5mbyxcbiAgICAgICAgZGF0YXNldFxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRSZW5kZXJCYXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFJlbmRlckJhcjtcbiAgICB9XG5cbiAgICByZW5kZXJNYXJrKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGJ1bGxldEluZm8sIGRhdGFzZXQpO1xuXG4gICAgc2V0Q2hhcnRTY2FsZShjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8pO1xufVxuIiwiaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBNb21lbnQsIER1cmF0aW9uIH0gZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHtcbiAgICBEYXRhc2V0cyxcbiAgICBEYXRhUG9pbnQsXG4gICAgUmVuZGVySW5mbyxcbiAgICBEYXRhc2V0LFxuICAgIFNpemUsXG4gICAgVHJhbnNmb3JtLFxuICAgIENoYXJ0RWxlbWVudHMsXG4gICAgR3JhcGhUeXBlLFxuICAgIFZhbHVlVHlwZSxcbiAgICBDb21tb25DaGFydEluZm8sXG4gICAgTGluZUluZm8sXG4gICAgQmFySW5mbyxcbiAgICBQaWVJbmZvLFxuICAgIFN1bW1hcnlJbmZvLFxuICAgIEJ1bGxldEluZm8sXG4gICAgTW9udGhJbmZvLFxuICAgIEhlYXRtYXBJbmZvLFxufSBmcm9tIFwiLi9kYXRhXCI7XG5pbXBvcnQgKiBhcyBwaWUgZnJvbSBcIi4vcGllXCI7XG5pbXBvcnQgKiBhcyBzdW1tYXJ5IGZyb20gXCIuL3N1bW1hcnlcIjtcbmltcG9ydCAqIGFzIG1vbnRoIGZyb20gXCIuL21vbnRoXCI7XG5pbXBvcnQgKiBhcyBoZWF0bWFwIGZyb20gXCIuL2hlYXRtYXBcIjtcbmltcG9ydCAqIGFzIGJ1bGxldCBmcm9tIFwiLi9idWxsZXRcIjtcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCB7IHNwcmludGYgfSBmcm9tIFwic3ByaW50Zi1qc1wiO1xuXG5mdW5jdGlvbiBnZXRYVGlja1ZhbHVlcyhcbiAgICBkYXRlczogTW9tZW50W10sXG4gICAgaW50ZXJ2YWw6IER1cmF0aW9uXG4pOiBbQXJyYXk8RGF0ZT4sIGQzLlRpbWVJbnRlcnZhbF0ge1xuICAgIC8vIFRoZSBpbnB1dCBpbnRlcnZhbCBjb3VsZCBiZSBudWxsLFxuICAgIC8vIGdlbmVyYXRlIHRpY2sgdmFsdWVzIGV2ZW4gaWYgaW50ZXJ2YWwgaXMgbnVsbFxuXG4gICAgLy8gY29uc29sZS5sb2coaW50ZXJ2YWwpO1xuXG4gICAgbGV0IHRpY2tWYWx1ZXM6IEFycmF5PERhdGU+ID0gW107XG4gICAgbGV0IHRpY2tJbnRlcnZhbCA9IG51bGw7XG5cbiAgICAvLyB5IHZhbHVlcyBhcmUgdGltZSB2YWx1ZXNcbiAgICBpZiAoaW50ZXJ2YWwpIHtcbiAgICAgICAgbGV0IGZpcnN0RGF0ZSA9IGRhdGVzWzBdO1xuICAgICAgICBsZXQgbGFzdERhdGUgPSBkYXRlc1tkYXRlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgdGlja1ZhbHVlcyA9IGQzLnRpbWVEYXkucmFuZ2UoXG4gICAgICAgICAgICBmaXJzdERhdGUudG9EYXRlKCksXG4gICAgICAgICAgICBsYXN0RGF0ZS50b0RhdGUoKSxcbiAgICAgICAgICAgIGludGVydmFsLmFzRGF5cygpXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGRheXMgPSBkYXRlcy5sZW5ndGg7XG4gICAgICAgIGlmIChkYXlzIDw9IDE1KSB7XG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDAtMTVcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9IGQzLnRpbWVEYXk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA8PSA0ICogMTUpIHtcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogNC0xNVxuICAgICAgICAgICAgdGlja0ludGVydmFsID0gZDMudGltZURheS5ldmVyeSg0KTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDcgKiAxNSkge1xuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiA4LTE1XG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwgPSBkMy50aW1lV2VlaztcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDE1ICogMzApIHtcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogNC0xNVxuICAgICAgICAgICAgdGlja0ludGVydmFsID0gZDMudGltZU1vbnRoO1xuICAgICAgICB9IGVsc2UgaWYgKGRheXMgPD0gMTUgKiA2MCkge1xuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiA4LTE1XG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwgPSBkMy50aW1lTW9udGguZXZlcnkoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwgPSBkMy50aW1lWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbdGlja1ZhbHVlcywgdGlja0ludGVydmFsXTtcbn1cblxuZnVuY3Rpb24gZ2V0WFRpY2tMYWJlbEZvcm1hdChkYXRlczogTW9tZW50W10sIGluVGlja0xhYmVsRm9ybWF0OiBzdHJpbmcpIHtcbiAgICBpZiAoaW5UaWNrTGFiZWxGb3JtYXQpIHtcbiAgICAgICAgZnVuY3Rpb24gZm5UaWNrTGFiZWxGb3JtYXQoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgICAgICByZXR1cm4gaGVscGVyLmRhdGVUb1N0cih3aW5kb3cubW9tZW50KGRhdGUpLCBpblRpY2tMYWJlbEZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZuVGlja0xhYmVsRm9ybWF0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB0aWNrTGFiZWxGb3JtYXQgPSBudWxsO1xuICAgICAgICBsZXQgZGF5cyA9IGRhdGVzLmxlbmd0aDtcblxuICAgICAgICBpZiAoZGF5cyA8PSAxNSkge1xuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiAwLTE1XG4gICAgICAgICAgICB0aWNrTGFiZWxGb3JtYXQgPSBkMy50aW1lRm9ybWF0KFwiJXktJW0tJWRcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA8PSA0ICogMTUpIHtcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogNC0xNVxuICAgICAgICAgICAgdGlja0xhYmVsRm9ybWF0ID0gZDMudGltZUZvcm1hdChcIiV5LSVtLSVkXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKGRheXMgPD0gNyAqIDE1KSB7XG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDgtMTVcbiAgICAgICAgICAgIHRpY2tMYWJlbEZvcm1hdCA9IGQzLnRpbWVGb3JtYXQoXCIleS0lbS0lZFwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDE1ICogMzApIHtcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogNC0xNVxuICAgICAgICAgICAgdGlja0xhYmVsRm9ybWF0ID0gZDMudGltZUZvcm1hdChcIiV5ICViXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKGRheXMgPD0gMTUgKiA2MCkge1xuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiA4LTE1XG4gICAgICAgICAgICB0aWNrTGFiZWxGb3JtYXQgPSBkMy50aW1lRm9ybWF0KFwiJXkgJWJcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aWNrTGFiZWxGb3JtYXQgPSBkMy50aW1lRm9ybWF0KFwiJVlcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGlja0xhYmVsRm9ybWF0O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0WVRpY2tWYWx1ZXMoXG4gICAgeUxvd2VyOiBudW1iZXIsXG4gICAgeVVwcGVyOiBudW1iZXIsXG4gICAgaW50ZXJ2YWw6IG51bWJlciB8IER1cmF0aW9uLFxuICAgIGlzVGltZVZhbHVlID0gZmFsc2Vcbikge1xuICAgIC8vIFRoZSBpbnB1dCBpbnRlcnZhbCBjb3VsZCBiZSBudWxsLFxuICAgIC8vIGdlbmVyYXRlIHRpY2sgdmFsdWVzIGZvciB0aW1lIHZhbHVlcyBldmVuIGlmIGludGVydmFsIGlzIG51bGxcblxuICAgIC8vIGNvbnNvbGUubG9nKGludGVydmFsKTtcbiAgICAvLyBjb25zb2xlLmxvZyhpc1RpbWVWYWx1ZSk7XG5cbiAgICBjb25zdCBhYnNFeHRlbnQgPSBNYXRoLmFicyh5VXBwZXIgLSB5TG93ZXIpO1xuICAgIGxldCB0aWNrVmFsdWVzOiBBcnJheTxudW1iZXI+ID0gW107XG5cbiAgICBpZiAoIWlzVGltZVZhbHVlKSB7XG4gICAgICAgIC8vIHkgdmFsdWVzIGFyZSBudW1iZXJzXG4gICAgICAgIGlmIChpbnRlcnZhbCAmJiB0eXBlb2YgaW50ZXJ2YWwgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIC8vICE9PW51bGwgJiYgIT09IDBcbiAgICAgICAgICAgIHRpY2tWYWx1ZXMgPSBkMy5yYW5nZSh5TG93ZXIsIHlVcHBlciwgaW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8geSB2YWx1ZXMgYXJlIHRpbWUgdmFsdWVzXG4gICAgICAgIGlmIChpbnRlcnZhbCAmJiB3aW5kb3cubW9tZW50LmlzRHVyYXRpb24oaW50ZXJ2YWwpKSB7XG4gICAgICAgICAgICBsZXQgaW50ZXJ2YWxJblNlY29uZHMgPSBNYXRoLmFicyhpbnRlcnZhbC5hc1NlY29uZHMoKSk7XG4gICAgICAgICAgICB0aWNrVmFsdWVzID0gZDMucmFuZ2UoeUxvd2VyLCB5VXBwZXIsIGludGVydmFsSW5TZWNvbmRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGF1dG8gaW50ZXJ2YWwgZm9yIHRpbWUgdmFsdWVzXG4gICAgICAgICAgICBpZiAoYWJzRXh0ZW50ID4gNSAqIDYwICogNjApIHtcbiAgICAgICAgICAgICAgICAvLyBleHRlbnQgb3ZlciB0aGFuIDUgaG91cnNcbiAgICAgICAgICAgICAgICAvLyB0aWNrIG9uIHRoZSBob3VyXG4gICAgICAgICAgICAgICAgeUxvd2VyID0gTWF0aC5mbG9vcih5TG93ZXIgLyAzNjAwKSAqIDM2MDA7XG4gICAgICAgICAgICAgICAgeVVwcGVyID0gTWF0aC5jZWlsKHlVcHBlciAvIDM2MDApICogMzYwMDtcblxuICAgICAgICAgICAgICAgIHRpY2tWYWx1ZXMgPSBkMy5yYW5nZSh5TG93ZXIsIHlVcHBlciwgMzYwMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHRpY2sgb24gdGhlIGhhbGYgaG91clxuICAgICAgICAgICAgICAgIHlMb3dlciA9IE1hdGguZmxvb3IoeUxvd2VyIC8gMTgwMCkgKiAxODAwO1xuICAgICAgICAgICAgICAgIHlVcHBlciA9IE1hdGguY2VpbCh5VXBwZXIgLyAxODAwKSAqIDE4MDA7XG5cbiAgICAgICAgICAgICAgICB0aWNrVmFsdWVzID0gZDMucmFuZ2UoeUxvd2VyLCB5VXBwZXIsIDE4MDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRpY2tWYWx1ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGlja1ZhbHVlcztcbn1cblxuZnVuY3Rpb24gZ2V0WVRpY2tMYWJlbEZvcm1hdChcbiAgICB5TG93ZXI6IG51bWJlcixcbiAgICB5VXBwZXI6IG51bWJlcixcbiAgICBpblRpY2tMYWJlbEZvcm1hdDogc3RyaW5nLFxuICAgIGlzVGltZVZhbHVlID0gZmFsc2Vcbikge1xuICAgIC8vIHJldHVybiBhIGZ1bmN0aW9uIGNvbnZlcnQgdmFsdWUgdG8gdGltZSBzdHJpbmdcblxuICAgIGlmICghaXNUaW1lVmFsdWUpIHtcbiAgICAgICAgaWYgKGluVGlja0xhYmVsRm9ybWF0KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiB0aWNrRm9ybWF0KHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICAgICAgICAgIGxldCBzdHJWYWx1ZSA9IHNwcmludGYoXCIlXCIgKyBpblRpY2tMYWJlbEZvcm1hdCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRpY2tGb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGQzLnRpY2tGb3JtYXQoeUxvd2VyLCB5VXBwZXIsIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyB2YWx1ZXMgaW4gc2Vjb25kc1xuICAgICAgICBpZiAoaW5UaWNrTGFiZWxGb3JtYXQpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGZuVGlja0xhYmVsRm9ybWF0KHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICAgICAgICAgIGxldCBkYXlTdGFydCA9IHdpbmRvdy5tb21lbnQoXCIwMDowMFwiLCBcIkhIOm1tXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGxldCB0aWNrVGltZSA9IGRheVN0YXJ0LmFkZCh2YWx1ZSwgXCJzZWNvbmRzXCIpO1xuICAgICAgICAgICAgICAgIGxldCBmb3JtYXQgPSB0aWNrVGltZS5mb3JtYXQoaW5UaWNrTGFiZWxGb3JtYXQpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRldkhvdXIgPSAodmFsdWUgLSB5TG93ZXIpIC8gMzYwMDtcbiAgICAgICAgICAgICAgICBsZXQgaW50ZXJsZWF2ZSA9IGRldkhvdXIgJSAyO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmblRpY2tMYWJlbEZvcm1hdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGZuVGlja0xhYmVsRm9ybWF0KHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFic0V4dGVudCA9IE1hdGguYWJzKHlVcHBlciAtIHlMb3dlcik7XG4gICAgICAgICAgICAgICAgbGV0IGRheVN0YXJ0ID0gd2luZG93Lm1vbWVudChcIjAwOjAwXCIsIFwiSEg6bW1cIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgbGV0IHRpY2tUaW1lID0gZGF5U3RhcnQuYWRkKHZhbHVlLCBcInNlY29uZHNcIik7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm1hdCA9IHRpY2tUaW1lLmZvcm1hdChcIkhIOm1tXCIpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGB5TG93ZXIveVVwcGVyOiAke3lMb3dlcn0vJHt5VXBwZXJ9YClcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgdmFsdWUvZXh0ZW50L2ludGVyOiR7dmFsdWV9LyR7YWJzRXh0ZW50fS8keyh2YWx1ZS15TG93ZXIpLzM2MDB9YCk7XG5cbiAgICAgICAgICAgICAgICAvLyBhdXRvIGludGVybGVhdmUgaWYgZXh0ZW50IG92ZXIgMTIgaG91cnNcbiAgICAgICAgICAgICAgICBpZiAoYWJzRXh0ZW50ID4gMTIgKiA2MCAqIDYwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkZXZIb3VyID0gKHZhbHVlIC0geUxvd2VyKSAvIDM2MDA7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbnRlcmxlYXZlID0gZGV2SG91ciAlIDI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IHlMb3dlciB8fCB2YWx1ZSA+IHlVcHBlciB8fCBpbnRlcmxlYXZlIDwgMS4wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZuVGlja0xhYmVsRm9ybWF0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIoY2FudmFzOiBIVE1MRWxlbWVudCwgcmVuZGVySW5mbzogUmVuZGVySW5mbykge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyXCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uZGF0YXNldHMpO1xuXG4gICAgLy8gRGF0YSBwcmVwcm9jZXNzaW5nXG4gICAgZm9yIChsZXQgZGF0YXNldCBvZiByZW5kZXJJbmZvLmRhdGFzZXRzKSB7XG4gICAgICAgIGlmIChkYXRhc2V0LmdldFF1ZXJ5KCkudXNlZEFzWERhdGFzZXQpIGNvbnRpbnVlO1xuICAgICAgICAvLyB2YWx1ZVNoaWZ0XG4gICAgICAgIGxldCBzaGlmdEFtb3VudCA9IHJlbmRlckluZm8udmFsdWVTaGlmdFtkYXRhc2V0LmdldElkKCldO1xuICAgICAgICBpZiAoc2hpZnRBbW91bnQgIT09IG51bGwgJiYgc2hpZnRBbW91bnQgIT09IDApIHtcbiAgICAgICAgICAgIGRhdGFzZXQuc2hpZnQoXG4gICAgICAgICAgICAgICAgc2hpZnRBbW91bnQsXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5zaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW5bZGF0YXNldC5nZXRJZCgpXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwZW5hbHR5XG4gICAgICAgIGlmIChyZW5kZXJJbmZvLnBlbmFsdHlbZGF0YXNldC5nZXRJZCgpXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgZGF0YXNldC5zZXRQZW5hbHR5KHJlbmRlckluZm8ucGVuYWx0eVtkYXRhc2V0LmdldElkKCldKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhY2N1bVxuICAgICAgICBpZiAocmVuZGVySW5mby5hY2N1bVtkYXRhc2V0LmdldElkKCldKSB7XG4gICAgICAgICAgICBkYXRhc2V0LmFjY3VtdWxhdGVWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGxpbmVJbmZvIG9mIHJlbmRlckluZm8ubGluZSkge1xuICAgICAgICBsZXQgcmV0ID0gcmVuZGVyTGluZUNoYXJ0KGNhbnZhcywgcmVuZGVySW5mbywgbGluZUluZm8pO1xuICAgICAgICBpZiAodHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBiYXJJbmZvIG9mIHJlbmRlckluZm8uYmFyKSB7XG4gICAgICAgIGxldCByZXQgPSByZW5kZXJCYXJDaGFydChjYW52YXMsIHJlbmRlckluZm8sIGJhckluZm8pO1xuICAgICAgICBpZiAodHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBwaWVJbmZvIG9mIHJlbmRlckluZm8ucGllKSB7XG4gICAgICAgIGxldCByZXQgPSBwaWUucmVuZGVyUGllQ2hhcnQoY2FudmFzLCByZW5kZXJJbmZvLCBwaWVJbmZvKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgc3VtbWFyeUluZm8gb2YgcmVuZGVySW5mby5zdW1tYXJ5KSB7XG4gICAgICAgIGxldCByZXQgPSBzdW1tYXJ5LnJlbmRlclN1bW1hcnkoY2FudmFzLCByZW5kZXJJbmZvLCBzdW1tYXJ5SW5mbyk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGJ1bGxldEluZm8gb2YgcmVuZGVySW5mby5idWxsZXQpIHtcbiAgICAgICAgbGV0IHJldCA9IGJ1bGxldC5yZW5kZXJCdWxsZXQoY2FudmFzLCByZW5kZXJJbmZvLCBidWxsZXRJbmZvKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgbW9udGhJbmZvIG9mIHJlbmRlckluZm8ubW9udGgpIHtcbiAgICAgICAgbGV0IHJldCA9IG1vbnRoLnJlbmRlck1vbnRoKGNhbnZhcywgcmVuZGVySW5mbywgbW9udGhJbmZvKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaGVhdG1hcEluZm8gb2YgcmVuZGVySW5mby5oZWF0bWFwKSB7XG4gICAgICAgIGxldCByZXQgPSBoZWF0bWFwLnJlbmRlckhlYXRtYXAoY2FudmFzLCByZW5kZXJJbmZvLCBoZWF0bWFwSW5mbyk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJYQXhpcyhcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgY2hhcnRJbmZvOiBDb21tb25DaGFydEluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyWEF4aXNcIik7XG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWNoYXJ0SW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IGRhdGFzZXRzID0gcmVuZGVySW5mby5kYXRhc2V0cztcbiAgICBsZXQgeERvbWFpbiA9IGQzLmV4dGVudChkYXRhc2V0cy5nZXREYXRlcygpKTtcbiAgICBsZXQgeFNjYWxlID0gZDNcbiAgICAgICAgLnNjYWxlVGltZSgpXG4gICAgICAgIC5kb21haW4oeERvbWFpbilcbiAgICAgICAgLnJhbmdlKFswLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aF0pO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJ4U2NhbGVcIl0gPSB4U2NhbGU7XG5cbiAgICBsZXQgdGlja0ludGVydmFsSW5EdXJhdGlvbiA9IGhlbHBlci5wYXJzZUR1cmF0aW9uU3RyaW5nKFxuICAgICAgICBjaGFydEluZm8ueEF4aXNUaWNrSW50ZXJ2YWxcbiAgICApO1xuXG4gICAgbGV0IFt0aWNrVmFsdWVzLCB0aWNrSW50ZXJ2YWxdID0gZ2V0WFRpY2tWYWx1ZXMoXG4gICAgICAgIGRhdGFzZXRzLmdldERhdGVzKCksXG4gICAgICAgIHRpY2tJbnRlcnZhbEluRHVyYXRpb25cbiAgICApO1xuICAgIGxldCB0aWNrRm9ybWF0ID0gZ2V0WFRpY2tMYWJlbEZvcm1hdChcbiAgICAgICAgZGF0YXNldHMuZ2V0RGF0ZXMoKSxcbiAgICAgICAgY2hhcnRJbmZvLnhBeGlzVGlja0xhYmVsRm9ybWF0XG4gICAgKTtcblxuICAgIGxldCB4QXhpc0dlbiA9IGQzLmF4aXNCb3R0b20oeFNjYWxlKTtcblxuICAgIGlmICh0aWNrVmFsdWVzICYmIHRpY2tWYWx1ZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHhBeGlzR2VuLnRpY2tWYWx1ZXModGlja1ZhbHVlcyk7XG4gICAgfSBlbHNlIGlmICh0aWNrSW50ZXJ2YWwpIHtcbiAgICAgICAgeEF4aXNHZW4udGlja3ModGlja0ludGVydmFsKTtcbiAgICB9XG4gICAgaWYgKHRpY2tGb3JtYXQpIHtcbiAgICAgICAgeEF4aXNHZW4udGlja0Zvcm1hdCh0aWNrRm9ybWF0KTtcbiAgICB9XG5cbiAgICBsZXQgeEF4aXMgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhIC8vIGF4aXMgaW5jbHVkZXMgdGlja3NcbiAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInhBeGlzXCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKDAsXCIgKyByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyBcIilcIlxuICAgICAgICApIC8vIHJlbGF0aXZlIHRvIGdyYXBoQXJlYVxuICAgICAgICAuY2FsbCh4QXhpc0dlbilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItYXhpc1wiKTtcbiAgICBpZiAoY2hhcnRJbmZvLnhBeGlzQ29sb3IpIHtcbiAgICAgICAgeEF4aXMuc3R5bGUoXCJzdHJva2VcIiwgY2hhcnRJbmZvLnhBeGlzQ29sb3IpO1xuICAgIH1cbiAgICBjaGFydEVsZW1lbnRzW1wieEF4aXNcIl0gPSB4QXhpcztcblxuICAgIGxldCB0ZXh0U2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXCI5OS05OS05OVwiKTtcblxuICAgIGxldCB4QXhpc1RpY2tMYWJlbHMgPSB4QXhpc1xuICAgICAgICAuc2VsZWN0QWxsKFwidGV4dFwiKVxuICAgICAgICAuYXR0cihcInhcIiwgLTEgKiB0ZXh0U2l6ZS5oZWlnaHQgKiBNYXRoLmNvcygoNjUgLyAxODApICogTWF0aC5QSSkpXG4gICAgICAgIC5hdHRyKFwieVwiLCAwKVxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInJvdGF0ZSgtNjUpXCIpXG4gICAgICAgIC5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwiZW5kXCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpY2stbGFiZWxcIik7XG4gICAgaWYgKGNoYXJ0SW5mby54QXhpc0NvbG9yKSB7XG4gICAgICAgIHhBeGlzVGlja0xhYmVscy5zdHlsZShcImZpbGxcIiwgY2hhcnRJbmZvLnhBeGlzQ29sb3IpO1xuICAgIH1cblxuICAgIGxldCB0aWNrTGVuZ3RoID0gNjtcbiAgICBsZXQgdGlja0xhYmVsSGVpZ2h0ID0gdGV4dFNpemUud2lkdGggKiBNYXRoLnNpbigoNjUgLyAxODApICogTWF0aC5QSSk7XG4gICAgbGV0IHhBeGlzTGFiZWwgPSB4QXhpc1xuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChjaGFydEluZm8ueEF4aXNMYWJlbClcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMiArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgICh0aWNrTGVuZ3RoICsgdGlja0xhYmVsSGVpZ2h0KSArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzLWxhYmVsXCIpO1xuICAgIGlmIChjaGFydEluZm8ueEF4aXNMYWJlbENvbG9yKSB7XG4gICAgICAgIHhBeGlzTGFiZWwuc3R5bGUoXCJmaWxsXCIsIGNoYXJ0SW5mby54QXhpc0xhYmVsQ29sb3IpO1xuICAgIH1cblxuICAgIC8vIHhBeGlzIGhlaWdodFxuICAgIHhBeGlzLmF0dHIoXCJoZWlnaHRcIiwgdGlja0xlbmd0aCArIHRpY2tMYWJlbEhlaWdodCk7XG5cbiAgICAvLyBFeHBhbmQgYXJlYXNcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgMCwgdGlja0xlbmd0aCArIHRpY2tMYWJlbEhlaWdodCk7XG4gICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsIDAsIHRpY2tMZW5ndGggKyB0aWNrTGFiZWxIZWlnaHQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJZQXhpcyhcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgY2hhcnRJbmZvOiBDb21tb25DaGFydEluZm8sXG4gICAgeUF4aXNMb2NhdGlvbjogc3RyaW5nLFxuICAgIGRhdGFzZXRJZHM6IEFycmF5PG51bWJlcj5cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyWUF4aXNcIilcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0cyk7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldElkcyk7XG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWNoYXJ0SW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IGRhdGFzZXRzID0gcmVuZGVySW5mby5kYXRhc2V0cztcbiAgICBpZiAoZGF0YXNldElkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh5QXhpc0xvY2F0aW9uICE9PSBcImxlZnRcIiAmJiB5QXhpc0xvY2F0aW9uICE9PSBcInJpZ2h0XCIpIHJldHVybjtcblxuICAgIGxldCB5TWluT2ZEYXRhc2V0cyA9IG51bGw7XG4gICAgbGV0IHlNYXhPZkRhdGFzZXRzID0gbnVsbDtcbiAgICBsZXQgdG1wVmFsdWVJc1RpbWUgPSBudWxsO1xuICAgIGxldCB2YWx1ZUlzVGltZSA9IGZhbHNlO1xuICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBkYXRhc2V0SWRzKSB7XG4gICAgICAgIGxldCBkYXRhc2V0ID0gZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcbiAgICAgICAgaWYgKGRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgY29udGludWU7XG5cbiAgICAgICAgaWYgKHlNaW5PZkRhdGFzZXRzID09PSBudWxsIHx8IGRhdGFzZXQuZ2V0WU1pbigpIDwgeU1pbk9mRGF0YXNldHMpIHtcbiAgICAgICAgICAgIHlNaW5PZkRhdGFzZXRzID0gZGF0YXNldC5nZXRZTWluKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHlNYXhPZkRhdGFzZXRzID09PSBudWxsIHx8IGRhdGFzZXQuZ2V0WU1heCgpID4geU1heE9mRGF0YXNldHMpIHtcbiAgICAgICAgICAgIHlNYXhPZkRhdGFzZXRzID0gZGF0YXNldC5nZXRZTWF4KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZWVkIGFsbCBkYXRhc2V0cyBoYXZlIHNhbWUgc2V0dGluZ3MgZm9yIHRpbWUgdmFsdWVcbiAgICAgICAgdmFsdWVJc1RpbWUgPSBkYXRhc2V0LnZhbHVlVHlwZSA9PT0gVmFsdWVUeXBlLlRpbWU7XG4gICAgICAgIGlmICh0bXBWYWx1ZUlzVGltZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdG1wVmFsdWVJc1RpbWUgPSB2YWx1ZUlzVGltZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZUlzVGltZSAhPT0gdG1wVmFsdWVJc1RpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJOb3QgYWxsIHZhbHVlcyBpbiB0aW1lIGZvcm1hdFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHlNaW5PZkRhdGFzZXRzKTtcbiAgICAvLyBjb25zb2xlLmxvZyh5TWF4T2ZEYXRhc2V0cyk7XG5cbiAgICBsZXQgeU1pbiA9IG51bGw7XG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHlNaW4gPSBjaGFydEluZm8ueU1pblswXTtcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICB5TWluID0gY2hhcnRJbmZvLnlNaW5bMV07XG4gICAgfVxuICAgIGxldCB5TWluQXNzaWduZWQgPSBmYWxzZTtcbiAgICBpZiAodHlwZW9mIHlNaW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgeU1pbiA9IHlNaW5PZkRhdGFzZXRzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHlNaW5Bc3NpZ25lZCA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHlNYXggPSBudWxsO1xuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICB5TWF4ID0gY2hhcnRJbmZvLnlNYXhbMF07XG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgeU1heCA9IGNoYXJ0SW5mby55TWF4WzFdO1xuICAgIH1cbiAgICBsZXQgeU1heEFzc2lnbmVkID0gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiB5TWF4ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHlNYXggPSB5TWF4T2ZEYXRhc2V0cztcbiAgICB9IGVsc2Uge1xuICAgICAgICB5TWF4QXNzaWduZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoeU1heCA8IHlNaW4pIHtcbiAgICAgICAgbGV0IHlUbXAgPSB5TWluO1xuICAgICAgICB5TWluID0geU1heDtcbiAgICAgICAgeU1heCA9IHlUbXA7XG4gICAgICAgIGxldCB5VG1wQXNzaWduZWQgPSB5TWluQXNzaWduZWQ7XG4gICAgICAgIHlNaW5Bc3NpZ25lZCA9IHlNYXhBc3NpZ25lZDtcbiAgICAgICAgeU1heEFzc2lnbmVkID0geVRtcEFzc2lnbmVkO1xuICAgIH1cblxuICAgIGxldCB5RXh0ZW50ID0geU1heCAtIHlNaW47XG5cbiAgICBsZXQgeVNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKTtcbiAgICBsZXQgeUxvd2VyLCB5VXBwZXI7XG4gICAgaWYgKHlNaW5Bc3NpZ25lZCkge1xuICAgICAgICB5TG93ZXIgPSB5TWluO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHlMb3dlciA9IHlNaW4gLSB5RXh0ZW50ICogMC4yO1xuICAgIH1cbiAgICBpZiAoeU1heEFzc2lnbmVkKSB7XG4gICAgICAgIHlVcHBlciA9IHlNYXg7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgeVVwcGVyID0geU1heCArIHlFeHRlbnQgKiAwLjI7XG4gICAgfVxuICAgIC8vIGlmIGl0IGlzIGJhciBjaGFydCwgemVybyBtdXN0IGJlIGNvbnRhaW5lZCBpbiB0aGUgcmFuZ2VcbiAgICBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuQmFyKSB7XG4gICAgICAgIGlmICh5VXBwZXIgPCAwLjApIHtcbiAgICAgICAgICAgIHlVcHBlciA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHlMb3dlciA+IDAuMCkge1xuICAgICAgICAgICAgeUxvd2VyID0gMC4wO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBkb21haW4gPSBbeUxvd2VyLCB5VXBwZXJdO1xuICAgIGlmIChcbiAgICAgICAgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiICYmIGNoYXJ0SW5mby5yZXZlcnNlWUF4aXNbMF0pIHx8XG4gICAgICAgICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIgJiYgY2hhcnRJbmZvLnJldmVyc2VZQXhpc1sxXSlcbiAgICApIHtcbiAgICAgICAgZG9tYWluID0gW3lVcHBlciwgeUxvd2VyXTtcbiAgICB9XG4gICAgeVNjYWxlLmRvbWFpbihkb21haW4pLnJhbmdlKFtyZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQsIDBdKTtcblxuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICBjaGFydEVsZW1lbnRzW1wibGVmdFlTY2FsZVwiXSA9IHlTY2FsZTtcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICBjaGFydEVsZW1lbnRzW1wicmlnaHRZU2NhbGVcIl0gPSB5U2NhbGU7XG4gICAgfVxuXG4gICAgbGV0IHlBeGlzQ29sb3IgPSBcIlwiO1xuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICB5QXhpc0NvbG9yID0gY2hhcnRJbmZvLnlBeGlzQ29sb3JbMF07XG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgeUF4aXNDb2xvciA9IGNoYXJ0SW5mby55QXhpc0NvbG9yWzFdO1xuICAgIH1cblxuICAgIGxldCB5QXhpc0xhYmVsQ29sb3IgPSBcIlwiO1xuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICB5QXhpc0xhYmVsQ29sb3IgPSBjaGFydEluZm8ueUF4aXNMYWJlbENvbG9yWzBdO1xuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHlBeGlzTGFiZWxDb2xvciA9IGNoYXJ0SW5mby55QXhpc0xhYmVsQ29sb3JbMV07XG4gICAgfVxuXG4gICAgbGV0IHlBeGlzTGFiZWxUZXh0ID0gXCJcIjtcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgeUF4aXNMYWJlbFRleHQgPSBjaGFydEluZm8ueUF4aXNMYWJlbFswXTtcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICB5QXhpc0xhYmVsVGV4dCA9IGNoYXJ0SW5mby55QXhpc0xhYmVsWzFdO1xuICAgIH1cblxuICAgIGxldCB5QXhpc1VuaXRUZXh0ID0gXCJcIjtcbiAgICBsZXQgeUF4aXNUaWNrSW50ZXJ2YWwgPSBudWxsO1xuICAgIGxldCB5QXhpc1RpY2tMYWJlbEZvcm1hdCA9IG51bGw7XG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHlBeGlzVW5pdFRleHQgPSBjaGFydEluZm8ueUF4aXNVbml0WzBdO1xuICAgICAgICB5QXhpc1RpY2tJbnRlcnZhbCA9IGNoYXJ0SW5mby55QXhpc1RpY2tJbnRlcnZhbFswXTsgLy8gc3RyaW5nXG4gICAgICAgIHlBeGlzVGlja0xhYmVsRm9ybWF0ID0gY2hhcnRJbmZvLnlBeGlzVGlja0xhYmVsRm9ybWF0WzBdO1xuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHlBeGlzVW5pdFRleHQgPSBjaGFydEluZm8ueUF4aXNVbml0WzFdO1xuICAgICAgICB5QXhpc1RpY2tJbnRlcnZhbCA9IGNoYXJ0SW5mby55QXhpc1RpY2tJbnRlcnZhbFsxXTsgLy8gc3RyaW5nXG4gICAgICAgIHlBeGlzVGlja0xhYmVsRm9ybWF0ID0gY2hhcnRJbmZvLnlBeGlzVGlja0xhYmVsRm9ybWF0WzFdO1xuICAgIH1cbiAgICAvLyBnZXQgaW50ZXJ2YWwgZnJvbSBzdHJpbmdcbiAgICBsZXQgdGlja0ludGVydmFsID0gbnVsbDtcbiAgICBpZiAodmFsdWVJc1RpbWUpIHtcbiAgICAgICAgdGlja0ludGVydmFsID0gaGVscGVyLnBhcnNlRHVyYXRpb25TdHJpbmcoeUF4aXNUaWNrSW50ZXJ2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRpY2tJbnRlcnZhbCA9IHBhcnNlRmxvYXQoeUF4aXNUaWNrSW50ZXJ2YWwpO1xuICAgICAgICBpZiAoIU51bWJlci5pc051bWJlcih0aWNrSW50ZXJ2YWwpIHx8IE51bWJlci5pc05hTih0aWNrSW50ZXJ2YWwpKSB7XG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHlBeGlzR2VuO1xuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICB5QXhpc0dlbiA9IGQzLmF4aXNMZWZ0KHlTY2FsZSk7XG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgeUF4aXNHZW4gPSBkMy5heGlzUmlnaHQoeVNjYWxlKTtcbiAgICB9XG4gICAgaWYgKHlBeGlzR2VuKSB7XG4gICAgICAgIGxldCB0aWNrTGFiZWxGb3JtYXQgPSBnZXRZVGlja0xhYmVsRm9ybWF0KFxuICAgICAgICAgICAgeUxvd2VyLFxuICAgICAgICAgICAgeVVwcGVyLFxuICAgICAgICAgICAgeUF4aXNUaWNrTGFiZWxGb3JtYXQsXG4gICAgICAgICAgICB2YWx1ZUlzVGltZVxuICAgICAgICApO1xuICAgICAgICBpZiAodGlja0xhYmVsRm9ybWF0KSB7XG4gICAgICAgICAgICB5QXhpc0dlbi50aWNrRm9ybWF0KHRpY2tMYWJlbEZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpY2tWYWx1ZXMgPSBnZXRZVGlja1ZhbHVlcyhcbiAgICAgICAgICAgIHlMb3dlcixcbiAgICAgICAgICAgIHlVcHBlcixcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCxcbiAgICAgICAgICAgIHZhbHVlSXNUaW1lXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aWNrVmFsdWVzKSB7XG4gICAgICAgICAgICB5QXhpc0dlbi50aWNrVmFsdWVzKHRpY2tWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHlBeGlzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwieUF4aXNcIilcbiAgICAgICAgLmNhbGwoeUF4aXNHZW4pXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWF4aXNcIik7XG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHlBeGlzLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArIFwiICwwKVwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICBjaGFydEVsZW1lbnRzW1wibGVmdFlBeGlzXCJdID0geUF4aXM7XG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcInJpZ2h0WUF4aXNcIl0gPSB5QXhpcztcbiAgICB9XG5cbiAgICBsZXQgeUF4aXNMaW5lID0geUF4aXMuc2VsZWN0QWxsKFwicGF0aFwiKTtcbiAgICBpZiAoeUF4aXNDb2xvcikge1xuICAgICAgICB5QXhpc0xpbmUuc3R5bGUoXCJzdHJva2VcIiwgeUF4aXNDb2xvcik7XG4gICAgfVxuXG4gICAgbGV0IHlBeGlzVGlja3MgPSB5QXhpcy5zZWxlY3RBbGwoXCJsaW5lXCIpO1xuICAgIGlmICh5QXhpc0NvbG9yKSB7XG4gICAgICAgIHlBeGlzVGlja3Muc3R5bGUoXCJzdHJva2VcIiwgeUF4aXNDb2xvcik7XG4gICAgfVxuXG4gICAgbGV0IHlBeGlzVGlja0xhYmVscyA9IHlBeGlzXG4gICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpY2stbGFiZWxcIik7XG4gICAgaWYgKHlBeGlzQ29sb3IpIHtcbiAgICAgICAgeUF4aXNUaWNrTGFiZWxzLnN0eWxlKFwiZmlsbFwiLCB5QXhpc0NvbG9yKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgbWF4IHRpY2sgbGFiZWwgd2lkdGhcbiAgICBsZXQgbWF4VGlja0xhYmVsV2lkdGggPSAwO1xuICAgIGZvciAobGV0IGxhYmVsIG9mIHlBeGlzVGlja0xhYmVscykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsYWJlbC50ZXh0Q29udGVudCk7XG4gICAgICAgIGlmIChsYWJlbC50ZXh0Q29udGVudCkge1xuICAgICAgICAgICAgbGV0IGxhYmVsU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXG4gICAgICAgICAgICAgICAgbGFiZWwudGV4dENvbnRlbnQsXG4gICAgICAgICAgICAgICAgXCJ0cmFja2VyLWF4aXMtbGFiZWxcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChsYWJlbFNpemUud2lkdGggPiBtYXhUaWNrTGFiZWxXaWR0aCkge1xuICAgICAgICAgICAgICAgIG1heFRpY2tMYWJlbFdpZHRoID0gbGFiZWxTaXplLndpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKG1heFRpY2tMYWJlbFdpZHRoKTtcblxuICAgIGlmICh5QXhpc1VuaXRUZXh0ICE9PSBcIlwiKSB7XG4gICAgICAgIHlBeGlzTGFiZWxUZXh0ICs9IFwiIChcIiArIHlBeGlzVW5pdFRleHQgKyBcIilcIjtcbiAgICB9XG4gICAgbGV0IHlUaWNrTGVuZ3RoID0gNjtcbiAgICBsZXQgeUF4aXNMYWJlbFNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKHlBeGlzTGFiZWxUZXh0KTtcbiAgICBsZXQgeUF4aXNMYWJlbCA9IHlBeGlzXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC50ZXh0KHlBeGlzTGFiZWxUZXh0KVxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInJvdGF0ZSgtOTApXCIpXG4gICAgICAgIC5hdHRyKFwieFwiLCAoLTEgKiByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQpIC8gMi4wKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzLWxhYmVsXCIpO1xuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICB5QXhpc0xhYmVsLmF0dHIoXG4gICAgICAgICAgICBcInlcIixcbiAgICAgICAgICAgIC15VGlja0xlbmd0aCAtIG1heFRpY2tMYWJlbFdpZHRoIC0geUF4aXNMYWJlbFNpemUuaGVpZ2h0IC8gMi4wXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgeUF4aXNMYWJlbC5hdHRyKFxuICAgICAgICAgICAgXCJ5XCIsXG4gICAgICAgICAgICAreVRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxXaWR0aCArIHlBeGlzTGFiZWxTaXplLmhlaWdodFxuICAgICAgICApO1xuICAgIH1cbiAgICBpZiAoeUF4aXNMYWJlbENvbG9yKSB7XG4gICAgICAgIHlBeGlzTGFiZWwuc3R5bGUoXCJmaWxsXCIsIHlBeGlzTGFiZWxDb2xvcik7XG4gICAgfVxuXG4gICAgbGV0IHlBeGlzV2lkdGggPSB5QXhpc0xhYmVsU2l6ZS5oZWlnaHQgKyBtYXhUaWNrTGFiZWxXaWR0aCArIHlUaWNrTGVuZ3RoO1xuICAgIHlBeGlzLmF0dHIoXCJ3aWR0aFwiLCB5QXhpc1dpZHRoKTtcblxuICAgIC8vIEV4cGFuZCBhcmVhc1xuICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCB5QXhpc1dpZHRoLCAwKTtcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSwgeUF4aXNXaWR0aCwgMCk7XG5cbiAgICAvLyBNb3ZlIGFyZWFzXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgIC8vIE1vdmUgZGF0YUFyZWFcbiAgICAgICAgaGVscGVyLm1vdmVBcmVhKGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEsIHlBeGlzV2lkdGgsIDApO1xuXG4gICAgICAgIC8vIE1vdmUgdGl0bGVcbiAgICAgICAgaWYgKGNoYXJ0RWxlbWVudHMudGl0bGUpIHtcbiAgICAgICAgICAgIGhlbHBlci5tb3ZlQXJlYShjaGFydEVsZW1lbnRzLnRpdGxlLCB5QXhpc1dpZHRoLCAwKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyTGluZShcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgbGluZUluZm86IExpbmVJbmZvLFxuICAgIGRhdGFzZXQ6IERhdGFzZXQsXG4gICAgeUF4aXNMb2NhdGlvbjogc3RyaW5nXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcblxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhbGluZUluZm8pIHJldHVybjtcblxuICAgIGxldCB5U2NhbGU6IGFueSA9IG51bGw7XG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHlTY2FsZSA9IGNoYXJ0RWxlbWVudHMubGVmdFlTY2FsZTtcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICB5U2NhbGUgPSBjaGFydEVsZW1lbnRzLnJpZ2h0WVNjYWxlO1xuICAgIH1cblxuICAgIGlmIChsaW5lSW5mby5zaG93TGluZVtkYXRhc2V0LmdldElkKCldKSB7XG4gICAgICAgIGxldCBsaW5lR2VuID0gZDNcbiAgICAgICAgICAgIC5saW5lPERhdGFQb2ludD4oKVxuICAgICAgICAgICAgLmRlZmluZWQoZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLnZhbHVlICE9PSBudWxsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC54KGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hhcnRFbGVtZW50cy54U2NhbGUocC5kYXRlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAueShmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlTY2FsZShwLnZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBsaW5lID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLmFwcGVuZChcInBhdGhcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWxpbmVcIilcbiAgICAgICAgICAgIC5zdHlsZShcInN0cm9rZS13aWR0aFwiLCBsaW5lSW5mby5saW5lV2lkdGhbZGF0YXNldC5nZXRJZCgpXSk7XG5cbiAgICAgICAgaWYgKGxpbmVJbmZvLmZpbGxHYXBbZGF0YXNldC5nZXRJZCgpXSkge1xuICAgICAgICAgICAgbGluZS5kYXR1bShcbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKGRhdGFzZXQpLmZpbHRlcihmdW5jdGlvbiAocCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC52YWx1ZSAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKS5hdHRyKFwiZFwiLCBsaW5lR2VuIGFzIGFueSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaW5lLmRhdHVtKGRhdGFzZXQpLmF0dHIoXCJkXCIsIGxpbmVHZW4gYXMgYW55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5lSW5mby5saW5lQ29sb3JbZGF0YXNldC5nZXRJZCgpXSkge1xuICAgICAgICAgICAgbGluZS5zdHlsZShcInN0cm9rZVwiLCBsaW5lSW5mby5saW5lQ29sb3JbZGF0YXNldC5nZXRJZCgpXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclBvaW50cyhcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgbGluZUluZm86IExpbmVJbmZvLFxuICAgIGRhdGFzZXQ6IERhdGFzZXQsXG4gICAgeUF4aXNMb2NhdGlvbjogc3RyaW5nXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhsaW5lSW5mbyk7XG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWxpbmVJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgeVNjYWxlOiBhbnkgPSBudWxsO1xuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICB5U2NhbGUgPSBjaGFydEVsZW1lbnRzLmxlZnRZU2NhbGU7XG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgeVNjYWxlID0gY2hhcnRFbGVtZW50cy5yaWdodFlTY2FsZTtcbiAgICB9XG5cbiAgICBpZiAobGluZUluZm8uc2hvd1BvaW50W2RhdGFzZXQuZ2V0SWQoKV0pIHtcbiAgICAgICAgbGV0IGRvdHMgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwiZG90XCIpXG4gICAgICAgICAgICAuZGF0YShcbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKGRhdGFzZXQpLmZpbHRlcihmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwLnZhbHVlICE9PSBudWxsO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIGxpbmVJbmZvLnBvaW50U2l6ZVtkYXRhc2V0LmdldElkKCldKVxuICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCBmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJ0RWxlbWVudHMueFNjYWxlKHAuZGF0ZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJjeVwiLCBmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlTY2FsZShwLnZhbHVlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcImRhdGVcIiwgZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkMy50aW1lRm9ybWF0KFwiJXktJW0tJWRcIikocC5kYXRlIGFzIGFueSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJ2YWx1ZVwiLCBmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHAudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIocC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwLnZhbHVlLnRvRml4ZWQoMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAudmFsdWUudG9GaXhlZCgyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJ2YWx1ZVR5cGVcIiwgVmFsdWVUeXBlW2RhdGFzZXQudmFsdWVUeXBlXSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWRvdFwiKTtcbiAgICAgICAgaWYgKGxpbmVJbmZvLnBvaW50Q29sb3JbZGF0YXNldC5nZXRJZCgpXSkge1xuICAgICAgICAgICAgZG90cy5zdHlsZShcImZpbGxcIiwgbGluZUluZm8ucG9pbnRDb2xvcltkYXRhc2V0LmdldElkKCldKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGxpbmVJbmZvLnBvaW50Qm9yZGVyQ29sb3JbZGF0YXNldC5nZXRJZCgpXSAmJlxuICAgICAgICAgICAgICAgIGxpbmVJbmZvLnBvaW50Qm9yZGVyV2lkdGhbZGF0YXNldC5nZXRJZCgpXSA+IDAuMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZG90cy5zdHlsZShcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgICAgICAgICAgICAgbGluZUluZm8ucG9pbnRCb3JkZXJDb2xvcltkYXRhc2V0LmdldElkKCldXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBkb3RzLnN0eWxlKFxuICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS13aWR0aFwiLFxuICAgICAgICAgICAgICAgICAgICBsaW5lSW5mby5wb2ludEJvcmRlcldpZHRoW2RhdGFzZXQuZ2V0SWQoKV1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpbmVJbmZvLmFsbG93SW5zcGVjdERhdGEpIHtcbiAgICAgICAgICAgIHJlbmRlclRvb2x0aXAoZG90cywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclRvb2x0aXAoXG4gICAgdGFyZ2V0RWxlbWVudHM6IGFueSxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbikge1xuICAgIGxldCB0b29sdGlwID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYS5hcHBlbmQoXCJzdmdcIikuc3R5bGUoXCJvcGFjaXR5XCIsIDApO1xuICAgIGxldCB0b29sdGlwQmcgPSB0b29sdGlwLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgMCk7XG4gICAgbGV0IHRvb2x0aXBMYWJlbCA9IHRvb2x0aXAuYXBwZW5kKFwidGV4dFwiKTtcbiAgICBsZXQgdG9vbHRpcExhYmVsRGF0ZSA9IHRvb2x0aXBMYWJlbFxuICAgICAgICAuYXBwZW5kKFwidHNwYW5cIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdG9vbHRpcC1sYWJlbFwiKTtcbiAgICBsZXQgdG9vbHRpcExhYmVsVmFsdWUgPSB0b29sdGlwTGFiZWxcbiAgICAgICAgLmFwcGVuZChcInRzcGFuXCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRvb2x0aXAtbGFiZWxcIik7XG5cbiAgICBsZXQgeFNwYWNpbmcgPSAzO1xuICAgIGxldCB5U3BhY2luZyA9IDM7XG5cbiAgICB0YXJnZXRFbGVtZW50c1xuICAgICAgICAub24oXCJtb3VzZWVudGVyXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XG4gICAgICAgICAgICBjb25zdCBbeCwgeV0gPSBkMy5wb2ludGVyKGV2ZW50KTtcbiAgICAgICAgICAgIGxldCB0b29sdGlwQmdXaWR0aCA9IDA7XG4gICAgICAgICAgICBsZXQgdG9vbHRpcEJnSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIC8vIERhdGVcbiAgICAgICAgICAgIGxldCBsYWJlbERhdGVUZXh0ID0gXCJkYXRlOiBcIiArIGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwiZGF0ZVwiKTtcbiAgICAgICAgICAgIC8vIGxhYmVsRGF0ZVRleHQgPSB4LnRvU3RyaW5nKCk7Ly8gZGVidWdcbiAgICAgICAgICAgIGxldCBsYWJlbERhdGVTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcbiAgICAgICAgICAgICAgICBsYWJlbERhdGVUZXh0LFxuICAgICAgICAgICAgICAgIFwidHJhY2tlci10b29sdGlwLWxhYmVsXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0b29sdGlwTGFiZWxEYXRlLnRleHQobGFiZWxEYXRlVGV4dCk7XG4gICAgICAgICAgICBpZiAobGFiZWxEYXRlU2l6ZS53aWR0aCA+IHRvb2x0aXBCZ1dpZHRoKSB7XG4gICAgICAgICAgICAgICAgdG9vbHRpcEJnV2lkdGggPSBsYWJlbERhdGVTaXplLndpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9vbHRpcEJnSGVpZ2h0ICs9IGxhYmVsRGF0ZVNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgdG9vbHRpcExhYmVsRGF0ZS5hdHRyKFwieFwiLCB4U3BhY2luZykuYXR0cihcInlcIiwgdG9vbHRpcEJnSGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gVmFsdWVcbiAgICAgICAgICAgIGxldCBsYWJlbFZhbHVlVGV4dCA9IFwidmFsdWU6IFwiO1xuICAgICAgICAgICAgbGV0IHZhbHVlVHlwZSA9IGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwidmFsdWVUeXBlXCIpO1xuICAgICAgICAgICAgbGV0IHN0clZhbHVlID0gZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJ2YWx1ZVwiKTtcbiAgICAgICAgICAgIC8vIHN0clZhbHVlICs9IHkudG9TdHJpbmcoKTsvL2RlYnVnXG4gICAgICAgICAgICBpZiAodmFsdWVUeXBlID09PSBcIlRpbWVcIikge1xuICAgICAgICAgICAgICAgIGxldCBkYXlTdGFydCA9IHdpbmRvdy5tb21lbnQoXCIwMDowMFwiLCBcIkhIOm1tXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGxldCB0aWNrVGltZSA9IGRheVN0YXJ0LmFkZChwYXJzZUZsb2F0KHN0clZhbHVlKSwgXCJzZWNvbmRzXCIpO1xuICAgICAgICAgICAgICAgIGxldCBkYXRlVmFsdWUgPSB0aWNrVGltZS5mb3JtYXQoXCJISDptbVwiKTtcbiAgICAgICAgICAgICAgICBsYWJlbFZhbHVlVGV4dCArPSBkYXRlVmFsdWU7XG4gICAgICAgICAgICAgICAgdG9vbHRpcExhYmVsVmFsdWUudGV4dChsYWJlbFZhbHVlVGV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxhYmVsVmFsdWVUZXh0ICs9IHN0clZhbHVlO1xuICAgICAgICAgICAgICAgIHRvb2x0aXBMYWJlbFZhbHVlLnRleHQobGFiZWxWYWx1ZVRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGxhYmVsVmFsdWVTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcbiAgICAgICAgICAgICAgICBsYWJlbFZhbHVlVGV4dCxcbiAgICAgICAgICAgICAgICBcInRyYWNrZXItdG9vbHRpcC1sYWJlbFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGxhYmVsVmFsdWVTaXplLndpZHRoID4gdG9vbHRpcEJnV2lkdGgpIHtcbiAgICAgICAgICAgICAgICB0b29sdGlwQmdXaWR0aCA9IGxhYmVsVmFsdWVTaXplLndpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9vbHRpcEJnSGVpZ2h0ICs9IHlTcGFjaW5nICsgbGFiZWxWYWx1ZVNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgdG9vbHRpcExhYmVsVmFsdWUuYXR0cihcInhcIiwgeFNwYWNpbmcpLmF0dHIoXCJ5XCIsIHRvb2x0aXBCZ0hlaWdodCk7XG5cbiAgICAgICAgICAgIHRvb2x0aXBCZ1dpZHRoICs9IDIgKiB4U3BhY2luZztcbiAgICAgICAgICAgIHRvb2x0aXBCZ0hlaWdodCArPSAyICogeVNwYWNpbmc7XG4gICAgICAgICAgICB0b29sdGlwTGFiZWxcbiAgICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHRvb2x0aXBCZ1dpZHRoKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRvb2x0aXBCZ0hlaWdodCk7XG5cbiAgICAgICAgICAgIHRvb2x0aXBCZ1xuICAgICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgdG9vbHRpcEJnV2lkdGgpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdG9vbHRpcEJnSGVpZ2h0KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRvb2x0aXBcIik7XG5cbiAgICAgICAgICAgIGxldCB0b29sdGlwUG9zWCA9IHg7XG4gICAgICAgICAgICBsZXQgdG9vbHRpcFBvc1kgPSB5O1xuICAgICAgICAgICAgbGV0IHRvb2x0aXBYT2Zmc2V0ID0gMTI7XG4gICAgICAgICAgICBsZXQgdG9vbHRpcFlPZmZzZXQgPSAxMjtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB4ICsgdG9vbHRpcFhPZmZzZXQgKyB0b29sdGlwQmdXaWR0aCA+XG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGhcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIG1vdmUgdG9vbHRpcCB0byBsZWZ0XG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc1ggPSB4IC0gdG9vbHRpcEJnV2lkdGggLSB0b29sdGlwWE9mZnNldDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBhdCB0aGUgcmlnaHQgc2lkZVxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NYID0geCArIHRvb2x0aXBYT2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHkgLSB0b29sdGlwWU9mZnNldCAtIHRvb2x0aXBCZ0hlaWdodCA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBkb3duIHNpZGVcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zWSA9IHkgKyB0b29sdGlwWU9mZnNldDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBtb3ZlIHRvIHVwIHNpZGVcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zWSA9IHkgLSB0b29sdGlwWU9mZnNldCAtIHRvb2x0aXBCZ0hlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvb2x0aXAuYXR0cihcInhcIiwgdG9vbHRpcFBvc1gpLmF0dHIoXCJ5XCIsIHRvb2x0aXBQb3NZKTtcbiAgICAgICAgICAgIHRvb2x0aXAudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoXCJvcGFjaXR5XCIsIDEpO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJtb3VzZWxlYXZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRvb2x0aXAudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuc3R5bGUoXCJvcGFjaXR5XCIsIDApO1xuICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQmFyKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBiYXJJbmZvOiBCYXJJbmZvLFxuICAgIGRhdGFzZXQ6IERhdGFzZXQsXG4gICAgeUF4aXNMb2NhdGlvbjogc3RyaW5nLFxuICAgIGN1cnJCYXJTZXQ6IG51bWJlcixcbiAgICB0b3RhbE51bU9mQmFyU2V0czogbnVtYmVyXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcbiAgICAvLyBjb25zb2xlLmxvZyhiYXJJbmZvKTtcbiAgICAvLyBjb25zb2xlLmxvZyhcIiVkLyVkXCIsIGN1cnJCYXJTZXQsIHRvdGFsTnVtT2ZCYXJTZXRzKTtcblxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhYmFySW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IGJhckdhcCA9IDE7XG4gICAgbGV0IGJhclNldFdpZHRoID0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyBkYXRhc2V0LmdldExlbmd0aCgpO1xuICAgIGxldCBiYXJXaWR0aCA9IGJhclNldFdpZHRoO1xuICAgIGlmIChiYXJTZXRXaWR0aCAtIGJhckdhcCA+IDApIHtcbiAgICAgICAgYmFyV2lkdGggPSBiYXJTZXRXaWR0aCAtIGJhckdhcDtcbiAgICB9XG4gICAgYmFyV2lkdGggPSBiYXJXaWR0aCAvIHRvdGFsTnVtT2ZCYXJTZXRzO1xuXG4gICAgbGV0IHBvcnRpb25MZWZ0ID0gKGN1cnJCYXJTZXQgKyAxKSAvIHRvdGFsTnVtT2ZCYXJTZXRzO1xuXG4gICAgbGV0IHlTY2FsZTogYW55ID0gbnVsbDtcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgeVNjYWxlID0gY2hhcnRFbGVtZW50cy5sZWZ0WVNjYWxlO1xuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHlTY2FsZSA9IGNoYXJ0RWxlbWVudHMucmlnaHRZU2NhbGU7XG4gICAgfVxuXG4gICAgbGV0IGJhcnMgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgIC5zZWxlY3RBbGwoXCJiYXJcIilcbiAgICAgICAgLmRhdGEoXG4gICAgICAgICAgICBBcnJheS5mcm9tKGRhdGFzZXQpLmZpbHRlcihmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAudmFsdWUgIT09IG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5lbnRlcigpXG4gICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbiAocDogRGF0YVBvaW50LCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBvcnRpb25WaXNpYmxlID0gY3VyckJhclNldCArIDEgLSB0b3RhbE51bU9mQmFyU2V0cyAvIDIuMDtcbiAgICAgICAgICAgICAgICBpZiAocG9ydGlvblZpc2libGUgPCAxLjApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMueFNjYWxlKHAuZGF0ZSkgLVxuICAgICAgICAgICAgICAgICAgICAgICAgYmFyU2V0V2lkdGggLyAyLjAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyckJhclNldCAqIGJhcldpZHRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRpb25WaXNpYmxlICogYmFyV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMueFNjYWxlKHAuZGF0ZSkgLVxuICAgICAgICAgICAgICAgIGJhclNldFdpZHRoIC8gMi4wICtcbiAgICAgICAgICAgICAgICBjdXJyQmFyU2V0ICogYmFyV2lkdGhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XG4gICAgICAgICAgICByZXR1cm4geVNjYWxlKE1hdGgubWF4KHAudmFsdWUsIDApKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBmdW5jdGlvbiAocDogRGF0YVBvaW50LCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBvcnRpb25WaXNpYmxlID0gY3VyckJhclNldCArIDEgLSB0b3RhbE51bU9mQmFyU2V0cyAvIDIuMDtcbiAgICAgICAgICAgICAgICBpZiAocG9ydGlvblZpc2libGUgPCAwLjApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcnRpb25WaXNpYmxlIDwgMS4wKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXJXaWR0aCAqIHBvcnRpb25WaXNpYmxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYmFyV2lkdGg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IGRhdGFzZXQuZ2V0TGVuZ3RoKCkgLSAxKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBvcnRpb25WaXNpYmxlID1cbiAgICAgICAgICAgICAgICAgICAgMS4wIC0gKGN1cnJCYXJTZXQgKyAxIC0gdG90YWxOdW1PZkJhclNldHMgLyAyLjApO1xuICAgICAgICAgICAgICAgIGlmIChwb3J0aW9uVmlzaWJsZSA8IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC4wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9ydGlvblZpc2libGUgPCAxLjApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhcldpZHRoICogcG9ydGlvblZpc2libGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBiYXJXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBiYXJXaWR0aDtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xuICAgICAgICAgICAgaWYgKHAudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoeVNjYWxlKHAudmFsdWUpIC0geVNjYWxlKDApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItYmFyXCIpO1xuXG4gICAgaWYgKGJhckluZm8uYmFyQ29sb3JbZGF0YXNldC5nZXRJZCgpXSkge1xuICAgICAgICBiYXJzLnN0eWxlKFwiZmlsbFwiLCBiYXJJbmZvLmJhckNvbG9yW2RhdGFzZXQuZ2V0SWQoKV0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyTGVnZW5kKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBjaGFydEluZm86IENvbW1vbkNoYXJ0SW5mb1xuKSB7XG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRJbmZvLmxlZ2VuZFBvc2l0aW9uKTtcbiAgICAvLyBjb25zb2xlLmxvZyhjaGFydEluZm8ubGVnZW5kT3JpZW50YXRpb24pO1xuXG4gICAgLy8gR2V0IGNoYXJ0IGVsZW1lbnRzXG4gICAgbGV0IHN2ZyA9IGNoYXJ0RWxlbWVudHMuc3ZnO1xuICAgIGxldCBncmFwaEFyZWEgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYTtcbiAgICBsZXQgZGF0YUFyZWEgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhO1xuICAgIGxldCB0aXRsZSA9IGNoYXJ0RWxlbWVudHMudGl0bGU7XG4gICAgbGV0IHhBeGlzID0gY2hhcnRFbGVtZW50cy54QXhpcztcbiAgICBsZXQgbGVmdFlBeGlzID0gY2hhcnRFbGVtZW50cy5sZWZ0WUF4aXM7XG4gICAgbGV0IHJpZ2h0WUF4aXMgPSBjaGFydEVsZW1lbnRzLnJpZ2h0WUF4aXM7XG5cbiAgICAvLyBHZXQgZWxlbWVudCB3aWR0aCBhbmQgaGVpZ2h0XG4gICAgbGV0IHRpdGxlSGVpZ2h0ID0gMC4wO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgICB0aXRsZUhlaWdodCA9IHBhcnNlRmxvYXQodGl0bGUuYXR0cihcImhlaWdodFwiKSk7XG4gICAgfVxuICAgIGxldCB4QXhpc0hlaWdodCA9IHBhcnNlRmxvYXQoeEF4aXMuYXR0cihcImhlaWdodFwiKSk7XG4gICAgbGV0IGxlZnRZQXhpc1dpZHRoID0gMC4wO1xuICAgIGlmIChsZWZ0WUF4aXMpIHtcbiAgICAgICAgbGVmdFlBeGlzV2lkdGggPSBwYXJzZUZsb2F0KGxlZnRZQXhpcy5hdHRyKFwid2lkdGhcIikpO1xuICAgIH1cbiAgICBsZXQgcmlnaHRZQXhpc1dpZHRoID0gMC4wO1xuICAgIGlmIChyaWdodFlBeGlzKSB7XG4gICAgICAgIHJpZ2h0WUF4aXNXaWR0aCA9IHBhcnNlRmxvYXQocmlnaHRZQXhpcy5hdHRyKFwid2lkdGhcIikpO1xuICAgIH1cbiAgICAvLyBHZXQgZGF0YXNldHNcbiAgICBsZXQgZGF0YXNldHMgPSByZW5kZXJJbmZvLmRhdGFzZXRzO1xuICAgIGxldCB4RGF0YXNldElkcyA9IGRhdGFzZXRzLmdldFhEYXRhc2V0SWRzKCk7XG4gICAgLy8gY29uc29sZS5sb2coeERhdGFzZXRJZHMpO1xuXG4gICAgLy8gR2V0IG5hbWVzIGFuZCB0aGVpciBkaW1lbnNpb25cbiAgICBsZXQgbmFtZXMgPSBkYXRhc2V0cy5nZXROYW1lcygpOyAvLyB4RGF0YXNldCBuYW1lIGluY2x1ZGVkXG4gICAgbGV0IG5hbWVTaXplcyA9IG5hbWVzLm1hcChmdW5jdGlvbiAobikge1xuICAgICAgICByZXR1cm4gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShuLCBcInRyYWNrZXItbGVnZW5kLWxhYmVsXCIpO1xuICAgIH0pO1xuICAgIGxldCBpbmRNYXhOYW1lID0gMDtcbiAgICBsZXQgbWF4TmFtZVdpZHRoID0gMC4wO1xuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IG5hbWVzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAobmFtZVNpemVzW2luZF0ud2lkdGggPiBtYXhOYW1lV2lkdGgpIHtcbiAgICAgICAgICAgIG1heE5hbWVXaWR0aCA9IG5hbWVTaXplc1tpbmRdLndpZHRoO1xuICAgICAgICAgICAgaW5kTWF4TmFtZSA9IGluZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgbWF4TmFtZSA9IG5hbWVzW2luZE1heE5hbWVdO1xuICAgIGxldCBjaGFyYWN0ZXJXaWR0aCA9IG1heE5hbWVXaWR0aCAvIG1heE5hbWUubGVuZ3RoO1xuICAgIGxldCBuYW1lSGVpZ2h0ID0gbmFtZVNpemVzW2luZE1heE5hbWVdLmhlaWdodDtcbiAgICBsZXQgbnVtTmFtZXMgPSBuYW1lcy5sZW5ndGggLSB4RGF0YXNldElkcy5sZW5ndGg7XG5cbiAgICBsZXQgeFNwYWNpbmcgPSAyICogY2hhcmFjdGVyV2lkdGg7XG4gICAgbGV0IHlTcGFjaW5nID0gbmFtZUhlaWdodDtcbiAgICBsZXQgbWFya2VyV2lkdGggPSAyICogY2hhcmFjdGVyV2lkdGg7XG5cbiAgICAvLyBHZXQgbGVnZW5kIHdpZHRoIGFuZCBoZWlnaHRcbiAgICBsZXQgbGVnZW5kV2lkdGggPSAwO1xuICAgIGxldCBsZWdlbmRIZWlnaHQgPSAwO1xuICAgIGlmIChjaGFydEluZm8ubGVnZW5kT3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICBsZWdlbmRXaWR0aCA9IHhTcGFjaW5nICogMyArIG1hcmtlcldpZHRoICsgbWF4TmFtZVdpZHRoO1xuICAgICAgICBsZWdlbmRIZWlnaHQgPSAobnVtTmFtZXMgKyAxKSAqIHlTcGFjaW5nO1xuICAgIH0gZWxzZSBpZiAoY2hhcnRJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICBsZWdlbmRXaWR0aCA9XG4gICAgICAgICAgICAoMiAqIHhTcGFjaW5nICsgbWFya2VyV2lkdGgpICogbnVtTmFtZXMgK1xuICAgICAgICAgICAgeFNwYWNpbmcgK1xuICAgICAgICAgICAgZDMuc3VtKG5hbWVTaXplcywgZnVuY3Rpb24gKHMsIGkpIHtcbiAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBzLndpZHRoO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGxlZ2VuZEhlaWdodCA9IHlTcGFjaW5nICsgbmFtZUhlaWdodDtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coXG4gICAgLy8gICAgIGBtYXhOYW1lOiAke21heE5hbWV9LCBjaGFyYWN0ZXJXaWR0aDogJHtjaGFyYWN0ZXJXaWR0aH0sIG1heE5hbWVXaWR0aDogJHttYXhOYW1lV2lkdGh9YFxuICAgIC8vICk7XG4gICAgLy8gY29uc29sZS5sb2coYHhTcGFjaW5nOiR7eFNwYWNpbmd9LCBudW1OYW1lczogJHtudW1OYW1lc30sIG1hcmtlcldpZHRoOiAke21hcmtlcldpZHRofWApO1xuICAgIC8vIGNvbnNvbGUubG9nKGBsZWdlbmRXaWR0aDogJHtsZWdlbmRXaWR0aH0sIGxlZ2VuZEhlaWdodDogJHtsZWdlbmRIZWlnaHR9YCk7XG5cbiAgICAvLyBDYWxjdWFsdGUgbGVuZ2VuZFggYW5kIGxlZ2VuZFlcbiAgICBsZXQgbGVnZW5kWCA9IDAuMDsgLy8gcmVsYXRpdmUgdG8gZ3JhcGhBcmVhXG4gICAgbGV0IGxlZ2VuZFkgPSAwLjA7XG4gICAgaWYgKGNoYXJ0SW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJ0b3BcIikge1xuICAgICAgICAvLyBiZWxvdyB0aXRsZVxuICAgICAgICBsZWdlbmRYID1cbiAgICAgICAgICAgIGxlZnRZQXhpc1dpZHRoICtcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wIC1cbiAgICAgICAgICAgIGxlZ2VuZFdpZHRoIC8gMi4wO1xuICAgICAgICBsZWdlbmRZID0gdGl0bGVIZWlnaHQ7XG4gICAgICAgIC8vIEV4cGFuZCBzdmdcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoc3ZnLCAwLCBsZWdlbmRIZWlnaHQgKyB5U3BhY2luZyk7XG4gICAgICAgIC8vIE1vdmUgZGF0YUFyZWEgZG93blxuICAgICAgICBoZWxwZXIubW92ZUFyZWEoZGF0YUFyZWEsIDAsIGxlZ2VuZEhlaWdodCArIHlTcGFjaW5nKTtcbiAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJib3R0b21cIikge1xuICAgICAgICAvLyBiZWxsb3cgeC1heGlzIGxhYmVsXG4gICAgICAgIGxlZ2VuZFggPVxuICAgICAgICAgICAgbGVmdFlBeGlzV2lkdGggK1xuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyLjAgLVxuICAgICAgICAgICAgbGVnZW5kV2lkdGggLyAyLjA7XG4gICAgICAgIGxlZ2VuZFkgPVxuICAgICAgICAgICAgdGl0bGVIZWlnaHQgK1xuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICtcbiAgICAgICAgICAgIHhBeGlzSGVpZ2h0ICtcbiAgICAgICAgICAgIHlTcGFjaW5nO1xuICAgICAgICAvLyBFeHBhbmQgc3ZnXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgMCwgbGVnZW5kSGVpZ2h0ICsgeVNwYWNpbmcpO1xuICAgIH0gZWxzZSBpZiAoY2hhcnRJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICBsZWdlbmRYID0gMDtcbiAgICAgICAgbGVnZW5kWSA9XG4gICAgICAgICAgICB0aXRsZUhlaWdodCArXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLyAyLjAgLVxuICAgICAgICAgICAgbGVnZW5kSGVpZ2h0IC8gMi4wO1xuICAgICAgICAvLyBFeHBhbmQgc3ZnXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgbGVnZW5kV2lkdGggKyB4U3BhY2luZywgMCk7XG4gICAgICAgIC8vIE1vdmUgZGF0YUFyZWEgcmlnaHRcbiAgICAgICAgaGVscGVyLm1vdmVBcmVhKGRhdGFBcmVhLCBsZWdlbmRXaWR0aCArIHhTcGFjaW5nLCAwKTtcbiAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIGxlZ2VuZFggPVxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggK1xuICAgICAgICAgICAgbGVmdFlBeGlzV2lkdGggK1xuICAgICAgICAgICAgcmlnaHRZQXhpc1dpZHRoICtcbiAgICAgICAgICAgIHhTcGFjaW5nO1xuICAgICAgICBsZWdlbmRZID1cbiAgICAgICAgICAgIHRpdGxlSGVpZ2h0ICtcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCAvIDIuMCAtXG4gICAgICAgICAgICBsZWdlbmRIZWlnaHQgLyAyLjA7XG4gICAgICAgIC8vIEV4cGFuZCBzdmdcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoc3ZnLCBsZWdlbmRXaWR0aCArIHhTcGFjaW5nLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGBsZWdlbmRYOiAke2xlZ2VuZFh9LCBsZWdlbmRZOiAke2xlZ2VuZFl9YCk7XG5cbiAgICBsZXQgbGVnZW5kID0gY2hhcnRFbGVtZW50cy5ncmFwaEFyZWFcbiAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImxlZ2VuZFwiKVxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIGxlZ2VuZFggKyBcIixcIiArIGxlZ2VuZFkgKyBcIilcIik7XG4gICAgLy8gY29uc29sZS5sb2coJ2xlZ2VuZFg6ICVkLCBsZWdlbmRZOiAlZCcsIGxlZ2VuZFgsIGxlZ2VuZFkpO1xuXG4gICAgbGV0IGxlZ2VuZEJnID0gbGVnZW5kXG4gICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWxlZ2VuZFwiKVxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIGxlZ2VuZFdpZHRoKVxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCBsZWdlbmRIZWlnaHQpO1xuICAgIGlmIChjaGFydEluZm8ubGVnZW5kQmdDb2xvcikge1xuICAgICAgICBsZWdlbmRCZy5zdHlsZShcImZpbGxcIiwgY2hhcnRJbmZvLmxlZ2VuZEJnQ29sb3IpO1xuICAgIH1cbiAgICBpZiAoY2hhcnRJbmZvLmxlZ2VuZEJvcmRlckNvbG9yKSB7XG4gICAgICAgIGxlZ2VuZEJnLnN0eWxlKFwic3Ryb2tlXCIsIGNoYXJ0SW5mby5sZWdlbmRCb3JkZXJDb2xvcik7XG4gICAgfVxuXG4gICAgbGV0IGZpcnN0TWFya2VyWCA9IHhTcGFjaW5nO1xuICAgIGxldCBmaXJzdE1hcmtlclkgPSBuYW1lSGVpZ2h0O1xuICAgIGxldCBmaXJzdExhYmVsWCA9IGZpcnN0TWFya2VyWCArIHhTcGFjaW5nICsgbWFya2VyV2lkdGg7IC8vIHhTcGFjaW5nICsgMiAqIHhTcGFpbmdcbiAgICBsZXQgZmlyc3RMYWJlbFkgPSBmaXJzdE1hcmtlclk7XG5cbiAgICBpZiAoY2hhcnRJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgaWYgKGNoYXJ0SW5mby5HZXRHcmFwaFR5cGUoKSA9PT0gR3JhcGhUeXBlLkxpbmUpIHtcbiAgICAgICAgICAgIC8vIGxpbmVzXG4gICAgICAgICAgICBsZWdlbmRcbiAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwibWFya2Vyc1wiKVxuICAgICAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxuICAgICAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcIngxXCIsIGZpcnN0TWFya2VyWClcbiAgICAgICAgICAgICAgICAuYXR0cihcIngyXCIsIGZpcnN0TWFya2VyWCArIG1hcmtlcldpZHRoKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieTFcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBudW1FbGVtc0V4Y2x1ZGVkID0geERhdGFzZXRJZHMuZmlsdGVyKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkIDwgaTtcbiAgICAgICAgICAgICAgICAgICAgfSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpID0gaSAtIG51bUVsZW1zRXhjbHVkZWQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE1hcmtlclkgKyBpICogeVNwYWNpbmc7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInkyXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbnVtRWxlbXNFeGNsdWRlZCA9IHhEYXRhc2V0SWRzLmZpbHRlcigoaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZCA8IGk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGkgLSBudW1FbGVtc0V4Y2x1ZGVkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RNYXJrZXJZICsgaSAqIHlTcGFjaW5nO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLmxpbmVDb2xvcltpXTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gcG9pbnRzXG4gICAgICAgICAgICBsZWdlbmRcbiAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwibWFya2Vyc1wiKVxuICAgICAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxuICAgICAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgZmlyc3RNYXJrZXJYICsgbWFya2VyV2lkdGggLyAyLjApXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJjeVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG51bUVsZW1zRXhjbHVkZWQgPSB4RGF0YXNldElkcy5maWx0ZXIoKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQgPCBpO1xuICAgICAgICAgICAgICAgICAgICB9KS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpIC0gbnVtRWxlbXNFeGNsdWRlZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TWFya2VyWSArIGkgKiB5U3BhY2luZztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5zaG93UG9pbnRbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5wb2ludFNpemVbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykucG9pbnRDb2xvcltpXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5CYXIpIHtcbiAgICAgICAgICAgIC8vIGJhcnNcbiAgICAgICAgICAgIGxlZ2VuZFxuICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJtYXJrZXJzXCIpXG4gICAgICAgICAgICAgICAgLmRhdGEobmFtZXMpXG4gICAgICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmaXJzdE1hcmtlclgpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbnVtRWxlbXNFeGNsdWRlZCA9IHhEYXRhc2V0SWRzLmZpbHRlcigoaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZCA8IGk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGkgLSBudW1FbGVtc0V4Y2x1ZGVkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RNYXJrZXJZICsgaSAqIHlTcGFjaW5nIC0gbmFtZUhlaWdodCAvIDIuMDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgbWFya2VyV2lkdGgpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbmFtZUhlaWdodClcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgQmFySW5mbykuYmFyQ29sb3JbaV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBuYW1lc1xuICAgICAgICBsZXQgbmFtZUxhYmVscyA9IGxlZ2VuZFxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImxhYmVsc1wiKVxuICAgICAgICAgICAgLmRhdGEobmFtZXMpXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmaXJzdExhYmVsWClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBsZXQgbnVtRWxlbXNFeGNsdWRlZCA9IHhEYXRhc2V0SWRzLmZpbHRlcigoaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkIDwgaTtcbiAgICAgICAgICAgICAgICB9KS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaSA9IGkgLSBudW1FbGVtc0V4Y2x1ZGVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdExhYmVsWSArIGkgKiB5U3BhY2luZztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGV4dChmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdHlsZShcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbGVnZW5kLWxhYmVsXCIpO1xuXG4gICAgICAgIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5MaW5lKSB7XG4gICAgICAgICAgICBuYW1lTGFiZWxzLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykubGluZUNvbG9yW2ldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuQmFyKSB7XG4gICAgICAgICAgICBuYW1lTGFiZWxzLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBCYXJJbmZvKS5iYXJDb2xvcltpXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGFydEluZm8ubGVnZW5kT3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5MaW5lKSB7XG4gICAgICAgICAgICAvLyBsaW5lc1xuICAgICAgICAgICAgbGVnZW5kXG4gICAgICAgICAgICAgICAgLnNlbGVjdEFsbChcIm1hcmtlcnNcIilcbiAgICAgICAgICAgICAgICAuZGF0YShuYW1lcylcbiAgICAgICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJsaW5lXCIpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvc1ggPSB4U3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgW2luZCwgc2l6ZV0gb2YgbmFtZVNpemVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA8IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NYICs9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcldpZHRoICsgeFNwYWNpbmcgKyBzaXplLndpZHRoICsgeFNwYWNpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NYO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvc1ggPSB4U3BhY2luZyArIG1hcmtlcldpZHRoO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBbaW5kLCBzaXplXSBvZiBuYW1lU2l6ZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaW5kKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kIDwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc1ggKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFNwYWNpbmcgKyBzaXplLndpZHRoICsgeFNwYWNpbmcgKyBtYXJrZXJXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc1g7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInkxXCIsIGZpcnN0TWFya2VyWSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInkyXCIsIGZpcnN0TWFya2VyWSlcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykubGluZUNvbG9yW2ldO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBwb2ludHNcbiAgICAgICAgICAgIGxlZ2VuZFxuICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJtYXJrZXJzXCIpXG4gICAgICAgICAgICAgICAgLmRhdGEobmFtZXMpXG4gICAgICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvc1ggPSB4U3BhY2luZyArIG1hcmtlcldpZHRoIC8gMi4wO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBbaW5kLCBzaXplXSBvZiBuYW1lU2l6ZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaW5kKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kIDwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc1ggKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGggLyAyLjAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4U3BhY2luZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4U3BhY2luZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcldpZHRoIC8gMi4wO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zWDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgZmlyc3RNYXJrZXJZKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5zaG93UG9pbnRbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5wb2ludFNpemVbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykucG9pbnRDb2xvcltpXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5CYXIpIHtcbiAgICAgICAgICAgIC8vIGJhcnNcbiAgICAgICAgICAgIGxlZ2VuZFxuICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJtYXJrZXJzXCIpXG4gICAgICAgICAgICAgICAgLmRhdGEoXG4gICAgICAgICAgICAgICAgICAgIG5hbWVzLmZpbHRlcigobiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF4RGF0YXNldElkcy5pbmNsdWRlcyhpKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvc1ggPSB4U3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgW2luZCwgc2l6ZV0gb2YgbmFtZVNpemVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA8IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NYICs9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcldpZHRoICsgeFNwYWNpbmcgKyBzaXplLndpZHRoICsgeFNwYWNpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NYO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZpcnN0TWFya2VyWSAtIG5hbWVIZWlnaHQgLyAyLjApXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBtYXJrZXJXaWR0aClcbiAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBuYW1lSGVpZ2h0KVxuICAgICAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBCYXJJbmZvKS5iYXJDb2xvcltpXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5hbWVzXG4gICAgICAgIGxldCBuYW1lTGFiZWxzID0gbGVnZW5kXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwibGFiZWxzXCIpXG4gICAgICAgICAgICAuZGF0YShuYW1lcylcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIGxldCBwb3NYID0geFNwYWNpbmcgKyBtYXJrZXJXaWR0aCArIHhTcGFjaW5nO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IFtpbmQsIHNpemVdIG9mIG5hbWVTaXplcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kIDwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zWCArPSBzaXplLndpZHRoICsgeFNwYWNpbmcgKyBtYXJrZXJXaWR0aCArIHhTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvc1g7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZpcnN0TGFiZWxZKVxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3R5bGUoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWxlZ2VuZC1sYWJlbFwiKTtcblxuICAgICAgICBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuTGluZSkge1xuICAgICAgICAgICAgbmFtZUxhYmVscy5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLmxpbmVDb2xvcltpXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5HZXRHcmFwaFR5cGUoKSA9PT0gR3JhcGhUeXBlLkJhcikge1xuICAgICAgICAgICAgbmFtZUxhYmVscy5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgQmFySW5mbykuYmFyQ29sb3JbaV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyVGl0bGUoXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGNoYXJ0SW5mbzogQ29tbW9uQ2hhcnRJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclRpdGxlXCIpXG4gICAgLy8gdW5kZXIgZ3JhcGhBcmVhXG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWNoYXJ0SW5mbykgcmV0dXJuO1xuXG4gICAgaWYgKCFjaGFydEluZm8udGl0bGUpIHJldHVybjtcbiAgICBsZXQgdGl0bGVTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShjaGFydEluZm8udGl0bGUsIFwidHJhY2tlci10aXRsZVwiKTtcblxuICAgIC8vIEFwcGVuZCB0aXRsZVxuICAgIGxldCB0aXRsZSA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC50ZXh0KGNoYXJ0SW5mby50aXRsZSkgLy8gcGl2b3QgYXQgY2VudGVyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ0aXRsZVwiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyLjAgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICB0aXRsZVNpemUuaGVpZ2h0IC8gMi4wICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRpdGxlU2l6ZS5oZWlnaHQpIC8vIGZvciBsYXRlciB1c2VcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdGl0bGVcIik7XG4gICAgY2hhcnRFbGVtZW50c1tcInRpdGxlXCJdID0gdGl0bGU7XG5cbiAgICAvLyBFeHBhbmQgcGFyZW50IGFyZWFzXG4gICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIDAsIHRpdGxlU2l6ZS5oZWlnaHQpO1xuICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLCAwLCB0aXRsZVNpemUuaGVpZ2h0KTtcblxuICAgIC8vIE1vdmUgc2libGluZyBhcmVhc1xuICAgIGhlbHBlci5tb3ZlQXJlYShjaGFydEVsZW1lbnRzLmRhdGFBcmVhLCAwLCB0aXRsZVNpemUuaGVpZ2h0KTtcblxuICAgIHJldHVybjtcbn1cblxuZnVuY3Rpb24gc2V0Q2hhcnRTY2FsZShcbiAgICBfY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbikge1xuICAgIGxldCBjYW52YXMgPSBkMy5zZWxlY3QoX2NhbnZhcyk7XG4gICAgbGV0IHN2ZyA9IGNoYXJ0RWxlbWVudHMuc3ZnO1xuICAgIGxldCBzdmdXaWR0aCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJ3aWR0aFwiKSk7XG4gICAgbGV0IHN2Z0hlaWdodCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJoZWlnaHRcIikpO1xuICAgIHN2Zy5hdHRyKFwid2lkdGhcIiwgbnVsbClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbClcbiAgICAgICAgLmF0dHIoXCJ2aWV3Qm94XCIsIGAwIDAgJHtzdmdXaWR0aH0gJHtzdmdIZWlnaHR9YClcbiAgICAgICAgLmF0dHIoXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwieE1pZFlNaWQgbWVldFwiKTtcblxuICAgIGlmIChyZW5kZXJJbmZvLmZpdFBhbmVsV2lkdGgpIHtcbiAgICAgICAgY2FudmFzLnN0eWxlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZShcbiAgICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICAgIChzdmdXaWR0aCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxuICAgICAgICApO1xuICAgICAgICBjYW52YXMuc3R5bGUoXG4gICAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgICAgKHN2Z0hlaWdodCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQXJlYXMoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pOiBDaGFydEVsZW1lbnRzIHtcbiAgICBsZXQgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyA9IHt9O1xuICAgIC8vIHdob2xlIGFyZWEgZm9yIHBsb3R0aW5nLCBpbmNsdWRlcyBtYXJnaW5zXG4gICAgbGV0IHN2ZyA9IGQzXG4gICAgICAgIC5zZWxlY3QoY2FudmFzKVxuICAgICAgICAuYXBwZW5kKFwic3ZnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ucmlnaHRcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXG4gICAgICAgICk7XG4gICAgY2hhcnRFbGVtZW50c1tcInN2Z1wiXSA9IHN2ZztcblxuICAgIC8vIGdyYXBoQXJlYSwgaW5jbHVkZXMgY2hhcnRBcmVhLCB0aXRsZSwgbGVnZW5kXG4gICAgbGV0IGdyYXBoQXJlYSA9IHN2Z1xuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZ3JhcGhBcmVhXCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcbiAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKyByZW5kZXJJbmZvLm1hcmdpbi5yaWdodClcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXG4gICAgICAgICk7XG4gICAgY2hhcnRFbGVtZW50c1tcImdyYXBoQXJlYVwiXSA9IGdyYXBoQXJlYTtcblxuICAgIC8vIGRhdGFBcmVhLCB1bmRlciBncmFwaEFyZWEsIGluY2x1ZGVzIHBvaW50cywgbGluZXMsIHhBeGlzLCB5QXhpc1xuICAgIGxldCBkYXRhQXJlYSA9IGdyYXBoQXJlYVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZGF0YUFyZWFcIilcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0KTtcbiAgICBjaGFydEVsZW1lbnRzW1wiZGF0YUFyZWFcIl0gPSBkYXRhQXJlYTtcblxuICAgIHJldHVybiBjaGFydEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiByZW5kZXJMaW5lQ2hhcnQoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGxpbmVJbmZvOiBMaW5lSW5mb1xuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJMaW5lQ2hhcnRcIik7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWxpbmVJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNhbnZhcywgcmVuZGVySW5mbyk7XG5cbiAgICByZW5kZXJUaXRsZShjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBsaW5lSW5mbyk7XG5cbiAgICByZW5kZXJYQXhpcyhjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBsaW5lSW5mbyk7XG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRFbGVtZW50cy54QXhpcyk7XG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRFbGVtZW50cy54U2NhbGUpO1xuXG4gICAgbGV0IGRhdGFzZXRPbkxlZnRZQXhpcyA9IFtdO1xuICAgIGxldCBkYXRhc2V0T25SaWdodFlBeGlzID0gW107XG4gICAgbGV0IHhEYXRhc2V0SWRzID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXRYRGF0YXNldElkcygpO1xuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGxpbmVJbmZvLnlBeGlzTG9jYXRpb24ubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaW5kKSkgY29udGludWU7XG4gICAgICAgIGxldCB5QXhpc0xvY2F0aW9uID0gbGluZUluZm8ueUF4aXNMb2NhdGlvbltpbmRdO1xuICAgICAgICBpZiAoeUF4aXNMb2NhdGlvbi50b0xvd2VyQ2FzZSgpID09PSBcImxlZnRcIikge1xuICAgICAgICAgICAgZGF0YXNldE9uTGVmdFlBeGlzLnB1c2goaW5kKTtcbiAgICAgICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IFwicmlnaHRcIikge1xuICAgICAgICAgICAgZGF0YXNldE9uUmlnaHRZQXhpcy5wdXNoKGluZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmV0UmVuZGVyTGVmdFlBeGlzID0gcmVuZGVyWUF4aXMoXG4gICAgICAgIGNoYXJ0RWxlbWVudHMsXG4gICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgIGxpbmVJbmZvLFxuICAgICAgICBcImxlZnRcIixcbiAgICAgICAgZGF0YXNldE9uTGVmdFlBeGlzXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFJlbmRlckxlZnRZQXhpcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0UmVuZGVyTGVmdFlBeGlzO1xuICAgIH1cblxuICAgIGlmIChjaGFydEVsZW1lbnRzLmxlZnRZQXhpcyAmJiBjaGFydEVsZW1lbnRzLmxlZnRZU2NhbGUpIHtcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldElkIG9mIGRhdGFzZXRPbkxlZnRZQXhpcykge1xuICAgICAgICAgICAgbGV0IGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBjb250aW51ZTtcblxuICAgICAgICAgICAgcmVuZGVyTGluZShjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBsaW5lSW5mbywgZGF0YXNldCwgXCJsZWZ0XCIpO1xuXG4gICAgICAgICAgICByZW5kZXJQb2ludHMoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8sIGRhdGFzZXQsIFwibGVmdFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXRSZW5kZXJSaWdodFlBeGlzID0gcmVuZGVyWUF4aXMoXG4gICAgICAgIGNoYXJ0RWxlbWVudHMsXG4gICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgIGxpbmVJbmZvLFxuICAgICAgICBcInJpZ2h0XCIsXG4gICAgICAgIGRhdGFzZXRPblJpZ2h0WUF4aXNcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0UmVuZGVyUmlnaHRZQXhpcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0UmVuZGVyUmlnaHRZQXhpcztcbiAgICB9XG5cbiAgICBpZiAoY2hhcnRFbGVtZW50cy5yaWdodFlBeGlzICYmIGNoYXJ0RWxlbWVudHMucmlnaHRZU2NhbGUpIHtcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldElkIG9mIGRhdGFzZXRPblJpZ2h0WUF4aXMpIHtcbiAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgY29udGludWU7XG5cbiAgICAgICAgICAgIHJlbmRlckxpbmUoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8sIGRhdGFzZXQsIFwicmlnaHRcIik7XG5cbiAgICAgICAgICAgIHJlbmRlclBvaW50cyhjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBsaW5lSW5mbywgZGF0YXNldCwgXCJyaWdodFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsaW5lSW5mby5zaG93TGVnZW5kKSB7XG4gICAgICAgIHJlbmRlckxlZ2VuZChjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBsaW5lSW5mbyk7XG4gICAgfVxuXG4gICAgc2V0Q2hhcnRTY2FsZShjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8pO1xufVxuXG5mdW5jdGlvbiByZW5kZXJCYXJDaGFydChcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgYmFySW5mbzogQmFySW5mb1xuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJCYXJDaGFydFwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJhckluZm8pIHJldHVybjtcblxuICAgIGxldCBjaGFydEVsZW1lbnRzID0gY3JlYXRlQXJlYXMoY2FudmFzLCByZW5kZXJJbmZvKTtcblxuICAgIHJlbmRlclRpdGxlKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGJhckluZm8pO1xuXG4gICAgcmVuZGVyWEF4aXMoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgYmFySW5mbyk7XG5cbiAgICBsZXQgZGF0YXNldE9uTGVmdFlBeGlzID0gW107XG4gICAgbGV0IGRhdGFzZXRPblJpZ2h0WUF4aXMgPSBbXTtcbiAgICBsZXQgeERhdGFzZXRJZHMgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldFhEYXRhc2V0SWRzKCk7XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYmFySW5mby55QXhpc0xvY2F0aW9uLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xuICAgICAgICBsZXQgeUF4aXNMb2NhdGlvbiA9IGJhckluZm8ueUF4aXNMb2NhdGlvbltpbmRdO1xuICAgICAgICBpZiAoeUF4aXNMb2NhdGlvbi50b0xvd2VyQ2FzZSgpID09PSBcImxlZnRcIikge1xuICAgICAgICAgICAgZGF0YXNldE9uTGVmdFlBeGlzLnB1c2goaW5kKTtcbiAgICAgICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IFwicmlnaHRcIikge1xuICAgICAgICAgICAgLy8gcmlnaHRcbiAgICAgICAgICAgIGRhdGFzZXRPblJpZ2h0WUF4aXMucHVzaChpbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJldFJlbmRlckxlZnRZQXhpcyA9IHJlbmRlcllBeGlzKFxuICAgICAgICBjaGFydEVsZW1lbnRzLFxuICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICBiYXJJbmZvLFxuICAgICAgICBcImxlZnRcIixcbiAgICAgICAgZGF0YXNldE9uTGVmdFlBeGlzXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFJlbmRlckxlZnRZQXhpcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0UmVuZGVyTGVmdFlBeGlzO1xuICAgIH1cblxuICAgIGxldCB0b3RhbE51bU9mQmFyU2V0cyA9XG4gICAgICAgIGRhdGFzZXRPbkxlZnRZQXhpcy5sZW5ndGggKyBkYXRhc2V0T25SaWdodFlBeGlzLmxlbmd0aDtcbiAgICBsZXQgY3VyckJhclNldCA9IDA7XG5cbiAgICBpZiAoY2hhcnRFbGVtZW50cy5sZWZ0WUF4aXMgJiYgY2hhcnRFbGVtZW50cy5sZWZ0WVNjYWxlKSB7XG4gICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBkYXRhc2V0T25MZWZ0WUF4aXMpIHtcbiAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgY29udGludWU7XG5cbiAgICAgICAgICAgIHJlbmRlckJhcihcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLFxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgICAgICAgICAgYmFySW5mbyxcbiAgICAgICAgICAgICAgICBkYXRhc2V0LFxuICAgICAgICAgICAgICAgIFwibGVmdFwiLFxuICAgICAgICAgICAgICAgIGN1cnJCYXJTZXQsXG4gICAgICAgICAgICAgICAgdG90YWxOdW1PZkJhclNldHNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGN1cnJCYXJTZXQrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXRSZW5kZXJSaWdodFlBeGlzID0gcmVuZGVyWUF4aXMoXG4gICAgICAgIGNoYXJ0RWxlbWVudHMsXG4gICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgIGJhckluZm8sXG4gICAgICAgIFwicmlnaHRcIixcbiAgICAgICAgZGF0YXNldE9uUmlnaHRZQXhpc1xuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRSZW5kZXJSaWdodFlBeGlzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRSZW5kZXJSaWdodFlBeGlzO1xuICAgIH1cblxuICAgIGlmIChjaGFydEVsZW1lbnRzLnJpZ2h0WUF4aXMgJiYgY2hhcnRFbGVtZW50cy5yaWdodFlTY2FsZSkge1xuICAgICAgICBmb3IgKGxldCBkYXRhc2V0SWQgb2YgZGF0YXNldE9uUmlnaHRZQXhpcykge1xuICAgICAgICAgICAgbGV0IGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBjb250aW51ZTtcblxuICAgICAgICAgICAgcmVuZGVyQmFyKFxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMsXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgICAgICAgICBiYXJJbmZvLFxuICAgICAgICAgICAgICAgIGRhdGFzZXQsXG4gICAgICAgICAgICAgICAgXCJyaWdodFwiLFxuICAgICAgICAgICAgICAgIGN1cnJCYXJTZXQsXG4gICAgICAgICAgICAgICAgdG90YWxOdW1PZkJhclNldHNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGN1cnJCYXJTZXQrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChiYXJJbmZvLnNob3dMZWdlbmQpIHtcbiAgICAgICAgcmVuZGVyTGVnZW5kKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGJhckluZm8pO1xuICAgIH1cblxuICAgIHNldENoYXJ0U2NhbGUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckVycm9yTWVzc2FnZShjYW52YXM6IEhUTUxFbGVtZW50LCBlcnJvck1lc3NhZ2U6IHN0cmluZykge1xuICAgIC8vIFJlbW92ZSBncmFwaCBub3QgY29tcGxldGVkXG4gICAgbGV0IGdyYXBoID0gZDMuc2VsZWN0KGNhbnZhcykuc2VsZWN0KFwiI3N2Z1wiKS5yZW1vdmUoKTtcblxuICAgIGxldCBzdmcgPSBkM1xuICAgICAgICAuc2VsZWN0KGNhbnZhcylcbiAgICAgICAgLmFwcGVuZChcImRpdlwiKVxuICAgICAgICAudGV4dChlcnJvck1lc3NhZ2UpXG4gICAgICAgIC5zdHlsZShcImJhY2tncm91bmQtY29sb3JcIiwgXCJ3aGl0ZVwiKVxuICAgICAgICAuc3R5bGUoXCJtYXJnaW4tYm90dG9tXCIsIFwiMjBweFwiKVxuICAgICAgICAuc3R5bGUoXCJwYWRkaW5nXCIsIFwiMTBweFwiKVxuICAgICAgICAuc3R5bGUoXCJjb2xvclwiLCBcInJlZFwiKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4dGVudCh2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgbGV0IG1pbjtcbiAgbGV0IG1heDtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBpZiAobWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodmFsdWUgPj0gdmFsdWUpIG1pbiA9IG1heCA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChtaW4gPiB2YWx1ZSkgbWluID0gdmFsdWU7XG4gICAgICAgICAgaWYgKG1heCA8IHZhbHVlKSBtYXggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChtaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh2YWx1ZSA+PSB2YWx1ZSkgbWluID0gbWF4ID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG1pbiA+IHZhbHVlKSBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICBpZiAobWF4IDwgdmFsdWUpIG1heCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBbbWluLCBtYXhdO1xufVxuIiwiaW1wb3J0IGFycmF5IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBjdXJ2ZUxpbmVhciBmcm9tIFwiLi9jdXJ2ZS9saW5lYXIuanNcIjtcbmltcG9ydCB7d2l0aFBhdGh9IGZyb20gXCIuL3BhdGguanNcIjtcbmltcG9ydCB7eCBhcyBwb2ludFgsIHkgYXMgcG9pbnRZfSBmcm9tIFwiLi9wb2ludC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5KSB7XG4gIHZhciBkZWZpbmVkID0gY29uc3RhbnQodHJ1ZSksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIGN1cnZlID0gY3VydmVMaW5lYXIsXG4gICAgICBvdXRwdXQgPSBudWxsLFxuICAgICAgcGF0aCA9IHdpdGhQYXRoKGxpbmUpO1xuXG4gIHggPSB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCA6ICh4ID09PSB1bmRlZmluZWQpID8gcG9pbnRYIDogY29uc3RhbnQoeCk7XG4gIHkgPSB0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiID8geSA6ICh5ID09PSB1bmRlZmluZWQpID8gcG9pbnRZIDogY29uc3RhbnQoeSk7XG5cbiAgZnVuY3Rpb24gbGluZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSAoZGF0YSA9IGFycmF5KGRhdGEpKS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcjtcblxuICAgIGlmIChjb250ZXh0ID09IG51bGwpIG91dHB1dCA9IGN1cnZlKGJ1ZmZlciA9IHBhdGgoKSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IG47ICsraSkge1xuICAgICAgaWYgKCEoaSA8IG4gJiYgZGVmaW5lZChkID0gZGF0YVtpXSwgaSwgZGF0YSkpID09PSBkZWZpbmVkMCkge1xuICAgICAgICBpZiAoZGVmaW5lZDAgPSAhZGVmaW5lZDApIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgZWxzZSBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSBvdXRwdXQucG9pbnQoK3goZCwgaSwgZGF0YSksICt5KGQsIGksIGRhdGEpKTtcbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgbGluZS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluZSkgOiB4O1xuICB9O1xuXG4gIGxpbmUueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmUpIDogeTtcbiAgfTtcblxuICBsaW5lLmRlZmluZWQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGVmaW5lZCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgbGluZSkgOiBkZWZpbmVkO1xuICB9O1xuXG4gIGxpbmUuY3VydmUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY3VydmUgPSBfLCBjb250ZXh0ICE9IG51bGwgJiYgKG91dHB1dCA9IGN1cnZlKGNvbnRleHQpKSwgbGluZSkgOiBjdXJ2ZTtcbiAgfTtcblxuICBsaW5lLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gY29udGV4dCA9IG91dHB1dCA9IG51bGwgOiBvdXRwdXQgPSBjdXJ2ZShjb250ZXh0ID0gXyksIGxpbmUpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gbGluZTtcbn1cbiIsImltcG9ydCBzb3VyY2VFdmVudCBmcm9tIFwiLi9zb3VyY2VFdmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihldmVudCwgbm9kZSkge1xuICBldmVudCA9IHNvdXJjZUV2ZW50KGV2ZW50KTtcbiAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgbm9kZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIGlmIChub2RlKSB7XG4gICAgdmFyIHN2ZyA9IG5vZGUub3duZXJTVkdFbGVtZW50IHx8IG5vZGU7XG4gICAgaWYgKHN2Zy5jcmVhdGVTVkdQb2ludCkge1xuICAgICAgdmFyIHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7XG4gICAgICBwb2ludC54ID0gZXZlbnQuY2xpZW50WCwgcG9pbnQueSA9IGV2ZW50LmNsaWVudFk7XG4gICAgICBwb2ludCA9IHBvaW50Lm1hdHJpeFRyYW5zZm9ybShub2RlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSk7XG4gICAgICByZXR1cm4gW3BvaW50LngsIHBvaW50LnldO1xuICAgIH1cbiAgICBpZiAobm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QpIHtcbiAgICAgIHZhciByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHJldHVybiBbZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCAtIG5vZGUuY2xpZW50TGVmdCwgZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wIC0gbm9kZS5jbGllbnRUb3BdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW2V2ZW50LnBhZ2VYLCBldmVudC5wYWdlWV07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihldmVudCkge1xuICBsZXQgc291cmNlRXZlbnQ7XG4gIHdoaWxlIChzb3VyY2VFdmVudCA9IGV2ZW50LnNvdXJjZUV2ZW50KSBldmVudCA9IHNvdXJjZUV2ZW50O1xuICByZXR1cm4gZXZlbnQ7XG59XG4iLCJpbXBvcnQgVHJhY2tlciBmcm9tIFwiLi9tYWluXCI7XG5pbXBvcnQge1xuICAgIFNlYXJjaFR5cGUsXG4gICAgQmFySW5mbyxcbiAgICBDb21tb25DaGFydEluZm8sXG4gICAgUXVlcnksXG4gICAgUmVuZGVySW5mbyxcbiAgICBTdW1tYXJ5SW5mbyxcbiAgICBNYXJnaW4sXG4gICAgR3JhcGhUeXBlLFxuICAgIExpbmVJbmZvLFxuICAgIFBpZUluZm8sXG4gICAgTW9udGhJbmZvLFxuICAgIEhlYXRtYXBJbmZvLFxuICAgIEJ1bGxldEluZm8sXG4gICAgRGF0YXNldCxcbiAgICBDdXN0b21EYXRhc2V0SW5mbyxcbiAgICBBc3BlY3RSYXRpbyxcbn0gZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0IHsgVEZvbGRlciwgbm9ybWFsaXplUGF0aCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgcGFyc2VZYW1sIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XG5cbmZ1bmN0aW9uIHN0clRvQm9vbChzdHI6IHN0cmluZyk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICBzdHIgPSBzdHIudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoIChzdHIpIHtcbiAgICAgICAgY2FzZSBcInRydWVcIjpcbiAgICAgICAgY2FzZSBcIjFcIjpcbiAgICAgICAgY2FzZSBcIm9uXCI6XG4gICAgICAgIGNhc2UgXCJ5ZXNcIjpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjYXNlIFwiZmFsc2VcIjpcbiAgICAgICAgY2FzZSBcIjBcIjpcbiAgICAgICAgY2FzZSBcIm9mZlwiOlxuICAgICAgICBjYXNlIFwibm9cIjpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2VhcmNoVHlwZShzZWFyY2hUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YWdcIiB8fFxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJmcm9udG1hdHRlclwiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ3aWtpXCIgfHxcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcIndpa2kubGlua1wiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ3aWtpLmRpc3BsYXlcIiB8fFxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiZHZmaWVsZFwiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YWJsZVwiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJmaWxlbWV0YVwiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YXNrXCIgfHxcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInRhc2suYWxsXCIgfHxcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInRhc2suZG9uZVwiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YXNrLm5vdGRvbmVcIlxuICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVlBeGlzTG9jYXRpb24obG9jYXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChsb2NhdGlvbiA9PT0gXCJsZWZ0XCIgfHwgbG9jYXRpb24gPT09IFwicmlnaHRcIiB8fCBsb2NhdGlvbiA9PT0gXCJub25lXCIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDb2xvcihjb2xvcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNwbGl0SW5wdXRCeUNvbW1hKGlucHV0OiBzdHJpbmcpIHtcbiAgICAvLyBTcGxpdCBzdHJpbmcgYnkgJywnIGJ1dCBub3QgYnkgJ1xcLCdcbiAgICAvLyBsZXQgc3BsaXR0ZWQgPSBpbnB1dC5zcGxpdCgvKD88IVxcXFwpLC8pOyAvLyAtLT5sb29rYmVoaW5kIG5vdCBzdXBwb3J0IGluIFNhZmFyaSBmb3Igbm93XG4gICAgY29uc3QgZHVtbXkgPSBcIjo6Ojo6OnRyYWNrZXI6Ojo6OjpcIjtcbiAgICBsZXQgdGVtcCA9IGlucHV0LnNwbGl0KFwiXFxcXCxcIikuam9pbihkdW1teSk7XG4gICAgbGV0IHNwbGl0dGVkID0gdGVtcC5zcGxpdChcIixcIik7XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgc3BsaXR0ZWQubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICBzcGxpdHRlZFtpbmRdID0gc3BsaXR0ZWRbaW5kXS5zcGxpdChkdW1teSkuam9pbihcIixcIik7XG4gICAgfVxuICAgIHJldHVybiBzcGxpdHRlZDtcbn1cblxuZnVuY3Rpb24gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBpbnB1dDogYW55LFxuICAgIG51bURhdGFzZXQ6IG51bWJlcixcbiAgICBkZWZhdWx0VmFsdWU6IGJvb2xlYW4sXG4gICAgYWxsb3dOb1ZhbGlkVmFsdWU6IGJvb2xlYW5cbik6IEFycmF5PGJvb2xlYW4+IHwgc3RyaW5nIHtcbiAgICBsZXQgYXJyYXk6IEFycmF5PGJvb2xlYW4+ID0gW107XG4gICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiXCI7XG4gICAgbGV0IG51bVZhbGlkVmFsdWUgPSAwO1xuXG4gICAgd2hpbGUgKG51bURhdGFzZXQgPiBhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgYXJyYXkucHVzaChkZWZhdWx0VmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwidW5kZWZpbmVkXCIgfHwgaW5wdXQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gYWxsIGRlZmF1bHRWYWx1ZVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmIGlucHV0ICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA+IG51bURhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIlRvbyBtYW55IGlucHV0cyBmb3IgcGFyYW1ldGVyICdcIiArIG5hbWUgKyBcIidcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiRW1wdHkgYXJyYXkgbm90IGFsbG93ZCBmb3IgXCIgKyBuYW1lO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VyciA9IGlucHV0W2luZF07XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBpbnB1dFtpbmQgLSAxXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBwcmV2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGN1cnIgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3VycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhjZWVkcyB0aGUgbGVuZ3RoIG9mIGlucHV0LCB1c2UgcHJldiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IGlucHV0W2lucHV0Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVtVmFsaWRWYWx1ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBsYXN0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGxldCBzcGxpdHRlZCA9IHNwbGl0SW5wdXRCeUNvbW1hKGlucHV0KTtcbiAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiBudW1EYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgc3BsaXR0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyID0gc3BsaXR0ZWRbaW5kXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBzdHJUb0Jvb2woc3BsaXR0ZWRbaW5kIC0gMV0udHJpbSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyQm9vbCA9IHN0clRvQm9vbChjdXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyQm9vbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyQm9vbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBzdHJUb0Jvb2woc3BsaXR0ZWRbc3BsaXR0ZWQubGVuZ3RoIC0gMV0udHJpbSgpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVZhbGlkVmFsdWUgPiAwICYmIGxhc3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBsYXN0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0Qm9vbCA9IHN0clRvQm9vbChpbnB1dCk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0Qm9vbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVswXSA9IGlucHV0Qm9vbDtcbiAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gaW5wdXRCb29sO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICBhcnJheVswXSA9IGlucHV0O1xuICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGFycmF5W2luZF0gPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICB9XG5cbiAgICBpZiAoIWFsbG93Tm9WYWxpZFZhbHVlICYmIG51bVZhbGlkVmFsdWUgPT09IDApIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJObyB2YWxpZCBpbnB1dCBmb3IgXCIgKyBuYW1lO1xuICAgIH1cblxuICAgIGlmIChlcnJvck1lc3NhZ2UgIT09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aW9uIGdldE51bWJlckFycmF5RnJvbUlucHV0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBpbnB1dDogYW55LFxuICAgIG51bURhdGFzZXQ6IG51bWJlcixcbiAgICBkZWZhdWx0VmFsdWU6IG51bWJlcixcbiAgICBhbGxvd05vVmFsaWRWYWx1ZTogYm9vbGVhblxuKTogQXJyYXk8bnVtYmVyPiB8IHN0cmluZyB7XG4gICAgLy8gY29uc29sZS5sb2coXCJnZXROdW1iZXJBcnJheUZyb21JbnB1dFwiKTtcblxuICAgIGxldCBhcnJheTogQXJyYXk8bnVtYmVyPiA9IFtdO1xuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xuICAgIGxldCBudW1WYWxpZFZhbHVlID0gMDtcblxuICAgIHdoaWxlIChudW1EYXRhc2V0ID4gYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgIGFycmF5LnB1c2goZGVmYXVsdFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInVuZGVmaW5lZFwiIHx8IGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBpbnB1dCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPiBudW1EYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IGFycmF5IG5vdCBhbGxvd2QgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBpbnB1dFtpbmRdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gaW5wdXRbaW5kIC0gMV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3VyciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjdXJyID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3VycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhjZWVkcyB0aGUgbGVuZ3RoIG9mIGlucHV0LCB1c2UgcHJldiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IGlucHV0W2lucHV0Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVtVmFsaWRWYWx1ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBsYXN0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGxldCBzcGxpdHRlZCA9IHNwbGl0SW5wdXRCeUNvbW1hKGlucHV0KTtcbiAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiBudW1EYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgc3BsaXR0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyID0gc3BsaXR0ZWRbaW5kXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWRbaW5kIC0gMV0udHJpbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICApLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCAmJiBOdW1iZXIuaXNOdW1iZXIocHJldikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyTnVtID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KGN1cnIpLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJOdW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3Vyck51bTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRlZFtpbnB1dC5sZW5ndGggLSAxXS50cmltKClcbiAgICAgICAgICAgICAgICAgICAgKS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVZhbGlkVmFsdWUgPiAwICYmIGxhc3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBsYXN0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0TnVtID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KGlucHV0KS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXROdW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbMF0gPSBpbnB1dE51bTtcbiAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gaW5wdXROdW07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIGFycmF5WzBdID0gaW5wdXQ7XG4gICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGlucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgIH1cblxuICAgIGlmICghYWxsb3dOb1ZhbGlkVmFsdWUgJiYgbnVtVmFsaWRWYWx1ZSA9PT0gMCkge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIk5vIHZhbGlkIGlucHV0IGZvciBcIiArIG5hbWU7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yTWVzc2FnZSAhPT0gXCJcIikge1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RyaW5nRnJvbUlucHV0KGlucHV0OiBhbnksIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBoZWxwZXIucmVwbGFjZUltZ1RhZ0J5QWx0KGlucHV0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gaW5wdXQudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGlucHV0OiBhbnksXG4gICAgbnVtRGF0YXNldDogbnVtYmVyLFxuICAgIGRlZmF1bHRWYWx1ZTogc3RyaW5nLFxuICAgIHZhbGlkYXRvcjogRnVuY3Rpb24sXG4gICAgYWxsb3dOb1ZhbGlkVmFsdWU6IGJvb2xlYW5cbik6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcge1xuICAgIGxldCBhcnJheTogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xuICAgIGxldCBudW1WYWxpZFZhbHVlID0gMDtcblxuICAgIHdoaWxlIChudW1EYXRhc2V0ID4gYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgIGFycmF5LnB1c2goZGVmYXVsdFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInVuZGVmaW5lZFwiIHx8IGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBpbnB1dCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPiBudW1EYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IGFycmF5IG5vdCBhbGxvd2QgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBpbnB1dFtpbmRdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gaW5wdXRbaW5kIC0gMV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3VyciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKGN1cnIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3VycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGN1cnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBpbnB1dFtpbnB1dC5sZW5ndGggLSAxXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1WYWxpZFZhbHVlID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGxhc3Q7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbGV0IHNwbGl0dGVkID0gc3BsaXRJbnB1dEJ5Q29tbWEoaW5wdXQpO1xuICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IG51bURhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIlRvbyBtYW55IGlucHV0cyBmb3IgcGFyYW1ldGVyICdcIiArIG5hbWUgKyBcIidcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBzcGxpdHRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBzcGxpdHRlZFtpbmRdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IHNwbGl0dGVkW2luZCAtIDFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKGN1cnIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBzcGxpdHRlZFtzcGxpdHRlZC5sZW5ndGggLSAxXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1WYWxpZFZhbHVlID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGxhc3Q7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgLy8gYWxsIGRlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVswXSA9IGlucHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMTsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBpbnB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5WzBdID0gaW5wdXQ7XG4gICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMTsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGlucHV0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgbGV0IHN0ck51bWJlciA9IGlucHV0LnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0b3Ioc3RyTnVtYmVyKSkge1xuICAgICAgICAgICAgICAgIGFycmF5WzBdID0gc3RyTnVtYmVyO1xuICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBzdHJOdW1iZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVswXSA9IHN0ck51bWJlcjtcbiAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gc3RyTnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgIH1cblxuICAgIGlmICghYWxsb3dOb1ZhbGlkVmFsdWUgJiYgbnVtVmFsaWRWYWx1ZSA9PT0gMCkge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIk5vIHZhbGlkIGlucHV0IGZvciBcIiArIG5hbWU7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yTWVzc2FnZSAhPT0gXCJcIikge1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgYXJyYXlbaW5kXSA9IGhlbHBlci5yZXBsYWNlSW1nVGFnQnlBbHQoYXJyYXlbaW5kXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5mdW5jdGlvbiBnZXROdW1iZXJBcnJheShuYW1lOiBzdHJpbmcsIGlucHV0OiBhbnkpOiBBcnJheTxudW1iZXI+IHwgc3RyaW5nIHtcbiAgICBsZXQgbnVtQXJyYXk6IEFycmF5PG51bWJlcj4gPSBbXTtcblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwidW5kZWZpbmVkXCIgfHwgaW5wdXQgPT09IG51bGwpIHJldHVybiBudW1BcnJheTtcblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtIG9mIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gcGFyc2VGbG9hdChlbGVtKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcih2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJyYXkucHVzaCh2KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgUGFyYW1ldGVyICcke25hbWV9JyBhY2NlcHRzIG9ubHkgbnVtYmVyc2A7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbGV0IHNwbGl0dGVkID0gc3BsaXRJbnB1dEJ5Q29tbWEoaW5wdXQpO1xuICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgZm9yIChsZXQgcGllY2Ugb2Ygc3BsaXR0ZWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgdiA9IHBhcnNlRmxvYXQocGllY2UudHJpbSgpKTtcbiAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih2KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIuaXNOdW1iZXIoTmFOKSAtLT4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBudW1BcnJheS5wdXNoKHYpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgUGFyYW1ldGVyICcke25hbWV9JyBhY2NlcHRzIG9ubHkgbnVtYmVyc2A7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYEVtcHR5ICR7bmFtZX0gaXMgbm90IGFsbG93ZWQuYDtcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgdiA9IHBhcnNlRmxvYXQoaW5wdXQpO1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcih2KSkge1xuICAgICAgICAgICAgICAgIG51bUFycmF5LnB1c2godik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgUGFyYW1ldGVyICcke25hbWV9JyBhY2NlcHRzIG9ubHkgbnVtYmVyc2A7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIG51bUFycmF5LnB1c2goaW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgSW52YWxpZCAke25hbWV9YDtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVtQXJyYXk7XG59XG5cbmZ1bmN0aW9uIGdldFN0cmluZ0FycmF5KG5hbWU6IHN0cmluZywgaW5wdXQ6IGFueSk6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcge1xuICAgIGxldCBzdHJBcnJheTogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIHN0ckFycmF5O1xuXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGVsZW0gb2YgaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyQXJyYXkucHVzaChlbGVtLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbGV0IHNwbGl0dGVkID0gc3BsaXRJbnB1dEJ5Q29tbWEoaW5wdXQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhzcGxpdHRlZCk7XG4gICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBwaWVjZSBvZiBzcGxpdHRlZCkge1xuICAgICAgICAgICAgICAgIHN0ckFycmF5LnB1c2gocGllY2UudHJpbSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGBFbXB0eSAke25hbWV9IGlzIG5vdCBhbGxvd2VkLmA7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyQXJyYXkucHVzaChpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYEludmFsaWQgJHtuYW1lfWA7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgc3RyQXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICBzdHJBcnJheVtpbmRdID0gaGVscGVyLnJlcGxhY2VJbWdUYWdCeUFsdChzdHJBcnJheVtpbmRdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyQXJyYXk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29tbW9uQ2hhcnRJbmZvKHlhbWw6IGFueSwgcmVuZGVySW5mbzogQ29tbW9uQ2hhcnRJbmZvKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJwYXJzZUNvbW1vbkNoYXJ0SW5mb1wiKTtcblxuICAgIC8vIHNpbmdsZSB2YWx1ZSwgdXNlIGRlZmF1bHQgdmFsdWUgaWYgbm8gdmFsdWUgZnJvbSBZQU1MXG4gICAgaWYgKHlhbWwpIHtcbiAgICAgICAgLy8gdGl0bGVcbiAgICAgICAgcmVuZGVySW5mby50aXRsZSA9IGdldFN0cmluZ0Zyb21JbnB1dCh5YW1sPy50aXRsZSwgcmVuZGVySW5mby50aXRsZSk7XG5cbiAgICAgICAgLy8geEF4aXNMYWJlbFxuICAgICAgICByZW5kZXJJbmZvLnhBeGlzTGFiZWwgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sPy54QXhpc0xhYmVsLFxuICAgICAgICAgICAgcmVuZGVySW5mby54QXhpc0xhYmVsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8geEF4aXNDb2xvclxuICAgICAgICByZW5kZXJJbmZvLnhBeGlzQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sPy54QXhpc0NvbG9yLFxuICAgICAgICAgICAgcmVuZGVySW5mby54QXhpc0NvbG9yXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8geEF4aXNMYWJlbENvbG9yXG4gICAgICAgIHJlbmRlckluZm8ueEF4aXNMYWJlbENvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbD8ueEF4aXNMYWJlbENvbG9yLFxuICAgICAgICAgICAgcmVuZGVySW5mby54QXhpc0xhYmVsQ29sb3JcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBhbGxvd0luc3BlY3REYXRhXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbC5hbGxvd0luc3BlY3REYXRhID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmVuZGVySW5mby5hbGxvd0luc3BlY3REYXRhID0geWFtbC5hbGxvd0luc3BlY3REYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2hvd0xlZ2VuZFxuICAgICAgICBpZiAodHlwZW9mIHlhbWwuc2hvd0xlZ2VuZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHJlbmRlckluZm8uc2hvd0xlZ2VuZCA9IHlhbWwuc2hvd0xlZ2VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxlZ2VuZFBvc2l0aW9uXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbC5sZWdlbmRQb3NpdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRQb3NpdGlvbiA9IHlhbWwubGVnZW5kUG9zaXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZFBvc2l0aW9uID0gXCJib3R0b21cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxlZ2VuZE9yaWVudFxuICAgICAgICBpZiAodHlwZW9mIHlhbWwubGVnZW5kT3JpZW50YXRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kT3JpZW50YXRpb24gPSB5YW1sLmxlZ2VuZE9yaWVudGF0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwidG9wXCIgfHxcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcImJvdHRvbVwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwibGVmdFwiIHx8XG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJyaWdodFwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID0gXCJ2ZXJ0aWNhbFwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5sZWdlbmRQb3NpdGlvbik7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ubGVnZW5kT3JpZW50YXRpb24pO1xuXG4gICAgICAgIC8vIGxlZ2VuZEJnQ29sb3JcbiAgICAgICAgcmVuZGVySW5mby5sZWdlbmRCZ0NvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbD8ubGVnZW5kQmdDb2xvcixcbiAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kQmdDb2xvclxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGxlZ2VuZEJvcmRlckNvbG9yXG4gICAgICAgIHJlbmRlckluZm8ubGVnZW5kQm9yZGVyQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sPy5sZWdlbmRCb3JkZXJDb2xvcixcbiAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kQm9yZGVyQ29sb3JcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB5QXhpc0xhYmVsXG4gICAgbGV0IHJldFlBeGlzTGFiZWwgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJ5QXhpc0xhYmVsXCIsXG4gICAgICAgIHlhbWw/LnlBeGlzTGFiZWwsXG4gICAgICAgIDIsXG4gICAgICAgIFwiVmFsdWVcIixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRZQXhpc0xhYmVsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRZQXhpc0xhYmVsOyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgaWYgKHJldFlBeGlzTGFiZWwubGVuZ3RoID4gMikge1xuICAgICAgICByZXR1cm4gXCJ5QXhpc0xhYmVsIGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcbiAgICB9XG4gICAgcmVuZGVySW5mby55QXhpc0xhYmVsID0gcmV0WUF4aXNMYWJlbDtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlBeGlzTGFiZWwpO1xuXG4gICAgLy8geUF4aXNDb2xvclxuICAgIGxldCByZXRZQXhpc0NvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwieUF4aXNDb2xvclwiLFxuICAgICAgICB5YW1sPy55QXhpc0NvbG9yLFxuICAgICAgICAyLFxuICAgICAgICBcIlwiLFxuICAgICAgICB2YWxpZGF0ZUNvbG9yLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFlBeGlzQ29sb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFlBeGlzQ29sb3I7IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICBpZiAocmV0WUF4aXNDb2xvci5sZW5ndGggPiAyKSB7XG4gICAgICAgIHJldHVybiBcInlBeGlzQ29sb3IgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLnlBeGlzQ29sb3IgPSByZXRZQXhpc0NvbG9yO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueUF4aXNDb2xvcik7XG5cbiAgICAvLyB5QXhpc0xhYmVsQ29sb3JcbiAgICBsZXQgcmV0WUF4aXNMYWJlbENvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwieUF4aXNMYWJlbENvbG9yXCIsXG4gICAgICAgIHlhbWw/LnlBeGlzTGFiZWxDb2xvcixcbiAgICAgICAgMixcbiAgICAgICAgXCJcIixcbiAgICAgICAgdmFsaWRhdGVDb2xvcixcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRZQXhpc0xhYmVsQ29sb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFlBeGlzTGFiZWxDb2xvcjsgLy8gZXJyb3JNZXNzYWdlXG4gICAgfVxuICAgIGlmIChyZXRZQXhpc0xhYmVsQ29sb3IubGVuZ3RoID4gMikge1xuICAgICAgICByZXR1cm4gXCJ5QXhpc0xhYmVsQ29sb3IgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLnlBeGlzTGFiZWxDb2xvciA9IHJldFlBeGlzTGFiZWxDb2xvcjtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlBeGlzTGFiZWxDb2xvcik7XG5cbiAgICAvLyB5QXhpc1VuaXRcbiAgICBsZXQgcmV0WUF4aXNVbml0ID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwieUF4aXNVbml0XCIsXG4gICAgICAgIHlhbWw/LnlBeGlzVW5pdCxcbiAgICAgICAgMixcbiAgICAgICAgXCJcIixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRZQXhpc1VuaXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFlBeGlzVW5pdDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgfVxuICAgIGlmIChyZXRZQXhpc1VuaXQubGVuZ3RoID4gMikge1xuICAgICAgICByZXR1cm4gXCJ5QXhpc1VuaXQgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLnlBeGlzVW5pdCA9IHJldFlBeGlzVW5pdDtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlBeGlzVW5pdCk7XG5cbiAgICAvLyB4QXhpc1RpY2tJbnRlcnZhbFxuICAgIHJlbmRlckluZm8ueEF4aXNUaWNrSW50ZXJ2YWwgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgIHlhbWw/LnhBeGlzVGlja0ludGVydmFsLFxuICAgICAgICByZW5kZXJJbmZvLnhBeGlzVGlja0ludGVydmFsXG4gICAgKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnhBeGlzVGlja0ludGVydmFsKTtcblxuICAgIC8vIHlBeGlzVGlja0ludGVydmFsXG4gICAgbGV0IHJldFlBeGlzVGlja0ludGVydmFsID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwieUF4aXNUaWNrSW50ZXJ2YWxcIixcbiAgICAgICAgeWFtbD8ueUF4aXNUaWNrSW50ZXJ2YWwsXG4gICAgICAgIDIsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0WUF4aXNUaWNrSW50ZXJ2YWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFlBeGlzVGlja0ludGVydmFsOyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgaWYgKHJldFlBeGlzVGlja0ludGVydmFsLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgcmV0dXJuIFwieUF4aXNUaWNrSW50ZXJ2YWwgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLnlBeGlzVGlja0ludGVydmFsID0gcmV0WUF4aXNUaWNrSW50ZXJ2YWw7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55QXhpc1RpY2tJbnRlcnZhbCk7XG5cbiAgICAvLyB4QXhpc1RpY2tMYWJlbEZvcm1hdFxuICAgIHJlbmRlckluZm8ueEF4aXNUaWNrTGFiZWxGb3JtYXQgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgIHlhbWw/LnhBeGlzVGlja0xhYmVsRm9ybWF0LFxuICAgICAgICByZW5kZXJJbmZvLnhBeGlzVGlja0xhYmVsRm9ybWF0XG4gICAgKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnhBeGlzVGlja0xhYmVsRm9ybWF0KTtcblxuICAgIC8vIHlBeGlzVGlja0xhYmVsRm9ybWF0XG4gICAgbGV0IHJldFlBeGlzVGlja0xhYmVsRm9ybWF0ID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwieUF4aXNUaWNrTGFiZWxGb3JtYXRcIixcbiAgICAgICAgeWFtbD8ueUF4aXNUaWNrTGFiZWxGb3JtYXQsXG4gICAgICAgIDIsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0WUF4aXNUaWNrTGFiZWxGb3JtYXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFlBeGlzVGlja0xhYmVsRm9ybWF0OyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgaWYgKHJldFlBeGlzVGlja0xhYmVsRm9ybWF0Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgcmV0dXJuIFwieUF4aXNUaWNrTGFiZWxGb3JtYXQgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLnlBeGlzVGlja0xhYmVsRm9ybWF0ID0gcmV0WUF4aXNUaWNrTGFiZWxGb3JtYXQ7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55QXhpc1RpY2tMYWJlbEZvcm1hdCk7XG5cbiAgICAvLyB5TWluXG4gICAgbGV0IHJldFlNaW4gPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcInlNaW5cIiwgeWFtbD8ueU1pbiwgMiwgbnVsbCwgdHJ1ZSk7XG4gICAgaWYgKHR5cGVvZiByZXRZTWluID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRZTWluOyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgaWYgKHJldFlNaW4ubGVuZ3RoID4gMikge1xuICAgICAgICByZXR1cm4gXCJ5TWluIGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcbiAgICB9XG4gICAgcmVuZGVySW5mby55TWluID0gcmV0WU1pbjtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlNaW4pO1xuXG4gICAgLy8geU1heFxuICAgIGxldCByZXRZTWF4ID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXCJ5TWF4XCIsIHlhbWw/LnlNYXgsIDIsIG51bGwsIHRydWUpO1xuICAgIGlmICh0eXBlb2YgcmV0WU1heCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0WU1heDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgfVxuICAgIGlmIChyZXRZTWF4Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgcmV0dXJuIFwieU1heCBhY2NlcHRzIG5vdCBtb3JlIHRoYW4gdHdvIHZhbHVlcyBmb3IgbGVmdCBhbmQgcmlnaHQgeS1heGVzXCI7XG4gICAgfVxuICAgIHJlbmRlckluZm8ueU1heCA9IHJldFlNYXg7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55TWF4KTtcblxuICAgIC8vIHJldmVyc2VZQXhpc1xuICAgIGxldCByZXRSZXZlcnNlWUF4aXMgPSBnZXRCb29sQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwicmV2ZXJzZVlBeGlzXCIsXG4gICAgICAgIHlhbWw/LnJldmVyc2VZQXhpcyxcbiAgICAgICAgMixcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0UmV2ZXJzZVlBeGlzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRSZXZlcnNlWUF4aXM7IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICBpZiAocmV0UmV2ZXJzZVlBeGlzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgcmV0dXJuIFwicmV2ZXJzZVlBeGlzIGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcbiAgICB9XG4gICAgcmVuZGVySW5mby5yZXZlcnNlWUF4aXMgPSByZXRSZXZlcnNlWUF4aXM7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5yZXZlcnNlWUF4aXMpO1xufVxuXG5mdW5jdGlvbiBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhvYmo6IG9iamVjdCk6IHN0cmluZ1tdIHtcbiAgICBsZXQga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAob2JqICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyhvYmopIGFzIEFycmF5PGtleW9mIHN0cmluZz47XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBvYmplY3RLZXlzKSB7XG4gICAgICAgICAgICBrZXlzLnB1c2goa2V5LnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVuZGVySW5mb0Zyb21ZYW1sKFxuICAgIHlhbWxUZXh0OiBzdHJpbmcsXG4gICAgcGx1Z2luOiBUcmFja2VyXG4pOiBSZW5kZXJJbmZvIHwgc3RyaW5nIHtcbiAgICBsZXQgeWFtbDtcbiAgICB0cnkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh5YW1sVGV4dCk7XG4gICAgICAgIHlhbWwgPSBwYXJzZVlhbWwoeWFtbFRleHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJFcnJvciBwYXJzaW5nIFlBTUxcIjtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKCF5YW1sKSB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIkVycm9yIHBhcnNpbmcgWUFNTFwiO1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyh5YW1sKTtcbiAgICBsZXQga2V5c0ZvdW5kSW5ZQU1MID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoeWFtbCk7XG4gICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcblxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xuXG4gICAgLy8gU2VhcmNoIHRhcmdldFxuICAgIGlmICgha2V5c0ZvdW5kSW5ZQU1MLmluY2x1ZGVzKFwic2VhcmNoVGFyZ2V0XCIpKSB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlBhcmFtZXRlciAnc2VhcmNoVGFyZ2V0JyBub3QgZm91bmQgaW4gWUFNTFwiO1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICBsZXQgc2VhcmNoVGFyZ2V0OiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgaWYgKHR5cGVvZiB5YW1sLnNlYXJjaFRhcmdldCA9PT0gXCJvYmplY3RcIiAmJiB5YW1sLnNlYXJjaFRhcmdldCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh5YW1sLnNlYXJjaFRhcmdldCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHRhcmdldCBvZiB5YW1sLnNlYXJjaFRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFRhcmdldC5wdXNoKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IHNlYXJjaCB0YXJnZXQgaXMgbm90IGFsbG93ZWQuXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHlhbWwuc2VhcmNoVGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGxldCBzcGxpdHRlZCA9IHNwbGl0SW5wdXRCeUNvbW1hKHlhbWwuc2VhcmNoVGFyZ2V0KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3BsaXR0ZWQpO1xuICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgZm9yIChsZXQgcGllY2Ugb2Ygc3BsaXR0ZWQpIHtcbiAgICAgICAgICAgICAgICBwaWVjZSA9IHBpZWNlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBpZiAocGllY2UgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoVGFyZ2V0LnB1c2gocGllY2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiRW1wdHkgc2VhcmNoIHRhcmdldCBpcyBub3QgYWxsb3dlZC5cIjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHlhbWwuc2VhcmNoVGFyZ2V0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IHNlYXJjaCB0YXJnZXQgaXMgbm90IGFsbG93ZWQuXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWFyY2hUYXJnZXQucHVzaCh5YW1sLnNlYXJjaFRhcmdldCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgc2VhcmNoIHRhcmdldCAoc2VhcmNoVGFyZ2V0KVwiO1xuICAgIH1cbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBzZWFyY2hUYXJnZXQubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICBzZWFyY2hUYXJnZXRbaW5kXSA9IGhlbHBlci5yZXBsYWNlSW1nVGFnQnlBbHQoc2VhcmNoVGFyZ2V0W2luZF0pO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhzZWFyY2hUYXJnZXQpO1xuXG4gICAgaWYgKGVycm9yTWVzc2FnZSAhPT0gXCJcIikge1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIGxldCBudW1EYXRhc2V0cyA9IHNlYXJjaFRhcmdldC5sZW5ndGg7XG5cbiAgICAvLyBTZWFyY2ggdHlwZVxuICAgIGlmICgha2V5c0ZvdW5kSW5ZQU1MLmluY2x1ZGVzKFwic2VhcmNoVHlwZVwiKSkge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJQYXJhbWV0ZXIgJ3NlYXJjaFR5cGUnIG5vdCBmb3VuZCBpbiBZQU1MXCI7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIGxldCBzZWFyY2hUeXBlOiBBcnJheTxTZWFyY2hUeXBlPiA9IFtdO1xuICAgIGxldCByZXRTZWFyY2hUeXBlID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwic2VhcmNoVHlwZVwiLFxuICAgICAgICB5YW1sLnNlYXJjaFR5cGUsXG4gICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICBcIlwiLFxuICAgICAgICB2YWxpZGF0ZVNlYXJjaFR5cGUsXG4gICAgICAgIGZhbHNlXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFNlYXJjaFR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFNlYXJjaFR5cGU7IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICBmb3IgKGxldCBzdHJUeXBlIG9mIHJldFNlYXJjaFR5cGUpIHtcbiAgICAgICAgc3dpdGNoIChzdHJUeXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0YWdcIjpcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5UYWcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImZyb250bWF0dGVyXCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuRnJvbnRtYXR0ZXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIndpa2lcIjpcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5XaWtpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ3aWtpLmxpbmtcIjpcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5XaWtpTGluayk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwid2lraS5kaXNwbGF5XCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuV2lraURpc3BsYXkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5UZXh0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJkdmZpZWxkXCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuZHZGaWVsZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidGFibGVcIjpcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5UYWJsZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZmlsZW1ldGFcIjpcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5GaWxlTWV0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidGFza1wiOlxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLlRhc2spO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRhc2suYWxsXCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuVGFzayk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidGFzay5kb25lXCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuVGFza0RvbmUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRhc2subm90ZG9uZVwiOlxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLlRhc2tOb3REb25lKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDdXJyZW50bHksIHdlIGRvbid0IGFsbG93IHR5cGUgJ3RhYmxlJyB1c2VkIHdpdGggb3RoZXIgdHlwZXNcbiAgICBpZiAoXG4gICAgICAgIHNlYXJjaFR5cGUuaW5jbHVkZXMoU2VhcmNoVHlwZS5UYWJsZSkgJiZcbiAgICAgICAgc2VhcmNoVHlwZS5maWx0ZXIoKHQpID0+IHQgIT09IFNlYXJjaFR5cGUuVGFibGUpLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICBcInNlYXJjaFR5cGUgJ3RhYmxlJyBkb2VzdG4ndCB3b3JrIHdpdGggb3RoZXIgdHlwZXMgZm9yIG5vd1wiO1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhzZWFyY2hUeXBlKTtcblxuICAgIC8vIHNlcGFyYXRvclxuICAgIGxldCBtdWx0aXBsZVZhbHVlU3BhcmF0b3I6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBsZXQgcmV0TXVsdGlwbGVWYWx1ZVNwYXJhdG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwic2VwYXJhdG9yXCIsXG4gICAgICAgIHlhbWwuc2VwYXJhdG9yLFxuICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgXCJcIiwgLy8gc2V0IHRoZSBkZWZhdWx0IHZhbHVlIGxhdGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0TXVsdGlwbGVWYWx1ZVNwYXJhdG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRNdWx0aXBsZVZhbHVlU3BhcmF0b3I7IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICBtdWx0aXBsZVZhbHVlU3BhcmF0b3IgPSByZXRNdWx0aXBsZVZhbHVlU3BhcmF0b3IubWFwKChzZXApID0+IHtcbiAgICAgICAgaWYgKHNlcCA9PT0gXCJjb21tYVwiIHx8IHNlcCA9PT0gXCJcXFxcLFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gXCIsXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcDtcbiAgICB9KTtcbiAgICAvLyBjb25zb2xlLmxvZyhtdWx0aXBsZVZhbHVlU3BhcmF0b3IpO1xuXG4gICAgLy8geERhdGFzZXRcbiAgICBsZXQgcmV0WERhdGFzZXQgPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJ4RGF0YXNldFwiLFxuICAgICAgICB5YW1sLnhEYXRhc2V0LFxuICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgLTEsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0WERhdGFzZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFhEYXRhc2V0OyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgbGV0IHhEYXRhc2V0ID0gcmV0WERhdGFzZXQubWFwKChkOiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKGQgPCAwIHx8IGQgPj0gbnVtRGF0YXNldHMpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZDtcbiAgICB9KTtcbiAgICAvLyBhc3NpZ24gdGhpcyB0byByZW5kZXJJbmZvIGxhdGVyXG5cbiAgICAvLyBDcmVhdGUgcXVlcmllc1xuICAgIGxldCBxdWVyaWVzOiBBcnJheTxRdWVyeT4gPSBbXTtcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBzZWFyY2hUYXJnZXQubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICBsZXQgcXVlcnkgPSBuZXcgUXVlcnkoXG4gICAgICAgICAgICBxdWVyaWVzLmxlbmd0aCxcbiAgICAgICAgICAgIHNlYXJjaFR5cGVbaW5kXSxcbiAgICAgICAgICAgIHNlYXJjaFRhcmdldFtpbmRdXG4gICAgICAgICk7XG4gICAgICAgIHF1ZXJ5LnNldFNlcGFyYXRvcihtdWx0aXBsZVZhbHVlU3BhcmF0b3JbaW5kXSk7XG4gICAgICAgIGlmICh4RGF0YXNldC5pbmNsdWRlcyhpbmQpKSBxdWVyeS51c2VkQXNYRGF0YXNldCA9IHRydWU7XG4gICAgICAgIHF1ZXJpZXMucHVzaChxdWVyeSk7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJpZXMpO1xuXG4gICAgLy8gQ3JlYXRlIGdyYXJwaCBpbmZvXG4gICAgbGV0IHJlbmRlckluZm8gPSBuZXcgUmVuZGVySW5mbyhxdWVyaWVzKTtcbiAgICBsZXQga2V5c09mUmVuZGVySW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHJlbmRlckluZm8pO1xuICAgIGxldCBhZGRpdGlvbmFsQWxsb3dlZEtleXMgPSBbXCJzZWFyY2hUeXBlXCIsIFwic2VhcmNoVGFyZ2V0XCIsIFwic2VwYXJhdG9yXCJdO1xuICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZlJlbmRlckluZm8pO1xuICAgIGxldCB5YW1sTGluZUtleXMgPSBbXTtcbiAgICBsZXQgeWFtbEJhcktleXMgPSBbXTtcbiAgICBsZXQgeWFtbFBpZUtleXMgPSBbXTtcbiAgICBsZXQgeWFtbFN1bW1hcnlLZXlzID0gW107XG4gICAgbGV0IHlhbWxNb250aEtleXMgPSBbXTtcbiAgICBsZXQgeWFtbEhlYXRtYXBLZXlzID0gW107XG4gICAgbGV0IHlhbWxCdWxsZXRLZXlzID0gW107XG4gICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xuICAgICAgICBpZiAoL15saW5lWzAtOV0qJC8udGVzdChrZXkpKSB7XG4gICAgICAgICAgICB5YW1sTGluZUtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoL15iYXJbMC05XSokLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgIHlhbWxCYXJLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC9ecGllWzAtOV0qJC8udGVzdChrZXkpKSB7XG4gICAgICAgICAgICB5YW1sUGllS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvXnN1bW1hcnlbMC05XSokLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgIHlhbWxTdW1tYXJ5S2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvXmJ1bGxldFswLTldKiQvLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeWFtbEJ1bGxldEtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoL15tb250aFswLTldKiQvLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeWFtbE1vbnRoS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvXmhlYXRtYXBbMC05XSokLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgIHlhbWxIZWF0bWFwS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEN1c3RvbSBkYXRhc2V0XG4gICAgbGV0IHlhbWxDdXN0b21EYXRhc2V0S2V5cyA9IFtdO1xuICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcbiAgICAgICAgaWYgKC9eZGF0YXNldFswLTldKiQvLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIGlkIG9mIGN1c3RvbSBkYXRhc2V0IGlzIG5vdCBkdXBsaWNhdGVkXG4gICAgICAgICAgICBsZXQgY3VzdG9tRGF0YXNldElkID0gLTE7XG4gICAgICAgICAgICBsZXQgc3RyQ3VzdG9tRGF0YXNldElkID0ga2V5LnJlcGxhY2UoXCJkYXRhc2V0XCIsIFwiXCIpO1xuICAgICAgICAgICAgaWYgKHN0ckN1c3RvbURhdGFzZXRJZCA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgIGN1c3RvbURhdGFzZXRJZCA9IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1c3RvbURhdGFzZXRJZCA9IHBhcnNlRmxvYXQoc3RyQ3VzdG9tRGF0YXNldElkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHF1ZXJpZXMuc29tZSgocSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcS5nZXRJZCgpID09PSBjdXN0b21EYXRhc2V0SWQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiRHVwbGljYXRlZCBkYXRhc2V0IGlkIGZvciBrZXkgJ1wiICsga2V5ICsgXCInXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgeWFtbEN1c3RvbURhdGFzZXRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coYWRkaXRpb25hbEFsbG93ZWRLZXlzKTtcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFrZXlzT2ZSZW5kZXJJbmZvLmluY2x1ZGVzKGtleSkgJiZcbiAgICAgICAgICAgICFhZGRpdGlvbmFsQWxsb3dlZEtleXMuaW5jbHVkZXMoa2V5KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsTnVtT3V0cHV0cyA9XG4gICAgICAgIHlhbWxMaW5lS2V5cy5sZW5ndGggK1xuICAgICAgICB5YW1sQmFyS2V5cy5sZW5ndGggK1xuICAgICAgICB5YW1sUGllS2V5cy5sZW5ndGggK1xuICAgICAgICB5YW1sU3VtbWFyeUtleXMubGVuZ3RoICtcbiAgICAgICAgeWFtbEJ1bGxldEtleXMubGVuZ3RoICtcbiAgICAgICAgeWFtbE1vbnRoS2V5cy5sZW5ndGggK1xuICAgICAgICB5YW1sSGVhdG1hcEtleXMubGVuZ3RoO1xuICAgIGlmICh0b3RhbE51bU91dHB1dHMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFwiTm8gb3V0cHV0IHBhcmFtZXRlciBwcm92aWRlZCwgcGxlYXNlIHBsYWNlIGxpbmUsIGJhciwgcGllLCBtb250aCwgYnVsbGV0LCBvciBzdW1tYXJ5LlwiO1xuICAgIH1cblxuICAgIC8vIFJvb3QgZm9sZGVyIHRvIHNlYXJjaFxuICAgIHJlbmRlckluZm8uZm9sZGVyID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICB5YW1sPy5mb2xkZXIsXG4gICAgICAgIHBsdWdpbi5zZXR0aW5ncy5mb2xkZXJcbiAgICApO1xuICAgIGlmIChyZW5kZXJJbmZvLmZvbGRlci50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgICAgcmVuZGVySW5mby5mb2xkZXIgPSBwbHVnaW4uc2V0dGluZ3MuZm9sZGVyO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckluZm8gZm9sZGVyOiBcIiArIHJlbmRlckluZm8uZm9sZGVyKTtcblxuICAgIGxldCBhYnN0cmFjdEZvbGRlciA9IHBsdWdpbi5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKFxuICAgICAgICBub3JtYWxpemVQYXRoKHJlbmRlckluZm8uZm9sZGVyKVxuICAgICk7XG4gICAgaWYgKCFhYnN0cmFjdEZvbGRlciB8fCAhKGFic3RyYWN0Rm9sZGVyIGluc3RhbmNlb2YgVEZvbGRlcikpIHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiRm9sZGVyICdcIiArIHJlbmRlckluZm8uZm9sZGVyICsgXCInIGRvZXNuJ3QgZXhpc3RcIjtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICAvLyBmaWxlXG4gICAgaWYgKHR5cGVvZiB5YW1sLmZpbGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbGV0IHJldEZpbGVzID0gZ2V0U3RyaW5nQXJyYXkoXCJmaWxlXCIsIHlhbWwuZmlsZSk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0RmlsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRGaWxlczsgLy8gZXJyb3IgbWVzc2FnZVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlckluZm8uZmlsZSA9IHJldEZpbGVzO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmZpbGUpO1xuXG4gICAgLy8gc3BlY2lmaWVkRmlsZXNPbmx5XG4gICAgaWYgKHR5cGVvZiB5YW1sLnNwZWNpZmllZEZpbGVzT25seSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmVuZGVySW5mby5zcGVjaWZpZWRGaWxlc09ubHkgPSB5YW1sLnNwZWNpZmllZEZpbGVzT25seTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5zcGVjaWZpZWRGaWxlc09ubHkpO1xuXG4gICAgLy8gZmlsZUNvbnRhaW5zTGlua2VkRmlsZXNcbiAgICBpZiAodHlwZW9mIHlhbWwuZmlsZUNvbnRhaW5zTGlua2VkRmlsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbGV0IHJldEZpbGVzID0gZ2V0U3RyaW5nQXJyYXkoXG4gICAgICAgICAgICBcImZpbGVDb250YWluc0xpbmtlZEZpbGVzXCIsXG4gICAgICAgICAgICB5YW1sLmZpbGVDb250YWluc0xpbmtlZEZpbGVzXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0RmlsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRGaWxlcztcbiAgICAgICAgfVxuICAgICAgICByZW5kZXJJbmZvLmZpbGVDb250YWluc0xpbmtlZEZpbGVzID0gcmV0RmlsZXM7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uZmlsZUNvbnRhaW5zTGlua2VkRmlsZXMpO1xuXG4gICAgLy8gZmlsZU11bHRpcGxpZXJBZnRlckxpbmtcbiAgICByZW5kZXJJbmZvLmZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICB5YW1sPy5maWxlTXVsdGlwbGllckFmdGVyTGluayxcbiAgICAgICAgcmVuZGVySW5mby5maWxlTXVsdGlwbGllckFmdGVyTGlua1xuICAgICk7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5maWxlTXVsdGlwbGllckFmdGVyTGluayk7XG5cbiAgICAvLyBEYXRlIGZvcm1hdFxuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSB5YW1sLmRhdGVGb3JtYXQ7XG4gICAgLy8/PyBub3Qgc3VyZSB3aHkgSSBuZWVkIHRoaXMgdG8gbWFrZSBpdCB3b3JrcyxcbiAgICAvLyB3aXRob3V0IHRoYXQsIHRoZSBhc3NpZ25lZCB0aGUgcmVuZGVySW5mby5kYXRlRm9ybWF0IHdpbGwgYmVjb21lIHVuZGVmaW5lZFxuICAgIGlmICh0eXBlb2YgeWFtbC5kYXRlRm9ybWF0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh5YW1sLmRhdGVGb3JtYXQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdCA9IHBsdWdpbi5zZXR0aW5ncy5kYXRlRm9ybWF0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdCA9IHBsdWdpbi5zZXR0aW5ncy5kYXRlRm9ybWF0O1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckluZm8gZGF0ZUZvcm1hdDogXCIgKyByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuXG4gICAgLy8gRGF0ZSBmb3JtYXQgcHJlZml4XG4gICAgcmVuZGVySW5mby5kYXRlRm9ybWF0UHJlZml4ID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICB5YW1sPy5kYXRlRm9ybWF0UHJlZml4LFxuICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXhcbiAgICApO1xuXG4gICAgLy8gRGF0ZSBmcm9tYXQgc3VmZml4XG4gICAgcmVuZGVySW5mby5kYXRlRm9ybWF0U3VmZml4ID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICB5YW1sPy5kYXRlRm9ybWF0U3VmZml4LFxuICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRTdWZmaXhcbiAgICApO1xuXG4gICAgLy8gc3RhcnREYXRlLCBlbmREYXRlXG4gICAgLy8gY29uc29sZS5sb2coXCJQYXJzaW5nIHN0YXJ0RGF0ZVwiKTtcbiAgICBpZiAodHlwZW9mIHlhbWwuc3RhcnREYXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICgvXihbXFwtXT9bMC05XStbXFwuXVswLTldK3xbXFwtXT9bMC05XSspbSQvLnRlc3QoeWFtbC5zdGFydERhdGUpKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICBcIidtJyBmb3IgJ21pbnV0ZScgaXMgdG9vIHNtYWxsIGZvciBwYXJhbWV0ZXIgc3RhcnREYXRlLCBwbGVhc2UgdXNlICdkJyBmb3IgJ2RheScgb3IgJ00nIGZvciBtb250aFwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RyU3RhcnREYXRlID0gaGVscGVyLmdldERhdGVTdHJpbmdGcm9tSW5wdXRTdHJpbmcoXG4gICAgICAgICAgICB5YW1sLnN0YXJ0RGF0ZSxcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFByZWZpeCxcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFN1ZmZpeFxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhzdHJTdGFydERhdGUpO1xuXG4gICAgICAgIC8vIHJlbGF0aXZlIGRhdGVcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9IG51bGw7XG4gICAgICAgIGxldCBpc1N0YXJ0RGF0ZVZhbGlkID0gZmFsc2U7XG4gICAgICAgIHN0YXJ0RGF0ZSA9IGhlbHBlci5nZXREYXRlQnlEdXJhdGlvblRvVG9kYXkoXG4gICAgICAgICAgICBzdHJTdGFydERhdGUsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3RhcnREYXRlKTtcblxuICAgICAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICAgICAgICBpc1N0YXJ0RGF0ZVZhbGlkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IGhlbHBlci5zdHJUb0RhdGUoc3RyU3RhcnREYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICBpc1N0YXJ0RGF0ZVZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhzdGFydERhdGUpO1xuXG4gICAgICAgIGlmICghaXNTdGFydERhdGVWYWxpZCB8fCBzdGFydERhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIFwiSW52YWxpZCBzdGFydERhdGUsIHRoZSBmb3JtYXQgb2Ygc3RhcnREYXRlIG1heSBub3QgbWF0Y2ggeW91ciBkYXRlRm9ybWF0IFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlckluZm8uc3RhcnREYXRlID0gc3RhcnREYXRlO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKFwiUGFyc2luZyBlbmREYXRlXCIpO1xuICAgIGlmICh0eXBlb2YgeWFtbC5lbmREYXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICgvXihbXFwtXT9bMC05XStbXFwuXVswLTldK3xbXFwtXT9bMC05XSspbSQvLnRlc3QoeWFtbC5lbmREYXRlKSkge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgXCInbScgZm9yICdtaW51dGUnIGlzIHRvbyBzbWFsbCBmb3IgcGFyYW1ldGVyIGVuZERhdGUsIHBsZWFzZSB1c2UgJ2QnIGZvciAnZGF5JyBvciAnTScgZm9yIG1vbnRoXCI7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdHJFbmREYXRlID0gaGVscGVyLmdldERhdGVTdHJpbmdGcm9tSW5wdXRTdHJpbmcoXG4gICAgICAgICAgICB5YW1sLmVuZERhdGUsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXgsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRTdWZmaXhcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgZW5kRGF0ZSA9IG51bGw7XG4gICAgICAgIGxldCBpc0VuZERhdGVWYWxpZCA9IGZhbHNlO1xuICAgICAgICBlbmREYXRlID0gaGVscGVyLmdldERhdGVCeUR1cmF0aW9uVG9Ub2RheShcbiAgICAgICAgICAgIHN0ckVuZERhdGUsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGVuZERhdGUpIHtcbiAgICAgICAgICAgIGlzRW5kRGF0ZVZhbGlkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVuZERhdGUgPSBoZWxwZXIuc3RyVG9EYXRlKHN0ckVuZERhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICBpZiAoZW5kRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICBpc0VuZERhdGVWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coZW5kRGF0ZSk7XG5cbiAgICAgICAgaWYgKCFpc0VuZERhdGVWYWxpZCB8fCBlbmREYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICBcIkludmFsaWQgZW5kRGF0ZSwgdGhlIGZvcm1hdCBvZiBlbmREYXRlIG1heSBub3QgbWF0Y2ggeW91ciBkYXRlRm9ybWF0IFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSA9IGVuZERhdGU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgcmVuZGVySW5mby5zdGFydERhdGUgIT09IG51bGwgJiZcbiAgICAgICAgcmVuZGVySW5mby5zdGFydERhdGUuaXNWYWxpZCgpICYmXG4gICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSAhPT0gbnVsbCAmJlxuICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUuaXNWYWxpZCgpXG4gICAgKSB7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSBlbmREYXRlID4gc3RhcnREYXRlXG4gICAgICAgIGlmIChyZW5kZXJJbmZvLmVuZERhdGUgPCByZW5kZXJJbmZvLnN0YXJ0RGF0ZSkge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgXCJJbnZhbGlkIGRhdGUgcmFuZ2UgKHN0YXJ0RGF0ZSBsYXJnZXIgdGhhbiBlbmREYXRlKVwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnN0YXJ0RGF0ZSk7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5lbmREYXRlKTtcblxuICAgIC8vIHhEYXRhc2V0XG4gICAgcmVuZGVySW5mby54RGF0YXNldCA9IHhEYXRhc2V0O1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueERhdGFzZXQpO1xuXG4gICAgLy8gRGF0YXNldCBuYW1lIChuZWVkIHhEYXRhc2V0IHRvIHNldCBkZWZhdWx0IG5hbWUpXG4gICAgbGV0IHJldERhdGFzZXROYW1lID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwiZGF0YXNldE5hbWVcIixcbiAgICAgICAgeWFtbC5kYXRhc2V0TmFtZSxcbiAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgIFwidW50aXRsZWRcIixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXREYXRhc2V0TmFtZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0RGF0YXNldE5hbWU7IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICAvLyByZW5hbWUgdW50aXRsZWRcbiAgICBsZXQgaW5kVW50aXRsZWQgPSAwO1xuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHJldERhdGFzZXROYW1lLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgaWYgKHJlbmRlckluZm8ueERhdGFzZXQuaW5jbHVkZXMoaW5kKSkgY29udGludWU7XG4gICAgICAgIGlmIChyZXREYXRhc2V0TmFtZVtpbmRdID09PSBcInVudGl0bGVkXCIpIHtcbiAgICAgICAgICAgIHJldERhdGFzZXROYW1lW2luZF0gPSBcInVudGl0bGVkXCIgKyBpbmRVbnRpdGxlZC50b1N0cmluZygpO1xuICAgICAgICAgICAgaW5kVW50aXRsZWQrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDaGVjayBkdXBsaWNhdGVkIG5hbWVzXG4gICAgaWYgKG5ldyBTZXQocmV0RGF0YXNldE5hbWUpLnNpemUgPT09IHJldERhdGFzZXROYW1lLmxlbmd0aCkge1xuICAgICAgICByZW5kZXJJbmZvLmRhdGFzZXROYW1lID0gcmV0RGF0YXNldE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiTm90IGVub3VnaCBkYXRhc2V0IG5hbWVzIG9yIGR1cGxpY2F0ZWQgbmFtZXNcIjtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5kYXRhc2V0TmFtZSk7XG5cbiAgICAvLyBjb25zdFZhbHVlXG4gICAgbGV0IHJldENvbnN0VmFsdWUgPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJjb25zdFZhbHVlXCIsXG4gICAgICAgIHlhbWwuY29uc3RWYWx1ZSxcbiAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgIDEuMCxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRDb25zdFZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRDb25zdFZhbHVlOyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgcmVuZGVySW5mby5jb25zdFZhbHVlID0gcmV0Q29uc3RWYWx1ZTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmNvbnN0VmFsdWUpO1xuXG4gICAgLy8gaWdub3JlQXR0YWNoZWRWYWx1ZVxuICAgIGxldCByZXRJZ25vcmVBdHRhY2hlZFZhbHVlID0gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxuICAgICAgICBcImlnbm9yZUF0dGFjaGVkVmFsdWVcIixcbiAgICAgICAgeWFtbC5pZ25vcmVBdHRhY2hlZFZhbHVlLFxuICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0SWdub3JlQXR0YWNoZWRWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0SWdub3JlQXR0YWNoZWRWYWx1ZTtcbiAgICB9XG4gICAgcmVuZGVySW5mby5pZ25vcmVBdHRhY2hlZFZhbHVlID0gcmV0SWdub3JlQXR0YWNoZWRWYWx1ZTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmlnbm9yZUF0dGFjaGVkVmFsdWUpO1xuXG4gICAgLy8gaWdub3JlWmVyb1ZhbHVlXG4gICAgbGV0IHJldElnbm9yZVplcm9WYWx1ZSA9IGdldEJvb2xBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJpZ25vcmVaZXJvVmFsdWVcIixcbiAgICAgICAgeWFtbC5pZ25vcmVaZXJvVmFsdWUsXG4gICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRJZ25vcmVaZXJvVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldElnbm9yZVplcm9WYWx1ZTtcbiAgICB9XG4gICAgcmVuZGVySW5mby5pZ25vcmVaZXJvVmFsdWUgPSByZXRJZ25vcmVaZXJvVmFsdWU7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5pZ25vcmVBdHRhY2hlZFZhbHVlKTtcblxuICAgIC8vIGFjY3VtXG4gICAgbGV0IHJldEFjY3VtID0gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxuICAgICAgICBcImFjY3VtXCIsXG4gICAgICAgIHlhbWwuYWNjdW0sXG4gICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRBY2N1bSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0QWNjdW07XG4gICAgfVxuICAgIHJlbmRlckluZm8uYWNjdW0gPSByZXRBY2N1bTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmFjY3VtKTtcblxuICAgIC8vIHBlbmFsdHlcbiAgICBsZXQgcmV0UGVuYWx0eSA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFxuICAgICAgICBcInBlbmFsdHlcIixcbiAgICAgICAgeWFtbC5wZW5hbHR5LFxuICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRQZW5hbHR5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRQZW5hbHR5O1xuICAgIH1cbiAgICByZW5kZXJJbmZvLnBlbmFsdHkgPSByZXRQZW5hbHR5O1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ucGVuYWx0eSk7XG5cbiAgICAvLyB2YWx1ZVNoaWZ0XG4gICAgbGV0IHJldFZhbHVlU2hpZnQgPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJ2YWx1ZVNoaWZ0XCIsXG4gICAgICAgIHlhbWwudmFsdWVTaGlmdCxcbiAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgIDAsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0VmFsdWVTaGlmdCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0VmFsdWVTaGlmdDtcbiAgICB9XG4gICAgcmVuZGVySW5mby52YWx1ZVNoaWZ0ID0gcmV0VmFsdWVTaGlmdDtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnZhbHVlU2hpZnQpO1xuXG4gICAgLy8gc2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuXG4gICAgbGV0IHJldFNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbiA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFxuICAgICAgICBcInNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhblwiLFxuICAgICAgICB5YW1sLnNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbixcbiAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0U2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRTaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW47XG4gICAgfVxuICAgIHJlbmRlckluZm8uc2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuID0gcmV0U2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uc2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuKTtcblxuICAgIC8vIHRleHRWYWx1ZU1hcFxuICAgIGlmICh0eXBlb2YgeWFtbC50ZXh0VmFsdWVNYXAgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbGV0IGtleXMgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sLnRleHRWYWx1ZU1hcCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRleHRzKTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgIGxldCB0ZXh0ID0ga2V5LnRyaW0oKTtcbiAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwW3RleHRdID0geWFtbC50ZXh0VmFsdWVNYXBbdGV4dF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby50ZXh0VmFsdWVNYXApO1xuXG4gICAgLy8gZml4ZWRTY2FsZVxuICAgIGlmICh0eXBlb2YgeWFtbC5maXhlZFNjYWxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJlbmRlckluZm8uZml4ZWRTY2FsZSA9IHlhbWwuZml4ZWRTY2FsZTtcbiAgICB9XG5cbiAgICAvLyBmaXRQYW5lbFdpZHRoXG4gICAgaWYgKHR5cGVvZiB5YW1sLmZpdFBhbmVsV2lkdGggPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJlbmRlckluZm8uZml0UGFuZWxXaWR0aCA9IHlhbWwuZml0UGFuZWxXaWR0aDtcbiAgICB9XG5cbiAgICAvLyBhc3BlY3RSYXRpb1xuICAgIGlmICh0eXBlb2YgeWFtbC5hc3BlY3RSYXRpbyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyB5YW1sLmZpdFBhbmVsV2lkdGhcbiAgICAgICAgbGV0IHJhdGlvUmVnRXggPSAvKFswLTldKik6KFswLTldKikvO1xuICAgICAgICBsZXQgcGFydHMgPSB5YW1sLmFzcGVjdFJhdGlvLm1hdGNoKHJhdGlvUmVnRXgpO1xuICAgICAgICBwYXJ0cy5zaGlmdCgpO1xuICAgICAgICBwYXJ0cyA9IHBhcnRzLm1hcCgoaTogc3RyaW5nKT0+cGFyc2VJbnQoaSwxMCkpO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoPT0yKSB7XG4gICAgICAgICAgICByZW5kZXJJbmZvLmFzcGVjdFJhdGlvID0gbmV3IEFzcGVjdFJhdGlvKHBhcnRzWzBdLCBwYXJ0c1sxXSk7XG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZSA9IHJlbmRlckluZm8uYXNwZWN0UmF0aW8ucmVjYWxjdWxhdGVTaXplKHJlbmRlckluZm8uZGF0YUFyZWFTaXplKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbWFyZ2luXG4gICAgbGV0IHJldE1hcmdpbiA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFwibWFyZ2luXCIsIHlhbWwubWFyZ2luLCA0LCAxMCwgdHJ1ZSk7XG4gICAgaWYgKHR5cGVvZiByZXRNYXJnaW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldE1hcmdpbjsgLy8gZXJyb3JNZXNzYWdlXG4gICAgfVxuICAgIGlmIChyZXRNYXJnaW4ubGVuZ3RoID4gNCkge1xuICAgICAgICByZXR1cm4gXCJtYXJnaW4gYWNjZXB0cyBub3QgbW9yZSB0aGFuIGZvdXIgdmFsdWVzIGZvciB0b3AsIHJpZ2h0LCBib3R0b20sIGFuZCBsZWZ0IG1hcmdpbnMuXCI7XG4gICAgfVxuICAgIHJlbmRlckluZm8ubWFyZ2luID0gbmV3IE1hcmdpbihcbiAgICAgICAgcmV0TWFyZ2luWzBdLFxuICAgICAgICByZXRNYXJnaW5bMV0sXG4gICAgICAgIHJldE1hcmdpblsyXSxcbiAgICAgICAgcmV0TWFyZ2luWzNdXG4gICAgKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLm1hcmdpbik7XG5cbiAgICAvLyBjdXN0b21EYXRhc2V0IHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIGZvciAobGV0IGRhdGFzZXRLZXkgb2YgeWFtbEN1c3RvbURhdGFzZXRLZXlzKSB7XG4gICAgICAgIGxldCBjdXN0b21EYXRhc2V0ID0gbmV3IEN1c3RvbURhdGFzZXRJbmZvKCk7XG4gICAgICAgIGxldCB5YW1sQ3VzdG9tRGF0YXNldCA9IHlhbWxbZGF0YXNldEtleV07XG5cbiAgICAgICAgbGV0IGtleXNPZkN1c3RvbURhdGFzZXRJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoY3VzdG9tRGF0YXNldCk7XG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sQ3VzdG9tRGF0YXNldCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZkN1c3RvbURhdGFzZXRJbmZvKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xuICAgICAgICAgICAgaWYgKCFrZXlzT2ZDdXN0b21EYXRhc2V0SW5mby5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWRcbiAgICAgICAgbGV0IGN1c3RvbURhdGFzZXRJZCA9IC0xO1xuICAgICAgICBsZXQgc3RyQ3VzdG9tRGF0YXNldElkID0gZGF0YXNldEtleS5yZXBsYWNlKFwiZGF0YXNldFwiLCBcIlwiKTtcbiAgICAgICAgaWYgKHN0ckN1c3RvbURhdGFzZXRJZCA9PT0gXCJcIikge1xuICAgICAgICAgICAgY3VzdG9tRGF0YXNldElkID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1c3RvbURhdGFzZXRJZCA9IHBhcnNlRmxvYXQoc3RyQ3VzdG9tRGF0YXNldElkKTtcbiAgICAgICAgfVxuICAgICAgICBjdXN0b21EYXRhc2V0LmlkID0gY3VzdG9tRGF0YXNldElkO1xuXG4gICAgICAgIC8vIG5hbWVcbiAgICAgICAgY3VzdG9tRGF0YXNldC5uYW1lID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbEN1c3RvbURhdGFzZXQ/Lm5hbWUsXG4gICAgICAgICAgICBjdXN0b21EYXRhc2V0Lm5hbWVcbiAgICAgICAgKTtcblxuICAgICAgICAvLyB4RGF0YVxuICAgICAgICBsZXQgcmV0WERhdGEgPSBnZXRTdHJpbmdBcnJheShcInhEYXRhXCIsIHlhbWxDdXN0b21EYXRhc2V0Py54RGF0YSk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0WERhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRYRGF0YTtcbiAgICAgICAgfVxuICAgICAgICBjdXN0b21EYXRhc2V0LnhEYXRhID0gcmV0WERhdGE7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGN1c3RvbURhdGFzZXQueERhdGEpO1xuICAgICAgICBsZXQgbnVtWERhdGEgPSBjdXN0b21EYXRhc2V0LnhEYXRhLmxlbmd0aDtcblxuICAgICAgICAvLyB5RGF0YVxuICAgICAgICBsZXQgcmV0WURhdGEgPSBnZXRTdHJpbmdBcnJheShcInlEYXRhXCIsIHlhbWxDdXN0b21EYXRhc2V0Py55RGF0YSk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0WURhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRZRGF0YTtcbiAgICAgICAgfVxuICAgICAgICBjdXN0b21EYXRhc2V0LnlEYXRhID0gcmV0WURhdGE7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGN1c3RvbURhdGFzZXQueURhdGEpO1xuICAgICAgICBpZiAoY3VzdG9tRGF0YXNldC55RGF0YS5sZW5ndGggIT09IG51bVhEYXRhKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICBcIk51bWJlciBvZiBlbGVtZW50cyBpbiB4RGF0YSBhbmQgeURhdGEgbm90IG1hdGNoZWRcIjtcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJJbmZvLmN1c3RvbURhdGFzZXQucHVzaChjdXN0b21EYXRhc2V0KTtcbiAgICB9IC8vIGN1c3RvbURhdGFzZXQgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5jdXN0b21EYXRhc2V0KTtcblxuICAgIC8vIGxpbmUgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgZm9yIChsZXQgbGluZUtleSBvZiB5YW1sTGluZUtleXMpIHtcbiAgICAgICAgbGV0IGxpbmUgPSBuZXcgTGluZUluZm8oKTtcbiAgICAgICAgbGV0IHlhbWxMaW5lID0geWFtbFtsaW5lS2V5XTtcblxuICAgICAgICBsZXQga2V5c09mTGluZUluZm8gPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhsaW5lKTtcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxMaW5lKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c09mTGluZUluZm8pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzRm91bmRJbllBTUwpO1xuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XG4gICAgICAgICAgICBpZiAoIWtleXNPZkxpbmVJbmZvLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmV0UGFyc2VDb21tb25DaGFydEluZm8gPSBwYXJzZUNvbW1vbkNoYXJ0SW5mbyh5YW1sTGluZSwgbGluZSk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0UGFyc2VDb21tb25DaGFydEluZm8gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRQYXJzZUNvbW1vbkNoYXJ0SW5mbztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxpbmVDb2xvclxuICAgICAgICBsZXQgcmV0TGluZUNvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgICAgICBcImxpbmVDb2xvclwiLFxuICAgICAgICAgICAgeWFtbExpbmU/LmxpbmVDb2xvcixcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIHZhbGlkYXRlQ29sb3IsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0TGluZUNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0TGluZUNvbG9yOyAvLyBlcnJvck1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICBsaW5lLmxpbmVDb2xvciA9IHJldExpbmVDb2xvcjtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS5saW5lQ29sb3IpO1xuXG4gICAgICAgIC8vIGxpbmVXaWR0aFxuICAgICAgICBsZXQgcmV0TGluZVdpZHRoID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgICAgICBcImxpbmVXaWR0aFwiLFxuICAgICAgICAgICAgeWFtbExpbmU/LmxpbmVXaWR0aCxcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICAgICAgMS41LFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldExpbmVXaWR0aCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldExpbmVXaWR0aDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgbGluZS5saW5lV2lkdGggPSByZXRMaW5lV2lkdGg7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUubGluZVdpZHRoKTtcblxuICAgICAgICAvLyBzaG93TGluZVxuICAgICAgICBsZXQgcmV0U2hvd0xpbmUgPSBnZXRCb29sQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgICAgICBcInNob3dMaW5lXCIsXG4gICAgICAgICAgICB5YW1sTGluZT8uc2hvd0xpbmUsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0U2hvd0xpbmUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRTaG93TGluZTtcbiAgICAgICAgfVxuICAgICAgICBsaW5lLnNob3dMaW5lID0gcmV0U2hvd0xpbmU7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUuc2hvd0xpbmUpO1xuXG4gICAgICAgIC8vIHNob3dQb2ludFxuICAgICAgICBsZXQgcmV0U2hvd1BvaW50ID0gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJzaG93UG9pbnRcIixcbiAgICAgICAgICAgIHlhbWxMaW5lPy5zaG93UG9pbnQsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0U2hvd1BvaW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0U2hvd1BvaW50O1xuICAgICAgICB9XG4gICAgICAgIGxpbmUuc2hvd1BvaW50ID0gcmV0U2hvd1BvaW50O1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnNob3dQb2ludCk7XG5cbiAgICAgICAgLy8gcG9pbnRDb2xvclxuICAgICAgICBsZXQgcmV0UG9pbnRDb2xvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJwb2ludENvbG9yXCIsXG4gICAgICAgICAgICB5YW1sTGluZT8ucG9pbnRDb2xvcixcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICAgICAgXCIjNjliM2EyXCIsXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbG9yLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldFBvaW50Q29sb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRQb2ludENvbG9yO1xuICAgICAgICB9XG4gICAgICAgIGxpbmUucG9pbnRDb2xvciA9IHJldFBvaW50Q29sb3I7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUucG9pbnRDb2xvcik7XG5cbiAgICAgICAgLy8gcG9pbnRCb3JkZXJDb2xvclxuICAgICAgICBsZXQgcmV0UG9pbnRCb3JkZXJDb2xvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJwb2ludEJvcmRlckNvbG9yXCIsXG4gICAgICAgICAgICB5YW1sTGluZT8ucG9pbnRCb3JkZXJDb2xvcixcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICAgICAgXCIjNjliM2EyXCIsXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbG9yLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldFBvaW50Qm9yZGVyQ29sb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRQb2ludEJvcmRlckNvbG9yO1xuICAgICAgICB9XG4gICAgICAgIGxpbmUucG9pbnRCb3JkZXJDb2xvciA9IHJldFBvaW50Qm9yZGVyQ29sb3I7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUucG9pbnRCb3JkZXJDb2xvcik7XG5cbiAgICAgICAgLy8gcG9pbnRCb3JkZXJXaWR0aFxuICAgICAgICBsZXQgcmV0UG9pbnRCb3JkZXJXaWR0aCA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJwb2ludEJvcmRlcldpZHRoXCIsXG4gICAgICAgICAgICB5YW1sTGluZT8ucG9pbnRCb3JkZXJXaWR0aCxcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICAgICAgMC4wLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldFBvaW50Qm9yZGVyV2lkdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRQb2ludEJvcmRlcldpZHRoOyAvLyBlcnJvck1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICBsaW5lLnBvaW50Qm9yZGVyV2lkdGggPSByZXRQb2ludEJvcmRlcldpZHRoO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnBvaW50Qm9yZGVyV2lkdGgpO1xuXG4gICAgICAgIC8vIHBvaW50U2l6ZVxuICAgICAgICBsZXQgcmV0UG9pbnRTaXplID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgICAgICBcInBvaW50U2l6ZVwiLFxuICAgICAgICAgICAgeWFtbExpbmU/LnBvaW50U2l6ZSxcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICAgICAgMy4wLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldFBvaW50U2l6ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldFBvaW50U2l6ZTsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgbGluZS5wb2ludFNpemUgPSByZXRQb2ludFNpemU7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUucG9pbnRTaXplKTtcblxuICAgICAgICAvLyBmaWxsR2FwXG4gICAgICAgIGxldCByZXRGaWxsR2FwID0gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJmaWxsR2FwXCIsXG4gICAgICAgICAgICB5YW1sTGluZT8uZmlsbEdhcCxcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0RmlsbEdhcCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldEZpbGxHYXA7XG4gICAgICAgIH1cbiAgICAgICAgbGluZS5maWxsR2FwID0gcmV0RmlsbEdhcDtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS5maWxsR2FwKTtcblxuICAgICAgICAvLyB5QXhpc0xvY2F0aW9uXG4gICAgICAgIGxldCByZXRZQXhpc0xvY2F0aW9uID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgICAgICBcInlBeGlzTG9jYXRpb25cIixcbiAgICAgICAgICAgIHlhbWxMaW5lPy55QXhpc0xvY2F0aW9uLFxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgICAgICBcImxlZnRcIixcbiAgICAgICAgICAgIHZhbGlkYXRlWUF4aXNMb2NhdGlvbixcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRZQXhpc0xvY2F0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0WUF4aXNMb2NhdGlvbjsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgbGluZS55QXhpc0xvY2F0aW9uID0gcmV0WUF4aXNMb2NhdGlvbjtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS55QXhpc0xvY2F0aW9uKTtcblxuICAgICAgICByZW5kZXJJbmZvLmxpbmUucHVzaChsaW5lKTtcbiAgICB9IC8vIGxpbmUgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5saW5lKTtcblxuICAgIC8vIGJhciByZWxhdGVkIHBhcmFtZXRlcnNcbiAgICBmb3IgKGxldCBiYXJLZXkgb2YgeWFtbEJhcktleXMpIHtcbiAgICAgICAgbGV0IGJhciA9IG5ldyBCYXJJbmZvKCk7XG4gICAgICAgIGxldCB5YW1sQmFyID0geWFtbFtiYXJLZXldO1xuXG4gICAgICAgIGxldCBrZXlzT2ZCYXJJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoYmFyKTtcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxCYXIpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZCYXJJbmZvKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xuICAgICAgICAgICAgaWYgKCFrZXlzT2ZCYXJJbmZvLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmV0UGFyc2VDb21tb25DaGFydEluZm8gPSBwYXJzZUNvbW1vbkNoYXJ0SW5mbyh5YW1sQmFyLCBiYXIpO1xuICAgICAgICBpZiAodHlwZW9mIHJldFBhcnNlQ29tbW9uQ2hhcnRJbmZvID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0UGFyc2VDb21tb25DaGFydEluZm87XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiYXJDb2xvclxuICAgICAgICBsZXQgcmV0QmFyQ29sb3IgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwiYmFyQ29sb3JcIixcbiAgICAgICAgICAgIHlhbWxCYXI/LmJhckNvbG9yLFxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgdmFsaWRhdGVDb2xvcixcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRCYXJDb2xvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldEJhckNvbG9yOyAvLyBlcnJvck1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICBiYXIuYmFyQ29sb3IgPSByZXRCYXJDb2xvcjtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYmFyLmJhckNvbG9yKTtcblxuICAgICAgICAvLyB5QXhpc0xvY2F0aW9uXG4gICAgICAgIGxldCByZXRZQXhpc0xvY2F0aW9uID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgICAgICBcInlBeGlzTG9jYXRpb25cIixcbiAgICAgICAgICAgIHlhbWxCYXI/LnlBeGlzTG9jYXRpb24sXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIFwibGVmdFwiLFxuICAgICAgICAgICAgdmFsaWRhdGVZQXhpc0xvY2F0aW9uLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldFlBeGlzTG9jYXRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRZQXhpc0xvY2F0aW9uOyAvLyBlcnJvck1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICBiYXIueUF4aXNMb2NhdGlvbiA9IHJldFlBeGlzTG9jYXRpb247XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJhci55QXhpc0xvY2F0aW9uKTtcblxuICAgICAgICByZW5kZXJJbmZvLmJhci5wdXNoKGJhcik7XG4gICAgfSAvLyBiYXIgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5iYXIpO1xuXG4gICAgLy8gcGllIHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIGZvciAobGV0IHBpZUtleSBvZiB5YW1sUGllS2V5cykge1xuICAgICAgICBsZXQgcGllID0gbmV3IFBpZUluZm8oKTtcbiAgICAgICAgbGV0IHlhbWxQaWUgPSB5YW1sW3BpZUtleV07XG5cbiAgICAgICAgbGV0IGtleXNPZlBpZUluZm8gPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhwaWUpO1xuICAgICAgICBsZXQga2V5c0ZvdW5kSW5ZQU1MID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoeWFtbFBpZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZlBpZUluZm8pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzRm91bmRJbllBTUwpO1xuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XG4gICAgICAgICAgICBpZiAoIWtleXNPZlBpZUluZm8uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRpdGxlXG4gICAgICAgIHBpZS50aXRsZSA9IGdldFN0cmluZ0Zyb21JbnB1dCh5YW1sUGllPy50aXRsZSwgcGllLnRpdGxlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGllLnRpdGxlKTtcblxuICAgICAgICAvLyBkYXRhXG4gICAgICAgIGxldCByZXREYXRhID0gZ2V0U3RyaW5nQXJyYXkoXCJkYXRhXCIsIHlhbWxQaWU/LmRhdGEpO1xuICAgICAgICBpZiAodHlwZW9mIHJldERhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXREYXRhO1xuICAgICAgICB9XG4gICAgICAgIHBpZS5kYXRhID0gcmV0RGF0YTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGllLmRhdGEpO1xuICAgICAgICBsZXQgbnVtRGF0YSA9IHBpZS5kYXRhLmxlbmd0aDtcblxuICAgICAgICAvLyBkYXRhQ29sb3JcbiAgICAgICAgbGV0IHJldERhdGFDb2xvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJkYXRhQ29sb3JcIixcbiAgICAgICAgICAgIHlhbWxQaWU/LmRhdGFDb2xvcixcbiAgICAgICAgICAgIG51bURhdGEsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgdmFsaWRhdGVDb2xvcixcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXREYXRhQ29sb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXREYXRhQ29sb3I7IC8vIGVycm9yTWVzc2FnZVxuICAgICAgICB9XG4gICAgICAgIHBpZS5kYXRhQ29sb3IgPSByZXREYXRhQ29sb3I7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5kYXRhQ29sb3IpO1xuXG4gICAgICAgIC8vIGRhdGFOYW1lXG4gICAgICAgIGxldCByZXREYXRhTmFtZSA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJkYXRhTmFtZVwiLFxuICAgICAgICAgICAgeWFtbFBpZT8uZGF0YU5hbWUsXG4gICAgICAgICAgICBudW1EYXRhLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0RGF0YU5hbWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXREYXRhTmFtZTsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgcGllLmRhdGFOYW1lID0gcmV0RGF0YU5hbWU7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5kYXRhTmFtZSk7XG5cbiAgICAgICAgLy8gbGFiZWxcbiAgICAgICAgbGV0IHJldExhYmVsID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgICAgICB5YW1sUGllPy5sYWJlbCxcbiAgICAgICAgICAgIG51bURhdGEsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRMYWJlbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldExhYmVsOyAvLyBlcnJvck1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICBwaWUubGFiZWwgPSByZXRMYWJlbDtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGllLmxhYmVsKTtcblxuICAgICAgICAvLyBoaWRlTGFiZWxMZXNzVGhhblxuICAgICAgICBpZiAodHlwZW9mIHlhbWxQaWU/LmhpZGVMYWJlbExlc3NUaGFuID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBwaWUuaGlkZUxhYmVsTGVzc1RoYW4gPSB5YW1sUGllLmhpZGVMYWJlbExlc3NUaGFuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5oaWRlTGFiZWxMZXNzVGhhbik7XG5cbiAgICAgICAgLy8gZXh0TGFiZWxcbiAgICAgICAgbGV0IHJldEV4dExhYmVsID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgICAgICBcImV4dExhYmVsXCIsXG4gICAgICAgICAgICB5YW1sUGllPy5leHRMYWJlbCxcbiAgICAgICAgICAgIG51bURhdGEsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRFeHRMYWJlbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldEV4dExhYmVsOyAvLyBlcnJvck1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICBwaWUuZXh0TGFiZWwgPSByZXRFeHRMYWJlbDtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGllLmV4dExhYmVsKTtcblxuICAgICAgICAvLyBzaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbFBpZT8uc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHBpZS5zaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsID0geWFtbFBpZS5zaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5zaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsKTtcblxuICAgICAgICAvLyByYXRpb0lubmVyUmFkaXVzXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbFBpZT8ucmF0aW9Jbm5lclJhZGl1cyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcGllLnJhdGlvSW5uZXJSYWRpdXMgPSB5YW1sUGllLnJhdGlvSW5uZXJSYWRpdXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cocGllLnJhdGlvSW5uZXJSYWRpdXMpO1xuXG4gICAgICAgIC8vIHNob3dMZWdlbmRcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sUGllPy5zaG93TGVnZW5kID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcGllLnNob3dMZWdlbmQgPSB5YW1sUGllLnNob3dMZWdlbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsZWdlbmRQb3NpdGlvblxuICAgICAgICBwaWUubGVnZW5kUG9zaXRpb24gPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sUGllPy5sZWdlbmRQb3NpdGlvbixcbiAgICAgICAgICAgIFwicmlnaHRcIlxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGxlZ2VuZE9yaWVudFxuICAgICAgICBsZXQgZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XG4gICAgICAgIGlmIChwaWUubGVnZW5kUG9zaXRpb24gPT09IFwidG9wXCIgfHwgcGllLmxlZ2VuZFBvc2l0aW9uID09PSBcImJvdHRvbVwiKSB7XG4gICAgICAgICAgICBkZWZhdWx0TGVnZW5kT3JpZW50YXRpb24gPSBcImhvcml6b250YWxcIjtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHBpZS5sZWdlbmRQb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHxcbiAgICAgICAgICAgIHBpZS5sZWdlbmRQb3NpdGlvbiA9PT0gXCJyaWdodFwiXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uID0gXCJ2ZXJ0aWNhbFwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XG4gICAgICAgIH1cbiAgICAgICAgcGllLmxlZ2VuZE9yaWVudGF0aW9uID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbFBpZT8ubGVnZW5kT3JpZW50YXRpb24sXG4gICAgICAgICAgICBkZWZhdWx0TGVnZW5kT3JpZW50YXRpb25cbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGllLmxlZ2VuZFBvc2l0aW9uKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGllLmxlZ2VuZE9yaWVudGF0aW9uKTtcblxuICAgICAgICAvLyBsZWdlbmRCZ0NvbG9yXG4gICAgICAgIHBpZS5sZWdlbmRCZ0NvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbFBpZT8ubGVnZW5kQmdDb2xvcixcbiAgICAgICAgICAgIHBpZS5sZWdlbmRCZ0NvbG9yXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gbGVnZW5kQm9yZGVyQ29sb3JcbiAgICAgICAgcGllLmxlZ2VuZEJvcmRlckNvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbFBpZT8ubGVnZW5kQm9yZGVyQ29sb3IsXG4gICAgICAgICAgICBwaWUubGVnZW5kQm9yZGVyQ29sb3JcbiAgICAgICAgKTtcblxuICAgICAgICByZW5kZXJJbmZvLnBpZS5wdXNoKHBpZSk7XG4gICAgfSAvLyBwaWUgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5waWUpO1xuXG4gICAgLy8gc3VtbWFyeSByZWxhdGVkIHBhcmFtZXRlcnNcbiAgICBmb3IgKGxldCBzdW1tYXJ5S2V5IG9mIHlhbWxTdW1tYXJ5S2V5cykge1xuICAgICAgICBsZXQgc3VtbWFyeSA9IG5ldyBTdW1tYXJ5SW5mbygpO1xuICAgICAgICBsZXQgeWFtbFN1bW1hcnkgPSB5YW1sW3N1bW1hcnlLZXldO1xuXG4gICAgICAgIGxldCBrZXlzT2ZTdW1tYXJ5SW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHN1bW1hcnkpO1xuICAgICAgICBsZXQga2V5c0ZvdW5kSW5ZQU1MID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoeWFtbFN1bW1hcnkpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZTdW1tYXJ5SW5mbyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcbiAgICAgICAgICAgIGlmICgha2V5c09mU3VtbWFyeUluZm8uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRlbXBsYXRlXG4gICAgICAgIHN1bW1hcnkudGVtcGxhdGUgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sU3VtbWFyeT8udGVtcGxhdGUsXG4gICAgICAgICAgICBzdW1tYXJ5LnRlbXBsYXRlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gc3R5bGVcbiAgICAgICAgc3VtbWFyeS5zdHlsZSA9IGdldFN0cmluZ0Zyb21JbnB1dCh5YW1sU3VtbWFyeT8uc3R5bGUsIHN1bW1hcnkuc3R5bGUpO1xuXG4gICAgICAgIHJlbmRlckluZm8uc3VtbWFyeS5wdXNoKHN1bW1hcnkpO1xuICAgIH0gLy8gc3VtbWFyeSByZWxhdGVkIHBhcmFtZXRlcnNcblxuICAgIC8vIE1vbnRoIHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIGZvciAobGV0IG1vbnRoS2V5IG9mIHlhbWxNb250aEtleXMpIHtcbiAgICAgICAgbGV0IG1vbnRoID0gbmV3IE1vbnRoSW5mbygpO1xuICAgICAgICBsZXQgeWFtbE1vbnRoID0geWFtbFttb250aEtleV07XG5cbiAgICAgICAgbGV0IGtleXNPZk1vbnRoSW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKG1vbnRoKTtcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxNb250aCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZlN1bW1hcnlJbmZvKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xuICAgICAgICAgICAgaWYgKCFrZXlzT2ZNb250aEluZm8uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1vZGVcbiAgICAgICAgbW9udGgubW9kZSA9IGdldFN0cmluZ0Zyb21JbnB1dCh5YW1sTW9udGg/Lm1vZGUsIG1vbnRoLm1vZGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5tb2RlKTtcblxuICAgICAgICAvLyBkYXRhc2V0XG4gICAgICAgIGxldCByZXREYXRhc2V0ID0gZ2V0TnVtYmVyQXJyYXkoXCJkYXRhc2V0XCIsIHlhbWxNb250aD8uZGF0YXNldCk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0RGF0YXNldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldERhdGFzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJldERhdGFzZXQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBpbnNlcnQgeSBkYXRhc2V0IGdpdmVuXG4gICAgICAgICAgICBmb3IgKGxldCBxIG9mIHF1ZXJpZXMpIHtcbiAgICAgICAgICAgICAgICByZXREYXRhc2V0LnB1c2gocS5nZXRJZCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtb250aC5kYXRhc2V0ID0gcmV0RGF0YXNldDtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguZGF0YXNldCk7XG4gICAgICAgIGxldCBudW1EYXRhc2V0ID0gbW9udGguZGF0YXNldC5sZW5ndGg7XG5cbiAgICAgICAgLy8gc3RhcnRXZWVrT25cbiAgICAgICAgbW9udGguc3RhcnRXZWVrT24gPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sTW9udGg/LnN0YXJ0V2Vla09uLFxuICAgICAgICAgICAgbW9udGguc3RhcnRXZWVrT25cbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc3RhcnRXZWVrT24pO1xuXG4gICAgICAgIC8vIHNob3dDaXJjbGVcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LnNob3dDaXJjbGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBtb250aC5zaG93Q2lyY2xlID0geWFtbE1vbnRoLnNob3dDaXJjbGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc2hvd0NpcmNsZSk7XG5cbiAgICAgICAgLy8gdGhyZXNob2xkXG4gICAgICAgIGxldCByZXRUaHJlc2hvbGQgPSBnZXROdW1iZXJBcnJheShcInRocmVzaG9sZFwiLCB5YW1sTW9udGg/LnRocmVzaG9sZCk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0VGhyZXNob2xkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0VGhyZXNob2xkO1xuICAgICAgICB9XG4gICAgICAgIG1vbnRoLnRocmVzaG9sZCA9IHJldFRocmVzaG9sZDtcbiAgICAgICAgaWYgKG1vbnRoLnRocmVzaG9sZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGluZERhdGFzZXQgPSAwOyBpbmREYXRhc2V0IDwgbnVtRGF0YXNldDsgaW5kRGF0YXNldCsrKSB7XG4gICAgICAgICAgICAgICAgbW9udGgudGhyZXNob2xkLnB1c2goMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vbnRoLnRocmVzaG9sZC5sZW5ndGggIT09IG1vbnRoLmRhdGFzZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC50aHJlc2hvbGQpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguZGF0YXNldCk7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIFwiVGhlIG51bWJlciBvZiBpbnB1dHMgb2YgdGhyZXNob2xkIGFuZCBkYXRhc2V0IG5vdCBtYXRjaGVkXCI7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnRocmVzaG9sZCk7XG5cbiAgICAgICAgLy8geU1pblxuICAgICAgICBsZXQgcmV0WU1pbiA9IGdldE51bWJlckFycmF5KFwieU1pblwiLCB5YW1sTW9udGg/LnlNaW4pO1xuICAgICAgICBpZiAodHlwZW9mIHJldFlNaW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRZTWluO1xuICAgICAgICB9XG4gICAgICAgIG1vbnRoLnlNaW4gPSByZXRZTWluO1xuICAgICAgICBpZiAobW9udGgueU1pbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGluZERhdGFzZXQgPSAwOyBpbmREYXRhc2V0IDwgbnVtRGF0YXNldDsgaW5kRGF0YXNldCsrKSB7XG4gICAgICAgICAgICAgICAgbW9udGgueU1pbi5wdXNoKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtb250aC55TWluLmxlbmd0aCAhPT0gbW9udGguZGF0YXNldC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgXCJUaGUgbnVtYmVyIG9mIGlucHV0cyBvZiB5TWluIGFuZCBkYXRhc2V0IG5vdCBtYXRjaGVkXCI7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnlNaW4pO1xuXG4gICAgICAgIC8vIHlNYXhcbiAgICAgICAgbGV0IHJldFlNYXggPSBnZXROdW1iZXJBcnJheShcInlNYXhcIiwgeWFtbE1vbnRoPy55TWF4KTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRZTWF4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0WU1heDtcbiAgICAgICAgfVxuICAgICAgICBtb250aC55TWF4ID0gcmV0WU1heDtcbiAgICAgICAgaWYgKG1vbnRoLnlNYXgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmREYXRhc2V0ID0gMDsgaW5kRGF0YXNldCA8IG51bURhdGFzZXQ7IGluZERhdGFzZXQrKykge1xuICAgICAgICAgICAgICAgIG1vbnRoLnlNYXgucHVzaChudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobW9udGgueU1heC5sZW5ndGggIT09IG1vbnRoLmRhdGFzZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIFwiVGhlIG51bWJlciBvZiBpbnB1dHMgb2YgeU1pbiBhbmQgZGF0YXNldCBub3QgbWF0Y2hlZFwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC55TWF4KTtcblxuICAgICAgICAvLyBjb2xvclxuICAgICAgICBtb250aC5jb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dCh5YW1sTW9udGg/LmNvbG9yLCBtb250aC5jb2xvcik7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmNvbG9yKTtcblxuICAgICAgICAvLyBkaW1Ob3RJbk1vbnRoXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbE1vbnRoPy5kaW1Ob3RJbk1vbnRoID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgbW9udGguZGltTm90SW5Nb250aCA9IHlhbWxNb250aC5kaW1Ob3RJbk1vbnRoO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmRpbU5vdEluTW9udGgpO1xuXG4gICAgICAgIC8vIHNob3dTdHJlYWtcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LnNob3dTdHJlYWsgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBtb250aC5zaG93U3RyZWFrID0geWFtbE1vbnRoLnNob3dTdHJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc2hvd1N0cmVhayk7XG5cbiAgICAgICAgLy8gc2hvd1RvZGF5UmluZ1xuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uc2hvd1RvZGF5UmluZyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIG1vbnRoLnNob3dUb2RheVJpbmcgPSB5YW1sTW9udGguc2hvd1RvZGF5UmluZztcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zaG93VG9kYXlSaW5nKTtcblxuICAgICAgICAvLyBzaG93U2VsZWN0ZWRWYWx1ZVxuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uc2hvd1NlbGVjdGVkVmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBtb250aC5zaG93U2VsZWN0ZWRWYWx1ZSA9IHlhbWxNb250aC5zaG93U2VsZWN0ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zaG93U2VsZWN0ZWRWYWx1ZSk7XG5cbiAgICAgICAgLy8gc2hvd1NlbGVjdGVkUmluZ1xuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uc2hvd1NlbGVjdGVkUmluZyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIG1vbnRoLnNob3dTZWxlY3RlZFJpbmcgPSB5YW1sTW9udGguc2hvd1NlbGVjdGVkUmluZztcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zaG93U2VsZWN0ZWRSaW5nKTtcblxuICAgICAgICAvLyBjaXJjbGVDb2xvclxuICAgICAgICBtb250aC5jaXJjbGVDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxNb250aD8uY2lyY2xlQ29sb3IsXG4gICAgICAgICAgICBtb250aC5jaXJjbGVDb2xvclxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5jaXJjbGVDb2xvcik7XG5cbiAgICAgICAgLy8gY2lyY2xlQ29sb3JCeVZhbHVlXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbE1vbnRoPy5jaXJjbGVDb2xvckJ5VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBtb250aC5jaXJjbGVDb2xvckJ5VmFsdWUgPSB5YW1sTW9udGguY2lyY2xlQ29sb3JCeVZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmNpcmNsZUNvbG9yQnlWYWx1ZSk7XG5cbiAgICAgICAgLy8gaGVhZGVyWWVhckNvbG9yXG4gICAgICAgIG1vbnRoLmhlYWRlclllYXJDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxNb250aD8uaGVhZGVyWWVhckNvbG9yLFxuICAgICAgICAgICAgbW9udGguaGVhZGVyWWVhckNvbG9yXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmhlYWRlclllYXJDb2xvcik7XG5cbiAgICAgICAgLy8gaGVhZGVyTW9udGhDb2xvclxuICAgICAgICBtb250aC5oZWFkZXJNb250aENvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbE1vbnRoPy5oZWFkZXJNb250aENvbG9yLFxuICAgICAgICAgICAgbW9udGguaGVhZGVyTW9udGhDb2xvclxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5oZWFkZXJNb250aENvbG9yKTtcblxuICAgICAgICAvLyBkaXZpZGluZ0xpbmVDb2xvclxuICAgICAgICBtb250aC5kaXZpZGluZ0xpbmVDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxNb250aD8uZGl2aWRpbmdMaW5lQ29sb3IsXG4gICAgICAgICAgICBtb250aC5kaXZpZGluZ0xpbmVDb2xvclxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5kaXZpZGluZ0xpbmVDb2xvcik7XG5cbiAgICAgICAgLy8gdG9kYXlSaW5nQ29sb3JcbiAgICAgICAgbW9udGgudG9kYXlSaW5nQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sTW9udGg/LnRvZGF5UmluZ0NvbG9yLFxuICAgICAgICAgICAgbW9udGgudG9kYXlSaW5nQ29sb3JcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGgudG9kYXlSaW5nQ29sb3IpO1xuXG4gICAgICAgIC8vIHNlbGVjdGVkUmluZ0NvbG9yXG4gICAgICAgIG1vbnRoLnNlbGVjdGVkUmluZ0NvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbE1vbnRoPy5zZWxlY3RlZFJpbmdDb2xvcixcbiAgICAgICAgICAgIG1vbnRoLnNlbGVjdGVkUmluZ0NvbG9yXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnNlbGVjdGVkUmluZ0NvbG9yKTtcblxuICAgICAgICAvLyBpbml0TW9udGhcbiAgICAgICAgbW9udGguaW5pdE1vbnRoID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbE1vbnRoPy5pbml0TW9udGgsXG4gICAgICAgICAgICBtb250aC5pbml0TW9udGhcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguaW5pdE1vbnRoKTtcblxuICAgICAgICAvLyBzaG93QW5ub3RhdGlvblxuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uc2hvd0Fubm90YXRpb24gPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBtb250aC5zaG93QW5ub3RhdGlvbiA9IHlhbWxNb250aC5zaG93QW5ub3RhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zaG93QW5ub3RhdGlvbik7XG5cbiAgICAgICAgLy8gYW5ub3RhdGlvblxuICAgICAgICBsZXQgcmV0QW5ub3RhdGlvbiA9IGdldFN0cmluZ0FycmF5KFwiYW5ub3RhdGlvblwiLCB5YW1sTW9udGg/LmFubm90YXRpb24pO1xuICAgICAgICBpZiAodHlwZW9mIHJldEFubm90YXRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRBbm5vdGF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIG1vbnRoLmFubm90YXRpb24gPSByZXRBbm5vdGF0aW9uO1xuICAgICAgICBpZiAobW9udGguYW5ub3RhdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGluZERhdGFzZXQgPSAwOyBpbmREYXRhc2V0IDwgbnVtRGF0YXNldDsgaW5kRGF0YXNldCsrKSB7XG4gICAgICAgICAgICAgICAgbW9udGguYW5ub3RhdGlvbi5wdXNoKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtb250aC5hbm5vdGF0aW9uLmxlbmd0aCAhPT0gbW9udGguZGF0YXNldC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgXCJUaGUgbnVtYmVyIG9mIGlucHV0cyBvZiBhbm5vdGF0aW9uIGFuZCBkYXRhc2V0IG5vdCBtYXRjaGVkXCI7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmFubm90YXRpb24pO1xuXG4gICAgICAgIC8vIHNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbE1vbnRoPy5zaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIG1vbnRoLnNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzID1cbiAgICAgICAgICAgICAgICB5YW1sTW9udGguc2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHMpO1xuXG4gICAgICAgIHJlbmRlckluZm8ubW9udGgucHVzaChtb250aCk7XG4gICAgfSAvLyBNb250aCByZWxhdGVkIHBhcmFtZXRlcnNcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLm1vbnRoKTtcblxuICAgIC8vIEhlYXRtYXAgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgZm9yIChsZXQgaGVhdG1hcEtleSBvZiB5YW1sSGVhdG1hcEtleXMpIHtcbiAgICAgICAgbGV0IGhlYXRtYXAgPSBuZXcgSGVhdG1hcEluZm8oKTtcbiAgICAgICAgbGV0IHlhbWxIZWF0bWFwID0geWFtbFtoZWF0bWFwS2V5XTtcblxuICAgICAgICBsZXQga2V5c09mSGVhdG1hcEluZm8gPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhoZWF0bWFwKTtcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxIZWF0bWFwKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c09mSGVhdG1hcEluZm8pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzRm91bmRJbllBTUwpO1xuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XG4gICAgICAgICAgICBpZiAoIWtleXNPZkhlYXRtYXBJbmZvLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJJbmZvLmhlYXRtYXAucHVzaChoZWF0bWFwKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5oZWF0bWFwKTtcblxuICAgIC8vIEJ1bGxldCByZWxhdGVkIHBhcmFtZXRlcnNcbiAgICBmb3IgKGxldCBidWxsZXRLZXkgb2YgeWFtbEJ1bGxldEtleXMpIHtcbiAgICAgICAgbGV0IGJ1bGxldCA9IG5ldyBCdWxsZXRJbmZvKCk7XG4gICAgICAgIGxldCB5YW1sQnVsbGV0ID0geWFtbFtidWxsZXRLZXldO1xuXG4gICAgICAgIGxldCBrZXlzT2ZCdWxsZXRJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoYnVsbGV0KTtcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxCdWxsZXQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZTdW1tYXJ5SW5mbyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcbiAgICAgICAgICAgIGlmICgha2V5c09mQnVsbGV0SW5mby5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGl0bGVcbiAgICAgICAgYnVsbGV0LnRpdGxlID0gZ2V0U3RyaW5nRnJvbUlucHV0KHlhbWxCdWxsZXQ/LnRpdGxlLCBidWxsZXQudGl0bGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQudGl0bGUpO1xuXG4gICAgICAgIC8vIGRhdGFzZXRcbiAgICAgICAgYnVsbGV0LmRhdGFzZXQgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sQnVsbGV0Py5kYXRhc2V0LFxuICAgICAgICAgICAgYnVsbGV0LmRhdGFzZXRcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0LmRhdGFzZXQpO1xuXG4gICAgICAgIC8vIG9yaWVudGF0aW9uXG4gICAgICAgIGJ1bGxldC5vcmllbnRhdGlvbiA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxCdWxsZXQ/Lm9yaWVudGF0aW9uLFxuICAgICAgICAgICAgYnVsbGV0Lm9yaWVudGF0aW9uXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC5vcmllbnRhdGlvbik7XG5cbiAgICAgICAgLy8gcmFuZ2VcbiAgICAgICAgbGV0IHJldFJhbmdlID0gZ2V0TnVtYmVyQXJyYXkoXCJyYW5nZVwiLCB5YW1sQnVsbGV0Py5yYW5nZSk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0UmFuZ2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRSYW5nZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmFuZ2UgPSByZXRSYW5nZSBhcyBBcnJheTxudW1iZXI+O1xuICAgICAgICAvLyBDaGVjayB0aGUgdmFsdWUgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nXG4gICAgICAgIC8vIENoZWNrIHRoZSB2YWx1ZSBpcyBub3QgbmVnYXRpdmVcbiAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKHJhbmdlWzBdIDwgMCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiTmVnYXRpdmUgcmFuZ2UgdmFsdWUgaXMgbm90IGFsbG93ZWRcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGxldCBsYXN0Qm91bmQgPSByYW5nZVswXTtcbiAgICAgICAgICAgIGlmIChsYXN0Qm91bmQgPCAwKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJOZWdhdGl2ZSByYW5nZSB2YWx1ZSBpcyBub3QgYWxsb3dlZFwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IHJhbmdlLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlW2luZF0gPD0gbGFzdEJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVmFsdWVzIGluIHBhcmFtZXRlciAncmFuZ2UnIHNob3VsZCBiZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmdcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IHJhbmdlIGlzIG5vdCBhbGxvd2VkXCI7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIGJ1bGxldC5yYW5nZSA9IHJhbmdlO1xuICAgICAgICBsZXQgbnVtUmFuZ2UgPSByYW5nZS5sZW5ndGg7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uYnVsbGV0LnJhbmdlKTtcblxuICAgICAgICAvLyByYW5nZSBjb2xvclxuICAgICAgICBsZXQgcmV0UmFuZ2VDb2xvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJyYW5nZUNvbG9yXCIsXG4gICAgICAgICAgICB5YW1sQnVsbGV0Py5yYW5nZUNvbG9yLFxuICAgICAgICAgICAgbnVtUmFuZ2UsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgdmFsaWRhdGVDb2xvcixcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRSYW5nZUNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0UmFuZ2VDb2xvcjsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgYnVsbGV0LnJhbmdlQ29sb3IgPSByZXRSYW5nZUNvbG9yO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQucmFuZ2VDb2xvcik7XG5cbiAgICAgICAgLy8gYWN0dWFsIHZhbHVlLCBjYW4gcG9zc2VzcyB0ZW1wbGF0ZSB2YXJpYWJsZVxuICAgICAgICBidWxsZXQudmFsdWUgPSBnZXRTdHJpbmdGcm9tSW5wdXQoeWFtbEJ1bGxldD8udmFsdWUsIGJ1bGxldC52YWx1ZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC52YWx1ZSk7XG5cbiAgICAgICAgLy8gdmFsdWUgdW5pdFxuICAgICAgICBidWxsZXQudmFsdWVVbml0ID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbEJ1bGxldD8udmFsdWVVbml0LFxuICAgICAgICAgICAgYnVsbGV0LnZhbHVlVW5pdFxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQudmFsdWVVbml0KTtcblxuICAgICAgICAvLyB2YWx1ZSBjb2xvclxuICAgICAgICBidWxsZXQudmFsdWVDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxCdWxsZXQ/LnZhbHVlQ29sb3IsXG4gICAgICAgICAgICBidWxsZXQudmFsdWVDb2xvclxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQudmFsdWVDb2xvcik7XG5cbiAgICAgICAgLy8gc2hvdyBtYXJrXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbEJ1bGxldD8uc2hvd01hcmtlciA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIGJ1bGxldC5zaG93TWFya2VyID0geWFtbEJ1bGxldC5zaG93TWFya2VyO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC5zaG93TWFyayk7XG5cbiAgICAgICAgLy8gbWFyayB2YWx1ZVxuICAgICAgICBpZiAodHlwZW9mIHlhbWxCdWxsZXQ/Lm1hcmtlclZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBidWxsZXQubWFya2VyVmFsdWUgPSB5YW1sQnVsbGV0Lm1hcmtlclZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC5tYXJrVmFsdWUpO1xuXG4gICAgICAgIC8vIG1hcmsgY29sb3JcbiAgICAgICAgYnVsbGV0Lm1hcmtlckNvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbEJ1bGxldD8ubWFya2VyQ29sb3IsXG4gICAgICAgICAgICBidWxsZXQubWFya2VyQ29sb3JcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0Lm1hcmtWYWx1ZSk7XG5cbiAgICAgICAgcmVuZGVySW5mby5idWxsZXQucHVzaChidWxsZXQpO1xuICAgIH0gLy8gQnVsbGV0IHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uYnVsbGV0KTtcblxuICAgIHJldHVybiByZW5kZXJJbmZvO1xufVxuIiwiaW1wb3J0IHsgQ2FjaGVkTWV0YWRhdGEsIFRGaWxlLCBub3JtYWxpemVQYXRoIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQge1xuICAgIERhdGFNYXAsXG4gICAgUXVlcnksXG4gICAgUmVuZGVySW5mbyxcbiAgICBYVmFsdWVNYXAsXG4gICAgUXVlcnlWYWx1ZVBhaXIsXG4gICAgVGFibGVEYXRhLFxuICAgIFNlYXJjaFR5cGUsXG4gICAgVmFsdWVUeXBlLFxufSBmcm9tIFwiLi9kYXRhXCI7XG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tIFwibW9tZW50XCI7XG5cbi8vIHJlZjogaHR0cHM6Ly93d3cucmFwaWR0YWJsZXMuY29tL2NvZGUvdGV4dC91bmljb2RlLWNoYXJhY3RlcnMuaHRtbFxuY29uc3QgQ3VycmVuY3lDb2RlcyA9XG4gICAgXCJcXHUwMDI0XFx1MjBBQ1xcdTAwQTNcXHUwMEE1XFx1MDBBMlxcdTIwQjlcXHUyMEE4XFx1MjBCMVxcdTIwQTlcXHUwRTNGXFx1MjBBQlxcdTIwQUFcIjtcbmNvbnN0IEFscGhhYmV0Q29kZXMgPSBcIlxcdTAzQjEtXFx1MDNDOVxcdTAzOTEtXFx1MDNBOVwiO1xuY29uc3QgSW50ZWxsZWN0dWFsUHJvcGVydHlDb2RlcyA9IFwiXFx1MDBBOVxcdTAwQUVcXHUyMTE3XFx1MjEyMlxcdTIxMjBcIjtcbmNvbnN0IENKS0NvZGVzID0gXCJcXHU0RTAwLVxcdTlGRkZcXHUzNDAwLVxcdTREQkZcXHUzMDAwXFx1MzAwMS1cXHUzMDNGXCI7XG5jb25zdCBXb3JkQ2hhcmFjdGVycyA9XG4gICAgXCJcXFxcd1wiICtcbiAgICBDdXJyZW5jeUNvZGVzICtcbiAgICBBbHBoYWJldENvZGVzICtcbiAgICBJbnRlbGxlY3R1YWxQcm9wZXJ0eUNvZGVzICtcbiAgICBDSktDb2RlcztcblxuLy8gZmlsZUJhc2VOYW1lIGlzIGEgc3RyaW5nIGNvbnRhaW5zIGRhdGVGb3JtYXQgb25seVxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tRmlsZW5hbWUoXG4gICAgZmlsZTogVEZpbGUsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKTogTW9tZW50IHtcbiAgICAvLyBjb25zb2xlLmxvZyhgZ2V0RGF0ZUZyb21GaWxlbmFtZTogJHtmaWxlLm5hbWV9YCk7XG4gICAgLy8gR2V0IGRhdGUgZm9ybSBmaWxlQmFzZU5hbWVcblxuICAgIGxldCBmaWxlQmFzZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xuXG4gICAgbGV0IGRhdGVTdHJpbmcgPSBoZWxwZXIuZ2V0RGF0ZVN0cmluZ0Zyb21JbnB1dFN0cmluZyhcbiAgICAgICAgZmlsZUJhc2VOYW1lLFxuICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXgsXG4gICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFN1ZmZpeFxuICAgICk7XG4gICAgLy8gY29uc29sZS5sb2coZGF0ZVN0cmluZyk7XG5cbiAgICBsZXQgZmlsZURhdGUgPSBoZWxwZXIuc3RyVG9EYXRlKGRhdGVTdHJpbmcsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XG4gICAgLy8gY29uc29sZS5sb2coZmlsZURhdGUpO1xuXG4gICAgcmV0dXJuIGZpbGVEYXRlO1xufVxuXG4vLyBOb3Qgc3VwcG9ydCBtdWx0aXBsZSB0YXJnZXRzXG4vLyBJbiBmb3JtICdrZXk6IHZhbHVlJywgdGFyZ2V0IHVzZWQgdG8gaWRlbnRpZnkgJ2Zyb250bWF0dGVyIGtleSdcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbUZyb250bWF0dGVyKFxuICAgIGZpbGVDYWNoZTogQ2FjaGVkTWV0YWRhdGEsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IE1vbWVudCB7XG4gICAgLy8gY29uc29sZS5sb2coXCJnZXREYXRlRnJvbUZyb250bWF0dGVyXCIpO1xuICAgIC8vIEdldCBkYXRlIGZyb20gJ2Zyb250TWF0dGVyS2V5OiBkYXRlJ1xuXG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xuXG4gICAgbGV0IGZyb250TWF0dGVyID0gZmlsZUNhY2hlLmZyb250bWF0dGVyO1xuICAgIGlmIChmcm9udE1hdHRlcikge1xuICAgICAgICBpZiAoaGVscGVyLmRlZXBWYWx1ZShmcm9udE1hdHRlciwgcXVlcnkuZ2V0VGFyZ2V0KCkpKSB7XG4gICAgICAgICAgICBsZXQgc3RyRGF0ZSA9IGhlbHBlci5kZWVwVmFsdWUoZnJvbnRNYXR0ZXIsIHF1ZXJ5LmdldFRhcmdldCgpKTtcblxuICAgICAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IHNpbmdsZSB2YWx1ZSBmb3Igbm93XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0ckRhdGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBzdHJEYXRlID0gaGVscGVyLmdldERhdGVTdHJpbmdGcm9tSW5wdXRTdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHN0ckRhdGUsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFByZWZpeCxcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0U3VmZml4XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGRhdGUgPSBoZWxwZXIuc3RyVG9EYXRlKHN0ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZTtcbn1cblxuLy8gaGVscGVyIGZ1bmN0aW9uXG4vLyBzdHJSZWdleCBtdXN0IGhhdmUgbmFtZSBncm91cCAndmFsdWUnXG4vLyBOYW1lZCBncm91cCAndmFsdWUnIGNvdWxkIGJlIHByb3ZpZGVkIGZyb20gdXNlcnMgb3IgcGx1Z2luXG5mdW5jdGlvbiBleHRyYWN0RGF0ZVVzaW5nUmVnZXhXaXRoVmFsdWUoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHN0clJlZ2V4OiBzdHJpbmcsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKTogTW9tZW50IHtcbiAgICBsZXQgZGF0ZSA9IHdpbmRvdy5tb21lbnQoXCJcIik7XG5cbiAgICBsZXQgcmVnZXggPSBuZXcgUmVnRXhwKHN0clJlZ2V4LCBcImdtXCIpO1xuICAgIGxldCBtYXRjaDtcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyh0ZXh0KSkpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobWF0Y2gpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gbXVzdCBoYXZlIGdyb3VwIG5hbWUgJ3ZhbHVlJ1xuICAgICAgICAgICAgbGV0IHN0ckRhdGUgPSBtYXRjaC5ncm91cHMudmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3RyRGF0ZSk7XG5cbiAgICAgICAgICAgIHN0ckRhdGUgPSBoZWxwZXIuZ2V0RGF0ZVN0cmluZ0Zyb21JbnB1dFN0cmluZyhcbiAgICAgICAgICAgICAgICBzdHJEYXRlLFxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFByZWZpeCxcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRTdWZmaXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGRhdGUgPSBoZWxwZXIuc3RyVG9EYXRlKHN0ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICBpZiAoZGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRlO1xufVxuXG4vLyBOb3Qgc3VwcG9ydCBtdWx0aXBsZSB0YXJnZXRzXG4vLyBJbiBmb3JtICdrZXk6IHZhbHVlJywgbmFtZSBncm91cCAndmFsdWUnIGZyb20gcGx1Z2luLCBub3QgZnJvbSB1c2Vyc1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tVGFnKFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBxdWVyeTogUXVlcnksXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKTogTW9tZW50IHtcbiAgICAvLyBjb25zb2xlLmxvZyhcImdldERhdGVGcm9tVGFnXCIpO1xuICAgIC8vIEdldCBkYXRlIGZyb20gJyN0YWdOYW1lOiBkYXRlJ1xuICAgIC8vIElubGluZSB2YWx1ZS1hdHRhY2hlZCB0YWcgb25seVxuXG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xuXG4gICAgbGV0IHRhZ05hbWUgPSBxdWVyeS5nZXRUYXJnZXQoKTtcbiAgICBpZiAocXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCkpIHtcbiAgICAgICAgdGFnTmFtZSA9IHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpOyAvLyB1c2UgcGFyZW50IHRhZyBuYW1lIGZvciBtdWx0aXBsZSB2YWx1ZXNcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2codGFnTmFtZSk7XG5cbiAgICBsZXQgc3RyUmVnZXggPVxuICAgICAgICBcIihefFxcXFxzKSNcIiArXG4gICAgICAgIHRhZ05hbWUgK1xuICAgICAgICBcIihcXFxcL1tcXFxcdy1dKykqKDooPzx2YWx1ZT5bXFxcXGRcXFxcLlxcXFwvLV0qKVthLXpBLVpdKik/KFtcXFxcLiEsXFxcXD87fi1dKik/KFxcXFxzfCQpXCI7XG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xuXG4gICAgcmV0dXJuIGV4dHJhY3REYXRlVXNpbmdSZWdleFdpdGhWYWx1ZShjb250ZW50LCBzdHJSZWdleCwgcmVuZGVySW5mbyk7XG59XG5cbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcbi8vIEluIGZvcm0gJ3JlZ2V4IHdpdGggdmFsdWUnLCBuYW1lIGdyb3VwICd2YWx1ZScgZnJvbSB1c2Vyc1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tVGV4dChcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IE1vbWVudCB7XG4gICAgLy8gY29uc29sZS5sb2coXCJnZXREYXRlRnJvbVRleHRcIik7XG4gICAgLy8gR2V0IGRhdGUgZnJvbSB0ZXh0IHVzaW5nIHJlZ2V4IHdpdGggdmFsdWVcblxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcblxuICAgIGxldCBzdHJSZWdleCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xuICAgIC8vIGNvbnNvbGUubG9nKHN0clRleHRSZWdleCk7XG5cbiAgICByZXR1cm4gZXh0cmFjdERhdGVVc2luZ1JlZ2V4V2l0aFZhbHVlKGNvbnRlbnQsIHN0clJlZ2V4LCByZW5kZXJJbmZvKTtcbn1cblxuLy8gTm90IHN1cHBvcnQgbXVsdGlwbGUgdGFyZ2V0c1xuLy8gSW4gZm9ybSAna2V5Ojp2YWx1ZScsIG5hbWVkIGdyb3VwICd2YWx1ZScgZnJvbSBwbHVnaW5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbUR2RmllbGQoXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pOiBNb21lbnQge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21EdkZpZWxkXCIpO1xuICAgIC8vIEdldCBkYXRlIGZvcm0gJ3RhcmdldE5hbWU6OiBkYXRlJ1xuXG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xuXG4gICAgbGV0IGR2VGFyZ2V0ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XG4gICAgaWYgKHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpKSB7XG4gICAgICAgIGR2VGFyZ2V0ID0gcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCk7IC8vIHVzZSBwYXJlbnQgdGFnIG5hbWUgZm9yIG11bHRpcGxlIHZhbHVlc1xuICAgIH1cbiAgICAvLyBEYXRhdmlldyBhc2sgdXNlciB0byBhZGQgZGFzaGVzIGZvciBzcGFjZXMgYXMgc2VhcmNoIHRhcmdldFxuICAgIC8vIFNvIGEgZGFzaCBtYXkgc3RhbmRzIGZvciBhIHJlYWwgZGFzaCBvciBhIHNwYWNlXG4gICAgZHZUYXJnZXQgPSBkdlRhcmdldC5yZXBsYWNlKFwiLVwiLCBcIltcXFxcc1xcXFwtXVwiKTtcblxuICAgIC8vIFRlc3QgdGhpcyBpbiBSZWdleDEwMVxuICAgIC8vIHJlbWVtYmVyICdcXHMnIGluY2x1ZGVzIG5ldyBsaW5lXG4gICAgLy8gKF58IHxcXHQpXFwqezAsMn1kdlRhcmdldFxcKnswLDJ9KDo6WyB8XFx0XSooPzx2YWx1ZT5bXFxkXFwuXFwvXFwtXFx3LEA7IFxcdDpdKikpKFxccj9cXG58XFxyfCQpXG4gICAgbGV0IHN0clJlZ2V4ID1cbiAgICAgICAgXCIoXnwgfFxcXFx0KVxcXFwqezAsMn1cIiArXG4gICAgICAgIGR2VGFyZ2V0ICtcbiAgICAgICAgXCJcXFxcKnswLDJ9KDo6WyB8XFxcXHRdKig/PHZhbHVlPltcXFxcZFxcXFwuXFxcXC9cXFxcLVxcXFx3LEA7IFxcXFx0Ol0qKSkoXFxcXHJcXFxcP1xcXFxufFxcXFxyfCQpXCI7XG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xuXG4gICAgcmV0dXJuIGV4dHJhY3REYXRlVXNpbmdSZWdleFdpdGhWYWx1ZShjb250ZW50LCBzdHJSZWdleCwgcmVuZGVySW5mbyk7XG59XG5cbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcbi8vIEluIGZvcm0gJ3JlZ2V4IHdpdGggdmFsdWUnLCBuYW1lIGdyb3VwICd2YWx1ZScgZnJvbSB1c2Vyc1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tV2lraShcbiAgICBmaWxlQ2FjaGU6IENhY2hlZE1ldGFkYXRhLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pOiBNb21lbnQge1xuICAgIC8vY29uc29sZS5sb2coXCJnZXREYXRlRnJvbVdpa2lcIik7XG4gICAgLy8gR2V0IGRhdGUgZnJvbSAnW1tyZWdleCB3aXRoIHZhbHVlXV0nXG5cbiAgICBsZXQgZGF0ZSA9IHdpbmRvdy5tb21lbnQoXCJcIik7XG5cbiAgICBsZXQgbGlua3MgPSBmaWxlQ2FjaGUubGlua3M7XG4gICAgaWYgKCFsaW5rcykgcmV0dXJuIGRhdGU7XG5cbiAgICBsZXQgc2VhcmNoVGFyZ2V0ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XG4gICAgbGV0IHNlYXJjaFR5cGUgPSBxdWVyeS5nZXRUeXBlKCk7XG5cbiAgICBmb3IgKGxldCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICAgIGlmICghbGluaykgY29udGludWU7XG5cbiAgICAgICAgbGV0IHdpa2lUZXh0ID0gXCJcIjtcbiAgICAgICAgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuV2lraSkge1xuICAgICAgICAgICAgaWYgKGxpbmsuZGlzcGxheVRleHQpIHtcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsuZGlzcGxheVRleHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5saW5rO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuV2lraUxpbmspIHtcbiAgICAgICAgICAgIC8vIHdpa2kubGluayBwb2ludCB0byBhIGZpbGUgbmFtZVxuICAgICAgICAgICAgLy8gYSBjb2xvbiBpcyBub3QgYWxsb3dlZCBiZSBpbiBmaWxlIG5hbWVcbiAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5saW5rO1xuICAgICAgICB9IGVsc2UgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuV2lraURpc3BsYXkpIHtcbiAgICAgICAgICAgIGlmIChsaW5rLmRpc3BsYXlUZXh0KSB7XG4gICAgICAgICAgICAgICAgd2lraVRleHQgPSBsaW5rLmRpc3BsYXlUZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGxpbmsuZGlzcGxheVRleHQpIHtcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsuZGlzcGxheVRleHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5saW5rO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdpa2lUZXh0ID0gd2lraVRleHQudHJpbSgpO1xuXG4gICAgICAgIGxldCBzdHJSZWdleCA9IFwiXlwiICsgc2VhcmNoVGFyZ2V0ICsgXCIkXCI7XG4gICAgICAgIHJldHVybiBleHRyYWN0RGF0ZVVzaW5nUmVnZXhXaXRoVmFsdWUod2lraVRleHQsIHN0clJlZ2V4LCByZW5kZXJJbmZvKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZTtcbn1cblxuLy8gTm90IHN1cHBvcnQgbXVsdGlwbGUgdGFyZ2V0c1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tRmlsZU1ldGEoXG4gICAgZmlsZTogVEZpbGUsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IE1vbWVudCB7XG4gICAgLy8gY29uc29sZS5sb2coXCJnZXREYXRlRnJvbUZpbGVNZXRhXCIpO1xuICAgIC8vIEdldCBkYXRlIGZyb20gY0RhdGUsIG1EYXRlIG9yIGJhc2VGaWxlTmFtZVxuXG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xuXG4gICAgaWYgKGZpbGUgJiYgZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGUuc3RhdCk7XG5cbiAgICAgICAgbGV0IHRhcmdldCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xuICAgICAgICBpZiAodGFyZ2V0ID09PSBcImNEYXRlXCIpIHtcbiAgICAgICAgICAgIGxldCBjdGltZSA9IGZpbGUuc3RhdC5jdGltZTsgLy8gdW5peCB0aW1lXG4gICAgICAgICAgICBkYXRlID0gaGVscGVyLmdldERhdGVGcm9tVW5peFRpbWUoY3RpbWUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSBcIm1EYXRlXCIpIHtcbiAgICAgICAgICAgIGxldCBtdGltZSA9IGZpbGUuc3RhdC5tdGltZTsgLy8gdW5peCB0aW1lXG4gICAgICAgICAgICBkYXRlID0gaGVscGVyLmdldERhdGVGcm9tVW5peFRpbWUobXRpbWUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSBcIm5hbWVcIikge1xuICAgICAgICAgICAgZGF0ZSA9IGdldERhdGVGcm9tRmlsZW5hbWUoZmlsZSwgcmVuZGVySW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZyhkYXRlKTtcbiAgICByZXR1cm4gZGF0ZTtcbn1cblxuLy8gTm90IHN1cHBvcnQgbXVsdGlwbGUgdGFyZ2V0c1xuLy8gSW4gZm9ybSAncmVnZXggd2l0aCB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHVzZXJzXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZUZyb21UYXNrKFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBxdWVyeTogUXVlcnksXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKTogTW9tZW50IHtcbiAgICAvLyBjb25zb2xlLmxvZyhcImdldERhdGVGcm9tVGFza1wiKTtcbiAgICAvLyBHZXQgZGF0ZSBmcm9tICctIFsgXSByZWdleCB3aXRoIHZhbHVlJyBvciAnLSBbeF0gcmVnZXggd2l0aCB2YWx1ZSdcblxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcbiAgICBsZXQgc2VhcmNoVHlwZSA9IHF1ZXJ5LmdldFR5cGUoKTtcbiAgICAvLyBjb25zb2xlLmxvZyhzZWFyY2hUeXBlKTtcblxuICAgIGxldCBzdHJSZWdleCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xuICAgIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLlRhc2spIHtcbiAgICAgICAgc3RyUmVnZXggPSBcIlxcXFxbW1xcXFxzeF1cXFxcXVxcXFxzXCIgKyBzdHJSZWdleDtcbiAgICB9IGVsc2UgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFza0RvbmUpIHtcbiAgICAgICAgc3RyUmVnZXggPSBcIlxcXFxbeFxcXFxdXFxcXHNcIiArIHN0clJlZ2V4O1xuICAgIH0gZWxzZSBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrTm90RG9uZSkge1xuICAgICAgICBzdHJSZWdleCA9IFwiXFxcXFtcXFxcc1xcXFxdXFxcXHNcIiArIHN0clJlZ2V4O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW1tcXFxcc3hdXFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHN0clRleHRSZWdleCk7XG5cbiAgICByZXR1cm4gZXh0cmFjdERhdGVVc2luZ1JlZ2V4V2l0aFZhbHVlKGNvbnRlbnQsIHN0clJlZ2V4LCByZW5kZXJJbmZvKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvRGF0YU1hcChcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxuICAgIGRhdGU6IHN0cmluZyxcbiAgICBxdWVyeTogUXVlcnksXG4gICAgdmFsdWU6IG51bWJlciB8IG51bGxcbikge1xuICAgIGlmICghZGF0YU1hcC5oYXMoZGF0ZSkpIHtcbiAgICAgICAgbGV0IHF1ZXJ5VmFsdWVQYWlycyA9IG5ldyBBcnJheTxRdWVyeVZhbHVlUGFpcj4oKTtcbiAgICAgICAgcXVlcnlWYWx1ZVBhaXJzLnB1c2goeyBxdWVyeTogcXVlcnksIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgZGF0YU1hcC5zZXQoZGF0ZSwgcXVlcnlWYWx1ZVBhaXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdGFyZ2V0VmFsdWVQYWlycyA9IGRhdGFNYXAuZ2V0KGRhdGUpO1xuICAgICAgICB0YXJnZXRWYWx1ZVBhaXJzLnB1c2goeyBxdWVyeTogcXVlcnksIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICB9XG59XG5cbi8vIEhlbHBlciBmdW5jdGlvblxuLy8gQWNjZXB0IG11bHRpcGxlIHZhbHVlcyB1c2luZyBjdXN0b20gc2VwYXJhdG9yc1xuLy8gcmVnZXggd2l0aCB2YWx1ZSAtLT4gZXh0cmFjdCB2YWx1ZVxuLy8gcmVnZXggd2l0aG91dCB2YWx1ZSAtLT4gY291bnQgb2NjdXJyZW5jaWVzXG5mdW5jdGlvbiBleHRyYWN0RGF0YVVzaW5nUmVnZXhXaXRoTXVsdGlwbGVWYWx1ZXMoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHN0clJlZ2V4OiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIGRhdGFNYXA6IERhdGFNYXAsXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXAsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKTogYm9vbGVhbiB7XG4gICAgLy8gY29uc29sZS5sb2coXCJleHRyYWN0RGF0YVVzaW5nUmVnZXhXaXRoTXVsdGlwbGVWYWx1ZXNcIik7XG5cbiAgICBsZXQgcmVnZXggPSBuZXcgUmVnRXhwKHN0clJlZ2V4LCBcImdtdVwiKTtcbiAgICBsZXQgbWF0Y2g7XG4gICAgbGV0IG1lYXN1cmUgPSAwLjA7XG4gICAgbGV0IGV4dHJhY3RlZCA9IGZhbHNlO1xuICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHRleHQpKSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXRjaCk7XG4gICAgICAgIGlmICghcmVuZGVySW5mby5pZ25vcmVBdHRhY2hlZFZhbHVlW3F1ZXJ5LmdldElkKCldKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdHlwZW9mIG1hdGNoLmdyb3VwcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXRjaC5ncm91cHMudmFsdWUgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBtYXRjaC5ncm91cHMudmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcnkuZ2V0U2VwYXJhdG9yKCkpO1xuICAgICAgICAgICAgICAgIGxldCBzcGxpdHRlZCA9IHZhbHVlcy5zcGxpdChxdWVyeS5nZXRTZXBhcmF0b3IoKSk7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3BsaXR0ZWQpO1xuICAgICAgICAgICAgICAgIGlmICghc3BsaXR0ZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJzaW5nbGUtdmFsdWVcIik7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0b1BhcnNlID0gc3BsaXR0ZWRbMF0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0b1BhcnNlKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9QYXJzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnR5cGUgPT09IFZhbHVlVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZSA9IHJldFBhcnNlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkudmFsdWVUeXBlID0gVmFsdWVUeXBlLlRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFyZW5kZXJJbmZvLmlnbm9yZVplcm9WYWx1ZVtxdWVyeS5nZXRJZCgpXSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRQYXJzZS52YWx1ZSAhPT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlICs9IHJldFBhcnNlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWQubGVuZ3RoID4gcXVlcnkuZ2V0QWNjZXNzb3IoKSAmJlxuICAgICAgICAgICAgICAgICAgICBxdWVyeS5nZXRBY2Nlc3NvcigpID49IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJtdWx0aXBsZS12YWx1ZXNcIik7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0b1BhcnNlID0gc3BsaXR0ZWRbcXVlcnkuZ2V0QWNjZXNzb3IoKV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0UGFyc2UgPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXG4gICAgICAgICAgICAgICAgICAgICAgICB0b1BhcnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby50ZXh0VmFsdWVNYXBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhyZXRQYXJzZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnR5cGUgPT09IFZhbHVlVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZSA9IHJldFBhcnNlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkudmFsdWVUeXBlID0gVmFsdWVUeXBlLlRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlICs9IHJldFBhcnNlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBubyBuYW1lZCBncm91cHMsIGNvdW50IG9jY3VycmVuY2llc1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiY291bnQgb2NjdXJyZW5jaWVzXCIpO1xuICAgICAgICAgICAgICAgIG1lYXN1cmUgKz0gcmVuZGVySW5mby5jb25zdFZhbHVlW3F1ZXJ5LmdldElkKCldO1xuICAgICAgICAgICAgICAgIGV4dHJhY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZm9yY2UgdG8gY291bnQgb2NjdXJyZW5jaWVzXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImZvcmNlZCBjb3VudCBvY2N1cnJlbmNpZXNcIik7XG4gICAgICAgICAgICBtZWFzdXJlICs9IHJlbmRlckluZm8uY29uc3RWYWx1ZVtxdWVyeS5nZXRJZCgpXTtcbiAgICAgICAgICAgIGV4dHJhY3RlZCA9IHRydWU7XG4gICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXh0cmFjdGVkKSB7XG4gICAgICAgIGxldCB4VmFsdWUgPSB4VmFsdWVNYXAuZ2V0KHJlbmRlckluZm8ueERhdGFzZXRbcXVlcnkuZ2V0SWQoKV0pO1xuICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgbWVhc3VyZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gTm8gdmFsdWUsIGNvdW50IG9jY3VycmVuY2VzIG9ubHlcbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlclRhZyhcbiAgICBmaWxlQ2FjaGU6IENhY2hlZE1ldGFkYXRhLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGRhdGFNYXA6IERhdGFNYXAsXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcbik6IGJvb2xlYW4ge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY29sbGVjdERhdGFGcm9tRnJvbnRtYXR0ZXJUYWdcIik7XG4gICAgLy8gY29uc29sZS5sb2cocXVlcnkpO1xuICAgIC8vIGNvbnNvbGUubG9nKGRhdGFNYXApO1xuICAgIC8vIGNvbnNvbGUubG9nKHhWYWx1ZU1hcCk7XG5cbiAgICBsZXQgZnJvbnRNYXR0ZXIgPSBmaWxlQ2FjaGUuZnJvbnRtYXR0ZXI7XG4gICAgbGV0IGZyb250TWF0dGVyVGFnczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoZnJvbnRNYXR0ZXIgJiYgZnJvbnRNYXR0ZXIudGFncykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhmcm9udE1hdHRlci50YWdzKTtcbiAgICAgICAgbGV0IHRhZ01lYXN1cmUgPSAwLjA7XG4gICAgICAgIGxldCB0YWdFeGlzdCA9IGZhbHNlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmcm9udE1hdHRlci50YWdzKSkge1xuICAgICAgICAgICAgZnJvbnRNYXR0ZXJUYWdzID0gZnJvbnRNYXR0ZXJUYWdzLmNvbmNhdChmcm9udE1hdHRlci50YWdzKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZnJvbnRNYXR0ZXIudGFncyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgbGV0IHNwbGl0dGVkID0gZnJvbnRNYXR0ZXIudGFncy5zcGxpdChxdWVyeS5nZXRTZXBhcmF0b3IodHJ1ZSkpO1xuICAgICAgICAgICAgZm9yIChsZXQgc3BsaXR0ZWRQYXJ0IG9mIHNwbGl0dGVkKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnQgPSBzcGxpdHRlZFBhcnQudHJpbSgpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0ICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb250TWF0dGVyVGFncy5wdXNoKHBhcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmcm9udE1hdHRlclRhZ3MpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVyeS5nZXRUYXJnZXQoKSk7XG5cbiAgICAgICAgZm9yIChsZXQgdGFnIG9mIGZyb250TWF0dGVyVGFncykge1xuICAgICAgICAgICAgaWYgKHRhZyA9PT0gcXVlcnkuZ2V0VGFyZ2V0KCkpIHtcbiAgICAgICAgICAgICAgICAvLyBzaW1wbGUgdGFnXG4gICAgICAgICAgICAgICAgdGFnTWVhc3VyZSA9IHRhZ01lYXN1cmUgKyByZW5kZXJJbmZvLmNvbnN0VmFsdWVbcXVlcnkuZ2V0SWQoKV07XG4gICAgICAgICAgICAgICAgdGFnRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnLnN0YXJ0c1dpdGgocXVlcnkuZ2V0VGFyZ2V0KCkgKyBcIi9cIikpIHtcbiAgICAgICAgICAgICAgICAvLyBuZXN0ZWQgdGFnXG4gICAgICAgICAgICAgICAgdGFnTWVhc3VyZSA9IHRhZ01lYXN1cmUgKyByZW5kZXJJbmZvLmNvbnN0VmFsdWVbcXVlcnkuZ2V0SWQoKV07XG4gICAgICAgICAgICAgICAgdGFnRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHZhbHVlZC10YWcgaW4gZnJvbnRtYXR0ZXIgaXMgbm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgXCJ0YWc6dmFsdWVcIiBpbiBmcm9udG1hdHRlciB3aWxsIGJlIGNvbnNpZGVyIGFzIGEgbmV3IHRhZyBmb3IgZWFjaCBleGlzdGluZyB2YWx1ZVxuXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRhZ0V4aXN0KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0YWdNZWFzdXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHhWYWx1ZSA9IHhWYWx1ZU1hcC5nZXQocmVuZGVySW5mby54RGF0YXNldFtxdWVyeS5nZXRJZCgpXSk7XG4gICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIEluIGZvcm0gJ2tleTogdmFsdWUnLCB0YXJnZXQgdXNlZCB0byBpZGVudGlmeSAnZnJvbnRtYXR0ZXIga2V5J1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3REYXRhRnJvbUZyb250bWF0dGVyS2V5KFxuICAgIGZpbGVDYWNoZTogQ2FjaGVkTWV0YWRhdGEsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcbiAgICB4VmFsdWVNYXA6IFhWYWx1ZU1hcFxuKTogYm9vbGVhbiB7XG4gICAgLy8gY29uc29sZS5sb2coXCJjb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlcktleVwiKTtcblxuICAgIGxldCBmcm9udE1hdHRlciA9IGZpbGVDYWNoZS5mcm9udG1hdHRlcjtcbiAgICBpZiAoZnJvbnRNYXR0ZXIpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZnJvbnRNYXR0ZXIpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVyeS5nZXRUYXJnZXQoKSk7XG4gICAgICAgIGxldCBkZWVwVmFsdWUgPSBoZWxwZXIuZGVlcFZhbHVlKGZyb250TWF0dGVyLCBxdWVyeS5nZXRUYXJnZXQoKSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGRlZXBWYWx1ZSk7XG4gICAgICAgIGlmIChkZWVwVmFsdWUpIHtcbiAgICAgICAgICAgIGxldCByZXRQYXJzZSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcbiAgICAgICAgICAgICAgICBkZWVwVmFsdWUsXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby50ZXh0VmFsdWVNYXBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXRQYXJzZSk7XG4gICAgICAgICAgICBpZiAocmV0UGFyc2UudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBUcnkgcGFyc2luZyBhcyBhIGJvb2xlYW46IHRydWUgbWVhbnMgMSwgZmFsc2UgbWVhbnMgMC5cbiAgICAgICAgICAgICAgICBpZiAoZGVlcFZhbHVlID09PSBcInRydWVcIiB8fCBkZWVwVmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgICAgICAgICByZXRQYXJzZS50eXBlID0gVmFsdWVUeXBlLk51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0UGFyc2UudmFsdWUgPSBkZWVwVmFsdWUgPT09IFwidHJ1ZVwiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnR5cGUgPT09IFZhbHVlVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICAgICAgbGV0IHhWYWx1ZSA9IHhWYWx1ZU1hcC5nZXQocmVuZGVySW5mby54RGF0YXNldFtxdWVyeS5nZXRJZCgpXSk7XG4gICAgICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIHJldFBhcnNlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpICYmXG4gICAgICAgICAgICBoZWxwZXIuZGVlcFZhbHVlKGZyb250TWF0dGVyLCBxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIm11bHRpcGxlIHZhbHVlc1wiKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJ5LmdldFRhcmdldCgpKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJ5LmdldFN1YklkKCkpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXG4gICAgICAgICAgICAvLyAgICAgZnJvbnRNYXR0ZXJbcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCldXG4gICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgbGV0IHRvUGFyc2UgPSBoZWxwZXIuZGVlcFZhbHVlKFxuICAgICAgICAgICAgICAgIGZyb250TWF0dGVyLFxuICAgICAgICAgICAgICAgIHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IHNwbGl0dGVkID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRvUGFyc2UpKSB7XG4gICAgICAgICAgICAgICAgc3BsaXR0ZWQgPSB0b1BhcnNlLm1hcCgocCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdG9QYXJzZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHNwbGl0dGVkID0gdG9QYXJzZS5zcGxpdChxdWVyeS5nZXRTZXBhcmF0b3IoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzcGxpdHRlZCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3BsaXR0ZWQgJiZcbiAgICAgICAgICAgICAgICBzcGxpdHRlZC5sZW5ndGggPiBxdWVyeS5nZXRBY2Nlc3NvcigpICYmXG4gICAgICAgICAgICAgICAgcXVlcnkuZ2V0QWNjZXNzb3IoKSA+PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBpdCdzIG5vdCBlZmZpY2VudCB0byByZXRyaWV2ZSBvbmUgdmFsdWUgYXQgYSB0aW1lLCBlbmhhbmNlIHRoaXNcbiAgICAgICAgICAgICAgICBsZXQgc3BsaXR0ZWRQYXJ0ID0gc3BsaXR0ZWRbcXVlcnkuZ2V0QWNjZXNzb3IoKV0udHJpbSgpO1xuICAgICAgICAgICAgICAgIGxldCByZXRQYXJzZSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcbiAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWRQYXJ0LFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkudmFsdWVUeXBlID0gVmFsdWVUeXBlLlRpbWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgeFZhbHVlID0geFZhbHVlTWFwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8ueERhdGFzZXRbcXVlcnkuZ2V0SWQoKV1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIHJldFBhcnNlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBJbiBmb3JtICdyZWdleCB3aXRoIHZhbHVlJywgbmFtZSBncm91cCAndmFsdWUnIGZyb20gdXNlcnNcbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21XaWtpKFxuICAgIGZpbGVDYWNoZTogQ2FjaGVkTWV0YWRhdGEsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcbiAgICB4VmFsdWVNYXA6IFhWYWx1ZU1hcFxuKTogYm9vbGVhbiB7XG4gICAgbGV0IGxpbmtzID0gZmlsZUNhY2hlLmxpbmtzO1xuICAgIGlmICghbGlua3MpIHJldHVybiBmYWxzZTtcblxuICAgIGxldCBzZWFyY2hUYXJnZXQgPSBxdWVyeS5nZXRUYXJnZXQoKTtcbiAgICBsZXQgc2VhcmNoVHlwZSA9IHF1ZXJ5LmdldFR5cGUoKTtcblxuICAgIGxldCB0ZXh0VG9TZWFyY2ggPSBcIlwiO1xuICAgIGxldCBzdHJSZWdleCA9IHNlYXJjaFRhcmdldDtcblxuICAgIC8vIFByZXBhcmUgdGV4dFRvU2VhcmNoXG4gICAgZm9yIChsZXQgbGluayBvZiBsaW5rcykge1xuICAgICAgICBpZiAoIWxpbmspIGNvbnRpbnVlO1xuXG4gICAgICAgIGxldCB3aWtpVGV4dCA9IFwiXCI7XG4gICAgICAgIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2kpIHtcbiAgICAgICAgICAgIGlmIChsaW5rLmRpc3BsYXlUZXh0KSB7XG4gICAgICAgICAgICAgICAgd2lraVRleHQgPSBsaW5rLmRpc3BsYXlUZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2lMaW5rKSB7XG4gICAgICAgICAgICAvLyB3aWtpLmxpbmsgcG9pbnQgdG8gYSBmaWxlIG5hbWVcbiAgICAgICAgICAgIC8vIGEgY29sb24gaXMgbm90IGFsbG93ZWQgYmUgaW4gZmlsZSBuYW1lXG4gICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcbiAgICAgICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2lEaXNwbGF5KSB7XG4gICAgICAgICAgICBpZiAobGluay5kaXNwbGF5VGV4dCkge1xuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChsaW5rLmRpc3BsYXlUZXh0KSB7XG4gICAgICAgICAgICAgICAgd2lraVRleHQgPSBsaW5rLmRpc3BsYXlUZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aWtpVGV4dCA9IHdpa2lUZXh0LnRyaW0oKTtcblxuICAgICAgICB0ZXh0VG9TZWFyY2ggKz0gd2lraVRleHQgKyBcIlxcblwiO1xuICAgIH1cblxuICAgIHJldHVybiBleHRyYWN0RGF0YVVzaW5nUmVnZXhXaXRoTXVsdGlwbGVWYWx1ZXMoXG4gICAgICAgIHRleHRUb1NlYXJjaCxcbiAgICAgICAgc3RyUmVnZXgsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhTWFwLFxuICAgICAgICB4VmFsdWVNYXAsXG4gICAgICAgIHJlbmRlckluZm9cbiAgICApO1xufVxuXG4vLyBJbiBmb3JtICdrZXk6IHZhbHVlJywgbmFtZSBncm91cCAndmFsdWUnIGZyb20gcGx1Z2luLCBub3QgZnJvbSB1c2Vyc1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3REYXRhRnJvbUlubGluZVRhZyhcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcbiAgICB4VmFsdWVNYXA6IFhWYWx1ZU1hcFxuKTogYm9vbGVhbiB7XG4gICAgLy8gY29uc29sZS5sb2coY29udGVudCk7XG4gICAgLy8gVGVzdCB0aGlzIGluIFJlZ2V4MTAxXG4gICAgLy8gKF58XFxzKSN0YWdOYW1lKFxcL1tcXHctXSspKig6KD88dmFsdWU+W1xcZFxcLlxcLy1dKilbYS16QS1aXSopPyhbXFxcXC4hLFxcXFw/O34tXSopPyhcXHN8JClcbiAgICBsZXQgdGFnTmFtZSA9IHF1ZXJ5LmdldFRhcmdldCgpO1xuICAgIGlmIChxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKSkge1xuICAgICAgICB0YWdOYW1lID0gcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCk7IC8vIHVzZSBwYXJlbnQgdGFnIG5hbWUgZm9yIG11bHRpcGxlIHZhbHVlc1xuICAgIH1cbiAgICBpZiAodGFnTmFtZS5sZW5ndGggPiAxICYmIHRhZ05hbWUuc3RhcnRzV2l0aChcIiNcIikpIHtcbiAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyaW5nKDEpO1xuICAgIH1cbiAgICBsZXQgc3RyUmVnZXggPVxuICAgICAgICBcIihefFxcXFxzKSNcIiArXG4gICAgICAgIHRhZ05hbWUgK1xuICAgICAgICBcIihcXFxcL1tcXFxcdy1dKykqKDooPzx2YWx1ZT5bXFxcXGRcXFxcLlxcXFwvLV0qKVthLXpBLVpdKik/KFtcXFxcLiEsXFxcXD87fi1dKik/KFxcXFxzfCQpXCI7XG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xuXG4gICAgcmV0dXJuIGV4dHJhY3REYXRhVXNpbmdSZWdleFdpdGhNdWx0aXBsZVZhbHVlcyhcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgc3RyUmVnZXgsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhTWFwLFxuICAgICAgICB4VmFsdWVNYXAsXG4gICAgICAgIHJlbmRlckluZm9cbiAgICApO1xufVxuXG4vLyBJbiBmb3JtICdyZWdleCB3aXRoIHZhbHVlJywgbmFtZSBncm91cCAndmFsdWUnIGZyb20gdXNlcnNcbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21UZXh0KFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBxdWVyeTogUXVlcnksXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxuICAgIHhWYWx1ZU1hcDogWFZhbHVlTWFwXG4pOiBib29sZWFuIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcImNvbGxlY3REYXRhRnJvbVRleHRcIik7XG5cbiAgICBsZXQgc3RyUmVnZXggPSBxdWVyeS5nZXRUYXJnZXQoKTtcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XG5cbiAgICByZXR1cm4gZXh0cmFjdERhdGFVc2luZ1JlZ2V4V2l0aE11bHRpcGxlVmFsdWVzKFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBzdHJSZWdleCxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGRhdGFNYXAsXG4gICAgICAgIHhWYWx1ZU1hcCxcbiAgICAgICAgcmVuZGVySW5mb1xuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21GaWxlTWV0YShcbiAgICBmaWxlOiBURmlsZSxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcbiAgICB4VmFsdWVNYXA6IFhWYWx1ZU1hcFxuKTogYm9vbGVhbiB7XG4gICAgLy8gY29uc29sZS5sb2coXCJjb2xsZWN0RGF0YUZyb21GaWxlTWV0YVwiKTtcblxuICAgIGlmIChmaWxlICYmIGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlLnN0YXQpO1xuXG4gICAgICAgIGxldCB0YXJnZXQgPSBxdWVyeS5nZXRUYXJnZXQoKTtcbiAgICAgICAgbGV0IHhWYWx1ZSA9IHhWYWx1ZU1hcC5nZXQocmVuZGVySW5mby54RGF0YXNldFtxdWVyeS5nZXRJZCgpXSk7XG5cbiAgICAgICAgaWYgKHRhcmdldCA9PT0gXCJjRGF0ZVwiKSB7XG4gICAgICAgICAgICBsZXQgY3RpbWUgPSBmaWxlLnN0YXQuY3RpbWU7IC8vIHVuaXggdGltZVxuICAgICAgICAgICAgcXVlcnkudmFsdWVUeXBlID0gVmFsdWVUeXBlLkRhdGU7XG4gICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgY3RpbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSBcIm1EYXRlXCIpIHtcbiAgICAgICAgICAgIGxldCBtdGltZSA9IGZpbGUuc3RhdC5tdGltZTsgLy8gdW5peCB0aW1lXG4gICAgICAgICAgICBxdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuRGF0ZTtcbiAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgIGFkZFRvRGF0YU1hcChkYXRhTWFwLCB4VmFsdWUsIHF1ZXJ5LCBtdGltZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwic2l6ZVwiKSB7XG4gICAgICAgICAgICBsZXQgc2l6ZSA9IGZpbGUuc3RhdC5zaXplOyAvLyBudW1iZXIgaW5cbiAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgIGFkZFRvRGF0YU1hcChkYXRhTWFwLCB4VmFsdWUsIHF1ZXJ5LCBzaXplKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJudW1Xb3Jkc1wiKSB7XG4gICAgICAgICAgICBsZXQgbnVtV29yZHMgPSBoZWxwZXIuZ2V0V29yZENvdW50KGNvbnRlbnQpO1xuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIG51bVdvcmRzKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJudW1DaGFyc1wiKSB7XG4gICAgICAgICAgICBsZXQgbnVtQ2hhcnMgPSBoZWxwZXIuZ2V0Q2hhcmFjdGVyQ291bnQoY29udGVudCk7XG4gICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgbnVtQ2hhcnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSBcIm51bVNlbnRlbmNlc1wiKSB7XG4gICAgICAgICAgICBsZXQgbnVtU2VudGVuY2VzID0gaGVscGVyLmdldFNlbnRlbmNlQ291bnQoY29udGVudCk7XG4gICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgbnVtU2VudGVuY2VzKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJuYW1lXCIpIHtcbiAgICAgICAgICAgIGxldCB0YXJnZXRNZWFzdXJlID0gMC4wO1xuICAgICAgICAgICAgbGV0IHRhcmdldEV4aXN0ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgcmV0UGFyc2UgPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXG4gICAgICAgICAgICAgICAgZmlsZS5iYXNlbmFtZSxcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRNZWFzdXJlID0gcmV0UGFyc2UudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEV4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkudmFsdWVUeXBlID0gVmFsdWVUeXBlLlRpbWU7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAhcmVuZGVySW5mby5pZ25vcmVaZXJvVmFsdWVbcXVlcnkuZ2V0SWQoKV0gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldFBhcnNlLnZhbHVlICE9PSAwXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWVhc3VyZSArPSByZXRQYXJzZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEV4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0YXJnZXRFeGlzdCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGFyZ2V0TWVhc3VyZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGFkZFRvRGF0YU1hcChkYXRhTWFwLCB4VmFsdWUsIHF1ZXJ5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIEluIGZvcm0gJ2tleTo6dmFsdWUnLCBuYW1lZCBncm91cCAndmFsdWUnIGZyb20gcGx1Z2luXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tRHZGaWVsZChcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcbiAgICB4VmFsdWVNYXA6IFhWYWx1ZU1hcFxuKTogYm9vbGVhbiB7XG4gICAgbGV0IGR2VGFyZ2V0ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XG4gICAgaWYgKHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpKSB7XG4gICAgICAgIGR2VGFyZ2V0ID0gcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCk7IC8vIHVzZSBwYXJlbnQgdGFnIG5hbWUgZm9yIG11bHRpcGxlIHZhbHVlc1xuICAgIH1cbiAgICAvLyBEYXRhdmlldyBhc2sgdXNlciB0byBhZGQgZGFzaGVzIGZvciBzcGFjZXMgYXMgc2VhcmNoIHRhcmdldFxuICAgIC8vIFNvIGEgZGFzaCBtYXkgc3RhbmRzIGZvciBhIHJlYWwgZGFzaCBvciBhIHNwYWNlXG4gICAgZHZUYXJnZXQgPSBkdlRhcmdldC5yZXBsYWNlKFwiLVwiLCBcIltcXFxcc1xcXFwtXVwiKTtcblxuICAgIC8vIFRlc3QgdGhpcyBpbiBSZWdleDEwMVxuICAgIC8vIHJlbWVtYmVyICdcXHMnIGluY2x1ZGVzIG5ldyBsaW5lXG4gICAgLy8gKF58IHxcXHR8XFx8KShcXFt8XFwoKT9cXCp7MCwyfWR2VGFyZ2V0XFwqezAsMn0oOjpbIHxcXHRdKig/PHZhbHVlPltcXGRcXC5cXC9cXC1cXHcsQDsgXFx0Ol0qKShcXF18XFwpKT8pXG4gICAgbGV0IHN0clJlZ2V4ID1cbiAgICAgICAgU3RyaW5nLnJhd2AoXnwgfFxcdHxcXHwpKFxcW3xcXCgpP1xcKnswLDJ9YCArXG4gICAgICAgIGR2VGFyZ2V0ICtcbiAgICAgICAgU3RyaW5nLnJhd2BcXCp7MCwyfSg6OlsgfFxcdF0qKD88dmFsdWU+W1xccHtFeHRQaWN0fVxcZFxcLlxcL1xcLVxcdyxAOyBcXHQ6YCArXG4gICAgICAgIFdvcmRDaGFyYWN0ZXJzICtcbiAgICAgICAgU3RyaW5nLnJhd2BdKikoXFxdfFxcKSk/KWA7XG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xuXG4gICAgcmV0dXJuIGV4dHJhY3REYXRhVXNpbmdSZWdleFdpdGhNdWx0aXBsZVZhbHVlcyhcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgc3RyUmVnZXgsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhTWFwLFxuICAgICAgICB4VmFsdWVNYXAsXG4gICAgICAgIHJlbmRlckluZm9cbiAgICApO1xufVxuXG4vLyBJbiBmb3JtICdyZWdleCB3aXRoIHZhbHVlJywgbmFtZSBncm91cCAndmFsdWUnIGZyb20gdXNlcnNcbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21UYXNrKFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBxdWVyeTogUXVlcnksXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxuICAgIHhWYWx1ZU1hcDogWFZhbHVlTWFwXG4pOiBib29sZWFuIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcImNvbGxlY3REYXRhRnJvbVRhc2tcIik7XG4gICAgbGV0IHNlYXJjaFR5cGUgPSBxdWVyeS5nZXRUeXBlKCk7XG4gICAgLy8gY29uc29sZS5sb2coc2VhcmNoVHlwZSk7XG5cbiAgICBsZXQgc3RyUmVnZXggPSBxdWVyeS5nZXRUYXJnZXQoKTtcbiAgICBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrKSB7XG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW1tcXFxcc3hdXFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XG4gICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLlRhc2tEb25lKSB7XG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW3hcXFxcXVxcXFxzXCIgKyBzdHJSZWdleDtcbiAgICB9IGVsc2UgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFza05vdERvbmUpIHtcbiAgICAgICAgc3RyUmVnZXggPSBcIlxcXFxbXFxcXHNcXFxcXVxcXFxzXCIgKyBzdHJSZWdleDtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhbGxcbiAgICAgICAgc3RyUmVnZXggPSBcIlxcXFxbW1xcXFxzeF1cXFxcXVxcXFxzXCIgKyBzdHJSZWdleDtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xuXG4gICAgcmV0dXJuIGV4dHJhY3REYXRhVXNpbmdSZWdleFdpdGhNdWx0aXBsZVZhbHVlcyhcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgc3RyUmVnZXgsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhTWFwLFxuICAgICAgICB4VmFsdWVNYXAsXG4gICAgICAgIHJlbmRlckluZm9cbiAgICApO1xufVxuIiwiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgVHJhY2tlciBmcm9tIFwiLi9tYWluXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2tlclNldHRpbmdzIHtcbiAgICBmb2xkZXI6IHN0cmluZztcbiAgICBkYXRlRm9ybWF0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFVFRJTkdTOiBUcmFja2VyU2V0dGluZ3MgPSB7XG4gICAgZm9sZGVyOiBcIi9cIixcbiAgICBkYXRlRm9ybWF0OiBcIllZWVktTU0tRERcIixcbn07XG5cbmV4cG9ydCBjbGFzcyBUcmFja2VyU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuICAgIHBsdWdpbjogVHJhY2tlcjtcblxuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IFRyYWNrZXIpIHtcbiAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICB9XG5cbiAgICBkaXNwbGF5KCk6IHZvaWQge1xuICAgICAgICBsZXQgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblxuICAgICAgICBjb250YWluZXJFbC5lbXB0eSgpO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJEZWZhdWx0IGZvbGRlciBsb2NhdGlvblwiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJGaWxlcyBpbiB0aGlzIGZvbGRlciB3aWxsIGJlIHBhcnNlZCBhbmQgdXNlZCBhcyBpbnB1dCBkYXRhIG9mIHRoZSB0cmFja2VyIHBsdWdpbi5cXG5Zb3UgY2FuIGFsc28gb3ZlcnJpZGUgaXQgdXNpbmcgJ2ZvbGRlcicgYXJndW1lbnQgaW4gdGhlIHRyYWNrZXIgY29kZWJsb2NrLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT5cbiAgICAgICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgICAgICAgICAgIC5zZXRQbGFjZWhvbGRlcihcIkZvbGRlciBQYXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXIpXG4gICAgICAgICAgICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlciA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJEZWZhdWx0IGRhdGUgZm9ybWF0XCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcbiAgICAgICAgICAgICAgICBcIlRoaXMgZm9ybWF0IGlzIHVzZWQgdG8gcGFyc2UgdGhlIGRhdGUgaW4geW91ciBkaWFyeSB0aXRsZS5cXG5Zb3UgY2FuIGFsc28gb3ZlcnJpZGUgaXQgdXNpbmcgJ2RhdGVGb3JtYXQnIGFyZ3VtZW50IGluIHRoZSB0cmFja2VyIGNvZGVibG9jay5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+XG4gICAgICAgICAgICAgICAgdGV4dFxuICAgICAgICAgICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoXCJZWVlZLU1NLUREXCIpXG4gICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kYXRlRm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5kYXRlRm9ybWF0ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQXBwLCBDYWNoZWRNZXRhZGF0YSwgZ2V0TGlua3BhdGgsIFBsdWdpbiB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCwgTWFya2Rvd25WaWV3LCBFZGl0b3IgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IFRGaWxlLCBURm9sZGVyLCBub3JtYWxpemVQYXRoIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgKiBhcyByZW5kZXJpbmcgZnJvbSBcIi4vcmVuZGVyaW5nXCI7XG5pbXBvcnQgeyBnZXRSZW5kZXJJbmZvRnJvbVlhbWwgfSBmcm9tIFwiLi9wYXJzaW5nXCI7XG5pbXBvcnQge1xuICAgIERhdGFzZXRzLFxuICAgIFF1ZXJ5LFxuICAgIFF1ZXJ5VmFsdWVQYWlyLFxuICAgIEdyYXBoVHlwZSxcbiAgICBTZWFyY2hUeXBlLFxuICAgIFRhYmxlRGF0YSxcbiAgICBSZW5kZXJJbmZvLFxuICAgIFhWYWx1ZU1hcCxcbiAgICBEYXRhTWFwLFxuICAgIEN1c3RvbURhdGFzZXRJbmZvLFxuICAgIENvbGxlY3RpbmdQcm9jZXNzSW5mbyxcbiAgICBWYWx1ZVR5cGUsXG59IGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCAqIGFzIGNvbGxlY3RpbmcgZnJvbSBcIi4vY29sbGVjdGluZ1wiO1xuaW1wb3J0IHtcbiAgICBUcmFja2VyU2V0dGluZ3MsXG4gICAgREVGQVVMVF9TRVRUSU5HUyxcbiAgICBUcmFja2VyU2V0dGluZ1RhYixcbn0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcbi8vIGltcG9ydCB7IGdldERhaWx5Tm90ZVNldHRpbmdzIH0gZnJvbSBcIm9ic2lkaWFuLWRhaWx5LW5vdGVzLWludGVyZmFjZVwiO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIGFwcDogQXBwO1xuICAgICAgICBtb21lbnQ6ICgpID0+IE1vbWVudDtcbiAgICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdvYnNpZGlhbicge1xuICAgIGludGVyZmFjZSBWYXVsdCB7XG4gICAgICAgIGdldENvbmZpZyhwcm9wOiBzdHJpbmcpOiBhbnk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUcmFja2VyIGV4dGVuZHMgUGx1Z2luIHtcbiAgICBzZXR0aW5nczogVHJhY2tlclNldHRpbmdzO1xuXG4gICAgYXN5bmMgb25sb2FkKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcImxvYWRpbmcgb2JzaWRpYW4tdHJhY2tlciBwbHVnaW5cIik7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcblxuICAgICAgICB0aGlzLmFkZFNldHRpbmdUYWIobmV3IFRyYWNrZXJTZXR0aW5nVGFiKHRoaXMuYXBwLCB0aGlzKSk7XG5cbiAgICAgICAgdGhpcy5yZWdpc3Rlck1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yKFxuICAgICAgICAgICAgXCJ0cmFja2VyXCIsXG4gICAgICAgICAgICB0aGlzLnBvc3Rwcm9jZXNzb3IuYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICAgICAgICBpZDogXCJhZGQtbGluZS1jaGFydC10cmFja2VyXCIsXG4gICAgICAgICAgICBuYW1lOiBcIkFkZCBMaW5lIENoYXJ0IFRyYWNrZXJcIixcbiAgICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB0aGlzLmFkZENvZGVCbG9jayhHcmFwaFR5cGUuTGluZSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICAgICAgICBpZDogXCJhZGQtYmFyLWNoYXJ0LXRyYWNrZXJcIixcbiAgICAgICAgICAgIG5hbWU6IFwiQWRkIEJhciBDaGFydCBUcmFja2VyXCIsXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5hZGRDb2RlQmxvY2soR3JhcGhUeXBlLkJhciksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICAgICAgICBpZDogXCJhZGQtc3VtbWFyeS10cmFja2VyXCIsXG4gICAgICAgICAgICBuYW1lOiBcIkFkZCBTdW1tYXJ5IFRyYWNrZXJcIixcbiAgICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB0aGlzLmFkZENvZGVCbG9jayhHcmFwaFR5cGUuU3VtbWFyeSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIERFRkFVTFRfU0VUVElOR1MsXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWREYXRhKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyBzYXZlU2V0dGluZ3MoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgcmVuZGVyRXJyb3JNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgY2FudmFzOiBIVE1MRWxlbWVudCwgZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHJlbmRlcmluZy5yZW5kZXJFcnJvck1lc3NhZ2UoY2FudmFzLCBtZXNzYWdlKTtcbiAgICAgICAgZWwuYXBwZW5kQ2hpbGQoY2FudmFzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG9udW5sb2FkKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcInVubG9hZGluZyBvYnNpZGlhbi10cmFja2VyIHBsdWdpblwiKTtcbiAgICB9XG5cbiAgICBnZXRGaWxlc0luRm9sZGVyKFxuICAgICAgICBmb2xkZXI6IFRGb2xkZXIsXG4gICAgICAgIGluY2x1ZGVTdWJGb2xkZXJzOiBib29sZWFuID0gdHJ1ZVxuICAgICk6IFRGaWxlW10ge1xuICAgICAgICBsZXQgZmlsZXM6IFRGaWxlW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGZvbGRlci5jaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmV4dGVuc2lvbiA9PT0gXCJtZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFRGb2xkZXIgJiYgaW5jbHVkZVN1YkZvbGRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZXMgPSBmaWxlcy5jb25jYXQodGhpcy5nZXRGaWxlc0luRm9sZGVyKGl0ZW0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RmlsZXMoXG4gICAgICAgIGZpbGVzOiBURmlsZVtdLFxuICAgICAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgICAgICBpbmNsdWRlU3ViRm9sZGVyczogYm9vbGVhbiA9IHRydWVcbiAgICApIHtcbiAgICAgICAgaWYgKCFmaWxlcykgcmV0dXJuO1xuXG4gICAgICAgIGxldCBmb2xkZXJUb1NlYXJjaCA9IHJlbmRlckluZm8uZm9sZGVyO1xuICAgICAgICBsZXQgdXNlU3BlY2lmaWVkRmlsZXNPbmx5ID0gcmVuZGVySW5mby5zcGVjaWZpZWRGaWxlc09ubHk7XG4gICAgICAgIGxldCBzcGVjaWZpZWRGaWxlcyA9IHJlbmRlckluZm8uZmlsZTtcbiAgICAgICAgbGV0IGZpbGVzQ29udGFpbnNMaW5rZWRGaWxlcyA9IHJlbmRlckluZm8uZmlsZUNvbnRhaW5zTGlua2VkRmlsZXM7XG4gICAgICAgIGxldCBmaWxlTXVsdGlwbGllckFmdGVyTGluayA9IHJlbmRlckluZm8uZmlsZU11bHRpcGxpZXJBZnRlckxpbms7XG5cbiAgICAgICAgLy8gSW5jbHVkZSBmaWxlcyBpbiBmb2xkZXJcbiAgICAgICAgLy8gY29uc29sZS5sb2codXNlU3BlY2lmaWVkRmlsZXNPbmx5KTtcbiAgICAgICAgaWYgKCF1c2VTcGVjaWZpZWRGaWxlc09ubHkpIHtcbiAgICAgICAgICAgIGxldCBmb2xkZXIgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplUGF0aChmb2xkZXJUb1NlYXJjaClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZm9sZGVyICYmIGZvbGRlciBpbnN0YW5jZW9mIFRGb2xkZXIpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9sZGVyRmlsZXMgPSB0aGlzLmdldEZpbGVzSW5Gb2xkZXIoZm9sZGVyKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGZvbGRlckZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5jbHVkZSBzcGVjaWZpZWQgZmlsZVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhzcGVjaWZpZWRGaWxlcyk7XG4gICAgICAgIGZvciAobGV0IGZpbGVQYXRoIG9mIHNwZWNpZmllZEZpbGVzKSB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IGZpbGVQYXRoO1xuICAgICAgICAgICAgaWYgKCFwYXRoLmVuZHNXaXRoKFwiLm1kXCIpKSB7XG4gICAgICAgICAgICAgICAgcGF0aCArPSBcIi5tZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF0aCA9IG5vcm1hbGl6ZVBhdGgocGF0aCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhwYXRoKTtcblxuICAgICAgICAgICAgbGV0IGZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgocGF0aCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlKTtcbiAgICAgICAgICAgIGlmIChmaWxlICYmIGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coZmlsZXMpO1xuXG4gICAgICAgIC8vIEluY2x1ZGUgZmlsZXMgaW4gcG9pbnRlZCBieSBsaW5rcyBpbiBmaWxlXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVzQ29udGFpbnNMaW5rZWRGaWxlcyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rKTtcbiAgICAgICAgbGV0IGxpbmtlZEZpbGVNdWx0aXBsaWVyID0gMTtcbiAgICAgICAgbGV0IHNlYXJjaEZpbGVNdWx0aWZwaWVyQWZ0ZXJMaW5rID0gdHJ1ZTtcbiAgICAgICAgaWYgKGZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rID09PSBcIlwiKSB7XG4gICAgICAgICAgICBzZWFyY2hGaWxlTXVsdGlmcGllckFmdGVyTGluayA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKC9eWzAtOV0rJC8udGVzdChmaWxlTXVsdGlwbGllckFmdGVyTGluaykpIHtcbiAgICAgICAgICAgIC8vIGludGVnZXJcbiAgICAgICAgICAgIGxpbmtlZEZpbGVNdWx0aXBsaWVyID0gcGFyc2VGbG9hdChmaWxlTXVsdGlwbGllckFmdGVyTGluayk7XG4gICAgICAgICAgICBzZWFyY2hGaWxlTXVsdGlmcGllckFmdGVyTGluayA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKCEvXFw/PHZhbHVlPi8udGVzdChmaWxlTXVsdGlwbGllckFmdGVyTGluaykpIHtcbiAgICAgICAgICAgIC8vIG5vICd2YWx1ZScgbmFtZWQgZ3JvdXBcbiAgICAgICAgICAgIHNlYXJjaEZpbGVNdWx0aWZwaWVyQWZ0ZXJMaW5rID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgZmlsZVBhdGggb2YgZmlsZXNDb250YWluc0xpbmtlZEZpbGVzKSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVQYXRoLmVuZHNXaXRoKFwiLm1kXCIpKSB7XG4gICAgICAgICAgICAgICAgZmlsZVBhdGggKz0gXCIubWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBmaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgoZmlsZVBhdGgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGZpbGUgJiYgZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGxpbmtlZCBmaWxlc1xuICAgICAgICAgICAgICAgIGxldCBmaWxlQ2FjaGUgPSB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKTtcbiAgICAgICAgICAgICAgICBsZXQgZmlsZUNvbnRlbnQgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLnJlYWQoZmlsZS5wYXRoKTtcbiAgICAgICAgICAgICAgICBsZXQgbGluZXMgPSBmaWxlQ29udGVudC5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVcXHUyMDI4XFx1MjAyOV0vXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lcyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWZpbGVDYWNoZT8ubGlua3MpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbGluayBvZiBmaWxlQ2FjaGUubGlua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsaW5rKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmtlZEZpbGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLmxpbmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5rZWRGaWxlICYmIGxpbmtlZEZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaEZpbGVNdWx0aWZwaWVyQWZ0ZXJMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBsaW5lIG9mIGxpbmsgaW4gZmlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5lTnVtYmVyID0gbGluay5wb3NpdGlvbi5lbmQubGluZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluZU51bWJlciA+PSAwICYmIGxpbmVOdW1iZXIgPCBsaW5lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmUgPSBsaW5lc1tsaW5lTnVtYmVyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobGluZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IGV4dHJhY3QgbXVsdGlwbGllclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAobGluay5wb3NpdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNwbGl0dGVkID0gbGluZS5zcGxpdChsaW5rLm9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3BsaXR0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG9QYXJzZSA9IHNwbGl0dGVkWzFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJSZWdleCA9IGZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHRvUGFyc2UpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG1hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBtYXRjaC5ncm91cHMgIT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBtYXRjaC5ncm91cHMudmFsdWUgIT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3QgaGF2ZSBncm91cCBuYW1lICd2YWx1ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldFBhcnNlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaC5ncm91cHMudmFsdWUudHJpbSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlZEZpbGVNdWx0aXBsaWVyID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRQYXJzZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmtlZEZpbGVNdWx0aXBsaWVyOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGxpbmtlZEZpbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29uc29sZS5sb2coZmlsZXMpO1xuICAgIH1cblxuICAgIGFzeW5jIHBvc3Rwcm9jZXNzb3IoXG4gICAgICAgIHNvdXJjZTogc3RyaW5nLFxuICAgICAgICBlbDogSFRNTEVsZW1lbnQsXG4gICAgICAgIGN0eDogTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dFxuICAgICkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInBvc3Rwcm9jZXNzXCIpO1xuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICAgIGxldCB5YW1sVGV4dCA9IHNvdXJjZS50cmltKCk7XG5cbiAgICAgICAgLy8gUmVwbGFjZSBhbGwgdGFicyBieSBzcGFjZXNcbiAgICAgICAgbGV0IHRhYlNpemUgPSB0aGlzLmFwcC52YXVsdC5nZXRDb25maWcoXCJ0YWJTaXplXCIpO1xuICAgICAgICBsZXQgc3BhY2VzID0gQXJyYXkodGFiU2l6ZSkuZmlsbChcIiBcIikuam9pbihcIlwiKTtcbiAgICAgICAgeWFtbFRleHQgPSB5YW1sVGV4dC5yZXBsYWNlKC9cXHQvZ20sIHNwYWNlcyk7XG5cbiAgICAgICAgLy8gR2V0IHJlbmRlciBpbmZvXG4gICAgICAgIGxldCByZXRSZW5kZXJJbmZvID0gZ2V0UmVuZGVySW5mb0Zyb21ZYW1sKHlhbWxUZXh0LCB0aGlzKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRSZW5kZXJJbmZvID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvck1lc3NhZ2UocmV0UmVuZGVySW5mbywgY2FudmFzLCBlbCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlbmRlckluZm8gPSByZXRSZW5kZXJJbmZvIGFzIFJlbmRlckluZm87XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xuXG4gICAgICAgIC8vIEdldCBmaWxlc1xuICAgICAgICBsZXQgZmlsZXM6IFRGaWxlW10gPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0RmlsZXMoZmlsZXMsIHJlbmRlckluZm8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvck1lc3NhZ2UoZS5tZXNzYWdlLCBjYW52YXMsIGVsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgXCJObyBtYXJrZG93biBmaWxlcyBmb3VuZCBpbiBmb2xkZXJcIixcbiAgICAgICAgICAgICAgICBjYW52YXMsXG4gICAgICAgICAgICAgICAgZWxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coZmlsZXMpO1xuXG4gICAgICAgIC8vIGxldCBkYWlseU5vdGVzU2V0dGluZ3MgPSBnZXREYWlseU5vdGVTZXR0aW5ncygpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhkYWlseU5vdGVzU2V0dGluZ3MpO1xuICAgICAgICAvLyBJIGFsd2F5cyBnb3QgWVlZWS1NTS1ERCBmcm9tIGRhaWx5Tm90ZXNTZXR0aW5ncy5mb3JtYXRcbiAgICAgICAgLy8gVXNlIG93biBzZXR0aW5ncyBwYW5lbCBmb3Igbm93XG5cbiAgICAgICAgLy8gQ29sbGVjdGluZyBkYXRhIHRvIGRhdGFNYXAgZmlyc3RcbiAgICAgICAgbGV0IGRhdGFNYXA6IERhdGFNYXAgPSBuZXcgTWFwKCk7IC8vIHtzdHJEYXRlOiBbcXVlcnk6IHZhbHVlLCAuLi5dfVxuICAgICAgICBsZXQgcHJvY2Vzc0luZm8gPSBuZXcgQ29sbGVjdGluZ1Byb2Nlc3NJbmZvKCk7XG4gICAgICAgIHByb2Nlc3NJbmZvLmZpbGVUb3RhbCA9IGZpbGVzLmxlbmd0aDtcblxuICAgICAgICAvLyBDb2xsZWN0IGRhdGEgZnJvbSBmaWxlcywgZWFjaCBmaWxlIGhhcyBvbmUgZGF0YSBwb2ludCBmb3IgZWFjaCBxdWVyeVxuICAgICAgICBjb25zdCBsb29wRmlsZVByb21pc2VzID0gZmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlLmJhc2VuYW1lKTtcbiAgICAgICAgICAgIC8vIEdldCBmaWxlQ2FjaGUgYW5kIGNvbnRlbnRcbiAgICAgICAgICAgIGxldCBmaWxlQ2FjaGU6IENhY2hlZE1ldGFkYXRhID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBuZWVkRmlsZUNhY2hlID0gcmVuZGVySW5mby5xdWVyaWVzLnNvbWUoKHEpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IHEuZ2V0VHlwZSgpO1xuICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSBxLmdldFRhcmdldCgpO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5Gcm9udG1hdHRlciB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLlRhZyB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLldpa2kgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5XaWtpTGluayB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLldpa2lEaXNwbGF5XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChuZWVkRmlsZUNhY2hlKSB7XG4gICAgICAgICAgICAgICAgZmlsZUNhY2hlID0gdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjb250ZW50OiBzdHJpbmcgPSBudWxsO1xuICAgICAgICAgICAgbGV0IG5lZWRDb250ZW50ID0gcmVuZGVySW5mby5xdWVyaWVzLnNvbWUoKHEpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IHEuZ2V0VHlwZSgpO1xuICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSBxLmdldFRhcmdldCgpO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5UYWcgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5UZXh0IHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuZHZGaWVsZCB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLlRhc2sgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrRG9uZSB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLlRhc2tOb3REb25lXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gU2VhcmNoVHlwZS5GaWxlTWV0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPT09IFwibnVtV29yZHNcIiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID09PSBcIm51bUNoYXJzXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9PT0gXCJudW1TZW50ZW5jZXNcIlxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKG5lZWRDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChmaWxlLnBhdGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBHZXQgeFZhbHVlIGFuZCBhZGQgaXQgaW50byB4VmFsdWVNYXAgZm9yIGxhdGVyIHVzZVxuICAgICAgICAgICAgbGV0IHhWYWx1ZU1hcDogWFZhbHVlTWFwID0gbmV3IE1hcCgpOyAvLyBxdWVyeUlkOiB4VmFsdWUgZm9yIHRoaXMgZmlsZVxuICAgICAgICAgICAgbGV0IHNraXBUaGlzRmlsZSA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby54RGF0YXNldCk7XG4gICAgICAgICAgICBmb3IgKGxldCB4RGF0YXNldElkIG9mIHJlbmRlckluZm8ueERhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgeERhdGFzZXRJZDogJHt4RGF0YXNldElkfWApO1xuICAgICAgICAgICAgICAgIGlmICgheFZhbHVlTWFwLmhhcyh4RGF0YXNldElkKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgeERhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgdXNpbmcgZGF0ZSBpbiBmaWxlbmFtZSBhcyB4VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRlID0gY29sbGVjdGluZy5nZXREYXRlRnJvbUZpbGVuYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHhEYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB4RGF0YXNldFF1ZXJ5ID0gcmVuZGVySW5mby5xdWVyaWVzW3hEYXRhc2V0SWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeERhdGFzZXRRdWVyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHhEYXRhc2V0UXVlcnkuZ2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLkZyb250bWF0dGVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IGNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21Gcm9udG1hdHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRhc2V0UXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2VhcmNoVHlwZS5UYWc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRlID0gY29sbGVjdGluZy5nZXREYXRlRnJvbVRhZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0YXNldFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuVGV4dDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBjb2xsZWN0aW5nLmdldERhdGVGcm9tVGV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0YXNldFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuZHZGaWVsZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBjb2xsZWN0aW5nLmdldERhdGVGcm9tRHZGaWVsZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0YXNldFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuRmlsZU1ldGE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRlID0gY29sbGVjdGluZy5nZXREYXRlRnJvbUZpbGVNZXRhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRhc2V0UXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2VhcmNoVHlwZS5UYXNrOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2VhcmNoVHlwZS5UYXNrRG9uZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuVGFza05vdERvbmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRlID0gY29sbGVjdGluZy5nZXREYXRlRnJvbVRhc2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGFzZXRRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXhEYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJJbnZhbGlkIHhEYXRlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFRoaXNGaWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmZpbGVOb3RJbkZvcm1hdCsrO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJmaWxlIFwiICsgZmlsZS5iYXNlbmFtZSArIFwiIGFjY2VwdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlckluZm8uc3RhcnREYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRlIDwgcmVuZGVySW5mby5zdGFydERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFRoaXNGaWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZmlsZU91dE9mRGF0ZVJhbmdlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlckluZm8uZW5kRGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4RGF0ZSA+IHJlbmRlckluZm8uZW5kRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwVGhpc0ZpbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5maWxlT3V0T2ZEYXRlUmFuZ2UrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNraXBUaGlzRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRYVmFsdWUgfHw9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXAuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRhc2V0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLmRhdGVUb1N0cih4RGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmZpbGVBdmFpbGFibGUrKztcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IG1pbi9tYXggZGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NJbmZvLmZpbGVBdmFpbGFibGUgPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1pbkRhdGUgPSB4RGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1heERhdGUgPSB4RGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGUgPCBwcm9jZXNzSW5mby5taW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1pbkRhdGUgPSB4RGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGUgPiBwcm9jZXNzSW5mby5tYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1heERhdGUgPSB4RGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChza2lwVGhpc0ZpbGUpIHJldHVybjtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHhWYWx1ZU1hcCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgbWluRGF0ZTogJHttaW5EYXRlfWApO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYG1heERhdGU6ICR7bWF4RGF0ZX1gKTtcblxuICAgICAgICAgICAgLy8gTG9vcCBvdmVyIHF1ZXJpZXNcbiAgICAgICAgICAgIGxldCB5RGF0YXNldFF1ZXJpZXMgPSByZW5kZXJJbmZvLnF1ZXJpZXMuZmlsdGVyKChxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEuZ2V0VHlwZSgpICE9PSBTZWFyY2hUeXBlLlRhYmxlICYmICFxLnVzZWRBc1hEYXRhc2V0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh5RGF0YXNldFF1ZXJpZXMpO1xuXG4gICAgICAgICAgICBjb25zdCBsb29wUXVlcnlQcm9taXNlcyA9IHlEYXRhc2V0UXVlcmllcy5tYXAoYXN5bmMgKHF1ZXJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHhWYWx1ZSBmcm9tIGZpbGUgaWYgeERhdGFzZXQgYXNzaWduZWRcbiAgICAgICAgICAgICAgICAvLyBpZiAocmVuZGVySW5mby54RGF0YXNldCAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAvLyBsZXQgeERhdGFzZXRJZCA9IHJlbmRlckluZm8ueERhdGFzZXQ7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcnkpO1xuXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTZWFyY2ggZnJvbnRtYXR0ZXIgdGFnc1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZUNhY2hlICYmIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5UYWcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGZyb250bWF0dGVyIHRhZ3MsIGFsbG93IHNpbXBsZSB0YWcgb25seVxuICAgICAgICAgICAgICAgICAgICBsZXQgZ290QW55VmFsdWUgPSBjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbUZyb250bWF0dGVyVGFnKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZU1hcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gZ290QW55VmFsdWU7XG4gICAgICAgICAgICAgICAgfSAvLyBTZWFyY2ggZnJvbnRtYXR0ZXIgdGFnc1xuXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTZWFyY2ggZnJvbnRtYXR0ZXIga2V5c1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGZpbGVDYWNoZSAmJlxuICAgICAgICAgICAgICAgICAgICBxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuRnJvbnRtYXR0ZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkuZ2V0VGFyZ2V0KCkgIT09IFwidGFnc1wiXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tRnJvbnRtYXR0ZXJLZXkoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSBnb3RBbnlWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIGZyb250bWF0dGVyIGtleXNcIik7XG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCB3aWtpIGxpbmtzXCIpO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZmlsZUNhY2hlICYmXG4gICAgICAgICAgICAgICAgICAgIChxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuV2lraSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLldpa2lMaW5rIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuV2lraURpc3BsYXkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tV2lraShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IGdvdEFueVZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIGlubGluZSB0YWdzXCIpO1xuICAgICAgICAgICAgICAgIGlmIChjb250ZW50ICYmIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5UYWcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdvdEFueVZhbHVlID0gY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21JbmxpbmVUYWcoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZU1hcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gZ290QW55VmFsdWU7XG4gICAgICAgICAgICAgICAgfSAvLyBTZWFyY2ggaW5saW5lIHRhZ3NcblxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIFRleHRcIik7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgJiYgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLlRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdvdEFueVZhbHVlID0gY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21UZXh0KFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IGdvdEFueVZhbHVlO1xuICAgICAgICAgICAgICAgIH0gLy8gU2VhcmNoIHRleHRcblxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIEZpbGVNZXRhXCIpO1xuICAgICAgICAgICAgICAgIGlmIChxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuRmlsZU1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdvdEFueVZhbHVlID0gY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21GaWxlTWV0YShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZU1hcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gZ290QW55VmFsdWU7XG4gICAgICAgICAgICAgICAgfSAvLyBTZWFyY2ggRmlsZU1ldGFcblxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIGR2RmllbGRcIik7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgJiYgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLmR2RmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdvdEFueVZhbHVlID0gY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21EdkZpZWxkKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IGdvdEFueVZhbHVlO1xuICAgICAgICAgICAgICAgIH0gLy8gc2VhcmNoIGR2RmllbGRcblxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIFRhc2tcIik7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50ICYmXG4gICAgICAgICAgICAgICAgICAgIChxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuVGFzayB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLlRhc2tEb25lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuVGFza05vdERvbmUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tVGFzayhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSBnb3RBbnlWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IC8vIHNlYXJjaCBUYXNrXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGxvb3BRdWVyeVByb21pc2VzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGxvb3BGaWxlUHJvbWlzZXMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhkYXRhTWFwKTtcblxuICAgICAgICAvLyBDb2xsZWN0IGRhdGEgZnJvbSBhIGZpbGUsIG9uZSBmaWxlIGNvbnRhaW5zIGZ1bGwgZGF0YXNldFxuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3REYXRhRnJvbVRhYmxlKGRhdGFNYXAsIHJlbmRlckluZm8sIHByb2Nlc3NJbmZvKTtcbiAgICAgICAgaWYgKHByb2Nlc3NJbmZvLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgICAgICBjYW52YXMsXG4gICAgICAgICAgICAgICAgZWxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cobWluRGF0ZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1heERhdGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhkYXRhTWFwKTtcblxuICAgICAgICAvLyBDaGVjayBkYXRlIHJhbmdlXG4gICAgICAgIC8vIG1pbkRhdGUgYW5kIG1heERhdGUgYXJlIGNvbGxlY3RlZCB3aXRob3V0IGtub3dpbmcgc3RhcnREYXRlIGFuZCBlbmREYXRlXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBmaWxlVG90YWw6ICR7cHJvY2Vzc0luZm8uZmlsZVRvdGFsfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgZmlsZUF2YWlsYWJsZTogJHtwcm9jZXNzSW5mby5maWxlQXZhaWxhYmxlfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgZmlsZU5vdEluRm9ybWF0OiAke3Byb2Nlc3NJbmZvLmZpbGVOb3RJbkZvcm1hdH1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYGZpbGVPdXRPZkRhdGVSYW5nZTogJHtwcm9jZXNzSW5mby5maWxlT3V0T2ZEYXRlUmFuZ2V9YCk7XG4gICAgICAgIGxldCBkYXRlRXJyb3JNZXNzYWdlID0gXCJcIjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXByb2Nlc3NJbmZvLm1pbkRhdGUuaXNWYWxpZCgpIHx8XG4gICAgICAgICAgICAhcHJvY2Vzc0luZm8ubWF4RGF0ZS5pc1ZhbGlkKCkgfHxcbiAgICAgICAgICAgIHByb2Nlc3NJbmZvLmZpbGVBdmFpbGFibGUgPT09IDAgfHxcbiAgICAgICAgICAgICFwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFhWYWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGRhdGVFcnJvck1lc3NhZ2UgPSBgTm8gdmFsaWQgZGF0ZSBhcyBYIHZhbHVlIGZvdW5kIGluIG5vdGVzYDtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzSW5mby5maWxlT3V0T2ZEYXRlUmFuZ2UgPiAwKSB7XG4gICAgICAgICAgICAgICAgZGF0ZUVycm9yTWVzc2FnZSArPSBgXFxuJHtwcm9jZXNzSW5mby5maWxlT3V0T2ZEYXRlUmFuZ2V9IGZpbGVzIGFyZSBvdXQgb2YgdGhlIGRhdGUgcmFuZ2UuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9jZXNzSW5mby5maWxlTm90SW5Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICBkYXRlRXJyb3JNZXNzYWdlICs9IGBcXG4ke3Byb2Nlc3NJbmZvLmZpbGVOb3RJbkZvcm1hdH0gZmlsZXMgYXJlIG5vdCBpbiB0aGUgcmlnaHQgZm9ybWF0LmA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlckluZm8uc3RhcnREYXRlID09PSBudWxsICYmIHJlbmRlckluZm8uZW5kRGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gTm8gZGF0ZSBhcmd1bWVudHNcbiAgICAgICAgICAgIHJlbmRlckluZm8uc3RhcnREYXRlID0gcHJvY2Vzc0luZm8ubWluRGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgcmVuZGVySW5mby5lbmREYXRlID0gcHJvY2Vzc0luZm8ubWF4RGF0ZS5jbG9uZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcmVuZGVySW5mby5zdGFydERhdGUgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSA9PT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChyZW5kZXJJbmZvLnN0YXJ0RGF0ZSA8IHByb2Nlc3NJbmZvLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUgPSBwcm9jZXNzSW5mby5tYXhEYXRlLmNsb25lKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGVFcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgZGF0ZSByYW5nZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcmVuZGVySW5mby5lbmREYXRlICE9PSBudWxsICYmXG4gICAgICAgICAgICByZW5kZXJJbmZvLnN0YXJ0RGF0ZSA9PT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChyZW5kZXJJbmZvLmVuZERhdGUgPiBwcm9jZXNzSW5mby5taW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5zdGFydERhdGUgPSBwcm9jZXNzSW5mby5taW5EYXRlLmNsb25lKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGVFcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgZGF0ZSByYW5nZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc3RhcnREYXRlIGFuZCBlbmREYXRlIGFyZSB2YWxpZFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChyZW5kZXJJbmZvLnN0YXJ0RGF0ZSA8IHByb2Nlc3NJbmZvLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby5lbmREYXRlIDwgcHJvY2Vzc0luZm8ubWluRGF0ZSkgfHxcbiAgICAgICAgICAgICAgICAocmVuZGVySW5mby5zdGFydERhdGUgPiBwcm9jZXNzSW5mby5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSA+IHByb2Nlc3NJbmZvLm1heERhdGUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkYXRlRXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGRhdGUgcmFuZ2VcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0ZUVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKGRhdGVFcnJvck1lc3NhZ2UsIGNhbnZhcywgZWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uc3RhcnREYXRlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5lbmREYXRlKTtcblxuICAgICAgICBpZiAoIXByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgXCJObyB2YWxpZCBZIHZhbHVlIGZvdW5kIGluIG5vdGVzXCIsXG4gICAgICAgICAgICAgICAgY2FudmFzLFxuICAgICAgICAgICAgICAgIGVsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzaGFwZSBkYXRhIGZvciByZW5kZXJpbmdcbiAgICAgICAgbGV0IGRhdGFzZXRzID0gbmV3IERhdGFzZXRzKHJlbmRlckluZm8uc3RhcnREYXRlLCByZW5kZXJJbmZvLmVuZERhdGUpO1xuICAgICAgICBmb3IgKGxldCBxdWVyeSBvZiByZW5kZXJJbmZvLnF1ZXJpZXMpIHtcbiAgICAgICAgICAgIC8vIFdlIHN0aWxsIGNyZWF0ZSBhIGRhdGFzZXQgZm9yIHhEYXRhc2V0LFxuICAgICAgICAgICAgLy8gdG8ga2VlcCB0aGUgc2VxdWVuY2UgYW5kIG9yZGVyIG9mIHRhcmdldHNcbiAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gZGF0YXNldHMuY3JlYXRlRGF0YXNldChxdWVyeSwgcmVuZGVySW5mbyk7XG4gICAgICAgICAgICAvLyBBZGQgbnVtYmVyIG9mIHRhcmdldHMgdG8gdGhlIGRhdGFzZXRcbiAgICAgICAgICAgIC8vIE51bWJlciBvZiB0YXJnZXRzIGhhcyBiZWVuIGFjY3VtdWxhdGVkIHdoaWxlIGNvbGxlY3RpbmcgZGF0YVxuICAgICAgICAgICAgZGF0YXNldC5hZGROdW1UYXJnZXRzKHF1ZXJ5LmdldE51bVRhcmdldHMoKSk7XG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIGxldCBjdXJEYXRlID0gcmVuZGVySW5mby5zdGFydERhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICBjdXJEYXRlIDw9IHJlbmRlckluZm8uZW5kRGF0ZTtcbiAgICAgICAgICAgICAgICBjdXJEYXRlLmFkZCgxLCBcImRheXNcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGN1ckRhdGUpO1xuXG4gICAgICAgICAgICAgICAgLy8gZGF0YU1hcCAtLT4ge2RhdGU6IFtxdWVyeTogdmFsdWUsIC4uLl19XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLmhhcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5kYXRlVG9TdHIoY3VyRGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBxdWVyeVZhbHVlUGFpcnMgPSBkYXRhTWFwXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KGhlbHBlci5kYXRlVG9TdHIoY3VyRGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHBhaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFpci5xdWVyeS5lcXVhbFRvKHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlWYWx1ZVBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1lcmdlIHZhbHVlcyBvZiB0aGUgc2FtZSBkYXkgc2FtZSBxdWVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZFBhaXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZFBhaXIgPCBxdWVyeVZhbHVlUGFpcnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZFBhaXIrK1xuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbGxlY3RlZCA9IHF1ZXJ5VmFsdWVQYWlyc1tpbmRQYWlyXS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlci5pc051bWJlcihjb2xsZWN0ZWQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFOdW1iZXIuaXNOYU4oY29sbGVjdGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY29sbGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gY29sbGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaGFzVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5zZXRWYWx1ZShjdXJEYXRlLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVySW5mby5kYXRhc2V0cyA9IGRhdGFzZXRzO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmRhdGFzZXRzKTtcblxuICAgICAgICBsZXQgcmV0UmVuZGVyID0gcmVuZGVyaW5nLnJlbmRlcihjYW52YXMsIHJlbmRlckluZm8pO1xuICAgICAgICBpZiAodHlwZW9mIHJldFJlbmRlciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKHJldFJlbmRlciwgY2FudmFzLCBlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBlbC5hcHBlbmRDaGlsZChjYW52YXMpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzLmFwcCBhbmQgbW92ZSB0byBjb2xsZWN0aW5nLnRzXG4gICAgYXN5bmMgY29sbGVjdERhdGFGcm9tVGFibGUoXG4gICAgICAgIGRhdGFNYXA6IERhdGFNYXAsXG4gICAgICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgICAgIHByb2Nlc3NJbmZvOiBDb2xsZWN0aW5nUHJvY2Vzc0luZm9cbiAgICApIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJjb2xsZWN0RGF0YUZyb21UYWJsZVwiKTtcblxuICAgICAgICBsZXQgdGFibGVRdWVyaWVzID0gcmVuZGVySW5mby5xdWVyaWVzLmZpbHRlcihcbiAgICAgICAgICAgIChxKSA9PiBxLmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5UYWJsZVxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0YWJsZVF1ZXJpZXMpO1xuICAgICAgICAvLyBTZXBhcmF0ZSBxdWVyaWVzIGJ5IHRhYmxlcyBhbmQgeERhdGFzZXRzL3lEYXRhc2V0c1xuICAgICAgICBsZXQgdGFibGVzOiBBcnJheTxUYWJsZURhdGE+ID0gW107XG4gICAgICAgIGxldCB0YWJsZUZpbGVOb3RGb3VuZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBxdWVyeSBvZiB0YWJsZVF1ZXJpZXMpIHtcbiAgICAgICAgICAgIGxldCBmaWxlUGF0aCA9IHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpO1xuICAgICAgICAgICAgbGV0IGZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplUGF0aChmaWxlUGF0aCArIFwiLm1kXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFmaWxlIHx8ICEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkge1xuICAgICAgICAgICAgICAgIHRhYmxlRmlsZU5vdEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHRhYmxlSW5kZXggPSBxdWVyeS5nZXRBY2Nlc3NvcigpO1xuICAgICAgICAgICAgbGV0IGlzWCA9IHF1ZXJ5LnVzZWRBc1hEYXRhc2V0O1xuXG4gICAgICAgICAgICBsZXQgdGFibGUgPSB0YWJsZXMuZmluZChcbiAgICAgICAgICAgICAgICAodCkgPT4gdC5maWxlUGF0aCA9PT0gZmlsZVBhdGggJiYgdC50YWJsZUluZGV4ID09PSB0YWJsZUluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHRhYmxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzWCkge1xuICAgICAgICAgICAgICAgICAgICB0YWJsZS54RGF0YXNldCA9IHF1ZXJ5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlLnlEYXRhc2V0cy5wdXNoKHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCB0YWJsZURhdGEgPSBuZXcgVGFibGVEYXRhKGZpbGVQYXRoLCB0YWJsZUluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoaXNYKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlRGF0YS54RGF0YXNldCA9IHF1ZXJ5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlRGF0YS55RGF0YXNldHMucHVzaChxdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhYmxlcy5wdXNoKHRhYmxlRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2codGFibGVzKTtcblxuICAgICAgICBpZiAodGFibGVGaWxlTm90Rm91bmQpIHtcbiAgICAgICAgICAgIHByb2Nlc3NJbmZvLmVycm9yTWVzc2FnZSA9IFwiRmlsZSBjb250YWluaW5nIHRhYmxlcyBub3QgZm91bmRcIjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IHRhYmxlRGF0YSBvZiB0YWJsZXMpIHtcbiAgICAgICAgICAgIC8vZXh0cmFjdCB4RGF0YXNldCBmcm9tIHF1ZXJ5XG4gICAgICAgICAgICBsZXQgeERhdGFzZXRRdWVyeSA9IHRhYmxlRGF0YS54RGF0YXNldDtcbiAgICAgICAgICAgIGlmICgheERhdGFzZXRRdWVyeSkge1xuICAgICAgICAgICAgICAgIC8vIG1pc3NpbmcgeERhdGFzZXRcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB5RGF0YXNldFF1ZXJpZXMgPSB0YWJsZURhdGEueURhdGFzZXRzO1xuICAgICAgICAgICAgbGV0IGZpbGVQYXRoID0geERhdGFzZXRRdWVyeS5nZXRQYXJlbnRUYXJnZXQoKTtcbiAgICAgICAgICAgIGxldCB0YWJsZUluZGV4ID0geERhdGFzZXRRdWVyeS5nZXRBY2Nlc3NvcigpO1xuXG4gICAgICAgICAgICAvLyBHZXQgdGFibGUgdGV4dFxuICAgICAgICAgICAgbGV0IHRleHRUYWJsZSA9IFwiXCI7XG4gICAgICAgICAgICBmaWxlUGF0aCA9IGZpbGVQYXRoICsgXCIubWRcIjtcbiAgICAgICAgICAgIGxldCBmaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgoZmlsZVBhdGgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGZpbGUgJiYgZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZmlsZUF2YWlsYWJsZSsrO1xuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5yZWFkKGZpbGUucGF0aCk7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY29udGVudCk7XG5cbiAgICAgICAgICAgICAgICAvLyBUZXN0IHRoaXMgaW4gUmVnZXgxMDFcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbm90LXNvLXN0cmljdCB0YWJsZSBzZWxlY3RvclxuICAgICAgICAgICAgICAgIC8vICgoXFxyP1xcbil7Mn18XikoW15cXHJcXG5dKlxcfFteXFxyXFxuXSooXFxyP1xcbik/KSsoPz0oXFxyP1xcbil7Mn18JClcbiAgICAgICAgICAgICAgICBsZXQgc3RyTURUYWJsZVJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgXCIoKFxcXFxyP1xcXFxuKXsyfXxeKShbXlxcXFxyXFxcXG5dKlxcXFx8W15cXFxcclxcXFxuXSooXFxcXHI/XFxcXG4pPykrKD89KFxcXFxyP1xcXFxuKXsyfXwkKVwiO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHN0ck1EVGFibGVSZWdleCk7XG4gICAgICAgICAgICAgICAgbGV0IG1kVGFibGVSZWdleCA9IG5ldyBSZWdFeHAoc3RyTURUYWJsZVJlZ2V4LCBcImdtXCIpO1xuICAgICAgICAgICAgICAgIGxldCBtYXRjaDtcbiAgICAgICAgICAgICAgICBsZXQgaW5kVGFibGUgPSAwO1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IG1kVGFibGVSZWdleC5leGVjKGNvbnRlbnQpKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXRjaCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRUYWJsZSA9PT0gdGFibGVJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFRhYmxlID0gbWF0Y2hbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpbmRUYWJsZSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZmlsZSBub3QgZXhpc3RzXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0ZXh0VGFibGUpO1xuXG4gICAgICAgICAgICBsZXQgdGFibGVMaW5lcyA9IHRleHRUYWJsZS5zcGxpdCgvXFxyP1xcbi8pO1xuICAgICAgICAgICAgdGFibGVMaW5lcyA9IHRhYmxlTGluZXMuZmlsdGVyKChsaW5lKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUgIT09IFwiXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBudW1Db2x1bW5zID0gMDtcbiAgICAgICAgICAgIGxldCBudW1EYXRhUm93cyA9IDA7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0YWJsZUxpbmVzKTtcblxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGl0IGlzIGEgdmFsaWQgdGFibGUgZmlyc3RcbiAgICAgICAgICAgIGlmICh0YWJsZUxpbmVzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICAgICAgLy8gTXVzdCBoYXZlIGhlYWRlciBhbmQgc2VwYXJhdG9yIGxpbmVcbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVyTGluZSA9IHRhYmxlTGluZXMuc2hpZnQoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgaGVhZGVyTGluZSA9IGhlbHBlci50cmltQnlDaGFyKGhlYWRlckxpbmUsIFwifFwiKTtcbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVyU3BsaXR0ZWQgPSBoZWFkZXJMaW5lLnNwbGl0KFwifFwiKTtcbiAgICAgICAgICAgICAgICBudW1Db2x1bW5zID0gaGVhZGVyU3BsaXR0ZWQubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgbGV0IHNlcExpbmUgPSB0YWJsZUxpbmVzLnNoaWZ0KCkudHJpbSgpO1xuICAgICAgICAgICAgICAgIHNlcExpbmUgPSBoZWxwZXIudHJpbUJ5Q2hhcihzZXBMaW5lLCBcInxcIik7XG4gICAgICAgICAgICAgICAgbGV0IHNwZXBMaW5lU3BsaXR0ZWQgPSBzZXBMaW5lLnNwbGl0KFwifFwiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjb2wgb2Ygc3BlcExpbmVTcGxpdHRlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbC5pbmNsdWRlcyhcIi1cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBOb3QgYSB2YWxpZCBzZXBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG51bURhdGFSb3dzID0gdGFibGVMaW5lcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChudW1EYXRhUm93cyA9PSAwKSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gZ2V0IHggZGF0YVxuICAgICAgICAgICAgbGV0IGNvbHVtblhEYXRhc2V0ID0geERhdGFzZXRRdWVyeS5nZXRBY2Nlc3NvcigxKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW5YRGF0YXNldCA+PSBudW1Db2x1bW5zKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCB4VmFsdWVzID0gW107XG5cbiAgICAgICAgICAgIGxldCBpbmRMaW5lID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IHRhYmxlTGluZSBvZiB0YWJsZUxpbmVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFSb3cgPSBoZWxwZXIudHJpbUJ5Q2hhcih0YWJsZUxpbmUudHJpbSgpLCBcInxcIik7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFSb3dTcGxpdHRlZCA9IGRhdGFSb3cuc3BsaXQoXCJ8XCIpO1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5YRGF0YXNldCA8IGRhdGFSb3dTcGxpdHRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBkYXRhUm93U3BsaXR0ZWRbY29sdW1uWERhdGFzZXRdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGUgPSBoZWxwZXIuc3RyVG9EYXRlKGRhdGEsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVzLnB1c2goZGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvY2Vzc0luZm8ubWluRGF0ZS5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvY2Vzc0luZm8ubWF4RGF0ZS5pc1ZhbGlkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1pbkRhdGUgPSBkYXRlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8ubWF4RGF0ZSA9IGRhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGUgPCBwcm9jZXNzSW5mby5taW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1pbkRhdGUgPSBkYXRlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRlID4gcHJvY2Vzc0luZm8ubWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5tYXhEYXRlID0gZGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZXMucHVzaChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHhWYWx1ZXMucHVzaChudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5kTGluZSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeFZhbHVlcyk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB4VmFsdWVzLmV2ZXJ5KCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2ID09PSBudWxsO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5lcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICBcIk5vIHZhbGlkIGRhdGUgYXMgWCB2YWx1ZSBmb3VuZCBpbiB0YWJsZVwiO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRYVmFsdWUgfHw9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGdldCB5IGRhdGFcbiAgICAgICAgICAgIGZvciAobGV0IHlEYXRhc2V0UXVlcnkgb2YgeURhdGFzZXRRdWVyaWVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbk9mSW50ZXJlc3QgPSB5RGF0YXNldFF1ZXJ5LmdldEFjY2Vzc29yKDEpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBjb2x1bW5PZkludGVyZXN0OiAke2NvbHVtbk9mSW50ZXJlc3R9LCBudW1Db2x1bW5zOiAke251bUNvbHVtbnN9YCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbk9mSW50ZXJlc3QgPj0gbnVtQ29sdW1ucykgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBsZXQgaW5kTGluZSA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdGFibGVMaW5lIG9mIHRhYmxlTGluZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFSb3cgPSBoZWxwZXIudHJpbUJ5Q2hhcih0YWJsZUxpbmUudHJpbSgpLCBcInxcIik7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhUm93U3BsaXR0ZWQgPSBkYXRhUm93LnNwbGl0KFwifFwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbk9mSW50ZXJlc3QgPCBkYXRhUm93U3BsaXR0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGRhdGFSb3dTcGxpdHRlZFtjb2x1bW5PZkludGVyZXN0XS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXR0ZWQgPSBkYXRhLnNwbGl0KHlEYXRhc2V0UXVlcnkuZ2V0U2VwYXJhdG9yKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3BsaXR0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGxpdHRlZCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRlZFswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby50ZXh0VmFsdWVNYXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJldFBhcnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnR5cGUgPT09IFZhbHVlVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5RGF0YXNldFF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHJldFBhcnNlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRMaW5lIDwgeFZhbHVlcy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZXNbaW5kTGluZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3RpbmcuYWRkVG9EYXRhTWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLmRhdGVUb1N0cihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlc1tpbmRMaW5lXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5RGF0YXNldFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRlZC5sZW5ndGggPiB5RGF0YXNldFF1ZXJ5LmdldEFjY2Vzc29yKDIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeURhdGFzZXRRdWVyeS5nZXRBY2Nlc3NvcigyKSA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzcGxpdHRlZFBhcnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRlZFt5RGF0YXNldFF1ZXJ5LmdldEFjY2Vzc29yKDIpXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3BsaXR0ZWRQYXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0UGFyc2UgPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dGVkUGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby50ZXh0VmFsdWVNYXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJldFBhcnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnR5cGUgPT09IFZhbHVlVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5RGF0YXNldFF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcmV0UGFyc2UudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZExpbmUgPCB4VmFsdWVzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlc1tpbmRMaW5lXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGluZy5hZGRUb0RhdGFNYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIuZGF0ZVRvU3RyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVzW2luZExpbmVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlEYXRhc2V0UXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpbmRMaW5lKys7XG4gICAgICAgICAgICAgICAgfSAvLyBMb29wIG92ZXIgdGFibGVMaW5lc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RWRpdG9yKCk6IEVkaXRvciB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpLmVkaXRvcjtcbiAgICB9XG5cbiAgICBhZGRDb2RlQmxvY2sob3V0cHV0VHlwZTogR3JhcGhUeXBlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmFjdGl2ZUxlYWYudmlldztcblxuICAgICAgICBpZiAoIShjdXJyZW50VmlldyBpbnN0YW5jZW9mIE1hcmtkb3duVmlldykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb2RlYmxvY2tUb0luc2VydCA9IFwiXCI7XG4gICAgICAgIHN3aXRjaCAob3V0cHV0VHlwZSkge1xuICAgICAgICAgICAgY2FzZSBHcmFwaFR5cGUuTGluZTpcbiAgICAgICAgICAgICAgICBjb2RlYmxvY2tUb0luc2VydCA9IGBcXGBcXGBcXGAgdHJhY2tlclxuc2VhcmNoVHlwZTogdGFnXG5zZWFyY2hUYXJnZXQ6IHRhZ05hbWVcbmZvbGRlcjogL1xuc3RhcnREYXRlOlxuZW5kRGF0ZTpcbmxpbmU6XG4gICAgdGl0bGU6IFwiTGluZSBDaGFydFwiXG4gICAgeEF4aXNMYWJlbDogRGF0ZVxuICAgIHlBeGlzTGFiZWw6IFZhbHVlXG5cXGBcXGBcXGBgO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBHcmFwaFR5cGUuQmFyOlxuICAgICAgICAgICAgICAgIGNvZGVibG9ja1RvSW5zZXJ0ID0gYFxcYFxcYFxcYCB0cmFja2VyXG5zZWFyY2hUeXBlOiB0YWdcbnNlYXJjaFRhcmdldDogdGFnTmFtZVxuZm9sZGVyOiAvXG5zdGFydERhdGU6XG5lbmREYXRlOlxuYmFyOlxuICAgIHRpdGxlOiBcIkJhciBDaGFydFwiXG4gICAgeEF4aXNMYWJlbDogRGF0ZVxuICAgIHlBeGlzTGFiZWw6IFZhbHVlXG5cXGBcXGBcXGBgO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBHcmFwaFR5cGUuU3VtbWFyeTpcbiAgICAgICAgICAgICAgICBjb2RlYmxvY2tUb0luc2VydCA9IGBcXGBcXGBcXGAgdHJhY2tlclxuc2VhcmNoVHlwZTogdGFnXG5zZWFyY2hUYXJnZXQ6IHRhZ05hbWVcbmZvbGRlcjogL1xuc3RhcnREYXRlOlxuZW5kRGF0ZTpcbnN1bW1hcnk6XG4gICAgdGVtcGxhdGU6IFwiQXZlcmFnZSB2YWx1ZSBvZiB0YWdOYW1lIGlzIHt7YXZlcmFnZX19XCJcbiAgICBzdHlsZTogXCJjb2xvcjp3aGl0ZTtcIlxuXFxgXFxgXFxgYDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29kZWJsb2NrVG9JbnNlcnQgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGxldCB0ZXh0SW5zZXJ0ZWQgPSB0aGlzLmluc2VydFRvTmV4dExpbmUoY29kZWJsb2NrVG9JbnNlcnQpO1xuICAgICAgICAgICAgaWYgKCF0ZXh0SW5zZXJ0ZWQpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluc2VydFRvTmV4dExpbmUodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBlZGl0b3IgPSB0aGlzLmdldEVkaXRvcigpO1xuXG4gICAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgICAgIGxldCBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XG4gICAgICAgICAgICBsZXQgbGluZU51bWJlciA9IGN1cnNvci5saW5lO1xuICAgICAgICAgICAgbGV0IGxpbmUgPSBlZGl0b3IuZ2V0TGluZShsaW5lTnVtYmVyKTtcblxuICAgICAgICAgICAgY3Vyc29yLmNoID0gbGluZS5sZW5ndGg7XG4gICAgICAgICAgICBlZGl0b3Iuc2V0U2VsZWN0aW9uKGN1cnNvcik7XG4gICAgICAgICAgICBlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihcIlxcblwiICsgdGV4dCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInZhbHVlIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwiYXNjZW5kaW5nIiwiYSIsImIiLCJOYU4iLCJkZXNjZW5kaW5nIiwiYmlzZWN0b3IiLCJmIiwiY29tcGFyZTEiLCJjb21wYXJlMiIsImRlbHRhIiwibGVmdCIsIngiLCJsbyIsImhpIiwibGVuZ3RoIiwibWlkIiwiZCIsInplcm8iLCJjZW50ZXIiLCJpIiwicmlnaHQiLCJTdXBwcmVzc2VkRXJyb3IiLCJiaXNlY3RSaWdodCIsImJpc2VjdCIsIkludGVybk1hcCIsIk1hcCIsImNvbnN0cnVjdG9yIiwiZW50cmllcyIsImtleSIsImtleW9mIiwic3VwZXIiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0aWVzIiwidGhpcyIsIl9pbnRlcm4iLCJfa2V5Iiwic2V0IiwiZ2V0IiwiaW50ZXJuX2dldCIsImhhcyIsImludGVybl9zZXQiLCJkZWxldGUiLCJpbnRlcm5fZGVsZXRlIiwidmFsdWVPZiIsImFzY2VuZGluZ0RlZmluZWQiLCJlMTAiLCJNYXRoIiwic3FydCIsImU1IiwiZTIiLCJ0aWNrU3BlYyIsInN0YXJ0Iiwic3RvcCIsImNvdW50IiwibWF4IiwicG93ZXIiLCJmbG9vciIsImxvZzEwIiwiZXJyb3IiLCJwb3ciLCJmYWN0b3IiLCJpMSIsImkyIiwiaW5jIiwicm91bmQiLCJ0aWNrSW5jcmVtZW50IiwidGlja1N0ZXAiLCJyZXZlcnNlIiwidmFsdWVzIiwidmFsdWVvZiIsInVuZGVmaW5lZCIsImluZGV4IiwibWluIiwicXVpY2tzZWxlY3QiLCJhcnJheSIsImsiLCJJbmZpbml0eSIsImNvbXBhcmUiLCJUeXBlRXJyb3IiLCJjb21wYXJlRGVmaW5lZCIsIm4iLCJtIiwieiIsImxvZyIsInMiLCJleHAiLCJzZCIsInQiLCJqIiwic3dhcCIsIm1lZGlhbiIsInAiLCJGbG9hdDY0QXJyYXkiLCJmcm9tIiwibnVtYmVycyIsImlzTmFOIiwiaTAiLCJ2YWx1ZTAiLCJzdWJhcnJheSIsInF1YW50aWxlIiwicmFuZ2UiLCJhcmd1bWVudHMiLCJjZWlsIiwiQXJyYXkiLCJzdW0iLCJpZGVudGl0eSQ0IiwidG9wIiwiYm90dG9tIiwiZXBzaWxvbiIsInRyYW5zbGF0ZVgiLCJ0cmFuc2xhdGVZIiwieSIsIm51bWJlciIsInNjYWxlIiwib2Zmc2V0IiwiYmFuZHdpZHRoIiwiZW50ZXJpbmciLCJfX2F4aXMiLCJheGlzIiwib3JpZW50IiwidGlja0FyZ3VtZW50cyIsInRpY2tWYWx1ZXMiLCJ0aWNrRm9ybWF0IiwidGlja1NpemVJbm5lciIsInRpY2tTaXplT3V0ZXIiLCJ0aWNrUGFkZGluZyIsIndpbmRvdyIsImRldmljZVBpeGVsUmF0aW8iLCJ0cmFuc2Zvcm0iLCJjb250ZXh0IiwidGlja3MiLCJkb21haW4iLCJmb3JtYXQiLCJpZGVudGl0eSIsInNwYWNpbmciLCJyYW5nZTAiLCJyYW5nZTEiLCJwb3NpdGlvbiIsImNvcHkiLCJzZWxlY3Rpb24iLCJwYXRoIiwic2VsZWN0QWxsIiwiZGF0YSIsInRpY2siLCJvcmRlciIsInRpY2tFeGl0IiwiZXhpdCIsInRpY2tFbnRlciIsImVudGVyIiwiYXBwZW5kIiwiYXR0ciIsImxpbmUiLCJzZWxlY3QiLCJ0ZXh0IiwibWVyZ2UiLCJpbnNlcnQiLCJ0cmFuc2l0aW9uIiwiaXNGaW5pdGUiLCJnZXRBdHRyaWJ1dGUiLCJwYXJlbnROb2RlIiwicmVtb3ZlIiwiZmlsdGVyIiwiZWFjaCIsIl8iLCJzbGljZSIsInRpY2tTaXplIiwiYXhpc0JvdHRvbSIsImF4aXNMZWZ0Iiwibm9vcCIsImRpc3BhdGNoIiwidGVzdCIsIkVycm9yIiwiRGlzcGF0Y2giLCJ0eXBlIiwibmFtZSIsImMiLCJjYWxsYmFjayIsImNvbmNhdCIsInB1c2giLCJwcm90b3R5cGUiLCJvbiIsInR5cGVuYW1lIiwidHlwZXMiLCJUIiwidHJpbSIsInNwbGl0IiwibWFwIiwiaW5kZXhPZiIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInRoYXQiLCJhcmdzIiwieGh0bWwiLCJuYW1lc3BhY2VzIiwic3ZnIiwieGxpbmsiLCJ4bWwiLCJ4bWxucyIsIm5hbWVzcGFjZSIsInByZWZpeCIsInNwYWNlIiwibG9jYWwiLCJjcmVhdG9ySW5oZXJpdCIsImRvY3VtZW50Iiwib3duZXJEb2N1bWVudCIsInVyaSIsIm5hbWVzcGFjZVVSSSIsImRvY3VtZW50RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdG9yRml4ZWQiLCJmdWxsbmFtZSIsImNyZWF0b3IiLCJub25lIiwic2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiZW1wdHkiLCJzZWxlY3RvckFsbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJhcnJheUFsbCIsImlzQXJyYXkiLCJtYXRjaGVyIiwibWF0Y2hlcyIsImNoaWxkTWF0Y2hlciIsIm5vZGUiLCJmaW5kIiwiY2hpbGRGaXJzdCIsImZpcnN0RWxlbWVudENoaWxkIiwiY2hpbGRyZW4iLCJzcGFyc2UiLCJ1cGRhdGUiLCJFbnRlck5vZGUiLCJwYXJlbnQiLCJkYXR1bSIsIl9uZXh0IiwiX3BhcmVudCIsIl9fZGF0YV9fIiwiYmluZEluZGV4IiwiZ3JvdXAiLCJncm91cExlbmd0aCIsImRhdGFMZW5ndGgiLCJiaW5kS2V5Iiwia2V5VmFsdWUiLCJub2RlQnlLZXlWYWx1ZSIsImtleVZhbHVlcyIsImFycmF5bGlrZSIsImF0dHJSZW1vdmUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJhdHRyUmVtb3ZlTlMiLCJyZW1vdmVBdHRyaWJ1dGVOUyIsImF0dHJDb25zdGFudCIsInNldEF0dHJpYnV0ZSIsImF0dHJDb25zdGFudE5TIiwic2V0QXR0cmlidXRlTlMiLCJhdHRyRnVuY3Rpb24iLCJ2IiwiYXR0ckZ1bmN0aW9uTlMiLCJkZWZhdWx0VmlldyIsInN0eWxlUmVtb3ZlIiwic3R5bGUiLCJyZW1vdmVQcm9wZXJ0eSIsInN0eWxlQ29uc3RhbnQiLCJwcmlvcml0eSIsInNldFByb3BlcnR5Iiwic3R5bGVGdW5jdGlvbiIsInN0eWxlVmFsdWUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInByb3BlcnR5UmVtb3ZlIiwicHJvcGVydHlDb25zdGFudCIsInByb3BlcnR5RnVuY3Rpb24iLCJjbGFzc0FycmF5Iiwic3RyaW5nIiwiY2xhc3NMaXN0IiwiQ2xhc3NMaXN0IiwiX25vZGUiLCJfbmFtZXMiLCJjbGFzc2VkQWRkIiwibmFtZXMiLCJsaXN0IiwiYWRkIiwiY2xhc3NlZFJlbW92ZSIsImNsYXNzZWRUcnVlIiwiY2xhc3NlZEZhbHNlIiwiY2xhc3NlZEZ1bmN0aW9uIiwidGV4dFJlbW92ZSIsInRleHRDb250ZW50IiwidGV4dENvbnN0YW50IiwidGV4dEZ1bmN0aW9uIiwiaHRtbFJlbW92ZSIsImlubmVySFRNTCIsImh0bWxDb25zdGFudCIsImh0bWxGdW5jdGlvbiIsInJhaXNlIiwibmV4dFNpYmxpbmciLCJhcHBlbmRDaGlsZCIsImxvd2VyIiwicHJldmlvdXNTaWJsaW5nIiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsImNvbnN0YW50TnVsbCIsInJlbW92ZUNoaWxkIiwic2VsZWN0aW9uX2Nsb25lU2hhbGxvdyIsImNsb25lIiwiY2xvbmVOb2RlIiwic2VsZWN0aW9uX2Nsb25lRGVlcCIsIm9uUmVtb3ZlIiwiX19vbiIsIm8iLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuZXIiLCJvcHRpb25zIiwib25BZGQiLCJldmVudCIsImNvbnRleHRMaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJkaXNwYXRjaEV2ZW50IiwicGFyYW1zIiwiQ3VzdG9tRXZlbnQiLCJjcmVhdGVFdmVudCIsImluaXRFdmVudCIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwiZGV0YWlsIiwiZGlzcGF0Y2hDb25zdGFudCIsImRpc3BhdGNoRnVuY3Rpb24iLCJjaGlsZCIsImpvaW4iLCJzcGxpY2UiLCJjb250YWlucyIsInJvb3QiLCJTZWxlY3Rpb24iLCJncm91cHMiLCJwYXJlbnRzIiwiX2dyb3VwcyIsIl9wYXJlbnRzIiwiZGVmaW5lIiwiZmFjdG9yeSIsImV4dGVuZCIsImRlZmluaXRpb24iLCJjcmVhdGUiLCJDb2xvciIsInN1Ymdyb3VwcyIsInN1Ym5vZGUiLCJzdWJncm91cCIsInNlbGVjdENoaWxkIiwibWF0Y2giLCJjaGlsZEZpbmQiLCJzZWxlY3RDaGlsZHJlbiIsImNoaWxkcmVuRmlsdGVyIiwiYmluZCIsImNvbnN0YW50IiwiZW50ZXJHcm91cCIsInVwZGF0ZUdyb3VwIiwicHJldmlvdXMiLCJfZW50ZXIiLCJfZXhpdCIsIm9uZW50ZXIiLCJvbnVwZGF0ZSIsIm9uZXhpdCIsImdyb3VwczAiLCJncm91cHMxIiwibTAiLCJtMSIsIm1lcmdlcyIsImdyb3VwMCIsImdyb3VwMSIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwic29ydCIsImNvbXBhcmVOb2RlIiwic29ydGdyb3VwcyIsInNvcnRncm91cCIsIm5vZGVzIiwic2l6ZSIsImdldEF0dHJpYnV0ZU5TIiwicHJvcGVydHkiLCJjbGFzc2VkIiwiaHRtbCIsImJlZm9yZSIsImRlZXAiLCJ0eXBlbmFtZXMiLCJwYXJzZVR5cGVuYW1lcyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZGFya2VyIiwiYnJpZ2h0ZXIiLCJyZUkiLCJyZU4iLCJyZVAiLCJyZUhleCIsInJlUmdiSW50ZWdlciIsIlJlZ0V4cCIsInJlUmdiUGVyY2VudCIsInJlUmdiYUludGVnZXIiLCJyZVJnYmFQZXJjZW50IiwicmVIc2xQZXJjZW50IiwicmVIc2xhUGVyY2VudCIsIm5hbWVkIiwiYWxpY2VibHVlIiwiYW50aXF1ZXdoaXRlIiwiYXF1YSIsImFxdWFtYXJpbmUiLCJhenVyZSIsImJlaWdlIiwiYmlzcXVlIiwiYmxhY2siLCJibGFuY2hlZGFsbW9uZCIsImJsdWUiLCJibHVldmlvbGV0IiwiYnJvd24iLCJidXJseXdvb2QiLCJjYWRldGJsdWUiLCJjaGFydHJldXNlIiwiY2hvY29sYXRlIiwiY29yYWwiLCJjb3JuZmxvd2VyYmx1ZSIsImNvcm5zaWxrIiwiY3JpbXNvbiIsImN5YW4iLCJkYXJrYmx1ZSIsImRhcmtjeWFuIiwiZGFya2dvbGRlbnJvZCIsImRhcmtncmF5IiwiZGFya2dyZWVuIiwiZGFya2dyZXkiLCJkYXJra2hha2kiLCJkYXJrbWFnZW50YSIsImRhcmtvbGl2ZWdyZWVuIiwiZGFya29yYW5nZSIsImRhcmtvcmNoaWQiLCJkYXJrcmVkIiwiZGFya3NhbG1vbiIsImRhcmtzZWFncmVlbiIsImRhcmtzbGF0ZWJsdWUiLCJkYXJrc2xhdGVncmF5IiwiZGFya3NsYXRlZ3JleSIsImRhcmt0dXJxdW9pc2UiLCJkYXJrdmlvbGV0IiwiZGVlcHBpbmsiLCJkZWVwc2t5Ymx1ZSIsImRpbWdyYXkiLCJkaW1ncmV5IiwiZG9kZ2VyYmx1ZSIsImZpcmVicmljayIsImZsb3JhbHdoaXRlIiwiZm9yZXN0Z3JlZW4iLCJmdWNoc2lhIiwiZ2FpbnNib3JvIiwiZ2hvc3R3aGl0ZSIsImdvbGQiLCJnb2xkZW5yb2QiLCJncmF5IiwiZ3JlZW4iLCJncmVlbnllbGxvdyIsImdyZXkiLCJob25leWRldyIsImhvdHBpbmsiLCJpbmRpYW5yZWQiLCJpbmRpZ28iLCJpdm9yeSIsImtoYWtpIiwibGF2ZW5kZXIiLCJsYXZlbmRlcmJsdXNoIiwibGF3bmdyZWVuIiwibGVtb25jaGlmZm9uIiwibGlnaHRibHVlIiwibGlnaHRjb3JhbCIsImxpZ2h0Y3lhbiIsImxpZ2h0Z29sZGVucm9keWVsbG93IiwibGlnaHRncmF5IiwibGlnaHRncmVlbiIsImxpZ2h0Z3JleSIsImxpZ2h0cGluayIsImxpZ2h0c2FsbW9uIiwibGlnaHRzZWFncmVlbiIsImxpZ2h0c2t5Ymx1ZSIsImxpZ2h0c2xhdGVncmF5IiwibGlnaHRzbGF0ZWdyZXkiLCJsaWdodHN0ZWVsYmx1ZSIsImxpZ2h0eWVsbG93IiwibGltZSIsImxpbWVncmVlbiIsImxpbmVuIiwibWFnZW50YSIsIm1hcm9vbiIsIm1lZGl1bWFxdWFtYXJpbmUiLCJtZWRpdW1ibHVlIiwibWVkaXVtb3JjaGlkIiwibWVkaXVtcHVycGxlIiwibWVkaXVtc2VhZ3JlZW4iLCJtZWRpdW1zbGF0ZWJsdWUiLCJtZWRpdW1zcHJpbmdncmVlbiIsIm1lZGl1bXR1cnF1b2lzZSIsIm1lZGl1bXZpb2xldHJlZCIsIm1pZG5pZ2h0Ymx1ZSIsIm1pbnRjcmVhbSIsIm1pc3R5cm9zZSIsIm1vY2Nhc2luIiwibmF2YWpvd2hpdGUiLCJuYXZ5Iiwib2xkbGFjZSIsIm9saXZlIiwib2xpdmVkcmFiIiwib3JhbmdlIiwib3JhbmdlcmVkIiwib3JjaGlkIiwicGFsZWdvbGRlbnJvZCIsInBhbGVncmVlbiIsInBhbGV0dXJxdW9pc2UiLCJwYWxldmlvbGV0cmVkIiwicGFwYXlhd2hpcCIsInBlYWNocHVmZiIsInBlcnUiLCJwaW5rIiwicGx1bSIsInBvd2RlcmJsdWUiLCJwdXJwbGUiLCJyZWJlY2NhcHVycGxlIiwicmVkIiwicm9zeWJyb3duIiwicm95YWxibHVlIiwic2FkZGxlYnJvd24iLCJzYWxtb24iLCJzYW5keWJyb3duIiwic2VhZ3JlZW4iLCJzZWFzaGVsbCIsInNpZW5uYSIsInNpbHZlciIsInNreWJsdWUiLCJzbGF0ZWJsdWUiLCJzbGF0ZWdyYXkiLCJzbGF0ZWdyZXkiLCJzbm93Iiwic3ByaW5nZ3JlZW4iLCJzdGVlbGJsdWUiLCJ0YW4iLCJ0ZWFsIiwidGhpc3RsZSIsInRvbWF0byIsInR1cnF1b2lzZSIsInZpb2xldCIsIndoZWF0Iiwid2hpdGUiLCJ3aGl0ZXNtb2tlIiwieWVsbG93IiwieWVsbG93Z3JlZW4iLCJjb2xvcl9mb3JtYXRIZXgiLCJyZ2IiLCJmb3JtYXRIZXgiLCJjb2xvcl9mb3JtYXRSZ2IiLCJmb3JtYXRSZ2IiLCJjb2xvciIsImwiLCJ0b0xvd2VyQ2FzZSIsImV4ZWMiLCJwYXJzZUludCIsInJnYm4iLCJSZ2IiLCJyZ2JhIiwiaHNsYSIsInIiLCJnIiwicmdiQ29udmVydCIsIm9wYWNpdHkiLCJyZ2JfZm9ybWF0SGV4IiwiaGV4IiwicmdiX2Zvcm1hdFJnYiIsImNsYW1wYSIsImNsYW1waSIsInRvU3RyaW5nIiwiaCIsIkhzbCIsImhzbENvbnZlcnQiLCJjbGFtcGgiLCJjbGFtcHQiLCJoc2wycmdiIiwibTIiLCJjaGFubmVscyIsImFzc2lnbiIsImRpc3BsYXlhYmxlIiwiZm9ybWF0SGV4OCIsImZvcm1hdEhzbCIsImNsYW1wIiwicmFkaWFucyIsIlBJIiwiZGVncmVlcyIsIlhuIiwiWW4iLCJabiIsInQwIiwidDEiLCJ0MiIsInQzIiwibGFiQ29udmVydCIsIkxhYiIsIkhjbCIsImhjbDJsYWIiLCJyZ2IybHJnYiIsInh5ejJsYWIiLCJsYWIiLCJsYWIyeHl6IiwibHJnYjJyZ2IiLCJjb3MiLCJzaW4iLCJhdGFuMiIsImhjbENvbnZlcnQiLCJjb25zdGFudCQxIiwiZ2FtbWEiLCJub2dhbW1hIiwiZXhwb25lbnRpYWwiLCJsaW5lYXIiLCJpbnRlcnBvbGF0ZVJnYiIsInJnYkdhbW1hIiwiZW5kIiwiY29sb3JSZ2IiLCJzcGxpbmUiLCJyZ2JCYXNpcyIsInYxIiwidjIiLCJ2MCIsInYzIiwiYmFzaXMiLCJjb2xvcnMiLCJudW1iZXJBcnJheSIsImdlbmVyaWNBcnJheSIsIm5iIiwibmEiLCJkYXRlJDEiLCJEYXRlIiwic2V0VGltZSIsImludGVycG9sYXRlTnVtYmVyIiwib2JqZWN0IiwicmVBIiwicmVCIiwic291cmNlIiwiaW50ZXJwb2xhdGVTdHJpbmciLCJhbSIsImJtIiwiYnMiLCJiaSIsImxhc3RJbmRleCIsInEiLCJvbmUiLCJpbnRlcnBvbGF0ZSQxIiwiZGF0ZSIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiRGF0YVZpZXciLCJpc051bWJlckFycmF5IiwiaW50ZXJwb2xhdGVSb3VuZCIsInN2Z05vZGUiLCJyb3RhdGUiLCJza2V3WCIsInNjYWxlWCIsInNjYWxlWSIsImRlY29tcG9zZSIsImF0YW4iLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybSIsInBhcnNlIiwicHhDb21tYSIsInB4UGFyZW4iLCJkZWdQYXJlbiIsInBvcCIsInhhIiwieWEiLCJ4YiIsInliIiwidHJhbnNsYXRlIiwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MiLCJET01NYXRyaXgiLCJXZWJLaXRDU1NNYXRyaXgiLCJpc0lkZW50aXR5IiwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmciLCJiYXNlVmFsIiwiY29uc29saWRhdGUiLCJtYXRyaXgiLCJjb2xvckxhYiIsInRhc2tIZWFkIiwidGFza1RhaWwiLCJmcmFtZSIsInRpbWVvdXQiLCJpbnRlcnZhbCIsInBva2VEZWxheSIsImNsb2NrTGFzdCIsImNsb2NrTm93IiwiY2xvY2tTa2V3IiwiY2xvY2siLCJwZXJmb3JtYW5jZSIsIm5vdyIsInNldEZyYW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2V0VGltZW91dCIsImNsZWFyTm93IiwiVGltZXIiLCJfY2FsbCIsIl90aW1lIiwidGltZXIiLCJkZWxheSIsInRpbWUiLCJyZXN0YXJ0Iiwid2FrZSIsInRpbWVyRmx1c2giLCJzbGVlcCIsIm5hcCIsInBva2UiLCJjbGVhclRpbWVvdXQiLCJjbGVhckludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJlbGFwc2VkIiwiZW1wdHlPbiIsImVtcHR5VHdlZW4iLCJDUkVBVEVEIiwiU0NIRURVTEVEIiwiU1RBUlRJTkciLCJTVEFSVEVEIiwiUlVOTklORyIsIkVORElORyIsIkVOREVEIiwic2NoZWR1bGUiLCJpZCIsInRpbWluZyIsInNjaGVkdWxlcyIsIl9fdHJhbnNpdGlvbiIsInNlbGYiLCJ0d2VlbiIsInN0YXRlIiwiZHVyYXRpb24iLCJlYXNlIiwiaW5pdCIsInR3ZWVuUmVtb3ZlIiwidHdlZW4wIiwidHdlZW4xIiwidHdlZW5GdW5jdGlvbiIsInR3ZWVuVmFsdWUiLCJfaWQiLCJpbnRlcnBvbGF0ZSIsInZhbHVlMSIsInN0cmluZzAwIiwiaW50ZXJwb2xhdGUwIiwic3RyaW5nMSIsInN0cmluZzAiLCJzdHJpbmcxMCIsImF0dHJUd2Vlbk5TIiwiYXR0ckludGVycG9sYXRlTlMiLCJfdmFsdWUiLCJhdHRyVHdlZW4iLCJhdHRySW50ZXJwb2xhdGUiLCJkZWxheUZ1bmN0aW9uIiwiZGVsYXlDb25zdGFudCIsImR1cmF0aW9uRnVuY3Rpb24iLCJkdXJhdGlvbkNvbnN0YW50IiwiVHJhbnNpdGlvbiIsIl9uYW1lIiwibmV3SWQiLCJzZWxlY3Rpb25fcHJvdG90eXBlIiwiaW5oZXJpdCIsImlkMCIsImlkMSIsIm9uMCIsIm9uMSIsInNpdCIsImV2ZXJ5Iiwib25GdW5jdGlvbiIsInN0eWxlVHdlZW4iLCJzdHlsZU51bGwiLCJsaXN0ZW5lcjAiLCJzdHlsZU1heWJlUmVtb3ZlIiwic3R5bGVJbnRlcnBvbGF0ZSIsInRleHRUd2VlbiIsInRleHRJbnRlcnBvbGF0ZSIsInJlbW92ZUZ1bmN0aW9uIiwiZWFzZUNvbnN0YW50IiwiZWFzZVZhcnlpbmciLCJjYW5jZWwiLCJpbnRlcnJ1cHQiLCJkZWZhdWx0VGltaW5nIiwiYWN0aXZlIiwicGkiLCJ0YXUiLCJ0YXVFcHNpbG9uIiwic3RyaW5ncyIsIlBhdGgiLCJkaWdpdHMiLCJfeDAiLCJfeTAiLCJfeDEiLCJfeTEiLCJfYXBwZW5kIiwiYXBwZW5kUm91bmQiLCJtb3ZlVG8iLCJjbG9zZVBhdGgiLCJsaW5lVG8iLCJxdWFkcmF0aWNDdXJ2ZVRvIiwieDEiLCJ5MSIsImJlemllckN1cnZlVG8iLCJ4MiIsInkyIiwiYXJjVG8iLCJ4MCIsInkwIiwieDIxIiwieTIxIiwieDAxIiwieTAxIiwibDAxXzIiLCJhYnMiLCJ4MjAiLCJ5MjAiLCJsMjFfMiIsImwyMF8yIiwibDIxIiwibDAxIiwiYWNvcyIsInQwMSIsInQyMSIsImFyYyIsImEwIiwiYTEiLCJjY3ciLCJkeCIsImR5IiwiY3ciLCJkYSIsInJlY3QiLCJ3IiwiZm9ybWF0RGVjaW1hbFBhcnRzIiwidG9FeHBvbmVudGlhbCIsImNvZWZmaWNpZW50IiwiZXhwb25lbnQiLCJwcmVmaXhFeHBvbmVudCIsInJlIiwiZm9ybWF0U3BlY2lmaWVyIiwic3BlY2lmaWVyIiwiRm9ybWF0U3BlY2lmaWVyIiwiZmlsbCIsImFsaWduIiwic2lnbiIsInN5bWJvbCIsIndpZHRoIiwiY29tbWEiLCJwcmVjaXNpb24iLCJmb3JtYXRSb3VuZGVkIiwiZm9ybWF0VHlwZXMiLCJ0b0ZpeGVkIiwidG9Mb2NhbGVTdHJpbmciLCJyZXBsYWNlIiwidG9QcmVjaXNpb24iLCJYIiwidG9VcHBlckNhc2UiLCJpZGVudGl0eSQyIiwibG9jYWxlIiwiZm9ybWF0UHJlZml4IiwicHJlZml4ZXMiLCJmb3JtYXRMb2NhbGUkMSIsImdyb3VwaW5nIiwidGhvdXNhbmRzIiwiTnVtYmVyIiwic3Vic3RyaW5nIiwiY3VycmVuY3lQcmVmaXgiLCJjdXJyZW5jeSIsImN1cnJlbmN5U3VmZml4IiwiZGVjaW1hbCIsIm51bWVyYWxzIiwiZm9ybWF0TnVtZXJhbHMiLCJTdHJpbmciLCJwZXJjZW50IiwibWludXMiLCJuYW4iLCJuZXdGb3JtYXQiLCJzdWZmaXgiLCJmb3JtYXRUeXBlIiwibWF5YmVTdWZmaXgiLCJ2YWx1ZVByZWZpeCIsInZhbHVlU3VmZml4IiwidmFsdWVOZWdhdGl2ZSIsIm91dCIsImZvcm1hdFRyaW0iLCJjaGFyQ29kZUF0IiwicGFkZGluZyIsImluaXRSYW5nZSIsImZvcm1hdExvY2FsZSIsImltcGxpY2l0Iiwib3JkaW5hbCIsInVua25vd24iLCJ1bml0Iiwibm9ybWFsaXplIiwiYmltYXAiLCJkMCIsImQxIiwicjAiLCJyMSIsInBvbHltYXAiLCJ0YXJnZXQiLCJ0cmFuc2Zvcm1lciIsInVudHJhbnNmb3JtIiwicGllY2V3aXNlIiwib3V0cHV0IiwiaW5wdXQiLCJpbnRlcnBvbGF0ZVZhbHVlIiwicmVzY2FsZSIsImludmVydCIsInJhbmdlUm91bmQiLCJ1IiwiY29udGludW91cyIsInByZWNpc2lvblByZWZpeCIsInByZWNpc2lvblJvdW5kIiwicHJlY2lzaW9uRml4ZWQiLCJsaW5lYXJpc2giLCJuaWNlIiwicHJlc3RlcCIsIm1heEl0ZXIiLCJ0aW1lSW50ZXJ2YWwiLCJmbG9vcmkiLCJvZmZzZXRpIiwiZmllbGQiLCJtaWxsaXNlY29uZCIsImR1cmF0aW9uU2Vjb25kIiwiZHVyYXRpb25NaW51dGUiLCJkdXJhdGlvbkhvdXIiLCJkdXJhdGlvbkRheSIsImR1cmF0aW9uV2VlayIsImR1cmF0aW9uTW9udGgiLCJkdXJhdGlvblllYXIiLCJzZWNvbmQiLCJnZXRNaWxsaXNlY29uZHMiLCJnZXRVVENTZWNvbmRzIiwidGltZU1pbnV0ZSIsImdldFNlY29uZHMiLCJnZXRNaW51dGVzIiwidXRjTWludXRlIiwic2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbnV0ZXMiLCJ0aW1lSG91ciIsImdldEhvdXJzIiwidXRjSG91ciIsInNldFVUQ01pbnV0ZXMiLCJnZXRVVENIb3VycyIsInRpbWVEYXkiLCJzZXRIb3VycyIsInNldERhdGUiLCJnZXREYXRlIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJ1dGNEYXkiLCJzZXRVVENIb3VycyIsInNldFVUQ0RhdGUiLCJnZXRVVENEYXRlIiwidW5peERheSIsInRpbWVXZWVrZGF5IiwiZ2V0RGF5IiwidGltZVN1bmRheSIsInRpbWVNb25kYXkiLCJ0aW1lVHVlc2RheSIsInRpbWVXZWRuZXNkYXkiLCJ0aW1lVGh1cnNkYXkiLCJ0aW1lRnJpZGF5IiwidGltZVNhdHVyZGF5IiwidXRjV2Vla2RheSIsImdldFVUQ0RheSIsInV0Y1N1bmRheSIsInV0Y01vbmRheSIsInV0Y1R1ZXNkYXkiLCJ1dGNXZWRuZXNkYXkiLCJ1dGNUaHVyc2RheSIsInV0Y0ZyaWRheSIsInV0Y1NhdHVyZGF5IiwidGltZU1vbnRoIiwic2V0TW9udGgiLCJnZXRNb250aCIsImdldEZ1bGxZZWFyIiwidXRjTW9udGgiLCJzZXRVVENNb250aCIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRnVsbFllYXIiLCJ0aW1lWWVhciIsInNldEZ1bGxZZWFyIiwidXRjWWVhciIsInNldFVUQ0Z1bGxZZWFyIiwidGltZVRpY2tzIiwidGltZVRpY2tJbnRlcnZhbCIsInllYXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwidGlja0ludGVydmFscyIsInRpY2tJbnRlcnZhbCIsInRpY2tlciIsImxvY2FsRGF0ZSIsIkgiLCJNIiwiUyIsIkwiLCJ1dGNEYXRlIiwiVVRDIiwibmV3RGF0ZSIsInRpbWVGb3JtYXQiLCJwYWRzIiwibnVtYmVyUmUiLCJwZXJjZW50UmUiLCJyZXF1b3RlUmUiLCJwYWQiLCJyZXF1b3RlIiwiZm9ybWF0UmUiLCJmb3JtYXRMb29rdXAiLCJwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXkiLCJwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXkiLCJwYXJzZVdlZWtOdW1iZXJTdW5kYXkiLCJVIiwicGFyc2VXZWVrTnVtYmVySVNPIiwiViIsInBhcnNlV2Vla051bWJlck1vbmRheSIsIlciLCJwYXJzZUZ1bGxZZWFyIiwicGFyc2VZZWFyIiwicGFyc2Vab25lIiwiWiIsInBhcnNlUXVhcnRlciIsInBhcnNlTW9udGhOdW1iZXIiLCJwYXJzZURheU9mTW9udGgiLCJwYXJzZURheU9mWWVhciIsInBhcnNlSG91cjI0IiwicGFyc2VNaW51dGVzIiwicGFyc2VTZWNvbmRzIiwicGFyc2VNaWxsaXNlY29uZHMiLCJwYXJzZU1pY3Jvc2Vjb25kcyIsInBhcnNlTGl0ZXJhbFBlcmNlbnQiLCJwYXJzZVVuaXhUaW1lc3RhbXAiLCJRIiwicGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyIsImZvcm1hdERheU9mTW9udGgiLCJmb3JtYXRIb3VyMjQiLCJmb3JtYXRIb3VyMTIiLCJmb3JtYXREYXlPZlllYXIiLCJmb3JtYXRNaWxsaXNlY29uZHMiLCJmb3JtYXRNaWNyb3NlY29uZHMiLCJmb3JtYXRNb250aE51bWJlciIsImZvcm1hdE1pbnV0ZXMiLCJmb3JtYXRTZWNvbmRzIiwiZm9ybWF0V2Vla2RheU51bWJlck1vbmRheSIsImZvcm1hdFdlZWtOdW1iZXJTdW5kYXkiLCJkSVNPIiwiZm9ybWF0V2Vla051bWJlcklTTyIsImZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkiLCJmb3JtYXRXZWVrTnVtYmVyTW9uZGF5IiwiZm9ybWF0WWVhciIsImZvcm1hdFllYXJJU08iLCJmb3JtYXRGdWxsWWVhciIsImZvcm1hdEZ1bGxZZWFySVNPIiwiZm9ybWF0Wm9uZSIsImZvcm1hdFVUQ0RheU9mTW9udGgiLCJmb3JtYXRVVENIb3VyMjQiLCJmb3JtYXRVVENIb3VyMTIiLCJmb3JtYXRVVENEYXlPZlllYXIiLCJmb3JtYXRVVENNaWxsaXNlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJmb3JtYXRVVENNaWNyb3NlY29uZHMiLCJmb3JtYXRVVENNb250aE51bWJlciIsImZvcm1hdFVUQ01pbnV0ZXMiLCJmb3JtYXRVVENTZWNvbmRzIiwiZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheSIsImRvdyIsImZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXkiLCJVVENkSVNPIiwiZm9ybWF0VVRDV2Vla051bWJlcklTTyIsImZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXkiLCJmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5IiwiZm9ybWF0VVRDWWVhciIsImZvcm1hdFVUQ1llYXJJU08iLCJmb3JtYXRVVENGdWxsWWVhciIsImZvcm1hdFVUQ0Z1bGxZZWFySVNPIiwiZm9ybWF0VVRDWm9uZSIsImZvcm1hdExpdGVyYWxQZXJjZW50IiwiZm9ybWF0VW5peFRpbWVzdGFtcCIsImZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzIiwiY2FsZW5kYXIiLCJmb3JtYXRNaWxsaXNlY29uZCIsImZvcm1hdFNlY29uZCIsImZvcm1hdE1pbnV0ZSIsImZvcm1hdEhvdXIiLCJmb3JtYXREYXkiLCJmb3JtYXRXZWVrIiwiZm9ybWF0TW9udGgiLCJ0aW1lV2VlayIsInRpbWVTZWNvbmQiLCJsb2NhbGVfZGF0ZVRpbWUiLCJkYXRlVGltZSIsImxvY2FsZV9kYXRlIiwibG9jYWxlX3RpbWUiLCJsb2NhbGVfcGVyaW9kcyIsInBlcmlvZHMiLCJsb2NhbGVfd2Vla2RheXMiLCJkYXlzIiwibG9jYWxlX3Nob3J0V2Vla2RheXMiLCJzaG9ydERheXMiLCJsb2NhbGVfbW9udGhzIiwibW9udGhzIiwibG9jYWxlX3Nob3J0TW9udGhzIiwic2hvcnRNb250aHMiLCJwZXJpb2RSZSIsInBlcmlvZExvb2t1cCIsIndlZWtkYXlSZSIsIndlZWtkYXlMb29rdXAiLCJzaG9ydFdlZWtkYXlSZSIsInNob3J0V2Vla2RheUxvb2t1cCIsIm1vbnRoUmUiLCJtb250aExvb2t1cCIsInNob3J0TW9udGhSZSIsInNob3J0TW9udGhMb29rdXAiLCJmb3JtYXRzIiwiQSIsIkIiLCJHIiwiSSIsIlkiLCJ1dGNGb3JtYXRzIiwicGFyc2VzIiwicGFyc2VTcGVjaWZpZXIiLCJjaGFyQXQiLCJuZXdQYXJzZSIsInV0Y0Zvcm1hdCIsInV0Y1BhcnNlIiwiZGVmYXVsdExvY2FsZSIsInNjaGVtZSIsImludGVycG9sYXRlUmdiQmFzaXMiLCJyYW1wIiwiaGFsZlBpIiwiYXNpbiIsIndpdGhQYXRoIiwic2hhcGUiLCJSYW5nZUVycm9yIiwiYXJjSW5uZXJSYWRpdXMiLCJpbm5lclJhZGl1cyIsImFyY091dGVyUmFkaXVzIiwib3V0ZXJSYWRpdXMiLCJhcmNTdGFydEFuZ2xlIiwic3RhcnRBbmdsZSIsImFyY0VuZEFuZ2xlIiwiZW5kQW5nbGUiLCJhcmNQYWRBbmdsZSIsInBhZEFuZ2xlIiwiY29ybmVyVGFuZ2VudHMiLCJyYyIsIm94Iiwib3kiLCJ4MTEiLCJ5MTEiLCJ4MTAiLCJ5MTAiLCJ4MDAiLCJ5MDAiLCJkMiIsIkQiLCJjeDAiLCJjeTAiLCJjeDEiLCJjeTEiLCJkeDAiLCJkeTAiLCJkeDEiLCJkeTEiLCJjeCIsImN5IiwiY29ybmVyUmFkaXVzIiwicGFkUmFkaXVzIiwiYnVmZmVyIiwiYTAxIiwiYTExIiwiYTAwIiwiYTEwIiwiZGEwIiwiZGExIiwiYXAiLCJycCIsInJjMCIsInJjMSIsInAwIiwicDEiLCJvYyIsIngzIiwieTMiLCJ4MzIiLCJ5MzIiLCJpbnRlcnNlY3QiLCJheCIsImF5IiwiYngiLCJieSIsImtjIiwibGMiLCJjZW50cm9pZCIsIkxpbmVhciIsIl9jb250ZXh0IiwiY3VydmVMaW5lYXIiLCJUcmFuc2Zvcm0iLCJTZWFyY2hUeXBlIiwiR3JhcGhUeXBlIiwiVmFsdWVUeXBlIiwiYXJlYVN0YXJ0IiwiX2xpbmUiLCJhcmVhRW5kIiwibGluZVN0YXJ0IiwiX3BvaW50IiwibGluZUVuZCIsInBvaW50IiwiYXBwbHlYIiwiYXBwbHlZIiwibG9jYXRpb24iLCJpbnZlcnRYIiwiaW52ZXJ0WSIsInJlc2NhbGVYIiwicmVzY2FsZVkiLCJEYXRhUG9pbnQiLCJRdWVyeSIsInNlYXJjaFR5cGUiLCJzZWFyY2hUYXJnZXQiLCJzZXBhcmF0b3IiLCJhY2Nlc3NvciIsImFjY2Vzc29yMSIsImFjY2Vzc29yMiIsInZhbHVlVHlwZSIsInVzZWRBc1hEYXRhc2V0IiwibnVtVGFyZ2V0cyIsIlRhYmxlIiwicmVnZXgiLCJwYXJzZUZsb2F0IiwiaXNOdW1iZXIiLCJwYXJlbnRUYXJnZXQiLCJlcXVhbFRvIiwib3RoZXIiLCJnZXRUeXBlIiwiZ2V0VGFyZ2V0IiwiZ2V0UGFyZW50VGFyZ2V0IiwiZ2V0SWQiLCJnZXRBY2Nlc3NvciIsInNldFNlcGFyYXRvciIsInNlcCIsImdldFNlcGFyYXRvciIsImlzRm9yRnJvbnRtYXR0ZXJUYWdzIiwiYWRkTnVtVGFyZ2V0cyIsIm51bSIsImdldE51bVRhcmdldHMiLCJEYXRhc2V0IiwicXVlcnkiLCJjdXJyZW50SW5kZXgiLCJ5TWluIiwieU1heCIsInN0YXJ0RGF0ZSIsImVuZERhdGUiLCJsaW5lSW5mbyIsImJhckluZm8iLCJpc1RtcERhdGFzZXQiLCJpbmQiLCJnZXREYXRlcyIsImNsb25lVG9UbXBEYXRhc2V0IiwidG1wRGF0YXNldCIsImdldE5hbWUiLCJzZXROYW1lIiwic2V0SWQiLCJnZXRWYWx1ZSIsImRheVNoaWZ0IiwiZ2V0SW5kZXhPZkRhdGUiLCJzZXRWYWx1ZSIsInJlY2FsY3VsYXRlTWluTWF4IiwiZ2V0WU1pbiIsImdldFlNYXgiLCJnZXRTdGFydERhdGUiLCJnZXRFbmREYXRlIiwic2hpZnQiLCJzaGlmdEFtb3VudCIsImRvTGFyZ2VydGhhbiIsImFueVNoaWZ0ZWQiLCJzZXRQZW5hbHR5IiwicGVuYWx0eSIsImdldFF1ZXJ5IiwiYWNjdW11bGF0ZVZhbHVlcyIsImFjY3VtVmFsdWUiLCJnZXRWYWx1ZXMiLCJnZXRMZW5ndGgiLCJnZXRMZW5ndGhOb3ROdWxsIiwiY291bnROb3ROdWxsIiwiRGF0YXNldHMiLCJkYXRlcyIsImRhdGFzZXRzIiwiZGF0ZUZvcm1hdCIsImNyZWF0aW9uRGF0YSIsImN1ckRhdGUiLCJtb21lbnQiLCJjcmVhdGVEYXRhc2V0IiwicmVuZGVySW5mbyIsImRhdGFzZXQiLCJkYXRhc2V0TmFtZSIsImdldERhdGFzZXRCeVF1ZXJ5IiwiZ2V0RGF0YXNldEJ5SWQiLCJnZXRYRGF0YXNldElkcyIsImlkcyIsImluY2x1ZGVzIiwiZ2V0TmFtZXMiLCJSZW5kZXJJbmZvIiwicXVlcmllcyIsInhEYXRhc2V0IiwiZm9sZGVyIiwiZmlsZSIsInNwZWNpZmllZEZpbGVzT25seSIsImZpbGVDb250YWluc0xpbmtlZEZpbGVzIiwiZmlsZU11bHRpcGxpZXJBZnRlckxpbmsiLCJkYXRlRm9ybWF0UHJlZml4IiwiZGF0ZUZvcm1hdFN1ZmZpeCIsImNvbnN0VmFsdWUiLCJpZ25vcmVBdHRhY2hlZFZhbHVlIiwiaWdub3JlWmVyb1ZhbHVlIiwiYWNjdW0iLCJ2YWx1ZVNoaWZ0Iiwic2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuIiwidGV4dFZhbHVlTWFwIiwiZGF0YUFyZWFTaXplIiwiU2l6ZSIsImFzcGVjdFJhdGlvIiwiQXNwZWN0UmF0aW8iLCJtYXJnaW4iLCJNYXJnaW4iLCJmaXhlZFNjYWxlIiwiZml0UGFuZWxXaWR0aCIsImJhciIsInBpZSIsInN1bW1hcnkiLCJoZWF0bWFwIiwiYnVsbGV0IiwiY3VzdG9tRGF0YXNldCIsImdldFF1ZXJ5QnlJZCIsIkN1c3RvbURhdGFzZXRJbmZvIiwieERhdGEiLCJ5RGF0YSIsIkNvbW1vbkNoYXJ0SW5mbyIsInRpdGxlIiwieEF4aXNMYWJlbCIsInhBeGlzQ29sb3IiLCJ4QXhpc0xhYmVsQ29sb3IiLCJ5QXhpc0xhYmVsIiwieUF4aXNDb2xvciIsInlBeGlzTGFiZWxDb2xvciIsInlBeGlzVW5pdCIsInhBeGlzVGlja0ludGVydmFsIiwieUF4aXNUaWNrSW50ZXJ2YWwiLCJ4QXhpc1RpY2tMYWJlbEZvcm1hdCIsInlBeGlzVGlja0xhYmVsRm9ybWF0IiwicmV2ZXJzZVlBeGlzIiwiYWxsb3dJbnNwZWN0RGF0YSIsInNob3dMZWdlbmQiLCJsZWdlbmRQb3NpdGlvbiIsImxlZ2VuZE9yaWVudGF0aW9uIiwibGVnZW5kQmdDb2xvciIsImxlZ2VuZEJvcmRlckNvbG9yIiwiR2V0R3JhcGhUeXBlIiwiVW5rbm93biIsIkxpbmVJbmZvIiwibGluZUNvbG9yIiwibGluZVdpZHRoIiwic2hvd0xpbmUiLCJzaG93UG9pbnQiLCJwb2ludENvbG9yIiwicG9pbnRCb3JkZXJDb2xvciIsInBvaW50Qm9yZGVyV2lkdGgiLCJwb2ludFNpemUiLCJmaWxsR2FwIiwieUF4aXNMb2NhdGlvbiIsIkxpbmUiLCJCYXJJbmZvIiwiYmFyQ29sb3IiLCJCYXIiLCJQaWVJbmZvIiwiZGF0YUNvbG9yIiwiZGF0YU5hbWUiLCJsYWJlbCIsImhpZGVMYWJlbExlc3NUaGFuIiwiZXh0TGFiZWwiLCJzaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsIiwicmF0aW9Jbm5lclJhZGl1cyIsIlBpZSIsIlN1bW1hcnlJbmZvIiwidGVtcGxhdGUiLCJTdW1tYXJ5IiwiTW9udGhJbmZvIiwibW9kZSIsInN0YXJ0V2Vla09uIiwidGhyZXNob2xkIiwiZGltTm90SW5Nb250aCIsImluaXRNb250aCIsInNob3dTZWxlY3RlZFZhbHVlIiwiaGVhZGVyWWVhckNvbG9yIiwiaGVhZGVyTW9udGhDb2xvciIsImRpdmlkaW5nTGluZUNvbG9yIiwic2hvd0NpcmNsZSIsInNob3dTdHJlYWsiLCJzaG93VG9kYXlSaW5nIiwic2hvd1NlbGVjdGVkUmluZyIsImNpcmNsZUNvbG9yIiwiY2lyY2xlQ29sb3JCeVZhbHVlIiwidG9kYXlSaW5nQ29sb3IiLCJzZWxlY3RlZFJpbmdDb2xvciIsInNob3dBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzIiwic2VsZWN0ZWREYXRlIiwic2VsZWN0ZWREYXRhc2V0IiwiTW9udGgiLCJIZWF0bWFwSW5mbyIsIm9yaWVudGF0aW9uIiwiSGVhdG1hcCIsIkJ1bGxldEluZm8iLCJ2YWx1ZVVuaXQiLCJ2YWx1ZUNvbG9yIiwicmFuZ2VDb2xvciIsInNob3dNYXJrZXIiLCJtYXJrZXJWYWx1ZSIsIm1hcmtlckNvbG9yIiwiQnVsbGV0IiwiaGVpZ2h0IiwicmVjYWxjdWxhdGVTaXplIiwiVGFibGVEYXRhIiwiZmlsZVBhdGgiLCJ0YWJsZUluZGV4IiwieURhdGFzZXRzIiwiQ29sbGVjdGluZ1Byb2Nlc3NJbmZvIiwiZmlsZVRvdGFsIiwiZmlsZUF2YWlsYWJsZSIsImZpbGVPdXRPZkRhdGVSYW5nZSIsImZpbGVOb3RJbkZvcm1hdCIsImVycm9yTWVzc2FnZSIsIm1pbkRhdGUiLCJtYXhEYXRlIiwiZ290QW55VmFsaWRYVmFsdWUiLCJnb3RBbnlWYWxpZFlWYWx1ZSIsImZtdEhvdXJzIiwiZm10TWlucyIsImZtdFNlY3MiLCJmbXRIb3VyIiwiZm10TWluIiwiZm10U2VjIiwiZm10IiwibWFrZVRpbWVGb3JtYXQiLCJnZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nIiwiaW5wdXRTdHJpbmciLCJkYXRlU3RyaW5nIiwic3RhcnRzV2l0aCIsInN0clRvRGF0ZSIsInN0ckRhdGUiLCJlbmRzV2l0aCIsIklTT184NjAxIiwic3RhcnRPZiIsImV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyIsInN0ckR1cmF0aW9uIiwidW5pdHMiLCJyZW1vdmVQYXR0ZXJuIiwic3RyUmVnZXgiLCJwYXJzZUR1cmF0aW9uU3RyaW5nIiwiaGFzVmFsdWUiLCJuZWdhdGl2ZVZhbHVlIiwieWVhclZhbHVlIiwibW9udGhWYWx1ZSIsIndlZWtWYWx1ZSIsImRheVZhbHVlIiwiaG91clZhbHVlIiwibWludXRlVmFsdWUiLCJzZWNvbmRWYWx1ZSIsImdldERhdGVCeUR1cmF0aW9uVG9Ub2RheSIsInJlbERhdGVTdHJpbmciLCJpc0R1cmF0aW9uIiwiZ2V0RGF0ZVRvZGF5IiwiaXNWYWxpZCIsImRhdGVUb1N0ciIsImdldERhdGVGcm9tVW5peFRpbWUiLCJ1bml4VGltZSIsImRlZXBWYWx1ZSIsIm9iaiIsInN0ciIsInRyaW1CeUNoYXIiLCJjaGFyIiwiYXJyIiwiZmlyc3QiLCJmaW5kSW5kZXgiLCJsYXN0IiwicmVwbGFjZUltZ1RhZ0J5QWx0IiwiZW1vamkiLCJwYXJzZUZsb2F0RnJvbUFueSIsInRvUGFyc2UiLCJ0aW1lVmFsdWUiLCJkaWZmIiwiVGltZSIsImtleXMiLCJzdHJSZXBsYWNlZFZhbHVlIiwibWVhc3VyZVRleHRTaXplIiwic3R5bGVDbGFzcyIsImNvbnRhaW5lciIsImQzLnNlbGVjdCIsInRleHRCbG9jayIsImdldEJCb3giLCJleHBhbmRBcmVhIiwiYXJlYSIsImFkZFciLCJhZGRIIiwibmV3V2lkdGgiLCJuZXdIZWlnaHQiLCJtb3ZlQXJlYSIsInNoaWZ0WCIsInNoaWZ0WSIsInRyYW5zIiwiY2xlYW5UZXh0IiwiSnNlcCIsInZlcnNpb24iLCJhZGRVbmFyeU9wIiwib3BfbmFtZSIsIm1heF91bm9wX2xlbiIsInVuYXJ5X29wcyIsImFkZEJpbmFyeU9wIiwicHJlY2VkZW5jZSIsImlzUmlnaHRBc3NvY2lhdGl2ZSIsIm1heF9iaW5vcF9sZW4iLCJiaW5hcnlfb3BzIiwicmlnaHRfYXNzb2NpYXRpdmUiLCJhZGRJZGVudGlmaWVyQ2hhciIsImFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFycyIsImFkZExpdGVyYWwiLCJsaXRlcmFsX25hbWUiLCJsaXRlcmFsX3ZhbHVlIiwibGl0ZXJhbHMiLCJyZW1vdmVVbmFyeU9wIiwiZ2V0TWF4S2V5TGVuIiwicmVtb3ZlQWxsVW5hcnlPcHMiLCJyZW1vdmVJZGVudGlmaWVyQ2hhciIsInJlbW92ZUJpbmFyeU9wIiwicmVtb3ZlQWxsQmluYXJ5T3BzIiwicmVtb3ZlTGl0ZXJhbCIsInJlbW92ZUFsbExpdGVyYWxzIiwiZXhwciIsImNvZGUiLCJpc0RlY2ltYWxEaWdpdCIsImNoIiwiYmluYXJ5UHJlY2VkZW5jZSIsIm9wX3ZhbCIsImlzSWRlbnRpZmllclN0YXJ0IiwiZnJvbUNoYXJDb2RlIiwiaXNJZGVudGlmaWVyUGFydCIsInRocm93RXJyb3IiLCJtZXNzYWdlIiwiZGVzY3JpcHRpb24iLCJydW5Ib29rIiwiaG9va3MiLCJlbnYiLCJydW4iLCJzZWFyY2hIb29rIiwiZ29iYmxlU3BhY2VzIiwiU1BBQ0VfQ09ERSIsIlRBQl9DT0RFIiwiTEZfQ09ERSIsIkNSX0NPREUiLCJnb2JibGVFeHByZXNzaW9ucyIsIkNPTVBPVU5EIiwiYm9keSIsInVudGlsSUNvZGUiLCJjaF9pIiwiU0VNQ09MX0NPREUiLCJDT01NQV9DT0RFIiwiZ29iYmxlRXhwcmVzc2lvbiIsImdvYmJsZUJpbmFyeUV4cHJlc3Npb24iLCJnb2JibGVCaW5hcnlPcCIsInRvX2NoZWNrIiwic3Vic3RyIiwidGNfbGVuIiwiYmlvcCIsInByZWMiLCJzdGFjayIsImJpb3BfaW5mbyIsImN1cl9iaW9wIiwiZ29iYmxlVG9rZW4iLCJyaWdodF9hIiwiY29tcGFyZVByZXYiLCJwcmV2IiwiQklOQVJZX0VYUCIsIm9wZXJhdG9yIiwiUEVSSU9EX0NPREUiLCJnb2JibGVOdW1lcmljTGl0ZXJhbCIsIlNRVU9URV9DT0RFIiwiRFFVT1RFX0NPREUiLCJnb2JibGVTdHJpbmdMaXRlcmFsIiwiT0JSQUNLX0NPREUiLCJnb2JibGVBcnJheSIsImFyZ3VtZW50IiwiVU5BUllfRVhQIiwiZ29iYmxlSWRlbnRpZmllciIsIkxJVEVSQUwiLCJyYXciLCJ0aGlzX3N0ciIsIlRISVNfRVhQIiwiT1BBUkVOX0NPREUiLCJnb2JibGVHcm91cCIsImdvYmJsZVRva2VuUHJvcGVydHkiLCJRVU1BUktfQ09ERSIsIm9wdGlvbmFsIiwiTUVNQkVSX0VYUCIsImNvbXB1dGVkIiwiQ0JSQUNLX0NPREUiLCJDQUxMX0VYUCIsImdvYmJsZUFyZ3VtZW50cyIsIkNQQVJFTl9DT0RFIiwiY2FsbGVlIiwiY2hDb2RlIiwic3RhcnRJbmRleCIsInF1b3RlIiwiY2xvc2VkIiwiSURFTlRJRklFUiIsInRlcm1pbmF0aW9uIiwic2VwYXJhdG9yX2NvdW50IiwiYXJnIiwiU0VRVUVOQ0VfRVhQIiwiZXhwcmVzc2lvbnMiLCJBUlJBWV9FWFAiLCJlbGVtZW50cyIsImZvckVhY2giLCJwbHVnaW5zIiwianNlcCIsInJlZ2lzdGVyZWQiLCJyZWdpc3RlciIsInBsdWdpbiIsIkNPTE9OX0NPREUiLCJTZXQiLCJ0cnVlIiwiZmFsc2UiLCJudWxsIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInRlcm5hcnkiLCJjb25zZXF1ZW50IiwiYWx0ZXJuYXRlIiwibmV3VGVzdCIsImNoZWNrRGl2aXNvciIsImRpdmlzb3IiLCJzb21lIiwibm90X3N0cmluZyIsIm5vdF9ib29sIiwibm90X3R5cGUiLCJub3RfcHJpbWl0aXZlIiwibnVtZXJpY19hcmciLCJqc29uIiwibm90X2pzb24iLCJtb2R1bG8iLCJwbGFjZWhvbGRlciIsImtleV9hY2Nlc3MiLCJpbmRleF9hY2Nlc3MiLCJzcHJpbnRmIiwicGFyc2VfdHJlZSIsImFyZ3YiLCJwaCIsInBhZF9jaGFyYWN0ZXIiLCJwYWRfbGVuZ3RoIiwiaXNfcG9zaXRpdmUiLCJjdXJzb3IiLCJ0cmVlX2xlbmd0aCIsInBhcmFtX25vIiwiRnVuY3Rpb24iLCJKU09OIiwic3RyaW5naWZ5IiwicGFkX2NoYXIiLCJyZXBlYXQiLCJzcHJpbnRmX2Zvcm1hdCIsInNwcmludGZfY2FjaGUiLCJfZm10IiwiYXJnX25hbWVzIiwiU3ludGF4RXJyb3IiLCJmaWVsZF9saXN0IiwicmVwbGFjZW1lbnRfZmllbGQiLCJmaWVsZF9tYXRjaCIsInNwcmludGZfcGFyc2UiLCJ2c3ByaW50ZiIsImV4cG9ydHMiLCJmbk1hcERhdGFzZXRUb1ZhbHVlIiwiZDMubWluIiwiYXJyYXlEYXRhc2V0IiwiZGF0YVBvaW50IiwiZDMubWF4IiwiZDMuc3VtIiwibnVtRGF5cyIsIm51bURheXNIYXZpbmdEYXRhIiwibWF4U3RyZWFrIiwic3RyZWFrIiwibWF4U3RyZWFrU3RhcnQiLCJzdHJlYWtTdGFydCIsIm1heFN0cmVha0VuZCIsInN0cmVha0VuZCIsIm5leHRQb2ludCIsIm1heEJyZWFrcyIsImJyZWFrcyIsIm1heEJyZWFrc1N0YXJ0IiwiYnJlYWtzU3RhcnQiLCJtYXhCcmVha3NFbmQiLCJicmVha3NFbmQiLCJsYXN0U3RyZWFrIiwiY3VycmVudFN0cmVhayIsImN1cnJlbnRTdHJlYWtTdGFydCIsImN1cnJlbnRTdHJlYWtFbmQiLCJjdXJyZW50QnJlYWtzIiwiY3VycmVudEJyZWFrc1N0YXJ0IiwiY3VycmVudEJyZWFrc0VuZCIsImF2ZXJhZ2UiLCJkMy5tZWRpYW4iLCJ2YXJpYW5jZSIsIm1lYW4iLCJkMy52YXJpYW5jZSIsImZuTWFwVW5pcnlPcCIsImZuTWFwQmluYXJ5T3AiLCJmbk1hcERhdGFzZXRUb0RhdGFzZXQiLCJub3JtYWxpemVkIiwic2V0TWlzc2luZ1ZhbHVlcyIsIm1pc3NpbmdWYWx1ZSIsIm5ld0RhdGFzZXQiLCJldmFsdWF0ZSIsImlkZW50aWZpZXJOYW1lIiwidW5pcnlFeHByIiwicmV0VW5pcnlBcmciLCJiaW5hcnlFeHByIiwibGVmdFZhbHVlIiwicmlnaHRWYWx1ZSIsInJldENoZWNrIiwiaXNNb21lbnQiLCJjaGVja0JpbmFyeU9wZXJhbnRUeXBlIiwiY2FsbEV4cHIiLCJmbk5hbWUiLCJldmFsdWF0ZWRBcmdzIiwiZXZhbHVhdGVBcnJheSIsImRhdGFzZXRJZCIsImRzIiwiZXhwck1hcCIsImV4cHJSZWdleCIsImZ1bGxtYXRjaCIsImFzdCIsImVyciIsInJlc29sdmVUZW1wbGF0ZSIsInJldFJlc29sdmUiLCJleHByUmVzb2x2ZWQiLCJzdHJWYWx1ZSIsImhlbHBlci5kYXRlVG9TdHIiLCJyZXNvbHZlVmFsdWUiLCJyZW5kZXJQaWUiLCJjYW52YXMiLCJjaGFydEVsZW1lbnRzIiwicGllSW5mbyIsInJhZGl1cyIsIm91dHRlclJhZGl1cyIsInN0ckV4cHIiLCJyZXRWYWx1ZSIsImV4cHIucmVzb2x2ZVZhbHVlIiwibGFiZWxzIiwicmV0TGFiZWwiLCJleHByLnJlc29sdmVUZW1wbGF0ZSIsImxhYmVsU2l6ZXMiLCJoZWxwZXIubWVhc3VyZVRleHRTaXplIiwiZXh0TGFiZWxzIiwicmV0RXh0TGFiZWwiLCJleHRMYWJlbFNpemVzIiwiY29sb3JTY2FsZSIsImQzLnNjYWxlT3JkaW5hbCIsInNlY3RvcnNHcm91cCIsImRhdGFBcmVhIiwic29ydFZhbHVlcyIsImFyY3MiLCJwYSIsImQzLnBpZSIsInBpZVZhbHVlcyIsInNlY3RvcnMiLCJkMy5hcmMiLCJoaWRkZW5BcmMiLCJkM1xuICAgICAgICAuYXJjIiwiaXNMYWJlbEhpZGRlbiIsImFyY09iaiIsImdldE1pZEFuZ2xlIiwiZ2V0UG9pbnRzRm9yQ29ubmVjdGlvbkxpbmVzIiwibGFiZWxXaWR0aCIsImV4dExhYmVsV2lkdGgiLCJtaWRBbmdsZSIsInBvc0xhYmVsIiwicG9zTWlkZGxlIiwicG9zRXh0TGFiZWwiLCJkaXN0TWlkZGxlVG9MYWJlbCIsInJlbmRlclBpZUNoYXJ0IiwicHJvcHMiLCJkM1xuICAgICAgICAuc2VsZWN0IiwiZ3JhcGhBcmVhIiwiY3JlYXRlQXJlYXMiLCJkZWZhdWx0RGF0YUNvbG9yIiwiZDMuc2NoZW1lU3BlY3RyYWwiLCJ0aXRsZVNpemUiLCJoZWxwZXIuZXhwYW5kQXJlYSIsImhlbHBlci5tb3ZlQXJlYSIsInJlbmRlclRpdGxlIiwidGl0bGVIZWlnaHQiLCJuYW1lU2l6ZXMiLCJpbmRNYXhOYW1lIiwibWF4TmFtZVdpZHRoIiwiY2hhcmFjdGVyV2lkdGgiLCJuYW1lSGVpZ2h0IiwibnVtTmFtZXMiLCJ4U3BhY2luZyIsInlTcGFjaW5nIiwibWFya2VyV2lkdGgiLCJsZWdlbmRXaWR0aCIsImxlZ2VuZEhlaWdodCIsImxlZ2VuZFgiLCJsZWdlbmRZIiwibGVnZW5kIiwibGVnZW5kQmciLCJmaXJzdE1hcmtlclgiLCJmaXJzdE1hcmtlclkiLCJmaXJzdExhYmVsWCIsImZpcnN0TGFiZWxZIiwiY3VyclJlbmRlclBvc1giLCJyZW5kZXJMZWdlbmQiLCJfY2FudmFzIiwic3ZnV2lkdGgiLCJzdmdIZWlnaHQiLCJzZXRDaGFydFNjYWxlIiwicmVuZGVyU3VtbWFyeSIsInN1bW1hcnlJbmZvIiwib3V0cHV0U3VtbWFyeSIsInJldFJlc29sdmVkVGVtcGxhdGUiLCJvdXRwdXRMaW5lcyIsIm91dHB1dExpbmUiLCJsb2dUb0NvbnNvbGUiLCJyYXRpb0NlbGxUb1RleHQiLCJyYXRpb0RvdFRvVGV4dCIsInRvTmV4dERhdGFzZXQiLCJtb250aEluZm8iLCJkYXRhc2V0SWRzIiwiY3VyRGF0YXNldElkIiwiY3VySW5kZXgiLCJjbGVhclNlbGVjdGlvbiIsImNpcmNsZXMiLCJjaXJjbGUiLCJtb25pdG9yIiwicmVuZGVyTW9udGhIZWFkZXIiLCJjdXJNb250aERhdGUiLCJkYXlzSW5Nb250aCIsIm1heERheVRleHRTaXplIiwiY2VsbFNpemUiLCJoZWFkZXJZZWFyVGV4dCIsImhlYWRlck1vbnRoVGV4dCIsImhlYWRlclllYXJTaXplIiwiaGVhZGVyTW9udGhTaXplIiwiaGVhZGVySGVpZ2h0IiwiaGVhZGVyR3JvdXAiLCJoZWFkZXJNb250aCIsImhlYWRlclllYXIiLCJkYXRhc2V0TmFtZVNpemUiLCJkYXRhc2V0Um90YXRvciIsInJlZnJlc2giLCJtb25pdG9yVGV4dFNpemUiLCJhcnJvd1NpemUiLCJwcmV2TW9udGhEYXRlIiwibmV4dE1vbnRoRGF0ZSIsInRvZGF5RGF0ZSIsImhlbHBlci5nZXREYXRlVG9kYXkiLCJ3ZWVrZGF5TmFtZXMiLCJ3ZWVrZGF5TmFtZVNpemUiLCJkaXZpZGluZ0xpbmUiLCJyZW5kZXJNb250aERheXMiLCJjdXJEYXRhc2V0SW5kZXgiLCJkb3RSYWRpdXMiLCJzdHJlYWtXaWR0aCIsImFsbG93U2NhbGVkVmFsdWUiLCJtb250aFN0YXJ0RGF0ZSIsInN1YnRyYWN0IiwibW9udGhFbmREYXRlIiwiZW5kT2YiLCJkYXRhU3RhcnREYXRlIiwiZGF0YUVuZERhdGUiLCJhbm5vdGF0aW9ucyIsImN1ckFubm90YXRpb24iLCJkYXlzSW5Nb250aFZpZXciLCJpbmRDb2wiLCJpbmRSb3ciLCJoZWxwZXIuc3RyVG9EYXRlIiwiaXNJblRoaXNNb250aCIsImlzT3V0T2ZEYXRhUmFuZ2UiLCJjdXJWYWx1ZSIsImNvbnNvbGUiLCJzY2FsZWRWYWx1ZSIsIm5leHRWYWx1ZSIsInByZXZWYWx1ZSIsInN0cmVha0luIiwic3RyZWFrT3V0IiwidGV4dEFubm90YXRpb24iLCJkYXRhc2V0SW5kZXgiLCJkYXlJbk1vbnRoIiwicm93IiwiY29sIiwidG90YWxEYXlCbG9ja1dpZHRoIiwiZDNcbiAgICAgICAgLnNjYWxlTGluZWFyIiwic3RyZWFrQ29sb3IiLCJzdHJlYWtIZWlnaHQiLCJkMy5pbnRlcnBvbGF0ZUxhYiIsInRvZGF5IiwidG9kYXlSaW5ncyIsInZhbHVlVGV4dCIsInRyYW5zWCIsInRyYW5zWSIsImdyYXBoQXJlYVdpZHRoIiwiZ3JhcGhBcmVhSGVpZ2h0IiwidG90YWxIZWlnaHQiLCJoZWFkZXIiLCJ0b3RhbFdpZHRoIiwicmVuZGVyTW9udGgiLCJudW1BdmFpbGFibGVEYXRhc2V0IiwibW9udGhEYXRlIiwiaGVscGVyLmdldERhdGVCeUR1cmF0aW9uVG9Ub2RheSIsInJlbmRlckhlYXRtYXAiLCJoZWF0bWFwSW5mbyIsInJlbmRlckJ1bGxldCIsImJ1bGxldEluZm8iLCJyZXRSZW5kZXJBeGlzIiwibGFzdFJhbmdlIiwidGlja0Zvcm1hdEZuIiwiZDMudGlja0Zvcm1hdCIsIm1heFRpY2tMYWJlbFNpemUiLCJkMy5zY2FsZUxpbmVhciIsImF4aXNHZW4iLCJkMy5heGlzQm90dG9tIiwiZDMuYXhpc0xlZnQiLCJyZW5kZXJBeGlzIiwieE1pZGRsZSIsImF4aXNXaWR0aCIsInVuaXRTaXplIiwibGFzdEJvdW5kIiwicmVuZGVyQmFja1BhbmVsIiwicmV0UmVuZGVyQmFyIiwicmV0QWN0dWFsVmFsdWUiLCJhY3R1YWxWYWx1ZSIsImJhcldpZHRoIiwicmVuZGVyQmFyIiwibWFya2VyTGVuZ3RoIiwicmVuZGVyTWFyayIsInJlbmRlclhBeGlzIiwiY2hhcnRJbmZvIiwieERvbWFpbiIsImQzLmV4dGVudCIsInhTY2FsZSIsImQzXG4gICAgICAgIC5zY2FsZVRpbWUiLCJ0aWNrSW50ZXJ2YWxJbkR1cmF0aW9uIiwiaGVscGVyLnBhcnNlRHVyYXRpb25TdHJpbmciLCJmaXJzdERhdGUiLCJsYXN0RGF0ZSIsImQzLnRpbWVEYXkiLCJ0b0RhdGUiLCJhc0RheXMiLCJkMy50aW1lV2VlayIsImQzLnRpbWVNb250aCIsImQzLnRpbWVZZWFyIiwiZ2V0WFRpY2tWYWx1ZXMiLCJpblRpY2tMYWJlbEZvcm1hdCIsImZuVGlja0xhYmVsRm9ybWF0IiwidGlja0xhYmVsRm9ybWF0IiwiZDMudGltZUZvcm1hdCIsImdldFhUaWNrTGFiZWxGb3JtYXQiLCJ4QXhpc0dlbiIsInhBeGlzIiwidGV4dFNpemUiLCJ4QXhpc1RpY2tMYWJlbHMiLCJ0aWNrTGFiZWxIZWlnaHQiLCJyZW5kZXJZQXhpcyIsInlNaW5PZkRhdGFzZXRzIiwieU1heE9mRGF0YXNldHMiLCJ0bXBWYWx1ZUlzVGltZSIsInZhbHVlSXNUaW1lIiwieU1pbkFzc2lnbmVkIiwieU1heEFzc2lnbmVkIiwieVRtcCIsInlUbXBBc3NpZ25lZCIsInlMb3dlciIsInlVcHBlciIsInlFeHRlbnQiLCJ5U2NhbGUiLCJ5QXhpc0xhYmVsVGV4dCIsInlBeGlzVW5pdFRleHQiLCJ5QXhpc0dlbiIsImlzVGltZVZhbHVlIiwiYWJzRXh0ZW50IiwiZ2V0WVRpY2tMYWJlbEZvcm1hdCIsImQzLnJhbmdlIiwiYXNTZWNvbmRzIiwiZ2V0WVRpY2tWYWx1ZXMiLCJ5QXhpcyIsInlBeGlzTGluZSIsInlBeGlzVGlja3MiLCJ5QXhpc1RpY2tMYWJlbHMiLCJtYXhUaWNrTGFiZWxXaWR0aCIsImxhYmVsU2l6ZSIsInlBeGlzTGFiZWxTaXplIiwieUF4aXNXaWR0aCIsInJlbmRlckxpbmUiLCJsZWZ0WVNjYWxlIiwicmlnaHRZU2NhbGUiLCJsaW5lR2VuIiwiZGVmaW5lZCIsImN1cnZlIiwiZGVmaW5lZDAiLCJwb2ludFgiLCJwb2ludFkiLCJkM1xuICAgICAgICAgICAgLmxpbmUiLCJyZW5kZXJQb2ludHMiLCJkb3RzIiwiaXNJbnRlZ2VyIiwidGFyZ2V0RWxlbWVudHMiLCJ0b29sdGlwIiwidG9vbHRpcEJnIiwidG9vbHRpcExhYmVsIiwidG9vbHRpcExhYmVsRGF0ZSIsInRvb2x0aXBMYWJlbFZhbHVlIiwic291cmNlRXZlbnQiLCJjdXJyZW50VGFyZ2V0Iiwib3duZXJTVkdFbGVtZW50IiwiY3JlYXRlU1ZHUG9pbnQiLCJjbGllbnRYIiwiY2xpZW50WSIsIm1hdHJpeFRyYW5zZm9ybSIsImdldFNjcmVlbkNUTSIsImludmVyc2UiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJjbGllbnRMZWZ0IiwiY2xpZW50VG9wIiwicGFnZVgiLCJwYWdlWSIsImQzLnBvaW50ZXIiLCJ0b29sdGlwQmdXaWR0aCIsInRvb2x0aXBCZ0hlaWdodCIsImxhYmVsRGF0ZVRleHQiLCJsYWJlbERhdGVTaXplIiwibGFiZWxWYWx1ZVRleHQiLCJsYWJlbFZhbHVlU2l6ZSIsInRvb2x0aXBQb3NYIiwidG9vbHRpcFBvc1kiLCJ0b29sdGlwWE9mZnNldCIsInRvb2x0aXBZT2Zmc2V0IiwicmVuZGVyVG9vbHRpcCIsImN1cnJCYXJTZXQiLCJ0b3RhbE51bU9mQmFyU2V0cyIsImJhclNldFdpZHRoIiwiYmFycyIsInBvcnRpb25WaXNpYmxlIiwibGVmdFlBeGlzIiwicmlnaHRZQXhpcyIsInhBeGlzSGVpZ2h0IiwibGVmdFlBeGlzV2lkdGgiLCJyaWdodFlBeGlzV2lkdGgiLCJ4RGF0YXNldElkcyIsIm51bUVsZW1zRXhjbHVkZWQiLCJuYW1lTGFiZWxzIiwicG9zWCIsInJlbmRlckxpbmVDaGFydCIsImRhdGFzZXRPbkxlZnRZQXhpcyIsImRhdGFzZXRPblJpZ2h0WUF4aXMiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsInJldFJlbmRlckxlZnRZQXhpcyIsInJldFJlbmRlclJpZ2h0WUF4aXMiLCJyZW5kZXJCYXJDaGFydCIsInN0clRvQm9vbCIsInZhbGlkYXRlU2VhcmNoVHlwZSIsInZhbGlkYXRlWUF4aXNMb2NhdGlvbiIsInZhbGlkYXRlQ29sb3IiLCJzcGxpdElucHV0QnlDb21tYSIsImR1bW15Iiwic3BsaXR0ZWQiLCJnZXRCb29sQXJyYXlGcm9tSW5wdXQiLCJudW1EYXRhc2V0IiwiZGVmYXVsdFZhbHVlIiwiYWxsb3dOb1ZhbGlkVmFsdWUiLCJudW1WYWxpZFZhbHVlIiwiY3VyciIsImN1cnJCb29sIiwiaW5wdXRCb29sIiwiZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQiLCJoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkiLCJjdXJyTnVtIiwiaW5wdXROdW0iLCJnZXRTdHJpbmdGcm9tSW5wdXQiLCJoZWxwZXIucmVwbGFjZUltZ1RhZ0J5QWx0IiwiZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQiLCJ2YWxpZGF0b3IiLCJzdHJOdW1iZXIiLCJnZXROdW1iZXJBcnJheSIsIm51bUFycmF5IiwiZWxlbSIsInBpZWNlIiwiZ2V0U3RyaW5nQXJyYXkiLCJzdHJBcnJheSIsInBhcnNlQ29tbW9uQ2hhcnRJbmZvIiwieWFtbCIsInJldFlBeGlzTGFiZWwiLCJyZXRZQXhpc0NvbG9yIiwicmV0WUF4aXNMYWJlbENvbG9yIiwicmV0WUF4aXNVbml0IiwicmV0WUF4aXNUaWNrSW50ZXJ2YWwiLCJyZXRZQXhpc1RpY2tMYWJlbEZvcm1hdCIsInJldFlNaW4iLCJyZXRZTWF4IiwicmV0UmV2ZXJzZVlBeGlzIiwiZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MiLCJvYmplY3RLZXlzIiwiZ2V0RGF0ZUZyb21GaWxlbmFtZSIsImhlbHBlci5nZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nIiwiYmFzZW5hbWUiLCJnZXREYXRlRnJvbUZyb250bWF0dGVyIiwiZmlsZUNhY2hlIiwiZnJvbnRNYXR0ZXIiLCJmcm9udG1hdHRlciIsImhlbHBlci5kZWVwVmFsdWUiLCJleHRyYWN0RGF0ZVVzaW5nUmVnZXhXaXRoVmFsdWUiLCJnZXREYXRlRnJvbVRhZyIsImNvbnRlbnQiLCJ0YWdOYW1lIiwiZ2V0RGF0ZUZyb21UZXh0IiwiZ2V0RGF0ZUZyb21EdkZpZWxkIiwiZHZUYXJnZXQiLCJnZXREYXRlRnJvbUZpbGVNZXRhIiwiVEZpbGUiLCJoZWxwZXIuZ2V0RGF0ZUZyb21Vbml4VGltZSIsInN0YXQiLCJjdGltZSIsIm10aW1lIiwiZ2V0RGF0ZUZyb21UYXNrIiwiVGFzayIsIlRhc2tEb25lIiwiVGFza05vdERvbmUiLCJhZGRUb0RhdGFNYXAiLCJkYXRhTWFwIiwicXVlcnlWYWx1ZVBhaXJzIiwiZXh0cmFjdERhdGFVc2luZ1JlZ2V4V2l0aE11bHRpcGxlVmFsdWVzIiwieFZhbHVlTWFwIiwibWVhc3VyZSIsImV4dHJhY3RlZCIsInJldFBhcnNlIiwiY29sbGVjdERhdGFGcm9tRmlsZU1ldGEiLCJ4VmFsdWUiLCJwYXR0ZXJuIiwiaGVscGVyLmdldFdvcmRDb3VudCIsIm51bUNoYXJzIiwibnVtU2VudGVuY2VzIiwiaGVscGVyLmdldFNlbnRlbmNlQ291bnQiLCJ0YXJnZXRNZWFzdXJlIiwidGFyZ2V0RXhpc3QiLCJERUZBVUxUX1NFVFRJTkdTIiwiVHJhY2tlclNldHRpbmdUYWIiLCJQbHVnaW5TZXR0aW5nVGFiIiwiYXBwIiwiZGlzcGxheSIsImNvbnRhaW5lckVsIiwiU2V0dGluZyIsInNldERlc2MiLCJhZGRUZXh0Iiwic2V0UGxhY2Vob2xkZXIiLCJzZXR0aW5ncyIsIm9uQ2hhbmdlIiwic2F2ZVNldHRpbmdzIiwiVHJhY2tlciIsIlBsdWdpbiIsIm9ubG9hZCIsImxvYWRTZXR0aW5ncyIsImFkZFNldHRpbmdUYWIiLCJyZWdpc3Rlck1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yIiwicG9zdHByb2Nlc3NvciIsImFkZENvbW1hbmQiLCJhZGRDb2RlQmxvY2siLCJsb2FkRGF0YSIsInNhdmVEYXRhIiwicmVuZGVyRXJyb3JNZXNzYWdlIiwiZWwiLCJyZW5kZXJpbmcucmVuZGVyRXJyb3JNZXNzYWdlIiwib251bmxvYWQiLCJnZXRGaWxlc0luRm9sZGVyIiwiaW5jbHVkZVN1YkZvbGRlcnMiLCJmaWxlcyIsIml0ZW0iLCJleHRlbnNpb24iLCJURm9sZGVyIiwiZ2V0RmlsZXMiLCJmb2xkZXJUb1NlYXJjaCIsInVzZVNwZWNpZmllZEZpbGVzT25seSIsInNwZWNpZmllZEZpbGVzIiwiZmlsZXNDb250YWluc0xpbmtlZEZpbGVzIiwidmF1bHQiLCJnZXRBYnN0cmFjdEZpbGVCeVBhdGgiLCJub3JtYWxpemVQYXRoIiwiZm9sZGVyRmlsZXMiLCJsaW5rZWRGaWxlTXVsdGlwbGllciIsInNlYXJjaEZpbGVNdWx0aWZwaWVyQWZ0ZXJMaW5rIiwibWV0YWRhdGFDYWNoZSIsImdldEZpbGVDYWNoZSIsImxpbmVzIiwiYWRhcHRlciIsInJlYWQiLCJsaW5rcyIsImxpbmsiLCJsaW5rZWRGaWxlIiwiZ2V0Rmlyc3RMaW5rcGF0aERlc3QiLCJsaW5lTnVtYmVyIiwib3JpZ2luYWwiLCJjdHgiLCJ5YW1sVGV4dCIsInRhYlNpemUiLCJnZXRDb25maWciLCJzcGFjZXMiLCJyZXRSZW5kZXJJbmZvIiwicGFyc2VZYW1sIiwia2V5c0ZvdW5kSW5ZQU1MIiwibnVtRGF0YXNldHMiLCJyZXRTZWFyY2hUeXBlIiwic3RyVHlwZSIsIlRhZyIsIkZyb250bWF0dGVyIiwiV2lraSIsIldpa2lMaW5rIiwiV2lraURpc3BsYXkiLCJUZXh0IiwiZHZGaWVsZCIsIkZpbGVNZXRhIiwibXVsdGlwbGVWYWx1ZVNwYXJhdG9yIiwicmV0TXVsdGlwbGVWYWx1ZVNwYXJhdG9yIiwicmV0WERhdGFzZXQiLCJrZXlzT2ZSZW5kZXJJbmZvIiwiYWRkaXRpb25hbEFsbG93ZWRLZXlzIiwieWFtbExpbmVLZXlzIiwieWFtbEJhcktleXMiLCJ5YW1sUGllS2V5cyIsInlhbWxTdW1tYXJ5S2V5cyIsInlhbWxNb250aEtleXMiLCJ5YW1sSGVhdG1hcEtleXMiLCJ5YW1sQnVsbGV0S2V5cyIsInlhbWxDdXN0b21EYXRhc2V0S2V5cyIsImN1c3RvbURhdGFzZXRJZCIsInN0ckN1c3RvbURhdGFzZXRJZCIsImFic3RyYWN0Rm9sZGVyIiwicmV0RmlsZXMiLCJzdHJTdGFydERhdGUiLCJpc1N0YXJ0RGF0ZVZhbGlkIiwic3RyRW5kRGF0ZSIsImlzRW5kRGF0ZVZhbGlkIiwicmV0RGF0YXNldE5hbWUiLCJpbmRVbnRpdGxlZCIsInJldENvbnN0VmFsdWUiLCJyZXRJZ25vcmVBdHRhY2hlZFZhbHVlIiwicmV0SWdub3JlWmVyb1ZhbHVlIiwicmV0QWNjdW0iLCJyZXRQZW5hbHR5IiwicmV0VmFsdWVTaGlmdCIsInJldFNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbiIsInJhdGlvUmVnRXgiLCJwYXJ0cyIsInJldE1hcmdpbiIsImRhdGFzZXRLZXkiLCJ5YW1sQ3VzdG9tRGF0YXNldCIsImtleXNPZkN1c3RvbURhdGFzZXRJbmZvIiwicmV0WERhdGEiLCJudW1YRGF0YSIsInJldFlEYXRhIiwibGluZUtleSIsInlhbWxMaW5lIiwia2V5c09mTGluZUluZm8iLCJyZXRQYXJzZUNvbW1vbkNoYXJ0SW5mbyIsInJldExpbmVDb2xvciIsInJldExpbmVXaWR0aCIsInJldFNob3dMaW5lIiwicmV0U2hvd1BvaW50IiwicmV0UG9pbnRDb2xvciIsInJldFBvaW50Qm9yZGVyQ29sb3IiLCJyZXRQb2ludEJvcmRlcldpZHRoIiwicmV0UG9pbnRTaXplIiwicmV0RmlsbEdhcCIsInJldFlBeGlzTG9jYXRpb24iLCJiYXJLZXkiLCJ5YW1sQmFyIiwia2V5c09mQmFySW5mbyIsInJldEJhckNvbG9yIiwicGllS2V5IiwieWFtbFBpZSIsImtleXNPZlBpZUluZm8iLCJyZXREYXRhIiwibnVtRGF0YSIsInJldERhdGFDb2xvciIsInJldERhdGFOYW1lIiwiZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uIiwic3VtbWFyeUtleSIsInlhbWxTdW1tYXJ5Iiwia2V5c09mU3VtbWFyeUluZm8iLCJtb250aEtleSIsInlhbWxNb250aCIsImtleXNPZk1vbnRoSW5mbyIsInJldERhdGFzZXQiLCJyZXRUaHJlc2hvbGQiLCJpbmREYXRhc2V0IiwicmV0QW5ub3RhdGlvbiIsImhlYXRtYXBLZXkiLCJ5YW1sSGVhdG1hcCIsImtleXNPZkhlYXRtYXBJbmZvIiwiYnVsbGV0S2V5IiwieWFtbEJ1bGxldCIsImtleXNPZkJ1bGxldEluZm8iLCJyZXRSYW5nZSIsIm51bVJhbmdlIiwicmV0UmFuZ2VDb2xvciIsImdldFJlbmRlckluZm9Gcm9tWWFtbCIsInByb2Nlc3NJbmZvIiwibG9vcEZpbGVQcm9taXNlcyIsInNraXBUaGlzRmlsZSIsInhEYXRhc2V0SWQiLCJ4RGF0ZSIsImNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21GaWxlbmFtZSIsInhEYXRhc2V0UXVlcnkiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tRnJvbnRtYXR0ZXIiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tVGFnIiwiY29sbGVjdGluZy5nZXREYXRlRnJvbVRleHQiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tRHZGaWVsZCIsImNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21GaWxlTWV0YSIsImNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21UYXNrIiwibG9vcFF1ZXJ5UHJvbWlzZXMiLCJnb3RBbnlWYWx1ZSIsImZyb250TWF0dGVyVGFncyIsInRhZ3MiLCJ0YWdNZWFzdXJlIiwidGFnRXhpc3QiLCJzcGxpdHRlZFBhcnQiLCJwYXJ0IiwidGFnIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlclRhZyIsImNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tRnJvbnRtYXR0ZXJLZXkiLCJ0ZXh0VG9TZWFyY2giLCJ3aWtpVGV4dCIsImRpc3BsYXlUZXh0IiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21XaWtpIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21JbmxpbmVUYWciLCJjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbVRleHQiLCJjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbUZpbGVNZXRhIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21EdkZpZWxkIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21UYXNrIiwiYWxsIiwiY29sbGVjdERhdGFGcm9tVGFibGUiLCJkYXRlRXJyb3JNZXNzYWdlIiwicGFpciIsImluZFBhaXIiLCJjb2xsZWN0ZWQiLCJyZXRSZW5kZXIiLCJyZXQiLCJwaWUucmVuZGVyUGllQ2hhcnQiLCJzdW1tYXJ5LnJlbmRlclN1bW1hcnkiLCJidWxsZXQucmVuZGVyQnVsbGV0IiwibW9udGgucmVuZGVyTW9udGgiLCJoZWF0bWFwLnJlbmRlckhlYXRtYXAiLCJyZW5kZXJpbmcucmVuZGVyIiwidGFibGVRdWVyaWVzIiwidGFibGVzIiwidGFibGVGaWxlTm90Rm91bmQiLCJpc1giLCJ0YWJsZSIsInRhYmxlRGF0YSIsInlEYXRhc2V0UXVlcmllcyIsInRleHRUYWJsZSIsIm1kVGFibGVSZWdleCIsImluZFRhYmxlIiwidGFibGVMaW5lcyIsIm51bUNvbHVtbnMiLCJudW1EYXRhUm93cyIsImhlYWRlckxpbmUiLCJoZWxwZXIudHJpbUJ5Q2hhciIsInNlcExpbmUiLCJzcGVwTGluZVNwbGl0dGVkIiwiY29sdW1uWERhdGFzZXQiLCJ4VmFsdWVzIiwidGFibGVMaW5lIiwiZGF0YVJvd1NwbGl0dGVkIiwieURhdGFzZXRRdWVyeSIsImNvbHVtbk9mSW50ZXJlc3QiLCJpbmRMaW5lIiwiY29sbGVjdGluZy5hZGRUb0RhdGFNYXAiLCJnZXRFZGl0b3IiLCJ3b3Jrc3BhY2UiLCJnZXRBY3RpdmVWaWV3T2ZUeXBlIiwiTWFya2Rvd25WaWV3IiwiZWRpdG9yIiwib3V0cHV0VHlwZSIsImFjdGl2ZUxlYWYiLCJ2aWV3IiwiY29kZWJsb2NrVG9JbnNlcnQiLCJpbnNlcnRUb05leHRMaW5lIiwiZ2V0Q3Vyc29yIiwiZ2V0TGluZSIsInNldFNlbGVjdGlvbiIsInJlcGxhY2VTZWxlY3Rpb24iXSwibWFwcGluZ3MiOiJ1Q0FrSE8sU0FBU0EsRUFBVUMsRUFBU0MsRUFBWUMsRUFBR0MsR0FFOUMsT0FBTyxJQUFLRCxJQUFNQSxFQUFJRSxXQUFVLFNBQVVDLEVBQVNDLEdBQy9DLFNBQVNDLEVBQVVDLEdBQVMsSUFBTUMsRUFBS04sRUFBVU8sS0FBS0YsR0FBUSxDQUFHLE1BQU9HLEdBQUtMLEVBQU9LLEdBQU8sQ0FDM0YsU0FBU0MsRUFBU0osR0FBUyxJQUFNQyxFQUFLTixFQUFpQixNQUFFSyxHQUFVLENBQUMsTUFBT0csR0FBS0wsRUFBT0ssR0FBTyxDQUM5RixTQUFTRixFQUFLSSxHQUpsQixJQUFlTCxFQUlhSyxFQUFPQyxLQUFPVCxFQUFRUSxFQUFPTCxRQUoxQ0EsRUFJeURLLEVBQU9MLE1BSmhEQSxhQUFpQk4sRUFBSU0sRUFBUSxJQUFJTixHQUFFLFNBQVVHLEdBQVdBLEVBQVFHLEVBQU8sS0FJaEJPLEtBQUtSLEVBQVdLLEVBQVksQ0FDOUdILEdBQU1OLEVBQVlBLEVBQVVhLE1BQU1oQixFQUFTQyxHQUFjLEtBQUtTLE9BQ3RFLEdBQ0EsQ0MxSGUsU0FBU08sRUFBVUMsRUFBR0MsR0FDbkMsT0FBWSxNQUFMRCxHQUFrQixNQUFMQyxFQUFZQyxJQUFNRixFQUFJQyxHQUFLLEVBQUlELEVBQUlDLEVBQUksRUFBSUQsR0FBS0MsRUFBSSxFQUFJQyxHQUM5RSxDQ0ZlLFNBQVNDLEVBQVdILEVBQUdDLEdBQ3BDLE9BQVksTUFBTEQsR0FBa0IsTUFBTEMsRUFBWUMsSUFDNUJELEVBQUlELEdBQUssRUFDVEMsRUFBSUQsRUFBSSxF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QUFVbVMsTUFFeEMxOUMsRUFBUWttRSxFQUFTbG1FLE1BRWJrMUUsRUFBVUwsRUFBUXR6RSxRQUNsQnN6RSxFQUFRSyxLQUVSdEUsRUFBWTEyQixvQkFBWjAyQixFQUFZMTJCLG1CQUFzQixHQUNsQ2k3QixHQUNJdlAsRUFDQXZZLEdBQ0l3bkIsRUFBUUssR0FDUi9qQyxFQUFXTCxZQUVma2tDLEVBQ0FoMUUsSUFJZixDQUNKLENBRURrMUUsR0FDSCxDQUNKLENBQ0osSUFDSixDQUVELFNBQUFFLEdBQ0ksT0FBTzF5RSxLQUFLcWtFLElBQUlzTyxVQUFVQyxvQkFBb0JDLEVBQUFBLGNBQWNDLE1BQy9ELENBRUQsWUFBQXZOLENBQWF3TixHQUdULEtBRm9CL3lFLEtBQUtxa0UsSUFBSXNPLFVBQVVLLFdBQVdDLGdCQUVyQkosRUFBQUEsY0FDekIsT0FHSixJQUFJSyxFQUFvQixHQUN4QixPQUFRSCxHQUNKLEtBQUtucUMsR0FBVTBLLEtBQ1g0L0IsRUFBb0IseUtBV3BCLE1BQ0osS0FBS3RxQyxHQUFVNkssSUFDWHkvQixFQUFvQix1S0FXcEIsTUFDSixLQUFLdHFDLEdBQVV5TCxRQUNYNitCLEVBQW9CLDBMQWVGLEtBQXRCQSxHQUNtQmx6RSxLQUFLbXpFLGlCQUFpQkQsRUFJaEQsQ0FFRCxnQkFBQUMsQ0FBaUIzckUsR0FDYixJQUFJc3JFLEVBQVM5eUUsS0FBSzB5RSxZQUVsQixHQUFJSSxFQUFRLENBQ1IsSUFBSXZ0QixFQUFTdXRCLEVBQU9NLFlBQ2hCNUwsRUFBYWppQixFQUFPaitDLEtBQ3BCQSxFQUFPd3JFLEVBQU9PLFFBQVE3TCxHQU0xQixPQUpBamlCLEVBQU90SCxHQUFLMzJDLEVBQUt6SSxPQUNqQmkwRSxFQUFPUSxhQUFhL3RCLEdBQ3BCdXRCLEVBQU9TLGlCQUFpQixLQUFPL3JFLElBRXhCLENBQ1YsQ0FFRCxPQUFPLENBQ1YiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxMjcsMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjgsMTcwLDE3MSwxNzMsMTc5LDE4MCwxODEsMTgyXX0=